OSDN Git Service

2005-04-19 Andrew John Hughes <gnu_andrew@member.fsf.org>
authormkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Apr 2005 12:19:44 +0000 (12:19 +0000)
committermkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Apr 2005 12:19:44 +0000 (12:19 +0000)
* gnu/xml/dom/html2/DomHTMLParser.java:
Changed 'enum' references to become 'enumeration'.

2005-04-19  Audrius Meskauskas  <audriusa@bluewin.ch>

* gnu/xml/dom/html2/DomHTMLParser.java: New file.

2005-04-19  Andrew John Hughes  <gnu_andrew@member.fsf.org>

* gnu/javax/swing/text/html/parser/htmlAttributeSet.java:
(getAttributeNames()): Replaced 'enum' with 'enumeration'.
* gnu/javax/swing/text/html/parser/htmlValidator.java:
(validateParameters(TagElement,htmlAttributeSet)):
Replaced 'enum' with 'enumeration'.
(validateAttribute(TagElement,htmlAttributeSet,Enumeration,Enumeration)):
Likewise.

2005-04-19  Audrius Meskauskas  <audriusa@bluewin.ch>

* javax/swing/text/html/parser/Entity.java (getType): New method.
* javax/swing/text/html/parser/DocumentParser.java:
Inherit from javax.swing.text.html.parser.Parser.

2005-04-19  Chris Burdess  <dog@gnu.org>

* gnu/xml/dom/html2/DomHTMLDocument.java: Fixed element creation and
check for HTML/XHTML namespace.

2005-04-19  Audrius Meskauskas  <audriusa@bluewin.ch>

* javax/swing/text/html/parser/Parser.java,
javax/swing/text/html/parser/Entity.java:
Inheriting from DTDConstants.
* javax/swing/text/html/parser/AttributeList.java
(getValues): Changed return type.
* javax/swing/text/html/parser/DocumentParser
(parse): Adding the callback parameter that receives
the parsing events.

2005-04-19  Chris Burdess  <dog@gnu.org>

* gnu/xml/dom/DomImpl.java,
gnu/xml/dom/html2/DomHTMLAnchorElement.java,
gnu/xml/dom/html2/DomHTMLDocument.java,
gnu/xml/dom/html2/DomHTMLElement.java,
gnu/xml/dom/html2/DomHTMLFormElement.java,
gnu/xml/dom/html2/DomHTMLFrameElement.java,
gnu/xml/dom/html2/DomHTMLIFrameElement.java,
gnu/xml/dom/html2/DomHTMLImpl.java,
gnu/xml/dom/html2/DomHTMLInputElement.java,
gnu/xml/dom/html2/DomHTMLObjectElement.java,
gnu/xml/dom/html2/DomHTMLOptionElement.java,
gnu/xml/dom/html2/DomHTMLSelectElement.java,
gnu/xml/dom/html2/DomHTMLTableCellElement.java,
gnu/xml/dom/html2/DomHTMLTableElement.java,
gnu/xml/dom/html2/DomHTMLTableRowElement.java,
gnu/xml/dom/html2/DomHTMLTableSectionElement.java,
gnu/xml/dom/html2/DomHTMLTextAreaElement.java: JAXP integration,
UI events, and tree utility functions.

2005-04-19  Michael Koch  <konqueror@gmx.de>

* gnu/javax/swing/text/html/parser/HTML_401F.java,
gnu/javax/swing/text/html/parser/gnuDTD.java,
gnu/javax/swing/text/html/parser/models/node.java:
Reworked import statements.

2005-04-19  Audrius Meskauskas, Lithuania  <AudriusA@Bioinformatics.org>

* javax/swing/text/html/HTMLDocument.java: New file.

2005-04-19  Michael Koch  <konqueror@gmx.de>

* javax/swing/text/html/HTMLFrameHyperlinkEvent.java:
Reformatted.
* javax/swing/text/html/parser/AttributeList.java:
Fixed order of modifiers.
(AttributeList): Made final.
* javax/swing/text/html/parser/ContentModel.java:
Fixed html characters in javadocs.
* javax/swing/text/html/parser/DTD.java
(DTD): Don't implement java.io.Serializable directly.
(getElement): Simplified.
* javax/swing/text/html/parser/DTDConstants.java:
Reformatted file.
* javax/swing/text/html/parser/Element.java:
Fixed order of modifiers.
* javax/swing/text/html/parser/Parser.java:
Reformatted. Don't use fully-qualified class names.
* javax/swing/text/html/parser/ParserDelegator.java:
Fixed order of modifiers.
* javax/swing/text/rtf/RTFParser.java:
Re-ordered import statements.
* javax/swing/text/rtf/RTFScanner.java:
Removed unused import statement.

2005-04-19  Chris Burdess  <dog@gnu.org>

* gnu/xml/dom/html2/DomHTMLButtonElement.java,
gnu/xml/dom/html2/DomHTMLCollection.java,
gnu/xml/dom/html2/DomHTMLDocument.java,
gnu/xml/dom/html2/DomHTMLElement.java: Extensions for new element
types.
* gnu/xml/dom/html2/DomHTMLDListElement.java,
gnu/xml/dom/html2/DomHTMLDirectoryElement.java,
gnu/xml/dom/html2/DomHTMLDivElement.java,
gnu/xml/dom/html2/DomHTMLFieldSetElement.java,
gnu/xml/dom/html2/DomHTMLFontElement.java,
gnu/xml/dom/html2/DomHTMLFormElement.java,
gnu/xml/dom/html2/DomHTMLFrameElement.java,
gnu/xml/dom/html2/DomHTMLFrameSetElement.java,
gnu/xml/dom/html2/DomHTMLHRElement.java,
gnu/xml/dom/html2/DomHTMLHeadElement.java,
gnu/xml/dom/html2/DomHTMLHeadingElement.java,
gnu/xml/dom/html2/DomHTMLHtmlElement.java,
gnu/xml/dom/html2/DomHTMLIFrameElement.java,
gnu/xml/dom/html2/DomHTMLImageElement.java,
gnu/xml/dom/html2/DomHTMLInputElement.java,
gnu/xml/dom/html2/DomHTMLIsIndexElement.java,
gnu/xml/dom/html2/DomHTMLLIElement.java,
gnu/xml/dom/html2/DomHTMLLabelElement.java,
gnu/xml/dom/html2/DomHTMLLegendElement.java,
gnu/xml/dom/html2/DomHTMLLinkElement.java,
gnu/xml/dom/html2/DomHTMLMapElement.java,
gnu/xml/dom/html2/DomHTMLMenuElement.java,
gnu/xml/dom/html2/DomHTMLMetaElement.java,
gnu/xml/dom/html2/DomHTMLModElement.java,
gnu/xml/dom/html2/DomHTMLOListElement.java,
gnu/xml/dom/html2/DomHTMLObjectElement.java,
gnu/xml/dom/html2/DomHTMLOptGroupElement.java,
gnu/xml/dom/html2/DomHTMLOptionElement.java,
gnu/xml/dom/html2/DomHTMLParagraphElement.java,
gnu/xml/dom/html2/DomHTMLParamElement.java,
gnu/xml/dom/html2/DomHTMLPreElement.java,
gnu/xml/dom/html2/DomHTMLQuoteElement.java,
gnu/xml/dom/html2/DomHTMLScriptElement.java,
gnu/xml/dom/html2/DomHTMLSelectElement.java,
gnu/xml/dom/html2/DomHTMLStyleElement.java,
gnu/xml/dom/html2/DomHTMLTableCaptionElement.java,
gnu/xml/dom/html2/DomHTMLTableCellElement.java,
gnu/xml/dom/html2/DomHTMLTableColElement.java,
gnu/xml/dom/html2/DomHTMLTableElement.java,
gnu/xml/dom/html2/DomHTMLTableRowElement.java,
gnu/xml/dom/html2/DomHTMLTableSectionElement.java,
gnu/xml/dom/html2/DomHTMLTextAreaElement.java,
gnu/xml/dom/html2/DomHTMLTitleElement.java,
gnu/xml/dom/html2/DomHTMLUListElement.java: New files.

2005-04-19  Audrius Meskauskas  <audriusa@bluewin.ch>

* javax/swing/text/ChangedCharSetException.java,
javax/swing/text/html/HTMLEditorKit.java,
javax/swing/text/html/HTMLFrameHyperlinkEvent.java,
javax/swing/text/html/parser/AttributeList.java,
javax/swing/text/html/parser/ContentModel.java,
javax/swing/text/html/parser/DocumentParser.java,
javax/swing/text/html/parser/DTD.java,
javax/swing/text/html/parser/DTDConstants.java,
javax/swing/text/html/parser/Element.java,
javax/swing/text/html/parser/Entity.java,
javax/swing/text/html/parser/Parser.java,
javax/swing/text/html/parser/TagElement.java,
gnu/javax/swing/text/html/package.html,
gnu/javax/swing/text/html/parser/gnuDTD.java,
gnu/javax/swing/text/html/parser/HTML_401F.java,
gnu/javax/swing/text/html/parser/htmlAttributeSet.java,
gnu/javax/swing/text/html/parser/htmlValidator.java,
gnu/javax/swing/text/html/parser/package.html,
gnu/javax/swing/text/html/parser/models/list.java,
gnu/javax/swing/text/html/parser/models/node.java,
gnu/javax/swing/text/html/parser/models/noTagModel.java,
gnu/javax/swing/text/html/parser/models/package.html,
gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java,
gnu/javax/swing/text/html/parser/models/TableRowContentModel.java,
gnu/javax/swing/text/html/parser/models/transformer.java,
gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java,
gnu/javax/swing/text/html/parser/support/package.html,
gnu/javax/swing/text/html/parser/support/parameterDefaulter.java,
gnu/javax/swing/text/html/parser/support/Parser.java,
gnu/javax/swing/text/html/parser/support/textPreProcessor.java,
gnu/javax/swing/text/html/parser/support/low/Buffer.java,
gnu/javax/swing/text/html/parser/support/low/Constants.java,
gnu/javax/swing/text/html/parser/support/low/Location.java,
gnu/javax/swing/text/html/parser/support/low/node.java,
gnu/javax/swing/text/html/parser/support/low/package.html,
gnu/javax/swing/text/html/parser/support/low/ParseException.java,
gnu/javax/swing/text/html/parser/support/low/pattern.java,
gnu/javax/swing/text/html/parser/support/low/Queue.java,
gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java:
New files.
* javax/swing/text/html/HTML.java,
javax/swing/text/html/parser/ParserDelegator.java:
New files (replacing).
* javax/swing/text/html/package.html,
javax/swing/text/html/parser/package.html: Documenting the
packages.

2005-04-19  Chris Burdess  <dog@gnu.org>

* gnu/xml/dom/html2/DomHTMLAnchorElement.java,
gnu/xml/dom/html2/DomHTMLAppletElement.java,
gnu/xml/dom/html2/DomHTMLAreaElement.java,
gnu/xml/dom/html2/DomHTMLBaseElement.java,
gnu/xml/dom/html2/DomHTMLBaseFontElement.java,
gnu/xml/dom/html2/DomHTMLBodyElement.java,
gnu/xml/dom/html2/DomHTMLBRElement.java,
gnu/xml/dom/html2/DomHTMLButtonElement.java,
gnu/xml/dom/html2/DomHTMLCollection.java,
gnu/xml/dom/html2/DomHTMLDocument.java,
gnu/xml/dom/html2/DomHTMLElement.java: New files.

2005-04-19  Michael Koch  <konqueror@gmx.de>

* Makefile.am: Added new files.
* Makefile.in: Regenerated.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@98406 138bc75d-0d04-0410-961f-82ee72b054a4

104 files changed:
libjava/ChangeLog
libjava/Makefile.am
libjava/Makefile.in
libjava/gnu/javax/swing/text/html/package.html [new file with mode: 0644]
libjava/gnu/javax/swing/text/html/parser/HTML_401F.java [new file with mode: 0755]
libjava/gnu/javax/swing/text/html/parser/gnuDTD.java [new file with mode: 0755]
libjava/gnu/javax/swing/text/html/parser/htmlAttributeSet.java [new file with mode: 0644]
libjava/gnu/javax/swing/text/html/parser/htmlValidator.java [new file with mode: 0644]
libjava/gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java [new file with mode: 0755]
libjava/gnu/javax/swing/text/html/parser/models/TableRowContentModel.java [new file with mode: 0755]
libjava/gnu/javax/swing/text/html/parser/models/list.java [new file with mode: 0755]
libjava/gnu/javax/swing/text/html/parser/models/noTagModel.java [new file with mode: 0755]
libjava/gnu/javax/swing/text/html/parser/models/node.java [new file with mode: 0755]
libjava/gnu/javax/swing/text/html/parser/models/package.html [new file with mode: 0644]
libjava/gnu/javax/swing/text/html/parser/models/transformer.java [new file with mode: 0755]
libjava/gnu/javax/swing/text/html/parser/package.html [new file with mode: 0644]
libjava/gnu/javax/swing/text/html/parser/support/Parser.java [new file with mode: 0755]
libjava/gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java [new file with mode: 0755]
libjava/gnu/javax/swing/text/html/parser/support/low/Buffer.java [new file with mode: 0644]
libjava/gnu/javax/swing/text/html/parser/support/low/Constants.java [new file with mode: 0755]
libjava/gnu/javax/swing/text/html/parser/support/low/Location.java [new file with mode: 0644]
libjava/gnu/javax/swing/text/html/parser/support/low/ParseException.java [new file with mode: 0644]
libjava/gnu/javax/swing/text/html/parser/support/low/Queue.java [new file with mode: 0755]
libjava/gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java [new file with mode: 0755]
libjava/gnu/javax/swing/text/html/parser/support/low/Token.java [new file with mode: 0644]
libjava/gnu/javax/swing/text/html/parser/support/low/node.java [new file with mode: 0644]
libjava/gnu/javax/swing/text/html/parser/support/low/package.html [new file with mode: 0644]
libjava/gnu/javax/swing/text/html/parser/support/low/pattern.java [new file with mode: 0755]
libjava/gnu/javax/swing/text/html/parser/support/package.html [new file with mode: 0644]
libjava/gnu/javax/swing/text/html/parser/support/parameterDefaulter.java [new file with mode: 0755]
libjava/gnu/javax/swing/text/html/parser/support/textPreProcessor.java [new file with mode: 0755]
libjava/gnu/xml/dom/DomImpl.java
libjava/gnu/xml/dom/html2/DomHTMLAnchorElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLAppletElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLAreaElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLBRElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLBaseElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLBaseFontElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLBodyElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLButtonElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLCollection.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLDListElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLDirectoryElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLDivElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLDocument.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLFieldSetElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLFontElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLFormElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLFrameElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLFrameSetElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLHRElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLHeadElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLHeadingElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLHtmlElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLIFrameElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLImageElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLImpl.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLInputElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLIsIndexElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLLIElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLLabelElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLLegendElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLLinkElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLMapElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLMenuElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLMetaElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLModElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLOListElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLObjectElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLOptGroupElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLOptionElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLParagraphElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLParamElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLParser.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLPreElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLQuoteElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLScriptElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLSelectElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLStyleElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLTableCellElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLTableColElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLTableElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLTableRowElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLTableSectionElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLTextAreaElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLTitleElement.java [new file with mode: 0644]
libjava/gnu/xml/dom/html2/DomHTMLUListElement.java [new file with mode: 0644]
libjava/javax/swing/text/ChangedCharSetException.java [new file with mode: 0644]
libjava/javax/swing/text/html/HTML.java
libjava/javax/swing/text/html/HTMLDocument.java [new file with mode: 0644]
libjava/javax/swing/text/html/HTMLEditorKit.java [new file with mode: 0755]
libjava/javax/swing/text/html/HTMLFrameHyperlinkEvent.java [new file with mode: 0644]
libjava/javax/swing/text/html/parser/AttributeList.java [new file with mode: 0755]
libjava/javax/swing/text/html/parser/ContentModel.java [new file with mode: 0755]
libjava/javax/swing/text/html/parser/DTD.java [new file with mode: 0755]
libjava/javax/swing/text/html/parser/DTDConstants.java [new file with mode: 0755]
libjava/javax/swing/text/html/parser/DocumentParser.java [new file with mode: 0644]
libjava/javax/swing/text/html/parser/Element.java [new file with mode: 0755]
libjava/javax/swing/text/html/parser/Entity.java [new file with mode: 0644]
libjava/javax/swing/text/html/parser/Parser.java [new file with mode: 0755]
libjava/javax/swing/text/html/parser/ParserDelegator.java
libjava/javax/swing/text/html/parser/TagElement.java [new file with mode: 0755]

index 49677a3..47d5f4f 100644 (file)
@@ -1,3 +1,221 @@
+2005-04-19  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+
+       * gnu/xml/dom/html2/DomHTMLParser.java:
+       Changed 'enum' references to become 'enumeration'.
+
+2005-04-19  Audrius Meskauskas  <audriusa@bluewin.ch>
+
+       * gnu/xml/dom/html2/DomHTMLParser.java: New file.
+
+2005-04-19  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+
+       * gnu/javax/swing/text/html/parser/htmlAttributeSet.java:
+       (getAttributeNames()): Replaced 'enum' with 'enumeration'.
+       * gnu/javax/swing/text/html/parser/htmlValidator.java:
+       (validateParameters(TagElement,htmlAttributeSet)):
+       Replaced 'enum' with 'enumeration'.
+       (validateAttribute(TagElement,htmlAttributeSet,Enumeration,Enumeration)):
+       Likewise.
+
+2005-04-19  Audrius Meskauskas  <audriusa@bluewin.ch>
+
+       * javax/swing/text/html/parser/Entity.java (getType): New method.
+       * javax/swing/text/html/parser/DocumentParser.java:
+       Inherit from javax.swing.text.html.parser.Parser.
+
+2005-04-19  Chris Burdess  <dog@gnu.org>
+
+       * gnu/xml/dom/html2/DomHTMLDocument.java: Fixed element creation and
+       check for HTML/XHTML namespace.
+
+2005-04-19  Audrius Meskauskas  <audriusa@bluewin.ch>
+
+       * javax/swing/text/html/parser/Parser.java,
+       javax/swing/text/html/parser/Entity.java:
+       Inheriting from DTDConstants.
+       * javax/swing/text/html/parser/AttributeList.java
+       (getValues): Changed return type.
+       * javax/swing/text/html/parser/DocumentParser
+       (parse): Adding the callback parameter that receives
+       the parsing events.
+
+2005-04-19  Chris Burdess  <dog@gnu.org>
+
+       * gnu/xml/dom/DomImpl.java,
+       gnu/xml/dom/html2/DomHTMLAnchorElement.java,
+       gnu/xml/dom/html2/DomHTMLDocument.java,
+       gnu/xml/dom/html2/DomHTMLElement.java,
+       gnu/xml/dom/html2/DomHTMLFormElement.java,
+       gnu/xml/dom/html2/DomHTMLFrameElement.java,
+       gnu/xml/dom/html2/DomHTMLIFrameElement.java,
+       gnu/xml/dom/html2/DomHTMLImpl.java,
+       gnu/xml/dom/html2/DomHTMLInputElement.java,
+       gnu/xml/dom/html2/DomHTMLObjectElement.java,
+       gnu/xml/dom/html2/DomHTMLOptionElement.java,
+       gnu/xml/dom/html2/DomHTMLSelectElement.java,
+       gnu/xml/dom/html2/DomHTMLTableCellElement.java,
+       gnu/xml/dom/html2/DomHTMLTableElement.java,
+       gnu/xml/dom/html2/DomHTMLTableRowElement.java,
+       gnu/xml/dom/html2/DomHTMLTableSectionElement.java,
+       gnu/xml/dom/html2/DomHTMLTextAreaElement.java: JAXP integration,
+       UI events, and tree utility functions.
+
+2005-04-19  Michael Koch  <konqueror@gmx.de>
+
+       * gnu/javax/swing/text/html/parser/HTML_401F.java,
+       gnu/javax/swing/text/html/parser/gnuDTD.java,
+       gnu/javax/swing/text/html/parser/models/node.java:
+       Reworked import statements.
+
+2005-04-19  Audrius Meskauskas, Lithuania  <AudriusA@Bioinformatics.org>
+
+       * javax/swing/text/html/HTMLDocument.java: New file.
+
+2005-04-19  Michael Koch  <konqueror@gmx.de>
+
+       * javax/swing/text/html/HTMLFrameHyperlinkEvent.java:
+       Reformatted.
+       * javax/swing/text/html/parser/AttributeList.java:
+       Fixed order of modifiers.
+       (AttributeList): Made final.
+       * javax/swing/text/html/parser/ContentModel.java:
+       Fixed html characters in javadocs.
+       * javax/swing/text/html/parser/DTD.java
+       (DTD): Don't implement java.io.Serializable directly.
+       (getElement): Simplified.
+       * javax/swing/text/html/parser/DTDConstants.java:
+       Reformatted file.
+       * javax/swing/text/html/parser/Element.java:
+       Fixed order of modifiers.
+       * javax/swing/text/html/parser/Parser.java:
+       Reformatted. Don't use fully-qualified class names.
+       * javax/swing/text/html/parser/ParserDelegator.java:
+       Fixed order of modifiers.
+       * javax/swing/text/rtf/RTFParser.java:
+       Re-ordered import statements.
+       * javax/swing/text/rtf/RTFScanner.java:
+       Removed unused import statement.
+
+2005-04-19  Chris Burdess  <dog@gnu.org>
+
+       * gnu/xml/dom/html2/DomHTMLButtonElement.java,
+       gnu/xml/dom/html2/DomHTMLCollection.java,
+       gnu/xml/dom/html2/DomHTMLDocument.java,
+       gnu/xml/dom/html2/DomHTMLElement.java: Extensions for new element
+       types.
+       * gnu/xml/dom/html2/DomHTMLDListElement.java,
+       gnu/xml/dom/html2/DomHTMLDirectoryElement.java,
+       gnu/xml/dom/html2/DomHTMLDivElement.java,
+       gnu/xml/dom/html2/DomHTMLFieldSetElement.java,
+       gnu/xml/dom/html2/DomHTMLFontElement.java,
+       gnu/xml/dom/html2/DomHTMLFormElement.java,
+       gnu/xml/dom/html2/DomHTMLFrameElement.java,
+       gnu/xml/dom/html2/DomHTMLFrameSetElement.java,
+       gnu/xml/dom/html2/DomHTMLHRElement.java,
+       gnu/xml/dom/html2/DomHTMLHeadElement.java,
+       gnu/xml/dom/html2/DomHTMLHeadingElement.java,
+       gnu/xml/dom/html2/DomHTMLHtmlElement.java,
+       gnu/xml/dom/html2/DomHTMLIFrameElement.java,
+       gnu/xml/dom/html2/DomHTMLImageElement.java,
+       gnu/xml/dom/html2/DomHTMLInputElement.java,
+       gnu/xml/dom/html2/DomHTMLIsIndexElement.java,
+       gnu/xml/dom/html2/DomHTMLLIElement.java,
+       gnu/xml/dom/html2/DomHTMLLabelElement.java,
+       gnu/xml/dom/html2/DomHTMLLegendElement.java,
+       gnu/xml/dom/html2/DomHTMLLinkElement.java,
+       gnu/xml/dom/html2/DomHTMLMapElement.java,
+       gnu/xml/dom/html2/DomHTMLMenuElement.java,
+       gnu/xml/dom/html2/DomHTMLMetaElement.java,
+       gnu/xml/dom/html2/DomHTMLModElement.java,
+       gnu/xml/dom/html2/DomHTMLOListElement.java,
+       gnu/xml/dom/html2/DomHTMLObjectElement.java,
+       gnu/xml/dom/html2/DomHTMLOptGroupElement.java,
+       gnu/xml/dom/html2/DomHTMLOptionElement.java,
+       gnu/xml/dom/html2/DomHTMLParagraphElement.java,
+       gnu/xml/dom/html2/DomHTMLParamElement.java,
+       gnu/xml/dom/html2/DomHTMLPreElement.java,
+       gnu/xml/dom/html2/DomHTMLQuoteElement.java,
+       gnu/xml/dom/html2/DomHTMLScriptElement.java,
+       gnu/xml/dom/html2/DomHTMLSelectElement.java,
+       gnu/xml/dom/html2/DomHTMLStyleElement.java,
+       gnu/xml/dom/html2/DomHTMLTableCaptionElement.java,
+       gnu/xml/dom/html2/DomHTMLTableCellElement.java,
+       gnu/xml/dom/html2/DomHTMLTableColElement.java,
+       gnu/xml/dom/html2/DomHTMLTableElement.java,
+       gnu/xml/dom/html2/DomHTMLTableRowElement.java,
+       gnu/xml/dom/html2/DomHTMLTableSectionElement.java,
+       gnu/xml/dom/html2/DomHTMLTextAreaElement.java,
+       gnu/xml/dom/html2/DomHTMLTitleElement.java,
+       gnu/xml/dom/html2/DomHTMLUListElement.java: New files.
+
+2005-04-19  Audrius Meskauskas  <audriusa@bluewin.ch>
+
+       * javax/swing/text/ChangedCharSetException.java,
+       javax/swing/text/html/HTMLEditorKit.java,
+       javax/swing/text/html/HTMLFrameHyperlinkEvent.java,
+       javax/swing/text/html/parser/AttributeList.java,
+       javax/swing/text/html/parser/ContentModel.java,
+       javax/swing/text/html/parser/DocumentParser.java,
+       javax/swing/text/html/parser/DTD.java,
+       javax/swing/text/html/parser/DTDConstants.java,
+       javax/swing/text/html/parser/Element.java,
+       javax/swing/text/html/parser/Entity.java,
+       javax/swing/text/html/parser/Parser.java,
+       javax/swing/text/html/parser/TagElement.java,
+       gnu/javax/swing/text/html/package.html,
+       gnu/javax/swing/text/html/parser/gnuDTD.java,
+       gnu/javax/swing/text/html/parser/HTML_401F.java,
+       gnu/javax/swing/text/html/parser/htmlAttributeSet.java,
+       gnu/javax/swing/text/html/parser/htmlValidator.java,
+       gnu/javax/swing/text/html/parser/package.html,
+       gnu/javax/swing/text/html/parser/models/list.java,
+       gnu/javax/swing/text/html/parser/models/node.java,
+       gnu/javax/swing/text/html/parser/models/noTagModel.java,
+       gnu/javax/swing/text/html/parser/models/package.html,
+       gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java,
+       gnu/javax/swing/text/html/parser/models/TableRowContentModel.java,
+       gnu/javax/swing/text/html/parser/models/transformer.java,
+       gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java,
+       gnu/javax/swing/text/html/parser/support/package.html,
+       gnu/javax/swing/text/html/parser/support/parameterDefaulter.java,
+       gnu/javax/swing/text/html/parser/support/Parser.java,
+       gnu/javax/swing/text/html/parser/support/textPreProcessor.java,
+       gnu/javax/swing/text/html/parser/support/low/Buffer.java,
+       gnu/javax/swing/text/html/parser/support/low/Constants.java,
+       gnu/javax/swing/text/html/parser/support/low/Location.java,
+       gnu/javax/swing/text/html/parser/support/low/node.java,
+       gnu/javax/swing/text/html/parser/support/low/package.html,
+       gnu/javax/swing/text/html/parser/support/low/ParseException.java,
+       gnu/javax/swing/text/html/parser/support/low/pattern.java,
+       gnu/javax/swing/text/html/parser/support/low/Queue.java,
+       gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java:
+       New files.
+       * javax/swing/text/html/HTML.java,
+       javax/swing/text/html/parser/ParserDelegator.java:
+       New files (replacing).
+       * javax/swing/text/html/package.html,
+       javax/swing/text/html/parser/package.html: Documenting the
+       packages.
+
+2005-04-19  Chris Burdess  <dog@gnu.org>
+
+       * gnu/xml/dom/html2/DomHTMLAnchorElement.java,
+       gnu/xml/dom/html2/DomHTMLAppletElement.java,
+       gnu/xml/dom/html2/DomHTMLAreaElement.java,
+       gnu/xml/dom/html2/DomHTMLBaseElement.java,
+       gnu/xml/dom/html2/DomHTMLBaseFontElement.java,
+       gnu/xml/dom/html2/DomHTMLBodyElement.java,
+       gnu/xml/dom/html2/DomHTMLBRElement.java,
+       gnu/xml/dom/html2/DomHTMLButtonElement.java,
+       gnu/xml/dom/html2/DomHTMLCollection.java,
+       gnu/xml/dom/html2/DomHTMLDocument.java,
+       gnu/xml/dom/html2/DomHTMLElement.java: New files.
+
+2005-04-19  Michael Koch  <konqueror@gmx.de>
+
+       * Makefile.am: Added new files.
+       * Makefile.in: Regenerated.
+
 2005-04-19  Roman Kennke  <roman@kennke.org>
 
        * javax/swing/text/JTextComponent.java
index 0c78db6..89cb633 100644 (file)
@@ -1223,6 +1223,29 @@ gnu/java/awt/peer/EmbeddedWindowPeer.java \
 gnu/java/awt/peer/GLightweightPeer.java \
 gnu/java/awt/peer/ClasspathFontPeer.java \
 gnu/java/awt/peer/ClasspathTextLayoutPeer.java \
+gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java \
+gnu/javax/swing/text/html/parser/support/parameterDefaulter.java \
+gnu/javax/swing/text/html/parser/support/Parser.java \
+gnu/javax/swing/text/html/parser/support/textPreProcessor.java \
+gnu/javax/swing/text/html/parser/support/low/Buffer.java \
+gnu/javax/swing/text/html/parser/support/low/Constants.java \
+gnu/javax/swing/text/html/parser/support/low/Location.java \
+gnu/javax/swing/text/html/parser/support/low/node.java \
+gnu/javax/swing/text/html/parser/support/low/ParseException.java \
+gnu/javax/swing/text/html/parser/support/low/pattern.java \
+gnu/javax/swing/text/html/parser/support/low/Queue.java \
+gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java \
+gnu/javax/swing/text/html/parser/support/low/Token.java \
+gnu/javax/swing/text/html/parser/gnuDTD.java \
+gnu/javax/swing/text/html/parser/HTML_401F.java \
+gnu/javax/swing/text/html/parser/htmlAttributeSet.java \
+gnu/javax/swing/text/html/parser/htmlValidator.java \
+gnu/javax/swing/text/html/parser/models/list.java \
+gnu/javax/swing/text/html/parser/models/node.java \
+gnu/javax/swing/text/html/parser/models/noTagModel.java \
+gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java \
+gnu/javax/swing/text/html/parser/models/TableRowContentModel.java \
+gnu/javax/swing/text/html/parser/models/transformer.java \
 java/applet/Applet.java \
 java/applet/AppletStub.java \
 java/applet/AppletContext.java \
@@ -1869,6 +1892,7 @@ javax/swing/text/AbstractDocument.java \
 javax/swing/text/AttributeSet.java \
 javax/swing/text/BadLocationException.java \
 javax/swing/text/Caret.java \
+javax/swing/text/ChangedCharSetException.java \
 javax/swing/text/ComponentView.java \
 javax/swing/text/DefaultCaret.java \
 javax/swing/text/DefaultEditorKit.java \
@@ -1907,7 +1931,19 @@ javax/swing/text/Utilities.java \
 javax/swing/text/View.java \
 javax/swing/text/ViewFactory.java \
 javax/swing/text/html/HTML.java \
+javax/swing/text/html/HTMLDocument.java \
+javax/swing/text/html/HTMLEditorKit.java \
+javax/swing/text/html/HTMLFrameHyperlinkEvent.java \
+javax/swing/text/html/parser/AttributeList.java \
+javax/swing/text/html/parser/ContentModel.java \
+javax/swing/text/html/parser/DTD.java \
+javax/swing/text/html/parser/DTDConstants.java \
+javax/swing/text/html/parser/DocumentParser.java \
+javax/swing/text/html/parser/Element.java \
+javax/swing/text/html/parser/Entity.java \
+javax/swing/text/html/parser/Parser.java \
 javax/swing/text/html/parser/ParserDelegator.java \
+javax/swing/text/html/parser/TagElement.java \
 javax/swing/text/rtf/ControlWordToken.java \
 javax/swing/text/rtf/RTFEditorKit.java \
 javax/swing/text/rtf/RTFParseException.java \
@@ -2713,6 +2749,63 @@ gnu/xml/dom/DomEvent.java \
 gnu/xml/dom/DomEntity.java \
 gnu/xml/dom/DomCDATASection.java \
 gnu/xml/dom/DomDOMException.java \
+gnu/xml/dom/html2/DomHTMLAnchorElement.java \
+gnu/xml/dom/html2/DomHTMLAppletElement.java \
+gnu/xml/dom/html2/DomHTMLAreaElement.java \
+gnu/xml/dom/html2/DomHTMLBaseElement.java \
+gnu/xml/dom/html2/DomHTMLBaseFontElement.java \
+gnu/xml/dom/html2/DomHTMLBodyElement.java \
+gnu/xml/dom/html2/DomHTMLBRElement.java \
+gnu/xml/dom/html2/DomHTMLButtonElement.java \
+gnu/xml/dom/html2/DomHTMLCollection.java \
+gnu/xml/dom/html2/DomHTMLDirectoryElement.java \
+gnu/xml/dom/html2/DomHTMLDivElement.java \
+gnu/xml/dom/html2/DomHTMLDListElement.java \
+gnu/xml/dom/html2/DomHTMLDocument.java \
+gnu/xml/dom/html2/DomHTMLElement.java \
+gnu/xml/dom/html2/DomHTMLFieldSetElement.java \
+gnu/xml/dom/html2/DomHTMLFontElement.java \
+gnu/xml/dom/html2/DomHTMLFormElement.java \
+gnu/xml/dom/html2/DomHTMLFrameElement.java \
+gnu/xml/dom/html2/DomHTMLFrameSetElement.java \
+gnu/xml/dom/html2/DomHTMLHeadElement.java \
+gnu/xml/dom/html2/DomHTMLHeadingElement.java \
+gnu/xml/dom/html2/DomHTMLHRElement.java \
+gnu/xml/dom/html2/DomHTMLHtmlElement.java \
+gnu/xml/dom/html2/DomHTMLIFrameElement.java \
+gnu/xml/dom/html2/DomHTMLImageElement.java \
+gnu/xml/dom/html2/DomHTMLImpl.java \
+gnu/xml/dom/html2/DomHTMLInputElement.java \
+gnu/xml/dom/html2/DomHTMLIsIndexElement.java \
+gnu/xml/dom/html2/DomHTMLLabelElement.java \
+gnu/xml/dom/html2/DomHTMLLegendElement.java \
+gnu/xml/dom/html2/DomHTMLLIElement.java \
+gnu/xml/dom/html2/DomHTMLLinkElement.java \
+gnu/xml/dom/html2/DomHTMLMapElement.java \
+gnu/xml/dom/html2/DomHTMLMenuElement.java \
+gnu/xml/dom/html2/DomHTMLMetaElement.java \
+gnu/xml/dom/html2/DomHTMLModElement.java \
+gnu/xml/dom/html2/DomHTMLObjectElement.java \
+gnu/xml/dom/html2/DomHTMLOListElement.java \
+gnu/xml/dom/html2/DomHTMLOptGroupElement.java \
+gnu/xml/dom/html2/DomHTMLOptionElement.java \
+gnu/xml/dom/html2/DomHTMLParagraphElement.java \
+gnu/xml/dom/html2/DomHTMLParamElement.java \
+gnu/xml/dom/html2/DomHTMLParser.java \
+gnu/xml/dom/html2/DomHTMLPreElement.java \
+gnu/xml/dom/html2/DomHTMLQuoteElement.java \
+gnu/xml/dom/html2/DomHTMLScriptElement.java \
+gnu/xml/dom/html2/DomHTMLSelectElement.java \
+gnu/xml/dom/html2/DomHTMLStyleElement.java \
+gnu/xml/dom/html2/DomHTMLTableCaptionElement.java \
+gnu/xml/dom/html2/DomHTMLTableCellElement.java \
+gnu/xml/dom/html2/DomHTMLTableColElement.java \
+gnu/xml/dom/html2/DomHTMLTableElement.java \
+gnu/xml/dom/html2/DomHTMLTableRowElement.java \
+gnu/xml/dom/html2/DomHTMLTableSectionElement.java \
+gnu/xml/dom/html2/DomHTMLTextAreaElement.java \
+gnu/xml/dom/html2/DomHTMLTitleElement.java \
+gnu/xml/dom/html2/DomHTMLUListElement.java \
 gnu/xml/transform/GenerateIdFunction.java \
 gnu/xml/transform/FormatNumberFunction.java \
 gnu/xml/transform/ValueOfNode.java \
index 00c5302..aa822ca 100644 (file)
@@ -1218,6 +1218,29 @@ am__libgcj0_convenience_la_SOURCES_DIST = prims.cc jni.cc exception.cc \
        gnu/java/awt/peer/GLightweightPeer.java \
        gnu/java/awt/peer/ClasspathFontPeer.java \
        gnu/java/awt/peer/ClasspathTextLayoutPeer.java \
+       gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java \
+       gnu/javax/swing/text/html/parser/support/parameterDefaulter.java \
+       gnu/javax/swing/text/html/parser/support/Parser.java \
+       gnu/javax/swing/text/html/parser/support/textPreProcessor.java \
+       gnu/javax/swing/text/html/parser/support/low/Buffer.java \
+       gnu/javax/swing/text/html/parser/support/low/Constants.java \
+       gnu/javax/swing/text/html/parser/support/low/Location.java \
+       gnu/javax/swing/text/html/parser/support/low/node.java \
+       gnu/javax/swing/text/html/parser/support/low/ParseException.java \
+       gnu/javax/swing/text/html/parser/support/low/pattern.java \
+       gnu/javax/swing/text/html/parser/support/low/Queue.java \
+       gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java \
+       gnu/javax/swing/text/html/parser/support/low/Token.java \
+       gnu/javax/swing/text/html/parser/gnuDTD.java \
+       gnu/javax/swing/text/html/parser/HTML_401F.java \
+       gnu/javax/swing/text/html/parser/htmlAttributeSet.java \
+       gnu/javax/swing/text/html/parser/htmlValidator.java \
+       gnu/javax/swing/text/html/parser/models/list.java \
+       gnu/javax/swing/text/html/parser/models/node.java \
+       gnu/javax/swing/text/html/parser/models/noTagModel.java \
+       gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java \
+       gnu/javax/swing/text/html/parser/models/TableRowContentModel.java \
+       gnu/javax/swing/text/html/parser/models/transformer.java \
        java/applet/Applet.java java/applet/AppletStub.java \
        java/applet/AppletContext.java java/applet/AudioClip.java \
        java/awt/AWTError.java java/awt/AWTEvent.java \
@@ -1753,6 +1776,7 @@ am__libgcj0_convenience_la_SOURCES_DIST = prims.cc jni.cc exception.cc \
        javax/swing/text/AttributeSet.java \
        javax/swing/text/BadLocationException.java \
        javax/swing/text/Caret.java \
+       javax/swing/text/ChangedCharSetException.java \
        javax/swing/text/ComponentView.java \
        javax/swing/text/DefaultCaret.java \
        javax/swing/text/DefaultEditorKit.java \
@@ -1786,7 +1810,19 @@ am__libgcj0_convenience_la_SOURCES_DIST = prims.cc jni.cc exception.cc \
        javax/swing/text/Utilities.java javax/swing/text/View.java \
        javax/swing/text/ViewFactory.java \
        javax/swing/text/html/HTML.java \
+       javax/swing/text/html/HTMLDocument.java \
+       javax/swing/text/html/HTMLEditorKit.java \
+       javax/swing/text/html/HTMLFrameHyperlinkEvent.java \
+       javax/swing/text/html/parser/AttributeList.java \
+       javax/swing/text/html/parser/ContentModel.java \
+       javax/swing/text/html/parser/DTD.java \
+       javax/swing/text/html/parser/DTDConstants.java \
+       javax/swing/text/html/parser/DocumentParser.java \
+       javax/swing/text/html/parser/Element.java \
+       javax/swing/text/html/parser/Entity.java \
+       javax/swing/text/html/parser/Parser.java \
        javax/swing/text/html/parser/ParserDelegator.java \
+       javax/swing/text/html/parser/TagElement.java \
        javax/swing/text/rtf/ControlWordToken.java \
        javax/swing/text/rtf/RTFEditorKit.java \
        javax/swing/text/rtf/RTFParseException.java \
@@ -2555,6 +2591,29 @@ am__objects_10 = gnu/awt/LightweightRedirector.lo \
        gnu/java/awt/peer/GLightweightPeer.lo \
        gnu/java/awt/peer/ClasspathFontPeer.lo \
        gnu/java/awt/peer/ClasspathTextLayoutPeer.lo \
+       gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.lo \
+       gnu/javax/swing/text/html/parser/support/parameterDefaulter.lo \
+       gnu/javax/swing/text/html/parser/support/Parser.lo \
+       gnu/javax/swing/text/html/parser/support/textPreProcessor.lo \
+       gnu/javax/swing/text/html/parser/support/low/Buffer.lo \
+       gnu/javax/swing/text/html/parser/support/low/Constants.lo \
+       gnu/javax/swing/text/html/parser/support/low/Location.lo \
+       gnu/javax/swing/text/html/parser/support/low/node.lo \
+       gnu/javax/swing/text/html/parser/support/low/ParseException.lo \
+       gnu/javax/swing/text/html/parser/support/low/pattern.lo \
+       gnu/javax/swing/text/html/parser/support/low/Queue.lo \
+       gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.lo \
+       gnu/javax/swing/text/html/parser/support/low/Token.lo \
+       gnu/javax/swing/text/html/parser/gnuDTD.lo \
+       gnu/javax/swing/text/html/parser/HTML_401F.lo \
+       gnu/javax/swing/text/html/parser/htmlAttributeSet.lo \
+       gnu/javax/swing/text/html/parser/htmlValidator.lo \
+       gnu/javax/swing/text/html/parser/models/list.lo \
+       gnu/javax/swing/text/html/parser/models/node.lo \
+       gnu/javax/swing/text/html/parser/models/noTagModel.lo \
+       gnu/javax/swing/text/html/parser/models/PCDATAonly_model.lo \
+       gnu/javax/swing/text/html/parser/models/TableRowContentModel.lo \
+       gnu/javax/swing/text/html/parser/models/transformer.lo \
        java/applet/Applet.lo java/applet/AppletStub.lo \
        java/applet/AppletContext.lo java/applet/AudioClip.lo \
        java/awt/AWTError.lo java/awt/AWTEvent.lo \
@@ -3050,7 +3109,9 @@ am__objects_10 = gnu/awt/LightweightRedirector.lo \
        javax/swing/ActionMap.lo javax/swing/text/AbstractDocument.lo \
        javax/swing/text/AttributeSet.lo \
        javax/swing/text/BadLocationException.lo \
-       javax/swing/text/Caret.lo javax/swing/text/ComponentView.lo \
+       javax/swing/text/Caret.lo \
+       javax/swing/text/ChangedCharSetException.lo \
+       javax/swing/text/ComponentView.lo \
        javax/swing/text/DefaultCaret.lo \
        javax/swing/text/DefaultEditorKit.lo \
        javax/swing/text/DefaultHighlighter.lo \
@@ -3079,7 +3140,19 @@ am__objects_10 = gnu/awt/LightweightRedirector.lo \
        javax/swing/text/TabStop.lo javax/swing/text/TextAction.lo \
        javax/swing/text/Utilities.lo javax/swing/text/View.lo \
        javax/swing/text/ViewFactory.lo javax/swing/text/html/HTML.lo \
+       javax/swing/text/html/HTMLDocument.lo \
+       javax/swing/text/html/HTMLEditorKit.lo \
+       javax/swing/text/html/HTMLFrameHyperlinkEvent.lo \
+       javax/swing/text/html/parser/AttributeList.lo \
+       javax/swing/text/html/parser/ContentModel.lo \
+       javax/swing/text/html/parser/DTD.lo \
+       javax/swing/text/html/parser/DTDConstants.lo \
+       javax/swing/text/html/parser/DocumentParser.lo \
+       javax/swing/text/html/parser/Element.lo \
+       javax/swing/text/html/parser/Entity.lo \
+       javax/swing/text/html/parser/Parser.lo \
        javax/swing/text/html/parser/ParserDelegator.lo \
+       javax/swing/text/html/parser/TagElement.lo \
        javax/swing/text/rtf/ControlWordToken.lo \
        javax/swing/text/rtf/RTFEditorKit.lo \
        javax/swing/text/rtf/RTFParseException.lo \
@@ -4950,6 +5023,29 @@ gnu/java/awt/peer/EmbeddedWindowPeer.java \
 gnu/java/awt/peer/GLightweightPeer.java \
 gnu/java/awt/peer/ClasspathFontPeer.java \
 gnu/java/awt/peer/ClasspathTextLayoutPeer.java \
+gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java \
+gnu/javax/swing/text/html/parser/support/parameterDefaulter.java \
+gnu/javax/swing/text/html/parser/support/Parser.java \
+gnu/javax/swing/text/html/parser/support/textPreProcessor.java \
+gnu/javax/swing/text/html/parser/support/low/Buffer.java \
+gnu/javax/swing/text/html/parser/support/low/Constants.java \
+gnu/javax/swing/text/html/parser/support/low/Location.java \
+gnu/javax/swing/text/html/parser/support/low/node.java \
+gnu/javax/swing/text/html/parser/support/low/ParseException.java \
+gnu/javax/swing/text/html/parser/support/low/pattern.java \
+gnu/javax/swing/text/html/parser/support/low/Queue.java \
+gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java \
+gnu/javax/swing/text/html/parser/support/low/Token.java \
+gnu/javax/swing/text/html/parser/gnuDTD.java \
+gnu/javax/swing/text/html/parser/HTML_401F.java \
+gnu/javax/swing/text/html/parser/htmlAttributeSet.java \
+gnu/javax/swing/text/html/parser/htmlValidator.java \
+gnu/javax/swing/text/html/parser/models/list.java \
+gnu/javax/swing/text/html/parser/models/node.java \
+gnu/javax/swing/text/html/parser/models/noTagModel.java \
+gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java \
+gnu/javax/swing/text/html/parser/models/TableRowContentModel.java \
+gnu/javax/swing/text/html/parser/models/transformer.java \
 java/applet/Applet.java \
 java/applet/AppletStub.java \
 java/applet/AppletContext.java \
@@ -5596,6 +5692,7 @@ javax/swing/text/AbstractDocument.java \
 javax/swing/text/AttributeSet.java \
 javax/swing/text/BadLocationException.java \
 javax/swing/text/Caret.java \
+javax/swing/text/ChangedCharSetException.java \
 javax/swing/text/ComponentView.java \
 javax/swing/text/DefaultCaret.java \
 javax/swing/text/DefaultEditorKit.java \
@@ -5634,7 +5731,19 @@ javax/swing/text/Utilities.java \
 javax/swing/text/View.java \
 javax/swing/text/ViewFactory.java \
 javax/swing/text/html/HTML.java \
+javax/swing/text/html/HTMLDocument.java \
+javax/swing/text/html/HTMLEditorKit.java \
+javax/swing/text/html/HTMLFrameHyperlinkEvent.java \
+javax/swing/text/html/parser/AttributeList.java \
+javax/swing/text/html/parser/ContentModel.java \
+javax/swing/text/html/parser/DTD.java \
+javax/swing/text/html/parser/DTDConstants.java \
+javax/swing/text/html/parser/DocumentParser.java \
+javax/swing/text/html/parser/Element.java \
+javax/swing/text/html/parser/Entity.java \
+javax/swing/text/html/parser/Parser.java \
 javax/swing/text/html/parser/ParserDelegator.java \
+javax/swing/text/html/parser/TagElement.java \
 javax/swing/text/rtf/ControlWordToken.java \
 javax/swing/text/rtf/RTFEditorKit.java \
 javax/swing/text/rtf/RTFParseException.java \
@@ -6440,6 +6549,63 @@ gnu/xml/dom/DomEvent.java \
 gnu/xml/dom/DomEntity.java \
 gnu/xml/dom/DomCDATASection.java \
 gnu/xml/dom/DomDOMException.java \
+gnu/xml/dom/html2/DomHTMLAnchorElement.java \
+gnu/xml/dom/html2/DomHTMLAppletElement.java \
+gnu/xml/dom/html2/DomHTMLAreaElement.java \
+gnu/xml/dom/html2/DomHTMLBaseElement.java \
+gnu/xml/dom/html2/DomHTMLBaseFontElement.java \
+gnu/xml/dom/html2/DomHTMLBodyElement.java \
+gnu/xml/dom/html2/DomHTMLBRElement.java \
+gnu/xml/dom/html2/DomHTMLButtonElement.java \
+gnu/xml/dom/html2/DomHTMLCollection.java \
+gnu/xml/dom/html2/DomHTMLDirectoryElement.java \
+gnu/xml/dom/html2/DomHTMLDivElement.java \
+gnu/xml/dom/html2/DomHTMLDListElement.java \
+gnu/xml/dom/html2/DomHTMLDocument.java \
+gnu/xml/dom/html2/DomHTMLElement.java \
+gnu/xml/dom/html2/DomHTMLFieldSetElement.java \
+gnu/xml/dom/html2/DomHTMLFontElement.java \
+gnu/xml/dom/html2/DomHTMLFormElement.java \
+gnu/xml/dom/html2/DomHTMLFrameElement.java \
+gnu/xml/dom/html2/DomHTMLFrameSetElement.java \
+gnu/xml/dom/html2/DomHTMLHeadElement.java \
+gnu/xml/dom/html2/DomHTMLHeadingElement.java \
+gnu/xml/dom/html2/DomHTMLHRElement.java \
+gnu/xml/dom/html2/DomHTMLHtmlElement.java \
+gnu/xml/dom/html2/DomHTMLIFrameElement.java \
+gnu/xml/dom/html2/DomHTMLImageElement.java \
+gnu/xml/dom/html2/DomHTMLImpl.java \
+gnu/xml/dom/html2/DomHTMLInputElement.java \
+gnu/xml/dom/html2/DomHTMLIsIndexElement.java \
+gnu/xml/dom/html2/DomHTMLLabelElement.java \
+gnu/xml/dom/html2/DomHTMLLegendElement.java \
+gnu/xml/dom/html2/DomHTMLLIElement.java \
+gnu/xml/dom/html2/DomHTMLLinkElement.java \
+gnu/xml/dom/html2/DomHTMLMapElement.java \
+gnu/xml/dom/html2/DomHTMLMenuElement.java \
+gnu/xml/dom/html2/DomHTMLMetaElement.java \
+gnu/xml/dom/html2/DomHTMLModElement.java \
+gnu/xml/dom/html2/DomHTMLObjectElement.java \
+gnu/xml/dom/html2/DomHTMLOListElement.java \
+gnu/xml/dom/html2/DomHTMLOptGroupElement.java \
+gnu/xml/dom/html2/DomHTMLOptionElement.java \
+gnu/xml/dom/html2/DomHTMLParagraphElement.java \
+gnu/xml/dom/html2/DomHTMLParamElement.java \
+gnu/xml/dom/html2/DomHTMLParser.java \
+gnu/xml/dom/html2/DomHTMLPreElement.java \
+gnu/xml/dom/html2/DomHTMLQuoteElement.java \
+gnu/xml/dom/html2/DomHTMLScriptElement.java \
+gnu/xml/dom/html2/DomHTMLSelectElement.java \
+gnu/xml/dom/html2/DomHTMLStyleElement.java \
+gnu/xml/dom/html2/DomHTMLTableCaptionElement.java \
+gnu/xml/dom/html2/DomHTMLTableCellElement.java \
+gnu/xml/dom/html2/DomHTMLTableColElement.java \
+gnu/xml/dom/html2/DomHTMLTableElement.java \
+gnu/xml/dom/html2/DomHTMLTableRowElement.java \
+gnu/xml/dom/html2/DomHTMLTableSectionElement.java \
+gnu/xml/dom/html2/DomHTMLTextAreaElement.java \
+gnu/xml/dom/html2/DomHTMLTitleElement.java \
+gnu/xml/dom/html2/DomHTMLUListElement.java \
 gnu/xml/transform/GenerateIdFunction.java \
 gnu/xml/transform/FormatNumberFunction.java \
 gnu/xml/transform/ValueOfNode.java \
@@ -11368,6 +11534,99 @@ gnu/java/awt/peer/ClasspathFontPeer.lo:  \
 gnu/java/awt/peer/ClasspathTextLayoutPeer.lo:  \
        gnu/java/awt/peer/$(am__dirstamp) \
        gnu/java/awt/peer/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/$(am__dirstamp):
+       @$(mkdir_p) gnu/javax/swing/text/html/parser/support
+       @: > gnu/javax/swing/text/html/parser/support/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/$(DEPDIR)/$(am__dirstamp):
+       @$(mkdir_p) gnu/javax/swing/text/html/parser/support/$(DEPDIR)
+       @: > gnu/javax/swing/text/html/parser/support/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.lo:  \
+       gnu/javax/swing/text/html/parser/support/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/support/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/parameterDefaulter.lo:  \
+       gnu/javax/swing/text/html/parser/support/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/support/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/Parser.lo:  \
+       gnu/javax/swing/text/html/parser/support/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/support/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/textPreProcessor.lo:  \
+       gnu/javax/swing/text/html/parser/support/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/support/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/low/$(am__dirstamp):
+       @$(mkdir_p) gnu/javax/swing/text/html/parser/support/low
+       @: > gnu/javax/swing/text/html/parser/support/low/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/$(am__dirstamp):
+       @$(mkdir_p) gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)
+       @: > gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/low/Buffer.lo:  \
+       gnu/javax/swing/text/html/parser/support/low/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/low/Constants.lo:  \
+       gnu/javax/swing/text/html/parser/support/low/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/low/Location.lo:  \
+       gnu/javax/swing/text/html/parser/support/low/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/low/node.lo:  \
+       gnu/javax/swing/text/html/parser/support/low/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/low/ParseException.lo:  \
+       gnu/javax/swing/text/html/parser/support/low/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/low/pattern.lo:  \
+       gnu/javax/swing/text/html/parser/support/low/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/low/Queue.lo:  \
+       gnu/javax/swing/text/html/parser/support/low/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.lo:  \
+       gnu/javax/swing/text/html/parser/support/low/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/support/low/Token.lo:  \
+       gnu/javax/swing/text/html/parser/support/low/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/$(am__dirstamp):
+       @$(mkdir_p) gnu/javax/swing/text/html/parser
+       @: > gnu/javax/swing/text/html/parser/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp):
+       @$(mkdir_p) gnu/javax/swing/text/html/parser/$(DEPDIR)
+       @: > gnu/javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/gnuDTD.lo:  \
+       gnu/javax/swing/text/html/parser/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/HTML_401F.lo:  \
+       gnu/javax/swing/text/html/parser/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/htmlAttributeSet.lo:  \
+       gnu/javax/swing/text/html/parser/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/htmlValidator.lo:  \
+       gnu/javax/swing/text/html/parser/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/models/$(am__dirstamp):
+       @$(mkdir_p) gnu/javax/swing/text/html/parser/models
+       @: > gnu/javax/swing/text/html/parser/models/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/models/$(DEPDIR)/$(am__dirstamp):
+       @$(mkdir_p) gnu/javax/swing/text/html/parser/models/$(DEPDIR)
+       @: > gnu/javax/swing/text/html/parser/models/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/models/list.lo:  \
+       gnu/javax/swing/text/html/parser/models/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/models/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/models/node.lo:  \
+       gnu/javax/swing/text/html/parser/models/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/models/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/models/noTagModel.lo:  \
+       gnu/javax/swing/text/html/parser/models/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/models/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/models/PCDATAonly_model.lo:  \
+       gnu/javax/swing/text/html/parser/models/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/models/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/models/TableRowContentModel.lo:  \
+       gnu/javax/swing/text/html/parser/models/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/models/$(DEPDIR)/$(am__dirstamp)
+gnu/javax/swing/text/html/parser/models/transformer.lo:  \
+       gnu/javax/swing/text/html/parser/models/$(am__dirstamp) \
+       gnu/javax/swing/text/html/parser/models/$(DEPDIR)/$(am__dirstamp)
 java/applet/$(am__dirstamp):
        @$(mkdir_p) java/applet
        @: > java/applet/$(am__dirstamp)
@@ -13031,6 +13290,9 @@ javax/swing/text/BadLocationException.lo:  \
        javax/swing/text/$(DEPDIR)/$(am__dirstamp)
 javax/swing/text/Caret.lo: javax/swing/text/$(am__dirstamp) \
        javax/swing/text/$(DEPDIR)/$(am__dirstamp)
+javax/swing/text/ChangedCharSetException.lo:  \
+       javax/swing/text/$(am__dirstamp) \
+       javax/swing/text/$(DEPDIR)/$(am__dirstamp)
 javax/swing/text/ComponentView.lo: javax/swing/text/$(am__dirstamp) \
        javax/swing/text/$(DEPDIR)/$(am__dirstamp)
 javax/swing/text/DefaultCaret.lo: javax/swing/text/$(am__dirstamp) \
@@ -13120,15 +13382,51 @@ javax/swing/text/html/$(DEPDIR)/$(am__dirstamp):
        @: > javax/swing/text/html/$(DEPDIR)/$(am__dirstamp)
 javax/swing/text/html/HTML.lo: javax/swing/text/html/$(am__dirstamp) \
        javax/swing/text/html/$(DEPDIR)/$(am__dirstamp)
+javax/swing/text/html/HTMLDocument.lo:  \
+       javax/swing/text/html/$(am__dirstamp) \
+       javax/swing/text/html/$(DEPDIR)/$(am__dirstamp)
+javax/swing/text/html/HTMLEditorKit.lo:  \
+       javax/swing/text/html/$(am__dirstamp) \
+       javax/swing/text/html/$(DEPDIR)/$(am__dirstamp)
+javax/swing/text/html/HTMLFrameHyperlinkEvent.lo:  \
+       javax/swing/text/html/$(am__dirstamp) \
+       javax/swing/text/html/$(DEPDIR)/$(am__dirstamp)
 javax/swing/text/html/parser/$(am__dirstamp):
        @$(mkdir_p) javax/swing/text/html/parser
        @: > javax/swing/text/html/parser/$(am__dirstamp)
 javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp):
        @$(mkdir_p) javax/swing/text/html/parser/$(DEPDIR)
        @: > javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+javax/swing/text/html/parser/AttributeList.lo:  \
+       javax/swing/text/html/parser/$(am__dirstamp) \
+       javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+javax/swing/text/html/parser/ContentModel.lo:  \
+       javax/swing/text/html/parser/$(am__dirstamp) \
+       javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+javax/swing/text/html/parser/DTD.lo:  \
+       javax/swing/text/html/parser/$(am__dirstamp) \
+       javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+javax/swing/text/html/parser/DTDConstants.lo:  \
+       javax/swing/text/html/parser/$(am__dirstamp) \
+       javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+javax/swing/text/html/parser/DocumentParser.lo:  \
+       javax/swing/text/html/parser/$(am__dirstamp) \
+       javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+javax/swing/text/html/parser/Element.lo:  \
+       javax/swing/text/html/parser/$(am__dirstamp) \
+       javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+javax/swing/text/html/parser/Entity.lo:  \
+       javax/swing/text/html/parser/$(am__dirstamp) \
+       javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+javax/swing/text/html/parser/Parser.lo:  \
+       javax/swing/text/html/parser/$(am__dirstamp) \
+       javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
 javax/swing/text/html/parser/ParserDelegator.lo:  \
        javax/swing/text/html/parser/$(am__dirstamp) \
        javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+javax/swing/text/html/parser/TagElement.lo:  \
+       javax/swing/text/html/parser/$(am__dirstamp) \
+       javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
 javax/swing/text/rtf/$(am__dirstamp):
        @$(mkdir_p) javax/swing/text/rtf
        @: > javax/swing/text/rtf/$(am__dirstamp)
@@ -15699,6 +15997,52 @@ mostlyclean-compile:
        -rm -f gnu/java/util/prefs/NodeReader.lo
        -rm -f gnu/java/util/prefs/NodeWriter.$(OBJEXT)
        -rm -f gnu/java/util/prefs/NodeWriter.lo
+       -rm -f gnu/javax/swing/text/html/parser/HTML_401F.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/HTML_401F.lo
+       -rm -f gnu/javax/swing/text/html/parser/gnuDTD.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/gnuDTD.lo
+       -rm -f gnu/javax/swing/text/html/parser/htmlAttributeSet.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/htmlAttributeSet.lo
+       -rm -f gnu/javax/swing/text/html/parser/htmlValidator.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/htmlValidator.lo
+       -rm -f gnu/javax/swing/text/html/parser/models/PCDATAonly_model.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/models/PCDATAonly_model.lo
+       -rm -f gnu/javax/swing/text/html/parser/models/TableRowContentModel.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/models/TableRowContentModel.lo
+       -rm -f gnu/javax/swing/text/html/parser/models/list.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/models/list.lo
+       -rm -f gnu/javax/swing/text/html/parser/models/noTagModel.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/models/noTagModel.lo
+       -rm -f gnu/javax/swing/text/html/parser/models/node.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/models/node.lo
+       -rm -f gnu/javax/swing/text/html/parser/models/transformer.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/models/transformer.lo
+       -rm -f gnu/javax/swing/text/html/parser/support/Parser.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/support/Parser.lo
+       -rm -f gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.lo
+       -rm -f gnu/javax/swing/text/html/parser/support/low/Buffer.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/support/low/Buffer.lo
+       -rm -f gnu/javax/swing/text/html/parser/support/low/Constants.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/support/low/Constants.lo
+       -rm -f gnu/javax/swing/text/html/parser/support/low/Location.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/support/low/Location.lo
+       -rm -f gnu/javax/swing/text/html/parser/support/low/ParseException.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/support/low/ParseException.lo
+       -rm -f gnu/javax/swing/text/html/parser/support/low/Queue.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/support/low/Queue.lo
+       -rm -f gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.lo
+       -rm -f gnu/javax/swing/text/html/parser/support/low/Token.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/support/low/Token.lo
+       -rm -f gnu/javax/swing/text/html/parser/support/low/node.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/support/low/node.lo
+       -rm -f gnu/javax/swing/text/html/parser/support/low/pattern.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/support/low/pattern.lo
+       -rm -f gnu/javax/swing/text/html/parser/support/parameterDefaulter.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/support/parameterDefaulter.lo
+       -rm -f gnu/javax/swing/text/html/parser/support/textPreProcessor.$(OBJEXT)
+       -rm -f gnu/javax/swing/text/html/parser/support/textPreProcessor.lo
        -rm -f gnu/regexp/CharIndexed.$(OBJEXT)
        -rm -f gnu/regexp/CharIndexed.lo
        -rm -f gnu/regexp/CharIndexedCharArray.$(OBJEXT)
@@ -19383,6 +19727,8 @@ mostlyclean-compile:
        -rm -f javax/swing/text/BadLocationException.lo
        -rm -f javax/swing/text/Caret.$(OBJEXT)
        -rm -f javax/swing/text/Caret.lo
+       -rm -f javax/swing/text/ChangedCharSetException.$(OBJEXT)
+       -rm -f javax/swing/text/ChangedCharSetException.lo
        -rm -f javax/swing/text/ComponentView.$(OBJEXT)
        -rm -f javax/swing/text/ComponentView.lo
        -rm -f javax/swing/text/DefaultCaret.$(OBJEXT)
@@ -19459,8 +19805,32 @@ mostlyclean-compile:
        -rm -f javax/swing/text/ViewFactory.lo
        -rm -f javax/swing/text/html/HTML.$(OBJEXT)
        -rm -f javax/swing/text/html/HTML.lo
+       -rm -f javax/swing/text/html/HTMLDocument.$(OBJEXT)
+       -rm -f javax/swing/text/html/HTMLDocument.lo
+       -rm -f javax/swing/text/html/HTMLEditorKit.$(OBJEXT)
+       -rm -f javax/swing/text/html/HTMLEditorKit.lo
+       -rm -f javax/swing/text/html/HTMLFrameHyperlinkEvent.$(OBJEXT)
+       -rm -f javax/swing/text/html/HTMLFrameHyperlinkEvent.lo
+       -rm -f javax/swing/text/html/parser/AttributeList.$(OBJEXT)
+       -rm -f javax/swing/text/html/parser/AttributeList.lo
+       -rm -f javax/swing/text/html/parser/ContentModel.$(OBJEXT)
+       -rm -f javax/swing/text/html/parser/ContentModel.lo
+       -rm -f javax/swing/text/html/parser/DTD.$(OBJEXT)
+       -rm -f javax/swing/text/html/parser/DTD.lo
+       -rm -f javax/swing/text/html/parser/DTDConstants.$(OBJEXT)
+       -rm -f javax/swing/text/html/parser/DTDConstants.lo
+       -rm -f javax/swing/text/html/parser/DocumentParser.$(OBJEXT)
+       -rm -f javax/swing/text/html/parser/DocumentParser.lo
+       -rm -f javax/swing/text/html/parser/Element.$(OBJEXT)
+       -rm -f javax/swing/text/html/parser/Element.lo
+       -rm -f javax/swing/text/html/parser/Entity.$(OBJEXT)
+       -rm -f javax/swing/text/html/parser/Entity.lo
+       -rm -f javax/swing/text/html/parser/Parser.$(OBJEXT)
+       -rm -f javax/swing/text/html/parser/Parser.lo
        -rm -f javax/swing/text/html/parser/ParserDelegator.$(OBJEXT)
        -rm -f javax/swing/text/html/parser/ParserDelegator.lo
+       -rm -f javax/swing/text/html/parser/TagElement.$(OBJEXT)
+       -rm -f javax/swing/text/html/parser/TagElement.lo
        -rm -f javax/swing/text/rtf/ControlWordToken.$(OBJEXT)
        -rm -f javax/swing/text/rtf/ControlWordToken.lo
        -rm -f javax/swing/text/rtf/RTFEditorKit.$(OBJEXT)
@@ -20193,6 +20563,29 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/util/prefs/$(DEPDIR)/MemoryBasedPreferences.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/util/prefs/$(DEPDIR)/NodeReader.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gnu/java/util/prefs/$(DEPDIR)/NodeWriter.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/$(DEPDIR)/HTML_401F.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/$(DEPDIR)/gnuDTD.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/$(DEPDIR)/htmlAttributeSet.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/$(DEPDIR)/htmlValidator.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/models/$(DEPDIR)/PCDATAonly_model.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/models/$(DEPDIR)/TableRowContentModel.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/models/$(DEPDIR)/list.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/models/$(DEPDIR)/noTagModel.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/models/$(DEPDIR)/node.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/models/$(DEPDIR)/transformer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/support/$(DEPDIR)/Parser.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/support/$(DEPDIR)/gnuStringIntMapper.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/support/$(DEPDIR)/parameterDefaulter.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/support/$(DEPDIR)/textPreProcessor.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/Buffer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/Constants.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/Location.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/ParseException.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/Queue.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/ReaderTokenizer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/Token.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/node.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/pattern.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/CharIndexed.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/CharIndexedCharArray.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gnu/regexp/$(DEPDIR)/CharIndexedInputStream.Plo@am__quote@
@@ -22035,6 +22428,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/AttributeSet.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/BadLocationException.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/Caret.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/ChangedCharSetException.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/ComponentView.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/DefaultCaret.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/DefaultEditorKit.Plo@am__quote@
@@ -22073,7 +22467,19 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/View.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/$(DEPDIR)/ViewFactory.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/$(DEPDIR)/HTML.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/$(DEPDIR)/HTMLDocument.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/$(DEPDIR)/HTMLEditorKit.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/$(DEPDIR)/HTMLFrameHyperlinkEvent.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/parser/$(DEPDIR)/AttributeList.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/parser/$(DEPDIR)/ContentModel.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/parser/$(DEPDIR)/DTD.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/parser/$(DEPDIR)/DTDConstants.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/parser/$(DEPDIR)/DocumentParser.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/parser/$(DEPDIR)/Element.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/parser/$(DEPDIR)/Entity.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/parser/$(DEPDIR)/Parser.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/parser/$(DEPDIR)/ParserDelegator.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/html/parser/$(DEPDIR)/TagElement.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/rtf/$(DEPDIR)/ControlWordToken.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/rtf/$(DEPDIR)/RTFEditorKit.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@javax/swing/text/rtf/$(DEPDIR)/RTFParseException.Plo@am__quote@
@@ -22725,6 +23131,10 @@ clean-libtool:
        -rm -rf gnu/java/text/.libs gnu/java/text/_libs
        -rm -rf gnu/java/util/.libs gnu/java/util/_libs
        -rm -rf gnu/java/util/prefs/.libs gnu/java/util/prefs/_libs
+       -rm -rf gnu/javax/swing/text/html/parser/.libs gnu/javax/swing/text/html/parser/_libs
+       -rm -rf gnu/javax/swing/text/html/parser/models/.libs gnu/javax/swing/text/html/parser/models/_libs
+       -rm -rf gnu/javax/swing/text/html/parser/support/.libs gnu/javax/swing/text/html/parser/support/_libs
+       -rm -rf gnu/javax/swing/text/html/parser/support/low/.libs gnu/javax/swing/text/html/parser/support/low/_libs
        -rm -rf gnu/regexp/.libs gnu/regexp/_libs
        -rm -rf java/applet/.libs java/applet/_libs
        -rm -rf java/awt/.libs java/awt/_libs
@@ -23276,6 +23686,14 @@ distclean-generic:
        -rm -f gnu/java/util/$(am__dirstamp)
        -rm -f gnu/java/util/prefs/$(DEPDIR)/$(am__dirstamp)
        -rm -f gnu/java/util/prefs/$(am__dirstamp)
+       -rm -f gnu/javax/swing/text/html/parser/$(DEPDIR)/$(am__dirstamp)
+       -rm -f gnu/javax/swing/text/html/parser/$(am__dirstamp)
+       -rm -f gnu/javax/swing/text/html/parser/models/$(DEPDIR)/$(am__dirstamp)
+       -rm -f gnu/javax/swing/text/html/parser/models/$(am__dirstamp)
+       -rm -f gnu/javax/swing/text/html/parser/support/$(DEPDIR)/$(am__dirstamp)
+       -rm -f gnu/javax/swing/text/html/parser/support/$(am__dirstamp)
+       -rm -f gnu/javax/swing/text/html/parser/support/low/$(DEPDIR)/$(am__dirstamp)
+       -rm -f gnu/javax/swing/text/html/parser/support/low/$(am__dirstamp)
        -rm -f gnu/regexp/$(DEPDIR)/$(am__dirstamp)
        -rm -f gnu/regexp/$(am__dirstamp)
        -rm -f java/applet/$(DEPDIR)/$(am__dirstamp)
@@ -23470,7 +23888,7 @@ clean-am: clean-binPROGRAMS clean-generic clean-libtool clean-local \
 
 distclean: distclean-recursive
        -rm -f $(am__CONFIG_DISTCLEAN_FILES)
-       -rm -rf ./$(DEPDIR) gnu/awt/$(DEPDIR) gnu/awt/j2d/$(DEPDIR) gnu/awt/xlib/$(DEPDIR) gnu/classpath/$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/awt/$(DEPDIR) gnu/java/awt/color/$(DEPDIR) gnu/java/awt/image/$(DEPDIR) gnu/java/awt/peer/$(DEPDIR) gnu/java/io/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/lang/reflect/$(DEPDIR) gnu/java/locale/$(DEPDIR) gnu/java/math/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/net/protocol/file/$(DEPDIR) gnu/java/net/protocol/ftp/$(DEPDIR) gnu/java/net/protocol/gcjlib/$(DEPDIR) gnu/java/net/protocol/http/$(DEPDIR) gnu/java/net/protocol/http/event/$(DEPDIR) gnu/java/net/protocol/jar/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) gnu/java/nio/charset/$(DEPDIR) gnu/java/rmi/$(DEPDIR) gnu/java/rmi/dgc/$(DEPDIR) gnu/java/rmi/registry/$(DEPDIR) gnu/java/rmi/rmic/$(DEPDIR) gnu/java/rmi/server/$(DEPDIR) gnu/java/security/$(DEPDIR) gnu/java/security/action/$(DEPDIR) gnu/java/security/ber/$(DEPDIR) gnu/java/security/der/$(DEPDIR) gnu/java/security/pkcs/$(DEPDIR) gnu/java/security/provider/$(DEPDIR) gnu/java/security/util/$(DEPDIR) gnu/java/security/x509/$(DEPDIR) gnu/java/security/x509/ext/$(DEPDIR) gnu/java/text/$(DEPDIR) gnu/java/util/$(DEPDIR) gnu/java/util/prefs/$(DEPDIR) gnu/regexp/$(DEPDIR) java/applet/$(DEPDIR) java/awt/$(DEPDIR) java/awt/color/$(DEPDIR) java/awt/datatransfer/$(DEPDIR) java/awt/dnd/$(DEPDIR) java/awt/dnd/peer/$(DEPDIR) java/awt/event/$(DEPDIR) java/awt/font/$(DEPDIR) java/awt/geom/$(DEPDIR) java/awt/im/$(DEPDIR) java/awt/im/spi/$(DEPDIR) java/awt/image/$(DEPDIR) java/awt/image/renderable/$(DEPDIR) java/awt/peer/$(DEPDIR) java/awt/print/$(DEPDIR) java/beans/$(DEPDIR) java/beans/beancontext/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/math/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/nio/channels/spi/$(DEPDIR) java/nio/charset/$(DEPDIR) java/nio/charset/spi/$(DEPDIR) java/rmi/$(DEPDIR) java/rmi/activation/$(DEPDIR) java/rmi/dgc/$(DEPDIR) java/rmi/registry/$(DEPDIR) java/rmi/server/$(DEPDIR) java/security/$(DEPDIR) java/security/acl/$(DEPDIR) java/security/cert/$(DEPDIR) java/security/interfaces/$(DEPDIR) java/security/spec/$(DEPDIR) java/sql/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/jar/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/prefs/$(DEPDIR) java/util/regex/$(DEPDIR) java/util/zip/$(DEPDIR) javax/accessibility/$(DEPDIR) javax/crypto/$(DEPDIR) javax/crypto/interfaces/$(DEPDIR) javax/crypto/spec/$(DEPDIR) javax/naming/$(DEPDIR) javax/naming/directory/$(DEPDIR) javax/naming/event/$(DEPDIR) javax/naming/ldap/$(DEPDIR) javax/naming/spi/$(DEPDIR) javax/net/$(DEPDIR) javax/net/ssl/$(DEPDIR) javax/print/$(DEPDIR) javax/print/attribute/$(DEPDIR) javax/print/attribute/standard/$(DEPDIR) javax/print/event/$(DEPDIR) javax/security/auth/$(DEPDIR) javax/security/auth/callback/$(DEPDIR) javax/security/auth/login/$(DEPDIR) javax/security/auth/spi/$(DEPDIR) javax/security/auth/x500/$(DEPDIR) javax/security/cert/$(DEPDIR) javax/security/sasl/$(DEPDIR) javax/sql/$(DEPDIR) javax/swing/$(DEPDIR) javax/swing/border/$(DEPDIR) javax/swing/colorchooser/$(DEPDIR) javax/swing/event/$(DEPDIR) javax/swing/filechooser/$(DEPDIR) javax/swing/plaf/$(DEPDIR) javax/swing/plaf/basic/$(DEPDIR) javax/swing/plaf/metal/$(DEPDIR) javax/swing/table/$(DEPDIR) javax/swing/text/$(DEPDIR) javax/swing/text/html/$(DEPDIR) javax/swing/text/html/parser/$(DEPDIR) javax/swing/text/rtf/$(DEPDIR) javax/swing/tree/$(DEPDIR) javax/swing/undo/$(DEPDIR) javax/transaction/$(DEPDIR) javax/transaction/xa/$(DEPDIR) jni/classpath/$(DEPDIR) jni/gtk-peer/$(DEPDIR) org/ietf/jgss/$(DEPDIR) sysdep/$(DEPDIR)
+       -rm -rf ./$(DEPDIR) gnu/awt/$(DEPDIR) gnu/awt/j2d/$(DEPDIR) gnu/awt/xlib/$(DEPDIR) gnu/classpath/$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/awt/$(DEPDIR) gnu/java/awt/color/$(DEPDIR) gnu/java/awt/image/$(DEPDIR) gnu/java/awt/peer/$(DEPDIR) gnu/java/io/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/lang/reflect/$(DEPDIR) gnu/java/locale/$(DEPDIR) gnu/java/math/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/net/protocol/file/$(DEPDIR) gnu/java/net/protocol/ftp/$(DEPDIR) gnu/java/net/protocol/gcjlib/$(DEPDIR) gnu/java/net/protocol/http/$(DEPDIR) gnu/java/net/protocol/http/event/$(DEPDIR) gnu/java/net/protocol/jar/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) gnu/java/nio/charset/$(DEPDIR) gnu/java/rmi/$(DEPDIR) gnu/java/rmi/dgc/$(DEPDIR) gnu/java/rmi/registry/$(DEPDIR) gnu/java/rmi/rmic/$(DEPDIR) gnu/java/rmi/server/$(DEPDIR) gnu/java/security/$(DEPDIR) gnu/java/security/action/$(DEPDIR) gnu/java/security/ber/$(DEPDIR) gnu/java/security/der/$(DEPDIR) gnu/java/security/pkcs/$(DEPDIR) gnu/java/security/provider/$(DEPDIR) gnu/java/security/util/$(DEPDIR) gnu/java/security/x509/$(DEPDIR) gnu/java/security/x509/ext/$(DEPDIR) gnu/java/text/$(DEPDIR) gnu/java/util/$(DEPDIR) gnu/java/util/prefs/$(DEPDIR) gnu/javax/swing/text/html/parser/$(DEPDIR) gnu/javax/swing/text/html/parser/models/$(DEPDIR) gnu/javax/swing/text/html/parser/support/$(DEPDIR) gnu/javax/swing/text/html/parser/support/low/$(DEPDIR) gnu/regexp/$(DEPDIR) java/applet/$(DEPDIR) java/awt/$(DEPDIR) java/awt/color/$(DEPDIR) java/awt/datatransfer/$(DEPDIR) java/awt/dnd/$(DEPDIR) java/awt/dnd/peer/$(DEPDIR) java/awt/event/$(DEPDIR) java/awt/font/$(DEPDIR) java/awt/geom/$(DEPDIR) java/awt/im/$(DEPDIR) java/awt/im/spi/$(DEPDIR) java/awt/image/$(DEPDIR) java/awt/image/renderable/$(DEPDIR) java/awt/peer/$(DEPDIR) java/awt/print/$(DEPDIR) java/beans/$(DEPDIR) java/beans/beancontext/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/math/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/nio/channels/spi/$(DEPDIR) java/nio/charset/$(DEPDIR) java/nio/charset/spi/$(DEPDIR) java/rmi/$(DEPDIR) java/rmi/activation/$(DEPDIR) java/rmi/dgc/$(DEPDIR) java/rmi/registry/$(DEPDIR) java/rmi/server/$(DEPDIR) java/security/$(DEPDIR) java/security/acl/$(DEPDIR) java/security/cert/$(DEPDIR) java/security/interfaces/$(DEPDIR) java/security/spec/$(DEPDIR) java/sql/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/jar/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/prefs/$(DEPDIR) java/util/regex/$(DEPDIR) java/util/zip/$(DEPDIR) javax/accessibility/$(DEPDIR) javax/crypto/$(DEPDIR) javax/crypto/interfaces/$(DEPDIR) javax/crypto/spec/$(DEPDIR) javax/naming/$(DEPDIR) javax/naming/directory/$(DEPDIR) javax/naming/event/$(DEPDIR) javax/naming/ldap/$(DEPDIR) javax/naming/spi/$(DEPDIR) javax/net/$(DEPDIR) javax/net/ssl/$(DEPDIR) javax/print/$(DEPDIR) javax/print/attribute/$(DEPDIR) javax/print/attribute/standard/$(DEPDIR) javax/print/event/$(DEPDIR) javax/security/auth/$(DEPDIR) javax/security/auth/callback/$(DEPDIR) javax/security/auth/login/$(DEPDIR) javax/security/auth/spi/$(DEPDIR) javax/security/auth/x500/$(DEPDIR) javax/security/cert/$(DEPDIR) javax/security/sasl/$(DEPDIR) javax/sql/$(DEPDIR) javax/swing/$(DEPDIR) javax/swing/border/$(DEPDIR) javax/swing/colorchooser/$(DEPDIR) javax/swing/event/$(DEPDIR) javax/swing/filechooser/$(DEPDIR) javax/swing/plaf/$(DEPDIR) javax/swing/plaf/basic/$(DEPDIR) javax/swing/plaf/metal/$(DEPDIR) javax/swing/table/$(DEPDIR) javax/swing/text/$(DEPDIR) javax/swing/text/html/$(DEPDIR) javax/swing/text/html/parser/$(DEPDIR) javax/swing/text/rtf/$(DEPDIR) javax/swing/tree/$(DEPDIR) javax/swing/undo/$(DEPDIR) javax/transaction/$(DEPDIR) javax/transaction/xa/$(DEPDIR) jni/classpath/$(DEPDIR) jni/gtk-peer/$(DEPDIR) org/ietf/jgss/$(DEPDIR) sysdep/$(DEPDIR)
        -rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
        distclean-libtool distclean-local distclean-tags
@@ -23501,7 +23919,7 @@ installcheck-am:
 maintainer-clean: maintainer-clean-recursive
        -rm -f $(am__CONFIG_DISTCLEAN_FILES)
        -rm -rf $(top_srcdir)/autom4te.cache
-       -rm -rf ./$(DEPDIR) gnu/awt/$(DEPDIR) gnu/awt/j2d/$(DEPDIR) gnu/awt/xlib/$(DEPDIR) gnu/classpath/$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/awt/$(DEPDIR) gnu/java/awt/color/$(DEPDIR) gnu/java/awt/image/$(DEPDIR) gnu/java/awt/peer/$(DEPDIR) gnu/java/io/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/lang/reflect/$(DEPDIR) gnu/java/locale/$(DEPDIR) gnu/java/math/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/net/protocol/file/$(DEPDIR) gnu/java/net/protocol/ftp/$(DEPDIR) gnu/java/net/protocol/gcjlib/$(DEPDIR) gnu/java/net/protocol/http/$(DEPDIR) gnu/java/net/protocol/http/event/$(DEPDIR) gnu/java/net/protocol/jar/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) gnu/java/nio/charset/$(DEPDIR) gnu/java/rmi/$(DEPDIR) gnu/java/rmi/dgc/$(DEPDIR) gnu/java/rmi/registry/$(DEPDIR) gnu/java/rmi/rmic/$(DEPDIR) gnu/java/rmi/server/$(DEPDIR) gnu/java/security/$(DEPDIR) gnu/java/security/action/$(DEPDIR) gnu/java/security/ber/$(DEPDIR) gnu/java/security/der/$(DEPDIR) gnu/java/security/pkcs/$(DEPDIR) gnu/java/security/provider/$(DEPDIR) gnu/java/security/util/$(DEPDIR) gnu/java/security/x509/$(DEPDIR) gnu/java/security/x509/ext/$(DEPDIR) gnu/java/text/$(DEPDIR) gnu/java/util/$(DEPDIR) gnu/java/util/prefs/$(DEPDIR) gnu/regexp/$(DEPDIR) java/applet/$(DEPDIR) java/awt/$(DEPDIR) java/awt/color/$(DEPDIR) java/awt/datatransfer/$(DEPDIR) java/awt/dnd/$(DEPDIR) java/awt/dnd/peer/$(DEPDIR) java/awt/event/$(DEPDIR) java/awt/font/$(DEPDIR) java/awt/geom/$(DEPDIR) java/awt/im/$(DEPDIR) java/awt/im/spi/$(DEPDIR) java/awt/image/$(DEPDIR) java/awt/image/renderable/$(DEPDIR) java/awt/peer/$(DEPDIR) java/awt/print/$(DEPDIR) java/beans/$(DEPDIR) java/beans/beancontext/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/math/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/nio/channels/spi/$(DEPDIR) java/nio/charset/$(DEPDIR) java/nio/charset/spi/$(DEPDIR) java/rmi/$(DEPDIR) java/rmi/activation/$(DEPDIR) java/rmi/dgc/$(DEPDIR) java/rmi/registry/$(DEPDIR) java/rmi/server/$(DEPDIR) java/security/$(DEPDIR) java/security/acl/$(DEPDIR) java/security/cert/$(DEPDIR) java/security/interfaces/$(DEPDIR) java/security/spec/$(DEPDIR) java/sql/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/jar/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/prefs/$(DEPDIR) java/util/regex/$(DEPDIR) java/util/zip/$(DEPDIR) javax/accessibility/$(DEPDIR) javax/crypto/$(DEPDIR) javax/crypto/interfaces/$(DEPDIR) javax/crypto/spec/$(DEPDIR) javax/naming/$(DEPDIR) javax/naming/directory/$(DEPDIR) javax/naming/event/$(DEPDIR) javax/naming/ldap/$(DEPDIR) javax/naming/spi/$(DEPDIR) javax/net/$(DEPDIR) javax/net/ssl/$(DEPDIR) javax/print/$(DEPDIR) javax/print/attribute/$(DEPDIR) javax/print/attribute/standard/$(DEPDIR) javax/print/event/$(DEPDIR) javax/security/auth/$(DEPDIR) javax/security/auth/callback/$(DEPDIR) javax/security/auth/login/$(DEPDIR) javax/security/auth/spi/$(DEPDIR) javax/security/auth/x500/$(DEPDIR) javax/security/cert/$(DEPDIR) javax/security/sasl/$(DEPDIR) javax/sql/$(DEPDIR) javax/swing/$(DEPDIR) javax/swing/border/$(DEPDIR) javax/swing/colorchooser/$(DEPDIR) javax/swing/event/$(DEPDIR) javax/swing/filechooser/$(DEPDIR) javax/swing/plaf/$(DEPDIR) javax/swing/plaf/basic/$(DEPDIR) javax/swing/plaf/metal/$(DEPDIR) javax/swing/table/$(DEPDIR) javax/swing/text/$(DEPDIR) javax/swing/text/html/$(DEPDIR) javax/swing/text/html/parser/$(DEPDIR) javax/swing/text/rtf/$(DEPDIR) javax/swing/tree/$(DEPDIR) javax/swing/undo/$(DEPDIR) javax/transaction/$(DEPDIR) javax/transaction/xa/$(DEPDIR) jni/classpath/$(DEPDIR) jni/gtk-peer/$(DEPDIR) org/ietf/jgss/$(DEPDIR) sysdep/$(DEPDIR)
+       -rm -rf ./$(DEPDIR) gnu/awt/$(DEPDIR) gnu/awt/j2d/$(DEPDIR) gnu/awt/xlib/$(DEPDIR) gnu/classpath/$(DEPDIR) gnu/gcj/$(DEPDIR) gnu/gcj/convert/$(DEPDIR) gnu/gcj/io/$(DEPDIR) gnu/gcj/runtime/$(DEPDIR) gnu/gcj/tools/gcj_dbtool/$(DEPDIR) gnu/gcj/util/$(DEPDIR) gnu/gcj/xlib/$(DEPDIR) gnu/java/awt/$(DEPDIR) gnu/java/awt/color/$(DEPDIR) gnu/java/awt/image/$(DEPDIR) gnu/java/awt/peer/$(DEPDIR) gnu/java/io/$(DEPDIR) gnu/java/lang/$(DEPDIR) gnu/java/lang/reflect/$(DEPDIR) gnu/java/locale/$(DEPDIR) gnu/java/math/$(DEPDIR) gnu/java/net/$(DEPDIR) gnu/java/net/protocol/core/$(DEPDIR) gnu/java/net/protocol/file/$(DEPDIR) gnu/java/net/protocol/ftp/$(DEPDIR) gnu/java/net/protocol/gcjlib/$(DEPDIR) gnu/java/net/protocol/http/$(DEPDIR) gnu/java/net/protocol/http/event/$(DEPDIR) gnu/java/net/protocol/jar/$(DEPDIR) gnu/java/nio/$(DEPDIR) gnu/java/nio/channels/$(DEPDIR) gnu/java/nio/charset/$(DEPDIR) gnu/java/rmi/$(DEPDIR) gnu/java/rmi/dgc/$(DEPDIR) gnu/java/rmi/registry/$(DEPDIR) gnu/java/rmi/rmic/$(DEPDIR) gnu/java/rmi/server/$(DEPDIR) gnu/java/security/$(DEPDIR) gnu/java/security/action/$(DEPDIR) gnu/java/security/ber/$(DEPDIR) gnu/java/security/der/$(DEPDIR) gnu/java/security/pkcs/$(DEPDIR) gnu/java/security/provider/$(DEPDIR) gnu/java/security/util/$(DEPDIR) gnu/java/security/x509/$(DEPDIR) gnu/java/security/x509/ext/$(DEPDIR) gnu/java/text/$(DEPDIR) gnu/java/util/$(DEPDIR) gnu/java/util/prefs/$(DEPDIR) gnu/javax/swing/text/html/parser/$(DEPDIR) gnu/javax/swing/text/html/parser/models/$(DEPDIR) gnu/javax/swing/text/html/parser/support/$(DEPDIR) gnu/javax/swing/text/html/parser/support/low/$(DEPDIR) gnu/regexp/$(DEPDIR) java/applet/$(DEPDIR) java/awt/$(DEPDIR) java/awt/color/$(DEPDIR) java/awt/datatransfer/$(DEPDIR) java/awt/dnd/$(DEPDIR) java/awt/dnd/peer/$(DEPDIR) java/awt/event/$(DEPDIR) java/awt/font/$(DEPDIR) java/awt/geom/$(DEPDIR) java/awt/im/$(DEPDIR) java/awt/im/spi/$(DEPDIR) java/awt/image/$(DEPDIR) java/awt/image/renderable/$(DEPDIR) java/awt/peer/$(DEPDIR) java/awt/print/$(DEPDIR) java/beans/$(DEPDIR) java/beans/beancontext/$(DEPDIR) java/io/$(DEPDIR) java/lang/$(DEPDIR) java/lang/ref/$(DEPDIR) java/lang/reflect/$(DEPDIR) java/math/$(DEPDIR) java/net/$(DEPDIR) java/nio/$(DEPDIR) java/nio/channels/$(DEPDIR) java/nio/channels/spi/$(DEPDIR) java/nio/charset/$(DEPDIR) java/nio/charset/spi/$(DEPDIR) java/rmi/$(DEPDIR) java/rmi/activation/$(DEPDIR) java/rmi/dgc/$(DEPDIR) java/rmi/registry/$(DEPDIR) java/rmi/server/$(DEPDIR) java/security/$(DEPDIR) java/security/acl/$(DEPDIR) java/security/cert/$(DEPDIR) java/security/interfaces/$(DEPDIR) java/security/spec/$(DEPDIR) java/sql/$(DEPDIR) java/text/$(DEPDIR) java/util/$(DEPDIR) java/util/jar/$(DEPDIR) java/util/logging/$(DEPDIR) java/util/prefs/$(DEPDIR) java/util/regex/$(DEPDIR) java/util/zip/$(DEPDIR) javax/accessibility/$(DEPDIR) javax/crypto/$(DEPDIR) javax/crypto/interfaces/$(DEPDIR) javax/crypto/spec/$(DEPDIR) javax/naming/$(DEPDIR) javax/naming/directory/$(DEPDIR) javax/naming/event/$(DEPDIR) javax/naming/ldap/$(DEPDIR) javax/naming/spi/$(DEPDIR) javax/net/$(DEPDIR) javax/net/ssl/$(DEPDIR) javax/print/$(DEPDIR) javax/print/attribute/$(DEPDIR) javax/print/attribute/standard/$(DEPDIR) javax/print/event/$(DEPDIR) javax/security/auth/$(DEPDIR) javax/security/auth/callback/$(DEPDIR) javax/security/auth/login/$(DEPDIR) javax/security/auth/spi/$(DEPDIR) javax/security/auth/x500/$(DEPDIR) javax/security/cert/$(DEPDIR) javax/security/sasl/$(DEPDIR) javax/sql/$(DEPDIR) javax/swing/$(DEPDIR) javax/swing/border/$(DEPDIR) javax/swing/colorchooser/$(DEPDIR) javax/swing/event/$(DEPDIR) javax/swing/filechooser/$(DEPDIR) javax/swing/plaf/$(DEPDIR) javax/swing/plaf/basic/$(DEPDIR) javax/swing/plaf/metal/$(DEPDIR) javax/swing/table/$(DEPDIR) javax/swing/text/$(DEPDIR) javax/swing/text/html/$(DEPDIR) javax/swing/text/html/parser/$(DEPDIR) javax/swing/text/rtf/$(DEPDIR) javax/swing/tree/$(DEPDIR) javax/swing/undo/$(DEPDIR) javax/transaction/$(DEPDIR) javax/transaction/xa/$(DEPDIR) jni/classpath/$(DEPDIR) jni/gtk-peer/$(DEPDIR) org/ietf/jgss/$(DEPDIR) sysdep/$(DEPDIR)
        -rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
diff --git a/libjava/gnu/javax/swing/text/html/package.html b/libjava/gnu/javax/swing/text/html/package.html
new file mode 100644 (file)
index 0000000..622c4fc
--- /dev/null
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<!-- package.html - describes classes in javax.swing.text.html package.
+   Copyright (C) 2002 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. -->
+
+<html>
+<head><title>GNU Classpath - javax.swing.text.html</title></head>
+
+<body>
+<p> Provides supporting classes for web browsers,
+ web robots, web page content analysers, web editors and
+ other applications applications working with Hypertext
+ Markup Language (HTML).
+</p>
+
+</body>
+</html>
diff --git a/libjava/gnu/javax/swing/text/html/parser/HTML_401F.java b/libjava/gnu/javax/swing/text/html/parser/HTML_401F.java
new file mode 100755 (executable)
index 0000000..bd2f9f9
--- /dev/null
@@ -0,0 +1,3729 @@
+/* HTML_401F.java -- HTML 4.01 FRAMESET DTD java conception.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.swing.text.html.parser;
+
+import gnu.javax.swing.text.html.parser.models.PCDATAonly_model;
+import gnu.javax.swing.text.html.parser.models.TableRowContentModel;
+import gnu.javax.swing.text.html.parser.models.noTagModel;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+import javax.swing.text.html.parser.*;
+import javax.swing.text.html.parser.ContentModel;
+import javax.swing.text.html.parser.DTDConstants;
+
+/**
+ * This class represents the java implementation of the HTML 4.01
+ * ( -//W3C//DTD HTML 4.01 Frameset//EN ) Frameset version. The
+ * Frameset version includes as recommended, as obsoleted features and
+ * also the frameset support. This the default DTD to parse HTML
+ * documents in this implementation, containing 315 pre-defined general
+ * entities and 92 elements.
+ *
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class HTML_401F
+  extends gnuDTD
+  implements DTDConstants, Serializable
+{
+   private static final long serialVersionUID = 1;
+
+   /**
+    * The standard name of this DTD,
+    * '-//W3C//DTD HTML 4.01 Frameset//EN'
+    */
+   public static final String DTD_NAME = "-//W3C//DTD HTML 4.01 Frameset//EN";
+
+   /**
+    * The integer representing length in pixels.
+    */
+    static final int PIXELS = NUMBER;
+
+    static final String[] NONE = new String[0];
+
+  /* Define the HTML tags. */
+    static final String PCDATA = "#pcdata";
+    static final String A = "a";
+    static final String ABBR = "abbr";
+    static final String ACRONYM = "acronym";
+    static final String ADDRESS = "address";
+    static final String APPLET = "applet";
+    static final String AREA = "area";
+    static final String B = "b";
+    static final String BASE = "base";
+    static final String BASEFONT = "basefont";
+    static final String BDO = "bdo";
+    static final String BIG = "big";
+    static final String BLOCKQUOTE = "blockquote";
+    static final String BODY = "body";
+    static final String BR = "br";
+    static final String BUTTON = "button";
+    static final String CAPTION = "caption";
+    static final String CENTER = "center";
+    static final String CITE = "cite";
+    static final String CODE = "code";
+    static final String COL = "col";
+    static final String COLGROUP = "colgroup";
+    static final String DEFAULTS = "default";
+    static final String DD = "dd";
+    static final String DEL = "del";
+    static final String DFN = "dfn";
+    static final String DIR = "dir";
+    static final String DIV = "div";
+    static final String DL = "dl";
+    static final String DT = "dt";
+    static final String EM = "em";
+    static final String FIELDSET = "fieldset";
+    static final String FONT = "font";
+    static final String FORM = "form";
+    static final String FRAME = "frame";
+    static final String FRAMESET = "frameset";
+    static final String H1 = "h1";
+    static final String H2 = "h2";
+    static final String H3 = "h3";
+    static final String H4 = "h4";
+    static final String H5 = "h5";
+    static final String H6 = "h6";
+    static final String HEAD = "head";
+    static final String HR = "hr";
+    static final String HTML = "html";
+    static final String I = "i";
+    static final String IFRAME = "iframe";
+    static final String IMG = "img";
+    static final String INPUT = "input";
+    static final String INS = "ins";
+    static final String ISINDEX = "isindex";
+    static final String KBD = "kbd";
+    static final String LABEL = "label";
+    static final String LEGEND = "legend";
+    static final String LI = "li";
+    static final String LINK = "link";
+    static final String MAP = "map";
+    static final String MENU = "menu";
+    static final String META = "meta";
+    static final String NOFRAMES = "noframes";
+    static final String NOSCRIPT = "noscript";
+    static final String NONES    = "none";
+    static final String sNAME    = "name";
+    static final String OBJECT = "object";
+    static final String OL = "ol";
+    static final String OPTGROUP = "optgroup";
+    static final String OPTION = "option";
+    static final String P = "p";
+    static final String PARAM = "param";
+    static final String PRE = "pre";
+    static final String Q = "q";
+    static final String S = "s";
+    static final String SAMP = "samp";
+    static final String SCRIPT = "script";
+    static final String SELECT = "select";
+    static final String SMALL = "small";
+    static final String SPAN = "span";
+    static final String STRIKE = "strike";
+    static final String STRONG = "strong";
+    static final String STYLE = "style";
+    static final String SUB = "sub";
+    static final String SUP = "sup";
+    static final String TABLE = "table";
+    static final String TBODY = "tbody";
+    static final String TD = "td";
+    static final String TEXTAREA = "textarea";
+    static final String TFOOT = "tfoot";
+    static final String TH = "th";
+    static final String THEAD = "thead";
+    static final String TITLE = "title";
+    static final String TR = "tr";
+    static final String TT = "tt";
+    static final String U = "u";
+    static final String UL = "ul";
+    static final String VAR = "var";
+
+  /* Define the attribute constants. */
+    static final String C_0 = "0";
+    static final String C_1 = "1";
+    static final String CHECKBOX = "checkbox";
+    static final String DATA = "data";
+    static final String FILE = "file";
+    static final String GET = "get";
+    static final String HIDDEN = "hidden";
+    static final String IMAGE = "image";
+    static final String PASSWORD = "password";
+    static final String POST = "post";
+    static final String RADIO = "radio";
+    static final String REF = "ref";
+    static final String RESET = "reset";
+    static final String SUBMIT = "submit";
+    static final String TEXT = "text";
+    static final String ABOVE = "above";
+    static final String ACCEPT = "accept";
+    static final String ACCEPTCHARSET = "accept-charset";
+    static final String ACCESSKEY = "accesskey";
+    static final String ACTION = "action";
+    static final String ALIGN = "align";
+    static final String ALINK = "alink";
+    static final String ALL = "all";
+    static final String ALT = "alt";
+    static final String APPLICATION_X_WWW_FORM_URLENCODED
+     = "application/x-www-form-urlencoded";
+    static final String ARCHIVE = "archive";
+    static final String AUTO = "auto";
+    static final String AXIS = "axis";
+    static final String BACKGROUND = "background";
+    static final String BASELINE = "baseline";
+    static final String BELOW = "below";
+    static final String BGCOLOR = "bgcolor";
+    static final String BORDER = "border";
+    static final String BOTTOM = "bottom";
+    static final String BOX = "box";
+    static final String CELLPADDING = "cellpadding";
+    static final String CELLSPACING = "cellspacing";
+    static final String CHAR = "char";
+    static final String CHAROFF = "charoff";
+    static final String CHARSET = "charset";
+    static final String CHECKED = "checked";
+    static final String CIRCLE = "circle";
+    static final String CLASS = "class";
+    static final String CLASSID = "classid";
+    static final String CLEAR = "clear";
+    static final String CODEBASE = "codebase";
+    static final String CODETYPE = "codetype";
+    static final String COLOR = "color";
+    static final String COLS = "cols";
+    static final String COLSPAN = "colspan";
+    static final String COMPACT = "compact";
+    static final String CONTENT = "content";
+    static final String COORDS = "coords";
+    static final String DATAPAGESIZE = "datapagesize";
+    static final String DATETIME = "datetime";
+    static final String DECLARE = "declare";
+    static final String DEFER = "defer";
+    static final String DISABLED = "disabled";
+    static final String DISC = "disc";
+    static final String ENCTYPE = "enctype";
+    static final String EVENT = "event";
+    static final String FACE = "face";
+    static final String FOR = "for";
+    static final String FRAMEBORDER = "frameborder";
+    static final String GROUPS = "groups";
+    static final String HEADERS = "headers";
+    static final String HEIGHT = "height";
+    static final String HREF = "href";
+    static final String HREFLANG = "hreflang";
+    static final String HSIDES = "hsides";
+    static final String HSPACE = "hspace";
+    static final String HTTPEQUIV = "http-equiv";
+    static final String sID = "id";
+    static final String ISMAP = "ismap";
+    static final String JUSTIFY = "justify";
+    static final String LANG = "lang";
+    static final String LANGUAGE = "language";
+    static final String LEFT = "left";
+    static final String LHS = "lhs";
+    static final String LONGDESC = "longdesc";
+    static final String LTR = "ltr";
+    static final String MARGINHEIGHT = "marginheight";
+    static final String MARGINWIDTH = "marginwidth";
+    static final String MAXLENGTH = "maxlength";
+    static final String MEDIA = "media";
+    static final String METHOD = "method";
+    static final String MIDDLE = "middle";
+    static final String MULTIPLE = "multiple";
+    static final String NO = "no";
+    static final String NOHREF = "nohref";
+    static final String NORESIZE = "noresize";
+    static final String NOSHADE = "noshade";
+    static final String NOWRAP = "nowrap";
+    static final String ONBLUR = "onblur";
+    static final String ONCHANGE = "onchange";
+    static final String ONCLICK = "onclick";
+    static final String ONDBLCLICK = "ondblclick";
+    static final String ONFOCUS = "onfocus";
+    static final String ONKEYDOWN = "onkeydown";
+    static final String ONKEYPRESS = "onkeypress";
+    static final String ONKEYUP = "onkeyup";
+    static final String ONLOAD = "onload";
+    static final String ONMOUSEDOWN = "onmousedown";
+    static final String ONMOUSEMOVE = "onmousemove";
+    static final String ONMOUSEOUT = "onmouseout";
+    static final String ONMOUSEOVER = "onmouseover";
+    static final String ONMOUSEUP = "onmouseup";
+    static final String ONRESET = "onreset";
+    static final String ONSELECT = "onselect";
+    static final String ONSUBMIT = "onsubmit";
+    static final String ONUNLOAD = "onunload";
+    static final String POLY = "poly";
+    static final String PROFILE = "profile";
+    static final String PROMPT = "prompt";
+    static final String READONLY = "readonly";
+    static final String RECT = "rect";
+    static final String REL = "rel";
+    static final String REV = "rev";
+    static final String RHS = "rhs";
+    static final String RIGHT = "right";
+    static final String ROW = "row";
+    static final String ROWGROUP = "rowgroup";
+    static final String ROWS = "rows";
+    static final String ROWSPAN = "rowspan";
+    static final String RTL = "rtl";
+    static final String RULES = "rules";
+    static final String SCHEME = "scheme";
+    static final String SCOPE = "scope";
+    static final String SCROLLING = "scrolling";
+    static final String SELECTED = "selected";
+    static final String SHAPE = "shape";
+    static final String SIZE = "size";
+    static final String SQUARE = "square";
+    static final String SRC = "src";
+    static final String STANDBY = "standby";
+    static final String START = "start";
+    static final String SUMMARY = "summary";
+    static final String TABINDEX = "tabindex";
+    static final String TARGET = "target";
+    static final String TOP = "top";
+    static final String TYPE = "type";
+    static final String USEMAP = "usemap";
+    static final String VALIGN = "valign";
+    static final String VALUE = "value";
+    static final String VALUETYPE = "valuetype";
+    static final String VERSION = "version";
+    static final String VLINK = "vlink";
+    static final String VOID = "void";
+    static final String VSIDES = "vsides";
+    static final String VSPACE = "vspace";
+    static final String WIDTH = "width";
+    static final String YES = "yes";
+
+    static final String[] BLOCK =
+    new String[] {
+      ADDRESS, BLOCKQUOTE, CENTER, DIR,
+      DIV, DL, FIELDSET, FORM,
+      H1, H2, H3, H4, H5, H6,
+      HR, ISINDEX, MENU, NOFRAMES, NOSCRIPT,
+      OL, P, PRE, TABLE, UL
+    };
+
+   /**
+   * Creates this DTD, filling in the entities and attributes data
+   * as defined in -//W3C//DTD HTML 4.01 Frameset//EN.
+   */
+  protected HTML_401F()
+  {
+    super(DTD_NAME);
+    defineEntities();
+    defineElements();
+  }
+
+  /**
+   * Either takes the document (by name) from DTD table, or
+   * creates a new instance and registers it in the tabe.
+   * The document is registerd under name "-//W3C//DTD HTML 4.01 Frameset//EN".
+   * @return The new or existing DTD for parsing HTML 4.01 Frameset.
+   */
+  public static DTD getInstance()
+  {
+    try
+      {
+        DTD dtd = getDTD(DTD_NAME);
+        if (dtd == null || dtd.getClass().equals(DTD.class))
+          {
+            dtd = new HTML_401F();
+            putDTDHash(DTD_NAME, dtd);
+          }
+        return dtd;
+      }
+    catch (IOException ex)
+      {
+        throw new Error("This should never happen. Report the bug.", ex);
+      }
+  }
+
+  /**
+   * Define all elements of this DTD.
+   */
+  protected void defineElements()
+  {
+    /* Define the elements. */
+      defElement(PCDATA, 0, false, false, null, NONE, NONE,
+        new AttributeList[ 0 ]);
+
+      defElement(A, 0, false, false, null,
+      new String[] {
+        A
+      }
+      ,
+      new String[] {
+        PCDATA, ABBR, ACRONYM, APPLET,
+        B, BASEFONT, BDO, BIG, BR,
+        BUTTON, CITE, CODE, DFN, EM,
+        FONT, I, IFRAME, IMG, INPUT,
+        KBD, LABEL, MAP, OBJECT, Q,
+        S, SAMP, SCRIPT, SELECT, SMALL,
+        SPAN, STRIKE, STRONG, SUB, SUP,
+        TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(CHARSET, null, null, 0, IMPLIED),
+        attr(TYPE, null, null, 0, IMPLIED),
+        attr(sNAME, null, null, 0, IMPLIED),
+        attr(HREF, null, null, 0, IMPLIED),
+        attr(HREFLANG, null, null, 0, IMPLIED),
+        attr(TARGET, null, null, 0, IMPLIED),
+        attr(REL, null, null, 0, IMPLIED),
+        attr(REV, null, null, 0, IMPLIED),
+        attr(ACCESSKEY, null, null, 0, IMPLIED),
+        attr(SHAPE, RECT,  new String[] { RECT, CIRCLE, POLY,  DEFAULTS },
+          0, DEFAULT),
+        attr(COORDS, null, null, 0, IMPLIED),
+        attr(TABINDEX, null, null, NUMBER, IMPLIED),
+        attr(ONFOCUS, null, null, 0, IMPLIED),
+        attr(ONBLUR, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(ABBR, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(ACRONYM, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(ADDRESS, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        P
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(APPLET, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, FORM, H1, H2,
+        H3, H4, H5, H6, HR,
+        ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL, PARAM
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(CODEBASE, null, null, 0, IMPLIED),
+        attr(ARCHIVE, null, null, 0, IMPLIED),
+        attr(CODE, null, null, 0, IMPLIED),
+        attr(OBJECT, null, null, 0, IMPLIED),
+        attr(ALT, null, null, 0, IMPLIED),
+        attr(sNAME, null, null, 0, IMPLIED),
+        attr(WIDTH, null, null, 0, REQUIRED),
+        attr(HEIGHT, null, null, 0, REQUIRED),
+        attr(ALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, LEFT, RIGHT },
+          0, IMPLIED),
+        attr(HSPACE, null, null, 0, IMPLIED),
+        attr(VSPACE, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(AREA, EMPTY, false, true, null,
+      NONE
+      ,
+      NONE
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(SHAPE, RECT,  new String[] { RECT, CIRCLE, POLY, DEFAULTS },
+          0, DEFAULT),
+        attr(COORDS, null, null, 0, IMPLIED),
+        attr(HREF, null, null, 0, IMPLIED),
+        attr(TARGET, null, null, 0, IMPLIED),
+        attr(NOHREF, null,  new String[] { NOHREF }, 0, IMPLIED),
+        attr(ALT, null, null, 0, REQUIRED),
+        attr(TABINDEX, null, null, NUMBER, IMPLIED),
+        attr(ACCESSKEY, null, null, 0, IMPLIED),
+        attr(ONFOCUS, null, null, 0, IMPLIED),
+        attr(ONBLUR, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(B, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(BASE, EMPTY, false, true, null,
+      NONE
+      ,
+      NONE
+    ,
+      new AttributeList[] {
+        attr(HREF, null, null, 0, IMPLIED),
+        attr(TARGET, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(BASEFONT, EMPTY, false, true, null,
+      NONE
+      ,
+      NONE
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(SIZE, null, null, 0, REQUIRED),
+        attr(COLOR, null, null, 0, IMPLIED),
+        attr(FACE, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(BDO, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, REQUIRED)
+      }
+    );
+      defElement(BIG, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(BLOCKQUOTE, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, FORM, H1, H2,
+        H3, H4, H5, H6, HR,
+        ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(CITE, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(BODY, 0, true, true, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DEL, DIR,
+        DIV, DL, FIELDSET, FORM, H1,
+        H2, H3, H4, H5, H6,
+        HR, INS, ISINDEX, MENU, NOFRAMES,
+        NOSCRIPT, OL, P, PRE, TABLE,
+        UL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ONLOAD, null, null, 0, IMPLIED),
+        attr(ONUNLOAD, null, null, 0, IMPLIED),
+        attr(BACKGROUND, null, null, 0, IMPLIED),
+        attr(BGCOLOR, null, null, 0, IMPLIED),
+        attr(TEXT, null, null, 0, IMPLIED),
+        attr(LINK, null, null, 0, IMPLIED),
+        attr(VLINK, null, null, 0, IMPLIED),
+        attr(ALINK, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(BR, EMPTY, false, true, null,
+      NONE
+      ,
+      NONE
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(CLEAR, "NONE",  new String[] { LEFT, ALL, RIGHT, NONES },
+          0, DEFAULT)
+      }
+    );
+      defElement(BUTTON, 0, false, false, null,
+      new String[] {
+        A, BUTTON, IFRAME, INPUT,
+        LABEL, SELECT, TEXTAREA, FIELDSET, FORM,
+        ISINDEX
+      }
+      ,
+      new String[] {
+        PCDATA, ABBR, ACRONYM, APPLET,
+        B, BASEFONT, BDO, BIG, BR,
+        CITE, CODE, DFN, EM, FONT,
+        I, IMG, KBD, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SMALL,
+        SPAN, STRIKE, STRONG, SUB, SUP,
+        TT, U, VAR, ADDRESS, BLOCKQUOTE,
+        CENTER, DIR, DIV, DL, H1,
+        H2, H3, H4, H5, H6,
+        HR, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(sNAME, null, null, 0, IMPLIED),
+        attr(VALUE, null, null, 0, IMPLIED),
+        attr(TYPE, SUBMIT,  new String[] { BUTTON, SUBMIT, RESET }, 0, DEFAULT),
+        attr(DISABLED, null,  new String[] { DISABLED }, 0, IMPLIED),
+        attr(TABINDEX, null, null, NUMBER, IMPLIED),
+        attr(ACCESSKEY, null, null, 0, IMPLIED),
+        attr(ONFOCUS, null, null, 0, IMPLIED),
+        attr(ONBLUR, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(CAPTION, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { TOP, BOTTOM, LEFT, RIGHT },
+          0, IMPLIED)
+      }
+    );
+      defElement(CENTER, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, FORM, H1, H2,
+        H3, H4, H5, H6, HR,
+        ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(CITE, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(CODE, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(COL, EMPTY, false, true, null,
+      NONE
+      ,
+      NONE
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(SPAN, C_1, null, NUMBER, DEFAULT),
+        attr(WIDTH, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+          0, IMPLIED),
+        attr(CHAR, null, null, 0, IMPLIED),
+        attr(CHAROFF, null, null, 0, IMPLIED),
+        attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+          0, IMPLIED)
+      }
+    );
+      defElement(COLGROUP, 0, false, true, null,
+      NONE
+      ,
+      new String[] {
+        COL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(SPAN, C_1, null, NUMBER, DEFAULT),
+        attr(WIDTH, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+          0, IMPLIED),
+        attr(CHAR, null, null, 0, IMPLIED),
+        attr(CHAROFF, null, null, 0, IMPLIED),
+        attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+          0, IMPLIED)
+      }
+    );
+      defElement(DD, 0, false, true, new ContentModel(0,
+        new noTagModel( new String[] { DD, DT } ), null ),
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, FORM, H1, H2,
+        H3, H4, H5, H6, HR,
+        ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(DEL, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, FORM, H1, H2,
+        H3, H4, H5, H6, HR,
+        ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(CITE, null, null, 0, IMPLIED),
+        attr(DATETIME, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(DFN, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(DIR, 0, false, false, createListModel(),
+      new String[] {
+        ADDRESS, BLOCKQUOTE, CENTER, DIR,
+        DIV, DL, FIELDSET, FORM, H1,
+        H2, H3, H4, H5, H6,
+        HR, ISINDEX, MENU, NOFRAMES, NOSCRIPT,
+        OL, P, PRE, TABLE, UL
+      }
+      ,
+      new String[] {
+        LI, UL, OL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(COMPACT, null,  new String[] { COMPACT }, 0, IMPLIED)
+      }
+    );
+      defElement(DIV, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, FORM, H1, H2,
+        H3, H4, H5, H6, HR,
+        ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+          0, IMPLIED)
+      }
+    );
+      defElement(DL, 0, false, false, createDefListModel(),
+      NONE
+      ,
+      new String[] {
+        DD, DT
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(COMPACT, null,  new String[] { COMPACT }, 0, IMPLIED)
+      }
+    );
+      defElement(DT, 0, false, true,
+        new ContentModel(0,
+         new noTagModel( new String[] { DT, DD } ), null),
+        BLOCK
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(EM, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(FIELDSET, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, FORM, H1, H2,
+        H3, H4, H5, H6, HR,
+        ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL, LEGEND
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(FONT, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(SIZE, null, null, 0, IMPLIED),
+        attr(COLOR, null, null, 0, IMPLIED),
+        attr(FACE, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(FORM, 0, false, false, null,
+      new String[] {
+        FORM
+      }
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, H1, H2, H3,
+        H4, H5, H6, HR, ISINDEX,
+        MENU, NOFRAMES, NOSCRIPT, OL, P,
+        PRE, TABLE, UL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ACTION, null, null, 0, REQUIRED),
+        attr(METHOD, GET,  new String[] { GET, POST }, 0, DEFAULT),
+        attr(ENCTYPE, APPLICATION_X_WWW_FORM_URLENCODED, null, 0, DEFAULT),
+        attr(ACCEPT, null, null, 0, IMPLIED),
+        attr(sNAME, null, null, 0, IMPLIED),
+        attr(ONSUBMIT, null, null, 0, IMPLIED),
+        attr(ONRESET, null, null, 0, IMPLIED),
+        attr(TARGET, null, null, 0, IMPLIED),
+        attr(ACCEPTCHARSET, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(FRAME, EMPTY, false, true, null,
+      NONE
+      ,
+      NONE
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LONGDESC, null, null, 0, IMPLIED),
+        attr(sNAME, null, null, 0, IMPLIED),
+        attr(SRC, null, null, 0, IMPLIED),
+        attr(FRAMEBORDER, C_1,  new String[] { C_1, C_0 }, 0, DEFAULT),
+        attr(MARGINWIDTH, null, null, PIXELS, IMPLIED),
+        attr(MARGINHEIGHT, null, null, PIXELS, IMPLIED),
+        attr(NORESIZE, null,  new String[] { NORESIZE }, 0, IMPLIED),
+        attr(SCROLLING, AUTO,  new String[] { YES, NO, AUTO }, 0, DEFAULT)
+      }
+    );
+      defElement(FRAMESET, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        NOFRAMES, FRAME, FRAMESET
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(ROWS, null, null, 0, IMPLIED),
+        attr(COLS, null, null, 0, IMPLIED),
+        attr(ONLOAD, null, null, 0, IMPLIED),
+        attr(ONUNLOAD, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(H1, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+          0, IMPLIED)
+      }
+    );
+      defElement(H2, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+          0, IMPLIED)
+      }
+    );
+      defElement(H3, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+          0, IMPLIED)
+      }
+    );
+      defElement(H4, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+          0, IMPLIED)
+      }
+    );
+      defElement(H5, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+          0, IMPLIED)
+      }
+    );
+      defElement(H6, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+          0, IMPLIED)
+      }
+    );
+      defElement(HEAD, 0, true, true, null,
+      new String[] {
+        BODY
+      }
+      ,
+      new String[] {
+       TITLE, ISINDEX, BASE,
+       SCRIPT, STYLE, META, LINK, OBJECT
+      }
+    ,
+      new AttributeList[] {
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(PROFILE, null, null, 0, IMPLIED)
+      }
+    );
+
+      defElement(HR, EMPTY, false, true, null,
+      NONE
+      ,
+      NONE
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT }, 0, IMPLIED),
+        attr(NOSHADE, null,  new String[] { NOSHADE }, 0, IMPLIED),
+        attr(SIZE, null, null, 0, IMPLIED),
+        attr(WIDTH, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(HTML, 0, true, true, createHtmlContentModel(),
+      NONE
+      ,
+      new String[] {
+        HEAD, BODY
+      }
+    ,
+      new AttributeList[] {
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(VERSION, DTD_NAME, null, 0, FIXED)
+      }
+    );
+      defElement(I, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(IFRAME, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, FORM, H1, H2,
+        H3, H4, H5, H6, HR,
+        ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LONGDESC, null, null, 0, IMPLIED),
+        attr(sNAME, null, null, 0, IMPLIED),
+        attr(SRC, null, null, 0, IMPLIED),
+        attr(FRAMEBORDER, C_1,  new String[] { C_1, C_0 }, 0, DEFAULT),
+        attr(MARGINWIDTH, null, null, PIXELS, IMPLIED),
+        attr(MARGINHEIGHT, null, null, PIXELS, IMPLIED),
+        attr(SCROLLING, AUTO,  new String[] { YES, NO, AUTO }, 0, DEFAULT),
+        attr(ALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, LEFT, RIGHT },
+          0, IMPLIED),
+        attr(HEIGHT, null, null, 0, IMPLIED),
+        attr(WIDTH, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(IMG, EMPTY, false, true, null,
+      NONE
+      ,
+      NONE
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(SRC, null, null, 0, REQUIRED),
+        attr(ALT, null, null, 0, REQUIRED),
+        attr(LONGDESC, null, null, 0, IMPLIED),
+        attr(sNAME, null, null, 0, IMPLIED),
+        attr(HEIGHT, null, null, 0, IMPLIED),
+        attr(WIDTH, null, null, 0, IMPLIED),
+        attr(USEMAP, null, null, 0, IMPLIED),
+        attr(ISMAP, null,  new String[] { ISMAP }, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, LEFT, RIGHT },
+          0, IMPLIED),
+        attr(BORDER, null, null, PIXELS, IMPLIED),
+        attr(HSPACE, null, null, 0, IMPLIED),
+        attr(VSPACE, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(INPUT, EMPTY, false, true, null,
+      NONE
+      ,
+      NONE
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(TYPE, TEXT,  new String[] { TEXT, PASSWORD, CHECKBOX, RADIO,
+          SUBMIT, RESET, FILE, HIDDEN, IMAGE, BUTTON }, 0, DEFAULT),
+        attr(sNAME, null, null, 0, IMPLIED),
+        attr(VALUE, null, null, 0, IMPLIED),
+        attr(CHECKED, null,  new String[] { CHECKED }, 0, IMPLIED),
+        attr(DISABLED, null,  new String[] { DISABLED }, 0, IMPLIED),
+        attr(READONLY, null,  new String[] { READONLY }, 0, IMPLIED),
+        attr(SIZE, null, null, 0, IMPLIED),
+        attr(MAXLENGTH, null, null, 0, IMPLIED),
+        attr(SRC, null, null, 0, IMPLIED),
+        attr(ALT, null, null, 0, IMPLIED),
+        attr(USEMAP, null, null, 0, IMPLIED),
+        attr(ISMAP, null,  new String[] { ISMAP }, 0, IMPLIED),
+        attr(TABINDEX, null, null, NUMBER, IMPLIED),
+        attr(ACCESSKEY, null, null, 0, IMPLIED),
+        attr(ONFOCUS, null, null, 0, IMPLIED),
+        attr(ONBLUR, null, null, 0, IMPLIED),
+        attr(ONSELECT, null, null, 0, IMPLIED),
+        attr(ONCHANGE, null, null, 0, IMPLIED),
+        attr(ACCEPT, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, LEFT, RIGHT },
+          0, IMPLIED)
+      }
+    );
+      defElement(INS, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, FORM, H1, H2,
+        H3, H4, H5, H6, HR,
+        ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(CITE, null, null, 0, IMPLIED),
+        attr(DATETIME, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(ISINDEX, EMPTY, false, true, null,
+      NONE
+      ,
+      NONE
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(PROMPT, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(KBD, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(LABEL, 0, false, false, null,
+      new String[] {
+        LABEL
+      }
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, MAP, OBJECT, Q,
+        S, SAMP, SCRIPT, SELECT, SMALL,
+        SPAN, STRIKE, STRONG, SUB, SUP,
+        TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(FOR, null, null, 0, IMPLIED),
+        attr(ACCESSKEY, null, null, 0, IMPLIED),
+        attr(ONFOCUS, null, null, 0, IMPLIED),
+        attr(ONBLUR, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(LEGEND, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ACCESSKEY, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { TOP, BOTTOM, LEFT, RIGHT },
+          0, IMPLIED)
+      }
+    );
+      // LI has a special content model that will be resolved into
+      // by transformer.
+      defElement(LI, 0, false, true,
+        new ContentModel(0,
+          new noTagModel(LI), null),
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, FORM, H1, H2,
+        H3, H4, H5, H6, HR,
+        ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(TYPE, null, null, 0, IMPLIED),
+        attr(VALUE, null, null, NUMBER, IMPLIED)
+      }
+    );
+      defElement(LINK, EMPTY, false, true, null,
+      NONE
+      ,
+      NONE
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(CHARSET, null, null, 0, IMPLIED),
+        attr(HREF, null, null, 0, IMPLIED),
+        attr(HREFLANG, null, null, 0, IMPLIED),
+        attr(TYPE, null, null, 0, IMPLIED),
+        attr(REL, null, null, 0, IMPLIED),
+        attr(REV, null, null, 0, IMPLIED),
+        attr(MEDIA, null, null, 0, IMPLIED),
+        attr(TARGET, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(MAP, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        ADDRESS, BLOCKQUOTE, CENTER, DIR,
+        DIV, DL, FIELDSET, FORM, H1,
+        H2, H3, H4, H5, H6,
+        HR, ISINDEX, MENU, NOFRAMES, NOSCRIPT,
+        OL, P, PRE, TABLE, UL,
+        AREA
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(sNAME, null, null, 0, REQUIRED)
+      }
+    );
+      defElement(MENU, 0, false, false, createListModel(),
+      new String[] {
+        ADDRESS, BLOCKQUOTE, CENTER, DIR,
+        DIV, DL, FIELDSET, FORM, H1,
+        H2, H3, H4, H5, H6,
+        HR, ISINDEX, MENU, NOFRAMES, NOSCRIPT,
+        OL, P, PRE, TABLE, UL
+      }
+      ,
+      new String[] {
+        LI, UL, OL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(COMPACT, null,  new String[] { COMPACT }, 0, IMPLIED)
+      }
+    );
+      defElement(META, EMPTY, false, true, null,
+      NONE
+      ,
+      NONE
+    ,
+      new AttributeList[] {
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(HTTPEQUIV, null, null, 0, IMPLIED),
+        attr(sNAME, null, null, NAME, IMPLIED),
+        attr(CONTENT, null, null, 0, REQUIRED),
+        attr(SCHEME, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(NOFRAMES, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, FORM, H1, H2,
+        H3, H4, H5, H6, HR,
+        ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(NOSCRIPT, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, FORM, H1, H2,
+        H3, H4, H5, H6, HR,
+        ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(OBJECT, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, FORM, H1, H2,
+        H3, H4, H5, H6, HR,
+        ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL, PARAM
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(DECLARE, null,  new String[] { DECLARE }, 0, IMPLIED),
+        attr(CLASSID, null, null, 0, IMPLIED),
+        attr(CODEBASE, null, null, 0, IMPLIED),
+        attr(DATA, null, null, 0, IMPLIED),
+        attr(TYPE, null, null, 0, IMPLIED),
+        attr(CODETYPE, null, null, 0, IMPLIED),
+        attr(ARCHIVE, null, null, 0, IMPLIED),
+        attr(STANDBY, null, null, 0, IMPLIED),
+        attr(HEIGHT, null, null, 0, IMPLIED),
+        attr(WIDTH, null, null, 0, IMPLIED),
+        attr(USEMAP, null, null, 0, IMPLIED),
+        attr(sNAME, null, null, 0, IMPLIED),
+        attr(TABINDEX, null, null, NUMBER, IMPLIED),
+        attr(ALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, LEFT, RIGHT },
+          0, IMPLIED),
+        attr(BORDER, null, null, PIXELS, IMPLIED),
+        attr(HSPACE, null, null, 0, IMPLIED),
+        attr(VSPACE, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(OL, 0, false, false, createListModel(),
+      NONE
+      ,
+      new String[] {
+      // See note on the createListModel method
+      LI, UL, OL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(TYPE, null, null, 0, IMPLIED),
+        attr(COMPACT, null,  new String[] { COMPACT }, 0, IMPLIED),
+        attr(START, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(OPTGROUP, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        OPTION
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(DISABLED, null,  new String[] { DISABLED }, 0, IMPLIED),
+        attr(LABEL, null, null, 0, REQUIRED)
+      }
+    );
+      defElement(OPTION, 0, false, true, new ContentModel(0,
+       new PCDATAonly_model(), null),
+       NONE,
+       new String[] {
+         PCDATA
+       }
+      ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(SELECTED, null,  new String[] { SELECTED }, 0, IMPLIED),
+        attr(DISABLED, null,  new String[] { DISABLED }, 0, IMPLIED),
+        attr(LABEL, null, null, 0, IMPLIED),
+        attr(VALUE, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(P, 0, false, true, new ContentModel( 0,
+       new noTagModel(P), null),
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY },
+          0, IMPLIED)
+      }
+    );
+      defElement(PARAM, EMPTY, false, true, null,
+      NONE
+      ,
+      NONE
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(sNAME, null, null, 0, REQUIRED),
+        attr(VALUE, null, null, 0, IMPLIED),
+        attr(VALUETYPE, DATA,  new String[] { DATA, REF, OBJECT }, 0, DEFAULT),
+        attr(TYPE, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(PRE, 0, false, false, null,
+      new String[] {
+        APPLET, BASEFONT, BIG, FONT,
+        IMG, OBJECT, SMALL, SUB, SUP
+      }
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        B, BDO, BR, BUTTON, CITE,
+        CODE, DFN, EM, I, IFRAME,
+        INPUT, KBD, LABEL, MAP, Q,
+        S, SAMP, SCRIPT, SELECT, SPAN,
+        STRIKE, STRONG, TEXTAREA, TT, U,
+        VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(WIDTH, null, null, NUMBER, IMPLIED)
+      }
+    );
+      defElement(Q, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(CITE, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(S, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(SAMP, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(SCRIPT, CDATA, false, false, null,
+      NONE
+      ,
+      NONE
+    ,
+      new AttributeList[] {
+        attr(CHARSET, null, null, 0, IMPLIED),
+        attr(TYPE, null, null, 0, REQUIRED),
+        attr(LANGUAGE, null, null, 0, IMPLIED),
+        attr(SRC, null, null, 0, IMPLIED),
+        attr(DEFER, null,  new String[] { DEFER }, 0, IMPLIED),
+        attr(EVENT, null, null, 0, IMPLIED),
+        attr(FOR, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(SELECT, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        OPTGROUP, OPTION
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(sNAME, null, null, 0, IMPLIED),
+        attr(SIZE, null, null, NUMBER, IMPLIED),
+        attr(MULTIPLE, null,  new String[] { MULTIPLE }, 0, IMPLIED),
+        attr(DISABLED, null,  new String[] { DISABLED }, 0, IMPLIED),
+        attr(TABINDEX, null, null, NUMBER, IMPLIED),
+        attr(ONFOCUS, null, null, 0, IMPLIED),
+        attr(ONBLUR, null, null, 0, IMPLIED),
+        attr(ONCHANGE, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(SMALL, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(SPAN, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(STRIKE, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(STRONG, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(STYLE, CDATA, false, false, null,
+      NONE
+      ,
+      NONE
+    ,
+      new AttributeList[] {
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(TYPE, null, null, 0, REQUIRED),
+        attr(MEDIA, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(SUB, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(SUP, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(TABLE, 0, false, false, createTableContentModel(),
+      NONE
+      ,
+      new String[] {
+        CAPTION, COL, COLGROUP, TBODY,
+        TFOOT, THEAD
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(SUMMARY, null, null, 0, IMPLIED),
+        attr(WIDTH, null, null, 0, IMPLIED),
+        attr(BORDER, null, null, PIXELS, IMPLIED),
+        attr(FRAME, null,  new String[] { VOID, ABOVE, BELOW, HSIDES, LHS, RHS,
+         VSIDES, BOX, BORDER }, 0, IMPLIED),
+        attr(RULES, null,  new String[] { NONES, GROUPS, ROWS, COLS, ALL },
+         0, IMPLIED),
+        attr(CELLSPACING, null, null, 0, IMPLIED),
+        attr(CELLPADDING, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT }, 0, IMPLIED),
+        attr(BGCOLOR, null, null, 0, IMPLIED),
+        attr(DATAPAGESIZE, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(TBODY, 0, true, true, model(TR,'+'),
+      NONE
+      ,
+      new String[] {
+        TR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+          0, IMPLIED),
+        attr(CHAR, null, null, 0, IMPLIED),
+        attr(CHAROFF, null, null, 0, IMPLIED),
+        attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+          0, IMPLIED)
+      }
+    );
+
+      defElement(TD, 0, false, true,
+       new ContentModel(0,
+        new noTagModel(new String[] {"TD", "TH", "TR" } ), null),
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, FORM, H1, H2,
+        H3, H4, H5, H6, HR,
+        ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ABBR, null, null, 0, IMPLIED),
+        attr(AXIS, null, null, 0, IMPLIED),
+        attr(HEADERS, null, null, 0, IMPLIED),
+        attr(SCOPE, null,  new String[] { ROW, COL, ROWGROUP, COLGROUP },
+          0, IMPLIED),
+        attr(ROWSPAN, C_1, null, NUMBER, DEFAULT),
+        attr(COLSPAN, C_1, null, NUMBER, DEFAULT),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+          0, IMPLIED),
+        attr(CHAR, null, null, 0, IMPLIED),
+        attr(CHAROFF, null, null, 0, IMPLIED),
+        attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+          0, IMPLIED),
+        attr(NOWRAP, null,  new String[] { NOWRAP }, 0, IMPLIED),
+        attr(BGCOLOR, null, null, 0, IMPLIED),
+        attr(WIDTH, null, null, 0, IMPLIED),
+        attr(HEIGHT, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(TEXTAREA, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(sNAME, null, null, 0, IMPLIED),
+        attr(ROWS, null, null, NUMBER, REQUIRED),
+        attr(COLS, null, null, NUMBER, REQUIRED),
+        attr(DISABLED, null,  new String[] { DISABLED }, 0, IMPLIED),
+        attr(READONLY, null,  new String[] { READONLY }, 0, IMPLIED),
+        attr(TABINDEX, null, null, NUMBER, IMPLIED),
+        attr(ACCESSKEY, null, null, 0, IMPLIED),
+        attr(ONFOCUS, null, null, 0, IMPLIED),
+        attr(ONBLUR, null, null, 0, IMPLIED),
+        attr(ONSELECT, null, null, 0, IMPLIED),
+        attr(ONCHANGE, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(TFOOT, 0, false, true, model(TR,'+'),
+      NONE
+      ,
+      new String[] {
+        TR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+          0, IMPLIED),
+        attr(CHAR, null, null, 0, IMPLIED),
+        attr(CHAROFF, null, null, 0, IMPLIED),
+        attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+         0, IMPLIED)
+      }
+    );
+      defElement(TH, 0, false, true, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR,
+        ADDRESS, BLOCKQUOTE, CENTER, DIR, DIV,
+        DL, FIELDSET, FORM, H1, H2,
+        H3, H4, H5, H6, HR,
+        ISINDEX, MENU, NOFRAMES, NOSCRIPT, OL,
+        P, PRE, TABLE, UL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ABBR, null, null, 0, IMPLIED),
+        attr(AXIS, null, null, 0, IMPLIED),
+        attr(HEADERS, null, null, 0, IMPLIED),
+        attr(SCOPE, null,  new String[] { ROW, COL, ROWGROUP, COLGROUP },
+          0, IMPLIED),
+        attr(ROWSPAN, C_1, null, NUMBER, DEFAULT),
+        attr(COLSPAN, C_1, null, NUMBER, DEFAULT),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+          0, IMPLIED),
+        attr(CHAR, null, null, 0, IMPLIED),
+        attr(CHAROFF, null, null, 0, IMPLIED),
+        attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+          0, IMPLIED),
+        attr(NOWRAP, null,  new String[] { NOWRAP }, 0, IMPLIED),
+        attr(BGCOLOR, null, null, 0, IMPLIED),
+        attr(WIDTH, null, null, 0, IMPLIED),
+        attr(HEIGHT, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(THEAD, 0, false, true, model(TR,'+'),
+      NONE
+      ,
+      new String[] {
+        TR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+          0, IMPLIED),
+        attr(CHAR, null, null, 0, IMPLIED),
+        attr(CHAROFF, null, null, 0, IMPLIED),
+        attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+          0, IMPLIED)
+      }
+    );
+      defElement(TITLE, 0, false, false, null,
+      new String[] {
+        OBJECT, SCRIPT, LINK, META,
+        STYLE
+      }
+      ,
+      new String[] {
+        PCDATA
+      }
+    ,
+      new AttributeList[] {
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED)
+      }
+    );
+      defElement(TR, 0, false, true,
+       new ContentModel(0, new TableRowContentModel(this), null),
+      NONE
+      ,
+      new String[] {
+        TD, TH
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(ALIGN, null,  new String[] { LEFT, CENTER, RIGHT, JUSTIFY, CHAR },
+          0, IMPLIED),
+        attr(CHAR, null, null, 0, IMPLIED),
+        attr(CHAROFF, null, null, 0, IMPLIED),
+        attr(VALIGN, null,  new String[] { TOP, MIDDLE, BOTTOM, BASELINE },
+          0, IMPLIED),
+        attr(BGCOLOR, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(TT, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(U, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+      defElement(UL, 0, false, false, createListModel(),
+      NONE
+      ,
+      new String[] {
+        // See note on the createListModel method
+        LI, UL, OL
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED),
+        attr(TYPE, null,  new String[] { DISC, SQUARE, CIRCLE }, 0, IMPLIED),
+        attr(COMPACT, null,  new String[] { COMPACT }, 0, IMPLIED)
+      }
+    );
+      defElement(VAR, 0, false, false, null,
+      NONE
+      ,
+      new String[] {
+        PCDATA, A, ABBR, ACRONYM,
+        APPLET, B, BASEFONT, BDO, BIG,
+        BR, BUTTON, CITE, CODE, DFN,
+        EM, FONT, I, IFRAME, IMG,
+        INPUT, KBD, LABEL, MAP, OBJECT,
+        Q, S, SAMP, SCRIPT, SELECT,
+        SMALL, SPAN, STRIKE, STRONG, SUB,
+        SUP, TEXTAREA, TT, U, VAR
+      }
+    ,
+      new AttributeList[] {
+        attr(sID, null, null, ID, IMPLIED),
+        attr(CLASS, null, null, 0, IMPLIED),
+        attr(STYLE, null, null, 0, IMPLIED),
+        attr(TITLE, null, null, 0, IMPLIED),
+        attr(LANG, null, null, 0, IMPLIED),
+        attr(DIR, null,  new String[] { LTR, RTL }, 0, IMPLIED),
+        attr(ONCLICK, null, null, 0, IMPLIED),
+        attr(ONDBLCLICK, null, null, 0, IMPLIED),
+        attr(ONMOUSEDOWN, null, null, 0, IMPLIED),
+        attr(ONMOUSEUP, null, null, 0, IMPLIED),
+        attr(ONMOUSEOVER, null, null, 0, IMPLIED),
+        attr(ONMOUSEMOVE, null, null, 0, IMPLIED),
+        attr(ONMOUSEOUT, null, null, 0, IMPLIED),
+        attr(ONKEYPRESS, null, null, 0, IMPLIED),
+        attr(ONKEYDOWN, null, null, 0, IMPLIED),
+        attr(ONKEYUP, null, null, 0, IMPLIED)
+      }
+    );
+
+  }
+
+  /**
+   * Define all entities in this DTD.
+   */
+  protected void defineEntities()
+  {
+    /* Define general entities */
+    defineEntity("AElig", 198);
+    defineEntity("Aacute", 193);
+    defineEntity("Acirc", 194);
+    defineEntity("Agrave", 192);
+    defineEntity("Alpha", 913);
+    defineEntity("Aring", 197);
+    defineEntity("Atilde", 195);
+    defineEntity("Auml", 196);
+    defineEntity("Beta", 914);
+    defineEntity("Ccedil", 199);
+    defineEntity("Chi", 935);
+    defineEntity("Dagger", 8225);
+    defineEntity("Delta", 916);
+    defineEntity("ETH", 208);
+    defineEntity("Eacute", 201);
+    defineEntity("Ecirc", 202);
+    defineEntity("Egrave", 200);
+    defineEntity("Epsilon", 917);
+    defineEntity("Eta", 919);
+    defineEntity("Euml", 203);
+    defineEntity("Gamma", 915);
+    defineEntity("Iacute", 205);
+    defineEntity("Icirc", 206);
+    defineEntity("Igrave", 204);
+    defineEntity("Iota", 921);
+    defineEntity("Iuml", 207);
+    defineEntity("Kappa", 922);
+    defineEntity("Lambda", 923);
+    defineEntity("Mu", 924);
+    defineEntity("Ntilde", 209);
+    defineEntity("Nu", 925);
+    defineEntity("OElig", 338);
+    defineEntity("Oacute", 211);
+    defineEntity("Ocirc", 212);
+    defineEntity("Ograve", 210);
+    defineEntity("Omega", 937);
+    defineEntity("Omicron", 927);
+    defineEntity("Oslash", 216);
+    defineEntity("Otilde", 213);
+    defineEntity("Ouml", 214);
+    defineEntity("Phi", 934);
+    defineEntity("Pi", 928);
+    defineEntity("Prime", 8243);
+    defineEntity("Psi", 936);
+    defineEntity("Rho", 929);
+    defineEntity("Scaron", 352);
+    defineEntity("Sigma", 931);
+    defineEntity("THORN", 222);
+    defineEntity("Tau", 932);
+    defineEntity("Theta", 920);
+    defineEntity("Uacute", 218);
+    defineEntity("Ucirc", 219);
+    defineEntity("Ugrave", 217);
+    defineEntity("Upsilon", 933);
+    defineEntity("Uuml", 220);
+    defineEntity("Xi", 926);
+    defineEntity("Yacute", 221);
+    defineEntity("Yuml", 376);
+    defineEntity("Zeta", 918);
+    defineEntity("aacute", 225);
+    defineEntity("acirc", 226);
+    defineEntity("acute", 180);
+    defineEntity("aelig", 230);
+    defineEntity("agrave", 224);
+    defineEntity("alefsym", 8501);
+    defineEntity("alpha", 945);
+    defineEntity("amp", 38);
+    defineEntity("and", 8743);
+    defineEntity("ang", 8736);
+    defineEntity("aring", 229);
+    defineEntity("asymp", 8776);
+    defineEntity("atilde", 227);
+    defineEntity("auml", 228);
+    defineEntity("bdquo", 8222);
+    defineEntity("beta", 946);
+    defineEntity("brvbar", 166);
+    defineEntity("bull", 8226);
+    defineEntity("cap", 8745);
+    defineEntity("ccedil", 231);
+    defineEntity("cedil", 184);
+    defineEntity("cent", 162);
+    defineEntity("chi", 967);
+    defineEntity("circ", 710);
+    defineEntity("clubs", 9827);
+    defineEntity("cong", 8773);
+    defineEntity("copy", 169);
+    defineEntity("crarr", 8629);
+    defineEntity("cup", 8746);
+    defineEntity("curren", 164);
+    defineEntity("dArr", 8659);
+    defineEntity("dagger", 8224);
+    defineEntity("darr", 8595);
+    defineEntity("deg", 176);
+    defineEntity("delta", 948);
+    defineEntity("diams", 9830);
+    defineEntity("divide", 247);
+    defineEntity("eacute", 233);
+    defineEntity("ecirc", 234);
+    defineEntity("egrave", 232);
+    defineEntity("empty", 8709);
+    defineEntity("emsp", 8195);
+    defineEntity("ensp", 8194);
+    defineEntity("epsilon", 949);
+    defineEntity("equiv", 8801);
+    defineEntity("eta", 951);
+    defineEntity("eth", 240);
+    defineEntity("euml", 235);
+    defineEntity("euro", 8364);
+    defineEntity("exist", 8707);
+    defineEntity("fnof", 402);
+    defineEntity("forall", 8704);
+    defineEntity("frac12", 189);
+    defineEntity("frac14", 188);
+    defineEntity("frac34", 190);
+    defineEntity("frasl", 8260);
+    defineEntity("gamma", 947);
+    defineEntity("ge", 8805);
+    defineEntity("gt", 62);
+    defineEntity("hArr", 8660);
+    defineEntity("harr", 8596);
+    defineEntity("hearts", 9829);
+    defineEntity("hellip", 8230);
+    defineEntity("iacute", 237);
+    defineEntity("icirc", 238);
+    defineEntity("iexcl", 161);
+    defineEntity("igrave", 236);
+    defineEntity("image", 8465);
+    defineEntity("infin", 8734);
+    defineEntity("int", 8747);
+    defineEntity("iota", 953);
+    defineEntity("iquest", 191);
+    defineEntity("isin", 8712);
+    defineEntity("iuml", 239);
+    defineEntity("kappa", 954);
+    defineEntity("lArr", 8656);
+    defineEntity("lambda", 955);
+    defineEntity("lang", 9001);
+    defineEntity("laquo", 171);
+    defineEntity("larr", 8592);
+    defineEntity("lceil", 8968);
+    defineEntity("ldquo", 8220);
+    defineEntity("le", 8804);
+    defineEntity("lfloor", 8970);
+    defineEntity("lowast", 8727);
+    defineEntity("loz", 9674);
+    defineEntity("lrm", 8206);
+    defineEntity("lsaquo", 8249);
+    defineEntity("lsquo", 8216);
+    defineEntity("lt", 60);
+    defineEntity("macr", 175);
+    defineEntity("mdash", 8212);
+    defineEntity("micro", 181);
+    defineEntity("middot", 183);
+    defineEntity("minus", 8722);
+    defineEntity("mu", 956);
+    defineEntity("nabla", 8711);
+    defineEntity("nbsp", 160);
+    defineEntity("ndash", 8211);
+    defineEntity("ne", 8800);
+    defineEntity("ni", 8715);
+    defineEntity("not", 172);
+    defineEntity("notin", 8713);
+    defineEntity("nsub", 8836);
+    defineEntity("ntilde", 241);
+    defineEntity("nu", 957);
+    defineEntity("oacute", 243);
+    defineEntity("ocirc", 244);
+    defineEntity("oelig", 339);
+    defineEntity("ograve", 242);
+    defineEntity("oline", 8254);
+    defineEntity("omega", 969);
+    defineEntity("omicron", 959);
+    defineEntity("oplus", 8853);
+    defineEntity("or", 8744);
+    defineEntity("ordf", 170);
+    defineEntity("ordm", 186);
+    defineEntity("oslash", 248);
+    defineEntity("otilde", 245);
+    defineEntity("otimes", 8855);
+    defineEntity("ouml", 246);
+    defineEntity("para", 182);
+    defineEntity("part", 8706);
+    defineEntity("permil", 8240);
+    defineEntity("perp", 8869);
+    defineEntity("phi", 966);
+    defineEntity("pi", 960);
+    defineEntity("piv", 982);
+    defineEntity("plusmn", 177);
+    defineEntity("pound", 163);
+    defineEntity("prime", 8242);
+    defineEntity("prod", 8719);
+    defineEntity("prop", 8733);
+    defineEntity("psi", 968);
+    defineEntity("quot", 34);
+    defineEntity("rArr", 8658);
+    defineEntity("radic", 8730);
+    defineEntity("rang", 9002);
+    defineEntity("raquo", 187);
+    defineEntity("rarr", 8594);
+    defineEntity("rceil", 8969);
+    defineEntity("rdquo", 8221);
+    defineEntity("real", 8476);
+    defineEntity("reg", 174);
+    defineEntity("rfloor", 8971);
+    defineEntity("rho", 961);
+    defineEntity("rlm", 8207);
+    defineEntity("rsaquo", 8250);
+    defineEntity("rsquo", 8217);
+    defineEntity("sbquo", 8218);
+    defineEntity("scaron", 353);
+    defineEntity("sdot", 8901);
+    defineEntity("sect", 167);
+    defineEntity("shy", 173);
+    defineEntity("sigma", 963);
+    defineEntity("sigmaf", 962);
+    defineEntity("sim", 8764);
+    defineEntity("spades", 9824);
+    defineEntity("sub", 8834);
+    defineEntity("sube", 8838);
+    defineEntity("sum", 8721);
+    defineEntity("sup", 8835);
+    defineEntity("sup1", 185);
+    defineEntity("sup2", 178);
+    defineEntity("sup3", 179);
+    defineEntity("supe", 8839);
+    defineEntity("szlig", 223);
+    defineEntity("tau", 964);
+    defineEntity("there4", 8756);
+    defineEntity("theta", 952);
+    defineEntity("thetasym", 977);
+    defineEntity("thinsp", 8201);
+    defineEntity("thorn", 254);
+    defineEntity("tilde", 732);
+    defineEntity("times", 215);
+    defineEntity("trade", 8482);
+    defineEntity("uArr", 8657);
+    defineEntity("uacute", 250);
+    defineEntity("uarr", 8593);
+    defineEntity("ucirc", 251);
+    defineEntity("ugrave", 249);
+    defineEntity("uml", 168);
+    defineEntity("upsih", 978);
+    defineEntity("upsilon", 965);
+    defineEntity("uuml", 252);
+    defineEntity("weierp", 8472);
+    defineEntity("xi", 958);
+    defineEntity("yacute", 253);
+    defineEntity("yen", 165);
+    defineEntity("yuml", 255);
+    defineEntity("zeta", 950);
+    defineEntity("zwj", 8205);
+    defineEntity("zwnj", 8204);
+  }
+
+  /**
+   * Crate a content model, consisting of the single
+   * element, specified by name.
+   */
+  private ContentModel model(String element)
+  {
+    return new ContentModel(getElement(element));
+  }
+
+  /**
+   * Crate a chain from the two content models,
+   * the last containing the given element and
+   * the specified unary operation.
+   */
+  private ContentModel model(String element, int unary)
+  {
+    ContentModel ct = model(element);
+    ct.type = unary;
+    return new ContentModel(0, ct);
+  }
+
+  /**
+   * Create the model HEAD, BODY
+   * @return
+   */
+  protected ContentModel createHtmlContentModel()
+  {
+    ContentModel head = model(HEAD);
+    ContentModel body = model(BODY);
+    head.next = body;
+    head.type = ',';
+    return head;
+  }
+
+  /**
+   * Create the model
+   * ( CAPTION ? , ( COL * | COLGROUP * ) , THEAD ? , TFOOT ? , TBODY + )
+   */
+  protected ContentModel createTableContentModel()
+  {
+     ContentModel col_colgroup = new ContentModel
+      ('|', model(COL,'*'), model(COLGROUP,'*') );
+
+     col_colgroup = new ContentModel('*', col_colgroup);
+     col_colgroup = new ContentModel(',', col_colgroup);
+
+     ContentModel caption = model(CAPTION,'?');
+     ContentModel thead   = model(THEAD, '?');
+     ContentModel tfoot   = model(TFOOT, '?');
+     ContentModel tbody   = model(TBODY, '+');
+
+     caption.next = col_colgroup;
+     col_colgroup.next = thead;
+     thead.next = tfoot;
+     tfoot.next = tbody;
+
+     caption.type = col_colgroup.type = thead.type = tfoot.type =
+     tbody.type = ',';
+
+     return caption;
+  }
+
+  /**
+   * Creates a model for &lt;DL&gt; tag:
+   * <code> DT+ | DL+ </code>.
+   * @return
+   */
+  protected ContentModel createDefListModel()
+  {
+    ContentModel dt = model(DT, '+');
+    ContentModel dd = model(DD, '+');
+
+    dt.next = dd;
+    dt.type = dd.type = '|';
+    return dt;
+  }
+
+  /**
+   * This model is used for UL, OL, MENU and DIR.
+   *  HTML 4.01 specifies LI only, but the nested
+   * list seems rendered correctly only if
+   * it is not enclosed into <LI>-</LI> of the
+   * parent list.
+   */
+  protected ContentModel createListModel()
+  {
+    ContentModel li = model(LI, '+');
+    ContentModel ul = model(UL, '+');
+    ContentModel ol = model(OL, '+');
+
+    li.next = ul;
+    ul.next = ol;
+    li.type = ul.type = ol.type = '|';
+    return li;
+  }
+
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/gnuDTD.java b/libjava/gnu/javax/swing/text/html/parser/gnuDTD.java
new file mode 100755 (executable)
index 0000000..24d800a
--- /dev/null
@@ -0,0 +1,422 @@
+/* gnuDTD.java --
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.swing.text.html.parser;
+
+import java.io.PrintStream;
+import java.io.Serializable;
+
+import java.util.BitSet;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.swing.text.html.parser.AttributeList;
+import javax.swing.text.html.parser.ContentModel;
+import javax.swing.text.html.parser.Element;
+import javax.swing.text.html.parser.Entity;
+
+/**
+ * <p>
+ * The class is derived from {@link gnu.javax.swing.text.html.parser.DTD }
+ * making structure creation methods public. This is required when
+ * creating the DTD by SGML parser that must have access to the structure.
+ *
+ * SGML DTD representation. Provides basis for describing a syntax of the
+ * HTML documents. The fields of this class are NOT initialized in
+ * constructor. You need to do this separately before passing this data
+ * structure to the parser constructor.</p>
+ *
+ * <p>This implementation also provides you the derived class
+ * <code>gnu.javax.swing.text.html.parser.DTD.HTML_4_0_1</code>, where
+ * all fields are initialized to the values, representing HTML 4.01
+ * ("-//W3C//DTD HTML 4.01 Frameset//EN") DTD. You can use it if you do not care
+ * about the portability between different implementations of the core
+ * class libraries. </p>
+ * <p>Use {@link javax.swing.HTML.HTMLEditorKit.Parser#parse }
+ * for parsing in accordance with "-//W3C//DTD HTML 4.01 Frameset//EN"
+ * without specifying DTD separately.</p>
+ *
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class gnuDTD
+  extends javax.swing.text.html.parser.DTD
+  implements javax.swing.text.html.parser.DTDConstants, Serializable
+{
+  /* The undocumented element types, used to specify types, not defined
+  in DTDConstants. */
+
+  /**
+   * The URI element type (not defined in DTDConstants).
+   */
+  public static final int URI = 512;
+
+  /**
+   * The Length element type
+   */
+  public static final int Length = 513;
+
+  /**
+   * The Char element type
+   */
+  public static final int Char = 514;
+
+  /**
+   * The Color element type
+   */
+  public static final int Color = 515;
+
+  /**
+   * Creates a new instance of gnuDTD.
+   * @param name the name of the DTD.
+   */
+  public gnuDTD(String name)
+  {
+    super(name);
+  }
+
+  /**
+   * Creates and returns new attribute (not an attribute list).
+   * @param name the name of this attribute
+   * @param type the type of this attribute (FIXED, IMPLIED or
+   * REQUIRED from <code>DTDConstants</code>).
+   * @param modifier the modifier of this attribute
+   * @param default_value the default value of this attribute or null if
+   * it is not specified.
+   * @param allowed_values the allowed values of this attribute. The multiple
+   * possible values in this parameter are supposed to be separated by
+   * '|', same as in SGML DTD <code>&lt;!ATTLIST </code>tag. This parameter
+   * can be null if no list of allowed values is specified.
+   * @param atts the previous attribute of this element. This is
+   * placed to the field
+   * {@link javax.swing.text.html.parser.AttributeList#next },
+   * creating a linked list.
+   * @return
+   */
+  public AttributeList defAttributeList(String name, int type, int modifier,
+                                        String default_value,
+                                        String allowed_values,
+                                        AttributeList atts
+                                       )
+  {
+    return super.defAttributeList(name, type, modifier, default_value,
+                                  allowed_values, atts
+                                 );
+  }
+
+  /**
+   * Define the attributes for the element with the given name.
+   * If the element is not exist, it is created. This method is
+   * needed if the element attributes are defined befor the
+   * element itself.
+   * @param forElement
+   * @param attributes
+   */
+  public void defAttrsFor(String forElement, AttributeList attributes)
+  {
+    super.defineAttributes(forElement, attributes);
+  }
+
+  /**
+   * Creates a new content model.
+   * @param type specifies the BNF operation for this content model.
+   * The valid operations are documented in the
+   * {@link javax.swing.text.html.parser.ContentModel#type }.
+   * @param content the content of this content model
+   * @param next if the content model is specified by BNF-like
+   * expression, contains the rest of this expression.
+   * @return The newly created content model.
+   */
+  public ContentModel defContentModel(int type, Object content,
+                                      ContentModel next
+                                     )
+  {
+    return super.defContentModel(type, content, next);
+  }
+
+  /**
+   * Defines a new element and adds it to the element table.
+   * If the element alredy exists,
+   * overrides it settings with the specified values.
+   * @param name the name of the new element
+   * @param type the type of the element
+   * @param headless true if the element needs no starting tag
+   * @param tailless true if the element needs no closing tag
+   * @param content the element content.
+   * @param exclusions the elements that must be excluded from the
+   * content of this element, in all levels of the hierarchy.
+   * @param inclusions the elements that can be included as the
+   * content of this element.
+   * @param attributes the element attributes.
+   * @return the created or updated element.
+   */
+  public Element defElement(String name, int type, boolean headless,
+                            boolean tailless, ContentModel content,
+                            String[] exclusions, String[] inclusions,
+                            AttributeList attributes
+                           )
+  {
+    return super.defElement(name, type, headless, tailless, content,
+                            exclusions, inclusions, attributes
+                           );
+  }
+
+  /**
+   * Defines a new element and adds it to the element table.
+   * If the element alredy exists,
+   * overrides it settings with the specified values.
+   * @param name the name of the new element
+   * @param type the type of the element
+   * @param headless true if the element needs no starting tag
+   * @param tailless true if the element needs no closing tag
+   * @param content the element content.
+   * @param exclusions the elements that must be excluded from the
+   * content of this element, in all levels of the hierarchy.
+   * @param inclusions the elements that can be included as the
+   * content of this element.
+   * @param attributes the element attributes.
+   * @return the created or updated element.
+   */
+  public Element defElement(String name, int type, boolean headless,
+                            boolean tailless, ContentModel content,
+                            Collection exclusions, Collection inclusions,
+                            AttributeList attributes
+                           )
+  {
+    return super.defElement(name, type, headless, tailless, content,
+                            toStringArray(exclusions),
+                            toStringArray(inclusions), attributes
+                           );
+  }
+
+  /**
+   * Defines a new element and adds it to the element table.
+   * If the element alredy exists,
+   * overrides it settings with the specified values.
+   * @param name the name of the new element
+   * @param type the type of the element
+   * @param headless true if the element needs no starting tag
+   * @param tailless true if the element needs no closing tag
+   * @param content the element content.
+   * @param exclusions the elements that must be excluded from the
+   * content of this element, in all levels of the hierarchy.
+   * @param inclusions the elements that can be included as the
+   * content of this element.
+   * @param attributes the element attributes (an array and not a
+   * linked list). The attributes are chained into the linked list
+   * inside this method.
+   * @return the created or updated element.
+   */
+  public Element defElement(String name, int type, boolean headless,
+                            boolean tailless, ContentModel content,
+                            String[] exclusions, String[] inclusions,
+                            AttributeList[] attributes
+                           )
+  {
+    AttributeList list;
+
+    if (attributes == null || attributes.length == 0)
+      list = null;
+    else
+      {
+        if (attributes.length > 1)
+          for (int i = 1; i < attributes.length; i++)
+            {
+              attributes [ i - 1 ].next = attributes [ i ];
+            }
+        list = attributes [ 0 ];
+      }
+
+    Element e =
+      super.defElement(name, type, headless, tailless, content, exclusions,
+                       inclusions, list
+                      );
+    return e;
+  }
+
+  /**
+   * Creates, adds into the internal table and returns the
+   * character entity like <code>&amp;lt;</code>
+   *  (means '<code>&lt;</code>' );
+   * This method inactivates the recursive refenrences to the same
+   * entity.
+   * @param name The entity name (without heading &amp; and closing ;)
+   * @param type The entity type
+   * @param character The entity value (single character)
+   * @return The created entity
+   */
+  public Entity defEntity(String name, int type, String data)
+  {
+    int r;
+    String eref = "%" + name + ";";
+    do
+      {
+        r = data.indexOf(eref);
+        if (r > 0)
+          {
+            data = data.substring(0, r) + data.substring(r + 1);
+          }
+      }
+    while (r > 0);
+
+    return super.defEntity(name, type, data);
+  }
+
+  /**
+   * Summarises the document content into the given PrintStream.
+   */
+  public void dump(PrintStream p)
+  {
+    Iterator iter = entityHash.entrySet().iterator();
+    while (iter.hasNext())
+      {
+        Map.Entry item = (Map.Entry) iter.next();
+        Entity e = (Entity) item.getValue();
+        if (e.isGeneral())
+          p.println("Entity " + e.getName() + ": " + e.getString());
+      }
+
+    iter = elementHash.entrySet().iterator();
+    while (iter.hasNext())
+      {
+        Map.Entry item = (Map.Entry) iter.next();
+        Element e = (Element) item.getValue();
+        p.println("Element " + e.getName());
+
+        System.out.println(" includes:");
+        dump(e.inclusions);
+        System.out.println(" excludes:");
+        dump(e.exclusions);
+        System.out.println(" attributes:");
+
+        AttributeList atts = e.atts;
+        while (atts != null)
+          {
+            p.print("    " + atts.name + " = " + atts.value);
+            if (atts.values == null || atts.values.size() == 0)
+              p.println();
+            else
+              {
+                Iterator viter = atts.values.iterator();
+                System.out.print(" ( ");
+                while (viter.hasNext())
+                  {
+                    System.out.print(viter.next());
+                    if (viter.hasNext())
+                      System.out.print(" | ");
+                  }
+                System.out.println(" ) ");
+              }
+            atts = atts.next;
+          }
+      }
+  }
+
+  /**
+   * Prints the content of the given attribute set to the System.out.
+   * @param b
+   */
+  public void dump(BitSet b)
+  {
+    if (b != null)
+      {
+        for (int i = 0; i < b.size(); i++)
+          {
+            if (b.get(i))
+              System.out.println(" " + elements.get(i));
+          }
+      }
+    else
+      System.out.println(" NULL set");
+  }
+
+  /**
+   * Creates the attribute.
+   * @param name The attribute name.
+   * @param type The attribute type.
+   * @param modifier The attribute modifier.
+   * @param defaultValue Default value (or null)
+   * @param allowed_values Allowed values (or null)
+   * @return The newly created AttributeList. The <code>next</code>
+   * field is initialized to null.
+   */
+  protected AttributeList attr(String name, String default_value,
+                               String[] allowed_values, int type, int modifier
+                              )
+  {
+    Vector allowed = null;
+
+    if (allowed_values != null)
+      {
+        allowed = new Vector(allowed_values.length);
+        for (int i = 0; i < allowed_values.length; i++)
+          {
+            allowed.add(allowed_values [ i ]);
+          }
+      }
+    ;
+
+    AttributeList attr =
+      new AttributeList(name, type, modifier, default_value, allowed, null);
+
+    return attr;
+  }
+
+  /**
+   * Define the general entity, holding a single character.
+   * @param name The entity name (for example, 'amp').
+   * The defined entity <b>is</b> stored into the entity table.
+   * @param character The entity character (for example, '&').
+   */
+  protected void defineEntity(String name, int character)
+  {
+    super.defEntity(name, GENERAL, character);
+  }
+
+  private String[] toStringArray(Collection c)
+  {
+    String[] s = new String[ c.size() ];
+    Iterator iter = c.iterator();
+    for (int i = 0; i < s.length; i++)
+      {
+        s [ i ] = iter.next().toString();
+      }
+    return s;
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/htmlAttributeSet.java b/libjava/gnu/javax/swing/text/html/parser/htmlAttributeSet.java
new file mode 100644 (file)
index 0000000..f42b463
--- /dev/null
@@ -0,0 +1,133 @@
+/* htmlAttributeSet.java -- A set to store HTML attributes
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.swing.text.html.parser;
+
+import java.util.Enumeration;
+
+import javax.swing.text.AttributeSet;
+import javax.swing.text.SimpleAttributeSet;
+import javax.swing.text.html.HTML;
+
+/**
+ * A set, adapted to store HTML attributes.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class htmlAttributeSet
+  extends SimpleAttributeSet
+{
+  public static final htmlAttributeSet EMPTY_HTML_ATTRIBUTE_SET =
+    new htmlAttributeSet();
+  AttributeSet parent;
+
+  /**
+   * Looks in this set and, if not found, later looks in the parent set.
+   * Calls toString(), allowing to pass as HTML.Attribute, as String
+   * to this method.
+   * @param key A key to search for a value.
+   * @return The value, if one is defined.
+   */
+  public Object getAttribute(Object _key)
+  {
+    Object key = _key.toString().toLowerCase();
+
+    Object v = super.getAttribute(key);
+    if (v != null)
+      return v;
+    else if (parent != null)
+      return parent.getAttribute(key);
+    else
+      return null;
+  }
+
+  /**
+   * The name set must return HTML.Attribute and not a string,
+   * where applicable.
+   */
+  public Enumeration getAttributeNames()
+  {
+    // Replace the string keys by HTML.attribute, where applicable
+    final Enumeration enumeration = super.getAttributeNames();
+
+    return new Enumeration()
+      {
+        public boolean hasMoreElements()
+        {
+          return enumeration.hasMoreElements();
+        }
+
+        public Object nextElement()
+        {
+          Object key = enumeration.nextElement();
+          HTML.Attribute hKey = HTML.getAttributeKey((String) key);
+          if (hKey != null)
+            return hKey;
+          else
+            return key;
+        }
+      };
+  }
+
+  /**
+   * Set the parent set, containing the default values.
+   * @param a_parent
+   */
+  public void setResolveParent(AttributeSet a_parent)
+  {
+    parent = a_parent;
+  }
+
+  /**
+   * Get the parent set, containing the default values.
+   * @return
+   */
+  public AttributeSet getResolveParent()
+  {
+    return parent;
+  }
+
+  /**
+   * Add the attribute to this attribute set.
+   * @param key Attribute key (will be case insensitive)
+   * @param value Attribute value
+   */
+  public void addAttribute(Object key, Object value)
+  {
+    super.addAttribute(key.toString().toLowerCase(), value);
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/htmlValidator.java b/libjava/gnu/javax/swing/text/html/parser/htmlValidator.java
new file mode 100644 (file)
index 0000000..bcb23aa
--- /dev/null
@@ -0,0 +1,610 @@
+/* tagStack.java -- The HTML tag stack.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.swing.text.html.parser;
+
+import gnu.javax.swing.text.html.parser.models.node;
+import gnu.javax.swing.text.html.parser.models.transformer;
+
+import java.util.BitSet;
+import java.util.Enumeration;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+import javax.swing.text.SimpleAttributeSet;
+import javax.swing.text.html.HTML;
+import javax.swing.text.html.parser.*;
+
+/**
+ * <p>The HTML content validator, is responsible for opening and
+ * closing elements with optional start/end tags, detecting
+ * the wrongly placed html tags and reporting errors. The working instance
+ * is the inner class inside the {@link javax.swing.text.html.parser.Parser }
+ * </p>
+ * <p>This class could potentially
+ * provide basis for automated closing and insertion of the html tags,
+ * correcting the found html errors.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public abstract class htmlValidator
+{
+  /**
+   * The tag reference, holding additional information that the tag
+   * has been forcibly closed.
+   */
+  protected class hTag
+  {
+    protected final Element element;
+    protected final HTML.Tag tag;
+    protected final TagElement tgElement;
+    protected boolean forcibly_closed;
+    protected node validationTrace;
+
+    protected hTag(TagElement an_element)
+    {
+      element = an_element.getElement();
+      tag = an_element.getHTMLTag();
+      tgElement = an_element;
+
+      if (element.content != null)
+        validationTrace = transformer.transform(element.content, dtd);
+    }
+
+    /**
+     * This is called when the tag must be forcibly closed because
+     * it would make the newly appearing tag invalid.
+     * The parser is not notified about such event (just the error
+     * is reported). For such tags, the closing message does not
+     * appear when later reaching the end of stream. The exception is
+     * the &lt;head&gt; tag: the parser is notified about its silent closing
+     * when &lt;body&gt; or other html content appears.
+     */
+    protected void forciblyCloseDueContext()
+    {
+      forcibly_closed = true;
+    }
+
+    /**
+     * This is called when the tag must be forcibly closed after
+     * reaching the end of stream. The parser is notified as if
+     * closing the tag explicitly.
+     */
+    protected void forciblyCloseDueEndOfStream()
+    {
+      forcibly_closed = true;
+      handleSupposedEndTag(element);
+    }
+  }
+
+  /**
+   * The DTD, providing information about the valid document structure.
+   */
+  protected final DTD dtd;
+
+  /**
+  * The stack, holding the current tag context.
+  */
+  protected final LinkedList stack = new LinkedList();
+
+  /**
+   * Creates a new tag stack, using the given DTD.
+   * @param a_dtd A DTD, providing the information about the valid
+   * tag content.
+   */
+  public htmlValidator(DTD a_dtd)
+  {
+    dtd = a_dtd;
+  }
+
+  /**
+   * Close all opened tags (called at the end of parsing).
+   */
+  public void closeAll()
+  {
+    hTag h;
+    while (!stack.isEmpty())
+      {
+        h = (hTag) stack.getLast();
+        if (!h.forcibly_closed && !h.element.omitEnd())
+          s_error("Unclosed <" + h.tag + ">, closing at the end of stream");
+
+        handleSupposedEndTag(h.element);
+
+        closeTag(h.tgElement);
+      }
+  }
+
+  /**
+   * Remove the given tag from the stack or (if found) from the list
+   * of the forcibly closed tags.
+   */
+  public void closeTag(TagElement tElement)
+  {
+    HTML.Tag tag = tElement.getHTMLTag();
+    hTag x;
+    hTag close;
+
+    if (!stack.isEmpty())
+      {
+        ListIterator iter = stack.listIterator(stack.size());
+
+        while (iter.hasPrevious())
+          {
+            x = (hTag) iter.previous();
+            if (tag.equals(x.tag))
+              {
+                if (x.forcibly_closed && !x.element.omitEnd())
+                  s_error("The tag <" + x.tag +
+                          "> has already been forcibly closed"
+                         );
+
+
+                // If the tag has a content model defined, forcibly close all
+                // tags that were opened after the tag being currently closed.
+                closing: 
+                if (x.element.content != null)
+                  {
+                    iter = stack.listIterator(stack.size());
+                    while (iter.hasPrevious())
+                      {
+                        close = (hTag) iter.previous();
+                        if (close == x)
+                          break closing;
+                        handleSupposedEndTag(close.element);
+                        iter.remove();
+                      }
+                  }
+
+                stack.remove(x);
+                return;
+              }
+          }
+      }
+    s_error("Closing unopened <" + tag + ">");
+  }
+
+  /**
+   * Add the given HTML tag to the stack of the opened tags. Forcibly closes
+   * all tags in the stack that does not allow this tag in they content (error
+   * is reported).
+   * @param element
+   */
+  public void openTag(TagElement tElement, htmlAttributeSet parameters)
+  {
+    // If this is a fictional call, the message from the parser
+    // has recursively returned - ignore.
+    if (tElement.fictional())
+      return;
+
+    validateParameters(tElement, parameters);
+
+    // If the stack is empty, start from HTML
+    if (stack.isEmpty() && tElement.getHTMLTag() != HTML.Tag.HTML)
+      {
+        Element html = dtd.getElement(HTML.Tag.HTML.toString());
+        openFictionalTag(html);
+      }
+
+    Object v = tagIsValidForContext(tElement);
+    if (v != Boolean.TRUE)
+      {
+        // The tag is not valid for context, the content
+        // model suggest to open another tag.
+        if (v instanceof Element)
+          {
+            int n = 0;
+            while (v instanceof Element && (n++ < 100))
+              {
+                Element fe = (Element) v;
+
+                // notify the content model that we add the proposed tag
+                getCurrentContentModel().show(fe);
+                openFictionalTag(fe);
+
+                Object vv = tagIsValidForContext(tElement);
+                if (vv instanceof Element) // One level of nesting is supported.
+                  {
+                    openFictionalTag((Element) vv);
+
+                    Object vx = tagIsValidForContext(tElement);
+                    if (vx instanceof Element)
+                      openFictionalTag((Element) vx);
+                  }
+                else if (vv == Boolean.FALSE)
+                  {
+                    // The tag is still not valid for the current
+                    // content after opening a fictional element.
+                    if (fe.omitEnd())
+                      {
+                        // close the previously opened fictional tag.
+                        closeLast();
+                        vv = tagIsValidForContext(tElement);
+                        if (vv instanceof Element)
+
+                          // another tag was suggested by the content model
+                          openFictionalTag((Element) vv);
+                      }
+                  }
+                v = tagIsValidForContext(tElement);
+              }
+          }
+        else // If the current element has the optional end tag, close it.
+          {
+            if (!stack.isEmpty())
+              {
+                closing: 
+                do
+                  {
+                    hTag last = (hTag) stack.getLast();
+                    if (last.element.omitEnd())
+                      {
+                        closeLast();
+                        v = tagIsValidForContext(tElement);
+                        if (v instanceof Element) // another tag was suggested by the content model
+                          {
+                            openFictionalTag((Element) v);
+                            break closing;
+                          }
+                      }
+                    else
+                      break closing;
+                  }
+                while (v == Boolean.FALSE && !stack.isEmpty());
+              }
+          }
+      }
+
+    stack.add(new hTag(tElement));
+  }
+
+  /**
+   * Clear the stack.
+   */
+  public void restart()
+  {
+    stack.clear();
+  }
+
+  /**
+   * Check if this tag is valid for the current context.
+   * Return Boolean.True if it is OK, Boolean.False
+   * if it is surely not OK or the Element that the
+   * content model recommends to insert making the situation
+   * ok. If Boolean.True is returned, the content model current
+   * position is moved forward. Otherwise this position remains
+   * the same.
+   * @param tElement
+   * @return
+   */
+  public Object tagIsValidForContext(TagElement tElement)
+  {
+    // Check the current content model, if one is available.
+    node cv = getCurrentContentModel();
+
+    if (cv != null)
+      return cv.show(tElement.getElement());
+
+    // Check exclusions and inclusions.
+    ListIterator iter = stack.listIterator(stack.size());
+    hTag t;
+    final int idx = tElement.getElement().index;
+
+    // Check only known tags.
+    if (idx >= 0)
+      {
+        BitSet inclusions = new BitSet();
+        while (iter.hasPrevious())
+          {
+            t = (hTag) iter.previous();
+            if (!t.forcibly_closed)
+              {
+                if (t.element.exclusions != null &&
+                    t.element.exclusions.get(idx)
+                   )
+                  return Boolean.FALSE;
+
+                if (t.element.inclusions != null)
+                  inclusions.or(t.element.inclusions);
+              }
+          }
+        if (!inclusions.get(idx))
+          return Boolean.FALSE;
+      }
+    return Boolean.TRUE;
+  }
+
+  /**
+   * Validate tag without storing in into the tag stack. This is called
+   * for the empty tags and results the subsequent calls to the openTag
+   * and closeTag.
+   */
+  public void validateTag(TagElement tElement, htmlAttributeSet parameters)
+  {
+    openTag(tElement, parameters);
+    closeTag(tElement);
+  }
+
+  /**
+   * Check for mandatory elements, subsequent to the last tag:
+   * @param tElement The element that will be inserted next.
+   */
+  protected void checkContentModel(TagElement tElement, boolean first)
+  {
+    if (stack.isEmpty())
+      return;
+
+    hTag last = (hTag) stack.getLast();
+    if (last.validationTrace == null)
+      return;
+
+    Object r = last.validationTrace.show(tElement.getElement());
+    if (r == Boolean.FALSE)
+      s_error("The <" + last.element + "> does not match the content model " +
+              last.validationTrace
+             );
+    else if (r instanceof Element) // The content model recommends insertion of this element
+      {
+        if (!first)
+          closeTag(last.tgElement);
+        handleSupposedStartTag((Element) r);
+        openTag(new TagElement((Element) r), null);
+      }
+  }
+
+  /**
+   * The method is called when the tag must be closed because
+   * it does not allow the subsequent elements inside its context
+   * or the end of stream has been reached. The parser is only
+   * informed if the element being closed does not require the
+   * end tag (the "omitEnd" flag is set).
+   * The closing message must be passed to the parser mechanism
+   * before passing message about the opening the next tag.
+   *
+   * @param element The tag being fictionally (forcibly) closed.
+   */
+  protected abstract void handleSupposedEndTag(Element element);
+
+  /**
+   * The method is called when the validator decides to open the
+   * tag on its own initiative. This may happen if the content model
+   * includes the element with the optional (supposed) start tag.
+   *
+   * @param element The tag being opened.
+   */
+  protected abstract void handleSupposedStartTag(Element element);
+
+  /**
+   * Handles the error message. This method must be overridden to pass
+   * the message where required.
+   * @param msg The message text.
+   */
+  protected abstract void s_error(String msg);
+
+  /**
+   * Validate the parameters, report the error if the given parameter is
+   * not in the parameter set, valid for the given attribute. The information
+   * about the valid parameter set is taken from the Element, enclosed
+   * inside the tag. The method does not validate the default parameters.
+   * @param tag The tag
+   * @param parameters The parameters of this tag.
+   */
+  protected void validateParameters(TagElement tag, htmlAttributeSet parameters)
+  {
+    if (parameters == null ||
+        parameters == htmlAttributeSet.EMPTY_HTML_ATTRIBUTE_SET ||
+        parameters == SimpleAttributeSet.EMPTY
+       )
+      return;
+
+    Enumeration enumeration = parameters.getAttributeNames();
+
+    while (enumeration.hasMoreElements())
+      {
+        validateAttribute(tag, parameters, enumeration);
+      }
+
+    // Check for missing required values.
+    AttributeList a = tag.getElement().getAttributes();
+
+    while (a != null)
+      {
+        if (a.getModifier() == DTDConstants.REQUIRED)
+          if (parameters.getAttribute(a.getName()) == null)
+            {
+              s_error("Missing required attribute '" + a.getName() + "' for <" +
+                      tag.getHTMLTag() + ">"
+                     );
+            }
+        a = a.next;
+      }
+  }
+
+  private node getCurrentContentModel()
+  {
+    if (!stack.isEmpty())
+      {
+        hTag last = (hTag) stack.getLast();
+        return last.validationTrace;
+      }
+    else
+      return null;
+  }
+
+  private void closeLast()
+  {
+    handleSupposedEndTag(((hTag) stack.getLast()).element);
+    stack.removeLast();
+  }
+
+  private void openFictionalTag(Element e)
+  {
+    handleSupposedStartTag(e);
+    stack.add(new hTag(new TagElement(e, true)));
+    if (!e.omitStart())
+      s_error("<" + e + "> is expected (supposing it)");
+  }
+
+  private void validateAttribute(TagElement tag, htmlAttributeSet parameters,
+                                 Enumeration enumeration
+                                )
+  {
+    Object foundAttribute;
+    AttributeList dtdAttribute;
+    foundAttribute = enumeration.nextElement();
+    dtdAttribute = tag.getElement().getAttribute(foundAttribute.toString());
+    if (dtdAttribute == null)
+      {
+        StringBuffer valid =
+          new StringBuffer("The tag <" + tag.getHTMLTag() +
+                           "> cannot contain the attribute '" + foundAttribute +
+                           "'. The valid attributes for this tag are: "
+                          );
+
+        AttributeList a = tag.getElement().getAttributes();
+
+        while (a != null)
+          {
+            valid.append(a.name.toUpperCase());
+            valid.append(' ');
+            a = a.next;
+          }
+        s_error(valid.toString());
+      }
+
+    else
+      {
+        String value = parameters.getAttribute(foundAttribute).toString();
+
+        if (dtdAttribute.type == DTDConstants.NUMBER)
+          validateNumberAttribute(tag, foundAttribute, value);
+
+        if (dtdAttribute.type == DTDConstants.NAME ||
+            dtdAttribute.type == DTDConstants.ID
+           )
+          validateNameOrIdAttribute(tag, foundAttribute, value);
+
+        if (dtdAttribute.values != null)
+          validateAttributeWithValueList(tag, foundAttribute, dtdAttribute,
+                                         value
+                                        );
+      }
+  }
+
+  private void validateAttributeWithValueList(TagElement tag,
+                                              Object foundAttribute,
+                                              AttributeList dtdAttribute,
+                                              String value
+                                             )
+  {
+    if (!dtdAttribute.values.contains(value.toLowerCase()) &&
+        !dtdAttribute.values.contains(value.toUpperCase())
+       )
+      {
+        StringBuffer valid;
+        if (dtdAttribute.values.size() == 1)
+          valid =
+            new StringBuffer("The attribute '" + foundAttribute +
+                             "' of the tag <" + tag.getHTMLTag() +
+                             "> cannot have the value '" + value +
+                             "'. The only valid value is "
+                            );
+        else
+          valid =
+            new StringBuffer("The attribute '" + foundAttribute +
+                             "' of the tag <" + tag.getHTMLTag() +
+                             "> cannot have the value '" + value + "'. The " +
+                             dtdAttribute.values.size() +
+                             " valid values are: "
+                            );
+
+        Enumeration vv = dtdAttribute.values.elements();
+        while (vv.hasMoreElements())
+          {
+            valid.append('"');
+            valid.append(vv.nextElement());
+            valid.append("\"  ");
+          }
+        s_error(valid.toString());
+      }
+  }
+
+  private void validateNameOrIdAttribute(TagElement tag, Object foundAttribute,
+                                         String value
+                                        )
+  {
+    boolean ok = true;
+
+    if (!Character.isLetter(value.charAt(0)))
+      ok = false;
+
+    char c;
+    for (int i = 0; i < value.length(); i++)
+      {
+        c = value.charAt(i);
+        if (!(
+              Character.isLetter(c) || Character.isDigit(c) ||
+              "".indexOf(c) >= 0
+            )
+           )
+          ok = false;
+      }
+    if (!ok)
+      s_error("The '" + foundAttribute + "' attribute of the tag <" +
+              tag.getHTMLTag() + "> must start from letter and consist of " +
+              "letters, digits, hypens, colons, underscores and periods. " +
+              "It cannot be '" + value + "'"
+             );
+  }
+
+  private void validateNumberAttribute(TagElement tag, Object foundAttribute,
+                                       String value
+                                      )
+  {
+    try
+      {
+        Integer.parseInt(value);
+      }
+    catch (NumberFormatException ex)
+      {
+        s_error("The '" + foundAttribute + "' attribute of the tag <" +
+                tag.getHTMLTag() + "> must be a valid number and not '" +
+                value + "'"
+               );
+      }
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java b/libjava/gnu/javax/swing/text/html/parser/models/PCDATAonly_model.java
new file mode 100755 (executable)
index 0000000..4bfc3b9
--- /dev/null
@@ -0,0 +1,62 @@
+/* PCDATAonly_model.java --
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.swing.text.html.parser.models;
+
+import java.io.Serializable;
+
+/**
+ * The model, allowing only PCDATA in it (like for element OPTION).
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class PCDATAonly_model
+  extends node
+  implements Serializable
+{
+  private static final long serialVersionUID = 1;
+
+  public PCDATAonly_model()
+  {
+    super((char) 0, (char) 0, null);
+  }
+
+  public Object show(Object x)
+  {
+    return x.toString().equalsIgnoreCase("#pcdata") ? Boolean.TRUE : Boolean.FALSE;
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/models/TableRowContentModel.java b/libjava/gnu/javax/swing/text/html/parser/models/TableRowContentModel.java
new file mode 100755 (executable)
index 0000000..1a803d5
--- /dev/null
@@ -0,0 +1,77 @@
+/* TableRowContentModel.java --
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.swing.text.html.parser.models;
+
+import java.io.Serializable;
+
+import javax.swing.text.html.parser.DTD;
+import javax.swing.text.html.parser.Element;
+
+/**
+ * Table row content model.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class TableRowContentModel
+  extends node
+  implements Serializable
+{
+  private static final long serialVersionUID = 1;
+  final Element TD;
+
+  public TableRowContentModel(DTD dtd)
+  {
+    super((char) 0, (char) 0, null);
+    TD = dtd.getElement("TD");
+  }
+
+  public Object show(Object x)
+  {
+    // Always accept TD and TH
+    String s = x.toString();
+    if (s.equalsIgnoreCase("TD") || s.equalsIgnoreCase("TH"))
+      return Boolean.TRUE;
+
+    // Suggest closing in response to TR:
+    if (s.equalsIgnoreCase("TR"))
+      return Boolean.FALSE;
+
+    // Recommend TD for other cases:
+    return TD;
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/models/list.java b/libjava/gnu/javax/swing/text/html/parser/models/list.java
new file mode 100755 (executable)
index 0000000..1fa16d9
--- /dev/null
@@ -0,0 +1,382 @@
+/* list.java --
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.swing.text.html.parser.models;
+
+import java.io.Serializable;
+
+/**
+ * Part of the internal representation of the content model.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class list
+  extends node
+  implements Serializable
+{
+  private static final long serialVersionUID = 1;
+
+  /**
+   * Setting to true means that the list nodes must always be connected
+   * by the same operation. This is far safer and clearer, but not
+   * required by default standard.
+   */
+  public static boolean CLEAR;
+
+  /**
+   * A list of nodes.
+   */
+  public final node[] nodes;
+
+  /**
+   * Creates a new model list that is a member of some enclosing list.
+   * @param binary_operator An operator with that this list is connected
+   * with other members of the enclosing list.
+   * @param unary_operator The unary operator for this list.
+   * @param a_nodes The nodes inside this list.
+   */
+  public list(char binary_operator, char unary_operator, node[] a_nodes)
+  {
+    super(binary_operator, unary_operator, a_nodes);
+    nodes = a_nodes;
+  }
+
+  /**
+   * Creates a new model list. Assigns the previous field.
+   * @param a_nodes The nodes for this list.
+   * @throws an error if the node elements are connected by the
+   * different operations. This is not supported, use grouping.
+   */
+  public list(node[] a_nodes)
+       throws Error
+  {
+    this(',', (char) 0, a_nodes);
+
+    int operation = nodes [ 0 ].binary;
+
+    for (int i = 0; i < nodes.length; i++)
+      {
+        if (CLEAR && nodes [ i ].binary != operation)
+          throw new Error("List members can only be connected by " +
+                          "the same operation, use grouping"
+                         );
+
+        if (i > 0)
+          nodes [ i ].previous = nodes [ i - 1 ];
+      }
+  }
+
+  /**
+   * Returns true if all members in the list are closed.
+   */
+  public boolean isClosed()
+  {
+    if (super.isClosed())
+      return true;
+    for (int i = 0; i < nodes.length; i++)
+      {
+        if (!nodes [ i ].isClosed())
+          return false;
+      }
+    return true;
+  }
+
+  /**
+   * Find the token that could match as the next token in
+   * the token list.
+   *
+   * @return Such token object or null if none is found.
+   */
+  public Object findFreeNode()
+  {
+    Object fn;
+    for (int j = 0; j < nodes.length; j++)
+      {
+        if (!nodes [ j ].isClosed())
+          {
+            fn = nodes [ j ].findFreeNode();
+            if (fn != null)
+              return fn;
+          }
+      }
+    return null;
+  }
+
+  /**
+   * Tries to match this list agains the given token sequence.
+   * @param tokens the sequence of the tokens to match.
+   * @return true if the valid match is found.
+   */
+  public boolean matches(Object[] tokens)
+  {
+    reset();
+
+    Object x;
+    boolean m;
+    boolean matched = false;
+
+    for (int i = 0; i < tokens.length; i++)
+      {
+        matched = false;
+        x = tokens [ i ];
+
+        nodescan: 
+        for (int j = 0; j < nodes.length; j++)
+          {
+            if (!nodes [ j ].isClosed())
+              {
+                m = nodes [ j ].performMatch(x);
+
+                if (m)
+                  {
+                    matched = true;
+                    break nodescan;
+                  }
+              }
+          }
+        if (!matched)
+          return false;
+      }
+
+    boolean valid = true;
+
+    for (int i = 0; i < nodes.length; i++)
+      {
+        if (!nodes [ i ].valid())
+          valid = false;
+      }
+
+    return valid;
+  }
+
+  /**
+   * The list never closes, despite it is trated as closed
+   * if all members in the list are closed.
+   * @return false.
+   */
+  public boolean mustClose()
+  {
+    return false;
+  }
+
+  /**
+   * Perform a match operation for the single token
+   * against this list.
+   * @param token a token to match.
+   * @return true if the match is found.
+   */
+  public boolean performMatch(Object token)
+  {
+    boolean ok = false;
+    Matching: 
+    for (int i = 0; i < nodes.length; i++)
+      {
+        ok = nodes [ i ].performMatch(token);
+
+        if (ok)
+          break Matching;
+      }
+
+    if (ok)
+      matches();
+
+    return ok;
+  }
+
+  /**
+   * Prepeares the list for the next matching operation.
+   */
+  public void reset()
+  {
+    super.reset();
+    for (int i = 0; i < nodes.length; i++)
+      nodes [ i ].reset();
+  }
+
+  /**
+   * Check if the provided token can match as a next token in the
+   * list. In the case of match, the list state changes, moving
+   * current position after the matched token. However if this method
+   * returns a suggested new token to insert before the provided one,
+   * the state of the list does not change.
+   * @return Boolean.TRUE if the match is found,
+   * Boolean.FALSE if the match is not possible and no token can be
+   * inserted to make the match valid. Otherwise, returns the
+   * token object that can be inserted before the last token in the
+   * list, probably (not for sure) making the match valid.
+   * If the object is an instance of Element or TagElement,
+   * it is first ensured that the object flag "omit start" is set.
+   */
+  public Object show(Object x)
+  {
+    boolean m;
+    boolean matched = false;
+
+    nodescan: 
+    for (int j = 0; j < nodes.length; j++)
+      {
+        if (!nodes [ j ].isClosed())
+          {
+            m = nodes [ j ].performMatch(x);
+
+            if (m)
+              {
+                matched = true;
+                break nodescan;
+              }
+            else
+              {
+                // For comma operation, only first not closed
+                // node must be tested for a match.
+                // unless it allows matching zero times.
+                if (binary == ',' &&
+                    !(nodes [ j ].unary == '?' || nodes [ j ].unary == '*')
+                   )
+                  break nodescan;
+              }
+          }
+      }
+
+    if (!matched)
+      {
+        // Find and return that would be matched.
+        Object freeNode = findFreeNode();
+        if (freeNode == null)
+          return Boolean.FALSE;
+        else
+          return freeNode;
+      }
+
+    for (int i = 0; i < nodes.length; i++)
+      if (!nodes [ i ].validPreliminary())
+        {
+          return Boolean.FALSE;
+        }
+
+    return Boolean.TRUE;
+  }
+
+  /**
+   * Returns a string representation of the list.
+   * @return String representation, similar to BNF expression.
+   */
+  public String toString()
+  {
+    StringBuffer b = new StringBuffer();
+    b.append(" ( ");
+    for (int i = 0; i < nodes.length; i++)
+      {
+        if (i > 0)
+          b.append(" " + (char) nodes [ i ].binary + " ");
+        b.append(nodes [ i ]);
+      }
+
+    b.append(" )");
+    if (unary != 0)
+      b.append((char) unary);
+    else
+      b.append(' ');
+    return b.toString();
+  }
+
+  /**
+   * Returns true if all memebers in the list are valid.
+   */
+  public boolean valid()
+  {
+    for (int i = 0; i < nodes.length; i++)
+      {
+        if (!nodes [ i ].valid())
+          return false;
+      }
+    return true;
+  }
+
+  /**
+   * Returns true if all memebers in the list are either valid
+   * or unvisited. The unvisited members can become valid after
+   * more tokens will be shown.
+   */
+  public boolean validPreliminary()
+  {
+    if (silenceAllowed())
+      {
+        boolean everVisited = false;
+        for (int i = 0; i < nodes.length; i++)
+          {
+            if (nodes [ i ].visits > 0)
+              {
+                everVisited = true;
+                break;
+              }
+          }
+        if (!everVisited)
+          return true;
+      }
+
+    for (int i = 0; i < nodes.length; i++)
+      {
+        if (!nodes [ i ].validPreliminary())
+          return false;
+      }
+    return true;
+  }
+
+  /**
+   * Closes all members in the list.
+   */
+  protected void close()
+  {
+    super.close();
+    for (int i = 0; i < nodes.length; i++)
+      {
+        nodes [ i ].close();
+      }
+  }
+
+  /**
+   * Compare given token with the token of this node.
+   * If the token represents a <code>list</code>, the call may be
+   * delegeted to the child subnodes.
+   * @param a_token A token to compare.
+   * @return True if the token matches the token of this node.
+   */
+  protected boolean compare(Object a_token)
+  {
+    return performMatch(a_token);
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/models/noTagModel.java b/libjava/gnu/javax/swing/text/html/parser/models/noTagModel.java
new file mode 100755 (executable)
index 0000000..7ac58f0
--- /dev/null
@@ -0,0 +1,75 @@
+/* noTagModel.java --
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.swing.text.html.parser.models;
+
+import java.io.Serializable;
+
+/**
+ * Disallows a single given tag at the current content level only.
+ * <p>@author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)</p>
+ */
+public class noTagModel
+  extends node
+  implements Serializable
+{
+  private static final long serialVersionUID = 1;
+  final String[] no;
+
+  public noTagModel(String[] noTag)
+  {
+    super((char) 0, (char) 0, null);
+    no = noTag;
+  }
+
+  public noTagModel(String noTag)
+  {
+    super((char) 0, (char) 0, null);
+    no = new String[] { noTag };
+  }
+
+  public Object show(Object x)
+  {
+    for (int i = 0; i < no.length; i++)
+      {
+        if (x.toString().equalsIgnoreCase(no [ i ]))
+          return Boolean.FALSE;
+      }
+    return Boolean.TRUE;
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/models/node.java b/libjava/gnu/javax/swing/text/html/parser/models/node.java
new file mode 100755 (executable)
index 0000000..42505d0
--- /dev/null
@@ -0,0 +1,337 @@
+/* node.java --
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.swing.text.html.parser.models;
+
+import java.io.Serializable;
+
+/**
+ * Part of the internal representation of the content model.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class node
+  implements Serializable
+{
+  private static final long serialVersionUID = 1;
+
+  /**
+   * The token to match (can be instance of list).
+   */
+  public Object token;
+
+  /**
+   * True for the node that cannot be visited again.
+   */
+  public boolean _closed;
+
+  /**
+   * The binary operation for this node.
+   */
+  public char binary;
+
+  /**
+   * The unary opeation for this node.
+   */
+  public char unary;
+
+  /**
+   * The number of times the node already was visited.
+   */
+  public int visits;
+
+  /**
+   * The previous node in content model (used for closing nodes).
+   */
+  public node previous;
+
+  /**
+   * Creates a new node.
+   * @param binary_operator The operator, connecting all nodes in the list.
+   * The nodes, connected by the different operators, must be arranged into
+   * the different lists.
+   * @param unary_operator The unary operator for this node or zero if
+   * no such was specified.
+   * @param token The token to match. This can be either a string or
+   * the new instance of the list.
+   * @param a_previous The previous node in the list, null for the first
+   * node. This is used for propagating the closing operation for the
+   * comma delimited list.
+   */
+  public node(char binary_operator, char unary_operator, Object a_token)
+  {
+    if (a_token != null)
+      if (a_token.getClass().equals(node.class))
+        throw new Error("Creating node in node is redundant and ineffective.");
+
+    binary = binary_operator;
+    unary = unary_operator;
+    token = a_token;
+  }
+
+  /**
+   * Checks if this node is in the closed state.
+   * @return True if the node is closed.
+   */
+  public boolean isClosed()
+  {
+    return _closed;
+  }
+
+  /**
+   * Check if closing this node means closing the previous node.
+   */
+  public boolean closePrevious()
+  {
+    return binary == ',';
+  }
+
+  /**
+   * Return the token object if it could match as a next token in
+   * a token list of null if it could not.
+   * @return
+   */
+  public Object findFreeNode()
+  {
+    boolean ok;
+    if (isClosed() || silenceAllowed())
+      return null;
+
+    // Try if the node would stay valid after a one more visit.
+    visits++;
+    ok = valid();
+    visits--;
+
+    if (ok)
+      {
+        if (token instanceof node)
+          return ((node) token).findFreeNode();
+        else
+          return token;
+      }
+    else
+      return null;
+  }
+
+  /**
+   * Check if the current situation is such that the node must be closed
+   * now.
+   */
+  public boolean mustClose()
+  {
+    switch (unary)
+      {
+        case 0 :
+          return true;
+
+        case '*' :
+          return false;
+
+        case '+' :
+          return false;
+
+        case '?' :
+          return visits <= 1;
+
+        default :
+          throw new Error("Invalid unary operation " + unary + " ( '" +
+                          (char) unary + "' )"
+                         );
+      }
+  }
+
+  /**
+   * Do the match operation with the given token. This sets various
+   * flags.
+   * @param token The token to match.
+   * @return true if the the token matches node, false if it does not match
+   * or if the node is closed.
+   */
+  public boolean performMatch(Object a_token)
+  {
+    if (isClosed())
+      return false;
+
+    boolean matches = compare(a_token);
+    if (matches)
+      matches();
+
+    return matches;
+  }
+
+  /**
+   * Prepares the node for matching against a new list of tokens.
+   */
+  public void reset()
+  {
+    _closed = false;
+    visits = 0;
+  }
+
+  /**
+   * Check if the provided token can match this node.
+   * In the case of match, the node state changes, moving
+   * current position after the matched token. However if this method
+   * returns a suggested new token to insert before the provided one,
+   * the state of the list does not change.
+   * @return Boolean.TRUE if the match is found,
+   * Boolean.FALSE if the match is not possible and no token can be
+   * inserted to make the match valid. Otherwise, returns the
+   * token object that can be inserted before the last token in the
+   * list, probably (not for sure) making the match valid.
+   */
+  public Object show(Object x)
+  {
+    if (compare(x))
+      return performMatch(x) ? Boolean.TRUE : Boolean.FALSE;
+
+    Object recommended = findFreeNode();
+    return recommended != null ? recommended : Boolean.FALSE;
+  }
+
+  /**
+   * Check if it would be a valid case if this node is visited zero times.
+   * Nodes with unary operator * or ? need not be matched to make a
+   * model valid.
+   */
+  public boolean silenceAllowed()
+  {
+    return unary == '?' || unary == '*';
+  }
+
+  /**
+   * Returns a string representation of the list.
+   * @return String representation, similar to BNF expression.
+   */
+  public String toString()
+  {
+    StringBuffer b = new StringBuffer();
+
+    b.append(token);
+    if (unary != 0)
+      b.append((char) unary);
+    else
+      b.append('\'');
+
+    return b.toString();
+  }
+
+  /**
+   * Check if the node state is valid.
+   */
+  public boolean valid()
+  {
+    switch (unary)
+      {
+        case 0 :
+          if (binary == '|')
+            return true;
+          else
+            return visits == 1;
+
+        case '*' :
+          return true;
+
+        case '+' :
+          return visits > 0;
+
+        case '?' :
+          return visits <= 1;
+
+        default :
+          throw new Error("Invalid unary operation " + unary + " ( '" +
+                          (char) unary + "' )"
+                         );
+      }
+  }
+
+  public boolean validPreliminary()
+  {
+    return visits == 0 || valid();
+  }
+
+  /**
+  * Closes this node and, if closePrevious() returs true, calls close() for
+  * the previous node.
+  */
+  protected void close()
+  {
+    _closed = true;
+    if (previous != null && closePrevious())
+      previous.close();
+  }
+
+  /**
+   * Compare the provided token object with the token object of this node.
+   */
+  protected boolean compare(Object a_token)
+  {
+    if (token instanceof Object[])
+      throw new Error("Invalid token object, probably the 'list' " +
+                      "should be used. "
+                     );
+
+    if (token instanceof node[])
+      throw new Error("Do not use 'node' for the array of nodes, use 'list'. ");
+
+    if (token instanceof node)
+      {
+        return ((node) token).performMatch(a_token);
+      }
+
+    boolean rt = false;
+
+    if (token == a_token)
+      rt = true;
+    if (token.equals(a_token))
+      rt = true;
+    if (token.toString().equalsIgnoreCase(a_token.toString()))
+      rt = true;
+
+    return rt;
+  }
+
+  /**
+   * Fire the changes that must happen then the token matches this node.
+   */
+  protected void matches()
+  {
+    visits++;
+    if (mustClose())
+      close();
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/models/package.html b/libjava/gnu/javax/swing/text/html/parser/models/package.html
new file mode 100644 (file)
index 0000000..60719d0
--- /dev/null
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<!-- package.html - describes classes in javax.swing.text.html.parser package.
+   Copyright (C) 2002 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. -->
+
+<html>
+<head><title>GNU Classpath - gnu.javax.swing.text.html.parser.models</title></head>
+
+<body>
+<p>This package contains classes for working with content models. In this implementation, the
+standardized content model is pre-processed by <code>transformer</code> into an instance of 
+<code>node</code>. Node holds a single element of the content model with the optional unary operation.
+The derived class <code>list</code> holds multiple nodes connected by the same binary operation.
+As the members of this <code>list</code> can also be lists itself, these structures support
+the most of required operations. Several cases when the model cannot be expressed using
+BNF syntax are handled providing specialised classes that are also derived from <code>node</code>.
+</p>
+@author Audrius Meskauskas, Lithuania
+</body>
+</html>
diff --git a/libjava/gnu/javax/swing/text/html/parser/models/transformer.java b/libjava/gnu/javax/swing/text/html/parser/models/transformer.java
new file mode 100755 (executable)
index 0000000..c8c4a25
--- /dev/null
@@ -0,0 +1,201 @@
+/* transformer.java -- Content model transforms.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.swing.text.html.parser.models;
+
+import java.io.Serializable;
+
+import javax.swing.text.html.parser.ContentModel;
+import javax.swing.text.html.parser.DTD;
+
+/**
+ * Transforms the standard ContentModel tree into the internal representation,
+ * used in this implementation.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class transformer
+  implements Serializable
+{
+  private static final long serialVersionUID = 1;
+
+  /**
+   * All binary operators.
+   */
+  protected static String binary = "&|,";
+
+  /**
+   * All unary operators.
+   */
+  protected static String unary = "+*?";
+
+  /**
+   * Measure length of the linked list of the content models.
+   * @param c The heading element of the linked list.
+   * @return the length of the list (0 for null 1 if c!=null and c.next==null,
+   * etc.
+   */
+  public static int measureChainLength(ContentModel c)
+  {
+    if (c == null)
+      return 0;
+    else
+      return measureChainLength(c.next) + 1;
+  }
+
+  /**
+   * Transform into internal representation without usind dtd.
+   * This should be used only for testing.
+   */
+  public static node transform(ContentModel c)
+  {
+    return transform(c, null);
+  }
+
+  /**
+   * Transform into internal representation.
+   * @param c a model to transform
+   * @return a transformed model
+   * @throws Error if the model structure contains errors.
+   */
+  public static node transform(ContentModel c, DTD dtd)
+  {
+    // Handle the special cases first.
+    if (c.content instanceof node)
+      return (node) c.content;
+
+    // Do the typical transform.
+    node n;
+
+    /* Case with the single token */
+    if (c.next == null)
+      {
+        n = optionalTransform(c, dtd);
+      }
+    else /* Case with the chain of the multiple tokens. */
+      {
+        node[] l = new node[ measureChainLength(c) ];
+        ContentModel m = c;
+        for (int i = 0; i < l.length; i++)
+          {
+            if (m.content instanceof ContentModel)
+              {
+                ContentModel nested = (ContentModel) m.content;
+                if (nested.next == null &&
+                    !(nested.content instanceof ContentModel)
+                   )
+                  {
+                    l [ i ] =
+                      new node((char) m.type, (char) nested.type, nested.content);
+                  }
+                else
+                  {
+                    l [ i ] = transform(nested, dtd);
+                  }
+              }
+            else
+              l [ i ] = new node((char) 0, (char) 0, m.content);
+            addtype(l [ i ], (char) m.type);
+            m = m.next;
+          }
+
+        if (isBinary(c.type))
+          for (int i = 0; i < l.length; i++)
+            {
+              l [ i ].binary = (char) c.type;
+            }
+
+        n = new list(l);
+      }
+
+    addtype(n, (char) c.type);
+
+    return n;
+  }
+
+  /**
+   * True for binary operator
+   * @param c a character to test
+   * @return true for [ ,&| ], false otherwise.
+   */
+  private static boolean isBinary(int c)
+  {
+    return binary.indexOf((char) c) >= 0;
+  }
+
+  /**
+   * True for unary operator.
+   * @param c a character to test
+   * @return true for [ +?* ], false otherwise.
+   */
+  private static boolean isUnary(int c)
+  {
+    return unary.indexOf((char) c) >= 0;
+  }
+
+  /**
+   * Assign an operation type for the given node.
+   * @param n A node to set the operation to.
+   * @param type Either binary or unary operation, is assigned to the
+   * corresponding field of the node.
+   * @throws error if the operation type is not
+   * representing a valid unary or binary operation.
+   */
+  private static void addtype(node n, char type)
+  {
+    if (isBinary(type))
+      n.binary = type;
+
+    else if (isUnary(type))
+      n.unary = type;
+
+    else if (type != 0)
+      throw new Error("Invalid operation '" + (char) type + "'");
+  }
+
+  private static node optionalTransform(ContentModel c, DTD dtd)
+  {
+    node n;
+    if (c.content instanceof ContentModel)
+      n = transform((ContentModel) c.content, dtd);
+    else
+
+      /* A single token with the specified operation */
+      n = new node((char) 0, (char) 0, c.content);
+    return n;
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/package.html b/libjava/gnu/javax/swing/text/html/parser/package.html
new file mode 100644 (file)
index 0000000..7fa6995
--- /dev/null
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<!-- package.html - describes classes in javax.swing.text.html.parser package.
+   Copyright (C) 2002 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. -->
+
+<html>
+<head><title>GNU Classpath - javax.swing.text.html.parser</title></head>
+
+<body>
+<p>Provides the error tolerant, DTD-driven HTML 4.01 parser.
+The parser that is used in web robots, html content analysers, 
+web browsers, web editors and other related applications. 
+It should compativle with the older HTML versions, supporting
+obsoleted HTML featues. This package also includes some 
+supporting classes.</p>
+@author Audrius Meskauskas, Lithuania
+</body>
+</html>
diff --git a/libjava/gnu/javax/swing/text/html/parser/support/Parser.java b/libjava/gnu/javax/swing/text/html/parser/support/Parser.java
new file mode 100755 (executable)
index 0000000..084edf6
--- /dev/null
@@ -0,0 +1,1440 @@
+/* Parser.java -- HTML parser.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.javax.swing.text.html.parser.support;
+
+import gnu.javax.swing.text.html.parser.htmlAttributeSet;
+import gnu.javax.swing.text.html.parser.htmlValidator;
+import gnu.javax.swing.text.html.parser.support.low.Constants;
+import gnu.javax.swing.text.html.parser.support.low.ParseException;
+import gnu.javax.swing.text.html.parser.support.low.ReaderTokenizer;
+import gnu.javax.swing.text.html.parser.support.low.Token;
+import gnu.javax.swing.text.html.parser.support.low.node;
+import gnu.javax.swing.text.html.parser.support.low.pattern;
+
+import java.io.IOException;
+import java.io.Reader;
+
+import java.util.Comparator;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.Vector;
+
+import javax.swing.text.ChangedCharSetException;
+import javax.swing.text.html.HTML;
+import javax.swing.text.html.parser.AttributeList;
+import javax.swing.text.html.parser.DTD;
+import javax.swing.text.html.parser.DTDConstants;
+import javax.swing.text.html.parser.Element;
+import javax.swing.text.html.parser.Entity;
+import javax.swing.text.html.parser.TagElement;
+
+/**
+ * <p>A simple error-tolerant HTML parser that uses a DTD document
+ * to access data on the possible tokens, arguments and syntax.</p>
+ * <p> The parser reads an HTML content from a Reader and calls various
+ * notifying methods (which should be overridden in a subclass)
+ * when tags or data are encountered.</p>
+ * <p>Some HTML elements need no opening or closing tags. The
+ * task of this parser is to invoke the tag handling methods also when
+ * the tags are not explicitly specified and must be supposed using
+ * information, stored in the DTD.
+ * For  example, parsing the document
+ * <p>&lt;table&gt;&lt;tr&gt;&lt;td&gt;a&lt;td&gt;b&lt;td&gt;c&lt;/tr&gt; <br>
+ * will invoke exactly the handling methods exactly in the same order
+ * (and with the same parameters) as if parsing the document: <br>
+ * <em>&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;table&gt;&lt;
+ * tbody&gt;</em>&lt;tr&gt;&lt;td&gt;a<em>&lt;/td&gt;</em>&lt;td&gt;b<em>
+ * &lt;/td&gt;</em>&lt;td&gt;c<em>&lt;/td&gt;&lt;/tr&gt;</em>&lt;
+ * <em>/tbody&gt;&lt;/table&gt;&lt;/body&gt;&lt;/html&gt;</em></p>
+ * (supposed tags are given in italics). The parser also supports
+ * obsolete elements of HTML syntax.<p>
+ * </p>
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class Parser
+  extends ReaderTokenizer
+  implements DTDConstants
+{
+  /**
+   * The current html tag.
+   */
+  public Token hTag = new Token();
+
+  /**
+   * The document template description that will be used to parse the documents.
+   */
+  protected DTD dtd;
+
+  /**
+   * The value of this field determines whether or not the Parser will be
+   * strict in enforcing SGML compatibility. The default value is false,
+   * stating that the parser should do everything to parse and get at least
+   * some information even from the incorrectly written HTML input.
+   */
+  protected boolean strict;
+
+  /**
+   * This fields has positive values in preformatted tags.
+   */
+  protected int preformatted = 0;
+
+  /**
+   * The set of the document tags. This field is used for supporting
+   * markFirstTime().
+   */
+  private Set documentTags =
+    new TreeSet(new Comparator()
+      {
+        public int compare(Object a, Object b)
+        {
+          return ((String) a).compareToIgnoreCase((String) b);
+        }
+      }
+               );
+
+  /**
+  * The buffer to collect the incremental output like text or coment.
+  */
+  private StringBuffer buffer = new StringBuffer();
+
+  /**
+   * The buffer to store the document title.
+   */
+  private StringBuffer title = new StringBuffer();
+
+  /**
+   * The current token.
+   */
+  private Token t;
+
+  /**
+   * True means that the 'title' tag of this document has
+   * already been handled.
+   */
+  private boolean titleHandled;
+
+  /**
+   * True means that the 'title' tag is currently open and all
+   * text is also added to the title buffer.
+   */
+  private boolean titleOpen;
+
+  /**
+   * The attributes of the current HTML element.
+   */
+  private htmlAttributeSet attributes =
+    htmlAttributeSet.EMPTY_HTML_ATTRIBUTE_SET;
+
+  /**
+   * The validator, controlling the forcible closing of the tags that
+   * (in accordance to dtd) are not allowed in the current context.
+   */
+  private htmlValidator validator;
+
+  /**
+   * Provides the default values for parameters in the case when these
+   * values are defined in the DTD.
+   */
+  private parameterDefaulter defaulter;
+
+  /**
+   * The text pre-processor for handling line ends and tabs.
+   */
+  private textPreProcessor textProcessor = new textPreProcessor();
+
+  /**
+   * Creates a new Parser that uses the given
+   * {@link javax.swing.text.html.parser.DTD }. The only standard way
+   * to get an instance of DTD is to construct it manually, filling in
+   * all required fields.
+   * @param a_dtd The DTD to use. The parser behaviour after passing null
+   * as an argument is not documented and may vary between implementations.
+   */
+  public Parser(DTD a_dtd)
+  {
+    if (a_dtd == null)
+      dtd = gnu.javax.swing.text.html.parser.HTML_401F.getInstance();
+    else
+      dtd = a_dtd;
+
+    defaulter = new parameterDefaulter(dtd);
+
+    validator =
+      new htmlValidator(dtd)
+        {
+          /**
+           * Handles the error message. This method must be overridden to pass
+           * the message where required.
+           * @param msg The message text.
+           */
+          protected void s_error(String msg)
+          {
+            error(msg);
+          }
+
+          /**
+           * The method is called when the tag validator decides to close the
+           * tag on its own initiative. After reaching the end of stream,
+           * The tag validator closes all unclosed elements that are required
+           * to have the end (closing) tag.
+           *
+           * @param element The tag being fictionally (forcibly) closed.
+           */
+          protected void handleSupposedEndTag(Element tElement)
+          {
+            // The tag is cloned as the original tElement is the
+            // element from the starting tag - may be accidently used
+            // somewhere else.
+            TagElement tag = makeTag(tElement, true);
+            _handleEndTag_remaining(tag);
+          }
+
+          /**
+           * The method is called when the the tag validator decides to open
+           * the new tag on its own initiative. The tags, opened in this
+           * way, are HTML, HEAD and BODY. The attribute set is temporary
+           * assigned to the empty one, the previous value is
+           * restored before return.
+           *
+           * @param element The tag being fictionally (forcibly) closed.
+           */
+          protected void handleSupposedStartTag(Element tElement)
+          {
+            TagElement tag = makeTag(tElement, true);
+            htmlAttributeSet were = attributes;
+            attributes = htmlAttributeSet.EMPTY_HTML_ATTRIBUTE_SET;
+            _handleStartTag(tag);
+            attributes = were;
+          }
+        };
+  }
+
+  /**
+   * Get the attributes of the current tag.
+   * @return The attribute set, representing the attributes of the current tag.
+   */
+  public htmlAttributeSet getAttributes()
+  {
+    return attributes;
+  }
+
+  /**
+   * Invokes the error handler. The default method in this implementation
+   * delegates the call to handleError, also providing the current line.
+   */
+  public void error(String msg)
+  {
+    error(msg, getTokenAhead());
+  }
+
+  public void error(String msg, Token atToken)
+  {
+    if (atToken != null)
+      handleError(atToken.where.beginLine,
+                  msg + ": line " + atToken.where.beginLine +
+                  ", absolute pos " + atToken.where.startPosition
+                 );
+    else
+      handleError(0, msg);
+  }
+
+  /**
+   * Invokes the error handler. The default method in this implementation
+   * delegates the call to error (parm1+": '"+parm2+"'").
+   */
+  public void error(String msg, String invalid)
+  {
+    error(msg + ": '" + invalid + "'");
+  }
+
+  /**
+   * Invokes the error handler. The default method in this implementation
+   * delegates the call to error (parm1+" "+ parm2+" "+ parm3).
+   */
+  public void error(String parm1, String parm2, String parm3)
+  {
+    error(parm1 + " " + parm2 + " " + parm3);
+  }
+
+  /**
+   * Invokes the error handler. The default method in this implementation
+   * delegates the call to error (parm1+" "+ parm2+" "+ parm3+" "+ parm4).
+   */
+  public void error(String parm1, String parm2, String parm3, String parm4)
+  {
+    error(parm1 + " " + parm2 + " " + parm3 + " " + parm4);
+  }
+
+  public void flushAttributes()
+  {
+  }
+
+  /**
+   * Parse the HTML text, calling various methods in response to the
+   * occurence of the corresponding HTML constructions.
+   * @param reader The reader to read the source HTML from.
+   * @throws IOException If the reader throws one.
+   */
+  public synchronized void parse(Reader reader)
+                          throws IOException
+  {
+    reset(reader);
+    restart();
+    try
+      {
+        parseDocument();
+        validator.closeAll();
+      }
+    catch (ParseException ex)
+      {
+        if (ex != null)
+          {
+            error("Unable to continue parsing the document", ex.getMessage());
+
+            Throwable cause = ex.getCause();
+            if (cause instanceof IOException)
+              throw (IOException) cause;
+          }
+      }
+  }
+
+  /**
+   * Parses DTD markup declaration. Currently returns null without action.
+   * @return null.
+   * @throws IOException
+   */
+  public String parseDTDMarkup()
+                        throws IOException
+  {
+    return null;
+  }
+
+  /**
+   * Parse SGML insertion ( &lt;! ... &gt; ). When the
+   * the SGML insertion is found, this method is called, passing
+   * SGML in the string buffer as a parameter. The default method
+   * returns false without action and can be overridden to
+   * implement user - defined SGML support.
+   * <p>
+   * If you need more information about SGML insertions in HTML documents,
+   * the author suggests to read SGML tutorial on
+   * {@link http://www.w3.org/TR/WD-html40-970708/intro/sgmltut.html}.
+   * We also recommend Goldfarb C.F (1991) <i>The SGML Handbook</i>,
+   * Oxford University Press, 688 p, ISBN: 0198537379.
+   * </p>
+   * @param strBuff
+   * @return true if this is a valid DTD markup declaration.
+   * @throws IOException
+   */
+  public boolean parseMarkupDeclarations(StringBuffer strBuff)
+                                  throws IOException
+  {
+    return false;
+  }
+
+  /**
+   * Get the first line of the last parsed token.
+   */
+  protected int getCurrentLine()
+  {
+    return hTag.where.beginLine;
+  }
+
+  /**
+   * Read parseable character data, add to buffer.
+   * @param clearBuffer If true, buffer if filled by CDATA section,
+   * otherwise the section is appended to the existing content of the
+   * buffer.
+   *
+   * @throws ParseException
+   */
+  protected void CDATA(boolean clearBuffer)
+                throws ParseException
+  {
+    Token start = hTag = getTokenAhead();
+
+    if (clearBuffer)
+      buffer.setLength(0);
+
+    // Handle expected EOF.
+    if (start.kind == EOF)
+      return;
+
+    read: 
+    while (true)
+      {
+        t = getTokenAhead();
+        if (t.kind == EOF)
+          {
+            error("unexpected eof", t);
+            break read;
+          }
+        else if (t.kind == BEGIN)
+          break read;
+        else if (t.kind == Constants.ENTITY)
+          {
+            resolveAndAppendEntity(t);
+            getNextToken();
+          }
+        else
+          {
+            append(t);
+            getNextToken();
+          }
+      }
+    hTag = new Token(start, getTokenAhead(0));
+    if (buffer.length() != 0)
+      _handleText();
+  }
+
+  /**
+  * Process Comment. This method skips till --> without
+  * taking SGML constructs into consideration.  The supported SGML
+  * constructs are handled separately.
+  */
+  protected void Comment()
+                  throws ParseException
+  {
+    buffer.setLength(0);
+
+    Token start = hTag = mustBe(BEGIN);
+    optional(WS);
+    mustBe(EXCLAMATION);
+    optional(WS);
+    mustBe(DOUBLE_DASH);
+
+    Token t;
+    Token last;
+
+    comment: 
+    while (true)
+      {
+        t = getTokenAhead();
+        if (t.kind == EOF)
+          {
+            handleEOFInComment();
+            last = t;
+            break comment;
+          }
+        else if (COMMENT_END.matches(this))
+          {
+            mustBe(DOUBLE_DASH);
+            optional(WS);
+            last = mustBe(END);
+            break comment;
+          }
+        else if (COMMENT_TRIPLEDASH_END.matches(this))
+          {
+            mustBe(DOUBLE_DASH);
+            t = mustBe(NUMTOKEN);
+            if (t.getImage().equals("-"))
+              {
+                append(t);
+                last = mustBe(END);
+                break comment;
+              }
+            else
+              {
+                buffer.append("--");
+                append(t);
+                t = getTokenAhead();
+              }
+          }
+        else
+        /* The lllll-- can match as NUMTOKEN */
+        if ((t.getImage().endsWith("--")) &&
+            (
+              getTokenAhead(1).kind == END ||
+              (getTokenAhead(1).kind == WS && getTokenAhead(2).kind == END)
+            )
+           )
+          {
+            buffer.append(t.getImage().substring(0, t.getImage().length() - 2));
+
+            /* Skip the closing > that we have already checked. */
+            last = mustBe(t.kind);
+            break comment;
+          }
+        else
+          append(t);
+        mustBe(t.kind);
+      }
+    hTag = new Token(start, last);
+    handleComment();
+  }
+
+  /**
+  * Read a script. The text, returned without any changes,
+  * is terminated only by the closing tag SCRIPT.
+  */
+  protected void Script()
+                 throws ParseException
+  {
+    Token name;
+
+    Token start = hTag = mustBe(BEGIN);
+    optional(WS);
+
+    name = mustBe(SCRIPT);
+
+    optional(WS);
+
+    restOfTag(false, name, start);
+
+    buffer.setLength(0);
+
+    script: 
+    while (!SCRIPT_CLOSE.matches(this))
+      {
+        append(getNextToken());
+      }
+
+    consume(SCRIPT_CLOSE);
+
+    _handleText();
+
+    endTag(false);
+    _handleEndTag(makeTagElement(name.getImage(), false));
+  }
+
+  /**
+  * Process SGML insertion that is not a comment.
+  */
+  protected void Sgml()
+               throws ParseException
+  {
+    if (COMMENT_OPEN.matches(this))
+      Comment();
+    else // skip till ">"
+      {
+        Token start = hTag = mustBe(BEGIN);
+        optional(WS);
+        mustBe(EXCLAMATION);
+
+        buffer.setLength(0);
+        read: 
+        while (true)
+          {
+            t = getNextToken();
+            if (t.kind == Constants.ENTITY)
+              {
+                resolveAndAppendEntity(t);
+              }
+            else if (t.kind == EOF)
+              {
+                error("unexpected eof", t);
+                break read;
+              }
+            else if (t.kind == END)
+              break read;
+            else
+              append(t);
+          }
+
+        try
+          {
+            parseMarkupDeclarations(buffer);
+          }
+        catch (IOException ex)
+          {
+            error("Unable to parse SGML insertion: '" + buffer + "'",
+                  new Token(start, t)
+                 );
+          }
+      }
+  }
+
+  /**
+  * Read a style definition. The text, returned without any changes,
+  * is terminated only by the closing tag STYLE.
+  */
+  protected void Style()
+                throws ParseException
+  {
+    Token name;
+
+    Token start = hTag = mustBe(BEGIN);
+    optional(WS);
+
+    name = mustBe(STYLE);
+
+    optional(WS);
+
+    restOfTag(false, name, start);
+
+    buffer.setLength(0);
+
+    style: 
+    while (!STYLE_CLOSE.matches(this))
+      {
+        append(getNextToken());
+      }
+
+    consume(STYLE_CLOSE);
+
+    _handleText();
+
+    endTag(false);
+    _handleEndTag(makeTagElement(name.getImage(), false));
+  }
+
+  /**
+   * Read a html tag.
+   */
+  protected void Tag()
+              throws ParseException
+  {
+    mark(true);
+
+    boolean closing = false;
+    Token name;
+    Token start = hTag = mustBe(BEGIN);
+
+    optional(WS);
+    name = getNextToken();
+    optional(WS);
+
+    if (name.kind == SLASH)
+      {
+        closing = true;
+        name = getNextToken();
+      }
+
+    restOfTag(closing, name, start);
+  }
+
+  /**
+   * A hook, for operations, preceeding call to handleText.
+   * Handle text in a string buffer.
+   * In non - preformatted mode, all line breaks immediately following the
+   * start tag and immediately before an end tag is discarded,
+   * \r, \n and \t are replaced by spaces, multiple space are replaced
+   * by the single one and the result is  moved into array,
+   * passing it  to handleText().
+   */
+  protected void _handleText()
+  {
+    char[] text;
+
+    if (preformatted > 0)
+      text = textProcessor.preprocessPreformatted(buffer);
+    else
+      text = textProcessor.preprocess(buffer);
+
+    if (text != null && text.length > 0)
+      {
+        TagElement pcdata = new TagElement(dtd.getElement("#pcdata"));
+        attributes = htmlAttributeSet.EMPTY_HTML_ATTRIBUTE_SET;
+        _handleEmptyTag(pcdata);
+
+        handleText(text);
+        if (titleOpen)
+          title.append(text);
+      }
+  }
+
+  /**
+   * Add the image of this token to the buffer.
+   * @param t A token to append.
+   */
+  protected final void append(Token t)
+  {
+    if (t.kind != EOF)
+      t.appendTo(buffer);
+  }
+
+  /**
+   * Consume pattern that must match.
+   * @param p A pattern to consume.
+   */
+  protected final void consume(pattern p)
+  {
+    node n;
+    for (int i = 0; i < p.nodes.length; i++)
+      {
+        n = p.nodes [ i ];
+        if (n.optional)
+          optional(n.kind);
+        else
+          mustBe(n.kind);
+      }
+  }
+
+  /**
+   * The method is called when the HTML end (closing) tag is found or if
+   * the parser concludes that the one should be present in the
+   * current position. The method is called immediatly
+   * before calling the handleEndTag().
+   * @param omitted True if the tag is no actually present in the document,
+   * but is supposed by the parser (like &lt;/html&gt; at the end of the
+   * document).
+   */
+  protected void endTag(boolean omitted)
+  {
+  }
+
+  /**
+   * Handle HTML comment. The default method returns without action.
+   * @param comment
+   */
+  protected void handleComment(char[] comment)
+  {
+  }
+
+  /**
+   * This is additionally called in when the HTML content terminates
+   * without closing the HTML comment. This can only happen if the
+   * HTML document contains errors (for example, the closing --;gt is
+   * missing.
+   */
+  protected void handleEOFInComment()
+  {
+    error("Unclosed comment");
+  }
+
+  /**
+   * Handle the tag with no content, like &lt;br&gt;. The method is
+   * called for the elements that, in accordance with the current DTD,
+   * has an empty content.
+   * @param The tag being handled.
+   * @throws javax.swing.text.ChangedCharSetException
+   */
+  protected void handleEmptyTag(TagElement tag)
+                         throws javax.swing.text.ChangedCharSetException
+  {
+  }
+
+  /**
+   * The method is called when the HTML closing tag ((like &lt;/table&gt;)
+   * is found or if the parser concludes that the one should be present
+   * in the current position.
+   * @param The tag
+   */
+  protected void handleEndTag(TagElement tag)
+  {
+  }
+
+  /* Handle error that has occured in the given line. */
+  protected void handleError(int line, String message)
+  {
+  }
+
+  /**
+   * The method is called when the HTML opening tag ((like &lt;table&gt;)
+   * is found or if the parser concludes that the one should be present
+   * in the current position.
+   * @param The tag
+   */
+  protected void handleStartTag(TagElement tag)
+  {
+  }
+
+  /**
+   * Handle the text section.
+   * <p> For non-preformatted section, the parser replaces
+   * \t, \r and \n by spaces and then multiple spaces
+   * by a single space. Additionaly, all whitespace around
+   * tags is discarded.
+   * </p>
+   * <p> For pre-formatted text (inside TEXAREA and PRE), the parser preserves
+   * all tabs and spaces, but removes <b>one</b>  bounding \r, \n or \r\n,
+   * if it is present. Additionally, it replaces each occurence of \r or \r\n
+   * by a single \n.</p>
+   *
+   * @param text A section text.
+   */
+  protected void handleText(char[] text)
+  {
+  }
+
+  /**
+   * Handle HTML &lt;title&gt; tag. This method is invoked when
+   * both title starting and closing tags are already behind.
+   * The passed argument contains the concatenation of all
+   * title text sections.
+   * @param The title text.
+   */
+  protected void handleTitle(char[] title)
+  {
+  }
+
+  /**
+   * Constructs the tag from the given element. In this implementation,
+   * this is defined, but never called.
+   * @return the tag
+   */
+  protected TagElement makeTag(Element element)
+  {
+    return makeTag(element, false);
+  }
+
+  /**
+   * Constructs the tag from the given element.
+   * @param the tag base {@link javax.swing.text.html.parser.Element}
+   * @param isSupposed true if the tag is not actually present in the
+   * html input, but the parser supposes that it should to occur in
+   * the current location.
+   * @return the tag
+   */
+  protected TagElement makeTag(Element element, boolean isSupposed)
+  {
+    return new TagElement(element, isSupposed);
+  }
+
+  /**
+   * This is called when the tag, representing the given element,
+   * occurs first time in the document.
+   * @param element
+   */
+  protected void markFirstTime(Element element)
+  {
+  }
+
+  /**
+   * Consume the token that was checked before and hence MUST be present.
+   * @param kind The kind of token to consume.
+   */
+  protected Token mustBe(int kind)
+  {
+    if (getTokenAhead().kind == kind)
+      return getNextToken();
+    else
+      {
+        String ei = "";
+        if (kind < 1000)
+          ei = " ('" + (char) kind + "') ";
+        throw new AssertionError("The token of kind " + kind + ei +
+                                 " MUST be here,"
+                                );
+      }
+  }
+
+  /**
+   * Handle attribute without value. The default method uses
+   * the only allowed attribute value from DTD.
+   * If the attribute is unknown or allows several values,
+   * the HTML.NULL_ATTRIBUTE_VALUE is used. The attribute with
+   * this value is added to the attribute set.
+   * @param element The name of element.
+   * @param attribute The name of attribute without value.
+   */
+  protected void noValueAttribute(String element, String attribute)
+  {
+    Object value = HTML.NULL_ATTRIBUTE_VALUE;
+
+    Element e = (Element) dtd.elementHash.get(element.toLowerCase());
+    if (e != null)
+      {
+        AttributeList attr = e.getAttribute(attribute);
+        if (attr != null)
+          {
+            Vector values = attr.values;
+            if (values != null && values.size() == 1)
+              value = values.get(0);
+          }
+      }
+    attributes.addAttribute(attribute, value);
+  }
+
+  /**
+   * Consume the optional token, if present.
+   * @param kind The kind of token to consume.
+   */
+  protected Token optional(int kind)
+  {
+    if (getTokenAhead().kind == kind)
+      return getNextToken();
+    else
+      return null;
+  }
+
+  /** Parse the html document. */
+  protected void parseDocument()
+                        throws ParseException
+  {
+    while (getTokenAhead().kind != EOF)
+      {
+        advanced = false;
+        if (TAG.matches(this))
+          Tag();
+        else if (COMMENT_OPEN.matches(this))
+          Comment();
+        else if (STYLE_OPEN.matches(this))
+          Style();
+        else if (SCRIPT_OPEN.matches(this))
+          Script();
+        else if (SGML.matches(this))
+          Sgml();
+        else
+          CDATA(true);
+
+        // Surely HTML error, treat as a text.
+        if (!advanced)
+          {
+            Token wrong = getNextToken();
+            error("unexpected '" + wrong.getImage() + "'", wrong);
+            buffer.setLength(0);
+            buffer.append(wrong.getImage());
+            _handleText();
+          }
+      }
+  }
+
+  /**
+   * Read the element attributes, adding them into attribute set.
+   * @param element The element name (needed to access attribute
+   * information in dtd).
+   */
+  protected void readAttributes(String element)
+  {
+    Token name;
+    Token value;
+    Token next;
+    String attrValue;
+
+    attributes = new htmlAttributeSet();
+
+    optional(WS);
+
+    attributeReading: 
+    while (getTokenAhead().kind == NUMTOKEN)
+      {
+        name = getNextToken();
+        optional(WS);
+
+        next = getTokenAhead();
+        if (next.kind == EQ)
+          {
+            mustBe(EQ);
+            optional(WS);
+
+            next = getNextToken();
+
+            switch (next.kind)
+              {
+                case QUOT :
+
+                  // read "quoted" attribute.
+                  buffer.setLength(0);
+                  readTillTokenE(QUOT);
+                  attrValue = buffer.toString();
+                  break;
+
+                case AP :
+
+                  // read 'quoted' attribute.
+                  buffer.setLength(0);
+                  readTillTokenE(AP);
+                  attrValue = buffer.toString();
+                  break;
+
+                // read unquoted attribute.
+                case NUMTOKEN :
+                  value = next;
+                  optional(WS);
+
+                  // Check maybe the opening quote is missing.
+                  next = getTokenAhead();
+                  if (bQUOTING.get(next.kind))
+                    {
+                      hTag = next;
+                      error("The value without opening quote is closed with '" +
+                            next.getImage() + "'"
+                           );
+                    }
+                  attrValue = value.getImage();
+                  break;
+
+                default :
+                  break attributeReading;
+              }
+            attributes.addAttribute(name.getImage(), attrValue);
+            optional(WS);
+          }
+        else // The '=' is missing: attribute without value.
+          {
+            noValueAttribute(element, name.getImage());
+          }
+      }
+  }
+
+  /**
+   * Return string, corresponding the given named entity.
+   * The name is passed with the preceeding &, but without
+   * the ending semicolon.
+   */
+  protected String resolveNamedEntity(final String a_tag)
+  {
+    // Discard &
+    if (!a_tag.startsWith("&"))
+      throw new AssertionError("Named entity " + a_tag +
+                               " must start witn '&'."
+                              );
+
+    String tag = a_tag.substring(1);
+
+    try
+      {
+        Entity entity = dtd.getEntity(tag);
+        if (entity != null)
+          return entity.getString();
+
+        entity = dtd.getEntity(tag.toLowerCase());
+
+        if (entity != null)
+          {
+            error("The name of this entity should be in lowercase", a_tag);
+            return entity.getString();
+          }
+      }
+    catch (IndexOutOfBoundsException ibx)
+      {
+        /* The error will be reported. */
+      }
+
+    error("Unknown named entity", a_tag);
+    return a_tag;
+  }
+
+  /**
+   * Return char, corresponding the given numeric entity.
+   * The name is passed with the preceeding &#, but without
+   * the ending semicolon.
+   */
+  protected char resolveNumericEntity(final String a_tag)
+  {
+    // Discard &#
+    if (!a_tag.startsWith("&#"))
+      throw new AssertionError("Numeric entity " + a_tag +
+                               " must start witn '&#'."
+                              );
+
+    String tag = a_tag.substring(2);
+
+    try
+      {
+        // Determine the encoding type:
+        char cx = tag.charAt(0);
+        if (cx == 'x' || cx == 'X') // Hexadecimal &#Xnnn;
+
+          return (char) Integer.parseInt(tag.substring(1), 16);
+
+        return (char) Integer.parseInt(tag);
+      }
+
+    /* The error will be reported. */
+    catch (NumberFormatException nex)
+      {
+      }
+    catch (IndexOutOfBoundsException ix)
+      {
+      }
+
+    error("Invalid numeric entity", a_tag);
+    return '?';
+  }
+
+  /**
+   * Reset all fields into the intial default state, preparing the
+   * parset for parsing the next document.
+   */
+  protected void restart()
+  {
+    documentTags.clear();
+    titleHandled = false;
+    titleOpen = false;
+    buffer.setLength(0);
+    title.setLength(0);
+    validator.restart();
+  }
+
+  /**
+   * The method is called when the HTML opening tag ((like &lt;table&gt;)
+   * is found or if the parser concludes that the one should be present
+   * in the current position. The method is called immediately before
+   * calling the handleStartTag.
+   * @param The tag
+   */
+  protected void startTag(TagElement tag)
+                   throws ChangedCharSetException
+  {
+  }
+
+  /**
+   * Handle a complete element, when the tag content is already present in the
+   * buffer and both starting and heading tags behind. This is called
+   * in the case when the tag text must not be parsed for the nested
+   * elements (elements STYLE and SCRIPT).
+   */
+  private void _handleCompleteElement(TagElement tag)
+  {
+    _handleStartTag(tag);
+
+    // Suppress inclusion of the SCRIPT ans STYLE texts into the title.
+    HTML.Tag h = tag.getHTMLTag();
+    if (h == HTML.Tag.SCRIPT || h == HTML.Tag.STYLE)
+      {
+        boolean tmp = titleOpen;
+        titleOpen = false;
+        _handleText();
+        titleOpen = tmp;
+      }
+    else
+      _handleText();
+
+    _handleEndTag(tag);
+  }
+
+  /**
+   * A hooks for operations, preceeding call to handleEmptyTag().
+   * Handle the tag with no content, like &lt;br&gt;. As no any
+   * nested tags are expected, the tag validator is not involved.
+   * @param The tag being handled.
+   */
+  private void _handleEmptyTag(TagElement tag)
+  {
+    try
+      {
+        validator.validateTag(tag, attributes);
+        handleEmptyTag(tag);
+      }
+    catch (ChangedCharSetException ex)
+      {
+        error("Changed charset exception:", ex.getMessage());
+      }
+  }
+
+  /**
+   * A hooks for operations, preceeding call to handleEndTag().
+   * The method is called when the HTML closing tag
+   * is found. Calls handleTitle after closing the 'title' tag.
+   * @param The tag
+   */
+  private void _handleEndTag(TagElement tag)
+  {
+    validator.closeTag(tag);
+    _handleEndTag_remaining(tag);
+  }
+
+  /**
+   * Actions that are also required if the closing action was
+   * intiated by the tag validator.
+   */
+  private void _handleEndTag_remaining(TagElement tag)
+  {
+    HTML.Tag h = tag.getHTMLTag();
+
+    handleEndTag(tag);
+    endTag(tag.fictional());
+
+    if (h.isPreformatted())
+      preformatted--;
+    if (preformatted < 0)
+      preformatted = 0;
+
+    if (h == HTML.Tag.TITLE)
+      {
+        titleOpen = false;
+        titleHandled = true;
+
+        char[] a = new char[ title.length() ];
+        title.getChars(0, a.length, a, 0);
+        handleTitle(a);
+      }
+  }
+
+  /**
+   * A hooks for operations, preceeding call to handleStartTag().
+   * The method is called when the HTML opening tag ((like &lt;table&gt;)
+   * is found.
+   * @param The tag
+   */
+  private void _handleStartTag(TagElement tag)
+  {
+    validator.openTag(tag, attributes);
+    startingTag(tag);
+    handleStartTag(tag);
+
+    HTML.Tag h = tag.getHTMLTag();
+
+    if (h.isPreformatted())
+      preformatted++;
+
+    if (h == HTML.Tag.TITLE)
+      {
+        if (titleHandled)
+          error("Repetetive <TITLE> tag");
+        titleOpen = true;
+        titleHandled = false;
+      }
+  }
+
+  /**
+   * Resume parsing after heavy errors in HTML tag structure.
+   * @throws ParseException
+   */
+  private void forciblyCloseTheTag()
+                            throws ParseException
+  {
+    int closeAt = 0;
+    buffer.setLength(0);
+
+    ahead: 
+    for (int i = 1; i < 100; i++)
+      {
+        t = getTokenAhead(i - 1);
+        if (t.kind == EOF || t.kind == BEGIN)
+          break ahead;
+        if (t.kind == END)
+          {
+            /* Closing '>' found. */
+            closeAt = i;
+            break ahead;
+          }
+      }
+    if (closeAt > 0)
+      {
+        buffer.append("Ignoring '");
+        for (int i = 1; i <= closeAt; i++)
+          {