From 07b78716af6a9d7c9fd1e94d9baf94a52c873947 Mon Sep 17 00:00:00 2001
From: Andrew Haley <aph@redhat.com>
Date: Fri, 30 Sep 2016 16:24:48 +0000
Subject: Makefile.def: Remove libjava.

2016-09-30  Andrew Haley  <aph@redhat.com>

	* Makefile.def: Remove libjava.
	* Makefile.tpl: Likewise.
	* Makefile.in: Regenerate.
	* configure.ac: Likewise.
	* configure: Likewise.
	* gcc/java: Remove.
	* libjava: Likewise.

From-SVN: r240662
---
 libjava/classpath/gnu/xml/util/DoParse.java        |  302 ---
 libjava/classpath/gnu/xml/util/DomParser.java      |  804 --------
 libjava/classpath/gnu/xml/util/Resolver.java       |  263 ---
 .../gnu/xml/util/SAXNullTransformerFactory.java    |  676 -------
 libjava/classpath/gnu/xml/util/XCat.java           | 1611 ----------------
 libjava/classpath/gnu/xml/util/XHTMLWriter.java    |  114 --
 libjava/classpath/gnu/xml/util/XMLWriter.java      | 1931 --------------------
 libjava/classpath/gnu/xml/util/package.html        |   20 -
 8 files changed, 5721 deletions(-)
 delete mode 100644 libjava/classpath/gnu/xml/util/DoParse.java
 delete mode 100644 libjava/classpath/gnu/xml/util/DomParser.java
 delete mode 100644 libjava/classpath/gnu/xml/util/Resolver.java
 delete mode 100644 libjava/classpath/gnu/xml/util/SAXNullTransformerFactory.java
 delete mode 100644 libjava/classpath/gnu/xml/util/XCat.java
 delete mode 100644 libjava/classpath/gnu/xml/util/XHTMLWriter.java
 delete mode 100644 libjava/classpath/gnu/xml/util/XMLWriter.java
 delete mode 100644 libjava/classpath/gnu/xml/util/package.html

(limited to 'libjava/classpath/gnu/xml/util')

diff --git a/libjava/classpath/gnu/xml/util/DoParse.java b/libjava/classpath/gnu/xml/util/DoParse.java
deleted file mode 100644
index 02c80d3..0000000
--- a/libjava/classpath/gnu/xml/util/DoParse.java
+++ /dev/null
@@ -1,302 +0,0 @@
-/* DoParse.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.util;
-
-import gnu.java.lang.CPStringBuilder;
-
-import java.io.IOException;
-
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.XMLReaderFactory;
-
-import gnu.xml.pipeline.EventConsumer;
-import gnu.xml.pipeline.EventFilter;
-import gnu.xml.pipeline.NSFilter;
-import gnu.xml.pipeline.PipelineFactory;
-import gnu.xml.pipeline.TeeConsumer;
-import gnu.xml.pipeline.ValidationConsumer;
-import gnu.xml.pipeline.WellFormednessFilter;
-
-/**
- * This class provides a driver which may be invoked from the command line
- * to process a document using a SAX2 parser and a specified XML processing
- * pipeline.
- * This facilitates some common types of command line tools, such as parsing an
- * XML document in order test it for well formedness or validity.
- *
- * <p>The SAX2 XMLReaderFactory should return a SAX2 XML parser which
- * supports both of the standardized extension handlers (for declaration
- * and lexical events).  That parser will be used to produce events.
- *
- * <p>The first parameter to the command gives the name of the document that
- * will be given to that processor.  If it is a file name, it is converted
- * to a URL first.
- *
- * <p>The second parameter describes a simple processing pipeline, and will
- * be used as input to {@link gnu.xml.pipeline.PipelineFactory}
- * methods which identify the processing to be done.  Examples of such a
- * pipeline include <pre>
- *
- *    nsfix | validate                <em>to validate the input document </em>
- *    nsfix | write ( stdout )        <em>to echo the file as XML text</em>
- *    dom | nsfix | write ( stdout )  <em>parse into DOM, print the result</em>
- * </pre>
- *
- * <p> Relatively complex pipelines can be described on the command line, but
- * not all interesting ones will require as little configuration as can be done
- * in that way.  Put filters like "nsfix", perhaps followed by "validate",
- * at the front of the pipeline so they can be optimized out if a parser
- * supports those modes natively.
- *
- * <p> If the parsing is aborted for any reason, the JVM will exit with a
- * failure code.  If a validating parse was done then both validation and
- * well formedness errors will cause a failure.  A non-validating parse
- * will report failure on well formedness errors.
- *
- * @see gnu.xml.pipeline.PipelineFactory
- *
- * @author David Brownell
- */
-final public class DoParse
-{
-    private DoParse () { /* no instances allowed */ }
-
-    // first reported nonrecoverable error
-    private static SAXParseException    fatal;
-
-    // error categories
-    private static int                  errorCount;
-    private static int                  fatalCount;
-
-    /**
-     * Command line invoker for this class; pass a filename or URL
-     * as the first argument, and a pipeline description as the second.
-     * Make sure to use filters to condition the input to stages that
-     * require it; an <em>nsfix</em> filter will be a common requirement,
-     * to restore syntax that SAX2 parsers delete by default.  Some
-     * conditioning filters may be eliminated by setting parser options.
-     * (For example, "nsfix" can set the "namespace-prefixes" feature to
-     * a non-default value of "true".  In the same way, "validate" can set
-     * the "validation" feature to "true".)
-     */
-    public static void main (String argv [])
-    throws IOException
-    {
-        int             exitStatus = 1;
-
-        if (argv.length != 2) {
-            System.err.println ("Usage: DoParse [filename|URL] pipeline-spec");
-            System.err.println ("Example pipeline specs:");
-            System.err.println ("  'nsfix | validate'");
-            System.err.println (
-                "       ... restore namespace syntax, validate");
-            System.err.println ("  'nsfix | write ( stdout )'");
-            System.err.println (
-                "       ... restore namespace syntax, write to stdout as XML"
-                );
-            System.exit (1);
-        }
-
-        try {
-            //
-            // Get input source for specified document (or try ;-)
-            //
-            argv [0] = Resolver.getURL (argv [0]);
-            InputSource input = new InputSource (argv [0]);
-
-            //
-            // Get the producer, using the system default parser (which
-            // can be overridden for this particular invocation).
-            //
-            // And the pipeline, using commandline options.
-            //
-            XMLReader           producer;
-            EventConsumer       consumer;
-
-            producer = XMLReaderFactory.createXMLReader ();
-
-            //
-            // XXX pipeline factory now has a pre-tokenized input
-            // method, use it ... that way at least some params
-            // can be written using quotes (have spaces, ...)
-            //
-            consumer = PipelineFactory.createPipeline (argv [1]);
-
-            //
-            // XXX want commandline option for tweaking error handler.
-            // Want to be able to present warnings.
-            //
-            producer.setErrorHandler (new MyErrorHandler ());
-
-            // XXX need facility enabling resolving to local DTDs
-
-            //
-            // Parse.  The pipeline may get optimized a bit, so we
-            // can't always fail cleanly for validation without taking
-            // a look at the filter stages.
-            //
-            EventFilter.bind (producer, consumer);
-            producer.parse (input);
-
-            try {
-                if (producer.getFeature (
-                        "http://org.xml/sax/features/validation"))
-                    exitStatus = ((errorCount + fatalCount) > 0) ? 1 : 0;
-                else if (fatalCount == 0)
-                    exitStatus = 0;
-            } catch (SAXException e) {
-                if (hasValidator (consumer))
-                    exitStatus = ((errorCount + fatalCount) > 0) ? 1 : 0;
-                else if (fatalCount == 0)
-                    exitStatus = 0;
-            }
-
-        } catch (java.net.MalformedURLException e) {
-            System.err.println ("** Malformed URL: " + e.getMessage ());
-            System.err.println ("Is '" + argv [0] + "' a non-existent file?");
-            e.printStackTrace ();
-                // e.g. FNF
-
-        } catch (SAXParseException e) {
-            if (e != fatal) {
-                System.err.print (printParseException ("Parsing Aborted", e));
-                e.printStackTrace ();
-                if (e.getException () != null) {
-                    System.err.println ("++ Wrapped exception:");
-                    e.getException ().printStackTrace ();
-                }
-            }
-
-        } catch (SAXException e) {
-            Exception   x = e;
-            if (e.getException () != null)
-                x = e.getException ();
-            x.printStackTrace ();
-
-        } catch (Throwable t) {
-            t.printStackTrace ();
-        }
-
-        System.exit (exitStatus);
-    }
-
-    // returns true if saw a validator (before end or unrecognized node)
-    // false otherwise
-    private static boolean hasValidator (EventConsumer e)
-    {
-        if (e == null)
-            return false;
-        if (e instanceof ValidationConsumer)
-            return true;
-        if (e instanceof TeeConsumer) {
-            TeeConsumer t = (TeeConsumer) e;
-            return hasValidator (t.getFirst ())
-                || hasValidator (t.getRest ());
-        }
-        if (e instanceof WellFormednessFilter
-                || e instanceof NSFilter
-                )
-            return hasValidator (((EventFilter)e).getNext ());
-
-        // else ... gee, we can't know.  Assume not.
-
-        return false;
-    }
-
-    static class MyErrorHandler implements ErrorHandler
-    {
-        // dump validation errors, but continue
-        public void error (SAXParseException e)
-        throws SAXParseException
-        {
-            errorCount++;
-            System.err.print (printParseException ("Error", e));
-        }
-
-        public void warning (SAXParseException e)
-        throws SAXParseException
-        {
-            // System.err.print (printParseException ("Warning", e));
-        }
-
-        // try to continue fatal errors, in case a parser reports more
-        public void fatalError (SAXParseException e)
-        throws SAXParseException
-        {
-            fatalCount++;
-            if (fatal == null)
-                fatal = e;
-            System.err.print (printParseException ("Nonrecoverable Error", e));
-        }
-    }
-
-    static private String printParseException (
-        String                  label,
-        SAXParseException       e
-    ) {
-        CPStringBuilder buf = new CPStringBuilder ();
-        int             temp;
-
-        buf.append ("** ");
-        buf.append (label);
-        buf.append (": ");
-        buf.append (e.getMessage ());
-        buf.append ('\n');
-        if (e.getSystemId () != null) {
-            buf.append ("   URI:  ");
-            buf.append (e.getSystemId ());
-            buf.append ('\n');
-        }
-        if ((temp = e.getLineNumber ()) != -1) {
-            buf.append ("   line: ");
-            buf.append (temp);
-            buf.append ('\n');
-        }
-        if ((temp = e.getColumnNumber ()) != -1) {
-            buf.append ("   char: ");
-            buf.append (temp);
-            buf.append ('\n');
-        }
-
-        return buf.toString ();
-    }
-}
diff --git a/libjava/classpath/gnu/xml/util/DomParser.java b/libjava/classpath/gnu/xml/util/DomParser.java
deleted file mode 100644
index 66e3f1d..0000000
--- a/libjava/classpath/gnu/xml/util/DomParser.java
+++ /dev/null
@@ -1,804 +0,0 @@
-/* DomParser.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.util;
-
-import java.util.Enumeration;
-import java.util.Locale;
-
-import org.xml.sax.*;
-import org.xml.sax.helpers.AttributesImpl;
-import org.xml.sax.helpers.NamespaceSupport;
-import org.xml.sax.ext.DeclHandler;
-import org.xml.sax.ext.DefaultHandler2;
-import org.xml.sax.ext.LexicalHandler;
-
-import org.w3c.dom.*;
-
-
-/**
- * This parser emits SAX2 parsing events as it traverses a DOM tree, using
- * any conformant implementation of DOM.  It exposes all SAX1 features,
- * and the following SAX2 features and properties (as
- * identified by standard URIs which are not fully provided here).  Note
- * that if a Level 1 DOM implementation is given, then this behaves as if
- * namespaces were disabled, and namespace prefixes were enabled.  </p>
- *
- * <table border="1" width='100%' cellpadding='3' cellspacing='0'>
- * <tr bgcolor='#ccccff'>
- *      <th><font size='+1'>Name</font></th>
- *      <th><font size='+1'>Notes</font></th></tr>
- *
- * <tr><td colspan=2><center><em>Features ... URL prefix is
- * <b>http://xml.org/sax/features/</b></em></center></td></tr>
- *
- * <tr><td>(URL)/external-general-entities</td>
- *      <td>false (does no parsing)</td></tr>
- * <tr><td>(URL)/external-parameter-entities</td>
- *      <td>false (does no parsing)</td></tr>
- * <tr><td>(URL)/namespaces</td>
- *      <td>Value is fixed at <em>true</em></td></tr>
- * <tr><td>(URL)/namespace-prefixes</td>
- *      <td>Value is settable, defaulting to <em>false</em>
- *      (<code>xmlns</code> attributes hidden, and names aren't prefixed)
- *      </td></tr>
- * <tr><td>(URL)/string-interning</td>
- *      <td>Value is fixed at <em>false</em> (DOM provides no
- *      guarantees as to interning)</td></tr>
- * <tr><td>(URL)/validation</td>
- *      <td>false (does no parsing)</td></tr>
- * <tr><td>(URL)/lexical-handler/parameter-entities</td>
- *      <td>false (DOM doesn't do parameter entities)</td></tr>
- *
- * <tr><td colspan=2><center><em>Properties ... URL prefix is
- * <b>http://xml.org/sax/properties/</b></em></center></td></tr>
- *
- *
- * <tr><td>(URL)/dom-node</td>
- *      <td>This property may be set before parsing to hold a DOM
- *      <em>Document</em> node; any arguments given to <em>parse</em>
- *      methods are ignored.  When retrieved
- *      during a parse, this value contains the "current" DOM node.
- *      </td></tr>
- * <tr><td>(URL)/declaration-handler</td>
- *      <td>A declaration handler may be provided.  Declaration of external
- *      general entities is exposed, but not parameter entities; none of the
- *      entity names reported here will begin with "%". </td></tr>
- * <tr><td>(URL)/lexical-handler</td>
- *      <td>A lexical handler may be provided.  While the start and end of
- *      any external subset are reported, expansion of other parameter
- *      entities (e.g. inside attribute list declarations) is not exposed.
- *      Expansion of general entities within attributes is also not exposed
- *      (see below).</td></tr>
- * </table>
- *
- * <P> The consequences of modifying a DOM document tree as it is being walked
- * by this "parser" are unspecified; don't do it! </P>
- *
- * @author David Brownell
- */
-final public class DomParser implements XMLReader
-{
-    // Stuff used internally to route events correctly
-    private DefaultHandler2     defaultHandler = new DefaultHandler2 ();
-
-    // per-parse SAX stuff
-    private ContentHandler      contentHandler = defaultHandler;
-    private DTDHandler          dtdHandler = defaultHandler;
-    private DeclHandler         declHandler = defaultHandler;
-    private LexicalHandler      lexicalHandler = defaultHandler;
-
-    // shared context
-    private ErrorHandler        errHandler = defaultHandler;
-    private EntityResolver      resolver = defaultHandler;
-    private Locale              locale = Locale.getDefault ();
-
-    // parser state
-    private Node                start;
-    private Node                current;
-    private boolean             isL2;
-    private boolean             showNamespaces = true;
-    private boolean             showXML1_0 = false;
-    private NamespaceSupport    prefixStack = new NamespaceSupport ();
-    private boolean             isDocument;
-
-
-    /**
-     * Constructs an unitialized <b>SAX2</b> parser.
-     */
-    public DomParser () {
-    }
-
-    /**
-     * Constructs an <b>SAX2</b> parser initialized to traverse the specified
-     * DOM tree.  If the node is a document, the startDocument() and
-     * endDocument() calls bracket the calls exposing children.
-     */
-    public DomParser (Node node) {
-        setStart (node);
-    }
-
-
-    // stuff that most components in an application should be sharing:
-    // resolver and error locale.
-
-    /**
-     * <b>SAX2</b>: Returns the object used when resolving external
-     * entities during parsing (both general and parameter entities).
-     */
-    public EntityResolver getEntityResolver ()
-    {
-        return resolver;
-    }
-
-    /**
-     * <b>SAX1</b>: Provides an object which may be used when resolving external
-     * entities during parsing (both general and parameter entities).
-     */
-    public void setEntityResolver (EntityResolver resolver)
-    {
-        if (resolver == null)
-            resolver = defaultHandler;
-        this.resolver = resolver;
-    }
-
-    /**
-     * <b>SAX1</b>: Identifies the locale which the parser should use for the
-     * diagnostics it provides.
-     *
-     * @exception SAXException as defined in the specification for
-     *  <em>org.xml.sax.Parser.setLocale()</em>
-     */
-    public void setLocale (Locale locale)
-    throws SAXException
-    {
-        if (locale == null)
-            locale = Locale.getDefault ();
-        this.locale = locale;
-    }
-
-
-    // different modules will tend to handle error handling the same,
-    // but it may not be the same through the whole app
-
-    /**
-     * <b>SAX2</b>: Returns the object used to receive callbacks for XML
-     * errors of all levels (fatal, nonfatal, warning).
-     */
-    public ErrorHandler getErrorHandler ()
-    {
-        return errHandler;
-    }
-
-    /**
-     * <b>SAX1</b>: Provides an object which receives callbacks for XML errors
-     * of all levels (fatal, nonfatal, warning).
-     */
-    public void setErrorHandler (ErrorHandler handler)
-    {
-        if (handler == null)
-            handler = defaultHandler;
-        errHandler = handler;
-    }
-
-
-    // stuff different parts of a module will handle differently
-
-    /**
-     * <b>SAX2</b>: Returns the object used to report the logical
-     * content of an XML document.
-     */
-    public ContentHandler getContentHandler ()
-    {
-        return contentHandler;
-    }
-
-    /**
-     * <b>SAX2</b>: Assigns the object used to report the logical
-     * content of an XML document.
-     */
-    public void setContentHandler (ContentHandler handler)
-    {
-        if (handler == null)
-            handler = defaultHandler;
-        contentHandler = handler;
-    }
-
-    /**
-     * <b>SAX2</b>: Returns the object used to process declarations related
-     * to notations and unparsed entities.
-     */
-    public DTDHandler getDTDHandler ()
-    {
-        return dtdHandler;
-    }
-
-    /**
-     * <b>SAX1</b>: Provides an object which may be used to intercept
-     * declarations related to notations and unparsed entities.
-     */
-    public void setDTDHandler (DTDHandler handler)
-    {
-        if (handler == null)
-            handler = defaultHandler;
-        dtdHandler = handler;
-    }
-
-
-    /**
-     * <b>SAX1</b>:  Parses the previously provided DOM document (the
-     * input parameter is ignored).  When this returns, that same
-     * document may be parsed again without needing a "reset".
-     *
-     * @param uri ignored (pass an empty string)
-     * @exception SAXException as defined in the specification for
-     *  <em>org.xml.sax.Parser.parse()</em>
-     */
-    public void parse (String uri) throws SAXException
-    {
-        parse ();
-    }
-
-    /**
-     * <b>SAX1</b>:  Parses the previously provided DOM document (the
-     * input parameter is ignored).  When this returns, that same
-     * document may be parsed again without needing a "reset".
-     *
-     * @param input ignored
-     * @exception SAXException as defined in the specification for
-     *  <em>org.xml.sax.Parser.parse()</em>
-     */
-    public void parse (InputSource input) throws SAXException
-    {
-        parse ();
-    }
-
-    private void parse () throws SAXException
-    {
-        try {
-            walk ();
-        } finally {
-            if (isDocument)
-                contentHandler.endDocument ();
-            current = null;
-            prefixStack.reset ();
-        }
-    }
-
-    private boolean getIsL2 (Node node)
-    {
-        DOMImplementation       impl;
-        Document                doc;
-
-        if (node instanceof Document)
-            doc = (Document) node;
-        else
-            doc = node.getOwnerDocument ();
-        if (doc == null)
-            throw new RuntimeException ("? unowned node - L2 DTD ?");
-        impl = doc.getImplementation ();
-        return impl.hasFeature ("XML", "2.0");
-    }
-
-
-    private static final String FEATURES = "http://xml.org/sax/features/";
-    private static final String HANDLERS = "http://xml.org/sax/properties/";
-
-    /**
-     * <b>SAX2</b>: Tells whether this parser supports the specified feature.
-     */
-    public boolean getFeature (String name)
-    throws SAXNotRecognizedException, SAXNotSupportedException
-    {
-        // basically, none are relevant -- they relate more to
-        // parsing than to walking a "parse tree".
-
-                // FIXME: DOM feature to expose interning?
-
-        if ((FEATURES + "validation").equals (name)
-                || (FEATURES + "external-general-entities")
-                    .equals (name)
-                || (FEATURES + "external-parameter-entities")
-                    .equals (name)
-                || (FEATURES + "string-interning").equals (name)
-                )
-            return false;
-
-        if ((FEATURES + "namespaces").equals (name))
-            return showNamespaces;
-        if ((FEATURES + "namespace-prefixes").equals (name))
-            return showXML1_0;
-
-        throw new SAXNotRecognizedException (name);
-    }
-
-    /**
-     * <b>SAX2</b>:  Returns the specified property.  At this time only
-     * the declaration and lexical handlers, and current the "DOM" node,
-     * are supported.
-     */
-    public Object getProperty (String name)
-    throws SAXNotRecognizedException, SAXNotSupportedException
-    {
-        if ((HANDLERS + "declaration-handler").equals (name))
-            return declHandler == defaultHandler ? null : declHandler;
-        if ((HANDLERS + "lexical-handler").equals (name))
-            return lexicalHandler == defaultHandler ? null : lexicalHandler;
-
-        if ((HANDLERS + "dom-node").equals (name))
-            return current;
-
-        // unknown properties
-        throw new SAXNotRecognizedException (name);
-    }
-
-    /**
-     * <b>SAX2</b>:  Sets the state of features supported in this parser.
-     * Only the namespace support features are mutable.
-     */
-    public void setFeature (String name, boolean state)
-    throws SAXNotRecognizedException, SAXNotSupportedException
-    {
-        if (current != null)
-            throw new IllegalStateException ("feature change midparse");
-
-        boolean value = getFeature (name);
-
-        if (value == state)
-            return;
-
-        if ((FEATURES + "namespaces").equals (name)) {
-            if (!showXML1_0 && state == false)
-                throw new SAXNotSupportedException ("Illegal namespace "
-                        + "processing configuration");
-            showNamespaces = state;
-            return;
-        }
-        if ((FEATURES + "namespace-prefixes").equals (name)) {
-            if (!showNamespaces && state == false)
-                throw new SAXNotSupportedException ("Illegal namespace "
-                        + "processing configuration");
-            showXML1_0 = state;
-            return;
-        }
-
-        throw new SAXNotSupportedException (name);
-    }
-
-    /**
-     * <b>SAX2</b>:  Assigns the specified property.  At this time only
-     * declaration and lexical handlers, and the initial DOM document, are
-     * supported.  These must not be changed to values of the wrong type.
-     * Like SAX1 handlers, these handlers may be changed at any time.
-     * Like SAX1 input source or document URI, the initial DOM document
-     * may not be changed during a parse.
-     */
-    public void setProperty (String name, Object state)
-    throws SAXNotRecognizedException, SAXNotSupportedException
-    {
-        if ((HANDLERS + "declaration-handler").equals (name)) {
-            if (!(state instanceof DeclHandler || state == null))
-                throw new SAXNotSupportedException (name);
-            declHandler = (DeclHandler) state;
-            return;
-        }
-
-        if ((HANDLERS + "lexical-handler").equals (name)) {
-            if (!(state instanceof LexicalHandler || state == null))
-                throw new SAXNotSupportedException (name);
-            lexicalHandler = (LexicalHandler) state;
-            return;
-        }
-
-        if ((HANDLERS + "dom-node").equals (name)) {
-            if (state == null || state instanceof Node) {
-                if (current != null)
-                    throw new SAXNotSupportedException (
-                        "property is readonly during parse:  " + name);
-                setStart ((Node) state);
-                return;
-            }
-            throw new SAXNotSupportedException ("not a DOM Node");
-        }
-
-        // unknown properties
-        throw new SAXNotRecognizedException (name);
-    }
-
-    private void setStart (Node property)
-    {
-        start = property;
-        if (start != null) {
-            isL2 = getIsL2 (start);
-            isDocument = (start instanceof Document);
-        }
-    }
-
-    //
-    // Non-recursive walk, using DOM state when backtracking is needed
-    //
-    private void walk ()
-    throws SAXException
-    {
-        int                     type;
-        NamedNodeMap            nodes;
-        int                     length;
-        AttributesImpl          attrs = new AttributesImpl ();
-        char                    chars [];
-        String                  ns, local;
-
-        synchronized (this) {
-            if (current != null)
-                throw new IllegalStateException ("already walking tree");
-
-            // JVM guarantees assignments are atomic; so no other
-            // thread could get this far till this walk's done.
-            current = start;
-        }
-
-        for (;;) {
-            type = current.getNodeType ();
-
-            //
-            // First, visit the current node, including any "start" calls
-            //
-            switch (type) {
-
-              case Node.DOCUMENT_NODE:
-                contentHandler.startDocument ();
-                break;
-
-              case Node.ELEMENT_NODE:
-                nodes = current.getAttributes ();
-                length = nodes.getLength ();
-                prefixStack.pushContext ();
-                for (int i = 0; i < length; i++) {
-                    Attr        attr = (Attr) nodes.item (i);
-                    String      name = attr.getNodeName ();
-
-                    if (showNamespaces && name.startsWith ("xmlns")) {
-                        String  prefix;
-                        String  uri;
-
-                        // NOTE: DOM L2 (CR2+ and REC) violate the
-                        // Namespaces REC, treat "xmlns" like a strange
-                        // attribute instead of a magic token
-                        if ("xmlns".equals (name))
-                            prefix = "";
-                        else
-                            prefix = name.substring (6);
-                        uri = attr.getNodeValue ();
-
-                        prefixStack.declarePrefix (prefix, uri);
-                        contentHandler.startPrefixMapping (prefix, uri);
-
-                        if (!showXML1_0)
-                            continue;
-                    }
-
-                    //
-                    // NOTE:  DOM doesn't record the attribute type info
-                    // which SAX exposes; so this always reports CDATA.
-                    //
-                    // NOTE:  SAX doesn't expose the isSpecified info which
-                    // DOM exposes; that's discarded here.  Similarly with
-                    // the information DOM hides inside itself about what
-                    // the default values for an attribute are.
-                    //
-                    if (showNamespaces) {
-                        if (isL2) {
-                            if ((ns = attr.getNamespaceURI ()) == null)
-                                ns = "";
-                            // Note:  SAX2 and DOM handle "local" names
-                            // differently
-                            if ((local = attr.getLocalName ()) == null)
-                                local = name;
-                        } else {
-// XXX
-                            throw new RuntimeException (
-                                "NYI, ns lookup when parsing L1 DOM");
-                        }
-                    } else
-                        ns = local = "";
-                    attrs.addAttribute (ns, local, name,
-                        "CDATA", attr.getNodeValue ());
-                }
-                if (showNamespaces) {
-                    if (isL2) {
-                        if ((ns = current.getNamespaceURI ()) == null)
-                            ns = "";
-                        // Note:  SAX2 and DOM handle "local" names differently
-                        if ((local = current.getLocalName ()) == null)
-                            local = current.getNodeName ();
-                    } else {
-// XXX
-                        throw new RuntimeException (
-                            "NYI, ns lookup when parsing L1 DOM");
-                    }
-                } else
-                    ns = local = "";
-                contentHandler.startElement  (ns, local,
-                    current.getNodeName (), attrs);
-                if (length != 0)
-                    attrs.clear ();
-                break;
-
-              case Node.CDATA_SECTION_NODE:
-                lexicalHandler.startCDATA ();
-                chars = current.getNodeValue ().toCharArray ();
-                contentHandler.characters (chars, 0, chars.length);
-                lexicalHandler.endCDATA ();
-                break;
-
-              case Node.COMMENT_NODE:
-                chars = current.getNodeValue ().toCharArray ();
-                lexicalHandler.comment (chars, 0, chars.length);
-                break;
-
-              case Node.DOCUMENT_TYPE_NODE:
-                {
-                    DocumentType        doctype = (DocumentType) current;
-
-                    //
-                    // Only DOM L2 supports recreating even some DTDs in full.
-                    //
-                    if (isL2) {
-                        lexicalHandler.startDTD (doctype.getName (),
-                                doctype.getPublicId (),
-                                doctype.getSystemId ());
-                    } else
-                        lexicalHandler.startDTD (doctype.getName (),
-                                null, null);
-
-                    //
-                    // The only sure way to recreate is to provide both the
-                    // internal and external subsets.  Otherwise, only part
-                    // of the job can be done ... because from the DTD, DOM
-                    // discards both the critical data, like the attribute and
-                    // element declarations, as well as the PIs and comments
-                    // that are used to hold their documentation.
-                    //
-                    // Even the entity and notation declarations that it can
-                    // expose can't be recorded without proprietary extensions.
-                    //
-                    // We construct a comment to tell what we know about how
-                    // (in)complete this particular really DTD is.
-                    //
-                    {
-                        String message;
-                        char buf [];
-
-                        //
-                        // Though DOM L2 lets the whole doctype be recreated,
-                        // SAX2 can't represent it (input or output).
-                        // So this will be the typical case.
-                        //
-                        if (isL2 && doctype.getInternalSubset () != null)
-                            message =
-                    " Full DTD known; can't be shown using SAX2. ";
-
-                        //
-                        // Otherwise, we'll concoct a partial DTD.  If there's
-                        // any more data here at all, it was provided using a
-                        // (proprietary) extension to DOM.
-                        //
-                        else
-                            message =
-            " This DTD was was recreated using incomplete DOM L2 records. ";
-
-                        buf = message.toCharArray ();
-                        lexicalHandler.comment (buf, 0, buf.length);
-                    }
-
-                    // report notations first
-                    nodes = doctype.getNotations ();
-                    length = nodes.getLength ();
-                    for (int i = 0; i < length; i++) {
-                        Notation notation = (Notation) nodes.item (i);
-                            dtdHandler.notationDecl (
-                                notation.getNodeName (),
-                                notation.getPublicId (),
-                                notation.getSystemId ());
-                    }
-
-                    // then parsed and unparsed external general entities
-                    nodes = doctype.getEntities ();
-                    length = nodes.getLength ();
-                    for (int i = 0; i < length; i++) {
-                        Entity  entity = (Entity) nodes.item (i);
-                        String  notation = entity.getNotationName ();
-
-                        if (notation != null)
-                            dtdHandler.unparsedEntityDecl (
-                                entity.getNodeName (),
-                                entity.getPublicId (),
-                                entity.getSystemId (),
-                                notation);
-                        else if (entity.getSystemId () != null)
-                            declHandler.externalEntityDecl (
-                                entity.getNodeName (),
-                                entity.getPublicId (),
-                                entity.getSystemId ());
-
-                        //
-                        // NOTE:  DOM doesn't clearly provide internal
-                        // entity support; but in case someone tries to
-                        // fudge such support, we defend ourselves above.
-                        //
-                        // NOTE:  DOM doesn't expose parameter entities
-                        // (thank you thank you thank you thank you)
-                        //
-                    }
-
-                    //
-                    // NOTE:  DOM (levels 1 and 2) doesn't expose real
-                    // typing information (element or attribute decls),
-                    // as exposed by SAX2 declaration handlers.
-                    //
-                    lexicalHandler.endDTD ();
-                }
-                break;
-
-              case Node.ENTITY_REFERENCE_NODE:
-                // this isn't done except (a) in content, and
-                // (b) not within a start tag (att value)
-                lexicalHandler.startEntity (current.getNodeName ());
-                break;
-
-              case Node.PROCESSING_INSTRUCTION_NODE:
-                contentHandler.processingInstruction (
-                    current.getNodeName (), current.getNodeValue ());
-                break;
-
-              case Node.TEXT_NODE:
-                chars = current.getNodeValue ().toCharArray ();
-                contentHandler.characters (chars, 0, chars.length);
-                break;
-
-              default:
-                // e.g. fragments, entities, notations, attributes
-                throw new SAXException ("Illegal DOM Node type in Document:  "
-                    +  current.getNodeType ());
-            }
-
-            //
-            // Then, pick the next node to visit.  If the next node isn't
-            // a child, an "end" call may be needed before moving on.
-            // If there's no next node, we're done.
-            //
-            Node                next;
-
-            switch (type) {
-              case Node.DOCUMENT_NODE:
-              case Node.ELEMENT_NODE:
-              case Node.ENTITY_REFERENCE_NODE:
-                //
-                // For elements that can have children, visit those
-                // children before any siblings (i.e. depth first)
-                // and after visiting this node (i.e. preorder)
-                //
-                next = current.getFirstChild ();
-                if (next != null) {
-                    current = next;
-                    break;
-                }
-                //
-                // Else treat this like other childless nodes, but
-                // handle this node's "end" immediately.
-                //
-                callEnd (current);
-
-                // FALLTHROUGH
-
-              case Node.CDATA_SECTION_NODE:
-              case Node.COMMENT_NODE:
-              case Node.DOCUMENT_TYPE_NODE:
-              case Node.ENTITY_NODE:
-              case Node.PROCESSING_INSTRUCTION_NODE:
-              case Node.TEXT_NODE:
-                //
-                // Use next sibling, if there is one.
-                // Else, climb up a level (calling "end")
-                //      until we find an ancestral sibling
-                //      or until we we climb off the top (FINISH)
-                //
-                for (;;) {
-                    if ((next = current.getNextSibling ()) != null)
-                        break;
-                    current = current.getParentNode ();
-                    if (current == null || current == start)
-                        return;
-                    callEnd (current);
-                }
-                current = next;
-                break;
-
-              default:
-                throw new SAXException (
-                    "Illegal DOM Node type found:  " +  current.getNodeType ());
-            }
-        }
-    }
-
-    private void callEnd (Node node) throws SAXException
-    {
-        switch (node.getNodeType ()) {
-          // only these three container types may ever be found
-          // directly inside a Document.
-          case Node.DOCUMENT_NODE:
-            // for SAX conformance, endDocument must always
-            // be called ... it's done in a "finally" clause)
-            return;
-
-          case Node.ELEMENT_NODE:
-            if (showNamespaces) {
-                if (isL2)
-                    contentHandler.endElement (
-                        node.getNamespaceURI (),
-                        node.getLocalName (),
-                        node.getNodeName ());
-                else
-// XXX
-                    throw new RuntimeException (
-                        "NYI, ns lookup when parsing L1 DOM");
-                for (Enumeration e = prefixStack.getDeclaredPrefixes ();
-                        e.hasMoreElements ();
-                        ) {
-                    contentHandler.endPrefixMapping ((String) e.nextElement ());
-                }
-            } else
-                contentHandler.endElement ("", "", node.getNodeName ());
-            prefixStack.popContext ();
-            return;
-
-          case Node.ENTITY_REFERENCE_NODE:
-            // see above -- in content, outside start tags.
-            lexicalHandler.endEntity (node.getNodeName ());
-            return;
-
-          // these can be given at the top level
-          case Node.DOCUMENT_FRAGMENT_NODE:
-          case Node.ATTRIBUTE_NODE:
-            return;
-
-          default:
-            throw new SAXException (
-                "Illegal DOM container type found:  "
-                        +  current.getNodeType ());
-        }
-    }
-}
diff --git a/libjava/classpath/gnu/xml/util/Resolver.java b/libjava/classpath/gnu/xml/util/Resolver.java
deleted file mode 100644
index b16f961..0000000
--- a/libjava/classpath/gnu/xml/util/Resolver.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/* Resolver.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.util;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Dictionary;
-
-import org.xml.sax.EntityResolver;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-/**
- * Utility implementation of a SAX resolver, which can be used to improve
- * network utilization of SAX based XML components.  It does this by
- * supporting local caches of external entities.
- * SAX parsers <em>should</em> use such local caches when possible.
- *
- * @see XCat
- */
-public class Resolver implements EntityResolver, Cloneable
-{
-    /**
-     * Updates a dictionary used to map PUBLIC identifiers to file names,
-     * so that it uses the mappings in a specified directory.
-     *
-     * @param mappings Array of string pairs, where the first member
-     *  of each pair is a PUBLIC identifier and the second is the
-     *  name of a file, relative to the specified directory.
-     * @param directory File holding the specified files.
-     */
-    public static void addDirectoryMapping (
-        Dictionary      table,
-        String          mappings [][],
-        File            directory
-    ) throws IOException
-    {
-        for (int i = 0; i < mappings.length; i++) {
-            File        file = new File (directory, mappings [i][1]);
-            String      temp;
-
-            if (!file.exists ())        // ?? log a warning ??
-                continue;
-
-            temp = fileToURL (file);
-            table.put (mappings [i][0], temp);
-        }
-    }
-
-        // FIXME: these *URL routines don't quite belong here, except
-        // that they're all in the same spirit of making it easy to
-        // use local filesystem URIs with XML parsers.
-
-    /**
-     * Provides the URL for a named file, without relying on the JDK 1.2
-     * {@link java.io.File#toURL File.toURL}() utility method.
-     *
-     * @param filename the file name to convert.  Relative file names
-     *  are resolved the way the JVM resolves them (current to the
-     *  process-global current working directory).
-     *
-     * @exception IOException if the file does not exist
-     */
-    public static String fileNameToURL (String filename)
-    throws IOException
-    {
-        return fileToURL (new File (filename));
-    }
-
-    /**
-     * Provides the URL for a file, without relying on the JDK 1.2
-     * {@link java.io.File#toURL File.toURL}() utility method.
-     *
-     * @param f the file to convert.  Relative file names
-     *  are resolved the way the JVM resolves them (current to the
-     *  process-global current working directory).
-     *
-     * @exception IOException if the file does not exist
-     */
-    public static String fileToURL (File f)
-    throws IOException
-    {
-        String  temp;
-
-        // NOTE:  the javax.xml.parsers.DocumentBuilder and
-        // javax.xml.transform.stream.StreamSource versions
-        // of this don't have this test.  Some JVM versions
-        // don't report this error sanely through URL code.
-        if (!f.exists ())
-            throw new IOException ("no such file: " + f.getName ());
-
-            // FIXME: getAbsolutePath() seems buggy; I'm seeing components
-            // like "/foo/../" which are clearly not "absolute"
-            // and should have been resolved with the filesystem.
-
-            // Substituting "/" would be wrong, "foo" may have been
-            // symlinked ... the URL code will make that change
-            // later, so that things can get _really_ broken!
-
-        temp = f.getAbsolutePath ();
-
-        if (File.separatorChar != '/')
-            temp = temp.replace (File.separatorChar, '/');
-        if (!temp.startsWith ("/"))
-            temp = "/" + temp;
-        if (!temp.endsWith ("/") && f.isDirectory ())
-            temp = temp + "/";
-        return "file:" + temp;
-    }
-
-
-    /**
-     * Returns a URL string.  Note that if a malformed URL is provided, or
-     * the parameter names a nonexistent file, the resulting URL may be
-     * malformed.
-     *
-     * @param fileOrURL If this is the name of a file which exists,
-     *  then its URL is returned.  Otherwise the argument is returned.
-     */
-    public static String getURL (String fileOrURL)
-    {
-        try {
-            return fileNameToURL (fileOrURL);
-        } catch (Exception e) {
-            return fileOrURL;
-        }
-    }
-
-
-
-    // note:  cloneable, this is just copied; unguarded against mods
-    private Dictionary          pubidMapping;
-
-    /**
-     * Constructs a resolver which understands how to map PUBLIC identifiers
-     * to other URIs, typically for local copies of standard DTD components.
-     *
-     * @param dict maps PUBLIC identifiers to URIs.  This is not
-     *  copied; subsequent modifications will be reported through the
-     *  resolution operations.
-     */
-    public Resolver (Dictionary dict)
-        { pubidMapping = dict; }
-
-
-    // FIXME: want notion of a "system default" resolver, presumably
-    // loaded with all sorts of useful stuff.  At the same time need
-    // a notion of resolver chaining (failure --> next) so that subsystems
-    // can set up things that won't interfere with other ones.
-
-    /**
-     * This parses most MIME content type strings that have <em>charset=...</em>
-     * encoding declarations to and returns the specified encoding.  This
-     * conforms to RFC 3023, and is useful when constructing InputSource
-     * objects from URLConnection objects or other objects using MIME
-     * content typing.
-     *
-     * @param contentType the MIME content type that will be parsed; must
-     *  not be null.
-     * @return the appropriate encoding, or null if the content type is
-     *  not text and there's no <code>charset=...</code> attribute
-     */
-    static public String getEncoding (String contentType)
-    {
-        // currently a dumb parsing algorithm that works "mostly" and handles
-        //      ..anything...charset=ABC
-        //      ..anything...charset=ABC;otherAttr=DEF
-        //      ..anything...charset=ABC (comment);otherAttr=DEF
-        //      ..anything...charset= "ABC" (comment);otherAttr=DEF
-
-        int     temp;
-        String  encoding;
-        String  defValue = null;
-
-        if (contentType.startsWith ("text/"))
-            defValue = contentType.startsWith ("text/html")
-                    ? "ISO-8859-1" : "US-ASCII";
-
-        // Assumes 'charset' is only an attribute name, not part
-        // of a value, comment, or other attribute name
-        // ALSO assumes no escaped values like "\;" or "\)"
-        if ((temp = contentType.indexOf ("charset")) != -1) {
-            // strip out everything up to '=' ...
-            temp = contentType.indexOf ('=', temp);
-            if (temp == -1)
-                return defValue;
-            encoding = contentType.substring (temp + 1);
-            // ... and any subsequent attributes
-            if ((temp = encoding.indexOf (';')) != -1)
-                encoding = encoding.substring (0, temp);
-            // ... and any comments after value
-            if ((temp = encoding.indexOf ('(')) != -1)
-                encoding = encoding.substring (0, temp);
-            // ... then whitespace, and any (double) quotes
-            encoding = encoding.trim ();
-            if (encoding.charAt (0) == '"')
-                encoding = encoding.substring (1, encoding.length () - 1);
-        } else
-            encoding = defValue;
-        return encoding;
-    }
-
-
-    /**
-     * Uses a local dictionary of public identifiers to resolve URIs,
-     * normally with the goal of minimizing network traffic or latencies.
-     */
-    public InputSource resolveEntity (String publicId, String systemId)
-    throws IOException, SAXException
-    {
-        InputSource     retval = null;
-        String          uri;
-
-        if (publicId != null
-                && ((uri = (String) pubidMapping.get (publicId)) != null)) {
-            retval = new InputSource (uri);
-            retval.setPublicId (publicId);
-        }
-
-        // Could do URN resolution here
-
-        // URL resolution always done by parser
-
-        // FIXME: chain to "next" resolver
-
-        return retval;
-    }
-}
diff --git a/libjava/classpath/gnu/xml/util/SAXNullTransformerFactory.java b/libjava/classpath/gnu/xml/util/SAXNullTransformerFactory.java
deleted file mode 100644
index 3a97678..0000000
--- a/libjava/classpath/gnu/xml/util/SAXNullTransformerFactory.java
+++ /dev/null
@@ -1,676 +0,0 @@
-/* SAXNullTransformerFactory.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.util;
-
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Hashtable;
-import java.util.Properties;
-
-import gnu.xml.dom.Consumer;
-import gnu.xml.dom.DomDocument;
-import gnu.xml.pipeline.DomConsumer;
-import gnu.xml.pipeline.EventFilter;
-
-import javax.xml.transform.*;
-import javax.xml.transform.dom.*;
-import javax.xml.transform.sax.*;
-import javax.xml.transform.stream.*;
-
-import org.xml.sax.*;
-import org.xml.sax.helpers.XMLReaderFactory;
-import org.xml.sax.helpers.LocatorImpl;
-
-
-/**
- * Implements null transforms. XSLT stylesheets are not supported.
- * This class provides a way to translate three representations of
- * XML data (SAX event stream, DOM tree, and XML text) into each other.
- * In essence it's a thinnish wrapper around basic SAX event
- * <a href="../pipeline/package-summary.html">pipeline</a> facilities, which
- * exposes only limited functionality.  The <em>javax.xml.transform</em>
- * functionality is implemented as follows: <ul>
- *
- * <li>The {@link javax.xml.transform.sax.SAXSource SAXSource} class
- * just wraps an {@link XMLReader} and {@link InputSource}, while the
- * {@link javax.xml.transform.sax.SAXResult SAXResult} class is less
- * functional than a {@link gnu.xml.pipeline.EventConsumer EventConsumer}.
- * (Notably, it drops all but one declaration from any DTD.)</li>
- *
- * <li>The {@link javax.xml.transform.dom.DOMSource DOMSource} class
- * corresponds to special SAX parsers like {@link DomParser}, and the
- * {@link javax.xml.transform.dom.DOMResult DOMResult} class corresponds
- * to a {@link gnu.xml.pipeline.DomConsumer DomConsumer}.</li>
- *
- * <li>The {@link javax.xml.transform.stream.StreamSource StreamSource}
- * class corresponds to a SAX {@link InputSource}, and the
- * {@link javax.xml.transform.stream.StreamResult StreamResult} class
- * corresponds to a {@link gnu.xml.pipeline.TextConsumer TextConsumer}.</li>
- *
- * </ul>
- *
- * <p><em>This implementation is preliminary.</em>
- *
- * @see gnu.xml.pipeline.XsltFilter
- *
- * @author David Brownell
- */
-public class SAXNullTransformerFactory extends SAXTransformerFactory
-{
-
-  private ErrorListener errListener;
-  private URIResolver           uriResolver;
-
-  /** Default constructor */
-  public SAXNullTransformerFactory () { }
-
-  //
-  // only has stuff that makes sense with null transforms
-  //
-
-  /**
-   * Returns true if the requested feature is supported.
-   * All three kinds of input and output are accepted:
-   * XML text, SAX events, and DOM nodes.
-   */
-  public boolean getFeature (String feature)
-  {
-    return SAXTransformerFactory.FEATURE.equals (feature)
-      || SAXResult.FEATURE.equals (feature)
-      || SAXSource.FEATURE.equals (feature)
-      || DOMResult.FEATURE.equals (feature)
-      || DOMSource.FEATURE.equals (feature)
-      || StreamResult.FEATURE.equals (feature)
-      || StreamSource.FEATURE.equals (feature)
-      ;
-  }
-
-  public void setFeature(String name, boolean value)
-    throws TransformerConfigurationException
-  {
-    throw new TransformerConfigurationException(name);
-  }
-
-
-  /** Throws an exception (no implementation attributes are supported) */
-  public void setAttribute (String key, Object value)
-  {
-    throw new IllegalArgumentException ();
-  }
-
-  /** Throws an exception (no implementation attributes are supported) */
-  public Object getAttribute (String key)
-  {
-    throw new IllegalArgumentException ();
-  }
-
-  /** (not yet implemented) */
-  public Source getAssociatedStylesheet (Source source,
-                                         String media,
-                                         String title,
-                                         String charset)
-    throws TransformerConfigurationException
-  {
-    // parse, and find the appropriate xsl-stylesheet PI contents
-    throw new IllegalArgumentException ();
-  }
-
-  public Transformer newTransformer ()
-    throws TransformerConfigurationException
-  {
-    return new NullTransformer ();
-  }
-
-  /**
-   * Returns a TransformerHandler that knows how to generate output
-   * in all three standard formats.  Output text is generated using
-   * {@link XMLWriter}, and the GNU implementation of
-   * {@link DomDocument DOM} is used.
-   *
-   * @see SAXResult
-   * @see StreamResult
-   * @see DOMResult
-   */
-  public TransformerHandler newTransformerHandler ()
-    throws TransformerConfigurationException
-  {
-    NullTransformer     transformer = new NullTransformer ();
-    return transformer.handler;
-  }
-
-  //
-  // Stuff that depends on XSLT support, which we don't provide
-  //
-  private static final String           noXSLT = "No XSLT support";
-
-  /** Throws an exception (XSLT is not supported). */
-  public Transformer newTransformer (Source stylesheet)
-    throws TransformerConfigurationException
-  {
-    throw new TransformerConfigurationException (noXSLT);
-  }
-
-  /** Throws an exception (XSLT is not supported). */
-  public Templates newTemplates (Source stylesheet)
-    throws TransformerConfigurationException
-  {
-    throw new TransformerConfigurationException (noXSLT);
-  }
-
-  /** Throws an exception (XSLT is not supported). */
-  public TemplatesHandler newTemplatesHandler ()
-    throws TransformerConfigurationException
-  {
-    throw new TransformerConfigurationException (noXSLT);
-  }
-
-  /** Throws an exception (XSLT is not supported). */
-  public TransformerHandler newTransformerHandler (Source stylesheet)
-    throws TransformerConfigurationException
-  {
-    throw new TransformerConfigurationException (noXSLT);
-  }
-
-  /** Throws an exception (XSLT is not supported). */
-  public TransformerHandler newTransformerHandler (Templates stylesheet)
-    throws TransformerConfigurationException
-  {
-    throw new TransformerConfigurationException (noXSLT);
-  }
-
-  /** Throws an exception (XSLT is not supported). */
-  public XMLFilter newXMLFilter (Source stylesheet)
-    throws TransformerConfigurationException
-  {
-    throw new TransformerConfigurationException (noXSLT);
-  }
-
-  /** Throws an exception (XSLT is not supported). */
-  public XMLFilter newXMLFilter (Templates stylesheet)
-    throws TransformerConfigurationException
-  {
-    throw new TransformerConfigurationException (noXSLT);
-  }
-
-  /** Returns the value assigned by {@link #setErrorListener}.  */
-  public ErrorListener getErrorListener ()
-  {
-    return errListener;
-  }
-
-  /** Assigns a value that would be used when parsing stylesheets */
-  public void setErrorListener (ErrorListener e)
-  {
-    errListener = e;
-  }
-
-  /** Returns the value assigned by {@link #setURIResolver}.  */
-  public URIResolver getURIResolver ()
-  {
-    return uriResolver;
-  }
-
-  /** Assigns a value that would be used when parsing stylesheets */
-  public void setURIResolver (URIResolver u)
-  {
-    uriResolver = u;
-  }
-
-
-  //
-  // Helper classes.  These might in theory be subclassed
-  // by an XSLT implementation, if they were exported.
-  //
-
-  static class DomTerminus
-    extends DomConsumer
-  {
-
-    DomTerminus (DOMResult result)
-      throws SAXException
-    {
-      // won't really throw SAXException
-      super (DomDocument.class);
-      setHandler (new DomHandler (this, result));
-    }
-
-  }
-
-  static class DomHandler
-    extends Consumer.Backdoor
-  {
-
-    private DOMResult   result;
-
-    DomHandler (DomConsumer c, DOMResult r)
-      throws SAXException
-    {
-      // won't really throw SAXException
-      super (c);
-      result = r;
-    }
-
-    public void endDocument ()
-      throws SAXException
-    {
-      super.endDocument ();
-      result.setNode (getDocument ());
-    }
-
-  }
-
-  private static OutputStream getOutputStream (String uri)
-    throws IOException
-  {
-    // JDK stupidity:  file "protocol does not support output" ...
-    if (uri.startsWith ("file:"))
-      return new FileOutputStream (uri.substring (5));
-
-    // Otherwise ...
-    URL         url = new URL (uri);
-    URLConnection       conn = url.openConnection ();
-
-    conn.setDoOutput (true);
-    return conn.getOutputStream ();
-  }
-
-
-  static class NullHandler
-    extends EventFilter
-    implements TransformerHandler
-  {
-
-    private String              systemId;
-    private Transformer transformer;
-
-    NullHandler (Transformer t)
-    {
-      transformer = t;
-    }
-
-    public Transformer getTransformer ()
-    {
-      return transformer;
-    }
-
-    public String getSystemId ()
-    {
-      return systemId;
-    }
-
-    public void setSystemId (String id)
-    {
-      systemId = id;
-    }
-
-    public void setResult (Result result)
-    {
-      if (result.getSystemId () != null)
-        systemId = result.getSystemId ();
-
-      try
-        {
-
-          // output to partial SAX event stream?
-          if (result instanceof SAXResult)
-            {
-              SAXResult         r = (SAXResult) result;
-
-              setContentHandler (r.getHandler ());
-              setProperty (LEXICAL_HANDLER, r.getLexicalHandler ());
-              // DTD info is filtered out by javax.transform
-
-              // output to DOM tree?
-            }
-          else if (result instanceof DOMResult)
-            {
-              DomTerminus       out = new DomTerminus ((DOMResult) result);
-
-              setContentHandler (out.getContentHandler ());
-              setProperty (LEXICAL_HANDLER,
-                           out.getProperty (LEXICAL_HANDLER));
-              // save DTD-derived info, if any.
-              setDTDHandler (out.getDTDHandler ());
-              setProperty (DECL_HANDLER,
-                           out.getProperty (DECL_HANDLER));
-
-              // node is saved into result on endDocument()
-
-              // output to (XML) text?
-            }
-          else if (result instanceof StreamResult)
-            {
-              StreamResult      r = (StreamResult) result;
-              XMLWriter         out;
-
-              // FIXME:  when do output properties take effect?
-              // encoding, standalone decl, xml/xhtml/... ...
-
-              // FIXME:  maybe put nsfix filter up front
-
-              try
-                {
-                  if (r.getWriter () != null)
-                    out = new XMLWriter (r.getWriter ());
-                  else if (r.getOutputStream () != null)
-                    out = new XMLWriter (r.getOutputStream ());
-                  else if (r.getSystemId () != null)
-                    out = new XMLWriter (
-                                         getOutputStream (r.getSystemId ()));
-                  else
-                    throw new IllegalArgumentException (
-                                                        "bad StreamResult");
-                }
-              catch (IOException e)
-                {
-                  e.printStackTrace ();
-                  // on jdk 1.4, pass the root cause ...
-                  throw new IllegalArgumentException (e.getMessage ());
-                }
-
-              // out.setExpandingEntities (true);
-              // out.setPrettyPrinting (true);
-              // out.setXhtml (true);
-
-              setContentHandler (out);
-              setProperty (LEXICAL_HANDLER, out);
-              // save DTD info, if any; why not?
-              setDTDHandler (out);
-              setProperty (DECL_HANDLER, out);
-            }
-
-        }
-      catch (SAXException e)
-        {
-          // SAXNotSupportedException or SAXNotRecognizedException:
-          // "can't happen" ... but SAXException for DOM build probs
-          // could happen, so ...
-          // on jdk 1.4, pass the root cause ...
-          throw new IllegalArgumentException (e.getMessage ());
-        }
-    }
-  }
-
-  // an interface that adds no value
-  static class LocatorAdapter
-    extends LocatorImpl
-    implements SourceLocator
-  {
-
-    LocatorAdapter (SAXParseException e)
-    {
-      setSystemId (e.getSystemId ());
-      setPublicId (e.getPublicId ());
-      setLineNumber (e.getLineNumber ());
-      setColumnNumber (e.getColumnNumber ());
-    }
-
-  }
-
-  // another interface that adds no value
-  static class ListenerAdapter
-    implements ErrorHandler
-  {
-
-    NullTransformer     transformer;
-
-    ListenerAdapter (NullTransformer t)
-    {
-      transformer = t;
-    }
-
-    private TransformerException map (SAXParseException e)
-    {
-      return new TransformerException (
-                                       e.getMessage (),
-                                       new LocatorAdapter (e),
-                                       e);
-    }
-
-    public void error (SAXParseException e)
-      throws SAXParseException
-    {
-      try
-        {
-          if (transformer.errListener != null)
-            transformer.errListener.error (map (e));
-        }
-      catch (TransformerException ex)
-        {
-          transformer.ex = ex;
-          throw e;
-        }
-    }
-
-    public void fatalError (SAXParseException e)
-      throws SAXParseException
-    {
-      try
-        {
-          if (transformer.errListener != null)
-            transformer.errListener.fatalError (map (e));
-          else
-            throw map (e);
-        } catch (TransformerException ex) {
-          transformer.ex = ex;
-          throw e;
-        }
-    }
-
-    public void warning (SAXParseException e)
-      throws SAXParseException
-    {
-      try
-        {
-          if (transformer.errListener != null)
-            transformer.errListener.warning (map (e));
-        }
-      catch (TransformerException ex)
-        {
-          transformer.ex = ex;
-          throw e;
-        }
-    }
-  }
-
-  static class NullTransformer
-    extends Transformer
-  {
-
-    private URIResolver         uriResolver;
-    private Properties          props = new Properties ();
-    private Hashtable           params = new Hashtable (7);
-
-    ErrorListener                       errListener = null;
-    TransformerException                ex = null;
-    NullHandler                 handler;
-
-    NullTransformer ()
-    {
-      super ();
-      handler = new NullHandler (this);
-    }
-
-    public ErrorListener getErrorListener ()
-    {
-      return errListener;
-    }
-
-    public void setErrorListener (ErrorListener e)
-    {
-      errListener = e;
-    }
-
-    public URIResolver getURIResolver ()
-    {
-      return uriResolver;
-    }
-
-    public void setURIResolver (URIResolver u)
-    {
-      uriResolver = u;
-    }
-
-    public void setOutputProperties (Properties p)
-    {
-      props = (Properties) p.clone ();
-    }
-
-    public Properties getOutputProperties ()
-    {
-      return (Properties) props.clone ();
-    }
-
-    public void setOutputProperty (String name, String value)
-    {
-      props.setProperty (name, value);
-    }
-
-    public String getOutputProperty (String name)
-    {
-      return props.getProperty (name);
-    }
-
-    public void clearParameters ()
-    {
-      params.clear ();
-    }
-
-    public void setParameter (String name, Object value)
-    {
-      props.put (name, value);
-    }
-
-    public Object getParameter (String name)
-    {
-      return props.get (name);
-    }
-
-    public void transform (Source in, Result out)
-      throws TransformerException
-    {
-      try
-        {
-          XMLReader             producer;
-          InputSource           input;
-
-          // Input from DOM?
-          if (in instanceof DOMSource)
-            {
-              DOMSource source = (DOMSource) in;
-
-              if (source.getNode () == null)
-                throw new IllegalArgumentException ("no DOM node");
-              producer = new DomParser (source.getNode ());
-              input = null;
-
-              // Input from SAX?
-            }
-          else if (in instanceof SAXSource)
-            {
-              SAXSource source = (SAXSource) in;
-
-              producer = source.getXMLReader ();
-              if (producer == null)
-                producer = XMLReaderFactory.createXMLReader ();
-
-              input = source.getInputSource ();
-              if (input == null)
-                {
-                  if (source.getSystemId () != null)
-                    input = new InputSource (source.getSystemId ());
-                  else
-                    throw new IllegalArgumentException (
-                                                        "missing SAX input");
-                }
-
-              // Input from a stream or something?
-            }
-          else
-            {
-              producer = XMLReaderFactory.createXMLReader ();
-              input = SAXSource.sourceToInputSource (in);
-              if (input == null)
-                throw new IllegalArgumentException ("missing input");
-            }
-
-          // preserve original namespace prefixes
-          try
-            {
-              producer.setFeature(EventFilter.FEATURE_URI +
-                                  "namespace-prefixes",
-                                  true);
-            }
-          catch (Exception e)
-            {
-              /* ignore */
-              // FIXME if we couldn't, "NsFix" stage before the output ..
-            }
-
-          // arrange the output
-          handler.setResult (out);
-          EventFilter.bind (producer, handler);
-
-          // then parse ... single element pipeline
-          producer.parse (input);
-
-        }
-      catch (IOException e)
-        {
-          throw new TransformerException ("transform failed", e);
-
-        }
-      catch (SAXException e)
-        {
-          if (ex == null && ex.getCause () == e)
-            throw ex;
-          else
-            throw new TransformerException ("transform failed", e);
-
-        }
-      finally
-        {
-          ex = null;
-        }
-    }
-  }
-
-}
diff --git a/libjava/classpath/gnu/xml/util/XCat.java b/libjava/classpath/gnu/xml/util/XCat.java
deleted file mode 100644
index ea23ad6..0000000
--- a/libjava/classpath/gnu/xml/util/XCat.java
+++ /dev/null
@@ -1,1611 +0,0 @@
-/* XCat.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.util;
-
-import gnu.java.lang.CPStringBuilder;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.StringTokenizer;
-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.SAXNotRecognizedException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.XMLReader;
-
-import org.xml.sax.ext.DefaultHandler2;
-import org.xml.sax.ext.EntityResolver2;
-
-import org.xml.sax.helpers.XMLReaderFactory;
-
-/**
- * Packages <a href=
-    "http://www.oasis-open.org/committees/entity/spec-2001-08-06.html"
-    >OASIS XML Catalogs</a>,
- * primarily for entity resolution by parsers.
- * That specification defines an XML syntax for mappings between
- * identifiers declared in DTDs (particularly PUBLIC identifiers) and
- * locations.  SAX has always supported such mappings, but conventions for
- * an XML file syntax to maintain them have previously been lacking.
- *
- * <p> This has three main operational modes.  The primary intended mode is
- * to create a resolver, then preloading it with one or more site-standard
- * catalogs before using it with one or more SAX parsers: <pre>
- *      XCat    catalog = new XCat ();
- *      catalog.setErrorHandler (diagnosticErrorHandler);
- *      catalog.loadCatalog ("file:/local/catalogs/catalog.cat");
- *      catalog.loadCatalog ("http://shared/catalog.cat");
- *      ...
- *      catalog.disableLoading ();
- *      parser1.setEntityResolver (catalog);
- *      parser2.setEntityResolver (catalog);
- *      ...</pre>
- *
- * <p>A second mode is to arrange that your application uses instances of
- * this class as its entity resolver, and automatically loads catalogs
- * referenced by <em>&lt;?oasis-xml-catalog...?&gt;</em> processing
- * instructions found before the DTD in documents it parses.
- * It would then discard the resolver after each parse.
- *
- * <p> A third mode applies catalogs in contexts other than entity
- * resolution for parsers.
- * The {@link #resolveURI resolveURI()} method supports resolving URIs
- * stored in XML application data, rather than inside DTDs.
- * Catalogs would be loaded as shown above, and the catalog could
- * be used concurrently for parser entity resolution and for
- * application URI resolution.
- * </p>
- *
- * <center><hr width='70%'></center>
- *
- * <p>Errors in catalogs implicitly loaded (during resolution) are ignored
- * beyond being reported through any <em>ErrorHandler</em> assigned using
- * {@link #setErrorHandler setErrorHandler()}.  SAX exceptions
- * thrown from such a handler won't abort resolution, although throwing a
- * <em>RuntimeException</em> or <em>Error</em> will normally abort both
- * resolution and parsing.  Useful diagnostic information is available to
- * any <em>ErrorHandler</em> used to report problems, or from any exception
- * thrown from an explicit {@link #loadCatalog loadCatalog()} invocation.
- * Applications can use that information as troubleshooting aids.
- *
- * <p>While this class requires <em>SAX2 Extensions 1.1</em> classes in
- * its class path, basic functionality does not require using a SAX2
- * parser that supports the extended entity resolution functionality.
- * See the original SAX1
- * {@link #resolveEntity(java.lang.String,java.lang.String) resolveEntity()}
- * method for a list of restrictions which apply when it is used with
- * older SAX parsers.
- *
- * @see EntityResolver2
- *
- * @author David Brownell
- */
-public class XCat implements EntityResolver2
-{
-    private Catalog             catalogs [];
-    private boolean             usingPublic = true;
-    private boolean             loadingPermitted = true;
-    private boolean             unified = true;
-    private String              parserClass;
-    private ErrorHandler        errorHandler;
-
-    // private EntityResolver   next;   // chain to next if we fail...
-
-    //
-    // NOTE:  This is a straightforward implementation, and if
-    // there are lots of "nextCatalog" or "delegate*" entries
-    // in use, two tweaks would be worth considering:
-    //
-    //  - Centralize some sort of cache (key by URI) for individual
-    //    resolvers.  That'd avoid multiple copies of a given catalog.
-    //
-    //  - Have resolution track what catalogs (+modes) have been
-    //    searched.  This would support loop detection.
-    //
-
-
-    /**
-     * Initializes without preloading a catalog.
-     * This API is convenient when you may want to arrange that catalogs
-     * are automatically loaded when explicitly referenced in documents,
-     * using the <em>oasis-xml-catalog</em> processing instruction.
-     * In such cases you won't usually be able to preload catalogs.
-     */
-    public XCat () { }
-
-    /**
-     * Initializes, and preloads a catalog using the default SAX parser.
-     * This API is convenient when you operate with one or more standard
-     * catalogs.
-     *
-     * <p> This just delegates to {@link #loadCatalog loadCatalog()};
-     * see it for exception information.
-     *
-     * @param uri absolute URI for the catalog file.
-     */
-    public XCat (String uri)
-    throws SAXException, IOException
-        { loadCatalog (uri); }
-
-
-    /**
-     * Loads an OASIS XML Catalog.
-     * It is appended to the list of currently active catalogs, or
-     * reloaded if a catalog with the same URI was already loaded.
-     * Callers have control over what parser is used, how catalog parsing
-     * errors are reported, and whether URIs will be resolved consistently.
-     *
-     * <p> The OASIS specification says that errors detected when loading
-     * catalogs "must recover by ignoring the catalog entry file that
-     * failed, and proceeding."  In this API, that action can be the
-     * responsibility of applications, when they explicitly load any
-     * catalog using this method.
-     *
-     * <p>Note that catalogs referenced by this one will not be loaded
-     * at this time.  Catalogs referenced through <em>nextCatalog</em>
-     * or <em>delegate*</em> elements are normally loaded only if needed.
-     *
-     * @see #setErrorHandler
-     * @see #setParserClass
-     * @see #setUnified
-     *
-     * @param uri absolute URI for the catalog file.
-     *
-     * @exception IOException As thrown by the parser, typically to
-     *  indicate problems reading data from that URI.
-     * @exception SAXException As thrown by the parser, typically to
-     *  indicate problems parsing data from that URI.  It may also
-     *  be thrown if the parser doesn't support necessary handlers.
-     * @exception IllegalStateException When attempting to load a
-     *  catalog after loading has been {@link #disableLoading disabled},
-     *  such as after any entity or URI lookup has been performed.
-     */
-    public synchronized void loadCatalog (String uri)
-    throws SAXException, IOException
-    {
-        Catalog         catalog;
-        int             index = -1;
-
-        if (!loadingPermitted)
-            throw new IllegalStateException ();
-
-        uri = normalizeURI (uri);
-        if (catalogs != null) {
-            // maybe just reload
-            for (index = 0; index < catalogs.length; index++)
-                if (uri.equals (catalogs [index].catalogURI))
-                    break;
-        }
-        catalog = loadCatalog (parserClass, errorHandler, uri, unified);
-
-        // add to list of catalogs
-        if (catalogs == null) {
-            index = 0;
-            catalogs = new Catalog [1];
-        } else if (index == catalogs.length) {
-            Catalog             tmp [];
-
-            tmp = new Catalog [index + 1];
-            System.arraycopy (catalogs, 0, tmp, 0, index);
-            catalogs = tmp;
-        }
-        catalogs [index] = catalog;
-    }
-
-
-    /**
-     * "New Style" external entity resolution for parsers.
-     * Calls to this method prevent explicit loading of additional catalogs
-     * using {@link #loadCatalog loadCatalog()}.
-     *
-     * <p>This supports the full core catalog functionality for locating
-     * (and relocating) parsed entities that have been declared in a
-     * document's DTD.
-     *
-     * @param name Entity name, such as "dudley", "%nell", or "[dtd]".
-     * @param publicId Either a normalized public ID, or null.
-     * @param baseURI Absolute base URI associated with systemId.
-     * @param systemId URI found in entity declaration (may be
-     *  relative to baseURI).
-     *
-     * @return Input source for accessing the external entity, or null
-     *  if no mapping was found.  The input source may have opened
-     *  the stream, and will have a fully resolved URI.
-     *
-     * @see #getExternalSubset
-     */
-    public InputSource resolveEntity (
-        String name,            // UNUSED ... systemId is always non-null
-        String publicId,
-        String baseURI,         // UNUSED ... it just lets sysId be relative
-        String systemId
-    ) throws SAXException, IOException
-    {
-        if (loadingPermitted)
-            disableLoading ();
-
-        try {
-            // steps as found in OASIS XML catalog spec 7.1.2
-            // steps 1, 8 involve looping over the list of catalogs
-            for (int i = 0; i < catalogs.length; i++) {
-                InputSource     retval;
-                retval = catalogs [i].resolve (usingPublic, publicId, systemId);
-                if (retval != null)
-                    return retval;
-            }
-        } catch (DoneDelegation x) {
-            // done!
-        }
-        // step 9 involves returning "no match"
-        return null;
-    }
-
-
-    /**
-     * "New Style" parser callback to add an external subset.
-     * For documents that don't include an external subset, this may
-     * return one according to <em>doctype</em> catalog entries.
-     * (This functionality is not a core part of the OASIS XML Catalog
-     * specification, though it's presented in an appendix.)
-     * If no such entry is defined, this returns null to indicate that
-     * this document will not be modified to include such a subset.
-     * Calls to this method prevent explicit loading of additional catalogs
-     * using {@link #loadCatalog loadCatalog()}.
-     *
-     * <p><em>Warning:</em> That catalog functionality can be dangerous.
-     * It can provide definitions of general entities, and thereby mask
-     * certain well formedess errors.
-     *
-     * @param name Name of the document element, either as declared in
-     *  a DOCTYPE declaration or as observed in the text.
-     * @param baseURI Document's base URI (absolute).
-     *
-     * @return Input source for accessing the external subset, or null
-     *  if no mapping was found.  The input source may have opened
-     *  the stream, and will have a fully resolved URI.
-     */
-    public InputSource getExternalSubset (String name, String baseURI)
-    throws SAXException, IOException
-    {
-        if (loadingPermitted)
-            disableLoading ();
-        try {
-            for (int i = 0; i < catalogs.length; i++) {
-                InputSource retval = catalogs [i].getExternalSubset (name);
-                if (retval != null)
-                    return retval;
-            }
-        } catch (DoneDelegation x) {
-            // done!
-        }
-        return null;
-    }
-
-
-    /**
-     * "Old Style" external entity resolution for parsers.
-     * This API provides only core functionality.
-     * Calls to this method prevent explicit loading of additional catalogs
-     * using {@link #loadCatalog loadCatalog()}.
-     *
-     * <p>The functional limitations of this interface include:</p><ul>
-     *
-     *  <li>Since system IDs will be absolutized before the resolver
-     *  sees them, matching against relative URIs won't work.
-     *  This may affect <em>system</em>, <em>rewriteSystem</em>,
-     *  and <em>delegateSystem</em> catalog entries.
-     *
-     *  <li>Because of that absolutization, documents declaring entities
-     *  with system IDs using URI schemes that the JVM does not recognize
-     *  may be unparsable.  URI schemes such as <em>file:/</em>,
-     *  <em>http://</em>, <em>https://</em>, and <em>ftp://</em>
-     *  will usually work reliably.
-     *
-     *  <li>Because missing external subsets can't be provided, the
-     *  <em>doctype</em> catalog entries will be ignored.
-     *  (The {@link #getExternalSubset getExternalSubset()} method is
-     *  a "New Style" resolution option.)
-     *
-     *  </ul>
-     *
-     * <p>Applications can tell whether this limited functionality will be
-     * used: if the feature flag associated with the {@link EntityResolver2}
-     * interface is not <em>true</em>, the limitations apply.  Applications
-     * can't usually know whether a given document and catalog will trigger
-     * those limitations.  The issue can only be bypassed by operational
-     * procedures such as not using catalogs or documents which involve
-     * those features.
-     *
-     * @param publicId Either a normalized public ID, or null
-     * @param systemId Always an absolute URI.
-     *
-     * @return Input source for accessing the external entity, or null
-     *  if no mapping was found.  The input source may have opened
-     *  the stream, and will have a fully resolved URI.
-     */
-    final public InputSource resolveEntity (String publicId, String systemId)
-    throws SAXException, IOException
-    {
-        return resolveEntity (null, publicId, null, systemId);
-    }
-
-
-    /**
-     * Resolves a URI reference that's not defined to the DTD.
-     * This is intended for use with URIs found in document text, such as
-     * <em>xml-stylesheet</em> processing instructions and in attribute
-     * values, where they are not recognized as URIs by XML parsers.
-     * Calls to this method prevent explicit loading of additional catalogs
-     * using {@link #loadCatalog loadCatalog()}.
-     *
-     * <p>This functionality is supported by the OASIS XML Catalog
-     * specification, but will never be invoked by an XML parser.
-     * It corresponds closely to functionality for mapping system
-     * identifiers for entities declared in DTDs; closely enough that
-     * this implementation's default behavior is that they be
-     * identical, to minimize potential confusion.
-     *
-     * <p>This method could be useful when implementing the
-     * {@link javax.xml.transform.URIResolver} interface, wrapping the
-     * input source in a {@link javax.xml.transform.sax.SAXSource}.
-     *
-     * @see #isUnified
-     * @see #setUnified
-     *
-     * @param baseURI The relevant base URI as specified by the XML Base
-     *  specification.  This recognizes <em>xml:base</em> attributes
-     *  as overriding the actual (physical) base URI.
-     * @param uri Either an absolute URI, or one relative to baseURI
-     *
-     * @return Input source for accessing the mapped URI, or null
-     *  if no mapping was found.  The input source may have opened
-     *  the stream, and will have a fully resolved URI.
-     */
-    public InputSource resolveURI (String baseURI, String uri)
-    throws SAXException, IOException
-    {
-        if (loadingPermitted)
-            disableLoading ();
-
-        // NOTE:  baseURI isn't used here, but caller MUST have it,
-        // and heuristics _might_ use it in the future ... plus,
-        // it's symmetric with resolveEntity ().
-
-        // steps 1, 6 involve looping
-        try {
-            for (int i = 0; i < catalogs.length; i++) {
-                InputSource     tmp = catalogs [i].resolveURI (uri);
-                if (tmp != null)
-                    return tmp;
-            }
-        } catch (DoneDelegation x) {
-            // done
-        }
-        // step 7 reports no match
-        return null;
-    }
-
-
-    /**
-     * Records that catalog loading is no longer permitted.
-     * Loading is automatically disabled when lookups are performed,
-     * and should be manually disabled when <em>startDTD()</em> (or
-     * any other DTD declaration callback) is invoked, or at the latest
-     * when the document root element is seen.
-     */
-    public synchronized void disableLoading ()
-    {
-        // NOTE:  this method and loadCatalog() are synchronized
-        // so that it's impossible to load (top level) catalogs
-        // after lookups start.  Likewise, deferred loading is also
-        // synchronized (for "next" and delegated catalogs) to
-        // ensure that parsers can share resolvers.
-        loadingPermitted = false;
-    }
-
-
-    /**
-     * Returns the error handler used to report catalog errors.
-     * Null is returned if the parser's default error handling
-     * will be used.
-     *
-     * @see #setErrorHandler
-     */
-    public ErrorHandler getErrorHandler ()
-        { return errorHandler; }
-
-    /**
-     * Assigns the error handler used to report catalog errors.
-     * These errors may come either from the SAX2 parser or
-     * from the catalog parsing code driven by the parser.
-     *
-     * <p> If you're sharing the resolver between parsers, don't
-     * change this once lookups have begun.
-     *
-     * @see #getErrorHandler
-     *
-     * @param parser The error handler, or null saying to use the default
-     *  (no diagnostics, and only fatal errors terminate loading).
-     */
-    public void setErrorHandler (ErrorHandler handler)
-        { errorHandler = handler; }
-
-
-    /**
-     * Returns the name of the SAX2 parser class used to parse catalogs.
-     * Null is returned if the system default is used.
-     * @see #setParserClass
-     */
-    public String getParserClass ()
-        { return parserClass; }
-
-    /**
-     * Names the SAX2 parser class used to parse catalogs.
-     *
-     * <p> If you're sharing the resolver between parsers, don't change
-     * this once lookups have begun.
-     *
-     * <p> Note that in order to properly support the <em>xml:base</em>
-     * attribute and relative URI resolution, the SAX parser used to parse
-     * the catalog must provide a {@link Locator} and support the optional
-     * declaration and lexical handlers.
-     *
-     * @see #getParserClass
-     *
-     * @param parser The parser class name, or null saying to use the
-     *  system default SAX2 parser.
-     */
-    public void setParserClass (String parser)
-        { parserClass = parser; }
-
-
-    /**
-     * Returns true (the default) if all methods resolve
-     * a given URI in the same way.
-     * Returns false if calls resolving URIs as entities (such as
-     * {@link #resolveEntity resolveEntity()}) use different catalog entries
-     * than those resolving them as URIs ({@link #resolveURI resolveURI()}),
-     * which will generally produce different results.
-     *
-     * <p>The OASIS XML Catalog specification defines two related schemes
-     * to map URIs "as URIs" or "as system IDs".
-     * URIs use <em>uri</em>, <em>rewriteURI</em>, and <em>delegateURI</em>
-     * elements.  System IDs do the same things with <em>systemId</em>,
-     * <em>rewriteSystemId</em>, and <em>delegateSystemId</em>.
-     * It's confusing and error prone to maintain two parallel copies of
-     * such data.  Accordingly, this class makes that behavior optional.
-     * The <em>unified</em> interpretation of URI mappings is preferred,
-     * since it prevents surprises where one URI gets mapped to different
-     * contents depending on whether the reference happens to have come
-     * from a DTD (or not).
-     *
-     * @see #setUnified
-     */
-    public boolean isUnified ()
-        { return unified; }
-
-    /**
-     * Assigns the value of the flag returned by {@link #isUnified}.
-     * Set it to false to be strictly conformant with the OASIS XML Catalog
-     * specification.  Set it to true to make all mappings for a given URI
-     * give the same result, regardless of the reason for the mapping.
-     *
-     * <p>Don't change this once you've loaded the first catalog.
-     *
-     * @param value new flag setting
-     */
-    public void setUnified (boolean value)
-        { unified = value; }
-
-
-    /**
-     * Returns true (the default) if a catalog's public identifier
-     * mappings will be used.
-     * When false is returned, such mappings are ignored except when
-     * system IDs are discarded, such as for
-     * entities using the <em>urn:publicid:</em> URI scheme in their
-     * system identifiers.  (See RFC 3151 for information about that
-     * URI scheme.  Using it in system identifiers may not work well
-     * with many SAX parsers unless the <em>resolve-dtd-uris</em>
-     * feature flag is set to false.)
-     * @see #setUsingPublic
-     */
-    public boolean isUsingPublic ()
-        { return usingPublic; }
-
-    /**
-     * Specifies which catalog search mode is used.
-     * By default, public identifier mappings are able to override system
-     * identifiers when both are available.
-     * Applications may choose to ignore public
-     * identifier mappings in such cases, so that system identifiers
-     * declared in DTDs will only be overridden by an explicit catalog
-     * match for that system ID.
-     *
-     * <p> If you're sharing the resolver between parsers, don't
-     * change this once lookups have begun.
-     * @see #isUsingPublic
-     *
-     * @param value true to always use public identifier mappings,
-     *  false to only use them for system ids using the <em>urn:publicid:</em>
-     *  URI scheme.
-     */
-    public void setUsingPublic (boolean value)
-        { usingPublic = value; }
-
-
-
-    // hmm, what's this do? :)
-    private static Catalog loadCatalog (
-        String          parserClass,
-        ErrorHandler    eh,
-        String          uri,
-        boolean         unified
-    ) throws SAXException, IOException
-    {
-        XMLReader       parser;
-        Loader          loader;
-        boolean         doesIntern = false;
-
-        if (parserClass == null)
-            parser = XMLReaderFactory.createXMLReader ();
-        else
-            parser = XMLReaderFactory.createXMLReader (parserClass);
-        if (eh != null)
-            parser.setErrorHandler (eh);
-        // resolve-dtd-entities is at default value (unrecognized == true)
-
-        try {
-            doesIntern = parser.getFeature (
-                "http://xml.org/sax/features/string-interning");
-        } catch (SAXNotRecognizedException e) { }
-
-        loader = new Loader (doesIntern, eh, unified);
-        loader.cat.parserClass = parserClass;
-        loader.cat.catalogURI = uri;
-
-        parser.setContentHandler (loader);
-        parser.setProperty (
-            "http://xml.org/sax/properties/declaration-handler",
-            loader);
-        parser.setProperty (
-            "http://xml.org/sax/properties/lexical-handler",
-            loader);
-        parser.parse (uri);
-
-        return loader.cat;
-    }
-
-    // perform one or both the normalizations for public ids
-    private static String normalizePublicId (boolean full, String publicId)
-    {
-        if (publicId.startsWith ("urn:publicid:")) {
-            CPStringBuilder     buf = new CPStringBuilder ();
-            char                chars [] = publicId.toCharArray ();
-boolean hasbug = false;
-
-            for (int i = 13; i < chars.length; i++) {
-                switch (chars [i]) {
-                case '+':       buf.append (' '); continue;
-                case ':':       buf.append ("//"); continue;
-                case ';':       buf.append ("::"); continue;
-                case '%':
-// FIXME unhex that char!  meanwhile, warn and fallthrough ...
-                    hasbug = true;
-                default:        buf.append (chars [i]); continue;
-                }
-            }
-            publicId = buf.toString ();
-if (hasbug)
-System.err.println ("nyet unhexing public id: " + publicId);
-            full = true;
-        }
-
-        // SAX parsers do everything except that URN mapping, but
-        // we can't trust other sources to normalize correctly
-        if (full) {
-            StringTokenizer     tokens;
-            String              token;
-
-            tokens = new StringTokenizer (publicId, " \r\n");
-            publicId = null;
-            while (tokens.hasMoreTokens ()) {
-                if (publicId == null)
-                    publicId = tokens.nextToken ();
-                else
-                    publicId += " " + tokens.nextToken ();
-            }
-        }
-        return publicId;
-    }
-
-    private static boolean isUriExcluded (int c)
-        { return c <= 0x20 || c >= 0x7f || "\"<>^`{|}".indexOf (c) != -1; }
-
-    private static int hexNibble (int c)
-    {
-        if (c < 10)
-            return c + '0';
-        return ('a' - 10) + c;
-    }
-
-    // handles URIs with "excluded" characters
-    private static String normalizeURI (String systemId)
-    {
-        int                     length = systemId.length ();
-
-        for (int i = 0; i < length; i++) {
-            char        c = systemId.charAt (i);
-
-            // escape non-ASCII plus "excluded" characters
-            if (isUriExcluded (c)) {
-                byte                    buf [];
-                ByteArrayOutputStream   out;
-                int                             b;
-
-                // a JVM that doesn't know UTF8 and 8859_1 is unusable!
-                try {
-                    buf = systemId.getBytes ("UTF8");
-                    out = new ByteArrayOutputStream (buf.length + 10);
-
-                    for (i = 0; i < buf.length; i++) {
-                        b = buf [i] & 0x0ff;
-                        if (isUriExcluded (b)) {
-                            out.write ((int) '%');
-                            out.write (hexNibble (b >> 4));
-                            out.write (hexNibble (b & 0x0f));
-                        } else
-                            out.write (b);
-                    }
-                    return out.toString ("8859_1");
-                } catch (IOException e) {
-                    throw new RuntimeException (
-                        "can't normalize URI: " + e.getMessage ());
-                }
-            }
-        }
-        return systemId;
-    }
-
-    // thrown to mark authoritative end of a search
-    private static class DoneDelegation extends SAXException
-    {
-        DoneDelegation () { }
-    }
-
-
-    /**
-     * Represents a OASIS XML Catalog, and encapsulates much of
-     * the catalog functionality.
-     */
-    private static class Catalog
-    {
-        // loading infrastructure
-        String          catalogURI;
-        ErrorHandler    eh;
-        boolean         unified;
-        String          parserClass;
-
-        // catalog data
-        boolean         hasPreference;
-        boolean         usingPublic;
-
-        Hashtable       publicIds;
-        Hashtable       publicDelegations;
-
-        Hashtable       systemIds;
-        Hashtable       systemRewrites;
-        Hashtable       systemDelegations;
-
-        Hashtable       uris;
-        Hashtable       uriRewrites;
-        Hashtable       uriDelegations;
-
-        Hashtable       doctypes;
-
-        Vector          next;
-
-        // nonpublic!
-        Catalog () { }
-
-
-        // steps as found in OASIS XML catalog spec 7.1.2
-        private InputSource locatePublicId (String publicId)
-        throws SAXException, IOException
-        {
-            // 5. return (first) 'public' entry
-            if (publicIds != null) {
-                String  retval = (String) publicIds.get (publicId);
-                if (retval != null) {
-                    // IF the URI is accessible ...
-                    return new InputSource (retval);
-                }
-            }
-
-            // 6. return delegatePublic catalog match [complex]
-            if (publicDelegations != null)
-                return checkDelegations (publicDelegations, publicId,
-                                publicId, null);
-
-            return null;
-        }
-
-        // steps as found in OASIS XML catalog spec 7.1.2 or 7.2.2
-        private InputSource mapURI (
-            String      uri,
-            Hashtable   ids,
-            Hashtable   rewrites,
-            Hashtable   delegations
-        ) throws SAXException, IOException
-        {
-            // 7.1.2: 2. return (first) 'system' entry
-            // 7.2.2: 2. return (first) 'uri' entry
-            if (ids != null) {
-                String  retval = (String) ids.get (uri);
-                if (retval != null) {
-                    // IF the URI is accessible ...
-                    return new InputSource (retval);
-                }
-            }
-
-            // 7.1.2: 3. return 'rewriteSystem' entries
-            // 7.2.2: 3. return 'rewriteURI' entries
-            if (rewrites != null) {
-                String  prefix = null;
-                String  replace = null;
-                int     prefixLen = -1;
-
-                for (Enumeration e = rewrites.keys ();
-                        e.hasMoreElements ();
-                        /* NOP */) {
-                    String      temp = (String) e.nextElement ();
-                    int         len = -1;
-
-                    if (!uri.startsWith (temp))
-                        continue;
-                    if (prefix != null
-                            && (len = temp.length ()) < prefixLen)
-                        continue;
-                    prefix = temp;
-                    prefixLen = len;
-                    replace = (String) rewrites.get (temp);
-                }
-                if (prefix != null) {
-                    CPStringBuilder     buf = new CPStringBuilder (replace);
-                    buf.append (uri.substring (prefixLen));
-                    // IF the URI is accessible ...
-                    return new InputSource (buf.toString ());
-                }
-            }
-
-            // 7.1.2: 4. return 'delegateSystem' catalog match [complex]
-            // 7.2.2: 4. return 'delegateURI' catalog match [complex]
-            if (delegations != null)
-                return checkDelegations (delegations, uri, null, uri);
-
-            return null;
-        }
-
-
-        /**
-         * Returns a URI for an external entity.
-         */
-        public InputSource resolve (
-            boolean     usingPublic,
-            String      publicId,
-            String      systemId
-        ) throws SAXException, IOException
-        {
-            boolean     preferSystem;
-            InputSource retval;
-
-            if (hasPreference)
-                preferSystem = !this.usingPublic;
-            else
-                preferSystem = !usingPublic;
-
-            if (publicId != null)
-                publicId = normalizePublicId (false, publicId);
-
-            // behavior here matches section 7.1.1 of the oasis spec
-            if (systemId != null) {
-                if (systemId.startsWith ("urn:publicid:")) {
-                    String      temp = normalizePublicId (true, systemId);
-                    if (publicId == null) {
-                        publicId = temp;
-                        systemId = null;
-                    } else if (!publicId.equals (temp)) {
-                        // error; ok to recover by:
-                        systemId = null;
-                    }
-                } else
-                    systemId = normalizeURI (systemId);
-            }
-
-            if (systemId == null && publicId == null)
-                return null;
-
-            if (systemId != null) {
-                retval = mapURI (systemId, systemIds, systemRewrites,
-                                        systemDelegations);
-                if (retval != null) {
-                    retval.setPublicId (publicId);
-                    return retval;
-                }
-            }
-
-            if (publicId != null
-                    && !(systemId != null && preferSystem)) {
-                retval = locatePublicId (publicId);
-                if (retval != null) {
-                    retval.setPublicId (publicId);
-                    return retval;
-                }
-            }
-
-            // 7. apply nextCatalog entries
-            if (next != null) {
-                int     length = next.size ();
-                for (int i = 0; i < length; i++) {
-                    Catalog     n = getNext (i);
-                    retval = n.resolve (usingPublic, publicId, systemId);
-                    if (retval != null)
-                        return retval;
-                }
-            }
-
-            return null;
-        }
-
-        /**
-         * Maps one URI into another, for resources that are not defined
-         * using XML external entity or notation syntax.
-         */
-        public InputSource resolveURI (String uri)
-        throws SAXException, IOException
-        {
-            if (uri.startsWith ("urn:publicid:"))
-                return resolve (true, normalizePublicId (true, uri), null);
-
-            InputSource retval;
-
-            uri = normalizeURI (uri);
-
-            // 7.2.2 steps 2-4
-            retval = mapURI (uri, uris, uriRewrites, uriDelegations);
-            if (retval != null)
-                return retval;
-
-            // 7.2.2 step 5. apply nextCatalog entries
-            if (next != null) {
-                int     length = next.size ();
-                for (int i = 0; i < length; i++) {
-                    Catalog     n = getNext (i);
-                    retval = n.resolveURI (uri);
-                    if (retval != null)
-                        return retval;
-                }
-            }
-
-            return null;
-        }
-
-
-        /**
-         * Finds the external subset associated with a given root element.
-         */
-        public InputSource getExternalSubset (String name)
-        throws SAXException, IOException
-        {
-            if (doctypes != null) {
-                String  value = (String) doctypes.get (name);
-                if (value != null) {
-                    // IF the URI is accessible ...
-                    return new InputSource (value);
-                }
-            }
-            if (next != null) {
-                int     length = next.size ();
-                for (int i = 0; i < length; i++) {
-                    Catalog     n = getNext (i);
-                    if (n == null)
-                        continue;
-                    InputSource retval = n.getExternalSubset (name);
-                    if (retval != null)
-                        return retval;
-                }
-            }
-            return null;
-        }
-
-        private synchronized Catalog getNext (int i)
-        throws SAXException, IOException
-        {
-            Object      obj;
-
-            if (next == null || i < 0 || i >= next.size ())
-                return null;
-            obj = next.elementAt (i);
-            if (obj instanceof Catalog)
-                return (Catalog) obj;
-
-            // ok, we deferred reading that catalog till now.
-            // load and cache it.
-            Catalog     cat = null;
-
-            try {
-                cat = loadCatalog (parserClass, eh, (String) obj, unified);
-                next.setElementAt (cat, i);
-            } catch (SAXException e) {
-                // must fail quietly, says the OASIS spec
-            } catch (IOException e) {
-                // same applies here
-            }
-            return cat;
-        }
-
-        private InputSource checkDelegations (
-            Hashtable   delegations,
-            String      id,
-            String      publicId,       // only one of public/system
-            String      systemId        // will be non-null...
-        ) throws SAXException, IOException
-        {
-            Vector      matches = null;
-            int         length = 0;
-
-            // first, see if any prefixes match.
-            for (Enumeration e = delegations.keys ();
-                    e.hasMoreElements ();
-                    /* NOP */) {
-                String  prefix = (String) e.nextElement ();
-
-                if (!id.startsWith (prefix))
-                    continue;
-                if (matches == null)
-                    matches = new Vector ();
-
-                // maintain in longer->shorter sorted order
-                // NOTE:  assumes not many matches will fire!
-                int     index;
-
-                for (index = 0; index < length; index++) {
-                    String      temp = (String) matches.elementAt (index);
-                    if (prefix.length () > temp.length ()) {
-                        matches.insertElementAt (prefix, index);
-                        break;
-                    }
-                }
-                if (index == length)
-                    matches.addElement (prefix);
-                length++;
-            }
-            if (matches == null)
-                return null;
-
-            // now we know the list of catalogs to replace our "top level"
-            // list ... we use it here, rather than somehow going back and
-            // restarting, since this helps avoid reading most catalogs.
-            // this assumes stackspace won't be a problem.
-            for (int i = 0; i < length; i++) {
-                Catalog         catalog = null;
-                InputSource     result;
-
-                // get this catalog.  we may not have read it yet.
-                synchronized (delegations) {
-                    Object      prefix = matches.elementAt (i);
-                    Object      cat = delegations.get (prefix);
-
-                    if (cat instanceof Catalog)
-                        catalog = (Catalog) cat;
-                    else {
-                        try {
-                            // load and cache that catalog
-                            catalog = loadCatalog (parserClass, eh,
-                                    (String) cat, unified);
-                            delegations.put (prefix, catalog);
-                        } catch (SAXException e) {
-                            // must ignore, says the OASIS spec
-                        } catch (IOException e) {
-                            // same applies here
-                        }
-                    }
-                }
-
-                // ignore failed loads, and proceed
-                if (catalog == null)
-                    continue;
-
-                // we have a catalog ... resolve!
-                // usingPublic value can't matter, there's no choice
-                result = catalog.resolve (true, publicId, systemId);
-                if (result != null)
-                    return result;
-            }
-
-            // if there were no successes, the entire
-            // lookup failed (all the way to top level)
-            throw new DoneDelegation ();
-        }
-    }
-
-
-    /** This is the namespace URI used for OASIS XML Catalogs.  */
-    private static final String catalogNamespace =
-        "urn:oasis:names:tc:entity:xmlns:xml:catalog";
-
-
-    /**
-     * Loads/unmarshals one catalog.
-     */
-    private static class Loader extends DefaultHandler2
-    {
-        private boolean         preInterned;
-        private ErrorHandler    handler;
-        private boolean         unified;
-        private int             ignoreDepth;
-        private Locator         locator;
-        private boolean         started;
-        private Hashtable       externals;
-        private Stack           bases;
-
-        Catalog                 cat = new Catalog ();
-
-
-        /**
-         * Constructor.
-         * @param flag true iff the parser already interns strings.
-         * @param eh Errors and warnings are delegated to this.
-         * @param unified true keeps one table for URI mappings;
-         *      false matches OASIS spec, storing mappings
-         *      for URIs and SYSTEM ids in parallel tables.
-         */
-        Loader (boolean flag, ErrorHandler eh, boolean unified)
-        {
-            preInterned = flag;
-            handler = eh;
-            this.unified = unified;
-            cat.unified = unified;
-            cat.eh = eh;
-        }
-
-
-        // strips out fragments
-        private String nofrag (String uri)
-        throws SAXException
-        {
-            if (uri.indexOf ('#') != -1) {
-                warn ("URI with fragment: " + uri);
-                uri = uri.substring (0, uri.indexOf ('#'));
-            }
-            return uri;
-        }
-
-        // absolutizes relative URIs
-        private String absolutize (String uri)
-        throws SAXException
-        {
-            // avoid creating URLs if they're already absolutized,
-            // or if the URI is already using a known scheme
-            if (uri.startsWith ("file:/")
-                    || uri.startsWith ("http:/")
-                    || uri.startsWith ("https:/")
-                    || uri.startsWith ("ftp:/")
-                    || uri.startsWith ("urn:")
-                    )
-                return uri;
-
-            // otherwise, let's hope the JDK handles this URI scheme.
-            try {
-                URL     base = (URL) bases.peek ();
-                return new URL (base, uri).toString ();
-            } catch (Exception e) {
-                fatal ("can't absolutize URI: " + uri);
-                return null;
-            }
-        }
-
-        // recoverable error
-        private void error (String message)
-        throws SAXException
-        {
-            if (handler == null)
-                return;
-            handler.error (new SAXParseException (message, locator));
-        }
-
-        // nonrecoverable error
-        private void fatal (String message)
-        throws SAXException
-        {
-            SAXParseException   spe;
-
-            spe = new SAXParseException (message, locator);
-            if (handler != null)
-                handler.fatalError (spe);
-            throw spe;
-        }
-
-        // low severity problem
-        private void warn (String message)
-        throws SAXException
-        {
-            if (handler == null)
-                return;
-            handler.warning (new SAXParseException (message, locator));
-        }
-
-        // callbacks:
-
-        public void setDocumentLocator (Locator l)
-            { locator = l; }
-
-        public void startDocument ()
-        throws SAXException
-        {
-            if (locator == null)
-                error ("no locator!");
-            bases = new Stack ();
-            String      uri = locator.getSystemId ();
-            try {
-                bases.push (new URL (uri));
-            } catch (IOException e) {
-                fatal ("bad document base URI: " + uri);
-            }
-        }
-
-        public void endDocument ()
-        throws SAXException
-        {
-            try {
-                if (!started)
-                    error ("not a catalog!");
-            } finally {
-                locator = null;
-                handler = null;
-                externals = null;
-                bases = null;
-            }
-        }
-
-        // XML Base support for external entities.
-
-        // NOTE: expects parser is in default "resolve-dtd-uris" mode.
-        public void externalEntityDecl (String name, String pub, String sys)
-        throws SAXException
-        {
-            if (externals == null)
-                externals = new Hashtable ();
-            if (externals.get (name) == null)
-                externals.put (name, pub);
-        }
-
-        public void startEntity (String name)
-        throws SAXException
-        {
-            if (externals == null)
-                return;
-            String uri = (String) externals.get (name);
-
-            // NOTE: breaks if an EntityResolver substitutes these URIs.
-            // If toplevel loader supports one, must intercept calls...
-            if (uri != null) {
-                try {
-                    bases.push (new URL (uri));
-                } catch (IOException e) {
-                    fatal ("entity '" + name + "', bad URI: " + uri);
-                }
-            }
-        }
-
-        public void endEntity (String name)
-        {
-            if (externals == null)
-                return;
-            String value = (String) externals.get (name);
-
-            if (value != null)
-                bases.pop ();
-        }
-
-        /**
-         * Processes catalog elements, saving their data.
-         */
-        public void startElement (String namespace, String local,
-            String qName, Attributes atts)
-        throws SAXException
-        {
-            // must ignore non-catalog elements, and their contents
-            if (ignoreDepth != 0 || !catalogNamespace.equals (namespace)) {
-                ignoreDepth++;
-                return;
-            }
-
-            // basic sanity checks
-            if (!preInterned)
-                local = local.intern ();
-            if (!started) {
-                started = true;
-                if ("catalog" != local)
-                    fatal ("root element not 'catalog': " + local);
-            }
-
-            // Handle any xml:base attribute
-            String      xmlbase = atts.getValue ("xml:base");
-
-            if (xmlbase != null) {
-                URL     base = (URL) bases.peek ();
-                try {
-                    base = new URL (base, xmlbase);
-                } catch (IOException e) {
-                    fatal ("can't resolve xml:base attribute: " + xmlbase);
-                }
-                bases.push (base);
-            } else
-                bases.push (bases.peek ());
-
-            // fetch multi-element attributes, apply standard tweaks
-            // values (uri, catalog, rewritePrefix) get normalized too,
-            // as a precaution and since we may compare the values
-            String      catalog = atts.getValue ("catalog");
-            if (catalog != null)
-                catalog = normalizeURI (absolutize (catalog));
-
-            String      rewritePrefix = atts.getValue ("rewritePrefix");
-            if (rewritePrefix != null)
-                rewritePrefix = normalizeURI (absolutize (rewritePrefix));
-
-            String      systemIdStartString;
-            systemIdStartString = atts.getValue ("systemIdStartString");
-            if (systemIdStartString != null) {
-                systemIdStartString = normalizeURI (systemIdStartString);
-                // unmatchable <rewriteSystemId>, <delegateSystemId> elements
-                if (systemIdStartString.startsWith ("urn:publicid:")) {
-                    error ("systemIdStartString is really a publicId!!");
-                    return;
-                }
-            }
-
-            String      uri = atts.getValue ("uri");
-            if (uri != null)
-                uri = normalizeURI (absolutize (uri));
-
-            String      uriStartString;
-            uriStartString = atts.getValue ("uriStartString");
-            if (uriStartString != null) {
-                uriStartString = normalizeURI (uriStartString);
-                // unmatchable <rewriteURI>, <delegateURI> elements
-                if (uriStartString.startsWith ("urn:publicid:")) {
-                    error ("uriStartString is really a publicId!!");
-                    return;
-                }
-            }
-
-            // strictly speaking "group" and "catalog" shouldn't nest
-            // ... arbitrary restriction, no evident motivation
-
-// FIXME stack "prefer" settings (two elements only!) and use
-// them to populate different public mapping/delegation tables
-
-            if ("catalog" == local || "group" == local) {
-                String  prefer = atts.getValue ("prefer");
-
-                if (prefer != null && !"public".equals (prefer)) {
-                    if (!"system".equals (prefer)) {
-                        error ("in <" + local + " ... prefer='...'>, "
-                            + "assuming 'public'");
-                        prefer = "public";
-                    }
-                }
-                if (prefer != null) {
-                    if ("catalog" == local) {
-                        cat.hasPreference = true;
-                        cat.usingPublic = "public".equals (prefer);
-                    } else {
-                        if (!cat.hasPreference || cat.usingPublic
-                                    != "public".equals (prefer)) {
-fatal ("<group prefer=...> case not handled");
-                        }
-                    }
-                } else if ("group" == local && cat.hasPreference) {
-fatal ("<group prefer=...> case not handled");
-                }
-
-            //
-            // PUBLIC ids:  cleanly set up for id substitution
-            //
-            } else if ("public" == local) {
-                String  publicId = atts.getValue ("publicId");
-                String  value = null;
-
-                if (publicId == null || uri == null) {
-                    error ("expecting <public publicId=... uri=.../>");
-                    return;
-                }
-                publicId = normalizePublicId (true, publicId);
-                uri = nofrag (uri);
-                if (cat.publicIds == null)
-                    cat.publicIds = new Hashtable ();
-                else
-                    value = (String) cat.publicIds.get (publicId);
-                if (value != null) {
-                    if (!value.equals (uri))
-                        warn ("ignoring <public...> entry for " + publicId);
-                } else
-                    cat.publicIds.put (publicId, uri);
-
-            } else if ("delegatePublic" == local) {
-                String  publicIdStartString;
-                Object  value = null;
-
-                publicIdStartString = atts.getValue ("publicIdStartString");
-                if (publicIdStartString == null || catalog == null) {
-                    error ("expecting <delegatePublic "
-                        + "publicIdStartString=... catalog=.../>");
-                    return;
-                }
-                publicIdStartString = normalizePublicId (true,
-                        publicIdStartString);
-                if (cat.publicDelegations == null)
-                    cat.publicDelegations = new Hashtable ();
-                else
-                    value = cat.publicDelegations.get (publicIdStartString);
-                if (value != null) {
-                    if (!value.equals (catalog))
-                        warn ("ignoring <delegatePublic...> entry for "
-                            + uriStartString);
-                } else
-                    cat.publicDelegations.put (publicIdStartString, catalog);
-
-
-            //
-            // SYSTEM ids:  need substitution due to operational issues
-            //
-            } else if ("system" == local) {
-                String  systemId = atts.getValue ("systemId");
-                String  value = null;
-
-                if (systemId == null || uri == null) {
-                    error ("expecting <system systemId=... uri=.../>");
-                    return;
-                }
-                systemId = normalizeURI (systemId);
-                uri = nofrag (uri);
-                if (systemId.startsWith ("urn:publicid:")) {
-                    error ("systemId is really a publicId!!");
-                    return;
-                }
-                if (cat.systemIds == null) {
-                    cat.systemIds = new Hashtable ();
-                    if (unified)
-                        cat.uris = cat.systemIds;
-                } else
-                    value = (String) cat.systemIds.get (systemId);
-                if (value != null) {
-                    if (!value.equals (uri))
-                        warn ("ignoring <system...> entry for " + systemId);
-                } else
-                    cat.systemIds.put (systemId, uri);
-
-            } else if ("rewriteSystem" == local) {
-                String  value = null;
-
-                if (systemIdStartString == null || rewritePrefix == null
-                        || systemIdStartString.length () == 0
-                        || rewritePrefix.length () == 0
-                        ) {
-                    error ("expecting <rewriteSystem "
-                        + "systemIdStartString=... rewritePrefix=.../>");
-                    return;
-                }
-                if (cat.systemRewrites == null) {
-                    cat.systemRewrites = new Hashtable ();
-                    if (unified)
-                        cat.uriRewrites = cat.systemRewrites;
-                } else
-                    value = (String) cat.systemRewrites.get (
-                                                systemIdStartString);
-                if (value != null) {
-                    if (!value.equals (rewritePrefix))
-                        warn ("ignoring <rewriteSystem...> entry for "
-                            + systemIdStartString);
-                } else
-                    cat.systemRewrites.put (systemIdStartString,
-                                rewritePrefix);
-
-            } else if ("delegateSystem" == local) {
-                Object  value = null;
-
-                if (systemIdStartString == null || catalog == null) {
-                    error ("expecting <delegateSystem "
-                        + "systemIdStartString=... catalog=.../>");
-                    return;
-                }
-                if (cat.systemDelegations == null) {
-                    cat.systemDelegations = new Hashtable ();
-                    if (unified)
-                        cat.uriDelegations = cat.systemDelegations;
-                } else
-                    value = cat.systemDelegations.get (systemIdStartString);
-                if (value != null) {
-                    if (!value.equals (catalog))
-                        warn ("ignoring <delegateSystem...> entry for "
-                            + uriStartString);
-                } else
-                    cat.systemDelegations.put (systemIdStartString, catalog);
-
-
-            //
-            // URI:  just like "system" ID support, except that
-            // fragment IDs are disallowed in "system" elements.
-            //
-            } else if ("uri" == local) {
-                String  name = atts.getValue ("name");
-                String  value = null;
-
-                if (name == null || uri == null) {
-                    error ("expecting <uri name=... uri=.../>");
-                    return;
-                }
-                if (name.startsWith ("urn:publicid:")) {
-                    error ("name is really a publicId!!");
-                    return;
-                }
-                name = normalizeURI (name);
-                if (cat.uris == null) {
-                    cat.uris = new Hashtable ();
-                    if (unified)
-                        cat.systemIds = cat.uris;
-                } else
-                    value = (String) cat.uris.get (name);
-                if (value != null) {
-                    if (!value.equals (uri))
-                        warn ("ignoring <uri...> entry for " + name);
-                } else
-                    cat.uris.put (name, uri);
-
-            } else if ("rewriteURI" == local) {
-                String value = null;
-
-                if (uriStartString == null || rewritePrefix == null
-                        || uriStartString.length () == 0
-                        || rewritePrefix.length () == 0
-                        ) {
-                    error ("expecting <rewriteURI "
-                        + "uriStartString=... rewritePrefix=.../>");
-                    return;
-                }
-                if (cat.uriRewrites == null) {
-                    cat.uriRewrites = new Hashtable ();
-                    if (unified)
-                        cat.systemRewrites = cat.uriRewrites;
-                } else
-                    value = (String) cat.uriRewrites.get (uriStartString);
-                if (value != null) {
-                    if (!value.equals (rewritePrefix))
-                        warn ("ignoring <rewriteURI...> entry for "
-                            + uriStartString);
-                } else
-                    cat.uriRewrites.put (uriStartString, rewritePrefix);
-
-            } else if ("delegateURI" == local) {
-                Object  value = null;
-
-                if (uriStartString == null || catalog == null) {
-                    error ("expecting <delegateURI "
-                        + "uriStartString=... catalog=.../>");
-                    return;
-                }
-                if (cat.uriDelegations == null) {
-                    cat.uriDelegations = new Hashtable ();
-                    if (unified)
-                        cat.systemDelegations = cat.uriDelegations;
-                } else
-                    value = cat.uriDelegations.get (uriStartString);
-                if (value != null) {
-                    if (!value.equals (catalog))
-                        warn ("ignoring <delegateURI...> entry for "
-                            + uriStartString);
-                } else
-                    cat.uriDelegations.put (uriStartString, catalog);
-
-            //
-            // NON-DELEGATING approach to modularity
-            //
-            } else if ("nextCatalog" == local) {
-                if (catalog == null) {
-                    error ("expecting <nextCatalog catalog=.../>");
-                    return;
-                }
-                if (cat.next == null)
-                    cat.next = new Vector ();
-                cat.next.addElement (catalog);
-
-            //
-            // EXTENSIONS from appendix E
-            //
-            } else if ("doctype" == local) {
-                String  name = atts.getValue ("name");
-                String  value = null;
-
-                if (name == null || uri == null) {
-                    error ("expecting <doctype name=... uri=.../>");
-                    return;
-                }
-                name = normalizeURI (name);
-                if (cat.doctypes == null)
-                    cat.doctypes = new Hashtable ();
-                else
-                    value = (String) cat.doctypes.get (name);
-                if (value != null) {
-                    if (!value.equals (uri))
-                        warn ("ignoring <doctype...> entry for "
-                            + uriStartString);
-                } else
-                    cat.doctypes.put (name, uri);
-
-
-            //
-            // RESERVED ... ignore (like reserved attributes) but warn
-            //
-            } else {
-                warn ("ignoring unknown catalog element: " + local);
-                ignoreDepth++;
-            }
-        }
-
-        public void endElement (String uri, String local, String qName)
-        throws SAXException
-        {
-            if (ignoreDepth != 0)
-                ignoreDepth--;
-            else
-                bases.pop ();
-        }
-    }
-}
diff --git a/libjava/classpath/gnu/xml/util/XHTMLWriter.java b/libjava/classpath/gnu/xml/util/XHTMLWriter.java
deleted file mode 100644
index 3a0c1ad..0000000
--- a/libjava/classpath/gnu/xml/util/XHTMLWriter.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/* XHTMLWriter.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.util;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-
-
-/**
- * This extends XMLWriter to create a class which defaults to writing
- * XHTML text, preferring the US-ASCII encoding.  It adds no unique
- * functionality, only changing the defaults slightly to simplify writing
- * XHTML processing components by providing a bean class whose properties
- * have more convenient defaults.  An artifact of using the US-ASCII
- * encoding is that no XML declaration is written, so that HTML tools
- * that can't accept them will not become confused.  Components can treat
- * the output as UTF-8, ISO-8859-1, or US-ASCII without incurring any
- * data loss.
- *
- * @author David Brownell
- *
- * @deprecated Please use the javax.xml.stream APIs instead
- */
-public class XHTMLWriter extends XMLWriter
-{
-    /**
-     * Constructs this handler with System.out used to write
-     * SAX events using the US-ASCII encoding, as XHTML.
-     */
-    public XHTMLWriter ()
-    throws IOException
-    {
-        this (System.out);
-    }
-
-    /**
-     * Constructs this handler such that the specified output stream
-     * is used to write SAX events in the US-ASCII encoding, as XHTML.
-     *
-     * @param out Where US-ASCII encoding of the stream of SAX
-     *  events will be sent.
-     */
-    public XHTMLWriter (OutputStream out)
-    throws IOException
-    {
-        // not all JVMs understand "ASCII" as an encoding name, so
-        // we use 8859_1 (they all seem to handle that one) and
-        // make the echo handler filter out non-ASCII characters
-        this (new OutputStreamWriter (out, "8859_1"), "US-ASCII");
-    }
-
-    /**
-     * Constructs this handler such that the specified output stream
-     * is used to write SAX events as XHTML.
-     *
-     * @param out Where the stream of SAX events will be written.
-     */
-    public XHTMLWriter (Writer out)
-    {
-        this (out, null);
-    }
-
-    /**
-     * Constructs this handler such that the specified output stream
-     * is used to write SAX events as XHTML, labeled with the specified
-     * encoding.
-     *
-     * @param out Where the stream of SAX events will be written.
-     * @param encoding If non-null, this names the encoding to be
-     *  placed in the encoding declaration.
-     */
-    public XHTMLWriter (Writer out, String encoding)
-    {
-        super (out, encoding);
-        setXhtml (true);
-    }
-}
diff --git a/libjava/classpath/gnu/xml/util/XMLWriter.java b/libjava/classpath/gnu/xml/util/XMLWriter.java
deleted file mode 100644
index a371deb..0000000
--- a/libjava/classpath/gnu/xml/util/XMLWriter.java
+++ /dev/null
@@ -1,1931 +0,0 @@
-/* XMLWriter.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.util;
-
-import gnu.java.lang.CPStringBuilder;
-
-import java.io.BufferedWriter;
-import java.io.CharConversionException;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.Stack;
-
-import org.xml.sax.*;
-import org.xml.sax.ext.*;
-import org.xml.sax.helpers.*;
-
-
-/**
- * This class is a SAX handler which writes all its input as a well formed
- * XML or XHTML document.  If driven using SAX2 events, this output may
- * include a recreated document type declaration, subject to limitations
- * of SAX (no internal subset exposed) or DOM (the important declarations,
- * with their documentation, are discarded).
- *
- * <p> By default, text is generated "as-is", but some optional modes
- * are supported.  Pretty-printing is supported, to make life easier
- * for people reading the output.  XHTML (1.0) output has can be made
- * particularly pretty; all the built-in character entities are known.
- * Canonical XML can also be generated, assuming the input is properly
- * formed.
- *
- * <hr>
- *
- * <p> Some of the methods on this class are intended for applications to
- * use directly, rather than as pure SAX2 event callbacks.  Some of those
- * methods access the JavaBeans properties (used to tweak output formats,
- * for example canonicalization and pretty printing).  Subclasses
- * are expected to add new behaviors, not to modify current behavior, so
- * many such methods are final.</p>
- *
- * <p> The <em>write*()</em> methods may be slightly simpler for some
- * applications to use than direct callbacks.  For example, they support
- * a simple policy for encoding data items as the content of a single element.
- *
- * <p> To reuse an XMLWriter you must provide it with a new Writer, since
- * this handler closes the writer it was given as part of its endDocument()
- * handling.  (XML documents have an end of input, and the way to encode
- * that on a stream is to close it.) </p>
- *
- * <hr>
- *
- * <p> Note that any relative URIs in the source document, as found in
- * entity and notation declarations, ought to have been fully resolved by
- * the parser providing events to this handler.  This means that the
- * output text should only have fully resolved URIs, which may not be
- * the desired behavior in cases where later binding is desired. </p>
- *
- * <p> <em>Note that due to SAX2 defaults, you may need to manually
- * ensure that the input events are XML-conformant with respect to namespace
- * prefixes and declarations.  {@link gnu.xml.pipeline.NSFilter} is
- * one solution to this problem, in the context of processing pipelines.</em>
- * Something as simple as connecting this handler to a parser might not
- * generate the correct output.  Another workaround is to ensure that the
- * <em>namespace-prefixes</em> feature is always set to true, if you're
- * hooking this directly up to some XMLReader implementation.
- *
- * @see gnu.xml.pipeline.TextConsumer
- *
- * @author David Brownell
- *
- * @deprecated Please use the javax.xml.stream APIs instead
- */
-public class XMLWriter
-    implements ContentHandler, LexicalHandler, DTDHandler, DeclHandler
-{
-    // text prints/escapes differently depending on context
-    //  CTX_ENTITY ... entity literal value
-    //  CTX_ATTRIBUTE ... attribute literal value
-    //  CTX_CONTENT ... content of an element
-    //  CTX_UNPARSED ... CDATA, comment, PI, names, etc
-    //  CTX_NAME ... name or nmtoken, no escapes possible
-    private static final int    CTX_ENTITY = 1;
-    private static final int    CTX_ATTRIBUTE = 2;
-    private static final int    CTX_CONTENT = 3;
-    private static final int    CTX_UNPARSED = 4;
-    private static final int    CTX_NAME = 5;
-
-// FIXME: names (element, attribute, PI, notation, etc) are not
-// currently written out with range checks (escapeChars).
-// In non-XHTML, some names can't be directly written; panic!
-
-    private static String       sysEOL;
-
-    static {
-        try {
-            sysEOL = System.getProperty ("line.separator", "\n");
-
-            // don't use the system's EOL if it's illegal XML.
-            if (!isLineEnd (sysEOL))
-                sysEOL = "\n";
-
-        } catch (SecurityException e) {
-            sysEOL = "\n";
-        }
-    }
-
-    private static boolean isLineEnd (String eol)
-    {
-        return "\n".equals (eol)
-                    || "\r".equals (eol)
-                    || "\r\n".equals (eol);
-    }
-
-    private Writer              out;
-    private boolean             inCDATA;
-    private int                 elementNestLevel;
-    private String              eol = sysEOL;
-
-    private short               dangerMask;
-    private CPStringBuilder     stringBuf;
-    private Locator             locator;
-    private ErrorHandler        errHandler;
-
-    private boolean             expandingEntities = false;
-    private int                 entityNestLevel;
-    private boolean             xhtml;
-    private boolean             startedDoctype;
-    private String              encoding;
-
-    private boolean             canonical;
-    private boolean             inDoctype;
-    private boolean             inEpilogue;
-
-    // pretty printing controls
-    private boolean             prettyPrinting;
-    private int                 column;
-    private boolean             noWrap;
-    private Stack               space = new Stack ();
-
-    // this is not a hard'n'fast rule -- longer lines are OK,
-    // but are to be avoided.  Here, prettyprinting is more to
-    // show structure "cleanly" than to be precise about it.
-    // better to have ragged layout than one line 24Kb long.
-    private static final int    lineLength = 75;
-
-
-    /**
-     * Constructs this handler with System.out used to write SAX events
-     * using the UTF-8 encoding.  Avoid using this except when you know
-     * it's safe to close System.out at the end of the document.
-     */
-    public XMLWriter () throws IOException
-        { this (System.out); }
-
-    /**
-     * Constructs a handler which writes all input to the output stream
-     * in the UTF-8 encoding, and closes it when endDocument is called.
-     * (Yes it's annoying that this throws an exception -- but there's
-     * really no way around it, since it's barely possible a JDK may
-     * exist somewhere that doesn't know how to emit UTF-8.)
-     */
-    public XMLWriter (OutputStream out) throws IOException
-    {
-        this (new OutputStreamWriter (out, "UTF8"));
-    }
-
-    /**
-     * Constructs a handler which writes all input to the writer, and then
-     * closes the writer when the document ends.  If an XML declaration is
-     * written onto the output, and this class can determine the name of
-     * the character encoding for this writer, that encoding name will be
-     * included in the XML declaration.
-     *
-     * <P> See the description of the constructor which takes an encoding
-     * name for imporant information about selection of encodings.
-     *
-     * @param writer XML text is written to this writer.
-     */
-    public XMLWriter (Writer writer)
-    {
-        this (writer, null);
-    }
-
-    /**
-     * Constructs a handler which writes all input to the writer, and then
-     * closes the writer when the document ends.  If an XML declaration is
-     * written onto the output, this class will use the specified encoding
-     * name in that declaration.  If no encoding name is specified, no
-     * encoding name will be declared unless this class can otherwise
-     * determine the name of the character encoding for this writer.
-     *
-     * <P> At this time, only the UTF-8 ("UTF8") and UTF-16 ("Unicode")
-     * output encodings are fully lossless with respect to XML data.  If you
-     * use any other encoding you risk having your data be silently mangled
-     * on output, as the standard Java character encoding subsystem silently
-     * maps non-encodable characters to a question mark ("?") and will not
-     * report such errors to applications.
-     *
-     * <p> For a few other encodings the risk can be reduced. If the writer is
-     * a java.io.OutputStreamWriter, and uses either the ISO-8859-1 ("8859_1",
-     * "ISO8859_1", etc) or US-ASCII ("ASCII") encodings, content which
-     * can't be encoded in those encodings will be written safely.  Where
-     * relevant, the XHTML entity names will be used; otherwise, numeric
-     * character references will be emitted.
-     *
-     * <P> However, there remain a number of cases where substituting such
-     * entity or character references is not an option.  Such references are
-     * not usable within a DTD, comment, PI, or CDATA section.  Neither may
-     * they be used when element, attribute, entity, or notation names have
-     * the problematic characters.
-     *
-     * @param writer XML text is written to this writer.
-     * @param encoding if non-null, and an XML declaration is written,
-     *  this is the name that will be used for the character encoding.
-     */
-    public XMLWriter (Writer writer, String encoding)
-    {
-        setWriter (writer, encoding);
-    }
-
-    private void setEncoding (String encoding)
-    {
-        if (encoding == null && out instanceof OutputStreamWriter)
-            encoding = ((OutputStreamWriter)out).getEncoding ();
-
-        if (encoding != null) {
-            encoding = encoding.toUpperCase ();
-
-            // Use official encoding names where we know them,
-            // avoiding the Java-only names.  When using common
-            // encodings where we can easily tell if characters
-            // are out of range, we'll escape out-of-range
-            // characters using character refs for safety.
-
-            // I _think_ these are all the main synonyms for these!
-            if ("UTF8".equals (encoding)) {
-                encoding = "UTF-8";
-            } else if ("US-ASCII".equals (encoding)
-                    || "ASCII".equals (encoding)) {
-                dangerMask = (short) 0xff80;
-                encoding = "US-ASCII";
-            } else if ("ISO-8859-1".equals (encoding)
-                    || "8859_1".equals (encoding)
-                    || "ISO8859_1".equals (encoding)) {
-                dangerMask = (short) 0xff00;
-                encoding = "ISO-8859-1";
-            } else if ("UNICODE".equals (encoding)
-                    || "UNICODE-BIG".equals (encoding)
-                    || "UNICODE-LITTLE".equals (encoding)) {
-                encoding = "UTF-16";
-
-                // TODO: UTF-16BE, UTF-16LE ... no BOM; what
-                // release of JDK supports those Unicode names?
-            }
-
-            if (dangerMask != 0)
-                stringBuf = new CPStringBuilder ();
-        }
-
-        this.encoding = encoding;
-    }
-
-
-    /**
-     * Resets the handler to write a new text document.
-     *
-     * @param writer XML text is written to this writer.
-     * @param encoding if non-null, and an XML declaration is written,
-     *  this is the name that will be used for the character encoding.
-     *
-     * @exception IllegalStateException if the current
-     *  document hasn't yet ended (with {@link #endDocument})
-     */
-    final public void setWriter (Writer writer, String encoding)
-    {
-        if (out != null)
-            throw new IllegalStateException (
-                "can't change stream in mid course");
-        out = writer;
-        if (out != null)
-            setEncoding (encoding);
-        if (!(out instanceof BufferedWriter))
-            out = new BufferedWriter (out);
-        space.push ("default");
-    }
-
-    /**
-     * Assigns the line ending style to be used on output.
-     * @param eolString null to use the system default; else
-     *  "\n", "\r", or "\r\n".
-     */
-    final public void setEOL (String eolString)
-    {
-        if (eolString == null)
-            eol = sysEOL;
-        else if (!isLineEnd (eolString))
-            eol = eolString;
-        else
-            throw new IllegalArgumentException (eolString);
-    }
-
-    /**
-     * Assigns the error handler to be used to present most fatal
-     * errors.
-     */
-    public void setErrorHandler (ErrorHandler handler)
-    {
-        errHandler = handler;
-    }
-
-    /**
-     * Used internally and by subclasses, this encapsulates the logic
-     * involved in reporting fatal errors.  It uses locator information
-     * for good diagnostics, if available, and gives the application's
-     * ErrorHandler the opportunity to handle the error before throwing
-     * an exception.
-     */
-    protected void fatal (String message, Exception e)
-    throws SAXException
-    {
-        SAXParseException       x;
-
-        if (locator == null)
-            x = new SAXParseException (message, null, null, -1, -1, e);
-        else
-            x = new SAXParseException (message, locator, e);
-        if (errHandler != null)
-            errHandler.fatalError (x);
-        throw x;
-    }
-
-
-    // JavaBeans properties
-
-    /**
-     * Controls whether the output should attempt to follow the "transitional"
-     * XHTML rules so that it meets the "HTML Compatibility Guidelines"
-     * appendix in the XHTML specification.  A "transitional" Document Type
-     * Declaration (DTD) is placed near the beginning of the output document,
-     * instead of whatever DTD would otherwise have been placed there, and
-     * XHTML empty elements are printed specially.  When writing text in
-     * US-ASCII or ISO-8859-1 encodings, the predefined XHTML internal
-     * entity names are used (in preference to character references) when
-     * writing content characters which can't be expressed in those encodings.
-     *
-     * <p> When this option is enabled, it is the caller's responsibility
-     * to ensure that the input is otherwise valid as XHTML.  Things to
-     * be careful of in all cases, as described in the appendix referenced
-     * above, include:  <ul>
-     *
-     *  <li> Element and attribute names must be in lower case, both
-     *          in the document and in any CSS style sheet.
-     *  <li> All XML constructs must be valid as defined by the XHTML
-     *          "transitional" DTD (including all familiar constructs,
-     *          even deprecated ones).
-     *  <li> The root element must be "html".
-     *  <li> Elements that must be empty (such as <em>&lt;br&gt;</em>
-     *          must have no content.
-     *  <li> Use both <em>lang</em> and <em>xml:lang</em> attributes
-     *          when specifying language.
-     *  <li> Similarly, use both <em>id</em> and <em>name</em> attributes
-     *          when defining elements that may be referred to through
-     *          URI fragment identifiers ... and make sure that the
-     *          value is a legal NMTOKEN, since not all such HTML 4.0
-     *          identifiers are valid in XML.
-     *  <li> Be careful with character encodings; make sure you provide
-     *          a <em>&lt;meta http-equiv="Content-type"
-     *          content="text/xml;charset=..." /&gt;</em> element in
-     *          the HTML "head" element, naming the same encoding
-     *          used to create this handler.  Also, if that encoding
-     *          is anything other than US-ASCII, make sure that if
-     *          the document is given a MIME content type, it has
-     *          a <em>charset=...</em> attribute with that encoding.
-     *  </ul>
-     *
-     * <p> Additionally, some of the oldest browsers have additional
-     * quirks, to address with guidelines such as: <ul>
-     *
-     *  <li> Processing instructions may be rendered, so avoid them.
-     *          (Similarly for an XML declaration.)
-     *  <li> Embedded style sheets and scripts should not contain XML
-     *          markup delimiters:  &amp;, &lt;, and ]]&gt; are trouble.
-     *  <li> Attribute values should not have line breaks or multiple
-     *          consecutive white space characters.
-     *  <li> Use no more than one of the deprecated (transitional)
-     *          <em>&lt;isindex&gt;</em> elements.
-     *  <li> Some boolean attributes (such as <em>compact, checked,
-     *          disabled, readonly, selected,</em> and more) confuse
-     *          some browsers, since they only understand minimized
-     *          versions which are illegal in XML.
-     *  </ul>
-     *
-     * <p> Also, some characteristics of the resulting output may be
-     * a function of whether the document is later given a MIME
-     * content type of <em>text/html</em> rather than one indicating
-     * XML (<em>application/xml</em> or <em>text/xml</em>).  Worse,
-     * some browsers ignore MIME content types and prefer to rely URI
-     * name suffixes -- so an "index.xml" could always be XML, never
-     * XHTML, no matter its MIME type.
-     */
-    final public void setXhtml (boolean value)
-    {
-        if (locator != null)
-            throw new IllegalStateException ("started parsing");
-        xhtml = value;
-        if (xhtml)
-            canonical = false;
-    }
-
-    /**
-     * Returns true if the output attempts to echo the input following
-     * "transitional" XHTML rules and matching the "HTML Compatibility
-     * Guidelines" so that an HTML version 3 browser can read the output
-     * as HTML; returns false (the default) othewise.
-     */
-    final public boolean isXhtml ()
-    {
-        return xhtml;
-    }
-
-    /**
-     * Controls whether the output text contains references to
-     * entities (the default), or instead contains the expanded
-     * values of those entities.
-     */
-    final public void setExpandingEntities (boolean value)
-    {
-        if (locator != null)
-            throw new IllegalStateException ("started parsing");
-        expandingEntities = value;
-        if (!expandingEntities)
-            canonical = false;
-    }
-
-    /**
-     * Returns true if the output will have no entity references;
-     * returns false (the default) otherwise.
-     */
-    final public boolean isExpandingEntities ()
-    {
-        return expandingEntities;
-    }
-
-    /**
-     * Controls pretty-printing, which by default is not enabled
-     * (and currently is most useful for XHTML output).
-     * Pretty printing enables structural indentation, sorting of attributes
-     * by name, line wrapping, and potentially other mechanisms for making
-     * output more or less readable.
-     *
-     * <p> At this writing, structural indentation and line wrapping are
-     * enabled when pretty printing is enabled and the <em>xml:space</em>
-     * attribute has the value <em>default</em> (its other legal value is
-     * <em>preserve</em>, as defined in the XML specification).  The three
-     * XHTML element types which use another value are recognized by their
-     * names (namespaces are ignored).
-     *
-     * <p> Also, for the record, the "pretty" aspect of printing here
-     * is more to provide basic structure on outputs that would otherwise
-     * risk being a single long line of text.  For now, expect the
-     * structure to be ragged ... unless you'd like to submit a patch
-     * to make this be more strictly formatted!
-     *
-     * @exception IllegalStateException thrown if this method is invoked
-     *  after output has begun.
-     */
-    final public void setPrettyPrinting (boolean value)
-    {
-        if (locator != null)
-            throw new IllegalStateException ("started parsing");
-        prettyPrinting = value;
-        if (prettyPrinting)
-            canonical = false;
-    }
-
-    /**
-     * Returns value of flag controlling pretty printing.
-     */
-    final public boolean isPrettyPrinting ()
-    {
-        return prettyPrinting;
-    }
-
-
-    /**
-     * Sets the output style to be canonicalized.  Input events must
-     * meet requirements that are slightly more stringent than the
-     * basic well-formedness ones, and include:  <ul>
-     *
-     *  <li> Namespace prefixes must not have been changed from those
-     *  in the original document.  (This may only be ensured by setting
-     *  the SAX2 XMLReader <em>namespace-prefixes</em> feature flag;
-     *  by default, it is cleared.)
-     *
-     *  <li> Redundant namespace declaration attributes have been
-     *  removed.  (If an ancestor element defines a namespace prefix
-     *  and that declaration hasn't been overriden, an element must
-     *  not redeclare it.)
-     *
-     *  <li> If comments are not to be included in the canonical output,
-     *  they must first be removed from the input event stream; this
-     *  <em>Canonical XML with comments</em> by default.
-     *
-     *  <li> If the input character encoding was not UCS-based, the
-     *  character data must have been normalized using Unicode
-     *  Normalization Form C.  (UTF-8 and UTF-16 are UCS-based.)
-     *
-     *  <li> Attribute values must have been normalized, as is done
-     *  by any conformant XML processor which processes all external
-     *  parameter entities.
-     *
-     *  <li> Similarly, attribute value defaulting has been performed.
-     *
-     *  </ul>
-     *
-     * <p> Note that fragments of XML documents, as specified by an XPath
-     * node set, may be canonicalized.  In such cases, elements may need
-     * some fixup (for <em>xml:*</em> attributes and application-specific
-     * context).
-     *
-     * @exception IllegalArgumentException if the output encoding
-     *  is anything other than UTF-8.
-     */
-    final public void setCanonical (boolean value)
-    {
-        if (value && !"UTF-8".equals (encoding))
-            throw new IllegalArgumentException ("encoding != UTF-8");
-        canonical = value;
-        if (canonical) {
-            prettyPrinting = xhtml = false;
-            expandingEntities = true;
-            eol = "\n";
-        }
-    }
-
-
-    /**
-     * Returns value of flag controlling canonical output.
-     */
-    final public boolean isCanonical ()
-    {
-        return canonical;
-    }
-
-
-    /**
-     * Flushes the output stream.  When this handler is used in long lived
-     * pipelines, it can be important to flush buffered state, for example
-     * so that it can reach the disk as part of a state checkpoint.
-     */
-    final public void flush ()
-    throws IOException
-    {
-        if (out != null)
-            out.flush ();
-    }
-
-
-    // convenience routines
-
-// FIXME:  probably want a subclass that holds a lot of these...
-// and maybe more!
-
-    /**
-     * Writes the string as if characters() had been called on the contents
-     * of the string.  This is particularly useful when applications act as
-     * producers and write data directly to event consumers.
-     */
-    final public void write (String data)
-    throws SAXException
-    {
-        char    buf [] = data.toCharArray ();
-        characters (buf, 0, buf.length);
-    }
-
-
-    /**
-     * Writes an element that has content consisting of a single string.
-     * @see #writeEmptyElement
-     * @see #startElement
-     */
-    public void writeElement (
-        String uri,
-        String localName,
-        String qName,
-        Attributes atts,
-        String content
-    ) throws SAXException
-    {
-        if (content == null || content.length () == 0) {
-            writeEmptyElement (uri, localName, qName, atts);
-            return;
-        }
-        startElement (uri, localName, qName, atts);
-        char chars [] = content.toCharArray ();
-        characters (chars, 0, chars.length);
-        endElement (uri, localName, qName);
-    }
-
-
-    /**
-     * Writes an element that has content consisting of a single integer,
-     * encoded as a decimal string.
-     * @see #writeEmptyElement
-     * @see #startElement
-     */
-    public void writeElement (
-        String uri,
-        String localName,
-        String qName,
-        Attributes atts,
-        int content
-    ) throws SAXException
-    {
-        writeElement (uri, localName, qName, atts, Integer.toString (content));
-    }
-
-
-    // SAX1 ContentHandler
-    /** <b>SAX1</b>:  provides parser status information */
-    final public void setDocumentLocator (Locator l)
-    {
-        locator = l;
-    }
-
-
-    // URL for dtd that validates against all normal HTML constructs
-    private static final String xhtmlFullDTD =
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";
-
-
-    /**
-     * <b>SAX1</b>:  indicates the beginning of a document parse.
-     * If you're writing (well formed) fragments of XML, neither
-     * this nor endDocument should be called.
-     */
-    // NOT final
-    public void startDocument ()
-    throws SAXException
-    {
-        try {
-            if (out == null)
-                throw new IllegalStateException (
-                    "null Writer given to XMLWriter");
-
-            // Not all parsers provide the locator we want; this also
-            // flags whether events are being sent to this object yet.
-            // We could only have this one call if we only printed whole
-            // documents ... but we also print fragments, so most of the
-            // callbacks here replicate this test.
-
-            if (locator == null)
-                locator = new LocatorImpl ();
-
-            // Unless the data is in US-ASCII or we're canonicalizing, write
-            // the XML declaration if we know the encoding.  US-ASCII won't
-            // normally get mangled by web server confusion about the
-            // character encodings used.  Plus, it's an easy way to
-            // ensure we can write ASCII that's unlikely to confuse
-            // elderly HTML parsers.
-
-            if (!canonical
-                    && dangerMask != (short) 0xff80
-                    && encoding != null) {
-                rawWrite ("<?xml version='1.0'");
-                rawWrite (" encoding='" + encoding + "'");
-                rawWrite ("?>");
-                newline ();
-            }
-
-            if (xhtml) {
-
-                rawWrite ("<!DOCTYPE html PUBLIC");
-                newline ();
-                rawWrite ("  '-//W3C//DTD XHTML 1.0 Transitional//EN'");
-                newline ();
-                rawWrite ("  '");
-                    // NOTE:  URL (above) matches the REC
-                rawWrite (xhtmlFullDTD);
-                rawWrite ("'>");
-                newline ();
-                newline ();
-
-                // fake the rest of the handler into ignoring
-                // everything until the root element, so any
-                // XHTML DTD comments, PIs, etc are ignored
-                startedDoctype = true;
-            }
-
-            entityNestLevel = 0;
-
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    /**
-     * <b>SAX1</b>:  indicates the completion of a parse.
-     * Note that all complete SAX event streams make this call, even
-     * if an error is reported during a parse.
-     */
-    // NOT final
-    public void endDocument ()
-    throws SAXException
-    {
-        try {
-            if (!canonical) {
-                newline ();
-                newline ();
-            }
-            out.close ();
-            out = null;
-            locator = null;
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    // XHTML elements declared as EMPTY print differently
-    final private static boolean isEmptyElementTag (String tag)
-    {
-        switch (tag.charAt (0)) {
-          case 'a':     return "area".equals (tag);
-          case 'b':     return "base".equals (tag)
-                            || "basefont".equals (tag)
-                            || "br".equals (tag);
-          case 'c':     return "col".equals (tag);
-          case 'f':     return "frame".equals (tag);
-          case 'h':     return "hr".equals (tag);
-          case 'i':     return "img".equals (tag)
-                            || "input".equals (tag)
-                            || "isindex".equals (tag);
-          case 'l':     return "link".equals (tag);
-          case 'm':     return "meta".equals (tag);
-          case 'p':     return "param".equals (tag);
-        }
-        return false;
-    }
-
-    private static boolean indentBefore (String tag)
-    {
-        // basically indent before block content
-        // and within structure like tables, lists
-        switch (tag.charAt (0)) {
-          case 'a':     return "applet".equals (tag);
-          case 'b':     return "body".equals (tag)
-                            || "blockquote".equals (tag);
-          case 'c':     return "center".equals (tag);
-          case 'f':     return "frame".equals (tag)
-                            || "frameset".equals (tag);
-          case 'h':     return "head".equals (tag);
-          case 'm':     return "meta".equals (tag);
-          case 'o':     return "object".equals (tag);
-          case 'p':     return "param".equals (tag)
-                            || "pre".equals (tag);
-          case 's':     return "style".equals (tag);
-          case 't':     return "title".equals (tag)
-                            || "td".equals (tag)
-                            || "th".equals (tag);
-        }
-        // ... but not inline elements like "em", "b", "font"
-        return false;
-    }
-
-    private static boolean spaceBefore (String tag)
-    {
-        // blank line AND INDENT before certain structural content
-        switch (tag.charAt (0)) {
-          case 'h':     return "h1".equals (tag)
-                            || "h2".equals (tag)
-                            || "h3".equals (tag)
-                            || "h4".equals (tag)
-                            || "h5".equals (tag)
-                            || "h6".equals (tag)
-                            || "hr".equals (tag);
-          case 'l':     return "li".equals (tag);
-          case 'o':     return "ol".equals (tag);
-          case 'p':     return "p".equals (tag);
-          case 't':     return "table".equals (tag)
-                            || "tr".equals (tag);
-          case 'u':     return "ul".equals (tag);
-        }
-        return false;
-    }
-
-    // XHTML DTDs say these three have xml:space="preserve"
-    private static boolean spacePreserve (String tag)
-    {
-        return "pre".equals (tag)
-                || "style".equals (tag)
-                || "script".equals (tag);
-    }
-
-    /**
-     * <b>SAX2</b>:  ignored.
-     */
-    final public void startPrefixMapping (String prefix, String uri)
-        {}
-
-    /**
-     * <b>SAX2</b>:  ignored.
-     */
-    final public void endPrefixMapping (String prefix)
-        {}
-
-    private void writeStartTag (
-        String name,
-        Attributes atts,
-        boolean isEmpty
-    ) throws SAXException, IOException
-    {
-        rawWrite ('<');
-        rawWrite (name);
-
-        // write out attributes ... sorting is particularly useful
-        // with output that's been heavily defaulted.
-        if (atts != null && atts.getLength () != 0) {
-
-            // Set up to write, with optional sorting
-            int         indices [] = new int [atts.getLength ()];
-
-            for (int i= 0; i < indices.length; i++)
-                indices [i] = i;
-
-            // optionally sort
-
-// FIXME:  canon xml demands xmlns nodes go first,
-// and sorting by URI first (empty first) then localname
-// it should maybe use a different sort
-
-            if (canonical || prettyPrinting) {
-
-                // insertion sort by attribute name
-                for (int i = 1; i < indices.length; i++) {
-                    int n = indices [i], j;
-                    String      s = atts.getQName (n);
-
-                    for (j = i - 1; j >= 0; j--) {
-                        if (s.compareTo (atts.getQName (indices [j]))
-                                >= 0)
-                            break;
-                        indices [j + 1] = indices [j];
-                    }
-                    indices [j + 1] = n;
-                }
-            }
-
-            // write, sorted or no
-            for (int i= 0; i < indices.length; i++) {
-                String  s = atts.getQName (indices [i]);
-
-                    if (s == null || "".equals (s))
-                        throw new IllegalArgumentException ("no XML name");
-                rawWrite (" ");
-                rawWrite (s);
-                rawWrite ("=");
-                writeQuotedValue (atts.getValue (indices [i]),
-                    CTX_ATTRIBUTE);
-            }
-        }
-        if (isEmpty)
-            rawWrite (" /");
-        rawWrite ('>');
-    }
-
-    /**
-     * <b>SAX2</b>:  indicates the start of an element.
-     * When XHTML is in use, avoid attribute values with
-     * line breaks or multiple whitespace characters, since
-     * not all user agents handle them correctly.
-     */
-    final public void startElement (
-        String uri,
-        String localName,
-        String qName,
-        Attributes atts
-    ) throws SAXException
-    {
-        startedDoctype = false;
-
-        if (locator == null)
-            locator = new LocatorImpl ();
-
-        if (qName == null || "".equals (qName))
-            throw new IllegalArgumentException ("no XML name");
-
-        try {
-            if (entityNestLevel != 0)
-                return;
-            if (prettyPrinting) {
-                String whitespace = null;
-
-                if (xhtml && spacePreserve (qName))
-                    whitespace = "preserve";
-                else if (atts != null)
-                    whitespace = atts.getValue ("xml:space");
-                if (whitespace == null)
-                    whitespace = (String) space.peek ();
-                space.push (whitespace);
-
-                if ("default".equals (whitespace)) {
-                    if (xhtml) {
-                        if (spaceBefore (qName)) {
-                            newline ();
-                            doIndent ();
-                        } else if (indentBefore (qName))
-                            doIndent ();
-                        // else it's inlined, modulo line length
-                        // FIXME: incrementing element nest level
-                        // for inlined elements causes ugliness
-                    } else
-                        doIndent ();
-                }
-            }
-            elementNestLevel++;
-            writeStartTag (qName, atts, xhtml && isEmptyElementTag (qName));
-
-            if (xhtml) {
-// FIXME: if this is an XHTML "pre" element, turn
-// off automatic wrapping.
-            }
-
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    /**
-     * Writes an empty element.
-     * @see #startElement
-     */
-    public void writeEmptyElement (
-        String uri,
-        String localName,
-        String qName,
-        Attributes atts
-    ) throws SAXException
-    {
-        if (canonical) {
-            startElement (uri, localName, qName, atts);
-            endElement (uri, localName, qName);
-        } else {
-            try {
-                writeStartTag (qName, atts, true);
-            } catch (IOException e) {
-                fatal ("can't write", e);
-            }
-        }
-    }
-
-
-    /** <b>SAX2</b>:  indicates the end of an element */
-    final public void endElement (String uri, String localName, String qName)
-    throws SAXException
-    {
-        if (qName == null || "".equals (qName))
-            throw new IllegalArgumentException ("no XML name");
-
-        try {
-            elementNestLevel--;
-            if (entityNestLevel != 0)
-                return;
-            if (xhtml && isEmptyElementTag (qName))
-                return;
-            rawWrite ("</");
-            rawWrite (qName);
-            rawWrite ('>');
-
-            if (prettyPrinting) {
-                if (!space.empty ())
-                    space.pop ();
-                else
-                    fatal ("stack discipline", null);
-            }
-            if (elementNestLevel == 0)
-                inEpilogue = true;
-
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    /** <b>SAX1</b>:  reports content characters */
-    final public void characters (char ch [], int start, int length)
-    throws SAXException
-    {
-        if (locator == null)
-            locator = new LocatorImpl ();
-
-        try {
-            if (entityNestLevel != 0)
-                return;
-            if (inCDATA) {
-                escapeChars (ch, start, length, CTX_UNPARSED);
-            } else {
-                escapeChars (ch, start, length, CTX_CONTENT);
-            }
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    /** <b>SAX1</b>:  reports ignorable whitespace */
-    final public void ignorableWhitespace (char ch [], int start, int length)
-    throws SAXException
-    {
-        if (locator == null)
-            locator = new LocatorImpl ();
-
-        try {
-            if (entityNestLevel != 0)
-                return;
-            // don't forget to map NL to CRLF, CR, etc
-            escapeChars (ch, start, length, CTX_CONTENT);
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    /**
-     * <b>SAX1</b>:  reports a PI.
-     * This doesn't check for illegal target names, such as "xml" or "XML",
-     * or namespace-incompatible ones like "big:dog"; the caller is
-     * responsible for ensuring those names are legal.
-     */
-    final public void processingInstruction (String target, String data)
-    throws SAXException
-    {
-        if (locator == null)
-            locator = new LocatorImpl ();
-
-        // don't print internal subset for XHTML
-        if (xhtml && startedDoctype)
-            return;
-
-        // ancient HTML browsers might render these ... their loss.
-        // to prevent:  "if (xhtml) return;".
-
-        try {
-            if (entityNestLevel != 0)
-                return;
-            if (canonical && inEpilogue)
-                newline ();
-            rawWrite ("<?");
-            rawWrite (target);
-            rawWrite (' ');
-            escapeChars (data.toCharArray (), -1, -1, CTX_UNPARSED);
-            rawWrite ("?>");
-            if (elementNestLevel == 0 && !(canonical && inEpilogue))
-                newline ();
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    /** <b>SAX1</b>: indicates a non-expanded entity reference */
-    public void skippedEntity (String name)
-    throws SAXException
-    {
-        try {
-            rawWrite ("&");
-            rawWrite (name);
-            rawWrite (";");
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    // SAX2 LexicalHandler
-
-    /** <b>SAX2</b>:  called before parsing CDATA characters */
-    final public void startCDATA ()
-    throws SAXException
-    {
-        if (locator == null)
-            locator = new LocatorImpl ();
-
-        if (canonical)
-            return;
-
-        try {
-            inCDATA = true;
-            if (entityNestLevel == 0)
-                rawWrite ("<![CDATA[");
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    /** <b>SAX2</b>:  called after parsing CDATA characters */
-    final public void endCDATA ()
-    throws SAXException
-    {
-        if (canonical)
-            return;
-
-        try {
-            inCDATA = false;
-            if (entityNestLevel == 0)
-                rawWrite ("]]>");
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    /**
-     * <b>SAX2</b>:  called when the doctype is partially parsed
-     * Note that this, like other doctype related calls, is ignored
-     * when XHTML is in use.
-     */
-    final public void startDTD (String name, String publicId, String systemId)
-    throws SAXException
-    {
-        if (locator == null)
-            locator = new LocatorImpl ();
-        if (xhtml)
-            return;
-        try {
-            inDoctype = startedDoctype = true;
-            if (canonical)
-                return;
-            rawWrite ("<!DOCTYPE ");
-            rawWrite (name);
-            rawWrite (' ');
-
-            if (!expandingEntities) {
-                if (publicId != null)
-                    rawWrite ("PUBLIC '" + publicId + "' '" + systemId + "' ");
-                else if (systemId != null)
-                    rawWrite ("SYSTEM '" + systemId + "' ");
-            }
-
-            rawWrite ('[');
-            newline ();
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    /** <b>SAX2</b>:  called after the doctype is parsed */
-    final public void endDTD ()
-    throws SAXException
-    {
-        inDoctype = false;
-        if (canonical || xhtml)
-            return;
-        try {
-            rawWrite ("]>");
-            newline ();
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    /**
-     * <b>SAX2</b>:  called before parsing a general entity in content
-     */
-    final public void startEntity (String name)
-    throws SAXException
-    {
-        try {
-            boolean     writeEOL = true;
-
-            // Predefined XHTML entities (for characters) will get
-            // mapped back later.
-            if (xhtml || expandingEntities)
-                return;
-
-            entityNestLevel++;
-            if (name.equals ("[dtd]"))
-                return;
-            if (entityNestLevel != 1)
-                return;
-            if (!name.startsWith ("%")) {
-                writeEOL = false;
-                rawWrite ('&');
-            }
-            rawWrite (name);
-            rawWrite (';');
-            if (writeEOL)
-                newline ();
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    /**
-     * <b>SAX2</b>:  called after parsing a general entity in content
-     */
-    final public void endEntity (String name)
-    throws SAXException
-    {
-        if (xhtml || expandingEntities)
-            return;
-        entityNestLevel--;
-    }
-
-    /**
-     * <b>SAX2</b>:  called when comments are parsed.
-     * When XHTML is used, the old HTML tradition of using comments
-     * to for inline CSS, or for JavaScript code is  discouraged.
-     * This is because XML processors are encouraged to discard, on
-     * the grounds that comments are for users (and perhaps text
-     * editors) not programs.  Instead, use external scripts
-     */
-    final public void comment (char ch [], int start, int length)
-    throws SAXException
-    {
-        if (locator == null)
-            locator = new LocatorImpl ();
-
-        // don't print internal subset for XHTML
-        if (xhtml && startedDoctype)
-            return;
-        // don't print comment in doctype for canon xml
-        if (canonical && inDoctype)
-            return;
-
-        try {
-            boolean indent;
-
-            if (prettyPrinting && space.empty ())
-                fatal ("stack discipline", null);
-            indent = prettyPrinting && "default".equals (space.peek ());
-            if (entityNestLevel != 0)
-                return;
-            if (indent)
-                doIndent ();
-            if (canonical && inEpilogue)
-                newline ();
-            rawWrite ("<!--");
-            escapeChars (ch, start, length, CTX_UNPARSED);
-            rawWrite ("-->");
-            if (indent)
-                doIndent ();
-            if (elementNestLevel == 0 && !(canonical && inEpilogue))
-                newline ();
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    // SAX1 DTDHandler
-
-    /** <b>SAX1</b>:  called on notation declarations */
-    final public void notationDecl (String name,
-        String publicId, String systemId)
-    throws SAXException
-    {
-        if (xhtml)
-            return;
-        try {
-            // At this time, only SAX2 callbacks start these.
-            if (!startedDoctype)
-                return;
-
-            if (entityNestLevel != 0)
-                return;
-            rawWrite ("<!NOTATION " + name + " ");
-            if (publicId != null)
-                rawWrite ("PUBLIC \"" + publicId + '"');
-            else
-                rawWrite ("SYSTEM ");
-            if (systemId != null)
-                rawWrite ('"' + systemId + '"');
-            rawWrite (">");
-            newline ();
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    /** <b>SAX1</b>:  called on unparsed entity declarations */
-    final public void unparsedEntityDecl (String name,
-        String publicId, String systemId,
-        String notationName)
-    throws SAXException
-    {
-        if (xhtml)
-            return;
-        try {
-            // At this time, only SAX2 callbacks start these.
-            if (!startedDoctype)  {
-                // FIXME: write to temporary buffer, and make the start
-                // of the root element write these declarations.
-                return;
-            }
-
-            if (entityNestLevel != 0)
-                return;
-            rawWrite ("<!ENTITY " + name + " ");
-            if (publicId != null)
-                rawWrite ("PUBLIC \"" + publicId + '"');
-            else
-                rawWrite ("SYSTEM ");
-            rawWrite ('"' + systemId + '"');
-            rawWrite (" NDATA " + notationName + ">");
-            newline ();
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    // SAX2 DeclHandler
-
-    /** <b>SAX2</b>:  called on attribute declarations */
-    final public void attributeDecl (String eName, String aName,
-            String type, String mode, String value)
-    throws SAXException
-    {
-        if (xhtml)
-            return;
-        try {
-            // At this time, only SAX2 callbacks start these.
-            if (!startedDoctype)
-                return;
-            if (entityNestLevel != 0)
-                return;
-            rawWrite ("<!ATTLIST " + eName + ' ' + aName + ' ');
-            rawWrite (type);
-            rawWrite (' ');
-            if (mode != null)
-                rawWrite (mode + ' ');
-            if (value != null)
-                writeQuotedValue (value, CTX_ATTRIBUTE);
-            rawWrite ('>');
-            newline ();
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    /** <b>SAX2</b>:  called on element declarations */
-    final public void elementDecl (String name, String model)
-    throws SAXException
-    {
-        if (xhtml)
-            return;
-        try {
-            // At this time, only SAX2 callbacks start these.
-            if (!startedDoctype)
-                return;
-            if (entityNestLevel != 0)
-                return;
-            rawWrite ("<!ELEMENT " + name + ' ' + model + '>');
-            newline ();
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    /** <b>SAX2</b>:  called on external entity declarations */
-    final public void externalEntityDecl (
-        String name,
-        String publicId,
-        String systemId)
-    throws SAXException
-    {
-        if (xhtml)
-            return;
-        try {
-            // At this time, only SAX2 callbacks start these.
-            if (!startedDoctype)
-                return;
-            if (entityNestLevel != 0)
-                return;
-            rawWrite ("<!ENTITY ");
-            if (name.startsWith ("%")) {
-                rawWrite ("% ");
-                rawWrite (name.substring (1));
-            } else
-                rawWrite (name);
-            if (publicId != null)
-                rawWrite (" PUBLIC \"" + publicId + '"');
-            else
-                rawWrite (" SYSTEM ");
-            rawWrite ('"' + systemId + "\">");
-            newline ();
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    /** <b>SAX2</b>:  called on internal entity declarations */
-    final public void internalEntityDecl (String name, String value)
-    throws SAXException
-    {
-        if (xhtml)
-            return;
-        try {
-            // At this time, only SAX2 callbacks start these.
-            if (!startedDoctype)
-                return;
-            if (entityNestLevel != 0)
-                return;
-            rawWrite ("<!ENTITY ");
-            if (name.startsWith ("%")) {
-                rawWrite ("% ");
-                rawWrite (name.substring (1));
-            } else
-                rawWrite (name);
-            rawWrite (' ');
-            writeQuotedValue (value, CTX_ENTITY);
-            rawWrite ('>');
-            newline ();
-        } catch (IOException e) {
-            fatal ("can't write", e);
-        }
-    }
-
-    private void writeQuotedValue (String value, int code)
-    throws SAXException, IOException
-    {
-        char    buf [] = value.toCharArray ();
-        int     off = 0, len = buf.length;
-
-        // we can't add line breaks to attribute/entity/... values
-        noWrap = true;
-        rawWrite ('"');
-        escapeChars (buf, off, len, code);
-        rawWrite ('"');
-        noWrap = false;
-    }
-
-    // From "HTMLlat1x.ent" ... names of entities for ISO-8859-1
-    // (Latin/1) characters, all codes:  160-255 (0xA0-0xFF).
-    // Codes 128-159 have no assigned values.
-    private static final String HTMLlat1x [] = {
-        // 160
-        "nbsp", "iexcl", "cent", "pound", "curren",
-        "yen", "brvbar", "sect", "uml", "copy",
-
-        // 170
-        "ordf", "laquo", "not", "shy", "reg",
-        "macr", "deg", "plusmn", "sup2", "sup3",
-
-        // 180
-        "acute", "micro", "para", "middot", "cedil",
-        "sup1", "ordm", "raquo", "frac14", "frac12",
-
-        // 190
-        "frac34", "iquest", "Agrave", "Aacute", "Acirc",
-        "Atilde", "Auml", "Aring", "AElig", "Ccedil",
-
-        // 200
-        "Egrave", "Eacute", "Ecirc", "Euml", "Igrave",
-        "Iacute", "Icirc", "Iuml", "ETH", "Ntilde",
-
-        // 210
-        "Ograve", "Oacute", "Ocirc", "Otilde", "Ouml",
-        "times", "Oslash", "Ugrave", "Uacute", "Ucirc",
-
-        // 220
-        "Uuml", "Yacute", "THORN", "szlig", "agrave",
-        "aacute", "acirc", "atilde", "auml", "aring",
-
-        // 230
-        "aelig", "ccedil", "egrave", "eacute", "ecirc",
-        "euml", "igrave", "iacute", "icirc", "iuml",
-
-        // 240
-        "eth", "ntilde", "ograve", "oacute", "ocirc",
-        "otilde", "ouml", "divide", "oslash", "ugrave",
-
-        // 250
-        "uacute", "ucirc", "uuml", "yacute", "thorn",
-        "yuml"
-    };
-
-    // From "HTMLsymbolx.ent" ... some of the symbols that
-    // we can conveniently handle.  Entities for the Greek.
-    // alphabet (upper and lower cases) are compact.
-    private static final String HTMLsymbolx_GR [] = {
-        // 913
-        "Alpha", "Beta", "Gamma", "Delta", "Epsilon",
-        "Zeta", "Eta", "Theta", "Iota", "Kappa",
-
-        // 923
-        "Lambda", "Mu", "Nu", "Xi", "Omicron",
-        "Pi", "Rho", null, "Sigma", "Tau",
-
-        // 933
-        "Upsilon", "Phi", "Chi", "Psi", "Omega"
-    };
-
-    private static final String HTMLsymbolx_gr [] = {
-        // 945
-        "alpha", "beta", "gamma", "delta", "epsilon",
-        "zeta", "eta", "theta", "iota", "kappa",
-
-        // 955
-        "lambda", "mu", "nu", "xi", "omicron",
-        "pi", "rho", "sigmaf", "sigma", "tau",
-
-        // 965
-        "upsilon", "phi", "chi", "psi", "omega"
-    };
-
-
-    // General routine to write text and substitute predefined
-    // entities (XML, and a special case for XHTML) as needed.
-    private void escapeChars (char buf [], int off, int len, int code)
-    throws SAXException, IOException
-    {
-        int     first = 0;
-
-        if (off < 0) {
-            off = 0;
-            len = buf.length;
-        }
-        for (int i = 0; i < len; i++) {
-            String      esc;
-            char        c = buf [off + i];
-
-            switch (c) {
-              // Note that CTX_ATTRIBUTE isn't explicitly tested here;
-              // all syntax delimiters are escaped in CTX_ATTRIBUTE,
-              // otherwise it's similar to CTX_CONTENT
-
-              // ampersand flags entity references; entity replacement
-              // text has unexpanded references, other text doesn't.
-              case '&':
-                if (code == CTX_ENTITY || code == CTX_UNPARSED)
-                    continue;
-                esc = "amp";
-                break;
-
-              // attributes and text may NOT have literal '<', but
-              // entities may have markup constructs
-              case '<':
-                if (code == CTX_ENTITY || code == CTX_UNPARSED)
-                    continue;
-                esc = "lt";
-                break;
-
-              // as above re markup constructs; but otherwise
-              // except when canonicalizing, this is for consistency
-              case '>':
-                if (code == CTX_ENTITY || code == CTX_UNPARSED)
-                    continue;
-                esc = "gt";
-                break;
-              case '\'':
-                if (code == CTX_CONTENT || code == CTX_UNPARSED)
-                    continue;
-                if (canonical)
-                    continue;
-                esc = "apos";
-                break;
-
-              // needed when printing quoted attribute/entity values
-              case '"':
-                if (code == CTX_CONTENT || code == CTX_UNPARSED)
-                    continue;
-                esc = "quot";
-                break;
-
-              // make line ends work per host OS convention
-              case '\n':
-                esc = eol;
-                break;
-
-              //
-              // No other characters NEED special treatment ... except
-              // for encoding-specific issues, like whether the character
-              // can really be represented in that encoding.
-              //
-              default:
-                //
-                // There are characters we can never write safely; getting
-                // them is an error.
-                //
-                //   (a) They're never legal in XML ... detected by range
-                //      checks, and (eventually) by remerging surrogate
-                //      pairs on output.  (Easy error for apps to prevent.)
-                //
-                //   (b) This encoding can't represent them, and we
-                //      can't make reference substitution (e.g. inside
-                //      CDATA sections, names, PI data, etc).  (Hard for
-                //      apps to prevent, except by using UTF-8 or UTF-16
-                //      as their output encoding.)
-                //
-                // We know a very little bit about what characters
-                // the US-ASCII and ISO-8859-1 encodings support.  For
-                // other encodings we can't detect the second type of
-                // error at all.  (Never an issue for UTF-8 or UTF-16.)
-                //
-
-// FIXME:  CR in CDATA is an error; in text, turn to a char ref
-
-// FIXME:  CR/LF/TAB in attributes should become char refs
-
-                if ((c > 0xfffd)
-                        || ((c < 0x0020) && !((c == 0x0009)
-                                || (c == 0x000A) || (c == 0x000D)))
-                        || (((c & dangerMask) != 0)
-                            && (code == CTX_UNPARSED))) {
-
-                    // if case (b) in CDATA, we might end the section,
-                    // write a reference, then restart ... possible
-                    // in one DOM L3 draft.
-
-                    throw new CharConversionException (
-                            "Illegal or non-writable character: U+"
-                            + Integer.toHexString (c));
-                }
-
-                //
-                // If the output encoding represents the character
-                // directly, let it do so!  Else we'll escape it.
-                //
-                if ((c & dangerMask) == 0)
-                    continue;
-                esc = null;
-
-                // Avoid numeric refs where symbolic ones exist, as
-                // symbolic ones make more sense to humans reading!
-                if (xhtml) {
-                    // all the HTMLlat1x.ent entities
-                    // (all the "ISO-8859-1" characters)
-                    if (c >= 160 && c <= 255)
-                        esc = HTMLlat1x [c - 160];
-
-                    // not quite half the HTMLsymbolx.ent entities
-                    else if (c >= 913 && c <= 937)
-                        esc = HTMLsymbolx_GR [c - 913];
-                    else if (c >= 945 && c <= 969)
-                        esc = HTMLsymbolx_gr [c - 945];
-
-                    else switch (c) {
-                        // all of the HTMLspecialx.ent entities
-                        case  338: esc = "OElig";       break;
-                        case  339: esc = "oelig";       break;
-                        case  352: esc = "Scaron";      break;
-                        case  353: esc = "scaron";      break;
-                        case  376: esc = "Yuml";        break;
-                        case  710: esc = "circ";        break;
-                        case  732: esc = "tilde";       break;
-                        case 8194: esc = "ensp";        break;
-                        case 8195: esc = "emsp";        break;
-                        case 8201: esc = "thinsp";      break;
-                        case 8204: esc = "zwnj";        break;
-                        case 8205: esc = "zwj";         break;
-                        case 8206: esc = "lrm";         break;
-                        case 8207: esc = "rlm";         break;
-                        case 8211: esc = "ndash";       break;
-                        case 8212: esc = "mdash";       break;
-                        case 8216: esc = "lsquo";       break;
-                        case 8217: esc = "rsquo";       break;
-                        case 8218: esc = "sbquo";       break;
-                        case 8220: esc = "ldquo";       break;
-                        case 8221: esc = "rdquo";       break;
-                        case 8222: esc = "bdquo";       break;
-                        case 8224: esc = "dagger";      break;
-                        case 8225: esc = "Dagger";      break;
-                        case 8240: esc = "permil";      break;
-                        case 8249: esc = "lsaquo";      break;
-                        case 8250: esc = "rsaquo";      break;
-                        case 8364: esc = "euro";        break;
-
-                        // the other HTMLsymbox.ent entities
-                        case  402: esc = "fnof";        break;
-                        case  977: esc = "thetasym";    break;
-                        case  978: esc = "upsih";       break;
-                        case  982: esc = "piv";         break;
-                        case 8226: esc = "bull";        break;
-                        case 8230: esc = "hellip";      break;
-                        case 8242: esc = "prime";       break;
-                        case 8243: esc = "Prime";       break;
-                        case 8254: esc = "oline";       break;
-                        case 8260: esc = "frasl";       break;
-                        case 8472: esc = "weierp";      break;
-                        case 8465: esc = "image";       break;
-                        case 8476: esc = "real";        break;
-                        case 8482: esc = "trade";       break;
-                        case 8501: esc = "alefsym";     break;
-                        case 8592: esc = "larr";        break;
-                        case 8593: esc = "uarr";        break;
-                        case 8594: esc = "rarr";        break;
-                        case 8595: esc = "darr";        break;
-                        case 8596: esc = "harr";        break;
-                        case 8629: esc = "crarr";       break;
-                        case 8656: esc = "lArr";        break;
-                        case 8657: esc = "uArr";        break;
-                        case 8658: esc = "rArr";        break;
-                        case 8659: esc = "dArr";        break;
-                        case 8660: esc = "hArr";        break;
-                        case 8704: esc = "forall";      break;
-                        case 8706: esc = "part";        break;
-                        case 8707: esc = "exist";       break;
-                        case 8709: esc = "empty";       break;
-                        case 8711: esc = "nabla";       break;
-                        case 8712: esc = "isin";        break;
-                        case 8713: esc = "notin";       break;
-                        case 8715: esc = "ni";          break;
-                        case 8719: esc = "prod";        break;
-                        case 8721: esc = "sum";         break;
-                        case 8722: esc = "minus";       break;
-                        case 8727: esc = "lowast";      break;
-                        case 8730: esc = "radic";       break;
-                        case 8733: esc = "prop";        break;
-                        case 8734: esc = "infin";       break;
-                        case 8736: esc = "ang";         break;
-                        case 8743: esc = "and";         break;
-                        case 8744: esc = "or";          break;
-                        case 8745: esc = "cap";         break;
-                        case 8746: esc = "cup";         break;
-                        case 8747: esc = "int";         break;
-                        case 8756: esc = "there4";      break;
-                        case 8764: esc = "sim";         break;
-                        case 8773: esc = "cong";        break;
-                        case 8776: esc = "asymp";       break;
-                        case 8800: esc = "ne";          break;
-                        case 8801: esc = "equiv";       break;
-                        case 8804: esc = "le";          break;
-                        case 8805: esc = "ge";          break;
-                        case 8834: esc = "sub";         break;
-                        case 8835: esc = "sup";         break;
-                        case 8836: esc = "nsub";        break;
-                        case 8838: esc = "sube";        break;
-                        case 8839: esc = "supe";        break;
-                        case 8853: esc = "oplus";       break;
-                        case 8855: esc = "otimes";      break;
-                        case 8869: esc = "perp";        break;
-                        case 8901: esc = "sdot";        break;
-                        case 8968: esc = "lceil";       break;
-                        case 8969: esc = "rceil";       break;
-                        case 8970: esc = "lfloor";      break;
-                        case 8971: esc = "rfloor";      break;
-                        case 9001: esc = "lang";        break;
-                        case 9002: esc = "rang";        break;
-                        case 9674: esc = "loz";         break;
-                        case 9824: esc = "spades";      break;
-                        case 9827: esc = "clubs";       break;
-                        case 9829: esc = "hearts";      break;
-                        case 9830: esc = "diams";       break;
-                    }
-                }
-
-                // else escape with numeric char refs
-                if (esc == null) {
-                    stringBuf.setLength (0);
-                    stringBuf.append ("#x");
-                    stringBuf.append (Integer.toHexString (c).toUpperCase ());
-                    esc = stringBuf.toString ();
-
-                    // FIXME:  We don't write surrogate pairs correctly.
-                    // They should work as one ref per character, since
-                    // each pair is one character.  For reading back into
-                    // Unicode, it matters beginning in Unicode 3.1 ...
-                }
-                break;
-            }
-            if (i != first)
-                rawWrite (buf, off + first, i - first);
-            first = i + 1;
-            if (esc == eol)
-                newline ();
-            else {
-                rawWrite ('&');
-                rawWrite (esc);
-                rawWrite (';');
-            }
-        }
-        if (first < len)
-            rawWrite (buf, off + first, len - first);
-    }
-
-
-
-    private void newline ()
-    throws SAXException, IOException
-    {
-        out.write (eol);
-        column = 0;
-    }
-
-    private void doIndent ()
-    throws SAXException, IOException
-    {
-        int     space = elementNestLevel * 2;
-
-        newline ();
-        column = space;
-        // track tabs only at line starts
-        while (space > 8) {
-            out.write ("\t");
-            space -= 8;
-        }
-        while (space > 0) {
-            out.write ("  ");
-            space -= 2;
-        }
-    }
-
-    private void rawWrite (char c)
-    throws IOException
-    {
-        out.write (c);
-        column++;
-    }
-
-    private void rawWrite (String s)
-    throws SAXException, IOException
-    {
-        if (prettyPrinting && "default".equals (space.peek ())) {
-            char data [] = s.toCharArray ();
-            rawWrite (data, 0, data.length);
-        } else {
-            out.write (s);
-            column += s.length ();
-        }
-    }
-
-    // NOTE:  if xhtml, the REC gives some rules about whitespace
-    // which we could follow ... notably, many places where conformant
-    // agents "must" consolidate/normalize whitespace.  Line ends can
-    // be removed there, etc.  This may not be the right place to do
-    // such mappings though.
-
-    // Line buffering may help clarify algorithms and improve results.
-
-    // It's likely xml:space needs more attention.
-
-    private void rawWrite (char buf [], int offset, int length)
-    throws SAXException, IOException
-    {
-        boolean         wrap;
-
-        if (prettyPrinting && space.empty ())
-            fatal ("stack discipline", null);
-
-        wrap = prettyPrinting && "default".equals (space.peek ());
-        if (!wrap) {
-            out.write (buf, offset, length);
-            column += length;
-            return;
-        }
-
-        // we're pretty printing and want to fill lines out only
-        // to the desired line length.
-        while (length > 0) {
-            int         target = lineLength - column;
-            boolean     wrote = false;
-
-            // Do we even have a problem?
-            if (target > length || noWrap) {
-                out.write (buf, offset, length);
-                column += length;
-                return;
-            }
-
-            // break the line at a space character, trying to fill
-            // as much of the line as possible.
-            char        c;
-
-            for (int i = target - 1; i >= 0; i--) {
-                if ((c = buf [offset + i]) == ' ' || c == '\t') {
-                    i++;
-                    out.write (buf, offset, i);
-                    doIndent ();
-                    offset += i;
-                    length -= i;
-                    wrote = true;
-                    break;
-                }
-            }
-            if (wrote)
-                continue;
-
-            // no space character permitting break before target
-            // line length is filled.  So, take the next one.
-            if (target < 0)
-                target = 0;
-            for (int i = target; i < length; i++)
-                if ((c = buf [offset + i]) == ' ' || c == '\t') {
-                    i++;
-                    out.write (buf, offset, i);
-                    doIndent ();
-                    offset += i;
-                    length -= i;
-                    wrote = true;
-                    break;
-                }
-            if (wrote)
-                continue;
-
-            // no such luck.
-            out.write (buf, offset, length);
-            column += length;
-            break;
-        }
-    }
-}
diff --git a/libjava/classpath/gnu/xml/util/package.html b/libjava/classpath/gnu/xml/util/package.html
deleted file mode 100644
index 6e6c0d7..0000000
--- a/libjava/classpath/gnu/xml/util/package.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html PUBLIC
-    "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/1999/PR-xhtml1-19991210/DTD/xhtml1-transitional.dtd">
-
-<html><head><title> org.brownell.xml package </title> </head>
-<!--
-/*
- * Copyright (C) 1999,2000 The Free Software Foundation, Inc.
- */
--->
-<body>
-    <p> This package contains XML utilities, including SAX2 XML writers
-    and a parser of DOM trees, plus a command line driver.
-    That <a href="DoParse.html">driver</a>
-    connects parsers simple processing pipelines.
-    It can be handy for command line validation or
-    transformation tasks, possibly in batch mode,
-    or within Makefiles. </p>
-
-</body></html>
-- 
cgit v1.1