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++)
+          {
+            t = getNextToken();
+            append(t);
+          }
+        buffer.append('\'');
+        error(buffer.toString());
+      }
+  }
+
+  /**
+   * Handle comment in string buffer. You can avoid allocating a char
+   * array each time by processing your comment directly here.
+   */
+  private void handleComment()
+  {
+    char[] a = new char[ buffer.length() ];
+    buffer.getChars(0, a.length, a, 0);
+    handleComment(a);
+  }
+
+  private TagElement makeTagElement(String name, boolean isSupposed)
+  {
+    Element e = (Element) dtd.elementHash.get(name.toLowerCase());
+    if (e == null)
+      {
+        error("Unknown tag <" + name + ">");
+        e = dtd.getElement(name);
+        e.name = name.toUpperCase();
+        e.index = -1;
+      }
+
+    if (!documentTags.contains(e.name))
+      {
+        markFirstTime(e);
+        documentTags.add(e.name);
+      }
+
+    return makeTag(e, isSupposed);
+  }
+
+  /**
+   * Read till the given token, resolving entities. Consume the given
+   * token without adding it to buffer.
+   * @param till The token to read till
+   * @throws ParseException
+   */
+  private void readTillTokenE(int till)
+                       throws ParseException
+  {
+    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 == till)
+          break read;
+        else if (t.kind == WS)
+          {
+            // Processing whitespace in accordance with CDATA rules:
+            String s = t.getImage();
+            char c;
+            for (int i = 0; i < s.length(); i++)
+              {
+                c = s.charAt(i);
+                if (c == '\r')
+                  buffer.append(' '); // CR replaced by space
+                else if (c == '\n')
+                  ; // LF ignored
+                else if (c == '\t')
+                  buffer.append(' '); // Tab replaced by space
+                else
+                  buffer.append(c);
+              }
+          }
+        else
+          append(t);
+      }
+  }
+
+  /**
+   * Resolve the entity and append it to the end of buffer.
+   * @param entity
+   */
+  private void resolveAndAppendEntity(Token entity)
+  {
+    switch (entity.category)
+      {
+        case ENTITY_NAMED :
+          buffer.append(resolveNamedEntity(entity.getImage()));
+          break;
+
+        case ENTITY_NUMERIC :
+          buffer.append(resolveNumericEntity(entity.getImage()));
+          break;
+
+        default :
+          throw new AssertionError("Invalid entity category " +
+                                   entity.category
+                                  );
+      }
+  }
+
+  /**
+   * Handle the remaining of HTML tags. This is a common end for
+   * TAG, SCRIPT and STYLE.
+   * @param closing True for closing tags ( &lt;/TAG&gt; ).
+   * @param name Name of element
+   * @param start Token where element has started
+   * @throws ParseException
+   */
+  private void restOfTag(boolean closing, Token name, Token start)
+                  throws ParseException
+  {
+    boolean end = false;
+    Token next;
+
+    optional(WS);
+
+    readAttributes(name.getImage());
+
+    optional(WS);
+
+    next = getTokenAhead();
+    if (next.kind == END)
+      {
+        mustBe(END);
+        end = true;
+      }
+
+    hTag = new Token(start, next);
+
+    attributes.setResolveParent(defaulter.getDefaultParameters(name.getImage()));
+
+    if (!end)
+      {
+        // The tag body contains errors. If additionally the tag
+        // name is not valid, this construction is treated as text.
+        if (dtd.elementHash.get(name.getImage().toLowerCase()) == null &&
+            backupMode
+           )
+          {
+            error("Errors in tag body and unknown tag name. " +
+                  "Treating the tag as a text."
+                 );
+            reset();
+
+            hTag = mustBe(BEGIN);
+            buffer.setLength(0);
+            buffer.append(hTag.getImage());
+            CDATA(false);
+            return;
+          }
+        else
+          {
+            error("Forcibly closing invalid parameter list");
+            forciblyCloseTheTag();
+          }
+      }
+
+    if (closing)
+      {
+        endTag(false);
+        _handleEndTag(makeTagElement(name.getImage(), false));
+      }
+    else
+      {
+        TagElement te = makeTagElement(name.getImage(), false);
+        if (te.getElement().type == DTDConstants.EMPTY)
+          _handleEmptyTag(te);
+        else
+          _handleStartTag(te);
+      }
+  }
+
+  /**
+   * This should fire additional actions in response to the
+   * ChangedCharSetException.  The current implementation
+   * does nothing.
+   * @param tag
+   */
+  private void startingTag(TagElement tag)
+  {
+    try
+      {
+        startTag(tag);
+      }
+    catch (ChangedCharSetException cax)
+      {
+        error("Invalid change of charset");
+      }
+  }
+
+  private void ws_error()
+  {
+    error("Whitespace here is not permitted");
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java b/libjava/gnu/javax/swing/text/html/parser/support/gnuStringIntMapper.java
new file mode 100755 (executable)
index 0000000..2887bac
--- /dev/null
@@ -0,0 +1,112 @@
+/* gnuStringIntMapper.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.support;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * A helper class, mapping between the strings and they unique integer
+ * identifiers.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public abstract class gnuStringIntMapper
+{
+  /**
+   * Maps argument integer values from DTDConstants into they string
+   * names. Initialized on demand.
+   */
+  private Map is_Map;
+
+  /**
+   * Maps argument string names into they integer values from DTDConstants.
+   * Initialized on demand.
+   */
+  private Map si_Map;
+
+  /**
+   *  Get string from id or null if no such id is present in the mapper.
+   */
+  public final String get(int id)
+  {
+    if (is_Map == null)
+      createTheMap();
+
+    return (String) is_Map.get(new Integer(id));
+  }
+
+  /** Get id from string or 0 if no such string is present in the mapper. */
+  public final int get(String id)
+  {
+    if (si_Map == null)
+      createTheMap();
+
+    Integer i = (Integer) si_Map.get(id);
+
+    return i != null ? i.intValue() : 0;
+  }
+
+  /**
+   * Create the mapping table for this mapper by adding the required
+   * String/int pairs. The method is invoked
+   * only once for each instance, after the first invocation of the any
+   * form of the <code>get</code> method. Use <code>add</code> to
+   * create a map for a concrete instance.
+   */
+  protected abstract void create();
+
+  /**
+   * Add an id/string pair to this mapper. This is called from
+   * the method <code>create</code> only.
+   */
+  protected void add(String name, int id)
+  {
+    Integer i = new Integer(id);
+    si_Map.put(name, i);
+    is_Map.put(i, name);
+  }
+
+  private void createTheMap()
+  {
+    is_Map = new HashMap();
+    si_Map = new TreeMap();
+    create();
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/support/low/Buffer.java b/libjava/gnu/javax/swing/text/html/parser/support/low/Buffer.java
new file mode 100644 (file)
index 0000000..b9e8edc
--- /dev/null
@@ -0,0 +1,238 @@
+/* Buffer.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.support.low;
+
+/**
+ * A string buffer that additionally holds line and absolute postion
+ * information.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class Buffer
+{
+  public static int INITIAL_SIZE = 2048;
+
+  /**
+   * True if the \n symbol has been seen.
+   */
+  public boolean n_seen;
+
+  /**
+   * True if the \r symbol has been seen.
+   */
+  public boolean r_seen;
+  char[] chr = new char[ INITIAL_SIZE ];
+  int[] line = new int[ INITIAL_SIZE ];
+  int[] position = new int[ INITIAL_SIZE ];
+
+  /**
+   * Current line.
+   */
+  int current_line = 0;
+
+  /**
+   * Point to the next free position.
+   */
+  int length;
+
+  public Buffer()
+  {
+  }
+
+  public Buffer(String content)
+  {
+    for (int i = 0; i < content.length(); i++)
+      {
+        append(content.charAt(i), i);
+      }
+  }
+
+  /**
+   * Get the characters into array.
+   * @param srcBegin From, inclusive
+   * @param srcEnd To, exclusive.
+   * @param dst Into
+   * @param dstBegin Offset.
+   */
+  public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
+  {
+    System.arraycopy(chr, srcBegin, dst, dstBegin, (srcEnd - srcBegin));
+  }
+
+  /**
+   * Return the sequence, used to separate lines in the document.
+   * @return one of \n, \r or \r\n.
+   */
+  public String getEndOfLineSequence()
+  {
+    if (r_seen && n_seen)
+      return "\r\n";
+    else if (r_seen)
+      return "\r";
+    else
+
+      // This also is returned for single-line document.
+      return "\n";
+  }
+
+  /**
+   * Truncate.
+   * @param n The length to truncate till.
+   */
+  public void setLength(int n)
+  {
+    length = n;
+  }
+
+  /**
+   * Get location information for the given region.
+   * @param from Region start, inclusive.
+   * @param to Region end, exclusive.
+   * @return The location, covering the region.
+   */
+  public Location getLocation(int from, int to)
+  {
+    Location l = new Location();
+    l.beginLine = line [ from ];
+    l.endLine = line [ to - 1 ];
+
+    l.startPosition = position [ from ];
+    l.endPosition = position [ to - 1 ] + 1;
+
+    return l;
+  }
+
+  /**
+   * Add the character.
+   * @param c The character.
+   * @param pos The character position in the stream (the line number
+   * is handled internally in the buffer).
+   */
+  public void append(char c, int pos)
+  {
+    if (length >= chr.length)
+      expand();
+    chr [ length ] = c;
+    position [ length ] = pos;
+
+    if (c == '\n')
+      {
+        if (!r_seen)
+          current_line++;
+        n_seen = true;
+      }
+    else if (c == '\r')
+      {
+        current_line++;
+        r_seen = true;
+      }
+
+    line [ length ] = current_line;
+
+    length++;
+  }
+
+  /**
+   * Return char at the given positon.
+   */
+  public char charAt(int i)
+  {
+    return chr [ i ];
+  }
+
+  /**
+   * Delete the range
+   * @param from Start position, inclusive.
+   * @param to End position, exclusive.
+   */
+  public void delete(int from, int to)
+  {
+    int len = to - from;
+    if (len < 1)
+      throw new AssertionError("Deleting " + from + " till " + to);
+
+    int tail = length - to;
+
+    System.arraycopy(chr, to, chr, from, tail);
+    System.arraycopy(position, to, position, from, tail);
+    System.arraycopy(line, to, line, from, tail);
+    length = length - len;
+  }
+
+  /**
+   * Double the buffer size.
+   */
+  public void expand()
+  {
+    int nSize = 2 * chr.length;
+
+    char[] nchr = new char[ nSize ];
+    int[] nposition = new int[ nSize ];
+    int[] nline = new int[ nSize ];
+
+    System.arraycopy(chr, 0, nchr, 0, chr.length);
+    System.arraycopy(position, 0, nposition, 0, position.length);
+    System.arraycopy(line, 0, nline, 0, line.length);
+
+    chr = nchr;
+    position = nposition;
+    line = nline;
+  }
+
+  /**
+   * Return length of the occupied part of the buffer.
+   */
+  public int length()
+  {
+    return length;
+  }
+
+  /**
+   * Prepare for parsing the new document.
+   */
+  public void reset()
+  {
+    setLength(0);
+    r_seen = n_seen = false;
+  }
+
+  public String toString()
+  {
+    return new String(chr, 0, length);
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/support/low/Constants.java b/libjava/gnu/javax/swing/text/html/parser/support/low/Constants.java
new file mode 100755 (executable)
index 0000000..367dd03
--- /dev/null
@@ -0,0 +1,422 @@
+/* Constants.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.support.low;
+
+import java.util.BitSet;
+
+/**
+ * The parser constants and operations, directly related to the parser
+ * constants.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class Constants
+{
+  /* Single character tokens are reflected into they ASCII codes. */
+
+  /**
+   * Start of HTML token.
+   */
+  public static final int BEGIN = '<';
+
+  /**
+   * End of HTML token.
+   */
+  public static final int END = '>';
+
+  /**
+   * Exclamation (indicates SGML or comment).
+   */
+  public static final int EXCLAMATION = '!';
+
+  /**
+   * Slash (indicates closing tag).
+   */
+  public static final int SLASH = '/';
+
+  /**
+   * Equals sign.
+   */
+  public static final int EQ = '=';
+
+  /**
+   * Quoting sign.
+   */
+  public static final int AP = '\'';
+
+  /**
+   * Quoting sign.
+   */
+  public static final int QUOT = '"';
+
+  /* The numbers of other tokens start outside the ascii space. */
+  /* String tokens */
+
+  /**
+   * Double dash (--)
+   */
+  public static final int DOUBLE_DASH = 1000;
+
+  /**
+   * The STYLE tag (needs special handling).
+   */
+  public static final int STYLE = 1001;
+
+  /**
+   * The SCRIPT tag (needs special handling).
+   */
+  public static final int SCRIPT = 1002;
+
+  /* Pattern tokens */
+
+  /**
+   * HTML whitespace.
+   */
+  public static final int WS = 1003;
+
+  /**
+   * Named or numeric entity,
+   */
+  public static final int ENTITY = 1004;
+
+  /**
+   * Sequence of valid name characters (can start from digit).
+   */
+  public static final int NUMTOKEN = 1005;
+
+  /* Complex tokens */
+
+  /**
+   * Comment opening sequence.
+   */
+  public static final pattern COMMENT_OPEN =
+    new pattern(new node[]
+                {
+                  new node(BEGIN), new node(WS, true), new node(EXCLAMATION),
+                  new node(WS, true), new node(DOUBLE_DASH),
+                }
+               );
+
+  /**
+   * Comment closing sequence
+   */
+  public static final pattern COMMENT_END =
+    new pattern(new node[]
+                {
+                  new node(DOUBLE_DASH), new node(WS, true), new node(END)
+                }
+               );
+
+  /**
+   * Special case ---> (also is treated as end of comment).
+   */
+  public static final pattern COMMENT_TRIPLEDASH_END =
+    new pattern(new node[]
+                {
+                  new node(DOUBLE_DASH), new node(NUMTOKEN), new node(END)
+                }
+               );
+
+  /**
+   * STYLE element heading pattern.
+   */
+  public static final pattern STYLE_OPEN =
+    new pattern(new node[] { new node(BEGIN), new node(WS, true), new node(STYLE) });
+
+  /**
+   * SCRIPT element heading pattern.
+   */
+  public static final pattern SCRIPT_OPEN =
+    new pattern(new node[] { new node(BEGIN), new node(WS, true), new node(SCRIPT) });
+
+  /**
+   * SGML element heading pattern.
+   */
+  public static final pattern SGML =
+    new pattern(new node[]
+                {
+                  new node(BEGIN), new node(WS, true), new node(EXCLAMATION)
+                }
+               );
+
+  /**
+   * SCRIPT element closing pattern.
+   */
+  public static final pattern SCRIPT_CLOSE =
+    new pattern(new node[]
+                {
+                  new node(BEGIN), new node(WS, true), new node(SLASH),
+                  new node(WS, true), new node(SCRIPT), new node(WS, true),
+                  new node(END)
+                }
+               );
+
+  /**
+   * STYLE element closing pattern.
+   */
+  public static final pattern STYLE_CLOSE =
+    new pattern(new node[]
+                {
+                  new node(BEGIN), new node(WS, true), new node(SLASH),
+                  new node(WS, true), new node(STYLE), new node(WS, true),
+                  new node(END)
+                }
+               );
+
+  /**
+   * Ordinary HTML tag heading pattern.
+   */
+  public static final pattern TAG =
+    new pattern(new node[]
+                {
+                  new node(BEGIN), new node(WS, true), new node(SLASH, true),
+                  new node(WS, true), new node(NUMTOKEN)
+                }
+               );
+
+  /* Special tokens */
+
+  /**
+   * All other tokens.
+   */
+  public static final int OTHER = 1999;
+
+  /**
+   * The UNICODE "end of text" control code
+   */
+  static final char ETX = 3;
+
+  /**
+   * End of file.
+   */
+  public static final int EOF = ETX;
+
+  /* Character categories */
+
+  /**
+   * All single char tokens.
+   */
+  public static final BitSet bSINGLE_CHAR_TOKEN = new BitSet();
+
+  /**
+   * Non letters and non numbers, allowed in HTML names.
+   */
+  public static final BitSet bSPECIAL = new BitSet();
+
+  /**
+   * All letters, used in HTML names.
+   */
+  public static final BitSet bLETTER = new BitSet();
+
+  /**
+   * Digits.
+   */
+  public static final BitSet bDIGIT = new BitSet();
+
+  /**
+   * Both line breaks.
+   */
+  public static final BitSet bLINEBREAK = new BitSet();
+
+  /**
+   * All whitespace.
+   */
+  public static final BitSet bWHITESPACE = new BitSet();
+
+  /**
+   * Both quoting characters.
+   */
+  public static final BitSet bQUOTING = new BitSet();
+
+  /**
+   * Valid name characters.
+   */
+  public static final BitSet bNAME = new BitSet();
+
+  /* Entity subcategories */
+
+  /**
+   * Named entity.
+   */
+  public static final int ENTITY_NAMED = 1;
+
+  /**
+   * Numeric entity.
+   */
+  public static final int ENTITY_NUMERIC = 2;
+
+  static
+  {
+    bQUOTING.set(AP);
+    bQUOTING.set(QUOT);
+
+    bSINGLE_CHAR_TOKEN.set(BEGIN);
+    bSINGLE_CHAR_TOKEN.set(END);
+    bSINGLE_CHAR_TOKEN.set(EXCLAMATION);
+    bSINGLE_CHAR_TOKEN.set(SLASH);
+    bSINGLE_CHAR_TOKEN.set(EQ);
+    bSINGLE_CHAR_TOKEN.set(EOF);
+
+    bSINGLE_CHAR_TOKEN.or(bQUOTING);
+
+    bLINEBREAK.set('\r');
+    bLINEBREAK.set('\n');
+
+    bWHITESPACE.set(' ');
+    bWHITESPACE.set('\t');
+    bWHITESPACE.set(0xC);
+    bWHITESPACE.or(bLINEBREAK);
+
+    for (char i = '0'; i <= '9'; i++)
+      {
+        bDIGIT.set(i);
+      }
+
+    for (char i = 'a'; i <= 'z'; i++)
+      {
+        bLETTER.set(i);
+      }
+
+    for (char i = 'A'; i <= 'Z'; i++)
+      {
+        bLETTER.set(i);
+      }
+
+    bSPECIAL.set('-');
+    bSPECIAL.set('_');
+    bSPECIAL.set(':');
+    bSPECIAL.set('.');
+
+    bNAME.or(bLETTER);
+    bNAME.or(bDIGIT);
+    bNAME.or(bSPECIAL);
+  }
+
+  /**
+   * Verifies if one of the tokens matches the end of string
+   * buffer. The last character in the string buffer is the
+   * "future character", some tokens needs to verify it the
+   * token does not continue "towards the future". If the token
+   * matches, it matches till "pre-last" character in the buffer.
+   * @param b
+   * @return
+   */
+  public Token endMatches(Buffer b)
+  {
+    if (b.length() < 2)
+      return null;
+
+    int p = b.length() - 2;
+
+    if (b.length() > 2 && b.charAt(p) == '-' && b.charAt(p - 1) == '-')
+      return new Token(DOUBLE_DASH, "--", b.getLocation(p - 1, p + 1));
+
+    char last = b.charAt(p);
+
+    if (bSINGLE_CHAR_TOKEN.get(last))
+      return new Token(last, last, b.getLocation(p, p + 1));
+
+    char future = b.charAt(p + 1);
+
+    // Check for numtokens, script and style:
+    if (bNAME.get(last) && !bNAME.get(future))
+      {
+        // Scan the history up:
+        int u = p - 1;
+        while (u >= 0 && bNAME.get(b.charAt(u)))
+          u--;
+        u++;
+
+        char[] token = new char[ p - u + 1 ];
+
+        // Found a numtoken
+        b.getChars(u, p + 1, token, 0);
+
+        // Verify for the built-in tokens:
+        String e = new String(token);
+
+        // found the entity reference
+        if (u > 0 && b.charAt(u - 1) == '&')
+          {
+            // The subsequent semicolon may be the part of the token
+            // as well. The semicolon must be ignored. This must be
+            // handled elsewhere.
+            return new Token(ENTITY, ENTITY_NAMED, "&" + e,
+                             b.getLocation(u - 1, p + 1)
+                            );
+          }
+
+        // found the numeric entity reference
+        if (u > 1 && b.charAt(u - 1) == '#' && b.charAt(u - 2) == '&')
+          {
+            // The subsequent semicolon may be the part of the token
+            // as well. The semicolon must be ignored. This must be
+            // handled elsewhere.
+            return new Token(ENTITY, ENTITY_NUMERIC, "&#" + e,
+                             b.getLocation(u - 2, p + 2)
+                            );
+          }
+
+        Location le = b.getLocation(u, p + 1);
+
+        if (e.equalsIgnoreCase("SCRIPT"))
+          return new Token(SCRIPT, e, le);
+        else if (e.equalsIgnoreCase("STYLE"))
+          return new Token(STYLE, e, le);
+        else
+          return new Token(NUMTOKEN, e, le);
+      }
+
+    // Check for whitespace
+    if (bWHITESPACE.get(last) && !bWHITESPACE.get(future))
+      {
+        // Scan the history up:
+        int u = p - 1;
+        while (u >= 0 && bWHITESPACE.get(b.charAt(u)))
+          u--;
+        u++;
+
+        char[] token = new char[ p - u + 1 ];
+        b.getChars(u, p + 1, token, 0);
+
+        return new Token(WS, new String(token), b.getLocation(u, p + 1));
+      }
+
+    return null;
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/support/low/Location.java b/libjava/gnu/javax/swing/text/html/parser/support/low/Location.java
new file mode 100644 (file)
index 0000000..5a0f204
--- /dev/null
@@ -0,0 +1,83 @@
+/* Location.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.support.low;
+
+/**
+ * Defines a region in the text: its bounding positions and the line number.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class Location
+{
+  /**
+   * The line number, where the token starts.
+   */
+  public int beginLine;
+
+  /**
+   * The line, where the token ends.
+   */
+  public int endLine;
+
+  /**
+   * The absolute token end position in the input stream,
+   * exclusive.
+   */
+  public int endPosition;
+
+  /**
+   * The absolute token start position in the input stream,
+   * inclusive.
+   */
+  public int startPosition;
+
+  public Location()
+  {
+  }
+
+  /**
+   * Special case, used to mark EOF.
+   * @param p The total stream length.
+   */
+  public Location(int p)
+  {
+    startPosition = p;
+    endPosition = p + 1;
+    beginLine = endLine = -1;
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/support/low/ParseException.java b/libjava/gnu/javax/swing/text/html/parser/support/low/ParseException.java
new file mode 100644 (file)
index 0000000..9f1094e
--- /dev/null
@@ -0,0 +1,51 @@
+/* ParseException.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.support.low;
+
+/**
+ * This can be thrown from various parsing methods.
+ */
+public class ParseException
+  extends RuntimeException
+{
+  public ParseException(String s, Throwable cause)
+  {
+    super(s, cause);
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/support/low/Queue.java b/libjava/gnu/javax/swing/text/html/parser/support/low/Queue.java
new file mode 100755 (executable)
index 0000000..30890e4
--- /dev/null
@@ -0,0 +1,142 @@
+/* Queue.java -- a token queue.
+   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.low;
+
+import java.util.Arrays;
+
+/**
+ * A token queue.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class Queue
+{
+  Token[] m = new Token[ 64 ];
+  int a = 0;
+  int b = 0;
+
+  /**
+   * True for the empty queue.
+   */
+  public boolean isEmpty()
+  {
+    return size() == 0;
+  }
+
+  /**
+   *  Add this trace to the end of the queue.
+   */
+  public void add(Token u)
+  {
+    if (a < m.length)
+      {
+        m [ a ] = u;
+        a++;
+      }
+    else // The end of array has been reached.
+      {
+        if (b > 0) // If some elements were deleted from the start of the queue, shift.
+          {
+            int d = b;
+            System.arraycopy(m, b, m, 0, a - b);
+            b = b - d;
+            a = a - d;
+            m [ a ] = u;
+            a++;
+          }
+        else // Enlarge the queue, doubling the size.
+          {
+            int n = m.length * 2;
+            Token[] nm = new Token[ 2 * n ];
+            System.arraycopy(m, 0, nm, 0, m.length);
+            Arrays.fill(m, null);
+
+            nm [ a ] = u;
+            m = nm;
+            a++;
+          }
+      }
+  }
+
+  /**
+   * Clear the queue.
+   */
+  public void clear()
+  {
+    a = b = 0;
+    Arrays.fill(m, null);
+  }
+
+  /**
+   * Read the value ahead. 0 is the value that will be returned with
+   * the following next. This method does not remove values from the
+   * queue. To test if there is enough tokens in the queue, size() must
+   * be checked before calling this method.
+   */
+  public Token get(int ahead)
+  {
+    int p = b + ahead;
+    if (p < a)
+      return m [ p ];
+    else
+      throw new ArrayIndexOutOfBoundsException("Not enough tokens");
+  }
+
+  /**
+   * Read the oldest value from the queue and remove this value from
+   * the queue.
+   */
+  public Token next()
+  {
+    if (a == b)
+      throw new ArrayIndexOutOfBoundsException("queue empty");
+
+    Token r = m [ b ];
+    m [ b ] = null;
+    b++;
+    return r;
+  }
+
+  /**
+   * Size of the queue.
+   */
+  public int size()
+  {
+    return a - b;
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java b/libjava/gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java
new file mode 100755 (executable)
index 0000000..f354bec
--- /dev/null
@@ -0,0 +1,374 @@
+/* ReaderTokenizer.java -- splits the input char sequence int tokens.
+   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.low;
+
+import java.io.IOException;
+import java.io.Reader;
+
+/**
+ * Reader splits the input char sequence into tokens.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class ReaderTokenizer
+  extends Constants
+{
+  /**
+   * This is set to true each time the getNextToken is called.
+   * Used in preventing loops when all patterns refuse to accept
+   * the invalid input.
+   */
+  protected boolean advanced;
+
+  /**
+   * If true, the returned tokens are also placed in the backup
+   * queue.
+   */
+  protected boolean backupMode;
+
+  /**
+   * The buffer to read document into.
+   */
+  Buffer buffer = new Buffer();
+
+  /**
+   * The queue for supporting mark().
+   */
+  Queue backup = new Queue();
+
+  /**
+   * The queue of found tokens.
+   */
+  Queue queue = new Queue();
+
+  /**
+   * The reader to read the document from.
+   */
+  Reader reader;
+
+  /**
+   * Array of char tokens
+   */
+  char[] charTokens;
+
+  /**
+   * Array of string tokens.
+   */
+  String[] stringTokens;
+
+  /**
+   * The current reader position.
+   */
+  int readerPosition = -1;
+
+  /**
+   * Creates a new ReaderTokenizer. The reset(...) method must be
+   * subsequently called to set the reader.
+   */
+  public ReaderTokenizer()
+  {
+  }
+
+  /**
+   * Return the sequence, used to separate lines in the document.
+   * @return one of \n, \r or \r\n.
+   */
+  public String getEndOfLineSequence()
+  {
+    return buffer.getEndOfLineSequence();
+  }
+
+  /**
+   * Get the next token.
+   * @return
+   */
+  public Token getNextToken()
+  {
+    Token rt;
+    advanced = true;
+    try
+      {
+        if (queue.isEmpty())
+          read(1);
+
+        if (!queue.isEmpty())
+          rt = queue.next();
+        else
+          rt = new Token(EOF, new Location(readerPosition));
+      }
+    catch (IOException ex)
+      {
+        throw new ParseException("IO Exception", ex);
+      }
+    if (backupMode)
+      backup.add(rt);
+    return rt;
+  }
+
+  /**
+   * Get a token, lying the given number of tokens
+   * ahead. getToken(0) will return the same token,
+   * what would be returned by getNextToken().
+   * getToken(..) does change the current position
+   * in the input stream. If the end of stream is
+   * reached, the EOF token is always returned.
+   */
+  public Token getTokenAhead(int ahead)
+  {
+    try
+      {
+        read(ahead - queue.size() + 1);
+        return queue.size() >= ahead ? queue.get(ahead) : eofToken();
+      }
+    catch (IOException ex)
+      {
+        throw new ParseException("IO Exception", ex);
+      }
+  }
+
+  /**
+   * Get a token, bein immediatley ahead.
+   * If the end of stream is
+   * reached, the EOF token is always returned.
+   * The method is equivalent calling getTokenAhead(0).
+   */
+  public Token getTokenAhead()
+  {
+    try
+      {
+        if (queue.isEmpty())
+          read(1);
+        if (!queue.isEmpty())
+          return queue.get(0);
+        else
+          return eofToken();
+      }
+    catch (IOException ex)
+      {
+        throw new ParseException("IO Exception", ex);
+      }
+  }
+
+  /**
+   * Invokes the error handler.
+   */
+  public void error(String msg, Token at)
+  {
+    System.out.println(msg);
+  }
+
+  /**
+   * Turns the backup mode on or off.
+   * It is possible to return where the mark(true) was last called
+   * by calling reset().
+   * @param mode True if it is required to save tokens, making
+   * returning to the current point possible.
+   */
+  public void mark(boolean mode)
+  {
+    backup.clear();
+    backupMode = mode;
+  }
+
+  /**
+   * Prepare for new parsing from the given stream.
+   * @param a_reader A reader to parse from.
+   */
+  public void reset(Reader a_reader)
+  {
+    reader = a_reader;
+    readerPosition = -1;
+    buffer.reset();
+    queue.clear();
+  }
+
+  /**
+   * Reset the internal cursor to the position where the mark()
+   * was last time called. Switches the backup mode off.
+   */
+  public void reset()
+  {
+    if (!backupMode)
+      throw new AssertionError("Call mark(true) before using reset()!");
+    backupMode = false;
+
+    // That is now in the queue, will be appended to the end of backup.
+    while (!queue.isEmpty())
+      backup.add(queue.next());
+
+    Queue t = queue;
+    queue = backup;
+    backup = t;
+    backup.clear();
+  }
+
+  /**
+   * Read the given number of the tokens. Add the needed number of EOF
+   * tokens if there are no more data in the stream.
+   * @param amount The number of additional tokens to read.
+   */
+  void read(int numberOfTokens)
+     throws IOException
+  {
+    if (numberOfTokens <= 0)
+      return;
+
+    reading: 
+    for (int i = 0; i < numberOfTokens; i++)
+      readToken();
+  }
+
+  /**
+   * Read next token from the reader, add it to the queue
+   */
+  void readToken()
+          throws IOException
+  {
+    Token t;
+    int ch;
+
+    enlarging: 
+    while (true)
+      {
+        t = tokenMatches();
+        if (t != null)
+          break enlarging;
+        else
+          {
+            ch = reader.read();
+            readerPosition++;
+            if (ch == ETX)
+              ch = ' ';
+            if (ch < 0)
+              {
+                if (buffer.length() == 0)
+                  {
+                    queue.add(eofToken());
+                    return;
+                  }
+                else
+                  {
+                    if (buffer.charAt(buffer.length() - 1) != ETX)
+                      buffer.append(ETX, readerPosition++);
+                    else
+                      {
+                        // Discard terminating ETX
+                        buffer.setLength(buffer.length() - 1);
+                        if (buffer.length() > 0)
+                          {
+                            t = new Token(OTHER, buffer.toString(),
+                                          buffer.getLocation(0, buffer.length())
+                                         );
+                            queue.add(t);
+                            buffer.setLength(0);
+                          }
+                        return;
+                      }
+                  }
+              }
+            else
+              buffer.append((char) ch, readerPosition);
+          }
+      }
+  }
+
+  /**
+   * Check if the end of buffer matches one of the tokens. If it does,
+   * return this token and remove the token sequence from the end of
+   * buffer.
+   * @return The matching token.
+   */
+  Token tokenMatches()
+  {
+    Token rt = endMatches(buffer);
+    if (rt != null) // Remove the matched image
+      {
+        // Consume future character if it was an entity and the future
+        // character is semicolon.
+        if (rt.kind == ENTITY)
+          {
+            if (buffer.charAt(buffer.length() - 1) == ';')
+              buffer.setLength(buffer.length() - rt.getImage().length() - 1);
+            else
+              {
+                error("Missing closing semicolon for entity '" + rt.getImage() +
+                      "'", rt
+                     );
+                consumeBuffer(rt);
+              }
+          }
+        else
+          {
+            consumeBuffer(rt);
+          }
+      }
+
+    // If the buffer is not empty, some sequence does not match any tokens.
+    // Add it to the queue as "OTHER".
+    if (rt != null)
+      {
+        if (buffer.length() > 1)
+          {
+            String rest = buffer.toString();
+            rest = rest.substring(0, rest.length() - 1);
+
+            Token other =
+              new Token(OTHER, rest, buffer.getLocation(0, buffer.length));
+            queue.add(other);
+            consumeBuffer(other);
+          }
+        queue.add(rt);
+      }
+    return rt;
+  }
+
+  private void consumeBuffer(Token rt)
+  {
+    buffer.delete(buffer.length() - rt.getImage().length() - 1,
+                  buffer.length() - 1
+                 );
+  }
+
+  /**
+   * Create EOF token.
+   */
+  private Token eofToken()
+  {
+    return new Token(EOF, "#", new Location(readerPosition));
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/support/low/Token.java b/libjava/gnu/javax/swing/text/html/parser/support/low/Token.java
new file mode 100644 (file)
index 0000000..c298d78
--- /dev/null
@@ -0,0 +1,169 @@
+/* Token.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.support.low;
+
+/**
+ * A token.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class Token
+{
+  /**
+   * The place of this token in the document.
+   */
+  public Location where;
+
+  /**
+   * The additional category of token.
+   */
+  public int category;
+
+  /**
+   * An integer that describes the kind of this token.
+   */
+  public int kind;
+
+  /**
+   * The string image of the token, null if the char image must be used.
+   */
+  private String stringImage;
+
+  /**
+   * The char image of the token.
+   */
+  private char charImage;
+
+  /**
+   * Creates a new token with fields, initialized to the default values.
+   */
+  public Token()
+  {
+  }
+
+  /**
+   * Creates a new token of the given kind.
+   */
+  public Token(int _kind, Location _where)
+  {
+    kind = _kind;
+    where = _where;
+  }
+
+  /**
+   * Creates a new token of the given kind and given single char image.
+   */
+  public Token(int _kind, char _image, Location _where)
+  {
+    kind = _kind;
+    charImage = _image;
+    where = _where;
+  }
+
+  /**
+   * Creates a new token of the given kind and given string image.
+   */
+  public Token(int _kind, String _image, Location _where)
+  {
+    kind = _kind;
+    stringImage = _image;
+    where = _where;
+  }
+
+  /**
+   * Creates a new token of the given kind, category and given string image.
+   */
+  public Token(int _kind, int _category, String _image, Location _where)
+  {
+    kind = _kind;
+    category = _category;
+    stringImage = _image;
+    where = _where;
+  }
+
+  /**
+   * Creates a new token, where location fields are set as for token,
+   * spanning over two provided tokens and any tokens between them.
+   * The image field is initialized to null, the kind field is set to -1.
+   */
+  public Token(Token fromInclusive, Token toInclusive)
+  {
+    where = new Location();
+    where.beginLine = fromInclusive.where.beginLine;
+    where.startPosition = fromInclusive.where.startPosition;
+
+    where.endLine = toInclusive.where.endLine;
+    where.endPosition = toInclusive.where.endPosition;
+  }
+
+  public String getImage()
+  {
+    if (kind == 3)
+      return "#";
+    if (stringImage == null)
+      {
+        if (charImage == 0)
+          return null;
+        stringImage = new String(new char[] { charImage });
+      }
+    return stringImage;
+  }
+
+  /**
+   * Append the token image to the given string buffer.
+   * This may be more effective that buffer.append(this.getImage()).
+   * @param buffer A buffer to append.
+   */
+  public void appendTo(StringBuffer buffer)
+  {
+    if (charImage == 0)
+      buffer.append(getImage());
+    else
+      buffer.append(charImage);
+  }
+
+  /**
+   * Returns the string image or, if null, the bounding positions.
+   */
+  public String toString()
+  {
+    return getImage() != null ? kind + "'" + getImage()
+           : "<line " + where.beginLine + ", abs pos " + where.startPosition +
+           ".." + where.endPosition + ">";
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/support/low/node.java b/libjava/gnu/javax/swing/text/html/parser/support/low/node.java
new file mode 100644 (file)
index 0000000..9811665
--- /dev/null
@@ -0,0 +1,78 @@
+/* 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.support.low;
+
+/**
+ * A text level content model node. The only required unary operations
+ * here are "appears" and "optionally appears" ('?').
+ * <p>@author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)</p>
+ */
+public class node
+{
+  /**
+   * True for node that is optional for the given position.
+   */
+  public boolean optional;
+
+  /**
+   * The kind of the token to match.
+   */
+  public int kind;
+
+  /**
+   * Creates the new node for matching a given kind of the token.
+   * @param kind The kind of the token to match.
+   * @param modifier The modifier (*?+).
+   */
+  public node(int kind, boolean _optional)
+  {
+    this.kind = kind;
+    optional = _optional;
+  }
+
+  /**
+   * Creates the node, indicating that token must match exactluy one time.
+   * @param kind The kind of token to match.
+   */
+  public node(int kind)
+  {
+    this.kind = kind;
+    optional = false;
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/support/low/package.html b/libjava/gnu/javax/swing/text/html/parser/support/low/package.html
new file mode 100644 (file)
index 0000000..a4ae57b
--- /dev/null
@@ -0,0 +1,47 @@
+<!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.support.low</title></head>
+
+<body>
+<p>This package contains classes that are directly used to process
+the text input: adapted stream tokenizer, specialized buffer and text-level content models .</p>
+@author Audrius Meskauskas, Lithuania
+</body>
+</html>
diff --git a/libjava/gnu/javax/swing/text/html/parser/support/low/pattern.java b/libjava/gnu/javax/swing/text/html/parser/support/low/pattern.java
new file mode 100755 (executable)
index 0000000..ac82a20
--- /dev/null
@@ -0,0 +1,105 @@
+/* pattern.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.support.low;
+
+
+/**
+ * The simple pattern, consisting from the sequence of tokens that
+ * may have the unary modifier '?'. Choices and grouping
+ * are not required here.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class pattern
+{
+  /**
+   * The nodes of this pattern.
+   */
+  public final node[] nodes;
+
+  /**
+   * Create a pattern, containing the given list of nodes.
+   * @param a_nodes
+   */
+  public pattern(node[] a_nodes)
+  {
+    nodes = a_nodes;
+  }
+
+  /**
+   * Checks if the pattern can match the tokens in this
+   * tokenizer. Does not change the state of tokenizer.
+   * @param stream The tokenizer to read data from
+   * @return True if the pattern sequence matches the
+   * beginning of the tokenizer content.
+   */
+  public boolean matches(ReaderTokenizer stream)
+  {
+    try
+      {
+        int pt = 0;
+        int pn = 0;
+        Token t;
+        node n;
+
+        while (pn < nodes.length)
+          {
+            n = nodes [ pn ];
+            t = stream.getTokenAhead(pt);
+
+            if (t.kind == n.kind)
+              {
+                pn++;
+                pt++;
+              }
+            else
+              {
+                if (!n.optional)
+                  return false;
+                else
+                  pn++;
+              }
+          }
+        return true;
+      }
+    catch (Exception ex)
+      {
+        throw new ParseException("Exception", ex);
+      }
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/support/package.html b/libjava/gnu/javax/swing/text/html/parser/support/package.html
new file mode 100644 (file)
index 0000000..35071ed
--- /dev/null
@@ -0,0 +1,47 @@
+<!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.support</title></head>
+
+<body>
+<p>This package provides various specialised classes, needed by HTML parser.
+</p>
+@author Audrius Meskauskas, Lithuania
+</body>
+</html>
diff --git a/libjava/gnu/javax/swing/text/html/parser/support/parameterDefaulter.java b/libjava/gnu/javax/swing/text/html/parser/support/parameterDefaulter.java
new file mode 100755 (executable)
index 0000000..4b4878a
--- /dev/null
@@ -0,0 +1,106 @@
+/* parameterDefaulter.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.support;
+
+import gnu.javax.swing.text.html.parser.htmlAttributeSet;
+
+import java.util.Hashtable;
+
+import javax.swing.text.html.parser.AttributeList;
+import javax.swing.text.html.parser.DTD;
+import javax.swing.text.html.parser.Element;
+
+/**
+ * Returns an attribute set, containing default
+ * parameters for the given element. Caches sets of default
+ * parameters.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class parameterDefaulter
+{
+  public final DTD dtd;
+  Hashtable sets = new Hashtable();
+
+  /**
+   * Create a parameterDefaulter that looks for the default attribute
+   * values in the given DTD.
+   * @param a_dtd
+   */
+  public parameterDefaulter(DTD a_dtd)
+  {
+    dtd = a_dtd;
+  }
+
+  /**
+   * Get the default parameter set for the given element.
+   * @param element The element name (case insensitive).
+   * @return the default attrbute set.
+   */
+  public htmlAttributeSet getDefaultParameters(String element)
+  {
+    String key = element.toLowerCase();
+    htmlAttributeSet atts = (htmlAttributeSet) sets.get(key);
+
+    if (atts == null)
+      {
+        htmlAttributeSet set = new htmlAttributeSet();
+        Element e = (Element) dtd.elementHash.get(element.toLowerCase());
+
+        if (e != null)
+          {
+            AttributeList a = e.getAttributes();
+
+            while (a != null)
+              {
+                if (a.value != null)
+                  set.addAttribute(a.name, a.value);
+                a = a.next;
+              }
+          }
+
+        if (set.getAttributeCount() > 0)
+          sets.put(key, set);
+        else
+          sets.put(key, htmlAttributeSet.EMPTY_HTML_ATTRIBUTE_SET);
+
+        atts = set;
+      }
+    return atts;
+  }
+}
diff --git a/libjava/gnu/javax/swing/text/html/parser/support/textPreProcessor.java b/libjava/gnu/javax/swing/text/html/parser/support/textPreProcessor.java
new file mode 100755 (executable)
index 0000000..20af8f6
--- /dev/null
@@ -0,0 +1,193 @@
+/* textPreProcessor.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.support;
+
+import gnu.javax.swing.text.html.parser.support.low.Constants;
+
+/**
+ * Pre - processes text in text parts of the html document.
+ * Not thread - safe.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class textPreProcessor
+{
+  /**
+   * Pre - process non-preformatted text.
+   * \t, \r and \n mutate into spaces, then multiple spaces mutate
+   * into single one, all whitespace around tags is consumed.
+   * The content of the passed buffer is destroyed.
+   * @param text A text to pre-process.
+   */
+  public char[] preprocess(StringBuffer a_text)
+  {
+    if (a_text.length() == 0)
+      return null;
+
+    char[] text = toCharArray(a_text);
+
+    int a = 0;
+    int b = text.length - 1;
+
+    try
+      {
+        while (Constants.bWHITESPACE.get(text [ a ]))
+          a++;
+        while (Constants.bWHITESPACE.get(text [ b ]))
+          b--;
+      }
+    catch (ArrayIndexOutOfBoundsException sx)
+      {
+        // A text fragment, consisting from line breaks only.
+        return null;
+      }
+
+    a_text.setLength(0);
+
+    boolean spacesWere = false;
+    boolean spaceNow;
+    char c;
+
+    chars: 
+    for (int i = a; i <= b; i++)
+      {
+        c = text [ i ];
+        spaceNow = Constants.bWHITESPACE.get(c);
+        if (spacesWere && spaceNow)
+          continue chars;
+        if (spaceNow)
+          a_text.append(' ');
+        else
+          a_text.append(c);
+        spacesWere = spaceNow;
+      }
+
+    if (a_text.length() == text.length)
+      {
+        a_text.getChars(0, a_text.length(), text, 0);
+        return text;
+      }
+    else
+      return toCharArray(a_text);
+  }
+
+  /**
+   * Pre - process pre-formatted text.
+   * Heading/closing spaces and tabs preserved.
+   * ONE  bounding \r, \n or \r\n is removed.
+   * \r or \r\n mutate into \n. Tabs are
+   * preserved.
+   * The content of the passed buffer is destroyed.
+   * @param text
+   * @return
+   */
+  public char[] preprocessPreformatted(StringBuffer a_text)
+  {
+    if (a_text.length() == 0)
+      return null;
+
+    char[] text = toCharArray(a_text);
+
+    int a = 0;
+    int n = text.length - 1;
+    int b = n;
+
+    if (text [ 0 ] == '\n')
+      a++;
+    else
+      {
+        if (text [ 0 ] == '\r')
+          {
+            a++;
+            if (text.length > 1 && text [ 1 ] == '\n')
+              a++;
+          }
+      }
+
+    if (text [ n ] == '\r')
+      b--;
+    else
+      {
+        if (text [ n ] == '\n')
+          {
+            b--;
+            if (n > 0 && text [ n - 1 ] == '\r')
+              b--;
+          }
+      }
+
+    a_text.setLength(0);
+
+    if (a > b)
+      return null;
+
+    char c;
+
+    for (int i = a; i <= b; i++)
+      {
+        c = text [ i ];
+        if (c == '\r')
+          {
+            if (i == b || text [ i + 1 ] != '\n')
+              a_text.append('\n');
+          }
+        else
+          a_text.append(c);
+      }
+
+    if (a_text.length() == text.length)
+      {
+        a_text.getChars(0, a_text.length(), text, 0);
+        return text;
+      }
+    else
+      return toCharArray(a_text);
+  }
+
+  /**
+   * Return array of chars, present in the given buffer.
+   * @param a_text The buffer
+   * @return
+   */
+  private static char[] toCharArray(StringBuffer a_text)
+  {
+    char[] text = new char[ a_text.length() ];
+    a_text.getChars(0, text.length, text, 0);
+    return text;
+  }
+}
index feb7ea7..a23f57d 100644 (file)
@@ -47,6 +47,7 @@ import org.w3c.dom.ls.LSInput;
 import org.w3c.dom.ls.LSOutput;
 import org.w3c.dom.ls.LSParser;
 import org.w3c.dom.ls.LSSerializer;
+import gnu.xml.dom.html2.DomHTMLImpl;
 import gnu.xml.dom.ls.DomLSInput;
 import gnu.xml.dom.ls.DomLSOutput;
 import gnu.xml.dom.ls.DomLSParser;
@@ -150,6 +151,12 @@ public class DomImpl
                 "".equals(version) ||
                 "3.0".equals(version));
       }
+    else if ("html".equals(name) || "xhtml".equals(name))
+      {
+        return (version == null ||
+                "".equals(version) ||
+                "2.0".equals(version));
+      }
 
     // views
     // stylesheets
@@ -199,7 +206,7 @@ public class DomImpl
                                  String rootName,
                                  DocumentType doctype)
   {
-    Document doc = new DomDocument(this);
+    Document doc = createDocument();
     Element root = null;
     
     if (rootName != null)
@@ -223,12 +230,22 @@ public class DomImpl
     return doc;
   }
 
+  protected Document createDocument()
+  {
+    return new DomDocument(this);
+  }
+
   // DOM Level 3
   
   public Object getFeature(String feature, String version)
   {
     if (hasFeature(feature, version))
       {
+        if ("html".equalsIgnoreCase(feature) ||
+            "xhtml".equalsIgnoreCase(feature))
+          {
+            return new DomHTMLImpl();
+          }
         return this;
       }
     return null;
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLAnchorElement.java b/libjava/gnu/xml/dom/html2/DomHTMLAnchorElement.java
new file mode 100644 (file)
index 0000000..625fa6c
--- /dev/null
@@ -0,0 +1,189 @@
+/* DomHTMLAnchorElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLAnchorElement;
+
+/**
+ * An HTML 'A' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLAnchorElement
+  extends DomHTMLElement
+  implements HTMLAnchorElement
+{
+
+  protected DomHTMLAnchorElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getAccessKey()
+  {
+    return getHTMLAttribute("accesskey");
+  }
+
+  public void setAccessKey(String accessKey)
+  {
+    setHTMLAttribute("accesskey", accessKey);
+  }
+  
+  public String getCharset()
+  {
+    return getHTMLAttribute("charset");
+  }
+
+  public void setCharset(String charset)
+  {
+    setHTMLAttribute("charset", charset);
+  }
+  
+  public String getCoords()
+  {
+    return getHTMLAttribute("coords");
+  }
+
+  public void setCoords(String coords)
+  {
+    setHTMLAttribute("coords", coords);
+  }
+  
+  public String getHref()
+  {
+    return getHTMLAttribute("href");
+  }
+
+  public void setHref(String href)
+  {
+    setHTMLAttribute("href", href);
+  }
+  
+  public String getHreflang()
+  {
+    return getHTMLAttribute("hreflang");
+  }
+
+  public void setHreflang(String hreflang)
+  {
+    setHTMLAttribute("hreflang", hreflang);
+  }
+  
+  public String getName()
+  {
+    return getHTMLAttribute("name");
+  }
+
+  public void setName(String name)
+  {
+    setHTMLAttribute("name", name);
+  }
+  
+  public String getRel()
+  {
+    return getHTMLAttribute("rel");
+  }
+
+  public void setRel(String rel)
+  {
+    setHTMLAttribute("rel", rel);
+  }
+  
+  public String getRev()
+  {
+    return getHTMLAttribute("rev");
+  }
+
+  public void setRev(String rev)
+  {
+    setHTMLAttribute("rev", rev);
+  }
+  
+  public String getShape()
+  {
+    return getHTMLAttribute("shape");
+  }
+
+  public void setShape(String shape)
+  {
+    setHTMLAttribute("shape", shape);
+  }
+  
+  public int getTabIndex()
+  {
+    return getIntHTMLAttribute("tabindex");
+  }
+
+  public void setTabIndex(int tabIndex)
+  {
+    setIntHTMLAttribute("tabindex", tabIndex);
+  }
+  
+  public String getTarget()
+  {
+    return getHTMLAttribute("target");
+  }
+
+  public void setTarget(String target)
+  {
+    setHTMLAttribute("target", target);
+  }
+  
+  public String getType()
+  {
+    return getHTMLAttribute("type");
+  }
+
+  public void setType(String type)
+  {
+    setHTMLAttribute("type", type);
+  }
+
+  public void blur()
+  {
+    dispatchUIEvent("blur");
+  }
+
+  public void focus()
+  {
+    dispatchUIEvent("focus");
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLAppletElement.java b/libjava/gnu/xml/dom/html2/DomHTMLAppletElement.java
new file mode 100644 (file)
index 0000000..39bc406
--- /dev/null
@@ -0,0 +1,169 @@
+/* DomHTMLAppletElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLAppletElement;
+
+/**
+ * An HTML 'APPLET' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLAppletElement
+  extends DomHTMLElement
+  implements HTMLAppletElement
+{
+
+  protected DomHTMLAppletElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+  public String getAlt()
+  {
+    return getHTMLAttribute("alt");
+  }
+
+  public void setAlt(String alt)
+  {
+    setHTMLAttribute("alt", alt);
+  }
+  
+  public String getArchive()
+  {
+    return getHTMLAttribute("archive");
+  }
+
+  public void setArchive(String archive)
+  {
+    setHTMLAttribute("archive", archive);
+  }
+  
+  public String getCode()
+  {
+    return getHTMLAttribute("code");
+  }
+
+  public void setCode(String code)
+  {
+    setHTMLAttribute("code", code);
+  }
+  
+  public String getCodeBase()
+  {
+    return getHTMLAttribute("codebase");
+  }
+
+  public void setCodeBase(String codeBase)
+  {
+    setHTMLAttribute("codebase", codeBase);
+  }
+  
+  public String getHeight()
+  {
+    return getHTMLAttribute("height");
+  }
+
+  public void setHeight(String height)
+  {
+    setHTMLAttribute("height", height);
+  }
+  
+  public int getHspace()
+  {
+    return getIntHTMLAttribute("hspace");
+  }
+
+  public void setHspace(int hspace)
+  {
+    setIntHTMLAttribute("hspace", hspace);
+  }
+  
+  public String getName()
+  {
+    return getHTMLAttribute("name");
+  }
+
+  public void setName(String name)
+  {
+    setHTMLAttribute("name", name);
+  }
+  
+  public String getObject()
+  {
+    return getHTMLAttribute("object");
+  }
+
+  public void setObject(String object)
+  {
+    setHTMLAttribute("object", object);
+  }
+  
+  public int getVspace()
+  {
+    return getIntHTMLAttribute("vspace");
+  }
+
+  public void setVspace(int vspace)
+  {
+    setIntHTMLAttribute("vspace", vspace);
+  }
+  
+  public String getWidth()
+  {
+    return getHTMLAttribute("width");
+  }
+
+  public void setWidth(String width)
+  {
+    setHTMLAttribute("width", width);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLAreaElement.java b/libjava/gnu/xml/dom/html2/DomHTMLAreaElement.java
new file mode 100644 (file)
index 0000000..10229fe
--- /dev/null
@@ -0,0 +1,139 @@
+/* DomHTMLAreaElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLAreaElement;
+
+/**
+ * An HTML 'AREA' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLAreaElement
+  extends DomHTMLElement
+  implements HTMLAreaElement
+{
+
+  protected DomHTMLAreaElement(DomHTMLDocument owner, String namespaceURI,
+                               String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getAccessKey()
+  {
+    return getHTMLAttribute("accesskey");
+  }
+
+  public void setAccessKey(String accessKey)
+  {
+    setHTMLAttribute("accesskey", accessKey);
+  }
+  
+  public String getAlt()
+  {
+    return getHTMLAttribute("alt");
+  }
+
+  public void setAlt(String alt)
+  {
+    setHTMLAttribute("alt", alt);
+  }
+  
+  public String getCoords()
+  {
+    return getHTMLAttribute("coords");
+  }
+
+  public void setCoords(String coords)
+  {
+    setHTMLAttribute("coords", coords);
+  }
+  
+  public String getHref()
+  {
+    return getHTMLAttribute("href");
+  }
+
+  public void setHref(String href)
+  {
+    setHTMLAttribute("href", href);
+  }
+  
+  public boolean getNoHref()
+  {
+    return getBooleanHTMLAttribute("nohref");
+  }
+
+  public void setNoHref(boolean nohref)
+  {
+    setBooleanHTMLAttribute("nohref", nohref);
+  }
+  
+  public String getShape()
+  {
+    return getHTMLAttribute("shape");
+  }
+
+  public void setShape(String shape)
+  {
+    setHTMLAttribute("shape", shape);
+  }
+  
+  public int getTabIndex()
+  {
+    return getIntHTMLAttribute("tabindex");
+  }
+
+  public void setTabIndex(int tabIndex)
+  {
+    setIntHTMLAttribute("tabindex", tabIndex);
+  }
+  
+  public String getTarget()
+  {
+    return getHTMLAttribute("target");
+  }
+
+  public void setTarget(String target)
+  {
+    setHTMLAttribute("target", target);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLBRElement.java b/libjava/gnu/xml/dom/html2/DomHTMLBRElement.java
new file mode 100644 (file)
index 0000000..d02ad22
--- /dev/null
@@ -0,0 +1,69 @@
+/* DomHTMLBRElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLBRElement;
+
+/**
+ * An HTML 'BR' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLBRElement
+  extends DomHTMLElement
+  implements HTMLBRElement
+{
+
+  protected DomHTMLBRElement(DomHTMLDocument owner, String namespaceURI,
+                             String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getClear()
+  {
+    return getHTMLAttribute("clear");
+  }
+
+  public void setClear(String clear)
+  {
+    setHTMLAttribute("clear", clear);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLBaseElement.java b/libjava/gnu/xml/dom/html2/DomHTMLBaseElement.java
new file mode 100644 (file)
index 0000000..a7b241a
--- /dev/null
@@ -0,0 +1,79 @@
+/* DomHTMLBaseElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLBaseElement;
+
+/**
+ * An HTML 'BASE' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLBaseElement
+  extends DomHTMLElement
+  implements HTMLBaseElement
+{
+
+  protected DomHTMLBaseElement(DomHTMLDocument owner, String namespaceURI,
+                               String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getHref()
+  {
+    return getHTMLAttribute("href");
+  }
+
+  public void setHref(String href)
+  {
+    setHTMLAttribute("href", href);
+  }
+  
+  public String getTarget()
+  {
+    return getHTMLAttribute("target");
+  }
+
+  public void setTarget(String target)
+  {
+    setHTMLAttribute("target", target);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLBaseFontElement.java b/libjava/gnu/xml/dom/html2/DomHTMLBaseFontElement.java
new file mode 100644 (file)
index 0000000..0d64f44
--- /dev/null
@@ -0,0 +1,89 @@
+/* DomHTMLBaseFontElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLBaseFontElement;
+
+/**
+ * An HTML 'BASEFONT' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLBaseFontElement
+  extends DomHTMLElement
+  implements HTMLBaseFontElement
+{
+
+  protected DomHTMLBaseFontElement(DomHTMLDocument owner, String namespaceURI,
+                                   String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getColor()
+  {
+    return getHTMLAttribute("color");
+  }
+
+  public void setColor(String color)
+  {
+    setHTMLAttribute("color", color);
+  }
+  
+  public String getFace()
+  {
+    return getHTMLAttribute("face");
+  }
+
+  public void setFace(String face)
+  {
+    setHTMLAttribute("face", face);
+  }
+  
+  public int getSize()
+  {
+    return getIntHTMLAttribute("size");
+  }
+
+  public void setSize(int size)
+  {
+    setIntHTMLAttribute("size", size);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLBodyElement.java b/libjava/gnu/xml/dom/html2/DomHTMLBodyElement.java
new file mode 100644 (file)
index 0000000..efcd855
--- /dev/null
@@ -0,0 +1,119 @@
+/* DomHTMLBodyElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLBodyElement;
+
+/**
+ * An HTML 'BODY' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLBodyElement
+  extends DomHTMLElement
+  implements HTMLBodyElement
+{
+
+  protected DomHTMLBodyElement(DomHTMLDocument owner, String namespaceURI,
+                               String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getALink()
+  {
+    return getHTMLAttribute("alink");
+  }
+
+  public void setALink(String alink)
+  {
+    setHTMLAttribute("alink", alink);
+  }
+  
+  public String getBackground()
+  {
+    return getHTMLAttribute("background");
+  }
+
+  public void setBackground(String background)
+  {
+    setHTMLAttribute("background", background);
+  }
+  
+  public String getBgColor()
+  {
+    return getHTMLAttribute("bgcolor");
+  }
+
+  public void setBgColor(String bgcolor)
+  {
+    setHTMLAttribute("bgcolor", bgcolor);
+  }
+  
+  public String getLink()
+  {
+    return getHTMLAttribute("link");
+  }
+
+  public void setLink(String link)
+  {
+    setHTMLAttribute("link", link);
+  }
+  
+  public String getText()
+  {
+    return getHTMLAttribute("text");
+  }
+
+  public void setText(String text)
+  {
+    setHTMLAttribute("text", text);
+  }
+  
+  public String getVLink()
+  {
+    return getHTMLAttribute("vlink");
+  }
+
+  public void setVLink(String vlink)
+  {
+    setHTMLAttribute("vlink", vlink);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLButtonElement.java b/libjava/gnu/xml/dom/html2/DomHTMLButtonElement.java
new file mode 100644 (file)
index 0000000..996750e
--- /dev/null
@@ -0,0 +1,121 @@
+/* DomHTMLButtonElement.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.xml.dom.html2;
+
+import org.w3c.dom.Node;
+import org.w3c.dom.html2.HTMLButtonElement;
+import org.w3c.dom.html2.HTMLFormElement;
+
+/**
+ * An HTML 'BUTTON' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLButtonElement
+  extends DomHTMLElement
+  implements HTMLButtonElement
+{
+
+  protected DomHTMLButtonElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public HTMLFormElement getForm()
+  {
+    return (HTMLFormElement) getParentElement("form");
+  }
+
+  public String getAccessKey()
+  {
+    return getHTMLAttribute("accesskey");
+  }
+
+  public void setAccessKey(String accessKey)
+  {
+    setHTMLAttribute("accesskey", accessKey);
+  }
+  
+  public boolean getDisabled()
+  {
+    return getBooleanHTMLAttribute("disabled");
+  }
+
+  public void setDisabled(boolean disabled)
+  {
+    setBooleanHTMLAttribute("disabled", disabled);
+  }
+  
+  public String getName()
+  {
+    return getHTMLAttribute("name");
+  }
+
+  public void setName(String name)
+  {
+    setHTMLAttribute("name", name);
+  }
+  
+  public int getTabIndex()
+  {
+    return getIntHTMLAttribute("tabindex");
+  }
+
+  public void setTabIndex(int tabIndex)
+  {
+    setIntHTMLAttribute("tabindex", tabIndex);
+  }
+
+  public String getType()
+  {
+    return getHTMLAttribute("type");
+  }
+  
+  public String getValue()
+  {
+    return getHTMLAttribute("value");
+  }
+
+  public void setValue(String value)
+  {
+    setHTMLAttribute("value", value);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLCollection.java b/libjava/gnu/xml/dom/html2/DomHTMLCollection.java
new file mode 100644 (file)
index 0000000..da9d014
--- /dev/null
@@ -0,0 +1,218 @@
+/* DomHTMLCollection.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.xml.dom.html2;
+
+import gnu.xml.dom.DomDOMException;
+import gnu.xml.dom.DomElement;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.html2.HTMLCollection;
+import org.w3c.dom.html2.HTMLOptionsCollection;
+import org.w3c.dom.traversal.NodeFilter;
+import org.w3c.dom.traversal.NodeIterator;
+
+/**
+ * An HTML element collection.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+class DomHTMLCollection
+  implements HTMLCollection, HTMLOptionsCollection, NodeList, NodeFilter
+{
+
+  final DomHTMLDocument doc;
+  final Node root;
+  List nodeNames;
+  List attributeNames;
+  List results;
+
+  DomHTMLCollection(DomHTMLDocument doc, Node root)
+  {
+    this.doc = doc;
+    this.root = root;
+  }
+
+  // -- Node name and attribute filtering --
+
+  void addNodeName(String name)
+  {
+    if (nodeNames == null)
+      {
+        nodeNames = new LinkedList();
+      }
+    nodeNames.add(name);
+  }
+
+  void addAttributeName(String name)
+  {
+    if (attributeNames == null)
+      {
+        attributeNames = new LinkedList();
+      }
+    attributeNames.add(name);
+  }
+
+  public short acceptNode(Node n)
+  {
+    if (n.getNodeType() != Node.ELEMENT_NODE)
+      {
+        return NodeFilter.FILTER_SKIP;
+      }
+    if (nodeNames != null && !acceptName(n.getLocalName()))
+      {
+        return NodeFilter.FILTER_SKIP;
+      }
+    if (attributeNames != null && !acceptAttributes(n.getAttributes()))
+      {
+        return NodeFilter.FILTER_SKIP;
+      }
+    return NodeFilter.FILTER_ACCEPT;
+  }
+
+  private boolean acceptName(String name)
+  {
+    for (Iterator i = nodeNames.iterator(); i.hasNext(); )
+      {
+        String nodeName = (String) i.next();
+        if (nodeName.equalsIgnoreCase(name))
+          {
+            return true;
+          }
+      }
+    return false;
+  }
+
+  private boolean acceptAttributes(NamedNodeMap attrs)
+  {
+    for (Iterator i = attributeNames.iterator(); i.hasNext(); )
+      {
+        String attributeName = (String) i.next();
+        Node attr = getNamedItem(attrs, attributeName);
+        if (attr != null)
+          {
+            // Check that attribute has a non-null value
+            String nodeValue = attr.getNodeValue();
+            if (nodeValue != null && nodeValue.length() > 0)
+              {
+                return true;
+              }
+          }
+      }
+    return false;
+  }
+
+  /**
+   * Case-insensitive version of getNamedItem.
+   */
+  private Node getNamedItem(NamedNodeMap attrs, String name)
+  {
+    int len = attrs.getLength();
+    for (int i = 0; i < len; i++)
+      {
+        Node attr = attrs.item(i);
+        String attrName = attr.getLocalName();
+        if (name.equalsIgnoreCase(attrName))
+          {
+            return attr;
+          }
+      }
+    return null;
+  }
+
+  // -- Perform query --
+
+  void evaluate()
+  {
+    NodeIterator i = doc.createNodeIterator(root, NodeFilter.SHOW_ELEMENT,
+                                            this, true);
+    results = new ArrayList();
+    for (Node node = i.nextNode(); node != null; node = i.nextNode())
+      {
+        results.add(node);
+      }
+  }
+
+  // -- HTMLCollection/NodeList interface --
+
+  public int getLength()
+  {
+    return results.size();
+  }
+
+  public void setLength(int length)
+  {
+    throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
+  }
+
+  public Node item(int index)
+  {
+    return (Node) results.get(index);
+  }
+
+  public Node namedItem(String name)
+  {
+    boolean xhtml = false; // FIXME detect XHTML document
+    for (Iterator i = results.iterator(); i.hasNext(); )
+      {
+        Node node = (Node) i.next();
+        NamedNodeMap attrs = node.getAttributes();
+        Node attr = getNamedItem(attrs, "id");
+        if (name.equals(attr.getTextContent()))
+          {
+            return node;
+          }
+        if (!xhtml)
+          {
+            attr = getNamedItem(attrs, "name");
+            if (name.equals(attr.getTextContent()))
+              {
+                return node;
+              }
+          }
+      }
+    return null;
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLDListElement.java b/libjava/gnu/xml/dom/html2/DomHTMLDListElement.java
new file mode 100644 (file)
index 0000000..790e308
--- /dev/null
@@ -0,0 +1,69 @@
+/* DomHTMLDListElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLDListElement;
+
+/**
+ * An HTML 'DL' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLDListElement
+  extends DomHTMLElement
+  implements HTMLDListElement
+{
+
+  protected DomHTMLDListElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public boolean getCompact()
+  {
+    return getBooleanHTMLAttribute("compact");
+  }
+
+  public void setCompact(boolean compact)
+  {
+    setBooleanHTMLAttribute("compact", compact);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLDirectoryElement.java b/libjava/gnu/xml/dom/html2/DomHTMLDirectoryElement.java
new file mode 100644 (file)
index 0000000..0f71f96
--- /dev/null
@@ -0,0 +1,69 @@
+/* DomHTMLDirectoryElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLDirectoryElement;
+
+/**
+ * An HTML 'DIR' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLDirectoryElement
+  extends DomHTMLElement
+  implements HTMLDirectoryElement
+{
+
+  protected DomHTMLDirectoryElement(DomHTMLDocument owner, String namespaceURI,
+                                    String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public boolean getCompact()
+  {
+    return getBooleanHTMLAttribute("compact");
+  }
+
+  public void setCompact(boolean compact)
+  {
+    setBooleanHTMLAttribute("compact", compact);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLDivElement.java b/libjava/gnu/xml/dom/html2/DomHTMLDivElement.java
new file mode 100644 (file)
index 0000000..a35a5fb
--- /dev/null
@@ -0,0 +1,69 @@
+/* DomHTMLDivElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLDivElement;
+
+/**
+ * An HTML 'DIV' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLDivElement
+  extends DomHTMLElement
+  implements HTMLDivElement
+{
+
+  protected DomHTMLDivElement(DomHTMLDocument owner, String namespaceURI,
+                              String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLDocument.java b/libjava/gnu/xml/dom/html2/DomHTMLDocument.java
new file mode 100644 (file)
index 0000000..1ff0a27
--- /dev/null
@@ -0,0 +1,425 @@
+/* DomHTMLDocument.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.xml.dom.html2;
+
+import gnu.xml.dom.DomDocument;
+import gnu.xml.dom.DomDOMException;
+import java.lang.reflect.Constructor;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.html2.HTMLCollection;
+import org.w3c.dom.html2.HTMLDocument;
+import org.w3c.dom.html2.HTMLElement;
+
+/**
+ * An HTML document.
+ * This is the factory object used to create HTML elements.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLDocument
+  extends DomDocument
+  implements HTMLDocument
+{
+
+  private static final Class[] ELEMENT_PT = new Class[] {
+    DomHTMLDocument.class,
+    String.class,
+    String.class
+  };
+
+  private static Map ELEMENT_CLASSES;
+  static
+  {
+    Map map = new HashMap();
+    map.put("a", DomHTMLAnchorElement.class);
+    map.put("applet", DomHTMLAppletElement.class);
+    map.put("area", DomHTMLAreaElement.class);
+    map.put("base", DomHTMLBaseElement.class);
+    map.put("basefont", DomHTMLBaseFontElement.class);
+    map.put("body", DomHTMLBodyElement.class);
+    map.put("br", DomHTMLBRElement.class);
+    map.put("button", DomHTMLButtonElement.class);
+    map.put("dir", DomHTMLDirectoryElement.class);
+    map.put("div", DomHTMLDivElement.class);
+    map.put("dlist", DomHTMLDListElement.class);
+    map.put("fieldset", DomHTMLFieldSetElement.class);
+    map.put("font", DomHTMLFontElement.class);
+    map.put("form", DomHTMLFormElement.class);
+    map.put("frame", DomHTMLFrameElement.class);
+    map.put("frameset", DomHTMLFrameSetElement.class);
+    map.put("head", DomHTMLHeadElement.class);
+    map.put("h1", DomHTMLHeadingElement.class);
+    map.put("h2", DomHTMLHeadingElement.class);
+    map.put("h3", DomHTMLHeadingElement.class);
+    map.put("h4", DomHTMLHeadingElement.class);
+    map.put("h5", DomHTMLHeadingElement.class);
+    map.put("h6", DomHTMLHeadingElement.class);
+    map.put("html", DomHTMLHtmlElement.class);
+    map.put("iframe", DomHTMLIFrameElement.class);
+    map.put("img", DomHTMLImageElement.class);
+    map.put("input", DomHTMLInputElement.class);
+    map.put("isindex", DomHTMLIsIndexElement.class);
+    map.put("label", DomHTMLLabelElement.class);
+    map.put("legend", DomHTMLLegendElement.class);
+    map.put("li", DomHTMLLIElement.class);
+    map.put("link", DomHTMLLinkElement.class);
+    map.put("map", DomHTMLMapElement.class);
+    map.put("menu", DomHTMLMenuElement.class);
+    map.put("meta", DomHTMLMetaElement.class);
+    map.put("ins", DomHTMLModElement.class);
+    map.put("del", DomHTMLModElement.class);
+    map.put("object", DomHTMLObjectElement.class);
+    map.put("ol", DomHTMLOListElement.class);
+    map.put("optgroup", DomHTMLOptGroupElement.class);
+    map.put("option", DomHTMLOptionElement.class);
+    map.put("p", DomHTMLParagraphElement.class);
+    map.put("param", DomHTMLParamElement.class);
+    map.put("pre", DomHTMLPreElement.class);
+    map.put("q", DomHTMLQuoteElement.class);
+    map.put("blockquote", DomHTMLQuoteElement.class);
+    map.put("script", DomHTMLScriptElement.class);
+    map.put("select", DomHTMLSelectElement.class);
+    map.put("style", DomHTMLStyleElement.class);
+    map.put("caption", DomHTMLTableCaptionElement.class);
+    map.put("th", DomHTMLTableCellElement.class);
+    map.put("td", DomHTMLTableCellElement.class);
+    map.put("col", DomHTMLTableColElement.class);
+    map.put("colgroup", DomHTMLTableColElement.class);
+    map.put("table", DomHTMLTableElement.class);
+    map.put("tr", DomHTMLTableRowElement.class);
+    map.put("thead", DomHTMLTableSectionElement.class);
+    map.put("tfoot", DomHTMLTableSectionElement.class);
+    map.put("tbody", DomHTMLTableSectionElement.class);
+    map.put("textarea", DomHTMLTextAreaElement.class);
+    map.put("title", DomHTMLTitleElement.class);
+    map.put("ul", DomHTMLUListElement.class);
+    ELEMENT_CLASSES = Collections.unmodifiableMap(map);
+  }
+
+  private static Set HTML_NS_URIS;
+  static
+  {
+    Set set = new HashSet();
+    set.add("http://www.w3.org/TR/html4/strict");
+    set.add("http://www.w3.org/TR/html4/loose");
+    set.add("http://www.w3.org/TR/html4/frameset");
+    set.add("http://www.w3.org/1999/xhtml");
+    set.add("http://www.w3.org/TR/xhtml1/strict");
+    set.add("http://www.w3.org/TR/xhtml1/loose");
+    set.add("http://www.w3.org/TR/xhtml1/frameset");
+    HTML_NS_URIS = Collections.unmodifiableSet(set);
+  }
+
+  /**
+   * Convenience constructor.
+   */
+  public DomHTMLDocument()
+  {
+    this(new DomHTMLImpl());
+  }
+
+  /**
+   * Constructor.
+   * This is called by the DOMImplementation.
+   */
+  public DomHTMLDocument(DomHTMLImpl impl)
+  {
+    super(impl);
+  }
+
+  private Node getChildNodeByName(Node parent, String name)
+  {
+    for (Node ctx = parent.getFirstChild(); ctx != null;
+         ctx = ctx.getNextSibling())
+      {
+        if (name.equalsIgnoreCase(ctx.getNodeName()))
+          {
+            return ctx;
+          }
+      }
+    return null;
+  }
+
+  public String getTitle()
+  {
+    Node html = getDocumentElement();
+    if (html != null)
+      {
+        Node head = getChildNodeByName(html, "head");
+        if (head != null)
+          {
+            Node title = getChildNodeByName(head, "title");
+            if (title != null)
+              {
+                return title.getTextContent();
+              }
+          }
+      }
+    return null;
+  }
+
+  public void setTitle(String title)
+  {
+    Node html = getDocumentElement();
+    if (html == null)
+      {
+        html = createElement("html");
+        appendChild(html);
+      }
+    Node head = getChildNodeByName(html, "head");
+    if (head == null)
+      {
+        head = createElement("head");
+        Node first = html.getFirstChild();
+        if (first != null)
+          {
+            html.insertBefore(first, head);
+          }
+        else
+          {
+            html.appendChild(head);
+          }
+      }
+    Node titleNode = getChildNodeByName(head, "title");
+    if (titleNode == null)
+      {
+        titleNode = createElement("title");
+        Node first = head.getFirstChild();
+        if (first != null)
+          {
+            head.insertBefore(first, titleNode);
+          }
+        else
+          {
+            head.appendChild(titleNode);
+          }
+      }
+    titleNode.setTextContent(title);
+  }
+
+  public String getReferrer()
+  {
+    // TODO getReferrer
+    return null;
+  }
+
+  public String getDomain()
+  {
+    try
+      {
+        URL url = new URL(getDocumentURI());
+        return url.getHost();
+      }
+    catch (MalformedURLException e)
+      {
+        return null;
+      }
+  }
+
+  public String getURL()
+  {
+    return getDocumentURI();
+  }
+
+  public HTMLElement getBody()
+  {
+    Node html = getDocumentElement();
+    if (html != null)
+      {
+        Node body = getChildNodeByName(html, "body");
+        if (body == null)
+          {
+            body = getChildNodeByName(html, "frameset");
+          }
+        return (HTMLElement) body;
+      }
+    return null;
+  }
+
+  public void setBody(HTMLElement body)
+  {
+    Node html = getDocumentElement();
+    if (html == null)
+      {
+        html = createElement("html");
+        appendChild(html);
+      }
+    Node ref = getBody();
+    if (ref == null)
+      {
+        html.appendChild(body);
+      }
+    else
+      {
+        html.replaceChild(body, ref);
+      }
+  }
+
+  public HTMLCollection getImages()
+  {
+    DomHTMLCollection ret = new DomHTMLCollection(this, this);
+    ret.addNodeName("img");
+    ret.evaluate();
+    return ret;
+  }
+
+  public HTMLCollection getApplets()
+  {
+    DomHTMLCollection ret = new DomHTMLCollection(this, this);
+    ret.addNodeName("object");
+    ret.addNodeName("applet");
+    ret.evaluate();
+    return ret;
+  }
+
+  public HTMLCollection getLinks()
+  {
+    DomHTMLCollection ret = new DomHTMLCollection(this, this);
+    ret.addNodeName("area");
+    ret.addNodeName("a");
+    ret.evaluate();
+    return ret;
+  }
+
+  public HTMLCollection getForms()
+  {
+    DomHTMLCollection ret = new DomHTMLCollection(this, this);
+    ret.addNodeName("form");
+    ret.evaluate();
+    return ret;
+  }
+
+  public HTMLCollection getAnchors()
+  {
+    DomHTMLCollection ret = new DomHTMLCollection(this, this);
+    ret.addNodeName("a");
+    ret.addAttributeName("name");
+    ret.evaluate();
+    return ret;
+  }
+
+  public String getCookie()
+  {
+    // TODO getCookie
+    return null;
+  }
+
+  public void setCookie(String cookie)
+  {
+    // TODO setCookie
+  }
+
+  public void open()
+  {
+    // TODO open
+  }
+
+  public void close()
+  {
+    // TODO close
+  }
+
+  public void write(String text)
+  {
+    // TODO write
+  }
+
+  public void writeln(String text)
+  {
+    // TODO write
+  }
+
+  public NodeList getElementsByName(String name)
+  {
+    DomHTMLCollection ret = new DomHTMLCollection(this, this);
+    ret.addNodeName(name);
+    ret.evaluate();
+    return ret;
+    // TODO xhtml: return only form controls (?)
+  }
+
+  public Element createElement(String tagName)
+  {
+    return createElementNS(null, tagName);
+  }
+
+  public Element createElementNS(String uri, String qName)
+  {
+    /* If a non-HTML element, use the default implementation. */
+    if (uri != null && !HTML_NS_URIS.contains(uri))
+      {
+        return super.createElementNS(uri, qName);
+      }
+    String localName = qName.toLowerCase();
+    int ci = qName.indexOf(':');
+    if (ci != -1)
+      {
+        localName = qName.substring(ci + 1);
+      }
+    Class t = (Class) ELEMENT_CLASSES.get(localName);
+    /* If a non-HTML element, use the default implementation. */
+    if (t == null)
+      {
+        return super.createElementNS(uri, qName);
+      }
+    try
+      {
+        Constructor c = t.getDeclaredConstructor(ELEMENT_PT);
+        Object[] args = new Object[] { this, uri, qName };
+        return (Element) c.newInstance(args);
+      }
+    catch (Exception e)
+      {
+        DOMException e2 = new DomDOMException(DOMException.TYPE_MISMATCH_ERR);
+        e2.initCause(e);
+        throw e2;
+      }
+  }
+
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLElement.java b/libjava/gnu/xml/dom/html2/DomHTMLElement.java
new file mode 100644 (file)
index 0000000..b2952e8
--- /dev/null
@@ -0,0 +1,269 @@
+/* DomHTMLElement.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.xml.dom.html2;
+
+import gnu.xml.dom.DomDOMException;
+import gnu.xml.dom.DomElement;
+import gnu.xml.dom.DomEvent;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.events.UIEvent;
+import org.w3c.dom.html2.HTMLElement;
+
+/**
+ * Abstract implementation of an HTML element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public abstract class DomHTMLElement
+  extends DomElement
+  implements HTMLElement
+{
+
+  protected DomHTMLElement(DomHTMLDocument owner, String namespaceURI,
+                           String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  /**
+   * Returns the value of the specified attribute.
+   * The attribute name is case insensitive.
+   */
+  protected String getHTMLAttribute(String name)
+  {
+    if (hasAttributes())
+      {
+        NamedNodeMap attrs = getAttributes();
+        int len = attrs.getLength();
+        for (int i = 0; i < len; i++)
+          {
+            Node attr = attrs.item(i);
+            String attrName = attr.getLocalName();
+            if (attrName.equalsIgnoreCase(name))
+              {
+                return attr.getNodeValue();
+              }
+          }
+      }
+    return "";
+  }
+
+  protected int getIntHTMLAttribute(String name)
+  {
+    String value = getHTMLAttribute(name);
+    if (value == null)
+      {
+        return -1;
+      }
+    try
+      {
+        return Integer.parseInt(value);
+      }
+    catch (NumberFormatException e)
+      {
+        return -1;
+      }
+  }
+
+  protected boolean getBooleanHTMLAttribute(String name)
+  {
+    String value = getHTMLAttribute(name);
+    return value != null;
+  }
+
+  /**
+   * Sets the value of the specified attribute.
+   * The attribute name is case insensitive.
+   */
+  protected void setHTMLAttribute(String name, String value)
+  {
+    Node attr;
+    NamedNodeMap attrs = getAttributes();
+    int len = attrs.getLength();
+    for (int i = 0; i < len; i++)
+      {
+        attr = attrs.item(i);
+        String attrName = attr.getLocalName();
+        if (attrName.equalsIgnoreCase(name))
+          {
+            if (value != null)
+              {
+                attr.setNodeValue(value);
+              }
+            else
+              {
+                attrs.removeNamedItem(attr.getNodeName());
+              }
+            return;
+          }
+      }
+    if (value != null)
+      {
+        // Create a new attribute
+        DomHTMLDocument doc = (DomHTMLDocument) getOwnerDocument();
+        // XXX namespace URI for attribute?
+        attr = doc.createAttribute(name);
+        attr.setNodeValue(value);
+      }
+  }
+
+  protected void setIntHTMLAttribute(String name, int value)
+  {
+    setHTMLAttribute(name, Integer.toString(value));
+  }
+
+  protected void setBooleanHTMLAttribute(String name, boolean value)
+  {
+    setHTMLAttribute(name, value ? name : null);
+  }
+
+  /**
+   * Returns the first parent element with the specified name.
+   */
+  protected Node getParentElement(String name)
+  {
+    for (Node parent = getParentNode(); parent != null;
+         parent = parent.getParentNode())
+      {
+        if (name.equalsIgnoreCase(parent.getLocalName()))
+          {
+            return parent;
+          }
+      }
+    return null;
+  }
+
+  /**
+   * Returns the first child element with the specified name.
+   */
+  protected Node getChildElement(String name)
+  {
+    for (Node child = getFirstChild(); child != null;
+         child = child.getNextSibling())
+      {
+        if (name.equalsIgnoreCase(child.getLocalName()))
+          {
+            return child;
+          }
+      }
+    return null;
+  }
+
+  /**
+   * Returns the index of this element among elements of the same name,
+   * relative to its parent.
+   */
+  protected int getIndex()
+  {
+    int index = 0;
+    Node parent = getParentNode();
+    if (parent != null)
+      {
+        for (Node ctx = parent.getFirstChild(); ctx != null;
+             ctx = ctx.getNextSibling())
+          {
+            if (ctx == this)
+              {
+                return index;
+              }
+            index++;
+          }
+      }
+    throw new DomDOMException(DOMException.NOT_FOUND_ERR);
+  }
+
+  protected void dispatchUIEvent(String name)
+  {
+    UIEvent event = new DomEvent.DomUIEvent(name);
+    dispatchEvent(event);
+  }
+
+  public String getId()
+  {
+    return getHTMLAttribute("id");
+  }
+
+  public void setId(String id)
+  {
+    setHTMLAttribute("id", id);
+  }
+  
+  public String getTitle()
+  {
+    return getHTMLAttribute("title");
+  }
+
+  public void setTitle(String title)
+  {
+    setHTMLAttribute("title", title);
+  }
+  
+  public String getLang()
+  {
+    return getHTMLAttribute("lang");
+  }
+
+  public void setLang(String lang)
+  {
+    setHTMLAttribute("lang", lang);
+  }
+  
+  public String getDir()
+  {
+    return getHTMLAttribute("dir");
+  }
+
+  public void setDir(String dir)
+  {
+    setHTMLAttribute("dir", dir);
+  }
+  
+  public String getClassName()
+  {
+    return getHTMLAttribute("class");
+  }
+
+  public void setClassName(String className)
+  {
+    setHTMLAttribute("class", className);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLFieldSetElement.java b/libjava/gnu/xml/dom/html2/DomHTMLFieldSetElement.java
new file mode 100644 (file)
index 0000000..2e49fe4
--- /dev/null
@@ -0,0 +1,65 @@
+/* DomHTMLFieldSetElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLFieldSetElement;
+import org.w3c.dom.html2.HTMLFormElement;
+
+/**
+ * An HTML 'FIELDSET' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLFieldSetElement
+  extends DomHTMLElement
+  implements HTMLFieldSetElement
+{
+
+  protected DomHTMLFieldSetElement(DomHTMLDocument owner, String namespaceURI,
+                                   String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public HTMLFormElement getForm()
+  {
+    return (HTMLFormElement) getParentElement("form");
+  }
+
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLFontElement.java b/libjava/gnu/xml/dom/html2/DomHTMLFontElement.java
new file mode 100644 (file)
index 0000000..3fd1d98
--- /dev/null
@@ -0,0 +1,89 @@
+/* DomHTMLFontElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLFontElement;
+
+/**
+ * An HTML 'FONT' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLFontElement
+  extends DomHTMLElement
+  implements HTMLFontElement
+{
+
+  protected DomHTMLFontElement(DomHTMLDocument owner, String namespaceURI,
+                               String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getColor()
+  {
+    return getHTMLAttribute("color");
+  }
+
+  public void setColor(String color)
+  {
+    setHTMLAttribute("color", color);
+  }
+  
+  public String getFace()
+  {
+    return getHTMLAttribute("face");
+  }
+
+  public void setFace(String face)
+  {
+    setHTMLAttribute("face", face);
+  }
+  
+  public String getSize()
+  {
+    return getHTMLAttribute("size");
+  }
+
+  public void setSize(String size)
+  {
+    setHTMLAttribute("size", size);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLFormElement.java b/libjava/gnu/xml/dom/html2/DomHTMLFormElement.java
new file mode 100644 (file)
index 0000000..0785cc9
--- /dev/null
@@ -0,0 +1,150 @@
+/* DomHTMLFormElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLCollection;
+import org.w3c.dom.html2.HTMLFormElement;
+
+/**
+ * An HTML 'FORM' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLFormElement
+  extends DomHTMLElement
+  implements HTMLFormElement
+{
+
+  protected DomHTMLFormElement(DomHTMLDocument owner, String namespaceURI,
+                               String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public HTMLCollection getElements()
+  {
+    DomHTMLCollection ret =
+      new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
+    ret.addNodeName("input");
+    ret.addNodeName("button");
+    ret.addNodeName("select");
+    ret.addNodeName("textarea");
+    ret.addNodeName("isindex");
+    ret.addNodeName("label");
+    ret.addNodeName("option");
+    ret.evaluate();
+    return ret;
+  }
+
+  public int getLength()
+  {
+    return getElements().getLength();
+  }
+
+  public String getName()
+  {
+    return getHTMLAttribute("name");
+  }
+
+  public void setName(String name)
+  {
+    setHTMLAttribute("name", name);
+  }
+  
+  public String getAcceptCharset()
+  {
+    return getHTMLAttribute("accept-charset");
+  }
+
+  public void setAcceptCharset(String acceptCharset)
+  {
+    setHTMLAttribute("accept-charset", acceptCharset);
+  }
+  
+  public String getAction()
+  {
+    return getHTMLAttribute("action");
+  }
+
+  public void setAction(String action)
+  {
+    setHTMLAttribute("action", action);
+  }
+  
+  public String getEnctype()
+  {
+    return getHTMLAttribute("enctype");
+  }
+
+  public void setEnctype(String enctype)
+  {
+    setHTMLAttribute("enctype", enctype);
+  }
+  
+  public String getMethod()
+  {
+    return getHTMLAttribute("method");
+  }
+
+  public void setMethod(String method)
+  {
+    setHTMLAttribute("method", method);
+  }
+  
+  public String getTarget()
+  {
+    return getHTMLAttribute("target");
+  }
+
+  public void setTarget(String target)
+  {
+    setHTMLAttribute("target", target);
+  }
+
+  public void submit()
+  {
+    dispatchUIEvent("submit");
+  }
+
+  public void reset()
+  {
+    dispatchUIEvent("reset");
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLFrameElement.java b/libjava/gnu/xml/dom/html2/DomHTMLFrameElement.java
new file mode 100644 (file)
index 0000000..db3cbfe
--- /dev/null
@@ -0,0 +1,146 @@
+/* DomHTMLFrameElement.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.xml.dom.html2;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.html2.HTMLFrameElement;
+
+/**
+ * An HTML 'FRAME' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLFrameElement
+  extends DomHTMLElement
+  implements HTMLFrameElement
+{
+
+  protected DomHTMLFrameElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getFrameBorder()
+  {
+    return getHTMLAttribute("frameborder");
+  }
+
+  public void setFrameBorder(String frameBorder)
+  {
+    setHTMLAttribute("frameborder", frameBorder);
+  }
+  
+  public String getLongDesc()
+  {
+    return getHTMLAttribute("longdesc");
+  }
+
+  public void setLongDesc(String longDesc)
+  {
+    setHTMLAttribute("longdesc", longDesc);
+  }
+  
+  public String getMarginHeight()
+  {
+    return getHTMLAttribute("marginheight");
+  }
+
+  public void setMarginHeight(String marginHeight)
+  {
+    setHTMLAttribute("marginheight", marginHeight);
+  }
+  
+  public String getMarginWidth()
+  {
+    return getHTMLAttribute("marginwidth");
+  }
+
+  public void setMarginWidth(String marginWidth)
+  {
+    setHTMLAttribute("marginwidth", marginWidth);
+  }
+  
+  public String getName()
+  {
+    return getHTMLAttribute("name");
+  }
+
+  public void setName(String name)
+  {
+    setHTMLAttribute("name", name);
+  }
+  
+  public boolean getNoResize()
+  {
+    return getBooleanHTMLAttribute("noresize");
+  }
+
+  public void setNoResize(boolean noResize)
+  {
+    setBooleanHTMLAttribute("noresize", noResize);
+  }
+  
+  public String getScrolling()
+  {
+    return getHTMLAttribute("scrolling");
+  }
+
+  public void setScrolling(String scrolling)
+  {
+    setHTMLAttribute("scrolling", scrolling);
+  }
+  
+  public String getSrc()
+  {
+    return getHTMLAttribute("src");
+  }
+
+  public void setSrc(String src)
+  {
+    setHTMLAttribute("src", src);
+  }
+
+  public Document getContentDocument()
+  {
+    // TODO getContentDocument
+    return null;
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLFrameSetElement.java b/libjava/gnu/xml/dom/html2/DomHTMLFrameSetElement.java
new file mode 100644 (file)
index 0000000..8e5eb33
--- /dev/null
@@ -0,0 +1,79 @@
+/* DomHTMLFrameSetElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLFrameSetElement;
+
+/**
+ * An HTML 'FRAMESET' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLFrameSetElement
+  extends DomHTMLElement
+  implements HTMLFrameSetElement
+{
+
+  protected DomHTMLFrameSetElement(DomHTMLDocument owner, String namespaceURI,
+                                   String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getCols()
+  {
+    return getHTMLAttribute("cols");
+  }
+
+  public void setCols(String cols)
+  {
+    setHTMLAttribute("cols", cols);
+  }
+  
+  public String getRows()
+  {
+    return getHTMLAttribute("rows");
+  }
+
+  public void setRows(String rows)
+  {
+    setHTMLAttribute("rows", rows);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLHRElement.java b/libjava/gnu/xml/dom/html2/DomHTMLHRElement.java
new file mode 100644 (file)
index 0000000..850907b
--- /dev/null
@@ -0,0 +1,99 @@
+/* DomHTMLHRElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLHRElement;
+
+/**
+ * An HTML 'HR' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLHRElement
+  extends DomHTMLElement
+  implements HTMLHRElement
+{
+
+  protected DomHTMLHRElement(DomHTMLDocument owner, String namespaceURI,
+                             String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+  public boolean getNoShade()
+  {
+    return getBooleanHTMLAttribute("noshade");
+  }
+
+  public void setNoShade(boolean noShade)
+  {
+    setBooleanHTMLAttribute("noshade", noShade);
+  }
+  
+  public String getSize()
+  {
+    return getHTMLAttribute("size");
+  }
+
+  public void setSize(String size)
+  {
+    setHTMLAttribute("size", size);
+  }
+  
+  public String getWidth()
+  {
+    return getHTMLAttribute("width");
+  }
+
+  public void setWidth(String width)
+  {
+    setHTMLAttribute("width", width);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLHeadElement.java b/libjava/gnu/xml/dom/html2/DomHTMLHeadElement.java
new file mode 100644 (file)
index 0000000..d6072a0
--- /dev/null
@@ -0,0 +1,69 @@
+/* DomHTMLHeadElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLHeadElement;
+
+/**
+ * An HTML 'HEAD' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLHeadElement
+  extends DomHTMLElement
+  implements HTMLHeadElement
+{
+
+  protected DomHTMLHeadElement(DomHTMLDocument owner, String namespaceURI,
+                               String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getProfile()
+  {
+    return getHTMLAttribute("profile");
+  }
+
+  public void setProfile(String profile)
+  {
+    setHTMLAttribute("profile", profile);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLHeadingElement.java b/libjava/gnu/xml/dom/html2/DomHTMLHeadingElement.java
new file mode 100644 (file)
index 0000000..a336e31
--- /dev/null
@@ -0,0 +1,69 @@
+/* DomHTMLHeadingElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLHeadingElement;
+
+/**
+ * An HTML 'H1', 'H2', 'H3', 'H4', 'H5', or 'H6' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLHeadingElement
+  extends DomHTMLElement
+  implements HTMLHeadingElement
+{
+
+  protected DomHTMLHeadingElement(DomHTMLDocument owner, String namespaceURI,
+                                  String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLHtmlElement.java b/libjava/gnu/xml/dom/html2/DomHTMLHtmlElement.java
new file mode 100644 (file)
index 0000000..6a4e195
--- /dev/null
@@ -0,0 +1,69 @@
+/* DomHTMLHtmlElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLHtmlElement;
+
+/**
+ * An HTML 'HTML' top-level element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLHtmlElement
+  extends DomHTMLElement
+  implements HTMLHtmlElement
+{
+
+  protected DomHTMLHtmlElement(DomHTMLDocument owner, String namespaceURI,
+                               String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getVersion()
+  {
+    return getHTMLAttribute("version");
+  }
+
+  public void setVersion(String version)
+  {
+    setHTMLAttribute("version", version);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLIFrameElement.java b/libjava/gnu/xml/dom/html2/DomHTMLIFrameElement.java
new file mode 100644 (file)
index 0000000..def7b96
--- /dev/null
@@ -0,0 +1,166 @@
+/* DomHTMLIFrameElement.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.xml.dom.html2;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.html2.HTMLIFrameElement;
+
+/**
+ * An HTML 'IFRAME' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLIFrameElement
+  extends DomHTMLElement
+  implements HTMLIFrameElement
+{
+
+  protected DomHTMLIFrameElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+  public String getFrameBorder()
+  {
+    return getHTMLAttribute("frameborder");
+  }
+
+  public void setFrameBorder(String frameBorder)
+  {
+    setHTMLAttribute("frameborder", frameBorder);
+  }
+  
+  public String getHeight()
+  {
+    return getHTMLAttribute("height");
+  }
+
+  public void setHeight(String height)
+  {
+    setHTMLAttribute("height", height);
+  }
+  
+  public String getLongDesc()
+  {
+    return getHTMLAttribute("longdesc");
+  }
+
+  public void setLongDesc(String longDesc)
+  {
+    setHTMLAttribute("longdesc", longDesc);
+  }
+  
+  public String getMarginHeight()
+  {
+    return getHTMLAttribute("marginheight");
+  }
+
+  public void setMarginHeight(String marginHeight)
+  {
+    setHTMLAttribute("marginheight", marginHeight);
+  }
+  
+  public String getMarginWidth()
+  {
+    return getHTMLAttribute("marginwidth");
+  }
+
+  public void setMarginWidth(String marginWidth)
+  {
+    setHTMLAttribute("marginwidth", marginWidth);
+  }
+  
+  public String getName()
+  {
+    return getHTMLAttribute("name");
+  }
+
+  public void setName(String name)
+  {
+    setHTMLAttribute("name", name);
+  }
+  
+  public String getScrolling()
+  {
+    return getHTMLAttribute("scrolling");
+  }
+
+  public void setScrolling(String scrolling)
+  {
+    setHTMLAttribute("scrolling", scrolling);
+  }
+  
+  public String getSrc()
+  {
+    return getHTMLAttribute("src");
+  }
+
+  public void setSrc(String src)
+  {
+    setHTMLAttribute("src", src);
+  }
+
+  public String getWidth()
+  {
+    return getHTMLAttribute("width");
+  }
+
+  public void setWidth(String width)
+  {
+    setHTMLAttribute("width", width);
+  }
+  
+  public Document getContentDocument()
+  {
+    // TODO getContentDocument
+    return null;
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLImageElement.java b/libjava/gnu/xml/dom/html2/DomHTMLImageElement.java
new file mode 100644 (file)
index 0000000..7a621a6
--- /dev/null
@@ -0,0 +1,179 @@
+/* DomHTMLImageElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLImageElement;
+
+/**
+ * An HTML 'IMG' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLImageElement
+  extends DomHTMLElement
+  implements HTMLImageElement
+{
+
+  protected DomHTMLImageElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getName()
+  {
+    return getHTMLAttribute("name");
+  }
+
+  public void setName(String name)
+  {
+    setHTMLAttribute("name", name);
+  }
+  
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+  public String getAlt()
+  {
+    return getHTMLAttribute("alt");
+  }
+
+  public void setAlt(String alt)
+  {
+    setHTMLAttribute("alt", alt);
+  }
+  
+  public String getBorder()
+  {
+    return getHTMLAttribute("border");
+  }
+
+  public void setBorder(String border)
+  {
+    setHTMLAttribute("border", border);
+  }
+  
+  public int getHeight()
+  {
+    return getIntHTMLAttribute("height");
+  }
+
+  public void setHeight(int height)
+  {
+    setIntHTMLAttribute("height", height);
+  }
+  
+  public int getHspace()
+  {
+    return getIntHTMLAttribute("hspace");
+  }
+
+  public void setHspace(int hspace)
+  {
+    setIntHTMLAttribute("hspace", hspace);
+  }
+  
+  public boolean getIsMap()
+  {
+    return getBooleanHTMLAttribute("ismap");
+  }
+
+  public void setIsMap(boolean isMap)
+  {
+    setBooleanHTMLAttribute("ismap", isMap);
+  }
+  
+  public String getLongDesc()
+  {
+    return getHTMLAttribute("longdesc");
+  }
+
+  public void setLongDesc(String longDesc)
+  {
+    setHTMLAttribute("longdesc", longDesc);
+  }
+  
+  public String getSrc()
+  {
+    return getHTMLAttribute("src");
+  }
+
+  public void setSrc(String src)
+  {
+    setHTMLAttribute("src", src);
+  }
+
+  public String getUseMap()
+  {
+    return getHTMLAttribute("usemap");
+  }
+
+  public void setUseMap(String useMap)
+  {
+    setHTMLAttribute("usemap", useMap);
+  }
+  
+  public int getVspace()
+  {
+    return getIntHTMLAttribute("vspace");
+  }
+
+  public void setVspace(int vspace)
+  {
+    setIntHTMLAttribute("vspace", vspace);
+  }
+  
+  public int getWidth()
+  {
+    return getIntHTMLAttribute("width");
+  }
+
+  public void setWidth(int width)
+  {
+    setIntHTMLAttribute("width", width);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLImpl.java b/libjava/gnu/xml/dom/html2/DomHTMLImpl.java
new file mode 100644 (file)
index 0000000..6f5538e
--- /dev/null
@@ -0,0 +1,67 @@
+/* DomHTMLImpl.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.xml.dom.html2;
+
+import gnu.xml.dom.DomImpl;
+import org.w3c.dom.Document;
+
+/**
+ * Specialised DOMImplementation for creating HTML documents.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLImpl
+  extends DomImpl
+{
+  
+  protected Document createDocument()
+  {
+    return new DomHTMLDocument(this);
+  }
+
+  public Object getFeature(String feature, String version)
+  {
+    if (hasFeature(feature, version))
+      {
+        return this;
+      }
+    return null;
+  }
+
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLInputElement.java b/libjava/gnu/xml/dom/html2/DomHTMLInputElement.java
new file mode 100644 (file)
index 0000000..787be53
--- /dev/null
@@ -0,0 +1,266 @@
+/* DomHTMLInputElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLFormElement;
+import org.w3c.dom.html2.HTMLInputElement;
+
+/**
+ * An HTML 'INPUT' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLInputElement
+  extends DomHTMLElement
+  implements HTMLInputElement
+{
+
+  protected String value;
+  protected Boolean checked;
+
+  protected DomHTMLInputElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getDefaultValue()
+  {
+    return getHTMLAttribute("value");
+  }
+
+  public void setDefaultValue(String defaultValue)
+  {
+    setHTMLAttribute("value", defaultValue);
+  }
+  
+  public boolean getDefaultChecked()
+  {
+    return getBooleanHTMLAttribute("checked");
+  }
+
+  public void setDefaultChecked(boolean defaultChecked)
+  {
+    setBooleanHTMLAttribute("checked", defaultChecked);
+  }
+
+  public HTMLFormElement getForm()
+  {
+    return (HTMLFormElement) getParentElement("form");
+  }
+  
+  public String getAccept()
+  {
+    return getHTMLAttribute("accept");
+  }
+
+  public void setAccept(String accept)
+  {
+    setHTMLAttribute("accept", accept);
+  }
+  
+  public String getAccessKey()
+  {
+    return getHTMLAttribute("accesskey");
+  }
+
+  public void setAccessKey(String accessKey)
+  {
+    setHTMLAttribute("accesskey", accessKey);
+  }
+  
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+  public String getAlt()
+  {
+    return getHTMLAttribute("alt");
+  }
+
+  public void setAlt(String alt)
+  {
+    setHTMLAttribute("alt", alt);
+  }
+  
+  public boolean getChecked()
+  {
+    if (checked == null)
+      {
+        checked = Boolean.valueOf(getDefaultChecked());
+      }
+    return checked.booleanValue();
+  }
+
+  public void setChecked(boolean checked)
+  {
+    this.checked = Boolean.valueOf(checked);
+  }
+  
+  public boolean getDisabled()
+  {
+    return getBooleanHTMLAttribute("disabled");
+  }
+
+  public void setDisabled(boolean disabled)
+  {
+    setBooleanHTMLAttribute("disabled", disabled);
+  }
+  
+  public int getMaxLength()
+  {
+    return getIntHTMLAttribute("maxLength");
+  }
+
+  public void setMaxLength(int maxLength)
+  {
+    setIntHTMLAttribute("maxLength", maxLength);
+  }
+  
+  public String getName()
+  {
+    return getHTMLAttribute("name");
+  }
+
+  public void setName(String name)
+  {
+    setHTMLAttribute("name", name);
+  }
+  
+  public boolean getReadOnly()
+  {
+    return getBooleanHTMLAttribute("readonly");
+  }
+
+  public void setReadOnly(boolean readOnly)
+  {
+    setBooleanHTMLAttribute("readonly", readOnly);
+  }
+  
+  public int getSize()
+  {
+    return getIntHTMLAttribute("size");
+  }
+
+  public void setSize(int size)
+  {
+    setIntHTMLAttribute("size", size);
+  }
+  
+  public String getSrc()
+  {
+    return getHTMLAttribute("src");
+  }
+
+  public void setSrc(String src)
+  {
+    setHTMLAttribute("src", src);
+  }
+  
+  public int getTabIndex()
+  {
+    return getIntHTMLAttribute("tabindex");
+  }
+
+  public void setTabIndex(int tabIndex)
+  {
+    setIntHTMLAttribute("tabindex", tabIndex);
+  }
+  
+  public String getType()
+  {
+    return getHTMLAttribute("type");
+  }
+
+  public void setType(String type)
+  {
+    setHTMLAttribute("type", type);
+  }
+  
+  public String getUseMap()
+  {
+    return getHTMLAttribute("usemap");
+  }
+
+  public void setUseMap(String useMap)
+  {
+    setHTMLAttribute("usemap", useMap);
+  }
+  
+  public String getValue()
+  {
+    if (value == null)
+      {
+        value = getDefaultValue();
+      }
+    return value;
+  }
+
+  public void setValue(String value)
+  {
+    this.value = value;
+  }
+
+  public void blur()
+  {
+    dispatchUIEvent("blur");
+  }
+
+  public void focus()
+  {
+    dispatchUIEvent("focus");
+  }
+
+  public void select()
+  {
+    dispatchUIEvent("select");
+  }
+
+  public void click()
+  {
+    dispatchUIEvent("click");
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLIsIndexElement.java b/libjava/gnu/xml/dom/html2/DomHTMLIsIndexElement.java
new file mode 100644 (file)
index 0000000..02d5a98
--- /dev/null
@@ -0,0 +1,75 @@
+/* DomHTMLIsIndexElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLFormElement;
+import org.w3c.dom.html2.HTMLIsIndexElement;
+
+/**
+ * An HTML 'ISINDEX' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLIsIndexElement
+  extends DomHTMLElement
+  implements HTMLIsIndexElement
+{
+
+  protected DomHTMLIsIndexElement(DomHTMLDocument owner, String namespaceURI,
+                                  String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public HTMLFormElement getForm()
+  {
+    return (HTMLFormElement) getParentElement("form");
+  }
+
+  public String getPrompt()
+  {
+    return getHTMLAttribute("prompt");
+  }
+
+  public void setPrompt(String prompt)
+  {
+    setHTMLAttribute("prompt", prompt);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLLIElement.java b/libjava/gnu/xml/dom/html2/DomHTMLLIElement.java
new file mode 100644 (file)
index 0000000..ea99ee1
--- /dev/null
@@ -0,0 +1,79 @@
+/* DomHTMLLIElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLLIElement;
+
+/**
+ * An HTML 'LI' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLLIElement
+  extends DomHTMLElement
+  implements HTMLLIElement
+{
+
+  protected DomHTMLLIElement(DomHTMLDocument owner, String namespaceURI,
+                             String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getType()
+  {
+    return getHTMLAttribute("type");
+  }
+
+  public void setType(String type)
+  {
+    setHTMLAttribute("type", type);
+  }
+  
+  public int getValue()
+  {
+    return getIntHTMLAttribute("value");
+  }
+
+  public void setValue(int value)
+  {
+    setIntHTMLAttribute("value", value);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLLabelElement.java b/libjava/gnu/xml/dom/html2/DomHTMLLabelElement.java
new file mode 100644 (file)
index 0000000..0dd2f83
--- /dev/null
@@ -0,0 +1,85 @@
+/* DomHTMLLabelElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLFormElement;
+import org.w3c.dom.html2.HTMLLabelElement;
+
+/**
+ * An HTML 'LABEL' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLLabelElement
+  extends DomHTMLElement
+  implements HTMLLabelElement
+{
+
+  protected DomHTMLLabelElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public HTMLFormElement getForm()
+  {
+    return (HTMLFormElement) getParentElement("form");
+  }
+
+  public String getAccessKey()
+  {
+    return getHTMLAttribute("accesskey");
+  }
+
+  public void setAccessKey(String accessKey)
+  {
+    setHTMLAttribute("accesskey", accessKey);
+  }
+  
+  public String getHtmlFor()
+  {
+    return getHTMLAttribute("for");
+  }
+
+  public void setHtmlFor(String htmlFor)
+  {
+    setHTMLAttribute("for", htmlFor);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLLegendElement.java b/libjava/gnu/xml/dom/html2/DomHTMLLegendElement.java
new file mode 100644 (file)
index 0000000..663e67c
--- /dev/null
@@ -0,0 +1,85 @@
+/* DomHTMLLegendElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLFormElement;
+import org.w3c.dom.html2.HTMLLegendElement;
+
+/**
+ * An HTML 'LEGEND' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLLegendElement
+  extends DomHTMLElement
+  implements HTMLLegendElement
+{
+
+  protected DomHTMLLegendElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public HTMLFormElement getForm()
+  {
+    return (HTMLFormElement) getParentElement("form");
+  }
+
+  public String getAccessKey()
+  {
+    return getHTMLAttribute("accesskey");
+  }
+
+  public void setAccessKey(String accessKey)
+  {
+    setHTMLAttribute("accesskey", accessKey);
+  }
+  
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLLinkElement.java b/libjava/gnu/xml/dom/html2/DomHTMLLinkElement.java
new file mode 100644 (file)
index 0000000..c81486a
--- /dev/null
@@ -0,0 +1,149 @@
+/* DomHTMLLinkElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLLinkElement;
+
+/**
+ * An HTML 'LINK' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLLinkElement
+  extends DomHTMLElement
+  implements HTMLLinkElement
+{
+
+  protected DomHTMLLinkElement(DomHTMLDocument owner, String namespaceURI,
+                               String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public boolean getDisabled()
+  {
+    return getBooleanHTMLAttribute("disabled");
+  }
+
+  public void setDisabled(boolean disabled)
+  {
+    setBooleanHTMLAttribute("disabled", disabled);
+  }
+  
+  public String getCharset()
+  {
+    return getHTMLAttribute("charset");
+  }
+
+  public void setCharset(String charset)
+  {
+    setHTMLAttribute("charset", charset);
+  }
+  
+  public String getHref()
+  {
+    return getHTMLAttribute("href");
+  }
+
+  public void setHref(String href)
+  {
+    setHTMLAttribute("href", href);
+  }
+  
+  public String getHreflang()
+  {
+    return getHTMLAttribute("hreflang");
+  }
+
+  public void setHreflang(String hreflang)
+  {
+    setHTMLAttribute("hreflang", hreflang);
+  }
+  
+  public String getMedia()
+  {
+    return getHTMLAttribute("media");
+  }
+
+  public void setMedia(String media)
+  {
+    setHTMLAttribute("media", media);
+  }
+  
+  public String getRel()
+  {
+    return getHTMLAttribute("rel");
+  }
+
+  public void setRel(String rel)
+  {
+    setHTMLAttribute("rel", rel);
+  }
+  
+  public String getRev()
+  {
+    return getHTMLAttribute("rev");
+  }
+
+  public void setRev(String rev)
+  {
+    setHTMLAttribute("rev", rev);
+  }
+  
+  public String getTarget()
+  {
+    return getHTMLAttribute("target");
+  }
+
+  public void setTarget(String target)
+  {
+    setHTMLAttribute("target", target);
+  }
+  
+  public String getType()
+  {
+    return getHTMLAttribute("type");
+  }
+
+  public void setType(String type)
+  {
+    setHTMLAttribute("type", type);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLMapElement.java b/libjava/gnu/xml/dom/html2/DomHTMLMapElement.java
new file mode 100644 (file)
index 0000000..d078f70
--- /dev/null
@@ -0,0 +1,79 @@
+/* DomHTMLMapElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLCollection;
+import org.w3c.dom.html2.HTMLMapElement;
+
+/**
+ * An HTML 'MAP' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLMapElement
+  extends DomHTMLElement
+  implements HTMLMapElement
+{
+
+  protected DomHTMLMapElement(DomHTMLDocument owner, String namespaceURI,
+                              String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public HTMLCollection getAreas()
+  {
+    DomHTMLCollection ret =
+      new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
+    ret.addNodeName("area");
+    ret.evaluate();
+    return ret;
+  }
+  
+  public String getName()
+  {
+    return getHTMLAttribute("name");
+  }
+
+  public void setName(String name)
+  {
+    setHTMLAttribute("name", name);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLMenuElement.java b/libjava/gnu/xml/dom/html2/DomHTMLMenuElement.java
new file mode 100644 (file)
index 0000000..e674f3e
--- /dev/null
@@ -0,0 +1,69 @@
+/* DomHTMLMenuElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLMenuElement;
+
+/**
+ * An HTML 'MENU' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLMenuElement
+  extends DomHTMLElement
+  implements HTMLMenuElement
+{
+
+  protected DomHTMLMenuElement(DomHTMLDocument owner, String namespaceURI,
+                               String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public boolean getCompact()
+  {
+    return getBooleanHTMLAttribute("compact");
+  }
+
+  public void setCompact(boolean compact)
+  {
+    setBooleanHTMLAttribute("compact", compact);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLMetaElement.java b/libjava/gnu/xml/dom/html2/DomHTMLMetaElement.java
new file mode 100644 (file)
index 0000000..d8bd435
--- /dev/null
@@ -0,0 +1,99 @@
+/* DomHTMLMetaElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLMetaElement;
+
+/**
+ * An HTML 'META' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLMetaElement
+  extends DomHTMLElement
+  implements HTMLMetaElement
+{
+
+  protected DomHTMLMetaElement(DomHTMLDocument owner, String namespaceURI,
+                               String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getContent()
+  {
+    return getHTMLAttribute("content");
+  }
+
+  public void setContent(String content)
+  {
+    setHTMLAttribute("content", content);
+  }
+  
+  public String getHttpEquiv()
+  {
+    return getHTMLAttribute("http-equiv");
+  }
+
+  public void setHttpEquiv(String httpEquiv)
+  {
+    setHTMLAttribute("http-equiv", httpEquiv);
+  }
+  
+  public String getName()
+  {
+    return getHTMLAttribute("name");
+  }
+
+  public void setName(String name)
+  {
+    setHTMLAttribute("name", name);
+  }
+  
+  public String getScheme()
+  {
+    return getHTMLAttribute("scheme");
+  }
+
+  public void setScheme(String scheme)
+  {
+    setHTMLAttribute("scheme", scheme);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLModElement.java b/libjava/gnu/xml/dom/html2/DomHTMLModElement.java
new file mode 100644 (file)
index 0000000..78f9401
--- /dev/null
@@ -0,0 +1,79 @@
+/* DomHTMLModElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLModElement;
+
+/**
+ * An HTML 'INS' or 'DEL' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLModElement
+  extends DomHTMLElement
+  implements HTMLModElement
+{
+
+  protected DomHTMLModElement(DomHTMLDocument owner, String namespaceURI,
+                              String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getCite()
+  {
+    return getHTMLAttribute("cite");
+  }
+
+  public void setCite(String cite)
+  {
+    setHTMLAttribute("cite", cite);
+  }
+  
+  public String getDateTime()
+  {
+    return getHTMLAttribute("datetime");
+  }
+
+  public void setDateTime(String dateTime)
+  {
+    setHTMLAttribute("datetime", dateTime);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLOListElement.java b/libjava/gnu/xml/dom/html2/DomHTMLOListElement.java
new file mode 100644 (file)
index 0000000..85d1b3f
--- /dev/null
@@ -0,0 +1,89 @@
+/* DomHTMLOListElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLOListElement;
+
+/**
+ * An HTML 'OL' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLOListElement
+  extends DomHTMLElement
+  implements HTMLOListElement
+{
+
+  protected DomHTMLOListElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public boolean getCompact()
+  {
+    return getBooleanHTMLAttribute("compact");
+  }
+
+  public void setCompact(boolean compact)
+  {
+    setBooleanHTMLAttribute("compact", compact);
+  }
+  
+  public int getStart()
+  {
+    return getIntHTMLAttribute("start");
+  }
+
+  public void setStart(int start)
+  {
+    setIntHTMLAttribute("start", start);
+  }
+  
+  public String getType()
+  {
+    return getHTMLAttribute("type");
+  }
+
+  public void setType(String type)
+  {
+    setHTMLAttribute("type", type);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLObjectElement.java b/libjava/gnu/xml/dom/html2/DomHTMLObjectElement.java
new file mode 100644 (file)
index 0000000..8b8abe7
--- /dev/null
@@ -0,0 +1,242 @@
+/* DomHTMLObjectElement.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.xml.dom.html2;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.html2.HTMLFormElement;
+import org.w3c.dom.html2.HTMLObjectElement;
+
+/**
+ * An HTML 'OBJECT' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLObjectElement
+  extends DomHTMLElement
+  implements HTMLObjectElement
+{
+
+  protected DomHTMLObjectElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public HTMLFormElement getForm()
+  {
+    return (HTMLFormElement) getParentElement("form");
+  }
+
+  public String getCode()
+  {
+    return getHTMLAttribute("code");
+  }
+
+  public void setCode(String code)
+  {
+    setHTMLAttribute("code", code);
+  }
+  
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+  public String getArchive()
+  {
+    return getHTMLAttribute("archive");
+  }
+
+  public void setArchive(String archive)
+  {
+    setHTMLAttribute("archive", archive);
+  }
+  
+  public String getBorder()
+  {
+    return getHTMLAttribute("border");
+  }
+
+  public void setBorder(String border)
+  {
+    setHTMLAttribute("border", border);
+  }
+  
+  public String getCodeBase()
+  {
+    return getHTMLAttribute("codebase");
+  }
+
+  public void setCodeBase(String codeBase)
+  {
+    setHTMLAttribute("codebase", codeBase);
+  }
+  
+  public String getCodeType()
+  {
+    return getHTMLAttribute("codetype");
+  }
+
+  public void setCodeType(String codeType)
+  {
+    setHTMLAttribute("codetype", codeType);
+  }
+  
+  public String getData()
+  {
+    return getHTMLAttribute("data");
+  }
+
+  public void setData(String data)
+  {
+    setHTMLAttribute("data", data);
+  }
+  
+  public boolean getDeclare()
+  {
+    return getBooleanHTMLAttribute("declare");
+  }
+
+  public void setDeclare(boolean declare)
+  {
+    setBooleanHTMLAttribute("declare", declare);
+  }
+  
+  public String getHeight()
+  {
+    return getHTMLAttribute("height");
+  }
+
+  public void setHeight(String height)
+  {
+    setHTMLAttribute("height", height);
+  }
+  
+  public int getHspace()
+  {
+    return getIntHTMLAttribute("hspace");
+  }
+
+  public void setHspace(int hspace)
+  {
+    setIntHTMLAttribute("hspace", hspace);
+  }
+  
+  public String getName()
+  {
+    return getHTMLAttribute("name");
+  }
+
+  public void setName(String name)
+  {
+    setHTMLAttribute("name", name);
+  }
+  
+  public String getStandby()
+  {
+    return getHTMLAttribute("standby");
+  }
+
+  public void setStandby(String standby)
+  {
+    setHTMLAttribute("standby", standby);
+  }
+  
+  public int getTabIndex()
+  {
+    return getIntHTMLAttribute("tabindex");
+  }
+
+  public void setTabIndex(int tabIndex)
+  {
+    setIntHTMLAttribute("tabindex", tabIndex);
+  }
+  
+  public String getType()
+  {
+    return getHTMLAttribute("type");
+  }
+
+  public void setType(String type)
+  {
+    setHTMLAttribute("type", type);
+  }
+  
+  public String getUseMap()
+  {
+    return getHTMLAttribute("usemap");
+  }
+
+  public void setUseMap(String useMap)
+  {
+    setHTMLAttribute("usemap", useMap);
+  }
+  
+  public int getVspace()
+  {
+    return getIntHTMLAttribute("vspace");
+  }
+
+  public void setVspace(int vspace)
+  {
+    setIntHTMLAttribute("vspace", vspace);
+  }
+  
+  public String getWidth()
+  {
+    return getHTMLAttribute("width");
+  }
+
+  public void setWidth(String width)
+  {
+    setHTMLAttribute("width", width);
+  }
+
+  public Document getContentDocument()
+  {
+    // TODO getContentDocument
+    return null;
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLOptGroupElement.java b/libjava/gnu/xml/dom/html2/DomHTMLOptGroupElement.java
new file mode 100644 (file)
index 0000000..782deb2
--- /dev/null
@@ -0,0 +1,79 @@
+/* DomHTMLOptGroupElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLOptGroupElement;
+
+/**
+ * An HTML 'OPTGROUP' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLOptGroupElement
+  extends DomHTMLElement
+  implements HTMLOptGroupElement
+{
+
+  protected DomHTMLOptGroupElement(DomHTMLDocument owner, String namespaceURI,
+                             String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public boolean getDisabled()
+  {
+    return getBooleanHTMLAttribute("disabled");
+  }
+
+  public void setDisabled(boolean disabled)
+  {
+    setBooleanHTMLAttribute("disabled", disabled);
+  }
+
+  public String getLabel()
+  {
+    return getHTMLAttribute("label");
+  }
+
+  public void setLabel(String label)
+  {
+    setHTMLAttribute("label", label);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLOptionElement.java b/libjava/gnu/xml/dom/html2/DomHTMLOptionElement.java
new file mode 100644 (file)
index 0000000..21952e6
--- /dev/null
@@ -0,0 +1,131 @@
+/* DomHTMLOptionElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLFormElement;
+import org.w3c.dom.html2.HTMLOptionElement;
+
+/**
+ * An HTML 'OPTION' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLOptionElement
+  extends DomHTMLElement
+  implements HTMLOptionElement
+{
+
+  protected Boolean selected;
+
+  protected DomHTMLOptionElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public HTMLFormElement getForm()
+  {
+    return (HTMLFormElement) getParentElement("form");
+  }
+
+  public boolean getDefaultSelected()
+  {
+    return getBooleanHTMLAttribute("selected");
+  }
+
+  public void setDefaultSelected(boolean defaultSelected)
+  {
+    setBooleanHTMLAttribute("selected", defaultSelected);
+  }
+
+  public String getText()
+  {
+    return getTextContent();
+  }
+
+  public int getIndex()
+  {
+    return super.getIndex();
+  }
+  
+  public boolean getDisabled()
+  {
+    return getBooleanHTMLAttribute("disabled");
+  }
+
+  public void setDisabled(boolean disabled)
+  {
+    setBooleanHTMLAttribute("disabled", disabled);
+  }
+  
+  public String getLabel()
+  {
+    return getHTMLAttribute("label");
+  }
+
+  public void setLabel(String label)
+  {
+    setHTMLAttribute("label", label);
+  }
+  
+  public boolean getSelected()
+  {
+    if (selected == null)
+      {
+        selected = Boolean.valueOf(getDefaultSelected());
+      }
+    return selected.booleanValue();
+  }
+
+  public void setSelected(boolean selected)
+  {
+    this.selected = Boolean.valueOf(selected);
+  }
+  
+  public String getValue()
+  {
+    return getHTMLAttribute("value");
+  }
+
+  public void setValue(String value)
+  {
+    setHTMLAttribute("value", value);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLParagraphElement.java b/libjava/gnu/xml/dom/html2/DomHTMLParagraphElement.java
new file mode 100644 (file)
index 0000000..573ddc9
--- /dev/null
@@ -0,0 +1,69 @@
+/* DomHTMLParagraphElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLParagraphElement;
+
+/**
+ * An HTML 'P' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLParagraphElement
+  extends DomHTMLElement
+  implements HTMLParagraphElement
+{
+
+  protected DomHTMLParagraphElement(DomHTMLDocument owner, String namespaceURI,
+                                    String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLParamElement.java b/libjava/gnu/xml/dom/html2/DomHTMLParamElement.java
new file mode 100644 (file)
index 0000000..c8e565d
--- /dev/null
@@ -0,0 +1,99 @@
+/* DomHTMLParamElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLParamElement;
+
+/**
+ * An HTML 'PARAM' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLParamElement
+  extends DomHTMLElement
+  implements HTMLParamElement
+{
+
+  protected DomHTMLParamElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getName()
+  {
+    return getHTMLAttribute("name");
+  }
+
+  public void setName(String name)
+  {
+    setHTMLAttribute("name", name);
+  }
+  
+  public String getType()
+  {
+    return getHTMLAttribute("type");
+  }
+
+  public void setType(String type)
+  {
+    setHTMLAttribute("type", type);
+  }
+  
+  public String getValue()
+  {
+    return getHTMLAttribute("value");
+  }
+
+  public void setValue(String value)
+  {
+    setHTMLAttribute("value", value);
+  }
+  
+  public String getValueType()
+  {
+    return getHTMLAttribute("valuetype");
+  }
+
+  public void setValueType(String valueType)
+  {
+    setHTMLAttribute("valuetype", valueType);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLParser.java b/libjava/gnu/xml/dom/html2/DomHTMLParser.java
new file mode 100644 (file)
index 0000000..f1b970e
--- /dev/null
@@ -0,0 +1,266 @@
+/* DomHTMLParser.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.xml.dom.html2;
+
+import gnu.javax.swing.text.html.parser.support.Parser;
+
+import java.io.IOException;
+import java.io.Reader;
+
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import javax.swing.text.AttributeSet;
+import javax.swing.text.html.HTML;
+import javax.swing.text.html.parser.DTD;
+import javax.swing.text.html.parser.TagElement;
+
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.html2.HTMLDocument;
+
+/**
+ * This parser reads HTML from the given stream and stores into
+ * {@link HTMLDocument}. The HTML tag becomes the {@link Node}.
+ * The tag attributes become the node attributes. The text inside
+ * HTML tag is inserted as one or several text nodes. The nested
+ * HTML tags are inserted as child nodes.
+ * 
+ * If the strict tree structure, closing the tag means closing all
+ * nested tags. To work around this, this parser closes the nested
+ * tags and immediately reopens them after the closed tag.
+ * In this way, <code>&lt;b&gt;&lt;i&gt;c&lt;/b&gt;d</code> 
+ * is parsed as <code>&lt;b&gt;&lt;i&gt;c&lt;/i&gt;&lt;/b&gt;&lt;i&gt;d</code> .
+ *
+ * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+ */
+public class DomHTMLParser
+  extends gnu.javax.swing.text.html.parser.support.Parser
+{
+  /**
+   * The target where HTML document will be inserted.
+   */
+  protected DomHTMLDocument document;
+
+  /**
+   * The subsequently created new nodes will be inserted as the
+   * childs of this cursor.
+   */
+  protected Node cursor;
+
+  /**
+   * Create parser using the given DTD.
+   *
+   * @param dtd the DTD (for example,
+   * {@link gnu.javax.swing.text.html.parser.HTML_401F}).
+   */
+  public DomHTMLParser(DTD dtd)
+  {
+    super(dtd);
+  }
+
+  /**
+   * Parse SGML insertion ( &lt;! ... &gt; ).
+   * Currently just treats it as comment.
+   */
+  public boolean parseMarkupDeclarations(StringBuffer strBuff)
+                                  throws java.io.IOException
+  {
+    Node c = document.createComment(strBuff.toString());
+    cursor.appendChild(c);
+    return false;
+  }
+
+  /**
+   * Read the document, present in the given stream, and
+   * return the corresponding {@link HTMLDocument}.
+   *
+   * @param input a stream to read from.
+   * @return a document, reflecting the structure of the provided HTML
+   * text.
+   *
+   * @throws IOException if the reader throws one.
+   */
+  public HTMLDocument parseDocument(Reader input)
+                    throws IOException
+  {
+    try
+      {
+        document = new DomHTMLDocument();
+
+        cursor = document;
+
+        parse(input);
+
+        DomHTMLDocument h = document;
+        document = null;
+        return h;
+      }
+    catch (Exception ex)
+      {
+        ex.printStackTrace();
+        throw new IOException("Exception: " + ex.getMessage());
+      }
+  }
+  
+  /**
+   * Create a new node.
+   * @param name the name of node, case insensitive.
+   * @return the created node.
+   */
+  protected Node createNode(String name)
+  {
+    Node new_node = document.createElement(name.toLowerCase());
+    AttributeSet hatts = getAttributes();
+    NamedNodeMap natts = new_node.getAttributes();
+
+    Enumeration enumeration = hatts.getAttributeNames();
+    Object key;
+    Node attribute;
+
+    while (hatts != null)
+      {
+        while (enumeration.hasMoreElements())
+          {
+            key = enumeration.nextElement();
+            attribute = document.createAttribute(key.toString());
+            attribute.setNodeValue(hatts.getAttribute(key).toString());
+            natts.setNamedItem(attribute);
+          }
+
+        // The default values are stored in a parent node. 
+        hatts = hatts.getResolveParent();
+      }
+
+    return new_node;
+  }
+  
+  /**
+   * Handle comment by inserting the comment node.
+   * @param text the comment text.
+   */
+  protected void handleComment(char[] text)
+  {
+    Node c = document.createComment(new String(text));
+    cursor.appendChild(c);
+  }
+  
+  /**
+   * Handle the tag with no content.
+   * @param tag the tag to handle.
+   */
+  protected void handleEmptyTag(TagElement tag)
+  {
+    String name = tag.getHTMLTag().toString();
+
+    if (name.equalsIgnoreCase("#pcdata"))
+      return;
+
+    Node c = createNode(name);
+    cursor.appendChild(c);
+  }
+  
+  /**
+   * Close the given tag. Close and reopen all nested tags.
+   * @param tag the tag to close.
+   */
+  protected void handleEndTag(TagElement tag)
+  {
+    String name = tag.getHTMLTag().toString();
+    String nname = cursor.getNodeName();
+
+    // Closing the current tag.
+    if (nname != null && nname.equalsIgnoreCase(name))
+      {
+        cursor = cursor.getParentNode();
+      }
+    else
+      {
+        Node nCursor = cursor.getParentNode();
+
+        // Remember the opened nodes.
+        LinkedList open = new LinkedList();
+        Node close = cursor;
+        while (close != null && !close.getNodeName().equalsIgnoreCase(name))
+          {
+            if (close != document)
+              open.addFirst(close);
+            close = close.getParentNode();
+          }
+
+        if (close == null)
+          cursor = document;
+        else
+          cursor = close.getParentNode();
+
+        // Insert the copies of the opened nodes.   
+        Iterator iter = open.iterator();
+        while (iter.hasNext())
+          {
+            Node item = (Node) iter.next();
+            Node copy = item.cloneNode(true);
+            cursor.appendChild(copy);
+            cursor = copy;
+          }
+      }
+  }
+
+  /**
+   * Handle the start tag by inserting the HTML element.
+   * @param tag the tag to handle.
+   */
+  protected void handleStartTag(TagElement tag)
+  {
+    HTML.Tag h = tag.getHTMLTag();
+    Node c = createNode(h.toString());
+    cursor.appendChild(c);
+    cursor = c;
+  }
+  
+  /**
+   * Handle text by inserting the text node.
+   * @param text the text to insert.
+   */
+  protected void handleText(char[] text)
+  {
+    Node c = document.createTextNode(text, 0, text.length);
+    cursor.appendChild(c);
+  }
+}
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLPreElement.java b/libjava/gnu/xml/dom/html2/DomHTMLPreElement.java
new file mode 100644 (file)
index 0000000..c8f306f
--- /dev/null
@@ -0,0 +1,69 @@
+/* DomHTMLPreElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLPreElement;
+
+/**
+ * An HTML 'PRE' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLPreElement
+  extends DomHTMLElement
+  implements HTMLPreElement
+{
+
+  protected DomHTMLPreElement(DomHTMLDocument owner, String namespaceURI,
+                             String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public int getWidth()
+  {
+    return getIntHTMLAttribute("width");
+  }
+
+  public void setWidth(int width)
+  {
+    setIntHTMLAttribute("width", width);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLQuoteElement.java b/libjava/gnu/xml/dom/html2/DomHTMLQuoteElement.java
new file mode 100644 (file)
index 0000000..0424ebf
--- /dev/null
@@ -0,0 +1,69 @@
+/* DomHTMLQuoteElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLQuoteElement;
+
+/**
+ * An HTML 'Q' or 'BLOCKQUOTE' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLQuoteElement
+  extends DomHTMLElement
+  implements HTMLQuoteElement
+{
+
+  protected DomHTMLQuoteElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getCite()
+  {
+    return getHTMLAttribute("cite");
+  }
+
+  public void setCite(String cite)
+  {
+    setHTMLAttribute("cite", cite);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLScriptElement.java b/libjava/gnu/xml/dom/html2/DomHTMLScriptElement.java
new file mode 100644 (file)
index 0000000..2bf6a55
--- /dev/null
@@ -0,0 +1,129 @@
+/* DomHTMLScriptElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLScriptElement;
+
+/**
+ * An HTML 'SCRIPT' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLScriptElement
+  extends DomHTMLElement
+  implements HTMLScriptElement
+{
+
+  protected DomHTMLScriptElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getText()
+  {
+    return getTextContent();
+  }
+
+  public void setText(String text)
+  {
+    setTextContent(text);
+  }
+
+  public String getHtmlFor()
+  {
+    return getHTMLAttribute("for");
+  }
+
+  public void setHtmlFor(String htmlFor)
+  {
+    setHTMLAttribute("for", htmlFor);
+  }
+
+  public String getEvent()
+  {
+    return getHTMLAttribute("event");
+  }
+
+  public void setEvent(String event)
+  {
+    setHTMLAttribute("event", event);
+  }
+
+  public String getCharset()
+  {
+    return getHTMLAttribute("charset");
+  }
+
+  public void setCharset(String charset)
+  {
+    setHTMLAttribute("charset", charset);
+  }
+
+  public boolean getDefer()
+  {
+    return getBooleanHTMLAttribute("defer");
+  }
+
+  public void setDefer(boolean defer)
+  {
+    setBooleanHTMLAttribute("defer", defer);
+  }
+
+  public String getSrc()
+  {
+    return getHTMLAttribute("src");
+  }
+
+  public void setSrc(String src)
+  {
+    setHTMLAttribute("src", src);
+  }
+
+  public String getType()
+  {
+    return getHTMLAttribute("type");
+  }
+
+  public void setType(String type)
+  {
+    setHTMLAttribute("type", type);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLSelectElement.java b/libjava/gnu/xml/dom/html2/DomHTMLSelectElement.java
new file mode 100644 (file)
index 0000000..b888b57
--- /dev/null
@@ -0,0 +1,211 @@
+/* DomHTMLSelectElement.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.xml.dom.html2;
+
+import gnu.xml.dom.DomDOMException;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.html2.HTMLElement;
+import org.w3c.dom.html2.HTMLFormElement;
+import org.w3c.dom.html2.HTMLOptionElement;
+import org.w3c.dom.html2.HTMLOptionsCollection;
+import org.w3c.dom.html2.HTMLSelectElement;
+
+/**
+ * An HTML 'SELECT' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLSelectElement
+  extends DomHTMLElement
+  implements HTMLSelectElement
+{
+
+  protected DomHTMLSelectElement(DomHTMLDocument owner, String namespaceURI,
+                                 String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+  
+  public String getType()
+  {
+    return getHTMLAttribute("type");
+  }
+
+  public int getSelectedIndex()
+  {
+    HTMLOptionsCollection options = getOptions();
+    int len = options.getLength();
+    for (int i = 0; i < len; i++)
+      {
+        HTMLOptionElement option = (HTMLOptionElement) options.item(i);
+        if (option.getSelected())
+          {
+            return i;
+          }
+      }
+    return -1;
+  }
+
+  public void setSelectedIndex(int selectedIndex)
+  {
+    HTMLOptionsCollection options = getOptions();
+    int len = options.getLength();
+    if (selectedIndex < 0 || selectedIndex >= len)
+      {
+        throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+      }
+    for (int i = 0; i < len; i++)
+      {
+        HTMLOptionElement option = (HTMLOptionElement) options.item(i);
+        option.setSelected(i == selectedIndex);
+      }
+  }
+  
+  public String getValue()
+  {
+    return getHTMLAttribute("value");
+  }
+
+  public void setValue(String value)
+  {
+    setHTMLAttribute("value", value);
+  }
+  
+  public int getLength()
+  {
+    return getIntHTMLAttribute("length");
+  }
+
+  public void setLength(int length)
+  {
+    setIntHTMLAttribute("length", length);
+  }
+
+  public HTMLFormElement getForm()
+  {
+    return (HTMLFormElement) getParentElement("form");
+  }
+
+  public HTMLOptionsCollection getOptions()
+  {
+    DomHTMLCollection ret =
+      new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
+    ret.addNodeName("option");
+    ret.evaluate();
+    return ret;
+  }
+  
+  public boolean getDisabled()
+  {
+    return getBooleanHTMLAttribute("disabled");
+  }
+
+  public void setDisabled(boolean disabled)
+  {
+    setBooleanHTMLAttribute("disabled", disabled);
+  }
+  
+  public boolean getMultiple()
+  {
+    return getBooleanHTMLAttribute("multiple");
+  }
+
+  public void setMultiple(boolean multiple)
+  {
+    setBooleanHTMLAttribute("multiple", multiple);
+  }
+  
+  public String getName()
+  {
+    return getHTMLAttribute("name");
+  }
+
+  public void setName(String name)
+  {
+    setHTMLAttribute("name", name);
+  }
+  
+  public int getSize()
+  {
+    return getIntHTMLAttribute("size");
+  }
+
+  public void setSize(int size)
+  {
+    setIntHTMLAttribute("size", size);
+  }
+  
+  public int getTabIndex()
+  {
+    return getIntHTMLAttribute("tabindex");
+  }
+
+  public void setTabIndex(int tabIndex)
+  {
+    setIntHTMLAttribute("tabindex", tabIndex);
+  }
+
+  public void add(HTMLElement element, HTMLElement before)
+  {
+    insertBefore(before, element);
+  }
+
+  public void remove(int index)
+  {
+    HTMLOptionsCollection options = getOptions();
+    int len = options.getLength();
+    if (index < 0 || index >= len)
+      {
+        throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+      }
+    HTMLOptionElement option = (HTMLOptionElement) options.item(index);
+    option.getParentNode().removeChild(option);
+  }
+
+  public void blur()
+  {
+    dispatchUIEvent("blur");
+  }
+
+  public void focus()
+  {
+    dispatchUIEvent("focus");
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLStyleElement.java b/libjava/gnu/xml/dom/html2/DomHTMLStyleElement.java
new file mode 100644 (file)
index 0000000..4d2de8c
--- /dev/null
@@ -0,0 +1,89 @@
+/* DomHTMLStyleElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLStyleElement;
+
+/**
+ * An HTML 'STYLE' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLStyleElement
+  extends DomHTMLElement
+  implements HTMLStyleElement
+{
+
+  protected DomHTMLStyleElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public boolean getDisabled()
+  {
+    return getBooleanHTMLAttribute("disabled");
+  }
+
+  public void setDisabled(boolean disabled)
+  {
+    setBooleanHTMLAttribute("disabled", disabled);
+  }
+  
+  public String getMedia()
+  {
+    return getHTMLAttribute("media");
+  }
+
+  public void setMedia(String media)
+  {
+    setHTMLAttribute("media", media);
+  }
+  
+  public String getType()
+  {
+    return getHTMLAttribute("type");
+  }
+
+  public void setType(String type)
+  {
+    setHTMLAttribute("type", type);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java
new file mode 100644 (file)
index 0000000..a481f47
--- /dev/null
@@ -0,0 +1,70 @@
+/* DomHTMLTableCaptionElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLTableCaptionElement;
+
+/**
+ * An HTML 'CAPTION' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLTableCaptionElement
+  extends DomHTMLElement
+  implements HTMLTableCaptionElement
+{
+
+  protected DomHTMLTableCaptionElement(DomHTMLDocument owner,
+                                       String namespaceURI,
+                                       String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTableCellElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTableCellElement.java
new file mode 100644 (file)
index 0000000..6338b88
--- /dev/null
@@ -0,0 +1,205 @@
+/* DomHTMLTableCellElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLTableCellElement;
+
+/**
+ * An HTML 'TH' or 'TD' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLTableCellElement
+  extends DomHTMLElement
+  implements HTMLTableCellElement
+{
+
+  protected DomHTMLTableCellElement(DomHTMLDocument owner,
+                                    String namespaceURI,
+                                    String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public int getCellIndex()
+  {
+    return getIndex();
+  }
+
+  public String getAbbr()
+  {
+    return getHTMLAttribute("abbr");
+  }
+
+  public void setAbbr(String abbr)
+  {
+    setHTMLAttribute("abbr", abbr);
+  }
+  
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+  public String getAxis()
+  {
+    return getHTMLAttribute("axis");
+  }
+
+  public void setAxis(String axis)
+  {
+    setHTMLAttribute("axis", axis);
+  }
+  
+  public String getBgColor()
+  {
+    return getHTMLAttribute("bgcolor");
+  }
+
+  public void setBgColor(String bgColor)
+  {
+    setHTMLAttribute("bgcolor", bgColor);
+  }
+  
+  public String getCh()
+  {
+    return getHTMLAttribute("char");
+  }
+
+  public void setCh(String ch)
+  {
+    setHTMLAttribute("char", ch);
+  }
+  
+  public String getChOff()
+  {
+    return getHTMLAttribute("charoff");
+  }
+
+  public void setChOff(String chOff)
+  {
+    setHTMLAttribute("charoff", chOff);
+  }
+  
+  public int getColSpan()
+  {
+    return getIntHTMLAttribute("colspan");
+  }
+
+  public void setColSpan(int colSpan)
+  {
+    setIntHTMLAttribute("colspan", colSpan);
+  }
+  
+  public String getHeaders()
+  {
+    return getHTMLAttribute("headers");
+  }
+
+  public void setHeaders(String headers)
+  {
+    setHTMLAttribute("headers", headers);
+  }
+  
+  public String getHeight()
+  {
+    return getHTMLAttribute("height");
+  }
+
+  public void setHeight(String height)
+  {
+    setHTMLAttribute("height", height);
+  }
+  
+  public boolean getNoWrap()
+  {
+    return getBooleanHTMLAttribute("nowrap");
+  }
+
+  public void setNoWrap(boolean noWrap)
+  {
+    setBooleanHTMLAttribute("nowrap", noWrap);
+  }
+  
+  public int getRowSpan()
+  {
+    return getIntHTMLAttribute("rowspan");
+  }
+
+  public void setRowSpan(int rowSpan)
+  {
+    setIntHTMLAttribute("rowspan", rowSpan);
+  }
+  
+  public String getScope()
+  {
+    return getHTMLAttribute("scope");
+  }
+
+  public void setScope(String scope)
+  {
+    setHTMLAttribute("scope", scope);
+  }
+  
+  public String getVAlign()
+  {
+    return getHTMLAttribute("valign");
+  }
+
+  public void setVAlign(String vAlign)
+  {
+    setHTMLAttribute("valign", vAlign);
+  }
+  
+  public String getWidth()
+  {
+    return getHTMLAttribute("width");
+  }
+
+  public void setWidth(String width)
+  {
+    setHTMLAttribute("width", width);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTableColElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTableColElement.java
new file mode 100644 (file)
index 0000000..0ed20a0
--- /dev/null
@@ -0,0 +1,120 @@
+/* DomHTMLTableColElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLTableColElement;
+
+/**
+ * An HTML 'COL' or 'COLGROUP' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLTableColElement
+  extends DomHTMLElement
+  implements HTMLTableColElement
+{
+
+  protected DomHTMLTableColElement(DomHTMLDocument owner,
+                                   String namespaceURI,
+                                   String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+  public String getCh()
+  {
+    return getHTMLAttribute("char");
+  }
+
+  public void setCh(String ch)
+  {
+    setHTMLAttribute("char", ch);
+  }
+  
+  public String getChOff()
+  {
+    return getHTMLAttribute("charoff");
+  }
+
+  public void setChOff(String chOff)
+  {
+    setHTMLAttribute("charoff", chOff);
+  }
+  
+  public int getSpan()
+  {
+    return getIntHTMLAttribute("span");
+  }
+
+  public void setSpan(int span)
+  {
+    setIntHTMLAttribute("span", span);
+  }
+  
+  public String getVAlign()
+  {
+    return getHTMLAttribute("valign");
+  }
+
+  public void setVAlign(String vAlign)
+  {
+    setHTMLAttribute("valign", vAlign);
+  }
+  
+  public String getWidth()
+  {
+    return getHTMLAttribute("width");
+  }
+
+  public void setWidth(String width)
+  {
+    setHTMLAttribute("width", width);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTableElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTableElement.java
new file mode 100644 (file)
index 0000000..95e2957
--- /dev/null
@@ -0,0 +1,383 @@
+/* DomHTMLTableElement.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.xml.dom.html2;
+
+import gnu.xml.dom.DomDOMException;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Node;
+import org.w3c.dom.html2.HTMLCollection;
+import org.w3c.dom.html2.HTMLElement;
+import org.w3c.dom.html2.HTMLTableCaptionElement;
+import org.w3c.dom.html2.HTMLTableElement;
+import org.w3c.dom.html2.HTMLTableSectionElement;
+
+/**
+ * An HTML 'TABLE' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLTableElement
+  extends DomHTMLElement
+  implements HTMLTableElement
+{
+
+  protected DomHTMLTableElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public HTMLTableCaptionElement getCaption()
+  {
+    return (HTMLTableCaptionElement) getChildElement("caption");
+  }
+
+  public void setCaption(HTMLTableCaptionElement caption)
+  {
+    HTMLTableCaptionElement ref = getCaption();
+    if (ref == null)
+      {
+        appendChild(caption);
+      }
+    else
+      {
+        replaceChild(caption, ref);
+      }
+  }
+  
+  public HTMLTableSectionElement getTHead()
+  {
+    return (HTMLTableSectionElement) getChildElement("thead");
+  }
+
+  public void setTHead(HTMLTableSectionElement tHead)
+  {
+    HTMLTableSectionElement ref = getTHead();
+    if (ref == null)
+      {
+        appendChild(tHead);
+      }
+    else
+      {
+        replaceChild(tHead, ref);
+      }
+  }
+
+  public HTMLTableSectionElement getTFoot()
+  {
+    return (HTMLTableSectionElement) getChildElement("tfoot");
+  }
+
+  public void setTFoot(HTMLTableSectionElement tFoot)
+  {
+    HTMLTableSectionElement ref = getTFoot();
+    if (ref == null)
+      {
+        appendChild(tFoot);
+      }
+    else
+      {
+        replaceChild(tFoot, ref);
+      }
+  }
+
+  public HTMLCollection getRows()
+  {
+    DomHTMLCollection ret =
+      new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
+    ret.addNodeName("tr");
+    ret.evaluate();
+    return ret;
+  }
+
+  public HTMLCollection getTBodies()
+  {
+    DomHTMLCollection ret =
+      new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
+    ret.addNodeName("tbody");
+    ret.evaluate();
+    return ret;
+  }
+  
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+  public String getBgColor()
+  {
+    return getHTMLAttribute("bgcolor");
+  }
+
+  public void setBgColor(String bgColor)
+  {
+    setHTMLAttribute("bgcolor", bgColor);
+  }
+  
+  public String getBorder()
+  {
+    return getHTMLAttribute("border");
+  }
+
+  public void setBorder(String border)
+  {
+    setHTMLAttribute("border", border);
+  }
+  
+  public String getCellPadding()
+  {
+    return getHTMLAttribute("cellpadding");
+  }
+
+  public void setCellPadding(String cellPadding)
+  {
+    setHTMLAttribute("cellpadding", cellPadding);
+  }
+  
+  public String getCellSpacing()
+  {
+    return getHTMLAttribute("cellspacing");
+  }
+
+  public void setCellSpacing(String cellSpacing)
+  {
+    setHTMLAttribute("cellspacing", cellSpacing);
+  }
+  
+  public String getFrame()
+  {
+    return getHTMLAttribute("frame");
+  }
+
+  public void setFrame(String frame)
+  {
+    setHTMLAttribute("frame", frame);
+  }
+  
+  public String getRules()
+  {
+    return getHTMLAttribute("rules");
+  }
+
+  public void setRules(String rules)
+  {
+    setHTMLAttribute("rules", rules);
+  }
+  
+  public String getSummary()
+  {
+    return getHTMLAttribute("summary");
+  }
+
+  public void setSummary(String summary)
+  {
+    setHTMLAttribute("summary", summary);
+  }
+  
+  public String getWidth()
+  {
+    return getHTMLAttribute("width");
+  }
+
+  public void setWidth(String width)
+  {
+    setHTMLAttribute("width", width);
+  }
+
+  public HTMLElement createTHead()
+  {
+    HTMLTableSectionElement ref = getTHead();
+    if (ref == null)
+      {
+        return (HTMLElement) getOwnerDocument().createElement("thead");
+      }
+    else
+      {
+        return ref;
+      }
+  }
+
+  public void deleteTHead()
+  {
+    HTMLTableSectionElement ref = getTHead();
+    if (ref != null)
+      {
+        removeChild(ref);
+      }
+  }
+
+  public HTMLElement createTFoot()
+  {
+    HTMLTableSectionElement ref = getTFoot();
+    if (ref == null)
+      {
+        return (HTMLElement) getOwnerDocument().createElement("tfoot");
+      }
+    else
+      {
+        return ref;
+      }
+  }
+
+  public void deleteTFoot()
+  {
+    HTMLTableSectionElement ref = getTFoot();
+    if (ref != null)
+      {
+        removeChild(ref);
+      }
+  }
+
+  public HTMLElement createCaption()
+  {
+    HTMLTableCaptionElement ref = getCaption();
+    if (ref == null)
+      {
+        return (HTMLElement) getOwnerDocument().createElement("caption");
+      }
+    else
+      {
+        return ref;
+      }
+  }
+
+  public void deleteCaption()
+  {
+    HTMLTableCaptionElement ref = getCaption();
+    if (ref != null)
+      {
+        removeChild(ref);
+      }
+  }
+
+  public HTMLElement insertRow(int index)
+  {
+    Node ref = getRow(index);
+    Node row = getOwnerDocument().createElement("tr");
+    if (ref == null)
+      {
+        Node tbody = getChildElement("tbody");
+        if (tbody == null)
+          {
+            tbody = getOwnerDocument().createElement("tfoot");
+            appendChild(tbody);
+          }
+        tbody.appendChild(row);
+      }
+    else
+      {
+        ref.getParentNode().insertBefore(row, ref);
+      }
+    return (HTMLElement) row;
+  }
+
+  public void deleteRow(int index)
+  {
+    Node ref = getRow(index);
+    if (ref == null)
+      {
+        throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+      }
+    ref.getParentNode().removeChild(ref);
+  }
+  Node getRow(final int index)
+  { 
+    int i = 0;
+    Node thead = getChildElement("thead");
+    if (thead != null)
+      {
+        for (Node ctx = thead.getFirstChild(); ctx != null;
+             ctx = ctx.getNextSibling())
+          {
+            if (!"tr".equalsIgnoreCase(ctx.getLocalName()))
+              {
+                continue;
+              }
+            if (index == i)
+              {
+                return ctx;
+              }
+            i++;
+          }
+      }
+    Node tbody = getChildElement("tbody");
+    if (tbody == null)
+      {
+        tbody = this;
+      }
+    for (Node ctx = tbody.getFirstChild(); ctx != null;
+         ctx = ctx.getNextSibling())
+      {
+        if (!"tr".equalsIgnoreCase(ctx.getLocalName()))
+          {
+            continue;
+          }
+        if (index == i)
+          {
+            return ctx;
+          }
+        i++;
+      }
+    Node tfoot = getChildElement("tfoot");
+    if (tfoot != null)
+      {
+        for (Node ctx = tfoot.getFirstChild(); ctx != null;
+             ctx = ctx.getNextSibling())
+          {
+            if (!"tr".equalsIgnoreCase(ctx.getLocalName()))
+              {
+                continue;
+              }
+            if (index == i)
+              {
+                return ctx;
+              }
+            i++;
+          }
+      }
+    return null;
+  }
+
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTableRowElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTableRowElement.java
new file mode 100644 (file)
index 0000000..e21e158
--- /dev/null
@@ -0,0 +1,225 @@
+/* DomHTMLTableRowElement.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.xml.dom.html2;
+
+import gnu.xml.dom.DomDOMException;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Node;
+import org.w3c.dom.html2.HTMLCollection;
+import org.w3c.dom.html2.HTMLElement;
+import org.w3c.dom.html2.HTMLTableRowElement;
+
+/**
+ * An HTML 'TR' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLTableRowElement
+  extends DomHTMLElement
+  implements HTMLTableRowElement
+{
+
+  protected DomHTMLTableRowElement(DomHTMLDocument owner,
+                                   String namespaceURI,
+                                   String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public int getRowIndex()
+  {
+    return getIndex();
+  }
+
+  public int getSectionRowIndex()
+  {
+    int index = 0;
+    DomHTMLElement parent = (DomHTMLElement) getParentElement("table");
+    if (parent != null)
+      {
+        Node thead = parent.getChildElement("thead");
+        if (thead != null)
+          {
+            for (Node ctx = thead.getFirstChild(); ctx != null;
+                 ctx = ctx.getNextSibling())
+              {
+                if (ctx == this)
+                  {
+                    return index;
+                  }
+                index++;
+              }
+          }
+        Node tbody = parent.getChildElement("tbody");
+        if (tbody != null)
+          {
+            for (Node ctx = tbody.getFirstChild(); ctx != null;
+                 ctx = ctx.getNextSibling())
+              {
+                if (ctx == this)
+                  {
+                    return index;
+                  }
+                index++;
+              }
+          }
+        Node tfoot = parent.getChildElement("tfoot");
+        if (tfoot != null)
+          {
+            for (Node ctx = tfoot.getFirstChild(); ctx != null;
+                 ctx = ctx.getNextSibling())
+              {
+                if (ctx == this)
+                  {
+                    return index;
+                  }
+                index++;
+              }
+          }
+      }
+    throw new DomDOMException(DOMException.NOT_FOUND_ERR);
+  }
+
+  public HTMLCollection getCells()
+  {
+    DomHTMLCollection ret =
+      new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
+    ret.addNodeName("th");
+    ret.addNodeName("td");
+    ret.evaluate();
+    return ret;
+  }
+
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+  public String getBgColor()
+  {
+    return getHTMLAttribute("bgcolor");
+  }
+
+  public void setBgColor(String bgColor)
+  {
+    setHTMLAttribute("bgcolor", bgColor);
+  }
+  
+  public String getCh()
+  {
+    return getHTMLAttribute("char");
+  }
+
+  public void setCh(String ch)
+  {
+    setHTMLAttribute("char", ch);
+  }
+  
+  public String getChOff()
+  {
+    return getHTMLAttribute("charoff");
+  }
+
+  public void setChOff(String chOff)
+  {
+    setHTMLAttribute("charoff", chOff);
+  }
+  
+  public String getVAlign()
+  {
+    return getHTMLAttribute("valign");
+  }
+
+  public void setVAlign(String vAlign)
+  {
+    setHTMLAttribute("valign", vAlign);
+  }
+
+  public HTMLElement insertCell(int index)
+  {
+    Node ref = getCell(index);
+    Node cell = getOwnerDocument().createElement("td");
+    if (ref == null)
+      {
+        appendChild(cell);
+      }
+    else
+      {
+        insertBefore(cell, ref);
+      }
+    return (HTMLElement) cell;
+  }
+
+  public void deleteCell(int index)
+  {
+    Node ref = getCell(index);
+    if (ref == null)
+      {
+        throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+      }
+    removeChild(ref);
+  }
+  
+  Node getCell(final int index)
+  { 
+    int i = 0;
+    for (Node ctx = getFirstChild(); ctx != null;
+         ctx = ctx.getNextSibling())
+      {
+        String name = ctx.getLocalName();
+        if (!"td".equalsIgnoreCase(name) &&
+            !"th".equalsIgnoreCase(name))
+          {
+            continue;
+          }
+        if (index == i)
+          {
+            return ctx;
+          }
+        i++;
+      }
+    return null;
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTableSectionElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTableSectionElement.java
new file mode 100644 (file)
index 0000000..45dd671
--- /dev/null
@@ -0,0 +1,158 @@
+/* DomHTMLTableSectionElement.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.xml.dom.html2;
+
+import gnu.xml.dom.DomDOMException;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Node;
+import org.w3c.dom.html2.HTMLCollection;
+import org.w3c.dom.html2.HTMLElement;
+import org.w3c.dom.html2.HTMLTableSectionElement;
+
+/**
+ * An HTML 'THEAD', 'TFOOT', or 'TBODY' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLTableSectionElement
+  extends DomHTMLElement
+  implements HTMLTableSectionElement
+{
+
+  protected DomHTMLTableSectionElement(DomHTMLDocument owner,
+                                       String namespaceURI,
+                                       String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getAlign()
+  {
+    return getHTMLAttribute("align");
+  }
+
+  public void setAlign(String align)
+  {
+    setHTMLAttribute("align", align);
+  }
+  
+  public String getCh()
+  {
+    return getHTMLAttribute("char");
+  }
+
+  public void setCh(String ch)
+  {
+    setHTMLAttribute("char", ch);
+  }
+  
+  public String getChOff()
+  {
+    return getHTMLAttribute("charoff");
+  }
+
+  public void setChOff(String chOff)
+  {
+    setHTMLAttribute("charoff", chOff);
+  }
+  
+  public String getVAlign()
+  {
+    return getHTMLAttribute("valign");
+  }
+
+  public void setVAlign(String vAlign)
+  {
+    setHTMLAttribute("valign", vAlign);
+  }
+
+  public HTMLCollection getRows()
+  {
+    DomHTMLCollection ret =
+      new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
+    ret.addNodeName("tr");
+    ret.evaluate();
+    return ret;
+  }
+
+  public HTMLElement insertRow(int index)
+  {
+    Node ref = getRow(index);
+    Node row = getOwnerDocument().createElement("tr");
+    if (ref == null)
+      {
+        appendChild(row);
+      }
+    else
+      {
+        insertBefore(row, ref);
+      }
+    return (HTMLElement) row;
+  }
+
+  public void deleteRow(int index)
+  {
+    Node ref = getRow(index);
+    if (ref == null)
+      {
+        throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
+      }
+    removeChild(ref);
+  }
+  
+  Node getRow(final int index)
+  { 
+    int i = 0;
+    for (Node ctx = getFirstChild(); ctx != null;
+         ctx = ctx.getNextSibling())
+      {
+        if (!"tr".equalsIgnoreCase(ctx.getLocalName()))
+          {
+            continue;
+          }
+        if (index == i)
+          {
+            return ctx;
+          }
+        i++;
+      }
+    return null;
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTextAreaElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTextAreaElement.java
new file mode 100644 (file)
index 0000000..93a918a
--- /dev/null
@@ -0,0 +1,182 @@
+/* DomHTMLTextAreaElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLFormElement;
+import org.w3c.dom.html2.HTMLTextAreaElement;
+
+/**
+ * An HTML 'TEXTAREA' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLTextAreaElement
+  extends DomHTMLElement
+  implements HTMLTextAreaElement
+{
+
+  protected String value;
+
+  protected DomHTMLTextAreaElement(DomHTMLDocument owner,
+                                   String namespaceURI,
+                                   String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getDefaultValue()
+  {
+    return getHTMLAttribute("value");
+  }
+
+  public void setDefaultValue(String defaultValue)
+  {
+    setHTMLAttribute("value", defaultValue);
+  }
+
+  public HTMLFormElement getForm()
+  {
+    return (HTMLFormElement) getParentElement("form");
+  }
+  
+  public String getAccessKey()
+  {
+    return getHTMLAttribute("accesskey");
+  }
+
+  public void setAccessKey(String accessKey)
+  {
+    setHTMLAttribute("accesskey", accessKey);
+  }
+  
+  public int getCols()
+  {
+    return getIntHTMLAttribute("cols");
+  }
+
+  public void setCols(int cols)
+  {
+    setIntHTMLAttribute("cols", cols);
+  }
+  
+  public boolean getDisabled()
+  {
+    return getBooleanHTMLAttribute("disabled");
+  }
+
+  public void setDisabled(boolean disabled)
+  {
+    setBooleanHTMLAttribute("disabled", disabled);
+  }
+  
+  public String getName()
+  {
+    return getHTMLAttribute("name");
+  }
+
+  public void setName(String name)
+  {
+    setHTMLAttribute("name", name);
+  }
+  
+  public boolean getReadOnly()
+  {
+    return getBooleanHTMLAttribute("readOnly");
+  }
+
+  public void setReadOnly(boolean readOnly)
+  {
+    setBooleanHTMLAttribute("readonly", readOnly);
+  }
+  
+  public int getRows()
+  {
+    return getIntHTMLAttribute("rows");
+  }
+
+  public void setRows(int rows)
+  {
+    setIntHTMLAttribute("rows", rows);
+  }
+  
+  public int getTabIndex()
+  {
+    return getIntHTMLAttribute("tabindex");
+  }
+
+  public void setTabIndex(int tabIndex)
+  {
+    setIntHTMLAttribute("tabindex", tabIndex);
+  }
+  
+  public String getType()
+  {
+    return "textarea";
+  }
+
+  public String getValue()
+  {
+    if (value == null)
+      {
+        value = getDefaultValue();
+      }
+    return value;
+  }
+
+  public void setValue(String value)
+  {
+    this.value = value;
+  }
+
+  public void blur()
+  {
+    dispatchUIEvent("blur");
+  }
+
+  public void focus()
+  {
+    dispatchUIEvent("focus");
+  }
+  
+  public void select()
+  {
+    dispatchUIEvent("select");
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTitleElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTitleElement.java
new file mode 100644 (file)
index 0000000..1c11055
--- /dev/null
@@ -0,0 +1,69 @@
+/* DomHTMLTitleElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLTitleElement;
+
+/**
+ * An HTML 'TITLE' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLTitleElement
+  extends DomHTMLElement
+  implements HTMLTitleElement
+{
+
+  protected DomHTMLTitleElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public String getText()
+  {
+    return getTextContent();
+  }
+
+  public void setText(String text)
+  {
+    setTextContent(text);
+  }
+  
+}
+
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLUListElement.java b/libjava/gnu/xml/dom/html2/DomHTMLUListElement.java
new file mode 100644 (file)
index 0000000..9f6b692
--- /dev/null
@@ -0,0 +1,79 @@
+/* DomHTMLUListElement.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.xml.dom.html2;
+
+import org.w3c.dom.html2.HTMLUListElement;
+
+/**
+ * An HTML 'UL' element node.
+ *
+ * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
+ */
+public class DomHTMLUListElement
+  extends DomHTMLElement
+  implements HTMLUListElement
+{
+
+  protected DomHTMLUListElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+
+  public boolean getCompact()
+  {
+    return getBooleanHTMLAttribute("compact");
+  }
+
+  public void setCompact(boolean compact)
+  {
+    setBooleanHTMLAttribute("compact", compact);
+  }
+  
+  public String getType()
+  {
+    return getHTMLAttribute("type");
+  }
+
+  public void setType(String type)
+  {
+    setHTMLAttribute("type", type);
+  }
+  
+}
+
diff --git a/libjava/javax/swing/text/ChangedCharSetException.java b/libjava/javax/swing/text/ChangedCharSetException.java
new file mode 100644 (file)
index 0000000..bf592a6
--- /dev/null
@@ -0,0 +1,100 @@
+/* ChangedCharSetException.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 javax.swing.text;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * The exception is thrown when the document charset is changed.
+ *
+ * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
+ */
+public class ChangedCharSetException
+  extends IOException
+  implements Serializable
+{
+  /**
+   * Use serialVersionUID for interoperability.
+   * This value corresponds the version 1.4.
+   */
+  private static final long serialVersionUID = 9119851554465432389L;
+
+  /**
+   * The char set specification.
+   */
+  private final String m_charSetSpec;
+
+  /**
+   * The char set key.
+   */
+  private final boolean m_charSetKey;
+
+  /**
+   * Constructs a new char set exception with two additional parameters,
+   * defining the circumstances under that the exception was raised.
+   */
+  public ChangedCharSetException(String charSetSpec, boolean charSetKey)
+  {
+    m_charSetSpec = charSetSpec;
+    m_charSetKey = charSetKey;
+  }
+
+  /**
+   * Get the value of the first parameter, previously passed to the
+   * constructor.
+   *
+   * @return the value of the first parameter
+   */
+  public String getCharSetSpec()
+  {
+    return m_charSetSpec;
+  }
+
+  /**
+   * Get the value of the second parameter, previously passed to the
+   * constructor.
+   *
+   * @return the value of the second parameter
+   */
+  public boolean keyEqualsCharSet()
+  {
+    return m_charSetKey;
+  }
+}
index 098a147..06e0ef4 100644 (file)
@@ -35,38 +35,1260 @@ 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 javax.swing.text.html;
 
 import java.io.Serializable;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+import javax.swing.text.AttributeSet;
+
 /**
- * Stub implementation.
- * Just enough to get gjdoc working.
- *
- * @author Mark Wielaard (mark@klomp.org)
+ * HTML attribute and tag definitions.
+ * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
  */
 public class HTML
 {
-  public static class Tag
+  /**
+   * Represents a HTML attribute.
+   */
+  public static class Attribute
+    implements Serializable
   {
-    private final String id;
+    /**
+     * The action attribute
+     */
+    public static final Attribute ACTION = new Attribute("action");
 
-    protected Tag(String id)
+    /**
+     * The align attribute
+     */
+    public static final Attribute ALIGN = new Attribute("align");
+
+    /**
+     * The alink attribute
+     */
+    public static final Attribute ALINK = new Attribute("alink");
+
+    /**
+     * The alt attribute
+     */
+    public static final Attribute ALT = new Attribute("alt");
+
+    /**
+     * The archive attribute
+     */
+    public static final Attribute ARCHIVE = new Attribute("archive");
+
+    /**
+     * The background attribute
+     */
+    public static final Attribute BACKGROUND = new Attribute("background");
+
+    /**
+     * The bgcolor attribute
+     */
+    public static final Attribute BGCOLOR = new Attribute("bgcolor");
+
+    /**
+     * The border attribute
+     */
+    public static final Attribute BORDER = new Attribute("border");
+
+    /**
+     * The cellpadding attribute
+     */
+    public static final Attribute CELLPADDING = new Attribute("cellpadding");
+
+    /**
+     * The cellspacing attribute
+     */
+    public static final Attribute CELLSPACING = new Attribute("cellspacing");
+
+    /**
+     * The checked attribute
+     */
+    public static final Attribute CHECKED = new Attribute("checked");
+
+    /**
+     * The class attribute
+     */
+    public static final Attribute CLASS = new Attribute("class");
+
+    /**
+     * The classid attribute
+     */
+    public static final Attribute CLASSID = new Attribute("classid");
+
+    /**
+     * The clear attribute
+     */
+    public static final Attribute CLEAR = new Attribute("clear");
+
+    /**
+     * The code attribute
+     */
+    public static final Attribute CODE = new Attribute("code");
+
+    /**
+     * The codebase attribute
+     */
+    public static final Attribute CODEBASE = new Attribute("codebase");
+
+    /**
+     * The codetype attribute
+     */
+    public static final Attribute CODETYPE = new Attribute("codetype");
+
+    /**
+     * The color attribute
+     */
+    public static final Attribute COLOR = new Attribute("color");
+
+    /**
+     * The cols attribute
+     */
+    public static final Attribute COLS = new Attribute("cols");
+
+    /**
+     * The colspan attribute
+     */
+    public static final Attribute COLSPAN = new Attribute("colspan");
+
+    /**
+     * The comment attribute
+     */
+    public static final Attribute COMMENT = new Attribute("comment");
+
+    /**
+     * The compact attribute
+     */
+    public static final Attribute COMPACT = new Attribute("compact");
+
+    /**
+     * The content attribute
+     */
+    public static final Attribute CONTENT = new Attribute("content");
+
+    /**
+     * The coords attribute
+     */
+    public static final Attribute COORDS = new Attribute("coords");
+
+    /**
+     * The data attribute
+     */
+    public static final Attribute DATA = new Attribute("data");
+
+    /**
+     * The declare attribute
+     */
+    public static final Attribute DECLARE = new Attribute("declare");
+
+    /**
+     * The dir attribute
+     */
+    public static final Attribute DIR = new Attribute("dir");
+
+    /**
+     * The dummy attribute
+     */
+    public static final Attribute DUMMY = new Attribute("dummy");
+
+    /**
+     * The enctype attribute
+     */
+    public static final Attribute ENCTYPE = new Attribute("enctype");
+
+    /**
+     * The endtag attribute
+     */
+    public static final Attribute ENDTAG = new Attribute("endtag");
+
+    /**
+     *  The face attribute
+     */
+    public static final Attribute FACE = new Attribute("face");
+
+    /**
+     *  The frameborder attribute
+     */
+    public static final Attribute FRAMEBORDER = new Attribute("frameborder");
+
+    /**
+     *  The halign attribute
+     */
+    public static final Attribute HALIGN = new Attribute("halign");
+
+    /**
+     *  The height attribute
+     */
+    public static final Attribute HEIGHT = new Attribute("height");
+
+    /**
+     *  The href attribute
+     */
+    public static final Attribute HREF = new Attribute("href");
+
+    /**
+     *  The hspace attribute
+     */
+    public static final Attribute HSPACE = new Attribute("hspace");
+
+    /**
+     *  The http-equiv attribute
+     */
+    public static final Attribute HTTPEQUIV = new Attribute("http-equiv");
+
+    /**
+     *  The id attribute
+     */
+    public static final Attribute ID = new Attribute("id");
+
+    /**
+     *  The ismap attribute
+     */
+    public static final Attribute ISMAP = new Attribute("ismap");
+
+    /**
+     *  The lang attribute
+     */
+    public static final Attribute LANG = new Attribute("lang");
+
+    /**
+     *  The language attribute
+     */
+    public static final Attribute LANGUAGE = new Attribute("language");
+
+    /**
+     *  The link attribute
+     */
+    public static final Attribute LINK = new Attribute("link");
+
+    /**
+     *  The lowsrc attribute
+     */
+    public static final Attribute LOWSRC = new Attribute("lowsrc");
+
+    /**
+     *  The marginheight attribute
+     */
+    public static final Attribute MARGINHEIGHT = new Attribute("marginheight");
+
+    /**
+     *  The marginwidth attribute
+     */
+    public static final Attribute MARGINWIDTH = new Attribute("marginwidth");
+
+    /**
+     *  The maxlength attribute
+     */
+    public static final Attribute MAXLENGTH = new Attribute("maxlength");
+
+    /**
+     *  The media attribute
+     */
+    public static final Attribute MEDIA = new Attribute("media");
+
+    /**
+     *  The method attribute
+     */
+    public static final Attribute METHOD = new Attribute("method");
+
+    /**
+     *  The multiple attribute
+     */
+    public static final Attribute MULTIPLE = new Attribute("multiple");
+
+    /**
+     *  The n attribute
+     */
+    public static final Attribute N = new Attribute("n");
+
+    /**
+     *  The name attribute
+     */
+    public static final Attribute NAME = new Attribute("name");
+
+    /**
+     *  The nohref attribute
+     */
+    public static final Attribute NOHREF = new Attribute("nohref");
+
+    /**
+     *  The noresize attribute
+     */
+    public static final Attribute NORESIZE = new Attribute("noresize");
+
+    /**
+     *  The noshade attribute
+     */
+    public static final Attribute NOSHADE = new Attribute("noshade");
+
+    /**
+     *  The nowrap attribute
+     */
+    public static final Attribute NOWRAP = new Attribute("nowrap");
+
+    /**
+     *  The prompt attribute
+     */
+    public static final Attribute PROMPT = new Attribute("prompt");
+
+    /**
+     *  The rel attribute
+     */
+    public static final Attribute REL = new Attribute("rel");
+
+    /**
+     *  The rev attribute
+     */
+    public static final Attribute REV = new Attribute("rev");
+
+    /**
+     *  The rows attribute
+     */
+    public static final Attribute ROWS = new Attribute("rows");
+
+    /**
+     *  The rowspan attribute
+     */
+    public static final Attribute ROWSPAN = new Attribute("rowspan");
+
+    /**
+     *  The scrolling attribute
+     */
+    public static final Attribute SCROLLING = new Attribute("scrolling");
+
+    /**
+     *  The selected attribute
+     */
+    public static final Attribute SELECTED = new Attribute("selected");
+
+    /**
+     *  The shape attribute
+     */
+    public static final Attribute SHAPE = new Attribute("shape");
+
+    /**
+     *  The shapes attribute
+     */
+    public static final Attribute SHAPES = new Attribute("shapes");
+
+    /**
+     *  The size attribute
+     */
+    public static final Attribute SIZE = new Attribute("size");
+
+    /**
+     *  The src attribute
+     */
+    public static final Attribute SRC = new Attribute("src");
+
+    /**
+     *  The standby attribute
+     */
+    public static final Attribute STANDBY = new Attribute("standby");
+
+    /**
+     *  The start attribute
+     */
+    public static final Attribute START = new Attribute("start");
+
+    /**
+     *  The style attribute
+     */
+    public static final Attribute STYLE = new Attribute("style");
+
+    /**
+     *  The target attribute
+     */
+    public static final Attribute TARGET = new Attribute("target");
+
+    /**
+     *  The text attribute
+     */
+    public static final Attribute TEXT = new Attribute("text");
+
+    /**
+     *  The title attribute
+     */
+    public static final Attribute TITLE = new Attribute("title");
+
+    /**
+     *  The type attribute
+     */
+    public static final Attribute TYPE = new Attribute("type");
+
+    /**
+     *  The usemap attribute
+     */
+    public static final Attribute USEMAP = new Attribute("usemap");
+
+    /**
+     *  The valign attribute
+     */
+    public static final Attribute VALIGN = new Attribute("valign");
+
+    /**
+     *  The value attribute
+     */
+    public static final Attribute VALUE = new Attribute("value");
+
+    /**
+     *  The valuetype attribute
+     */
+    public static final Attribute VALUETYPE = new Attribute("valuetype");
+
+    /**
+     *  The version attribute
+     */
+    public static final Attribute VERSION = new Attribute("version");
+
+    /**
+     *  The vlink attribute
+     */
+    public static final Attribute VLINK = new Attribute("vlink");
+
+    /**
+     *  The vspace attribute
+     */
+    public static final Attribute VSPACE = new Attribute("vspace");
+
+    /**
+     *  The width attribute
+     */
+    public static final Attribute WIDTH = new Attribute("width");
+    private final String name;
+
+    /**
+     * Creates the attribute with the given name.
+     */
+    protected Attribute(String a_name)
     {
-      this.id = id;
+      name = a_name;
     }
-  }
 
-  public static class UnknownTag extends Tag implements Serializable
-  {
     /**
-     * For compatability with Sun's JDK 1.4.2 rev. 5
+     * Calls compareTo on the tag names (Strings)
      */
-    private static final long serialVersionUID = -1534369342247250625L;
-
-    public UnknownTag(String id)
+    public int compareTo(Object other)
     {
-      super(id);
+      return name.compareTo(((Attribute) other).name);
     }
+
+    /**
+     * The attributes are equal if the names are equal
+     * (ignoring case)
+     */
+    public boolean equals(Object other)
+    {
+      if (other == this)
+        return true;
+
+      if (!(other instanceof Attribute))
+        return false;
+
+      Attribute that = (Attribute) other;
+
+      return that.name.equalsIgnoreCase(name);
+    }
+
+    /**
+     * Returns the hash code which corresponds to the string for this tag.
+     */
+    public int hashCode()
+    {
+      return name == null ? 0 : name.hashCode();
+    }
+
+    /**
+     * Returns the attribute name. The names of the built-in attributes
+     * are always returned in lowercase.
+     */
+    public String toString()
+    {
+      return name;
+    }
+
+    /**
+     *  Return an array of all attributes, declared in the HTML.Attribute
+     *  class. WARNING: attributes are the only public fields,
+     *  expected in this class.
+     */
+    static Attribute[] getAllAttributes()
+    {
+      Field[] f = Attribute.class.getFields();
+      Attribute[] attrs = new Attribute[ f.length ];
+      Field x;
+      int p = 0;
+      Attribute a;
+
+      for (int i = 0; i < f.length; i++)
+        {
+          x = f [ i ];
+
+          if ((x.getModifiers() & Modifier.STATIC) != 0)
+            {
+              if (x.getType().equals(Attribute.class))
+                {
+                  try
+                    {
+                      a = (Attribute) x.get(null);
+                      attrs [ p++ ] = a;
+                    }
+                  catch (Exception ex)
+                    {
+                      ex.printStackTrace(System.err);
+                      throw new Error("This should never happen, report a bug");
+                    }
+                }
+            }
+        }
+
+      return attrs;
+    }
+  }
+
+  /**
+   * Represents a HTML tag.
+   */
+  public static class Tag
+    implements Comparable, Serializable
+  {
+    /**
+     * The &lt;a&gt; tag
+     */
+    public static final Tag A = new Tag("a");
+
+    /**
+     * The &lt;address&gt; tag
+     */
+    public static final Tag ADDRESS = new Tag("address");
+
+    /**
+     * The &lt;applet&gt; tag
+     */
+    public static final Tag APPLET = new Tag("applet");
+
+    /**
+     * The &lt;area&gt; tag
+     */
+    public static final Tag AREA = new Tag("area");
+
+    /**
+     * The &lt;b&gt; tag
+     */
+    public static final Tag B = new Tag("b");
+
+    /**
+     * The &lt;base&gt; tag
+     */
+    public static final Tag BASE = new Tag("base");
+
+    /**
+     * The &lt;basefont&gt; tag
+     */
+    public static final Tag BASEFONT = new Tag("basefont");
+
+    /**
+     * The &lt;big&gt; tag
+     */
+    public static final Tag BIG = new Tag("big");
+
+    /**
+     * The &lt;blockquote&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag BLOCKQUOTE = new Tag("blockquote", BREAKS | BLOCK);
+
+    /**
+     * The &lt;body&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag BODY = new Tag("body", BREAKS | BLOCK);
+
+    /**
+     * The &lt;br&gt; tag , breaks flow.
+     */
+    public static final Tag BR = new Tag("br", BREAKS);
+
+    /**
+     * The &lt;caption&gt; tag
+     */
+    public static final Tag CAPTION = new Tag("caption");
+
+    /**
+     * The &lt;center&gt; tag , breaks flow.
+     */
+    public static final Tag CENTER = new Tag("center", BREAKS);
+
+    /**
+     * The &lt;cite&gt; tag
+     */
+    public static final Tag CITE = new Tag("cite");
+
+    /**
+     * The &lt;code&gt; tag
+     */
+    public static final Tag CODE = new Tag("code");
+
+    /**
+     * The &lt;dd&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag DD = new Tag("dd", BREAKS | BLOCK);
+
+    /**
+     * The &lt;dfn&gt; tag
+     */
+    public static final Tag DFN = new Tag("dfn");
+
+    /**
+     * The &lt;dir&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag DIR = new Tag("dir", BREAKS | BLOCK);
+
+    /**
+     * The &lt;div&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag DIV = new Tag("div", BREAKS | BLOCK);
+
+    /**
+     * The &lt;dl&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag DL = new Tag("dl", BREAKS | BLOCK);
+
+    /**
+     * The &lt;dt&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag DT = new Tag("dt", BREAKS | BLOCK);
+
+    /**
+     * The &lt;em&gt; tag
+     */
+    public static final Tag EM = new Tag("em");
+
+    /**
+     * The &lt;font&gt; tag
+     */
+    public static final Tag FONT = new Tag("font");
+
+    /**
+     * The &lt;form&gt; tag , breaks flow.
+     */
+    public static final Tag FORM = new Tag("form", BREAKS);
+
+    /**
+     * The &lt;frame&gt; tag
+     */
+    public static final Tag FRAME = new Tag("frame");
+
+    /**
+     * The &lt;frameset&gt; tag
+     */
+    public static final Tag FRAMESET = new Tag("frameset");
+
+    /**
+     * The &lt;h1&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag H1 = new Tag("h1", BREAKS | BLOCK);
+
+    /**
+     * The &lt;h2&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag H2 = new Tag("h2", BREAKS | BLOCK);
+
+    /**
+     * The &lt;h3&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag H3 = new Tag("h3", BREAKS | BLOCK);
+
+    /**
+     * The &lt;h4&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag H4 = new Tag("h4", BREAKS | BLOCK);
+
+    /**
+     * The &lt;h5&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag H5 = new Tag("h5", BREAKS | BLOCK);
+
+    /**
+     * The &lt;h6&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag H6 = new Tag("h6", BREAKS | BLOCK);
+
+    /**
+     * The &lt;head&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag HEAD = new Tag("head", BREAKS | BLOCK);
+
+    /**
+     * The &lt;hr&gt; tag , breaks flow.
+     */
+    public static final Tag HR = new Tag("hr", BREAKS);
+
+    /**
+     * The &lt;html&gt; tag , breaks flow.
+     */
+    public static final Tag HTML = new Tag("html", BREAKS);
+
+    /**
+     * The &lt;i&gt; tag
+     */
+    public static final Tag I = new Tag("i");
+
+    /**
+     * The &lt;img&gt; tag
+     */
+    public static final Tag IMG = new Tag("img");
+
+    /**
+     * The &lt;input&gt; tag
+     */
+    public static final Tag INPUT = new Tag("input");
+
+    /**
+     * The &lt;isindex&gt; tag , breaks flow.
+     */
+    public static final Tag ISINDEX = new Tag("isindex", BREAKS);
+
+    /**
+     * The &lt;kbd&gt; tag
+     */
+    public static final Tag KBD = new Tag("kbd");
+
+    /**
+     * The &lt;li&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag LI = new Tag("li", BREAKS | BLOCK);
+
+    /**
+     * The &lt;link&gt; tag
+     */
+    public static final Tag LINK = new Tag("link");
+
+    /**
+     * The &lt;map&gt; tag
+     */
+    public static final Tag MAP = new Tag("map");
+
+    /**
+     * The &lt;menu&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag MENU = new Tag("menu", BREAKS | BLOCK);
+
+    /**
+     * The &lt;meta&gt; tag
+     */
+    public static final Tag META = new Tag("meta");
+
+    /**
+     * The &lt;nobr&gt; tag
+     */
+    public static final Tag NOBR = new Tag("nobr");
+
+    /**
+     * The &lt;noframes&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag NOFRAMES = new Tag("noframes", BREAKS | BLOCK);
+
+    /**
+     * The &lt;object&gt; tag
+     */
+    public static final Tag OBJECT = new Tag("object");
+
+    /**
+     * The &lt;ol&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag OL = new Tag("ol", BREAKS | BLOCK);
+
+    /**
+     * The &lt;option&gt; tag
+     */
+    public static final Tag OPTION = new Tag("option");
+
+    /**
+     * The &lt;p&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag P = new Tag("p", BREAKS | BLOCK);
+
+    /**
+     * The &lt;param&gt; tag
+     */
+    public static final Tag PARAM = new Tag("param");
+
+    /**
+     * The &lt;pre&gt; tag , breaks flow, block tag, preformatted.
+     */
+    public static final Tag PRE = new Tag("pre", BREAKS | BLOCK | PREFORMATTED);
+
+    /**
+     * The &lt;s&gt; tag
+     */
+    public static final Tag S = new Tag("s");
+
+    /**
+     * The &lt;samp&gt; tag
+     */
+    public static final Tag SAMP = new Tag("samp");
+
+    /**
+     * The &lt;script&gt; tag
+     */
+    public static final Tag SCRIPT = new Tag("script");
+
+    /**
+     * The &lt;select&gt; tag
+     */
+    public static final Tag SELECT = new Tag("select");
+
+    /**
+     * The &lt;small&gt; tag
+     */
+    public static final Tag SMALL = new Tag("small");
+
+    /**
+     * The &lt;span&gt; tag
+     */
+    public static final Tag SPAN = new Tag("span");
+
+    /**
+     * The &lt;strike&gt; tag
+     */
+    public static final Tag STRIKE = new Tag("strike");
+
+    /**
+     * The &lt;strong&gt; tag
+     */
+    public static final Tag STRONG = new Tag("strong");
+
+    /**
+     * The &lt;style&gt; tag
+     */
+    public static final Tag STYLE = new Tag("style");
+
+    /**
+     * The &lt;sub&gt; tag
+     */
+    public static final Tag SUB = new Tag("sub");
+
+    /**
+     * The &lt;sup&gt; tag
+     */
+    public static final Tag SUP = new Tag("sup");
+
+    /**
+     * The &lt;table&gt; tag , block tag.
+     */
+    public static final Tag TABLE = new Tag("table", BLOCK);
+
+    /**
+     * The &lt;td&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag TD = new Tag("td", BREAKS | BLOCK);
+
+    /**
+     * The &lt;textarea&gt; tag , preformatted.
+     */
+    public static final Tag TEXTAREA = new Tag("textarea", PREFORMATTED);
+
+    /**
+     * The &lt;th&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag TH = new Tag("th", BREAKS | BLOCK);
+
+    /**
+     * The &lt;title&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag TITLE = new Tag("title", BREAKS | BLOCK);
+
+    /**
+     * The &lt;tr&gt; tag , block tag.
+     */
+    public static final Tag TR = new Tag("tr", BLOCK);
+
+    /**
+     * The &lt;tt&gt; tag
+     */
+    public static final Tag TT = new Tag("tt");
+
+    /**
+     * The &lt;u&gt; tag
+     */
+    public static final Tag U = new Tag("u");
+
+    /**
+     * The &lt;ul&gt; tag , breaks flow, block tag.
+     */
+    public static final Tag UL = new Tag("ul", BREAKS | BLOCK);
+
+    /**
+     * The &lt;var&gt; tag
+     */
+    public static final Tag VAR = new Tag("var");
+
+    /* Special tags */
+
+    /**
+     * Total number of syntetic tags, delared in the Tag class.
+     * This must be adjusted if the new synthetic tags are declared.
+     * Otherwise the HTML.getAllTags() will not work as expected.
+     */
+    private static final int TOTAL_SYNTHETIC_TAGS = 3;
+
+    /**
+     * All comments are labeled with this tag.
+     * This tag is not included into the array, returned by getAllTags().
+     * toString() returns 'comment'. HTML reader synthesizes this tag.
+     */
+    public static final Tag COMMENT = new Tag("comment", SYNTETIC);
+
+    /**
+     *  All text content is labeled with this tag.
+     *  This tag is not included into the array, returned by getAllTags().
+     *  toString() returns 'content'. HTML reader synthesizes this tag.
+     */
+    public static final Tag CONTENT = new Tag("content", SYNTETIC);
+
+    /**
+     * All text content must be in a paragraph element.
+     * If a paragraph didn't exist when content was encountered,
+     * a paragraph is manufactured.
+     * toString() returns 'implied'. HTML reader synthesizes this tag.
+     */
+    public static final Tag IMPLIED = new Tag("implied", SYNTETIC);
+    final String name;
+    final int flags;
+
+    /**
+     * Creates a new Tag with the specified id, and with causesBreak
+     * and isBlock set to false.
+     */
+    protected Tag(String id)
+    {
+      name = id;
+      flags = 0;
+    }
+
+    /**
+     * Creates a new Tag with the specified tag name and
+     * causesBreak and isBlock properties.
+     */
+    protected Tag(String id, boolean causesBreak, boolean isBlock)
+    {
+      int f = 0;
+
+      if (causesBreak)
+        {
+          f |= BREAKS;
+        }
+
+      if (isBlock)
+        {
+          f |= BLOCK;
+        }
+
+      flags = f;
+      name = id;
+    }
+
+    /**
+     * Create a tag taking flags.
+     */
+    Tag(String id, int a_flags)
+    {
+      name = id;
+      flags = a_flags;
+    }
+
+    /**
+     * Returns true if this tag is a block tag, which is a tag used to
+     * add structure to a document.
+     */
+    public boolean isBlock()
+    {
+      return (flags & BLOCK) != 0;
+    }
+
+    /**
+     * Returns true if this tag is pre-formatted, which is true if
+     * the tag is either PRE or TEXTAREA
+     */
+    public boolean isPreformatted()
+    {
+      return (flags & PREFORMATTED) != 0;
+    }
+
+    /**
+     * Returns true if this tag causes a line break to the flow of text
+     */
+    public boolean breaksFlow()
+    {
+      return (flags & BREAKS) != 0;
+    }
+
+    /**
+     * Calls compareTo on the tag names (Strings)
+     */
+    public int compareTo(Object other)
+    {
+      return name.compareTo(((Tag) other).name);
+    }
+
+    /**
+     * The tags are equal if the names are equal (ignoring case).
+     */
+    public boolean equals(Object other)
+    {
+      if (other == this)
+        {
+          return true;
+        }
+
+      if (!(other instanceof Tag))
+        {
+          return false;
+        }
+
+      Tag that = (Tag) other;
+
+      return that.name.equalsIgnoreCase(name);
+    }
+
+    /**
+     * Returns the hash code which corresponds to the string for this tag.
+     */
+    public int hashCode()
+    {
+      return name == null ? 0 : name.hashCode();
+    }
+
+    /**
+     * Returns the tag name. The names of the built-in tags are always
+     * returned in lowercase.
+     */
+    public String toString()
+    {
+      return name;
+    }
+
+    /**
+     * Return an array of HTML tags, declared in HTML.Tag class.
+     * WARNING: This method expects that the Tags are the only
+     * public fields declared in the Tag class.
+     */
+    static Tag[] getAllTags()
+    {
+      Field[] f = Tag.class.getFields();
+      Field x;
+
+      // The syntetic tags are not included.
+      Tag[] tags = new Tag[ f.length - TOTAL_SYNTHETIC_TAGS ];
+      int p = 0;
+      Tag t;
+
+      for (int i = 0; i < f.length; i++)
+        {
+          x = f [ i ];
+
+          if ((x.getModifiers() & Modifier.STATIC) != 0)
+            {
+              if (x.getType().equals(Tag.class))
+                {
+                  try
+                    {
+                      t = (Tag) x.get(null);
+
+                      if (!t.isSyntetic())
+                        {
+                          tags [ p++ ] = t;
+                        }
+                    }
+                  catch (IllegalAccessException ex)
+                    {
+                      unexpected(ex);
+                    }
+                  catch (IllegalArgumentException ex)
+                    {
+                      unexpected(ex);
+                    }
+                }
+            }
+        }
+
+      return tags;
+    }
+
+    /**
+     * Returns true for tags, generated by the html reader
+     * (COMMENT, CONTENT and IMPLIED).
+     */
+    boolean isSyntetic()
+    {
+      return (flags & SYNTETIC) != 0;
+    }
+
+    private static void unexpected(Exception ex)
+                            throws Error
+    {
+      throw new Error("This should never happen, report a bug", ex);
+    }
+  }
+
+  /**
+   * Represents an unknown HTML tag.
+   * @author Mark Wielaard (mark@klomp.org)
+   */
+  public static class UnknownTag
+    extends Tag
+    implements Serializable
+  {
+    private static final long serialVersionUID = -1534369342247250625L;
+
+    /**
+     * Creates a new UnknownTag with the specified name
+     * @param name The tag name.
+     *
+     */
+    public UnknownTag(String name)
+    {
+      super(name);
+    }
+  }
+
+  /**
+   * This value is returned for attributes without value that have no
+   * default value defined in the DTD.
+   */
+  public static final String NULL_ATTRIBUTE_VALUE = "#DEFAULT";
+
+  /* Package level html tag flags */
+  static final int BREAKS = 1;
+  static final int BLOCK = 2;
+  static final int PREFORMATTED = 4;
+  static final int SYNTETIC = 8;
+  private static Map tagMap;
+  private static Map attrMap;
+
+  /**
+   * The public constructor (does nothing). It it seldom required to have
+   * an instance of this class, because all public fields and methods
+   * are static.
+   */
+  public HTML()
+  {
+  }
+
+  /**
+   * Returns the set of the recognized HTML attributes.
+   */
+  public static HTML.Attribute[] getAllAttributeKeys()
+  {
+    return Attribute.getAllAttributes();
+  }
+
+  /**
+   * Returns the set of actual HTML tags that are recognized by
+   * the default HTML reader. The returned array does not include the
+   * COMMENT, CONTENT and IMPLIED tags.
+   */
+  public static HTML.Tag[] getAllTags()
+  {
+    return Tag.getAllTags();
+  }
+
+  /**
+   * Returns an htl attribute constant for the given attribute name.
+   * @param attName the attribute name, case insensitive
+   */
+  public static Attribute getAttributeKey(String attName)
+  {
+    if (attrMap == null)
+      {
+        // Create the map on demand.
+        attrMap = new TreeMap();
+
+        Attribute[] attrs = getAllAttributeKeys();
+
+        for (int i = 0; i < attrs.length; i++)
+          {
+            attrMap.put(attrs [ i ].toString(), attrs [ i ]);
+          }
+      }
+
+    return (Attribute) attrMap.get(attName.toLowerCase());
+  }
+
+  /**
+   * Searches the value of given attribute in the provided set.
+   * If the value is found (String type expected), tries to parse it as
+   * an integer value. If succeded, returns the obtained integer value.
+   *
+   * For example:<p><code>
+   * SimpleAttributeSet ase = new SimpleAttributeSet();
+   * ase.addAttribute(HTML.getAttributeKey("size"),"222");
+   * System.out.println(
+   *  HTML.getIntegerAttributeValue
+   *     (ase, HTML.getAttributeKey("size"), 333)); // prints "222"
+   * System.out.println(
+   *  HTML.getIntegerAttributeValue
+   *     (ase, HTML.getAttributeKey("width"), 333)); // prints "333".
+   * </code></p>
+   *
+   *
+   * @param set The attribute set to search in. If the set contains the
+   * given attribute, it must by a type of String.
+   * @param attribute The html attribute to search in
+   * @param defaultValue The value that is returned if the attribute is not
+   * found in the given set or if the NumberFormatException was thrown
+   * during the parsing.
+   */
+  public static int getIntegerAttributeValue(AttributeSet set,
+                                             HTML.Attribute attribute,
+                                             int defaultValue
+                                            )
+  {
+    Object v = set.getAttribute(attribute);
+
+    if (v == null)
+      {
+        return defaultValue;
+      }
+
+    try
+      {
+        return Integer.parseInt(v.toString().trim());
+      }
+    catch (Exception ex)
+      {
+        return defaultValue;
+      }
+  }
+
+  /**
+   * Returns a HTML tag constant for the given HTML attribute name.
+   * If the tag is unknown, the null is returned.
+   * @param tagName the tag name, case insensitive
+   */
+  public static Tag getTag(String tagName)
+  {
+    if (tagMap == null)
+      {
+        // Create the mao on demand.
+        tagMap = new TreeMap();
+
+        Tag[] tags = getAllTags();
+
+        for (int i = 0; i < tags.length; i++)
+          {
+            tagMap.put(tags [ i ].toString(), tags [ i ]);
+          }
+      }
+
+    return (Tag) tagMap.get(tagName.toLowerCase());
   }
 }
diff --git a/libjava/javax/swing/text/html/HTMLDocument.java b/libjava/javax/swing/text/html/HTMLDocument.java
new file mode 100644 (file)
index 0000000..45c87c7
--- /dev/null
@@ -0,0 +1,53 @@
+/* HTMLDocument.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 javax.swing.text.html;
+
+import javax.swing.text.DefaultStyledDocument;
+
+/**
+ * TODO: This class is not yet completetely implemented.
+ *
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class HTMLDocument extends DefaultStyledDocument
+{
+  public void processHTMLFrameHyperlinkEvent(HTMLFrameHyperlinkEvent event)
+  {
+  }
+}
diff --git a/libjava/javax/swing/text/html/HTMLEditorKit.java b/libjava/javax/swing/text/html/HTMLEditorKit.java
new file mode 100755 (executable)
index 0000000..742eab3
--- /dev/null
@@ -0,0 +1,173 @@
+/* HTMLEditorKit.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 javax.swing.text.html;
+
+import java.io.Reader;
+
+import javax.swing.text.BadLocationException;
+import javax.swing.text.MutableAttributeSet;
+
+/**
+ * This class is NOT implemented. This file currently holds only
+ * declarations of the two enclosing classes, necessary for testing
+ * the implemented javax.swing.text.html.parser package.
+ * @author No authorship is taken, implement the class and be!
+ * TODO: replace this header after implementing the class.
+ */
+public class HTMLEditorKit
+{
+  /**
+   * The abstract HTML parser declaration.
+   */
+  public abstract static class Parser
+  {
+    /**
+     * Parse the HTML text, calling various methods of the provided callback
+     * in response to the occurence of the corresponding HTML constructions.
+     * @param reader The reader to read the source HTML from.
+     * @param callback The callback to receive information about the parsed
+     * HTML structures
+     * @param ignoreCharSet If true, the parser ignores all charset information
+     * that may be present in HTML documents.
+     * @throws IOException, normally if the reader throws one.
+     */
+    public abstract void parse(Reader reader, ParserCallback callback,
+                               boolean ignoreCharSet
+                              )
+                        throws java.io.IOException;
+  }
+
+  /**
+   * The "hook" that receives all information about the HTML document
+   * structure while parsing it. The methods are invoked by parser
+   * and should be normally overridden.
+   */
+  public static class ParserCallback
+  {
+    /**
+     * If the tag does not occurs in the html stream directly, but
+     * is supposed by parser, the tag attribute set contains this additional
+     * attribute, having value Boolean.True.
+     */
+    public static final Object IMPLIED = "_implied_";
+
+    /**
+     * The parser calls this method after it finishes parsing the document.
+     */
+    public void flush()
+               throws BadLocationException
+    {
+    }
+
+    /**
+     * Handle HTML comment, present in the given position.
+     * @param comment the comment
+     * @position the position of the comment in the text being parsed.
+     */
+    public void handleComment(char[] comment, int position)
+    {
+    }
+
+    /**
+     * Notifies about the character sequences, used to separate lines in
+     * this document. The parser calls this method after it finishes
+     * parsing the document, but before flush().
+     * @param end_of_line The "end of line sequence", one of: \r or \n or \r\n.
+     */
+    public void handleEndOfLineString(String end_of_line)
+    {
+    }
+
+    /**
+     * 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 being handled
+     * @position the tag position in the text being parsed.
+     */
+    public void handleEndTag(HTML.Tag tag, int position)
+    {
+    }
+
+    /**
+     * Handle the error.
+     * @param message The message, explaining the error.
+     * @param position The starting position of the fragment that has caused
+     * the error in the html document being parsed.
+     */
+    public void handleError(String message, int position)
+    {
+    }
+
+    /**
+     * 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 tag The tag being handled.
+     * @param position The tag position in the text being parsed.
+     */
+    public void handleSimpleTag(HTML.Tag tag, MutableAttributeSet attributes,
+                                int position
+                               )
+    {
+    }
+
+    /**
+     * 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 tag The tag being handled
+     * @param position The tag position in the text bein parsed
+     */
+    public void handleStartTag(HTML.Tag tag, MutableAttributeSet attributes,
+                               int position
+                              )
+    {
+    }
+
+    /**
+     * Handle the text section.
+     * @param text A section text.
+     * @param position The text position in the HTML document text being parsed.
+     */
+    public void handleText(char[] text, int position)
+    {
+    }
+  }
+}
diff --git a/libjava/javax/swing/text/html/HTMLFrameHyperlinkEvent.java b/libjava/javax/swing/text/html/HTMLFrameHyperlinkEvent.java
new file mode 100644 (file)
index 0000000..82de2a8
--- /dev/null
@@ -0,0 +1,132 @@
+/* HTMLFrameHyperlinkEvent.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 javax.swing.text.html;
+
+import java.net.URL;
+
+import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkEvent.EventType;
+import javax.swing.text.Element;
+
+/**
+ * HTMLFrameHyperlinkEvent transfers information about the link that was
+ * activated in a frame.
+ *
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class HTMLFrameHyperlinkEvent
+  extends HyperlinkEvent
+{
+  private final String target_frame;
+
+  /**
+   * Creates a new hypertext link event.
+   *
+   * @param source The object this link is associated to.
+   * @param type The type of event.
+   * @param url The URL this link pointing too.
+   * @param element The element in the document representing the anchor.
+   * @param frame - the Frame to display the document in.
+   */
+  public HTMLFrameHyperlinkEvent(Object source, EventType type, URL url,
+                                 Element element, String frame)
+  {
+    super(source, type, url, frame, element);
+    target_frame = frame;
+  }
+
+  /**
+   * Creates a new hypertext link event.
+   *
+   * @param source The object this link is associated to.
+   * @param type The type of event.
+   * @param url The URL this link pointing too.
+   * @param frame - the Frame to display the document in.
+   */
+  public HTMLFrameHyperlinkEvent(Object source, EventType type, URL url,
+                                 String frame)
+  {
+    super(source, type, url, frame);
+    target_frame = frame;
+  }
+
+  /**
+   * Creates a new hypertext link event.
+   *
+   * @param source The object this link is associated to.
+   * @param type The type of event.
+   * @param url The URL this link pointing too.
+   * @param description The description for this link.
+   * @param element The element in the document representing the anchor.
+   * @param frame - the Frame to display the document in.
+   */
+  public HTMLFrameHyperlinkEvent(Object source, EventType type, URL url,
+                                 String description, Element element,
+                                 String frame)
+  {
+    super(source, type, url, description, element);
+    target_frame = frame;
+  }
+
+  /**
+   * Creates a new hypertext link event.
+   *
+   * @param source The object this link is associated to.
+   * @param type The type of event.
+   * @param url The URL this link pointing too.
+   * @param description The description for this link.
+   * @param frame - the Frame to display the document in.
+   */
+  public HTMLFrameHyperlinkEvent(Object source, EventType type, URL url,
+                                 String description, String frame)
+  {
+    super(source, type, url, description);
+    target_frame = frame;
+  }
+
+  /**
+   * Gets the string, passed as the target frame identifier.
+   *
+   * @return the target for the link.
+   */
+  public String getTarget()
+  {
+    return target_frame;
+  }
+}
diff --git a/libjava/javax/swing/text/html/parser/AttributeList.java b/libjava/javax/swing/text/html/parser/AttributeList.java
new file mode 100755 (executable)
index 0000000..c74f359
--- /dev/null
@@ -0,0 +1,294 @@
+/* AttributeList.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 javax.swing.text.html.parser;
+
+import gnu.javax.swing.text.html.parser.support.gnuStringIntMapper;
+
+import java.io.Serializable;
+
+import java.util.Enumeration;
+import java.util.Vector;
+
+/**
+ * <p>
+ * Stores the attribute information, obtained by parsing SGML (DTD) tag
+ * <code>&lt;!ATTLIST .. &gt;</code></p>
+ * <p>
+ * Elements can have a associated named properties (attributes) having the
+ * assigned values. The element start tag can have any number of attribute
+ * value pairs, separated by spaces. They can appear in any order.
+ * SGML requires you to delimit the attribute values using either double (")
+ * or single (') quotation marks.  In HTML, it is possible
+ * (but not recommended) to specify the value of an attribute without
+ * quotation marks. Such attribute value may only contain
+ * letters, digits, hyphens (-) and periods (.) .
+ * </p>
+ * <p>
+ * The <code>AttributeList</code> defines a single attribute that additionally
+ * has a pointer referencing the possible subsequent attribute.
+ * The whole structure is just a simple linked list, storing all attributes of
+ * some <code>Element</code>.
+ * Use the <code>getNext()</code> method repeatedly to see all attributes in
+ * the list.
+ * </p>
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public final class AttributeList
+  implements DTDConstants, Serializable
+{
+  /** Maps between type names and they string values. */
+  private static final gnuStringIntMapper mapper =
+    new gnuStringIntMapper()
+    {
+      protected void create()
+      {
+        add("CDATA", DTDConstants.CDATA);
+        add("ENTITY", DTDConstants.ENTITY);
+        add("ENTITIES", DTDConstants.ENTITIES);
+        add("ID", DTDConstants.ID);
+        add("IDREF", DTDConstants.IDREF);
+        add("IDREFS", DTDConstants.IDREFS);
+        add("NAME", DTDConstants.NAME);
+        add("NAMES", DTDConstants.NAMES);
+        add("NMTOKEN", DTDConstants.NMTOKEN);
+        add("NMTOKENS", DTDConstants.NMTOKENS);
+        add("NOTATION", DTDConstants.NOTATION);
+        add("NUMBER", DTDConstants.NUMBER);
+        add("NUMBERS", DTDConstants.NUMBERS);
+        add("NUTOKEN", DTDConstants.NUTOKEN);
+        add("NUTOKENS", DTDConstants.NUTOKENS);
+      }
+    };
+
+  /** Use serialVersionUID for interoperability. */
+  private static final long serialVersionUID = -1361214058742015233L;
+
+  /**
+   * The value of ( = pointer to ) the next attribute in the linked list,
+   * storing all attributes of some Element. Contains null for the
+   * last attribute.
+   */
+  public AttributeList next;
+
+  /**
+   * The name of the attribute. The attribute names are case insensitive.
+   */
+  public String name;
+
+  /**
+   * The default value of this attribute. Equals to null if no default value
+   * is specified.
+   */
+  public String value;
+
+  /**
+   * The explicit set of the allowed values of this attribute. Equals to
+   * null, if this parameter was not specified.
+   * Values, defined in DTD, are case insensitive.
+   */
+  public Vector values;
+
+  /**
+   * The modifier of this attribute. This field contains one of the
+   * following DTD constants:
+   * <ul>
+   * <li> REQUIRED if the attribute value is always required,</li>
+   * <li> IMPLIED if the user agent must supply the default value itself,</li>
+   * <li> FIXED if the attribute value is fixed to some value and cannot
+   * be changed.</li>
+   * <li> DEFAULT if the attribute default value has been supplied.</li>
+   * <li> CURRENT the value that at any point in the document is
+   * the last value supplied for that element. A value is required to be
+   * supplied for the first* occurrence of an element</li>
+   * <li> CONREF specifies the IDREF value of
+   * the reference to content in another location of the document.
+   * The element with this attribute is empty, the content from
+   * that another location must be used instead.</li>
+   * </ul>
+   */
+  public int modifier;
+
+  /**
+   * The type of the attribute. The possible values of this field
+   * (NUMBER, NAME, ID, CDATA and so on) are defined in DTDConstants.
+   */
+  public int type;
+
+  /**
+   * Creates the attribute with the given name, initializing other fields
+   * to the default values ( 0 and null ).
+   *
+   * @param a_name The name of the attribute.
+   */
+  public AttributeList(String a_name)
+  {
+    name = a_name;
+  }
+
+  /**
+   * Creates the attribute with the given properties.
+   * @param a_name The name of the attribute
+   * @param a_type The type of the attribute. The possible values are defined
+   * in <code> DTDConstants</code>.
+   * @param a_modifier The modifier of this attribute. The possible values
+   * are defined in <code> DTDConstants</code>.
+   * @param a_default The default value of this attribute
+   * @param allowed_values The explicit set of the allowed values of
+   * this attribute
+   * @param a_next The value of the subsequent instance of the AttributeList,
+   * representing the next attribute definition for the same element.
+   * Equals to null for the last attribute definition.
+   */
+  public AttributeList(String a_name, int a_type, int a_modifier,
+                       String a_default, Vector allowed_values,
+                       AttributeList a_next
+                      )
+  {
+    this(a_name);
+    type = a_type;
+    modifier = a_modifier;
+    value = a_default;
+    values = allowed_values;
+    next = a_next;
+  }
+
+  /**
+   * Get the modifier of this attribute. This field contains one of the
+   * following DTD constants:
+   * <ul>
+   * <li> REQUIRED if the attribute value is always required,</li>
+   * <li> IMPLIED if the user agent must supply the default value itself,</li>
+   * <li> FIXED if the attribute value is fixed to some value and cannot
+   * be changed.</li>
+   * <li> DEFAULT if the attribute default value has been supplied.</li>
+   * <li> CURRENT the value that at any point in the document is
+   * the last value supplied for that element. A value is required to be
+   * supplied for the first* occurrence of an element</li>
+   * <li> CONREF specifies the IDREF value of
+   * the reference to content in another location of the document.
+   * The element with this attribute is empty, the content from
+   * that another location must be used instead.</li>
+   * </ul>
+   */
+  public int getModifier()
+  {
+    return modifier;
+  }
+
+  /**
+   * Get the name of the attribute.
+   * The value is returned as it was supplied to a
+   * constructor, preserving the character case.
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * Get the value of ( = pointer to ) the next attribute in the linked list,
+   * storing all attributes of some Element. Contains null for the
+   * last attribute.
+   */
+  public AttributeList getNext()
+  {
+    return next;
+  }
+
+  /**
+   * Get the type of the attribute. The possible values of this field
+   * (NUMBER, NAME, ID, CDATA and so on) are defined in DTDConstants.
+   */
+  public int getType()
+  {
+    return type;
+  }
+
+  /**
+   * Get the default value of this attribute.
+   */
+  public String getValue()
+  {
+    return value;
+  }
+
+  /**
+   * Get the allowed values of this attribute.
+   */
+  public Enumeration getValues()
+  {
+    return values.elements();
+  }
+
+  /**
+   * Converts a string value, representing a valid SGLM attribute type,
+   * into the corresponding value, defined in DTDConstants.
+   * @param typeName the name of the type (character case is ignored).
+   * @return a value from DTDConstants or DTDConstants.ANY if the
+   * string is not representing a known type. The known attribute types
+   * in this implementation are CDATA, ENTITY, ENTITIES, ID, IDREF, IDREFS,
+   *  NAME, NAMES, NMTOKEN, NMTOKENS, NOTATION, NUMBER, NUMBERS, NUTOKEN and
+   *  NUTOKENS.
+   * @throws NullPointerException if the passed parameter is null.
+   */
+  public static int name2type(String typeName)
+  {
+    return mapper.get(typeName.toUpperCase());
+  }
+
+  /**
+   * Returns the attribute name.
+   */
+  public String toString()
+  {
+    return name;
+  }
+
+  /**
+   * Converts a value from DTDConstants into the string representation.
+   * @param type - an integer value of the public static integer field,
+   * defined in the DTDConstants class.
+   * @return a corresponding SGML DTD keyword (UPPERCASE) or null if there
+   * are no attribute type constant having the given value.
+   */
+  public static String type2name(int type)
+  {
+    return mapper.get(type);
+  }
+}
diff --git a/libjava/javax/swing/text/html/parser/ContentModel.java b/libjava/javax/swing/text/html/parser/ContentModel.java
new file mode 100755 (executable)
index 0000000..7c8ff35
--- /dev/null
@@ -0,0 +1,218 @@
+/* ContentModel.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 javax.swing.text.html.parser;
+
+import gnu.javax.swing.text.html.parser.models.transformer;
+
+import java.io.Serializable;
+
+import java.util.Vector;
+
+/**
+ * A representation of the element content. The instances of this class
+ * can be arranged into the linked list, representing a BNF expression.
+ * The content model is constructed as a branched tree structure in the
+ * following way:
+ * <pre>
+ * a = new ContentModel('+', A, null); // a reprensents A+
+ * b = new ContentModel('&amp;', B, a); // b represents B &amp; A+
+ * c = new ContentModel('*', b, null); // c represents ( B &amp; A+) *
+ * d = new ContentModel('|', new ContentModel('*', A, null),
+ *          new ContentModel('?', B, null)); // d represents ( A* | B? )
+ * </pre>
+ * where the valid operations are:
+ * <ul>
+ * <li><code>E* </code> E occurs zero or more times</li>
+ * <li><code>E+ </code> E occurs one or more times</li>
+ * <li><code>E? </code> E occurs once or not atl all</li>
+ * <li><code>A,B</code> A occurs before B</li>
+ * <li><code>A|B</code> both A and B are permitted in any order.
+ * The '|' alone does not permit the repetetive occurence of A or B
+ * (use <code>(A|B)*</code>.</li>
+ * <li><code>A&amp;B</code> both A and B must occur once (in any order)</li>
+ * </ul>
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public final class ContentModel
+  implements Serializable
+{
+  /** Use serialVersionUID for interoperability. */
+  private static final long serialVersionUID = -1130825523866321257L;
+
+  /**
+   * The next content model model ( = pointer to the next element of
+   * the linked list) for the binary expression (',','&amp;' or '|'). Null
+   * for the last element in the list.
+   */
+  public ContentModel next;
+
+  /**
+   * The document content, containing either Element or the enclosed
+   * content model (that would be in the parentheses in BNF expression).
+   */
+  public Object content;
+
+  /**
+   * Specifies the BNF operation between this node and the node,
+   * stored in the field <code>next</code> (or for this node, if it is
+   * an unary operation.
+   */
+  public int type;
+
+  /** Create a content model initializing all fields to default values. */
+  public ContentModel()
+  {
+  }
+
+  /**
+   * Create a content model, consisting of the single element.
+   * Examples:
+   *<code>
+   * a = new ContentModel('+', A, null); // a reprensents A+
+   * b = new ContentModel('&amp;', B, a);    // b represents  B &amp; A+
+   * c = new ContentModel('*', b, null); // c represents  ( B &amp; A+) *
+   * d = new ContentModel('|', A,
+   *    new ContentModel('?',b, null);
+   *     // d represents
+   * </code>
+   */
+  public ContentModel(Element a_content)
+  {
+    content = a_content;
+  }
+
+  /**
+   * Create a content model, involving expression of the given type.
+   * @param a_type The expression operation type ('*','?' or '+'
+   * @param a_content The content for that the expression is applied.
+   */
+  public ContentModel(int a_type, ContentModel a_content)
+  {
+    content = a_content;
+    type = a_type;
+  }
+
+  /**
+   * Create a content model, involving binary expression of the given type.
+   * @param a_type The expression operation type ( ',', '|' or '&amp;').
+   * @param a_content The content of the left part of the expression.
+   * @param a_next The content model, representing the right part of the
+   * expression.
+   */
+  public ContentModel(int a_type, Object a_content, ContentModel a_next)
+  {
+    content = a_content;
+    type = a_type;
+    next = a_next;
+  }
+
+  /**
+   * Adds all list elements to the given vector, ignoring the
+   * operations between the elements. The old vector values are not
+   * discarded.
+   * @param elements - a vector to add the values to.
+   */
+  public void getElements(Vector elements)
+  {
+    ContentModel c = this;
+
+    while (c != null)
+      {
+        elements.add(c.content);
+        c = c.next;
+      }
+  }
+
+  /**
+   * Checks if the content model matches an empty input stream.
+   * The empty content is created using SGML DTD keyword EMPTY.
+   * The empty model is a model with the content field equal to null.
+   *
+   * @return true if the content field is equal to null.
+   */
+  public boolean empty()
+  {
+    return content == null;
+  }
+
+  /**
+   * Get the element, stored in the <code>next.content</code>.
+   * The method is programmed as the part of the standard API, but not
+   * used in this implementation.
+   * @return the value of the field <code>next</code>.
+   */
+  public Element first()
+  {
+    return (Element) next.content;
+  }
+
+  /**
+   * Checks if this object can potentially be the first token in the
+   * ContenModel list. The method is programmed as the part of the
+   *  standard API, but not used in this implementation.
+   */
+  public boolean first(Object token)
+  {
+    ContentModel c = this;
+    while (c.next != null)
+      {
+        if (c.content != null && c.content.toString().equals(token.toString()) &&
+            c.type != ','
+           )
+
+          // Agree if the operation with the preceeding element
+          // is not the comma operation.
+          return true;
+        c = c.next;
+      }
+    return false;
+  }
+
+  /**
+   * Returns a string representation (an expression) of this content model.
+   * The expression has BNF-like syntax, except the absence of the
+   * unary operator is additionally indicated by " ' ". It is
+   * advisable to check the created models for correctness using this
+   * method.
+   */
+  public String toString()
+  {
+    return transformer.transform(this).toString();
+  }
+}
diff --git a/libjava/javax/swing/text/html/parser/DTD.java b/libjava/javax/swing/text/html/parser/DTD.java
new file mode 100755 (executable)
index 0000000..270c815
--- /dev/null
@@ -0,0 +1,607 @@
+/* DTD.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 javax.swing.text.html.parser;
+
+import java.io.DataInputStream;
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.BitSet;
+import java.util.Hashtable;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+/**
+ * <p>Representation or the SGML DTD document.
+ * 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 HTML parser. The subclasses with the fields, pre-
+ * initialized, for example, for HTML 4.01, can be available only between
+ * the implementation specific classes
+ * ( for example, {@link gnu.javax.swing.text.html.parser.HTML_401F }
+ * in this implementation).</p>
+ * <p>
+ * If you need more information about SGML DTD 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>
+ * <p>
+ * Warning: the html, head and other tag fields will only be automatically
+ * assigned if the VM has the correctly implemented reflection mechanism.
+ * As these fields are not used anywhere in the implementation, not
+ * exception will be thrown in the opposite case.
+ * </p>
+ *
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class DTD
+  implements DTDConstants
+{
+  /**
+   * The version of the persistent data format.
+   */
+  public static int FILE_VERSION = 1;
+
+  /**
+   * The table of existing available DTDs.
+   */
+  static Hashtable dtdHash = new Hashtable();
+
+  /**
+   * The applet element for this DTD.
+   */
+  public Element applet;
+
+  /**
+   * The base element for this DTD.
+   */
+  public Element base;
+
+  /**
+   * The body element for this DTD.
+   */
+  public Element body;
+
+  /**
+   * The head element for this DTD.
+   */
+  public Element head;
+
+  /**
+   * The html element for this DTD.
+   */
+  public Element html;
+
+  /**
+   * The isindex element of for this DTD.
+   */
+  public Element isindex;
+
+  /**
+   * The meta element for this DTD.
+   */
+  public Element meta;
+
+  /**
+   * The p element for this DTD.
+   */
+  public Element p;
+
+  /**
+   * The param element for this DTD.
+   */
+  public Element param;
+
+  /**
+   * The pcdata for this DTD.
+   */
+  public Element pcdata;
+
+  /**
+   * The title element for this DTD.
+   */
+  public Element title;
+
+  /**
+   * The element for accessing all DTD elements by name.
+   */
+  public Hashtable elementHash = new Hashtable();
+
+  /**
+   * The entity table for accessing all DTD entities by name.
+   */
+  public Hashtable entityHash = new Hashtable();
+
+  /**
+   *  The name of this DTD.
+   */
+  public String name;
+
+  /**
+   * Contains all elements in this DTD. The
+   * javax.swing.text.html.parser.Element#index field of all elements
+   * in this vector is set to the element position in this vector.
+   */
+  public Vector elements = new Vector();
+
+  /** Create a new DTD with the specified name. */
+  protected DTD(String a_name)
+  {
+    name = a_name;
+  }
+
+  /** Get this DTD by name. The current implementation
+   * only looks in the internal table of DTD documents. If no corresponding
+   * entry is found, the new entry is created, placed into
+   * the table and returned. */
+  public static DTD getDTD(String name)
+                    throws IOException
+  {
+    DTD d = (DTD) dtdHash.get(name);
+
+    if (d == null)
+      {
+        d = new DTD(name);
+        dtdHash.put(d.name, d);
+      }
+
+    return d;
+  }
+
+  /**
+   * Get the element by the element name. If the element is not yet
+   * defined, it is newly created and placed into the element table.
+   * If the element name matches (ingoring case) a public non static
+   * element field in this class, this field is assigned to the value
+   * of the newly created element.
+   */
+  public Element getElement(String element_name)
+  {
+    return newElement(element_name);
+  }
+
+  /**
+   * Get the element by the value of its
+   * {@link javax.swing.text.html.parser.Element#index} field.
+   */
+  public Element getElement(int index)
+  {
+    return (Element) elements.get(index);
+  }
+
+  /**
+   * Get the entity with the given identifier.
+   * @param id that can be returned by
+   * {@link javax.swing.text.html.parser.Entity#name2type(String an_entity)}
+   * @return The entity from this DTD or null if there is no entity with
+   * such id or such entity is not present in the table of this instance.
+   */
+  public Entity getEntity(int id)
+  {
+    String name = Entity.mapper.get(id);
+
+    if (name != null)
+      return (Entity) entityHash.get(name);
+    else
+      return null;
+  }
+
+  /**
+   * Get the named entity by its name.
+   */
+  public Entity getEntity(String entity_name)
+  {
+    return (Entity) entityHash.get(entity_name);
+  }
+
+  /**
+   * Get the name of this instance of DTD
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * Creates, adds into the entity table and returns the
+   * character entity like <code>&amp;lt;</code>
+   *  (means '<code>&lt;</code>' );
+   * @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, int character)
+  {
+    Entity e = newEntity(name, type);
+    e.data = new char[] { (char) character };
+    return e;
+  }
+
+  /**
+   * Define the attributes for the element with the given name.
+   * If the element is not exist, it is created.
+   * @param forElement
+   * @param attributes
+   */
+  public void defineAttributes(String forElement, AttributeList attributes)
+  {
+    Element e = (Element) elementHash.get(forElement.toLowerCase());
+
+    if (e == null)
+      e = newElement(forElement);
+
+    e.atts = attributes;
+  }
+
+  /**
+   * Defines the element and adds it to the element table. Sets the
+   * <code>Element.index</code> field to the value, unique for this
+   * instance of DTD. If the element with the given name already exists,
+   * replaces all other its settings by the method argument values.
+   * @param name the name of the element
+   * @param type the type of the element
+   * @param headless true if the element needs no starting tag
+   * (should not occur in HTML).
+   * @param tailless true if the element needs no ending tag (like
+   * <code>&lt;hr&gt;</code>
+   * @param content the element content
+   * @param exclusions the set of elements that must not occur inside
+   * this element. The <code>Element.index</code> value defines which
+   * bit in this bitset corresponds to that element.
+   * @param inclusions the set of elements that can occur inside this
+   * element. the <code>Element.index</code> value defines which
+   * bit in this bitset corresponds to that element.
+   * @param attributes the element attributes.
+   * @return the newly defined element.
+   */
+  public Element defineElement(String name, int type, boolean headless,
+                               boolean tailless, ContentModel content,
+                               BitSet exclusions, BitSet inclusions,
+                               AttributeList attributes
+                              )
+  {
+    Element e = newElement(name);
+    e.type = type;
+    e.oStart = headless;
+    e.oEnd = tailless;
+    e.content = content;
+    e.exclusions = exclusions;
+    e.inclusions = inclusions;
+    e.atts = attributes;
+
+    return e;
+  }
+
+  /**
+   * Creates, intializes and adds to the entity table the new
+   * entity.
+   * @param name the name of the entity
+   * @param type the type of the entity
+   * @param data the data section of the entity
+   * @return the created entity
+   */
+  public Entity defineEntity(String name, int type, char[] data)
+  {
+    Entity e = newEntity(name, type);
+    e.data = data;
+
+    return e;
+  }
+
+  /** Place this DTD into the DTD table. */
+  public static void putDTDHash(String name, DTD dtd)
+  {
+    dtdHash.put(name, dtd);
+  }
+
+  /**
+   * <p>Reads DTD from an archived format. This format is not standardized
+   * and differs between implementations.</p><p> This implementation
+   * reads and defines all entities and elements using
+   * ObjectInputStream. The elements and entities can be written into the
+   * stream in any order. The objects other than elements and entities
+   * are ignored.</p>
+   * @param stream A data stream to read from.
+   * @throws java.io.IOException If one is thrown by the input stream
+   */
+  public void read(DataInputStream stream)
+            throws java.io.IOException
+  {
+    ObjectInputStream oi = new ObjectInputStream(stream);
+    Object def;
+    try
+      {
+        while (true)
+          {
+            def = oi.readObject();
+            if (def instanceof Element)
+              {
+                Element e = (Element) def;
+                elementHash.put(e.name.toLowerCase(), e);
+                assignField(e);
+              }
+            else if (def instanceof Entity)
+              {
+                Entity e = (Entity) def;
+                entityHash.put(e.name, e);
+              }
+          }
+      }
+    catch (ClassNotFoundException ex)
+      {
+        throw new IOException(ex.getMessage());
+      }
+    catch (EOFException ex)
+      {
+        // ok EOF
+      }
+  }
+
+  /**
+   * Returns the name of this instance of DTD.
+   */
+  public String toString()
+  {
+    return 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
+   * @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
+   */
+  protected AttributeList defAttributeList(String name, int type, int modifier,
+                                           String default_value,
+                                           String allowed_values,
+                                           AttributeList atts
+                                          )
+  {
+    AttributeList al = new AttributeList(name);
+    al.modifier = modifier;
+    al.value = default_value;
+    al.next = atts;
+
+    if (allowed_values != null)
+      {
+        StringTokenizer st = new StringTokenizer(allowed_values, " \t|");
+        Vector v = new Vector(st.countTokens());
+
+        while (st.hasMoreTokens())
+          v.add(st.nextToken());
+
+        al.values = v;
+      }
+
+    return al;
+  }
+
+  /**
+   * 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.
+   */
+  protected ContentModel defContentModel(int type, Object content,
+                                         ContentModel next
+                                        )
+  {
+    ContentModel model = new ContentModel();
+    model.type = type;
+    model.next = next;
+    model.content = content;
+
+    return model;
+  }
+
+  /**
+   * 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.
+   */
+  protected Element defElement(String name, int type, boolean headless,
+                               boolean tailless, ContentModel content,
+                               String[] exclusions, String[] inclusions,
+                               AttributeList attributes
+                              )
+  {
+    // compute the bit sets
+    BitSet exclude = bitSet(exclusions);
+    BitSet include = bitSet(inclusions);
+
+    Element e =
+      defineElement(name, type, headless, tailless, content, exclude, include,
+                    attributes
+                   );
+
+    return e;
+  }
+
+  /**
+   * Creates, intializes and adds to the entity table the new
+   * entity.
+   * @param name the name of the entity
+   * @param type the type of the entity
+   * @param data the data section of the entity
+   * @return the created entity
+   */
+  protected Entity defEntity(String name, int type, String data)
+  {
+    Entity e = newEntity(name, type);
+    e.data = data.toCharArray();
+
+    return e;
+  }
+
+  private void assignField(Element e)
+  {
+    String element_name = e.name;
+    try
+      {
+        // Assign the field via reflection.
+        Field f = getClass().getField(element_name.toLowerCase());
+        if ((f.getModifiers() & Modifier.PUBLIC) != 0)
+          if ((f.getModifiers() & Modifier.STATIC) == 0)
+            if (f.getType().isAssignableFrom(e.getClass()))
+              f.set(this, e);
+      }
+    catch (IllegalAccessException ex)
+      {
+        unexpected(ex);
+      }
+    catch (NoSuchFieldException ex)
+      {
+        // This is ok.
+      }
+
+    // Some virtual machines may still lack the proper
+    // implementation of reflection. As the tag fields
+    // are not used anywhere in this implementation,
+    // (and this class is also rarely used by the end user),
+    // it may be better not to crash everything by throwing an error
+    // for each case when the HTML parsing is required.
+    catch (Throwable t)
+      {
+        // This VM has no reflection mechanism implemented!
+        if (t instanceof OutOfMemoryError)
+          throw (Error) t;
+      }
+  }
+
+  /**
+   * Create the bit set for this array of elements.
+   * The unknown elements are automatically defined and added
+   * to the element table.
+   * @param elements
+   * @return
+   */
+  private BitSet bitSet(String[] elements)
+  {
+    BitSet b = new BitSet();
+
+    for (int i = 0; i < elements.length; i++)
+      {
+        Element e = getElement(elements [ i ]);
+
+        if (e == null)
+          e = newElement(elements [ i ]);
+
+        b.set(e.index);
+      }
+
+    return b;
+  }
+
+  /**
+   * Find the element with the given name in the element table.
+   * If not find, create a new element with this name and add to the
+   * table.
+   * @param name the name of the element
+   * @return the found or created element.
+   */
+  private Element newElement(String name)
+  {
+    Element e = (Element) elementHash.get(name.toLowerCase());
+
+    if (e == null)
+      {
+        e = new Element();
+        e.name = name;
+        e.index = elements.size();
+        elements.add(e);
+        elementHash.put(e.name.toLowerCase(), e);
+        assignField(e);
+      }
+    return e;
+  }
+
+  /**
+   * Creates and adds to the element table the entity with an
+   * unitialized data section. Used internally.
+   * @param name the name of the entity
+   * @param type the type of the entity, a bitwise combination
+   * of GENERAL, PARAMETER, SYSTEM and PUBLIC.
+   * @throws an error if the parameter is both GENERAL and PARAMETER
+   * of both PUBLIC and SYSTEM.
+   * @return the created entity
+   */
+  private Entity newEntity(String name, int type)
+  {
+    Entity e = new Entity(name, type, null);
+    entityHash.put(e.name, e);
+    return e;
+  }
+
+  private void unexpected(Exception ex)
+  {
+    throw new Error("This should never happen, report a bug", ex);
+  }
+}
diff --git a/libjava/javax/swing/text/html/parser/DTDConstants.java b/libjava/javax/swing/text/html/parser/DTDConstants.java
new file mode 100755 (executable)
index 0000000..29218c2
--- /dev/null
@@ -0,0 +1,290 @@
+/* DTDConstants.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 javax.swing.text.html.parser;
+
+/**
+ * <p>This class defines the SGML basic types, used for describing HTML 4.01
+ * at {@link http://www.w3.org/TR/html4/types.html }. Not all constants,
+ * defined here, are actually used in HTML 4.01 SGML specification. Some others
+ * are defined just as part of the required implementation.
+ * </p>
+ * <p>
+ * If you need more information about SGML DTD 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>
+ *
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public interface DTDConstants
+{
+  /* ----- The data types, used in HTML 4.01 SGML definition: ---- */
+
+  /**
+   * The CDATA (Character data) constant, specifes the content model,
+   * consisting of characters only. In SGML for HTML 4.01, the character
+   * entities must be replaced by characters, the line feeds must be
+   * ignored and any number of the subsequent carriage returns or tabs
+   * must be replaced by a single space.
+   */
+  int CDATA = 1;
+
+  /**
+   *  The EMPTY constant, means the element with no content.
+   */
+  int EMPTY = 17;
+
+  /**
+   * The ID constant, means that the token is the unique identifier.
+   * This identifier can be referenced by attribute with value of IDREF.
+   * The identifier must begin with letter, followed by any number of
+   * letters, digits, hyphens, underscores, colons and periods.
+   */
+  int ID = 4;
+
+  /**
+   *  The IDREF constant, specifies reference to a valid ID within
+   * the document.
+   */
+  int IDREF = 5;
+
+  /**
+   *  The IDREFS constant, a space separated list of IDREFs
+   */
+  int IDREFS = 6;
+
+  /**
+   * The NAME constant, means the token that
+   * must begin with letter, followed by any number of
+   * letters, digits, hyphens, underscores, colons and periods.
+   */
+  int NAME = 7;
+
+  /**
+   *  The NAMES constant, specifies a space separated of NAMEs.
+   */
+  int NAMES = 8;
+
+  /**
+   * The NMTOKEN constant, specifies the attribute, consisting of
+   * characters that can be either digits or alphabetic characters).
+   */
+  int NMTOKEN = 9;
+
+  /**
+   * The NMTOKENS constant, specifies a list of NMTOKENs.
+   */
+  int NMTOKENS = 10;
+
+  /**
+   *  The NOTATION constant, a previously defined data type.
+   */
+  int NOTATION = 11;
+
+  /**
+   * The NUMBER constant (means that the attribute consists of at least
+   * one decimal digit).
+   */
+  int NUMBER = 12;
+
+  /**
+   *  The NUMBERS constant, specifies a space separated list of NUMBERs.
+   */
+  int NUMBERS = 13;
+
+  /**
+   *  The NUTOKEN constant.
+   */
+  int NUTOKEN = 14;
+
+  /**
+   *  The NUTOKENS constant.
+   */
+  int NUTOKENS = 15;
+
+  /* -------
+     The entity scope constants.
+     As these four constants are combined with the bitwise OR,
+     they are defined in the hexadecimal notation.
+     The reason of setting the two bits at once (for PUBLIC and SYSTEM)
+     is probably historical.                                      ----- */
+
+  /**
+   * The PUBLIC constant, specifies the public entity. The PUBLIC entities
+   * are assumed to be known to many systems so that a full declaration
+   * need not be transmitted. For example,
+   * &lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"&gt;
+   */
+  int PUBLIC = 0xA;
+
+  /**
+   * The SYSTEM constant, specifies the system entitiy. The system entities
+   * are assumed to be known but require the clear identifer
+   * (like the file path), where they can be found in the system.
+   * For example, <code>
+   * &lt;DOCTYPE html SYSTEM "/path/to/file.dtd"&gt; </code>.
+   */
+  int SYSTEM = 0x11;
+
+  /**
+   * The PARAMETER constant, specifies that entity is only valid
+   * inside SGML DTD scope.
+   */
+  int PARAMETER = 0x40000;
+
+  /**
+   * The GENERAL constant, specifies theat the entity is valid in the
+   * whole HTML document scope.
+   */
+  int GENERAL = 0x10000;
+
+  /* ---- The constants, defining if the element attribute is required,
+     fixed or implied.  ---- */
+
+  /**
+   * The attribute modifier #REQUIRED constant, indicates that the
+   * value must be supplied.
+   */
+  int REQUIRED = 2;
+
+  /**
+   * The attribute modifier #FIXED constant, means that the attribute has
+   * the fixed value that cannot be changed.
+   */
+  int FIXED = 1;
+
+  /**
+   * The attribute modifier #IMPLIED constant,
+   * indicating that for this attribute the user agent must provide
+   * the value itself.
+   */
+  int IMPLIED = 5;
+
+  /**
+   * The attribute modifier #CURRENT constant, specifies the value
+   * that at any point in the document is the last value supplied for
+   * that element. A value is required to be supplied for the first
+   * occurrence of an element
+   */
+  int CURRENT = 3;
+
+  /**
+   * The attribute modifier #CONREF constant, specifies the IDREF value of
+   * the reference to content in another location of the document.
+   * The element with this attribute is empty, the content from
+   * that another location must be used instead.
+   */
+  int CONREF = 4;
+
+  /* ----- Constants, defining if the element
+     start and end tags are required. ---- */
+
+  /**
+   *  The STARTTAG, meaning that the element needs a starting tag.
+   */
+  int STARTTAG = 13;
+
+  /**
+   *  The ENDTAG constant, meaning that the element needs a closing tag.
+   */
+  int ENDTAG = 14;
+
+  /* ----- Other constants: ----- */
+
+  /**
+   * The ANY constant, specifies
+   * an attribute, consisting from arbitrary characters.
+   */
+  int ANY = 19;
+
+  /**
+   *  The DEFAULT constant, specifies the default value.
+   */
+  int DEFAULT = 131072;
+
+  /**
+   *  The ENTITIES constant (list of ENTITYes)
+   */
+  int ENTITIES = 3;
+
+  /**
+   *  The ENTITY constant, meaning the numeric or symbolic name of some
+   * HTML data.
+   */
+  int ENTITY = 2;
+
+  /**
+   *  The MD constant.
+   */
+  int MD = 16;
+
+  /**
+   *  The MODEL constant.
+   */
+  int MODEL = 18;
+
+  /**
+   * The MS constant.
+   */
+  int MS = 15;
+
+  /**
+   * The PI (Processing Instruction) constant, specifies a processing
+   * instruction. Processing instructions are used to embed information
+   * intended for specific applications.
+   */
+  int PI = 12;
+
+  /**
+   * The RCDATA constant (Entity References and Character Data), specifies
+   * the content model, consisting of characters AND entities. The
+   * "&lt;" is threated as an ordinary character, but
+   * "<code>&amp;name;</code>" still means the general entity with
+   *  the given name.
+   */
+  int RCDATA = 16;
+
+  /**
+   * The SDATA constant. Means that the value contains the entity name
+   * and the replacement value of a character entity reference.
+   */
+  int SDATA = 11;
+}
diff --git a/libjava/javax/swing/text/html/parser/DocumentParser.java b/libjava/javax/swing/text/html/parser/DocumentParser.java
new file mode 100644 (file)
index 0000000..8f7d213
--- /dev/null
@@ -0,0 +1,258 @@
+/* DocumentParser.java -- A parser for HTML documents.
+   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 javax.swing.text.html.parser;
+
+import gnu.javax.swing.text.html.parser.htmlAttributeSet;
+import javax.swing.text.html.parser.Parser;
+
+import java.io.IOException;
+import java.io.Reader;
+
+import javax.swing.text.BadLocationException;
+import javax.swing.text.html.HTMLEditorKit;
+
+/**
+ * <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>
+ * In this implementation, DocumentParser is directly derived from its
+ * ancestor without changes of functionality.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class DocumentParser
+  extends Parser
+  implements DTDConstants
+{
+  /**
+   * The enclosed working parser class.
+   */
+  private class gnuParser
+    extends gnu.javax.swing.text.html.parser.support.Parser
+  {
+    private gnuParser(DTD d)
+    {
+      super(d);
+    }
+
+    protected final void handleComment(char[] comment)
+    {
+      parser.handleComment(comment);
+      callBack.handleComment(comment, hTag.where.startPosition);
+    }
+
+    protected final void handleEmptyTag(TagElement tag)
+      throws javax.swing.text.ChangedCharSetException
+    {
+      parser.handleEmptyTag(tag);
+      callBack.handleSimpleTag(tag.getHTMLTag(), getAttributes(),
+                               hTag.where.startPosition
+                              );
+    }
+
+    protected final void handleEndTag(TagElement tag)
+    {
+      parser.handleEndTag(tag);
+      callBack.handleEndTag(tag.getHTMLTag(), hTag.where.startPosition);
+    }
+
+    protected final void handleError(int line, String message)
+    {
+      parser.handleError(line, message);
+      callBack.handleError(message, hTag.where.startPosition);
+    }
+
+    protected final void handleStartTag(TagElement tag)
+    {
+      parser.handleStartTag(tag);
+      htmlAttributeSet attributes = gnu.getAttributes();
+
+      if (tag.fictional())
+        attributes.addAttribute(HTMLEditorKit.ParserCallback.IMPLIED,
+                                Boolean.TRUE
+                               );
+
+      callBack.handleStartTag(tag.getHTMLTag(), attributes,
+                              hTag.where.startPosition
+                             );
+    }
+
+    protected final void handleText(char[] text)
+    {
+      parser.handleText(text);
+      callBack.handleText(text, hTag.where.startPosition);
+    }
+
+    DTD getDTD()
+    {
+      return dtd;
+    }
+  }
+
+  /**
+   * This field is used to access the identically named
+   * methods of the outer class.
+   */
+  private DocumentParser parser = this;
+
+  /**
+   * The callback.
+   */
+  private HTMLEditorKit.ParserCallback callBack;
+
+  /**
+   * The reference to the working class of HTML parser that is
+   * actually used to parse the document.
+   */
+  private gnuParser gnu;
+
+  /**
+   * Creates a new parser that uses the given DTD to access data on the
+   * possible tokens, arguments and syntax. There is no single - step way
+   * to get a default DTD; you must either refer to the implementation -
+   * specific packages, write your own DTD or obtain the working instance
+   * of parser in other way, for example, by calling
+   * {@link javax.swing.text.html.HTMLEditorKit#getParser() }.
+   * @param a_dtd a DTD to use.
+   */
+  public DocumentParser(DTD a_dtd)
+  {
+    super(a_dtd);
+    gnu = new gnuParser(a_dtd);
+  }
+
+  /**
+   * Parses the HTML document, calling methods of the provided
+   * callback. This method must be multithread - safe.
+   * @param reader The reader to read the HTML document from
+   * @param callback The callback that is notifyed about the presence
+   * of HTML elements in the document.
+   * @param ignoreCharSet If thrue, any charset changes during parsing
+   * are ignored.
+   * @throws java.io.IOException
+   */
+  public void parse(Reader reader, HTMLEditorKit.ParserCallback a_callback,
+                    boolean ignoreCharSet
+                   )
+             throws IOException
+  {
+    callBack = a_callback;
+    gnu.parse(reader);
+
+    callBack.handleEndOfLineString(gnu.getEndOfLineSequence());
+    try
+      {
+        callBack.flush();
+      }
+    catch (BadLocationException ex)
+      {
+        // Convert this into the supported type of exception.
+        throw new IOException(ex.getMessage());
+      }
+  }
+
+  /**
+   * Handle HTML comment. The default method returns without action.
+   * @param comment the comment being handled
+   */
+  protected void handleComment(char[] 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 tag 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 being handled
+   */
+  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 being handled
+   */
+  protected void handleStartTag(TagElement tag)
+  {
+  }
+
+  /**
+   * Handle the text section.
+   * @param text a section text.
+   */
+  protected void handleText(char[] text)
+  {
+  }
+}
diff --git a/libjava/javax/swing/text/html/parser/Element.java b/libjava/javax/swing/text/html/parser/Element.java
new file mode 100755 (executable)
index 0000000..4f39fbe
--- /dev/null
@@ -0,0 +1,317 @@
+/* Element.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 javax.swing.text.html.parser;
+
+import gnu.javax.swing.text.html.parser.support.gnuStringIntMapper;
+
+import java.io.Serializable;
+
+import java.util.BitSet;
+
+/**
+ * <p>
+ * Stores the element information, obtained by parsing SGML DTD
+ * tag <code>&lt;!ELEMENT .. &gt;</code>. This class has no public
+ * constructor and can only be instantiated using the
+ * {@link javax.swing.text.html.parser.DTD } methods</p>
+ *
+ * <p>SGML defines elements that represent structures or
+ * behavior. An element typically consists of a start tag, content, and an
+ * end tag. Hence the elements are not tags. The HTML 4.0 definition specifies
+ * that some elements are not required to have the end tags. Also, some
+ * HTML elements (like <code>&lt;hr&gt;</code>) have no content. Element names
+ * are case sensitive.</p>
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public final class Element
+  implements DTDConstants, Serializable
+{
+  /**
+   * Package level mapper between type names and they string values.
+   */
+  static final gnuStringIntMapper mapper =
+    new gnuStringIntMapper()
+    {
+      protected void create()
+      {
+        add("CDATA", DTDConstants.CDATA);
+        add("RCDATA", DTDConstants.RCDATA);
+        add("EMPTY", DTDConstants.EMPTY);
+        add("ANY", DTDConstants.ANY);
+      }
+    };
+
+  /** Use serialVersionUID for interoperability. */
+  private static final long serialVersionUID = -6717939384601675586L;
+
+  /**
+   * The element attributes.
+   */
+  public AttributeList atts;
+
+  /**
+   * Contains refernces to elements that must NOT occur inside this element,
+   * at any level of hierarchy.
+   */
+  public BitSet exclusions;
+
+  /**
+   * Contains refernces to elements that must CAN occur inside this element,
+   * at any level of hierarchy.
+   */
+  public BitSet inclusions;
+
+  /**
+   * The content model, defining elements, entities and DTD text
+   * that may/may not occur inside this element.
+   */
+  public ContentModel content;
+
+  /**
+   * A field to store additional user data for this Element.
+   */
+  public Object data;
+
+  /**
+   * The element name.
+   */
+  public String name;
+
+  /**
+   * True is this element need not to have the closing tag, false
+   * otherwise. The HTML 4.0 definition specifies
+   * that some elements (like <code>&lt;hr&gt;</code>are
+   * not required to have the end tags.
+   */
+  public boolean oEnd;
+
+  /**
+   * True is this element need not to have the starting tag, false
+   * otherwise. The HTML 4.0 definition specifies
+   * that some elements (like <code>&lt;head&gt;</code> or
+   * <code>&lt;body&gt;</code>) are
+   * not required to have the start tags.
+
+   */
+  public boolean oStart;
+
+  /**
+   * This field contains the unique integer identifier of this Element,
+   * used to refer the element (more exactly, the element flag)
+   * in <code>inclusions</code> and <code>exclusions</code> bit set.
+   */
+  public int index;
+
+  /**
+   * The element type, containing value, defined in DTDConstants.
+   * In this implementation, the element type can be
+   * CDATA, RCDATA, EMPTY or ANY.
+   */
+  public int type;
+
+  /**
+   * The default constructor must have package level access in this
+   * class. Use DTD.defineElement(..) to create an element when required.
+   * @todo MAKE THIS PACKAGE in the final version. Now the Parser needs it!
+   */
+  Element()
+  {
+  }
+
+  /**
+   * Converts the string representation of the element type
+   * into its unique integer identifier, defined in DTDConstants.
+   * @param a_type A name of the type
+   * @return DTDConstants.CDATA, DTDConstants.RCDATA, DTDConstants.EMPTY,
+   * DTDConstants.ANY or null if the type name is not
+   * "CDATA", "RCDATA", "EMPTY" or "ANY". This function is case sensitive.
+   * @throws NullPointerException if <code>a_type</code> is null.
+   */
+  public static int name2type(String a_type)
+  {
+    return mapper.get(a_type);
+  }
+
+  /**
+   * Get the element attribute by name.
+   * @param attribute the attribute name, case insensitive.
+   * @return the correspoding attribute of this element. The class,
+   * for storing as attribute list, as a single attribute, is used to
+   * store a single attribute in this case.
+   * @throws NullPointerException if the attribute name is null.
+   */
+  public AttributeList getAttribute(String attribute)
+  {
+    AttributeList a = atts;
+
+    while (a != null && !attribute.equalsIgnoreCase(a.name))
+      a = a.next;
+
+    return a;
+  }
+
+  /**
+   * Get the element attribute by its value.
+   * @param a_value the attribute value, case insensitive.
+   * @return the correspoding attribute of this element. The class,
+   * for storing as attribute list, as a single attribute, is used to
+   * store a single attribute in this case. If there are several
+   * attributes with the same value, there is no garranty, which one
+   * is returned.
+   */
+  public AttributeList getAttributeByValue(String a_value)
+  {
+    AttributeList a = atts;
+
+    if (a_value == null)
+      {
+        while (a != null)
+          {
+            if (a.value == null)
+              return a;
+
+            a = a.next;
+          }
+      }
+    else
+      {
+        while (a != null)
+          {
+            if (a.value != null && a_value.equalsIgnoreCase(a.value))
+              return a;
+
+            a = a.next;
+          }
+      }
+
+    return null;
+  }
+
+  /**
+   * Get all attributes of this document as an attribute list.
+   * @return
+   */
+  public AttributeList getAttributes()
+  {
+    return atts;
+  }
+
+  /**
+   * Get the content model, defining elements, entities and DTD text
+   * that may/may not occur inside this element.
+   */
+  public ContentModel getContent()
+  {
+    return content;
+  }
+
+  /**
+   * Returns true for the element with no content.
+   * Empty elements are defined with the SGML DTD keyword "EMPTY".
+   * @return true if content model field (content) method is equal to
+   * null or its method empty() returns true.
+   */
+  public boolean isEmpty()
+  {
+    return content == null || content.empty();
+  }
+
+  /**
+   * Get the unique integer identifier of this Element,
+   * used to refer the element (more exactly, the element flag)
+   * in <code>inclusions</code> and <code>exclusions</code> bit set.
+   * WARNING: This value may not be the same between different
+   * implementations.
+   */
+  public int getIndex()
+  {
+    return index;
+  }
+
+  /**
+   * Get the element name.
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * Get the element type.
+   * @return one of the values, defined DTDConstants.
+   * In this implementation, the element type can be
+   * CDATA, RCDATA, EMPTY or ANY.
+   */
+  public int getType()
+  {
+    return type;
+  }
+
+  /**
+   * True is this element need not to have the starting tag, false
+   * otherwise.s element need not to have the closing tag, false
+   * otherwise. The HTML 4.0 definition specifies
+   * that some elements (like <code>&lt;hr&gt;</code>are
+   * not required to have the end tags.
+   */
+  public boolean omitEnd()
+  {
+    return oEnd;
+  }
+
+  /**
+   * True is this element need not to have the closing tag, false
+   * otherwise. The HTML 4.0 definition specifies
+   * that some elements (like <code>&lt;head&gt;</code> or
+   * <code>&lt;body&gt;</code>) are
+   * not required to have the start tags.
+   */
+  public boolean omitStart()
+  {
+    return oStart;
+  }
+
+  /**
+   * Returns the name of this element.
+   */
+  public String toString()
+  {
+    return name;
+  }
+}
diff --git a/libjava/javax/swing/text/html/parser/Entity.java b/libjava/javax/swing/text/html/parser/Entity.java
new file mode 100644 (file)
index 0000000..ba79552
--- /dev/null
@@ -0,0 +1,185 @@
+/* Entity.java -- Stores information, obtained by parsing SGML DTL
+ * &lt;!ENTITY % .. &gt; tag
+   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 javax.swing.text.html.parser;
+
+import gnu.javax.swing.text.html.parser.support.gnuStringIntMapper;
+
+import java.io.Serializable;
+
+/**
+ * <p>Stores information, obtained by parsing SGML DTL
+ * &lt;!ENTITY % .. &gt; tag.</p>
+ * <p>
+ * The entity defines some kind of macro that can be used elsewhere in
+ * the document.
+ * When the macro is referred to by the name in the DTD, it is expanded into
+ * a string
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public final class Entity
+  implements DTDConstants, Serializable
+{
+  /**
+   * Package level mapper between type names and they string values.
+   */
+  final static gnuStringIntMapper mapper =
+    new gnuStringIntMapper()
+    {
+      protected void create()
+      {
+        add("ANY", DTDConstants.ANY);
+        add("CDATA", DTDConstants.CDATA);
+        add("PUBLIC", DTDConstants.PUBLIC);
+        add("SDATA", DTDConstants.SDATA);
+        add("PI", DTDConstants.PI);
+        add("STARTTAG", DTDConstants.STARTTAG);
+        add("ENDTAG", DTDConstants.ENDTAG);
+        add("MS", DTDConstants.MS);
+        add("MD", DTDConstants.MD);
+        add("SYSTEM", DTDConstants.SYSTEM);
+      }
+    };
+
+  /**
+   * The entity name.
+   */
+  public String name;
+
+  /**
+   * The entity data
+   */
+  public char[] data;
+
+  /**
+   *  The entity type.
+   */
+  public int type;
+
+  /**
+   * String representation of the entity data.
+   */
+  private String sdata;
+
+  /**
+   * Create a new entity
+   * @param a_name the entity name
+   * @param a_type the entity type
+   * @param a_data the data replacing the entity reference
+   */
+  public Entity(String a_name, int a_type, char[] a_data)
+  {
+    name = a_name;
+    type = a_type;
+    data = a_data;
+  }
+
+  /**
+   * Converts a given string to the corresponding entity type.
+   * @return a value, defined in DTDConstants (one of
+   * PUBLIC, CDATA, SDATA, PI, STARTTAG, ENDTAG, MS, MD, SYSTEM)
+   * or CDATA if the parameter is not a valid entity type.
+   */
+  public static int name2type(String an_entity)
+  {
+    int r = mapper.get(an_entity);
+    return (r == 0) ? DTDConstants.CDATA : r;
+  }
+
+  /**
+   * Get the entity data.
+   */
+  public char[] getData()
+  {
+    return data;
+  }
+
+  /**
+   * Returns true for general entities. Each general entity can be
+   * referenced as <code>&entity-name;</code>. Such entities are
+   * defined by the SGML DTD tag
+   * <code>&lt;!ENTITY <i>name</i>    "<i>value</i>"></code>. The general
+   * entities can be used anywhere in the document.
+   */
+  public boolean isGeneral()
+  {
+    return (type & DTDConstants.GENERAL) != 0;
+  }
+
+  /**
+   * Get the entity name.
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * Returns true for parameter entities. Each parameter entity can be
+   * referenced as <code>&entity-name;</code>. Such entities are
+   * defined by the SGML DTD tag
+   * <code>&lt;!ENTITY % <i>name</i>    "<i>value</i>"></code>. The parameter
+   * entities can be used only in SGML context.
+   */
+  public boolean isParameter()
+  {
+    return (type & DTDConstants.PARAMETER) != 0;
+  }
+
+  /**
+   * Returns a data as String
+   */
+  public String getString()
+  {
+    if (sdata == null)
+      sdata = new String(data);
+
+    return sdata;
+  }
+  
+  /**
+   * Get the entity type.
+   * @return the value of the {@link #type}.
+   */
+  public int getType() 
+  {
+    return type;
+  }  
+          
+}
diff --git a/libjava/javax/swing/text/html/parser/Parser.java b/libjava/javax/swing/text/html/parser/Parser.java
new file mode 100755 (executable)
index 0000000..7202f6b
--- /dev/null
@@ -0,0 +1,436 @@
+/* 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 javax.swing.text.html.parser;
+
+import java.io.IOException;
+import java.io.Reader;
+
+import javax.swing.text.ChangedCharSetException;
+import javax.swing.text.SimpleAttributeSet;
+
+/*
+ * FOR DEVELOPERS: To avoid regression, please run the package test
+ * textsuite/javax.swing.text.html.parser/AllParserTests after your
+ * modifications.
+ */
+
+/**
+ * <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 
+  implements DTDConstants
+{
+  /**
+   * 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;
+
+  /**
+   * The package level reference to the working HTML parser in this
+   * implementation.
+   */
+  final gnu.javax.swing.text.html.parser.support.Parser gnu;
+
+  /**
+   * Creates a new parser that uses the given DTD to access data on the
+   * possible tokens, arguments and syntax. There is no single - step way
+   * to get a default DTD; you must either refer to the implementation -
+   * specific packages, write your own DTD or obtain the working instance
+   * of parser in other way, for example, by calling
+   * {@link javax.swing.text.html.HTMLEditorKit#getParser() }.
+   * @param a_dtd A DTD to use.
+   */
+  public Parser(DTD a_dtd)
+  {
+    dtd = a_dtd;
+
+    final Parser j = this;
+
+    gnu =
+      new gnu.javax.swing.text.html.parser.support.Parser(dtd)
+        {
+          protected final void handleComment(char[] comment)
+          {
+            j.handleComment(comment);
+          }
+
+          protected final void handleEOFInComment()
+          {
+            j.handleEOFInComment();
+          }
+
+          protected final void handleEmptyTag(TagElement tag)
+            throws javax.swing.text.ChangedCharSetException
+          {
+            j.handleEmptyTag(tag);
+          }
+
+          protected final void handleStartTag(TagElement tag)
+          {
+            j.handleStartTag(tag);
+          }
+
+          protected final void handleEndTag(TagElement tag)
+          {
+            j.handleEndTag(tag);
+          }
+
+          protected final void handleError(int line, String message)
+          {
+            j.handleError(line, message);
+          }
+
+          protected final void handleText(char[] text)
+          {
+            j.handleText(text);
+          }
+
+          protected final void handleTitle(char[] title)
+          {
+            j.handleTitle(title);
+          }
+
+          protected final void markFirstTime(Element element)
+          {
+            j.markFirstTime(element);
+          }
+
+          protected final void startTag(TagElement tag)
+            throws ChangedCharSetException
+          {
+            j.startTag(tag);
+          }
+
+          protected final void endTag(boolean omitted)
+          {
+            j.endTag(omitted);
+          }
+
+          protected TagElement makeTag(Element element)
+          {
+            return j.makeTag(element);
+          }
+
+          protected TagElement makeTag(Element element, boolean isSupposed)
+          {
+            return j.makeTag(element, isSupposed);
+          }
+        };
+  }
+
+  /**
+   * 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
+  {
+    gnu.parse(reader);
+  }
+
+  /**
+   * Parses DTD markup declaration. Currently returns without action.
+   * @return null.
+   * @throws java.io.IOException
+   */
+  public String parseDTDMarkup()
+    throws IOException
+  {
+    return gnu.parseDTDMarkup();
+  }
+
+  /**
+   * Parse DTD document declarations. Currently only parses the document
+   * type declaration markup.
+   * @param strBuff
+   * @return true if this is a valid DTD markup declaration.
+   * @throws IOException
+   */
+  protected boolean parseMarkupDeclarations(StringBuffer strBuff)
+    throws IOException
+  {
+    return gnu.parseMarkupDeclarations(strBuff);
+  }
+
+  /**
+   * Get the attributes of the current tag.
+   * @return The attribute set, representing the attributes of the current tag.
+   */
+  protected SimpleAttributeSet getAttributes()
+  {
+    return gnu.getAttributes();
+  }
+
+  /**
+   * Get the number of the document line being parsed.
+   * @return The current line.
+   */
+  protected int getCurrentLine()
+  {
+    return gnu.hTag.where.beginLine;
+  }
+
+  /**
+   * Get the current position in the document being parsed.
+   * @return The current position.
+   */
+  protected int getCurrentPos()
+  {
+    return gnu.hTag.where.startPosition;
+  }
+
+  /**
+   * 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)
+  {
+  }
+
+  /**
+   * Invokes the error handler. The default method in this implementation
+   * finally delegates the call to handleError, also providing the number of the
+   * current line.
+   */
+  protected void error(String msg)
+  {
+    gnu.error(msg);
+  }
+
+  /**
+   * Invokes the error handler. The default method in this implementation
+   * finally delegates the call to error (msg+": '"+invalid+"'").
+   */
+  protected void error(String msg, String invalid)
+  {
+    gnu.error(msg, invalid);
+  }
+
+  /**
+   * Invokes the error handler. The default method in this implementation
+   * finally delegates the call to error (parm1+" "+ parm2+" "+ parm3).
+   */
+  protected void error(String parm1, String parm2, String parm3)
+  {
+    gnu.error(parm1, parm2, parm3);
+  }
+
+  /**
+   * Invokes the error handler. The default method in this implementation
+   * finally delegates the call to error
+   * (parm1+" "+ parm2+" "+ parm3+" "+ parm4).
+   */
+  protected void error(String parm1, String parm2, String parm3, String parm4)
+  {
+    gnu.error(parm1, parm2, parm3, parm4);
+  }
+
+  /**
+   * In this implementation, this is never called and returns without action.
+   */
+  protected void flushAttributes()
+  {
+    gnu.flushAttributes();
+  }
+
+  /**
+   * Handle HTML comment. The default method returns without action.
+   * @param comment The comment being handled
+   */
+  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. The default method calls the error handler.
+   */
+  protected void handleEOFInComment()
+  {
+    gnu.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 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 being handled
+   */
+  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 being handled
+   */
+  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.
+   * @param element the base element of the tag.
+   * @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)
+  {
+  }
+
+  /**
+   * 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
+  {
+  }
+}
index 58c2bc3..7981706 100644 (file)
@@ -1,5 +1,5 @@
-/* ParserDelegator - Delegator for ParserDocument.
-   Copyright (C) 2002 Free Software Foundation, Inc.
+/* ParserDelegator.java -- Delegator for ParserDocument.
+    Copyright (C) 2005 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -37,10 +37,170 @@ exception statement from your version. */
 
 package javax.swing.text.html.parser;
 
+import gnu.javax.swing.text.html.parser.HTML_401F;
+import gnu.javax.swing.text.html.parser.htmlAttributeSet;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Serializable;
+
+import javax.swing.text.BadLocationException;
+import javax.swing.text.html.HTMLEditorKit;
+import javax.swing.text.html.HTMLEditorKit.ParserCallback;
+
 /**
- * Stub implementeation to get gjdoc working.
+ * This class instantiates and starts the working instance of
+ * html parser, being responsible for providing the default DTD.
+ *
+ * TODO Later this class must be derived from the totally abstract class
+ * HTMLEditorKit.Parser. HTMLEditorKit that does not yet exist.
+ *
+ * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
  */
-//public class ParserDelegator extends HTMLEditorKit.Parser
 public class ParserDelegator
+  extends javax.swing.text.html.HTMLEditorKit.Parser
+  implements Serializable
 {
+  private class gnuParser
+    extends gnu.javax.swing.text.html.parser.support.Parser
+  {
+    private static final long serialVersionUID = 1;
+
+    private gnuParser(DTD d)
+    {
+      super(d);
+    }
+
+    protected final void handleComment(char[] comment)
+    {
+      callBack.handleComment(comment, hTag.where.startPosition);
+    }
+
+    protected final void handleEmptyTag(TagElement tag)
+      throws javax.swing.text.ChangedCharSetException
+    {
+      callBack.handleSimpleTag(tag.getHTMLTag(), getAttributes(),
+                               hTag.where.startPosition
+                              );
+    }
+
+    protected final void handleEndTag(TagElement tag)
+    {
+      callBack.handleEndTag(tag.getHTMLTag(), hTag.where.startPosition);
+    }
+
+    protected final void handleError(int line, String message)
+    {
+      callBack.handleError(message, hTag.where.startPosition);
+    }
+
+    protected final void handleStartTag(TagElement tag)
+    {
+      htmlAttributeSet attributes = gnu.getAttributes();
+
+      if (tag.fictional())
+        attributes.addAttribute(ParserCallback.IMPLIED, Boolean.TRUE);
+
+      callBack.handleStartTag(tag.getHTMLTag(), attributes,
+                              hTag.where.startPosition
+                             );
+    }
+
+    protected final void handleText(char[] text)
+    {
+      callBack.handleText(text, hTag.where.startPosition);
+    }
+
+    DTD getDTD()
+    {
+      return dtd;
+    }
+  }
+
+  /**
+   * Use serialVersionUID for interoperability.
+   */
+  private static final long serialVersionUID = -1276686502624777206L;
+
+  private static DTD dtd = HTML_401F.getInstance();
+
+  /**
+   * The callback.
+   */
+  private HTMLEditorKit.ParserCallback callBack;
+
+  /**
+   * The reference to the working class of HTML parser that is
+   * actually used to parse the document.
+   */
+  private gnuParser gnu;
+
+  /**
+   * Parses the HTML document, calling methods of the provided
+   * callback. This method must be multithread - safe.
+   * @param reader The reader to read the HTML document from
+   * @param callback The callback that is notifyed about the presence
+   * of HTML elements in the document.
+   * @param ignoreCharSet If thrue, any charset changes during parsing
+   * are ignored.
+   * @throws java.io.IOException
+   */
+  public void parse(Reader reader, HTMLEditorKit.ParserCallback a_callback,
+                    boolean ignoreCharSet
+                   )
+             throws IOException
+  {
+    callBack = a_callback;
+
+    if (gnu == null || !dtd.equals(gnu.getDTD()))
+      {
+        gnu = new gnuParser(dtd);
+      }
+
+    gnu.parse(reader);
+
+    callBack.handleEndOfLineString(gnu.getEndOfLineSequence());
+    try
+      {
+        callBack.flush();
+      }
+    catch (BadLocationException ex)
+      {
+        // Convert this into the supported type of exception.
+        throw new IOException(ex.getMessage());
+      }
+  }
+
+  /**
+   * Calling this method instructs that, if not specified directly,
+   * the documents will be parsed using the default
+   * DTD of the implementation.
+   */
+  protected static void setDefaultDTD()
+  {
+    dtd = HTML_401F.getInstance();
+  }
+
+  /**
+   * Registers the user - written DTD under the given name, also
+   * making it default for the subsequent parsings. This has effect on
+   * all subsequent calls to the parse(...) . If you need to specify
+   * your DTD locally, simply {@link javax.swing.text.html.parser.Parser}
+   * instead.
+   * @param dtd The DTD that will be used to parse documents by this class.
+   * @param name The name of this DTD.
+   * @return No standard is specified on which instance of DTD must be
+   * returned by this method, and it is recommended to leave the returned
+   * value without consideration. This implementation returns the DTD
+   * that was previously set as the default DTD, or the implementations
+   * default DTD if none was set.
+   */
+  protected static DTD createDTD(DTD a_dtd, String name)
+  {
+    DTD.putDTDHash(name, a_dtd);
+
+    DTD dtd_prev = dtd;
+    dtd = a_dtd;
+    return dtd_prev;
+  }
 }
diff --git a/libjava/javax/swing/text/html/parser/TagElement.java b/libjava/javax/swing/text/html/parser/TagElement.java
new file mode 100755 (executable)
index 0000000..ab94652
--- /dev/null
@@ -0,0 +1,142 @@
+/* TagElement.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 javax.swing.text.html.parser;
+
+import javax.swing.text.html.HTML;
+
+/**
+ * The SGML element, defining a single html tag.
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class TagElement
+{
+  /**
+   * The Element the tag was constructed from.
+   */
+  private final Element element;
+
+  /**
+   * The coresponding HTML tag, assigned once in constructor.
+   */
+  private final HTML.Tag tag;
+
+  /**
+   * The 'fictional' flag.
+   */
+  private final boolean fictional;
+
+  /**
+   * Creates the html tag element from the defintion, stored in the
+   * given element. Sets the flag 'fictional' to false.
+   * @param an_element
+   */
+  public TagElement(Element an_element)
+  {
+    this(an_element, false);
+  }
+
+  /**
+   * Creates the html tag element from the defintion, stored in the
+   * given element, setting the flag 'fictional' to the given value.
+   */
+  public TagElement(Element an_element, boolean is_fictional)
+  {
+    element = an_element;
+    fictional = is_fictional;
+
+    HTML.Tag t = HTML.getTag(element.getName());
+
+    if (t != null)
+      tag = t;
+    else
+      tag = new HTML.UnknownTag(element.getName());
+  }
+
+  /**
+   * Get the element from that the tag was constructed.
+   */
+  public Element getElement()
+  {
+    return element;
+  }
+
+  /**
+   * Get the corresponding HTML tag. This is either one of the
+   * pre-defined HTML tags or the instance of the UnknownTag with the
+   * element name.
+   */
+  public HTML.Tag getHTMLTag()
+  {
+    return tag;
+  }
+
+  /**
+   * Calls isPreformatted() for the corresponding html tag and returns
+   * the obtained value.
+   */
+  public boolean isPreformatted()
+  {
+    return tag.isPreformatted();
+  }
+
+  /**
+   * Calls breaksFlow() for the corresponding html tag and returns
+   * the obtained value.
+   */
+  public boolean breaksFlow()
+  {
+    return tag.breaksFlow();
+  }
+
+  /**
+   * Get the value of the flag 'fictional'.
+   */
+  public boolean fictional()
+  {
+    return fictional;
+  }
+
+  /**
+   * Returns string representation of this object.
+   */
+  public String toString()
+  {
+    return getElement() + (fictional ? "?" : "");
+  }
+}