[llvm-commits] [llvm-gcc-4.2] r43913 [30/80] - in /llvm-gcc-4.2/trunk: boehm-gc/ boehm-gc/Mac_files/ boehm-gc/cord/ boehm-gc/doc/ boehm-gc/include/ boehm-gc/include/private/ boehm-gc/tests/ libffi/ libffi/include/ libffi/src/ libffi/src/alpha/ libffi/src/arm/ libffi/src/cris/ libffi/src/frv/ libffi/src/ia64/ libffi/src/m32r/ libffi/src/m68k/ libffi/src/mips/ libffi/src/pa/ libffi/src/powerpc/ libffi/src/s390/ libffi/src/sh/ libffi/src/sh64/ libffi/src/sparc/ libffi/src/x86/ libffi/testsuite/ libffi/testsuite/config/ li...

Bill Wendling isanbard at gmail.com
Thu Nov 8 14:57:11 PST 2007


Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLAreaElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLAreaElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLAreaElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLAreaElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBRElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBRElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBRElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBRElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseFontElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseFontElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseFontElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBaseFontElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBodyElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBodyElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBodyElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLBodyElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLButtonElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLButtonElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLButtonElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLButtonElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLCollection.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLCollection.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLCollection.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLCollection.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,227 @@
+/* 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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;
+      }
+    String localName = n.getLocalName();
+    if (localName == null)
+      {
+        localName = n.getNodeName();
+      }
+    if (nodeNames != null && !acceptName(localName))
+      {
+        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 (attrName == null)
+          {
+            attrName = attr.getNodeName();
+          }
+        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;
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDListElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDListElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDListElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDListElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDirectoryElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDirectoryElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDirectoryElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDirectoryElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDivElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDivElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDivElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDivElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDocument.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDocument.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDocument.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLDocument.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,427 @@
+/* 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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("embed", DomHTMLEmbedElement.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("embed");
+    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;
+      }
+  }
+
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLElement.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,287 @@
+/* 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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 == null)
+              {
+                attrName = attr.getNodeName();
+              }
+            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 == null)
+          {
+            attrName = attr.getNodeName();
+          }
+        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())
+      {
+        String parentName = parent.getLocalName();
+        if (parentName == null)
+          {
+              parentName = parent.getNodeName();
+          }
+        if (name.equalsIgnoreCase(parentName))
+          {
+            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())
+      {
+        String childName = child.getLocalName();
+        if (childName == null)
+          {
+            childName = child.getLocalName();
+          }
+        if (name.equalsIgnoreCase(childName))
+          {
+            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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLEmbedElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLEmbedElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLEmbedElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLEmbedElement.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,129 @@
+/* DomHTMLEmbedElement.java -- 
+   Copyright (C) 2006 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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;
+
+public class DomHTMLEmbedElement
+    extends DomHTMLAppletElement
+{
+  protected DomHTMLEmbedElement(DomHTMLDocument owner, String namespaceURI,
+                                String name)
+  {
+    super(owner, namespaceURI, name);
+  }
+  
+  public String getJavaObject()
+  {
+    return getHTMLAttribute("java_object");
+  }
+
+  public void setJavaObject(String object)
+  {
+    setHTMLAttribute("java_object", object);
+  }
+  
+  public String getJavaCodeBase()
+  {
+    return getHTMLAttribute("java_codebase");
+  }
+
+  public void setJavaCodeBase(String codeBase)
+  {
+    setHTMLAttribute("java_codebase", codeBase);
+  }
+  
+  public String getJavaArchive()
+  {
+    return getHTMLAttribute("java_archive");
+  }
+
+  public void setJavaArchive(String archive)
+  {
+    setHTMLAttribute("java_archive", archive);
+  }
+
+  public void setJavaCode(String code)
+  {
+    setHTMLAttribute("java_code", code);
+  }
+  
+  public String getJavaCode()
+  {
+    return getHTMLAttribute("java_code");
+  }
+  
+  public void setJavaType(String type)
+  {
+    setHTMLAttribute("java_type", type);
+  }
+  
+  public String getJavaType()
+  {
+    return getHTMLAttribute("java_type");
+  }
+  
+  public void setType(String type)
+  {
+    setHTMLAttribute("type", type);
+  }
+  
+  public String getType()
+  {
+    return getHTMLAttribute("type");
+  }
+  
+  public String getPluginsPage()
+  {
+    return getHTMLAttribute("pluginspage");
+  }
+  
+  public void setPluginsPage(String pluginspage)
+  {
+    setHTMLAttribute("pluginspage", pluginspage);
+  }
+  
+  public String getMayscript()
+  {
+    return getHTMLAttribute("mayscript");
+  }
+
+  public void setMayscript(String mayscript)
+  {
+    setHTMLAttribute("mayscript", mayscript);
+  }
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFieldSetElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFieldSetElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFieldSetElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFieldSetElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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");
+  }
+
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFontElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFontElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFontElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFontElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFormElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFormElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFormElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFormElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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");
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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;
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameSetElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameSetElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameSetElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLFrameSetElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHRElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHRElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHRElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHRElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadingElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadingElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadingElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHeadingElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHtmlElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHtmlElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHtmlElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLHtmlElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLIFrameElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLIFrameElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLIFrameElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLIFrameElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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;
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLImageElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLImageElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLImageElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLImageElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLImpl.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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;
+  }
+
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLInputElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLInputElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLInputElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLInputElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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");
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLIsIndexElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLIsIndexElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLIsIndexElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLIsIndexElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLIElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLIElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLIElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLIElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLabelElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLabelElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLabelElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLabelElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLegendElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLegendElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLegendElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLegendElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLinkElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLinkElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLinkElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLLinkElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLMapElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLMapElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLMapElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLMapElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLMenuElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLMenuElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLMenuElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLMenuElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLMetaElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLMetaElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLMetaElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLMetaElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLModElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLModElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLModElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLModElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLOListElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLOListElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLOListElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLOListElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLObjectElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLObjectElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLObjectElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLObjectElement.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,321 @@
+/* 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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 getJavaCode()
+  {
+    return getHTMLAttribute("java_code");
+  }
+
+  public void setJavaCode(String code)
+  {
+    setHTMLAttribute("java_code", code);
+  }
+  
+  public String getObject()
+  {
+    return getHTMLAttribute("object");
+  }
+
+  public void setObject(String obj)
+  {
+    setHTMLAttribute("object", obj);
+  }
+  
+  public String getJavaObject()
+  {
+    return getHTMLAttribute("java_object");
+  }
+
+  public void setJavaObject(String obj)
+  {
+    setHTMLAttribute("java_object", obj);
+  }
+  
+  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 getJavaArchive()
+  {
+    return getHTMLAttribute("java_archive");
+  }
+
+  public void setJavaArchive(String archive)
+  {
+    setHTMLAttribute("java_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 getJavaCodeBase()
+  {
+    return getHTMLAttribute("java_codebase");
+  }
+
+  public void setJavaCodeBase(String codeBase)
+  {
+    setHTMLAttribute("java_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 getJavaType()
+  {
+    return getHTMLAttribute("java_type");
+  }
+
+  public void setJavaType(String type)
+  {
+    setHTMLAttribute("java_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;
+  }
+  
+  public void setMayscript(String may)
+  {
+    setHTMLAttribute("mayscript", may);
+  }
+  
+  public String getMayscript()
+  {
+    return getHTMLAttribute("mayscript");
+  }
+  
+  public void setScriptable(String scr)
+  {
+    setHTMLAttribute("scriptable", scr);
+  }
+  
+  public String getScriptable()
+  {
+    return getHTMLAttribute("scriptable");
+  }
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptGroupElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptGroupElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptGroupElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptGroupElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptionElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptionElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptionElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLOptionElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLParagraphElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLParagraphElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLParagraphElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLParagraphElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLParamElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLParamElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLParamElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLParamElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLParser.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLParser.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLParser.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLParser.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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();
+        document.setCheckWellformedness(false);
+        document.setCheckingCharacters(false);
+        
+        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();
+            cursor.appendChild(item);
+            cursor = item;
+          }
+      }
+  }
+
+  /**
+   * 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);
+  }
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLPreElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLPreElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLPreElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLPreElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLQuoteElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLQuoteElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLQuoteElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLQuoteElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLScriptElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLScriptElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLScriptElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLScriptElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLSelectElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLSelectElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLSelectElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLSelectElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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");
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLStyleElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLStyleElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLStyleElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLStyleElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCellElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCellElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCellElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableCellElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableColElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableColElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableColElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableColElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableElement.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,398 @@
+/* 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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())
+          {
+            String ctxName = ctx.getLocalName();
+            if (ctxName == null)
+              {
+                ctxName = ctx.getNodeName();
+              }
+            if (!"tr".equalsIgnoreCase(ctxName))
+              {
+                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())
+      {
+        String ctxName = ctx.getLocalName();
+        if (ctxName == null)
+          {
+            ctxName = ctx.getNodeName();
+          }
+        if (!"tr".equalsIgnoreCase(ctxName))
+          {
+            continue;
+          }
+        if (index == i)
+          {
+            return ctx;
+          }
+        i++;
+      }
+    Node tfoot = getChildElement("tfoot");
+    if (tfoot != null)
+      {
+        for (Node ctx = tfoot.getFirstChild(); ctx != null;
+             ctx = ctx.getNextSibling())
+          {
+            String ctxName = ctx.getLocalName();
+            if (ctxName == null)
+              {
+                ctxName = ctx.getNodeName();
+              }
+            if (!"tr".equalsIgnoreCase(ctxName))
+              {
+                continue;
+              }
+            if (index == i)
+              {
+                return ctx;
+              }
+            i++;
+          }
+      }
+    return null;
+  }
+
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableRowElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableRowElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableRowElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableRowElement.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,229 @@
+/* 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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 (name == null)
+          {
+            name = ctx.getNodeName();
+          }
+        if (!"td".equalsIgnoreCase(name) &&
+            !"th".equalsIgnoreCase(name))
+          {
+            continue;
+          }
+        if (index == i)
+          {
+            return ctx;
+          }
+        i++;
+      }
+    return null;
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableSectionElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableSectionElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableSectionElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTableSectionElement.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,163 @@
+/* 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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())
+      {
+        String name = ctx.getLocalName();
+        if (name == null)
+          {
+            name = ctx.getNodeName();
+          }
+        if (!"tr".equalsIgnoreCase(name))
+          {
+            continue;
+          }
+        if (index == i)
+          {
+            return ctx;
+          }
+        i++;
+      }
+    return null;
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTextAreaElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTextAreaElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTextAreaElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTextAreaElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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");
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTitleElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTitleElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTitleElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLTitleElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLUListElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLUListElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLUListElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/html2/DomHTMLUListElement.java Thu Nov  8 16:56:19 2007
@@ -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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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 at 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);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSException.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSException.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSException.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSException.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,57 @@
+/* DomLSException.java -- 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.ls;
+
+import org.w3c.dom.ls.LSException;
+
+/**
+ * A DOM LS exception incorporating a cause.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class DomLSException
+  extends LSException
+{
+
+  public DomLSException(short type, Exception cause)
+  {
+    super(type, (cause == null) ? null : cause.getMessage());
+    initCause(cause);
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSInput.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSInput.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSInput.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSInput.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,158 @@
+/* DomLSInput.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.ls;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import org.w3c.dom.ls.LSInput;
+
+/**
+ * Specification of XML input to parse.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class DomLSInput
+  implements LSInput
+{
+
+  private InputStream in;
+  private String systemId;
+  private String publicId;
+  private String baseURI;
+  private String encoding;
+  private boolean certifiedText;
+
+  public Reader getCharacterStream()
+  {
+    return new InputStreamReader(in);
+  }
+
+  public void setCharacterStream(Reader characterStream)
+  {
+    in = new ReaderInputStream(characterStream);
+  }
+
+  public InputStream getByteStream()
+  {
+    return in;
+  }
+
+  public void setByteStream(InputStream byteStream)
+  {
+    in = byteStream;
+  }
+
+  public String getStringData()
+  {
+    StringBuffer acc = new StringBuffer();
+    Reader reader = getCharacterStream();
+    try
+      {
+        char[] buf = new char[4096];
+        for (int len = reader.read(buf); len != -1; len = reader.read(buf))
+          {
+            acc.append(buf, 0, len);
+          }
+      }
+    catch (IOException e)
+      {
+        return null; // ?
+      }
+    return acc.toString();
+  }
+
+  public void setStringData(String stringData)
+  {
+    in = new ReaderInputStream(new StringReader(stringData));
+  }
+
+  public String getSystemId()
+  {
+    return systemId;
+  }
+
+  public void setSystemId(String systemId)
+  {
+    this.systemId = systemId;
+  }
+
+  public String getPublicId()
+  {
+    return publicId;
+  }
+
+  public void setPublicId(String publicId)
+  {
+    this.publicId = publicId;
+  }
+
+  public String getBaseURI()
+  {
+    return baseURI;
+  }
+
+  public void setBaseURI(String baseURI)
+  {
+    this.baseURI = baseURI;
+  }
+
+  public String getEncoding()
+  {
+    return encoding;
+  }
+
+  public void setEncoding(String encoding)
+  {
+    this.encoding = encoding;
+  }
+
+  public boolean getCertifiedText()
+  {
+    return certifiedText;
+  }
+
+  public void setCertifiedText(boolean certifiedText)
+  {
+    this.certifiedText = certifiedText;
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSOutput.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSOutput.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSOutput.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSOutput.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,98 @@
+/* DomLSOutput.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.ls;
+
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import org.w3c.dom.ls.LSOutput;
+
+/**
+ * Specification of XML output to produce.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class DomLSOutput
+  implements LSOutput
+{
+
+  private OutputStream out;
+  private String systemId;
+  private String encoding;
+
+  public Writer getCharacterStream()
+  {
+    return new OutputStreamWriter(out);
+  }
+
+  public void setCharacterStream(Writer characterStream)
+  {
+    out = new WriterOutputStream(characterStream);
+  }
+
+  public OutputStream getByteStream()
+  {
+    return out;
+  }
+
+  public void setByteStream(OutputStream out)
+  {
+    this.out = out;
+  }
+
+  public String getSystemId()
+  {
+    return systemId;
+  }
+
+  public void setSystemId(String systemId)
+  {
+    this.systemId = systemId;
+  }
+
+  public String getEncoding()
+  {
+    return encoding;
+  }
+
+  public void setEncoding(String encoding)
+  {
+    this.encoding = encoding;
+  }
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSParser.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,575 @@
+/* DomLSParser.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.ls;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.List;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.DOMConfiguration;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.DOMStringList;
+import org.w3c.dom.Node;
+import org.w3c.dom.ls.DOMImplementationLS;
+import org.w3c.dom.ls.LSException;
+import org.w3c.dom.ls.LSInput;
+import org.w3c.dom.ls.LSParser;
+import org.w3c.dom.ls.LSParserFilter;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.XMLReader;
+import gnu.xml.dom.DomDocument;
+import gnu.xml.dom.DomDOMException;
+
+/**
+ * Parser implementation for GNU DOM.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class DomLSParser
+  implements LSParser, DOMConfiguration, DOMStringList, ErrorHandler
+{
+
+  private static final List SUPPORTED_PARAMETERS
+    = Arrays.asList(new String[] { "cdata-sections",
+                    "comments",
+                    "element-content-whitespace",
+                    "namespaces",
+                    "expand-entity-references",
+                    "coalescing",
+                    "validating",
+                    "xinclude-aware",
+                    "entity-resolver",
+                    "error-handler" });
+
+  private LSParserFilter filter;
+  private final boolean async;
+  private String schemaType;
+  private SAXEventSink eventSink;
+  private SAXParserFactory factory;
+  private XMLReader reader;
+
+  private boolean namespaceAware = true;
+  private boolean ignoreWhitespace;
+  private boolean expandEntityReferences;
+  private boolean ignoreComments;
+  private boolean coalescing;
+  private boolean validating;
+  private boolean xIncludeAware;
+  private EntityResolver entityResolver;
+  private ErrorHandler errorHandler;
+
+  public DomLSParser(short mode, String schemaType)
+    throws DOMException
+  {
+    switch (mode)
+      {
+      case DOMImplementationLS.MODE_ASYNCHRONOUS:
+        async = true;
+        break;
+      case DOMImplementationLS.MODE_SYNCHRONOUS:
+        async = false;
+        break;
+      default:
+        throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
+      }
+    // TODO schemaType
+    this.schemaType = schemaType;
+    factory = SAXParserFactory.newInstance();
+  }
+
+  // -- LSParser --
+  
+  public DOMConfiguration getDomConfig()
+  {
+    return this;
+  }
+  
+  public LSParserFilter getFilter()
+  {
+    return filter;
+  }
+
+  public void setFilter(LSParserFilter filter)
+  {
+    this.filter = filter;
+  }
+
+  public boolean getAsync()
+  {
+    return async;
+  }
+
+  public boolean getBusy()
+  {
+    return eventSink != null;
+  }
+
+  public Document parse(LSInput input)
+    throws DOMException, LSException
+  {
+    if (async)
+      {
+        return doParse(input);
+      }
+    else
+      {
+        synchronized (this)
+          {
+            return doParse(input);
+          }
+      }
+  }
+
+  public Document parseURI(String uri)
+    throws DOMException, LSException
+  {
+    LSInput input = new DomLSInput();
+    input.setSystemId(uri);
+    return parse(input);
+  }
+
+  public Node parseWithContext(LSInput input, Node context, short action)
+    throws DOMException, LSException
+  {
+    Document doc = (context.getNodeType() == Node.DOCUMENT_NODE) ?
+      (Document) context : context.getOwnerDocument();
+    input.setBaseURI(doc.getDocumentURI());
+    // TODO use namespaces defined on context node
+    Document ret = parse(input);
+    Node root = ret.getDocumentElement();
+    root = doc.adoptNode(root);
+    switch (action)
+      {
+      case ACTION_APPEND_AS_CHILDREN:
+        context.appendChild(root);
+        break;
+      case ACTION_REPLACE_CHILDREN:
+        Node c1 = context.getFirstChild();
+        while (c1 != null)
+          {
+            Node next = c1.getNextSibling();
+            context.removeChild(c1);
+            c1 = next;
+          }
+        context.appendChild(root);
+        break;
+      case ACTION_INSERT_BEFORE:
+        Node p1 = context.getParentNode();
+        p1.insertBefore(root, context);
+        break;
+      case ACTION_INSERT_AFTER:
+        Node p2 = context.getParentNode();
+        Node r1 = context.getNextSibling();
+        if (r1 == null)
+          {
+            p2.appendChild(root);
+          }
+        else
+          {
+            p2.insertBefore(root, r1);
+          }
+        break;
+      case ACTION_REPLACE:
+        Node p3 = context.getParentNode();
+        Node r2 = context.getNextSibling();
+        p3.removeChild(context);
+        if (r2 == null)
+          {
+            p3.appendChild(root);
+          }
+        else
+          {
+            p3.insertBefore(root, r2);
+          }
+        break;
+      }
+    return root;
+  }
+
+  public void abort()
+  {
+    if (eventSink != null)
+      {
+        eventSink.interrupt();
+      }
+  }
+
+  private Document doParse(LSInput input)
+    throws DOMException, LSException
+  {
+    // create event sink
+    if (eventSink != null)
+      {
+        throw new LSException(LSException.PARSE_ERR, "parse in progress");
+      }
+    InputSource source = getInputSource(input);
+    eventSink = (filter == null) ? new SAXEventSink() :
+      new FilteredSAXEventSink(filter);
+    // configure sink
+    eventSink.namespaceAware = namespaceAware;
+    eventSink.ignoreWhitespace = ignoreWhitespace;
+    eventSink.expandEntityReferences = expandEntityReferences;
+    eventSink.ignoreComments = ignoreComments;
+    eventSink.coalescing = coalescing;
+    // get and configure reader
+    XMLReader reader = getXMLReader();
+    eventSink.reader = reader;
+    try
+      {
+        reader.setContentHandler(eventSink);
+        reader.setDTDHandler(eventSink);
+        reader.setProperty("http://xml.org/sax/properties/lexical-handler",
+                           eventSink);
+        reader.setProperty("http://xml.org/sax/properties/declaration-handler",
+                           eventSink);
+        reader.setFeature("http://xml.org/sax/features/namespaces",
+                          namespaceAware);
+        reader.setFeature("http://xml.org/sax/features/namespace-prefixes",
+                          true);
+        reader.setFeature("http://xml.org/sax/features/validation",
+                          validating);
+        try
+          {
+            reader.setFeature("http://xml.org/sax/features/use-attributes2",
+                              true);
+          }
+        catch (SAXNotRecognizedException e)
+          {
+            // ignore
+          }
+        try
+          {
+            reader.setFeature("http://xml.org/sax/features/external-general-entities",
+                              true);
+          }
+        catch (SAXNotRecognizedException e)
+          {
+            // ignore
+          }
+        reader.setEntityResolver(entityResolver);
+        reader.setErrorHandler(errorHandler);
+        // parse
+        reader.parse(source);
+      }
+    catch (DOMException e)
+      {
+        reader = null;
+        eventSink = null;
+        throw e;
+      }
+    catch (SAXException e)
+      {
+        reader = null;
+        eventSink = null;
+        throw new DomLSException(LSException.PARSE_ERR, e);
+      }
+    catch (IOException e)
+      {
+        reader = null;
+        eventSink = null;
+        throw new DomLSException(LSException.PARSE_ERR, e);
+      }
+    // return document
+    Document ret = eventSink.doc;
+    String systemId = input.getSystemId();
+    if (systemId != null && ret instanceof DomDocument)
+      {
+        ((DomDocument) ret).setDocumentURI(systemId);
+      }
+    eventSink = null;
+    return ret;
+  }
+
+  private XMLReader getXMLReader()
+    throws LSException
+  {
+    if (reader == null)
+      {
+        factory.setNamespaceAware(namespaceAware);
+        factory.setValidating(validating);
+        factory.setXIncludeAware(xIncludeAware);
+        try
+          {
+            SAXParser parser = factory.newSAXParser();
+            reader = parser.getXMLReader();
+          }
+        catch (ParserConfigurationException e)
+          {
+            throw new DomLSException(LSException.PARSE_ERR, e);
+          }
+        catch (SAXException e)
+          {
+            throw new DomLSException(LSException.PARSE_ERR, e);
+          }
+      }
+    return reader;
+  }
+
+  private InputSource getInputSource(LSInput input)
+    throws LSException
+  {
+    InputSource source = null;
+    String systemId = input.getSystemId();
+    InputStream in = input.getByteStream();
+    if (in != null)
+      {
+        source = new InputSource(in);
+        source.setSystemId(systemId);
+      }
+    if (source == null && entityResolver != null)
+      {
+        String publicId = input.getPublicId();
+        try
+          {
+            source = entityResolver.resolveEntity(publicId, systemId);
+          }
+        catch (SAXException e)
+          {
+            throw new DomLSException(LSException.PARSE_ERR, e);
+          } 
+        catch (IOException e)
+          {
+            throw new DomLSException(LSException.PARSE_ERR, e);
+          } 
+      }
+    if (source == null)
+      {
+        URL url = null;
+        String base = input.getBaseURI();
+        try
+          {
+            try
+              {
+                URL baseURL = (base == null) ? null : new URL(base);
+                url = (baseURL == null) ? new URL(systemId) :
+                  new URL(baseURL, systemId);
+              }
+            catch (MalformedURLException e)
+              {
+                File baseFile = (base == null) ? null : new File(base);
+                url = (baseFile == null) ? new File(systemId).toURL() :
+                  new File(baseFile, systemId).toURL();
+              }
+            in = url.openStream();
+            systemId = url.toString();
+            source = new InputSource(in);
+            source.setSystemId(systemId);
+          }
+        catch (IOException e)
+          {
+            throw new DomLSException(LSException.PARSE_ERR, e);
+          }
+      }
+    return source;
+  }
+
+  // -- DOMConfiguration --
+
+  public void setParameter(String name, Object value)
+    throws DOMException
+  {
+    name = name.toLowerCase();
+    if ("cdata-sections".equals(name))
+      {
+        coalescing = !((Boolean) value).booleanValue();
+      }
+    else if ("comments".equals(name))
+      {
+        ignoreComments = !((Boolean) value).booleanValue();
+      }
+    else if ("element-content-whitespace".equals(name))
+      {
+        ignoreWhitespace = !((Boolean) value).booleanValue();
+      }
+    else if ("namespaces".equals(name))
+      {
+        namespaceAware = ((Boolean) value).booleanValue();
+      }
+    else if ("expand-entity-references".equals(name))
+      {
+        expandEntityReferences = ((Boolean) value).booleanValue();
+      }
+    else if ("coalescing".equals(name))
+      {
+        coalescing = ((Boolean) value).booleanValue();
+      }
+    else if ("validating".equals(name))
+      {
+        validating = ((Boolean) value).booleanValue();
+      }
+    else if ("xinclude-aware".equals(name))
+      {
+        xIncludeAware = ((Boolean) value).booleanValue();
+      }
+    else if ("entity-resolver".equals(name))
+      {
+        entityResolver = (EntityResolver) value;
+      }
+    else if ("error-handler".equals(name))
+      {
+        errorHandler = (ErrorHandler) value;
+      }
+    else
+      {
+        throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
+      }
+    // invalidate reader, a new one will be created
+    reader = null;
+  }
+
+  public Object getParameter(String name)
+    throws DOMException
+  {
+    name = name.toLowerCase();
+    if ("cdata-sections".equals(name))
+      {
+        return coalescing ? Boolean.FALSE : Boolean.TRUE;
+      }
+    else if ("comments".equals(name))
+      {
+        return ignoreComments ? Boolean.FALSE : Boolean.TRUE;
+      }
+    else if ("element-content-whitespace".equals(name))
+      {
+        return ignoreWhitespace ? Boolean.FALSE : Boolean.TRUE;
+      }
+    else if ("namespaces".equals(name))
+      {
+        return namespaceAware ? Boolean.TRUE : Boolean.FALSE;
+      }
+    else if ("expand-entity-references".equals(name))
+      {
+        return expandEntityReferences ? Boolean.TRUE : Boolean.FALSE;
+      }
+    else if ("coalescing".equals(name))
+      {
+        return coalescing ? Boolean.TRUE : Boolean.FALSE;
+      }
+    else if ("validating".equals(name))
+      {
+        return validating ? Boolean.TRUE : Boolean.FALSE;
+      }
+    else if ("xinclude-aware".equals(name))
+      {
+        return xIncludeAware ? Boolean.TRUE : Boolean.FALSE;
+      }
+    else if ("entity-resolver".equals(name))
+      {
+        return entityResolver;
+      }
+    else if ("error-handler".equals(name))
+      {
+        return errorHandler;
+      }
+    else
+      {
+        throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
+      }
+  }
+
+  public boolean canSetParameter(String name, Object value)
+  {
+    return contains(name);
+  }
+
+  public DOMStringList getParameterNames()
+  {
+    return this;
+  }
+
+  // -- DOMStringList --
+
+  public String item(int i)
+  {
+    return (String) SUPPORTED_PARAMETERS.get(i);
+  }
+
+  public int getLength()
+  {
+    return SUPPORTED_PARAMETERS.size();
+  }
+
+  public boolean contains(String str)
+  {
+    return SUPPORTED_PARAMETERS.contains(str);
+  }
+
+  // -- ErrorHandler --
+
+  public void warning(SAXParseException e)
+    throws SAXException
+  {
+    if (errorHandler != null)
+      {
+        errorHandler.warning(e);
+      }
+  }
+
+  public void error(SAXParseException e)
+    throws SAXException
+  {
+    if (errorHandler != null)
+      {
+        errorHandler.error(e);
+      }
+  }
+
+  public void fatalError(SAXParseException e)
+    throws SAXException
+  {
+    if (errorHandler != null)
+      {
+        errorHandler.fatalError(e);
+      }
+    abort();
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSSerializer.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSSerializer.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSSerializer.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/DomLSSerializer.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,354 @@
+/* DomLSSerializer.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.ls;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Arrays;
+import java.util.List;
+import org.w3c.dom.DOMConfiguration;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.DOMStringList;
+import org.w3c.dom.Node;
+import org.w3c.dom.ls.LSException;
+import org.w3c.dom.ls.LSOutput;
+import org.w3c.dom.ls.LSSerializer;
+import org.w3c.dom.ls.LSSerializerFilter;
+import org.w3c.dom.traversal.NodeFilter;
+import gnu.xml.dom.DomDOMException;
+import gnu.xml.transform.StreamSerializer;
+
+/**
+ * Serialize a DOM node to a stream.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class DomLSSerializer
+  extends StreamSerializer
+  implements LSSerializer, DOMConfiguration, DOMStringList
+{
+
+  private static final List SUPPORTED_PARAMETERS =
+    Arrays.asList(new String[] {"discard-default-content",
+                  "xml-declaration"});
+
+  private LSSerializerFilter filter;
+  private StreamSerializer serializer;
+
+  public DomLSSerializer()
+  {
+    super();
+    discardDefaultContent = true;
+  }
+
+  // -- LSSerializer --
+  
+  public DOMConfiguration getDomConfig()
+  {
+    return this;
+  }
+
+  public String getNewLine()
+  {
+    return eol;
+  }
+
+  public void setNewLine(String newLine)
+  {
+    if (newLine == null)
+      {
+        newLine = System.getProperty("line.separator");
+      }
+    eol = newLine;
+  }
+
+  public LSSerializerFilter getFilter()
+  {
+    return filter;
+  }
+
+  public void setFilter(LSSerializerFilter filter)
+  {
+    this.filter = filter;
+  }
+
+  public boolean write(Node node, LSOutput output)
+    throws LSException
+  {
+    OutputStream out = output.getByteStream();
+    try
+      {
+        if (out == null)
+          {
+            String systemId = output.getSystemId();
+            try
+              {
+                URL url = new URL(systemId);
+                URLConnection connection = url.openConnection();
+                connection.setDoOutput(true);
+                if (connection instanceof HttpURLConnection)
+                  {
+                    ((HttpURLConnection) connection).setRequestMethod("PUT");
+                  }
+                out = connection.getOutputStream();
+              }
+            catch (MalformedURLException e)
+              {
+                File file = new File(systemId);
+                out = new FileOutputStream(file);
+              }
+          }
+        serialize(node, out);
+        out.flush();
+        return true;
+      }
+    catch (IOException e)
+      {
+        throw new DomLSException(LSException.SERIALIZE_ERR, e);
+      }
+  }
+
+  public boolean writeToURI(Node node, String uri)
+    throws LSException
+  {
+    LSOutput output = new DomLSOutput();
+    output.setSystemId(uri);
+    return write(node, output);
+  }
+
+  public String writeToString(Node node)
+    throws DOMException, LSException
+  {
+    Writer writer = new StringWriter();
+    LSOutput output = new DomLSOutput();
+    output.setCharacterStream(writer);
+    write(node, output);
+    return writer.toString();
+  }
+
+  public void serialize(Node node, OutputStream out)
+    throws IOException
+  {
+    if (filter == null)
+      {
+        super.serialize(node, out);
+      }
+    else
+      {
+        int wts = filter.getWhatToShow();
+        if (wts != NodeFilter.SHOW_ALL)
+          {
+            switch (node.getNodeType())
+              {
+              case Node.ATTRIBUTE_NODE:
+                if ((wts & NodeFilter.SHOW_ATTRIBUTE) == 0)
+                  {
+                    super.serialize(node, out);
+                    return;
+                  }
+                break;
+              case Node.TEXT_NODE:
+                if ((wts & NodeFilter.SHOW_TEXT) == 0)
+                  {
+                    super.serialize(node, out);
+                    return;
+                  }
+                break;
+              case Node.ELEMENT_NODE:
+                if ((wts & NodeFilter.SHOW_ELEMENT) == 0)
+                  {
+                    super.serialize(node, out);
+                    return;
+                  }
+                break;
+              case Node.CDATA_SECTION_NODE:
+                if ((wts & NodeFilter.SHOW_CDATA_SECTION) == 0)
+                  {
+                    super.serialize(node, out);
+                    return;
+                  }
+                break;
+              case Node.COMMENT_NODE:
+                if ((wts & NodeFilter.SHOW_COMMENT) == 0)
+                  {
+                    super.serialize(node, out);
+                    return;
+                  }
+                break;
+              case Node.DOCUMENT_NODE:
+                if ((wts & NodeFilter.SHOW_DOCUMENT) == 0)
+                  {
+                    super.serialize(node, out);
+                    return;
+                  }
+                break;
+              case Node.DOCUMENT_TYPE_NODE:
+                if ((wts & NodeFilter.SHOW_DOCUMENT_TYPE) == 0)
+                  {
+                    super.serialize(node, out);
+                    return;
+                  }
+                break;
+              case Node.PROCESSING_INSTRUCTION_NODE:
+                if ((wts & NodeFilter.SHOW_PROCESSING_INSTRUCTION) == 0)
+                  {
+                    super.serialize(node, out);
+                    return;
+                  }
+                break;
+              case Node.DOCUMENT_FRAGMENT_NODE:
+                if ((wts & NodeFilter.SHOW_DOCUMENT_FRAGMENT) == 0)
+                  {
+                    super.serialize(node, out);
+                    return;
+                  }
+                break;
+              case Node.ENTITY_NODE:
+                if ((wts & NodeFilter.SHOW_ENTITY) == 0)
+                  {
+                    super.serialize(node, out);
+                    return;
+                  }
+                break;
+              case Node.ENTITY_REFERENCE_NODE:
+                if ((wts & NodeFilter.SHOW_ENTITY_REFERENCE) == 0)
+                  {
+                    super.serialize(node, out);
+                    return;
+                  }
+                break;
+              case Node.NOTATION_NODE:
+                if ((wts & NodeFilter.SHOW_NOTATION) == 0)
+                  {
+                    super.serialize(node, out);
+                    return;
+                  }
+                break;
+              }
+          }
+        switch (filter.acceptNode(node))
+          {
+          case NodeFilter.FILTER_ACCEPT:
+            super.serialize(node, out);
+            break;
+          case NodeFilter.FILTER_REJECT:
+            break;
+          case NodeFilter.FILTER_SKIP:
+            Node first = node.getFirstChild();
+            if (first != null)
+              {
+                serialize(first, out);
+              }
+            break;
+          }
+      }
+  }
+
+  // -- DOMConfiguration --
+
+  public void setParameter(String name, Object value)
+    throws DOMException
+  {
+    if ("discard-default-content".equals(name))
+      {
+        discardDefaultContent = "true".equals(value.toString());
+      }
+    else if ("xml-declaration".equals(name))
+      {
+        xmlDeclaration = "false".equals(value.toString());
+      }
+    else
+      {
+        throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
+      }
+  }
+
+  public Object getParameter(String name)
+    throws DOMException
+  {
+    if ("discard-default-content".equals(name))
+      {
+        return discardDefaultContent ? "true" : "false";
+      }
+    else if ("xml-declaration".equals(name))
+      {
+        return xmlDeclaration ? "true" : "false";
+      }
+    else
+      {
+        throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
+      }
+  }
+
+  public boolean canSetParameter(String name, Object value)
+  {
+    return contains(name);
+  }
+
+  public DOMStringList getParameterNames()
+  {
+    return this;
+  }
+
+  // -- DOMStringList --
+
+  public String item(int i)
+  {
+    return (String) SUPPORTED_PARAMETERS.get(i);
+  }
+
+  public int getLength()
+  {
+    return SUPPORTED_PARAMETERS.size();
+  }
+
+  public boolean contains(String str)
+  {
+    return SUPPORTED_PARAMETERS.contains(str);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/FilteredSAXEventSink.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/FilteredSAXEventSink.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/FilteredSAXEventSink.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/FilteredSAXEventSink.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,354 @@
+/* FilteredSAXEventSink.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.ls;
+
+import java.util.LinkedList;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.Text;
+import org.w3c.dom.ls.LSParserFilter;
+import org.w3c.dom.traversal.NodeFilter;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+/**
+ * A SAX event sink that calls out to a parser filter in order to decide
+ * whether to insert nodes into the tree.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class FilteredSAXEventSink
+  extends SAXEventSink
+{
+
+  final LSParserFilter filter;
+  final int whatToShow;
+
+  /**
+   * Stack of elements to insert.
+   */
+  LinkedList nodes;
+  
+  /**
+   * Corresponding stack of filter decisions about the nodes.
+   */
+  LinkedList decisions;
+
+  /**
+   * True when rejecting child nodes.
+   */
+  boolean rejecting;
+
+  FilteredSAXEventSink(LSParserFilter filter)
+  {
+    this.filter = filter;
+    whatToShow = filter.getWhatToShow();
+  }
+
+  public void startDocument()
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    nodes = new LinkedList();
+    decisions = new LinkedList();
+    
+    super.startDocument();
+  }
+
+  public void endDocument()
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    super.endDocument();
+
+    switch (getDecision(ctx, false))
+      {
+      case LSParserFilter.FILTER_REJECT:
+        ctx = null;
+        doc = null;
+        break;
+      }
+    
+    nodes = null;
+    decisions = null;
+  }
+
+  public void startElement(String uri, String localName, String qName,
+                           Attributes atts)
+    throws SAXException
+  {
+    if (rejecting || interrupted)
+      {
+        return;
+      }
+    Element element = createElement(uri, localName, qName, atts);
+    ctx = element;
+    
+    short decision = getDecision(element, true);
+    nodes.addLast(element);
+    decisions.addLast(new Short(decision));
+
+    switch (decision)
+      {
+      case LSParserFilter.FILTER_REJECT:
+        rejecting = true;
+        break;
+      case LSParserFilter.FILTER_INTERRUPT:
+        interrupted = true;
+        break;
+      }
+  }
+
+  protected Attr createAttr(Attributes atts, int index)
+  {
+    Attr attr = super.createAttr(atts, index);
+    short decision = getDecision(attr, false);
+    switch (decision)
+      {
+      case LSParserFilter.FILTER_REJECT:
+        return null;
+      case LSParserFilter.FILTER_INTERRUPT:
+        interrupted = true;
+        return null;
+      }
+    return attr;
+  }
+
+  public void endElement(String uri, String localName, String qName)
+    throws SAXException
+  {
+    if (rejecting || interrupted)
+      {
+        return;
+      }
+    super.endElement(uri, localName, qName);
+    
+    Element element = (Element) nodes.removeLast();
+    Node parent = nodes.isEmpty() ? doc : (Node) nodes.getLast();
+    ctx = parent;
+    short decision = ((Short) decisions.removeLast()).shortValue();
+    switch (decision)
+      {
+      case LSParserFilter.FILTER_SKIP:
+        // Add all children of element to parent
+        for (Node child = element.getFirstChild(); child != null;
+             child = child.getNextSibling())
+          {
+            parent.insertBefore(child, element);
+          }
+        return;
+      case LSParserFilter.FILTER_REJECT:
+        rejecting = false;
+        break;
+      }
+    decision = getDecision(element, false);
+    switch (decision)
+      {
+      case LSParserFilter.FILTER_ACCEPT:
+        parent.appendChild(element);
+        break;
+      case LSParserFilter.FILTER_INTERRUPT:
+        interrupted = true;
+        break;
+      }
+  }
+
+  public void characters(char[] c, int off, int len)
+    throws SAXException
+  {
+    if (rejecting || interrupted)
+      {
+        return;
+      }
+    Text text = createText(c, off, len);
+    short decision = getDecision(text, false);
+    switch (decision)
+      {
+      case LSParserFilter.FILTER_ACCEPT:
+        ctx.appendChild(text);
+        break;
+      case LSParserFilter.FILTER_INTERRUPT:
+        interrupted = true;
+        break;
+      }
+  }
+
+  public void processingInstruction(String target, String data)
+    throws SAXException
+  {
+    if (rejecting || interrupted || inDTD)
+      {
+        return;
+      }
+    Node pi = createProcessingInstruction(target, data);
+    short decision = getDecision(pi, false);
+    switch (decision)
+      {
+      case LSParserFilter.FILTER_ACCEPT:
+        ctx.appendChild(pi);
+        break;
+      case LSParserFilter.FILTER_INTERRUPT:
+        interrupted = true;
+        break;
+      }
+  }
+
+  public void startDTD(String name, String publicId, String systemId)
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    Node doctype = createDocumentType(name, publicId, systemId);
+    ctx = doctype;
+    inDTD = true;
+    nodes.addLast(doctype);
+    decisions.addLast(new Short(LSParserFilter.FILTER_ACCEPT));
+  }
+
+  public void endDTD()
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    Node doctype = (Node) nodes.removeLast();
+    decisions.removeLast();
+    inDTD = false;
+    ctx = doc;
+    short decision = getDecision(doctype, false);
+    switch (decision)
+      {
+      case LSParserFilter.FILTER_ACCEPT:
+        ctx.appendChild(doctype);
+        break;
+      case LSParserFilter.FILTER_INTERRUPT:
+        interrupted = true;
+        break;
+      }
+  }
+
+  public void comment(char[] c, int off, int len)
+    throws SAXException
+  {
+    if (rejecting || interrupted || inDTD)
+      {
+        return;
+      }
+    Node comment = createComment(c, off, len);
+    short decision = getDecision(comment, false);
+    switch (decision)
+      {
+      case LSParserFilter.FILTER_ACCEPT:
+        ctx.appendChild(comment);
+        break;
+      case LSParserFilter.FILTER_INTERRUPT:
+        interrupted = true;
+        break;
+      }
+  }
+
+  // TODO declarations
+
+  short getDecision(Node node, boolean start)
+  {
+    boolean show = (whatToShow == NodeFilter.SHOW_ALL);
+    if (!show)
+      {
+        switch (node.getNodeType())
+          {
+          case Node.ATTRIBUTE_NODE:
+            show = ((whatToShow & NodeFilter.SHOW_ATTRIBUTE) != 0);
+            break;     
+          case Node.TEXT_NODE:
+            show = ((whatToShow & NodeFilter.SHOW_TEXT) != 0);
+            break;     
+          case Node.CDATA_SECTION_NODE:
+            show = ((whatToShow & NodeFilter.SHOW_CDATA_SECTION) != 0);
+            break;     
+          case Node.ELEMENT_NODE:
+            show = ((whatToShow & NodeFilter.SHOW_ELEMENT) != 0);
+            break;     
+          case Node.COMMENT_NODE:
+            show = ((whatToShow & NodeFilter.SHOW_COMMENT) != 0);
+            break;     
+          case Node.DOCUMENT_NODE:
+            show = ((whatToShow & NodeFilter.SHOW_DOCUMENT) != 0);
+            break;     
+          case Node.PROCESSING_INSTRUCTION_NODE:
+            show = ((whatToShow & NodeFilter.SHOW_PROCESSING_INSTRUCTION) != 0);
+            break;     
+          case Node.DOCUMENT_FRAGMENT_NODE:
+            show = ((whatToShow & NodeFilter.SHOW_DOCUMENT_FRAGMENT) != 0);
+            break;     
+          case Node.DOCUMENT_TYPE_NODE:
+            show = ((whatToShow & NodeFilter.SHOW_DOCUMENT_TYPE) != 0);
+            break;     
+          case Node.ENTITY_REFERENCE_NODE:
+            show = ((whatToShow & NodeFilter.SHOW_ENTITY_REFERENCE) != 0);
+            break;     
+          case Node.ENTITY_NODE:
+            show = ((whatToShow & NodeFilter.SHOW_ENTITY) != 0);
+            break;     
+          case Node.NOTATION_NODE:
+            show = ((whatToShow & NodeFilter.SHOW_NOTATION) != 0);
+            break;     
+          }
+      }
+    if (!show)
+      {
+        return LSParserFilter.FILTER_ACCEPT;
+      }
+    if (start)
+      {
+        return filter.startElement((Element) node);
+      }
+    return filter.acceptNode(node);
+  }
+
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/ReaderInputStream.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/ReaderInputStream.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/ReaderInputStream.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/ReaderInputStream.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,237 @@
+/* ReaderInputStream.java -- 
+   Copyright (C) 1999, 2000, 2001, 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.ls;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.Reader;
+
+/**
+ * Character stream wrapper.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ * @author <a href='mailto:mark at klomp.org'>Mark Wielaard</a>
+ */
+public class ReaderInputStream
+  extends InputStream
+{
+
+  private Reader reader;
+  private String encoding;
+
+  // Holds extra spillover data if necessary
+  private byte extra[];
+  private int pos;
+
+  private byte extra_marked[];
+  private int pos_marked;
+
+  public ReaderInputStream(Reader reader)
+  {
+    this.reader = reader;
+    this.encoding = "UTF-8";
+  }
+
+  void setEncoding(String encoding)
+  {
+    this.encoding = encoding;
+  }
+
+  public int read()
+    throws IOException
+  {
+    if (extra != null)
+      {
+        int result = extra[pos];
+        pos++;
+        if (pos >= extra.length)
+          {
+            extra = null;
+          }
+        return result;
+      }
+    return reader.read();
+  }
+
+  public int read(byte[] b)
+    throws IOException
+  {
+    return read(b, 0, b.length);
+  }
+
+  public int read(byte[] b, int off, int len)
+    throws IOException
+  {
+    if (len == 0)
+      {
+        return 0;
+      }
+
+    if (extra != null)
+      {
+        int available = extra.length - pos;
+        int l = available < len ? available : len;
+        System.arraycopy(extra, 0, b, off, l);
+        pos += l;
+        if (pos >= extra.length)
+          {
+            extra = null;
+          }
+        return l;
+      }
+
+    char[] c = new char[len];
+    int l = reader.read(c, 0, len);
+    if (l == -1)
+      {
+        return -1;
+      }
+
+    String s = new String(c, 0, l);
+    byte[] d = s.getBytes(encoding);
+    
+    int available = d.length;
+    int more = d.length - len;
+    if (more > 0)
+      {
+        extra = new byte[more];
+        pos = 0;
+        System.arraycopy(d, len, extra, 0, more);
+        available -= more;
+      }
+       
+    System.arraycopy(d, 0, b, off, available);
+    return available;
+  }
+
+  public void close()
+    throws IOException
+  {
+    reader.close();
+  }
+
+  public boolean markSupported()
+  {
+    return reader.markSupported();
+  }
+
+  public void mark(int limit)
+  {
+    if (extra != null)
+      {
+        extra_marked = new byte[extra.length];
+        System.arraycopy(extra, 0, extra_marked, 0, extra.length);
+        pos_marked = pos;
+      }
+    else
+      {
+        extra_marked = null;
+      }
+
+    try
+      {
+        // Note that this might be a bit more than asked for.
+        // Because we might also have the extra_marked bytes.
+        // That is fine (and necessary for reset() to work).
+        reader.mark(limit);
+      }
+    catch (IOException ioe)
+      {
+        throw new RuntimeException(ioe);
+      }
+  }
+
+  public void reset()
+    throws IOException
+  {
+    extra = extra_marked;
+    pos = pos_marked;
+    extra_marked = null;
+
+    reader.reset();
+  }
+
+  public long skip(long n)
+    throws IOException
+  {
+    long done = 0;
+    if (extra != null)
+      {
+        int available = extra.length - pos;
+        done = available < n ? available : n;
+        pos += done;
+        if (pos >= extra.length)
+          {
+            extra = null;
+          }
+      }
+
+    n -= done;
+    if (n > 0)
+      {
+        return reader.skip(n) + done;
+      }
+    else
+      {
+        return done;
+      }
+  }
+
+  /**
+   *  Returns conservative number of bytes available without blocking.
+   *  Actual number of bytes that can be read without blocking might
+   *  be (much) bigger.
+   */
+  public int available()
+    throws IOException
+  {
+    if (extra != null)
+      {
+        return pos - extra.length;
+      }
+
+    return reader.ready() ? 1 : 0;
+  }
+
+  public String toString()
+  {
+    return getClass().getName() + "[" + reader + ", " + encoding + "]";
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/SAXEventSink.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/SAXEventSink.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/SAXEventSink.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/SAXEventSink.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,583 @@
+/* SAXEventSink.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.ls;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import javax.xml.XMLConstants;
+import org.w3c.dom.Attr;
+import org.w3c.dom.DocumentType;
+import org.w3c.dom.Element;
+import org.w3c.dom.Entity;
+import org.w3c.dom.EntityReference;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.Text;
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.DTDHandler;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXNotSupportedException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.ext.Attributes2;
+import org.xml.sax.ext.DeclHandler;
+import org.xml.sax.ext.LexicalHandler;
+import org.xml.sax.ext.Locator2;
+import gnu.xml.dom.DomAttr;
+import gnu.xml.dom.DomDocument;
+import gnu.xml.dom.DomDoctype;
+import gnu.xml.dom.DomNode;
+
+/**
+ * A SAX content and lexical handler used to construct a DOM document.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class SAXEventSink
+  implements ContentHandler, LexicalHandler, DTDHandler, DeclHandler
+{
+
+  private static final String XMLNS_URI = XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
+  private static final String XMLNS_PREFIX = XMLConstants.XMLNS_ATTRIBUTE;
+  private static final HashSet PREDEFINED_ENTITIES = new HashSet();
+  static
+  {
+    PREDEFINED_ENTITIES.add("amp");
+    PREDEFINED_ENTITIES.add("lt");
+    PREDEFINED_ENTITIES.add("gt");
+    PREDEFINED_ENTITIES.add("quot");
+    PREDEFINED_ENTITIES.add("apos");
+  }
+
+  boolean namespaceAware;
+  boolean ignoreWhitespace;
+  boolean expandEntityReferences;
+  boolean ignoreComments;
+  boolean coalescing;
+
+  XMLReader reader; // reference back to the parser to get features
+  
+  DomDocument doc; // document being constructed
+  Node ctx; // current context (parent node)
+  LinkedList entityCtx; // entity context
+  List pending; // namespace nodes waiting for a declaring element
+  Locator locator;
+  boolean inCDATA;
+  boolean inDTD;
+  boolean interrupted;
+
+  void interrupt()
+  {
+    interrupted = true;
+  }
+
+  // -- ContentHandler2 --
+  
+  public void setDocumentLocator(Locator locator)
+  {
+    this.locator = locator;
+  }
+
+  public void startDocument()
+    throws SAXException
+  {
+    if (namespaceAware)
+      {
+        pending = new LinkedList();
+      }
+    doc = new DomDocument();
+    doc.setStrictErrorChecking(false);
+    doc.setBuilding(true);
+    ctx = doc;
+
+    final String FEATURES = "http://xml.org/sax/features/";
+    final String PROPERTIES = "http://xml.org/sax/properties/";
+    final String GNU_PROPERTIES = "http://gnu.org/sax/properties/";
+
+    boolean standalone = reader.getFeature(FEATURES + "is-standalone");
+    doc.setXmlStandalone(standalone);
+    try
+      {
+        String version = (String) reader.getProperty(PROPERTIES +
+                                                     "document-xml-version");
+        doc.setXmlVersion(version);
+      }
+    catch (SAXNotRecognizedException e)
+      {
+      }
+    catch (SAXNotSupportedException e)
+      {
+      }
+    if (locator != null && locator instanceof Locator2)
+      {
+        String encoding = ((Locator2) locator).getEncoding();
+        doc.setInputEncoding(encoding);
+      }
+    try
+      {
+        String encoding = (String) reader.getProperty(GNU_PROPERTIES +
+                                                      "document-xml-encoding");
+        doc.setXmlEncoding(encoding);
+      }
+    catch (SAXNotRecognizedException e)
+      {
+      }
+    catch (SAXNotSupportedException e)
+      {
+      }
+  }
+
+  public void endDocument()
+    throws SAXException
+  {
+    doc.setStrictErrorChecking(true);
+    doc.setBuilding(false);
+    DomDoctype doctype = (DomDoctype) doc.getDoctype();
+    if (doctype != null)
+      {
+        doctype.makeReadonly();
+      }
+    ctx = null;
+    locator = null;
+  }
+
+  public void startPrefixMapping(String prefix, String uri)
+    throws SAXException
+  {
+    if (namespaceAware)
+      {
+        String nsName = (prefix != null && prefix.length() > 0) ?
+          XMLNS_PREFIX + ":" + prefix : XMLNS_PREFIX;
+        DomAttr ns = (DomAttr) doc.createAttributeNS(XMLNS_URI, nsName);
+        ns.setNodeValue(uri);
+        if (ctx.getNodeType() == Node.ATTRIBUTE_NODE)
+          {
+            // Add to owner element
+            Node target = ((Attr) ctx).getOwnerElement();
+            target.getAttributes().setNamedItemNS(ns);
+          }
+        else
+          {
+            // Add to pending list; namespace node will be inserted when
+            // element is seen
+            pending.add(ns);
+          }
+      }
+  }
+
+  public void endPrefixMapping(String prefix)
+    throws SAXException
+  {
+  }
+
+  public void startElement(String uri, String localName, String qName,
+                           Attributes atts)
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    Element element = createElement(uri, localName, qName, atts);
+    // add element to context
+    ctx.appendChild(element);
+    ctx = element;
+  }
+
+  protected Element createElement(String uri, String localName, String qName,
+                                  Attributes atts)
+    throws SAXException
+  {
+    // create element node
+    Element element = namespaceAware ?
+      doc.createElementNS(uri, qName) :
+      doc.createElement(qName);
+    NamedNodeMap attrs = element.getAttributes();
+    if (namespaceAware && !pending.isEmpty())
+      {
+        // add pending namespace nodes
+        for (Iterator i = pending.iterator(); i.hasNext(); )
+          {
+            Node ns = (Node) i.next();
+            attrs.setNamedItemNS(ns);
+          }
+        pending.clear();
+      }
+    // add attributes
+    int len = atts.getLength();
+    for (int i = 0; i < len; i++)
+      {
+        // create attribute
+        Attr attr = createAttr(atts, i);
+        if (attr != null)
+          {
+            // add attribute to element
+            if (namespaceAware)
+              {
+                attrs.setNamedItemNS(attr);
+              }
+            else
+              {
+                attrs.setNamedItem(attr);
+              }
+          }
+      }
+    return element;
+  }
+
+  protected Attr createAttr(Attributes atts, int index)
+  {
+    DomAttr attr;
+    if (namespaceAware)
+      {
+        String a_uri = atts.getURI(index);
+        String a_qName = atts.getQName(index);
+        attr = (DomAttr) doc.createAttributeNS(a_uri, a_qName);
+      }
+    else
+      {
+        String a_qName = atts.getQName(index);
+        attr = (DomAttr) doc.createAttribute(a_qName);
+      }
+    attr.setNodeValue(atts.getValue(index));
+    if (atts instanceof Attributes2)
+      {
+        Attributes2 atts2 = (Attributes2) atts;
+        // TODO attr.setDeclared(atts2.isDeclared(index));
+        attr.setSpecified(atts2.isSpecified(index));
+      }
+    return attr;
+  }
+
+  public void endElement(String uri, String localName, String qName)
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    if (namespaceAware)
+      {
+        pending.clear();
+      }
+    ctx = ctx.getParentNode();
+  }
+
+  public void characters(char[] c, int off, int len)
+    throws SAXException
+  {
+    if (interrupted || len < 1)
+      {
+        return;
+      }
+    ctx.appendChild(createText(c, off, len));
+  }
+
+  protected Text createText(char[] c, int off, int len)
+    throws SAXException
+  {
+    Text text = (inCDATA && !coalescing) ?
+      doc.createCDATASection(new String(c, off, len)) :
+      doc.createTextNode(new String(c, off, len));
+    return text;
+  }
+
+  public void ignorableWhitespace(char[] c, int off, int len)
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    if (!ignoreWhitespace)
+      {
+        characters(c, off, len);
+      }
+  }
+
+  public void processingInstruction(String target, String data)
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    Node pi = createProcessingInstruction(target, data);
+    ctx.appendChild(pi);
+  }
+
+  protected Node createProcessingInstruction(String target, String data)
+  {
+    return doc.createProcessingInstruction(target, data);
+  }
+
+  public void skippedEntity(String name)
+    throws SAXException
+  {
+    // This callback is totally pointless
+  }
+
+  // -- LexicalHandler --
+  
+  public void startDTD(String name, String publicId, String systemId)
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    Node doctype = createDocumentType(name, publicId, systemId);
+    doc.appendChild(doctype);
+    ctx = doctype;
+    inDTD = true;
+  }
+
+  protected Node createDocumentType(String name, String publicId,
+                                    String systemId)
+  {
+    return new DomDoctype(doc, name, publicId, systemId);
+  }
+
+  public void endDTD()
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    inDTD = false;
+    ctx = ctx.getParentNode();
+  }
+
+  public void startEntity(String name)
+    throws SAXException
+  {
+    if (interrupted)
+      return;
+    DocumentType doctype = doc.getDoctype();
+    if (doctype == null)
+      {
+        throw new SAXException("SAX parser error: " +
+                               "reference to entity in undeclared doctype");
+      }
+    if ("[dtd]".equals(name) || name.charAt(0) == '%')
+      return;
+    if (PREDEFINED_ENTITIES.contains(name))
+      return;
+    // Get entity
+    NamedNodeMap entities = doctype.getEntities();
+    Entity entity = (Entity) entities.getNamedItem(name);
+    if (entity == null)
+      {
+        throw new SAXException("SAX parser error: " +
+                               "reference to undeclared entity: " + name);
+      }
+    EntityReference ref = doc.createEntityReference(name);
+    // DomDocument populates with the entity replacement text, remove this
+    Node child = ref.getFirstChild();
+    while (child != null)
+      {
+        Node nextChild = child.getNextSibling();
+        ref.removeChild(child);
+        child = nextChild;
+      }
+    ctx.appendChild(ref);
+    ctx = ref;
+  }
+
+  public void endEntity(String name)
+    throws SAXException
+  {
+    if (interrupted)
+      return;
+    if ("[dtd]".equals(name) || name.charAt(0) == '%')
+      return;
+    if (PREDEFINED_ENTITIES.contains(name))
+      return;
+    // Get entity reference
+    EntityReference ref = (EntityReference) ctx;
+    if (!ref.getNodeName().equals(name))
+      throw new SAXException("expecting end of "+ref.getNodeName()+" entity");
+    ctx = ctx.getParentNode();
+    if (ref instanceof DomNode)
+      ((DomNode) ref).makeReadonly();
+    if (expandEntityReferences)
+      {
+        // Move entity content from reference node onto context
+        Node child = ref.getFirstChild();
+        while (child != null)
+          {
+            Node nextChild = child.getNextSibling();
+            ctx.appendChild(child);
+            child = nextChild;
+          }
+        ctx.removeChild(ref);
+      }
+  }
+
+  public void startCDATA()
+    throws SAXException
+  {
+    inCDATA = true;
+  }
+
+  public void endCDATA()
+    throws SAXException
+  {
+    inCDATA = false;
+  }
+
+  public void comment(char[] c, int off, int len)
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    Node comment = createComment(c, off, len);
+    ctx.appendChild(comment);
+  }
+
+  protected Node createComment(char[] c, int off, int len)
+  {
+    return doc.createComment(new String(c, off, len));
+  }
+
+  // -- DTDHandler --
+
+  public void notationDecl(String name, String publicId, String systemId)
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    if (!inDTD)
+      throw new SAXException("notation decl outside DTD");
+    DomDoctype doctype = (DomDoctype) ctx;
+    doctype.declareNotation(name, publicId, systemId);
+  }
+
+  public void unparsedEntityDecl(String name, String publicId, String systemId,
+                                 String notationName)
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    if (!inDTD)
+      throw new SAXException("unparsed entity decl outside DTD");
+    DomDoctype doctype = (DomDoctype) ctx;
+    Entity entity = doctype.declareEntity(name, publicId, systemId,
+                                          notationName);
+  }
+
+  // -- DeclHandler --
+  
+  public void elementDecl(String name, String model)
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    if (!inDTD)
+      throw new SAXException("element decl outside DTD");
+    // Ignore fake element declarations generated by ValidationConsumer.
+    // If an element is not really declared in the DTD it will not be
+    // declared in the document model.
+    if (!(ctx instanceof DomDoctype))
+      {
+        return;
+      }
+    DomDoctype doctype = (DomDoctype) ctx;
+    doctype.elementDecl(name, model);
+  }
+
+  public void attributeDecl(String eName, String aName, String type,
+                            String mode, String value)
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    if (!inDTD)
+      throw new SAXException("attribute decl outside DTD");
+    DomDoctype doctype = (DomDoctype) ctx;
+    doctype.attributeDecl(eName, aName, type, mode, value);
+  }
+
+  public void internalEntityDecl(String name, String value)
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    if (!inDTD)
+      throw new SAXException("internal entity decl outside DTD");
+    DomDoctype doctype = (DomDoctype) ctx;
+    Entity entity = doctype.declareEntity(name, null, null, null);
+    if (entity != null)
+      {
+        Node text = doc.createTextNode(value);
+        entity.appendChild(text);
+      }
+  }
+
+  public void externalEntityDecl(String name, String publicId, String systemId)
+    throws SAXException
+  {
+    if (interrupted)
+      {
+        return;
+      }
+    if (!inDTD)
+      throw new SAXException("external entity decl outside DTD");
+    DomDoctype doctype = (DomDoctype) ctx;
+    Entity entity = doctype.declareEntity(name, publicId, systemId, null);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/WriterOutputStream.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/WriterOutputStream.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/WriterOutputStream.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/ls/WriterOutputStream.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,98 @@
+/* WriterOutputStream.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.ls;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+
+/**
+ * Character stream wrapper.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class WriterOutputStream
+  extends OutputStream
+{
+
+  private Writer writer;
+  private String encoding;
+
+  public WriterOutputStream(Writer writer)
+  {
+    this.writer = writer;
+    this.encoding = "UTF-8";
+  }
+
+  void setEncoding(String encoding)
+  {
+    this.encoding = encoding;
+  }
+
+  public void write(int c)
+    throws IOException
+  {
+    writer.write(c);
+  }
+
+  public void write(byte[] b)
+    throws IOException
+  {
+    write(b, 0, b.length);
+  }
+
+  public void write(byte[] b, int off, int len)
+    throws IOException
+  {
+    writer.write(new String(b, off, len, encoding));
+  }
+
+  public void close()
+    throws IOException
+  {
+    writer.close();
+  }
+
+  public void flush()
+    throws IOException
+  {
+    writer.flush();
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/package.html
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/package.html?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/package.html (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/dom/package.html Thu Nov  8 16:56:19 2007
@@ -0,0 +1,273 @@
+<html>
+<body>
+
+<p>
+This is a Free Software DOM Level 3 implementation, supporting these features:
+<ul>
+<li>"XML"</li>
+<li>"Events"</li>
+<li>"MutationEvents"</li>
+<li>"HTMLEvents" (won't generate them though)</li>
+<li>"UIEvents" (also won't generate them)</li>
+<li>"USER-Events" (a conformant extension)</li>
+<li>"Traversal" (optional)</li>
+<li>"XPath"</li>
+<li>"LS" and "LS-Async"</li>
+</ul>
+It is intended to be a reasonable base both for
+experimentation and supporting additional DOM modules as clean layers.
+</p>
+
+<p>
+Note that while DOM does not specify its behavior in the
+face of concurrent access, this implementation does.
+Specifically:
+<ul>
+<li>If only one thread at a time accesses a Document,
+of if several threads cooperate for read-only access,
+then no concurrency conflicts will occur.</li>
+<li>If several threads mutate a given document
+(or send events using it) at the same time,
+there is currently no guarantee that
+they won't interfere with each other.</li>
+</ul>
+</p>
+
+<h3>Design Goals</h3>
+
+<p>
+A number of DOM implementations are available in Java, including
+commercial ones from Sun, IBM, Oracle, and DataChannel as well as
+noncommercial ones from Docuverse, OpenXML, and Silfide.  Why have
+another?  Some of the goals of this version:
+</p>
+
+<ul>
+<li>Advanced DOM support. This was the first generally available
+implementation of DOM Level 2 in Java, and one of the first Level 3
+and XPath implementations.</li>
+
+<li> Free Software.  This one is distributed under the GPL (with
+"library exception") so it can be used with a different class of
+application.</li>
+
+<li>Second implementation syndrome.  I can do it simpler this time
+around ... and heck, writing it only takes a bit over a day once you
+know your way around.</li>
+
+<li>Sanity check the then-current Last Call DOM draft.  Best to find
+bugs early, when they're relatively fixable.  Yes, bugs were found.</li>
+
+<li>Modularity.  Most of the implementations mentioned above are part
+of huge packages; take all (including bugs, of which some have far
+too many), or take nothing.  I prefer a menu approach, when possible.
+This code is standalone, not beholden to any particular parser or XSL
+or XPath code.</li>
+
+<li>OK, I'm a hacker, I like to write code.</li>
+</ul>
+
+<p>
+This also works with the GNU Compiler for Java (GCJ).  GCJ promises
+to be quite the environment for programming Java, both directly and from
+C++ using the new CNI interfaces (which really use C++, unlike JNI). </p>
+
+
+<h3>Open Issues</h3>
+
+<p>At this writing:</p>
+<ul>
+<li>See below for some restrictions on the mutation event
+support ... some events aren't reported (and likely won't be).</li>
+
+<li>More testing and conformance work is needed.</li>
+
+<li>We need an XML Schema validator (actually we need validation in the DOM
+full stop).</li>
+</ul>
+
+<p>
+I ran a profiler a few times and remove some of the performance hotspots,
+but it's not tuned.  Reporting mutation events, in particular, is
+rather costly -- it started at about a 40% penalty for appendNode calls,
+I've got it down around 12%, but it'll be hard to shrink it much further.
+The overall code size is relatively small, though you may want to be rid of
+many of the unused DOM interface classes (HTML, CSS, and so on).
+</p>
+
+
+<h2><a name="features">Features of this Package</a></h2>
+
+<p> Starting with DOM Level 2, you can really see that DOM is constructed
+as a bunch of optional modules around a core of either XML or HTML
+functionality.  Different implementations will support different optional
+modules.  This implementation provides a set of features that should be
+useful if you're not depending on the HTML functionality (lots of convenience
+functions that mostly don't buy much except API surface area) and user
+interface support.  That is, browsers will want more -- but what they
+need should be cleanly layered over what's already here. </p>
+
+<h3> Core Feature Set:  "XML" </h3>
+
+<p> This DOM implementation supports the "XML" feature set, which basically
+gets you four things over the bare core (which you're officially not supposed
+to implement except in conjunction with the "XML" or "HTML" feature).  In
+order of decreasing utility, those four things are: </p> <ol>
+
+    <li> ProcessingInstruction nodes.  These are probably the most
+    valuable thing. Handy little buggers, in part because all the APIs
+    you need to use them are provided, and they're designed to let you
+    escape XML document structure rules in controlled ways.</li>
+
+    <li> CDATASection nodes.  These are of of limited utility since CDATA
+    is just text that prints funny. These are of use to some sorts of
+    applications, though I encourage folk to not use them. </li>
+
+    <li> DocumentType nodes, and associated Notation and Entity nodes.
+    These appear to be useless.  Briefly, these "Type" nodes expose no
+    typing information.  They're only really usable to expose some lexical
+    structure that almost every application needs to ignore.  (XML editors
+    might like to see them, but they need true typing information much more.)
+    I strongly encourage people not to use these.  </li>
+
+    <li> EntityReference nodes can show up.  These are actively annoying,
+    since they add an extra level of hierarchy, are the cause of most of
+    the complexity in attribute values, and their contents are immutable.
+    Avoid these.</li>
+
+    </ol>
+
+<h3> Optional Feature Sets:  "Events", and friends </h3>
+
+<p> Events may be one of the more interesting new features in Level 2.
+This package provides the core feature set and exposes mutation events.
+No gooey events though; if you want that, write a layered implementation! </p>
+
+<p> Three mutation events aren't currently generated:</p> <ul>
+
+    <li> <em>DOMSubtreeModified</em> is poorly specified.  Think of this
+    as generating one such event around the time of finalization, which
+    is a fully conformant implementation.  This implementation is exactly
+    as useful as that one. </li>
+
+    <li> <em>DOMNodeRemovedFromDocument</em> and
+    <em>DOMNodeInsertedIntoDocument</em> are supposed to get sent to
+    every node in a subtree that gets removed or inserted (respectively).
+    This can be <em>extremely costly</em>, and the removal and insertion
+    processing is already significantly slower due to event reporting.
+    It's much easier, and more efficient, to have a listener higher in the
+    tree watch removal and insertion events through the bubbling or capture
+    mechanisms, than it is to watch for these two events.</li>
+
+    </ul>
+
+<p> In addition, certain kinds of attribute modification aren't reported.
+A fix is known, but it couldn't report the previous value of the attribute.
+More work could fix all of this (as well as reduce the generally high cost
+of childful attributes), but that's not been done yet. </p>
+
+<p> Also, note that it is a <em>Bad Thing™</em> to have the listener
+for a mutation event change the ancestry for the target of that event.
+Or to prevent mutation events from bubbling to where they're needed.
+Just don't do those, OK? </p>
+
+<p> As an experimental feature (named "USER-Events"), you can provide
+your own "user" events.  Just name them anything starting with "USER-"
+and you're set.  Dispatch them through, bubbling, capturing, or what
+ever takes your fancy.  One important thing you can't currently do is
+pass any data (like an object) with those events.  Maybe later there
+will be a "UserEvent" interface letting you get some substantial use
+out of this mechanism even if you're not "inside" of a DOM package.</p>
+
+<p> You can create and send HTML events.  Ditto UIEvents.  Since DOM
+doesn't require a UI, it's the UI's job to send them; perhaps that's
+part of your application.  </p>
+
+<p><em>This package may be built without the ability to report mutation
+events, gaining a significant speedup in DOM construction time.  However,
+if that is done then certain other features -- notably node iterators
+and getElementsByTagname -- will not be available.</em>
+
+
+<h3> Optional Feature:  "Traversal" </h3>
+
+<p> Each DOM node has all you need to walk to everything connected
+to that node.  Lightweight, efficient utilities are easily layered on
+top of just the core APIs. </p>
+
+<p> Traversal APIs are an optional part of DOM Level 2, providing
+a not-so-lightweight way to walk over DOM trees, if your application
+didn't already have such utilities for use with data represented via
+DOM.  Implementing this helped debug the (optional) event and mutation
+event subsystems, so it's provided here.  </p>
+
+<p> At this writing, the "TreeWalker" interface isn't implemented. </p>
+
+
+
+<h2><a name='avoid'>DOM Functionality to Avoid</a></h2>
+
+<p> For what appear to be a combination of historical and "committee
+logic" reasons, DOM has a number of <em>features which I strongly advise
+you to avoid using</em> in your library and application code.  These
+include the following types of DOM nodes; see the documentation for the
+implementation class for more information: <ul>
+
+    <li> CDATASection
+    (<a href='DomCDATA.html'>DomCDATA</a> class)
+    ... use normal Text nodes instead, so you don't have to make
+    every algorithm recognize multiple types of character data
+
+    <li> DocumentType
+    (<a href='DomDoctype.html'>DomDocType</a> class)
+    ... if this held actual typing information, it might be useful
+
+    <li> Entity
+    (<a href='DomEntity.html'>DomEntity</a> class)
+    ... neither parsed nor unparsed entities work well in DOM; it
+    won't even tell you which attributes identify unparsed entities
+
+    <li> EntityReference
+    (<a href='DomEntityReference.html'>DomEntityReference</a> class)
+    ... permitted implementation variances are extreme, all children
+    are readonly, and these can interact poorly with namespaces
+
+    <li> Notation
+    (<a href='DomNotation.html'>DomNotation</a> class)
+    ... only really usable with unparsed entities (which aren't well
+    supported; see above) or perhaps with PIs after the DTD, not with
+    NOTATION attributes
+
+    </ul>
+
+<p> If you really need to use unparsed entities or notations, use SAX;
+it offers better support for all DTD-related functionality.
+It also exposes actual
+document typing information (such as element content models).</p>
+
+<p> Also, when accessing attribute values, use methods that provide their
+values as single strings, rather than those which expose value substructure
+(Text and EntityReference nodes).  (See the <a href='DomAttr.html'>DomAttr</a>
+documentation for more information.) </p>
+
+<p> Note that many of these features were provided as partial support for
+editor functionality (including the incomplete DTD access).  Full editor
+functionality requires access to potentially malformed lexical structure,
+at the level of unparsed tokens and below.  Access at such levels is so
+complex that using it in non-editor applications sacrifices all the
+benefits of XML; editor aplications need extremely specialized APIs. </p>
+
+<p> (This isn't a slam against DTDs, note; only against the broken support
+for them in DOM.  Even despite inclusion of some dubious SGML legacy features
+such as notations and unparsed entities,
+and the ongoing proliferation of alternative schema and validation tools,
+DTDs are still the most widely adopted tool
+to constrain XML document structure.  
+Alternative schemes generally focus on data transfer style
+applications; open document architectures comparable to
+DocBook 4.0 don't yet exist in the schema world.
+Feel free to use DTDs; just don't expect DOM to help you.) </p>
+
+</body>
+</html>
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeAttr.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeAttr.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeAttr.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeAttr.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,116 @@
+/* GnomeAttr.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.TypeInfo;
+
+/**
+ * A DOM attribute node implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeAttr
+  extends GnomeNode
+  implements Attr
+{
+
+  GnomeAttr(Object id)
+  {
+    super(id);
+  }
+  
+  public String getName()
+  {
+    return getNodeName();
+  }
+  
+  public native boolean getSpecified();
+  
+  public native String getValue();
+  
+  public native void setValue(String value)
+    throws DOMException;
+  
+  public Node getParentNode()
+  {
+    return null;
+  }
+  
+  public Element getOwnerElement()
+  {
+    return (Element) super.getParentNode();
+  }
+  
+  // DOM Level 3 methods
+  
+  public TypeInfo getSchemaTypeInfo()
+  {
+    return new GnomeTypeInfo(id);
+  }
+
+  public boolean isId()
+  {
+    if (xmljIsId())
+      {
+        return true;
+      }
+    GnomeElement element = (GnomeElement) getOwnerElement();
+    return (element != null &&
+            element.userIdAttrs != null &&
+            element.userIdAttrs.contains(this));
+  }
+  
+  private native boolean xmljIsId();
+
+  public String toString()
+  {
+    StringBuffer buffer = new StringBuffer(getClass().getName());
+    buffer.append("[name=");
+    buffer.append(getName());
+    buffer.append(",value=");
+    buffer.append(getValue());
+    buffer.append("]");
+    return buffer.toString();
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCDATASection.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCDATASection.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCDATASection.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCDATASection.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,57 @@
+/* GnomeCDATASection.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.CDATASection;
+
+/**
+ * A DOM CDATA section node implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeCDATASection
+  extends GnomeText
+  implements CDATASection
+{
+
+  GnomeCDATASection(Object id)
+  {
+    super(id);
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCharacterData.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCharacterData.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCharacterData.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeCharacterData.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,117 @@
+/* GnomeCharacterData.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.CharacterData;
+import org.w3c.dom.DOMException;
+
+/**
+ * A DOM character data node implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+abstract class GnomeCharacterData
+  extends GnomeNode
+  implements CharacterData
+{
+
+  GnomeCharacterData(Object id)
+  {
+    super(id);
+  }
+
+  public String getData()
+    throws DOMException
+  {
+    return getNodeValue();
+  }
+
+  public void setData(String data)
+    throws DOMException
+  {
+    setNodeValue(data);
+  }
+
+  public int getLength()
+  {
+    return getData().length();
+  }
+
+  public String substringData(int offset, int count)
+    throws DOMException
+  {
+    return getData().substring(offset, offset + count);
+  }
+
+  public void appendData(String arg)
+    throws DOMException
+  {
+    setData(getData() + arg);
+  }
+
+  public void insertData(int offset, String arg)
+    throws DOMException
+  {
+    String data = getData();
+    setData(data.substring(0, offset) + arg + data.substring(offset));
+  }
+
+  public void deleteData(int offset, int count)
+    throws DOMException
+  {
+    String data = getData();
+    setData(data.substring(0, offset) + data.substring(offset + count));
+  }
+
+  public void replaceData(int offset, int count, String arg)
+  {
+    String data = getData();
+    setData(data.substring(0, offset) + arg +
+            data.substring(offset + count));
+  }
+
+  public String toString()
+  {
+    StringBuffer buffer = new StringBuffer(getClass().getName());
+    buffer.append("[data=");
+    buffer.append(getData());
+    buffer.append("]");
+    return buffer.toString();
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeComment.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeComment.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeComment.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeComment.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,57 @@
+/* GnomeComment.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.Comment;
+
+/**
+ * A DOM comment node implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeComment
+  extends GnomeCharacterData
+  implements Comment
+{
+
+  GnomeComment(Object id)
+  {
+    super(id);
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMException.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMException.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMException.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMException.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,98 @@
+/* GnomeDOMException.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.DOMException;
+
+class GnomeDOMException
+  extends DOMException
+{
+
+  GnomeDOMException(short code, String message)
+  {
+    super(code, createMessage(code, message));
+  }
+
+  private static String createMessage(int code, String message)
+  {
+    if (message != null)
+      {
+        return message;
+      }
+    switch (code)
+      {
+      case INDEX_SIZE_ERR:
+        return "INDEX_SIZE_ERR";
+      case DOMSTRING_SIZE_ERR:
+        return "DOMSTRING_SIZE_ERR";
+      case HIERARCHY_REQUEST_ERR:
+        return "HIERARCHY_REQUEST_ERR";
+      case WRONG_DOCUMENT_ERR:
+        return "WRONG_DOCUMENT_ERR";
+      case INVALID_CHARACTER_ERR:
+        return "INVALID_CHARACTER_ERR";
+      case NO_DATA_ALLOWED_ERR:
+        return "NO_DATA_ALLOWED_ERR";
+      case NO_MODIFICATION_ALLOWED_ERR:
+        return "NO_MODIFICATION_ALLOWED_ERR";
+      case NOT_FOUND_ERR:
+        return "NOT_FOUND_ERR";
+      case NOT_SUPPORTED_ERR:
+        return "NOT_SUPPORTED_ERR";
+      case INUSE_ATTRIBUTE_ERR:
+        return "INUSE_ATTRIBUTE_ERR";
+      case INVALID_STATE_ERR:
+        return "INVALID_STATE_ERR";
+      case SYNTAX_ERR:
+        return "SYNTAX_ERR";
+      case INVALID_MODIFICATION_ERR:
+        return "INVALID_MODIFICATION_ERR";
+      case NAMESPACE_ERR:
+        return "NAMESPACE_ERR";
+      case INVALID_ACCESS_ERR:
+        return "INVALID_ACCESS_ERR";
+      case VALIDATION_ERR:
+        return "VALIDATION_ERR";
+      case TYPE_MISMATCH_ERR:
+        return "TYPE_MISMATCH_ERR";
+      default:
+        return null;
+      }
+  }
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMStringList.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMStringList.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMStringList.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDOMStringList.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,84 @@
+/* GnomeDOMStringList.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.DOMStringList;
+
+/**
+ * Implementation of a string list using an array of strings.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeDOMStringList
+  implements DOMStringList
+{
+
+  final String[] values;
+
+  GnomeDOMStringList(String[] values)
+  {
+    this.values = values;
+  }
+
+  public int getLength()
+  {
+    return values.length;
+  }
+
+  public String item(int index)
+  {
+    if (index < 0 || index >= values.length)
+      {
+        return null;
+      }
+    return values[index];
+  }
+
+  public boolean contains(String value)
+  {
+    for (int i = 0; i < values.length; i++)
+      {
+        if (values[i].equalsIgnoreCase(value))
+          {
+            return true;
+          }
+      }
+    return false;
+  }
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocument.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocument.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocument.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocument.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,561 @@
+/* GnomeDocument.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import java.util.Iterator;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.CDATASection;
+import org.w3c.dom.Comment;
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
+import org.w3c.dom.DocumentType;
+import org.w3c.dom.DOMConfiguration;
+import org.w3c.dom.DOMErrorHandler;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.DOMStringList;
+import org.w3c.dom.Element;
+import org.w3c.dom.EntityReference;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.ProcessingInstruction;
+import org.w3c.dom.Text;
+import org.w3c.dom.UserDataHandler;
+import org.w3c.dom.traversal.DocumentTraversal;
+import org.w3c.dom.traversal.NodeFilter;
+import org.w3c.dom.traversal.NodeIterator;
+import org.w3c.dom.traversal.TreeWalker;
+import org.w3c.dom.xpath.XPathEvaluator;
+import org.w3c.dom.xpath.XPathException;
+import org.w3c.dom.xpath.XPathExpression;
+import org.w3c.dom.xpath.XPathNSResolver;
+
+import gnu.xml.dom.DomNodeIterator;
+
+/**
+ * A DOM document node implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class GnomeDocument
+  extends GnomeNode
+  implements Document, DOMConfiguration, XPathEvaluator, DocumentTraversal
+{
+
+  DOMImplementation dom;
+
+  /**
+   * Not currently used.
+   */
+  boolean strictErrorChecking;
+
+  /* DOMConfiguration */
+  boolean canonicalForm = false;
+  boolean cdataSections = true;
+  boolean checkCharacterNormalization = false;
+  boolean comments = true;
+  boolean datatypeNormalization = false;
+  boolean elementContentWhitespace = true;
+  boolean entities = true;
+  DOMErrorHandler errorHandler;
+  boolean namespaces = true;
+  boolean namespaceDeclarations = true;
+  boolean normalizeCharacters = false;
+  boolean splitCdataSections = true;
+  boolean validate = false;
+  boolean validateIfSchema = false;
+  boolean wellFormed = true;
+  
+  GnomeDocument(Object id)
+  {
+    super(id);
+    strictErrorChecking = true;
+  }
+  
+  protected void finalize()
+  {
+    free(id);
+  }
+  
+  private native void free(Object id);
+
+  public native DocumentType getDoctype();
+
+  public DOMImplementation getImplementation()
+  {
+    return dom;
+  }
+
+  public native Element getDocumentElement();
+
+  public Element createElement(String tagName)
+    throws DOMException
+  {
+    return createElementNS(null, tagName);
+  }
+
+  public native DocumentType createDocumentType(String name, String publicId,
+                                                String systemId);
+
+  public native DocumentFragment createDocumentFragment();
+
+  public native Text createTextNode(String data);
+
+  public native Comment createComment(String data);
+
+  public native CDATASection createCDATASection(String data)
+    throws DOMException;
+
+  public native ProcessingInstruction createProcessingInstruction(String target,
+                                                                  String data)
+    throws DOMException;
+
+  public Attr createAttribute(String name)
+    throws DOMException
+  {
+    return createAttributeNS(null, name);
+  }
+
+  public native EntityReference createEntityReference(String name)
+    throws DOMException;
+
+  public native NodeList getElementsByTagName(String tagName);
+
+  public Node importNode(Node importedNode, boolean deep)
+    throws DOMException
+  {
+    Node ret = xmljImportNode(importedNode, deep);
+    if (importedNode instanceof GnomeNode)
+      {
+        ((GnomeNode) importedNode)
+          .notifyUserDataHandlers(UserDataHandler.NODE_IMPORTED,
+                                  importedNode, ret);
+      }
+    return ret;
+  }
+
+  private native Node xmljImportNode(Node importedNode, boolean deep)
+    throws DOMException;
+
+  public native Element createElementNS(String namespaceURI, String
+                                        qualifiedName)
+    throws DOMException;
+  
+  public native Attr createAttributeNS(String namespaceURI, String
+                                       qualifiedName)
+    throws DOMException;
+
+  public native NodeList getElementsByTagNameNS(String namespaceURI,
+      String localName);
+
+  public Element getElementById(String elementId)
+  {
+    Element element = xmljGetElementById(elementId);
+    if (element == null)
+      {
+        TreeWalker walker = createTreeWalker(this, NodeFilter.SHOW_ELEMENT,
+                                             null, false);
+        for (Node node = walker.nextNode(); node != null;
+             node = walker.nextNode())
+          {
+            GnomeElement e = (GnomeElement) node;
+            if (e.userIdAttrs != null)
+              {
+                for (Iterator i = e.userIdAttrs.iterator(); i.hasNext(); )
+                  {
+                    Attr attr = (Attr) i.next();
+                    if (attr.getNodeValue().equals(elementId))
+                      {
+                        return e;
+                      }
+                  }
+              }
+          }
+      }
+    return element;
+  }
+  
+  private native Element xmljGetElementById(String elementId);
+
+  // DOM Level 3 methods
+
+  public native String getInputEncoding();
+
+  public native String getXmlEncoding();
+
+  public native boolean getXmlStandalone();
+
+  public native void setXmlStandalone(boolean xmlStandalone);
+
+  public native String getXmlVersion();
+
+  public native void setXmlVersion(String xmlVersion);
+
+  public boolean getStrictErrorChecking()
+  {
+    return strictErrorChecking;
+  }
+
+  public void setStrictErrorChecking(boolean strictErrorChecking)
+  {
+    this.strictErrorChecking = strictErrorChecking;
+  }
+  
+  public native String getDocumentURI();
+
+  public native void setDocumentURI(String documentURI);
+
+  public Node adoptNode(Node source)
+    throws DOMException
+  {
+    if (source == null || !(source instanceof GnomeNode))
+      {
+        return null;
+      }
+    Node ret = xmljAdoptNode(source);
+    if (source instanceof GnomeNode)
+      {
+        ((GnomeNode) source).
+          notifyUserDataHandlers(UserDataHandler.NODE_ADOPTED,
+                                 source, ret);
+      }
+    return ret;
+  }
+
+  private native Node xmljAdoptNode(Node source)
+    throws DOMException;
+
+  public DOMConfiguration getDomConfig()
+  {
+    return this;
+  }
+
+  public void normalizeDocument()
+  {
+    normalize();
+  }
+
+  public native Node renameNode(Node n, String namespaceURI,
+                                String qualifiedName);
+
+  // -- DOMConfiguration methods --
+
+  public void setParameter(String name, Object value)
+    throws DOMException
+  {
+    name = name.toLowerCase();
+    if ("canonical-form".equals(name))
+      {
+        /* optional
+        canonicalForm = getBooleanValue(value);*/
+      }
+    else if ("cdata-sections".equals(name))
+      {
+        cdataSections = getBooleanValue(value);
+      }
+    else if ("check-character-normalization".equals(name))
+      {
+        /* optional
+        checkCharacterNormalization = getBooleanValue(value);*/
+      }
+    else if ("comments".equals(name))
+      {
+        comments = getBooleanValue(value);
+      }
+    else if ("datatype-normalization".equals(name))
+      {
+        /* optional
+        datatypeNormalization = getBooleanValue(value);*/
+      }
+    else if ("element-content-whitespace".equals(name))
+      {
+        /* optional
+        elementContentWhitespace = getBooleanValue(value);*/
+      }
+    else if ("entities".equals(name))
+      {
+        entities = getBooleanValue(value);
+      }
+    else if ("error-handler".equals(name))
+      {
+        errorHandler = (DOMErrorHandler) value;
+      }
+    else if ("infoset".equals(name))
+      {
+        if (getBooleanValue(value))
+          {
+            validateIfSchema = false;
+            entities = false;
+            datatypeNormalization = false;
+            cdataSections = false;
+            namespaceDeclarations = true;
+            wellFormed = true;
+            elementContentWhitespace = true;
+            comments = true;
+            namespaces = true;
+          }
+      }
+    else if ("namespaces".equals(name))
+      {
+        /* optional
+        namespaces = getBooleanValue(value);*/
+      }
+    else if ("namespace-declarations".equals(name))
+      {
+        namespaceDeclarations = getBooleanValue(value);
+      }
+    else if ("normalize-characters".equals(name))
+      {
+        /* optional
+        normalizeCharacters = getBooleanValue(value);*/
+      }
+    else if ("split-cdata-sections".equals(name))
+      {
+        splitCdataSections = getBooleanValue(value);
+      }
+    else if ("validate".equals(name))
+      {
+        /* optional
+        validate = getBooleanValue(value);*/
+      }
+    else if ("validate-if-schema".equals(name))
+      {
+        /* optional
+        validateIfSchema = getBooleanValue(value);*/
+      }
+    else if ("well-formed".equals(name))
+      {
+        /* optional
+        wellFormed = getBooleanValue(value);*/
+      }
+    else
+      {
+        throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, name);
+      }
+  }
+
+  public Object getParameter(String name)
+    throws DOMException
+  {
+    name = name.toLowerCase();
+    if ("canonical-form".equals(name))
+      {
+        return Boolean.valueOf(canonicalForm);
+      }
+    else if ("cdata-sections".equals(name))
+      {
+        return Boolean.valueOf(cdataSections);
+      }
+    else if ("check-character-normalization".equals(name))
+      {
+        return Boolean.valueOf(checkCharacterNormalization);
+      }
+    else if ("comments".equals(name))
+      {
+        return Boolean.valueOf(comments);
+      }
+    else if ("datatype-normalization".equals(name))
+      {
+        return Boolean.valueOf(datatypeNormalization);
+      }
+    else if ("element-content-whitespace".equals(name))
+      {
+        return Boolean.valueOf(elementContentWhitespace);
+      }
+    else if ("entities".equals(name))
+      {
+        return Boolean.valueOf(entities);
+      }
+    else if ("error-handler".equals(name))
+      {
+        return errorHandler;
+      }
+    else if ("infoset".equals(name))
+      {
+        return Boolean.valueOf(!validateIfSchema &&
+			       !entities &&
+			       !datatypeNormalization &&
+			       !cdataSections &&
+			       namespaceDeclarations &&
+			       wellFormed &&
+			       elementContentWhitespace &&
+			       comments &&
+			       namespaces);
+      }
+    else if ("namespaces".equals(name))
+      {
+        return Boolean.valueOf(namespaces);
+      }
+    else if ("namespace-declarations".equals(name))
+      {
+        return Boolean.valueOf(namespaceDeclarations);
+      }
+    else if ("normalize-characters".equals(name))
+      {
+        return Boolean.valueOf(normalizeCharacters);
+      }
+    else if ("split-cdata-sections".equals(name))
+      {
+        return Boolean.valueOf(splitCdataSections);
+      }
+    else if ("validate".equals(name))
+      {
+        return Boolean.valueOf(validate);
+      }
+    else if ("validate-if-schema".equals(name))
+      {
+        return Boolean.valueOf(validateIfSchema);
+      }
+    else if ("well-formed".equals(name))
+      {
+        return Boolean.valueOf(wellFormed);
+      }
+    else
+      {
+        throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, name);
+      }
+  }
+
+  public boolean canSetParameter(String name, Object value)
+  {
+    name = name.toLowerCase();
+    if ("error-handler".equals(name))
+      {
+        return (value == null || value instanceof DOMErrorHandler);
+      }
+    return ("cdata-sections".equals(name) ||
+            "comments".equals(name) ||
+            "entities".equals(name) ||
+            "namespace-declarations".equals(name) ||
+            "split-cdata-sections".equals(name));
+  }
+  
+  public DOMStringList getParameterNames()
+  {
+    String[] names = new String[] {
+      "canonical-form",
+      "cdata-sections",
+      "check-character-normalization",
+      "comments",
+      "datatype-normalization",
+      "element-content-whitespace",
+      "entities",
+      "error-handler",
+      "infoset",
+      "namespaces",
+      "namespace-declarations",
+      "normalize-characters",
+      "split-cdata-sections",
+      "validate",
+      "validate-if-schema",
+      "well-formed"
+    };
+    return new GnomeDOMStringList(names);
+  }
+
+  private boolean getBooleanValue(Object value)
+  {
+    if (value instanceof Boolean)
+      {
+        return ((Boolean) value).booleanValue();
+      }
+    else if (value instanceof String)
+      {
+        return Boolean.valueOf ((String) value).booleanValue();
+      }
+    return false;
+  }
+
+  // -- XPathEvaluator methods --
+
+  public XPathExpression createExpression(String expression,
+                                          XPathNSResolver resolver)
+    throws XPathException, DOMException
+  {
+    return new GnomeXPathExpression(this, expression, resolver);
+  }
+
+  public XPathNSResolver createNSResolver(Node nodeResolver)
+  {
+    return new GnomeXPathNSResolver(nodeResolver);
+  }
+
+  public native Object evaluate(String expression,
+                                Node contextNode,
+                                XPathNSResolver resolver,
+                                short type,
+                                Object result)
+    throws XPathException, DOMException;
+
+  // -- DocumentTraversal methods --
+
+  public NodeIterator createNodeIterator(Node root,
+                                         int whatToShow,
+                                         NodeFilter filter,
+                                         boolean entityReferenceExpansion)
+    throws DOMException
+  {
+    return new DomNodeIterator(root, whatToShow, filter,
+                               entityReferenceExpansion, false);
+  }
+
+  public TreeWalker createTreeWalker(Node root,
+                                    int whatToShow,
+                                    NodeFilter filter,
+                                    boolean entityReferenceExpansion)
+    throws DOMException
+  {
+    return new DomNodeIterator(root, whatToShow, filter,
+                               entityReferenceExpansion, true);
+  }
+
+  // -- Debugging --
+  
+  public String toString()
+  {
+    StringBuffer buffer = new StringBuffer(getClass().getName());
+    buffer.append("[version=");
+    buffer.append(getXmlVersion());
+    buffer.append(",standalone=");
+    buffer.append(getXmlStandalone());
+    buffer.append("]");
+    return buffer.toString();
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilder.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilder.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilder.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilder.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,326 @@
+/* GnomeDocumentBuilder.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.net.URL;
+import javax.xml.parsers.DocumentBuilder;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentType;
+import org.w3c.dom.DOMImplementation;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+import gnu.xml.libxmlj.util.NamedInputStream;
+import gnu.xml.libxmlj.util.StandaloneDocumentType;
+import gnu.xml.libxmlj.util.StandaloneLocator;
+import gnu.xml.libxmlj.util.XMLJ;
+
+/**
+ * A JAXP DOM implementation that uses Gnome libxml2 as the underlying
+ * parser and node representation.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class GnomeDocumentBuilder
+  extends DocumentBuilder
+  implements DOMImplementation
+{
+
+  static
+  {
+    XMLJ.init();
+  }
+
+  // -- DocumentBuilder --
+
+  private boolean validate;
+  private boolean coalesce;
+  private boolean expandEntities;
+  private EntityResolver entityResolver;
+  private ErrorHandler errorHandler;
+  private boolean seenFatalError;
+
+  /**
+   * Constructs a new validating document builder.
+   */
+  public GnomeDocumentBuilder()
+  {
+    this(true, false, false);
+  }
+  
+  /**
+   * Constructs a new document builder.
+   * @param validate whether to validate during parsing
+   * @param coalesce whether to merge CDATA as text nodes
+   * @param expandEntities whether to expand entity references
+   */
+  public GnomeDocumentBuilder(boolean validate,
+                              boolean coalesce,
+                              boolean expandEntities)
+  {
+    this.validate = validate;
+    this.coalesce = coalesce;
+    this.expandEntities = expandEntities;
+  }
+
+  public DOMImplementation getDOMImplementation()
+  {
+    return this;
+  }
+
+  public boolean isNamespaceAware()
+  {
+    return true;
+  }
+
+  public boolean isValidating()
+  {
+    return validate;
+  }
+
+  public Document newDocument()
+  {
+    return createDocument(null, null, null);
+  }
+
+  public Document parse(InputSource input)
+    throws SAXException, IOException
+  {
+    NamedInputStream in = XMLJ.getInputStream(input);
+    byte[] detectBuffer = in.getDetectBuffer();
+    String publicId = input.getPublicId();
+    String systemId = input.getSystemId();
+    String base = XMLJ.getBaseURI(systemId);
+    // Handle zero-length document
+    if (detectBuffer == null)
+      {
+        throw new SAXParseException("No document element", publicId,
+                                    systemId, 0, 0);
+      }
+    seenFatalError = false;
+    return parseStream(in,
+                       detectBuffer,
+                       publicId,
+                       systemId,
+                       base,
+                       validate,
+                       coalesce,
+                       expandEntities,
+                       true, //entityResolver != null,
+                       errorHandler != null);
+  }
+  
+  private native Document parseStream(InputStream in,
+                                      byte[] detectBuffer,
+                                      String publicId,
+                                      String systemId,
+                                      String base,
+                                      boolean validate,
+                                      boolean coalesce,
+                                      boolean expandEntities,
+                                      boolean entityResolver,
+                                      boolean errorHandler);
+  
+  public void setEntityResolver(EntityResolver resolver)
+  {
+    entityResolver = resolver;
+  }
+
+  public void setErrorHandler(ErrorHandler handler)
+  {
+    errorHandler = handler;
+  }
+
+  // -- DOMImplementation --
+
+  public boolean hasFeature(String name, String version)
+  {
+    if (name.length() == 0)
+      {
+        return false;
+      }
+    name = name.toLowerCase();
+    if (name.charAt(0) == '+')
+      {
+        name = name.substring(1);
+      }
+    
+    if ("xml".equals(name) || "core".equals(name))
+      {
+        return (version == null ||
+                "".equals(version) ||
+                "1.0".equals(version) ||
+                "2.0".equals(version) ||
+                "3.0".equals(version));
+      
+      }
+    else if ("ls".equals(name) || "ls-async".equals(name))
+      {
+        // TODO
+        /*
+        return (version == null ||
+                "".equals(version) ||
+                "3.0".equals(version));
+                */
+        return false;
+      }
+    else if ("traversal".equals(name))
+      {
+        return (version == null ||
+                "".equals(version) ||
+		"2.0".equals(version));
+      }
+    else if ("xpath".equals(name))
+      {
+        return (version == null ||
+                "".equals(version) ||
+                "3.0".equals(version));
+      }
+    return false;
+  }
+  
+  // DOM Level 3
+
+  public Object getFeature(String feature, String version)
+  {
+    if (hasFeature(feature, version))
+      {
+        return this;
+      }
+    return null;
+  }
+  
+  public native Document createDocument(String namespaceURI,
+                                        String qualifiedName,
+                                        DocumentType doctype);
+  
+  public DocumentType createDocumentType(String qualifiedName,
+                                         String publicId,
+                                         String systemId)
+  {
+    return new StandaloneDocumentType(qualifiedName, publicId, systemId);
+  }
+  
+  // Callback hooks from JNI
+  
+  private void setDocumentLocator(Object ctx, Object loc)
+  {
+    // ignore
+  }
+  
+  private InputStream resolveEntity(String publicId, String systemId,
+                                    String base)
+    throws SAXException, IOException
+  {
+    String url = XMLJ.getAbsoluteURI(base, systemId);
+    InputStream in = null;
+    if (entityResolver != null)
+      {
+        InputSource source = entityResolver.resolveEntity(publicId, url);
+        if (source != null)
+          {
+            in = XMLJ.getInputStream(source);
+          }
+      }
+    if (in == null)
+      {
+        in  = XMLJ.getInputStream(new URL(url));
+      }
+    return in;
+  }
+  
+  private void warning(String message,
+                       int lineNumber,
+                       int columnNumber,
+                       String publicId,
+                       String systemId)
+    throws SAXException
+  {
+    if (!seenFatalError && errorHandler != null)
+      {
+        Locator l = new StandaloneLocator(lineNumber,
+                                          columnNumber,
+                                          publicId,
+                                          systemId);
+        errorHandler.warning(new SAXParseException(message, l));
+      }
+  }
+
+  private void error(String message,
+                     int lineNumber,
+                     int columnNumber,
+                     String publicId,
+                     String systemId)
+    throws SAXException
+  {
+    if (!seenFatalError && errorHandler != null)
+      {
+        Locator l = new StandaloneLocator(lineNumber,
+                                          columnNumber,
+                                          publicId,
+                                          systemId);
+        errorHandler.error(new SAXParseException(message, l));
+      }
+  }
+
+  private void fatalError(String message,
+                          int lineNumber,
+                          int columnNumber,
+                          String publicId,
+                          String systemId)
+    throws SAXException
+  {
+    if (!seenFatalError && errorHandler != null)
+      {
+        seenFatalError = true;
+        Locator l = new StandaloneLocator(lineNumber,
+                                          columnNumber,
+                                          publicId,
+                                          systemId);
+        errorHandler.fatalError(new SAXParseException(message, l));
+      }
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilderFactory.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilderFactory.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilderFactory.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentBuilderFactory.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,118 @@
+/* GnomeDocumentBuilderFactory.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+/**
+ * Factory for JAXP document builders using the libxml2 implementation.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class GnomeDocumentBuilderFactory
+  extends DocumentBuilderFactory
+{
+
+  private boolean secureProcessing;
+
+  public GnomeDocumentBuilderFactory ()
+  {
+    setNamespaceAware (true);
+  }
+
+  public Object getAttribute (String name)
+  {
+    // TODO
+    return null;
+  }
+
+  public DocumentBuilder newDocumentBuilder ()
+    throws ParserConfigurationException
+  {
+    /*
+    if (!isNamespaceAware ())
+      {
+        String msg = "Parser must be namespace-aware";
+        throw new ParserConfigurationException (msg);
+      }
+    if (isIgnoringComments ())
+      {
+        String msg = "Ignoring comments not supported";
+        throw new ParserConfigurationException (msg);
+      }
+    if (isIgnoringElementContentWhitespace ())
+      {
+        String msg = "Ignoring element content whitespace not supported";
+        throw new ParserConfigurationException (msg);
+      }
+      */
+    return new GnomeDocumentBuilder (isValidating (),
+                                     isCoalescing (),
+                                     isExpandEntityReferences ());
+  }
+
+  public void setAttribute (String name, Object value)
+  {
+    // TODO
+  }
+  
+  public void setFeature(String name, boolean value)
+    throws ParserConfigurationException
+  {
+    if (name == null)
+      throw new NullPointerException();
+    if (XMLConstants.FEATURE_SECURE_PROCESSING.equals(name))
+      {
+        secureProcessing = true;
+        return;
+      }
+    throw new ParserConfigurationException(name);
+  }
+
+  public boolean getFeature(String name)
+    throws ParserConfigurationException
+  {
+    if (XMLConstants.FEATURE_SECURE_PROCESSING.equals(name))
+      return secureProcessing;
+    throw new ParserConfigurationException(name);
+  }
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentFragment.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentFragment.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentFragment.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentFragment.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,57 @@
+/* GnomeDocumentFragment.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.DocumentFragment;
+
+/**
+ * A DOM document fragment node implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeDocumentFragment
+extends GnomeNode
+implements DocumentFragment
+{
+
+  GnomeDocumentFragment (Object id)
+  {
+    super (id);
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentType.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentType.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentType.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocumentType.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,96 @@
+/* GnomeDocumentType.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.DocumentType;
+import org.w3c.dom.NamedNodeMap;
+
+/**
+ * A DOM document type node implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeDocumentType
+extends GnomeNode
+implements DocumentType
+{
+
+  GnomeDocumentType (Object id)
+  {
+    super (id);
+  }
+  
+  public String getName ()
+  {
+    return getNodeName ();
+  }
+
+  public NamedNodeMap getEntities ()
+  {
+    return new GnomeNamedNodeMap (id, 1);
+  }
+
+  public NamedNodeMap getNotations ()
+  {
+    return new GnomeNamedNodeMap (id, 2);
+  }
+
+  public native String getPublicId ();
+
+  public native String getSystemId ();
+
+  public native String getInternalSubset ();
+
+  public String toString ()
+  {
+    String publicId = getPublicId ();
+    StringBuffer buffer = new StringBuffer (getClass ().getName ());
+    buffer.append ("[");
+    if (publicId != null)
+      {
+        buffer.append ("publicId=");
+        buffer.append (publicId);
+        buffer.append (",");
+      }
+    buffer.append ("systemId=");
+    buffer.append (getSystemId ());
+    buffer.append ("]");
+    return buffer.toString ();
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeElement.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeElement.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeElement.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeElement.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,182 @@
+/* GnomeElement.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.TypeInfo;
+
+/**
+ * A DOM element node implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeElement
+  extends GnomeNode
+  implements Element
+{
+
+  /**
+   * User-defined ID attributes.
+   */
+  Set userIdAttrs;
+
+  GnomeElement(Object id)
+  {
+    super(id);
+  }
+  
+  public String getTagName()
+  {
+    return getNodeName();
+  }
+
+  public native String getAttribute(String name);
+
+  public native void setAttribute(String name, String value)
+    throws DOMException;
+  
+  public void removeAttribute(String name)
+    throws DOMException
+  {
+    Attr attr = getAttributeNode(name);
+    if (attr != null)
+      {
+        removeAttributeNode(attr);
+      }
+  }
+
+  public native Attr getAttributeNode(String name);
+  
+  public native Attr setAttributeNode(Attr newAttr)
+    throws DOMException;
+
+  public native Attr removeAttributeNode(Attr oldAttr)
+    throws DOMException;
+
+  public native NodeList getElementsByTagName(String name);
+  
+  public native String getAttributeNS(String namespaceURI, String localName);
+  
+  public native void setAttributeNS(String namespaceURI, String
+                                    qualifiedName, String value)
+    throws DOMException;
+
+  public void removeAttributeNS(String namespaceURI, String localName)
+    throws DOMException
+  {
+    Attr attr = getAttributeNodeNS(namespaceURI, localName);
+    if (attr != null)
+      {
+        removeAttributeNode(attr);
+      }
+  }
+  
+  public native Attr getAttributeNodeNS(String namespaceURI,
+                                        String localName);
+
+  public native Attr setAttributeNodeNS(Attr newAttr)
+    throws DOMException;
+
+  public native NodeList getElementsByTagNameNS(String namespaceURI,
+                                                String localName);
+  
+  public native boolean hasAttribute(String name);
+
+  public native boolean hasAttributeNS(String namespaceURI,
+                                       String localName);
+
+  // DOM Level 3 methods
+
+  public TypeInfo getSchemaTypeInfo()
+  {
+    return new GnomeTypeInfo(id);
+  }
+
+  public void setIdAttribute(String name, boolean isId)
+  {
+    Attr attr = getAttributeNode(name);
+    setIdAttributeNode(attr, isId);
+  }
+
+  public void setIdAttributeNode(Attr attr, boolean isId)
+  {
+    if (attr == null)// FIXME || !attr.getOwnerElement().equals(this))
+      {
+        throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, null);
+      }
+    if (isId)
+      {
+        if (userIdAttrs == null)
+          {
+            userIdAttrs = new HashSet();
+          }
+        userIdAttrs.add(attr);
+      }
+    else if (userIdAttrs != null)
+      {
+        userIdAttrs.remove(attr);
+        if (userIdAttrs.isEmpty())
+          {
+            userIdAttrs = null;
+          }
+      }
+  }
+
+  public void setIdAttributeNS(String namespaceURI, String localName,
+                               boolean isId)
+  {
+    Attr attr = getAttributeNodeNS(namespaceURI, localName);
+    setIdAttributeNode(attr, isId);
+  }
+
+  public String toString()
+  {
+    StringBuffer buffer = new StringBuffer(getClass().getName());
+    buffer.append("[tagName=");
+    buffer.append(getTagName());
+    buffer.append("]");
+    return buffer.toString();
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntity.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntity.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntity.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntity.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,102 @@
+/* GnomeEntity.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.Entity;
+
+/**
+ * A DOM entity node implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeEntity
+extends GnomeNode
+implements Entity
+{
+
+  GnomeEntity (Object id)
+  {
+    super (id);
+  }
+
+  public native String getPublicId ();
+
+  public native String getSystemId ();
+
+  public native String getNotationName ();
+
+  // DOM Level 3 methods
+  
+  public String getInputEncoding ()
+  {
+    // TODO
+    return null;    
+  }
+  
+  public String getXmlEncoding ()
+  {
+    // TODO
+    return null;
+  }
+  
+  public String getXmlVersion ()
+  {
+    // TODO
+    return null;
+  }
+  
+  public String toString ()
+  {
+    String publicId = getPublicId ();
+    StringBuffer buffer = new StringBuffer (getClass ().getName ());
+    buffer.append ("[");
+    if (publicId != null)
+      {
+        buffer.append ("publicId=");
+        buffer.append (publicId);
+        buffer.append (",");
+      }
+    buffer.append ("systemId=");
+    buffer.append (getSystemId ());
+    buffer.append (",notationName=");
+    buffer.append (getNotationName ());
+    buffer.append ("]");
+    return buffer.toString ();
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntityReference.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntityReference.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntityReference.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeEntityReference.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,57 @@
+/* GnomeEntityReference.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.EntityReference;
+
+/**
+ * A DOM entity reference node implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeEntityReference
+extends GnomeNode
+implements EntityReference
+{
+
+  GnomeEntityReference (Object id)
+  {
+    super (id);
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNamedNodeMap.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNamedNodeMap.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNamedNodeMap.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNamedNodeMap.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,92 @@
+/* GnomeNamedNodeMap.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.DOMException;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+/**
+ * A DOM named node map implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeNamedNodeMap
+implements NamedNodeMap
+{
+
+  /**
+   * The node id.
+   */
+  private final Object id;
+
+  /**
+   * The map type.
+   * 0=attributes
+   * 1=entities
+   * 2=notations
+   */
+  private final int type;
+
+  GnomeNamedNodeMap (Object id, int type)
+  {
+    this.id = id;
+    this.type = type;
+  }
+
+  public native Node getNamedItem (String name);
+
+  public native Node setNamedItem (Node arg)
+    throws DOMException;
+
+  public native Node removeNamedItem (String name)
+    throws DOMException;
+
+  public native Node item (int index);
+  
+  public native int getLength ();
+
+  public native Node getNamedItemNS (String namespaceURI, String localName);
+
+  public native Node setNamedItemNS (Node arg)
+    throws DOMException;
+
+  public native Node removeNamedItemNS (String namespaceURI,
+                                        String localName);
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNode.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNode.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNode.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNode.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,499 @@
+/* GnomeNode.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentType;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+import org.w3c.dom.UserDataHandler;
+
+import gnu.xml.libxmlj.util.StandaloneDocumentType;
+
+/**
+ * A DOM node implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeNode
+  implements Node, Comparable
+{
+
+  /**
+   * Maps document pointers to a map of node pointers to node instances.
+   */
+  static Map instances;
+
+  /**
+   * Retrieves the node instance for the specified node pointer.
+   * This creates a new instance and adds it to the cache if required.
+   * @param doc the document pointer
+   * @param node the node pointer
+   * @param type the node type
+   */
+  static GnomeNode newInstance(final Object doc, final Object node,
+                               final int type)
+  {
+    if (doc == null)
+      {
+        throw new NullPointerException("doc");
+      }
+    if (node == null)
+      {
+        throw new NullPointerException("node");
+      }
+    if (instances == null)
+      {
+        instances = new HashMap();
+      }
+    Map docNodes = (Map) instances.get(doc);
+    if (docNodes == null)
+      {
+        docNodes = new HashMap(1024); // TODO review optimal initial capacity
+        instances.put(doc, docNodes);
+      }
+    GnomeNode nodeInstance = (GnomeNode) docNodes.get(node);
+    if (nodeInstance != null)
+      {
+        return nodeInstance; // Return cached version
+      }
+    switch (type)
+      {
+      case ELEMENT_NODE:
+        nodeInstance = new GnomeElement(node);
+        break;
+      case ATTRIBUTE_NODE:
+        nodeInstance = new GnomeAttr(node);
+        break;
+      case TEXT_NODE:
+        nodeInstance = new GnomeText(node);
+        break;
+      case CDATA_SECTION_NODE:
+        nodeInstance = new GnomeCDATASection(node);
+        break;
+      case ENTITY_REFERENCE_NODE:
+        nodeInstance = new GnomeEntityReference(node);
+        break;
+      case ENTITY_NODE:
+        nodeInstance = new GnomeEntity(node);
+        break;
+      case PROCESSING_INSTRUCTION_NODE:
+        nodeInstance = new GnomeProcessingInstruction(node);
+        break;
+      case COMMENT_NODE:
+        nodeInstance = new GnomeComment(node);
+        break;
+      case DOCUMENT_NODE:
+        nodeInstance = new GnomeDocument(node);
+        break;
+      case DOCUMENT_TYPE_NODE:
+        nodeInstance = new GnomeDocumentType(node);
+        break;
+      case DOCUMENT_FRAGMENT_NODE:
+        nodeInstance = new GnomeDocumentFragment(node);
+        break;
+      case NOTATION_NODE:
+        nodeInstance = new GnomeNotation(node);
+        break;
+      default:
+        throw new IllegalArgumentException("Unknown node type: " + type);
+      }
+    docNodes.put(node, nodeInstance);
+    return nodeInstance;
+  }
+  
+  /**
+   * Frees the specified document.
+   * This removes all its nodes from the cache.
+   */
+  static void freeDocument(final Object doc)
+  {
+    if (instances == null || doc == null)
+      {
+        return;
+      }
+    instances.remove(doc);
+    //System.out.println("Freed "+instances.remove(doc));
+  }
+  
+  /**
+   * xmlNodePtr
+   */
+  final Object id;
+
+  Map userData;
+  Map userDataHandlers;
+
+  GnomeNode(final Object id)
+  {
+    this.id = id;
+  }
+
+  public native String getNodeName();
+
+  public native String getNodeValue()
+    throws DOMException;
+
+  public native void setNodeValue(String nodeValue)
+    throws DOMException;
+
+  public native short getNodeType();
+
+  public native Node getParentNode();
+
+  public NodeList getChildNodes()
+  {
+    return new GnomeNodeList(id);
+  }
+
+  public native Node getFirstChild();
+
+  public native Node getLastChild();
+
+  public native Node getPreviousSibling();
+
+  public native Node getNextSibling();
+
+  public NamedNodeMap getAttributes()
+  {
+    return new GnomeNamedNodeMap(id, 0);
+  }
+
+  public native Document getOwnerDocument();
+
+  public Node insertBefore(Node newChild, Node refChild)
+    throws DOMException
+  {
+    if (newChild instanceof StandaloneDocumentType)
+      {
+        DocumentType dt = (DocumentType) newChild;
+        newChild = ((GnomeDocument) getOwnerDocument())
+          .createDocumentType(dt.getName(), dt.getPublicId(),
+                              dt.getSystemId());
+      }
+    if (newChild == null)
+      {
+        throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, null);
+      }
+    if (!(newChild instanceof GnomeNode))
+      {
+        throw new GnomeDOMException(DOMException.WRONG_DOCUMENT_ERR, null);
+      }
+    if (refChild == null || !(refChild instanceof GnomeNode))
+      {
+        throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, null);
+      }
+    return xmljInsertBefore(newChild, refChild);
+  }
+
+  private native Node xmljInsertBefore(Node newChild, Node refChild)
+    throws DOMException;
+
+  public Node replaceChild(Node newChild, Node oldChild)
+    throws DOMException
+  {
+    if (newChild instanceof StandaloneDocumentType)
+      {
+        DocumentType dt = (DocumentType) newChild;
+        newChild = ((GnomeDocument) getOwnerDocument())
+          .createDocumentType(dt.getName(), dt.getPublicId(),
+                              dt.getSystemId());
+      }
+    if (newChild == null)
+      {
+        throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, null);
+      }
+    if (!(newChild instanceof GnomeNode))
+      {
+        throw new GnomeDOMException(DOMException.WRONG_DOCUMENT_ERR, newChild.toString());
+      }
+    if (oldChild == null || !(oldChild instanceof GnomeNode))
+      {
+        throw new GnomeDOMException(DOMException.NOT_FOUND_ERR, null);
+      }
+    return xmljReplaceChild(newChild, oldChild);
+  }
+
+  private native Node xmljReplaceChild(Node newChild, Node oldChild)
+    throws DOMException;
+
+  public Node removeChild(Node oldChild)
+    throws DOMException
+  {
+    if (!(oldChild instanceof GnomeNode))
+      {
+        throw new GnomeDOMException(DOMException.WRONG_DOCUMENT_ERR, null);
+      }
+    return xmljRemoveChild(oldChild);
+  }
+
+  private native Node xmljRemoveChild(Node oldChild)
+    throws DOMException;
+
+  public Node appendChild(Node newChild)
+    throws DOMException
+  {
+    if (newChild instanceof StandaloneDocumentType)
+      {
+        DocumentType dt = (DocumentType) newChild;
+        newChild = ((GnomeDocument) getOwnerDocument())
+          .createDocumentType(dt.getName(), dt.getPublicId(),
+                              dt.getSystemId());
+      }
+    if (!(newChild instanceof GnomeNode))
+      {
+        throw new GnomeDOMException(DOMException.WRONG_DOCUMENT_ERR, null);
+      }
+    return xmljAppendChild(newChild);
+  }
+
+  private native Node xmljAppendChild(Node newChild)
+    throws DOMException;
+
+  public native boolean hasChildNodes();
+
+  public Node cloneNode(boolean deep)
+  {
+    Node ret = xmljCloneNode(deep);
+    notifyUserDataHandlers(UserDataHandler.NODE_CLONED, this, ret);
+    return ret;
+  }
+  
+  private native Node xmljCloneNode(boolean deep);
+
+  public native void normalize();
+
+  public boolean isSupported(String feature, String version)
+  {
+    return getOwnerDocument().getImplementation()
+      .hasFeature(feature, version);
+  }
+
+  public native String getNamespaceURI();
+
+  public native String getPrefix();
+
+  public native void setPrefix(String prefix)
+    throws DOMException;
+
+  public native String getLocalName();
+
+  public native boolean hasAttributes();
+
+  public int hashCode()
+  {
+    return id.hashCode();
+  }
+
+  public boolean equals(Object other)
+  {
+    if (other == this)
+      {
+        return true;
+      }
+    return (other instanceof GnomeNode &&
+            ((GnomeNode) other).id == id);
+  }
+
+  // DOM Level 3 methods
+
+  public native String getBaseURI();
+
+  public short compareDocumentPosition(Node other)
+    throws DOMException
+  {
+    return (short) compareTo(other);
+  }
+
+  public final int compareTo(Object other)
+  {
+    if (other instanceof GnomeNode)
+      {
+        return xmljCompareTo(other);
+      }
+    return 0;
+  }
+
+  private native int xmljCompareTo(Object other);
+  
+  public String getTextContent()
+    throws DOMException
+  {
+    switch (getNodeType())
+      {
+      case ELEMENT_NODE:
+      case ATTRIBUTE_NODE:
+      case ENTITY_NODE:
+      case ENTITY_REFERENCE_NODE:
+      case DOCUMENT_FRAGMENT_NODE:
+        StringBuffer buffer = new StringBuffer();
+        NodeList children = getChildNodes();
+        int len = children.getLength();
+        for (int i = 0; i < len; i++)
+          {
+            Node child = children.item(i);
+            String textContent = child.getTextContent();
+            if (textContent != null)
+              {
+                buffer.append(textContent);
+              }
+          }
+        return buffer.toString();
+      case TEXT_NODE:
+      case CDATA_SECTION_NODE:
+      case COMMENT_NODE:
+      case PROCESSING_INSTRUCTION_NODE:
+        return getNodeValue();
+      default:
+        return null;
+      }
+  }
+  
+  public void setTextContent(String textContent)
+    throws DOMException
+  {
+    switch (getNodeType())
+      {
+      case ENTITY_REFERENCE_NODE:
+        // entity references are read only
+        throw new GnomeDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
+                                    null);
+      case ELEMENT_NODE:
+      case ATTRIBUTE_NODE:
+      case ENTITY_NODE:
+      case DOCUMENT_FRAGMENT_NODE:
+        NodeList children = getChildNodes();
+        int len = children.getLength();
+        for (int i = 0; i < len; i++)
+          {
+            Node child = children.item(i);
+            removeChild(child);
+          }
+        if (textContent != null)
+          {
+            Text text = getOwnerDocument().createTextNode(textContent);
+            appendChild(text);
+          }
+        break;
+      case TEXT_NODE:
+      case CDATA_SECTION_NODE:
+      case COMMENT_NODE:
+      case PROCESSING_INSTRUCTION_NODE:
+        setNodeValue(textContent);
+        break;
+      }
+  }
+  
+  public boolean isSameNode(Node other)
+  {
+    return equals(other);
+  }
+  
+  public native String lookupPrefix(String namespaceURI);
+  
+  public native boolean isDefaultNamespace(String namespaceURI);
+  
+  public native String lookupNamespaceURI(String prefix);
+  
+  public native boolean isEqualNode(Node arg);
+  
+  public Object getFeature(String feature, String version)
+  {
+    return getOwnerDocument().getImplementation()
+      .getFeature(feature, version);
+  }
+
+  public Object setUserData(String key, Object data, UserDataHandler handler)
+  {
+    // TODO handler
+    if (userData == null)
+      {
+        userData = new HashMap();
+      }
+    if (handler != null)
+      {
+        if (userDataHandlers == null)
+          {
+            userDataHandlers = new HashMap();
+          }
+        userDataHandlers.put(key, handler);
+      }
+    return userData.put(key, data);
+  }
+
+  public Object getUserData(String key)
+  {
+    if (userData == null)
+      {
+        return null;
+      }
+    return userData.get(key);
+  }
+
+  void notifyUserDataHandlers(short op, Node src, Node dst)
+  {
+    if (userDataHandlers != null)
+      {
+        for (Iterator i = userDataHandlers.entrySet().iterator(); i.hasNext(); )
+          {
+            Map.Entry entry = (Map.Entry) i.next();
+            String key = (String) entry.getKey();
+            UserDataHandler handler = (UserDataHandler) entry.getValue();
+            Object data = userData.get(key);
+            handler.handle(op, key, data, src, dst);
+          }
+      }
+  }
+
+  public String toString()
+  {
+    StringBuffer buffer = new StringBuffer(getClass().getName());
+    buffer.append("[nodeName=");
+    buffer.append(getNodeName());
+    buffer.append("]");
+    return buffer.toString();
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNodeList.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNodeList.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNodeList.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNodeList.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,66 @@
+/* GnomeNodeList.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * A DOM node list implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeNodeList
+implements NodeList
+{
+
+  /**
+   * The node id.
+   */
+  private final Object id;
+
+  GnomeNodeList (Object id)
+  {
+    this.id = id;
+  }
+
+  public native Node item (int index);
+
+  public native int getLength ();
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNotation.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNotation.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNotation.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeNotation.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,78 @@
+/* GnomeNotation.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.Notation;
+
+/**
+ * A DOM notation node implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeNotation
+extends GnomeNode
+implements Notation
+{
+
+  GnomeNotation (Object id)
+  {
+    super (id);
+  }
+
+  public native String getPublicId ();
+
+  public native String getSystemId ();
+
+  public String toString ()
+  {
+    String publicId = getPublicId ();
+    StringBuffer buffer = new StringBuffer (getClass ().getName ());
+    buffer.append ("[");
+    if (publicId != null)
+      {
+        buffer.append ("publicId=");
+        buffer.append (publicId);
+        buffer.append (",");
+      }
+    buffer.append ("systemId=");
+    buffer.append (getSystemId ());
+    buffer.append ("]");
+    return buffer.toString ();
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeProcessingInstruction.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeProcessingInstruction.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeProcessingInstruction.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeProcessingInstruction.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,77 @@
+/* GnomeProcessingInstruction.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.DOMException;
+import org.w3c.dom.ProcessingInstruction;
+
+/**
+ * A DOM processing instruction node implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeProcessingInstruction
+extends GnomeNode
+implements ProcessingInstruction
+{
+
+  GnomeProcessingInstruction (Object id)
+  {
+    super (id);
+  }
+
+  public String getTarget ()
+  {
+    return getNodeName ();
+  }
+
+  public native String getData ();
+
+  public native void setData (String data)
+    throws DOMException;
+
+  public String toString ()
+  {
+    StringBuffer buffer = new StringBuffer (getClass ().getName ());
+    buffer.append ("[data=");
+    buffer.append (getData ());
+    buffer.append ("]");
+    return buffer.toString ();
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeText.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeText.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeText.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeText.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,130 @@
+/* GnomeText.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Node;
+import org.w3c.dom.Text;
+
+/**
+ * A DOM text node implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeText
+extends GnomeCharacterData
+implements Text
+{
+
+  GnomeText (Object id)
+  {
+    super (id);
+  }
+  
+  public Text splitText (int offset)
+    throws DOMException
+  {
+    String value = getNodeValue ();
+    String part1 = value.substring (0, offset);
+    String part2 = value.substring (offset);
+    Text text = getOwnerDocument ().createTextNode (part1);
+    getParentNode ().insertBefore (text, this);
+    setNodeValue (part2);
+    return text;
+  }
+  
+  // DOM Level 3
+
+  public boolean isElementContentWhitespace ()
+  {
+    return getTextContent ().trim ().length () == 0;
+  }
+  
+  public String getWholeText ()
+  {
+    Node first = this;
+    Node node = getPreviousSibling ();
+    while (node != null && node instanceof Text)
+      {
+        first = node;
+        node = node.getPreviousSibling ();
+      }
+    StringBuffer buf = new StringBuffer (first.getNodeValue ());
+    node = first.getNextSibling ();
+    while (node != null && node instanceof Text)
+      {
+        buf.append (node.getNodeValue ());
+        node = node.getNextSibling ();
+      }
+    return buf.toString ();
+  }
+
+  public Text replaceWholeText (String content) throws DOMException
+  {
+    boolean isEmpty = (content == null || content.length () == 0);
+    if (!isEmpty)
+      {
+        setNodeValue (content);
+      }
+    
+    Node first = this;
+    Node node = getPreviousSibling ();
+    while (node != null && node instanceof Text)
+      {
+        first = node;
+        node = node.getPreviousSibling ();
+      }
+    node = first.getNextSibling ();
+    Node parent = getParentNode ();
+    if (first != this || isEmpty)
+      {
+        parent.removeChild (first);
+      }
+    while (node != null && node instanceof Text)
+      {
+        Node tmp = node;
+        node = node.getNextSibling ();
+        if (tmp != this || isEmpty)
+          {
+            parent.removeChild (tmp);
+          }
+      }
+    return (isEmpty) ? null : this;
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeTypeInfo.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeTypeInfo.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeTypeInfo.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeTypeInfo.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,65 @@
+/* GnomeTypeInfo.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.TypeInfo;
+
+/**
+ * Provides XML Schema information about an element or attribute.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeTypeInfo implements TypeInfo
+{
+
+  final Object id;
+
+  GnomeTypeInfo(Object id)
+  {
+    this.id = id;
+  }
+
+  public native String getTypeName ();
+
+  public native String getTypeNamespace ();
+
+  public native boolean isDerivedFrom (String typeNamespaceArg,
+                                       String typeNameArg,
+                                       int derivationMethod);
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathExpression.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathExpression.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathExpression.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathExpression.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,86 @@
+/* GnomeXPathExpression.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Node;
+import org.w3c.dom.xpath.XPathException;
+import org.w3c.dom.xpath.XPathExpression;
+import org.w3c.dom.xpath.XPathNSResolver;
+
+/**
+ * A compiled XPath expression implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeXPathExpression
+implements XPathExpression
+{
+
+  /**
+   * xmlXPathCompExprPtr
+   */
+  final Object expr;
+
+  GnomeXPathExpression (GnomeDocument doc, String expression,
+                        XPathNSResolver resolver)
+  {
+    expr = init (expression);
+    // TODO resolver
+  }
+
+  protected void finalize ()
+  {
+    free (expr);
+  }
+
+  private native Object init (String expression);
+
+  private native void free (Object expr);
+
+  public Object evaluate (Node contextNode, short type, Object result)
+    throws XPathException, DOMException
+  {
+    return doEvaluate (expr, contextNode, type, result);
+  }
+  
+  private native Object doEvaluate (Object expr, Node contextNode,
+                                    short type, Object result)
+    throws XPathException, DOMException;
+    
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNSResolver.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNSResolver.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNSResolver.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNSResolver.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,65 @@
+/* GnomeXPathNSResolver.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.Node;
+import org.w3c.dom.xpath.XPathNSResolver;
+
+/**
+ * XPath namespace URI resolver implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeXPathNSResolver
+  implements XPathNSResolver
+{
+
+  Node node;
+
+  GnomeXPathNSResolver(Node node)
+  {
+    this.node = node;
+  }
+
+  public String lookupNamespaceURI(String prefix)
+  {
+    return node.lookupNamespaceURI(prefix);
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNodeList.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNodeList.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNodeList.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathNodeList.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,73 @@
+/* GnomeXPathNodeList.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * A node list that uses an XPath result object.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeXPathNodeList
+implements NodeList
+{
+
+  /**
+   * xmlXPathObjectPtr
+   */
+  final Object obj;
+
+  GnomeXPathNodeList (Object obj)
+  {
+    this.obj = obj;
+  }
+
+  protected void finalize ()
+  {
+    free(obj);
+  }
+
+  private native void free (Object obj);
+
+  public native int getLength ();
+
+  public native Node item (int index);
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathResult.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathResult.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathResult.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/dom/GnomeXPathResult.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,132 @@
+/* GnomeXPathResult.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.dom;
+
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Node;
+import org.w3c.dom.xpath.XPathException;
+import org.w3c.dom.xpath.XPathResult;
+
+/**
+ * An XPath result object implemented in libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeXPathResult
+implements XPathResult
+{
+
+  /**
+   * xmlXPathObjectPtr
+   */
+  final Object obj;
+
+  GnomeXPathResult (Object obj)
+  {
+    this.obj = obj;
+  }
+
+  protected void finalize ()
+  {
+    free (obj);
+  }
+
+  private native void free (Object obj);
+  
+  public native short getResultType ();
+
+  public native double getNumberValue ()
+    throws XPathException;
+
+  public native String getStringValue ()
+    throws XPathException;
+
+  public native boolean getBooleanValue ()
+    throws XPathException;
+
+  public native Node getSingleNodeValue ()
+    throws XPathException;
+
+  public native boolean getInvalidIteratorState();
+
+  public native int getSnapshotLength ()
+    throws XPathException;
+
+  public native Node iterateNext ()
+    throws XPathException, DOMException;
+
+  public native Node snapshotItem (int index)
+    throws XPathException;
+
+  public String toString ()
+  {
+    short type = getResultType ();
+    switch (type)
+      {
+      case STRING_TYPE:
+        return getStringValue ();
+      case NUMBER_TYPE:
+        return new Double (getNumberValue ()).toString ();
+      case BOOLEAN_TYPE:
+        return Boolean.valueOf (getBooleanValue ()).toString ();
+      case UNORDERED_NODE_SNAPSHOT_TYPE:
+        int len = getSnapshotLength ();
+        switch (len) {
+        case 0:
+          return "[no matches]";
+        case 1:
+          return getSingleNodeValue ().toString ();
+        default:
+          StringBuffer buffer = new StringBuffer ();
+          for (int i = 0; i < len; i++)
+            {
+              if (i > 0)
+                {
+                  buffer.append (',');
+                }
+              buffer.append (snapshotItem (i));
+            }
+          return buffer.toString ();
+        }
+      default:
+        return getClass ().getName () + "[type=" + type + ",length=" +
+          getSnapshotLength () + ']';
+      }
+  }
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeLocator.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeLocator.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeLocator.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeLocator.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,99 @@
+/* GnomeLocator.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.sax;
+
+import org.xml.sax.Locator;
+
+/**
+ * SAX Locator implementation that uses libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeLocator
+implements Locator
+{
+
+  // An xmlParserCtxtPtr
+  private final Object ctx;
+
+  // An xmlSAXLocatorPtr
+  private final Object loc;
+
+  GnomeLocator (Object ctx, Object loc)
+  {
+    this.ctx = ctx;
+    this.loc = loc;
+    if (ctx == null)
+      {
+        throw new NullPointerException ("ctx");
+      }
+    if (loc == null)
+      {
+        throw new NullPointerException ("loc");
+      }
+  }
+  
+  public String getPublicId ()
+  {
+    return publicId (ctx, loc);
+  }
+
+  private native String publicId (Object ctx, Object loc);
+
+  public String getSystemId ()
+  {
+    return systemId (ctx, loc);
+  }
+
+  private native String systemId (Object ctx, Object loc);
+
+  public int getLineNumber ()
+  {
+    return lineNumber (ctx, loc);
+  }
+  
+  private native int lineNumber (Object ctx, Object loc);
+
+  public int getColumnNumber ()
+  {
+    return columnNumber (ctx, loc);
+  }
+  
+  private native int columnNumber (Object ctx, Object loc);
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParser.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParser.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParser.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParser.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,105 @@
+/* GnomeSAXParser.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.sax;
+
+import javax.xml.parsers.SAXParser;
+
+import org.xml.sax.Parser;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXNotSupportedException;
+import org.xml.sax.XMLReader;
+
+/**
+ * JAXP SAX parser implementation that uses libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class GnomeSAXParser
+extends SAXParser
+{
+
+  private boolean namespaceAware;
+  private boolean validating;
+
+  /**
+   * Creates a new SAX parser.
+   */
+  GnomeSAXParser (boolean namespaceAware, boolean validating)
+  {
+    this.namespaceAware = namespaceAware;
+    this.validating = validating;
+  }
+
+  public Parser getParser ()
+    throws SAXException
+  {
+    throw new SAXNotSupportedException ("SAX version 1 not supported");
+  }
+
+  public XMLReader getXMLReader ()
+    throws SAXException
+  {
+    return new GnomeXMLReader (namespaceAware, validating);
+  }
+
+  public Object getProperty (String name)
+    throws SAXNotRecognizedException, SAXNotSupportedException
+  {
+    GnomeXMLReader.checkPropertyName (name);
+    throw new SAXNotSupportedException (name);
+  }
+
+  public void setProperty (String name, Object value)
+    throws SAXNotRecognizedException, SAXNotSupportedException
+  {
+    GnomeXMLReader.checkPropertyName (name);
+    throw new SAXNotSupportedException (name);
+  }
+
+  public boolean isNamespaceAware ()
+  {
+    return namespaceAware;
+  }
+
+  public boolean isValidating ()
+  {
+    return validating;
+  }
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParserFactory.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParserFactory.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParserFactory.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeSAXParserFactory.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,92 @@
+/* GnomeSAXParserFactory.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.sax;
+
+import java.util.Map;
+import java.util.HashMap;
+
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXNotSupportedException;
+
+/**
+ * JAXP SAX parser factory implementation that uses libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class GnomeSAXParserFactory
+extends SAXParserFactory
+{
+
+  private Map features;
+
+  /**
+   * Creates a new SAX parser factory.
+   */
+  public GnomeSAXParserFactory ()
+  {
+    features = new HashMap ();
+  }
+
+  public SAXParser newSAXParser ()
+    throws ParserConfigurationException, SAXException
+  {
+    // TODO features
+    return new GnomeSAXParser (isNamespaceAware (), isValidating ());
+  }
+
+  public boolean getFeature (String name)
+    throws ParserConfigurationException, SAXNotRecognizedException, SAXNotSupportedException
+  {
+    GnomeXMLReader.checkFeatureName (name);
+    Boolean val = (Boolean) features.get (name);
+    return (val == null) ? false : val.booleanValue ();
+  }
+
+  public void setFeature (String name, boolean flag)
+    throws ParserConfigurationException, SAXNotRecognizedException, SAXNotSupportedException
+  {
+    GnomeXMLReader.checkFeatureName (name);
+    features.put (name, flag ? Boolean.TRUE : Boolean.FALSE);
+  }
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeXMLReader.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeXMLReader.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeXMLReader.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/GnomeXMLReader.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,1065 @@
+/* GnomeXMLReader.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.sax;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.DTDHandler;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXNotSupportedException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.ext.DeclHandler;
+import org.xml.sax.ext.LexicalHandler;
+
+import gnu.xml.libxmlj.util.NamedInputStream;
+import gnu.xml.libxmlj.util.StandaloneLocator;
+import gnu.xml.libxmlj.util.XMLJ;
+
+/**
+ * A SAX2 parser that uses libxml2.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class GnomeXMLReader
+implements XMLReader
+{
+
+  static
+  {
+    XMLJ.init ();
+  }
+
+  private static final String FEATURES_PREFIX =
+    "http://xml.org/sax/features/";
+  
+  private static final List RECOGNIZED_FEATURES =
+    Arrays.asList (new String[]
+                   {
+                   "external-general-entities",
+                   "external-parameter-entities",
+                   "is-standalone",
+                   "lexical-handler/parameter-entities",
+                   "namespaces",
+                   "namespace-prefixes",
+                   "resolve-dtd-uris",
+                   "string-interning",
+                   "use-attributes2",
+                   "use-locator2",
+                   "use-entity-resolver2",
+                   "validation"
+                   });
+  
+  private static final String PROPERTIES_PREFIX =
+    "http://xml.org/sax/properties/";
+  
+  private static final List RECOGNIZED_PROPERTIES =
+    Arrays.asList (new String[]
+                   {
+                   "declaration-handler",
+                   "dom-node",
+                   "lexical-handler",
+                   "xml-string"
+                   });
+
+  // Features
+
+  private transient boolean standalone;
+  private boolean namespaces;
+  private boolean namespacePrefixes;
+  private boolean validation;
+
+  // Callback handlers
+
+  private ContentHandler contentHandler;
+
+  private DTDHandler dtdHandler;
+
+  private EntityResolver entityResolver;
+
+  private ErrorHandler errorHandler;
+
+  private DeclHandler declarationHandler;
+
+  private LexicalHandler lexicalHandler;
+
+  private GnomeLocator locator;
+
+  // Namespace helper for handling callbacks
+  private transient Namespaces ns;
+
+  // If true, do not invoke callback methods except endDocument
+  private transient boolean seenFatalError;
+
+  private transient boolean seenStartDocument;
+
+  private transient String base;
+
+  public GnomeXMLReader ()
+  {
+    this (true, true);
+  }
+
+  public GnomeXMLReader (boolean namespaces, boolean validation)
+  {
+    this.namespaces = namespaces;
+    this.validation = validation;
+    ns = new Namespaces ();
+  }
+
+  public ContentHandler getContentHandler ()
+  {
+    return contentHandler;
+  }
+
+  public void setContentHandler (ContentHandler handler)
+  {
+    contentHandler = handler;
+  }
+
+  public DTDHandler getDTDHandler ()
+  {
+    return dtdHandler;
+  }
+
+  public void setDTDHandler (DTDHandler handler)
+  {
+    dtdHandler = handler;
+  }
+
+  public EntityResolver getEntityResolver ()
+  {
+    return entityResolver;
+  }
+
+  public void setEntityResolver (EntityResolver resolver)
+  {
+    entityResolver = resolver;
+  }
+
+  public ErrorHandler getErrorHandler ()
+  {
+    return errorHandler;
+  }
+
+  public void setErrorHandler (ErrorHandler handler)
+  {
+    errorHandler = handler;
+  }
+
+  // Features
+
+  public boolean getFeature (String name)
+    throws SAXNotRecognizedException, SAXNotSupportedException
+  {
+    checkFeatureName (name);
+    String key = name.substring (FEATURES_PREFIX.length ());
+    if ("external-general-entities".equals (key))
+      {
+        return validation; // TODO check this
+      }
+    else if ("external-parameter-entities".equals (key))
+      {
+        return validation; // TODO check this
+      }
+    else if ("is-standalone".equals (key))
+      {
+        return standalone;
+      }
+    else if ("namespaces".equals (key))
+      {
+        return namespaces;
+      }
+    else if ("namespace-prefixes".equals (key))
+      {
+        return namespacePrefixes;
+      }
+    else if ("resolve-dtd-uris".equals (key))
+      {
+        return true;
+      }
+    else if ("validation".equals (key))
+      {
+        return validation;
+      }
+    else
+      {
+        return false;
+      }
+  }
+
+  public void setFeature (String name, boolean value)
+    throws SAXNotRecognizedException, SAXNotSupportedException
+  {
+    checkFeatureName (name);
+    String key = name.substring (FEATURES_PREFIX.length ());
+    if ("namespaces".equals (key))
+      {
+        namespaces = value;
+      }
+    else if ("namespace-prefixes".equals (key))
+      {
+        namespacePrefixes = value;
+      }
+    else if ("validation".equals (key))
+      {
+        validation = value;
+      }
+  }
+
+  /**
+   * Check that the specified feature name is recognized.
+   */
+  static void checkFeatureName (String name)
+    throws SAXNotRecognizedException
+  {
+    if (name == null || !name.startsWith (FEATURES_PREFIX))
+      {
+        throw new SAXNotRecognizedException (name);
+      }
+    String key = name.substring (FEATURES_PREFIX.length ());
+    if (!RECOGNIZED_FEATURES.contains (key))
+      {
+        throw new SAXNotRecognizedException (name);
+      }
+  }
+
+  // Properties
+
+  public Object getProperty (String name)
+    throws SAXNotRecognizedException, SAXNotSupportedException
+  {
+    checkPropertyName (name);
+    String key = name.substring (PROPERTIES_PREFIX.length ());
+    if ("declaration-handler".equals (key))
+      {
+        return getDeclarationHandler ();
+      }
+    else if ("lexical-handler".equals (key))
+      {
+        return getLexicalHandler ();
+      }
+    else
+      {
+        throw new SAXNotSupportedException (name);
+      }
+  }
+
+  public void setProperty (String name, Object value)
+    throws SAXNotRecognizedException, SAXNotSupportedException
+  {
+    checkPropertyName (name);
+    String key = name.substring (PROPERTIES_PREFIX.length ());
+    if ("declaration-handler".equals (key))
+      {
+        setDeclarationHandler ((DeclHandler) value);
+      }
+    else if ("lexical-handler".equals (key))
+      {
+        setLexicalHandler ((LexicalHandler) value);
+      }
+  }
+
+  public DeclHandler getDeclarationHandler ()
+  {
+    return declarationHandler;
+  }
+
+  public void setDeclarationHandler (DeclHandler declarationHandler)
+  {
+    this.declarationHandler = declarationHandler;
+  }
+
+  public LexicalHandler getLexicalHandler ()
+  {
+    return lexicalHandler;
+  }
+
+  public void setLexicalHandler (LexicalHandler lexicalHandler)
+  {
+    this.lexicalHandler = lexicalHandler;
+  }
+
+  /**
+   * Check that the specified property name is recognized.
+   */
+  static void checkPropertyName (String name)
+    throws SAXNotRecognizedException
+  {
+    if (!name.startsWith (PROPERTIES_PREFIX))
+      {
+        throw new SAXNotRecognizedException (name);
+      }
+    String key = name.substring (PROPERTIES_PREFIX.length ());
+    if (!RECOGNIZED_PROPERTIES.contains (key))
+      {
+        throw new SAXNotRecognizedException (name);
+      }
+  }
+
+  // Parse
+
+  public void parse (String systemId)
+    throws IOException, SAXException
+  {
+    URL url = null;
+    try
+      {
+        url = new URL (systemId);
+      }
+    catch (MalformedURLException e)
+      {
+        File file = new File(systemId);
+        if (!file.exists ())
+          {
+            throw new FileNotFoundException (systemId);
+          }
+        String path  = file.getAbsolutePath();
+        if (File.separatorChar != '/')
+          {
+            path = path.replace (File.separatorChar, '/');
+          }
+        if (!path.startsWith ("/"))
+          {
+            path = "/" + path;
+          }
+        if (!path.endsWith ("/") && file.isDirectory ())
+          {
+            path = path + "/";
+          }
+        url = new URL ("file:" + path);
+      }
+    InputSource source = new InputSource(url.toString ());
+    source.setByteStream (url.openStream ());
+    parse (source);
+  }
+
+  public synchronized void parse (InputSource input)
+    throws IOException, SAXException
+  {
+    NamedInputStream in = XMLJ.getInputStream (input);
+    byte[] detectBuffer = in.getDetectBuffer ();
+    String publicId = input.getPublicId ();
+    String systemId = input.getSystemId ();
+    base = XMLJ.getBaseURI (systemId);
+    // Reset state
+    standalone = false;
+    seenFatalError = false;
+    seenStartDocument = false;
+    if (systemId != null)
+      {
+        int lsi = systemId.lastIndexOf ('/');
+        if (lsi != -1)
+          {
+            base = systemId.substring (0, lsi + 1);
+          }
+      }
+    // Handle zero-length document
+    if (detectBuffer == null)
+      {
+        startDocument (true);
+        fatalError ("No document element", 0, 0, publicId, systemId);
+        endDocument ();
+        return;
+      }
+    // Parse
+    parseStream(in,
+                detectBuffer,
+                publicId,
+                systemId,
+                base,
+                validation,
+                contentHandler != null,
+                dtdHandler != null,
+                entityResolver != null,
+                errorHandler != null,
+                declarationHandler != null,
+                lexicalHandler != null);
+    in.close ();
+  }
+
+  native void parseStream (InputStream in,
+                           byte[] detectBuffer,
+                           String publicId,
+                           String systemId,
+                           String base,
+                           boolean validate,
+                           boolean contentHandler,
+                           boolean dtdHandler,
+                           boolean entityResolver,
+                           boolean errorHandler,
+                           boolean declarationHandler,
+                           boolean lexicalHandler)
+    throws IOException, SAXException;
+
+  String getURI (String prefix)
+  {
+    if (!namespaces)
+      {
+        return null;
+      }
+    return ns.getURI (prefix);
+  }
+
+  // Callbacks from libxmlj
+
+  private void startDTD (String name, String publicId, String systemId)
+    throws SAXException
+  {
+    if (seenFatalError || lexicalHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        systemId = XMLJ.getAbsoluteURI (base, systemId);
+        lexicalHandler.startDTD (name, publicId, systemId);
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void externalEntityDecl (String name, String publicId,
+                                   String systemId)
+    throws SAXException
+  {
+    if (seenFatalError || declarationHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        systemId = XMLJ.getAbsoluteURI (base, systemId);
+        declarationHandler.externalEntityDecl (name, publicId, systemId);
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void internalEntityDecl (String name, String value)
+    throws SAXException
+  {
+    if (seenFatalError || declarationHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        declarationHandler.internalEntityDecl (name, value);
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private InputStream resolveEntity (String publicId, String systemId)
+    throws SAXException, IOException
+  {
+    if (entityResolver == null)
+      {
+        return null;
+      }
+    try
+      {
+        systemId = XMLJ.getAbsoluteURI (base, systemId);
+        InputSource source = entityResolver.resolveEntity (publicId, systemId);
+        return (source == null) ? null : XMLJ.getInputStream (source);
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void notationDecl (String name, String publicId, String systemId)
+    throws SAXException
+  {
+    if (seenFatalError || dtdHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        systemId = XMLJ.getAbsoluteURI (base, systemId);
+        dtdHandler.notationDecl (name, publicId, systemId);
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void attributeDecl (String eName, String aName, String type,
+                              String mode, String value)
+    throws SAXException
+  {
+    if (seenFatalError || declarationHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        declarationHandler.attributeDecl (eName, aName, type, mode, value);
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void elementDecl (String name, String model)
+    throws SAXException
+  {
+    if (seenFatalError || declarationHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        declarationHandler.elementDecl (name, model);
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void unparsedEntityDecl (String name, String publicId,
+                                   String systemId, String notationName)
+    throws SAXException
+  {
+    if (seenFatalError || dtdHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        systemId = XMLJ.getAbsoluteURI (base, systemId);
+        dtdHandler.unparsedEntityDecl (name, publicId, systemId,
+                                       notationName);
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void setDocumentLocator (Object ctx, Object loc)
+  {
+    locator = new GnomeLocator (ctx, loc);
+    if (seenFatalError || contentHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        contentHandler.setDocumentLocator (locator);
+      }
+    catch (Exception e)
+      {
+      }
+  }
+  
+  private void startDocument (boolean standalone)
+    throws SAXException
+  {
+    this.standalone = standalone;
+    seenStartDocument = true;
+    if (contentHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        contentHandler.startDocument ();
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void endDocument ()
+    throws SAXException
+  {
+    if (contentHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        contentHandler.endDocument();
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void startElement(String name, String[] attrs)
+    throws SAXException
+  {
+    if (seenFatalError || contentHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        XMLName xName = new XMLName (this, name);
+        if (namespaces)
+          {
+            // Handle defined namespaces
+            ns.push ();
+            int len = (attrs == null) ? 0 : attrs.length;
+            if (len > 0)
+              {
+                ArrayList filtered = new ArrayList (len);
+                for (int i = 0; i < len; i += 2)
+                  {
+                    String attName = attrs[i];
+                    String attValue = attrs[i + 1];
+                    if (attName.equals ("xmlns"))
+                      {
+                        startPrefixMapping ("", attValue);
+                      }
+                    else if (attName.startsWith ("xmlns:"))
+                      {
+                        startPrefixMapping (attName.substring (6), attValue);
+                      }
+                    else
+                      {
+                        filtered.add (attName);
+                        filtered.add (attValue);
+                      }
+                  }
+                // Remove xmlns attributes
+                attrs = new String[filtered.size ()];
+                filtered.toArray (attrs);
+              }
+          }
+        // Construct attributes
+        Attributes atts = new StringArrayAttributes (this, attrs);
+        contentHandler.startElement (xName.uri, xName.localName, xName.qName,
+                                     atts);
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void endElement (String name)
+    throws SAXException
+  {
+    if (seenFatalError || contentHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        XMLName xName = new XMLName (this, name);
+        String uri = (xName.uri == null) ? "" : xName.uri;
+        contentHandler.endElement (uri, xName.localName, xName.qName);
+        // Handle undefining namespaces
+        if (namespaces)
+          {
+            for (Iterator i = ns.currentPrefixes (); i.hasNext (); )
+              {
+                endPrefixMapping ((String) i.next ());
+              }
+            ns.pop (); // releases current depth
+          }
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void startPrefixMapping (String prefix, String uri)
+    throws SAXException
+  {
+    if (seenFatalError || contentHandler == null)
+      {
+        return;
+      }
+    ns.define (prefix, uri);
+    contentHandler.startPrefixMapping (prefix, uri);
+  }
+
+  private void endPrefixMapping (String prefix)
+    throws SAXException
+  {
+    if (seenFatalError || contentHandler == null)
+      {
+        return;
+      }
+    contentHandler.endPrefixMapping (prefix);
+  }
+
+  private void characters (String text)
+    throws SAXException
+  {
+    if (seenFatalError || contentHandler == null || text == null)
+      {
+        return;
+      }
+    try
+      {
+        char[] ch = text.toCharArray ();
+        contentHandler.characters (ch, 0, ch.length);
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void ignorableWhitespace (String text)
+    throws SAXException
+  {
+    if (seenFatalError || contentHandler == null || text == null)
+      {
+        return;
+      }
+    try
+      {
+        char[] ch = text.toCharArray ();
+        contentHandler.ignorableWhitespace (ch, 0, ch.length);
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void processingInstruction (String target, String data)
+    throws SAXException
+  {
+    if (seenFatalError || contentHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        if (data == null)
+          {
+            data = "";
+          }
+        contentHandler.processingInstruction (target, data);
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void comment (String text)
+    throws SAXException
+  {
+    if (seenFatalError || lexicalHandler == null || text == null)
+      {
+        return;
+      }
+    try
+      {
+        char[] ch = text.toCharArray ();
+        lexicalHandler.comment (ch, 0, ch.length);
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void cdataBlock (String text)
+    throws SAXException
+  {
+    if (seenFatalError || text == null)
+      {
+        return;
+      }
+    try
+      {
+        if (lexicalHandler == null)
+          {
+            characters(text);
+          }
+        else
+          {
+            lexicalHandler.startCDATA();
+            characters(text);
+            lexicalHandler.endCDATA();
+          }
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void warning (String message,
+                        int lineNumber, int columnNumber,
+                        String publicId, String systemId)
+    throws SAXException
+  {
+    if (seenFatalError || errorHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        Locator l = new StandaloneLocator (lineNumber, columnNumber,
+                                           publicId, systemId);
+        errorHandler.warning (new SAXParseException (message, l));
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void error (String message,
+                      int lineNumber, int columnNumber,
+                      String publicId, String systemId)
+    throws SAXException
+  {
+    if (seenFatalError || errorHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        Locator l = new StandaloneLocator (lineNumber, columnNumber,
+                                           publicId, systemId);
+        errorHandler.error (new SAXParseException (message, l));
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+  private void fatalError (String message,
+                           int lineNumber, int columnNumber,
+                           String publicId, String systemId)
+    throws SAXException
+  {
+    if (seenFatalError || errorHandler == null)
+      {
+        return;
+      }
+    try
+      {
+        if (!seenStartDocument)
+          {
+            startDocument (false);
+          }
+        seenFatalError = true;
+        Locator l = new StandaloneLocator (lineNumber, columnNumber,
+                                           publicId, systemId);
+        errorHandler.fatalError (new SAXParseException (message, l));
+      }
+    catch (Exception e)
+      {
+        if (e instanceof SAXException)
+          {
+            throw (SAXException) e;
+          }
+        else
+          {
+            throw new SAXException (e);
+          }
+      }
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/Namespaces.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/Namespaces.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/Namespaces.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/Namespaces.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,122 @@
+/* Namespaces.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.sax;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+
+/**
+ * Helper class for managing namespaces.
+ * 
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class Namespaces
+{
+
+  ArrayList stack = new ArrayList ();
+  
+  /**
+   * Increments the tree depth.
+   * This allocates a new potential namespace entry.
+   */
+  void push ()
+  {
+    stack.add (null);
+  }
+
+  /**
+   * Decrements the tree depth.
+   * This removes namespaces defined at the extremity.
+   */
+  void pop ()
+  {
+    stack.remove (stack.size() - 1);
+  }
+
+  /**
+   * Searches for the namespace URI corresponding to the specified prefix.
+   */
+  String getURI (String prefix)
+  {
+    for (int i = stack.size () - 1; i >= 0; i--)
+    {
+      HashMap ns = (HashMap) stack.get (i);
+      if (ns != null && ns.containsKey (prefix))
+      {
+        String ret = (String) ns.get (prefix);
+        return (ret == null) ? "" : ret;
+      }
+    }
+    return "";
+  }
+
+  /**
+   * Defines the specified prefix-URI mapping at the current depth in the
+   * tree.
+   */
+  void define (String prefix, String uri)
+  {
+    int index = stack.size () - 1;
+    HashMap ns = (HashMap) stack.get (index);
+    if (ns == null)
+    {
+      ns = new HashMap ();
+      stack.set (index, ns);
+    }
+    ns.put (prefix, uri);
+  }
+
+  /**
+   * Returns an iterator over the prefixes defined at the current depth.
+   */
+  Iterator currentPrefixes ()
+  {
+    HashMap ns = (HashMap) stack.get (stack.size () - 1);
+    if (ns == null)
+      {
+        return Collections.EMPTY_LIST.iterator ();
+      }
+    else
+      {
+        return ns.keySet ().iterator ();
+      }
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/StringArrayAttributes.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/StringArrayAttributes.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/StringArrayAttributes.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/StringArrayAttributes.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,171 @@
+/* StringArrayAttributes.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.sax;
+
+import org.xml.sax.Attributes;
+
+/**
+ * An implementation of Attributes that reads values from an array of
+ * strings, supplied by libxml2.
+ * Each pair of elements in the array represents a key followed by a value.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class StringArrayAttributes
+implements Attributes
+{
+
+  private int len;
+  private XMLName[] keys;
+  private String[] values;
+
+  StringArrayAttributes (GnomeXMLReader parser, String[] pairs)
+  {
+    len = (pairs == null) ? 0 : pairs.length / 2;
+    keys = new XMLName[len];
+    values = new String[len];
+    for (int i = 0; i < len; i++)
+    {
+      int pairIndex = i * 2;
+      keys[i] = new XMLName (parser, pairs[pairIndex]);
+      values[i] = pairs[pairIndex + 1];
+    }
+  }
+
+  public int getLength ()
+  {
+    return len;
+  }
+
+  public String getURI (int index)
+  {
+    if (index < 0 || index >= len)
+      {
+        return null;
+      }
+    return keys[index].uri;
+  }
+
+  public String getLocalName (int index)
+  {
+    if (index < 0 || index >= len)
+      {
+        return null;
+      }
+    return keys[index].localName;
+  }
+
+  public String getQName (int index)
+  {
+    if (index < 0 || index >= len)
+      {
+        return null;
+      }
+    return keys[index].qName;
+  }
+
+  public String getType (int index)
+  {
+    if (index < 0 || index >= len)
+      {
+        return null;
+      }
+    // TODO can we get this information from libxml2?
+    return "CDATA";
+  }
+
+  public String getValue (int index)
+  {
+    if (index < 0 || index >= len)
+      {
+        return null;
+      }
+    return values[index];
+  }
+
+  public int getIndex (String uri, String localName)
+  {
+    for (int i = 0; i < len; i++)
+    {
+      XMLName key = keys[i];
+      if (key.localName.equals (localName))
+      {
+        if ((key.uri == null && uri == null) ||
+            (key.uri != null && key.uri.equals(uri)))
+          {
+            return i;
+          }
+      }
+    }
+    return -1;
+  }
+
+  public int getIndex (String qName)
+  {
+    for (int i = 0; i < len; i++)
+    {
+      if (keys[i].qName.equals (qName))
+        {
+          return i;
+        }
+    }
+    return -1;
+  }
+
+  public String getType (String uri, String localName)
+  {
+    return getType (getIndex (uri, localName));
+  }
+
+  public String getType (String qName)
+  {
+    return getType (getIndex (qName));
+  }
+
+  public String getValue (String uri, String localName)
+  {
+    return getValue (getIndex (uri, localName));
+  }
+
+  public String getValue (String qName)
+  {
+    return getValue (getIndex (qName));
+  }
+
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/XMLName.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/XMLName.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/XMLName.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/sax/XMLName.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,92 @@
+/* XMLName.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.sax;
+
+/**
+ * Structure containing the components of an XML element/attribute name.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class XMLName
+{
+
+  private static final String XML_URI = "http://www.w3.org/XML/1998/namespace";
+  
+  final String uri;
+  final String localName;
+  final String qName;
+  final String prefix;
+
+  XMLName (GnomeXMLReader parser, String qName)
+  {
+    this.qName = qName;
+    int ci = qName.lastIndexOf (':');
+    if (ci < 1)
+      {
+        localName = qName;
+        prefix = null;
+        uri = "";
+      }
+    else
+      {
+        localName = qName.substring (ci + 1);
+        prefix = qName.substring (0, ci);
+        if ("xml".equals (prefix))
+          {
+            if ("lang".equals (localName) || "space".equals (localName))
+              {
+                uri = XML_URI;
+              }
+            else
+              {
+                uri = parser.getURI (prefix);
+              }
+          }
+        else
+          {
+            uri = parser.getURI (prefix);
+          }
+      }
+  }
+
+  public String toString ()
+  {
+    return qName;
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/ErrorListenerErrorHandler.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/ErrorListenerErrorHandler.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/ErrorListenerErrorHandler.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/ErrorListenerErrorHandler.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,111 @@
+/* ErrorListenerErrorHandler.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.transform;
+
+import javax.xml.transform.ErrorListener;
+import javax.xml.transform.TransformerException;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+/**
+ * Provides a SAX ErrorHandler interface to an ErrorListener.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class ErrorListenerErrorHandler
+implements ErrorHandler
+{
+
+  private ErrorListener listener;
+
+  ErrorListenerErrorHandler (ErrorListener listener)
+  {
+    this.listener = listener;
+  }
+
+  public void warning (SAXParseException e)
+    throws SAXException
+  {
+    try
+      {
+        listener.warning (new TransformerException (e));
+      }
+    catch (TransformerException te)
+      {
+        throw getSAXException (te);
+      }
+  }
+  
+  public void error (SAXParseException e)
+    throws SAXException
+  {
+    try
+      {
+        listener.error (new TransformerException (e));
+      }
+    catch (TransformerException te)
+      {
+        throw getSAXException (te);
+      }
+  }
+  
+  public void fatalError (SAXParseException e)
+    throws SAXException
+  {
+    try
+      {
+        listener.fatalError (new TransformerException (e));
+      }
+    catch (TransformerException te)
+      {
+        throw getSAXException (te);
+      }
+  }
+
+  private SAXException getSAXException (TransformerException e)
+  {
+    Throwable cause = e.getCause ();
+    if (cause instanceof SAXException)
+      {
+        return (SAXException) cause;
+      }
+    return new SAXException (e);
+  }
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformer.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformer.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformer.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformer.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,572 @@
+/* GnomeTransformer.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.transform;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import java.net.URL;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.xml.transform.ErrorListener;
+import javax.xml.transform.Source;
+import javax.xml.transform.SourceLocator;
+import javax.xml.transform.Result;
+import javax.xml.transform.Templates;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.URIResolver;
+
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.w3c.dom.Node;
+
+import org.xml.sax.EntityResolver;
+import org.xml.sax.ErrorHandler;
+
+import gnu.xml.libxmlj.dom.GnomeDocument;
+import gnu.xml.libxmlj.sax.GnomeXMLReader;
+import gnu.xml.libxmlj.util.NamedInputStream;
+import gnu.xml.libxmlj.util.StandaloneLocator;
+import gnu.xml.libxmlj.util.XMLJ;
+
+/**
+ * An implementation of {@link javax.xml.transform.Transformer} which
+ * performs XSLT transformation using <code>libxslt</code>.
+ *
+ * @author Julian Scheid
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class GnomeTransformer
+  extends Transformer
+  implements Templates
+{
+
+  /**
+   * The parameters added by the user via {@link setParameter()}.
+   */
+  private Map parameters;
+
+  /**
+   * The output properties set by the user.
+   */
+  private Properties outputProperties;
+
+  /**
+   * The URI resolver to use during transformation.
+   */
+  private URIResolver resolver;
+
+  /**
+   * The error listener for transformation errors.
+   */
+  private ErrorListener errorListener;
+
+  /**
+   * Handle to the source stylesheet.
+   * This is a native pointer of type xsltStylesheetPtr.
+   */
+  private Object stylesheet;
+
+  /**
+   * Constructor.
+   * @param source the XSLT stylesheet document source
+   * @param resolver the resolver to use during transformation
+   * @param errorListener the error listener for transformation errors
+   */
+  GnomeTransformer (Source source,
+                    URIResolver resolver, 
+                    ErrorListener errorListener) 
+    throws TransformerConfigurationException
+  {
+    this.resolver = resolver;
+    this.errorListener = errorListener;
+    parameters = new HashMap ();
+    outputProperties = new Properties ();
+   
+    if (source == null)
+      {
+        stylesheet = newStylesheet ();
+      } 
+    else if (source instanceof StreamSource)
+      {
+        try
+          {
+            StreamSource ss = (StreamSource) source;
+            NamedInputStream in = XMLJ.getInputStream (ss);
+            String systemId = ss.getSystemId ();
+            String publicId = ss.getPublicId ();
+            String base = XMLJ.getBaseURI (systemId);
+            byte[] detectBuffer = in.getDetectBuffer ();
+            if (detectBuffer == null)
+              {
+                String msg = "No document element";
+                throw new TransformerConfigurationException (msg);
+              }
+            stylesheet = newStylesheetFromStream (in, detectBuffer, publicId,
+                                                  systemId, base,
+                                                  (resolver != null),
+                                                  (errorListener != null));
+          }
+        catch (IOException e)
+          {
+            throw new TransformerConfigurationException (e);
+          }
+      }
+    else if (source instanceof DOMSource)
+      {
+        DOMSource ds = (DOMSource) source;
+        Node node = ds.getNode ();
+        if (!(node instanceof GnomeDocument))
+          {
+            String msg = "Node is not a GnomeDocument";
+            throw new TransformerConfigurationException (msg);
+          }
+        GnomeDocument doc = (GnomeDocument) node;
+        stylesheet = newStylesheetFromDoc (doc);
+      }
+    else
+      {
+        String msg = "Source type not supported (" + source + ")";
+        throw new TransformerConfigurationException (msg);
+      }
+  }
+  
+  /**
+   * Copy constructor.
+   */
+  private GnomeTransformer (Object stylesheet,
+                            URIResolver resolver, 
+                            ErrorListener errorListener,
+                            Map parameters,
+                            Properties outputProperties)
+  {
+    this.stylesheet = stylesheet;
+    this.resolver = resolver;
+    this.errorListener = errorListener;
+    this.parameters = parameters;
+    this.outputProperties = outputProperties;
+  }
+
+  private native Object newStylesheet ()
+    throws TransformerConfigurationException;
+
+  private native Object newStylesheetFromStream (InputStream in,
+                                                 byte[] detectBuffer,
+                                                 String publicId,
+                                                 String systemId,
+                                                 String base,
+                                                 boolean entityResolver,
+                                                 boolean errorHandler)
+    throws TransformerConfigurationException;
+
+  private native Object newStylesheetFromDoc (GnomeDocument doc)
+    throws TransformerConfigurationException;
+
+  //--- Implementation of javax.xml.transform.Transformer follows.
+
+  // Set, get and clear the parameters to use on transformation
+
+  public synchronized void setParameter (String parameter, Object value)
+  {
+    parameters.put (parameter, value);
+  } 
+
+  public synchronized Object getParameter (String name)
+  {
+    return parameters.get (name);
+  }
+
+  public synchronized void clearParameters ()
+  {
+    parameters.clear ();
+  }
+
+  // Set and get the ErrorListener to use on transformation
+
+  public void setErrorListener (ErrorListener listener)
+  {
+    this.errorListener = listener;
+  } 
+
+  public ErrorListener getErrorListener ()
+  {
+    return errorListener;
+  }
+
+  // Set and get the URIResolver to use on transformation
+
+  public void setURIResolver (URIResolver resolver)
+  {
+    this.resolver = resolver;
+  } 
+
+  public URIResolver getURIResolver ()
+  {
+    return resolver;
+  }
+
+  // Set the output properties to use on transformation; get default
+  // output properties and output properties specified in the
+  // stylesheet or by the user.
+
+  public void setOutputProperties (Properties outputProperties)
+  {
+    // Note: defensive copying
+    this.outputProperties = new Properties (outputProperties);
+  } 
+
+  public void setOutputProperty (String name, String value)
+  {
+    outputProperties.setProperty (name, value);
+  } 
+
+  public Properties getOutputProperties ()
+  {
+    // Note: defensive copying
+    return new Properties (this.outputProperties);
+  }
+
+  public String getOutputProperty (String name)
+  {
+    return outputProperties.getProperty (name);
+  }
+
+  // -- Templates --
+
+  public Transformer newTransformer ()
+  {
+    return new GnomeTransformer (stylesheet, resolver, errorListener,
+                                 new HashMap (parameters),
+                                 new Properties (outputProperties));
+  }
+
+  // -- transform --
+
+  /**
+   * Transforms the given source and writes the result to the
+   * given target.
+   */
+  public void transform (Source source, Result result)
+    throws TransformerException
+  {
+    if (source instanceof StreamSource)
+      {
+        try
+          {
+            StreamSource ss = (StreamSource) source;
+            NamedInputStream in = XMLJ.getInputStream (ss);
+            String publicId = ss.getPublicId ();
+            String systemId = ss.getSystemId ();
+            String base = XMLJ.getBaseURI (systemId);
+            byte[] detectBuffer = in.getDetectBuffer ();
+            if (detectBuffer == null)
+              {
+                throw new TransformerException ("No document element");
+              }
+            if (result instanceof StreamResult)
+              {
+                OutputStream out = XMLJ.getOutputStream ((StreamResult) result);
+                transformStreamToStream (in, detectBuffer, publicId, systemId,
+                                         base, (resolver != null),
+                                         (errorListener != null), out);
+              }
+            else if (result instanceof DOMResult)
+              {
+                DOMResult dr = (DOMResult) result;
+                GnomeDocument ret =
+                  transformStreamToDoc (in, detectBuffer, publicId, systemId,
+                                        base, (resolver != null),
+                                        (errorListener != null));
+                dr.setNode (ret);
+                dr.setSystemId (null);
+              }
+            else if (result instanceof SAXResult)
+              {
+                SAXResult sr = (SAXResult) result;
+                transformStreamToSAX (in, detectBuffer, publicId, systemId,
+                                      base, (resolver != null),
+                                      (errorListener != null),
+                                      getSAXContext (sr));
+              }
+            else
+              {
+                String msg = "Result type not supported (" + result + ")";
+                throw new TransformerConfigurationException (msg);
+              }
+          }
+        catch (IOException e)
+          {
+            throw new TransformerException (e);
+          }
+      }
+    else if (source instanceof DOMSource)
+      {
+        DOMSource ds = (DOMSource) source;
+        Node node = ds.getNode ();
+        if (!(node instanceof GnomeDocument))
+          {
+            String msg = "Node is not a GnomeDocument (" + node + ")";
+            throw new TransformerException (msg);
+          }
+        GnomeDocument doc = (GnomeDocument) node;
+        if (result instanceof StreamResult)
+          {
+            try
+              {
+                OutputStream out = XMLJ.getOutputStream ((StreamResult) result);
+                transformDocToStream (doc, out);
+              }
+            catch (IOException e)
+              {
+                throw new TransformerException (e);
+              }
+          }
+        else if (result instanceof DOMResult)
+          {
+            DOMResult dr = (DOMResult) result;
+            GnomeDocument ret = transformDocToDoc (doc);
+            dr.setNode (ret);
+            dr.setSystemId (null);
+          }
+        else if (result instanceof SAXResult)
+          {
+            SAXResult sr = (SAXResult) result;
+            transformDocToSAX (doc, getSAXContext (sr));
+          }
+        else
+          {
+            String msg = "Result type not supported";
+            throw new TransformerConfigurationException (msg);
+          }
+      }
+    else
+      {
+        String msg = "Source type not supported";
+        throw new TransformerConfigurationException (msg);
+      }
+  }
+
+  private GnomeXMLReader getSAXContext (SAXResult result)
+  {
+    GnomeXMLReader ctx = new GnomeXMLReader ();
+    ctx.setContentHandler (result.getHandler ());
+    ctx.setLexicalHandler (result.getLexicalHandler ());
+    if (errorListener != null)
+      {
+        ErrorHandler errorHandler =
+          new ErrorListenerErrorHandler (errorListener);
+        ctx.setErrorHandler (errorHandler);
+      }
+    if (resolver != null)
+      {
+        EntityResolver entityResolver =
+          new URIResolverEntityResolver (resolver);
+        ctx.setEntityResolver (entityResolver);
+      }
+    return ctx;
+  }
+
+  private native void transformStreamToStream (InputStream in,
+                                               byte[] detectBuffer,
+                                               String publicId,
+                                               String systemId,
+                                               String base,
+                                               boolean entityResolver,
+                                               boolean errorHandler,
+                                               OutputStream out)
+    throws TransformerException;
+
+  private native GnomeDocument transformStreamToDoc (InputStream in,
+                                                     byte[] detectBuffer,
+                                                     String publicId,
+                                                     String systemId,
+                                                     String base,
+                                                     boolean entityResolver,
+                                                     boolean errorHandler)
+    throws TransformerException;
+
+  private native void transformStreamToSAX (InputStream in,
+                                            byte[] detectBuffer,
+                                            String publicId,
+                                            String systemId,
+                                            String base,
+                                            boolean entityResolver,
+                                            boolean errorHandler,
+                                            GnomeXMLReader out)
+    throws TransformerException;
+
+  private native void transformDocToStream (GnomeDocument in,
+                                            OutputStream out)
+    throws TransformerException;
+
+  private native GnomeDocument transformDocToDoc (GnomeDocument in)
+    throws TransformerException;
+
+  private native void transformDocToSAX (GnomeDocument in,
+                                         GnomeXMLReader out)
+    throws TransformerException;
+
+  /*
+   * Retrieve parameters as a string array.
+   * This is a convenience method called from native code.
+   */
+  private String[] getParameterArray ()
+  {
+    String[] parameterArray = new String[parameters.size () * 2];
+    int index = 0;
+    for (Iterator it = parameters.keySet ().iterator ();
+         it.hasNext ();
+         ++index)
+      {
+        String parameterKey = (String) it.next ();
+        String parameterValue = (String) parameters.get (parameterKey);
+        parameterArray[index * 2 + 0] = parameterKey;
+        parameterArray[index * 2 + 1] =
+          "'" + ((parameterValue != null) ? parameterValue : "") + "'";
+        // FIXME encode parameter value correctly for XPath
+      }
+    return parameterArray;
+  }
+
+  // -- Free xsltStylesheet handle --
+
+  public void finalize ()
+  {
+    if (stylesheet != null)
+      {
+        free ();
+        stylesheet = null;
+      }
+  }
+
+  private native void free ();
+
+  // -- Callbacks --
+
+  private InputStream resolveEntity (String publicId, String systemId)
+    throws TransformerException
+  {
+    if (resolver != null)
+      {
+        systemId = resolver.resolve (null, systemId).getSystemId ();
+      }
+    if (systemId == null)
+      {
+        return null;
+      }
+    try
+      {
+        URL url = new URL (systemId);
+        return XMLJ.getInputStream (url);
+      }
+    catch (IOException e)
+      {
+        throw new TransformerException (e);
+      }
+  }
+  
+  private void setDocumentLocator (Object ctx, Object loc)
+  {
+  }
+
+  private void warning (String message,
+                        int lineNumber,
+                        int columnNumber,
+                        String publicId,
+                        String systemId)
+    throws TransformerException
+  {
+    if (errorListener == null)
+      {
+        return;
+      }
+    SourceLocator l = new StandaloneLocator (lineNumber,
+                                             columnNumber,
+                                             publicId,
+                                             systemId);
+    errorListener.warning (new TransformerException (message, l));
+  }
+
+  private void error (String message,
+                      int lineNumber,
+                      int columnNumber,
+                      String publicId,
+                      String systemId)
+    throws TransformerException
+  {
+    if (errorListener == null)
+      {
+        return;
+      }
+    SourceLocator l = new StandaloneLocator (lineNumber,
+                                             columnNumber,
+                                             publicId,
+                                             systemId);
+    errorListener.error (new TransformerException (message, l));
+  }
+  
+  private void fatalError (String message,
+                           int lineNumber,
+                           int columnNumber,
+                           String publicId,
+                           String systemId)
+    throws TransformerException
+  {
+    if (errorListener == null)
+      {
+        return;
+      }
+    SourceLocator l = new StandaloneLocator (lineNumber,
+                                             columnNumber,
+                                             publicId,
+                                             systemId);
+    errorListener.fatalError (new TransformerException (message, l));
+  }
+  
+}

Propchange: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformer.java

------------------------------------------------------------------------------
    svn:executable = *

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformerFactory.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformerFactory.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformerFactory.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformerFactory.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,349 @@
+/* GnomeTransformerFactory.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.transform;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import javax.xml.transform.ErrorListener;
+import javax.xml.transform.Source;
+import javax.xml.transform.Templates;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.URIResolver;
+
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.sax.SAXSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.DefaultHandler;
+
+import gnu.xml.libxmlj.util.XMLJ;
+
+/**
+ *  An implementation of <code>TransformerFactory</code> producing
+ *  <code>Transformer</code> objects which use <code>libxslt</code>
+ *  for transformation.
+ *
+ *  @author Julian Scheid
+ *  @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class GnomeTransformerFactory
+  extends TransformerFactory
+{
+
+  static
+  {
+    XMLJ.init ();
+  }
+  
+  /**
+   *  URIResolver set by user, or default implementation.
+   */
+  private URIResolver uriResolver;
+
+  /**
+   *  ErrorListener set by user, or default implementation.
+   */
+  private ErrorListener errorListener;
+
+  /**
+   *  Attributes set by user.
+   */
+  private Map attributes = new HashMap ();
+
+  //--- Implementation of javax.xml.transform.TransformerFactory
+  //--- follows.
+  
+  // -- begin getAssociatedStylesheet implementation --
+
+  /**
+   * Returns the stylesheet associated with the specified XML source, or
+   * <code>null</code> if no associated stylesheet could be found.
+   */
+  public Source getAssociatedStylesheet(Source source, String media,
+                                        String title, String charset) 
+    throws TransformerConfigurationException
+  {
+    String href= null;
+    String base = source.getSystemId();
+    if (source instanceof DOMSource)
+      {
+        Node node = ((DOMSource) source).getNode();
+        Document doc = (node.getNodeType() == Node.DOCUMENT_NODE) ?
+          (Document) node : node.getOwnerDocument();
+        if (base == null)
+          {
+            base = doc.getDocumentURI();
+          }
+        for (node = doc.getFirstChild(); node != null;
+             node = node.getNextSibling())
+          {
+            if (node.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE &&
+                "xml-stylesheet".equals(node.getNodeName()))
+              {
+                String data = node.getNodeValue();
+                if (media != null &&
+                    !media.equals(parseParameter(data, "type")))
+                  {
+                    continue;
+                  }
+                if (title != null &&
+                    !title.equals(parseParameter(data, "title")))
+                  {
+                    continue;
+                  }
+                href = parseParameter(data, "href");
+              }
+          }
+      }
+    else
+      {
+        InputSource input;
+        XMLReader parser = null;
+        try
+          {
+            if (source instanceof SAXSource)
+              {
+                SAXSource sax = (SAXSource) source;
+                input = sax.getInputSource();
+                parser = sax.getXMLReader();
+              }
+            else
+              {
+                StreamSource stream = (StreamSource) source;
+                InputStream in = stream.getInputStream();
+                input = new InputSource(in);
+              }
+            input.setSystemId(base);
+            if (parser == null)
+              {
+                parser = createXMLReader();
+              }
+            AssociatedStylesheetHandler ash =
+              new AssociatedStylesheetHandler();
+            ash.media = media;
+            ash.title = title;
+            parser.setContentHandler(ash);
+            parser.parse(input);
+            href = ash.href;
+          }
+        catch (SAXException e)
+          {
+            throw new TransformerConfigurationException(e);
+          }
+        catch (IOException e)
+          {
+            throw new TransformerConfigurationException(e);
+          }
+      }
+    if (href == null)
+      {
+        return null;
+      }
+    if (base != null)
+      {
+        base = XMLJ.getBaseURI(base);
+      }
+    href = XMLJ.getAbsoluteURI(base, href);
+    return new StreamSource(href);
+  }
+
+  private XMLReader createXMLReader()
+    throws TransformerConfigurationException
+  {
+    try
+      {
+        SAXParserFactory factory = SAXParserFactory.newInstance();
+        SAXParser parser = factory.newSAXParser();
+        return parser.getXMLReader();
+      }
+    catch (FactoryConfigurationError e)
+      {
+        throw new TransformerConfigurationException(e);
+      }
+    catch (ParserConfigurationException e)
+      {
+        throw new TransformerConfigurationException(e);
+      }
+    catch (SAXException e)
+      {
+        throw new TransformerConfigurationException(e);
+      }
+  }
+
+  class AssociatedStylesheetHandler
+    extends DefaultHandler
+  {
+    
+    String media;
+    String title;
+    String href;
+
+    public void processingInstruction(String target, String data)
+      throws SAXException
+    {
+      if ("xml-stylesheet".equals(target))
+        {
+          if (media != null && !media.equals(parseParameter(data, "type")))
+            {
+              return;
+            }
+          if (title != null && !title.equals(parseParameter(data, "title")))
+            {
+              return;
+            }
+          href = parseParameter(data, "href");
+        }
+    }
+    
+  }
+
+  String parseParameter(String data, String name)
+  {
+    int start = data.indexOf(name + "=");
+    if (start != -1)
+      {
+        start += name.length() + 2;
+        char delim = data.charAt(start - 1);
+        int end = data.indexOf(delim, start);
+        if (end != -1)
+          {
+            return data.substring(start, end);
+          }
+      }
+    return null;
+  }
+
+  // -- end getAssociatedStylesheet implementation --
+
+  public synchronized void setAttribute (String name, Object value)
+  {
+    this.attributes.put (name, value);
+  } 
+
+  public synchronized Object getAttribute (String name)
+  {
+    return attributes.get (name);
+  }
+  
+  public void setErrorListener (ErrorListener errorListener)
+  {
+    this.errorListener = errorListener;
+  } 
+
+  public ErrorListener getErrorListener ()
+  {
+    return errorListener;
+  }
+  
+  public void setURIResolver (URIResolver uriResolver)
+  {
+    this.uriResolver = uriResolver;
+  } 
+
+  public URIResolver getURIResolver ()
+  {
+    return uriResolver;
+  }
+  
+  public boolean getFeature (String name)
+  {
+    return (StreamSource.FEATURE.equals (name) ||
+            StreamResult.FEATURE.equals (name) ||
+            DOMSource.FEATURE.equals (name) ||
+            DOMResult.FEATURE.equals (name));
+  }
+
+  public void setFeature(String name, boolean value)
+    throws TransformerConfigurationException
+  {
+    throw new TransformerConfigurationException(name);
+  }
+
+  /**
+   *  Returns a new instance of class {@link Transformer} for a
+   *  null souce.
+   */
+  public Transformer newTransformer ()
+    throws TransformerConfigurationException
+  {
+    return newTransformer (null);
+  }
+
+  /**
+   *  Returns a new instance of class {@link Transformer} for
+   *  the given souce.
+   */
+  public Transformer newTransformer (Source source)
+    throws TransformerConfigurationException
+  {
+    return new GnomeTransformer (source, uriResolver, errorListener);
+  }
+
+  /**
+   *  Returns a new instance of class {@link Templates} for
+   *  the given souce.
+   */
+  public Templates newTemplates (Source source) 
+    throws TransformerConfigurationException
+  {
+    return new GnomeTransformer (source, uriResolver, errorListener);
+  }
+
+  /**
+   *  Perform native cleanup.
+   */
+  public static native void freeLibxsltGlobal ();
+
+}

Propchange: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/GnomeTransformerFactory.java

------------------------------------------------------------------------------
    svn:executable = *

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/URIResolverEntityResolver.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/URIResolverEntityResolver.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/URIResolverEntityResolver.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/URIResolverEntityResolver.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,87 @@
+/* URIResolverEntityResolver.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.transform;
+
+import java.io.IOException;
+import javax.xml.transform.URIResolver;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.sax.SAXSource;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+/**
+ * Provides an EntityResolver interface to a URIResolver.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class URIResolverEntityResolver
+implements EntityResolver
+{
+
+  private URIResolver resolver;
+
+  URIResolverEntityResolver (URIResolver resolver)
+  {
+    this.resolver = resolver;
+  }
+
+  public InputSource resolveEntity (String publicId, String systemId)
+    throws SAXException, IOException
+  {
+    try
+      {
+        return SAXSource.sourceToInputSource (resolver.resolve (systemId,
+                                                                null));
+      }
+    catch (TransformerException e)
+      {
+        Throwable cause = e.getCause ();
+        if (cause instanceof SAXException)
+          {
+            throw (SAXException) cause;
+          }
+        else if (cause instanceof IOException)
+          {
+            throw (IOException) cause;
+          }
+        throw new SAXException (e);
+      }
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/package.html
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/package.html?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/package.html (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/package.html Thu Nov  8 16:56:19 2007
@@ -0,0 +1,14 @@
+<body>
+<p>
+  A JAXP-compliant wrapper for the XSLT C library for Gnome, also
+  known as libxslt. Allows to use libxslt via the Java API for XML
+  processing.
+</p>
+
+<p>
+  <b>Usage:</b>
+    <li>Set the system property <code>javax.xml.transform.TransformerFactory</code>
+        to <code>gnu.xml.libxmlj.GnomeTransformerFactory</code>.</li>
+  </ul>
+</p>
+</body>

Propchange: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/transform/package.html

------------------------------------------------------------------------------
    svn:executable = *

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/EmptyNodeList.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/EmptyNodeList.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/EmptyNodeList.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/EmptyNodeList.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,62 @@
+/* EmptyNodeList.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.util;
+
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * An empty node list.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class EmptyNodeList
+implements NodeList
+{
+
+  public Node item (int index)
+  {
+    return null;
+  }
+
+  public int getLength ()
+  {
+    return 0;
+  }
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/NamedInputStream.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/NamedInputStream.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/NamedInputStream.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/NamedInputStream.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,99 @@
+/* NamedInputStream.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.util;
+
+import java.io.FilterInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.PushbackInputStream;
+
+/**
+ * An input stream associated with an XML system ID.
+ * It can report the system ID and the first few bytes of the stream
+ * in order to detect the character encoding of the stream.
+ *
+ * @author <a href='dog at gnu.org'>Chris Burdess</a>
+ */
+public class NamedInputStream
+extends FilterInputStream
+{
+
+  private static int DETECT_BUFFER_SIZE = 50;
+  
+  private String name;
+
+  NamedInputStream (String name, InputStream in, int size)
+  {
+    super (new PushbackInputStream (in, size));
+    this.name = name;
+  }
+
+  /**
+   * Returns the name of the stream (the XML system ID).
+   */
+  public String getName ()
+  {
+    return name;
+  }
+
+  /**
+   * Returns the first few bytes of the stream for character encoding
+   * purposes. The entire stream can thereafter be read normally from the
+   * beginning. This method is only valid if no bytes have yet been read
+   * from the stream.
+   */
+  public byte[] getDetectBuffer ()
+    throws IOException
+  {
+    PushbackInputStream p = (PushbackInputStream) in;
+    byte[] buffer = new byte[DETECT_BUFFER_SIZE];
+    int len = p.read (buffer);
+    if (len < 0)
+      {
+        return null;
+      }
+    else
+      {
+        p.unread (buffer, 0, len);
+        byte[] ret = new byte[len];
+        System.arraycopy (buffer, 0, ret, 0, len);
+        return ret;
+      }
+  }
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/StandaloneDocumentType.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/StandaloneDocumentType.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/StandaloneDocumentType.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/StandaloneDocumentType.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,294 @@
+/* StandaloneDocumentType.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.util;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentType;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.UserDataHandler;
+
+/**
+ * A "standalone" document type, i.e. one that isn't attached to a document
+ * node.
+ * This can be used to create new documents.
+ */
+public final class StandaloneDocumentType
+implements DocumentType
+{
+
+  private final String name;
+  private final String publicId;
+  private final String systemId;
+
+  public StandaloneDocumentType (String name, String publicId, String systemId)
+  {
+    this.name = name;
+    this.publicId = publicId;
+    this.systemId = systemId;
+  }
+
+  public String getName ()
+  {
+    return name;
+  }
+
+  public NamedNodeMap getEntities ()
+  {
+    // TODO
+    return null;
+  }
+  
+  public NamedNodeMap getNotations ()
+  {
+    // TODO
+    return null;
+  }
+
+  public String getPublicId ()
+  {
+    return publicId;
+  }
+
+  public String getSystemId ()
+  {
+    return systemId;
+  }
+
+  public String getInternalSubset ()
+  {
+    return null;
+  }
+  
+  // -- Node --
+
+  public String getNodeName ()
+  {
+    return getName ();
+  }
+
+  public String getNodeValue ()
+    throws DOMException
+  {
+    return null;
+  }
+  
+  public void setNodeValue (String nodeValue)
+    throws DOMException
+  {
+  }
+
+  public short getNodeType ()
+  {
+    return DOCUMENT_TYPE_NODE;
+  }
+
+  public Node getParentNode ()
+  {
+    return null;
+  }
+
+  public NodeList getChildNodes ()
+  {
+    return new EmptyNodeList ();
+  }
+
+  public Node getFirstChild ()
+  {
+    return null;
+  }
+
+  public Node getLastChild ()
+  {
+    return null;
+  }
+
+  public Node getPreviousSibling ()
+  {
+    return null;
+  }
+
+  public Node getNextSibling ()
+  {
+    return null;
+  }
+
+  public NamedNodeMap getAttributes ()
+  {
+    return null;
+  }
+
+  public Document getOwnerDocument ()
+  {
+    return null;
+  }
+
+  public Node insertBefore (Node newChild, Node refChild)
+    throws DOMException
+  {
+    throw new DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
+  }
+
+  public Node replaceChild (Node newChild, Node oldChild)
+    throws DOMException
+  {
+    throw new DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
+  }
+
+  public Node removeChild (Node oldChild)
+    throws DOMException
+  {
+    throw new DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
+  }
+
+  public Node appendChild (Node oldChild)
+    throws DOMException
+  {
+    throw new DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
+  }
+
+  public boolean hasChildNodes ()
+  {
+    return false;
+  }
+
+  public Node cloneNode (boolean deep)
+  {
+    return new StandaloneDocumentType (name, publicId, systemId);
+  }
+
+  public void normalize ()
+  {
+  }
+
+  public boolean isSupported (String feature, String version)
+  {
+    return false;
+  }
+
+  public String getNamespaceURI ()
+  {
+    return null;
+  }
+
+  public String getPrefix ()
+  {
+    return null;
+  }
+
+  public void setPrefix (String prefix)
+  {
+    throw new DOMException (DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
+  }
+
+  public String getLocalName ()
+  {
+    return getName ();
+  }
+
+  public boolean hasAttributes ()
+  {
+    return false;
+  }
+
+  // DOM Level 3
+
+  public String getBaseURI ()
+  {
+    return null;
+  }
+
+  public short compareDocumentPosition (Node node)
+  {
+    return -1;
+  }
+
+  public String getTextContent ()
+  {
+    return null;
+  }
+
+  public void setTextContent (String content)
+  {
+    throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, null);
+  }
+
+  public boolean isSameNode (Node other)
+  {
+    return equals (other);
+  }
+  
+  public String lookupPrefix (String namespace)
+  {
+    return null;
+  }
+  
+  public boolean isDefaultNamespace (String namespace)
+  {
+    return false;
+  }
+
+  public String lookupNamespaceURI (String prefix)
+  {
+    return null;
+  }
+
+  public boolean isEqualNode (Node other)
+  {
+    return equals (other);
+  }
+
+  public Object getFeature (String feature, String version)
+  {
+    return null;
+  }
+
+  public Object setUserData (String name, Object value,
+                             UserDataHandler handler)
+  {
+    return null;
+  }
+
+  public Object getUserData (String name)
+  {
+    return null;
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/StandaloneLocator.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/StandaloneLocator.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/StandaloneLocator.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/StandaloneLocator.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,89 @@
+/* StandaloneLocator.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.util;
+
+import javax.xml.transform.SourceLocator;
+import org.xml.sax.Locator;
+
+/**
+ * SAX Locator implementation that uses the specified values.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public final class StandaloneLocator
+implements Locator, SourceLocator
+{
+
+  private final int lineNumber;
+
+  private final int columnNumber;
+
+  private final String publicId;
+
+  private final String systemId;
+
+  public StandaloneLocator (int lineNumber, int columnNumber,
+                            String publicId, String systemId)
+  {
+    this.lineNumber = lineNumber;
+    this.columnNumber = columnNumber;
+    this.publicId = publicId;
+    this.systemId = systemId;
+  }
+  
+  public String getPublicId ()
+  {
+    return publicId;
+  }
+  
+  public String getSystemId ()
+  {
+    return systemId;
+  }
+
+  public int getLineNumber ()
+  {
+    return lineNumber;
+  }
+
+  public int getColumnNumber ()
+  {
+    return columnNumber;
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/XMLJ.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/XMLJ.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/XMLJ.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/libxmlj/util/XMLJ.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,280 @@
+/* XMLJ.java - 
+   Copyright (C) 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.libxmlj.util;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.sax.SAXSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.xml.sax.InputSource;
+
+import gnu.xml.libxmlj.transform.GnomeTransformerFactory;
+
+import gnu.xml.dom.ls.ReaderInputStream;
+import gnu.xml.dom.ls.WriterOutputStream;
+
+/**
+ * Utility functions for libxmlj.
+ */
+public final class XMLJ
+{
+
+  static class XMLJShutdownHook
+    implements Runnable
+  {
+    
+    public void run ()
+    {
+      // Make sure finalizers are run
+      System.gc ();
+      Runtime.getRuntime ().runFinalization ();
+      
+      // Perform global cleanup on the native level
+      GnomeTransformerFactory.freeLibxsltGlobal ();
+    }
+  
+  }
+
+  private static boolean initialised = false;
+  
+  public static void init ()
+  {
+    if (!initialised)
+      {
+        System.loadLibrary ("xmlj");
+        
+        XMLJShutdownHook hook = new XMLJShutdownHook ();  
+        Runtime.getRuntime ().addShutdownHook (new Thread (hook));
+      }
+    initialised = true;
+  }
+
+  private static final int LOOKAHEAD = 50;
+  
+  /**
+   * Returns an input stream for the specified input source.
+   * This returns a pushback stream that libxmlj can use to detect the
+   * character encoding of the stream.
+   */
+  public static NamedInputStream getInputStream (InputSource input)
+    throws IOException
+  {
+    InputStream in = input.getByteStream ();
+    String systemId = input.getSystemId ();
+    if (in == null)
+      {
+       Reader r = input.getCharacterStream();
+       if (r != null)
+         in = new ReaderInputStream(r);
+      }
+    if (in == null)
+      {
+        in = getInputStream(systemId);
+      }
+    return new NamedInputStream (systemId, in, LOOKAHEAD);
+  }
+
+  /**
+   * Returns an input stream for the specified transformer source.
+   * This returns a pushback stream that libxmlj can use to detect the
+   * character encoding of the stream.
+   */
+  public static NamedInputStream getInputStream (Source source)
+    throws IOException
+  {
+    if (source instanceof SAXSource)
+      {
+        return getInputStream (((SAXSource) source).getInputSource ());
+      }
+    InputStream in = null;
+    String systemId = source.getSystemId ();
+    if (source instanceof StreamSource)
+      {
+        in = ((StreamSource) source).getInputStream ();
+      }
+    if (in == null)
+      {
+        in = getInputStream(systemId);
+      }
+    return new NamedInputStream (systemId, in, LOOKAHEAD);
+  }
+
+  private static InputStream getInputStream(String systemId)
+    throws IOException
+  {
+    if (systemId == null)
+      {
+        throw new IOException("no system ID");
+      }
+    try
+      {
+        return new URL(systemId).openStream();
+      }
+    catch (MalformedURLException e)
+      {
+        return new FileInputStream(systemId);
+      }
+  }
+
+  /**
+   * Returns an input stream for the specified URL.
+   * This returns a pushback stream that libxmlj can use to detect the
+   * character encoding of the stream.
+   */
+  public static NamedInputStream getInputStream (URL url)
+    throws IOException
+  {
+    return new NamedInputStream (url.toString (), url.openStream(),
+                                 LOOKAHEAD);
+  }
+
+  /**
+   * Convenience method for xmljDocLoader
+   */
+  static NamedInputStream xmljGetInputStream(String base, String url)
+    throws IOException
+  {
+    try
+      {
+        if (base != null)
+          {
+            url = new URL(new URL(base), url).toString();
+          }
+      }
+    catch (MalformedURLException e)
+      {
+      }
+    InputStream in = getInputStream(url);
+    return new NamedInputStream(url, in, LOOKAHEAD);
+  }
+
+  /**
+   * Returns an output stream for the specified transformer result.
+   */
+  public static OutputStream getOutputStream (Result result)
+    throws IOException
+  {
+    OutputStream out = null;
+    if (result instanceof StreamResult)
+      {
+        out = ((StreamResult) result).getOutputStream ();
+      }
+    if (out == null)
+      {
+       Writer w = ((StreamResult) result).getWriter ();
+       if (w != null)
+         out = new WriterOutputStream (w);
+      }
+    if (out == null)
+      {
+        String systemId = result.getSystemId ();
+        if (systemId == null)
+          {
+            throw new IOException ("no system ID");
+          }
+        try
+          {
+            URL url = new URL (systemId);
+            URLConnection connection = url.openConnection ();
+            connection.setDoOutput (true);
+            out = connection.getOutputStream ();
+          }
+        catch (MalformedURLException e)
+          {
+            out = new FileOutputStream (systemId);
+          }
+      }
+
+    return out;
+  }
+
+  /**
+   * Returns the absolute form of the specified URI.
+   * If the URI is already absolute, returns it as-is.
+   * Otherwise returns a new URI relative to the given base URI.
+   */
+  public static String getAbsoluteURI (String base, String uri)
+  {
+    if (uri != null &&
+        base != null &&
+        (uri.length() > 0) &&
+        (uri.indexOf(':') == -1) &&
+        (uri.charAt(0) != '/'))
+      {
+        // URI is relative
+        if (base.charAt(base.length() - 1) != '/')
+          {
+            int i = base.lastIndexOf('/');
+            base = base.substring(0, i + 1);
+          }
+        return base + uri;
+      }
+    else
+      {
+        // URI is absolute or no base specified
+        return uri;
+      }
+  }
+
+  public static String getBaseURI(String uri)
+  {
+    if (uri != null)
+      {
+        int si = uri.lastIndexOf('/');
+        if (si != -1)
+          {
+            uri = uri.substring(0, si + 1);
+          }
+      }
+    return uri;
+  }
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/CallFilter.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/CallFilter.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/CallFilter.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/CallFilter.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,257 @@
+/* CallFilter.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.pipeline;
+
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.net.URL;
+import java.net.URLConnection;
+import java.io.Writer;
+
+import org.xml.sax.DTDHandler;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+import gnu.xml.util.Resolver;
+import gnu.xml.util.XMLWriter;
+
+
+/**
+ * Input is sent as an XML request to given URI, and the output of this
+ * filter is the parsed response to that request.
+ * A connection is opened to the remote URI when the startDocument call is
+ * issued through this filter, and the request is finished when the
+ * endDocument call is issued.  Events should be written quickly enough to
+ * prevent the remote HTTP server from aborting the connection due to
+ * inactivity; you may want to buffer text in an earlier pipeline stage.
+ * If your application requires validity checking of such
+ * outputs, have the output pipeline include a validation stage.
+ *
+ * <p>In effect, this makes a remote procedure call to the URI, with the
+ * request and response document syntax as chosen by the application.
+ * <em>Note that all the input events must be seen, and sent to the URI,
+ * before the first output event can be seen. </em>  Clients are delayed
+ * at least by waiting for the server to respond, constraining concurrency.
+ * Services can thus be used to synchronize concurrent activities, and
+ * even to prioritize service among different clients.
+ *
+ * <p> You are advised to avoid restricting yourself to an "RPC" model
+ * for distributed computation.  With a World Wide Web, network latencies
+ * and failures (e.g. non-availability)
+ * are significant; adopting a "procedure" model, rather than a workflow
+ * model where bulk requests are sent and worked on asynchronously, is not
+ * generally an optimal system-wide architecture.  When the messages may
+ * need authentication, such as with an OpenPGP signature, or when server
+ * loads don't argue in favor of immediate responses, non-RPC models can
+ * be advantageous.  (So-called "peer to peer" computing models are one
+ * additional type of model, though too often that term is applied to
+ * systems that still have a centralized control structure.)
+ *
+ * <p> <em>Be strict in what you send, liberal in what you accept,</em> as
+ * the Internet tradition goes.  Strictly conformant data should never cause
+ * problems to its receiver; make your request pipeline be very strict, and
+ * don't compromise on that.  Make your response pipeline strict as well,
+ * but be ready to tolerate specific mild, temporary, and well-documented
+ * variations from specific communications peers.
+ *
+ * @see XmlServlet
+ *
+ * @author David Brownell
+ */
+final public class CallFilter implements EventConsumer
+{
+    private Requestor			req;
+    private EventConsumer		next;
+    private URL				target;
+    private URLConnection		conn;
+    private ErrorHandler		errHandler;
+
+
+    /**
+     * Initializes a call filter so that its inputs are sent to the
+     * specified URI, and its outputs are sent to the next consumer
+     * provided.
+     *
+     * @exception IOException if the URI isn't accepted as a URL
+     */
+	// constructor used by PipelineFactory
+    public CallFilter (String uri, EventConsumer next)
+    throws IOException
+    {
+	this.next = next;
+	req = new Requestor ();
+	setCallTarget (uri);
+    }
+
+    /**
+     * Assigns the URI of the call target to be used.
+     * Does not affect calls currently being made.
+     */
+    final public void setCallTarget (String uri)
+    throws IOException
+    {
+	target = new URL (uri);
+    }
+
+    /**
+     * Assigns the error handler to be used to present most fatal
+     * errors.
+     */
+    public void setErrorHandler (ErrorHandler handler)
+    {
+	req.setErrorHandler (handler);
+    }
+
+
+    /**
+     * Returns the call target's URI.
+     */
+    final public String getCallTarget ()
+    {
+	return target.toString ();
+    }
+
+    /** Returns the content handler currently in use. */
+    final public org.xml.sax.ContentHandler getContentHandler ()
+    {
+	return req;
+    }
+
+    /** Returns the DTD handler currently in use. */
+    final public DTDHandler getDTDHandler ()
+    {
+	return req;
+    }
+
+
+    /**
+     * Returns the declaration or lexical handler currently in
+     * use, or throws an exception for other properties.
+     */
+    final public Object getProperty (String id)
+    throws SAXNotRecognizedException
+    {
+	if (EventFilter.DECL_HANDLER.equals (id))
+	    return req;
+	if (EventFilter.LEXICAL_HANDLER.equals (id))
+	    return req;
+	throw new SAXNotRecognizedException (id);
+    }
+
+
+    // JDK 1.1 seems to need it to be done this way, sigh
+    ErrorHandler getErrorHandler () { return errHandler; }
+
+    //
+    // Takes input and echoes to server as POST input.
+    // Then sends the POST reply to the next pipeline element.
+    //
+    final class Requestor extends XMLWriter
+    {
+	Requestor ()
+	{
+	    super ((Writer)null);
+	}
+
+	public synchronized void startDocument () throws SAXException
+	{
+	    // Connect to remote object and set up to send it XML text
+	    try {
+		if (conn != null)
+		    throw new IllegalStateException ("call is being made");
+
+		conn = target.openConnection ();
+		conn.setDoOutput (true);
+		conn.setRequestProperty ("Content-Type",
+			    "application/xml;charset=UTF-8");
+
+		setWriter (new OutputStreamWriter (
+			conn.getOutputStream (),
+			"UTF8"), "UTF-8");
+
+	    } catch (IOException e) {
+		fatal ("can't write (POST) to URI: " + target, e);
+	    }
+
+	    // NOW base class can safely write that text!
+	    super.startDocument ();
+	}
+
+	public void endDocument () throws SAXException
+	{
+	    //
+	    // Finish writing the request (for HTTP, a POST);
+	    // this closes the output stream.
+	    //
+	    super.endDocument ();
+
+	    //
+	    // Receive the response.
+	    // Produce events for the next stage.
+	    //
+	    InputSource	source;
+	    XMLReader	producer;
+	    String	encoding;
+
+	    try {
+
+		source = new InputSource (conn.getInputStream ());
+
+// FIXME if status is anything but success, report it!!  It'd be good to
+// save the request data just in case we need to deal with a forward.
+
+		encoding = Resolver.getEncoding (conn.getContentType ());
+		if (encoding != null)
+		    source.setEncoding (encoding);
+
+		producer = XMLReaderFactory.createXMLReader ();
+		producer.setErrorHandler (getErrorHandler ());
+		EventFilter.bind (producer, next);
+		producer.parse (source);
+		conn = null;
+
+	    } catch (IOException e) {
+		fatal ("I/O Exception reading response, " + e.getMessage (), e);
+	    }
+	}
+    }
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/DomConsumer.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/DomConsumer.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/DomConsumer.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/DomConsumer.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,967 @@
+/* DomConsumer.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.pipeline;
+
+import gnu.xml.util.DomParser;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.DTDHandler;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.ext.DeclHandler;
+import org.xml.sax.ext.LexicalHandler;
+import org.xml.sax.helpers.AttributesImpl;
+import org.w3c.dom.Attr;
+import org.w3c.dom.CDATASection;
+import org.w3c.dom.CharacterData;
+import org.w3c.dom.Document;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Element;
+import org.w3c.dom.EntityReference;
+import org.w3c.dom.Node;
+import org.w3c.dom.ProcessingInstruction;
+import org.w3c.dom.Text;
+
+/**
+ * This consumer builds a DOM Document from its input, acting either as a
+ * pipeline terminus or as an intermediate buffer.  When a document's worth
+ * of events has been delivered to this consumer, that document is read with
+ * a {@link DomParser} and sent to the next consumer.  It is also available
+ * as a read-once property.
+ *
+ * <p>The DOM tree is constructed as faithfully as possible.  There are some
+ * complications since a DOM should expose behaviors that can't be implemented
+ * without API backdoors into that DOM, and because some SAX parsers don't
+ * report all the information that DOM permits to be exposed.  The general
+ * problem areas involve information from the Document Type Declaration (DTD).
+ * DOM only represents a limited subset, but has some behaviors that depend
+ * on much deeper knowledge of a document's DTD.  You shouldn't have much to
+ * worry about unless you change handling of "noise" nodes from its default
+ * setting (which ignores them all); note if you use JAXP to populate your
+ * DOM trees, it wants to save "noise" nodes by default.  (Such nodes include
+ * ignorable whitespace, comments, entity references and CDATA boundaries.)
+ * Otherwise, your
+ * main worry will be if you use a SAX parser that doesn't flag ignorable
+ * whitespace unless it's validating (few don't).
+ *
+ * <p> The SAX2 events used as input must contain XML Names for elements
+ * and attributes, with original prefixes.  In SAX2,
+ * this is optional unless the "namespace-prefixes" parser feature is set.
+ * Moreover, many application components won't provide completely correct
+ * structures anyway.  <em>Before you convert a DOM to an output document,
+ * you should plan to postprocess it to create or repair such namespace
+ * information.</em> The {@link NSFilter} pipeline stage does such work.
+ *
+ * <p> <em>Note:  changes late in DOM L2 process made it impractical to
+ * attempt to create the DocumentType node in any implementation-neutral way,
+ * much less to populate it (L1 didn't support even creating such nodes).
+ * To create and populate such a node, subclass the inner
+ * {@link DomConsumer.Handler} class and teach it about the backdoors into
+ * whatever DOM implementation you want.  It's possible that some revised
+ * DOM API (L3?) will make this problem solvable again. </em>
+ *
+ * @see DomParser
+ *
+ * @author David Brownell
+ */
+public class DomConsumer implements EventConsumer
+{
+    private Class		domImpl;
+
+    private boolean		hidingCDATA = true;
+    private boolean		hidingComments = true;
+    private boolean		hidingWhitespace = true;
+    private boolean		hidingReferences = true;
+
+    private Handler		handler;
+    private ErrorHandler	errHandler;
+
+    private EventConsumer	next;
+
+    // FIXME:  this can't be a generic pipeline stage just now,
+    // since its input became a Class not a String (to be turned
+    // into a class, using the right class loader)
+
+
+    /**
+     * Configures this pipeline terminus to use the specified implementation
+     * of DOM when constructing its result value.
+     *
+     * @param impl class implementing {@link org.w3c.dom.Document Document}
+     *	which publicly exposes a default constructor
+     *
+     * @exception SAXException when there is a problem creating an
+     *	empty DOM document using the specified implementation
+     */
+    public DomConsumer (Class impl)
+    throws SAXException
+    {
+	domImpl = impl;
+	handler = new Handler (this);
+    }
+
+    /**
+     * This is the hook through which a subclass provides a handler
+     * which knows how to access DOM extensions, specific to some
+     * implementation, to record additional data in a DOM.
+     * Treat this as part of construction; don't call it except
+     * before (or between) parses.
+     */
+    protected void setHandler (Handler h)
+    {
+	handler = h;
+    }
+
+
+    private Document emptyDocument ()
+    throws SAXException
+    {
+	try {
+	    return (Document) domImpl.newInstance ();
+	} catch (IllegalAccessException e) {
+	    throw new SAXException ("can't access constructor: "
+		    + e.getMessage ());
+	} catch (InstantiationException e) {
+	    throw new SAXException ("can't instantiate Document: "
+		    + e.getMessage ());
+	}
+    }
+
+
+    /**
+     * Configures this consumer as a buffer/filter, using the specified
+     * DOM implementation when constructing its result value.
+     *
+     * <p> This event consumer acts as a buffer and filter, in that it
+     * builds a DOM tree and then writes it out when <em>endDocument</em>
+     * is invoked.  Because of the limitations of DOM, much information
+     * will as a rule not be seen in that replay.  To get a full fidelity
+     * copy of the input event stream, use a {@link TeeConsumer}.
+     *
+     * @param impl class implementing {@link org.w3c.dom.Document Document}
+     *	which publicly exposes a default constructor
+     * @param next receives a "replayed" sequence of parse events when
+     *	the <em>endDocument</em> method is invoked.
+     *
+     * @exception SAXException when there is a problem creating an
+     *	empty DOM document using the specified DOM implementation
+     */
+    public DomConsumer (Class impl, EventConsumer n)
+    throws SAXException
+    {
+	this (impl);
+	next = n;
+    }
+
+
+    /**
+     * Returns the document constructed from the preceding
+     * sequence of events.  This method should not be
+     * used again until another sequence of events has been
+     * given to this EventConsumer.  
+     */
+    final public Document getDocument ()
+    {
+	return handler.clearDocument ();
+    }
+
+    public void setErrorHandler (ErrorHandler handler)
+    {
+	errHandler = handler;
+    }
+
+
+    /**
+     * Returns true if the consumer is hiding entity references nodes
+     * (the default), and false if EntityReference nodes should
+     * instead be created.  Such EntityReference nodes will normally be
+     * empty, unless an implementation arranges to populate them and then
+     * turn them back into readonly objects.
+     *
+     * @see #setHidingReferences
+     */
+    final public boolean	isHidingReferences ()
+	{ return hidingReferences; }
+
+    /**
+     * Controls whether the consumer will hide entity expansions,
+     * or will instead mark them with entity reference nodes.
+     *
+     * @see #isHidingReferences
+     * @param flag False if entity reference nodes will appear
+     */
+    final public void		setHidingReferences (boolean flag)
+	{ hidingReferences = flag; }
+    
+
+    /**
+     * Returns true if the consumer is hiding comments (the default),
+     * and false if they should be placed into the output document.
+     *
+     * @see #setHidingComments
+     */
+    public final boolean isHidingComments ()
+	{ return hidingComments; }
+
+    /**
+     * Controls whether the consumer is hiding comments.
+     *
+     * @see #isHidingComments
+     */
+    public final void setHidingComments (boolean flag)
+	{ hidingComments = flag; }
+
+
+    /**
+     * Returns true if the consumer is hiding ignorable whitespace
+     * (the default), and false if such whitespace should be placed
+     * into the output document as children of element nodes.
+     *
+     * @see #setHidingWhitespace
+     */
+    public final boolean isHidingWhitespace ()
+	{ return hidingWhitespace; }
+
+    /**
+     * Controls whether the consumer hides ignorable whitespace
+     *
+     * @see #isHidingComments
+     */
+    public final void setHidingWhitespace (boolean flag)
+	{ hidingWhitespace = flag; }
+
+
+    /**
+     * Returns true if the consumer is saving CDATA boundaries, or
+     * false (the default) otherwise.
+     *
+     * @see #setHidingCDATA
+     */
+    final public boolean	isHidingCDATA ()
+	{ return hidingCDATA; }
+
+    /**
+     * Controls whether the consumer will save CDATA boundaries.
+     *
+     * @see #isHidingCDATA
+     * @param flag True to treat CDATA text differently from other
+     *	text nodes
+     */
+    final public void		setHidingCDATA (boolean flag)
+	{ hidingCDATA = flag; }
+    
+
+
+    /** Returns the document handler being used. */
+    final public ContentHandler getContentHandler ()
+	{ return handler; }
+
+    /** Returns the DTD handler being used. */
+    final public DTDHandler getDTDHandler ()
+	{ return handler; }
+
+    /**
+     * Returns the lexical handler being used.
+     * (DOM construction can't really use declaration handlers.)
+     */
+    final public Object getProperty (String id)
+    throws SAXNotRecognizedException
+    {
+	if ("http://xml.org/sax/properties/lexical-handler".equals (id))
+	    return handler;
+	if ("http://xml.org/sax/properties/declaration-handler".equals (id))
+	    return handler;
+	throw new SAXNotRecognizedException (id);
+    }
+
+    EventConsumer getNext () { return next; }
+
+    ErrorHandler getErrorHandler () { return errHandler; }
+
+    /**
+     * Class used to intercept various parsing events and use them to
+     * populate a DOM document.  Subclasses would typically know and use
+     * backdoors into specific DOM implementations, used to implement 
+     * DTD-related functionality.
+     *
+     * <p> Note that if this ever throws a DOMException (runtime exception)
+     * that will indicate a bug in the DOM (e.g. doesn't support something
+     * per specification) or the parser (e.g. emitted an illegal name, or
+     * accepted illegal input data). </p>
+     */
+    public static class Handler
+	implements ContentHandler, LexicalHandler,
+	    DTDHandler, DeclHandler
+    {
+	protected DomConsumer		consumer;
+
+	private DOMImplementation	impl;
+	private Document 		document;
+	private boolean		isL2;
+
+	private Locator		locator;
+	private Node		top;
+	private boolean		inCDATA;
+	private boolean		mergeCDATA;
+	private boolean		inDTD;
+	private String		currentEntity;
+
+	private boolean		recreatedAttrs;
+	private AttributesImpl	attributes = new AttributesImpl ();
+
+	/**
+	 * Subclasses may use SAX2 events to provide additional
+	 * behaviors in the resulting DOM.
+	 */
+	protected Handler (DomConsumer consumer)
+	throws SAXException
+	{
+	    this.consumer = consumer;
+	    document = consumer.emptyDocument ();
+	    impl = document.getImplementation ();
+	    isL2 = impl.hasFeature ("XML", "2.0");
+	}
+
+	private void fatal (String message, Exception x)
+	throws SAXException
+	{
+	    SAXParseException	e;
+	    ErrorHandler	errHandler = consumer.getErrorHandler ();;
+
+	    if (locator == null)
+		e = new SAXParseException (message, null, null, -1, -1, x);
+	    else
+		e = new SAXParseException (message, locator, x);
+	    if (errHandler != null)
+		errHandler.fatalError (e);
+	    throw e;
+	}
+
+	/**
+	 * Returns and forgets the document produced.  If the handler is
+	 * reused, a new document may be created.
+	 */
+	Document clearDocument ()
+	{
+	    Document retval = document;
+	    document = null;
+	    locator = null;
+	    return retval;
+	}
+
+	/**
+	 * Returns the document under construction.
+	 */
+	protected Document getDocument ()
+	    { return document; }
+	
+	/**
+	 * Returns the current node being populated.  This is usually
+	 * an Element or Document, but it might be an EntityReference
+	 * node if some implementation-specific code knows how to put
+	 * those into the result tree and later mark them as readonly.
+	 */
+	protected Node getTop ()
+	    { return top; }
+
+
+	// SAX1
+	public void setDocumentLocator (Locator locator)
+	{
+	    this.locator = locator;
+	}
+
+	// SAX1
+	public void startDocument ()
+	throws SAXException
+	{
+	    if (document == null)
+		try {
+		    if (isL2) {
+			// couple to original implementation
+			document = impl.createDocument (null, "foo", null);
+			document.removeChild (document.getFirstChild ());
+		    } else {
+			document = consumer.emptyDocument ();
+		    }
+		} catch (Exception e) {
+		    fatal ("DOM create document", e);
+		}
+	    top = document;
+	}
+
+	// SAX1
+	public void endDocument ()
+	throws SAXException
+	{
+	    try {
+		if (consumer.getNext () != null && document != null) {
+		    DomParser	parser = new DomParser (document);
+
+		    EventFilter.bind (parser, consumer.getNext ());
+		    parser.parse ("ignored");
+		}
+	    } finally {
+		top = null;
+	    }
+	}
+
+	// SAX1
+	public void processingInstruction (String target, String data)
+	throws SAXException
+	{
+	    // we can't create populated entity ref nodes using
+	    // only public DOM APIs (they've got to be readonly)
+	    if (currentEntity != null)
+		return;
+
+	    ProcessingInstruction	pi;
+
+	    if (isL2
+		    // && consumer.isUsingNamespaces ()
+		    && target.indexOf (':') != -1)
+		namespaceError (
+		    "PI target name is namespace nonconformant: "
+			+ target);
+	    if (inDTD)
+		return;
+	    pi = document.createProcessingInstruction (target, data);
+	    top.appendChild (pi);
+	}
+
+	/**
+	 * Subclasses may overrride this method to provide a more efficient
+	 * way to construct text nodes.
+	 * Typically, copying the text into a single character array will
+	 * be more efficient than doing that as well as allocating other
+	 * needed for a String, including an internal StringBuffer.
+	 * Those additional memory and CPU costs can be incurred later,
+	 * if ever needed.
+	 * Unfortunately the standard DOM factory APIs encourage those costs
+	 * to be incurred early.
+	 */
+	protected Text createText (
+	    boolean	isCDATA,
+	    char	ch [],
+	    int		start,
+	    int		length
+	) {
+	    String	value = new String (ch, start, length);
+
+	    if (isCDATA)
+		return document.createCDATASection (value);
+	    else
+		return document.createTextNode (value);
+	}
+
+	// SAX1
+	public void characters (char ch [], int start, int length)
+	throws SAXException
+	{
+	    // we can't create populated entity ref nodes using
+	    // only public DOM APIs (they've got to be readonly
+	    // at creation time)
+	    if (currentEntity != null)
+		return;
+
+	    Node	lastChild = top.getLastChild ();
+
+	    // merge consecutive text or CDATA nodes if appropriate.
+	    if (lastChild instanceof Text) {
+		if (consumer.isHidingCDATA ()
+			// consecutive Text content ... always merge
+			|| (!inCDATA
+			    && !(lastChild instanceof CDATASection))
+			// consecutive CDATASection content ... don't
+			// merge between sections, only within them
+			|| (inCDATA && mergeCDATA
+			    && lastChild instanceof CDATASection)
+			    ) {
+		    CharacterData	last = (CharacterData) lastChild;
+		    String		value = new String (ch, start, length);
+		    
+		    last.appendData (value);
+		    return;
+		}
+	    }
+	    if (inCDATA && !consumer.isHidingCDATA ()) {
+		top.appendChild (createText (true, ch, start, length));
+		mergeCDATA = true;
+	    } else
+		top.appendChild (createText (false, ch, start, length));
+	}
+
+	// SAX2
+	public void skippedEntity (String name)
+	throws SAXException
+	{
+	    // this callback is useless except to report errors, since
+	    // we can't know if the ref was in content, within an
+	    // attribute, within a declaration ... only one of those
+	    // cases supports more intelligent action than a panic.
+	    fatal ("skipped entity: " + name, null);
+	}
+
+	// SAX2
+	public void startPrefixMapping (String prefix, String uri)
+	throws SAXException
+	{
+	    // reconstruct "xmlns" attributes deleted by all
+	    // SAX2 parsers without "namespace-prefixes" = true
+	    if ("".equals (prefix))
+		attributes.addAttribute ("", "", "xmlns",
+			"CDATA", uri);
+	    else
+		attributes.addAttribute ("", "", "xmlns:" + prefix,
+			"CDATA", uri);
+	    recreatedAttrs = true;
+	}
+
+	// SAX2
+	public void endPrefixMapping (String prefix)
+	throws SAXException
+	    { }
+
+	// SAX2
+	public void startElement (
+	    String uri,
+	    String localName,
+	    String qName,
+	    Attributes atts
+	) throws SAXException
+	{
+	    // we can't create populated entity ref nodes using
+	    // only public DOM APIs (they've got to be readonly)
+	    if (currentEntity != null)
+		return;
+
+	    // parser discarded basic information; DOM tree isn't writable
+	    // without massaging to assign prefixes to all nodes.
+	    // the "NSFilter" class does that massaging.
+	    if (qName.length () == 0)
+		qName = localName;
+
+
+	    Element	element;
+	    int		length = atts.getLength ();
+
+	    if (!isL2) {
+		element = document.createElement (qName);
+
+		// first the explicit attributes ...
+		length = atts.getLength ();
+		for (int i = 0; i < length; i++)
+		    element.setAttribute (atts.getQName (i),
+					    atts.getValue (i));
+		// ... then any recreated ones (DOM deletes duplicates)
+		if (recreatedAttrs) {
+		    recreatedAttrs = false;
+		    length = attributes.getLength ();
+		    for (int i = 0; i < length; i++)
+			element.setAttribute (attributes.getQName (i),
+						attributes.getValue (i));
+		    attributes.clear ();
+		}
+
+		top.appendChild (element);
+		top = element;
+		return;
+	    }
+
+	    // For an L2 DOM when namespace use is enabled, use
+	    // createElementNS/createAttributeNS except when
+	    // (a) it's an element in the default namespace, or
+	    // (b) it's an attribute with no prefix
+	    String	namespace;
+	    
+	    if (localName.length () != 0)
+		namespace = (uri.length () == 0) ? null : uri;
+	    else
+		namespace = getNamespace (getPrefix (qName), atts);
+
+	    if (namespace == null)
+		element = document.createElement (qName);
+	    else
+		element = document.createElementNS (namespace, qName);
+
+	    populateAttributes (element, atts);
+	    if (recreatedAttrs) {
+		recreatedAttrs = false;
+		// ... DOM deletes any duplicates
+		populateAttributes (element, attributes);
+		attributes.clear ();
+	    }
+
+	    top.appendChild (element);
+	    top = element;
+	}
+
+	final static String	xmlnsURI = "http://www.w3.org/2000/xmlns/";
+
+	private void populateAttributes (Element element, Attributes attrs)
+	throws SAXParseException
+	{
+	    int		length = attrs.getLength ();
+
+	    for (int i = 0; i < length; i++) {
+		String	type = attrs.getType (i);
+		String	value = attrs.getValue (i);
+		String	name = attrs.getQName (i);
+		String	local = attrs.getLocalName (i);
+		String	uri = attrs.getURI (i);
+
+		// parser discarded basic information, DOM tree isn't writable
+		if (name.length () == 0)
+		    name = local;
+
+		// all attribute types other than these three may not
+		// contain scoped names... enumerated attributes get
+		// reported as NMTOKEN, except for NOTATION values
+		if (!("CDATA".equals (type)
+			|| "NMTOKEN".equals (type)
+			|| "NMTOKENS".equals (type))) {
+		    if (value.indexOf (':') != -1) {
+			namespaceError (
+				"namespace nonconformant attribute value: "
+				    + "<" + element.getNodeName ()
+				    + " " + name + "='" + value + "' ...>");
+		    }
+		}
+
+		// xmlns="" is legal (undoes default NS)
+		// xmlns:foo="" is illegal
+		String prefix = getPrefix (name);
+		String namespace;
+
+		if ("xmlns".equals (prefix)) {
+		    if ("".equals (value))
+			namespaceError ("illegal null namespace decl, " + name);
+		    namespace = xmlnsURI;
+		} else if ("xmlns".equals (name))
+		    namespace = xmlnsURI;
+
+		else if (prefix == null)
+		    namespace = null;
+		else if (!"".equals(uri) && uri.length () != 0)
+		    namespace = uri;
+		else
+		    namespace = getNamespace (prefix, attrs);
+
+		if (namespace == null)
+		    element.setAttribute (name, value);
+		else
+		    element.setAttributeNS (namespace, name, value);
+	    }
+	}
+
+	private String getPrefix (String name)
+	{
+	    int		temp;
+
+	    if ((temp = name.indexOf (':')) > 0)
+		return name.substring (0, temp);
+	    return null;
+	}
+
+	// used with SAX1-level parser output 
+	private String getNamespace (String prefix, Attributes attrs)
+	throws SAXParseException
+	{
+	    String namespace;
+	    String decl;
+
+	    // defaulting 
+	    if (prefix == null) {
+		decl = "xmlns";
+		namespace = attrs.getValue (decl);
+		if ("".equals (namespace))
+		    return null;
+		else if (namespace != null)
+		    return namespace;
+
+	    // "xmlns" is like a keyword
+	    // ... according to the Namespace REC, but DOM L2 CR2+
+	    // and Infoset violate that by assigning a namespace.
+	    // that conflict is resolved elsewhere.
+	    } else if ("xmlns".equals (prefix))
+		return null;
+
+	    // "xml" prefix is fixed
+	    else if ("xml".equals (prefix))
+		return "http://www.w3.org/XML/1998/namespace";
+
+	    // otherwise, expect a declaration
+	    else {
+		decl = "xmlns:" + prefix;
+		namespace = attrs.getValue (decl);
+	    }
+	    
+	    // if we found a local declaration, great
+	    if (namespace != null)
+		return namespace;
+
+
+	    // ELSE ... search up the tree we've been building
+	    for (Node n = top;
+		    n != null && n.getNodeType () != Node.DOCUMENT_NODE;
+		    n = (Node) n.getParentNode ()) {
+		if (n.getNodeType () == Node.ENTITY_REFERENCE_NODE)
+		    continue;
+		Element e = (Element) n;
+		Attr attr = e.getAttributeNode (decl);
+		if (attr != null)
+		    return attr.getNodeValue ();
+	    }
+	    // see above re "xmlns" as keyword
+	    if ("xmlns".equals (decl))
+		return null;
+
+	    namespaceError ("Undeclared namespace prefix: " + prefix);
+	    return null;
+	}
+
+	// SAX2
+	public void endElement (String uri, String localName, String qName)
+	throws SAXException
+	{
+	    // we can't create populated entity ref nodes using
+	    // only public DOM APIs (they've got to be readonly)
+	    if (currentEntity != null)
+		return;
+
+	    top = top.getParentNode ();
+	}
+
+	// SAX1 (mandatory reporting if validating)
+	public void ignorableWhitespace (char ch [], int start, int length)
+	throws SAXException
+	{
+	    if (consumer.isHidingWhitespace ())
+		return;
+	    characters (ch, start, length);
+	}
+
+	// SAX2 lexical event
+	public void startCDATA ()
+	throws SAXException
+	{
+	    inCDATA = true;
+	    // true except for the first fragment of a cdata section
+	    mergeCDATA = false;
+	}
+	
+	// SAX2 lexical event
+	public void endCDATA ()
+	throws SAXException
+	{
+	    inCDATA = false;
+	}
+	
+	// SAX2 lexical event
+	//
+	// this SAX2 callback merges two unrelated things:
+	//	- Declaration of the root element type ... belongs with
+	//    the other DTD declaration methods, NOT HERE.
+	//	- IDs for the optional external subset ... belongs here
+	//    with other lexical information.
+	//
+	// ...and it doesn't include the internal DTD subset, desired
+	// both to support DOM L2 and to enable "pass through" processing
+	//
+	public void startDTD (String name, String publicId, String SystemId)
+	throws SAXException
+	{
+	    // need to filter out comments and PIs within the DTD
+	    inDTD = true;
+	}
+	
+	// SAX2 lexical event
+	public void endDTD ()
+	throws SAXException
+	{
+	    inDTD = false;
+	}
+	
+	// SAX2 lexical event
+	public void comment (char ch [], int start, int length)
+	throws SAXException
+	{
+	    Node	comment;
+
+	    // we can't create populated entity ref nodes using
+	    // only public DOM APIs (they've got to be readonly)
+	    if (consumer.isHidingComments ()
+		    || inDTD
+		    || currentEntity != null)
+		return;
+	    comment = document.createComment (new String (ch, start, length));
+	    top.appendChild (comment);
+	}
+
+	/**
+	 * May be overridden by subclasses to return true, indicating
+	 * that entity reference nodes can be populated and then made
+	 * read-only.
+	 */
+	public boolean canPopulateEntityRefs ()
+	    { return false; }
+
+	// SAX2 lexical event
+	public void startEntity (String name)
+	throws SAXException
+	{
+	    // are we ignoring what would be contents of an
+	    // entity ref, since we can't populate it?
+	    if (currentEntity != null)
+		return;
+
+	    // Are we hiding all entity boundaries?
+	    if (consumer.isHidingReferences ())
+		return;
+
+	    // SAX2 shows parameter entities; DOM hides them
+	    if (name.charAt (0) == '%' || "[dtd]".equals (name))
+		return;
+
+	    // Since we can't create a populated entity ref node in any
+	    // standard way, we create an unpopulated one.
+	    EntityReference ref = document.createEntityReference (name);
+	    top.appendChild (ref);
+	    top = ref;
+
+	    // ... allowing subclasses to populate them
+	    if (!canPopulateEntityRefs ())
+		currentEntity = name;
+	}
+
+	// SAX2 lexical event
+	public void endEntity (String name)
+	throws SAXException
+	{
+	    if (name.charAt (0) == '%' || "[dtd]".equals (name))
+		return;
+	    if (name.equals (currentEntity))
+		currentEntity = null;
+	    if (!consumer.isHidingReferences ())
+		top = top.getParentNode ();
+	}
+
+
+	// SAX1 DTD event
+	public void notationDecl (
+	    String name,
+	    String publicId, String SystemId
+	) throws SAXException
+	{
+	    /* IGNORE -- no public DOM API lets us store these
+	     * into the doctype node
+	     */
+	}
+
+	// SAX1 DTD event
+	public void unparsedEntityDecl (
+	    String name,
+	    String publicId, String SystemId,
+	    String notationName
+	) throws SAXException
+	{
+	    /* IGNORE -- no public DOM API lets us store these
+	     * into the doctype node
+	     */
+	}
+
+	// SAX2 declaration event
+	public void elementDecl (String name, String model)
+	throws SAXException
+	{
+	    /* IGNORE -- no content model support in DOM L2 */
+	}
+
+	// SAX2 declaration event
+	public void attributeDecl (
+	    String eName,
+	    String aName,
+	    String type,
+	    String mode,
+	    String value
+	) throws SAXException
+	{
+	    /* IGNORE -- no attribute model support in DOM L2 */
+	}
+
+	// SAX2 declaration event
+	public void internalEntityDecl (String name, String value)
+	throws SAXException
+	{
+	    /* IGNORE -- no public DOM API lets us store these
+	     * into the doctype node
+	     */
+	}
+
+	// SAX2 declaration event
+	public void externalEntityDecl (
+	    String name,
+	    String publicId,
+	    String SystemId
+	) throws SAXException
+	{
+	    /* IGNORE -- no public DOM API lets us store these
+	     * into the doctype node
+	     */
+	}
+
+	//
+	// These really should offer the option of nonfatal handling,
+	// like other validity errors, though that would cause major
+	// chaos in the DOM data structures.  DOM is already spec'd
+	// to treat many of these as fatal, so this is consistent.
+	//
+	private void namespaceError (String description)
+	throws SAXParseException
+	{
+	    SAXParseException err;
+	    
+	    err = new SAXParseException (description, locator);
+	    throw err;
+	}
+    }
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/EventConsumer.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/EventConsumer.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/EventConsumer.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/EventConsumer.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,95 @@
+/* EventConsumer.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.pipeline;
+
+import org.xml.sax.*;
+
+
+/**
+ * Collects the event consumption apparatus of a SAX pipeline stage.
+ * Consumers which permit some handlers or other characteristics to be
+ * configured will provide methods to support that configuration.
+ *
+ * <p> Two important categories of consumers include <em>filters</em>, which
+ * process events and pass them on to other consumers, and <em>terminus</em>
+ * (or <em>terminal</em>) stages, which don't pass events on.  Filters are not
+ * necessarily derived from the {@link EventFilter} class, although that
+ * class can substantially simplify their construction by automating the
+ * most common activities.
+ *
+ * <p> Event consumers which follow certain conventions for the signatures
+ * of their constructors can be automatically assembled into pipelines
+ * by the {@link PipelineFactory} class.
+ *
+ * @author David Brownell
+ */
+public interface EventConsumer
+{
+    /** Most stages process these core SAX callbacks. */
+    public ContentHandler getContentHandler ();
+
+    /** Few stages will use unparsed entities. */
+    public DTDHandler getDTDHandler ();
+
+    /**
+     * This method works like the SAX2 XMLReader method of the same name,
+     * and is used to retrieve the optional lexical and declaration handlers
+     * in a pipeline.
+     *
+     * @param id This is a URI identifying the type of property desired.
+     * @return The value of that property, if it is defined.
+     *
+     * @exception SAXNotRecognizedException Thrown if the particular
+     *	pipeline stage does not understand the specified identifier.
+     */
+    public Object getProperty (String id)
+    throws SAXNotRecognizedException;
+
+    /**
+     * This method provides a filter stage with a handler that abstracts
+     * presentation of warnings and both recoverable and fatal errors.
+     * Most pipeline stages should share a single policy and mechanism
+     * for such reports, since application components require consistency
+     * in such activities.  Accordingly, typical responses to this method
+     * invocation involve saving the handler for use; filters will pass
+     * it on to any other consumers they use.
+     *
+     * @param handler encapsulates error handling policy for this stage
+     */
+    public void setErrorHandler (ErrorHandler handler);
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/EventFilter.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/EventFilter.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/EventFilter.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/EventFilter.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,796 @@
+/* EventFilter.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.pipeline;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import org.xml.sax.*;
+import org.xml.sax.ext.*;
+import org.xml.sax.helpers.XMLFilterImpl;
+
+/**
+ * A customizable event consumer, used to assemble various kinds of filters
+ * using SAX handlers and an optional second consumer.  It can be constructed
+ * in two ways: <ul>
+ *
+ *  <li> To serve as a passthrough, sending all events to a second consumer.
+ *  The second consumer may be identified through {@link #getNext}.
+ *
+ *  <li> To serve as a dead end, with all handlers null;
+ *  {@link #getNext} returns null.
+ *
+ * </ul>
+ *
+ * <p> Additionally, SAX handlers may be assigned, which completely replace
+ * the "upstream" view (through {@link EventConsumer}) of handlers, initially
+ * null or the "next" consumer provided to the constructor.  To make
+ * it easier to build specialized filter classes, this class implements
+ * all the standard SAX consumer handlers, and those implementations
+ * delegate "downstream" to the consumer accessed by {@link #getNext}.
+ *
+ * <p> The simplest way to create a custom a filter class is to create a
+ * subclass which overrides one or more handler interface methods.  The
+ * constructor for that subclass then registers itself as a handler for
+ * those interfaces using a call such as <em>setContentHandler(this)</em>,
+ * so the "upstream" view of event delivery is modified from the state
+ * established in the base class constructor.  That way,
+ * the overridden methods intercept those event callbacks
+ * as they go "downstream", and
+ * all other event callbacks will pass events to any next consumer.
+ * Overridden methods may invoke superclass methods (perhaps after modifying
+ * parameters) if they wish to delegate such calls.  Such subclasses
+ * should use {@link #getErrorHandler} to report errors using the
+ * common error reporting mechanism.
+ *
+ * <p> Another important technique is to construct a filter consisting
+ * of only a few specific types of handler.  For example, one could easily
+ * prune out lexical events or various declarations by providing handlers
+ * which don't pass those events downstream, or by providing null handlers.
+ *
+ * <hr />
+ *
+ * <p> This may be viewed as the consumer oriented analogue of the SAX2
+ * {@link org.xml.sax.helpers.XMLFilterImpl XMLFilterImpl} class.
+ * Key differences include: <ul>
+ *
+ *	<li> This fully separates consumer and producer roles:  it
+ *	does not implement the producer side <em>XMLReader</em> or
+ *	<em>EntityResolver</em> interfaces, so it can only be used
+ *	in "push" mode (it has no <em>parse()</em> methods).
+ *
+ *	<li> "Extension" handlers are fully supported, enabling a
+ *	richer set of application requirements.
+ *	And it implements {@link EventConsumer}, which groups related
+ *	consumer methods together, rather than leaving them separated.
+ *
+ *	<li> The chaining which is visible is "downstream" to the next
+ *	consumer, not "upstream" to the preceding producer.
+ *	It supports "fan-in", where
+ *	a consumer can be fed by several producers.  (For "fan-out",
+ *	see the {@link TeeConsumer} class.)
+ *
+ *	<li> Event chaining is set up differently.  It is intended to
+ *	work "upstream" from terminus towards producer, during filter
+ *	construction, as described above.
+ *	This is part of an early binding model:
+ *	events don't need to pass through stages which ignore them.
+ *
+ *	<li> ErrorHandler support is separated, on the grounds that
+ *	pipeline stages need to share the same error handling policy.
+ *	For the same reason, error handler setup goes "downstream":
+ *	when error handlers get set, they are passed to subsequent
+ *	consumers.
+ *
+ *	</ul>
+ *
+ * <p> The {@link #chainTo chainTo()} convenience routine supports chaining to
+ * an XMLFilterImpl, in its role as a limited functionality event
+ * consumer.  Its event producer role ({@link XMLFilter}) is ignored.
+ *
+ * <hr />
+ *
+ * <p> The {@link #bind bind()} routine may be used associate event pipelines
+ * with any kind of {@link XMLReader} that will produce the events.
+ * Such pipelines don't necessarily need to have any members which are
+ * implemented using this class.  That routine has some intelligence
+ * which supports automatic changes to parser feature flags, letting
+ * event piplines become largely independent of the particular feature
+ * sets of parsers.
+ *
+ * @author David Brownell
+ */
+public class EventFilter
+    implements EventConsumer, ContentHandler, DTDHandler,
+	    LexicalHandler, DeclHandler
+{
+    // SAX handlers
+    private ContentHandler		docHandler, docNext;
+    private DTDHandler			dtdHandler, dtdNext;
+    private LexicalHandler		lexHandler, lexNext;
+    private DeclHandler			declHandler, declNext;
+    // and ideally, one more for the stuff SAX2 doesn't show
+
+    private Locator			locator;
+    private EventConsumer		next;
+    private ErrorHandler		errHandler;
+
+    
+    /** SAX2 URI prefix for standard feature flags. */
+    public static final String		FEATURE_URI
+	= "http://xml.org/sax/features/";
+    /** SAX2 URI prefix for standard properties (mostly for handlers). */
+    public static final String		PROPERTY_URI
+	= "http://xml.org/sax/properties/";
+
+    /** SAX2 property identifier for {@link DeclHandler} events */
+    public static final String		DECL_HANDLER
+	= PROPERTY_URI + "declaration-handler";
+    /** SAX2 property identifier for {@link LexicalHandler} events */
+    public static final String		LEXICAL_HANDLER
+	= PROPERTY_URI + "lexical-handler";
+    
+    //
+    // These class objects will be null if the relevant class isn't linked.
+    // Small configurations (pJava and some kinds of embedded systems) need
+    // to facilitate smaller executables.  So "instanceof" is undesirable
+    // when bind() sees if it can remove some stages.
+    //
+    // SECURITY NOTE:  assuming all these classes are part of the same sealed
+    // package, there's no problem saving these in the instance of this class
+    // that's associated with "this" class loader.  But that wouldn't be true
+    // for classes in another package.
+    //
+    private static boolean		loaded;
+    private static Class		nsClass;
+    private static Class		validClass;
+    private static Class		wfClass;
+    private static Class		xincClass;
+
+    static ClassLoader getClassLoader ()
+    {
+        Method m = null;
+
+        try {
+            m = Thread.class.getMethod("getContextClassLoader", null);
+        } catch (NoSuchMethodException e) {
+            // Assume that we are running JDK 1.1, use the current ClassLoader
+            return EventFilter.class.getClassLoader();
+        }
+
+        try {
+            return (ClassLoader) m.invoke(Thread.currentThread(), null);
+        } catch (IllegalAccessException e) {
+            // assert(false)
+            throw new UnknownError(e.getMessage());
+        } catch (InvocationTargetException e) {
+            // assert(e.getTargetException() instanceof SecurityException)
+            throw new UnknownError(e.getMessage());
+        }
+    }
+
+    static Class loadClass (ClassLoader classLoader, String className)
+    {
+	try {
+	    if (classLoader == null)
+		return Class.forName(className);
+	    else
+		return classLoader.loadClass(className);
+	} catch (Exception e) {
+	    return null;
+	}
+    }
+
+    static private void loadClasses ()
+    {
+	ClassLoader	loader = getClassLoader ();
+
+	nsClass = loadClass (loader, "gnu.xml.pipeline.NSFilter");
+	validClass = loadClass (loader, "gnu.xml.pipeline.ValidationConsumer");
+	wfClass = loadClass (loader, "gnu.xml.pipeline.WellFormednessFilter");
+	xincClass = loadClass (loader, "gnu.xml.pipeline.XIncludeFilter");
+	loaded = true;
+    }
+
+
+    /**
+     * Binds the standard SAX2 handlers from the specified consumer
+     * pipeline to the specified producer.  These handlers include the core
+     * {@link ContentHandler} and {@link DTDHandler}, plus the extension
+     * {@link DeclHandler} and {@link LexicalHandler}.  Any additional
+     * application-specific handlers need to be bound separately.
+     * The {@link ErrorHandler} is handled differently:  the producer's
+     * error handler is passed through to the consumer pipeline.
+     * The producer is told to include namespace prefix information if it
+     * can, since many pipeline stages need that Infoset information to
+     * work well.
+     *
+     * <p> At the head of the pipeline, certain standard event filters are
+     * recognized and handled specially.  This facilitates construction
+     * of processing pipelines that work regardless of the capabilities
+     * of the XMLReader implementation in use; for example, it permits
+     * validating output of a {@link gnu.xml.util.DomParser}. <ul>
+     *
+     *	<li> {@link NSFilter} will be removed if the producer can be
+     *	told not to discard namespace data, using the "namespace-prefixes"
+     *	feature flag.
+     *
+     *	<li> {@link ValidationConsumer} will be removed if the producer
+     *	can be told to validate, using the "validation" feature flag.
+     *
+     *	<li> {@link WellFormednessFilter} is always removed, on the
+     *	grounds that no XMLReader is permitted to producee malformed
+     *	event streams and this would just be processing overhead.
+     *
+     *	<li> {@link XIncludeFilter} stops the special handling, except
+     *	that it's told about the "namespace-prefixes" feature of the
+     *	event producer so that the event stream is internally consistent.
+     *
+     *	<li> The first consumer which is not one of those classes stops
+     *	such special handling.  This means that if you want to force
+     *	one of those filters to be used, you could just precede it with
+     *	an instance of {@link EventFilter} configured as a pass-through.
+     *	You might need to do that if you are using an {@link NSFilter}
+     *	subclass to fix names found in attributes or character data.
+     *
+     *	</ul>
+     *
+     * <p> Other than that, this method works with any kind of event consumer,
+     * not just event filters.  Note that in all cases, the standard handlers
+     * are assigned; any previous handler assignments for the handler will
+     * be overridden.
+     *
+     * @param producer will deliver events to the specified consumer 
+     * @param consumer pipeline supplying event handlers to be associated
+     *	with the producer (may not be null)
+     */
+    public static void bind (XMLReader producer, EventConsumer consumer)
+    {
+	Class	klass = null;
+	boolean	prefixes;
+
+	if (!loaded)
+	    loadClasses ();
+
+	// DOM building, printing, layered validation, and other
+	// things don't work well when prefix info is discarded.
+	// Include it by default, whenever possible.
+	try {
+	    producer.setFeature (FEATURE_URI + "namespace-prefixes",
+		true);
+	    prefixes = true;
+	} catch (SAXException e) {
+	    prefixes = false;
+	}
+
+	// NOTE:  This loop doesn't use "instanceof", since that
+	// would prevent compiling/linking without those classes
+	// being present.
+	while (consumer != null) {
+	    klass = consumer.getClass ();
+
+	    // we might have already changed this problematic SAX2 default.
+	    if (nsClass != null && nsClass.isAssignableFrom (klass)) {
+		if (!prefixes)
+		    break;
+		consumer = ((EventFilter)consumer).getNext ();
+
+	    // the parser _might_ do DTD validation by default ...
+	    // if not, maybe we can change this setting.
+	    } else if (validClass != null
+		    && validClass.isAssignableFrom (klass)) {
+		try {
+		    producer.setFeature (FEATURE_URI + "validation",
+			true);
+		    consumer = ((ValidationConsumer)consumer).getNext ();
+		} catch (SAXException e) {
+		    break;
+		}
+
+	    // parsers are required not to have such bugs
+	    } else if (wfClass != null && wfClass.isAssignableFrom (klass)) {
+		consumer = ((WellFormednessFilter)consumer).getNext ();
+
+	    // stop on the first pipeline stage we can't remove
+	    } else
+		break;
+	    
+	    if (consumer == null)
+		klass = null;
+	}
+
+	// the actual setting here doesn't matter as much
+	// as that producer and consumer agree
+	if (xincClass != null && klass != null
+		&& xincClass.isAssignableFrom (klass))
+	    ((XIncludeFilter)consumer).setSavingPrefixes (prefixes);
+
+	// Some SAX parsers can't handle null handlers -- bleech
+	DefaultHandler2	h = new DefaultHandler2 ();
+
+	if (consumer != null && consumer.getContentHandler () != null)
+	    producer.setContentHandler (consumer.getContentHandler ());
+	else
+	    producer.setContentHandler (h);
+	if (consumer != null && consumer.getDTDHandler () != null)
+	    producer.setDTDHandler (consumer.getDTDHandler ());
+	else
+	    producer.setDTDHandler (h);
+
+	try {
+	    Object	dh;
+	    
+	    if (consumer != null)
+		dh = consumer.getProperty (DECL_HANDLER);
+	    else
+		dh = null;
+	    if (dh == null)
+		dh = h;
+	    producer.setProperty (DECL_HANDLER, dh);
+	} catch (Exception e) { /* ignore */ }
+	try {
+	    Object	lh;
+	    
+	    if (consumer != null)
+		lh = consumer.getProperty (LEXICAL_HANDLER);
+	    else
+		lh = null;
+	    if (lh == null)
+		lh = h;
+	    producer.setProperty (LEXICAL_HANDLER, lh);
+	} catch (Exception e) { /* ignore */ }
+
+	// this binding goes the other way around
+	if (producer.getErrorHandler () == null)
+	    producer.setErrorHandler (h);
+	if (consumer != null)
+	    consumer.setErrorHandler (producer.getErrorHandler ());
+    }
+    
+    /**
+     * Initializes all handlers to null.
+     */
+	// constructor used by PipelineFactory
+    public EventFilter () { }
+
+
+    /**
+     * Handlers that are not otherwise set will default to those from
+     * the specified consumer, making it easy to pass events through.
+     * If the consumer is null, all handlers are initialzed to null.
+     */
+	// constructor used by PipelineFactory
+    public EventFilter (EventConsumer consumer)
+    {
+	if (consumer == null)
+	    return;
+
+	next = consumer;
+
+	// We delegate through the "xxNext" handlers, and
+	// report the "xxHandler" ones on our input side.
+
+	// Normally a subclass would both override handler
+	// methods and register itself as the "xxHandler".
+
+	docHandler = docNext = consumer.getContentHandler ();
+	dtdHandler = dtdNext = consumer.getDTDHandler ();
+	try {
+	    declHandler = declNext = (DeclHandler)
+		    consumer.getProperty (DECL_HANDLER);
+	} catch (SAXException e) { /* leave value null */ }
+	try {
+	    lexHandler = lexNext = (LexicalHandler)
+		    consumer.getProperty (LEXICAL_HANDLER);
+	} catch (SAXException e) { /* leave value null */ }
+    }
+
+    /**
+     * Treats the XMLFilterImpl as a limited functionality event consumer,
+     * by arranging to deliver events to it; this lets such classes be
+     * "wrapped" as pipeline stages.
+     *
+     * <p> <em>Upstream Event Setup:</em>
+     * If no handlers have been assigned to this EventFilter, then the
+     * handlers from specified XMLFilterImpl are returned from this
+     * {@link EventConsumer}: the XMLFilterImpl is just "wrapped".
+     * Otherwise the specified handlers will be returned.
+     *
+     * <p> <em>Downstream Event Setup:</em>
+     * Subclasses may chain event delivery to the specified XMLFilterImpl
+     * by invoking the appropiate superclass methods,
+     * as if their constructor passed a "next" EventConsumer to the
+     * constructor for this class.
+     * If this EventFilter has an ErrorHandler, it is assigned as
+     * the error handler for the XMLFilterImpl, just as would be
+     * done for a next stage implementing {@link EventConsumer}.
+     *
+     * @param next the next downstream component of the pipeline.
+     * @exception IllegalStateException if the "next" consumer has
+     *	already been set through the constructor.
+     */
+    public void chainTo (XMLFilterImpl next)
+    {
+	if (this.next != null)
+	    throw new IllegalStateException ();
+
+	docNext = next.getContentHandler ();
+	if (docHandler == null)
+	    docHandler = docNext;
+	dtdNext = next.getDTDHandler ();
+	if (dtdHandler == null)
+	    dtdHandler = dtdNext;
+
+	try {
+	    declNext = (DeclHandler) next.getProperty (DECL_HANDLER);
+	    if (declHandler == null)
+		declHandler = declNext;
+	} catch (SAXException e) { /* leave value null */ }
+	try {
+	    lexNext = (LexicalHandler) next.getProperty (LEXICAL_HANDLER);
+	    if (lexHandler == null)
+		lexHandler = lexNext;
+	} catch (SAXException e) { /* leave value null */ }
+
+	if (errHandler != null)
+	    next.setErrorHandler (errHandler);
+    }
+
+    /**
+     * Records the error handler that should be used by this stage, and
+     * passes it "downstream" to any subsequent stage.
+     */
+    final public void setErrorHandler (ErrorHandler handler)
+    {
+	errHandler = handler;
+	if (next != null)
+	    next.setErrorHandler (handler);
+    }
+
+    /**
+     * Returns the error handler assigned this filter stage, or null
+     * if no such assigment has been made.
+     */
+    final public ErrorHandler getErrorHandler ()
+    {
+	return errHandler;
+    }
+
+
+    /**
+     * Returns the next event consumer in sequence; or null if there
+     * is no such handler.
+     */
+    final public EventConsumer getNext ()
+	{ return next; }
+
+
+    /**
+     * Assigns the content handler to use; a null handler indicates
+     * that these events will not be forwarded.
+     * This overrides the previous settting for this handler, which was
+     * probably pointed to the next consumer by the base class constructor.
+     */
+    final public void setContentHandler (ContentHandler h)
+    {
+	docHandler = h;
+    }
+
+    /** Returns the content handler being used. */
+    final public ContentHandler getContentHandler ()
+    {
+	return docHandler;
+    }
+
+    /**
+     * Assigns the DTD handler to use; a null handler indicates
+     * that these events will not be forwarded.
+     * This overrides the previous settting for this handler, which was
+     * probably pointed to the next consumer by the base class constructor.
+     */
+    final public void setDTDHandler (DTDHandler h)
+	{ dtdHandler = h; }
+
+    /** Returns the dtd handler being used. */
+    final public DTDHandler getDTDHandler ()
+    {
+	return dtdHandler;
+    }
+
+    /**
+     * Stores the property, normally a handler; a null handler indicates
+     * that these events will not be forwarded.
+     * This overrides the previous handler settting, which was probably
+     * pointed to the next consumer by the base class constructor.
+     */
+    final public void setProperty (String id, Object o)
+    throws SAXNotRecognizedException, SAXNotSupportedException
+    {
+	try {
+	    Object	value = getProperty (id);
+
+	    if (value == o)
+		return;
+	    if (DECL_HANDLER.equals (id)) {
+		declHandler = (DeclHandler) o;
+		return;
+	    }
+	    if (LEXICAL_HANDLER.equals (id)) {
+		lexHandler = (LexicalHandler) o;
+		return;
+	    }
+	    throw new SAXNotSupportedException (id);
+
+	} catch (ClassCastException e) {
+	    throw new SAXNotSupportedException (id);
+	}
+    }
+
+    /** Retrieves a property of unknown intent (usually a handler) */
+    final public Object getProperty (String id)
+    throws SAXNotRecognizedException
+    {
+	if (DECL_HANDLER.equals (id)) 
+	    return declHandler;
+	if (LEXICAL_HANDLER.equals (id))
+	    return lexHandler;
+
+	throw new SAXNotRecognizedException (id);
+    }
+
+    /**
+     * Returns any locator provided to the next consumer, if this class
+     * (or a subclass) is handling {@link ContentHandler } events.
+     */
+    public Locator getDocumentLocator ()
+	{ return locator; }
+
+
+    // CONTENT HANDLER DELEGATIONS
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void setDocumentLocator (Locator locator)
+    {
+	this.locator = locator;
+	if (docNext != null)
+	    docNext.setDocumentLocator (locator);
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void startDocument () throws SAXException
+    {
+	if (docNext != null)
+	    docNext.startDocument ();
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void skippedEntity (String name) throws SAXException
+    {
+	if (docNext != null)
+	    docNext.skippedEntity (name);
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void processingInstruction (String target, String data)
+    throws SAXException
+    {
+	if (docNext != null)
+	    docNext.processingInstruction (target, data);
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void characters (char ch [], int start, int length)
+    throws SAXException
+    {
+	if (docNext != null)
+	    docNext.characters (ch, start, length);
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void ignorableWhitespace (char ch [], int start, int length)
+    throws SAXException
+    {
+	if (docNext != null)
+	    docNext.ignorableWhitespace (ch, start, length);
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void startPrefixMapping (String prefix, String uri)
+    throws SAXException
+    {
+	if (docNext != null)
+	    docNext.startPrefixMapping (prefix, uri);
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void startElement (
+	String uri, String localName,
+	String qName, Attributes atts
+    ) throws SAXException
+    {
+	if (docNext != null)
+	    docNext.startElement (uri, localName, qName, atts);
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void endElement (String uri, String localName, String qName)
+    throws SAXException
+    {
+	if (docNext != null)
+	    docNext.endElement (uri, localName, qName);
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void endPrefixMapping (String prefix) throws SAXException
+    {
+	if (docNext != null)
+	    docNext.endPrefixMapping (prefix);
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void endDocument () throws SAXException
+    {
+	if (docNext != null)
+	    docNext.endDocument ();
+	locator = null;
+    }
+
+
+    // DTD HANDLER DELEGATIONS
+    
+    /** <b>SAX1:</b> passes this callback to the next consumer, if any */
+    public void unparsedEntityDecl (
+	String name,
+	String publicId,
+	String systemId,
+	String notationName
+    ) throws SAXException
+    {
+	if (dtdNext != null)
+	    dtdNext.unparsedEntityDecl (name, publicId, systemId, notationName);
+    }
+    
+    /** <b>SAX1:</b> passes this callback to the next consumer, if any */
+    public void notationDecl (String name, String publicId, String systemId)
+    throws SAXException
+    {
+	if (dtdNext != null)
+	    dtdNext.notationDecl (name, publicId, systemId);
+    }
+    
+
+    // LEXICAL HANDLER DELEGATIONS
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void startDTD (String name, String publicId, String systemId)
+    throws SAXException
+    {
+	if (lexNext != null)
+	    lexNext.startDTD (name, publicId, systemId);
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void endDTD ()
+    throws SAXException
+    {
+	if (lexNext != null)
+	    lexNext.endDTD ();
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void comment (char ch [], int start, int length)
+    throws SAXException
+    {
+	if (lexNext != null)
+	    lexNext.comment (ch, start, length);
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void startCDATA ()
+    throws SAXException
+    {
+	if (lexNext != null)
+	    lexNext.startCDATA ();
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void endCDATA ()
+    throws SAXException
+    {
+	if (lexNext != null)
+	    lexNext.endCDATA ();
+    }
+
+    /**
+     * <b>SAX2:</b> passes this callback to the next consumer, if any.
+     */
+    public void startEntity (String name)
+    throws SAXException
+    {
+	if (lexNext != null)
+	    lexNext.startEntity (name);
+    }
+
+    /**
+     * <b>SAX2:</b> passes this callback to the next consumer, if any.
+     */
+    public void endEntity (String name)
+    throws SAXException
+    {
+	if (lexNext != null)
+	    lexNext.endEntity (name);
+    }
+    
+
+    // DECLARATION HANDLER DELEGATIONS
+
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void elementDecl (String name, String model)
+    throws SAXException
+    {
+	if (declNext != null)
+	    declNext.elementDecl (name, model);
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void attributeDecl (String eName, String aName,
+	    String type, String mode, String value)
+    throws SAXException
+    {
+	if (declNext != null)
+	    declNext.attributeDecl (eName, aName, type, mode, value);
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void externalEntityDecl (String name,
+    	String publicId, String systemId)
+    throws SAXException
+    {
+	if (declNext != null)
+	    declNext.externalEntityDecl (name, publicId, systemId);
+    }
+
+    /** <b>SAX2:</b> passes this callback to the next consumer, if any */
+    public void internalEntityDecl (String name, String value)
+    throws SAXException
+    {
+	if (declNext != null)
+	    declNext.internalEntityDecl (name, value);
+    }
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/LinkFilter.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/LinkFilter.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/LinkFilter.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/LinkFilter.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,242 @@
+/* LinkFilter.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.pipeline;
+
+import java.io.IOException;
+import java.net.URL; 
+import java.util.Enumeration;
+import java.util.Vector;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+
+/**
+ * Pipeline filter to remember XHTML links found in a document,
+ * so they can later be crawled.  Fragments are not counted, and duplicates
+ * are ignored.  Callers are responsible for filtering out URLs they aren't
+ * interested in.  Events are passed through unmodified.
+ *
+ * <p> Input MUST include a setDocumentLocator() call, as it's used to
+ * resolve relative links in the absence of a "base" element.  Input MUST
+ * also include namespace identifiers, since it is the XHTML namespace
+ * identifier which is used to identify the relevant elements.
+ *
+ * <p><em>FIXME:</em> handle xml:base attribute ... in association with
+ * a stack of base URIs.  Similarly, recognize/support XLink data.
+ *
+ * @author David Brownell
+ */
+public class LinkFilter extends EventFilter
+{
+    // for storing URIs
+    private Vector		vector = new Vector ();
+
+	// struct for "full" link record (tbd)
+	// these for troubleshooting original source:
+	//	original uri
+	//	uri as resolved (base, relative, etc)
+	//	URI of originating doc
+	//	line #
+	//	original element + attrs (img src, desc, etc)
+
+	// XLink model of the link ... for inter-site pairups ?
+
+    private String		baseURI;
+
+    private boolean		siteRestricted = false;
+
+    //
+    // XXX leverage blacklist info (like robots.txt)
+    //
+    // XXX constructor w/param ... pipeline for sending link data
+    // probably XHTML --> XLink, providing info as sketched above
+    //
+
+
+    /**
+     * Constructs a new event filter, which collects links in private data
+     * structure for later enumeration.
+     */
+	// constructor used by PipelineFactory
+    public LinkFilter ()
+    {
+	super.setContentHandler (this);
+    }
+
+
+    /**
+     * Constructs a new event filter, which collects links in private data
+     * structure for later enumeration and passes all events, unmodified,
+     * to the next consumer.
+     */
+	// constructor used by PipelineFactory
+    public LinkFilter (EventConsumer next)
+    {
+	super (next);
+	super.setContentHandler (this);
+    }
+
+
+    /**
+     * Returns an enumeration of the links found since the filter
+     * was constructed, or since removeAllLinks() was called.
+     *
+     * @return enumeration of strings.
+     */
+    public Enumeration getLinks ()
+    {
+	return vector.elements ();
+    }
+
+    /**
+     * Removes records about all links reported to the event
+     * stream, as if the filter were newly created.
+     */
+    public void removeAllLinks ()
+    {
+	vector = new Vector ();
+    }
+
+
+    /**
+     * Collects URIs for (X)HTML content from elements which hold them.
+     */
+    public void startElement (
+	String		uri,
+	String		localName,
+	String		qName,
+	Attributes	atts
+    ) throws SAXException
+    {
+	String	link;
+
+	// Recognize XHTML links.
+	if ("http://www.w3.org/1999/xhtml".equals (uri)) {
+
+	    if ("a".equals (localName) || "base".equals (localName)
+		    || "area".equals (localName))
+		link = atts.getValue ("href");
+	    else if ("iframe".equals (localName) || "frame".equals (localName))
+		link = atts.getValue ("src");
+	    else if ("blockquote".equals (localName) || "q".equals (localName)
+		    || "ins".equals (localName) || "del".equals (localName))
+		link = atts.getValue ("cite");
+	    else
+		link = null;
+	    link = maybeAddLink (link);
+
+	    // "base" modifies designated baseURI
+	    if ("base".equals (localName) && link != null)
+		baseURI = link;
+
+	    if ("iframe".equals (localName) || "img".equals (localName))
+		maybeAddLink (atts.getValue ("longdesc"));
+	}
+	
+	super.startElement (uri, localName, qName, atts);
+    }
+
+    private String maybeAddLink (String link)
+    {
+	int		index;
+
+	// ignore empty links and fragments inside docs
+	if (link == null)
+	    return null;
+	if ((index = link.indexOf ("#")) >= 0)
+	    link = link.substring (0, index);
+	if (link.equals (""))
+	    return null;
+
+	try {
+	    // get the real URI
+	    URL		base = new URL ((baseURI != null)
+				    ? baseURI
+				    : getDocumentLocator ().getSystemId ());
+	    URL		url = new URL (base, link);
+
+	    link = url.toString ();
+
+	    // ignore duplicates
+	    if (vector.contains (link))
+		return link;
+
+	    // other than what "base" does, stick to original site:
+	    if (siteRestricted) {
+		// don't switch protocols
+		if (!base.getProtocol ().equals (url.getProtocol ()))
+		    return link;
+		// don't switch servers
+		if (base.getHost () != null
+			&& !base.getHost ().equals (url.getHost ()))
+		    return link;
+	    }
+
+	    vector.addElement (link);
+
+	    return link;
+	    
+	} catch (IOException e) {
+	    // bad URLs we don't want
+	}
+	return null;
+    }
+
+    /**
+     * Reports an error if no Locator has been made available.
+     */
+    public void startDocument ()
+    throws SAXException
+    {
+	if (getDocumentLocator () == null)
+	    throw new SAXException ("no Locator!");
+    }
+
+    /**
+     * Forgets about any base URI information that may be recorded.
+     * Applications will often want to call removeAllLinks(), likely
+     * after examining the links which were reported.
+     */
+    public void endDocument ()
+    throws SAXException
+    {
+	baseURI = null;
+	super.endDocument ();
+    }
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/NSFilter.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/NSFilter.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/NSFilter.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/NSFilter.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,341 @@
+/* NSFilter.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.pipeline;
+
+import java.util.Enumeration;
+import java.util.Stack;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.AttributesImpl;
+import org.xml.sax.helpers.NamespaceSupport;
+
+/**
+ * This filter ensures that element and attribute names are properly prefixed,
+ * and that such prefixes are declared.  Such data is critical for operations
+ * like writing XML text, and validating against DTDs:  names or their prefixes
+ * may have been discarded, although they are essential to the exchange of
+ * information using XML.  There are various common ways that such data
+ * gets discarded: <ul>
+ *
+ *	<li> By default, SAX2 parsers must discard the "xmlns*"
+ *	attributes, and may also choose not to report properly prefixed
+ *	names for elements or attributes.  (Some parsers may support
+ *	changing the <em>namespace-prefixes</em> value from the default
+ *	to <em>true</em>, effectively eliminating the need to use this
+ *	filter on their output.)
+ *
+ *	<li> When event streams are generated from a DOM tree, they may
+ *	have never have had prefixes or declarations for namespaces; or
+ *	the existing prefixes or declarations may have been invalidated
+ *	by structural modifications to that DOM tree.
+ *
+ *	<li> Other software writing SAX event streams won't necessarily
+ *	be worrying about prefix management, and so they will need to
+ *	have a transparent solution for managing them.
+ *
+ *	</ul>
+ *
+ * <p> This filter uses a heuristic to choose the prefix to assign to any
+ * particular name which wasn't already corectly prefixed.  The associated
+ * namespace will be correct, and the prefix will be declared.  Original
+ * structures facilitating text editing, such as conventions about use of
+ * mnemonic prefix names or the scoping of prefixes, can't always be
+ * reconstructed after they are discarded, as strongly encouraged by the
+ * current SAX2 defaults.
+ *
+ * <p> Note that this can't possibly know whether values inside attribute
+ * value or document content involve prefixed names.  If your application
+ * requires using prefixed names in such locations you'll need to add some
+ * appropriate logic (perhaps adding additional heuristics in a subclass).
+ *
+ * @author David Brownell
+ */
+public class NSFilter extends EventFilter
+{
+    private NamespaceSupport	nsStack = new NamespaceSupport ();
+    private Stack		elementStack = new Stack ();
+
+    private boolean		pushedContext;
+    private String		nsTemp [] = new String [3];
+    private AttributesImpl	attributes = new AttributesImpl ();
+    private boolean		usedDefault;
+
+    // gensymmed prefixes use this root name
+    private static final String	prefixRoot = "prefix-";
+
+    
+    /**
+     * Passes events through to the specified consumer, after first
+     * processing them.
+     *
+     * @param next the next event consumer to receive events.
+     */
+	// constructor used by PipelineFactory
+    public NSFilter (EventConsumer next)
+    {
+	super (next);
+
+	setContentHandler (this);
+    }
+
+    private void fatalError (String message)
+    throws SAXException
+    {
+	SAXParseException	e;
+	ErrorHandler		handler = getErrorHandler ();
+	Locator			locator = getDocumentLocator ();
+
+	if (locator == null)
+	    e = new SAXParseException (message, null, null, -1, -1);
+	else
+	    e = new SAXParseException (message, locator);
+	if (handler != null)
+	    handler.fatalError (e);
+	throw e;
+    }
+
+
+    public void startDocument () throws SAXException
+    {
+	elementStack.removeAllElements ();
+	nsStack.reset ();
+	pushedContext = false;
+	super.startDocument ();
+    }
+
+    /**
+     * This call is not passed to the next consumer in the chain.
+     * Prefix declarations and scopes are only exposed in the form
+     * of attributes; this callback just records a declaration that
+     * will be exposed as an attribute.
+     */
+    public void startPrefixMapping (String prefix, String uri)
+    throws SAXException
+    {
+	if (pushedContext == false) {
+	    nsStack.pushContext ();
+	    pushedContext = true;
+	}
+
+	// this check is awkward, but the paranoia prevents big trouble
+	for (Enumeration e = nsStack.getDeclaredPrefixes ();
+		e.hasMoreElements ();
+		/* NOP */ ) {
+	    String	declared = (String) e.nextElement ();
+
+	    if (!declared.equals (prefix))
+		continue;
+	    if (uri.equals (nsStack.getURI (prefix)))
+		return;
+	    fatalError ("inconsistent binding for prefix '" + prefix
+		+ "' ... " + uri + " (was " + nsStack.getURI (prefix) + ")");
+	}
+
+	if (!nsStack.declarePrefix (prefix, uri))
+	    fatalError ("illegal prefix declared: " + prefix);
+    }
+
+    private String fixName (String ns, String l, String name, boolean isAttr)
+    throws SAXException
+    {
+	if ("".equals (name) || name == null) {
+	    name = l;
+	    if ("".equals (name) || name == null)
+		fatalError ("empty/null name");
+	}
+
+	// can we correctly process the name as-is?
+	// handles "element scope" attribute names here.
+	if (nsStack.processName (name, nsTemp, isAttr) != null
+		&& nsTemp [0].equals (ns)
+		) {
+	    return nsTemp [2];
+	}
+
+	// nope, gotta modify the name or declare a default mapping
+	int	temp;
+
+	// get rid of any current prefix
+	if ((temp = name.indexOf (':')) >= 0) {
+	    name = name.substring (temp + 1);
+
+	    // ... maybe that's enough (use/prefer default namespace) ...
+	    if (!isAttr && nsStack.processName (name, nsTemp, false) != null
+		    && nsTemp [0].equals (ns)
+		    ) {
+		return nsTemp [2];
+	    }
+	}
+
+	// must we define and use the default/undefined prefix?
+	if ("".equals (ns)) {
+	    if (isAttr)
+		fatalError ("processName bug");
+	    if (attributes.getIndex ("xmlns") != -1)
+		fatalError ("need to undefine default NS, but it's bound: "
+			+ attributes.getValue ("xmlns"));
+	    
+	    nsStack.declarePrefix ("", "");
+	    attributes.addAttribute ("", "", "xmlns", "CDATA", "");
+	    return name;
+	}
+
+	// is there at least one non-null prefix we can use?
+	for (Enumeration e = nsStack.getDeclaredPrefixes ();
+		e.hasMoreElements ();
+		/* NOP */) {
+	    String prefix = (String) e.nextElement ();
+	    String uri = nsStack.getURI (prefix);
+
+	    if (uri == null || !uri.equals (ns))
+		continue;
+	    return prefix + ":" + name;
+	}
+
+	// no such luck.  create a prefix name, declare it, use it.
+	for (temp = 0; temp >= 0; temp++) {
+	    String	prefix = prefixRoot + temp;
+
+	    if (nsStack.getURI (prefix) == null) {
+		nsStack.declarePrefix (prefix, ns);
+		attributes.addAttribute ("", "", "xmlns:" + prefix,
+			"CDATA", ns);
+		return prefix + ":" + name;
+	    }
+	}
+	fatalError ("too many prefixes genned");
+	// NOTREACHED
+	return null;
+    }
+
+    public void startElement (
+	String uri, String localName,
+	String qName, Attributes atts
+    ) throws SAXException
+    {
+	if (!pushedContext)
+	    nsStack.pushContext ();
+	pushedContext = false;
+
+	// make sure we have all NS declarations handy before we start
+	int	length = atts.getLength ();
+
+	for (int i = 0; i < length; i++) {
+	    String	aName = atts.getQName (i);
+
+	    if (!aName.startsWith ("xmlns"))
+		continue;
+
+	    String	prefix;
+
+	    if ("xmlns".equals (aName))
+		prefix = "";
+	    else if (aName.indexOf (':') == 5)
+		prefix = aName.substring (6);
+	    else	// "xmlnsfoo" etc.
+		continue;
+	    startPrefixMapping (prefix, atts.getValue (i));
+	}
+
+	// put namespace decls at the start of our regenned attlist
+	attributes.clear ();
+	for (Enumeration e = nsStack.getDeclaredPrefixes ();
+		e.hasMoreElements ();
+		/* NOP */) {
+	    String prefix = (String) e.nextElement ();
+
+	    attributes.addAttribute ("", "",
+		    ("".equals (prefix)
+			? "xmlns"
+			: "xmlns:" + prefix),
+		    "CDATA",
+		    nsStack.getURI (prefix));
+	}
+
+	// name fixups:  element, then attributes.
+	// fixName may declare a new prefix or, for the element,
+	// redeclare the default (if element name needs it).
+	qName = fixName (uri, localName, qName, false);
+
+	for (int i = 0; i < length; i++) {
+	    String	aName = atts.getQName (i);
+	    String	aNS = atts.getURI (i);
+	    String	aLocal = atts.getLocalName (i);
+	    String	aType = atts.getType (i);
+	    String	aValue = atts.getValue (i);
+
+	    if (aName.startsWith ("xmlns"))
+		continue;
+	    aName = fixName (aNS, aLocal, aName, true);
+	    attributes.addAttribute (aNS, aLocal, aName, aType, aValue);
+	}
+
+	elementStack.push (qName);
+
+	// pass event along, with cleaned-up names and decls.
+	super.startElement (uri, localName, qName, attributes);
+    }
+
+    public void endElement (String uri, String localName, String qName)
+    throws SAXException
+    {
+	nsStack.popContext ();
+	qName = (String) elementStack.pop ();
+	super.endElement (uri, localName, qName);
+    }
+
+    /**
+     * This call is not passed to the next consumer in the chain.
+     * Prefix declarations and scopes are only exposed in their
+     * attribute form.
+     */
+    public void endPrefixMapping (String prefix)
+    throws SAXException
+	{ }
+
+    public void endDocument () throws SAXException
+    {
+	elementStack.removeAllElements ();
+	nsStack.reset ();
+	super.endDocument ();
+    }
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/PipelineFactory.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/PipelineFactory.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/PipelineFactory.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/PipelineFactory.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,723 @@
+/* PipelineFactory.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.pipeline;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.lang.reflect.Constructor;
+import java.util.StringTokenizer;
+
+import org.xml.sax.*;
+import org.xml.sax.ext.*;
+
+
+/**
+ * This provides static factory methods for creating simple event pipelines.
+ * These pipelines are specified by strings, suitable for passing on
+ * command lines or embedding in element attributes.  For example, one way
+ * to write a pipeline that restores namespace syntax, validates (stopping
+ * the pipeline on validity errors) and then writes valid data to standard
+ * output is this: <pre>
+ *      nsfix | validate | write ( stdout )</pre>
+ *
+ * <p> In this syntax, the tokens are always separated by whitespace, and each
+ * stage of the pipeline may optionally have a parameter (which can be a
+ * pipeline) in parentheses.  Interior stages are called filters, and the
+ * rightmost end of a pipeline is called a terminus.
+ *
+ * <p> Stages are usually implemented by a single class, which may not be
+ * able to act as both a filter and a terminus; but any terminus can be
+ * automatically turned into a filter, through use of a {@link TeeConsumer}.
+ * The stage identifiers are either class names, or are one of the following
+ * short identifiers built into this class.  (Most of these identifiers are
+ * no more than aliases for classes.)  The built-in identifiers include:</p>
+ 
+ <table border="1" cellpadding="3" cellspacing="0">
+    <tr bgcolor="#ccccff" class="TableHeadingColor">
+	<th align="center" width="5%">Stage</th>
+	<th align="center" width="9%">Parameter</th>
+	<th align="center" width="1%">Terminus</th>
+	<th align="center">Description</th>
+    </tr>
+
+    <tr valign="top" align="center">
+	<td><a href="../dom/Consumer.html">dom</a></td>
+	<td><em>none</em></td>
+	<td> yes </td>
+	<td align="left"> Applications code can access a DOM Document built
+	from the input event stream.  When used as a filter, this buffers
+	data up to an <em>endDocument</em> call, and then uses a DOM parser
+	to report everything that has been recorded (which can easily be
+	less than what was reported to it).  </td>
+    </tr>
+    <tr valign="top" align="center">
+	<td><a href="NSFilter.html">nsfix</a></td>
+	<td><em>none</em></td>
+	<td>no</td>
+	<td align="left">This stage ensures that the XML element and attribute
+	names in its output use namespace prefixes and declarations correctly.
+	That is, so that they match the "Namespace plus LocalName" naming data
+	with which each XML element and attribute is already associated.  </td>
+    </tr>
+    <tr valign="top" align="center">
+	<td><a href="EventFilter.html">null</a></td>
+	<td><em>none</em></td>
+	<td>yes</td>
+	<td align="left">This stage ignores all input event data.</td>
+    </tr>
+    <tr valign="top" align="center">
+	<td><a href="CallFilter.html">server</a></td>
+	<td><em>required</em><br> server URL </td>
+	<td>no</td>
+	<td align="left">Sends its input as XML request to a remote server,
+	normally a web application server using the HTTP or HTTPS protocols.
+	The output of this stage is the parsed response from that server.</td>
+    </tr>
+    <tr valign="top" align="center">
+	<td><a href="TeeConsumer.html">tee</a></td>
+	<td><em>required</em><br> first pipeline</td>
+	<td>no</td>
+	<td align="left">This sends its events down two paths; its parameter
+	is a pipeline descriptor for the first path, and the second path
+	is the output of this stage.</td>
+    </tr>
+
+    <tr valign="top" align="center">
+	<td><a href="ValidationConsumer.html">validate</a></td>
+	<td><em>none</em></td>
+	<td>yes</td>
+	<td align="left">This checks for validity errors, and reports them
+	through its error handler.  The input must include declaration events
+	and some lexical events.  </td>
+    </tr>
+    <tr valign="top" align="center">
+	<td><a href="WellFormednessFilter.html">wf</a></td>
+	<td><em>none</em></td>
+	<td>yes</td>
+	<td align="left"> This class provides some basic "well formedness"
+	tests on the input event stream, and reports a fatal error if any
+	of them fail.  One example: start/end calls for elements must match.
+	No SAX parser is permitted to produce malformed output, but other
+	components can easily do so.</td>
+    </tr>
+    <tr valign="top" align="center">
+	<td>write</td>
+	<td><em>required</em><br> "stdout", "stderr", or filename</td>
+	<td>yes</td>
+	<td align="left"> Writes its input to the specified output, as pretty
+	printed XML text encoded using UTF-8.  Input events must be well
+	formed and "namespace fixed", else the output won't be XML (or possibly
+	namespace) conformant.  The symbolic names represent
+	<em>System.out</em> and <em>System.err</em> respectively; names must
+	correspond to files which don't yet exist.</td>
+    </tr>
+    <tr valign="top" align="center">
+	<td>xhtml</td>
+	<td><em>required</em><br> "stdout", "stderr", or filename</td>
+	<td>yes</td>
+	<td align="left"> Like <em>write</em> (above), except that XHTML rules
+	are followed.  The XHTML 1.0 Transitional document type is declared,
+	and only ASCII characters are written (for interoperability).  Other
+	characters are written as entity or character references; the text is
+	pretty printed.</td>
+    </tr>
+    <tr valign="top" align="center">
+	<td><a href="XIncludeFilter.html">xinclude</a></td>
+	<td><em>none</em></td>
+	<td>no</td>
+	<td align="left">This stage handles XInclude processing.
+	This is like entity inclusion, except that the included content
+	is declared in-line rather than in the DTD at the beginning of
+	a document.
+	</td>
+    </tr>
+    <tr valign="top" align="center">
+	<td><a href="XsltFilter.html">xslt</a></td>
+	<td><em>required</em><br> XSLT stylesheet URI</td>
+	<td>no</td>
+	<td align="left">This stage handles XSLT transformation
+	according to a stylesheet.
+	The implementation of the transformation may not actually
+	stream data, although if such an XSLT engine is in use
+	then that can happen.
+	</td>
+    </tr>
+
+ </table>
+ 
+ * <p> Note that {@link EventFilter#bind} can automatically eliminate
+ * some filters by setting SAX2 parser features appropriately.  This means
+ * that you can routinely put filters like "nsfix", "validate", or "wf" at the
+ * front of a pipeline (for components that need inputs conditioned to match
+ * that level of correctness), and know that it won't actually be used unless
+ * it's absolutely necessary.
+ *
+ * @author David Brownell
+ */
+public class PipelineFactory
+{
+    /**
+     * Creates a simple pipeline according to the description string passed in.
+     */
+    public static EventConsumer createPipeline (String description)
+    throws IOException
+    {
+	return createPipeline (description, null);
+    }
+
+    /**
+     * Extends an existing pipeline by prepending the filter pipeline to the
+     * specified consumer.  Some pipelines need more customization than can
+     * be done through this simplified syntax.  When they are set up with
+     * direct API calls, use this method to merge more complex pipeline
+     * segments with easily configured ones.
+     */
+    public static EventConsumer createPipeline (
+	String		description,
+	EventConsumer	next
+    ) throws IOException
+    {
+	// tokens are (for now) what's separated by whitespace;
+	// very easy to parse, but IDs never have spaces.
+
+	StringTokenizer		tokenizer;
+	String			tokens [];
+
+	tokenizer = new StringTokenizer (description);
+	tokens = new String [tokenizer.countTokens ()];
+	for (int i = 0; i < tokens.length; i++)
+	    tokens [i] = tokenizer.nextToken ();
+
+	PipelineFactory		factory = new PipelineFactory ();
+	Pipeline		pipeline = factory.parsePipeline (tokens, next);
+
+	return pipeline.createPipeline ();
+    }
+
+
+    private PipelineFactory () { /* NYET */ }
+
+
+    /**
+     * Extends an existing pipeline by prepending a pre-tokenized filter
+     * pipeline to the specified consumer.  Tokens are class names (or the
+     * predefined aliases) left and right parenthesis, and the vertical bar.
+     */
+    public static EventConsumer createPipeline (
+	String		tokens [],
+	EventConsumer	next
+    ) throws IOException
+    {
+	PipelineFactory		factory = new PipelineFactory ();
+	Pipeline		pipeline = factory.parsePipeline (tokens, next);
+
+	return pipeline.createPipeline ();
+    }
+
+
+    private String		tokens [];
+    private int			index;
+
+    private Pipeline parsePipeline (String toks [], EventConsumer next)
+    {
+	tokens = toks;
+	index = 0;
+	
+	Pipeline retval = parsePipeline (next);
+
+	if (index != toks.length)
+	    throw new ArrayIndexOutOfBoundsException (
+		    "extra token: " + tokens [index]);
+	return retval;
+    }
+
+    // pipeline  ::= stage | stage '|' pipeline
+    private Pipeline parsePipeline (EventConsumer next)
+    {
+	Pipeline	retval = new Pipeline (parseStage ());
+
+	// minimal pipelines:  "stage" and "... | id"
+	if (index > (tokens.length - 2)
+		|| !"|".equals (tokens [index])
+		) {
+	    retval.next = next;
+	    return retval;
+	}
+	index++;
+	retval.rest = parsePipeline (next);
+	return retval;
+    }
+
+    // stage     ::= id    | id '(' pipeline ')'
+    private Stage parseStage ()
+    {
+	Stage		retval = new Stage (tokens [index++]);
+
+	// minimal stages:  "id" and "id ( id )"
+	if (index > (tokens.length - 2)
+		|| !"(".equals (tokens [index]) /*)*/
+		)
+	    return retval;
+	
+	index++;
+	retval.param = parsePipeline (null);
+	if (index >= tokens.length)
+	    throw new ArrayIndexOutOfBoundsException (
+		    "missing right paren");
+	if (/*(*/ !")".equals (tokens [index++]))
+	    throw new ArrayIndexOutOfBoundsException (
+		    "required right paren, not: " + tokens [index - 1]);
+	return retval;
+    }
+
+
+    //
+    // these classes obey the conventions for constructors, so they're
+    // only built in to this table of shortnames
+    //
+    //	- filter (one or two types of arglist)
+    //	   * last constructor is 'next' element
+    //	   * optional (first) string parameter
+    //
+    //	- terminus (one or types of arglist)
+    //	   * optional (only) string parameter
+    //
+    // terminus stages are transformed into filters if needed, by
+    // creating a "tee".  filter stages aren't turned to terminus
+    // stages though; either eliminate such stages, or add some
+    // terminus explicitly.
+    //
+    private static final String builtinStages [][] = {
+	{ "dom",	"gnu.xml.dom.Consumer" },
+	{ "nsfix",	"gnu.xml.pipeline.NSFilter" },
+	{ "null",	"gnu.xml.pipeline.EventFilter" },
+	{ "server",	"gnu.xml.pipeline.CallFilter" },
+	{ "tee",	"gnu.xml.pipeline.TeeConsumer" },
+	{ "validate",	"gnu.xml.pipeline.ValidationConsumer" },
+	{ "wf",		"gnu.xml.pipeline.WellFormednessFilter" },
+	{ "xinclude",	"gnu.xml.pipeline.XIncludeFilter" },
+	{ "xslt",	"gnu.xml.pipeline.XsltFilter" },
+
+// XXX want:  option for validate, to preload external part of a DTD
+
+	    //	xhtml, write ... nyet generic-ready
+    };
+
+    private static class Stage
+    {
+	String		id;
+	Pipeline	param;
+
+	Stage (String name)
+	    {  id = name; }
+
+	public String toString ()
+	{
+	    if (param == null)
+		return id;
+	    return id + " ( " + param + " )";
+	}
+
+	private void fail (String message)
+	throws IOException
+	{
+	    throw new IOException ("in '" + id
+		    + "' stage of pipeline, " + message);
+	}
+
+	EventConsumer createStage (EventConsumer next)
+	throws IOException
+	{
+	    String	 name = id;
+
+	    // most builtins are just class aliases
+	    for (int i = 0; i < builtinStages.length; i++) {
+		if (id.equals (builtinStages [i][0])) {
+		    name = builtinStages [i][1];
+		    break;
+		}
+	    }
+
+	    // Save output as XML or XHTML text
+	    if ("write".equals (name) || "xhtml".equals (name)) {
+		String		filename;
+		boolean		isXhtml = "xhtml".equals (name);
+		OutputStream	out = null;
+		TextConsumer	consumer;
+
+		if (param == null)
+		    fail ("parameter is required");
+
+		filename = param.toString ();
+		if ("stdout".equals (filename))
+		    out = System.out;
+		else if ("stderr".equals (filename))
+		    out = System.err;
+		else {
+		    File f = new File (filename);
+
+/*
+		    if (!f.isAbsolute ())
+			fail ("require absolute file paths");
+ */
+		    if (f.exists ())
+			fail ("file already exists: " + f.getName ());
+
+// XXX this races against the existence test
+		    out = new FileOutputStream (f);
+		}
+		
+		if (!isXhtml)
+		    consumer = new TextConsumer (out);
+		else
+		    consumer = new TextConsumer (
+			new OutputStreamWriter (out, "8859_1"),
+			true);
+		
+		consumer.setPrettyPrinting (true);
+		if (next == null)
+		    return consumer;
+		return new TeeConsumer (consumer, next);
+
+	    } else {
+		//
+		// Here go all the builtins that are just aliases for
+		// classes, and all stage IDs that started out as such
+		// class names.  The following logic relies on several
+		// documented conventions for constructor invocation.
+		//
+		String		msg = null;
+
+		try {
+		    Class	klass = Class.forName (name);
+		    Class	argTypes [] = null;
+		    Constructor	constructor = null;
+		    boolean	filter = false;
+		    Object	params [] = null;
+		    Object	obj = null;
+
+		    // do we need a filter stage?
+		    if (next != null) {
+			// "next" consumer is always passed, with
+			// or without the optional string param
+			if (param == null) {
+			    argTypes = new Class [1];
+			    argTypes [0] = EventConsumer.class;
+
+			    params = new Object [1];
+			    params [0] = next;
+
+			    msg = "no-param filter";
+			} else {
+			    argTypes = new Class [2];
+			    argTypes [0] = String.class;
+			    argTypes [1] = EventConsumer.class;
+
+			    params = new Object [2];
+			    params [0] = param.toString ();
+			    params [1] = next;
+
+			    msg = "one-param filter";
+			}
+
+
+			try {
+			    constructor = klass.getConstructor (argTypes);
+			} catch (NoSuchMethodException e) {
+			    // try creating a filter from a
+			    // terminus and a tee
+			    filter = true;
+			    msg += " built from ";
+			}
+		    }
+
+		    // build from a terminus stage, with or
+		    // without the optional string param
+		    if (constructor == null) {
+			String	tmp;
+
+			if (param == null) {
+			    argTypes = new Class [0];
+			    params = new Object [0];
+
+			    tmp = "no-param terminus";
+			} else {
+			    argTypes = new Class [1];
+			    argTypes [0] = String.class;
+
+			    params = new Object [1];
+			    params [0] = param.toString ();
+
+			    tmp = "one-param terminus";
+			}
+			if (msg == null)
+			    msg = tmp;
+			else
+			    msg += tmp;
+			constructor = klass.getConstructor (argTypes);
+			    // NOT creating terminus by dead-ending
+			    // filters ... users should think about
+			    // that one, something's likely wrong
+		    }
+		    
+		    obj = constructor.newInstance (params);
+
+		    // return EventConsumers directly, perhaps after
+		    // turning them into a filter
+		    if (obj instanceof EventConsumer) {
+			if (filter)
+			    return new TeeConsumer ((EventConsumer) obj, next);
+			return (EventConsumer) obj;
+		    }
+		    
+		    // if it's not a handler, it's an error
+		    // we can wrap handlers in a filter
+		    EventFilter		retval = new EventFilter ();
+		    boolean		updated = false;
+
+		    if (obj instanceof ContentHandler) {
+			retval.setContentHandler ((ContentHandler) obj);
+			updated = true;
+		    }
+		    if (obj instanceof DTDHandler) {
+			retval.setDTDHandler ((DTDHandler) obj);
+			updated = true;
+		    }
+		    if (obj instanceof LexicalHandler) {
+			retval.setProperty (
+			    EventFilter.PROPERTY_URI + "lexical-handler",
+			    obj);
+			updated = true;
+		    }
+		    if (obj instanceof DeclHandler) {
+			retval.setProperty (
+			    EventFilter.PROPERTY_URI + "declaration-handler",
+			    obj);
+			updated = true;
+		    }
+
+		    if (!updated)
+			fail ("class is neither Consumer nor Handler");
+		    
+		    if (filter)
+			return new TeeConsumer (retval, next);
+		    return retval;
+
+		} catch (IOException e) {
+		    throw e;
+
+		} catch (NoSuchMethodException e) {
+		    fail (name + " constructor missing -- " + msg);
+
+		} catch (ClassNotFoundException e) {
+		    fail (name + " class not found");
+
+		} catch (Exception e) {
+		    // e.printStackTrace ();
+		    fail ("stage not available: " + e.getMessage ());
+		}
+	    }
+	    // NOTREACHED
+	    return null;
+	}
+    }
+
+    private static class Pipeline
+    {
+	Stage		stage;
+
+	// rest may be null
+	Pipeline	rest;
+	EventConsumer	next;
+
+	Pipeline (Stage s)
+	    { stage = s; }
+
+	public String toString ()
+	{
+	    if (rest == null && next == null)
+		return stage.toString ();
+	    if (rest != null)
+		return stage + " | " + rest;
+	    throw new IllegalArgumentException ("next");
+	}
+
+	EventConsumer createPipeline ()
+	throws IOException
+	{
+	    if (next == null) {
+		if (rest == null)
+		    next = stage.createStage (null);
+		else
+		    next = stage.createStage (rest.createPipeline ());
+	    }
+	    return next;
+	}
+    }
+
+/*
+    public static void main (String argv [])
+    {
+	try {
+	    // three basic terminus cases
+	    createPipeline ("null");
+	    createPipeline ("validate");
+	    createPipeline ("write ( stdout )");
+
+	    // four basic filters
+	    createPipeline ("nsfix | write ( stderr )");
+	    createPipeline ("wf | null");
+	    createPipeline ("null | null");
+	    createPipeline (
+"call ( http://www.example.com/services/xml-1a ) | xhtml ( stdout )");
+
+	    // tee junctions
+	    createPipeline ("tee ( validate ) | write ( stdout )");
+	    createPipeline ("tee ( nsfix | write ( stdout ) ) | validate");
+
+	    // longer pipeline
+	    createPipeline ("nsfix | tee ( validate ) | write ( stdout )");
+	    createPipeline (
+		"null | wf | nsfix | tee ( validate ) | write ( stdout )");
+
+	    // try some parsing error cases
+	    try {
+		createPipeline ("null (");		// extra token '('
+		System.err.println ("** didn't report error");
+	    } catch (Exception e) {
+		System.err.println ("== err: " + e.getMessage ()); }
+
+	    try {
+		createPipeline ("nsfix |");		// extra token '|'
+		System.err.println ("** didn't report error");
+	    } catch (Exception e) {
+		System.err.println ("== err: " + e.getMessage ()); }
+
+	    try {
+		createPipeline ("xhtml ( foo");		// missing right paren
+		System.err.println ("** didn't report error");
+	    } catch (Exception e) {
+		System.err.println ("== err: " + e.getMessage ()); }
+
+	    try {
+		createPipeline ("xhtml ( foo bar");	// required right paren
+		System.err.println ("** didn't report error");
+	    } catch (Exception e) {
+		System.err.println ("== err: " + e.getMessage ()); }
+
+	    try {
+		createPipeline ("tee ( nsfix | validate");// missing right paren
+		System.err.println ("** didn't report error");
+	    } catch (Exception e) {
+		System.err.println ("== err: " + e.getMessage ()); }
+
+	    // try some construction error cases
+
+	    try {
+		createPipeline ("call");		// missing param
+		System.err.println ("** didn't report error");
+	    } catch (Exception e) {
+		System.err.println ("== err: " + e.getMessage ()); }
+	    try {
+		createPipeline ("call ( foobar )");	// broken param
+		System.err.println ("** didn't report error");
+	    } catch (Exception e) {
+		System.err.println ("== err: " + e.getMessage ()); }
+	    try {
+		createPipeline ("nsfix ( foobar )");	// illegal param
+		System.err.println ("** didn't report error");
+	    } catch (Exception e) {
+		System.err.println ("== err: " + e.getMessage ()); }
+	    try {
+		createPipeline ("null ( foobar )");	// illegal param
+		System.err.println ("** didn't report error");
+	    } catch (Exception e) {
+		System.err.println ("== err: " + e.getMessage ()); }
+	    try {
+		createPipeline ("wf ( foobar )");	// illegal param
+		System.err.println ("** didn't report error");
+	    } catch (Exception e) {
+		System.err.println ("== err: " + e.getMessage ()); }
+	    try {
+		createPipeline ("xhtml ( foobar.html )");
+		new File ("foobar.html").delete ();
+		// now supported
+	    } catch (Exception e) {
+		System.err.println ("** err: " + e.getMessage ()); }
+	    try {
+		createPipeline ("xhtml");		// missing param
+		System.err.println ("** didn't report error");
+	    } catch (Exception e) {
+		System.err.println ("== err: " + e.getMessage ()); }
+	    try {
+		createPipeline ("write ( stdout ) | null");	// nonterminal
+		System.err.println ("** didn't report error");
+	    } catch (Exception e) {
+		System.err.println ("== err: " + e.getMessage ()); }
+	    try {
+		createPipeline ("validate | null");
+		// now supported
+	    } catch (Exception e) {
+		System.err.println ("** err: " + e.getMessage ()); }
+	    try {
+		createPipeline ("validate ( foo )");	// illegal param
+		System.err.println ("** didn't report error");
+	    } catch (Exception e) {
+		System.err.println ("== err: " + e.getMessage ()); }
+	    try {
+		createPipeline ("tee");			// missing param
+		System.err.println ("** didn't report error");
+	    } catch (Exception e) {
+		System.err.println ("== err: " + e.getMessage ()); }
+	    try {
+		    // only builtins so far
+		createPipeline ("com.example.xml.FilterClass");
+		System.err.println ("** didn't report error");
+	    } catch (Exception e) {
+		System.err.println ("== err: " + e.getMessage ()); }
+
+	} catch (Exception e) {
+	    e.printStackTrace ();
+	}
+    }
+/**/
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/TeeConsumer.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/TeeConsumer.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/TeeConsumer.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/TeeConsumer.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,417 @@
+/* TeeConsumer.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.pipeline;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.DTDHandler;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.ext.DeclHandler;
+import org.xml.sax.ext.LexicalHandler;
+
+/**
+ * Fans its events out to two other consumers, a "tee" filter stage in an
+ * event pipeline.  Networks can be assembled with multiple output points.
+ *
+ * <p> Error handling should be simple if you remember that exceptions
+ * you throw will cancel later stages in that callback's pipeline, and
+ * generally the producer will stop if it sees such an exception.  You
+ * may want to protect your pipeline against such backflows, making a
+ * kind of reverse filter (or valve?) so that certain exceptions thrown by
+ * your pipeline will caught and handled before the producer sees them.
+ * Just use a "try/catch" block, rememebering that really important
+ * cleanup tasks should be in "finally" clauses.
+ *
+ * <p> That issue isn't unique to "tee" consumers, but tee consumers have
+ * the additional twist that exceptions thrown by the first consumer
+ * will cause the second consumer not to see the callback (except for
+ * the endDocument callback, which signals state cleanup).
+ *
+ * @author David Brownell
+ */
+final public class TeeConsumer
+	implements EventConsumer,
+		ContentHandler, DTDHandler,
+		LexicalHandler,DeclHandler
+{
+    private EventConsumer	first, rest;
+
+    // cached to minimize time overhead
+    private ContentHandler	docFirst, docRest;
+    private DeclHandler		declFirst, declRest;
+    private LexicalHandler	lexFirst, lexRest;
+
+
+    /**
+     * Constructs a consumer which sends all its events to the first
+     * consumer, and then the second one.  If the first consumer throws
+     * an exception, the second one will not see the event which
+     * caused that exception to be reported.
+     *
+     * @param car The first consumer to get the events
+     * @param cdr The second consumer to get the events
+     */
+    public TeeConsumer (EventConsumer car, EventConsumer cdr)
+    {
+	if (car == null || cdr == null)
+	    throw new NullPointerException ();
+	first = car;
+	rest = cdr;
+
+	//
+	// Cache the handlers.
+	//
+	docFirst = first.getContentHandler ();
+	docRest = rest.getContentHandler ();
+	// DTD handler isn't cached (rarely needed)
+
+	try {
+	    declFirst = null;
+	    declFirst = (DeclHandler) first.getProperty (
+			EventFilter.DECL_HANDLER);
+	} catch (SAXException e) {}
+	try {
+	    declRest = null;
+	    declRest = (DeclHandler) rest.getProperty (
+			EventFilter.DECL_HANDLER);
+	} catch (SAXException e) {}
+
+	try {
+	    lexFirst = null;
+	    lexFirst = (LexicalHandler) first.getProperty (
+			EventFilter.LEXICAL_HANDLER);
+	} catch (SAXException e) {}
+	try {
+	    lexRest = null;
+	    lexRest = (LexicalHandler) rest.getProperty (
+			EventFilter.LEXICAL_HANDLER);
+	} catch (SAXException e) {}
+    }
+
+/* FIXME
+    /**
+     * Constructs a pipeline, and is otherwise a shorthand for the
+     * two-consumer constructor for this class.
+     *
+     * @param first Description of the first pipeline to get events,
+     *	which will be passed to {@link PipelineFactory#createPipeline}
+     * @param rest The second pipeline to get the events
+     * /
+	// constructor used by PipelineFactory
+    public TeeConsumer (String first, EventConsumer rest)
+    throws IOException
+    {
+	this (PipelineFactory.createPipeline (first), rest);
+    }
+*/
+
+    /** Returns the first pipeline to get event calls. */
+    public EventConsumer getFirst ()
+	{ return first; }
+
+    /** Returns the second pipeline to get event calls. */
+    public EventConsumer getRest ()
+	{ return rest; }
+
+    /** Returns the content handler being used. */
+    final public ContentHandler getContentHandler ()
+    {
+	if (docRest == null)
+	    return docFirst;
+	if (docFirst == null)
+	    return docRest;
+	return this;
+    }
+
+    /** Returns the dtd handler being used. */
+    final public DTDHandler getDTDHandler ()
+    {
+	// not cached (hardly used)
+	if (rest.getDTDHandler () == null)
+	    return first.getDTDHandler ();
+	if (first.getDTDHandler () == null)
+	    return rest.getDTDHandler ();
+	return this;
+    }
+
+    /** Returns the declaration or lexical handler being used. */
+    final public Object getProperty (String id)
+    throws SAXNotRecognizedException
+    {
+	//
+	// in degenerate cases, we have no work to do.
+	//
+	Object	firstProp = null, restProp = null;
+
+	try { firstProp = first.getProperty (id); }
+	catch (SAXNotRecognizedException e) { /* ignore */ }
+	try { restProp = rest.getProperty (id); }
+	catch (SAXNotRecognizedException e) { /* ignore */ }
+
+	if (restProp == null)
+	    return firstProp;
+	if (firstProp == null)
+	    return restProp;
+
+	//
+	// we've got work to do; handle two builtin cases.
+	//
+	if (EventFilter.DECL_HANDLER.equals (id))
+	    return this;
+	if (EventFilter.LEXICAL_HANDLER.equals (id))
+	    return this;
+
+	//
+	// non-degenerate, handled by both consumers, but we don't know
+	// how to handle this.
+	//
+	throw new SAXNotRecognizedException ("can't tee: " + id);
+    }
+
+    /**
+     * Provides the error handler to both subsequent nodes of
+     * this filter stage.
+     */
+    public void setErrorHandler (ErrorHandler handler)
+    {
+	first.setErrorHandler (handler);
+	rest.setErrorHandler (handler);
+    }
+
+
+    //
+    // ContentHandler
+    //
+    public void setDocumentLocator (Locator locator)
+    {
+	// this call is not made by all parsers
+	docFirst.setDocumentLocator (locator);
+	docRest.setDocumentLocator (locator);
+    }
+
+    public void startDocument ()
+    throws SAXException
+    {
+	docFirst.startDocument ();
+	docRest.startDocument ();
+    }
+
+    public void endDocument ()
+    throws SAXException
+    {
+	try {
+	    docFirst.endDocument ();
+	} finally {
+	    docRest.endDocument ();
+	}
+    }
+
+    public void startPrefixMapping (String prefix, String uri)
+    throws SAXException
+    {
+	docFirst.startPrefixMapping (prefix, uri);
+	docRest.startPrefixMapping (prefix, uri);
+    }
+
+    public void endPrefixMapping (String prefix)
+    throws SAXException
+    {
+	docFirst.endPrefixMapping (prefix);
+	docRest.endPrefixMapping (prefix);
+    }
+
+    public void skippedEntity (String name)
+    throws SAXException
+    {
+	docFirst.skippedEntity (name);
+	docRest.skippedEntity (name);
+    }
+
+    public void startElement (String uri, String localName,
+	    String qName, Attributes atts)
+    throws SAXException
+    {
+	docFirst.startElement (uri, localName, qName, atts);
+	docRest.startElement (uri, localName, qName, atts);
+    }
+
+    public void endElement (String uri, String localName, String qName)
+    throws SAXException
+    {
+	docFirst.endElement (uri, localName, qName);
+	docRest.endElement (uri, localName, qName);
+    }
+
+    public void processingInstruction (String target, String data)
+    throws SAXException
+    {
+	docFirst.processingInstruction (target, data);
+	docRest.processingInstruction (target, data);
+    }
+
+    public void characters (char ch [], int start, int length)
+    throws SAXException
+    {
+	docFirst.characters (ch, start, length);
+	docRest.characters (ch, start, length);
+    }
+
+    public void ignorableWhitespace (char ch [], int start, int length)
+    throws SAXException
+    {
+	docFirst.ignorableWhitespace (ch, start, length);
+	docRest.ignorableWhitespace (ch, start, length);
+    }
+
+
+    //
+    // DTDHandler
+    //
+    public void notationDecl (String name, String publicId, String systemId)
+    throws SAXException
+    {
+	DTDHandler	l1 = first.getDTDHandler ();
+	DTDHandler	l2 = rest.getDTDHandler ();
+
+	l1.notationDecl (name, publicId, systemId);
+	l2.notationDecl (name, publicId, systemId);
+    }
+
+    public void unparsedEntityDecl (String name,
+	    String publicId, String systemId,
+	    String notationName
+    ) throws SAXException
+    {
+	DTDHandler	l1 = first.getDTDHandler ();
+	DTDHandler	l2 = rest.getDTDHandler ();
+
+	l1.unparsedEntityDecl (name, publicId, systemId, notationName);
+	l2.unparsedEntityDecl (name, publicId, systemId, notationName);
+    }
+
+
+    //
+    // DeclHandler
+    //
+    public void attributeDecl (String eName, String aName,
+	String type,
+	String mode, String value)
+    throws SAXException
+    {
+	declFirst.attributeDecl (eName, aName, type, mode, value);
+	declRest.attributeDecl (eName, aName, type, mode, value);
+    }
+
+    public void elementDecl (String name, String model)
+    throws SAXException
+    {
+	declFirst.elementDecl (name, model);
+	declRest.elementDecl (name, model);
+    }
+
+    public void externalEntityDecl (String name,
+	String publicId, String systemId)
+    throws SAXException
+    {
+	declFirst.externalEntityDecl (name, publicId, systemId);
+	declRest.externalEntityDecl (name, publicId, systemId);
+    }
+
+    public void internalEntityDecl (String name, String value)
+    throws SAXException
+    {
+	declFirst.internalEntityDecl (name, value);
+	declRest.internalEntityDecl (name, value);
+    }
+
+
+    //
+    // LexicalHandler
+    //
+    public void comment (char ch [], int start, int length)
+    throws SAXException
+    {
+	lexFirst.comment (ch, start, length);
+	lexRest.comment (ch, start, length);
+    }
+    
+    public void startCDATA ()
+    throws SAXException
+    {
+	lexFirst.startCDATA ();
+	lexRest.startCDATA ();
+    }
+    
+    public void endCDATA ()
+    throws SAXException
+    {
+	lexFirst.endCDATA ();
+	lexRest.endCDATA ();
+    }
+    
+    public void startEntity (String name)
+    throws SAXException
+    {
+	lexFirst.startEntity (name);
+	lexRest.startEntity (name);
+    }
+    
+    public void endEntity (String name)
+    throws SAXException
+    {
+	lexFirst.endEntity (name);
+	lexRest.endEntity (name);
+    }
+    
+    public void startDTD (String name, String publicId, String systemId)
+    throws SAXException
+    {
+	lexFirst.startDTD (name, publicId, systemId);
+	lexRest.startDTD (name, publicId, systemId);
+    }
+    
+    public void endDTD ()
+    throws SAXException
+    {
+	lexFirst.endDTD ();
+	lexRest.endDTD ();
+    }
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/TextConsumer.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/TextConsumer.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/TextConsumer.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/TextConsumer.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,117 @@
+/* TextConsumer.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.pipeline;
+
+import java.io.*;
+
+import org.xml.sax.*;
+
+import gnu.xml.util.XMLWriter;
+
+
+/**
+ * Terminates a pipeline, consuming events to print them as well formed
+ * XML (or XHTML) text.
+ *
+ * <p> Input must be well formed, and must include XML names (e.g. the
+ * prefixes and prefix declarations must be present), or the output of
+ * this class is undefined.
+ *
+ * @see NSFilter
+ * @see WellFormednessFilter
+ *
+ * @author David Brownell
+ */
+public class TextConsumer extends XMLWriter implements EventConsumer
+{
+    /**
+     * Constructs an event consumer which echoes its input as text,
+     * optionally adhering to some basic XHTML formatting options
+     * which increase interoperability with old (v3) browsers.
+     *
+     * <p> For the best interoperability, when writing as XHTML only
+     * ASCII characters are emitted; other characters are turned to
+     * entity or character references as needed, and no XML declaration
+     * is provided in the document.
+     */
+    public TextConsumer (Writer w, boolean isXhtml)
+    throws IOException
+    {
+	super (w, isXhtml ? "US-ASCII" : null);
+	setXhtml (isXhtml);
+    }
+
+    /**
+     * Constructs a consumer that writes its input as XML text.
+     * XHTML rules are not followed.
+     */
+    public TextConsumer (Writer w)
+    throws IOException
+    {
+	this (w, false);
+    }
+	
+    /**
+     * Constructs a consumer that writes its input as XML text,
+     * encoded in UTF-8.  XHTML rules are not followed.
+     */
+    public TextConsumer (OutputStream out)
+    throws IOException
+    {
+	this (new OutputStreamWriter (out, "UTF8"), false);
+    }
+
+    /** <b>EventConsumer</b> Returns the document handler being used. */
+    public ContentHandler getContentHandler ()
+	{ return this; }
+
+    /** <b>EventConsumer</b> Returns the dtd handler being used. */
+    public DTDHandler getDTDHandler ()
+	{ return this; }
+
+    /** <b>XMLReader</b>Retrieves a property (lexical and decl handlers) */
+    public Object getProperty (String propertyId)
+    throws SAXNotRecognizedException
+    {
+	if (EventFilter.LEXICAL_HANDLER.equals (propertyId))
+	    return this;
+	if (EventFilter.DECL_HANDLER.equals (propertyId))
+	    return this;
+	throw new SAXNotRecognizedException (propertyId);
+    }
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/ValidationConsumer.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/ValidationConsumer.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/ValidationConsumer.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/ValidationConsumer.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,1928 @@
+/* ValidationConsumer.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.pipeline;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.EmptyStackException;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Stack;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+/**
+ * This class checks SAX2 events to report validity errors; it works as
+ * both a filter and a terminus on an event pipeline.  It relies on the
+ * producer of SAX events to:  </p> <ol>
+ *
+ *	<li> Conform to the specification of a non-validating XML parser that
+ *	reads all external entities, reported using SAX2 events. </li>
+ *
+ *	<li> Report ignorable whitespace as such (through the ContentHandler
+ *	interface).  This is, strictly speaking, optional for nonvalidating
+ *	XML processors.  </li>
+ *
+ *	<li> Make SAX2 DeclHandler callbacks, with default
+ *	attribute values already normalized (and without "<").</li>
+ *
+ *	<li> Make SAX2 LexicalHandler startDTD() and endDTD ()
+ *	callbacks. </li>
+ *
+ *	<li> Act as if the <em>(URI)/namespace-prefixes</em> property were
+ *	set to true, by providing XML 1.0 names and all <code>xmlns*</code>
+ *	attributes (rather than omitting either or both). </li>
+ *
+ *	</ol>
+ *
+ * <p> At this writing, the major SAX2 parsers (such as Ælfred2,
+ * Crimson, and Xerces) meet these requirements, and this validation
+ * module is used by the optional Ælfred2 validation support.
+ * </p>
+ *
+ * <p> Note that because this is a layered validator, it has to duplicate some
+ * work that the parser is doing; there are also other cost to layering.
+ * However, <em>because of layering it doesn't need a parser</em> in order
+ * to work! You can use it with anything that generates SAX events, such
+ * as an application component that wants to detect invalid content in
+ * a changed area without validating an entire document, or which wants to
+ * ensure that it doesn't write invalid data to a communications partner.</p>
+ *
+ * <p> Also, note that because this is a layered validator, the line numbers
+ * reported for some errors may seem strange.  For example, if an element does
+ * not permit character content, the validator
+ * will use the locator provided to it.
+ * That might reflect the last character of a <em>characters</em> event
+ * callback, rather than the first non-whitespace character. </p>
+ *
+ * <hr />
+ *
+ * <!--
+ * <p> Of interest is the fact that unlike most currently known XML validators,
+ * this one can report some cases of non-determinism in element content models.
+ * It is a compile-time option, enabled by default.  This will only report
+ * such XML errors if they relate to content actually appearing in a document;
+ * content models aren't aggressively scanned for non-deterministic structure.
+ * Documents which trigger such non-deterministic transitions may be handled
+ * differently by different validating parsers, without losing conformance
+ * to the XML specification. </p>
+ * -->
+ *
+ * <p> Current limitations of the validation performed are in roughly three
+ * categories.  </p>
+ *
+ * <p> The first category represents constraints which demand violations
+ * of software layering:  exposing lexical details, one of the first things
+ * that <em>application</em> programming interfaces (APIs) hide.  These
+ * invariably relate to XML entity handling, and to historical oddities
+ * of the XML validation semantics.  Curiously,
+ * recent (Autumn 1999) conformance testing showed that these constraints are
+ * among those handled worst by existing XML validating parsers.  Arguments
+ * have been made that each of these VCs should be turned into WFCs (most
+ * of them) or discarded (popular for the standalone declaration); in short,
+ * that these are bugs in the XML specification (not all via SGML): </p><ul>
+ *
+ *	<li> The <em>Proper Declaration/PE Nesting</em> and
+ *	<em>Proper Group/PE Nesting</em> VCs can't be tested because they
+ *	require access to particularly low level lexical level information.
+ *	In essence, the reason XML isn't a simple thing to parse is that
+ *	it's not a context free grammar, and these constraints elevate that
+ *	SGML-derived context sensitivity to the level of a semantic rule.
+ *
+ *	<li> The <em>Standalone Document Declaration</em> VC can't be
+ *	tested.  This is for two reasons.  First, this flag isn't made
+ *	available through SAX2.  Second, it also requires breaking that
+ *	lexical layering boundary.  (If you ever wondered why classes
+ *	in compiler construction or language design barely mention the
+ *	existence of context-sensitive grammars, it's because of messy
+ *	issues like these.)
+ *
+ *	<li> The <em>Entity Declared</em> VC can't be tested, because it
+ *	also requires breaking that lexical layering boundary!  There's also
+ *	another issue: the VC wording (and seemingly intent) is ambiguous.
+ *	(This is still true in the "Second edition" XML spec.)
+ *	Since there is a WFC of the same name, everyone's life would be
+ *	easier if references to undeclared parsed entities were always well
+ *	formedness errors, regardless of whether they're parameter entities
+ *	or not.  (Note that nonvalidating parsers are not required
+ *	to report all such well formedness errors if they don't read external
+ *	parameter entities, although currently most XML parsers read them
+ *	in an attempt to avoid problems from inconsistent parser behavior.)
+ *
+ *	</ul>
+ *
+ * <p> The second category of limitations on this validation represent
+ * constraints associated with information that is not guaranteed to be
+ * available (or in one case, <em>is guaranteed not to be available</em>,
+ * through the SAX2 API: </p><ul>
+ *
+ *	<li> The <em>Unique Element Type Declaration</em> VC may not be
+ *	reportable, if the underlying parser happens not to expose
+ *	multiple declarations.   (Ælfred2 reports these validity
+ *	errors directly.)</li>
+ *
+ *	<li> Similarly, the <em>Unique Notation Name</em> VC, added in the
+ *	14-January-2000 XML spec errata to restrict typing models used by
+ *	elements, may not be reportable.  (Ælfred reports these
+ *	validity errors directly.) </li>
+ *
+ *	</ul>
+ *
+ * <p> A third category relates to ease of implementation.  (Think of this
+ * as "bugs".)  The most notable issue here is character handling.  Rather
+ * than attempting to implement the voluminous character tables in the XML
+ * specification (Appendix B), Unicode rules are used directly from
+ * the java.lang.Character class.  Recent JVMs have begun to diverge from
+ * the original specification for that class (Unicode 2.0), meaning that
+ * different JVMs may handle that aspect of conformance differently.
+ * </p>
+ *
+ * <p> Note that for some of the validity errors that SAX2 does not
+ * expose, a nonvalidating parser is permitted (by the XML specification)
+ * to report validity errors.  When used with a parser that does so for
+ * the validity constraints mentioned above (or any other SAX2 event
+ * stream producer that does the same thing), overall conformance is
+ * substantially improved.
+ *
+ * @see gnu.xml.aelfred2.SAXDriver
+ * @see gnu.xml.aelfred2.XmlReader
+ *
+ * @author David Brownell
+ */
+public final class ValidationConsumer extends EventFilter
+{
+    // report error if we happen to notice a non-deterministic choice?
+    // we won't report buggy content models; just buggy instances
+    private static final boolean	warnNonDeterministic = false;
+
+    // for tracking active content models
+    private String		rootName;
+    private Stack		contentStack = new Stack ();
+
+    // flags for "saved DTD" processing
+    private boolean		disableDeclarations;
+    private boolean		disableReset;
+
+    //
+    // most VCs get tested when we see element start tags.  the per-element
+    // info (including attributes) recorded here duplicates that found inside
+    // many nonvalidating parsers, hence dual lookups etc ... that's why a
+    // layered validator isn't going to be as fast as a non-layered one.
+    //
+
+    // key = element name; value = ElementInfo
+    private Hashtable		elements = new Hashtable ();
+
+    // some VCs relate to ID/IDREF/IDREFS attributes
+    // key = id; value = boolean true (defd) or false (refd)
+    private Hashtable		ids = new Hashtable ();
+
+    // we just record declared notation and unparsed entity names.
+    // the implementation here is simple/slow; these features
+    // are seldom used, one hopes they'll wither away soon
+    private Vector		notations = new Vector (5, 5);
+    private Vector		nDeferred = new Vector (5, 5);
+    private Vector		unparsed = new Vector (5, 5);
+    private Vector		uDeferred = new Vector (5, 5);
+	
+	// note: DocBk 3.1.7 XML defines over 2 dozen notations,
+	// used when defining unparsed entities for graphics
+	// (and maybe in other places)
+
+    
+
+    /**
+     * Creates a pipeline terminus which consumes all events passed to
+     * it; this will report validity errors as if they were fatal errors,
+     * unless an error handler is assigned.
+     *
+     * @see #setErrorHandler
+     */
+	// constructor used by PipelineFactory
+	    // ... and want one taking system ID of an external subset
+    public ValidationConsumer ()
+    {
+	this (null);
+    }
+
+    /**
+     * Creates a pipeline filter which reports validity errors and then
+     * passes events on to the next consumer if they were not fatal.
+     *
+     * @see #setErrorHandler
+     */
+	// constructor used by PipelineFactory
+	    // ... and want one taking system ID of an external subset
+	    // (which won't send declaration events)
+    public ValidationConsumer (EventConsumer next)
+    {
+	super (next);
+
+	setContentHandler (this);
+	setDTDHandler (this);
+	try { setProperty (DECL_HANDLER, this); }
+	catch (Exception e) { /* "can't happen" */ }
+	try { setProperty (LEXICAL_HANDLER, this); }
+	catch (Exception e) { /* "can't happen" */ }
+    }
+
+    
+    private static final String	fakeRootName
+	= ":Nobody:in:their_Right.Mind_would:use:this-name:1x:";
+    
+    /**
+     * Creates a validation consumer which is preloaded with the DTD provided.
+     * It does this by constructing a document with that DTD, then parsing
+     * that document and recording its DTD declarations.  Then it arranges
+     * not to modify that information.
+     *
+     * <p> The resulting validation consumer will only validate against
+     * the specified DTD, regardless of whether some other DTD is found
+     * in a document being parsed.
+     *
+     * @param rootName The name of the required root element; if this is
+     *	null, any root element name will be accepted.
+     * @param publicId If non-null and there is a non-null systemId, this
+     *	identifier provides an alternate access identifier for the DTD's
+     *	external subset.
+     * @param systemId If non-null, this is a URI (normally URL) that
+     *	may be used to access the DTD's external subset.
+     * @param internalSubset If non-null, holds literal markup declarations
+     *	comprising the DTD's internal subset.
+     * @param resolver If non-null, this will be provided to the parser for
+     *	use when resolving parameter entities (including any external subset).
+     * @param resolver If non-null, this will be provided to the parser for
+     *	use when resolving parameter entities (including any external subset).
+     * @param minimalElement If non-null, a minimal valid document.
+     *
+     * @exception SAXNotSupportedException If the default SAX parser does
+     *	not support the standard lexical or declaration handlers.
+     * @exception SAXParseException If the specified DTD has either
+     *	well-formedness or validity errors
+     * @exception IOException If the specified DTD can't be read for
+     *	some reason
+     */
+    public ValidationConsumer (
+	String		rootName,
+	String		publicId,
+	String		systemId,
+	String		internalSubset,
+	EntityResolver	resolver,
+	String		minimalDocument
+    ) throws SAXException, IOException
+    {
+	this (null);
+
+	disableReset = true;
+	if (rootName == null)
+	    rootName = fakeRootName;
+
+	//
+	// Synthesize document with that DTD; is it possible to do
+	// better for the declaration of the root element?
+	//
+	// NOTE:  can't use SAX2 to write internal subsets.
+	//
+	StringWriter	writer = new StringWriter ();
+
+	writer.write ("<!DOCTYPE ");
+	writer.write (rootName);
+	if (systemId != null) {
+	    writer.write ("\n  ");
+	    if (publicId != null) {
+		writer.write ("PUBLIC '");
+		writer.write (publicId);
+		writer.write ("'\n\t'");
+	    } else
+		writer.write ("SYSTEM '");
+	    writer.write (systemId);
+	    writer.write ("'");
+	}
+	writer.write (" [ ");
+	if (rootName == fakeRootName) {
+	    writer.write ("\n<!ELEMENT ");
+	    writer.write (rootName);
+	    writer.write (" EMPTY>");
+	}
+	if (internalSubset != null)
+	    writer.write (internalSubset);
+	writer.write ("\n ]>");
+
+	if (minimalDocument != null) {
+	    writer.write ("\n");
+	    writer.write (minimalDocument);
+	    writer.write ("\n");
+	} else {
+	    writer.write (" <");
+	    writer.write (rootName);
+	    writer.write ("/>\n");
+	}
+	minimalDocument = writer.toString ();
+
+	//
+	// OK, load it
+	//
+	XMLReader	producer;
+
+	producer = XMLReaderFactory.createXMLReader ();
+	bind (producer, this);
+
+	if (resolver != null)
+	    producer.setEntityResolver (resolver);
+
+	InputSource	in;
+	
+	in = new InputSource (new StringReader (minimalDocument));
+	producer.parse (in);
+
+	disableDeclarations = true;
+	if (rootName == fakeRootName)
+	    this.rootName = null;
+    }
+
+    private void resetState ()
+    {
+	if (!disableReset) {
+	    rootName = null;
+	    contentStack.removeAllElements ();
+	    elements.clear ();
+	    ids.clear ();
+
+	    notations.removeAllElements ();
+	    nDeferred.removeAllElements ();
+	    unparsed.removeAllElements ();
+	    uDeferred.removeAllElements ();
+	}
+    }
+
+
+    private void warning (String description)
+    throws SAXException
+    {
+	ErrorHandler		errHandler = getErrorHandler ();
+	Locator			locator = getDocumentLocator ();
+	SAXParseException	err;
+
+	if (errHandler == null)
+	    return;
+
+	if (locator == null)
+	    err = new SAXParseException (description, null, null, -1, -1);
+	else
+	    err = new SAXParseException (description, locator);
+	errHandler.warning (err);
+    }
+
+    // package private (for ChildrenRecognizer)
+    private void error (String description)
+    throws SAXException
+    {
+	ErrorHandler		errHandler = getErrorHandler ();
+	Locator			locator = getDocumentLocator ();
+	SAXParseException	err;
+
+	if (locator == null)
+	    err = new SAXParseException (description, null, null, -1, -1);
+	else
+	    err = new SAXParseException (description, locator);
+	if (errHandler != null)
+	    errHandler.error (err);
+	else	// else we always treat it as fatal!
+	    throw err;
+    }
+
+    private void fatalError (String description)
+    throws SAXException
+    {
+	ErrorHandler		errHandler = getErrorHandler ();
+	Locator			locator = getDocumentLocator ();
+	SAXParseException	err;
+
+	if (locator != null)
+	    err = new SAXParseException (description, locator);
+	else
+	    err = new SAXParseException (description, null, null, -1, -1);
+	if (errHandler != null)
+	    errHandler.fatalError (err);
+	// we always treat this as fatal, regardless of the handler
+	throw err;
+    }
+
+
+    private static boolean isExtender (char c)
+    {
+	// [88] Extender ::= ...
+	return c == 0x00b7 || c == 0x02d0 || c == 0x02d1 || c == 0x0387
+	       || c == 0x0640 || c == 0x0e46 || c == 0x0ec6 || c == 0x3005
+	       || (c >= 0x3031 && c <= 0x3035)
+	       || (c >= 0x309d && c <= 0x309e)
+	       || (c >= 0x30fc && c <= 0x30fe);
+    }
+
+
+    // use augmented Unicode rules, not full XML rules
+    private boolean isName (String name, String context, String id)
+    throws SAXException
+    {
+	char	buf [] = name.toCharArray ();
+	boolean	pass = true;
+
+	if (!Character.isUnicodeIdentifierStart (buf [0])
+		&& ":_".indexOf (buf [0]) == -1)
+	    pass = false;
+	else {
+	    int max = buf.length;
+	    for (int i = 1; pass && i < max; i++) {
+		char c = buf [i];
+		if (!Character.isUnicodeIdentifierPart (c)
+			&& ":-_.".indexOf (c) == -1
+			&& !isExtender (c))
+		    pass = false;
+	    }
+	}
+
+	if (!pass)
+	    error ("In " + context + " for " + id
+		+ ", '" + name + "' is not a name");
+	return pass;	// true == OK
+    }
+
+    // use augmented Unicode rules, not full XML rules
+    private boolean isNmtoken (String nmtoken, String context, String id)
+    throws SAXException
+    {
+	char	buf [] = nmtoken.toCharArray ();
+	boolean	pass = true;
+	int	max = buf.length;
+
+	// XXX make this share code with isName
+
+	for (int i = 0; pass && i < max; i++) {
+		char c = buf [i];
+	    if (!Character.isUnicodeIdentifierPart (c)
+		    && ":-_.".indexOf (c) == -1
+		    && !isExtender (c))
+		pass = false;
+	}
+
+	if (!pass)
+	    error ("In " + context + " for " + id
+		+ ", '" + nmtoken + "' is not a name token");
+	return pass;	// true == OK
+    }
+
+    private void checkEnumeration (String value, String type, String name)
+    throws SAXException
+    {
+	if (!hasMatch (value, type))
+	    // VC: Enumeration
+	    error ("Value '" + value
+		+ "' for attribute '" + name
+		+ "' is not permitted: " + type);
+    }
+
+    // used to test enumerated attributes and mixed content models
+    // package private
+    static boolean hasMatch (String value, String orList)
+    {
+	int len = value.length ();
+	int max = orList.length () - len;
+
+	for (int start = 0;
+		(start = orList.indexOf (value, start)) != -1;
+		start++) {
+	    char c;
+
+	    if (start > max)
+		break;
+	    c = orList.charAt (start - 1);
+	    if (c != '|' && c != '('/*)*/)
+		continue;
+	    c = orList.charAt (start + len);
+	    if (c != '|' && /*(*/ c != ')')
+		continue;
+	    return true;
+	}
+	return false;
+    }
+
+    /**
+     * <b>LexicalHandler</b> Records the declaration of the root
+     * element, so it can be verified later.
+     * Passed to the next consumer, unless this one was
+     * preloaded with a particular DTD.
+     */
+    public void startDTD (String name, String publicId, String systemId)
+    throws SAXException
+    {
+	if (disableDeclarations)
+	    return;
+
+	rootName = name;
+	super.startDTD (name, publicId, systemId);
+    }
+
+    /**
+     * <b>LexicalHandler</b> Verifies that all referenced notations
+     * and unparsed entities have been declared.
+     * Passed to the next consumer, unless this one was
+     * preloaded with a particular DTD.
+     */
+    public void endDTD ()
+    throws SAXException
+    {
+	if (disableDeclarations)
+	    return;
+
+	// this is a convenient hook for end-of-dtd checks, but we
+	// could also trigger it in the first startElement call.
+	// locator info is more appropriate here though.
+
+	// VC: Notation Declared (NDATA can refer to them before decls,
+	//	as can NOTATION attribute enumerations and defaults)
+	int length = nDeferred.size ();
+	for (int i = 0; i < length; i++) {
+	    String notation = (String) nDeferred.elementAt (i);
+	    if (!notations.contains (notation)) {
+		error ("A declaration referred to notation '" + notation
+			+ "' which was never declared");
+	    }
+	}
+	nDeferred.removeAllElements ();
+
+	// VC: Entity Name (attribute values can refer to them
+	//	before they're declared); VC Attribute Default Legal
+	length = uDeferred.size ();
+	for (int i = 0; i < length; i++) {
+	    String entity = (String) uDeferred.elementAt (i);
+	    if (!unparsed.contains (entity)) {
+		error ("An attribute default referred to entity '" + entity
+			+ "' which was never declared");
+	    }
+	}
+	uDeferred.removeAllElements ();
+	super.endDTD ();
+    }
+
+
+    // These are interned, so we can rely on "==" to find the type of
+    // all attributes except enumerations ...
+    // "(this|or|that|...)" and "NOTATION (this|or|that|...)"
+    static final String types [] = {
+	"CDATA",
+	"ID", "IDREF", "IDREFS",
+	"NMTOKEN", "NMTOKENS",
+	"ENTITY", "ENTITIES"
+    };
+
+
+    /**
+     * <b>DecllHandler</b> Records attribute declaration for later use
+     * in validating document content, and checks validity constraints
+     * that are applicable to attribute declarations.
+     * Passed to the next consumer, unless this one was
+     * preloaded with a particular DTD.
+     */
+    public void attributeDecl (
+	String eName,
+	String aName,
+	String type,
+	String mode,
+	String value
+    ) throws SAXException
+    {
+	if (disableDeclarations)
+	    return;
+
+	ElementInfo	info = (ElementInfo) elements.get (eName);
+	AttributeInfo	ainfo = new AttributeInfo ();
+	boolean		checkOne = false;
+	boolean		interned = false;
+
+	// cheap interning of type names and #FIXED, #REQUIRED
+	// for faster startElement (we can use "==")
+	for (int i = 0; i < types.length; i++) {
+	    if (types [i].equals (type)) {
+		type = types [i];
+		interned = true;
+		break;
+	    }
+	}
+	if ("#FIXED".equals (mode))
+	    mode = "#FIXED";
+	else if ("#REQUIRED".equals (mode))
+	    mode = "#REQUIRED";
+
+	ainfo.type = type;
+	ainfo.mode = mode;
+	ainfo.value = value;
+
+	// we might not have seen the content model yet
+	if (info == null) {
+	    info = new ElementInfo (eName);
+	    elements.put (eName, info);
+	}
+	if ("ID" == type) {
+	    checkOne = true;
+	    if (!("#REQUIRED" == mode || "#IMPLIED".equals (mode))) {
+		// VC: ID Attribute Default
+		error ("ID attribute '" + aName
+		    + "' must be #IMPLIED or #REQUIRED");
+	    }
+
+	} else if (!interned && type.startsWith ("NOTATION ")) {
+	    checkOne = true;
+
+	    // VC: Notation Attributes (notations must be declared)
+	    StringTokenizer	tokens = new StringTokenizer (
+		type.substring (10, type.lastIndexOf (')')),
+		"|");
+	    while (tokens.hasMoreTokens ()) {
+		String	token = tokens.nextToken ();
+		if (!notations.contains (token))
+		    nDeferred.addElement (token);
+	    }
+	}
+	if (checkOne) {
+	    for (Enumeration e = info.attributes.keys ();
+		    e.hasMoreElements ();
+		    /* NOP */) {
+		String		name;
+		AttributeInfo	ainfo2;
+
+		name = (String) e.nextElement ();
+		ainfo2 = (AttributeInfo) info.attributes.get (name);
+		if (type == ainfo2.type || !interned /* NOTATION */) {
+		    // VC: One ID per Element Type
+		    // VC: One Notation per Element TYpe
+		    error ("Element '" + eName
+			+ "' already has an attribute of type "
+			+ (interned ? "NOTATION" : type)
+			+ " ('" + name
+			+ "') so '" + aName 
+			+ "' is a validity error");
+		}
+	    }
+	}
+
+	// VC: Attribute Default Legal
+	if (value != null) {
+
+	    if ("CDATA" == type) {
+		// event source rejected '<'
+
+	    } else if ("NMTOKEN" == type) {
+		// VC: Name Token (is a nmtoken)
+		isNmtoken (value, "attribute default", aName);
+
+	    } else if ("NMTOKENS" == type) {
+		// VC: Name Token (is a nmtoken; at least one value)
+		StringTokenizer	tokens = new StringTokenizer (value);
+		if (!tokens.hasMoreTokens ())
+		    error ("Default for attribute '" + aName
+			+ "' must have at least one name token.");
+		else do {
+		    String token = tokens.nextToken ();
+		    isNmtoken (token, "attribute default", aName);
+		} while (tokens.hasMoreTokens ());
+
+	    } else if ("IDREF" == type || "ENTITY" == type) {
+		// VC: Entity Name (is a name)
+		// VC: IDREF (is a name) (is declared)
+		isName (value, "attribute default", aName);
+		if ("ENTITY" == type && !unparsed.contains (value))
+		    uDeferred.addElement (value);
+
+	    } else if ("IDREFS" == type || "ENTITIES" == type) {
+		// VC: Entity Name (is a name; at least one value)
+		// VC: IDREF (is a name; at least one value)
+		StringTokenizer	names = new StringTokenizer (value);
+		if (!names.hasMoreTokens ())
+		    error ("Default for attribute '" + aName
+			+ "' must have at least one name.");
+		else do {
+		    String name = names.nextToken ();
+		    isName (name, "attribute default", aName);
+		    if ("ENTITIES" == type && !unparsed.contains (name))
+			uDeferred.addElement (value);
+		} while (names.hasMoreTokens ());
+	    
+	    } else if (type.charAt (0) == '(' /*)*/ ) {
+		// VC: Enumeration (must match)
+		checkEnumeration (value, type, aName);
+
+	    } else if (!interned && checkOne) {	/* NOTATION */
+		// VC: Notation attributes (must be names)
+		isName (value, "attribute default", aName);
+
+		// VC: Notation attributes (must be declared)
+		if (!notations.contains (value))
+		    nDeferred.addElement (value);
+		
+		// VC: Enumeration (must match)
+		checkEnumeration (value, type, aName);
+
+	    } else if ("ID" != type)
+		throw new RuntimeException ("illegal attribute type: " + type);
+	}
+
+	if (info.attributes.get (aName) == null)
+	    info.attributes.put (aName, ainfo);
+	/*
+	else
+	    warning ("Element '" + eName
+		+ "' already has an attribute named '" + aName + "'");
+	*/
+
+	if ("xml:space".equals (aName)) {
+	    if (!("(default|preserve)".equals (type)
+		    || "(preserve|default)".equals (type)
+			// these next two are arguable; XHTML's DTD doesn't
+			// deserve errors.  After all, it's not like any
+			// illegal _value_ could pass ...
+		    || "(preserve)".equals (type)
+		    || "(default)".equals (type)
+		    ))
+		error (
+		    "xml:space attribute type must be like '(default|preserve)'"
+		    + " not '" + type + "'"
+		    );
+
+	}
+	super.attributeDecl (eName, aName, type, mode, value);
+    }
+
+    /**
+     * <b>DecllHandler</b> Records the element declaration for later use
+     * when checking document content, and checks validity constraints that
+     * apply to element declarations.  Passed to the next consumer, unless
+     * this one was preloaded with a particular DTD.
+     */
+    public void elementDecl (String name, String model)
+    throws SAXException
+    {
+	if (disableDeclarations)
+	    return;
+
+	ElementInfo	info = (ElementInfo) elements.get (name);
+
+	// we might have seen an attribute decl already
+	if (info == null) {
+	    info = new ElementInfo (name);
+	    elements.put (name, info);
+	}
+	if (info.model != null) {
+	    // NOTE:  not all parsers can report such duplicates.
+	    // VC: Unique Element Type Declaration
+	    error ("Element type '" + name
+		+ "' was already declared.");
+	} else {
+	    info.model = model;
+
+	    // VC: No Duplicate Types (in mixed content models)
+	    if (model.charAt (1) == '#') 	// (#PCDATA...
+		info.getRecognizer (this);
+	}
+	super.elementDecl (name, model);
+    }
+
+    /**
+     * <b>DecllHandler</b> passed to the next consumer, unless this
+     * one was preloaded with a particular DTD
+     */
+    public void internalEntityDecl (String name, String value)
+    throws SAXException
+    {
+	if (!disableDeclarations)
+	    super.internalEntityDecl (name, value);
+    }
+
+    /**
+     * <b>DecllHandler</b> passed to the next consumer, unless this
+     * one was preloaded with a particular DTD
+     */
+    public void externalEntityDecl (String name,
+    	String publicId, String systemId)
+    throws SAXException
+    {
+	if (!disableDeclarations)
+	    super.externalEntityDecl (name, publicId, systemId);
+    }
+
+
+    /**
+     * <b>DTDHandler</b> Records the notation name, for checking
+     * NOTATIONS attribute values and declararations of unparsed
+     * entities.  Passed to the next consumer, unless this one was
+     * preloaded with a particular DTD.
+     */
+    public void notationDecl (String name, String publicId, String systemId)
+    throws SAXException
+    {
+	if (disableDeclarations)
+	    return;
+
+	notations.addElement (name);
+	super.notationDecl (name, publicId, systemId);
+    }
+
+    /**
+     * <b>DTDHandler</b> Records the entity name, for checking
+     * ENTITY and ENTITIES attribute values; records the notation
+     * name if it hasn't yet been declared.  Passed to the next consumer,
+     * unless this one was preloaded with a particular DTD.
+     */
+    public void unparsedEntityDecl (
+	String name,
+	String publicId,
+	String systemId,
+	String notationName
+    ) throws SAXException
+    {
+	if (disableDeclarations)
+	    return;
+
+	unparsed.addElement (name);
+	if (!notations.contains (notationName))
+	    nDeferred.addElement (notationName);
+	super.unparsedEntityDecl (name, publicId, systemId, notationName);
+    }
+    
+    
+    /**
+     * <b>ContentHandler</b> Ensures that state from any previous parse
+     * has been deleted.
+     * Passed to the next consumer.
+     */
+    public void startDocument ()
+    throws SAXException
+    {
+	resetState ();
+	super.startDocument ();
+    }
+
+
+    private static boolean isAsciiLetter (char c)
+    {
+	return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
+    }
+
+
+    /**
+     * <b>ContentHandler</b> Reports a fatal exception.  Validating
+     * XML processors may not skip any entities.
+     */
+    public void skippedEntity (String name)
+    throws SAXException
+    {
+	fatalError ("may not skip entities");
+    }
+
+    /*
+     * SAX2 doesn't expand non-PE refs in attribute defaults...
+     */
+    private String expandDefaultRefs (String s)
+    throws SAXException
+    {
+	if (s.indexOf ('&') < 0)
+	    return s;
+	
+// FIXME: handle &#nn; &#xnn; &name;
+	String message = "Can't expand refs in attribute default: " + s;
+	warning (message);
+
+	return s;
+    }
+
+    /**
+     * <b>ContentHandler</b> Performs validity checks against element
+     * (and document) content models, and attribute values.
+     * Passed to the next consumer.
+     */
+    public void startElement (
+	String		uri,
+	String		localName,
+	String		qName,
+	Attributes	atts
+    ) throws SAXException
+    {
+	//
+	// First check content model for the enclosing scope.
+	//
+	if (contentStack.isEmpty ()) {
+	    // VC:  Root Element Type
+	    if (!qName.equals (rootName)) {
+		if (rootName == null)
+		    warning ("This document has no DTD, can't be valid");
+		else
+		    error ("Root element type '" + qName
+			+ "' was declared to be '" + rootName + "'");
+	    }
+	} else {
+	    Recognizer state = (Recognizer) contentStack.peek ();
+
+	    if (state != null) {
+		Recognizer newstate = state.acceptElement (qName);
+
+		if (newstate == null)
+		    error ("Element type '" + qName
+			+ "' in element '" + state.type.name
+			+ "' violates content model " + state.type.model
+			);
+		if (newstate != state) {
+		    contentStack.pop ();
+		    contentStack.push (newstate);
+		}
+	    }
+	}
+
+	//
+	// Then check that this element was declared, and push the
+	// object used to validate its content model onto our stack.
+	//
+	// This is where the recognizer gets created, if needed; if
+	// it's a "children" (elements) content model, an NDFA is
+	// created.  (One recognizer is used per content type, no
+	// matter how complex that recognizer is.)
+	//
+	ElementInfo		info;
+
+	info = (ElementInfo) elements.get (qName);
+	if (info == null || info.model == null) {
+	    // VC: Element Valid (base clause)
+	    error ("Element type '" + qName + "' was not declared");
+	    contentStack.push (null);
+
+	    // for less diagnostic noise, fake a declaration.
+	    elementDecl (qName, "ANY");
+	} else
+	    contentStack.push (info.getRecognizer (this));
+
+	//
+	// Then check each attribute present
+	//
+	int			len;
+	String			aname;
+	AttributeInfo		ainfo;
+
+	if (atts != null)
+	    len = atts.getLength ();
+	else
+	    len = 0;
+	
+	for (int i = 0; i < len; i++) {
+	    aname = atts.getQName (i);
+
+	    if (info == null
+		    || (ainfo = (AttributeInfo) info.attributes.get (aname))
+			    == null) {
+		// VC: Attribute Value Type
+		error ("Attribute '" + aname
+		    + "' was not declared for element type " + qName);
+		continue;
+	    }
+
+	    String value = atts.getValue (i);
+
+	    // note that "==" for type names and "#FIXED" is correct
+	    // (and fast) since we've interned those literals.
+
+	    if ("#FIXED" == ainfo.mode) {
+		String expanded = expandDefaultRefs (ainfo.value);
+
+		// VC: Fixed Attribute Default
+		if (!value.equals (expanded)) {
+		    error ("Attribute '" + aname
+			+ "' must match " + expanded
+			);
+		    continue;
+		}
+	    }
+
+	    if ("CDATA" == ainfo.type)
+		continue;
+	    
+	    //
+	    // For all other attribute types, there are various
+	    // rules to follow.
+	    //
+	    
+	    if ("ID" == ainfo.type) {
+		// VC: ID (must be a name)
+		if (isName (value, "ID attribute", aname)) {
+		    if (Boolean.TRUE == ids.get (value))
+			// VC: ID (appears once)
+			error ("ID attribute " + aname
+			    + " uses an ID value '" + value
+			    + "' which was already declared.");
+		    else
+			// any forward refs are no longer problems
+			ids.put (value, Boolean.TRUE);
+		}
+		continue;
+	    } 
+
+	    if ("IDREF" == ainfo.type) {
+		// VC: IDREF (value must be a name)
+		if (isName (value, "IDREF attribute", aname)) {
+		    // VC: IDREF (must match some ID attribute)
+		    if (ids.get (value) == null)
+			// new -- assume it's a forward ref
+			ids.put (value, Boolean.FALSE);
+		}
+		continue;
+	    } 
+
+	    if ("IDREFS" == ainfo.type) {
+		StringTokenizer	tokens = new StringTokenizer (value, " ");
+
+		if (!tokens.hasMoreTokens ()) {
+		    // VC: IDREF (one or more values)
+		    error ("IDREFS attribute " + aname
+			+ " must have at least one ID ref");
+		} else do {
+		    String id = tokens.nextToken ();
+
+		    // VC: IDREF (value must be a name)
+		    if (isName (id, "IDREFS attribute", aname)) {
+			// VC: IDREF (must match some ID attribute)
+			if (ids.get (id) == null)
+			    // new -- assume it's a forward ref
+			    ids.put (id, Boolean.FALSE);
+		    }
+		} while (tokens.hasMoreTokens ());
+		continue;
+	    }
+
+	    if ("NMTOKEN" == ainfo.type) {
+		// VC: Name Token (is a name token)
+		isNmtoken (value, "NMTOKEN attribute", aname);
+		continue;
+	    }
+
+	    if ("NMTOKENS" == ainfo.type) {
+		StringTokenizer	tokens = new StringTokenizer (value, " ");
+
+		if (!tokens.hasMoreTokens ()) {
+		    // VC: Name Token (one or more values)
+		    error ("NMTOKENS attribute " + aname
+			+ " must have at least one name token");
+		} else do {
+		    String token = tokens.nextToken ();
+
+		    // VC: Name Token (is a name token)
+		    isNmtoken (token, "NMTOKENS attribute", aname);
+		} while (tokens.hasMoreTokens ());
+		continue;
+	    }
+
+	    if ("ENTITY" == ainfo.type) {
+		if (!unparsed.contains (value))
+		    // VC: Entity Name
+		    error ("Value of attribute '" + aname
+			+ "' refers to unparsed entity '" + value
+			+ "' which was not declared.");
+		continue;
+	    }
+
+	    if ("ENTITIES" == ainfo.type) {
+		StringTokenizer	tokens = new StringTokenizer (value, " ");
+
+		if (!tokens.hasMoreTokens ()) {
+		    // VC: Entity Name (one or more values)
+		    error ("ENTITIES attribute " + aname
+			+ " must have at least one name token");
+		} else do {
+		    String entity = tokens.nextToken ();
+
+		    if (!unparsed.contains (entity))
+			// VC: Entity Name
+			error ("Value of attribute '" + aname
+			    + "' refers to unparsed entity '" + entity
+			    + "' which was not declared.");
+		} while (tokens.hasMoreTokens ());
+		continue;
+	    }
+
+	    //
+	    // check for enumerations last; more expensive
+	    //
+	    if (ainfo.type.charAt (0) == '(' /*)*/	
+		    || ainfo.type.startsWith ("NOTATION ")
+		    ) {
+		// VC: Enumeration (value must be defined)
+		checkEnumeration (value, ainfo.type, aname);
+		continue;
+	    }
+	}
+
+	//
+	// Last, check that all #REQUIRED attributes were provided
+	//
+	if (info != null) {
+	    Hashtable	table = info.attributes;
+
+	    if (table.size () != 0) {
+		Enumeration	e = table.keys ();
+
+		// XXX table.keys uses the heap, bleech -- slows things
+
+		while (e.hasMoreElements ()) {
+		    aname = (String) e.nextElement ();
+		    ainfo = (AttributeInfo) table.get (aname);
+
+		    // "#REQUIRED" mode was interned in attributeDecl
+		    if ("#REQUIRED" == ainfo.mode
+			    && atts.getValue (aname) == null) {
+			// VC: Required Attribute
+			error ("Attribute '" + aname + "' must be specified "
+			    + "for element type " + qName);
+		    }
+		}
+	    }
+	}
+	super.startElement (uri, localName, qName, atts);
+    }
+
+    /**
+     * <b>ContentHandler</b> Reports a validity error if the element's content
+     * model does not permit character data.
+     * Passed to the next consumer.
+     */
+    public void characters (char ch [], int start, int length)
+    throws SAXException
+    {
+	Recognizer state;
+
+	if (contentStack.empty ())
+	    state = null;
+	else
+	    state = (Recognizer) contentStack.peek ();
+
+	// NOTE:  if this ever supports with SAX parsers that don't
+	// report ignorable whitespace as such (only XP?), this class
+	// needs to morph it into ignorableWhitespace() as needed ...
+
+	if (state != null && !state.acceptCharacters ())
+	    // VC: Element Valid (clauses three, four -- see recognizer)
+	    error ("Character content not allowed in element "
+		+ state.type.name);
+	
+	super.characters (ch, start, length);
+    }
+	
+
+    /**
+     * <b>ContentHandler</b> Reports a validity error if the element's content
+     * model does not permit end-of-element yet, or a well formedness error
+     * if there was no matching startElement call.
+     * Passed to the next consumer.
+     */
+    public void endElement (String uri, String localName, String qName)
+    throws SAXException
+    {
+	try {
+	    Recognizer state = (Recognizer) contentStack.pop ();
+
+	    if (state != null && !state.completed ())
+		// VC: Element valid (clauses two, three, four; see Recognizer)
+		error ("Premature end for element '"
+		    + state.type.name
+		    + "', content model "
+		    + state.type.model);
+	    
+	    // could insist on match of start element, but that's
+	    // something the input stream must to guarantee.
+
+	} catch (EmptyStackException e) {
+	    fatalError ("endElement without startElement: " + qName
+		+ ((uri == null)
+		    ? ""
+		    : ( " { '" + uri + "', " + localName + " }")));
+	}
+	super.endElement (uri, localName, qName);
+    }
+
+    /**
+     * <b>ContentHandler</b> Checks whether all ID values that were
+     * referenced have been declared, and releases all resources. 
+     * Passed to the next consumer.
+     * 
+     * @see #setDocumentLocator
+     */
+    public void endDocument ()
+    throws SAXException
+    {
+	for (Enumeration idNames = ids.keys ();
+		idNames.hasMoreElements ();
+		/* NOP */) {
+	    String id = (String) idNames.nextElement ();
+	    
+	    if (Boolean.FALSE == ids.get (id)) {
+		// VC: IDREF (must match ID)
+		error ("Undeclared ID value '" + id
+		    + "' was referred to by an IDREF/IDREFS attribute");
+	    }
+	}
+
+	resetState ();
+	super.endDocument ();
+    }
+
+
+    /** Holds per-element declarations */
+    static private final class ElementInfo
+    {
+	String			name;
+	String			model;
+
+	// key = attribute name; value = AttributeInfo
+	Hashtable		attributes = new Hashtable (11);
+
+	ElementInfo (String n) { name = n; }
+
+	private Recognizer	recognizer;
+
+	// for validating content models:  one per type, shared,
+	// and constructed only on demand ... so unused elements do
+	// not need to consume resources.
+	Recognizer	getRecognizer (ValidationConsumer consumer)
+	throws SAXException
+	{
+	    if (recognizer == null) {
+		if ("ANY".equals (model))
+		    recognizer = ANY;
+		else if ("EMPTY".equals (model))
+		    recognizer = new EmptyRecognizer (this);
+		else if ('#' == model.charAt (1))
+		    // n.b. this constructor does a validity check
+		    recognizer = new MixedRecognizer (this, consumer);
+		else
+		    recognizer = new ChildrenRecognizer (this, consumer);
+	    }
+	    return recognizer;
+	}
+    }
+
+    /** Holds per-attribute declarations */
+    static private final class AttributeInfo
+    {
+	String	type;
+	String	mode;		// #REQUIRED, etc (or null)
+	String	value;		// or null
+    }
+
+
+    //
+    // Content model validation
+    //
+
+    static private final Recognizer	ANY = new Recognizer (null);
+
+
+    // Base class defines the calls used to validate content,
+    // and supports the "ANY" content model
+    static private class Recognizer
+    {
+	final ElementInfo	type;
+
+	Recognizer (ElementInfo t) { type = t; }
+
+	// return true iff character data is legal here
+	boolean acceptCharacters ()
+	throws SAXException
+	    // VC: Element Valid (third and fourth clauses)
+	    { return true; }
+
+	// null return = failure
+	// otherwise, next state (like an FSM)
+	// prerequisite: tested that name was declared
+	Recognizer acceptElement (String name)
+	throws SAXException
+	    // VC: Element Valid (fourth clause)
+	    { return this; }
+
+	// return true iff model is completed, can finish
+	boolean completed ()
+	throws SAXException
+	    // VC: Element Valid (fourth clause)
+	    { return true; }
+	
+	public String toString ()
+	    // n.b. "children" is the interesting case!
+	    { return (type == null) ? "ANY" : type.model; }
+    }
+
+    // "EMPTY" content model -- no characters or elements
+    private static final class EmptyRecognizer extends Recognizer
+    {
+	public EmptyRecognizer (ElementInfo type)
+	    { super (type); }
+
+	// VC: Element Valid (first clause)
+	boolean acceptCharacters ()
+	    { return false; }
+
+	// VC: Element Valid (first clause)
+	Recognizer acceptElement (String name)
+	    { return null; }
+    }
+
+    // "Mixed" content model -- ANY, but restricts elements
+    private static final class MixedRecognizer extends Recognizer
+    {
+	private String	permitted [];
+
+	// N.B. constructor tests for duplicated element names (VC)
+	public MixedRecognizer (ElementInfo t, ValidationConsumer v)
+	throws SAXException
+	{
+	    super (t);
+
+	    // (#PCDATA...)* or (#PCDATA) ==> ... or empty
+	    // with the "..." being "|elname|..."
+	    StringTokenizer	tokens = new StringTokenizer (
+		t.model.substring (8, t.model.lastIndexOf (')')),
+		"|");
+	    Vector		vec = new Vector ();
+
+	    while (tokens.hasMoreTokens ()) {
+		String token = tokens.nextToken ();
+
+		if (vec.contains (token))
+		    v.error ("element " + token
+			+ " is repeated in mixed content model: "
+			+ t.model);
+		else
+		    vec.addElement (token.intern ());
+	    }
+	    permitted = new String [vec.size ()];
+	    for (int i = 0; i < permitted.length; i++)
+		permitted [i] = (String) vec.elementAt (i);
+	    
+	    // in one large machine-derived DTD sample, most of about
+	    // 250 mixed content models were empty, and 25 had ten or
+	    // more entries.  2 had over a hundred elements.  Linear
+	    // search isn't obviously wrong.
+	}
+
+	// VC: Element Valid (third clause)
+	Recognizer acceptElement (String name)
+	{
+	    int		length = permitted.length;
+
+	    // first pass -- optimistic w.r.t. event source interning
+	    // (and document validity)
+	    for (int i = 0; i < length; i++)
+		if (permitted [i] == name)
+		    return this;
+	    // second pass -- pessimistic w.r.t. event source interning
+	    for (int i = 0; i < length; i++)
+		if (permitted [i].equals (name))
+		    return this;
+	    return null;
+	}
+    }
+
+
+    // recognizer loop flags, see later
+    private static final int		F_LOOPHEAD = 0x01;
+    private static final int		F_LOOPNEXT = 0x02;
+
+    // for debugging -- used to label/count nodes in toString()
+    private static int			nodeCount;
+
+    /**
+     * "Children" content model -- these are nodes in NDFA state graphs.
+     * They work in fixed space.  Note that these graphs commonly have
+     * cycles, handling features such as zero-or-more and one-or-more.
+     *
+     * <p>It's readonly, so only one copy is ever needed.  The content model
+     * stack may have any number of pointers into each graph, when a model
+     * happens to be needed more than once due to element nesting.  Since
+     * traversing the graph just moves to another node, and never changes
+     * it, traversals never interfere with each other.
+     *
+     * <p>There is an option to report non-deterministic models.  These are
+     * always XML errors, but ones which are not often reported despite the
+     * fact that they can lead to different validating parsers giving
+     * different results for the same input.  (The XML spec doesn't require
+     * them to be reported.)
+     *
+     * <p><b>FIXME</b> There's currently at least one known bug here, in that
+     * it's not actually detecting the non-determinism it tries to detect.
+     * (Of the "optional.xml" test, the once-or-twice-2* tests are all non-D;
+     * maybe some others.)  This may relate to the issue flagged below as
+     * "should not" happen (but it was), which showed up when patching the
+     * graph to have one exit node (or more EMPTY nodes).
+     */
+    private static final class ChildrenRecognizer extends Recognizer
+	implements Cloneable
+    {
+	// for reporting non-deterministic content models
+	// ... a waste of space if we're not reporting those!
+	// ... along with the 'model' member (in base class)
+	private ValidationConsumer	consumer;
+
+	// for CHOICE nodes -- each component is an arc that
+	// accepts a different NAME (or is EMPTY indicating
+	// NDFA termination).
+	private Recognizer		components [];
+
+	// for NAME/SEQUENCE nodes -- accepts that NAME and
+	// then goes to the next node (CHOICE, NAME, EMPTY).
+	private String			name;
+	private Recognizer		next;
+
+	// loops always point back to a CHOICE node. we mark such choice
+	// nodes (F_LOOPHEAD) for diagnostics and faster deep cloning.
+	// We also mark nodes before back pointers (F_LOOPNEXT), to ensure
+	// termination when we patch sequences and loops.
+	private int			flags;
+
+
+	// prevent a needless indirection between 'this' and 'node'
+	private void copyIn (ChildrenRecognizer node)
+	{
+	    // model & consumer are already set
+	    components = node.components;
+	    name = node.name;
+	    next = node.next;
+	    flags = node.flags;
+	}
+
+	// used to construct top level "children" content models,
+	public ChildrenRecognizer (ElementInfo type, ValidationConsumer vc)
+	{
+	    this (vc, type);
+	    populate (type.model.toCharArray (), 0);
+	    patchNext (new EmptyRecognizer (type), null);
+	}
+
+	// used internally; populating is separate
+	private ChildrenRecognizer (ValidationConsumer vc, ElementInfo type)
+	{
+	    super (type);
+	    consumer = vc;
+	}
+
+
+	//
+	// When rewriting some graph nodes we need deep clones in one case;
+	// mostly shallow clones (what the JVM handles for us) are fine.
+	//
+	private ChildrenRecognizer shallowClone ()
+	{
+	    try {
+		return (ChildrenRecognizer) clone ();
+	    } catch (CloneNotSupportedException e) {
+		throw new Error ("clone");
+	    }
+	}
+
+	private ChildrenRecognizer deepClone ()
+	{
+	    return deepClone (new Hashtable (37));
+	}
+
+	private ChildrenRecognizer deepClone (Hashtable table)
+	{
+	    ChildrenRecognizer retval;
+
+	    if ((flags & F_LOOPHEAD) != 0) {
+		retval = (ChildrenRecognizer) table.get (this);
+		if (retval != null)
+		    return this;
+
+		retval = shallowClone ();
+		table.put (this, retval);
+	    } else
+		retval = shallowClone ();
+
+	    if (next != null) {
+		if (next instanceof ChildrenRecognizer)
+		    retval.next = ((ChildrenRecognizer)next)
+			    .deepClone (table);
+		else if (!(next instanceof EmptyRecognizer))
+		    throw new RuntimeException ("deepClone");
+	    }
+
+	    if (components != null) {
+		retval.components = new Recognizer [components.length];
+		for (int i = 0; i < components.length; i++) {
+		    Recognizer temp = components [i];
+
+		    if (temp == null)
+			retval.components [i] = null;
+		    else if (temp instanceof ChildrenRecognizer)
+			retval.components [i] = ((ChildrenRecognizer)temp)
+				.deepClone (table);
+		    else if (!(temp instanceof EmptyRecognizer))
+			throw new RuntimeException ("deepClone");
+		}
+	    }
+
+	    return retval;
+	}
+
+	// connect subgraphs, first to next (sequencing)
+	private void patchNext (Recognizer theNext, Hashtable table)
+	{
+	    // backpointers must not be repatched or followed
+	    if ((flags & F_LOOPNEXT) != 0)
+		return;
+
+	    // XXX this table "shouldn't" be needed, right?
+	    // but some choice nodes looped if it isn't there.
+	    if (table != null && table.get (this) != null)
+		return;
+	    if (table == null)
+		table = new Hashtable ();
+
+	    // NAME/SEQUENCE
+	    if (name != null) {
+		if (next == null)
+		    next = theNext;
+		else if (next instanceof ChildrenRecognizer) {
+		    ((ChildrenRecognizer)next).patchNext (theNext, table);
+		} else if (!(next instanceof EmptyRecognizer))
+		    throw new RuntimeException ("patchNext");
+		return;
+	    }
+
+	    // CHOICE
+	    for (int i = 0; i < components.length; i++) {
+		if (components [i] == null)
+		    components [i] = theNext;
+		else if (components [i] instanceof ChildrenRecognizer) {
+		    ((ChildrenRecognizer)components [i])
+			    .patchNext (theNext, table);
+		} else if (!(components [i] instanceof EmptyRecognizer))
+		    throw new RuntimeException ("patchNext");
+	    }
+
+	    if (table != null && (flags & F_LOOPHEAD) != 0)
+		table.put (this, this);
+	}
+
+	/**
+	 * Parses a 'children' spec (or recursively 'cp') and makes this
+	 * become a regular graph node.
+	 *
+	 * @return index after this particle
+	 */
+	private int populate (char parseBuf [], int startPos)
+	{
+	    int		nextPos = startPos + 1;
+	    char	c;
+
+	    if (nextPos < 0 || nextPos >= parseBuf.length)
+		throw new IndexOutOfBoundsException ();
+
+	    // Grammar of the string is from the XML spec, but
+	    // with whitespace removed by the SAX parser.
+
+	    // children ::= (choice | seq) ('?' | '*' | '+')?
+	    // cp ::= (Name | choice | seq) ('?' | '*' | '+')?
+	    // choice ::= '(' cp ('|' choice)* ')'
+	    // seq ::= '(' cp (',' choice)* ')'
+
+	    // interior nodes only
+	    //   cp ::= name ...
+	    if (parseBuf [startPos] != '('/*)*/) {
+		boolean		done = false;
+		do {
+		    switch (c = parseBuf [nextPos]) {
+			case '?': case '*': case '+':
+			case '|': case ',':
+			case /*(*/ ')':
+			    done = true;
+			    continue;
+			default:
+			    nextPos++;
+			    continue;
+		    }
+		} while (!done);
+		name = new String (parseBuf, startPos, nextPos - startPos);
+
+	    // interior OR toplevel nodes
+	    //   cp ::= choice ..
+	    //   cp ::= seq ..
+	    } else {
+		// collect everything as a separate list, and merge it
+		// into "this" later if we can (SEQUENCE or singleton)
+		ChildrenRecognizer	first;
+	       
+		first = new ChildrenRecognizer (consumer, type);
+		nextPos = first.populate (parseBuf, nextPos);
+		c = parseBuf [nextPos++];
+
+		if (c == ',' || c == '|') {
+		    ChildrenRecognizer	current = first;
+		    char		separator = c;
+		    Vector		v = null;
+
+		    if (separator == '|') {
+			v = new Vector ();
+			v.addElement (first);
+		    }
+
+		    do {
+			ChildrenRecognizer link;
+
+			link = new ChildrenRecognizer (consumer, type);
+			nextPos = link.populate (parseBuf, nextPos);
+
+			if (separator == ',') {
+			    current.patchNext (link, null);
+			    current = link;
+			} else
+			    v.addElement (link);
+
+			c = parseBuf [nextPos++];
+		    } while (c == separator);
+
+		    // choice ... collect everything into one array.
+		    if (separator == '|') {
+			// assert v.size() > 1
+			components = new Recognizer [v.size ()];
+			for (int i = 0; i < components.length; i++) {
+			    components [i] = (Recognizer)
+				    v.elementAt (i);
+			}
+			// assert flags == 0
+
+		    // sequence ... merge into "this" to be smaller.
+		    } else
+			copyIn (first);
+
+		// treat singletons like one-node sequences.
+		} else
+		    copyIn (first);
+
+		if (c != /*(*/ ')')
+		    throw new RuntimeException ("corrupt content model");
+	    }
+
+	    //
+	    // Arity is optional, and the root of all fun.  We keep the
+	    // FSM state graph simple by only having NAME/SEQUENCE and
+	    // CHOICE nodes (or EMPTY to terminate a model), easily
+	    // evaluated.  So we rewrite each node that has arity, using
+	    // those primitives.  We create loops here, if needed.
+	    //
+	    if (nextPos < parseBuf.length) {
+		c = parseBuf [nextPos];
+		if (c == '?' || c == '*' || c == '+') {
+		    nextPos++;
+
+		    // Rewrite 'zero-or-one' "?" arity to a CHOICE:
+		    //   - SEQUENCE (clone, what's next)
+		    //   - or, what's next
+		    // Size cost: N --> N + 1
+		    if (c == '?') {
+			Recognizer		once = shallowClone ();
+
+			components = new Recognizer [2];
+			components [0] = once;
+			// components [1] initted to null
+			name = null;
+			next = null;
+			flags = 0;
+
+			    
+		    // Rewrite 'zero-or-more' "*" arity to a CHOICE.
+		    //   - LOOP (clone, back to this CHOICE)
+		    //   - or, what's next
+		    // Size cost: N --> N + 1
+		    } else if (c == '*') {
+			ChildrenRecognizer	loop = shallowClone ();
+
+			loop.patchNext (this, null);
+			loop.flags |= F_LOOPNEXT;
+			flags = F_LOOPHEAD;
+
+			components = new Recognizer [2];
+			components [0] = loop;
+			// components [1] initted to null
+			name = null;
+			next = null;
+
+
+		    // Rewrite 'one-or-more' "+" arity to a SEQUENCE.
+		    // Basically (a)+ --> ((a),(a)*).
+		    //   - this
+		    //   - CHOICE
+		    //	    * LOOP (clone, back to the CHOICE)
+		    //	    * or, whatever's next
+		    // Size cost: N --> 2N + 1
+		    } else if (c == '+') {
+			ChildrenRecognizer loop = deepClone ();
+			ChildrenRecognizer choice;
+
+			choice = new ChildrenRecognizer (consumer, type);
+			loop.patchNext (choice, null);
+			loop.flags |= F_LOOPNEXT;
+			choice.flags = F_LOOPHEAD;
+
+			choice.components = new Recognizer [2];
+			choice.components [0] = loop;
+			// choice.components [1] initted to null
+			// choice.name, choice.next initted to null
+
+			patchNext (choice, null);
+		    }
+		}
+	    }
+
+	    return nextPos;
+	}
+
+	// VC: Element Valid (second clause)
+	boolean acceptCharacters ()
+	    { return false; }
+
+	// VC: Element Valid (second clause)
+	Recognizer acceptElement (String type)
+	throws SAXException
+	{
+	    // NAME/SEQUENCE
+	    if (name != null) {
+		if (name.equals (type))
+		    return next;
+		return null;
+	    }
+
+	    // CHOICE ... optionally reporting nondeterminism we
+	    // run across.  we won't check out every transition
+	    // for nondeterminism; only the ones we follow.
+	    Recognizer	retval = null;
+
+	    for (int i = 0; i < components.length; i++) {
+		Recognizer temp = components [i].acceptElement (type);
+
+		if (temp == null)
+		    continue;
+		else if (!warnNonDeterministic)
+		    return temp;
+		else if (retval == null)
+		    retval = temp;
+		else if (retval != temp)
+		    consumer.error ("Content model " + this.type.model
+			+ " is non-deterministic for " + type);
+	    }
+	    return retval;
+	}
+
+	// VC: Element Valid (second clause)
+	boolean completed ()
+	throws SAXException
+	{
+	    // expecting a specific element
+	    if (name != null)
+		return false;
+	    
+	    // choice, some sequences
+	    for (int i = 0; i < components.length; i++) {
+		if (components [i].completed ())
+		    return true;
+	    }
+
+	    return false;
+	}
+
+/** /
+	// FOR DEBUGGING ... flattens the graph for printing.
+
+	public String toString ()
+	{
+	    StringBuffer buf = new StringBuffer ();
+
+	    // only one set of loop labels can be generated
+	    // at a time...
+	    synchronized (ANY) {
+		nodeCount = 0;
+
+		toString (buf, new Hashtable ());
+		return buf.toString ();
+	    }
+	}
+
+	private void toString (StringBuffer buf, Hashtable table)
+	{
+	    // When we visit a node, label and count it.
+	    // Nodes are never visited/counted more than once.
+	    // For small models labels waste space, but if arity
+	    // mappings were used the savings are substantial.
+	    // (Plus, the output can be more readily understood.)
+	    String temp = (String) table.get (this);
+
+	    if (temp != null) {
+		buf.append ('{');
+		buf.append (temp);
+		buf.append ('}');
+		return;
+	    } else {
+		StringBuffer scratch = new StringBuffer (15);
+
+		if ((flags & F_LOOPHEAD) != 0)
+		    scratch.append ("loop");
+		else
+		    scratch.append ("node");
+		scratch.append ('-');
+		scratch.append (++nodeCount);
+		temp = scratch.toString ();
+
+		table.put (this, temp);
+		buf.append ('[');
+		buf.append (temp);
+		buf.append (']');
+		buf.append (':');
+	    }
+
+	    // NAME/SEQUENCE
+	    if (name != null) {
+		// n.b. some output encodings turn some name chars into '?'
+		// e.g. with Japanese names and ASCII output
+		buf.append (name);
+		if (components != null)		// bug!
+		    buf.append ('$');
+		if (next == null)
+		    buf.append (",*");
+		else if (next instanceof EmptyRecognizer) // patch-to-next
+		    buf.append (",{}");
+		else if (next instanceof ChildrenRecognizer) {
+		    buf.append (',');
+		    ((ChildrenRecognizer)next).toString (buf, table);
+		} else				// bug!
+		    buf.append (",+");
+		return;
+	    }
+
+	    // CHOICE
+	    buf.append ("<");
+	    for (int i = 0; i < components.length; i++) {
+		if (i != 0)
+		    buf.append ("|");
+		if (components [i] instanceof EmptyRecognizer) {
+		    buf.append ("{}");
+		} else if (components [i] == null) {	// patch-to-next
+		    buf.append ('*');
+		} else {
+		    ChildrenRecognizer r;
+
+		    r = (ChildrenRecognizer) components [i];
+		    r.toString (buf, table);
+		}
+	    }
+	    buf.append (">");
+	}
+/**/
+    }
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/WellFormednessFilter.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/WellFormednessFilter.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/WellFormednessFilter.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/WellFormednessFilter.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,363 @@
+/* WellFormednessFilter.java -- 
+   Copyright (C) 1999,2000,2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.pipeline;
+
+import java.util.EmptyStackException;
+import java.util.Stack;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+/**
+ * This filter reports fatal exceptions in the case of event streams that
+ * are not well formed.  The rules currently tested include: <ul>
+ *
+ *	<li>setDocumentLocator ... may be called only before startDocument
+ *
+ *	<li>startDocument/endDocument ... must be paired, and all other
+ *	calls (except setDocumentLocator) must be nested within these.
+ *
+ *	<li>startElement/endElement ... must be correctly paired, and
+ *	may never appear within CDATA sections.
+ *
+ *	<li>comment ... can't contain "--"
+ *
+ *	<li>character data ... can't contain "]]>"
+ *
+ *	<li>whitespace ... can't contain CR
+ *
+ *	<li>whitespace and character data must be within an element
+ *
+ *	<li>processing instruction ... can't contain "?>" or CR
+ *
+ *	<li>startCDATA/endCDATA ... must be correctly paired.
+ *
+ *	</ul>
+ *
+ * <p> Other checks for event stream correctness may be provided in
+ * the future.  For example, insisting that
+ * entity boundaries nest correctly,
+ * namespace scopes nest correctly,
+ * namespace values never contain relative URIs,
+ * attributes don't have "<" characters;
+ * and more.
+ *
+ * @author David Brownell
+ */
+public final class WellFormednessFilter extends EventFilter
+{
+    private boolean		startedDoc;
+    private Stack		elementStack = new Stack ();
+    private boolean		startedCDATA;
+    private String		dtdState = "before";
+
+    
+    /**
+     * Swallows all events after performing well formedness checks.
+     */
+	// constructor used by PipelineFactory
+    public WellFormednessFilter ()
+	{ this (null); }
+
+
+    /**
+     * Passes events through to the specified consumer, after first
+     * processing them.
+     */
+	// constructor used by PipelineFactory
+    public WellFormednessFilter (EventConsumer consumer)
+    {
+	super (consumer);
+
+	setContentHandler (this);
+	setDTDHandler (this);
+	
+	try {
+	    setProperty (LEXICAL_HANDLER, this);
+	} catch (SAXException e) { /* can't happen */ }
+    }
+
+    /**
+     * Resets state as if any preceding event stream was well formed.
+     * Particularly useful if it ended through some sort of error,
+     * and the endDocument call wasn't made.
+     */
+    public void reset ()
+    {
+	startedDoc = false;
+	startedCDATA = false;
+	elementStack.removeAllElements ();
+    }
+
+
+    private SAXParseException getException (String message)
+    {
+	SAXParseException	e;
+	Locator			locator = getDocumentLocator ();
+
+	if (locator == null)
+	    return new SAXParseException (message, null, null, -1, -1);
+	else
+	    return new SAXParseException (message, locator);
+    }
+
+    private void fatalError (String message)
+    throws SAXException
+    {
+	SAXParseException	e = getException (message);
+	ErrorHandler		handler = getErrorHandler ();
+
+	if (handler != null)
+	    handler.fatalError (e);
+	throw e;
+    }
+
+    /**
+     * Throws an exception when called after startDocument.
+     *
+     * @param locator the locator, to be used in error reporting or relative
+     *	URI resolution.
+     *
+     * @exception IllegalStateException when called after the document
+     *	has already been started
+     */
+    public void setDocumentLocator (Locator locator)
+    {
+	if (startedDoc)
+	    throw new IllegalStateException (
+		    "setDocumentLocator called after startDocument");
+	super.setDocumentLocator (locator);
+    }
+
+    public void startDocument () throws SAXException
+    {
+	if (startedDoc)
+	    fatalError ("startDocument called more than once");
+	startedDoc = true;
+	startedCDATA = false;
+	elementStack.removeAllElements ();
+	super.startDocument ();
+    }
+
+    public void startElement (
+	String uri, String localName,
+	String qName, Attributes atts
+    ) throws SAXException
+    {
+	if (!startedDoc)
+	    fatalError ("callback outside of document?");
+	if ("inside".equals (dtdState))
+	    fatalError ("element inside DTD?");
+	else
+	    dtdState = "after";
+	if (startedCDATA)
+	    fatalError ("element inside CDATA section");
+	if (qName == null || "".equals (qName))
+	    fatalError ("startElement name missing");
+	elementStack.push (qName);
+	super.startElement (uri, localName, qName, atts);
+    }
+
+    public void endElement (String uri, String localName, String qName)
+    throws SAXException
+    {
+	if (!startedDoc)
+	    fatalError ("callback outside of document?");
+	if (startedCDATA)
+	    fatalError ("element inside CDATA section");
+	if (qName == null || "".equals (qName))
+	    fatalError ("endElement name missing");
+	
+	try {
+	    String	top = (String) elementStack.pop ();
+
+	    if (!qName.equals (top))
+		fatalError ("<" + top + " ...>...</" + qName + ">");
+	    // XXX could record/test namespace info
+	} catch (EmptyStackException e) {
+	    fatalError ("endElement without startElement:  </" + qName + ">");
+	}
+	super.endElement (uri, localName, qName);
+    }
+
+    public void endDocument () throws SAXException
+    {
+	if (!startedDoc)
+	    fatalError ("callback outside of document?");
+	dtdState = "before";
+	startedDoc = false;
+	super.endDocument ();
+    }
+
+
+    public void startDTD (String root, String publicId, String systemId)
+    throws SAXException
+    {
+	if (!startedDoc)
+	    fatalError ("callback outside of document?");
+    if ("before" != dtdState)
+	    fatalError ("two DTDs?");
+	if (!elementStack.empty ())
+	    fatalError ("DTD must precede root element");
+	dtdState = "inside";
+	super.startDTD (root, publicId, systemId);
+    }
+
+    public void notationDecl (String name, String publicId, String systemId)
+    throws SAXException
+    {
+// FIXME: not all parsers will report startDTD() ...
+// we'd rather insist we're "inside".
+    if ("after" == dtdState)
+	    fatalError ("not inside DTD");
+	super.notationDecl (name, publicId, systemId);
+    }
+
+    public void unparsedEntityDecl (String name,
+    	String publicId, String systemId, String notationName)
+    throws SAXException
+    {
+// FIXME: not all parsers will report startDTD() ...
+// we'd rather insist we're "inside".
+    if ("after" == dtdState)
+	    fatalError ("not inside DTD");
+	super.unparsedEntityDecl (name, publicId, systemId, notationName);
+    }
+
+    // FIXME:  add the four DeclHandler calls too
+
+    public void endDTD ()
+    throws SAXException
+    {
+	if (!startedDoc)
+	    fatalError ("callback outside of document?");
+	if ("inside" != dtdState)
+	    fatalError ("DTD ends without start?");
+	dtdState = "after";
+	super.endDTD ();
+    }
+
+    public void characters (char ch [], int start, int length)
+    throws SAXException
+    {
+	int here = start, end = start + length;
+	if (elementStack.empty ())
+	    fatalError ("characters must be in an element");
+	while (here < end) {
+	    if (ch [here++] != ']')
+		continue;
+	    if (here == end)	// potential problem ...
+		continue;
+	    if (ch [here++] != ']')
+		continue;
+	    if (here == end)	// potential problem ...
+		continue;
+	    if (ch [here++] == '>')
+		fatalError ("character data can't contain \"]]>\"");
+	}
+	super.characters (ch, start, length);
+    }
+
+    public void ignorableWhitespace (char ch [], int start, int length)
+    throws SAXException
+    {
+	int here = start, end = start + length;
+	if (elementStack.empty ())
+	    fatalError ("characters must be in an element");
+	while (here < end) {
+	    if (ch [here++] == '\r')
+		fatalError ("whitespace can't contain CR");
+	}
+	super.ignorableWhitespace (ch, start, length);
+    }
+
+    public void processingInstruction (String target, String data)
+    throws SAXException
+    {
+	if (data.indexOf ('\r') > 0)
+	    fatalError ("PIs can't contain CR");
+	if (data.indexOf ("?>") > 0)
+	    fatalError ("PIs can't contain \"?>\"");
+    }
+
+    public void comment (char ch [], int start, int length)
+    throws SAXException
+    {
+	if (!startedDoc)
+	    fatalError ("callback outside of document?");
+	if (startedCDATA)
+	    fatalError ("comments can't nest in CDATA");
+	int here = start, end = start + length;
+	while (here < end) {
+	    if (ch [here] == '\r')
+		fatalError ("comments can't contain CR");
+	    if (ch [here++] != '-')
+		continue;
+	    if (here == end)
+		fatalError ("comments can't end with \"--->\"");
+	    if (ch [here++] == '-')
+		fatalError ("comments can't contain \"--\"");
+	}
+	super.comment (ch, start, length);
+    }
+
+    public void startCDATA ()
+    throws SAXException
+    {
+	if (!startedDoc)
+	    fatalError ("callback outside of document?");
+	if (startedCDATA)
+	    fatalError ("CDATA starts can't nest");
+	startedCDATA = true;
+	super.startCDATA ();
+    }
+
+    public void endCDATA ()
+    throws SAXException
+    {
+	if (!startedDoc)
+	    fatalError ("callback outside of document?");
+	if (!startedCDATA)
+	    fatalError ("CDATA end without start?");
+	startedCDATA = false;
+	super.endCDATA ();
+    }
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/XIncludeFilter.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/XIncludeFilter.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/XIncludeFilter.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/XIncludeFilter.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,579 @@
+/* XIncludeFilter.java -- 
+   Copyright (C) 2001,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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.pipeline;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL; 
+import java.net.URLConnection; 
+import java.util.Hashtable;
+import java.util.Stack;
+import java.util.Vector;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+import gnu.xml.util.Resolver;
+
+
+
+/**
+ * Filter to process an XPointer-free subset of
+ * <a href="http://www.w3.org/TR/xinclude">XInclude</a>, supporting its
+ * use as a kind of replacement for parsed general entities.
+ * XInclude works much like the <code>#include</code> of C/C++ but
+ * works for XML documents as well as unparsed text files.
+ * Restrictions from the 17-Sept-2002 CR draft of XInclude are as follows:
+ *
+ * <ul>
+ *
+ * <li> URIs must not include fragment identifiers.
+ * The CR specifies support for XPointer <em>element()</em> fragment IDs,
+ * which is not currently implemented here.
+ *
+ * <li> <em>xi:fallback</em> handling of resource errors is not
+ * currently supported.
+ *
+ * <li> DTDs are not supported in included files, since the SAX DTD events
+ * must have completely preceded any included file. 
+ * The CR explicitly allows the DTD related portions of the infoset to
+ * grow as an effect of including XML documents.
+ *
+ * <li> <em>xml:base</em> fixup isn't done.
+ *
+ * </ul>
+ *
+ * <p> XML documents that are included will normally be processed using
+ * the default SAX namespace rules, meaning that prefix information may
+ * be discarded.  This may be changed with {@link #setSavingPrefixes
+ * setSavingPrefixes()}.  <em>You are strongly advised to do this.</em>
+ *
+ * <p> Note that XInclude allows highly incompatible implementations, which
+ * are specialized to handle application-specific infoset extensions.  Some
+ * such implementations can be implemented by subclassing this one, but
+ * they may only be substituted in applications at "user option".
+ *
+ * <p>TBD: "IURI" handling.
+ *
+ * @author David Brownell
+ */
+public class XIncludeFilter extends EventFilter implements Locator
+{
+    private Hashtable		extEntities = new Hashtable (5, 5);
+    private int			ignoreCount;
+    private Stack		uris = new Stack ();
+    private Locator		locator;
+    private Vector		inclusions = new Vector (5, 5);
+    private boolean		savingPrefixes;
+
+    /**
+     */
+    public XIncludeFilter (EventConsumer next)
+    throws SAXException
+    {
+	super (next);
+	setContentHandler (this);
+	// DTDHandler callbacks pass straight through
+	setProperty (DECL_HANDLER, this);
+	setProperty (LEXICAL_HANDLER, this);
+    }
+
+    private void fatal (SAXParseException e) throws SAXException
+    {
+	ErrorHandler		eh;
+	
+	eh = getErrorHandler ();
+	if (eh != null)
+	    eh.fatalError (e);
+	throw e;
+    }
+
+    /**
+     * Passes "this" down the filter chain as a proxy locator.
+     */
+    public void setDocumentLocator (Locator locator)
+    {
+	this.locator = locator;
+	super.setDocumentLocator (this);
+    }
+
+    /** Used for proxy locator; do not call directly. */
+    public String getSystemId ()
+	{ return (locator == null) ? null : locator.getSystemId (); }
+    /** Used for proxy locator; do not call directly. */
+    public String getPublicId ()
+	{ return (locator == null) ? null : locator.getPublicId (); }
+    /** Used for proxy locator; do not call directly. */
+    public int getLineNumber ()
+	{ return (locator == null) ? -1 : locator.getLineNumber (); }
+    /** Used for proxy locator; do not call directly. */
+    public int getColumnNumber ()
+	{ return (locator == null) ? -1 : locator.getColumnNumber (); }
+
+    /**
+     * Assigns the flag controlling the setting of the SAX2
+     * <em>namespace-prefixes</em> flag.
+     */
+    public void setSavingPrefixes (boolean flag)
+	{ savingPrefixes = flag; }
+
+    /**
+     * Returns the flag controlling the setting of the SAX2
+     * <em>namespace-prefixes</em> flag when parsing included documents.
+     * The default value is the SAX2 default (false), which discards
+     * information that can be useful.
+     */
+    public boolean isSavingPrefixes ()
+	{ return savingPrefixes; }
+
+    //
+    // Two mechanisms are interacting here.
+    // 
+    //	- XML Base implies a stack of base URIs, updated both by
+    //	  "real entity" boundaries and element boundaries.
+    //
+    //	- Active "Real Entities" (for document and general entities,
+    //	  and by xincluded files) are tracked to prevent circular
+    //	  inclusions.
+    //
+    private String addMarker (String uri)
+    throws SAXException
+    {
+	if (locator != null && locator.getSystemId () != null)
+	    uri = locator.getSystemId ();
+
+	// guard against InputSource objects without system IDs
+	if (uri == null)
+	    fatal (new SAXParseException ("Entity URI is unknown", locator));
+
+	try {
+	    URL	url = new URL (uri);
+
+	    uri = url.toString ();
+	    if (inclusions.contains (uri))
+		fatal (new SAXParseException (
+			"XInclude, circular inclusion", locator));
+	    inclusions.addElement (uri);
+	    uris.push (url);
+	} catch (IOException e) {
+	    // guard against illegal relative URIs (Xerces)
+	    fatal (new SAXParseException ("parser bug: relative URI",
+		locator, e));
+	}
+	return uri;
+    }
+
+    private void pop (String uri)
+    {
+	inclusions.removeElement (uri);
+	uris.pop ();
+    }
+
+    //
+    // Document entity boundaries get both treatments.
+    //
+    public void startDocument () throws SAXException
+    {
+	ignoreCount = 0;
+	addMarker (null);
+	super.startDocument ();
+    }
+
+    public void endDocument () throws SAXException
+    {
+	inclusions.setSize (0);
+	extEntities.clear ();
+	uris.setSize (0);
+	super.endDocument ();
+    }
+
+    //
+    // External general entity boundaries get both treatments.
+    //
+    public void externalEntityDecl (String name,
+    	String publicId, String systemId)
+    throws SAXException
+    {
+	if (name.charAt (0) == '%')
+	    return;
+	try {
+	    URL	url = new URL (locator.getSystemId ());
+	    systemId = new URL (url, systemId).toString ();
+	} catch (IOException e) {
+	    // what could we do?
+	}
+	extEntities.put (name, systemId);
+    }
+
+    public void startEntity (String name)
+    throws SAXException
+    {
+	if (ignoreCount != 0) {
+	    ignoreCount++;
+	    return;
+	}
+
+	String	uri = (String) extEntities.get (name);
+	if (uri != null)
+	    addMarker (uri);
+	super.startEntity (name);
+    }
+
+    public void endEntity (String name)
+    throws SAXException
+    {
+	if (ignoreCount != 0) {
+	    if (--ignoreCount != 0)
+		return;
+	}
+
+	String	uri = (String) extEntities.get (name);
+
+	if (uri != null)
+	    pop (uri);
+	super.endEntity (name);
+    }
+    
+    //
+    // element boundaries only affect the base URI stack,
+    // unless they're XInclude elements.
+    //
+    public void
+    startElement (String uri, String localName, String qName, Attributes atts)
+    throws SAXException
+    {
+	if (ignoreCount != 0) {
+	    ignoreCount++;
+	    return;
+	}
+
+	URL	baseURI = (URL) uris.peek ();
+	String	base;
+
+	base = atts.getValue ("http://www.w3.org/XML/1998/namespace", "base");
+	if (base == null)
+	    uris.push (baseURI);
+	else {
+	    URL		url;
+
+	    if (base.indexOf ('#') != -1)
+		fatal (new SAXParseException (
+		    "xml:base with fragment: " + base,
+		    locator));
+
+	    try {
+		baseURI = new URL (baseURI, base);
+		uris.push (baseURI);
+	    } catch (Exception e) {
+		fatal (new SAXParseException (
+		    "xml:base with illegal uri: " + base,
+		    locator, e));
+	    }
+	}
+
+	if (!"http://www.w3.org/2001/XInclude".equals (uri)) {
+	    super.startElement (uri, localName, qName, atts);
+	    return;
+	}
+
+	if ("include".equals (localName)) {
+	    String	href = atts.getValue ("href");
+	    String	parse = atts.getValue ("parse");
+	    String	encoding = atts.getValue ("encoding");
+	    URL		url = (URL) uris.peek ();
+	    SAXParseException	x = null;
+
+	    if (href == null)
+		fatal (new SAXParseException (
+		    "XInclude missing href",
+		    locator));
+	    if (href.indexOf ('#') != -1)
+		fatal (new SAXParseException (
+		    "XInclude with fragment: " + href,
+		    locator));
+
+	    if (parse == null || "xml".equals (parse))
+		x = xinclude (url, href);
+	    else if ("text".equals (parse))
+		x = readText (url, href, encoding);
+	    else
+		fatal (new SAXParseException (
+		    "unknown XInclude parsing mode: " + parse,
+		    locator));
+	    if (x == null) {
+		// strip out all child content
+		ignoreCount++;
+		return;
+	    }
+
+	    // FIXME the 17-Sept-2002 CR of XInclude says we "must"
+	    // use xi:fallback elements to handle resource errors,
+	    // if they exist.
+	    fatal (x);
+
+	} else if ("fallback".equals (localName)) {
+	    fatal (new SAXParseException (
+		"illegal top level XInclude 'fallback' element",
+		locator));
+	} else {
+	    ErrorHandler	eh = getErrorHandler ();
+
+	    // CR doesn't say this is an error
+	    if (eh != null)
+		eh.warning (new SAXParseException (
+		    "unrecognized toplevel XInclude element: " + localName,
+		    locator));
+	    super.startElement (uri, localName, qName, atts);
+	}
+    }
+
+    public void endElement (String uri, String localName, String qName)
+    throws SAXException
+    {
+	if (ignoreCount != 0) {
+	    if (--ignoreCount != 0)
+		return;
+	}
+
+	uris.pop ();
+	if (!("http://www.w3.org/2001/XInclude".equals (uri)
+		&& "include".equals (localName)))
+	    super.endElement (uri, localName, qName);
+    }
+
+    //
+    // ignore all content within non-empty xi:include elements
+    //
+    public void characters (char ch [], int start, int length)
+    throws SAXException
+    {
+	if (ignoreCount == 0)
+	    super.characters (ch, start, length);
+    }
+
+    public void processingInstruction (String target, String value)
+    throws SAXException
+    {
+	if (ignoreCount == 0)
+	    super.processingInstruction (target, value);
+    }
+
+    public void ignorableWhitespace (char ch [], int start, int length)
+    throws SAXException
+    {
+	if (ignoreCount == 0)
+	    super.ignorableWhitespace (ch, start, length);
+    }
+
+    public void comment (char ch [], int start, int length)
+    throws SAXException
+    {
+	if (ignoreCount == 0)
+	    super.comment (ch, start, length);
+    }
+
+    public void startCDATA () throws SAXException
+    {
+	if (ignoreCount == 0)
+	    super.startCDATA ();
+    }
+
+    public void endCDATA () throws SAXException
+    {
+	if (ignoreCount == 0)
+	    super.endCDATA ();
+    }
+
+    public void startPrefixMapping (String prefix, String uri)
+    throws SAXException
+    {
+	if (ignoreCount == 0)
+	    super.startPrefixMapping (prefix, uri);
+    }
+
+    public void endPrefixMapping (String prefix) throws SAXException
+    {
+	if (ignoreCount == 0)
+	    super.endPrefixMapping (prefix);
+    }
+
+    public void skippedEntity (String name) throws SAXException
+    {
+	if (ignoreCount == 0)
+	    super.skippedEntity (name);
+    }
+
+    // JDK 1.1 seems to need it to be done this way, sigh
+    void setLocator (Locator l) { locator = l; }
+    Locator getLocator () { return locator; }
+    
+
+    //
+    // for XIncluded entities, manage the current locator and
+    // filter out events that would be incorrect to report
+    //
+    private class Scrubber extends EventFilter
+    {
+	Scrubber (EventFilter f)
+	throws SAXException
+	{
+	    // delegation passes to next in chain
+	    super (f);
+
+	    // process all content events
+	    super.setContentHandler (this);
+	    super.setProperty (LEXICAL_HANDLER, this);
+
+	    // drop all DTD events
+	    super.setDTDHandler (null);
+	    super.setProperty (DECL_HANDLER, null);
+	}
+
+	// maintain proxy locator
+	// only one startDocument()/endDocument() pair per event stream
+	public void setDocumentLocator (Locator l)
+	    { setLocator (l); }
+	public void startDocument ()
+	    { }
+	public void endDocument ()
+	    { }
+	
+	private void reject (String message) throws SAXException
+	    { fatal (new SAXParseException (message, getLocator ())); }
+	
+	// only the DTD from the "base document" gets reported
+	public void startDTD (String root, String publicId, String systemId)
+	throws SAXException
+	    { reject ("XIncluded DTD: " + systemId); }
+	public void endDTD ()
+	throws SAXException
+	    { reject ("XIncluded DTD"); }
+	// ... so this should never happen
+	public void skippedEntity (String name) throws SAXException
+	    { reject ("XInclude skipped entity: " + name); }
+
+	// since we rejected DTDs, only builtin entities can be reported
+    }
+
+    // <xi:include parse='xml' ...>
+    // relative to the base URI passed
+    private SAXParseException xinclude (URL url, String href)
+    throws SAXException
+    {
+	XMLReader	helper;
+	Scrubber	scrubber;
+	Locator		savedLocator = locator;
+
+	// start with a parser acting just like our input
+	// modulo DTD-ish stuff (validation flag, entity resolver)
+	helper = XMLReaderFactory.createXMLReader ();
+	helper.setErrorHandler (getErrorHandler ());
+	helper.setFeature (FEATURE_URI + "namespace-prefixes", true);
+
+	// Set up the proxy locator and event filter.
+	scrubber = new Scrubber (this);
+	locator = null;
+	bind (helper, scrubber);
+
+	// Merge the included document, except its DTD
+	try {
+	    url = new URL (url, href);
+	    href = url.toString ();
+
+	    if (inclusions.contains (href))
+		fatal (new SAXParseException (
+			"XInclude, circular inclusion", locator));
+
+	    inclusions.addElement (href);
+	    uris.push (url);
+	    helper.parse (new InputSource (href));
+	    return null;
+	} catch (java.io.IOException e) {
+	    return new SAXParseException (href, locator, e);
+	} finally {
+	    pop (href);
+	    locator = savedLocator;
+	}
+    }
+
+    // <xi:include parse='text' ...>
+    // relative to the base URI passed
+    private SAXParseException readText (URL url, String href, String encoding)
+    throws SAXException
+    {
+	InputStream	in = null;
+
+	try {
+	    URLConnection	conn;
+	    InputStreamReader	reader;
+	    char		buf [] = new char [4096];
+	    int			count;
+
+	    url = new URL (url, href);
+	    conn = url.openConnection ();
+	    in = conn.getInputStream ();
+	    if (encoding == null)
+		encoding = Resolver.getEncoding (conn.getContentType ());
+	    if (encoding == null) {
+		ErrorHandler	eh = getErrorHandler ();
+		if (eh != null)
+		    eh.warning (new SAXParseException (
+			"guessing text encoding for URL: " + url,
+			locator));
+		reader = new InputStreamReader (in);
+	    } else
+		reader = new InputStreamReader (in, encoding);
+
+	    while ((count = reader.read (buf, 0, buf.length)) != -1)
+		super.characters (buf, 0, count);
+	    in.close ();
+	    return null;
+	} catch (IOException e) {
+	    return new SAXParseException (
+		"can't XInclude text",
+		locator, e);
+	}
+    }
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/XsltFilter.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/XsltFilter.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/XsltFilter.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/XsltFilter.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,130 @@
+/* XsltFilter.java -- 
+   Copyright (C) 2001 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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.pipeline;
+
+import java.io.IOException;
+
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.sax.*;
+import javax.xml.transform.stream.StreamSource;
+
+import org.xml.sax.SAXException;
+import org.xml.sax.ext.LexicalHandler;
+
+
+/**
+ * Packages an XSLT transform as a pipeline component. 
+ * Note that all DTD events (callbacks to DeclHandler and DTDHandler 
+ * interfaces) are discarded, although XSLT transforms may be set up to
+ * use the LexicalHandler to write DTDs with only an external subset.
+ * Not every XSLT engine will necessarily be usable with this filter,
+ * but current versions of
+ * <a href="http://saxon.sourceforge.net">SAXON</a> and
+ * <a href="http://xml.apache.org/xalan-j">Xalan</a> should work well.
+ *
+ * @see TransformerFactory
+ *
+ * @author David Brownell
+ */
+final public class XsltFilter extends EventFilter
+{
+    /**
+     * Creates a filter that performs the specified transform.
+     * Uses the JAXP 1.1 interfaces to access the default XSLT
+     * engine configured for in the current execution context,
+     * and parses the stylesheet without custom EntityResolver
+     * or ErrorHandler support.
+     *
+     * @param stylesheet URI for the stylesheet specifying the
+     *	XSLT transform
+     * @param next provides the ContentHandler and LexicalHandler
+     *	to receive XSLT output.
+     * @exception SAXException if the stylesheet can't be parsed
+     * @exception IOException if there are difficulties
+     *	bootstrapping the XSLT engine, such as it not supporting
+     *	SAX well enough to use this way.
+     */
+    public XsltFilter (String stylesheet, EventConsumer next)
+    throws SAXException, IOException
+    {
+	// First, get a transformer with the stylesheet preloaded
+	TransformerFactory	tf = null;
+	TransformerHandler	th;
+
+	try {
+	    SAXTransformerFactory	stf;
+
+	    tf = TransformerFactory.newInstance ();
+	    if (!tf.getFeature (SAXTransformerFactory.FEATURE)	// sax inputs
+		    || !tf.getFeature (SAXResult.FEATURE)	// sax outputs
+		    || !tf.getFeature (StreamSource.FEATURE)	// stylesheet
+		    )
+		throw new IOException ("XSLT factory ("
+		    + tf.getClass ().getName ()
+		    + ") does not support SAX");
+	    stf = (SAXTransformerFactory) tf;
+	    th = stf.newTransformerHandler (new StreamSource (stylesheet));
+	} catch (TransformerConfigurationException e) {
+	    throw new IOException ("XSLT factory ("
+		+ (tf == null
+			? "none available"
+			: tf.getClass ().getName ())
+		+ ") configuration error, "
+		+ e.getMessage ()
+		);
+	}
+
+	// Hook its outputs up to the pipeline ...
+	SAXResult		out = new SAXResult ();
+
+	out.setHandler (next.getContentHandler ());
+	try {
+	    LexicalHandler	lh;
+	    lh = (LexicalHandler) next.getProperty (LEXICAL_HANDLER);
+	    out.setLexicalHandler (lh);
+	} catch (Exception e) {
+	    // ignore
+	}
+	th.setResult (out);
+
+	// ... and make sure its inputs look like ours.
+	setContentHandler (th);
+	setProperty (LEXICAL_HANDLER, th);
+    }
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/package.html
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/package.html?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/package.html (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/pipeline/package.html Thu Nov  8 16:56:19 2007
@@ -0,0 +1,255 @@
+<html><head><title>
+blah
+<!--
+/*
+ * Copyright (C) 1999-2001 The Free Software Foundation, Inc.
+ */
+-->
+</title></head><body>
+
+<p>This package exposes a kind of XML processing pipeline, based on sending
+SAX events, which can be used as components of application architectures.
+Pipelines are used to convey streams of processing events from a producer
+to one or more consumers, and to let each consumer control the data seen by
+later consumers.
+
+<p> There is a <a href="PipelineFactory.html">PipelineFactory</a> class which
+accepts a syntax describing how to construct some simple pipelines.  Strings
+describing such pipelines can be used in command line tools (see the
+<a href="../util/DoParse.html">DoParse</a> class)
+and in other places that it is
+useful to let processing be easily reconfigured.  Pipelines can of course
+be constructed programmatically, providing access to options that the
+factory won't.
+
+<p> Web applications are supported by making it easy for servlets (or
+non-Java web application components) to be part of a pipeline.  They can
+originate XML (or XHTML) data through an <em>InputSource</em> or in
+response to XML messages sent from clients using <em>CallFilter</em>
+pipeline stages.  Such facilities are available using the simple syntax
+for pipeline construction.
+
+
+<h2> Programming Models </h2>
+
+<p> Pipelines should be simple to understand.
+
+<ul>
+    <li> XML content, typically entire documents,
+    is pushed through consumers by producers.
+
+    <li> Pipelines are basically about consuming SAX2 callback events,
+    where the events encapsulate XML infoset-level data.<ul>
+
+	<li> Pipelines are constructed by taking one or more consumer
+	stages and combining them to produce a composite consumer.
+
+	<li> A pipeline is presumed to have pending tasks and state from
+	the beginning of its ContentHandler.startDocument() callback until
+	it's returned from its ContentHandler.doneDocument() callback.
+
+	<li> Pipelines may have multiple output stages ("fan-out")
+	or multiple input stages ("fan-in") when appropriate.
+
+	<li> Pipelines may be long-lived, but need not be.
+
+	</ul>
+
+    <li> There is flexibility about event production. <ul>
+
+	<li> SAX2 XMLReader objects are producers, which
+	provide a high level "pull" model: documents (text or DOM) are parsed,
+	and the parser pushes individual events through the pipeline.
+
+	<li> Events can be pushed directly to event consumer components
+	by application modules, if they invoke SAX2 callbacks directly.
+	That is, application modules use the XML Infoset as exposed
+	through SAX2 event callbacks.
+
+	</ul>
+    
+    <li> Multiple producer threads may concurrently access a pipeline,
+    if they coordinate appropriately.
+
+    <li> Pipeline processing is not the only framework applications
+    will use.
+
+    </ul>
+
+
+<h3> Producers: XMLReader or Custom </h3>
+
+<p> Many producers will be SAX2 XMLReader objects, and
+will read (pull) data which is then written (pushed) as events.
+Typically these will parse XML text (acquired from
+<code>org.xml.sax.helpers.XMLReaderFactory</code>) or a DOM tree
+(using a <code><a href="../util/DomParser.html">DomParser</a></code>)
+These may be bound to event consumer using a convenience routine,
+<em><a href="EventFilter.html">EventFilter</a>.bind()</em>.
+Once bound, these producers may be given additional documents to
+sent through its pipeline.
+
+<p> In other cases, you will write producers yourself.  For example, some
+data structures might know how to write themselves out using one or
+more XML models, expressed as sequences of SAX2 event callbacks.
+An application module might
+itself be a producer, issuing startDocument and endDocument events
+and then asking those data structures to write themselves out to a
+given EventConsumer, or walking data structures (such as JDBC query
+results) and applying its own conversion rules.  WAP format XML
+(WBMXL) can be directly converted to producer output.
+
+<p> SAX2 introduced an "XMLFilter" interface, which is a kind of XMLReader.
+It is most useful in conjunction with its XMLFilterImpl helper class;
+see the <em><a href="EventFilter.html">EventFilter</a></em> javadoc
+for information contrasting that XMLFilterImpl approach with the
+relevant parts of this pipeline framework.  Briefly, such XMLFilterImpl
+children can be either producers or consumers, and are more limited in
+configuration flexibility.  In this framework, the focus of filters is
+on the EventConsumer side; see the section on
+<a href="#fitting">pipe fitting</a> below.
+
+
+<h3> Consume to Standard or Custom Data Representations </h3>
+
+<p> Many consumers will be used to create standard representations of XML
+data.  The <a href="TextConsumer.html">TextConsumer</a> takes its events
+and writes them as text for a single XML document,
+using an internal <a href="../util/XMLWriter.html">XMLWriter</a>.
+The <a href="DomConsumer.html">DomConsumer</a> takes its events and uses
+them to create and populate a DOM Document.
+
+<p> In other cases, you will write consumers yourself.  For example,
+you might use a particular unmarshaling filter to produce objects
+that fit your application's requirements, instead of using DOM.
+Such consumers work at the level of XML data models, rather than with
+specific representations such as XML text or a DOM tree.  You could
+convert your output directly to WAP format data (WBXML).
+
+
+<h3><a name="fitting">Pipe Fitting</a></h3>
+
+<p> Pipelines are composite event consumers, with each stage having
+the opportunity to transform the data before delivering it to any
+subsequent stages.
+
+<p> The <a href="PipelineFactory.html">PipelineFactory</a> class
+provides access to much of this functionality through a simple syntax.
+See the table in that class's javadoc describing a number of standard
+components.  Direct API calls are still needed for many of the most
+interesting pipeline configurations, including ones leveraging actual
+or logical concurrency.
+
+<p> Four basic types of pipe fitting are directly supported.  These may
+be used to construct complex pipeline networks.  <ul>
+
+    <li> <a href="TeeConsumer.html">TeeConsumer</a> objects split event
+    flow so it goes to two two different consumers, one before the other.
+    This is a basic form of event fan-out; you can use this class to
+    copy events to any number of output pipelines.
+
+    <li> Clients can call remote components through HTTP or HTTPS using
+    the <a href="CallFilter.html">CallFilter</a> component, and Servlets
+    can implement such components by extending the
+    <a href="XmlServlet.html">XmlServlet</a> component.  Java is not
+    required on either end, and transport protocols other than HTTP may
+    also be used.
+
+    <li> <a href="EventFilter.html">EventFilter</a> objects selectively
+    provide handling for callbacks, and can pass unhandled ones to a
+    subsequent stage.  They are often subclassed, since much of the
+    basic filtering machinery is already in place in the base class.
+
+    <li> Applications can merge two event flows by just using the same
+    consumer in each one.  If multiple threads are in use, synchronization
+    needs to be addressed by the appropriate application level policy.
+
+    </ul>
+
+<p> Note that filters can be as complex as
+<a href="XsltFilter.html">XSLT transforms</a>
+available) on input data, or as simple as removing simple syntax data
+such as ignorable whitespace, comments, and CDATA delimiters.
+Some simple "built-in" filters are part of this package.
+
+
+<h3> Coding Conventions:  Filter and Terminus Stages</h3>
+
+<p> If you follow these coding conventions, your classes may be used
+directly (give the full class name) in pipeline descriptions as understood
+by the PipelineFactory.  There are four constructors the factory may
+try to use; in order of decreasing numbers of parameters, these are: <ul>
+
+    <li> Filters that need a single String setup parameter should have
+    a public constructor with two parameters:  that string, then the
+    EventConsumer holding the "next" consumer to get events.
+
+    <li> Filters that don't need setup parameters should have a public
+    constructor that accepts a single EventConsumer holding the "next"
+    consumer to get events when they are done.
+
+    <li> Terminus stages may have a public constructor taking a single
+    paramter:  the string value of that parameter.
+
+    <li> Terminus stages may have a public no-parameters constructor.
+
+    </ul>
+
+<p> Of course, classes may support more than one such usage convention;
+if they do, they can automatically be used in multiple modes.  If you
+try to use a terminus class as a filter, and that terminus has a constructor
+with the appropriate number of arguments, it is automatically wrapped in
+a "tee" filter.
+
+
+<h2> Debugging Tip: "Tee" Joints can Snapshot Data</h2>
+
+<p> It can sometimes be hard to see what's happening, when something
+goes wrong.  Easily fixed:  just snapshot the data.  Then you can find
+out where things start to go wrong.
+
+<p> If you're using pipeline descriptors so that they're easily
+administered, just stick a <em>write ( filename )</em>
+filter into the pipeline at an appropriate point.
+
+<p> Inside your programs, you can do the same thing directly: perhaps
+by saving a Writer (perhaps a StringWriter) in a variable, using that
+to create a TextConsumer, and making that the first part of a tee --
+splicing that into your pipeline at a convenient location.
+
+<p> You can also use a DomConsumer to buffer the data, but remember
+that DOM doesn't save all the information that XML provides, so that DOM
+snapshots are relatively low fidelity.  They also are substantially more
+expensive in terms of memory than a StringWriter holding similar data.
+
+<h2> Debugging Tip: Non-XML Producers</h2>
+
+<p> Producers in pipelines don't need to start from XML
+data structures, such as text in XML syntax (likely coming
+from some <em>XMLReader</em> that parses XML) or a
+DOM representation (perhaps with a
+<a href="../util/DomParser.html">DomParser</a>).
+
+<p> One common type of event producer will instead make
+direct calls to SAX event handlers returned from an
+<a href="EventConsumer.html">EventConsumer</a>.
+For example, making <em>ContentHandler.startElement</em>
+calls and matching <em>ContentHandler.endElement</em> calls.
+
+<p> Applications making such calls can catch certain
+common "syntax errors" by using a
+<a href="WellFormednessFilter.html">WellFormednessFilter</a>.
+That filter will detect (and report) erroneous input data
+such as mismatched document, element, or CDATA start/end calls.
+Use such a filter near the head of the pipeline that your
+producer feeds, at least while debugging, to help ensure that
+you're providing legal XML Infoset data.
+
+<p> You can also arrange to validate data on the fly.
+For DTD validation, you can configure a
+<a href="ValidationConsumer.html">ValidationConsumer</a>
+to work as a filter, using any DTD you choose.
+Other validation schemes can be handled with other
+validation filters.
+
+</body></html>

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/AttributeImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/AttributeImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/AttributeImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/AttributeImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,124 @@
+/* AttributeImpl.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.IOException;
+import java.io.Writer;
+import javax.xml.namespace.QName;
+import javax.xml.stream.events.Attribute;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+
+/**
+ * An attribute event.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class AttributeImpl
+  extends XMLEventImpl
+  implements Attribute
+{
+
+  protected final QName name;
+  protected final String value;
+  protected final QName type;
+  protected final boolean specified;
+
+  protected AttributeImpl(Location location,
+                          QName name, String value, QName type,
+                          boolean specified)
+  {
+    super(location);
+    this.name = name;
+    this.value = value;
+    this.type = type;
+    this.specified = specified;
+  }
+
+  public int getEventType()
+  {
+    return ATTRIBUTE;
+  }
+
+  public QName getName()
+  {
+    return name;
+  }
+
+  public String getValue()
+  {
+    return value;
+  }
+
+  public QName getDTDType()
+  {
+    return type;
+  }
+
+  public boolean isSpecified()
+  {
+    return specified;
+  }
+  
+  public void writeAsEncodedUnicode(Writer writer)
+    throws XMLStreamException
+  {
+    try
+      {
+        String prefix = name.getPrefix();
+        if (prefix != null && !"".equals(prefix))
+          {
+            writer.write(prefix);
+            writer.write(':');
+          }
+        writer.write(name.getLocalPart());
+        writer.write('=');
+        writer.write('"');
+        writer.write(encode(value, true));
+        writer.write('"');
+      }
+    catch (IOException e)
+      {
+        XMLStreamException e2 = new XMLStreamException(e.getMessage());
+        e2.initCause(e);
+        throw e2;
+      }
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/BufferedReader.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/BufferedReader.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/BufferedReader.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/BufferedReader.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,198 @@
+/* BufferedReader.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.IOException;
+import java.io.Reader;
+
+/**
+ * A mark-capable buffered reader.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class BufferedReader
+  extends Reader
+{
+
+  static final int DEFAULT_BUFFER_SIZE = 4096;
+
+  final Reader in;
+  char[] buf;
+  int pos, count, markpos, marklimit, bufferSize;
+
+  BufferedReader(Reader in)
+  {
+    this(in, DEFAULT_BUFFER_SIZE);
+  }
+         
+  BufferedReader(Reader in, int bufferSize)
+  {
+    if (bufferSize < 1)
+      throw new IllegalArgumentException();
+    this.in = in;
+    this.bufferSize = bufferSize;
+    buf = new char[bufferSize];
+    pos = count = bufferSize;
+  }
+
+  public void close()
+    throws IOException
+  {
+    buf = null;
+    pos = count = 0;
+    markpos = -1;
+    in.close();
+  }
+
+  public void mark(int readlimit)
+    throws IOException
+  {
+    marklimit = readlimit;
+    markpos = pos;
+  }
+
+  public boolean markSupported()
+  {
+    return true;
+  }
+
+  public int read()
+    throws IOException
+  {
+    if (pos >= count && !refill())
+      return -1;
+    return (int) buf[pos++];
+  }
+
+  public int read(char[] b)
+    throws IOException
+  {
+    return read(b, 0, b.length);
+  }
+
+  public int read(char[] b, int off, int len)
+    throws IOException
+  {
+    if (off < 0 || len < 0 || b.length - off < len)
+      throw new IndexOutOfBoundsException();
+    
+    if (len == 0)
+      return 0;
+    
+    if (pos >= count && !refill())
+      return -1;
+                
+    int ret = Math.min(count - pos, len);
+    System.arraycopy(buf, pos, b, off, ret);
+    pos += ret;
+    off += ret;
+    len -= ret;
+    
+    while (len > 0 && refill())
+      {
+        int remain = Math.min(count - pos, len);
+        System.arraycopy(buf, pos, b, off, remain);
+        pos += remain;
+        off += remain;
+        len -= remain;
+        ret += remain;
+      }
+    
+    return ret;
+  }
+
+  public void reset()
+    throws IOException
+  {
+    if (markpos == -1)
+      throw new IOException(buf == null ? "Stream closed." : "Invalid mark.");
+    pos = markpos;
+  }
+
+  public long skip(long n)
+    throws IOException
+  {
+    if (buf == null)
+      throw new IOException("Stream closed.");
+    final long origN = n;
+    while (n > 0L)
+      {
+        if (pos >= count && !refill())
+          break;
+        int numread = (int) Math.min((long) (count - pos), n);
+        pos += numread;
+        n -= numread;
+      }
+    return origN - n;
+  }
+
+  private boolean refill()
+    throws IOException
+  {
+    if (buf == null)
+      throw new IOException("Stream closed.");
+
+    int markcount = count - markpos;
+    if (markpos == -1 || markcount >= marklimit)
+      {
+        markpos = -1;
+        pos = count = 0;
+      }
+    else
+      {
+        char[] newbuf = buf;
+        if (markpos < bufferSize)
+          { 
+            newbuf = new char[count - markpos + bufferSize];
+          }
+        System.arraycopy(buf, markpos, newbuf, 0, markcount);
+        buf = newbuf;
+        count = markcount;
+        pos -= markpos;
+        markpos = 0;
+      }
+
+    int numread = in.read(buf, count, bufferSize);
+    if (numread <= 0)
+      return false;
+
+    count += numread;
+    return true;
+  }
+
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/CRLFReader.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/CRLFReader.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/CRLFReader.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/CRLFReader.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,181 @@
+/* CRLFReader.java -- 
+   Copyright (C) 2005,2006  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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.Reader;
+
+/**
+ * Filtered reader that normalizes CRLF pairs into LFs.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class CRLFReader
+  extends Reader
+{
+
+  /**
+   * The CR octet.
+   */
+  public static final int CR = 13;
+
+  /**
+   * The LF octet.
+   */
+  public static final int LF = 10;
+
+  private boolean doReset;
+
+  protected Reader in;
+
+  /**
+   * Constructor.
+   */
+  protected CRLFReader(Reader in)
+  {
+    if (!in.markSupported())
+      in = new BufferedReader(in);
+    this.in = in;
+  }
+
+  public int read()
+    throws IOException
+  {
+    int c = in.read();
+    if (c == 13) // CR
+      {
+        in.mark(1);
+        int d = in.read();
+        if (d == 10) // LF
+          c = d;
+        else
+          in.reset();
+      }
+    return c;
+  }
+
+  public int read(char[] b)
+    throws IOException
+  {
+    return read(b, 0, b.length);
+  }
+
+  public int read(char[] b, int off, int len)
+    throws IOException
+  {
+    in.mark(len + 1);
+    int l = in.read(b, off, len);
+    if (l > 0)
+      {
+        int i = indexOfCRLF(b, off, l);
+        if (doReset)
+          {
+            in.reset();
+            if (i != -1)
+              {
+                l = in.read(b, off, (i + 1) - off); // read to CR
+                in.read(); // skip LF
+                b[i] = '\n'; // fix CR as LF
+              }
+            else
+              l = in.read(b, off, len); // CR(s) but no LF
+          } 
+      }
+    return l;
+  }
+
+  public boolean markSupported()
+  {
+    return in.markSupported();
+  }
+
+  public void mark(int limit)
+    throws IOException
+  {
+    in.mark(limit);
+  }
+
+  public void reset()
+    throws IOException
+  {
+    in.reset();
+  }
+
+  public long skip(long n)
+    throws IOException
+  {
+    return in.skip(n);
+  }
+
+  public void close()
+    throws IOException
+  {
+    in.close();
+  }
+
+  private int indexOfCRLF(char[] b, int off, int len)
+    throws IOException
+  {
+    doReset = false;
+    int end = off + len;
+    int em1 = end - 1;
+    for (int i = off; i < end; i++)
+      {
+        if (b[i] == '\r') // CR
+          {
+            int d;
+            if (i == em1)
+              {
+                d = in.read();
+                doReset = true;
+              }
+            else
+              d = b[i + 1];
+            if (d == '\n') // LF
+              {
+                doReset = true;
+                return i;
+              }
+          }
+      }
+    return -1;
+  }
+
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/CharactersImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/CharactersImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/CharactersImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/CharactersImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,120 @@
+/* CharactersImpl.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.IOException;
+import java.io.Writer;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.Characters;
+
+/**
+ * A character data (text) event.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class CharactersImpl
+  extends XMLEventImpl
+  implements Characters
+{
+
+  protected final String data;
+  protected final boolean whitespace;
+  protected final boolean cdata;
+  protected final boolean ignorableWhitespace;
+
+  protected CharactersImpl(Location location,
+                           String data, boolean whitespace, boolean cdata,
+                           boolean ignorableWhitespace)
+  {
+    super(location);
+    this.data = data;
+    this.whitespace = whitespace;
+    this.cdata = cdata;
+    this.ignorableWhitespace = ignorableWhitespace;
+  }
+
+  public int getEventType()
+  {
+    return cdata ? CDATA : whitespace ? SPACE : CHARACTERS;
+  }
+
+  public String getData()
+  {
+    return data;
+  }
+
+  public boolean isWhiteSpace()
+  {
+    return whitespace;
+  }
+
+  public boolean isCData()
+  {
+    return cdata;
+  }
+  
+  public boolean isIgnorableWhiteSpace()
+  {
+    return ignorableWhitespace;
+  }
+  
+  public void writeAsEncodedUnicode(Writer writer)
+    throws XMLStreamException
+  {
+    try
+      {
+        if (cdata)
+          {
+            writer.write("<![CDATA[");
+            writer.write(data);
+            writer.write("]]>");
+          }
+        else   
+          writer.write(encode(data, false));
+      }
+    catch (IOException e)
+      {
+        XMLStreamException e2 = new XMLStreamException(e.getMessage());
+        e2.initCause(e);
+        throw e2;
+      }
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/CommentImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/CommentImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/CommentImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/CommentImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,92 @@
+/* CommentImpl.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.IOException;
+import java.io.Writer;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.Comment;
+
+/**
+ * A comment event.
+ *
+ * @author <a href'mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class CommentImpl
+  extends XMLEventImpl
+  implements Comment
+{
+
+  protected final String text;
+
+  protected CommentImpl(Location location, String text)
+  {
+    super(location);
+    this.text = text;
+  }
+
+  public int getEventType()
+  {
+    return COMMENT;
+  }
+
+  public String getText()
+  {
+    return text;
+  }
+  
+  public void writeAsEncodedUnicode(Writer writer)
+    throws XMLStreamException
+  {
+    try
+      {
+        writer.write("<!--");
+        writer.write(encode(text, false));
+        writer.write("-->");
+      }
+    catch (IOException e)
+      {
+        XMLStreamException e2 = new XMLStreamException(e.getMessage());
+        e2.initCause(e);
+        throw e2;
+      }
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/DTDImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/DTDImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/DTDImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/DTDImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,115 @@
+/* DTDImpl.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.List;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.DTD;
+
+/**
+ * A DOCTYPE declaration event.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class DTDImpl
+  extends XMLEventImpl
+  implements DTD
+{
+
+  protected final String body;
+  protected final Object impl;
+  protected final List notations;
+  protected final List entities;
+
+  protected DTDImpl(Location location,
+                    String body, Object impl, List notations, List entities)
+  {
+    super(location);
+    this.body = body;
+    this.impl = impl;
+    this.notations = notations;
+    this.entities = entities;
+  }
+
+  public int getEventType()
+  {
+    return DTD;
+  }
+
+  public String getDocumentTypeDeclaration()
+  {
+    return body;
+  }
+
+  public Object getProcessedDTD()
+  {
+    return impl;
+  }
+
+  public List getNotations()
+  {
+    return notations;
+  }
+
+  public List getEntities()
+  {
+    return entities;
+  }
+  
+  public void writeAsEncodedUnicode(Writer writer)
+    throws XMLStreamException
+  {
+    try
+      {
+        writer.write("<!DOCTYPE ");
+        writer.write(body);
+        writer.write(">");
+      }
+    catch (IOException e)
+      {
+        XMLStreamException e2 = new XMLStreamException(e.getMessage());
+        e2.initCause(e);
+        throw e2;
+      }
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EndDocumentImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EndDocumentImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EndDocumentImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EndDocumentImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,72 @@
+/* EndDocumentImpl.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.IOException;
+import java.io.Writer;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.EndDocument;
+
+/**
+ * An end-document event.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class EndDocumentImpl
+  extends XMLEventImpl
+  implements EndDocument
+{
+
+  protected EndDocumentImpl(Location location)
+  {
+    super(location);
+  }
+
+  public int getEventType()
+  {
+    return END_DOCUMENT;
+  }
+  
+  public void writeAsEncodedUnicode(Writer writer)
+    throws XMLStreamException
+  {
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EndElementImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EndElementImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EndElementImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EndElementImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,108 @@
+/* EndElementImpl.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Iterator;
+import java.util.List;
+import javax.xml.namespace.QName;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.EndElement;
+
+/**
+ * An end-element event.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class EndElementImpl
+  extends XMLEventImpl
+  implements EndElement
+{
+
+  protected final QName name;
+  protected final List namespaces;
+
+  protected EndElementImpl(Location location, QName name, List namespaces)
+  {
+    super(location);
+    this.name = name;
+    this.namespaces = namespaces;
+  }
+
+  public int getEventType()
+  {
+    return END_ELEMENT;
+  }
+
+  public QName getName()
+  {
+    return name;
+  }
+
+  public Iterator getNamespaces()
+  {
+    return namespaces.iterator();
+  }
+  
+  public void writeAsEncodedUnicode(Writer writer)
+    throws XMLStreamException
+  {
+    try
+      {
+        writer.write("</");
+        String prefix = name.getPrefix();
+        if (prefix != null && !"".equals(prefix))
+          {
+            writer.write(prefix);
+            writer.write(':');
+          }
+        writer.write(name.getLocalPart());
+        writer.write(">");
+      }
+    catch (IOException e)
+      {
+        XMLStreamException e2 = new XMLStreamException(e.getMessage());
+        e2.initCause(e);
+        throw e2;
+      }
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EntityDeclarationImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EntityDeclarationImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EntityDeclarationImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EntityDeclarationImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,164 @@
+/* EntityDeclarationImpl.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.IOException;
+import java.io.Writer;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.EntityDeclaration;
+
+/**
+ * An entity declaration event.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class EntityDeclarationImpl
+  extends XMLEventImpl
+  implements EntityDeclaration
+{
+
+  protected final String publicId;
+  protected final String systemId;
+  protected final String name;
+  protected final String notationName;
+  protected final String replacementText;
+  protected final String baseUri;
+
+  protected EntityDeclarationImpl(Location location,
+                                  String publicId, String systemId,
+                                  String name, String notationName,
+                                  String replacementText, String baseUri)
+  {
+    super(location);
+    this.publicId = publicId;
+    this.systemId = systemId;
+    this.name = name;
+    this.notationName = notationName;
+    this.replacementText = replacementText;
+    this.baseUri = baseUri;
+  }
+
+  public int getEventType()
+  {
+    return ENTITY_DECLARATION;
+  }
+
+  public String getPublicId()
+  {
+    return publicId;
+  }
+
+  public String getSystemId()
+  {
+    return systemId;
+  }
+
+  public String getName()
+  {
+    return name;
+  }
+
+  public String getNotationName()
+  {
+    return notationName;
+  }
+
+  public String getReplacementText()
+  {
+    return replacementText;
+  }
+
+  public String getBaseURI()
+  {
+    return baseUri;
+  }
+
+  public void writeAsEncodedUnicode(Writer writer)
+    throws XMLStreamException
+  {
+    try
+      {
+        writer.write("<!ENTITY ");
+        writer.write(name);
+        writer.write(' ');
+        if (systemId != null)
+          {
+            if (publicId != null)
+              {
+                writer.write(" PUBLIC ");
+                writer.write('"');
+                writer.write(publicId);
+                writer.write('"');
+                writer.write(' ');
+                writer.write('"');
+                writer.write(systemId);
+                writer.write('"');
+              }
+            else
+              {
+                writer.write(" SYSTEM ");
+                writer.write('"');
+                writer.write(systemId);
+                writer.write('"');
+              }
+            if (notationName != null)
+              {
+                writer.write(" NDATA ");
+                writer.write(notationName);
+              }
+          }
+        else
+          {
+            writer.write('"');
+            if (replacementText != null)
+              writer.write(replacementText);
+            writer.write('"');
+          }
+        writer.write(">");
+      }
+    catch (IOException e)
+      {
+        XMLStreamException e2 = new XMLStreamException(e.getMessage());
+        e2.initCause(e);
+        throw e2;
+      }
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EntityReferenceImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EntityReferenceImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EntityReferenceImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/EntityReferenceImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,102 @@
+/* EntityReferenceImpl.java -- 
+   Copyright (C) 2005,2006  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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.IOException;
+import java.io.Writer;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.EntityDeclaration;
+import javax.xml.stream.events.EntityReference;
+
+/**
+ * An entity reference event.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class EntityReferenceImpl
+  extends XMLEventImpl
+  implements EntityReference
+{
+
+  protected final EntityDeclaration decl;
+  protected final String name;
+
+  protected EntityReferenceImpl(Location location,
+                                EntityDeclaration decl,
+                                String name)
+  {
+    super(location);
+    this.decl = decl;
+    this.name = name;
+  }
+
+  public int getEventType()
+  {
+    return ENTITY_REFERENCE;
+  }
+
+  public EntityDeclaration getDeclaration()
+  {
+    return decl;
+  }
+
+  public String getName()
+  {
+    return name;
+  }
+
+  public void writeAsEncodedUnicode(Writer writer)
+    throws XMLStreamException
+  {
+    try
+      {
+        writer.write('&');
+        writer.write(name);
+        writer.write(';');
+      }
+    catch (IOException e)
+      {
+        XMLStreamException e2 = new XMLStreamException(e.getMessage());
+        e2.initCause(e);
+        throw e2;
+      }
+  }
+
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/FilteredEventReader.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/FilteredEventReader.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/FilteredEventReader.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/FilteredEventReader.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,115 @@
+/* FilteredEventReader.java -- 
+   Copyright (C) 2005,2006  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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import javax.xml.stream.EventFilter;
+import javax.xml.stream.XMLEventReader;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.XMLEvent;
+import javax.xml.stream.util.EventReaderDelegate;
+
+class FilteredEventReader
+  extends EventReaderDelegate
+{
+
+  final EventFilter filter;
+
+  FilteredEventReader(XMLEventReader reader, EventFilter filter)
+  {
+    super(reader);
+    this.filter = filter;
+  }
+
+  public boolean hasNext()
+  {
+    // XXX ???
+    return super.hasNext();
+  }
+
+  public XMLEvent nextEvent()
+    throws XMLStreamException
+  {
+    XMLEvent ret;
+    do
+      {
+        ret = super.nextEvent();
+      }
+    while (!filter.accept(ret));
+    return ret;
+  }
+  
+  public Object next()
+  {
+    try
+      {
+        return nextEvent();
+      }
+    catch (XMLStreamException e)
+      {
+        RuntimeException e2 = new RuntimeException();
+        e2.initCause(e);
+        throw e2;
+      }
+  }
+  
+  public XMLEvent peek()
+    throws XMLStreamException
+  {
+    XMLEvent ret;
+    do
+      {
+        ret = super.peek();
+      }
+    while (!filter.accept(ret));
+    return ret;
+  }
+  
+  public XMLEvent nextTag()
+    throws XMLStreamException
+  {
+    XMLEvent ret;
+    do
+      {
+        ret = super.nextTag();
+      }
+    while (!filter.accept(ret));
+    return ret;
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/FilteredStreamReader.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/FilteredStreamReader.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/FilteredStreamReader.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/FilteredStreamReader.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,91 @@
+/* FilteredStreamReader.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import javax.xml.stream.StreamFilter;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.util.ReaderDelegate;
+
+class FilteredStreamReader
+  extends ReaderDelegate
+{
+
+  final XMLStreamReader reader;
+  final StreamFilter filter;
+
+  FilteredStreamReader(XMLStreamReader reader, StreamFilter filter)
+  {
+    super(reader);
+    this.reader = reader;
+    this.filter = filter;
+  }
+
+  public boolean hasNext()
+    throws XMLStreamException
+  {
+    // XXX ???
+    return super.hasNext();
+  }
+
+  public int next()
+    throws XMLStreamException
+  {
+    int ret;
+    do
+      {
+        ret = super.next();
+      }
+    while (!filter.accept(reader));
+    return ret;
+  }
+  
+  public int nextTag()
+    throws XMLStreamException
+  {
+    int ret;
+    do
+      {
+        ret = super.nextTag();
+      }
+    while (!filter.accept(reader));
+    return ret;
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/NamespaceImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/NamespaceImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/NamespaceImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/NamespaceImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,111 @@
+/* NamespaceImpl.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.IOException;
+import java.io.Writer;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.Namespace;
+
+/**
+ * A namespace declaration event.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class NamespaceImpl
+  extends XMLEventImpl
+  implements Namespace
+{
+
+  protected final String prefix;
+  protected final String uri;
+
+  protected NamespaceImpl(Location location, String prefix, String uri)
+  {
+    super(location);
+    this.prefix = prefix;
+    this.uri = uri;
+  }
+
+  public int getEventType()
+  {
+    return NAMESPACE;
+  }
+
+  public String getPrefix()
+  {
+    return prefix;
+  }
+
+  public String getNamespaceURI()
+  {
+    return uri;
+  }
+
+  public boolean isDefaultNamespaceDeclaration()
+  {
+    return (prefix == null || "".equals(prefix));
+  }
+  
+  public void writeAsEncodedUnicode(Writer writer)
+    throws XMLStreamException
+  {
+    try
+      {
+        writer.write("xmlns");
+        if (prefix != null && !"".equals(prefix))
+          {
+            writer.write(':');
+            writer.write(prefix);
+          }
+        writer.write('=');
+        writer.write('"');
+        writer.write(encode(uri, true));
+        writer.write('"');
+      }
+    catch (IOException e)
+      {
+        XMLStreamException e2 = new XMLStreamException(e.getMessage());
+        e2.initCause(e);
+        throw e2;
+      }
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/NotationDeclarationImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/NotationDeclarationImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/NotationDeclarationImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/NotationDeclarationImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,126 @@
+/* NotationDeclarationImpl.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.IOException;
+import java.io.Writer;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.NotationDeclaration;
+
+/**
+ * A notation declaration event.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class NotationDeclarationImpl
+  extends XMLEventImpl
+  implements NotationDeclaration
+{
+
+  protected final String name;
+  protected final String publicId;
+  protected final String systemId;
+
+  protected NotationDeclarationImpl(Location location,
+                                    String name, String publicId,
+                                    String systemId)
+  {
+    super(location);
+    this.name = name;
+    this.publicId = publicId;
+    this.systemId = systemId;
+  }
+
+  public int getEventType()
+  {
+    return NOTATION_DECLARATION;
+  }
+
+  public String getName()
+  {
+    return name;
+  }
+
+  public String getPublicId()
+  {
+    return publicId;
+  }
+
+  public String getSystemId()
+  {
+    return systemId;
+  }
+  
+  public void writeAsEncodedUnicode(Writer writer)
+    throws XMLStreamException
+  {
+    try
+      {
+        writer.write("<!NOTATION ");
+        writer.write(name);
+        if (publicId != null)
+          {
+            writer.write(" PUBLIC ");
+            writer.write('"');
+            writer.write(publicId);
+            writer.write('"');
+            writer.write(' ');
+            writer.write('"');
+            writer.write(systemId);
+            writer.write('"');
+          }
+        else
+          {
+            writer.write(" SYSTEM ");
+            writer.write('"');
+            writer.write(systemId);
+            writer.write('"');
+          }
+        writer.write('>');
+      }
+    catch (IOException e)
+      {
+        XMLStreamException e2 = new XMLStreamException(e.getMessage());
+        e2.initCause(e);
+        throw e2;
+      }
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/ProcessingInstructionImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/ProcessingInstructionImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/ProcessingInstructionImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/ProcessingInstructionImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,105 @@
+/* ProcessingInstructionImpl.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.IOException;
+import java.io.Writer;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.ProcessingInstruction;
+
+/**
+ * A processing instruction event.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class ProcessingInstructionImpl
+  extends XMLEventImpl
+  implements ProcessingInstruction
+{
+
+  protected final String target;
+  protected final String data;
+
+  protected ProcessingInstructionImpl(Location location,
+                                      String target, String data)
+  {
+    super(location);
+    this.target = target;
+    this.data = data;
+  }
+
+  public int getEventType()
+  {
+    return PROCESSING_INSTRUCTION;
+  }
+
+  public String getTarget()
+  {
+    return target;
+  }
+
+  public String getData()
+  {
+    return data;
+  }
+  
+  public void writeAsEncodedUnicode(Writer writer)
+    throws XMLStreamException
+  {
+    try
+      {
+        writer.write("<?");
+        writer.write(target);
+        if (data != null)
+          {
+            writer.write(' ');
+            writer.write(data);
+          }
+        writer.write("?>");
+      }
+    catch (IOException e)
+      {
+        XMLStreamException e2 = new XMLStreamException(e.getMessage());
+        e2.initCause(e);
+        throw e2;
+      }
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/SAXParser.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/SAXParser.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/SAXParser.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/SAXParser.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,1031 @@
+/* SAXParser.java -- 
+   Copyright (C) 2005, 2006  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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.Reader;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.Map;
+import javax.xml.XMLConstants;
+import javax.xml.namespace.QName;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLEventReader;
+import javax.xml.stream.XMLReporter;
+import javax.xml.stream.XMLResolver;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.xml.sax.ContentHandler;
+import org.xml.sax.DTDHandler;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.Parser;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXNotSupportedException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.ext.Attributes2;
+import org.xml.sax.ext.DeclHandler;
+import org.xml.sax.ext.EntityResolver2;
+import org.xml.sax.ext.LexicalHandler;
+import org.xml.sax.ext.Locator2;
+
+/**
+ * JAXP SAX parser using an underlying StAX parser.
+ * This parser supports the following additional SAX features and
+ * properties:
+ * <table>
+ * <tr><th colspan='4'>Features</th></tr>
+ * <tr><td>http://gnu.org/sax/features/xml-base</td>
+ * <td colspan='2'>read/write</td>
+ * <td>Indicates or sets whether XML Base processing is enabled</td></tr>
+ * <tr><th colspan='4'>Properties</th></tr>
+ * <tr><td>http://gnu.org/sax/properties/base-uri</td>
+ * <td>read-only</td><td>String</td>
+ * <td>Returns the base URI of the current event</td></tr>
+ * <tr><td>http://gnu.org/sax/properties/document-xml-encoding</td>
+ * <td>read-only</td><td>String</td>
+ * <td>Returns the encoding specified in the XML declaration</td></tr>
+ * </table>
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class SAXParser
+  extends javax.xml.parsers.SAXParser
+  implements XMLReader, Attributes2, Locator2, XMLReporter, XMLResolver
+{
+
+  ContentHandler contentHandler;
+  DeclHandler declHandler;
+  DTDHandler dtdHandler;
+  EntityResolver entityResolver;
+  ErrorHandler errorHandler;
+  LexicalHandler lexicalHandler;
+
+  boolean validating = false;
+  boolean namespaceAware = true;
+  boolean xIncludeAware = false;
+  boolean stringInterning = true;
+  boolean coalescing = true;
+  boolean replaceERefs = true;
+  boolean externalEntities = true;
+  boolean supportDTD = true;
+  boolean baseAware = true;
+
+  XMLParser parser;
+  XMLStreamReader reader;
+  String encoding;
+  String xmlVersion;
+  boolean xmlStandalone;
+  String xmlEncoding;
+  String baseURI;
+
+  public SAXParser()
+  {
+  }
+
+  SAXParser(boolean validating, boolean namespaceAware, boolean xIncludeAware)
+  {
+    this.validating = validating;
+    this.namespaceAware = namespaceAware;
+    this.xIncludeAware = xIncludeAware;
+  }
+
+  // -- SAXParser --
+  
+  public Parser getParser()
+    throws SAXException
+  {
+    return null;
+  }
+  
+  public XMLReader getXMLReader()
+    throws SAXException
+  {
+    return this;
+  }
+
+  public boolean isNamespaceAware()
+  {
+    return namespaceAware;
+  }
+
+  public boolean isValidating()
+  {
+    return validating;
+  }
+
+  public void setProperty(String name, Object value)
+    throws SAXNotRecognizedException, SAXNotSupportedException
+  {
+    if (parser != null)
+      throw new IllegalStateException("parsing in progress");
+    final String FEATURES = "http://xml.org/sax/features/";
+    final String PROPERTIES = "http://xml.org/sax/properties/";
+    final String GNU_FEATURES = "http://gnu.org/sax/features/";
+    if ((FEATURES + "namespaces").equals(name))
+      namespaceAware = Boolean.TRUE.equals(value);
+    else if ((FEATURES + "namespace-prefixes").equals(name))
+      {
+        // NOOP
+      }
+    else if ((FEATURES + "string-interning").equals(name))
+      stringInterning = Boolean.TRUE.equals(value);
+    else if ((FEATURES + "use-attributes2").equals(name))
+      {
+        // NOOP
+      }
+    else if ((FEATURES + "validation").equals(name))
+      validating = Boolean.TRUE.equals(value);
+    else if ((FEATURES + "external-general-entities").equals(name))
+      externalEntities = Boolean.TRUE.equals(value);
+    else if ((FEATURES + "external-parameter-entities").equals(name))
+      externalEntities = Boolean.TRUE.equals(value);
+    else if ((PROPERTIES + "declaration-handler").equals(name))
+      declHandler = (DeclHandler) value;
+    else if ((PROPERTIES + "lexical-handler").equals(name))
+      lexicalHandler = (LexicalHandler) value;
+    else if ((GNU_FEATURES + "xml-base").equals(name))
+      baseAware = Boolean.TRUE.equals(value);
+    else
+      throw new SAXNotSupportedException(name);
+  }
+
+  public Object getProperty(String name)
+    throws SAXNotRecognizedException, SAXNotSupportedException
+  {
+    final String FEATURES = "http://xml.org/sax/features/";
+    final String PROPERTIES = "http://xml.org/sax/properties/";
+    final String GNU_FEATURES = "http://gnu.org/sax/features/";
+    final String GNU_PROPERTIES = "http://gnu.org/sax/properties/";
+    if ((GNU_FEATURES + "base-uri").equals(name))
+      return baseURI;
+    if ((FEATURES + "is-standalone").equals(name))
+      return xmlStandalone ? Boolean.TRUE : Boolean.FALSE;
+    if ((FEATURES + "namespaces").equals(name))
+      return namespaceAware ? Boolean.TRUE : Boolean.FALSE;
+    if ((FEATURES + "namespace-prefixes").equals(name))
+      return Boolean.TRUE;
+    if ((FEATURES + "string-interning").equals(name))
+      return stringInterning ? Boolean.TRUE : Boolean.FALSE;
+    if ((FEATURES + "use-attributes2").equals(name))
+      return Boolean.TRUE;
+    if ((FEATURES + "use-locator2").equals(name))
+      return Boolean.TRUE;
+    if ((FEATURES + "use-entity-resolver2").equals(name))
+      return Boolean.FALSE;
+    if ((FEATURES + "validation").equals(name))
+      return validating ? Boolean.TRUE : Boolean.FALSE;
+    if ((FEATURES + "external-general-entities").equals(name))
+      return externalEntities ? Boolean.TRUE : Boolean.FALSE;
+    if ((FEATURES + "external-parameter-entities").equals(name))
+      return externalEntities ? Boolean.TRUE : Boolean.FALSE;
+    if ((FEATURES + "xml-1.1").equals(name))
+      return Boolean.TRUE;
+    if ((PROPERTIES + "declaration-handler").equals(name))
+      return declHandler;
+    if ((PROPERTIES + "document-xml-version").equals(name))
+      return xmlVersion;
+    if ((PROPERTIES + "lexical-handler").equals(name))
+      return lexicalHandler;
+    if ((GNU_FEATURES + "xml-base").equals(name))
+      return baseAware ? Boolean.TRUE : Boolean.FALSE;
+    if ((GNU_PROPERTIES + "document-xml-encoding").equals(name))
+      return xmlEncoding;
+    throw new SAXNotSupportedException(name);
+  }
+
+  public boolean isXIncludeAware()
+  {
+    return xIncludeAware;
+  }
+
+  public void reset()
+  {
+    parser = null;
+    encoding = null;
+    xmlVersion = null;
+    xmlStandalone = false;
+  }
+
+  // -- XMLReader --
+
+  public boolean getFeature(String name)
+    throws SAXNotRecognizedException, SAXNotSupportedException
+  {
+    Object ret = getProperty(name);
+    if (ret instanceof Boolean)
+      return ((Boolean) ret).booleanValue();
+    throw new SAXNotSupportedException(name);
+  }
+
+  public void setFeature(String name, boolean value)
+    throws SAXNotRecognizedException, SAXNotSupportedException
+  {
+    setProperty(name, value ? Boolean.TRUE : Boolean.FALSE);
+  }
+
+  public void setEntityResolver(EntityResolver resolver)
+  {
+    entityResolver = resolver;
+  }
+
+  public EntityResolver getEntityResolver()
+  {
+    return entityResolver;
+  }
+
+  public void setDTDHandler(DTDHandler handler)
+  {
+    dtdHandler = handler;
+  }
+
+  public DTDHandler getDTDHandler()
+  {
+    return dtdHandler;
+  }
+
+  public void setContentHandler(ContentHandler handler)
+  {
+    contentHandler = handler;
+  }
+
+  public ContentHandler getContentHandler()
+  {
+    return contentHandler;
+  }
+
+  public void setErrorHandler(ErrorHandler handler)
+  {
+    errorHandler = handler;
+  }
+
+  public ErrorHandler getErrorHandler()
+  {
+    return errorHandler;
+  }
+
+  public synchronized void parse(InputSource input)
+    throws IOException, SAXException
+  {
+    reset();
+    String systemId = input.getSystemId();
+    InputStream in = input.getByteStream();
+    boolean opened = false;
+    if (in != null)
+      parser = new XMLParser(in, systemId,
+                             validating,
+                             namespaceAware,
+                             coalescing,
+                             replaceERefs,
+                             externalEntities,
+                             supportDTD,
+                             baseAware,
+                             stringInterning,
+                             true,
+                             this,
+                             this);
+    else
+      {
+        Reader r = input.getCharacterStream();
+        if (r != null)
+          parser = new XMLParser(r, systemId,
+                                 validating,
+                                 namespaceAware,
+                                 coalescing,
+                                 replaceERefs,
+                                 externalEntities,
+                                 supportDTD,
+                                 baseAware,
+                                 stringInterning,
+                                 true,
+                                 this,
+                                 this);
+      }
+    if (parser == null)
+      {
+        if (systemId == null)
+          throw new SAXException("No stream or system ID specified");
+        systemId = XMLParser.absolutize(null, systemId);
+        in = new URL(systemId).openStream();
+        opened = true;
+        parser = new XMLParser(in, systemId,
+                               validating,
+                               namespaceAware,
+                               coalescing,
+                               replaceERefs,
+                               externalEntities,
+                               supportDTD,
+                               baseAware,
+                               stringInterning,
+                               true,
+                               this,
+                               this);
+      }
+    reader = parser;
+    baseURI = systemId;
+    
+    if (xIncludeAware)
+      reader = new XIncludeFilter(parser, systemId, namespaceAware,
+                                  validating, true);
+    
+    if (contentHandler != null)
+      contentHandler.setDocumentLocator(this);
+    boolean startDocumentDone = false;
+    try
+      {
+        while (parser.hasNext())
+          {
+            int event = parser.next();
+            if (baseAware)
+              baseURI = parser.getXMLBase();
+            switch (event)
+              {
+              case XMLStreamConstants.CHARACTERS:
+                if (contentHandler != null)
+                  {
+                    char[] b = reader.getTextCharacters();
+                    contentHandler.characters(b, 0, b.length);
+                  }
+                break;
+              case XMLStreamConstants.SPACE:
+                if (contentHandler != null)
+                  {
+                    char[] b = reader.getTextCharacters();
+                    if (isIgnorableWhitespace(parser, b, false))
+                      contentHandler.ignorableWhitespace(b, 0, b.length);
+                    else
+                      contentHandler.characters(b, 0, b.length);
+                  }
+                break;
+              case XMLStreamConstants.CDATA:
+                if (lexicalHandler != null)
+                  lexicalHandler.startCDATA();
+                if (contentHandler != null)
+                  {
+                    char[] b = reader.getTextCharacters();
+                    if (isIgnorableWhitespace(parser, b, true))
+                      contentHandler.ignorableWhitespace(b, 0, b.length);
+                    else
+                      contentHandler.characters(b, 0, b.length);
+                  }
+                if (lexicalHandler != null)
+                  lexicalHandler.endCDATA();
+                break;
+              case XMLStreamConstants.START_ELEMENT:
+                if (contentHandler != null)
+                  {
+                    QName name = reader.getName();
+                    String uri = name.getNamespaceURI();
+                    String localName = name.getLocalPart();
+                    String prefix = name.getPrefix();
+                    String qName = localName;
+                    if (!"".equals(prefix))
+                      qName = prefix + ":" + localName;
+                    if (!namespaceAware)
+                      {
+                        uri = "";
+                        localName = "";
+                      }
+                    else
+                      {
+                        int nc = reader.getNamespaceCount();
+                        for (int i = 0; i < nc; i++)
+                          {
+                            String nsuri = reader.getNamespaceURI(i);
+                            String nsprefix = reader.getNamespacePrefix(i);
+                            if ("xml".equals(nsprefix))
+                              continue;
+                            contentHandler.startPrefixMapping(nsprefix, nsuri);
+                          }
+                      }
+                    contentHandler.startElement(uri, localName, qName, this);
+                  }
+                break;
+              case XMLStreamConstants.END_ELEMENT:
+                if (contentHandler != null)
+                  {
+                    QName name = reader.getName();
+                    String uri = name.getNamespaceURI();
+                    String localName = name.getLocalPart();
+                    String prefix = name.getPrefix();
+                    String qName = localName;
+                    if (!"".equals(prefix))
+                      qName = prefix + ":" + localName;
+                    if (!namespaceAware)
+                      {
+                        uri = "";
+                        localName = "";
+                      }
+                    contentHandler.endElement(uri, localName, qName);
+                    if (namespaceAware)
+                      {
+                        int nc = reader.getNamespaceCount();
+                        for (int i = 0; i < nc; i++)
+                          {
+                            String nsprefix = reader.getNamespacePrefix(i);
+                            if ("xml".equals(nsprefix))
+                              continue;
+                            contentHandler.endPrefixMapping(nsprefix);
+                          }
+                      }
+                  }
+                break;
+              case XMLStreamConstants.COMMENT:
+                if (lexicalHandler != null)
+                  {
+                    char[] b = reader.getTextCharacters();
+                    lexicalHandler.comment(b, 0, b.length);
+                  }
+                break;
+              case XMLStreamConstants.PROCESSING_INSTRUCTION:
+                if (contentHandler != null)
+                  {
+                    String target = reader.getPITarget();
+                    String data = reader.getPIData();
+                    if (data == null)
+                      data = "";
+                    contentHandler.processingInstruction(target, data);
+                  }
+                break;
+              case XMLParser.START_ENTITY:
+                if (lexicalHandler != null)
+                  {
+                    String name = reader.getText();
+                    lexicalHandler.startEntity(name);
+                  }
+                break;
+              case XMLParser.END_ENTITY:
+                if (lexicalHandler != null)
+                  {
+                    String name = reader.getText();
+                    lexicalHandler.endEntity(name);
+                  }
+                break;
+              case XMLStreamConstants.START_DOCUMENT:
+                encoding = reader.getEncoding();
+                xmlVersion = reader.getVersion();
+                xmlStandalone = reader.isStandalone();
+                xmlEncoding = reader.getCharacterEncodingScheme();
+                if (contentHandler != null)
+                  contentHandler.startDocument();
+                startDocumentDone = true;
+                break;
+              case XMLStreamConstants.END_DOCUMENT:
+                if (contentHandler != null)
+                  contentHandler.endDocument();
+                break;
+              case XMLStreamConstants.DTD:
+                XMLParser.Doctype doctype = parser.doctype;
+                if (lexicalHandler != null)
+                  {
+                    String rootName = doctype.rootName;
+                    String publicId = doctype.publicId;
+                    String systemId2 = doctype.systemId;
+                    lexicalHandler.startDTD(rootName, publicId, systemId2);
+                  }
+                for (Iterator i = doctype.entryIterator(); i.hasNext(); )
+                  {
+                    String entry = (String) i.next();
+                    char c = entry.charAt(0);
+                    String name = entry.substring(1);
+                    if ('E' == c)
+                      {
+                        // Element decl
+                        if (declHandler != null)
+                          {
+                            XMLParser.ContentModel model =
+                              doctype.getElementModel(name);
+                            declHandler.elementDecl(name, model.text);
+                          }
+                      }
+                    else if ('A' == c)
+                      {
+                        // Attlist decl
+                        if (declHandler != null)
+                          {
+                            for (Iterator j = doctype.attlistIterator(name);
+                                 j.hasNext(); )
+                              {
+                                Map.Entry att = (Map.Entry) j.next();
+                                String aname = (String) att.getKey();
+                                XMLParser.AttributeDecl decl =
+                                  (XMLParser.AttributeDecl) att.getValue();
+                                String type = decl.type;
+                                String value = decl.value;
+                                String mode = null;
+                                switch (decl.valueType)
+                                  {
+                                  case XMLParser.ATTRIBUTE_DEFAULT_FIXED:
+                                    mode = "#FIXED";
+                                    break;
+                                  case XMLParser.ATTRIBUTE_DEFAULT_REQUIRED:
+                                    mode = "#REQUIRED";
+                                    break;
+                                  case XMLParser.ATTRIBUTE_DEFAULT_IMPLIED:
+                                    mode = "#IMPLIED";
+                                    break;
+                                  }
+                                declHandler.attributeDecl(name, aname,
+                                                          type, mode, value);
+                              }
+                          }
+                      }
+                    else if ('e' == c)
+                      {
+                        // Entity decl
+                        Object entity = doctype.getEntity(name);
+                        if (entity instanceof String)
+                          {
+                            if (declHandler != null)
+                              declHandler.internalEntityDecl(name,
+                                                             (String) entity);
+                          }
+                        else
+                          {
+                            XMLParser.ExternalIds ids =
+                              (XMLParser.ExternalIds) entity;
+                            if (ids.notationName != null)
+                              {
+                                if (dtdHandler != null)
+                                  {
+                                    String pub = ids.publicId;
+                                    String url = ids.systemId;
+                                    String not = ids.notationName;
+                                    dtdHandler.unparsedEntityDecl(name,
+                                                                  pub,
+                                                                  url,
+                                                                  not);
+                                  }
+                              }
+                            else
+                              {
+                                if (declHandler != null)
+                                  {
+                                    String pub = ids.publicId;
+                                    String url = ids.systemId;
+                                    declHandler.externalEntityDecl(name,
+                                                                   pub,
+                                                                   url);
+                                  }
+                              }
+                          }
+                      }
+                    else if ('n' == c)
+                      {
+                        // Notation decl
+                        if (dtdHandler != null)
+                          {
+                            XMLParser.ExternalIds ids =
+                              doctype.getNotation(name);
+                            String pub = ids.publicId;
+                            String url = ids.systemId;
+                            dtdHandler.notationDecl(name, pub, url);
+                          }
+                      }
+                    else if ('c' == c)
+                      {
+                        // Comment
+                        if (lexicalHandler != null)
+                          {
+                            String comment = doctype.getComment(name);
+                            char[] b = comment.toCharArray();
+                            lexicalHandler.comment(b, 0, b.length);
+                          }
+                      }
+                    else if ('p' == c)
+                      {
+                        // Processing instruction
+                        if (contentHandler != null)
+                          {
+                            String[] pi = doctype.getPI(name);
+                            String target = pi[0];
+                            String data = pi[1];
+                            if (data == null)
+                              data = "";
+                            contentHandler.processingInstruction(target, data);
+                          }
+                      }
+                  }
+                if (lexicalHandler != null)
+                  lexicalHandler.endDTD();
+              }
+          }
+        reset();
+        if (opened)
+          in.close();
+      }
+    catch (Exception e)
+      {
+        SAXParseException e2 = new SAXParseException(e.getMessage(), this);
+        e2.initCause(e);
+        try
+          {
+            if (!startDocumentDone && contentHandler != null)
+              contentHandler.startDocument();
+            if (errorHandler != null)
+              errorHandler.fatalError(e2);
+            if (contentHandler != null)
+              contentHandler.endDocument();
+          }
+        catch (SAXException sex)
+          {
+            // Ignored, we will rethrow the original exception.
+          }
+        reset();
+        if (opened)
+          in.close();
+        if (e instanceof SAXException)
+          throw (SAXException) e;
+        if (e instanceof IOException)
+          throw (IOException) e;
+        else
+          throw e2;
+      }
+  }
+
+  /**
+   * Indicates whether the specified characters are ignorable whitespace.
+   */
+  private boolean isIgnorableWhitespace(XMLParser reader, char[] b,
+                                        boolean testCharacters)
+    throws XMLStreamException
+  {
+    XMLParser.Doctype doctype = reader.doctype;
+    if (doctype == null)
+      return false;
+    String currentElement = reader.getCurrentElement();
+    // check for xml:space
+    int ac = reader.getAttributeCount();
+    for (int i = 0; i < ac; i++)
+      {
+        QName aname = reader.getAttributeName(i);
+        if ("space".equals(aname.getLocalPart()) &&
+            XMLConstants.XML_NS_URI.equals(aname.getNamespaceURI()))
+          {
+            if ("preserve".equals(reader.getAttributeValue(i)))
+              return false;
+          }
+      }
+    XMLParser.ContentModel model = doctype.getElementModel(currentElement);
+    if (model == null || model.type != XMLParser.ContentModel.ELEMENT)
+      return false;
+    if (model.external && xmlStandalone)
+      return false;
+    boolean white = true;
+    if (testCharacters)
+      {
+        for (int i = 0; i < b.length; i++)
+          {
+            if (b[i] != ' ' && b[i] != '\t' && b[i] != '\n' && b[i] != '\r')
+              {
+                white = false;
+                break;
+              }
+          }
+      }
+    return white;
+  }
+
+  public void parse(String systemId)
+    throws IOException, SAXException
+  {
+    parse(new InputSource(systemId));
+  }
+
+  // -- Attributes2 --
+
+  public int getIndex(String qName)
+  {
+    int len = reader.getAttributeCount();
+    for (int i = 0; i < len; i++)
+      {
+        QName q = reader.getAttributeName(i);
+        String localName = q.getLocalPart();
+        String prefix = q.getPrefix();
+        String qn = ("".equals(prefix)) ? localName : prefix + ":" + localName;
+        if (qName.equals(qn))
+          return i;
+      }
+    return -1;
+  }
+
+  public int getIndex(String uri, String localName)
+  {
+    int len = reader.getAttributeCount();
+    for (int i = 0; i < len; i++)
+      {
+        QName q = reader.getAttributeName(i);
+        String ln = q.getLocalPart();
+        String u = q.getNamespaceURI();
+        if (u == null && uri != null)
+          continue;
+        if (u != null && !u.equals(uri))
+          continue;
+        if (ln.equals(localName))
+          return i;
+      }
+    return -1;
+  }
+
+  public int getLength()
+  {
+    return reader.getAttributeCount();
+  }
+
+  public String getLocalName(int index)
+  {
+    return reader.getAttributeLocalName(index);
+  }
+
+  public String getQName(int index)
+  {
+    QName q = reader.getAttributeName(index);
+    String localName = q.getLocalPart();
+    String prefix = q.getPrefix();
+    return ("".equals(prefix)) ? localName : prefix + ":" + localName;
+  }
+
+  public String getType(int index)
+  {
+    String ret = reader.getAttributeType(index);
+    // SAX doesn't permit ENUMERATION?
+    return ("ENUMERATION".equals(ret)) ? "NMTOKEN" : ret;
+  }
+
+  public String getType(String qName)
+  {
+    int index = getIndex(qName);
+    return (index == -1) ? null : getType(index);
+  }
+
+  public String getType(String uri, String localName)
+  {
+    int index = getIndex(uri, localName);
+    return (index == -1) ? null : getType(index);
+  }
+
+  public String getURI(int index)
+  {
+    String ret = reader.getAttributeNamespace(index);
+    return (ret == null) ? "" : ret;
+  }
+
+  public String getValue(int index)
+  {
+    return reader.getAttributeValue(index);
+  }
+
+  public String getValue(String qName)
+  {
+    int index = getIndex(qName);
+    return (index == -1) ? null : getValue(index);
+  }
+
+  public String getValue(String uri, String localName)
+  {
+    int index = getIndex(uri, localName);
+    return (index == -1) ? null : getValue(index);
+  }
+
+  public boolean isDeclared(int index)
+  {
+    return parser.isAttributeDeclared(index);
+  }
+
+  public boolean isDeclared(String qName)
+  {
+    int index = getIndex(qName);
+    return (index == -1) ? false : isDeclared(index);
+  }
+
+  public boolean isDeclared(String uri, String localName)
+  {
+    int index = getIndex(uri, localName);
+    return (index == -1) ? false : isDeclared(index);
+  }
+
+  public boolean isSpecified(int index)
+  {
+    return reader.isAttributeSpecified(index);
+  }
+
+  public boolean isSpecified(String qName)
+  {
+    int index = getIndex(qName);
+    return (index == -1) ? false : isSpecified(index);
+  }
+
+  public boolean isSpecified(String uri, String localName)
+  {
+    int index = getIndex(uri, localName);
+    return (index == -1) ? false : isSpecified(index);
+  }
+
+  // -- Locator2 --
+  
+  public int getColumnNumber()
+  {
+    Location l = reader.getLocation();
+    return l.getColumnNumber();
+  }
+
+  public int getLineNumber()
+  {
+    Location l = reader.getLocation();
+    return l.getLineNumber();
+  }
+
+  public String getPublicId()
+  {
+    Location l = reader.getLocation();
+    return l.getPublicId();
+  }
+
+  public String getSystemId()
+  {
+    Location l = reader.getLocation();
+    return l.getSystemId();
+  }
+  
+  public String getEncoding()
+  {
+    return encoding;
+  }
+
+  public String getXMLVersion()
+  {
+    return xmlVersion;
+  }
+
+  // -- XMLResolver --
+  
+  public Object resolveEntity(String publicId, String systemId,
+                              String baseURI, String namespace)
+    throws XMLStreamException
+  {
+    if (entityResolver != null)
+      {
+        try
+          {
+            InputSource input =
+              entityResolver.resolveEntity(publicId, systemId);
+            if (input != null)
+              {
+                InputStream in = input.getByteStream();
+                if (in == null)
+                  {
+                    String newSystemId = input.getSystemId();
+                    if (newSystemId != null && !newSystemId.equals(systemId))
+                      in = XMLParser.resolve(newSystemId);
+                  }
+                return in;
+              }
+          }
+        catch (SAXException e)
+          {
+            XMLStreamException e2 = new XMLStreamException(e.getMessage());
+            e2.initCause(e);
+            throw e2;
+          }
+        catch (IOException e)
+          {
+            XMLStreamException e2 = new XMLStreamException(e.getMessage());
+            e2.initCause(e);
+            throw e2;
+          }
+      }
+    return null;
+  }
+
+  public XMLEventReader resolveAsXMLEventReader(String uri)
+    throws XMLStreamException
+  {
+    // unused
+    return null;
+  }
+
+  public XMLStreamReader resolveAsXMLStreamReader(String uri)
+    throws XMLStreamException
+  {
+    // unused
+    return null;
+  }
+
+  // -- XMLReporter --
+
+  public void report(String message, String errorType,
+                     Object relatedInformation, Location location)
+    throws XMLStreamException
+  {
+    if (errorHandler != null)
+      {
+        try
+          {
+            errorHandler.warning(new SAXParseException(message, this));
+          }
+        catch (SAXException e)
+          {
+            XMLStreamException e2 = new XMLStreamException(e.getMessage());
+            e2.initCause(e);
+            throw e2;
+          }
+      }
+  }
+
+  public static void main(String[] args)
+    throws Exception
+  {
+    boolean validating = false;
+    boolean namespaceAware = false;
+    boolean xIncludeAware = false;
+    boolean expectCallbackClass = false;
+    String callbackClass = null;
+    int pos = 0;
+    while (pos < args.length && (args[pos].startsWith("-") || expectCallbackClass))
+      {
+        if ("-x".equals(args[pos]))
+          xIncludeAware = true;
+        else if ("-v".equals(args[pos]))
+          validating = true;
+        else if ("-n".equals(args[pos]))
+          namespaceAware = true;
+        else if ("-c".equals(args[pos]))
+          expectCallbackClass = true;
+        else if (expectCallbackClass)
+          {
+            callbackClass = args[pos];
+            expectCallbackClass = false;
+          }
+        pos++;
+      }
+    if (pos >= args.length || expectCallbackClass)
+      {
+        System.out.println("Syntax: SAXParser [-n] [-v] [-x] [-c <class>] <file> [<file2> [...]]");
+        System.out.println("\t-n: use namespace aware mode");
+        System.out.println("\t-v: use validating parser");
+        System.out.println("\t-x: use XInclude aware mode");
+        System.out.println("\t-c <class>: use specified class as callback handler (must have a no-arg public constructor)");
+        System.exit(2);
+      }
+    while (pos < args.length)
+      {
+        ContentHandler handler = null;
+        if (callbackClass != null)
+          {
+            Class t = Class.forName(callbackClass);
+            handler = (ContentHandler) t.newInstance();
+          }
+        else
+          handler = new org.xml.sax.helpers.DefaultHandler();
+        SAXParser parser = new SAXParser(validating, namespaceAware,
+                                         xIncludeAware);
+        InputSource input = new InputSource(args[pos]);
+        XMLReader reader = parser.getXMLReader();
+        reader.setContentHandler(handler);
+        reader.parse(input);
+        pos++;
+      }
+  }
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/SAXParserFactory.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/SAXParserFactory.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/SAXParserFactory.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/SAXParserFactory.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,104 @@
+/* SAXParserFactory.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXNotSupportedException;
+
+/**
+ * SAX parser factory providing a SAX compatibility layer on top of StAX.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class SAXParserFactory
+  extends javax.xml.parsers.SAXParserFactory
+{
+
+  static final Set FEATURE_NAMES = new HashSet();
+  static
+  {
+    FEATURE_NAMES.add("http://xml.org/sax/features/namespaces");
+    FEATURE_NAMES.add("http://xml.org/sax/features/string-interning");
+    FEATURE_NAMES.add("http://xml.org/sax/features/validation");
+  }
+
+  Map features = new HashMap();
+
+  public javax.xml.parsers.SAXParser newSAXParser()
+    throws ParserConfigurationException, SAXException
+  {
+    boolean validating = isValidating();
+    boolean namespaceAware = isNamespaceAware();
+    boolean xIncludeAware = isXIncludeAware();
+    SAXParser ret = new SAXParser(validating, namespaceAware, xIncludeAware);
+    for (Iterator i = features.entrySet().iterator(); i.hasNext(); )
+      {
+        Map.Entry entry = (Map.Entry) i.next();
+        String name = (String) entry.getKey();
+        Boolean value = (Boolean) entry.getValue();
+        ret.setFeature(name, value.booleanValue());
+      }
+    return ret;
+  }
+
+  public void setFeature(String name, boolean value)
+    throws ParserConfigurationException, SAXNotRecognizedException, SAXNotSupportedException
+  {
+    if (!FEATURE_NAMES.contains(name))
+      throw new SAXNotSupportedException(name);
+    features.put(name, value ? Boolean.TRUE : Boolean.FALSE);
+  }
+
+  public boolean getFeature(String name) 
+    throws ParserConfigurationException, SAXNotRecognizedException, SAXNotSupportedException  
+  {
+    if (!FEATURE_NAMES.contains(name))
+      throw new SAXNotSupportedException(name);
+    Boolean value = (Boolean) features.get(name);
+    return (value == null) ? false : value.booleanValue();
+  }
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/StartDocumentImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/StartDocumentImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/StartDocumentImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/StartDocumentImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,144 @@
+/* StartDocumentImpl.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.IOException;
+import java.io.Writer;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.StartDocument;
+
+/**
+ * A start-document event.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class StartDocumentImpl
+  extends XMLEventImpl
+  implements StartDocument
+{
+
+  protected final String systemId;
+  protected final String encoding;
+  protected final String xmlVersion;
+  protected final boolean xmlStandalone;
+  protected final boolean standaloneDeclared;
+  protected final boolean encodingDeclared;
+
+  protected StartDocumentImpl(Location location,
+                              String systemId, String encoding,
+                              String xmlVersion, boolean xmlStandalone,
+                              boolean standaloneDeclared,
+                              boolean encodingDeclared)
+  {
+    super(location);
+    this.systemId = systemId;
+    this.encoding = encoding;
+    this.xmlVersion = xmlVersion;
+    this.xmlStandalone = xmlStandalone;
+    this.standaloneDeclared = standaloneDeclared;
+    this.encodingDeclared = encodingDeclared;
+  }
+
+  public int getEventType()
+  {
+    return START_DOCUMENT;
+  }
+
+  public String getSystemId()
+  {
+    return systemId;
+  }
+
+  public String getCharacterEncodingScheme()
+  {
+    return encoding;
+  }
+
+  public boolean encodingSet()
+  {
+    return encodingDeclared;
+  }
+
+  public boolean isStandalone()
+  {
+    return xmlStandalone;
+  }
+
+  public boolean standaloneSet()
+  {
+    return standaloneDeclared;
+  }
+
+  public String getVersion()
+  {
+    return xmlVersion;
+  }
+  
+  public void writeAsEncodedUnicode(Writer writer)
+    throws XMLStreamException
+  {
+    try
+      {
+        writer.write("<?xml version='");
+        writer.write(xmlVersion);
+        writer.write('\'');
+        if (standaloneDeclared)
+          {
+            writer.write(" standalone='");
+            writer.write(xmlStandalone ? "yes" : "no");
+            writer.write('\'');
+          }
+        if (encodingDeclared)
+          {
+            writer.write(" encoding='");
+            writer.write(encoding);
+            writer.write('\'');
+          }
+        writer.write("?>");
+      }
+    catch (IOException e)
+      {
+        XMLStreamException e2 = new XMLStreamException(e.getMessage());
+        e2.initCause(e);
+        throw e2;
+      }
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/StartElementImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/StartElementImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/StartElementImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/StartElementImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,153 @@
+/* StartElementImpl.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Iterator;
+import java.util.List;
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.Attribute;
+import javax.xml.stream.events.Namespace;
+import javax.xml.stream.events.StartElement;
+
+/**
+ * A start-element event.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class StartElementImpl
+  extends XMLEventImpl
+  implements StartElement
+{
+
+  protected final QName name;
+  protected final List attributes;
+  protected final List namespaces;
+  protected final NamespaceContext namespaceContext;
+
+  protected StartElementImpl(Location location,
+                             QName name, List attributes, List namespaces,
+                             NamespaceContext namespaceContext)
+  {
+    super(location);
+    this.name = name;
+    this.attributes = attributes;
+    this.namespaces = namespaces;
+    this.namespaceContext = namespaceContext;
+  }
+
+  public int getEventType()
+  {
+    return START_ELEMENT;
+  }
+
+  public QName getName()
+  {
+    return name;
+  }
+
+  public Iterator getAttributes()
+  {
+    return attributes.iterator();
+  }
+
+  public Iterator getNamespaces()
+  {
+    return namespaces.iterator();
+  }
+
+  public Attribute getAttributeByName(QName name)
+  {
+    for (Iterator i = attributes.iterator(); i.hasNext(); )
+      {
+        Attribute attr = (Attribute) i.next();
+        if (name.equals(attr.getName()))
+          return attr;
+      }
+    return null;
+  }
+
+  public NamespaceContext getNamespaceContext()
+  {
+    return namespaceContext;
+  }
+
+  public String getNamespaceURI(String prefix)
+  {
+    return namespaceContext.getNamespaceURI(prefix);
+  }
+  
+  public void writeAsEncodedUnicode(Writer writer)
+    throws XMLStreamException
+  {
+    try
+      {
+        writer.write('<');
+        String prefix = name.getPrefix();
+        if (prefix != null && !"".equals(prefix))
+          {
+            writer.write(prefix);
+            writer.write(':');
+          }
+        writer.write(name.getLocalPart());
+        for (Iterator i = namespaces.iterator(); i.hasNext(); )
+          {
+            writer.write(' ');
+            ((Namespace) i.next()).writeAsEncodedUnicode(writer);
+          }
+        for (Iterator i = attributes.iterator(); i.hasNext(); )
+          {
+            writer.write(' ');
+            ((Attribute) i.next()).writeAsEncodedUnicode(writer);
+          }
+        writer.write('>');
+      }
+    catch (IOException e)
+      {
+        XMLStreamException e2 = new XMLStreamException(e.getMessage());
+        e2.initCause(e);
+        throw e2;
+      }
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/UnicodeReader.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/UnicodeReader.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/UnicodeReader.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/UnicodeReader.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,205 @@
+/* UnicodeReader.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.IOException;
+import java.io.Reader;
+
+/**
+ * A reader that converts UTF-16 characters to Unicode code points.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class UnicodeReader
+{
+
+  final Reader in;
+
+  UnicodeReader(Reader in)
+  {
+    this.in = in;
+  }
+
+  public void mark(int limit)
+    throws IOException
+  {
+    in.mark(limit * 2);
+  }
+
+  public void reset()
+    throws IOException
+  {
+    in.reset();
+  }
+
+  public int read()
+    throws IOException
+  {
+    int ret = in.read();
+    if (ret == -1)
+      return ret;
+    if (ret >= 0xd800 && ret < 0xdc00)
+      {
+        // Unicode surrogate?
+        int low = in.read();
+        if (low >= 0xdc00 && low < 0xe000)
+          ret = Character.toCodePoint((char) ret, (char) low);
+        else
+          throw new IOException("unpaired surrogate: U+" +
+                                Integer.toHexString(ret));
+      }
+    else if (ret >= 0xdc00 && ret < 0xe000)
+      throw new IOException("unpaired surrogate: U+" +
+                            Integer.toHexString(ret));
+    return ret;
+  }
+
+  public int read(int[] buf, int off, int len)
+    throws IOException
+  {
+    if (len == 0)
+      return 0;
+    char[] b2 = new char[len];
+    int ret = in.read(b2, 0, len);
+    if (ret <= 0)
+      return ret;
+    int l = ret - 1;
+    int i = 0, j = off;
+    for (; i < l; i++)
+      {
+        char c = b2[i];
+        if (c >= 0xd800 && c < 0xdc00)
+          {
+            // Unicode surrogate?
+            char d = b2[i + 1];
+            if (d >= 0xdc00 && d < 0xe000)
+              {
+                buf[j++] = Character.toCodePoint(c, d);
+                i++;
+                continue;
+              }
+            else
+              throw new IOException("unpaired surrogate: U+" +
+                                    Integer.toHexString(c));
+          }
+        else if (c >= 0xdc00 && c < 0xe000)
+          throw new IOException("unpaired surrogate: U+" +
+                                Integer.toHexString(c));
+        buf[j++] = (int) c;
+      }
+    if (i == l)
+      {
+        // last char
+        char c = b2[l];
+        if (c >= 0xd800 && c < 0xdc00)
+          {
+            int low = in.read();
+            if (low >= 0xdc00 && low < 0xe000)
+              {
+                buf[j++] = Character.toCodePoint(c, (char) low);
+                return j;
+              }
+            else
+              throw new IOException("unpaired surrogate: U+" +
+                                    Integer.toHexString(c));
+          }
+        else if (c >= 0xdc00 && c < 0xe000)
+          throw new IOException("unpaired surrogate: U+" +
+                                Integer.toHexString(c));
+        buf[j++] = (int) c;
+      }
+    return j;
+  }
+
+  public void close()
+    throws IOException
+  {
+    in.close();
+  }
+
+  /**
+   * Returns the specified UTF-16 char array as an array of Unicode code
+   * points.
+   */
+  public static int[] toCodePointArray(String text)
+    throws IOException
+  {
+    char[] b2 = text.toCharArray();
+    int[] buf = new int[b2.length];
+    if (b2.length > 0)
+      {
+        int l = b2.length - 1;
+        int i = 0, j = 0;
+        for (; i < l; i++)
+          {
+            char c = b2[i];
+            if (c >= 0xd800 && c < 0xdc00)
+              {
+                // Unicode surrogate?
+                char d = b2[i + 1];
+                if (d >= 0xdc00 && d < 0xe000)
+                  {
+                    buf[j++] = Character.toCodePoint(c, d);
+                    i++;
+                    continue;
+                  }
+                else
+                  throw new IOException("unpaired surrogate: U+" +
+                                        Integer.toHexString(c));
+              }
+            else if (c >= 0xdc00 && c < 0xe000)
+              throw new IOException("unpaired surrogate: U+" +
+                                    Integer.toHexString(c));
+            buf[j++] = (int) c;
+          }
+        if (i == l)
+          {
+            // last char
+            buf[j++] = (int) b2[l];
+            if (j < buf.length)
+              {
+                int[] buf2 = new int[j];
+                System.arraycopy(buf, 0, buf2, 0, j);
+                buf = buf2;
+              }
+          }
+      }
+    return buf;
+  }
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XIncludeFilter.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XIncludeFilter.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XIncludeFilter.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XIncludeFilter.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,943 @@
+/* XIncludeFilter.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.HashSet;
+import java.util.NoSuchElementException;
+import java.util.StringTokenizer;
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.util.ReaderDelegate;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.ProcessingInstruction;
+import org.w3c.dom.TypeInfo;
+import org.w3c.dom.traversal.DocumentTraversal;
+import org.w3c.dom.traversal.NodeFilter;
+import org.w3c.dom.traversal.TreeWalker;
+import org.w3c.dom.xpath.XPathEvaluator;
+import org.w3c.dom.xpath.XPathNSResolver;
+import org.w3c.dom.xpath.XPathResult;
+import org.xml.sax.SAXException;
+
+/**
+ * StAX filter for performing XInclude processing.
+ *
+ * @see http://www.w3.org/TR/xinclude/
+ * @see http://www.w3.org/TR/xptr-framework/
+ * @see http://www.w3.org/TR/xptr-element/
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+class XIncludeFilter
+  extends ReaderDelegate
+{
+
+  static final String XINCLUDE_NS_URI = "http://www.w3.org/2001/XInclude";
+  static final int SHOW_FLAGS =
+    NodeFilter.SHOW_CDATA_SECTION |
+    NodeFilter.SHOW_COMMENT |
+    NodeFilter.SHOW_ELEMENT |
+    NodeFilter.SHOW_ENTITY_REFERENCE |
+    NodeFilter.SHOW_PROCESSING_INSTRUCTION |
+    NodeFilter.SHOW_TEXT;
+
+  final String systemId;
+  final boolean namespaceAware;
+  final boolean validating;
+  final boolean expandERefs;
+  String href;
+  int event;
+  boolean included;
+  XPathResult result;
+  int snapshotIndex;
+  Node current;
+  TreeWalker walker;
+  HashSet seen = new HashSet();
+  boolean backtracking;
+  boolean lookahead;
+  
+  Reader includedText;
+  char[] buf;
+  int len = -1;
+  boolean inInclude, inFallback, seenFallback;
+
+  DocumentBuilder builder;
+
+  XIncludeFilter(XMLStreamReader reader, String systemId,
+                 boolean namespaceAware, boolean validating,
+                 boolean expandERefs)
+  {
+    super(reader);
+    try
+      {
+        this.systemId = XMLParser.absolutize(null, systemId);
+      }
+    catch (MalformedURLException e)
+      {
+        RuntimeException e2 = new RuntimeException("unsupported URL: " +
+                                                   systemId);
+        e2.initCause(e);
+        throw e2;
+      }
+    this.namespaceAware = namespaceAware;
+    this.validating = validating;
+    this.expandERefs = expandERefs;
+  }
+
+  public int getAttributeCount()
+  {
+    if (current != null)
+      {
+        NamedNodeMap attrs = current.getAttributes();
+        return (attrs == null) ? 0 : attrs.getLength();
+      }
+    return super.getAttributeCount();
+  }
+
+  public String getAttributeLocalName(int index)
+  {
+    if (current != null)
+      {
+        NamedNodeMap attrs = current.getAttributes();
+        if (attrs == null)
+         return null;
+        Node attr = attrs.item(index);
+        return attr.getLocalName();
+      }
+    return super.getAttributeLocalName(index);
+  }
+
+  public String getAttributeNamespace(int index)
+  {
+    if (current != null)
+      {
+        NamedNodeMap attrs = current.getAttributes();
+        if (attrs == null)
+         return null;
+        Node attr = attrs.item(index);
+        return attr.getNamespaceURI();
+      }
+    return super.getAttributeNamespace(index);
+  }
+
+  public String getAttributePrefix(int index)
+  {
+    if (current != null)
+      {
+        NamedNodeMap attrs = current.getAttributes();
+        if (attrs == null)
+         return null;
+        Node attr = attrs.item(index);
+        return attr.getPrefix();
+      }
+    return super.getAttributePrefix(index);
+  }
+
+  public QName getAttributeName(int index)
+  {
+    if (current != null)
+      {
+        NamedNodeMap attrs = current.getAttributes();
+        if (attrs == null)
+         return null;
+        Node attr = attrs.item(index);
+        String localName = attr.getLocalName();
+        String uri = attr.getNamespaceURI();
+        String prefix = attr.getPrefix();
+        return new QName(uri, localName, prefix);
+      }
+    return super.getAttributeName(index);
+  }
+
+  public String getAttributeType(int index)
+  {
+    if (current != null)
+      {
+        NamedNodeMap attrs = current.getAttributes();
+        if (attrs == null)
+         return null;
+        Attr attr = (Attr) attrs.item(index);
+        TypeInfo ti = attr.getSchemaTypeInfo();
+        return (ti == null) ? "CDATA" : ti.getTypeName();
+      }
+    return super.getAttributeType(index);
+  }
+
+  public boolean isAttributeSpecified(int index)
+  {
+    if (current != null)
+      {
+        NamedNodeMap attrs = current.getAttributes();
+        if (attrs == null)
+          return false;
+        Attr attr = (Attr) attrs.item(index);
+        return attr.getSpecified();
+      }
+    return super.isAttributeSpecified(index);
+  }
+
+  public String getAttributeValue(int index)
+  {
+    if (current != null)
+      {
+        NamedNodeMap attrs = current.getAttributes();
+        if (attrs == null)
+         return null;
+        Node attr = attrs.item(index);
+        return attr.getNodeValue();
+      }
+    return super.getAttributeValue(index);
+  }
+
+  public String getAttributeValue(String uri, String localName)
+  {
+    if (current != null)
+      {
+        NamedNodeMap attrs = current.getAttributes();
+        if (attrs == null)
+         return null;
+        Node attr = attrs.getNamedItemNS(uri, localName);
+        return (attr == null) ? null : attr.getNodeValue();
+      }
+    return super.getAttributeValue(uri, localName);
+  }
+
+  public String getElementText()
+    throws XMLStreamException
+  {
+    if (current != null)
+      return current.getTextContent();
+    return super.getElementText();
+  }
+
+  public int getEventType()
+  {
+    return event;
+  }
+
+  public String getLocalName()
+  {
+    if (current != null)
+      return current.getLocalName();
+    return super.getLocalName();
+  }
+
+  public QName getName()
+  {
+    if (current != null)
+      {
+        String localName = current.getLocalName();
+        String uri = current.getNamespaceURI();
+        String prefix = current.getPrefix();
+        return new QName(uri, localName, prefix);
+      }
+    return super.getName();
+  }
+
+  public String getNamespaceURI()
+  {
+    if (current != null)
+      return current.getNamespaceURI();
+    return super.getNamespaceURI();
+  }
+
+  // TODO namespaces
+
+  public String getPIData()
+  {
+    if (current != null)
+      return ((ProcessingInstruction) current).getData();
+    return super.getPIData();
+  }
+
+  public String getPITarget()
+  {
+    if (current != null)
+      return ((ProcessingInstruction) current).getTarget();
+    return super.getPITarget();
+  }
+
+  public String getPrefix()
+  {
+    if (current != null)
+      return current.getPrefix();
+    return super.getPrefix();
+  }
+
+  public String getText()
+  {
+    if (current != null)
+      return current.getNodeValue();
+    if (walker != null)
+      {
+        Node n = walker.getCurrentNode();
+        if (n != null)
+          return n.getTextContent();
+      }
+    if (buf != null)
+      return new String(buf, 0, len);
+    return super.getText();
+  }
+
+  public char[] getTextCharacters()
+  {
+    if (current != null)
+      {
+        buf = current.getNodeValue().toCharArray();
+        len = buf.length;
+      }
+    if (buf != null)
+      return buf;
+    return super.getTextCharacters();
+  }
+
+  public int getTextCharacters(int sourceStart, char[] target,
+                               int targetStart, int length)
+    throws XMLStreamException
+  {
+    if (current != null)
+      {
+        buf = current.getNodeValue().toCharArray();
+        len = buf.length;
+      }
+    if (buf != null)
+      {
+        int max = Math.min(len - sourceStart, length);
+        if (max > 0)
+          System.arraycopy(buf, sourceStart, target, targetStart, max);
+        return max;
+      }
+    return super.getTextCharacters(sourceStart, target, targetStart, length);
+  }
+
+  public int getTextLength()
+  {
+    if (current != null)
+      {
+        buf = current.getNodeValue().toCharArray();
+        len = buf.length;
+      }
+    if (buf != null)
+      return len;
+    return super.getTextLength();
+  }
+
+  public int getTextStart()
+  {
+    if (current != null)
+      {
+        buf = current.getNodeValue().toCharArray();
+        len = buf.length;
+      }
+    if (buf != null)
+      return 0;
+    return super.getTextStart();
+  }
+
+  public boolean hasNext()
+    throws XMLStreamException
+  {
+    if (!lookahead)
+      {
+        try
+          {
+            next();
+          }
+        catch (NoSuchElementException e)
+          {
+            event = -1;
+          }
+        lookahead = true;
+      }
+    return (event != -1);
+  }
+
+  public int next()
+    throws XMLStreamException
+  {
+    if (lookahead)
+      {
+        lookahead = false;
+        return event;
+      }
+    buf = null;
+    len = 0;
+    if (walker != null)
+      {
+        Node c = walker.getCurrentNode();
+        Node n = null;
+        if (c.getNodeType() == Node.ELEMENT_NODE)
+          {
+            boolean isStartElement = !seen.contains(c);
+            if (isStartElement)
+              {
+                seen.add(c);
+                current = c;
+                event = XMLStreamConstants.START_ELEMENT;
+                return event;
+              }
+            else if (backtracking)
+              {
+                n = walker.nextSibling();
+                if (n != null)
+                  backtracking = false;
+              }
+            else
+              {
+                n = walker.firstChild();
+                if (n == null)
+                  n = walker.nextSibling();
+              }
+          }
+        else
+          {
+            n = walker.firstChild();
+            if (n == null)
+              n = walker.nextSibling();
+          }
+        if (n == null)
+          {
+            current = walker.parentNode();
+            if (current != null && current.getNodeType() == Node.ELEMENT_NODE)
+              {
+                // end-element
+                backtracking = true;
+                event = XMLStreamConstants.END_ELEMENT;
+                return event;
+              }
+            else
+              {
+                walker = null;
+                current = null;
+              }
+          }
+        else
+          {
+            current = n;
+            switch (n.getNodeType())
+              {
+              case Node.ELEMENT_NODE:
+                return next();
+              case Node.TEXT_NODE:
+                String text = n.getNodeValue();
+                buf = text.toCharArray();
+                len = buf.length;
+                event = isSpace(buf, len) ?
+                  XMLStreamConstants.SPACE :
+                  XMLStreamConstants.CHARACTERS;
+                return event;
+              case Node.CDATA_SECTION_NODE:
+                event = XMLStreamConstants.CDATA;
+                return event;
+              case Node.COMMENT_NODE:
+                event = XMLStreamConstants.COMMENT;
+                return event;
+              case Node.PROCESSING_INSTRUCTION_NODE:
+                event = XMLStreamConstants.PROCESSING_INSTRUCTION;
+                return event;
+              case Node.ENTITY_REFERENCE_NODE:
+                event = XMLStreamConstants.ENTITY_REFERENCE;
+                return event;
+              default:
+                throw new IllegalStateException();
+              }
+          }
+      }
+    if (result != null)
+      {
+        switch (result.getResultType())
+          {
+          case XPathResult.BOOLEAN_TYPE:
+            boolean bval = result.getBooleanValue();
+            String btext = bval ? "true" : "false";
+            buf = btext.toCharArray();
+            len = buf.length;
+            result = null;
+            event = XMLStreamConstants.CHARACTERS;
+            return event;
+          case XPathResult.NUMBER_TYPE:
+            double nval = result.getNumberValue();
+            String ntext = new Double(nval).toString();
+            buf = ntext.toCharArray();
+            len = buf.length;
+            result = null;
+            event = XMLStreamConstants.CHARACTERS;
+            return event;
+          case XPathResult.STRING_TYPE:
+            String stext = result.getStringValue();
+            buf = stext.toCharArray();
+            len = buf.length;
+            result = null;
+            event = isSpace(buf, len) ?
+              XMLStreamConstants.SPACE :
+              XMLStreamConstants.CHARACTERS;
+            return event;
+          case XPathResult.ANY_UNORDERED_NODE_TYPE:
+          case XPathResult.FIRST_ORDERED_NODE_TYPE:
+            Node n1 = result.getSingleNodeValue();
+            Document d1 = getDocument(n1);
+            walker = getDocumentTraversal(d1)
+              .createTreeWalker(n1, SHOW_FLAGS, null, expandERefs);
+            result = null;
+            return next();
+          case XPathResult.ORDERED_NODE_ITERATOR_TYPE:
+          case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
+            Node n2 = result.iterateNext();
+            if (n2 == null)
+              {
+                result = null;
+                return next();
+              }
+            Document d2 = getDocument(n2);
+            walker = getDocumentTraversal(d2)
+              .createTreeWalker(n2, SHOW_FLAGS, null, expandERefs);
+            return next();
+          case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
+          case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE:
+            Node n3 = result.snapshotItem(snapshotIndex++);
+            if (n3 == null)
+              {
+                result = null;
+                return next();
+              }
+            Document d3 = getDocument(n3);
+            walker = getDocumentTraversal(d3)
+              .createTreeWalker(n3, SHOW_FLAGS, null, expandERefs);
+            return next();
+          default:
+            throw new IllegalStateException();
+          }
+      }
+    if (includedText != null)
+      {
+        // fill buffer
+        if (buf == null)
+          buf = new char[2048];
+        try
+          {
+            len = includedText.read(buf, 0, buf.length);
+            if (len == -1)
+              {
+                includedText = null;
+                buf = null;
+                return next();
+              }
+            // chars or space?
+            return (event = isSpace(buf, len) ?
+                    XMLStreamConstants.SPACE :
+                    XMLStreamConstants.CHARACTERS);
+          }
+        catch (IOException e)
+          {
+            XMLStreamException e2 = new XMLStreamException(e.getMessage());
+            e2.initCause(e);
+            throw e2;
+          }
+      }
+    event = super.next();
+    switch (event)
+      {
+      case XMLStreamConstants.START_ELEMENT:
+        String uri = getNamespaceURI();
+        if (XINCLUDE_NS_URI.equals(uri))
+          {
+            String localName = getLocalName();
+            if ("include".equals(localName))
+              {
+                href = getAttributeValue(null, "href");
+                String parse = getAttributeValue(null, "parse");
+                String xpointer = getAttributeValue(null, "xpointer");
+                String encoding = getAttributeValue(null, "encoding");
+                String accept = getAttributeValue(null, "accept");
+                String acceptLanguage = getAttributeValue(null,
+                                                          "accept-language");
+                if (includeResource(href, parse, xpointer, encoding,
+                                    accept, acceptLanguage))
+                  {
+                    // Skip to xi:include end-element event
+                    int depth = 0;
+                    while (depth >= 0)
+                      {
+                        event = super.next();
+                        switch (event)
+                          {
+                          case XMLStreamConstants.START_ELEMENT:
+                            depth++;
+                            break;
+                          case XMLStreamConstants.END_ELEMENT:
+                            depth--;
+                          }
+                      }
+                  }
+                else
+                  inInclude = true;
+              }
+            else if (inInclude && "fallback".equals(localName))
+              {
+                if (!seenFallback)
+                  inFallback = seenFallback = true;
+                else
+                  throw new XMLStreamException("duplicate xi:fallback element");
+              }
+            else if (inInclude)
+              {
+                throw new XMLStreamException("illegal xi element '" +
+                                             localName + "'");
+              }
+            return next();
+          }
+        break;
+      case XMLStreamConstants.END_ELEMENT:
+        String uri2 = getNamespaceURI();
+        if (XINCLUDE_NS_URI.equals(uri2))
+          {
+            String localName = getLocalName();
+            if ("include".equals(localName))
+              {
+                if (!seenFallback && included)
+                  {
+                    String msg = "Unable to read " + href +
+                      " and no xi:fallback element present";
+                    throw new XMLStreamException(msg);
+                  }
+                included = false;
+                href = null;
+                inInclude = inFallback = seenFallback = false;
+              }
+            else if ("fallback".equals(localName))
+              inFallback = false;
+            return next();
+          }
+        break;
+      }
+    if (inInclude && !inFallback)
+      return next();
+    return event;
+  }
+
+  boolean isSpace(char[] text, int len)
+  {
+    boolean space = true;
+    for (int i = 0; i < len; i++)
+      {
+        char c = text[i];
+        if (c != ' ' && c != '\t' && c != '\n' && c != '\r')
+          {
+            space = false;
+            break;
+          }
+      }
+    return space;
+  }
+
+  String getBaseURI()
+  {
+    String base = (String) getParent().getProperty("gnu.xml.stream.baseURI");
+    return (base == null) ? systemId : base;
+  }
+  
+  boolean includeResource(String href, String parse, String xpointer,
+                          String encoding, String accept,
+                          String acceptLanguage)
+  {
+    included = false;
+    try
+      {
+        if (xpointer != null)
+          throw new XMLStreamException("xpointer attribute not yet supported");
+        String base = getBaseURI();
+        if (href == null || "".equals(href))
+          href = base;
+        else
+          href = XMLParser.absolutize(base, href);
+        if (parse == null || "xml".equals(parse))
+          {
+            seen.clear();
+            result = null;
+            snapshotIndex = 0;
+            walker = null;
+            current = null;
+            backtracking = false;
+            
+            URLConnection connection = getURLConnection(href, accept,
+                                                        acceptLanguage);
+            InputStream in = connection.getInputStream();
+            Document doc = getDocumentBuilder().parse(in, href);
+            DocumentTraversal dt = getDocumentTraversal(doc);
+            if (xpointer == null)
+              {
+                result = null;
+                Node item = doc.getDocumentElement();
+                walker = dt.createTreeWalker(item, SHOW_FLAGS, null,
+                                             expandERefs);
+              }
+            else
+              {
+                result = null;
+                snapshotIndex = 0;
+                walker = null;
+                // shorthand or scheme-based?
+                int lpi = xpointer.indexOf('(');
+                int rpi = xpointer.indexOf(')', lpi);
+                if (lpi != -1 && rpi != -1)
+                  {
+                    String scheme = xpointer.substring(0, lpi);
+                    if ("element".equals(scheme))
+                      {
+                        // element() scheme
+                        String elementSchemeData =
+                          xpointer.substring(lpi + 1, rpi);
+                        Node item = doc;
+                        int si = elementSchemeData.indexOf('/');
+                        if (si == -1)
+                          {
+                            if (elementSchemeData.length() > 0)
+                              item = doc.getElementById(elementSchemeData);
+                          }
+                        else
+                          {
+                            if (si > 0)
+                              {
+                                String context =
+                                  elementSchemeData.substring(0, si);
+                                item = doc.getElementById(context);
+                                elementSchemeData =
+                                  elementSchemeData.substring(si + 1);
+                              }
+                            StringTokenizer st =
+                              new StringTokenizer(elementSchemeData, "/");
+                            while (st.hasMoreTokens() && item != null)
+                              {
+                                int n = Integer.parseInt(st.nextToken());
+                                Node ctx = item.getFirstChild();
+                                int count = 1;
+                                while (ctx != null && count++ < n)
+                                  ctx = ctx.getNextSibling();
+                                item = ctx;
+                              }
+                          }
+                        walker = dt.createTreeWalker(item, SHOW_FLAGS, null,
+                                                     expandERefs);
+                        included = true;
+                      }
+                    else if ("xpointer".equals(scheme))
+                      {
+                        xpointer = xpointer.substring(lpi + 1, rpi);
+                        XPathEvaluator eval = getXPathEvaluator(doc);
+                        XPathNSResolver resolver = eval.createNSResolver(doc);
+                        result =
+                          (XPathResult) eval.evaluate(xpointer, doc,
+                                                      resolver,
+                                                      XPathResult.ANY_TYPE,
+                                                      null);
+                        // TODO xpointer() scheme functions
+                        included = true;
+                      }
+                    else
+                      {
+                        String msg = "Unknown XPointer scheme: " + scheme;
+                        throw new XMLStreamException(msg);
+                      }
+                  }
+                else
+                  {
+                    Node item = doc.getElementById(xpointer);
+                    walker = dt.createTreeWalker(item, SHOW_FLAGS, null,
+                                                 expandERefs);
+                    included = true;
+                  }
+              }
+          }
+        else if ("text".equals(parse))
+          {
+            URLConnection connection = getURLConnection(href, accept,
+                                                        acceptLanguage);
+            InputStream in = connection.getInputStream();
+            if (encoding == null)
+              {
+                encoding = connection.getContentEncoding();
+                if (encoding == null)
+                  {
+                    String contentType = connection.getContentType();
+                    if (contentType != null)
+                      encoding = getParameter(contentType, "charset");
+                  }
+              }
+            if (encoding == null)
+              includedText = new InputStreamReader(in, "UTF-8");
+            else
+              includedText = new InputStreamReader(in, encoding);
+            included = true;
+          }
+        else
+          throw new XMLStreamException("value of 'parse' attribute must be "+
+                                       "'xml' or 'text'");
+        return true;
+      }
+    catch (IOException e)
+      {
+        return false;
+      }
+    catch (XMLStreamException e)
+      {
+        return false;
+      }
+    catch (SAXException e)
+      {
+        return false;
+      }
+  }
+
+  URLConnection getURLConnection(String href, String accept,
+                                 String acceptLanguage)
+    throws IOException
+  {
+    URL url = new URL(href);
+    URLConnection connection = url.openConnection();
+    if (connection instanceof HttpURLConnection)
+      {
+        HttpURLConnection http = (HttpURLConnection) connection;
+        http.setInstanceFollowRedirects(true);
+        if (accept != null)
+          http.setRequestProperty("Accept", accept);
+        if (acceptLanguage != null)
+          http.setRequestProperty("Accept-Language", acceptLanguage);
+      }
+    return connection;
+  }
+
+  Document getDocument(Node node)
+  {
+    if (node.getNodeType() == Node.DOCUMENT_NODE)
+      return (Document) node;
+    return node.getOwnerDocument();
+  }
+
+  DocumentBuilder getDocumentBuilder()
+    throws XMLStreamException
+  {
+    if (builder == null)
+      {
+        try
+          {
+            DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
+            f.setXIncludeAware(true);
+            f.setNamespaceAware(namespaceAware);
+            f.setValidating(validating);
+            builder = f.newDocumentBuilder();
+          }
+        catch (ParserConfigurationException e)
+          {
+            XMLStreamException e2 = new XMLStreamException(e.getMessage());
+            e2.initCause(e);
+            throw e2;
+          }
+      }
+    builder.reset();
+    return builder;
+  }
+
+  DocumentTraversal getDocumentTraversal(Document doc)
+    throws XMLStreamException
+  {
+    DOMImplementation dom = doc.getImplementation();
+    if (!dom.hasFeature("Traversal", "2.0"))
+      throw new XMLStreamException("Traversal not supported");
+    return (DocumentTraversal) doc;
+  }
+
+  XPathEvaluator getXPathEvaluator(Document doc)
+    throws XMLStreamException
+  {
+    DOMImplementation dom = doc.getImplementation();
+    if (!dom.hasFeature("XPath", "3.0"))
+      throw new XMLStreamException("XPath not supported");
+    return (XPathEvaluator) doc;
+  }
+
+  static String getParameter(String contentType, String name)
+  {
+    StringTokenizer st = new StringTokenizer(contentType, " ;");
+    if (st.hasMoreTokens())
+      st.nextToken();
+    while (st.hasMoreTokens())
+      {
+        String token = st.nextToken();
+        int ei = token.indexOf('=');
+        if (ei != -1)
+          {
+            String key = token.substring(0, ei);
+            if (key.equals(name))
+              {
+                String value = token.substring(ei + 1);
+                int len = value.length();
+                if (len > 1 &&
+                    value.charAt(0) == '"' &&
+                    value.charAt(len - 1) == '"')
+                  value = value.substring(1, len - 1);
+                else if (len > 1 &&
+                         value.charAt(0) == '\'' &&
+                         value.charAt(len - 1) == '\'')
+                  value = value.substring(1, len - 1);
+                return value;
+              }
+          }
+      }
+    return null;
+  }
+  
+}

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventAllocatorImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventAllocatorImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventAllocatorImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventAllocatorImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,203 @@
+/* XMLEventAllocatorImpl.java -- 
+   Copyright (C) 2005,2006  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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import javax.xml.namespace.QName;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.events.EntityDeclaration;
+import javax.xml.stream.events.XMLEvent;
+import javax.xml.stream.util.XMLEventAllocator;
+import javax.xml.stream.util.XMLEventConsumer;
+
+/**
+ * Allocator for creating XML events based on a reader state.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class XMLEventAllocatorImpl
+  implements XMLEventAllocator
+{
+
+  protected Map entityDeclarations;
+
+  protected XMLEventAllocatorImpl()
+  {
+    entityDeclarations = new HashMap();
+  }
+
+  public XMLEvent allocate(XMLStreamReader reader)
+    throws XMLStreamException
+  {
+    String text;
+    boolean whitespace;
+    boolean ignorableWhitespace;
+    int len;
+    List namespaces;
+    int eventType = reader.getEventType();
+    Location location = reader.getLocation();
+    switch (eventType)
+      {
+      case XMLStreamConstants.CDATA:
+        text = reader.getText();
+        whitespace = isWhitespace(text);
+        // TODO ignorableWhitespace
+        ignorableWhitespace = whitespace && false;
+        return new CharactersImpl(location, text,
+                                  whitespace, true, ignorableWhitespace);
+      case XMLStreamConstants.CHARACTERS:
+        text = reader.getText();
+        whitespace = false;
+        // TODO ignorableWhitespace
+        ignorableWhitespace = whitespace && false;
+        return new CharactersImpl(location, text,
+                                  whitespace, false, ignorableWhitespace);
+      case XMLStreamConstants.COMMENT:
+        text = reader.getText();
+        return new CommentImpl(location, text);
+      case XMLStreamConstants.DTD:
+        text = reader.getText();
+        List notations = new LinkedList();
+        List entities = new LinkedList();
+        // TODO readDTDBody(notations, entities);
+        return new DTDImpl(location, text, null, notations, entities);
+      case XMLStreamConstants.END_DOCUMENT:
+        return new EndDocumentImpl(location);
+      case XMLStreamConstants.END_ELEMENT:
+        len = reader.getNamespaceCount();
+        namespaces = new LinkedList();
+        for (int i = 0; i < len; i++)
+          namespaces.add(new NamespaceImpl(location,
+                                           reader.getNamespacePrefix(i),
+                                           reader.getNamespaceURI(i)));
+        return new EndElementImpl(location,
+                                  reader.getName(),
+                                  namespaces);
+      case XMLStreamConstants.ENTITY_REFERENCE:
+        String name = reader.getLocalName();
+        EntityDeclaration decl =
+          (EntityDeclaration) entityDeclarations.get(name);
+        return new EntityReferenceImpl(location, decl, name);
+      case XMLStreamConstants.PROCESSING_INSTRUCTION:
+        return new ProcessingInstructionImpl(location,
+                                             reader.getPITarget(),
+                                             reader.getPIData());
+      case XMLStreamConstants.SPACE:
+        text = reader.getText();
+        whitespace = true;
+        // TODO ignorableWhitespace
+        ignorableWhitespace = whitespace && false;
+        return new CharactersImpl(location, text,
+                                  whitespace, false, ignorableWhitespace);
+      case XMLStreamConstants.START_DOCUMENT:
+        String systemId = location.getSystemId();
+        String encoding = reader.getCharacterEncodingScheme();
+        boolean encodingDeclared = encoding != null;
+        if (encoding == null)
+          {
+            encoding = reader.getEncoding();
+            if (encoding == null)
+              encoding = "UTF-8";
+          }
+        String xmlVersion = reader.getVersion();
+        if (xmlVersion == null)
+          xmlVersion = "1.0";
+        boolean xmlStandalone = reader.isStandalone();
+        boolean standaloneDeclared = reader.standaloneSet();
+        return new StartDocumentImpl(location,
+                                     systemId,
+                                     encoding,
+                                     xmlVersion,
+                                     xmlStandalone,
+                                     standaloneDeclared,
+                                     encodingDeclared);
+      case XMLStreamConstants.START_ELEMENT:
+        len = reader.getNamespaceCount();
+        namespaces = new LinkedList();
+        for (int i = 0; i < len; i++)
+          namespaces.add(new NamespaceImpl(location,
+                                           reader.getNamespacePrefix(i),
+                                           reader.getNamespaceURI(i)));
+        len = reader.getAttributeCount();
+        List attributes = new LinkedList();
+        for (int i = 0; i < len; i++)
+          attributes.add(new AttributeImpl(location,
+                                           reader.getAttributeName(i),
+                                           reader.getAttributeValue(i),
+                                           QName.valueOf(reader.getAttributeType(i)),
+                                           reader.isAttributeSpecified(i)));
+        return new StartElementImpl(location,
+                                    reader.getName(),
+                                    attributes, namespaces,
+                                    reader.getNamespaceContext());
+      default:
+        throw new XMLStreamException("Unknown event type: " + eventType);
+      }
+  }
+
+  public void allocate(XMLStreamReader reader, XMLEventConsumer consumer)
+    throws XMLStreamException
+  {
+    consumer.add(allocate(reader));
+  }
+
+  public XMLEventAllocator newInstance()
+  {
+    return new XMLEventAllocatorImpl();
+  }
+  
+  protected boolean isWhitespace(String text)
+  {
+    int len = text.length();
+    for (int i = 0; i < len; i++)
+      {
+        char c = text.charAt(i);
+        if (c != 0x20 && c != 0x09 && c != 0x0a && c != 0x0d)
+          return false;
+      }
+    return true;
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventFactoryImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventFactoryImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventFactoryImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventFactoryImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,268 @@
+/* XMLEventFactoryImpl.java -- 
+   Copyright (C) 2005,2006  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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import javax.xml.XMLConstants;
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLEventFactory;
+import javax.xml.stream.events.Attribute;
+import javax.xml.stream.events.Characters;
+import javax.xml.stream.events.Comment;
+import javax.xml.stream.events.DTD;
+import javax.xml.stream.events.EndDocument;
+import javax.xml.stream.events.EndElement;
+import javax.xml.stream.events.EntityDeclaration;
+import javax.xml.stream.events.EntityReference;
+import javax.xml.stream.events.Namespace;
+import javax.xml.stream.events.ProcessingInstruction;
+import javax.xml.stream.events.StartDocument;
+import javax.xml.stream.events.StartElement;
+
+/**
+ * Factory for XML events.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class XMLEventFactoryImpl
+  extends XMLEventFactory
+{
+
+  protected Location location;
+
+  public void setLocation(Location location)
+  {
+    this.location = location;
+  }
+
+  public Attribute createAttribute(String prefix, String namespaceURI,
+                                   String localName, String value)
+  {
+    return new AttributeImpl(location,
+                             new QName(namespaceURI, localName, prefix),
+                             value, QName.valueOf("CDATA"), true);
+  }
+  
+  public Attribute createAttribute(String localName, String value)
+  {
+    return new AttributeImpl(location,
+                             new QName(localName),
+                             value, QName.valueOf("CDATA"), true);
+  }
+
+  public Attribute createAttribute(QName name, String value)
+  {
+    return new AttributeImpl(location, name, value,
+                             QName.valueOf("CDATA"), true);
+  }
+
+  public Namespace createNamespace(String namespaceURI)
+  {
+    return new NamespaceImpl(location,
+                             XMLConstants.DEFAULT_NS_PREFIX, namespaceURI);
+  }
+
+  public Namespace createNamespace(String prefix, String namespaceUri)
+  {
+     return new NamespaceImpl(location, prefix, namespaceUri);
+  }
+
+  public StartElement createStartElement(QName name,
+                                         Iterator attributes,
+                                         Iterator namespaces)
+  {
+    return new StartElementImpl(location, name,
+                                createLinkedList(attributes),
+                                createLinkedList(namespaces),
+                                null);
+  }
+  
+  public StartElement createStartElement(String prefix,
+                                         String namespaceUri,
+                                         String localName)
+  {
+    return new StartElementImpl(location,
+                                new QName(namespaceUri, localName, prefix),
+                                Collections.EMPTY_LIST,
+                                Collections.EMPTY_LIST,
+                                null);
+  }
+
+  public StartElement createStartElement(String prefix,
+                                         String namespaceUri,
+                                         String localName,
+                                         Iterator attributes,
+                                         Iterator namespaces)
+  {
+    return new StartElementImpl(location,
+                                new QName(namespaceUri, localName, prefix),
+                                createLinkedList(attributes),
+                                createLinkedList(namespaces),
+                                null);
+  }
+
+  public StartElement createStartElement(String prefix,
+                                         String namespaceUri,
+                                         String localName,
+                                         Iterator attributes,
+                                         Iterator namespaces,
+                                         NamespaceContext context)
+  {
+    return new StartElementImpl(location,
+                                new QName(namespaceUri, localName, prefix),
+                                createLinkedList(attributes),
+                                createLinkedList(namespaces),
+                                context);
+  }
+  
+  public EndElement createEndElement(QName name,
+                                     Iterator namespaces)
+  {
+    return new EndElementImpl(location, name,
+                              createLinkedList(namespaces));
+  }
+
+  public EndElement createEndElement(String prefix,
+                                     String namespaceUri,
+                                     String localName)
+  {
+    return new EndElementImpl(location,
+                              new QName(namespaceUri, localName, prefix),
+                              Collections.EMPTY_LIST);
+  }
+  
+  public EndElement createEndElement(String prefix,
+                                     String namespaceUri,
+                                     String localName,
+                                     Iterator namespaces)
+  {
+    return new EndElementImpl(location,
+                              new QName(namespaceUri, localName, prefix),
+                              createLinkedList(namespaces));
+  }
+
+  public Characters createCharacters(String content)
+  {
+    return new CharactersImpl(location, content, false, false, false);
+  }
+
+  public Characters createCData(String content)
+  {
+    return new CharactersImpl(location, content, false, true, false);
+  }
+
+  public Characters createSpace(String content)
+  {
+    return new CharactersImpl(location, content, true, false, false);
+  }
+
+  public Characters createIgnorableSpace(String content)
+  {
+    return new CharactersImpl(location, content, true, false, true);
+  }
+
+  public StartDocument createStartDocument()
+  {
+    return new StartDocumentImpl(location, null, "UTF-8", "1.0",
+                                 false, false, false);
+  }
+
+  public StartDocument createStartDocument(String encoding,
+                                           String version,
+                                           boolean standalone)
+  {
+    return new StartDocumentImpl(location, null, encoding, version,
+                                 standalone, true, true);
+  }
+  
+  public StartDocument createStartDocument(String encoding,
+                                           String version)
+  {
+    return new StartDocumentImpl(location, null, encoding, version,
+                                 false, false, true);
+  }
+
+  public StartDocument createStartDocument(String encoding)
+  {
+    return new StartDocumentImpl(location, null, encoding, "1.0",
+                                 false, false, true);
+  }
+
+  public EndDocument createEndDocument()
+  {
+    return new EndDocumentImpl(location);
+  }
+
+  public EntityReference createEntityReference(String name,
+                                               EntityDeclaration declaration)
+  {
+    return new EntityReferenceImpl(location, declaration, name);
+  }
+
+  public Comment createComment(String text)
+  {
+    return new CommentImpl(location, text);
+  }
+
+  public ProcessingInstruction createProcessingInstruction(String target,
+                                                           String data)
+  {
+    return new ProcessingInstructionImpl(location, target, data);
+  }
+
+  public DTD createDTD(String dtd)
+  {
+    return new DTDImpl(location, dtd, null,
+                       Collections.EMPTY_LIST,
+                       Collections.EMPTY_LIST);
+  }
+
+  LinkedList createLinkedList(Iterator i)
+  {
+    LinkedList ret = new LinkedList();
+    while (i.hasNext())
+      ret.add(i.next());
+    return ret;
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,198 @@
+/* XMLEventImpl.java -- 
+   Copyright (C) 2005,2006  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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.Writer;
+import javax.xml.namespace.QName;
+import javax.xml.stream.Location;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.Characters;
+import javax.xml.stream.events.EndElement;
+import javax.xml.stream.events.StartElement;
+import javax.xml.stream.events.XMLEvent;
+
+/**
+ * An XML stream event.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public abstract class XMLEventImpl
+  implements XMLEvent
+{
+
+  protected final Location location;
+
+  protected XMLEventImpl(Location location)
+  {
+    this.location = location;
+  }
+
+  public abstract int getEventType();
+
+  public Location getLocation()
+  {
+    return location;
+  }
+
+  public boolean isStartElement()
+  {
+    return getEventType() == START_ELEMENT;
+  }
+
+  public boolean isAttribute()
+  {
+    return getEventType() == ATTRIBUTE;
+  }
+
+  public boolean isNamespace()
+  {
+    return getEventType() == NAMESPACE;
+  }
+
+  public boolean isEndElement()
+  {
+    return getEventType() == END_ELEMENT;
+  }
+
+  public boolean isEntityReference()
+  {
+    return getEventType() == ENTITY_REFERENCE;
+  }
+
+  public boolean isProcessingInstruction()
+  {
+    return getEventType() == PROCESSING_INSTRUCTION;
+  }
+
+  public boolean isCharacters()
+  {
+    int et = getEventType();
+    return et == CHARACTERS || et == CDATA;
+  }
+
+  public boolean isStartDocument()
+  {
+    return getEventType() == START_DOCUMENT;
+  }
+
+  public boolean isEndDocument()
+  {
+    return getEventType() == END_DOCUMENT;
+  }
+
+  public StartElement asStartElement()
+  {
+    return (StartElement) this;
+  }
+
+  public EndElement asEndElement()
+  {
+    return (EndElement) this;
+  }
+
+  public Characters asCharacters()
+  {
+    return (Characters) this;
+  }
+
+  public QName getSchemaType()
+  {
+    return null;
+  }
+  
+  public abstract void writeAsEncodedUnicode(Writer writer)
+    throws XMLStreamException;
+
+  protected String encode(String text, boolean inAttr)
+  {
+    int len = text.length();
+    StringBuffer buf = null;
+    for (int i = 0; i < len; i++)
+      {
+        char c = text.charAt(i);
+        if (c == '<')
+          {
+            if (buf == null)
+              {
+                buf = new StringBuffer(text.substring(0, i));
+              }
+            buf.append("<");
+          }
+        else if (c == '>')
+          {
+            if (buf == null)
+              {
+                buf = new StringBuffer(text.substring(0, i));
+              }
+            buf.append(">");
+          }
+        else if (c == '&')
+          {
+            if (buf == null)
+              {
+                buf = new StringBuffer(text.substring(0, i));
+              }
+            buf.append("&");
+          }
+        else if (c == '\'' && inAttr)
+          {
+            if (buf == null)
+              {
+                buf = new StringBuffer(text.substring(0, i));
+              }
+            buf.append("'");
+          }
+        else if (c == '"' && inAttr)
+          {
+            if (buf == null)
+              {
+                buf = new StringBuffer(text.substring(0, i));
+              }
+            buf.append(""");
+          }
+        else if (buf != null)
+          {
+            buf.append(c);
+          }
+      }
+    return (buf == null) ? text : buf.toString(); 
+  }
+
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventReaderImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventReaderImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventReaderImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventReaderImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,158 @@
+/* XMLEventReaderImpl.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import javax.xml.stream.XMLEventReader;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.events.XMLEvent;
+import javax.xml.stream.util.XMLEventAllocator;
+
+/**
+ * Parser using XML events.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class XMLEventReaderImpl
+  implements XMLEventReader
+{
+
+  protected final XMLStreamReader reader;
+  protected final XMLEventAllocator allocator;
+  protected final String systemId;
+  protected XMLEvent peekEvent;
+
+  protected XMLEventReaderImpl(XMLStreamReader reader,
+                               XMLEventAllocator allocator,
+                               String systemId)
+  {
+    this.reader = reader;
+    this.allocator = allocator;
+    this.systemId = systemId;
+  }
+
+  public XMLEvent nextEvent()
+    throws XMLStreamException
+  {
+    XMLEvent ret = peek();
+    peekEvent = null;
+    return ret;
+  }
+
+  public Object next()
+  {
+    try
+      {
+        return nextEvent();
+      }
+    catch (XMLStreamException e)
+      {
+        RuntimeException e2 = new RuntimeException();
+        e2.initCause(e);
+        throw e2;
+      }
+  }
+
+  public boolean hasNext()
+  {
+    if (peekEvent != null)
+      return true;
+    try
+      {
+        return reader.hasNext();
+      }
+    catch (XMLStreamException e)
+      {
+        return false;
+      }
+  }
+  
+  public XMLEvent peek()
+    throws XMLStreamException
+  {
+    if (peekEvent != null)
+      return peekEvent;
+    if (!reader.hasNext())
+      return null;
+    reader.next();
+    peekEvent = allocator.allocate(reader);
+    return peekEvent;
+  }
+
+  public String getElementText()
+    throws XMLStreamException
+  {
+    return reader.getElementText();
+  }
+
+  public XMLEvent nextTag()
+    throws XMLStreamException
+  {
+    if (peekEvent != null)
+      {
+        int eventType = peekEvent.getEventType();
+        if (eventType == XMLStreamConstants.START_ELEMENT ||
+            eventType == XMLStreamConstants.END_ELEMENT)
+          return peekEvent;
+        else
+          peekEvent = null;
+      }
+    reader.nextTag();
+    return allocator.allocate(reader);
+  }
+
+  public Object getProperty(String name)
+    throws IllegalArgumentException
+  {
+    return reader.getProperty(name);
+  }
+
+  public void close()
+    throws XMLStreamException
+  {
+    reader.close();
+  }
+
+  public void remove()
+  {
+    throw new UnsupportedOperationException();
+  }
+
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventWriterImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventWriterImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventWriterImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLEventWriterImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,191 @@
+/* XMLEventWriterImpl.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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLEventReader;
+import javax.xml.stream.XMLEventWriter;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+import javax.xml.stream.events.Attribute;
+import javax.xml.stream.events.Characters;
+import javax.xml.stream.events.Comment;
+import javax.xml.stream.events.DTD;
+import javax.xml.stream.events.Namespace;
+import javax.xml.stream.events.ProcessingInstruction;
+import javax.xml.stream.events.StartDocument;
+import javax.xml.stream.events.StartElement;
+import javax.xml.stream.events.XMLEvent;
+
+/**
+ * Writer to write events to an underlying XML stream writer.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class XMLEventWriterImpl
+  implements XMLEventWriter
+{
+  
+  protected final XMLStreamWriter writer;
+
+  protected XMLEventWriterImpl(XMLStreamWriter writer)
+  {
+    this.writer = writer;
+  }
+
+  public void flush()
+    throws XMLStreamException
+  {
+    writer.flush();
+  }
+
+  public void close()
+    throws XMLStreamException
+  {
+    writer.close();
+  }
+
+  public void add(XMLEvent event)
+    throws XMLStreamException
+  {
+    QName name;
+    String uri;
+    switch (event.getEventType())
+      {
+      case XMLStreamConstants.START_ELEMENT:
+        StartElement startElement = event.asStartElement();
+        name = startElement.getName();
+        uri = name.getNamespaceURI();
+        if (uri != null && !"".equals(uri))
+          writer.writeStartElement(name.getPrefix(), name.getLocalPart(), uri);
+        else
+          writer.writeStartElement(name.getLocalPart());
+        break;
+      case XMLStreamConstants.END_ELEMENT:
+        writer.writeEndElement();
+        break;
+      case XMLStreamConstants.ATTRIBUTE:
+        Attribute attribute = (Attribute) event;
+        name = attribute.getName();
+        uri = name.getNamespaceURI();
+        if (uri != null && !"".equals(uri))
+          writer.writeAttribute(name.getPrefix(), uri, name.getLocalPart(),
+                                attribute.getValue());
+        else
+          writer.writeAttribute(name.getLocalPart(), attribute.getValue());
+        break;
+      case XMLStreamConstants.NAMESPACE:
+        Namespace namespace = (Namespace) event;
+        uri = namespace.getNamespaceURI();
+        writer.writeNamespace(namespace.getPrefix(), uri);
+        break;
+      case XMLStreamConstants.PROCESSING_INSTRUCTION:
+        ProcessingInstruction pi = (ProcessingInstruction) event;
+        String data = pi.getData();
+        if (data == null)
+          writer.writeProcessingInstruction(pi.getTarget());
+        else
+          writer.writeProcessingInstruction(pi.getTarget(), data);
+        break;
+      case XMLStreamConstants.COMMENT:
+        Comment comment = (Comment) event;
+        writer.writeComment(comment.getText());
+        break;
+      case XMLStreamConstants.START_DOCUMENT:
+        StartDocument startDocument = (StartDocument) event;
+        writer.writeStartDocument(startDocument.getVersion());
+        break;
+      case XMLStreamConstants.END_DOCUMENT:
+        writer.writeEndDocument();
+        break;
+      case XMLStreamConstants.DTD:
+        DTD dtd = (DTD) event;
+        writer.writeDTD(dtd.getDocumentTypeDeclaration());
+        break;
+      case XMLStreamConstants.CHARACTERS:
+      case XMLStreamConstants.SPACE:
+        Characters characters = event.asCharacters();
+        writer.writeCharacters(characters.getData());
+        break;
+      case XMLStreamConstants.CDATA:
+        Characters cdata = event.asCharacters();
+        writer.writeCData(cdata.getData());
+        break;
+      }
+  }
+
+  public void add(XMLEventReader reader)
+    throws XMLStreamException
+  {
+    while (reader.hasNext())
+      add(reader.nextEvent());
+  }
+
+  public String getPrefix(String uri)
+    throws XMLStreamException
+  {
+    return writer.getPrefix(uri);
+  }
+
+  public void setPrefix(String prefix, String uri)
+    throws XMLStreamException
+  {
+    writer.setPrefix(prefix, uri);
+  }
+
+  public void setDefaultNamespace(String uri)
+    throws XMLStreamException
+  {
+    writer.setDefaultNamespace(uri);
+  }
+
+  public void setNamespaceContext(NamespaceContext context)
+    throws XMLStreamException
+  {
+    writer.setNamespaceContext(context);
+  }
+  
+  public NamespaceContext getNamespaceContext()
+  {
+    return writer.getNamespaceContext();
+  }
+  
+}
+

Added: llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLInputFactoryImpl.java
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLInputFactoryImpl.java?rev=43913&view=auto

==============================================================================
--- llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLInputFactoryImpl.java (added)
+++ llvm-gcc-4.2/trunk/libjava/classpath/gnu/xml/stream/XMLInputFactoryImpl.java Thu Nov  8 16:56:19 2007
@@ -0,0 +1,398 @@
+/* XMLInputFactoryImpl.java -- 
+   Copyright (C) 2005,2006  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., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 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.stream;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.Reader;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.xml.transform.Source;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.stream.EventFilter;
+import javax.xml.stream.StreamFilter;
+import javax.xml.stream.XMLEventReader;
+import javax.xml.stream.XMLReporter;
+import javax.xml.stream.XMLResolver;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.util.XMLEventAllocator;
+
+/**
+ * Factory for creating parsers from various kinds of XML source.
+ *
+ * @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ */
+public class XMLInputFactoryImpl
+  extends XMLInputFactory
+{
+
+  protected XMLResolver resolver;
+  protected XMLReporter reporter;
+  protected XMLEventAllocator allocator;
+
+  protected boolean validating;
+  protected boolean namespaceAware = true;
+  protected boolean coalescing;
+  protected boolean replacingEntityReferences = true;
+  protected boolean externalEntities = true;
+  protected boolean supportDTD = true;
+  protected boolean xIncludeAware = false;
+  protected boolean baseAware = true;
+  protected boolean stringInterning = true;
+
+  public XMLInputFactoryImpl()
+  {
+    allocator = new XMLEventAllocatorImpl();
+  }
+
+  public XMLStreamReader createXMLStreamReader(Reader reader)
+    throws XMLStreamException
+  {
+    return createXMLStreamReader(null, reader);
+  }
+  
+  public XMLStreamReader createXMLStreamReader(Source source)
+    throws XMLStreamException
+  {
+    String systemId = source.getSystemId();
+    InputStream in = getInputStream(source);
+    XMLParser ret = new XMLParser(in, systemId,
+                                  validating,
+                                  namespaceAware,
+                                  coalescing,
+                                  replacingEntityReferences,
+                                  externalEntities,
+                                  supportDTD,
+                                  baseAware,
+                                  stringInterning,
+                                  false,
+                                  reporter,
+                                  resolver);
+    if (xIncludeAware)
+      return new XIncludeFilter(ret, systemId, namespaceAware, validating,
+                                replacingEntityReferences);
+    return ret;
+  }
+  
+  public XMLStreamReader createXMLStreamReader(InputStream in)
+    throws XMLStreamException
+  {
+    return createXMLStreamReader(null, in);
+  }
+  
+  public XMLStreamReader createXMLStreamReader(InputStream in, String encoding)
+    throws XMLStreamException
+  {
+    return createXMLStreamReader(in);
+  }
+
+  public XMLStreamReader createXMLStreamReader(String systemId, InputStream in)
+    throws XMLStreamException
+  {
+    XMLParser ret = new XMLParser(in, systemId,
+                                  validating,
+                                  namespaceAware,
+                                  coalescing,
+                                  replacingEntityReferences,
+                                  externalEntities,
+                                  supportDTD,
+                                  baseAware,
+                                  stringInterning,
+                                  false,
+                                  reporter,
+                                  resolver);
+    if (xIncludeAware)
+      return new XIncludeFilter(ret, null, namespaceAware, validating,
+                                replacingEntityReferences);
+    return ret;
+  }
+
+  public XMLStreamReader createXMLStreamReader(String systemId, Reader reader)
+    throws XMLStreamException
+  {
+    XMLParser ret = new XMLParser(reader, systemId,
+                                  validating,
+                                  namespaceAware,
+                                  coalescing,
+                                  replacingEntityReferences,
+                                  externalEntities,
+                                  supportDTD,
+                                  baseAware,
+                                  stringInterning,
+                                  false,
+                                  reporter,
+                                  resolver);
+    if (xIncludeAware)
+      return new XIncludeFilter(ret, null, namespaceAware, validating,
+                                replacingEntityReferences);
+    return ret;
+  }
+
+  public XMLEventReader createXMLEventReader(Reader reader)
+    throws XMLStreamException
+  {
+    XMLStreamReader sr = createXMLStreamReader(reader);
+    return new XMLEventReaderImpl(sr, allocator, null);
+  }
+  
+  public XMLEventReader createXMLEventReader(String systemId, Reader reader)
+    throws XMLStreamException
+  {
+    XMLStreamReader sr = createXMLStreamReader(systemId, reader);
+    return new XMLEventReaderImpl(sr, allocator, null);
+  }
+  
+  public XMLEventReader createXMLEventReader(XMLStreamReader reader)
+    throws XMLStreamException
+  {
+    return new XMLEventReaderImpl(reader, allocator, null);
+  }
+  
+  public XMLEventReader createXMLEventReader(Source source)
+    throws XMLStreamException
+  {
+    XMLStreamReader sr = createXMLStreamReader(source);
+    return new XMLEventReaderImpl(sr, allocator, null);
+  }
+  
+  public XMLEventReader createXMLEventReader(InputStream in)
+    throws XMLStreamException
+  {
+    XMLStreamReader sr = createXMLStreamReader(in);
+    return new XMLEventReaderImpl(sr, allocator, null);
+  }
+  
+  public XMLEventReader createXMLEventReader(InputStream in, String encoding)
+    throws XMLStreamException
+  {
+    XMLStreamReader sr = createXMLStreamReader(in, encoding);
+    return new XMLEventReaderImpl(sr, allocator, null);
+  }
+
+  public XMLEventReader createXMLEventReader(String systemId, InputStream in)
+    throws XMLStreamException
+  {
+    XMLStreamReader sr = createXMLStreamReader(systemId, in);
+    return new XMLEventReaderImpl(sr, allocator, null);
+  }
+  
+  public XMLStreamReader createFilteredReader(XMLStreamReader reader,
+                                              StreamFilter filter)
+    throws XMLStreamException
+  {
+    return new FilteredStreamReader(reader, filter);
+  }
+
+  public XMLEventReader createFilteredReader(XMLEventReader reader,
+                                             EventFilter filter)
+    throws XMLStreamException
+  {
+    return new FilteredEventReader(reader, filter);
+  }
+
+  public XMLResolver getXMLResolver()
+  {
+    return resolver;
+  }
+
+  public void setXMLResolver(XMLResolver resolver)
+  {
+    this.resolver = resolver;
+  }
+  
+  public XMLReporter getXMLReporter()
+  {
+    return reporter;
+  }
+
+  public void setXMLReporter(XMLReporter reporter)
+  {
+    this.reporter = reporter;
+  }
+
+  public void setProperty(String name, Object value)
+    throws IllegalArgumentException
+  {
+    if (name.equals(IS_NAMESPACE_AWARE))
+      namespaceAware = ((Boolean) value).booleanValue();
+    else if (name.equals(IS_VALIDATING))
+      validating = ((Boolean) value).booleanValue();
+    else if (name.equals(IS_COALESCING))
+      coalescing = ((Boolean) value).booleanValue();
+    else if (name.equals(IS_REPLACING_ENTITY_REFERENCES))
+      replacingEntityReferences = ((Boolean) value).booleanValue();
+    else if (name.equals(IS_SUPPORTING_EXTERNAL_ENTITIES))
+      externalEntities = ((Boolean) value).booleanValue();
+    else if (name.equals(SUPPORT_DTD))
+      supportDTD = ((Boolean) value).booleanValue();
+    else if (name.equals(REPORTER))
+      reporter = (XMLReporter) value;
+    else if (name.equals(RESOLVER))
+      resolver = (XMLResolver) value;
+    else if (name.equals(ALLOCATOR))
+      allocator = (XMLEventAllocator) value;
+    else if (name.equals("gnu.xml.stream.stringInterning"))
+      stringInterning = ((Boolean) value).booleanValue();
+    else if (name.equals("gnu.xml.stream.baseAware"))
+      baseAware = ((Boolean) value).booleanValue();
+    else if (name.equals("gnu.xml.stream.xIncludeAware"))
+      xIncludeAware = ((Boolean) value).booleanValue();
+    else
+      throw new IllegalArgumentException(name);
+  }
+
+  public Object getProperty(String name)
+    throws IllegalArgumentException
+  {
+    if (name.equals(IS_NAMESPACE_AWARE))
+      return namespaceAware ? Boolean.TRUE : Boolean.FALSE;
+    if (name.equals(IS_VALIDATING))
+      return validating ? Boolean.TRUE : Boolean.FALSE;
+    if (name.equals(IS_COALESCING))
+      return coalescing ? Boolean.TRUE : Boolean.FALSE;
+    if (name.equals(IS_REPLACING_ENTITY_REFERENCES))
+      return replacingEntityReferences ? Boolean.TRUE : Boolean.FALSE;
+    if (name.equals(IS_SUPPORTING_EXTERNAL_ENTITIES))
+      return externalEntities ? Boolean.TRUE : Boolean.FALSE;
+    if (name.equals(SUPPORT_DTD))
+      return supportDTD ? Boolean.TRUE : Boolean.FALSE;
+    if (name.equals(REPORTER))
+      return reporter;
+    if (name.equals(RESOLVER))
+      return resolver;
+    if (name.equals(ALLOCATOR))
+      return allocator;
+    if (name.equals("gnu.xml.stream.stringInterning"))
+      return stringInterning ? Boolean.TRUE : Boolean.FALSE;
+    if (name.equals("gnu.xml.stream.baseAware"))
+      return baseAware ? Boolean.TRUE : Boolean.FALSE;
+    if (name.equals("gnu.xml.stream.xIncludeAware"))
+      return xIncludeAware ? Boolean.TRUE : Boolean.FALSE;
+    throw new IllegalArgumentException(name);
+  }
+
+  public boolean isPropertySupported(String name)
+  {
+    return name.equals(IS_NAMESPACE_AWARE) ||
+      name.equals(IS_VALIDATING) ||
+      name.equals(IS_COALESCING) ||
+      name.equals(IS_REPLACING_ENTITY_REFERENCES) ||
+      name.equals(IS_SUPPORTING_EXTERNAL_ENTITIES) ||
+      name.equals(SUPPORT_DTD) ||
+      name.equals(REPORTER) ||
+      name.equals(RESOLVER) ||
+      name.equals(ALLOCATOR) ||
+      name.equals("gnu.xml.stream.stringInterning") ||
+      name.equals("gnu.xml.stream.baseAware") ||
+      name.equals("gnu.xml.stream.xIncludeAware");
+  }
+  
+  public void setEventAllocator(XMLEventAllocator allocator)
+  {
+    this.allocator = allocator;
+  }
+
+  public XMLEventAllocator getEventAllocator()
+  {
+    return allocator;
+  }
+
+  public void setCoalescing(boolean coalescing)
+  {
+    this.coalescing = coalescing;
+  }
+
+  public boolean isCoalescing()
+  {
+    return coalescing;
+  }
+
+  protected InputStream getInputStream(Source source)
+    throws XMLStreamException
+  {
+    InputStream in = null;
+    if (source instanceof StreamSource)
+      {
+        StreamSource streamSource = (StreamSource) source;
+        in = streamSource.getInputStream();
+      }
+    if (in == null)
+      {
+        String systemId = source.getSystemId();
+        try
+          {
+            URL url = new URL(systemId);
+            try
+              {
+                in = url.openStream();
+              }
+            catch (IOException e2)
+              {
+                XMLStreamException e3 = new XMLStreamException(e2);
+                e3.initCause(e2);
+                throw e3;
+              }
+          }
+        catch (MalformedURLException e)
+          {
+            // Fall back to relative file
+            if (File.separatorChar != '/')
+              systemId = systemId.replace('/', File.separatorChar);
+            try
+              {
+                in = new FileInputStream(systemId);
+              }
+            catch (FileNotFoundException e2)
+              {
+                XMLStreamException e3 = new XMLStreamException(e2);
+                e3.initCause(e2);
+                throw e3;
+              }
+          }
+      }
+    return in;
+  }
+  
+}
+





More information about the llvm-commits mailing list