[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>&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 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 ( &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);
+  }
+}




More information about the kaffe mailing list