예제 #1
0
 /**
  * This method gets called when an end tag is encountered.
  *
  * @param uri the Uniform Resource Identifier
  * @param lname the local name (without prefix), or the empty string if Namespace processing is
  *     not being performed.
  * @param name the name of the tag that ends
  */
 public void endElement(String uri, String lname, String name) {
   // System.err.println("End: " + name);
   name = name.toLowerCase();
   if (ElementTags.PARAGRAPH.equals(name)) {
     try {
       document.add((Element) stack.pop());
       return;
     } catch (DocumentException e) {
       throw new ExceptionConverter(e);
     }
   }
   if (HtmlTagMap.isHead(name)) {
     // we do nothing
     return;
   }
   if (HtmlTagMap.isTitle(name)) {
     if (currentChunk != null) {
       bodyAttributes.put(ElementTags.TITLE, currentChunk.getContent());
     }
     return;
   }
   if (HtmlTagMap.isMeta(name)) {
     // we do nothing
     return;
   }
   if (HtmlTagMap.isLink(name)) {
     // we do nothing
     return;
   }
   if (HtmlTagMap.isBody(name)) {
     // we do nothing
     return;
   }
   if (myTags.containsKey(name)) {
     XmlPeer peer = (XmlPeer) myTags.get(name);
     if (ElementTags.TABLE.equals(peer.getTag())) {
       tableBorder = false;
     }
     super.handleEndingTags(peer.getTag());
     return;
   }
   // super.handleEndingTags is replaced with handleEndingTags
   // suggestion by Ken Auer
   handleEndingTags(name);
 }
예제 #2
0
  /**
   * This method gets called when a start tag is encountered.
   *
   * @param uri the Uniform Resource Identifier
   * @param lname the local name (without prefix), or the empty string if Namespace processing is
   *     not being performed.
   * @param name the name of the tag that is encountered
   * @param attrs the list of attributes
   */
  public void startElement(String uri, String lname, String name, Attributes attrs) {
    // System.err.println("Start: " + name);

    // super.handleStartingTags is replaced with handleStartingTags
    // suggestion by Vu Ngoc Tan/Hop
    name = name.toLowerCase();
    if (HtmlTagMap.isHtml(name)) {
      // we do nothing
      return;
    }
    if (HtmlTagMap.isHead(name)) {
      // we do nothing
      return;
    }
    if (HtmlTagMap.isTitle(name)) {
      // we do nothing
      return;
    }
    if (HtmlTagMap.isMeta(name)) {
      // we look if we can change the body attributes
      String meta = null;
      String content = null;
      if (attrs != null) {
        for (int i = 0; i < attrs.getLength(); i++) {
          String attribute = attrs.getQName(i);
          if (attribute.equalsIgnoreCase(HtmlTags.CONTENT)) content = attrs.getValue(i);
          else if (attribute.equalsIgnoreCase(HtmlTags.NAME)) meta = attrs.getValue(i);
        }
      }
      if (meta != null && content != null) {
        bodyAttributes.put(meta, content);
      }
      return;
    }
    if (HtmlTagMap.isLink(name)) {
      // we do nothing for the moment, in a later version we could extract
      // the style sheet
      return;
    }
    if (HtmlTagMap.isBody(name)) {
      // maybe we could extract some info about the document: color,
      // margins,...
      // but that's for a later version...
      XmlPeer peer = new XmlPeer(ElementTags.ITEXT, name);
      peer.addAlias(ElementTags.TOP, HtmlTags.TOPMARGIN);
      peer.addAlias(ElementTags.BOTTOM, HtmlTags.BOTTOMMARGIN);
      peer.addAlias(ElementTags.RIGHT, HtmlTags.RIGHTMARGIN);
      peer.addAlias(ElementTags.LEFT, HtmlTags.LEFTMARGIN);
      bodyAttributes.putAll(peer.getAttributes(attrs));
      handleStartingTags(peer.getTag(), bodyAttributes);
      return;
    }
    if (myTags.containsKey(name)) {
      XmlPeer peer = (XmlPeer) myTags.get(name);
      if (ElementTags.TABLE.equals(peer.getTag()) || ElementTags.CELL.equals(peer.getTag())) {
        Properties p = peer.getAttributes(attrs);
        String value;
        if (ElementTags.TABLE.equals(peer.getTag())
            && (value = p.getProperty(ElementTags.BORDERWIDTH)) != null) {
          if (Float.parseFloat(value + "f") > 0) {
            tableBorder = true;
          }
        }
        if (tableBorder) {
          p.put(ElementTags.LEFT, String.valueOf(true));
          p.put(ElementTags.RIGHT, String.valueOf(true));
          p.put(ElementTags.TOP, String.valueOf(true));
          p.put(ElementTags.BOTTOM, String.valueOf(true));
        }
        handleStartingTags(peer.getTag(), p);
        return;
      }
      handleStartingTags(peer.getTag(), peer.getAttributes(attrs));
      return;
    }
    Properties attributes = new Properties();
    if (attrs != null) {
      for (int i = 0; i < attrs.getLength(); i++) {
        String attribute = attrs.getQName(i).toLowerCase();
        attributes.setProperty(attribute, attrs.getValue(i).toLowerCase());
      }
    }
    handleStartingTags(name, attributes);
  }