protected void processAttList(StdXMLReader reader) throws Exception {
    if (!XMLUtil.checkLiteral(reader, "TTLIST")) {
      XMLUtil.skipTag(reader);
      return;
    }

    XMLUtil.skipWhitespace(reader, null);
    String str = XMLUtil.read(reader, '%');
    char ch = str.charAt(0);
    while (ch == '%') {
      XMLUtil.processEntity(str, reader, parameterEntityResolver);
      str = XMLUtil.read(reader, '%');
      ch = str.charAt(0);
    }
    reader.unread(ch);
    String elementName = XMLUtil.scanIdentifier(reader);
    XMLUtil.skipWhitespace(reader, null);

    str = XMLUtil.read(reader, '%');
    ch = str.charAt(0);
    while (ch == '%') {
      XMLUtil.processEntity(str, reader, parameterEntityResolver);
      str = XMLUtil.read(reader, '%');
      ch = str.charAt(0);
    }

    Properties props = new Properties();

    while (ch != '>') {
      reader.unread(ch);
      String attName = XMLUtil.scanIdentifier(reader);
      XMLUtil.skipWhitespace(reader, null);
      str = XMLUtil.read(reader, '%');
      ch = str.charAt(0);
      while (ch == '%') {
        XMLUtil.processEntity(str, reader, parameterEntityResolver);
        str = XMLUtil.read(reader, '%');
        ch = str.charAt(0);
      }

      if (ch == '(') {
        while (ch != ')') {
          str = XMLUtil.read(reader, '%');
          ch = str.charAt(0);
          while (ch == '%') {
            XMLUtil.processEntity(str, reader, parameterEntityResolver);
            str = XMLUtil.read(reader, '%');
            ch = str.charAt(0);
          }
        }
      }
      else {
        reader.unread(ch);
        XMLUtil.scanIdentifier(reader);
      }

      XMLUtil.skipWhitespace(reader, null);
      str = XMLUtil.read(reader, '%');
      ch = str.charAt(0);
      while (ch == '%') {
        XMLUtil.processEntity(str, reader, parameterEntityResolver);
        str = XMLUtil.read(reader, '%');
        ch = str.charAt(0);
      }

      if (ch == '#') {
        str = XMLUtil.scanIdentifier(reader);
        XMLUtil.skipWhitespace(reader, null);

        if (!str.equals("FIXED")) {
          XMLUtil.skipWhitespace(reader, null);

          str = XMLUtil.read(reader, '%');
          ch = str.charAt(0);
          while (ch == '%') {
            XMLUtil.processEntity(str, reader, parameterEntityResolver);
            str = XMLUtil.read(reader, '%');
            ch = str.charAt(0);
          }

          continue;
        }
      }
      else {
        reader.unread(ch);
      }

      String value = XMLUtil.scanString(reader, '%', parameterEntityResolver);
      props.setProperty(attName, value);
      XMLUtil.skipWhitespace(reader, null);

      str = XMLUtil.read(reader, '%');
      ch = str.charAt(0);
      while (ch == '%') {
        XMLUtil.processEntity(str, reader, parameterEntityResolver);
        str = XMLUtil.read(reader, '%');
        ch = str.charAt(0);
      }
    }

    if (!props.isEmpty()) {
      attributeDefaultValues.put(elementName, props);
    }
  }
protected void processAttList(StdXMLReader reader)