[kaffe] CVS kaffe (robilad): Resynced with GNU Classpath: DomHTMLParser
Kaffe CVS
cvs-commits at kaffe.org
Sun Apr 17 16:41:57 PDT 2005
PatchSet 5683
Date: 2005/04/17 23:37:26
Author: robilad
Branch: HEAD
Tag: (none)
Log:
Resynced with GNU Classpath: DomHTMLParser
2005-04-17 Dalibor Topic <robilad at kaffe.org>
Resynced with GNU Classpath.
2005-03-23 Andrew John Hughes <gnu_andrew at member.fsf.org>
* gnu/xml/dom/html2/DomHTMLParser.java
Changed 'enum' references to become 'enumeration'.
2005-03-21 Audrius Meskauskas <audriusa at bluewin.ch>
* gnu/xml/dom/html2/DomHTMLParser.java: New file.
Members:
ChangeLog:1.3849->1.3850
libraries/javalib/Makefile.am:1.334->1.335
libraries/javalib/Makefile.in:1.422->1.423
libraries/javalib/all.files:1.109->1.110
libraries/javalib/gnu/xml/dom/html2/DomHTMLParser.java:INITIAL->1.1
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.3849 kaffe/ChangeLog:1.3850
--- kaffe/ChangeLog:1.3849 Sun Apr 17 21:50:50 2005
+++ kaffe/ChangeLog Sun Apr 17 23:37:26 2005
@@ -1,6 +1,19 @@
2005-04-17 Dalibor Topic <robilad at kaffe.org>
Resynced with GNU Classpath.
+
+ 2005-03-23 Andrew John Hughes <gnu_andrew at member.fsf.org>
+
+ * gnu/xml/dom/html2/DomHTMLParser.java
+ Changed 'enum' references to become 'enumeration'.
+
+ 2005-03-21 Audrius Meskauskas <audriusa at bluewin.ch>
+
+ * gnu/xml/dom/html2/DomHTMLParser.java: New file.
+
+2005-04-17 Dalibor Topic <robilad at kaffe.org>
+
+ Resynced with GNU Classpath.
2005-04-11 Andrew John Hughes <gnu_andrew at member.fsf.org>
Index: kaffe/libraries/javalib/Makefile.am
diff -u kaffe/libraries/javalib/Makefile.am:1.334 kaffe/libraries/javalib/Makefile.am:1.335
--- kaffe/libraries/javalib/Makefile.am:1.334 Sun Apr 17 21:50:53 2005
+++ kaffe/libraries/javalib/Makefile.am Sun Apr 17 23:37:29 2005
@@ -1824,6 +1824,7 @@
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 \
Index: kaffe/libraries/javalib/Makefile.in
diff -u kaffe/libraries/javalib/Makefile.in:1.422 kaffe/libraries/javalib/Makefile.in:1.423
--- kaffe/libraries/javalib/Makefile.in:1.422 Sun Apr 17 21:50:54 2005
+++ kaffe/libraries/javalib/Makefile.in Sun Apr 17 23:37:30 2005
@@ -2294,6 +2294,7 @@
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 \
Index: kaffe/libraries/javalib/all.files
diff -u kaffe/libraries/javalib/all.files:1.109 kaffe/libraries/javalib/all.files:1.110
--- kaffe/libraries/javalib/all.files:1.109 Sun Apr 17 21:50:57 2005
+++ kaffe/libraries/javalib/all.files Sun Apr 17 23:37:30 2005
@@ -1362,6 +1362,7 @@
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
===================================================================
Checking out kaffe/libraries/javalib/gnu/xml/dom/html2/DomHTMLParser.java
RCS: /home/cvs/kaffe/kaffe/libraries/javalib/gnu/xml/dom/html2/DomHTMLParser.java,v
VERS: 1.1
***************
--- /dev/null Sun Aug 4 19:57:58 2002
+++ kaffe/libraries/javalib/gnu/xml/dom/html2/DomHTMLParser.java Sun Apr 17 23:41:57 2005
@@ -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><b><i>c</b>d</code>
+ * is parsed as <code><b><i>c</i></b><i>d</code> .
+ *
+ * @author Audrius Meskauskas (AudriusA at 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 ( <! ... > ).
+ * 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);
+ }
+}
More information about the kaffe
mailing list