예제 #1
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);
  }