summaryrefslogtreecommitdiff
path: root/libjava/gnu/xml
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2005-07-16 01:27:14 +0000
committerTom Tromey <tromey@gcc.gnu.org>2005-07-16 01:27:14 +0000
commitb0fa81eea9a270f23d6ad67ca7a6d25c18d20da1 (patch)
tree8762d1f992e2f725a6bde1ff966ed6f1e5f4f823 /libjava/gnu/xml
parentea54b29342c8506acb4f858c68340c44b72e3532 (diff)
downloadgcc-b0fa81eea9a270f23d6ad67ca7a6d25c18d20da1.tar.gz
Major merge with Classpath.
Removed many duplicate files. * HACKING: Updated.x * classpath: Imported new directory. * standard.omit: New file. * Makefile.in, aclocal.m4, configure: Rebuilt. * sources.am: New file. * configure.ac: Run Classpath configure script. Moved code around to support. Disable xlib AWT peers (temporarily). * Makefile.am (SUBDIRS): Added 'classpath' (JAVAC): Removed. (AM_CPPFLAGS): Added more -I options. (BOOTCLASSPATH): Simplified. Completely redid how sources are built. Include sources.am. * include/Makefile.am (tool_include__HEADERS): Removed jni.h. * include/jni.h: Removed (in Classpath). * scripts/classes.pl: Updated to look at built classes. * scripts/makemake.tcl: New file. * testsuite/libjava.jni/jni.exp (gcj_jni_compile_c_to_so): Added -I options. (gcj_jni_invocation_compile_c_to_binary): Likewise. From-SVN: r102082
Diffstat (limited to 'libjava/gnu/xml')
-rw-r--r--libjava/gnu/xml/aelfred2/ContentHandler2.java65
-rw-r--r--libjava/gnu/xml/aelfred2/JAXPFactory.java231
-rw-r--r--libjava/gnu/xml/aelfred2/SAXDriver.java1622
-rw-r--r--libjava/gnu/xml/aelfred2/XmlParser.java5835
-rw-r--r--libjava/gnu/xml/aelfred2/XmlReader.java374
-rw-r--r--libjava/gnu/xml/dom/Consumer.java368
-rw-r--r--libjava/gnu/xml/dom/DTDAttributeTypeInfo.java84
-rw-r--r--libjava/gnu/xml/dom/DTDElementTypeInfo.java112
-rw-r--r--libjava/gnu/xml/dom/DomAttr.java380
-rw-r--r--libjava/gnu/xml/dom/DomCDATASection.java91
-rw-r--r--libjava/gnu/xml/dom/DomCharacterData.java310
-rw-r--r--libjava/gnu/xml/dom/DomComment.java81
-rw-r--r--libjava/gnu/xml/dom/DomDOMException.java175
-rw-r--r--libjava/gnu/xml/dom/DomDoctype.java455
-rw-r--r--libjava/gnu/xml/dom/DomDocument.java1387
-rw-r--r--libjava/gnu/xml/dom/DomDocumentBuilder.java159
-rw-r--r--libjava/gnu/xml/dom/DomDocumentBuilderFactory.java128
-rw-r--r--libjava/gnu/xml/dom/DomDocumentConfiguration.java260
-rw-r--r--libjava/gnu/xml/dom/DomDocumentFragment.java76
-rw-r--r--libjava/gnu/xml/dom/DomElement.java523
-rw-r--r--libjava/gnu/xml/dom/DomEntity.java147
-rw-r--r--libjava/gnu/xml/dom/DomEntityReference.java130
-rw-r--r--libjava/gnu/xml/dom/DomEvent.java345
-rw-r--r--libjava/gnu/xml/dom/DomExtern.java117
-rw-r--r--libjava/gnu/xml/dom/DomImpl.java278
-rw-r--r--libjava/gnu/xml/dom/DomIterator.java373
-rw-r--r--libjava/gnu/xml/dom/DomNSResolverContext.java90
-rw-r--r--libjava/gnu/xml/dom/DomNamedNodeMap.java417
-rw-r--r--libjava/gnu/xml/dom/DomNode.java2189
-rw-r--r--libjava/gnu/xml/dom/DomNodeIterator.java327
-rw-r--r--libjava/gnu/xml/dom/DomNotation.java103
-rw-r--r--libjava/gnu/xml/dom/DomNsNode.java200
-rw-r--r--libjava/gnu/xml/dom/DomProcessingInstruction.java147
-rw-r--r--libjava/gnu/xml/dom/DomText.java220
-rw-r--r--libjava/gnu/xml/dom/DomXPathExpression.java147
-rw-r--r--libjava/gnu/xml/dom/DomXPathNSResolver.java64
-rw-r--r--libjava/gnu/xml/dom/DomXPathResult.java233
-rw-r--r--libjava/gnu/xml/dom/ImplementationList.java70
-rw-r--r--libjava/gnu/xml/dom/ImplementationSource.java167
-rw-r--r--libjava/gnu/xml/dom/JAXPFactory.java286
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLAnchorElement.java189
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLAppletElement.java169
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLAreaElement.java139
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLBRElement.java69
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLBaseElement.java79
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLBaseFontElement.java89
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLBodyElement.java119
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLButtonElement.java121
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLCollection.java218
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLDListElement.java69
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLDirectoryElement.java69
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLDivElement.java69
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLDocument.java425
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLElement.java269
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLFieldSetElement.java65
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLFontElement.java89
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLFormElement.java150
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLFrameElement.java146
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLFrameSetElement.java79
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLHRElement.java99
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLHeadElement.java69
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLHeadingElement.java69
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLHtmlElement.java69
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLIFrameElement.java166
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLImageElement.java179
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLImpl.java67
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLInputElement.java266
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLIsIndexElement.java75
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLLIElement.java79
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLLabelElement.java85
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLLegendElement.java85
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLLinkElement.java149
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLMapElement.java79
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLMenuElement.java69
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLMetaElement.java99
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLModElement.java79
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLOListElement.java89
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLObjectElement.java242
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLOptGroupElement.java79
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLOptionElement.java131
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLParagraphElement.java69
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLParamElement.java99
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLParser.java266
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLPreElement.java69
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLQuoteElement.java69
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLScriptElement.java129
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLSelectElement.java211
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLStyleElement.java89
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java70
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLTableCellElement.java205
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLTableColElement.java120
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLTableElement.java383
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLTableRowElement.java225
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLTableSectionElement.java158
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLTextAreaElement.java182
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLTitleElement.java69
-rw-r--r--libjava/gnu/xml/dom/html2/DomHTMLUListElement.java79
-rw-r--r--libjava/gnu/xml/dom/ls/DomLSException.java57
-rw-r--r--libjava/gnu/xml/dom/ls/DomLSInput.java158
-rw-r--r--libjava/gnu/xml/dom/ls/DomLSOutput.java98
-rw-r--r--libjava/gnu/xml/dom/ls/DomLSParser.java574
-rw-r--r--libjava/gnu/xml/dom/ls/DomLSSerializer.java354
-rw-r--r--libjava/gnu/xml/dom/ls/FilteredSAXEventSink.java354
-rw-r--r--libjava/gnu/xml/dom/ls/ReaderInputStream.java237
-rw-r--r--libjava/gnu/xml/dom/ls/SAXEventSink.java557
-rw-r--r--libjava/gnu/xml/dom/ls/WriterOutputStream.java98
-rw-r--r--libjava/gnu/xml/pipeline/CallFilter.java257
-rw-r--r--libjava/gnu/xml/pipeline/DomConsumer.java982
-rw-r--r--libjava/gnu/xml/pipeline/EventConsumer.java95
-rw-r--r--libjava/gnu/xml/pipeline/EventFilter.java809
-rw-r--r--libjava/gnu/xml/pipeline/LinkFilter.java242
-rw-r--r--libjava/gnu/xml/pipeline/NSFilter.java341
-rw-r--r--libjava/gnu/xml/pipeline/PipelineFactory.java723
-rw-r--r--libjava/gnu/xml/pipeline/TeeConsumer.java417
-rw-r--r--libjava/gnu/xml/pipeline/TextConsumer.java117
-rw-r--r--libjava/gnu/xml/pipeline/ValidationConsumer.java1929
-rw-r--r--libjava/gnu/xml/pipeline/WellFormednessFilter.java363
-rw-r--r--libjava/gnu/xml/pipeline/XIncludeFilter.java579
-rw-r--r--libjava/gnu/xml/pipeline/XsltFilter.java130
-rw-r--r--libjava/gnu/xml/transform/AbstractNumberNode.java321
-rw-r--r--libjava/gnu/xml/transform/ApplyImportsNode.java85
-rw-r--r--libjava/gnu/xml/transform/ApplyTemplatesNode.java193
-rw-r--r--libjava/gnu/xml/transform/AttributeNode.java246
-rw-r--r--libjava/gnu/xml/transform/AttributeSet.java67
-rw-r--r--libjava/gnu/xml/transform/Bindings.java242
-rw-r--r--libjava/gnu/xml/transform/CallTemplateNode.java130
-rw-r--r--libjava/gnu/xml/transform/ChooseNode.java93
-rw-r--r--libjava/gnu/xml/transform/CommentNode.java115
-rw-r--r--libjava/gnu/xml/transform/CopyNode.java179
-rw-r--r--libjava/gnu/xml/transform/CopyOfNode.java179
-rw-r--r--libjava/gnu/xml/transform/CurrentFunction.java98
-rw-r--r--libjava/gnu/xml/transform/DOMSourceLocator.java84
-rw-r--r--libjava/gnu/xml/transform/DocumentFunction.java243
-rw-r--r--libjava/gnu/xml/transform/ElementAvailableFunction.java169
-rw-r--r--libjava/gnu/xml/transform/ElementNode.java279
-rw-r--r--libjava/gnu/xml/transform/ErrorListenerErrorHandler.java101
-rw-r--r--libjava/gnu/xml/transform/ForEachNode.java149
-rw-r--r--libjava/gnu/xml/transform/FormatNumberFunction.java132
-rw-r--r--libjava/gnu/xml/transform/FunctionAvailableFunction.java175
-rw-r--r--libjava/gnu/xml/transform/GenerateIdFunction.java126
-rw-r--r--libjava/gnu/xml/transform/IfNode.java107
-rw-r--r--libjava/gnu/xml/transform/Key.java71
-rw-r--r--libjava/gnu/xml/transform/KeyFunction.java216
-rw-r--r--libjava/gnu/xml/transform/LiteralNode.java225
-rw-r--r--libjava/gnu/xml/transform/MessageNode.java97
-rw-r--r--libjava/gnu/xml/transform/NodeNumberNode.java258
-rw-r--r--libjava/gnu/xml/transform/NumberNode.java85
-rw-r--r--libjava/gnu/xml/transform/OtherwiseNode.java93
-rw-r--r--libjava/gnu/xml/transform/ParameterNode.java156
-rw-r--r--libjava/gnu/xml/transform/ProcessingInstructionNode.java123
-rw-r--r--libjava/gnu/xml/transform/SAXSerializer.java305
-rw-r--r--libjava/gnu/xml/transform/SortKey.java154
-rw-r--r--libjava/gnu/xml/transform/StreamSerializer.java632
-rw-r--r--libjava/gnu/xml/transform/Stylesheet.java1728
-rw-r--r--libjava/gnu/xml/transform/SystemPropertyFunction.java128
-rw-r--r--libjava/gnu/xml/transform/Template.java252
-rw-r--r--libjava/gnu/xml/transform/TemplateNode.java115
-rw-r--r--libjava/gnu/xml/transform/TemplatesImpl.java80
-rw-r--r--libjava/gnu/xml/transform/TextNode.java116
-rw-r--r--libjava/gnu/xml/transform/TransformerFactoryImpl.java345
-rw-r--r--libjava/gnu/xml/transform/TransformerImpl.java580
-rw-r--r--libjava/gnu/xml/transform/TransformerOutputProperties.java185
-rw-r--r--libjava/gnu/xml/transform/URIResolverEntityResolver.java83
-rw-r--r--libjava/gnu/xml/transform/UnparsedEntityUriFunction.java118
-rw-r--r--libjava/gnu/xml/transform/ValueOfNode.java126
-rw-r--r--libjava/gnu/xml/transform/WhenNode.java110
-rw-r--r--libjava/gnu/xml/transform/WithParam.java110
-rw-r--r--libjava/gnu/xml/transform/XSLComparator.java124
-rw-r--r--libjava/gnu/xml/transform/XSLURIResolver.java269
-rw-r--r--libjava/gnu/xml/util/DoParse.java300
-rw-r--r--libjava/gnu/xml/util/DomParser.java804
-rw-r--r--libjava/gnu/xml/util/Resolver.java263
-rw-r--r--libjava/gnu/xml/util/SAXNullTransformerFactory.java676
-rw-r--r--libjava/gnu/xml/util/XCat.java1609
-rw-r--r--libjava/gnu/xml/util/XHTMLWriter.java112
-rw-r--r--libjava/gnu/xml/util/XMLWriter.java1927
-rw-r--r--libjava/gnu/xml/xpath/AndExpr.java81
-rw-r--r--libjava/gnu/xml/xpath/ArithmeticExpr.java148
-rw-r--r--libjava/gnu/xml/xpath/BooleanFunction.java89
-rw-r--r--libjava/gnu/xml/xpath/CeilingFunction.java83
-rw-r--r--libjava/gnu/xml/xpath/ConcatFunction.java100
-rw-r--r--libjava/gnu/xml/xpath/Constant.java92
-rw-r--r--libjava/gnu/xml/xpath/ContainsFunction.java86
-rw-r--r--libjava/gnu/xml/xpath/CountFunction.java82
-rw-r--r--libjava/gnu/xml/xpath/DocumentOrderComparator.java63
-rw-r--r--libjava/gnu/xml/xpath/EqualityExpr.java258
-rw-r--r--libjava/gnu/xml/xpath/Expr.java474
-rw-r--r--libjava/gnu/xml/xpath/FalseFunction.java66
-rw-r--r--libjava/gnu/xml/xpath/FloorFunction.java83
-rw-r--r--libjava/gnu/xml/xpath/Function.java57
-rw-r--r--libjava/gnu/xml/xpath/FunctionCall.java150
-rw-r--r--libjava/gnu/xml/xpath/IdFunction.java96
-rw-r--r--libjava/gnu/xml/xpath/LangFunction.java110
-rw-r--r--libjava/gnu/xml/xpath/LastFunction.java67
-rw-r--r--libjava/gnu/xml/xpath/LocalNameFunction.java87
-rw-r--r--libjava/gnu/xml/xpath/NameFunction.java95
-rw-r--r--libjava/gnu/xml/xpath/NameTest.java131
-rw-r--r--libjava/gnu/xml/xpath/NamespaceTest.java118
-rw-r--r--libjava/gnu/xml/xpath/NamespaceUriFunction.java87
-rw-r--r--libjava/gnu/xml/xpath/NegativeExpr.java75
-rw-r--r--libjava/gnu/xml/xpath/NodeTypeTest.java130
-rw-r--r--libjava/gnu/xml/xpath/NormalizeSpaceFunction.java99
-rw-r--r--libjava/gnu/xml/xpath/NotFunction.java81
-rw-r--r--libjava/gnu/xml/xpath/NumberFunction.java96
-rw-r--r--libjava/gnu/xml/xpath/OrExpr.java81
-rw-r--r--libjava/gnu/xml/xpath/ParenthesizedExpr.java84
-rw-r--r--libjava/gnu/xml/xpath/Path.java54
-rw-r--r--libjava/gnu/xml/xpath/Pattern.java54
-rw-r--r--libjava/gnu/xml/xpath/PositionFunction.java67
-rw-r--r--libjava/gnu/xml/xpath/Predicate.java79
-rw-r--r--libjava/gnu/xml/xpath/RelationalExpr.java101
-rw-r--r--libjava/gnu/xml/xpath/Root.java81
-rw-r--r--libjava/gnu/xml/xpath/RoundFunction.java90
-rw-r--r--libjava/gnu/xml/xpath/Selector.java498
-rw-r--r--libjava/gnu/xml/xpath/StartsWithFunction.java86
-rw-r--r--libjava/gnu/xml/xpath/Steps.java240
-rw-r--r--libjava/gnu/xml/xpath/StringFunction.java113
-rw-r--r--libjava/gnu/xml/xpath/StringLengthFunction.java85
-rw-r--r--libjava/gnu/xml/xpath/SubstringAfterFunction.java92
-rw-r--r--libjava/gnu/xml/xpath/SubstringBeforeFunction.java91
-rw-r--r--libjava/gnu/xml/xpath/SubstringFunction.java122
-rw-r--r--libjava/gnu/xml/xpath/SumFunction.java94
-rw-r--r--libjava/gnu/xml/xpath/Test.java55
-rw-r--r--libjava/gnu/xml/xpath/TranslateFunction.java126
-rw-r--r--libjava/gnu/xml/xpath/TrueFunction.java66
-rw-r--r--libjava/gnu/xml/xpath/UnionExpr.java102
-rw-r--r--libjava/gnu/xml/xpath/VariableReference.java88
-rw-r--r--libjava/gnu/xml/xpath/XPathFactoryImpl.java90
-rw-r--r--libjava/gnu/xml/xpath/XPathImpl.java164
-rw-r--r--libjava/gnu/xml/xpath/XPathParser.java1461
-rw-r--r--libjava/gnu/xml/xpath/XPathTokenizer.java592
231 files changed, 0 insertions, 59803 deletions
diff --git a/libjava/gnu/xml/aelfred2/ContentHandler2.java b/libjava/gnu/xml/aelfred2/ContentHandler2.java
deleted file mode 100644
index 15161383592..00000000000
--- a/libjava/gnu/xml/aelfred2/ContentHandler2.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/* ContentHandler2.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.aelfred2;
-
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-
-/**
- * Extension to the SAX ContentHandler interface to report parsing events
- * and parameters required by DOM Level 3 but not supported by SAX.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public interface ContentHandler2
- extends ContentHandler
-{
-
- /**
- * Reports the XML declaration.
- * @param version the value of the version attribute in the XML
- * declaration
- * @param encoding the encoding specified in the XML declaration, if any
- * @param standalone the standalone attribute from the XML declaration
- * @param inputEncoding the encoding of the XML input
- */
- void xmlDecl(String version, String encoding, boolean standalone,
- String inputEncoding)
- throws SAXException;
-
-}
diff --git a/libjava/gnu/xml/aelfred2/JAXPFactory.java b/libjava/gnu/xml/aelfred2/JAXPFactory.java
deleted file mode 100644
index 37e8cc9c120..00000000000
--- a/libjava/gnu/xml/aelfred2/JAXPFactory.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/* JAXPFactory.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.aelfred2;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-import org.xml.sax.Parser;
-import org.xml.sax.XMLReader;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXNotRecognizedException;
-import org.xml.sax.SAXNotSupportedException;
-import org.xml.sax.helpers.XMLReaderAdapter;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
-
-/**
- * Configurable factory to create an &AElig;lfred2 JAXP parser; required
- * to bootstrap using JAXP. You should use SAX2 directly where possible,
- * rather than through JAXP, since that gives you better control.
- * This class would normally be configured as a platform default factory.
- *
- * @author David Brownell
- */
-public final class JAXPFactory
- extends SAXParserFactory
-{
-
- private Hashtable flags = new Hashtable();
-
- /**
- * Constructs a factory which normally returns a non-validating
- * parser.
- */
- public JAXPFactory()
- {
- }
-
- public SAXParser newSAXParser()
- throws ParserConfigurationException, SAXException
- {
- JaxpParser jaxp = new JaxpParser();
- Enumeration e = flags.keys();
- XMLReader parser = jaxp.getXMLReader();
-
- parser.setFeature(SAXDriver.FEATURE + "namespaces",
- isNamespaceAware());
- parser.setFeature(SAXDriver.FEATURE + "validation",
- isValidating());
- // that makes SAX2 feature flags trump JAXP
-
- while (e.hasMoreElements())
- {
- String uri = (String) e.nextElement();
- Boolean value = (Boolean) flags.get(uri);
- parser.setFeature(uri, value.booleanValue());
- }
-
- return jaxp;
- }
-
- // yes, this "feature transfer" mechanism doesn't play well
-
- public void setFeature(String name, boolean value)
- throws ParserConfigurationException, SAXNotRecognizedException,
- SAXNotSupportedException
- {
- try
- {
- // force "early" detection of errors where possible
- // (flags can't necessarily be set before parsing)
- new JaxpParser().getXMLReader().setFeature(name, value);
-
- flags.put(name, new Boolean(value));
- }
- catch (SAXNotRecognizedException e)
- {
- throw new SAXNotRecognizedException(name);
- }
- catch (SAXNotSupportedException e)
- {
- throw new SAXNotSupportedException(name);
- }
- catch (Exception e)
- {
- throw new ParserConfigurationException(e.getClass().getName()
- + ": "
- + e.getMessage());
- }
- }
-
- public boolean getFeature(String name)
- throws ParserConfigurationException, SAXNotRecognizedException,
- SAXNotSupportedException
- {
- Boolean value = (Boolean) flags.get(name);
-
- if (value != null)
- {
- return value.booleanValue();
- }
- else
- {
- try
- {
- return new JaxpParser().getXMLReader().getFeature(name);
- }
- catch (SAXNotRecognizedException e)
- {
- throw new SAXNotRecognizedException(name);
- }
- catch (SAXNotSupportedException e)
- {
- throw new SAXNotSupportedException(name);
- }
- catch (SAXException e)
- {
- throw new ParserConfigurationException(e.getClass().getName()
- + ": "
- + e.getMessage());
- }
- }
- }
-
- private static class JaxpParser
- extends SAXParser
- {
-
- private XmlReader ae2 = new XmlReader();
- private XMLReaderAdapter parser = null;
-
- JaxpParser()
- {
- }
-
- public void setProperty(String id, Object value)
- throws SAXNotRecognizedException, SAXNotSupportedException
- {
- ae2.setProperty(id, value);
- }
-
- public Object getProperty(String id)
- throws SAXNotRecognizedException, SAXNotSupportedException
- {
- return ae2.getProperty(id);
- }
-
- public Parser getParser()
- throws SAXException
- {
- if (parser == null)
- {
- parser = new XMLReaderAdapter(ae2);
- }
- return parser;
- }
-
- public XMLReader getXMLReader ()
- throws SAXException
- {
- return ae2;
- }
-
- public boolean isNamespaceAware()
- {
- try
- {
- return ae2.getFeature(SAXDriver.FEATURE + "namespaces");
- }
- catch (Exception e)
- {
- throw new Error();
- }
- }
-
- public boolean isValidating()
- {
- try
- {
- return ae2.getFeature(SAXDriver.FEATURE + "validation");
- }
- catch (Exception e)
- {
- throw new Error();
- }
- }
-
- // TODO isXIncludeAware()
-
- }
-
-}
-
diff --git a/libjava/gnu/xml/aelfred2/SAXDriver.java b/libjava/gnu/xml/aelfred2/SAXDriver.java
deleted file mode 100644
index 7e950ce042a..00000000000
--- a/libjava/gnu/xml/aelfred2/SAXDriver.java
+++ /dev/null
@@ -1,1622 +0,0 @@
-/* SAXDriver.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version.
-
-Portions derived from code which carried the following notice:
-
- Copyright (c) 1997, 1998 by Microstar Software Ltd.
-
- AElfred is free for both commercial and non-commercial use and
- redistribution, provided that Microstar's copyright and disclaimer are
- retained intact. You are free to modify AElfred for your own use and
- to redistribute AElfred with your modifications, provided that the
- modifications are clearly documented.
-
- This program 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. Please use it AT
- YOUR OWN RISK.
-*/
-
-package gnu.xml.aelfred2;
-
-import java.io.*;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Locale;
-import java.util.Stack;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-
-import org.xml.sax.*;
-import org.xml.sax.ext.*;
-import org.xml.sax.helpers.NamespaceSupport;
-
-
-/**
- * An enhanced SAX2 version of Microstar's &AElig;lfred XML parser.
- * The enhancements primarily relate to significant improvements in
- * conformance to the XML specification, and SAX2 support. Performance
- * has been improved. See the package level documentation for more
- * information.
- *
- * <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>Value defaults to <em>true</em></td></tr>
- * <tr><td>(URL)/external-parameter-entities</td>
- * <td>Value defaults to <em>true</em></td></tr>
- * <tr><td>(URL)/is-standalone</td>
- * <td>(PRELIMINARY) Returns true iff the document's parsing
- * has started (some non-error event after <em>startDocument()</em>
- * was reported) and the document's standalone flag is set.</td></tr>
- * <tr><td>(URL)/namespace-prefixes</td>
- * <td>Value defaults to <em>false</em> (but XML 1.0 names are
- * always reported)</td></tr>
- * <tr><td>(URL)/lexical-handler/parameter-entities</td>
- * <td>Value is fixed at <em>true</em></td></tr>
- * <tr><td>(URL)/namespaces</td>
- * <td>Value defaults to <em>true</em></td></tr>
- * <tr><td>(URL)/resolve-dtd-uris</td>
- * <td>(PRELIMINARY) Value defaults to <em>true</em></td></tr>
- * <tr><td>(URL)/string-interning</td>
- * <td>Value is fixed at <em>true</em></td></tr>
- * <tr><td>(URL)/use-attributes2</td>
- * <td>(PRELIMINARY) Value is fixed at <em>true</em></td></tr>
- * <tr><td>(URL)/use-entity-resolver2</td>
- * <td>(PRELIMINARY) Value defaults to <em>true</em></td></tr>
- * <tr><td>(URL)/validation</td>
- * <td>Value is fixed at <em>false</em></td></tr>
- *
- * <tr><td colspan=2><center><em>Handler Properties ... URL prefix is
- * <b>http://xml.org/sax/properties/</b></em></center></td></tr>
- *
- * <tr><td>(URL)/declaration-handler</td>
- * <td>A declaration handler may be provided. </td></tr>
- * <tr><td>(URL)/lexical-handler</td>
- * <td>A lexical handler may be provided. </td></tr>
- * </table>
- *
- * <p>This parser currently implements the SAX1 Parser API, but
- * it may not continue to do so in the future.
- *
- * @author Written by David Megginson (version 1.2a from Microstar)
- * @author Updated by David Brownell &lt;dbrownell@users.sourceforge.net&gt;
- * @see org.xml.sax.Parser
- */
-final public class SAXDriver
- implements Locator, Attributes2, XMLReader, Parser, AttributeList
-{
-
- private final DefaultHandler2 base = new DefaultHandler2();
- private XmlParser parser;
-
- private EntityResolver entityResolver = base;
- private EntityResolver2 resolver2 = null;
- private ContentHandler contentHandler = base;
- private DTDHandler dtdHandler = base;
- private ErrorHandler errorHandler = base;
- private DeclHandler declHandler = base;
- private LexicalHandler lexicalHandler = base;
-
- private String elementName;
- private Stack entityStack;
-
- // one vector (of object/struct): faster, smaller
- private List attributesList;
-
- private boolean namespaces = true;
- private boolean xmlNames = false;
- private boolean extGE = true;
- private boolean extPE = true;
- private boolean resolveAll = true;
- private boolean useResolver2 = true;
-
- // package private to allow (read-only) access in XmlParser
- boolean stringInterning = true;
-
- private int attributeCount;
- private boolean attributes;
- private String[] nsTemp;
- private NamespaceSupport prefixStack;
-
- //
- // Constructor.
- //
-
- /**
- * Constructs a SAX Parser.
- */
- public SAXDriver()
- {
- reset();
- }
-
- private void reset()
- {
- elementName = null;
- entityStack = new Stack();
- attributesList = Collections.synchronizedList(new ArrayList());
- attributeCount = 0;
- attributes = false;
- nsTemp = new String[3];
- prefixStack = null;
- }
-
-
- //
- // Implementation of org.xml.sax.Parser.
- //
-
- /**
- * <b>SAX1</b>: Sets the locale used for diagnostics; currently,
- * only locales using the English language are supported.
- * @param locale The locale for which diagnostics will be generated
- */
- public void setLocale(Locale locale)
- throws SAXException
- {
- if ("en".equals(locale.getLanguage()))
- {
- return;
- }
- throw new SAXException ("AElfred2 only supports English locales.");
- }
-
- /**
- * <b>SAX2</b>: Returns the object used when resolving external
- * entities during parsing (both general and parameter entities).
- */
- public EntityResolver getEntityResolver()
- {
- return (entityResolver == base) ? null : entityResolver;
- }
-
- /**
- * <b>SAX1, SAX2</b>: Set the entity resolver for this parser.
- * @param handler The object to receive entity events.
- */
- public void setEntityResolver(EntityResolver resolver)
- {
- if (resolver instanceof EntityResolver2)
- {
- resolver2 = (EntityResolver2) resolver;
- }
- else
- {
- resolver2 = null;
- }
- if (resolver == null)
- {
- resolver = base;
- }
- entityResolver = resolver;
- }
-
- /**
- * <b>SAX2</b>: Returns the object used to process declarations related
- * to notations and unparsed entities.
- */
- public DTDHandler getDTDHandler()
- {
- return (dtdHandler == base) ? null : dtdHandler;
- }
-
- /**
- * <b>SAX1, SAX2</b>: Set the DTD handler for this parser.
- * @param handler The object to receive DTD events.
- */
- public void setDTDHandler(DTDHandler handler)
- {
- if (handler == null)
- {
- handler = base;
- }
- this.dtdHandler = handler;
- }
-
-
- /**
- * <b>SAX1</b>: Set the document handler for this parser. If a
- * content handler was set, this document handler will supplant it.
- * The parser is set to report all XML 1.0 names rather than to
- * filter out "xmlns" attributes (the "namespace-prefixes" feature
- * is set to true).
- *
- * @deprecated SAX2 programs should use the XMLReader interface
- * and a ContentHandler.
- *
- * @param handler The object to receive document events.
- */
- public void setDocumentHandler(DocumentHandler handler)
- {
- contentHandler = new Adapter(handler);
- xmlNames = true;
- }
-
- /**
- * <b>SAX2</b>: Returns the object used to report the logical
- * content of an XML document.
- */
- public ContentHandler getContentHandler()
- {
- return (contentHandler == base) ? null : contentHandler;
- }
-
- /**
- * <b>SAX2</b>: Assigns the object used to report the logical
- * content of an XML document. If a document handler was set,
- * this content handler will supplant it (but XML 1.0 style name
- * reporting may remain enabled).
- */
- public void setContentHandler(ContentHandler handler)
- {
- if (handler == null)
- {
- handler = base;
- }
- contentHandler = handler;
- }
-
- /**
- * <b>SAX1, SAX2</b>: Set the error handler for this parser.
- * @param handler The object to receive error events.
- */
- public void setErrorHandler(ErrorHandler handler)
- {
- if (handler == null)
- {
- handler = base;
- }
- this.errorHandler = handler;
- }
-
- /**
- * <b>SAX2</b>: Returns the object used to receive callbacks for XML
- * errors of all levels (fatal, nonfatal, warning); this is never null;
- */
- public ErrorHandler getErrorHandler()
- {
- return (errorHandler == base) ? null : errorHandler;
- }
-
- /**
- * <b>SAX1, SAX2</b>: Auxiliary API to parse an XML document, used mostly
- * when no URI is available.
- * If you want anything useful to happen, you should set
- * at least one type of handler.
- * @param source The XML input source. Don't set 'encoding' unless
- * you know for a fact that it's correct.
- * @see #setEntityResolver
- * @see #setDTDHandler
- * @see #setContentHandler
- * @see #setErrorHandler
- * @exception SAXException The handlers may throw any SAXException,
- * and the parser normally throws SAXParseException objects.
- * @exception IOException IOExceptions are normally through through
- * the parser if there are problems reading the source document.
- */
- public void parse(InputSource source)
- throws SAXException, IOException
- {
- synchronized (base)
- {
- parser = new XmlParser();
- if (namespaces)
- {
- prefixStack = new NamespaceSupport();
- }
- else if (!xmlNames)
- {
- throw new IllegalStateException();
- }
- parser.setHandler(this);
-
- try
- {
- Reader r = source.getCharacterStream();
- InputStream in = source.getByteStream();
-
- parser.doParse(source.getSystemId(),
- source.getPublicId(),
- r,
- in,
- source.getEncoding());
- }
- catch (SAXException e)
- {
- throw e;
- }
- catch (IOException e)
- {
- throw e;
- }
- catch (RuntimeException e)
- {
- throw e;
- }
- catch (Exception e)
- {
- throw new SAXParseException(e.getMessage(), this, e);
- }
- finally
- {
- contentHandler.endDocument();
- reset();
- }
- }
- }
-
- /**
- * <b>SAX1, SAX2</b>: Preferred API to parse an XML document, using a
- * system identifier (URI).
- */
- public void parse(String systemId)
- throws SAXException, IOException
- {
- parse(new InputSource(systemId));
- }
-
- //
- // Implementation of SAX2 "XMLReader" interface
- //
- static final String FEATURE = "http://xml.org/sax/features/";
- static final String PROPERTY = "http://xml.org/sax/properties/";
-
- /**
- * <b>SAX2</b>: Tells the value of the specified feature flag.
- *
- * @exception SAXNotRecognizedException thrown if the feature flag
- * is neither built in, nor yet assigned.
- */
- public boolean getFeature(String featureId)
- throws SAXNotRecognizedException, SAXNotSupportedException
- {
- if ((FEATURE + "validation").equals(featureId))
- {
- return false;
- }
-
- // external entities (both types) are optionally included
- if ((FEATURE + "external-general-entities").equals(featureId))
- {
- return extGE;
- }
- if ((FEATURE + "external-parameter-entities").equals(featureId))
- {
- return extPE;
- }
-
- // element/attribute names are as written in document; no mangling
- if ((FEATURE + "namespace-prefixes").equals(featureId))
- {
- return xmlNames;
- }
-
- // report element/attribute namespaces?
- if ((FEATURE + "namespaces").equals(featureId))
- {
- return namespaces;
- }
-
- // all PEs and GEs are reported
- if ((FEATURE + "lexical-handler/parameter-entities").equals(featureId))
- {
- return true;
- }
-
- // default is true
- if ((FEATURE + "string-interning").equals(featureId))
- {
- return stringInterning;
- }
-
- // EXTENSIONS 1.1
-
- // always returns isSpecified info
- if ((FEATURE + "use-attributes2").equals(featureId))
- {
- return true;
- }
-
- // meaningful between startDocument/endDocument
- if ((FEATURE + "is-standalone").equals(featureId))
- {
- if (parser == null)
- {
- throw new SAXNotSupportedException(featureId);
- }
- return parser.isStandalone();
- }
-
- // optionally don't absolutize URIs in declarations
- if ((FEATURE + "resolve-dtd-uris").equals(featureId))
- {
- return resolveAll;
- }
-
- // optionally use resolver2 interface methods, if possible
- if ((FEATURE + "use-entity-resolver2").equals(featureId))
- {
- return useResolver2;
- }
-
- throw new SAXNotRecognizedException(featureId);
- }
-
- // package private
- DeclHandler getDeclHandler()
- {
- return declHandler;
- }
-
- // package private
- boolean resolveURIs()
- {
- return resolveAll;
- }
-
- /**
- * <b>SAX2</b>: Returns the specified property.
- *
- * @exception SAXNotRecognizedException thrown if the property value
- * is neither built in, nor yet stored.
- */
- public Object getProperty(String propertyId)
- throws SAXNotRecognizedException
- {
- if ((PROPERTY + "declaration-handler").equals(propertyId))
- {
- return (declHandler == base) ? null : declHandler;
- }
-
- if ((PROPERTY + "lexical-handler").equals(propertyId))
- {
- return (lexicalHandler == base) ? null : lexicalHandler;
- }
-
- // unknown properties
- throw new SAXNotRecognizedException(propertyId);
- }
-
- /**
- * <b>SAX2</b>: Sets the state of feature flags in this parser. Some
- * built-in feature flags are mutable.
- */
- public void setFeature(String featureId, boolean value)
- throws SAXNotRecognizedException, SAXNotSupportedException
- {
- boolean state;
-
- // Features with a defined value, we just change it if we can.
- state = getFeature (featureId);
-
- if (state == value)
- {
- return;
- }
- if (parser != null)
- {
- throw new SAXNotSupportedException("not while parsing");
- }
-
- if ((FEATURE + "namespace-prefixes").equals(featureId))
- {
- // in this implementation, this only affects xmlns reporting
- xmlNames = value;
- // forcibly prevent illegal parser state
- if (!xmlNames)
- {
- namespaces = true;
- }
- return;
- }
-
- if ((FEATURE + "namespaces").equals(featureId))
- {
- namespaces = value;
- // forcibly prevent illegal parser state
- if (!namespaces)
- {
- xmlNames = true;
- }
- return;
- }
-
- if ((FEATURE + "external-general-entities").equals(featureId))
- {
- extGE = value;
- return;
- }
- if ((FEATURE + "external-parameter-entities").equals(featureId))
- {
- extPE = value;
- return;
- }
- if ((FEATURE + "resolve-dtd-uris").equals(featureId))
- {
- resolveAll = value;
- return;
- }
-
- if ((FEATURE + "use-entity-resolver2").equals(featureId))
- {
- useResolver2 = value;
- return;
- }
-
- throw new SAXNotRecognizedException(featureId);
- }
-
- /**
- * <b>SAX2</b>: Assigns the specified property. Like SAX1 handlers,
- * these may be changed at any time.
- */
- public void setProperty(String propertyId, Object value)
- throws SAXNotRecognizedException, SAXNotSupportedException
- {
- // see if the property is recognized
- getProperty(propertyId);
-
- // Properties with a defined value, we just change it if we can.
-
- if ((PROPERTY + "declaration-handler").equals(propertyId))
- {
- if (value == null)
- {
- declHandler = base;
- }
- else if (!(value instanceof DeclHandler))
- {
- throw new SAXNotSupportedException(propertyId);
- }
- else
- {
- declHandler = (DeclHandler) value;
- }
- return ;
- }
-
- if ((PROPERTY + "lexical-handler").equals(propertyId))
- {
- if (value == null)
- {
- lexicalHandler = base;
- }
- else if (!(value instanceof LexicalHandler))
- {
- throw new SAXNotSupportedException(propertyId);
- }
- else
- {
- lexicalHandler = (LexicalHandler) value;
- }
- return;
- }
-
- throw new SAXNotSupportedException(propertyId);
- }
-
- //
- // This is where the driver receives XmlParser callbacks and translates
- // them into SAX callbacks. Some more callbacks have been added for
- // SAX2 support.
- //
-
- void startDocument()
- throws SAXException
- {
- contentHandler.setDocumentLocator(this);
- contentHandler.startDocument();
- attributesList.clear();
- }
-
- void xmlDecl(String version,
- String encoding,
- boolean standalone,
- String inputEncoding)
- throws SAXException
- {
- if (contentHandler instanceof ContentHandler2)
- {
- ((ContentHandler2) contentHandler).xmlDecl(version,
- encoding,
- standalone,
- inputEncoding);
- }
- }
-
- void skippedEntity(String name)
- throws SAXException
- {
- contentHandler.skippedEntity(name);
- }
-
- InputSource getExternalSubset(String name, String baseURI)
- throws SAXException, IOException
- {
- if (resolver2 == null || !useResolver2 || !extPE)
- {
- return null;
- }
- return resolver2.getExternalSubset(name, baseURI);
- }
-
- InputSource resolveEntity(boolean isPE, String name,
- InputSource in, String baseURI)
- throws SAXException, IOException
- {
- InputSource source;
-
- // external entities might be skipped
- if (isPE && !extPE)
- {
- return null;
- }
- if (!isPE && !extGE)
- {
- return null;
- }
-
- // ... or not
- lexicalHandler.startEntity(name);
- if (resolver2 != null && useResolver2)
- {
- source = resolver2.resolveEntity(name, in.getPublicId(),
- baseURI, in.getSystemId());
- if (source == null)
- {
- in.setSystemId(absolutize(baseURI,
- in.getSystemId(), false));
- source = in;
- }
- }
- else
- {
- in.setSystemId(absolutize(baseURI, in.getSystemId(), false));
- source = entityResolver.resolveEntity(in.getPublicId(),
- in.getSystemId());
- if (source == null)
- {
- source = in;
- }
- }
- startExternalEntity(name, source.getSystemId(), true);
- return source;
- }
-
- // absolutize a system ID relative to the specified base URI
- // (temporarily) package-visible for external entity decls
- String absolutize(String baseURI, String systemId, boolean nice)
- throws MalformedURLException, SAXException
- {
- // FIXME normalize system IDs -- when?
- // - Convert to UTF-8
- // - Map reserved and non-ASCII characters to %HH
-
- try
- {
- if (baseURI == null)
- {
- if (XmlParser.uriWarnings)
- {
- warn ("No base URI; hope this SYSTEM id is absolute: "
- + systemId);
- }
- return new URL(systemId).toString();
- }
- else
- {
- return new URL(new URL(baseURI), systemId).toString();
- }
- }
- catch (MalformedURLException e)
- {
- // Let unknown URI schemes pass through unless we need
- // the JVM to map them to i/o streams for us...
- if (!nice)
- {
- throw e;
- }
-
- // sometimes sysids for notations or unparsed entities
- // aren't really URIs...
- warn("Can't absolutize SYSTEM id: " + e.getMessage());
- return systemId;
- }
- }
-
- void startExternalEntity(String name, String systemId, boolean stackOnly)
- throws SAXException
- {
- // The following warning was deleted because the application has the
- // option of not setting systemId. Sun's JAXP or Xerces seems to
- // ignore this case.
- /*
- if (systemId == null)
- warn ("URI was not reported to parser for entity " + name);
- */
- if (!stackOnly) // spliced [dtd] needs startEntity
- {
- lexicalHandler.startEntity(name);
- }
- entityStack.push(systemId);
- }
-
- void endExternalEntity(String name)
- throws SAXException
- {
- if (!"[document]".equals(name))
- {
- lexicalHandler.endEntity(name);
- }
- entityStack.pop();
- }
-
- void startInternalEntity(String name)
- throws SAXException
- {
- lexicalHandler.startEntity(name);
- }
-
- void endInternalEntity(String name)
- throws SAXException
- {
- lexicalHandler.endEntity(name);
- }
-
- void doctypeDecl(String name, String publicId, String systemId)
- throws SAXException
- {
- lexicalHandler.startDTD(name, publicId, systemId);
-
- // ... the "name" is a declaration and should be given
- // to the DeclHandler (but sax2 doesn't).
-
- // the IDs for the external subset are lexical details,
- // as are the contents of the internal subset; but sax2
- // doesn't provide the internal subset "pre-parse"
- }
-
- void notationDecl(String name, String publicId, String systemId,
- String baseUri)
- throws SAXException
- {
- try
- {
- dtdHandler.notationDecl(name, publicId,
- (resolveAll && systemId != null)
- ? absolutize(baseUri, systemId, true)
- : systemId);
- }
- catch (IOException e)
- {
- // "can't happen"
- throw new SAXParseException(e.getMessage(), this, e);
- }
- }
-
- void unparsedEntityDecl(String name, String publicId, String systemId,
- String baseUri, String notation)
- throws SAXException
- {
- try
- {
- dtdHandler.unparsedEntityDecl(name, publicId,
- resolveAll
- ? absolutize(baseUri, systemId, true)
- : systemId,
- notation);
- }
- catch (IOException e)
- {
- // "can't happen"
- throw new SAXParseException(e.getMessage(), this, e);
- }
- }
-
- void endDoctype()
- throws SAXException
- {
- lexicalHandler.endDTD();
- }
-
- private void declarePrefix(String prefix, String uri)
- throws SAXException
- {
- int index = uri.indexOf(':');
-
- // many versions of nwalsh docbook stylesheets
- // have bogus URLs; so this can't be an error...
- if (index < 1 && uri.length() != 0)
- {
- warn("relative URI for namespace: " + uri);
- }
-
- // FIXME: char [0] must be ascii alpha; chars [1..index]
- // must be ascii alphanumeric or in "+-." [RFC 2396]
-
- //Namespace Constraints
- //name for xml prefix must be http://www.w3.org/XML/1998/namespace
- boolean prefixEquality = prefix.equals("xml");
- boolean uriEquality = uri.equals("http://www.w3.org/XML/1998/namespace");
- if ((prefixEquality || uriEquality) && !(prefixEquality && uriEquality))
- {
- fatal("xml is by definition bound to the namespace name " +
- "http://www.w3.org/XML/1998/namespace");
- }
-
- //xmlns prefix declaration is illegal but xml prefix declaration is llegal...
- if (prefixEquality && uriEquality)
- {
- return;
- }
-
- //name for xmlns prefix must be http://www.w3.org/2000/xmlns/
- prefixEquality = prefix.equals("xmlns");
- uriEquality = uri.equals("http://www.w3.org/2000/xmlns/");
- if ((prefixEquality || uriEquality) && !(prefixEquality && uriEquality))
- {
- fatal("http://www.w3.org/2000/xmlns/ is by definition bound" +
- " to prefix xmlns");
- }
-
- //even if the uri is http://www.w3.org/2000/xmlns/
- // it is illegal to declare it
- if (prefixEquality && uriEquality)
- {
- fatal ("declaring the xmlns prefix is illegal");
- }
-
- uri = uri.intern();
- prefixStack.declarePrefix(prefix, uri);
- contentHandler.startPrefixMapping(prefix, uri);
- }
-
- void attribute(String qname, String value, boolean isSpecified)
- throws SAXException
- {
- if (!attributes)
- {
- attributes = true;
- if (namespaces)
- {
- prefixStack.pushContext();
- }
- }
-
- // process namespace decls immediately;
- // then maybe forget this as an attribute
- if (namespaces)
- {
- int index;
-
- // default NS declaration?
- if (stringInterning)
- {
- if ("xmlns" == qname)
- {
- declarePrefix("", value);
- if (!xmlNames)
- {
- return;
- }
- }
- // NS prefix declaration?
- else if ((index = qname.indexOf(':')) == 5
- && qname.startsWith("xmlns"))
- {
- String prefix = qname.substring(6);
-
- if (prefix.equals(""))
- {
- fatal("missing prefix " +
- "in namespace declaration attribute");
- }
- if (value.length() == 0)
- {
- verror("missing URI in namespace declaration attribute: "
- + qname);
- }
- else
- {
- declarePrefix(prefix, value);
- }
- if (!xmlNames)
- {
- return;
- }
- }
- }
- else
- {
- if ("xmlns".equals(qname))
- {
- declarePrefix("", value);
- if (!xmlNames)
- {
- return;
- }
- }
- // NS prefix declaration?
- else if ((index = qname.indexOf(':')) == 5
- && qname.startsWith("xmlns"))
- {
- String prefix = qname.substring(6);
-
- if (value.length() == 0)
- {
- verror("missing URI in namespace decl attribute: "
- + qname);
- }
- else
- {
- declarePrefix(prefix, value);
- }
- if (!xmlNames)
- {
- return;
- }
- }
- }
- }
- // remember this attribute ...
- attributeCount++;
-
- // attribute type comes from querying parser's DTD records
- attributesList.add(new Attribute(qname, value, isSpecified));
-
- }
-
- void startElement(String elname)
- throws SAXException
- {
- ContentHandler handler = contentHandler;
-
- //
- // NOTE: this implementation of namespace support adds something
- // like six percent to parsing CPU time, in a large (~50 MB)
- // document that doesn't use namespaces at all. (Measured by PC
- // sampling, with a bug where endElement processing was omitted.)
- // [Measurement referred to older implementation, older JVM ...]
- //
- // It ought to become notably faster in such cases. Most
- // costs are the prefix stack calling Hashtable.get() (2%),
- // String.hashCode() (1.5%) and about 1.3% each for pushing
- // the context, and two chunks of name processing.
- //
-
- if (!attributes)
- {
- if (namespaces)
- {
- prefixStack.pushContext();
- }
- }
- else if (namespaces)
- {
-
- // now we can patch up namespace refs; we saw all the
- // declarations, so now we'll do the Right Thing
- Iterator itt = attributesList.iterator();
- while (itt.hasNext())
- {
- Attribute attribute = (Attribute) itt.next();
- String qname = attribute.name;
- int index;
-
- // default NS declaration?
- if (stringInterning)
- {
- if ("xmlns" == qname)
- {
- continue;
- }
- }
- else
- {
- if ("xmlns".equals(qname))
- {
- continue;
- }
- }
- //Illegal in the new Namespaces Draft
- //should it be only in 1.1 docs??
- if (qname.equals (":"))
- {
- fatal("namespace names consisting of a single colon " +
- "character are invalid");
- }
- index = qname.indexOf(':');
-
- // NS prefix declaration?
- if (index == 5 && qname.startsWith("xmlns"))
- {
- continue;
- }
-
- // it's not a NS decl; patch namespace info items
- if (prefixStack.processName(qname, nsTemp, true) == null)
- {
- fatal("undeclared attribute prefix in: " + qname);
- }
- else
- {
- attribute.nameSpace = nsTemp[0];
- attribute.localName = nsTemp[1];
- }
- }
- }
-
- // save element name so attribute callbacks work
- elementName = elname;
- if (namespaces)
- {
- if (prefixStack.processName(elname, nsTemp, false) == null)
- {
- fatal("undeclared element prefix in: " + elname);
- nsTemp[0] = nsTemp[1] = "";
- }
- handler.startElement(nsTemp[0], nsTemp[1], elname, this);
- }
- else
- {
- handler.startElement("", "", elname, this);
- }
- // elementName = null;
-
- // elements with no attributes are pretty common!
- if (attributes)
- {
- attributesList.clear();
- attributeCount = 0;
- attributes = false;
- }
- }
-
- void endElement(String elname)
- throws SAXException
- {
- ContentHandler handler = contentHandler;
-
- if (!namespaces)
- {
- handler.endElement("", "", elname);
- return;
- }
- prefixStack.processName(elname, nsTemp, false);
- handler.endElement(nsTemp[0], nsTemp[1], elname);
-
- Enumeration prefixes = prefixStack.getDeclaredPrefixes();
-
- while (prefixes.hasMoreElements())
- {
- handler.endPrefixMapping((String) prefixes.nextElement());
- }
- prefixStack.popContext();
- }
-
- void startCDATA()
- throws SAXException
- {
- lexicalHandler.startCDATA();
- }
-
- void charData(char[] ch, int start, int length)
- throws SAXException
- {
- contentHandler.characters(ch, start, length);
- }
-
- void endCDATA()
- throws SAXException
- {
- lexicalHandler.endCDATA();
- }
-
- void ignorableWhitespace(char[] ch, int start, int length)
- throws SAXException
- {
- contentHandler.ignorableWhitespace(ch, start, length);
- }
-
- void processingInstruction(String target, String data)
- throws SAXException
- {
- contentHandler.processingInstruction(target, data);
- }
-
- void comment(char[] ch, int start, int length)
- throws SAXException
- {
- if (lexicalHandler != base)
- {
- lexicalHandler.comment(ch, start, length);
- }
- }
-
- void fatal(String message)
- throws SAXException
- {
- SAXParseException fatal;
-
- fatal = new SAXParseException(message, this);
- errorHandler.fatalError(fatal);
-
- // Even if the application can continue ... we can't!
- throw fatal;
- }
-
- // We can safely report a few validity errors that
- // make layered SAX2 DTD validation more conformant
- void verror(String message)
- throws SAXException
- {
- SAXParseException err;
-
- err = new SAXParseException(message, this);
- errorHandler.error(err);
- }
-
- void warn(String message)
- throws SAXException
- {
- SAXParseException err;
-
- err = new SAXParseException(message, this);
- errorHandler.warning(err);
- }
-
- //
- // Implementation of org.xml.sax.Attributes.
- //
-
- /**
- * <b>SAX1 AttributeList, SAX2 Attributes</b> method
- * (don't invoke on parser);
- */
- public int getLength()
- {
- return attributesList.size();
- }
-
- /**
- * <b>SAX2 Attributes</b> method (don't invoke on parser);
- */
- public String getURI(int index)
- {
- if (index < 0 || index >= attributesList.size())
- {
- return null;
- }
- return ((Attribute) attributesList.get(index)).nameSpace;
- }
-
- /**
- * <b>SAX2 Attributes</b> method (don't invoke on parser);
- */
- public String getLocalName(int index)
- {
- if (index < 0 || index >= attributesList.size())
- {
- return null;
- }
- Attribute attr = (Attribute) attributesList.get(index);
- // FIXME attr.localName is sometimes null, why?
- if (namespaces && attr.localName == null)
- {
- // XXX fix this here for now
- int ci = attr.name.indexOf(':');
- attr.localName = (ci == -1) ? attr.name :
- attr.name.substring(ci + 1);
- }
- return (attr.localName == null) ? "" : attr.localName;
- }
-
- /**
- * <b>SAX2 Attributes</b> method (don't invoke on parser);
- */
- public String getQName(int index)
- {
- if (index < 0 || index >= attributesList.size())
- {
- return null;
- }
- Attribute attr = (Attribute) attributesList.get(index);
- return (attr.name == null) ? "" : attr.name;
- }
-
- /**
- * <b>SAX1 AttributeList</b> method (don't invoke on parser);
- */
- public String getName(int index)
- {
- return getQName(index);
- }
-
- /**
- * <b>SAX1 AttributeList, SAX2 Attributes</b> method
- * (don't invoke on parser);
- */
- public String getType(int index)
- {
- if (index < 0 || index >= attributesList.size())
- {
- return null;
- }
- String type = parser.getAttributeType(elementName, getQName(index));
- if (type == null)
- {
- return "CDATA";
- }
- // ... use DeclHandler.attributeDecl to see enumerations
- if (type == "ENUMERATION")
- {
- return "NMTOKEN";
- }
- return type;
- }
-
- /**
- * <b>SAX1 AttributeList, SAX2 Attributes</b> method
- * (don't invoke on parser);
- */
- public String getValue(int index)
- {
- if (index < 0 || index >= attributesList.size())
- {
- return null;
- }
- return ((Attribute) attributesList.get(index)).value;
- }
-
- /**
- * <b>SAX2 Attributes</b> method (don't invoke on parser);
- */
- public int getIndex(String uri, String local)
- {
- int length = getLength();
-
- for (int i = 0; i < length; i++)
- {
- if (!getURI(i).equals(uri))
- {
- continue;
- }
- if (getLocalName(i).equals(local))
- {
- return i;
- }
- }
- return -1;
- }
-
- /**
- * <b>SAX2 Attributes</b> method (don't invoke on parser);
- */
- public int getIndex(String xmlName)
- {
- int length = getLength();
-
- for (int i = 0; i < length; i++)
- {
- if (getQName(i).equals(xmlName))
- {
- return i;
- }
- }
- return -1;
- }
-
- /**
- * <b>SAX2 Attributes</b> method (don't invoke on parser);
- */
- public String getType(String uri, String local)
- {
- int index = getIndex(uri, local);
-
- if (index < 0)
- {
- return null;
- }
- return getType(index);
- }
-
- /**
- * <b>SAX1 AttributeList, SAX2 Attributes</b> method
- * (don't invoke on parser);
- */
- public String getType(String xmlName)
- {
- int index = getIndex(xmlName);
-
- if (index < 0)
- {
- return null;
- }
- return getType(index);
- }
-
- /**
- * <b>SAX Attributes</b> method (don't invoke on parser);
- */
- public String getValue(String uri, String local)
- {
- int index = getIndex(uri, local);
-
- if (index < 0)
- {
- return null;
- }
- return getValue(index);
- }
-
- /**
- * <b>SAX1 AttributeList, SAX2 Attributes</b> method
- * (don't invoke on parser);
- */
- public String getValue(String xmlName)
- {
- int index = getIndex(xmlName);
-
- if (index < 0)
- {
- return null;
- }
- return getValue(index);
- }
-
- //
- // Implementation of org.xml.sax.ext.Attributes2
- //
-
- /** @return false unless the attribute was declared in the DTD.
- * @throws java.lang.ArrayIndexOutOfBoundsException
- * When the supplied index does not identify an attribute.
- */
- public boolean isDeclared(int index)
- {
- if (index < 0 || index >= attributeCount)
- {
- throw new ArrayIndexOutOfBoundsException();
- }
- String type = parser.getAttributeType(elementName, getQName(index));
- return (type != null);
- }
-
- /** @return false unless the attribute was declared in the DTD.
- * @throws java.lang.IllegalArgumentException
- * When the supplied names do not identify an attribute.
- */
- public boolean isDeclared(String qName)
- {
- int index = getIndex(qName);
- if (index < 0)
- {
- throw new IllegalArgumentException();
- }
- String type = parser.getAttributeType(elementName, qName);
- return (type != null);
- }
-
- /** @return false unless the attribute was declared in the DTD.
- * @throws java.lang.IllegalArgumentException
- * When the supplied names do not identify an attribute.
- */
- public boolean isDeclared(String uri, String localName)
- {
- int index = getIndex(uri, localName);
- return isDeclared(index);
- }
-
- /**
- * <b>SAX-ext Attributes2</b> method (don't invoke on parser);
- */
- public boolean isSpecified(int index)
- {
- return ((Attribute) attributesList.get(index)).specified;
- }
-
- /**
- * <b>SAX-ext Attributes2</b> method (don't invoke on parser);
- */
- public boolean isSpecified(String uri, String local)
- {
- int index = getIndex (uri, local);
- return isSpecified(index);
- }
-
- /**
- * <b>SAX-ext Attributes2</b> method (don't invoke on parser);
- */
- public boolean isSpecified(String xmlName)
- {
- int index = getIndex (xmlName);
- return isSpecified(index);
- }
-
- //
- // Implementation of org.xml.sax.Locator.
- //
-
- /**
- * <b>SAX Locator</b> method (don't invoke on parser);
- */
- public String getPublicId()
- {
- return null; // FIXME track public IDs too
- }
-
- /**
- * <b>SAX Locator</b> method (don't invoke on parser);
- */
- public String getSystemId()
- {
- if (entityStack.empty())
- {
- return null;
- }
- else
- {
- return (String) entityStack.peek();
- }
- }
-
- /**
- * <b>SAX Locator</b> method (don't invoke on parser);
- */
- public int getLineNumber()
- {
- return parser.getLineNumber();
- }
-
- /**
- * <b>SAX Locator</b> method (don't invoke on parser);
- */
- public int getColumnNumber()
- {
- return parser.getColumnNumber();
- }
-
- // adapter between SAX2 content handler and SAX1 document handler callbacks
- private static class Adapter
- implements ContentHandler
- {
-
- private DocumentHandler docHandler;
-
- Adapter(DocumentHandler dh)
- {
- docHandler = dh;
- }
-
- public void setDocumentLocator(Locator l)
- {
- docHandler.setDocumentLocator(l);
- }
-
- public void startDocument()
- throws SAXException
- {
- docHandler.startDocument();
- }
-
- public void processingInstruction(String target, String data)
- throws SAXException
- {
- docHandler.processingInstruction(target, data);
- }
-
- public void startPrefixMapping(String prefix, String uri)
- {
- /* ignored */
- }
-
- public void startElement(String namespace,
- String local,
- String name,
- Attributes attrs)
- throws SAXException
- {
- docHandler.startElement(name, (AttributeList) attrs);
- }
-
- public void characters(char[] buf, int offset, int len)
- throws SAXException
- {
- docHandler.characters(buf, offset, len);
- }
-
- public void ignorableWhitespace(char[] buf, int offset, int len)
- throws SAXException
- {
- docHandler.ignorableWhitespace(buf, offset, len);
- }
-
- public void skippedEntity(String name)
- {
- /* ignored */
- }
-
- public void endElement(String u, String l, String name)
- throws SAXException
- {
- docHandler.endElement(name);
- }
-
- public void endPrefixMapping(String prefix)
- {
- /* ignored */
- }
-
- public void endDocument()
- throws SAXException
- {
- docHandler.endDocument();
- }
- }
-
- private static class Attribute
- {
-
- String name;
- String value;
- String nameSpace;
- String localName;
- boolean specified;
-
- Attribute(String name, String value, boolean specified)
- {
- this.name = name;
- this.value = value;
- this.nameSpace = "";
- this.specified = specified;
- }
-
- }
-
-}
diff --git a/libjava/gnu/xml/aelfred2/XmlParser.java b/libjava/gnu/xml/aelfred2/XmlParser.java
deleted file mode 100644
index 15d730ff4a7..00000000000
--- a/libjava/gnu/xml/aelfred2/XmlParser.java
+++ /dev/null
@@ -1,5835 +0,0 @@
-/* XmlParser.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.
-
-Partly derived from code which carried the following notice:
-
- Copyright (c) 1997, 1998 by Microstar Software Ltd.
-
- AElfred is free for both commercial and non-commercial use and
- redistribution, provided that Microstar's copyright and disclaimer are
- retained intact. You are free to modify AElfred for your own use and
- to redistribute AElfred with your modifications, provided that the
- modifications are clearly documented.
-
- This program 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. Please use it AT
- YOUR OWN RISK.
-*/
-
-package gnu.xml.aelfred2;
-
-import gnu.java.security.action.GetPropertyAction;
-
-import java.io.BufferedInputStream;
-import java.io.CharConversionException;
-import java.io.EOFException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.UnsupportedEncodingException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.security.AccessController;
-
-import java.util.Iterator;
-import java.util.HashMap;
-import java.util.LinkedList;
-
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-
-/**
- * Parse XML documents and return parse events through call-backs.
- * Use the <code>SAXDriver</code> class as your entry point, as all
- * internal parser interfaces are subject to change.
- *
- * @author Written by David Megginson &lt;dmeggins@microstar.com&gt;
- * (version 1.2a with bugfixes)
- * @author Updated by David Brownell &lt;dbrownell@users.sourceforge.net&gt;
- * @see SAXDriver
- */
-final class XmlParser
-{
-
- // avoid slow per-character readCh()
- private final static boolean USE_CHEATS = true;
-
- ////////////////////////////////////////////////////////////////////////
- // Constants.
- ////////////////////////////////////////////////////////////////////////
-
- //
- // Constants for element content type.
- //
-
- /**
- * Constant: an element has not been declared.
- * @see #getElementContentType
- */
- public final static int CONTENT_UNDECLARED = 0;
-
- /**
- * Constant: the element has a content model of ANY.
- * @see #getElementContentType
- */
- public final static int CONTENT_ANY = 1;
-
- /**
- * Constant: the element has declared content of EMPTY.
- * @see #getElementContentType
- */
- public final static int CONTENT_EMPTY = 2;
-
- /**
- * Constant: the element has mixed content.
- * @see #getElementContentType
- */
- public final static int CONTENT_MIXED = 3;
-
- /**
- * Constant: the element has element content.
- * @see #getElementContentType
- */
- public final static int CONTENT_ELEMENTS = 4;
-
-
- //
- // Constants for the entity type.
- //
-
- /**
- * Constant: the entity has not been declared.
- * @see #getEntityType
- */
- public final static int ENTITY_UNDECLARED = 0;
-
- /**
- * Constant: the entity is internal.
- * @see #getEntityType
- */
- public final static int ENTITY_INTERNAL = 1;
-
- /**
- * Constant: the entity is external, non-parsable data.
- * @see #getEntityType
- */
- public final static int ENTITY_NDATA = 2;
-
- /**
- * Constant: the entity is external XML data.
- * @see #getEntityType
- */
- public final static int ENTITY_TEXT = 3;
-
- //
- // Attribute type constants are interned literal strings.
- //
-
- //
- // Constants for supported encodings. "external" is just a flag.
- //
- private final static int ENCODING_EXTERNAL = 0;
- private final static int ENCODING_UTF_8 = 1;
- private final static int ENCODING_ISO_8859_1 = 2;
- private final static int ENCODING_UCS_2_12 = 3;
- private final static int ENCODING_UCS_2_21 = 4;
- private final static int ENCODING_UCS_4_1234 = 5;
- private final static int ENCODING_UCS_4_4321 = 6;
- private final static int ENCODING_UCS_4_2143 = 7;
- private final static int ENCODING_UCS_4_3412 = 8;
- private final static int ENCODING_ASCII = 9;
-
- //
- // Constants for attribute default value.
- //
-
- /**
- * Constant: the attribute is not declared.
- * @see #getAttributeDefaultValueType
- */
- public final static int ATTRIBUTE_DEFAULT_UNDECLARED = 30;
-
- /**
- * Constant: the attribute has a literal default value specified.
- * @see #getAttributeDefaultValueType
- * @see #getAttributeDefaultValue
- */
- public final static int ATTRIBUTE_DEFAULT_SPECIFIED = 31;
-
- /**
- * Constant: the attribute was declared #IMPLIED.
- * @see #getAttributeDefaultValueType
- */
- public final static int ATTRIBUTE_DEFAULT_IMPLIED = 32;
-
- /**
- * Constant: the attribute was declared #REQUIRED.
- * @see #getAttributeDefaultValueType
- */
- public final static int ATTRIBUTE_DEFAULT_REQUIRED = 33;
-
- /**
- * Constant: the attribute was declared #FIXED.
- * @see #getAttributeDefaultValueType
- * @see #getAttributeDefaultValue
- */
- public final static int ATTRIBUTE_DEFAULT_FIXED = 34;
-
- //
- // Constants for input.
- //
- private final static int INPUT_NONE = 0;
- private final static int INPUT_INTERNAL = 1;
- private final static int INPUT_STREAM = 3;
- private final static int INPUT_READER = 5;
-
- //
- // Flags for reading literals.
- //
- // expand general entity refs (attribute values in dtd and content)
- private final static int LIT_ENTITY_REF = 2;
- // normalize this value (space chars) (attributes, public ids)
- private final static int LIT_NORMALIZE = 4;
- // literal is an attribute value
- private final static int LIT_ATTRIBUTE = 8;
- // don't expand parameter entities
- private final static int LIT_DISABLE_PE = 16;
- // don't expand [or parse] character refs
- private final static int LIT_DISABLE_CREF = 32;
- // don't parse general entity refs
- private final static int LIT_DISABLE_EREF = 64;
- // literal is a public ID value
- private final static int LIT_PUBID = 256;
-
- //
- // Flags affecting PE handling in DTDs (if expandPE is true).
- // PEs expand with space padding, except inside literals.
- //
- private final static int CONTEXT_NORMAL = 0;
- private final static int CONTEXT_LITERAL = 1;
-
- // Emit warnings for relative URIs with no base URI.
- static boolean uriWarnings;
- static
- {
- String key = "gnu.xml.aelfred2.XmlParser.uriWarnings";
- GetPropertyAction a = new GetPropertyAction(key);
- uriWarnings = "true".equals(AccessController.doPrivileged(a));
- }
-
- //
- // The current XML handler interface.
- //
- private SAXDriver handler;
-
- //
- // I/O information.
- //
- private Reader reader; // current reader
- private InputStream is; // current input stream
- private int line; // current line number
- private int column; // current column number
- private int sourceType; // type of input source
- private LinkedList inputStack; // stack of input soruces
- private URLConnection externalEntity; // current external entity
- private int encoding; // current character encoding
- private int currentByteCount; // bytes read from current source
- private InputSource scratch; // temporary
-
- //
- // Buffers for decoded but unparsed character input.
- //
- private char[] readBuffer;
- private int readBufferPos;
- private int readBufferLength;
- private int readBufferOverflow; // overflow from last data chunk.
-
- //
- // Buffer for undecoded raw byte input.
- //
- private final static int READ_BUFFER_MAX = 16384;
- private byte[] rawReadBuffer;
-
-
- //
- // Buffer for attribute values, char refs, DTD stuff.
- //
- private static int DATA_BUFFER_INITIAL = 4096;
- private char[] dataBuffer;
- private int dataBufferPos;
-
- //
- // Buffer for parsed names.
- //
- private static int NAME_BUFFER_INITIAL = 1024;
- private char[] nameBuffer;
- private int nameBufferPos;
-
- //
- // Save any standalone flag
- //
- private boolean docIsStandalone;
-
- //
- // Hashtables for DTD information on elements, entities, and notations.
- // Populated until we start ignoring decls (because of skipping a PE)
- //
- private HashMap elementInfo;
- private HashMap entityInfo;
- private HashMap notationInfo;
- private boolean skippedPE;
-
- //
- // Element type currently in force.
- //
- private String currentElement;
- private int currentElementContent;
-
- //
- // Stack of entity names, to detect recursion.
- //
- private LinkedList entityStack;
-
- //
- // PE expansion is enabled in most chunks of the DTD, not all.
- // When it's enabled, literals are treated differently.
- //
- private boolean inLiteral;
- private boolean expandPE;
- private boolean peIsError;
-
- //
- // can't report entity expansion inside two constructs:
- // - attribute expansions (internal entities only)
- // - markup declarations (parameter entities only)
- //
- private boolean doReport;
-
- //
- // Symbol table, for caching interned names.
- //
- // These show up wherever XML names or nmtokens are used: naming elements,
- // attributes, PIs, notations, entities, and enumerated attribute values.
- //
- // NOTE: This hashtable doesn't grow. The default size is intended to be
- // rather large for most documents. Example: one snapshot of the DocBook
- // XML 4.1 DTD used only about 350 such names. As a rule, only pathological
- // documents (ones that don't reuse names) should ever see much collision.
- //
- // Be sure that SYMBOL_TABLE_LENGTH always stays prime, for best hashing.
- // "2039" keeps the hash table size at about two memory pages on typical
- // 32 bit hardware.
- //
- private final static int SYMBOL_TABLE_LENGTH = 2039;
-
- private Object[][] symbolTable;
-
- //
- // Hash table of attributes found in current start tag.
- //
- private String[] tagAttributes;
- private int tagAttributePos;
-
- //
- // Utility flag: have we noticed a CR while reading the last
- // data chunk? If so, we will have to go back and normalise
- // CR or CR/LF line ends.
- //
- private boolean sawCR;
-
- //
- // Utility flag: are we in CDATA? If so, whitespace isn't ignorable.
- //
- private boolean inCDATA;
-
- //
- // Xml version.
- //
- private static final int XML_10 = 0;
- private static final int XML_11 = 1;
- private int xmlVersion = XML_10;
-
- //////////////////////////////////////////////////////////////////////
- // Constructors.
- ////////////////////////////////////////////////////////////////////////
-
- /**
- * Construct a new parser with no associated handler.
- * @see #setHandler
- * @see #parse
- */
- // package private
- XmlParser()
- {
- }
-
- /**
- * Set the handler that will receive parsing events.
- * @param handler The handler to receive callback events.
- * @see #parse
- */
- // package private
- void setHandler(SAXDriver handler)
- {
- this.handler = handler;
- }
-
- /**
- * Parse an XML document from the character stream, byte stream, or URI
- * that you provide (in that order of preference). Any URI that you
- * supply will become the base URI for resolving relative URI, and may
- * be used to acquire a reader or byte stream.
- *
- * <p> Only one thread at a time may use this parser; since it is
- * private to this package, post-parse cleanup is done by the caller,
- * which MUST NOT REUSE the parser (just null it).
- *
- * @param systemId Absolute URI of the document; should never be null,
- * but may be so iff a reader <em>or</em> a stream is provided.
- * @param publicId The public identifier of the document, or null.
- * @param reader A character stream; must be null if stream isn't.
- * @param stream A byte input stream; must be null if reader isn't.
- * @param encoding The suggested encoding, or null if unknown.
- * @exception java.lang.Exception Basically SAXException or IOException
- */
- // package private
- void doParse(String systemId, String publicId, Reader reader,
- InputStream stream, String encoding)
- throws Exception
- {
- if (handler == null)
- {
- throw new IllegalStateException("no callback handler");
- }
-
- initializeVariables();
-
- // predeclare the built-in entities here (replacement texts)
- // we don't need to intern(), since we're guaranteed literals
- // are always (globally) interned.
- setInternalEntity("amp", "&#38;");
- setInternalEntity("lt", "&#60;");
- setInternalEntity("gt", "&#62;");
- setInternalEntity("apos", "&#39;");
- setInternalEntity("quot", "&#34;");
-
- try
- {
- // pushURL first to ensure locator is correct in startDocument
- // ... it might report an IO or encoding exception.
- handler.startDocument();
- pushURL(false, "[document]",
- // default baseURI: null
- new ExternalIdentifiers(publicId, systemId, null),
- reader, stream, encoding, false);
-
- parseDocument();
- }
- catch (EOFException e)
- {
- //empty input
- error("empty document, with no root element.");
- }
- finally
- {
- if (reader != null)
- {
- try
- {
- reader.close();
- }
- catch (IOException e)
- {
- /* ignore */
- }
- }
- if (stream != null)
- {
- try
- {
- stream.close();
- }
- catch (IOException e)
- {
- /* ignore */
- }
- }
- if (is != null)
- {
- try
- {
- is.close();
- }
- catch (IOException e)
- {
- /* ignore */
- }
- }
- scratch = null;
- }
- }
-
- //////////////////////////////////////////////////////////////////////
- // Error reporting.
- //////////////////////////////////////////////////////////////////////
-
- /**
- * Report an error.
- * @param message The error message.
- * @param textFound The text that caused the error (or null).
- * @see SAXDriver#error
- * @see #line
- */
- private void error(String message, String textFound, String textExpected)
- throws SAXException
- {
- if (textFound != null)
- {
- message = message + " (found \"" + textFound + "\")";
- }
- if (textExpected != null)
- {
- message = message + " (expected \"" + textExpected + "\")";
- }
- handler.fatal(message);
-
- // "can't happen"
- throw new SAXException(message);
- }
-
- /**
- * Report a serious error.
- * @param message The error message.
- * @param textFound The text that caused the error (or null).
- */
- private void error(String message, char textFound, String textExpected)
- throws SAXException
- {
- error(message, new Character(textFound).toString(), textExpected);
- }
-
- /**
- * Report typical case fatal errors.
- */
- private void error(String message)
- throws SAXException
- {
- handler.fatal(message);
- }
-
- //////////////////////////////////////////////////////////////////////
- // Major syntactic productions.
- //////////////////////////////////////////////////////////////////////
-
- /**
- * Parse an XML document.
- * <pre>
- * [1] document ::= prolog element Misc*
- * </pre>
- * <p>This is the top-level parsing function for a single XML
- * document. As a minimum, a well-formed document must have
- * a document element, and a valid document must have a prolog
- * (one with doctype) as well.
- */
- private void parseDocument()
- throws Exception
- {
- try
- { // added by MHK
- boolean sawDTD = parseProlog();
- require('<');
- parseElement(!sawDTD);
- }
- catch (EOFException ee)
- { // added by MHK
- error("premature end of file", "[EOF]", null);
- }
-
- try
- {
- parseMisc(); //skip all white, PIs, and comments
- char c = readCh(); //if this doesn't throw an exception...
- error("unexpected characters after document end", c, null);
- }
- catch (EOFException e)
- {
- return;
- }
- }
-
- static final char[] startDelimComment = { '<', '!', '-', '-' };
- static final char[] endDelimComment = { '-', '-' };
-
- /**
- * Skip a comment.
- * <pre>
- * [15] Comment ::= '&lt;!--' ((Char - '-') | ('-' (Char - '-')))* "-->"
- * </pre>
- * <p> (The <code>&lt;!--</code> has already been read.)
- */
- private void parseComment()
- throws Exception
- {
- char c;
- boolean saved = expandPE;
-
- expandPE = false;
- parseUntil(endDelimComment);
- require('>');
- expandPE = saved;
- handler.comment(dataBuffer, 0, dataBufferPos);
- dataBufferPos = 0;
- }
-
- static final char[] startDelimPI = { '<', '?' };
- static final char[] endDelimPI = { '?', '>' };
-
- /**
- * Parse a processing instruction and do a call-back.
- * <pre>
- * [16] PI ::= '&lt;?' PITarget
- * (S (Char* - (Char* '?&gt;' Char*)))?
- * '?&gt;'
- * [17] PITarget ::= Name - ( ('X'|'x') ('M'|m') ('L'|l') )
- * </pre>
- * <p> (The <code>&lt;?</code> has already been read.)
- */
- private void parsePI()
- throws SAXException, IOException
- {
- String name;
- boolean saved = expandPE;
-
- expandPE = false;
- name = readNmtoken(true);
- //NE08
- if (name.indexOf(':') >= 0)
- {
- error("Illegal character(':') in processing instruction name ",
- name, null);
- }
- if ("xml".equalsIgnoreCase(name))
- {
- error("Illegal processing instruction target", name, null);
- }
- if (!tryRead(endDelimPI))
- {
- requireWhitespace();
- parseUntil(endDelimPI);
- }
- expandPE = saved;
- handler.processingInstruction(name, dataBufferToString());
- }
-
- static final char[] endDelimCDATA = { ']', ']', '>' };
-
- private boolean isDirtyCurrentElement;
-
- /**
- * Parse a CDATA section.
- * <pre>
- * [18] CDSect ::= CDStart CData CDEnd
- * [19] CDStart ::= '&lt;![CDATA['
- * [20] CData ::= (Char* - (Char* ']]&gt;' Char*))
- * [21] CDEnd ::= ']]&gt;'
- * </pre>
- * <p> (The '&lt;![CDATA[' has already been read.)
- */
- private void parseCDSect()
- throws Exception
- {
- parseUntil(endDelimCDATA);
- dataBufferFlush();
- }
-
- /**
- * Parse the prolog of an XML document.
- * <pre>
- * [22] prolog ::= XMLDecl? Misc* (Doctypedecl Misc*)?
- * </pre>
- * <p>We do not look for the XML declaration here, because it was
- * handled by pushURL ().
- * @see pushURL
- * @return true if a DTD was read.
- */
- private boolean parseProlog()
- throws Exception
- {
- parseMisc();
-
- if (tryRead("<!DOCTYPE"))
- {
- parseDoctypedecl();
- parseMisc();
- return true;
- }
- return false;
- }
-
- private void checkLegalVersion(String version)
- throws SAXException
- {
- int len = version.length();
- for (int i = 0; i < len; i++)
- {
- char c = version.charAt(i);
- if ('0' <= c && c <= '9')
- {
- continue;
- }
- if (c == '_' || c == '.' || c == ':' || c == '-')
- {
- continue;
- }
- if ('a' <= c && c <= 'z')
- {
- continue;
- }
- if ('A' <= c && c <= 'Z')
- {
- continue;
- }
- error ("illegal character in version", version, "1.0");
- }
- }
-
- /**
- * Parse the XML declaration.
- * <pre>
- * [23] XMLDecl ::= '&lt;?xml' VersionInfo EncodingDecl? SDDecl? S? '?&gt;'
- * [24] VersionInfo ::= S 'version' Eq
- * ("'" VersionNum "'" | '"' VersionNum '"' )
- * [26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')*
- * [32] SDDecl ::= S 'standalone' Eq
- * ( "'"" ('yes' | 'no') "'"" | '"' ("yes" | "no") '"' )
- * [80] EncodingDecl ::= S 'encoding' Eq
- * ( "'" EncName "'" | "'" EncName "'" )
- * [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*
- * </pre>
- * <p> (The <code>&lt;?xml</code> and whitespace have already been read.)
- * @return the encoding in the declaration, uppercased; or null
- * @see #parseTextDecl
- * @see #setupDecoding
- */
- private String parseXMLDecl(boolean ignoreEncoding)
- throws SAXException, IOException
- {
- String version;
- String encodingName = null;
- String standalone = null;
- int flags = LIT_DISABLE_CREF | LIT_DISABLE_PE | LIT_DISABLE_EREF;
- String inputEncoding = null;
-
- switch (this.encoding)
- {
- case ENCODING_EXTERNAL:
- case ENCODING_UTF_8:
- inputEncoding = "UTF-8";
- break;
- case ENCODING_ISO_8859_1:
- inputEncoding = "ISO-8859-1";
- break;
- case ENCODING_UCS_2_12:
- inputEncoding = "UTF-16BE";
- break;
- case ENCODING_UCS_2_21:
- inputEncoding = "UTF-16LE";
- break;
- }
-
- // Read the version.
- require("version");
- parseEq();
- checkLegalVersion(version = readLiteral(flags));
- if (!version.equals("1.0"))
- {
- if (version.equals("1.1"))
- {
- handler.warn("expected XML version 1.0, not: " + version);
- xmlVersion = XML_11;
- }
- else
- {
- error("illegal XML version", version, "1.0 or 1.1");
- }
- }
- else
- {
- xmlVersion = XML_10;
- }
- // Try reading an encoding declaration.
- boolean white = tryWhitespace();
-
- if (tryRead("encoding"))
- {
- if (!white)
- {
- error("whitespace required before 'encoding='");
- }
- parseEq();
- encodingName = readLiteral(flags);
- if (!ignoreEncoding)
- {
- setupDecoding(encodingName);
- }
- }
-
- // Try reading a standalone declaration
- if (encodingName != null)
- {
- white = tryWhitespace();
- }
- if (tryRead("standalone"))
- {
- if (!white)
- {
- error("whitespace required before 'standalone='");
- }
- parseEq();
- standalone = readLiteral(flags);
- if ("yes".equals(standalone))
- {
- docIsStandalone = true;
- }
- else if (!"no".equals(standalone))
- {
- error("standalone flag must be 'yes' or 'no'");
- }
- }
-
- skipWhitespace();
- require("?>");
-
- if (inputEncoding == null)
- {
- inputEncoding = encodingName;
- }
- handler.xmlDecl(version, encodingName, docIsStandalone,
- inputEncoding);
-
- return encodingName;
- }
-
- /**
- * Parse a text declaration.
- * <pre>
- * [79] TextDecl ::= '&lt;?xml' VersionInfo? EncodingDecl S? '?&gt;'
- * [80] EncodingDecl ::= S 'encoding' Eq
- * ( '"' EncName '"' | "'" EncName "'" )
- * [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*
- * </pre>
- * <p> (The <code>&lt;?xml</code>' and whitespace have already been read.)
- * @return the encoding in the declaration, uppercased; or null
- * @see #parseXMLDecl
- * @see #setupDecoding
- */
- private String parseTextDecl(boolean ignoreEncoding)
- throws SAXException, IOException
- {
- String encodingName = null;
- int flags = LIT_DISABLE_CREF | LIT_DISABLE_PE | LIT_DISABLE_EREF;
-
- // Read an optional version.
- if (tryRead ("version"))
- {
- String version;
- parseEq();
- checkLegalVersion(version = readLiteral(flags));
-
- if (version.equals("1.1"))
- {
- if (xmlVersion == XML_10)
- {
- error("external subset has later version number.", "1.0",
- version);
- }
- handler.warn("expected XML version 1.0, not: " + version);
- xmlVersion = XML_11;
- }
- else if (!version.equals("1.0"))
- {
- error("illegal XML version", version, "1.0 or 1.1");
- }
- requireWhitespace();
- }
-
- // Read the encoding.
- require("encoding");
- parseEq();
- encodingName = readLiteral(flags);
- if (!ignoreEncoding)
- {
- setupDecoding(encodingName);
- }
- skipWhitespace();
- require("?>");
-
- return encodingName;
- }
-
- /**
- * Sets up internal state so that we can decode an entity using the
- * specified encoding. This is used when we start to read an entity
- * and we have been given knowledge of its encoding before we start to
- * read any data (e.g. from a SAX input source or from a MIME type).
- *
- * <p> It is also used after autodetection, at which point only very
- * limited adjustments to the encoding may be used (switching between
- * related builtin decoders).
- *
- * @param encodingName The name of the encoding specified by the user.
- * @exception IOException if the encoding isn't supported either
- * internally to this parser, or by the hosting JVM.
- * @see #parseXMLDecl
- * @see #parseTextDecl
- */
- private void setupDecoding(String encodingName)
- throws SAXException, IOException
- {
- encodingName = encodingName.toUpperCase();
-
- // ENCODING_EXTERNAL indicates an encoding that wasn't
- // autodetected ... we can use builtin decoders, or
- // ones from the JVM (InputStreamReader).
-
- // Otherwise we can only tweak what was autodetected, and
- // only for single byte (ASCII derived) builtin encodings.
-
- // ASCII-derived encodings
- if (encoding == ENCODING_UTF_8 || encoding == ENCODING_EXTERNAL)
- {
- if (encodingName.equals("ISO-8859-1")
- || encodingName.equals("8859_1")
- || encodingName.equals("ISO8859_1"))
- {
- encoding = ENCODING_ISO_8859_1;
- return;
- }
- else if (encodingName.equals("US-ASCII")
- || encodingName.equals("ASCII"))
- {
- encoding = ENCODING_ASCII;
- return;
- }
- else if (encodingName.equals("UTF-8")
- || encodingName.equals("UTF8"))
- {
- encoding = ENCODING_UTF_8;
- return;
- }
- else if (encoding != ENCODING_EXTERNAL)
- {
- // used to start with a new reader ...
- throw new UnsupportedEncodingException(encodingName);
- }
- // else fallthrough ...
- // it's ASCII-ish and something other than a builtin
- }
-
- // Unicode and such
- if (encoding == ENCODING_UCS_2_12 || encoding == ENCODING_UCS_2_21)
- {
- if (!(encodingName.equals("ISO-10646-UCS-2")
- || encodingName.equals("UTF-16")
- || encodingName.equals("UTF-16BE")
- || encodingName.equals("UTF-16LE")))
- {
- error("unsupported Unicode encoding", encodingName, "UTF-16");
- }
- return;
- }
-
- // four byte encodings
- if (encoding == ENCODING_UCS_4_1234
- || encoding == ENCODING_UCS_4_4321
- || encoding == ENCODING_UCS_4_2143
- || encoding == ENCODING_UCS_4_3412)
- {
- // Strictly: "UCS-4" == "UTF-32BE"; also, "UTF-32LE" exists
- if (!encodingName.equals("ISO-10646-UCS-4"))
- {
- error("unsupported 32-bit encoding", encodingName,
- "ISO-10646-UCS-4");
- }
- return;
- }
-
- // assert encoding == ENCODING_EXTERNAL
- // if (encoding != ENCODING_EXTERNAL)
- // throw new RuntimeException ("encoding = " + encoding);
-
- if (encodingName.equals("UTF-16BE"))
- {
- encoding = ENCODING_UCS_2_12;
- return;
- }
- if (encodingName.equals("UTF-16LE"))
- {
- encoding = ENCODING_UCS_2_21;
- return;
- }
-
- // We couldn't use the builtin decoders at all. But we can try to
- // create a reader, since we haven't messed up buffering. Tweak
- // the encoding name if necessary.
-
- if (encodingName.equals("UTF-16")
- || encodingName.equals("ISO-10646-UCS-2"))
- {
- encodingName = "Unicode";
- }
- // Ignoring all the EBCDIC aliases here
-
- reader = new InputStreamReader(is, encodingName);
- sourceType = INPUT_READER;
- }
-
- /**
- * Parse miscellaneous markup outside the document element and DOCTYPE
- * declaration.
- * <pre>
- * [27] Misc ::= Comment | PI | S
- * </pre>
- */
- private void parseMisc()
- throws Exception
- {
- while (true)
- {
- skipWhitespace();
- if (tryRead(startDelimPI))
- {
- parsePI();
- }
- else if (tryRead(startDelimComment))
- {
- parseComment();
- }
- else
- {
- return;
- }
- }
- }
-
- /**
- * Parse a document type declaration.
- * <pre>
- * [28] doctypedecl ::= '&lt;!DOCTYPE' S Name (S ExternalID)? S?
- * ('[' (markupdecl | PEReference | S)* ']' S?)? '&gt;'
- * </pre>
- * <p> (The <code>&lt;!DOCTYPE</code> has already been read.)
- */
- private void parseDoctypedecl()
- throws Exception
- {
- String rootName;
- ExternalIdentifiers ids;
-
- // Read the document type name.
- requireWhitespace();
- rootName = readNmtoken(true);
-
- // Read the External subset's IDs
- skipWhitespace();
- ids = readExternalIds(false, true);
-
- // report (a) declaration of name, (b) lexical info (ids)
- handler.doctypeDecl(rootName, ids.publicId, ids.systemId);
-
- // Internal subset is parsed first, if present
- skipWhitespace();
- if (tryRead('['))
- {
-
- // loop until the subset ends
- while (true)
- {
- doReport = expandPE = true;
- skipWhitespace();
- doReport = expandPE = false;
- if (tryRead(']'))
- {
- break; // end of subset
- }
- else
- {
- // WFC, PEs in internal subset (only between decls)
- peIsError = expandPE = true;
- parseMarkupdecl();
- peIsError = expandPE = false;
- }
- }
- }
- skipWhitespace();
- require('>');
-
- // Read the external subset, if any
- InputSource subset;
-
- if (ids.systemId == null)
- {
- subset = handler.getExternalSubset(rootName,
- handler.getSystemId());
- }
- else
- {
- subset = null;
- }
- if (ids.systemId != null || subset != null)
- {
- pushString(null, ">");
-
- // NOTE: [dtd] is so we say what SAX2 expects,
- // though it's misleading (subset, not entire dtd)
- if (ids.systemId != null)
- {
- pushURL(true, "[dtd]", ids, null, null, null, true);
- }
- else
- {
- handler.warn("modifying document by adding external subset");
- pushURL(true, "[dtd]",
- new ExternalIdentifiers(subset.getPublicId(),
- subset.getSystemId(),
- null),
- subset.getCharacterStream(),
- subset.getByteStream(),
- subset.getEncoding(),
- false);
- }
-
- // Loop until we end up back at '>'
- while (true)
- {
- doReport = expandPE = true;
- skipWhitespace();
- doReport = expandPE = false;
- if (tryRead('>'))
- {
- break;
- }
- else
- {
- expandPE = true;
- parseMarkupdecl();
- expandPE = false;
- }
- }
-
- // the ">" string isn't popped yet
- if (inputStack.size() != 1)
- {
- error("external subset has unmatched '>'");
- }
- }
-
- // done dtd
- handler.endDoctype();
- expandPE = false;
- doReport = true;
- }
-
- /**
- * Parse a markup declaration in the internal or external DTD subset.
- * <pre>
- * [29] markupdecl ::= elementdecl | Attlistdecl | EntityDecl
- * | NotationDecl | PI | Comment
- * [30] extSubsetDecl ::= (markupdecl | conditionalSect
- * | PEReference | S) *
- * </pre>
- * <p> Reading toplevel PE references is handled as a lexical issue
- * by the caller, as is whitespace.
- */
- private void parseMarkupdecl()
- throws Exception
- {
- char[] saved = null;
- boolean savedPE = expandPE;
-
- // prevent "<%foo;" and ensures saved entity is right
- require('<');
- unread('<');
- expandPE = false;
-
- if (tryRead("<!ELEMENT"))
- {
- saved = readBuffer;
- expandPE = savedPE;
- parseElementDecl();
- }
- else if (tryRead("<!ATTLIST"))
- {
- saved = readBuffer;
- expandPE = savedPE;
- parseAttlistDecl();
- }
- else if (tryRead("<!ENTITY"))
- {
- saved = readBuffer;
- expandPE = savedPE;
- parseEntityDecl();
- }
- else if (tryRead("<!NOTATION"))
- {
- saved = readBuffer;
- expandPE = savedPE;
- parseNotationDecl();
- }
- else if (tryRead(startDelimPI))
- {
- saved = readBuffer;
- expandPE = savedPE;
- parsePI();
- }
- else if (tryRead(startDelimComment))
- {
- saved = readBuffer;
- expandPE = savedPE;
- parseComment();
- }
- else if (tryRead("<!["))
- {
- saved = readBuffer;
- expandPE = savedPE;
- if (inputStack.size() > 0)
- {
- parseConditionalSect(saved);
- }
- else
- {
- error("conditional sections illegal in internal subset");
- }
- }
- else
- {
- error("expected markup declaration");
- }
-
- // VC: Proper Decl/PE Nesting
- if (readBuffer != saved)
- {
- handler.verror("Illegal Declaration/PE nesting");
- }
- }
-
- /**
- * Parse an element, with its tags.
- * <pre>
- * [39] element ::= EmptyElementTag | STag content ETag
- * [40] STag ::= '&lt;' Name (S Attribute)* S? '&gt;'
- * [44] EmptyElementTag ::= '&lt;' Name (S Attribute)* S? '/&gt;'
- * </pre>
- * <p> (The '&lt;' has already been read.)
- * <p>NOTE: this method actually chains onto parseContent (), if necessary,
- * and parseContent () will take care of calling parseETag ().
- */
- private void parseElement(boolean maybeGetSubset)
- throws Exception
- {
- String gi;
- char c;
- int oldElementContent = currentElementContent;
- String oldElement = currentElement;
- ElementDecl element;
-
- // This is the (global) counter for the
- // array of specified attributes.
- tagAttributePos = 0;
-
- // Read the element type name.
- gi = readNmtoken(true);
-
- // If we saw no DTD, and this is the document root element,
- // let the application modify the input stream by providing one.
- if (maybeGetSubset)
- {
- InputSource subset = handler.getExternalSubset(gi,
- handler.getSystemId());
- if (subset != null)
- {
- String publicId = subset.getPublicId();
- String systemId = subset.getSystemId();
-
- handler.warn("modifying document by adding DTD");
- handler.doctypeDecl(gi, publicId, systemId);
- pushString(null, ">");
-
- // NOTE: [dtd] is so we say what SAX2 expects,
- // though it's misleading (subset, not entire dtd)
- pushURL(true, "[dtd]",
- new ExternalIdentifiers(publicId, systemId, null),
- subset.getCharacterStream(),
- subset.getByteStream(),
- subset.getEncoding(),
- false);
-
- // Loop until we end up back at '>'
- while (true)
- {
- doReport = expandPE = true;
- skipWhitespace();
- doReport = expandPE = false;
- if (tryRead('>'))
- {
- break;
- }
- else
- {
- expandPE = true;
- parseMarkupdecl();
- expandPE = false;
- }
- }
-
- // the ">" string isn't popped yet
- if (inputStack.size() != 1)
- {
- error("external subset has unmatched '>'");
- }
-
- handler.endDoctype();
- }
- }
-
- // Determine the current content type.
- currentElement = gi;
- element = (ElementDecl) elementInfo.get(gi);
- currentElementContent = getContentType(element, CONTENT_ANY);
-
- // Read the attributes, if any.
- // After this loop, "c" is the closing delimiter.
- boolean white = tryWhitespace();
- c = readCh();
- while (c != '/' && c != '>')
- {
- unread(c);
- if (!white)
- {
- error("need whitespace between attributes");
- }
- parseAttribute(gi);
- white = tryWhitespace();
- c = readCh();
- }
-
- // Supply any defaulted attributes.
- Iterator atts = declaredAttributes(element);
- if (atts != null)
- {
- String aname;
-loop:
- while (atts.hasNext())
- {
- aname = (String) atts.next();
- // See if it was specified.
- for (int i = 0; i < tagAttributePos; i++)
- {
- if (tagAttributes[i] == aname)
- {
- continue loop;
- }
- }
- // ... or has a default
- String value = getAttributeDefaultValue(gi, aname);
-
- if (value == null)
- {
- continue;
- }
- handler.attribute(aname, value, false);
- }
- }
-
- // Figure out if this is a start tag
- // or an empty element, and dispatch an
- // event accordingly.
- switch (c)
- {
- case '>':
- handler.startElement(gi);
- parseContent();
- break;
- case '/':
- require('>');
- handler.startElement(gi);
- handler.endElement(gi);
- break;
- }
-
- // Restore the previous state.
- currentElement = oldElement;
- currentElementContent = oldElementContent;
- }
-
- /**
- * Parse an attribute assignment.
- * <pre>
- * [41] Attribute ::= Name Eq AttValue
- * </pre>
- * @param name The name of the attribute's element.
- * @see SAXDriver#attribute
- */
- private void parseAttribute(String name)
- throws Exception
- {
- String aname;
- String type;
- String value;
- int flags = LIT_ATTRIBUTE | LIT_ENTITY_REF;
-
- // Read the attribute name.
- aname = readNmtoken(true);
- type = getAttributeType(name, aname);
-
- // Parse '='
- parseEq();
-
- // Read the value, normalizing whitespace
- // unless it is CDATA.
- if (handler.stringInterning)
- {
- if (type == "CDATA" || type == null)
- {
- value = readLiteral(flags);
- }
- else
- {
- value = readLiteral(flags | LIT_NORMALIZE);
- }
- }
- else
- {
- if (type.equals("CDATA") || type == null)
- {
- value = readLiteral(flags);
- }
- else
- {
- value = readLiteral(flags | LIT_NORMALIZE);
- }
- }
-
- // WFC: no duplicate attributes
- for (int i = 0; i < tagAttributePos; i++)
- {
- if (aname.equals(tagAttributes [i]))
- {
- error("duplicate attribute", aname, null);
- }
- }
-
- // Inform the handler about the
- // attribute.
- handler.attribute(aname, value, true);
- dataBufferPos = 0;
-
- // Note that the attribute has been
- // specified.
- if (tagAttributePos == tagAttributes.length)
- {
- String newAttrib[] = new String[tagAttributes.length * 2];
- System.arraycopy(tagAttributes, 0, newAttrib, 0, tagAttributePos);
- tagAttributes = newAttrib;
- }
- tagAttributes[tagAttributePos++] = aname;
- }
-
- /**
- * Parse an equals sign surrounded by optional whitespace.
- * <pre>
- * [25] Eq ::= S? '=' S?
- * </pre>
- */
- private void parseEq()
- throws SAXException, IOException
- {
- skipWhitespace();
- require('=');
- skipWhitespace();
- }
-
- /**
- * Parse an end tag.
- * <pre>
- * [42] ETag ::= '</' Name S? '>'
- * </pre>
- * <p>NOTE: parseContent () chains to here, we already read the
- * "&lt;/".
- */
- private void parseETag()
- throws Exception
- {
- require(currentElement);
- skipWhitespace();
- require('>');
- handler.endElement(currentElement);
- // not re-reporting any SAXException re bogus end tags,
- // even though that diagnostic might be clearer ...
- }
-
- /**
- * Parse the content of an element.
- * <pre>
- * [43] content ::= (element | CharData | Reference
- * | CDSect | PI | Comment)*
- * [67] Reference ::= EntityRef | CharRef
- * </pre>
- * <p> NOTE: consumes ETtag.
- */
- private void parseContent()
- throws Exception
- {
- char c;
-
- while (true)
- {
- // consume characters (or ignorable whitspace) until delimiter
- parseCharData();
-
- // Handle delimiters
- c = readCh();
- switch (c)
- {
- case '&': // Found "&"
- c = readCh();
- if (c == '#')
- {
- parseCharRef();
- }
- else
- {
- unread(c);
- parseEntityRef(true);
- }
- isDirtyCurrentElement = true;
- break;
-
- case '<': // Found "<"
- dataBufferFlush();
- c = readCh();
- switch (c)
- {
- case '!': // Found "<!"
- c = readCh();
- switch (c)
- {
- case '-': // Found "<!-"
- require('-');
- isDirtyCurrentElement = false;
- parseComment();
- break;
- case '[': // Found "<!["
- isDirtyCurrentElement = false;
- require("CDATA[");
- handler.startCDATA();
- inCDATA = true;
- parseCDSect();
- inCDATA = false;
- handler.endCDATA();
- break;
- default:
- error("expected comment or CDATA section", c, null);
- break;
- }
- break;
-
- case '?': // Found "<?"
- isDirtyCurrentElement = false;
- parsePI();
- break;
-
- case '/': // Found "</"
- isDirtyCurrentElement = false;
- parseETag();
- return;
-
- default: // Found "<" followed by something else
- isDirtyCurrentElement = false;
- unread(c);
- parseElement(false);
- break;
- }
- }
- }
- }
-
- /**
- * Parse an element type declaration.
- * <pre>
- * [45] elementdecl ::= '&lt;!ELEMENT' S Name S contentspec S? '&gt;'
- * </pre>
- * <p> NOTE: the '&lt;!ELEMENT' has already been read.
- */
- private void parseElementDecl()
- throws Exception
- {
- String name;
-
- requireWhitespace();
- // Read the element type name.
- name = readNmtoken(true);
-
- requireWhitespace();
- // Read the content model.
- parseContentspec(name);
-
- skipWhitespace();
- require('>');
- }
-
- /**
- * Content specification.
- * <pre>
- * [46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | elements
- * </pre>
- */
- private void parseContentspec(String name)
- throws Exception
- {
- // FIXME: move elementDecl() into setElement(), pass EMTPY/ANY ...
- if (tryRead("EMPTY"))
- {
- setElement(name, CONTENT_EMPTY, null, null);
- if (!skippedPE)
- {
- handler.getDeclHandler().elementDecl(name, "EMPTY");
- }
- return;
- }
- else if (tryRead("ANY"))
- {
- setElement(name, CONTENT_ANY, null, null);
- if (!skippedPE)
- {
- handler.getDeclHandler().elementDecl(name, "ANY");
- }
- return;
- }
- else
- {
- String model;
- char[] saved;
-
- require('(');
- saved = readBuffer;
- dataBufferAppend('(');
- skipWhitespace();
- if (tryRead("#PCDATA"))
- {
- dataBufferAppend("#PCDATA");
- parseMixed(saved);
- model = dataBufferToString();
- setElement(name, CONTENT_MIXED, model, null);
- }
- else
- {
- parseElements(saved);
- model = dataBufferToString();
- setElement(name, CONTENT_ELEMENTS, model, null);
- }
- if (!skippedPE)
- {
- handler.getDeclHandler().elementDecl(name, model);
- }
- }
- }
-
- /**
- * Parse an element-content model.
- * <pre>
- * [47] elements ::= (choice | seq) ('?' | '*' | '+')?
- * [49] choice ::= '(' S? cp (S? '|' S? cp)+ S? ')'
- * [50] seq ::= '(' S? cp (S? ',' S? cp)* S? ')'
- * </pre>
- *
- * <p> NOTE: the opening '(' and S have already been read.
- *
- * @param saved Buffer for entity that should have the terminal ')'
- */
- private void parseElements(char[] saved)
- throws Exception
- {
- char c;
- char sep;
-
- // Parse the first content particle
- skipWhitespace();
- parseCp();
-
- // Check for end or for a separator.
- skipWhitespace();
- c = readCh();
- switch (c)
- {
- case ')':
- // VC: Proper Group/PE Nesting
- if (readBuffer != saved)
- {
- handler.verror("Illegal Group/PE nesting");
- }
-
- dataBufferAppend(')');
- c = readCh();
- switch (c)
- {
- case '*':
- case '+':
- case '?':
- dataBufferAppend(c);
- break;
- default:
- unread(c);
- }
- return;
- case ',': // Register the separator.
- case '|':
- sep = c;
- dataBufferAppend(c);
- break;
- default:
- error("bad separator in content model", c, null);
- return;
- }
-
- // Parse the rest of the content model.
- while (true)
- {
- skipWhitespace();
- parseCp();
- skipWhitespace();
- c = readCh();
- if (c == ')')
- {
- // VC: Proper Group/PE Nesting
- if (readBuffer != saved)
- {
- handler.verror("Illegal Group/PE nesting");
- }
-
- dataBufferAppend(')');
- break;
- }
- else if (c != sep)
- {
- error("bad separator in content model", c, null);
- return;
- }
- else
- {
- dataBufferAppend(c);
- }
- }
-
- // Check for the occurrence indicator.
- c = readCh();
- switch (c)
- {
- case '?':
- case '*':
- case '+':
- dataBufferAppend(c);
- return;
- default:
- unread(c);
- return;
- }
- }
-
- /**
- * Parse a content particle.
- * <pre>
- * [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')?
- * </pre>
- */
- private void parseCp()
- throws Exception
- {
- if (tryRead('('))
- {
- dataBufferAppend('(');
- parseElements(readBuffer);
- }
- else
- {
- dataBufferAppend(readNmtoken(true));
- char c = readCh();
- switch (c)
- {
- case '?':
- case '*':
- case '+':
- dataBufferAppend(c);
- break;
- default:
- unread(c);
- break;
- }
- }
- }
-
- /**
- * Parse mixed content.
- * <pre>
- * [51] Mixed ::= '(' S? ( '#PCDATA' (S? '|' S? Name)*) S? ')*'
- * | '(' S? ('#PCDATA') S? ')'
- * </pre>
- *
- * @param saved Buffer for entity that should have the terminal ')'
- */
- private void parseMixed(char[] saved)
- throws Exception
- {
- // Check for PCDATA alone.
- skipWhitespace();
- if (tryRead(')'))
- {
- // VC: Proper Group/PE Nesting
- if (readBuffer != saved)
- {
- handler.verror("Illegal Group/PE nesting");
- }
-
- dataBufferAppend(")*");
- tryRead('*');
- return;
- }
-
- // Parse mixed content.
- skipWhitespace();
- while (!tryRead(")"))
- {
- require('|');
- dataBufferAppend('|');
- skipWhitespace();
- dataBufferAppend(readNmtoken(true));
- skipWhitespace();
- }
-
- // VC: Proper Group/PE Nesting
- if (readBuffer != saved)
- {
- handler.verror("Illegal Group/PE nesting");
- }
-
- require('*');
- dataBufferAppend(")*");
- }
-
- /**
- * Parse an attribute list declaration.
- * <pre>
- * [52] AttlistDecl ::= '&lt;!ATTLIST' S Name AttDef* S? '&gt;'
- * </pre>
- * <p>NOTE: the '&lt;!ATTLIST' has already been read.
- */
- private void parseAttlistDecl()
- throws Exception
- {
- String elementName;
-
- requireWhitespace();
- elementName = readNmtoken(true);
- boolean white = tryWhitespace();
- while (!tryRead('>'))
- {
- if (!white)
- {
- error("whitespace required before attribute definition");
- }
- parseAttDef(elementName);
- white = tryWhitespace();
- }
- }
-
- /**
- * Parse a single attribute definition.
- * <pre>
- * [53] AttDef ::= S Name S AttType S DefaultDecl
- * </pre>
- */
- private void parseAttDef(String elementName)
- throws Exception
- {
- String name;
- String type;
- String enumer = null;
-
- // Read the attribute name.
- name = readNmtoken(true);
-
- // Read the attribute type.
- requireWhitespace();
- type = readAttType();
-
- // Get the string of enumerated values if necessary.
- if (handler.stringInterning)
- {
- if ("ENUMERATION" == type || "NOTATION" == type)
- {
- enumer = dataBufferToString();
- }
- }
- else
- {
- if ("ENUMERATION".equals(type) || "NOTATION".equals(type))
- {
- enumer = dataBufferToString();
- }
- }
-
- // Read the default value.
- requireWhitespace();
- parseDefault(elementName, name, type, enumer);
- }
-
- /**
- * Parse the attribute type.
- * <pre>
- * [54] AttType ::= StringType | TokenizedType | EnumeratedType
- * [55] StringType ::= 'CDATA'
- * [56] TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY'
- * | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS'
- * [57] EnumeratedType ::= NotationType | Enumeration
- * </pre>
- */
- private String readAttType()
- throws Exception
- {
- if (tryRead('('))
- {
- parseEnumeration(false);
- return "ENUMERATION";
- }
- else
- {
- String typeString = readNmtoken(true);
- if (handler.stringInterning)
- {
- if ("NOTATION" == typeString)
- {
- parseNotationType();
- return typeString;
- }
- else if ("CDATA" == typeString
- || "ID" == typeString
- || "IDREF" == typeString
- || "IDREFS" == typeString
- || "ENTITY" == typeString
- || "ENTITIES" == typeString
- || "NMTOKEN" == typeString
- || "NMTOKENS" == typeString)
- {
- return typeString;
- }
- }
- else
- {
- if ("NOTATION".equals(typeString))
- {
- parseNotationType();
- return typeString;
- }
- else if ("CDATA".equals(typeString)
- || "ID".equals(typeString)
- || "IDREF".equals(typeString)
- || "IDREFS".equals(typeString)
- || "ENTITY".equals(typeString)
- || "ENTITIES".equals(typeString)
- || "NMTOKEN".equals(typeString)
- || "NMTOKENS".equals(typeString))
- {
- return typeString;
- }
- }
- error("illegal attribute type", typeString, null);
- return null;
- }
- }
-
- /**
- * Parse an enumeration.
- * <pre>
- * [59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'
- * </pre>
- * <p>NOTE: the '(' has already been read.
- */
- private void parseEnumeration(boolean isNames)
- throws Exception
- {
- dataBufferAppend('(');
-
- // Read the first token.
- skipWhitespace();
- dataBufferAppend(readNmtoken(isNames));
- // Read the remaining tokens.
- skipWhitespace();
- while (!tryRead(')'))
- {
- require('|');
- dataBufferAppend('|');
- skipWhitespace();
- dataBufferAppend(readNmtoken (isNames));
- skipWhitespace();
- }
- dataBufferAppend(')');
- }
-
- /**
- * Parse a notation type for an attribute.
- * <pre>
- * [58] NotationType ::= 'NOTATION' S '(' S? NameNtoks
- * (S? '|' S? name)* S? ')'
- * </pre>
- * <p>NOTE: the 'NOTATION' has already been read
- */
- private void parseNotationType()
- throws Exception
- {
- requireWhitespace();
- require('(');
-
- parseEnumeration(true);
- }
-
- /**
- * Parse the default value for an attribute.
- * <pre>
- * [60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED'
- * | (('#FIXED' S)? AttValue)
- * </pre>
- */
- private void parseDefault(String elementName, String name,
- String type, String enumer)
- throws Exception
- {
- int valueType = ATTRIBUTE_DEFAULT_SPECIFIED;
- String value = null;
- int flags = LIT_ATTRIBUTE;
- boolean saved = expandPE;
- String defaultType = null;
-
- // LIT_ATTRIBUTE forces '<' checks now (ASAP) and turns whitespace
- // chars to spaces (doesn't matter when that's done if it doesn't
- // interfere with char refs expanding to whitespace).
-
- if (!skippedPE)
- {
- flags |= LIT_ENTITY_REF;
- if (handler.stringInterning)
- {
- if ("CDATA" != type)
- {
- flags |= LIT_NORMALIZE;
- }
- }
- else
- {
- if (!"CDATA".equals(type))
- {
- flags |= LIT_NORMALIZE;
- }
- }
- }
-
- expandPE = false;
- if (tryRead('#'))
- {
- if (tryRead("FIXED"))
- {
- defaultType = "#FIXED";
- valueType = ATTRIBUTE_DEFAULT_FIXED;
- requireWhitespace();
- value = readLiteral(flags);
- }
- else if (tryRead("REQUIRED"))
- {
- defaultType = "#REQUIRED";
- valueType = ATTRIBUTE_DEFAULT_REQUIRED;
- }
- else if (tryRead("IMPLIED"))
- {
- defaultType = "#IMPLIED";
- valueType = ATTRIBUTE_DEFAULT_IMPLIED;
- }
- else
- {
- error("illegal keyword for attribute default value");
- }
- }
- else
- {
- value = readLiteral(flags);
- }
- expandPE = saved;
- setAttribute(elementName, name, type, enumer, value, valueType);
- if (handler.stringInterning)
- {
- if ("ENUMERATION" == type)
- {
- type = enumer;
- }
- else if ("NOTATION" == type)
- {
- type = "NOTATION " + enumer;
- }
- }
- else
- {
- if ("ENUMERATION".equals(type))
- {
- type = enumer;
- }
- else if ("NOTATION".equals(type))
- {
- type = "NOTATION " + enumer;
- }
- }
- if (!skippedPE)
- {
- handler.getDeclHandler().attributeDecl(elementName, name, type,
- defaultType, value);
- }
- }
-
- /**
- * Parse a conditional section.
- * <pre>
- * [61] conditionalSect ::= includeSect || ignoreSect
- * [62] includeSect ::= '&lt;![' S? 'INCLUDE' S? '['
- * extSubsetDecl ']]&gt;'
- * [63] ignoreSect ::= '&lt;![' S? 'IGNORE' S? '['
- * ignoreSectContents* ']]&gt;'
- * [64] ignoreSectContents ::= Ignore
- * ('&lt;![' ignoreSectContents* ']]&gt;' Ignore )*
- * [65] Ignore ::= Char* - (Char* ( '&lt;![' | ']]&gt;') Char* )
- * </pre>
- * <p> NOTE: the '&gt;![' has already been read.
- */
- private void parseConditionalSect(char[] saved)
- throws Exception
- {
- skipWhitespace();
- if (tryRead("INCLUDE"))
- {
- skipWhitespace();
- require('[');
- // VC: Proper Conditional Section/PE Nesting
- if (readBuffer != saved)
- {
- handler.verror("Illegal Conditional Section/PE nesting");
- }
- skipWhitespace();
- while (!tryRead("]]>"))
- {
- parseMarkupdecl();
- skipWhitespace();
- }
- }
- else if (tryRead("IGNORE"))
- {
- skipWhitespace();
- require('[');
- // VC: Proper Conditional Section/PE Nesting
- if (readBuffer != saved)
- {
- handler.verror("Illegal Conditional Section/PE nesting");
- }
- int nesting = 1;
- char c;
- expandPE = false;
- for (int nest = 1; nest > 0; )
- {
- c = readCh();
- switch (c)
- {
- case '<':
- if (tryRead("!["))
- {
- nest++;
- }
- case ']':
- if (tryRead("]>"))
- {
- nest--;
- }
- }
- }
- expandPE = true;
- }
- else
- {
- error("conditional section must begin with INCLUDE or IGNORE");
- }
- }
-
- private void parseCharRef()
- throws SAXException, IOException
- {
- parseCharRef(true /* do flushDataBuffer by default */);
- }
-
- /**
- * Try to read a character reference without consuming data from buffer.
- * <pre>
- * [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'
- * </pre>
- * <p>NOTE: the '&#' has already been read.
- */
- private void tryReadCharRef()
- throws SAXException, IOException
- {
- int value = 0;
- char c;
-
- if (tryRead('x'))
- {
-loop1:
- while (true)
- {
- c = readCh();
- if (c == ';')
- {
- break loop1;
- }
- else
- {
- int n = Character.digit(c, 16);
- if (n == -1)
- {
- error("illegal character in character reference", c, null);
- break loop1;
- }
- value *= 16;
- value += n;
- }
- }
- }
- else
- {
-loop2:
- while (true)
- {
- c = readCh();
- if (c == ';')
- {
- break loop2;
- }
- else
- {
- int n = Character.digit(c, 10);
- if (n == -1)
- {
- error("illegal character in character reference", c, null);
- break loop2;
- }
- value *= 10;
- value += n;
- }
- }
- }
-
- // check for character refs being legal XML
- if ((value < 0x0020
- && ! (value == '\n' || value == '\t' || value == '\r'))
- || (value >= 0xD800 && value <= 0xDFFF)
- || value == 0xFFFE || value == 0xFFFF
- || value > 0x0010ffff)
- {
- error("illegal XML character reference U+"
- + Integer.toHexString(value));
- }
-
- // Check for surrogates: 00000000 0000xxxx yyyyyyyy zzzzzzzz
- // (1101|10xx|xxyy|yyyy + 1101|11yy|zzzz|zzzz:
- if (value > 0x0010ffff)
- {
- // too big for surrogate
- error("character reference " + value + " is too large for UTF-16",
- new Integer(value).toString(), null);
- }
-
- }
-
- /**
- * Read and interpret a character reference.
- * <pre>
- * [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'
- * </pre>
- * <p>NOTE: the '&#' has already been read.
- */
- private void parseCharRef(boolean doFlush)
- throws SAXException, IOException
- {
- int value = 0;
- char c;
-
- if (tryRead('x'))
- {
-loop1:
- while (true)
- {
- c = readCh();
- if (c == ';')
- {
- break loop1;
- }
- else
- {
- int n = Character.digit(c, 16);
- if (n == -1)
- {
- error("illegal character in character reference", c, null);
- break loop1;
- }
- value *= 16;
- value += n;
- }
- }
- }
- else
- {
-loop2:
- while (true)
- {
- c = readCh();
- if (c == ';')
- {
- break loop2;
- }
- else
- {
- int n = Character.digit(c, 10);
- if (n == -1)
- {
- error("illegal character in character reference", c, null);
- break loop2;
- }
- value *= 10;
- value += c - '0';
- }
- }
- }
-
- // check for character refs being legal XML
- if ((value < 0x0020
- && ! (value == '\n' || value == '\t' || value == '\r'))
- || (value >= 0xD800 && value <= 0xDFFF)
- || value == 0xFFFE || value == 0xFFFF
- || value > 0x0010ffff)
- {
- error("illegal XML character reference U+"
- + Integer.toHexString(value));
- }
-
- // Check for surrogates: 00000000 0000xxxx yyyyyyyy zzzzzzzz
- // (1101|10xx|xxyy|yyyy + 1101|11yy|zzzz|zzzz:
- if (value <= 0x0000ffff)
- {
- // no surrogates needed
- dataBufferAppend((char) value);
- }
- else if (value <= 0x0010ffff)
- {
- value -= 0x10000;
- // > 16 bits, surrogate needed
- dataBufferAppend((char) (0xd800 | (value >> 10)));
- dataBufferAppend((char) (0xdc00 | (value & 0x0003ff)));
- }
- else
- {
- // too big for surrogate
- error("character reference " + value + " is too large for UTF-16",
- new Integer(value).toString(), null);
- }
- if (doFlush)
- {
- dataBufferFlush();
- }
- }
-
- /**
- * Parse and expand an entity reference.
- * <pre>
- * [68] EntityRef ::= '&' Name ';'
- * </pre>
- * <p>NOTE: the '&amp;' has already been read.
- * @param externalAllowed External entities are allowed here.
- */
- private void parseEntityRef(boolean externalAllowed)
- throws SAXException, IOException
- {
- String name;
-
- name = readNmtoken(true);
- require(';');
- switch (getEntityType(name))
- {
- case ENTITY_UNDECLARED:
- // NOTE: XML REC describes amazingly convoluted handling for
- // this case. Nothing as meaningful as being a WFness error
- // unless the processor might _legitimately_ not have seen a
- // declaration ... which is what this implements.
- String message;
-
- message = "reference to undeclared general entity " + name;
- if (skippedPE && !docIsStandalone)
- {
- handler.verror(message);
- // we don't know this entity, and it might be external...
- if (externalAllowed)
- {
- handler.skippedEntity(name);
- }
- }
- else
- {
- error(message);
- }
- break;
- case ENTITY_INTERNAL:
- pushString(name, getEntityValue(name));
-
- //workaround for possible input pop before marking
- //the buffer reading position
- char t = readCh();
- unread(t);
- int bufferPosMark = readBufferPos;
-
- int end = readBufferPos + getEntityValue(name).length();
- for (int k = readBufferPos; k < end; k++)
- {
- t = readCh();
- if (t == '&')
- {
- t = readCh();
- if (t == '#')
- {
- //try to match a character ref
- tryReadCharRef();
-
- //everything has been read
- if (readBufferPos >= end)
- {
- break;
- }
- k = readBufferPos;
- continue;
- }
- else if (Character.isLetter(t))
- {
- //looks like an entity ref
- unread(t);
- readNmtoken(true);
- require(';');
-
- //everything has been read
- if (readBufferPos >= end)
- {
- break;
- }
- k = readBufferPos;
- continue;
- }
- error(" malformed entity reference");
- }
-
- }
- readBufferPos = bufferPosMark;
- break;
- case ENTITY_TEXT:
- if (externalAllowed)
- {
- pushURL(false, name, getEntityIds(name),
- null, null, null, true);
- }
- else
- {
- error("reference to external entity in attribute value.",
- name, null);
- }
- break;
- case ENTITY_NDATA:
- if (externalAllowed)
- {
- error("unparsed entity reference in content", name, null);
- }
- else
- {
- error("reference to external entity in attribute value.",
- name, null);
- }
- break;
- default:
- throw new RuntimeException();
- }
- }
-
- /**
- * Parse and expand a parameter entity reference.
- * <pre>
- * [69] PEReference ::= '%' Name ';'
- * </pre>
- * <p>NOTE: the '%' has already been read.
- */
- private void parsePEReference()
- throws SAXException, IOException
- {
- String name;
-
- name = "%" + readNmtoken(true);
- require(';');
- switch (getEntityType(name))
- {
- case ENTITY_UNDECLARED:
- // VC: Entity Declared
- handler.verror("reference to undeclared parameter entity " + name);
-
- // we should disable handling of all subsequent declarations
- // unless this is a standalone document (info discarded)
- break;
- case ENTITY_INTERNAL:
- if (inLiteral)
- {
- pushString(name, getEntityValue(name));
- }
- else
- {
- pushString(name, ' ' + getEntityValue(name) + ' ');
- }
- break;
- case ENTITY_TEXT:
- if (!inLiteral)
- {
- pushString(null, " ");
- }
- pushURL(true, name, getEntityIds(name), null, null, null, true);
- if (!inLiteral)
- {
- pushString(null, " ");
- }
- break;
- }
- }
-
- /**
- * Parse an entity declaration.
- * <pre>
- * [70] EntityDecl ::= GEDecl | PEDecl
- * [71] GEDecl ::= '&lt;!ENTITY' S Name S EntityDef S? '&gt;'
- * [72] PEDecl ::= '&lt;!ENTITY' S '%' S Name S PEDef S? '&gt;'
- * [73] EntityDef ::= EntityValue | (ExternalID NDataDecl?)
- * [74] PEDef ::= EntityValue | ExternalID
- * [75] ExternalID ::= 'SYSTEM' S SystemLiteral
- * | 'PUBLIC' S PubidLiteral S SystemLiteral
- * [76] NDataDecl ::= S 'NDATA' S Name
- * </pre>
- * <p>NOTE: the '&lt;!ENTITY' has already been read.
- */
- private void parseEntityDecl()
- throws Exception
- {
- boolean peFlag = false;
- int flags = 0;
-
- // Check for a parameter entity.
- expandPE = false;
- requireWhitespace();
- if (tryRead('%'))
- {
- peFlag = true;
- requireWhitespace();
- }
- expandPE = true;
-
- // Read the entity name, and prepend
- // '%' if necessary.
- String name = readNmtoken(true);
- //NE08
- if (name.indexOf(':') >= 0)
- {
- error("Illegal character(':') in entity name ", name, null);
- }
- if (peFlag)
- {
- name = "%" + name;
- }
-
- // Read the entity value.
- requireWhitespace();
- char c = readCh();
- unread (c);
- if (c == '"' || c == '\'')
- {
- // Internal entity ... replacement text has expanded refs
- // to characters and PEs, but not to general entities
- String value = readLiteral(flags);
- setInternalEntity(name, value);
- }
- else
- {
- // Read the external IDs
- ExternalIdentifiers ids = readExternalIds(false, false);
-
- // Check for NDATA declaration.
- boolean white = tryWhitespace();
- if (!peFlag && tryRead("NDATA"))
- {
- if (!white)
- {
- error("whitespace required before NDATA");
- }
- requireWhitespace();
- String notationName = readNmtoken(true);
- if (!skippedPE)
- {
- setExternalEntity(name, ENTITY_NDATA, ids, notationName);
- handler.unparsedEntityDecl(name, ids.publicId, ids.systemId,
- ids.baseUri, notationName);
- }
- }
- else if (!skippedPE)
- {
- setExternalEntity(name, ENTITY_TEXT, ids, null);
- handler.getDeclHandler()
- .externalEntityDecl(name, ids.publicId,
- handler.resolveURIs()
- // FIXME: ASSUMES not skipped
- // "false" forces error on bad URI
- ? handler.absolutize(ids.baseUri,
- ids.systemId,
- false)
- : ids.systemId);
- }
- }
-
- // Finish the declaration.
- skipWhitespace();
- require('>');
- }
-
- /**
- * Parse a notation declaration.
- * <pre>
- * [82] NotationDecl ::= '&lt;!NOTATION' S Name S
- * (ExternalID | PublicID) S? '&gt;'
- * [83] PublicID ::= 'PUBLIC' S PubidLiteral
- * </pre>
- * <P>NOTE: the '&lt;!NOTATION' has already been read.
- */
- private void parseNotationDecl()
- throws Exception
- {
- String nname;
- ExternalIdentifiers ids;
-
- requireWhitespace();
- nname = readNmtoken(true);
- //NE08
- if (nname.indexOf(':') >= 0)
- {
- error("Illegal character(':') in notation name ", nname, null);
- }
- requireWhitespace();
-
- // Read the external identifiers.
- ids = readExternalIds(true, false);
-
- // Register the notation.
- setNotation(nname, ids);
-
- skipWhitespace();
- require('>');
- }
-
- /**
- * Parse character data.
- * <pre>
- * [14] CharData ::= [^&lt;&amp;]* - ([^&lt;&amp;]* ']]&gt;' [^&lt;&amp;]*)
- * </pre>
- */
- private void parseCharData()
- throws Exception
- {
- char c;
- int state = 0;
- boolean pureWhite = false;
-
- // assert (dataBufferPos == 0);
-
- // are we expecting pure whitespace? it might be dirty...
- if ((currentElementContent == CONTENT_ELEMENTS) && !isDirtyCurrentElement)
- {
- pureWhite = true;
- }
-
- // always report right out of readBuffer
- // to minimize (pointless) buffer copies
- while (true)
- {
- int lineAugment = 0;
- int columnAugment = 0;
- int i;
-
-loop:
- for (i = readBufferPos; i < readBufferLength; i++)
- {
- switch (c = readBuffer[i])
- {
- case '\n':
- lineAugment++;
- columnAugment = 0;
- // pureWhite unmodified
- break;
- case '\r': // should not happen!!
- case '\t':
- case ' ':
- // pureWhite unmodified
- columnAugment++;
- break;
- case '&':
- case '<':
- columnAugment++;
- // pureWhite unmodified
- // CLEAN end of text sequence
- state = 1;
- break loop;
- case ']':
- // that's not a whitespace char, and
- // can not terminate pure whitespace either
- pureWhite = false;
- if ((i + 2) < readBufferLength)
- {
- if (readBuffer [i + 1] == ']'
- && readBuffer [i + 2] == '>')
- {
- // ERROR end of text sequence
- state = 2;
- break loop;
- }
- }
- else
- {
- // FIXME missing two end-of-buffer cases
- }
- columnAugment++;
- break;
- default:
- if ((c < 0x0020 || c > 0xFFFD)
- || ((c >= 0x007f) && (c <= 0x009f) && (c != 0x0085)
- && xmlVersion == XML_11))
- {
- error("illegal XML character U+"
- + Integer.toHexString(c));
- }
- // that's not a whitespace char
- pureWhite = false;
- columnAugment++;
- }
- }
-
- // report text thus far
- if (lineAugment > 0)
- {
- line += lineAugment;
- column = columnAugment;
- }
- else
- {
- column += columnAugment;
- }
-
- // report characters/whitspace
- int length = i - readBufferPos;
-
- if (length != 0)
- {
- if (pureWhite)
- {
- handler.ignorableWhitespace(readBuffer,
- readBufferPos, length);
- }
- else
- {
- handler.charData(readBuffer, readBufferPos, length);
- }
- readBufferPos = i;
- }
-
- if (state != 0)
- {
- break;
- }
-
- // fill next buffer from this entity, or
- // pop stack and continue with previous entity
- unread(readCh());
- }
- if (!pureWhite)
- {
- isDirtyCurrentElement = true;
- }
- // finish, maybe with error
- if (state != 1) // finish, no error
- {
- error("character data may not contain ']]>'");
- }
- }
-
- //////////////////////////////////////////////////////////////////////
- // High-level reading and scanning methods.
- //////////////////////////////////////////////////////////////////////
-
- /**
- * Require whitespace characters.
- */
- private void requireWhitespace()
- throws SAXException, IOException
- {
- char c = readCh();
- if (isWhitespace(c))
- {
- skipWhitespace();
- }
- else
- {
- error("whitespace required", c, null);
- }
- }
-
- /**
- * Skip whitespace characters.
- * <pre>
- * [3] S ::= (#x20 | #x9 | #xd | #xa)+
- * </pre>
- */
- private void skipWhitespace()
- throws SAXException, IOException
- {
- // Start with a little cheat. Most of
- // the time, the white space will fall
- // within the current read buffer; if
- // not, then fall through.
- if (USE_CHEATS)
- {
- int lineAugment = 0;
- int columnAugment = 0;
-
-loop:
- for (int i = readBufferPos; i < readBufferLength; i++)
- {
- switch (readBuffer[i])
- {
- case ' ':
- case '\t':
- case '\r':
- columnAugment++;
- break;
- case '\n':
- lineAugment++;
- columnAugment = 0;
- break;
- case '%':
- if (expandPE)
- {
- break loop;
- }
- // else fall through...
- default:
- readBufferPos = i;
- if (lineAugment > 0)
- {
- line += lineAugment;
- column = columnAugment;
- }
- else
- {
- column += columnAugment;
- }
- return;
- }
- }
- }
-
- // OK, do it the slow way.
- char c = readCh ();
- while (isWhitespace(c))
- {
- c = readCh();
- }
- unread(c);
- }
-
- /**
- * Read a name or (when parsing an enumeration) name token.
- * <pre>
- * [5] Name ::= (Letter | '_' | ':') (NameChar)*
- * [7] Nmtoken ::= (NameChar)+
- * </pre>
- */
- private String readNmtoken(boolean isName)
- throws SAXException, IOException
- {
- char c;
-
- if (USE_CHEATS)
- {
-loop:
- for (int i = readBufferPos; i < readBufferLength; i++)
- {
- c = readBuffer[i];
- switch (c)
- {
- case '%':
- if (expandPE)
- {
- break loop;
- }
- // else fall through...
-
- // What may legitimately come AFTER a name/nmtoken?
- case '<': case '>': case '&':
- case ',': case '|': case '*': case '+': case '?':
- case ')':
- case '=':
- case '\'': case '"':
- case '[':
- case ' ': case '\t': case '\r': case '\n':
- case ';':
- case '/':
- int start = readBufferPos;
- if (i == start)
- {
- error("name expected", readBuffer[i], null);
- }
- readBufferPos = i;
- return intern(readBuffer, start, i - start);
-
- default:
- // FIXME ... per IBM's OASIS test submission, these:
- // ? U+06dd
- // Combining U+309B
- //these switches are kind of ugly but at least we won't
- //have to go over the whole lits for each char
- if (isName && i == readBufferPos)
- {
- char c2 = (char) (c & 0x00f0);
- switch (c & 0xff00)
- {
- //starting with 01
- case 0x0100:
- switch (c2)
- {
- case 0x0030:
- if (c == 0x0132 || c == 0x0133 || c == 0x013f)
- {
- error("Not a name start character, U+"
- + Integer.toHexString(c));
- }
- break;
- case 0x0040:
- if (c == 0x0140 || c == 0x0149)
- {
- error("Not a name start character, U+"
- + Integer.toHexString(c));
- }
- break;
- case 0x00c0:
- if (c == 0x01c4 || c == 0x01cc)
- {
- error("Not a name start character, U+"
- + Integer.toHexString(c));
- }
- break;
- case 0x00f0:
- if (c == 0x01f1 || c == 0x01f3)
- {
- error("Not a name start character, U+"
- + Integer.toHexString(c));
- }
- break;
- case 0x00b0:
- if (c == 0x01f1 || c == 0x01f3)
- {
- error("Not a name start character, U+"
- + Integer.toHexString(c));
- }
- break;
- default:
- if (c == 0x017f)
- {
- error("Not a name start character, U+"
- + Integer.toHexString(c));
- }
- }
-
- break;
- //starting with 11
- case 0x1100:
- switch (c2)
- {
- case 0x0000:
- if (c == 0x1104 || c == 0x1108 ||
- c == 0x110a || c == 0x110d)
- {
- error("Not a name start character, U+"
- + Integer.toHexString(c));
- }
- break;
- case 0x0030:
- if (c == 0x113b || c == 0x113f)
- {
- error("Not a name start character, U+"
- + Integer.toHexString(c));
- }
- break;
- case 0x0040:
- if (c == 0x1141 || c == 0x114d
- || c == 0x114f )
- {
- error("Not a name start character, U+"
- + Integer.toHexString(c));
- }
- break;
- case 0x0050:
- if (c == 0x1151 || c == 0x1156)
- {
- error("Not a name start character, U+"
- + Integer.toHexString(c));
- }
- break;
- case 0x0060:
- if (c == 0x1162 || c == 0x1164
- || c == 0x1166 || c == 0x116b
- || c == 0x116f)
- {
- error("Not a name start character, U+"
- + Integer.toHexString(c));
- }
- break;
- case 0x00b0:
- if (c == 0x11b6 || c == 0x11b9
- || c == 0x11bb || c == 0x116f)
- {
- error("Not a name start character, U+"
- + Integer.toHexString(c));
- }
- break;
- default:
- if (c == 0x1174 || c == 0x119f
- || c == 0x11ac || c == 0x11c3
- || c == 0x11f1)
- {
- error("Not a name start character, U+"
- + Integer.toHexString(c));
- }
- }
- break;
- default:
- if (c == 0x0e46 || c == 0x1011
- || c == 0x212f || c == 0x0587
- || c == 0x0230 )
- {
- error("Not a name start character, U+"
- + Integer.toHexString(c));
- }
- }
- }
- // punt on exact tests from Appendix A; approximate
- // them using the Unicode ID start/part rules
- if (i == readBufferPos && isName)
- {
- if (!Character.isUnicodeIdentifierStart(c)
- && c != ':' && c != '_')
- {
- error("Not a name start character, U+"
- + Integer.toHexString(c));
- }
- }
- else if (!Character.isUnicodeIdentifierPart(c)
- && c != '-' && c != ':' && c != '_' && c != '.'
- && !isExtender(c))
- {
- error("Not a name character, U+"
- + Integer.toHexString(c));
- }
- }
- }
- }
-
- nameBufferPos = 0;
-
- // Read the first character.
-loop:
- while (true)
- {
- c = readCh();
- switch (c)
- {
- case '%':
- case '<': case '>': case '&':
- case ',': case '|': case '*': case '+': case '?':
- case ')':
- case '=':
- case '\'': case '"':
- case '[':
- case ' ': case '\t': case '\n': case '\r':
- case ';':
- case '/':
- unread(c);
- if (nameBufferPos == 0)
- {
- error ("name expected");
- }
- // punt on exact tests from Appendix A, but approximate them
- if (isName
- && !Character.isUnicodeIdentifierStart(nameBuffer[0])
- && ":_".indexOf(nameBuffer[0]) == -1)
- {
- error("Not a name start character, U+"
- + Integer.toHexString(nameBuffer[0]));
- }
- String s = intern(nameBuffer, 0, nameBufferPos);
- nameBufferPos = 0;
- return s;
- default:
- // punt on exact tests from Appendix A, but approximate them
-
- if ((nameBufferPos != 0 || !isName)
- && !Character.isUnicodeIdentifierPart(c)
- && ":-_.".indexOf(c) == -1
- && !isExtender(c))
- {
- error("Not a name character, U+"
- + Integer.toHexString(c));
- }
- if (nameBufferPos >= nameBuffer.length)
- {
- nameBuffer =
- (char[]) extendArray(nameBuffer,
- nameBuffer.length, nameBufferPos);
- }
- nameBuffer[nameBufferPos++] = c;
- }
- }
- }
-
- private static boolean isExtender(char c)
- {
- // [88] Extender ::= ...
- return c == 0x00b7 || c == 0x02d0 || c == 0x02d1 || c == 0x0387
- || c == 0x0640 || c == 0x0e46 || c == 0x0ec6 || c == 0x3005
- || (c >= 0x3031 && c <= 0x3035)
- || (c >= 0x309d && c <= 0x309e)
- || (c >= 0x30fc && c <= 0x30fe);
- }
-
- /**
- * Read a literal. With matching single or double quotes as
- * delimiters (and not embedded!) this is used to parse:
- * <pre>
- * [9] EntityValue ::= ... ([^%&amp;] | PEReference | Reference)* ...
- * [10] AttValue ::= ... ([^<&] | Reference)* ...
- * [11] SystemLiteral ::= ... (URLchar - "'")* ...
- * [12] PubidLiteral ::= ... (PubidChar - "'")* ...
- * </pre>
- * as well as the quoted strings in XML and text declarations
- * (for version, encoding, and standalone) which have their
- * own constraints.
- */
- private String readLiteral(int flags)
- throws SAXException, IOException
- {
- char delim, c;
- int startLine = line;
- boolean saved = expandPE;
- boolean savedReport = doReport;
-
- // Find the first delimiter.
- delim = readCh();
- if (delim != '"' && delim != '\'')
- {
- error("expected '\"' or \"'\"", delim, null);
- return null;
- }
- inLiteral = true;
- if ((flags & LIT_DISABLE_PE) != 0)
- {
- expandPE = false;
- }
- doReport = false;
-
- // Each level of input source has its own buffer; remember
- // ours, so we won't read the ending delimiter from any
- // other input source, regardless of entity processing.
- char[] ourBuf = readBuffer;
-
- // Read the literal.
- try
- {
- c = readCh();
- boolean ampRead = false;
-loop:
- while (! (c == delim && readBuffer == ourBuf))
- {
- switch (c)
- {
- // attributes and public ids are normalized
- // in almost the same ways
- case '\n':
- case '\r':
- if ((flags & (LIT_ATTRIBUTE | LIT_PUBID)) != 0)
- {
- c = ' ';
- }
- break;
- case '\t':
- if ((flags & LIT_ATTRIBUTE) != 0)
- {
- c = ' ';
- }
- break;
- case '&':
- c = readCh();
- // Char refs are expanded immediately, except for
- // all the cases where it's deferred.
- if (c == '#')
- {
- if ((flags & LIT_DISABLE_CREF) != 0)
- {
- dataBufferAppend('&');
- break;
- }
- parseCharRef(false /* Do not do flushDataBuffer */);
-
- // exotic WFness risk: this is an entity literal,
- // dataBuffer [dataBufferPos - 1] == '&', and
- // following chars are a _partial_ entity/char ref
-
- // It looks like an entity ref ...
- }
- else
- {
- unread(c);
- // Expand it?
- if ((flags & LIT_ENTITY_REF) > 0)
- {
- parseEntityRef(false);
- if (String.valueOf(readBuffer).equals("&#38;"))
- {
- ampRead = true;
- }
- //Is it just data?
- }
- else if ((flags & LIT_DISABLE_EREF) != 0)
- {
- dataBufferAppend('&');
-
- // OK, it will be an entity ref -- expanded later.
- }
- else
- {
- String name = readNmtoken(true);
- require(';');
- dataBufferAppend('&');
- dataBufferAppend(name);
- dataBufferAppend(';');
- }
- }
- c = readCh();
- continue loop;
-
- case '<':
- // and why? Perhaps so "&foo;" expands the same
- // inside and outside an attribute?
- if ((flags & LIT_ATTRIBUTE) != 0)
- {
- error("attribute values may not contain '<'");
- }
- break;
-
- // We don't worry about case '%' and PE refs, readCh does.
-
- default:
- break;
- }
- dataBufferAppend(c);
- c = readCh();
- }
- }
- catch (EOFException e)
- {
- error("end of input while looking for delimiter (started on line "
- + startLine + ')', null, new Character(delim).toString());
- }
- inLiteral = false;
- expandPE = saved;
- doReport = savedReport;
-
- // Normalise whitespace if necessary.
- if ((flags & LIT_NORMALIZE) > 0)
- {
- dataBufferNormalize();
- }
-
- // Return the value.
- return dataBufferToString();
- }
-
- /**
- * Try reading external identifiers.
- * A system identifier is not required for notations.
- * @param inNotation Are we parsing a notation decl?
- * @param isSubset Parsing external subset decl (may be omitted)?
- * @return A three-member String array containing the identifiers,
- * or nulls. Order: public, system, baseURI.
- */
- private ExternalIdentifiers readExternalIds(boolean inNotation,
- boolean isSubset)
- throws Exception
- {
- char c;
- ExternalIdentifiers ids = new ExternalIdentifiers();
- int flags = LIT_DISABLE_CREF | LIT_DISABLE_PE | LIT_DISABLE_EREF;
-
- if (tryRead("PUBLIC"))
- {
- requireWhitespace();
- ids.publicId = readLiteral(LIT_NORMALIZE | LIT_PUBID | flags);
- if (inNotation)
- {
- skipWhitespace();
- c = readCh();
- unread(c);
- if (c == '"' || c == '\'')
- {
- ids.systemId = readLiteral(flags);
- }
- }
- else
- {
- requireWhitespace();
- ids.systemId = readLiteral(flags);
- }
-
- for (int i = 0; i < ids.publicId.length(); i++)
- {
- c = ids.publicId.charAt(i);
- if (c >= 'a' && c <= 'z')
- {
- continue;
- }
- if (c >= 'A' && c <= 'Z')
- {
- continue;
- }
- if (" \r\n0123456789-' ()+,./:=?;!*#@$_%".indexOf(c) != -1)
- {
- continue;
- }
- error("illegal PUBLIC id character U+"
- + Integer.toHexString(c));
- }
- }
- else if (tryRead("SYSTEM"))
- {
- requireWhitespace();
- ids.systemId = readLiteral(flags);
- }
- else if (!isSubset)
- {
- error("missing SYSTEM or PUBLIC keyword");
- }
-
- if (ids.systemId != null)
- {
- if (ids.systemId.indexOf('#') != -1)
- {
- handler.verror("SYSTEM id has a URI fragment: " + ids.systemId);
- }
- ids.baseUri = handler.getSystemId();
- if (ids.baseUri == null && uriWarnings)
- {
- handler.warn("No base URI; hope URI is absolute: "
- + ids.systemId);
- }
- }
-
- return ids;
- }
-
- /**
- * Test if a character is whitespace.
- * <pre>
- * [3] S ::= (#x20 | #x9 | #xd | #xa)+
- * </pre>
- * @param c The character to test.
- * @return true if the character is whitespace.
- */
- private final boolean isWhitespace(char c)
- {
- if (c > 0x20)
- {
- return false;
- }
- if (c == 0x20 || c == 0x0a || c == 0x09 || c == 0x0d)
- {
- return true;
- }
- return false; // illegal ...
- }
-
- //////////////////////////////////////////////////////////////////////
- // Utility routines.
- //////////////////////////////////////////////////////////////////////
-
- /**
- * Add a character to the data buffer.
- */
- private void dataBufferAppend(char c)
- {
- // Expand buffer if necessary.
- if (dataBufferPos >= dataBuffer.length)
- {
- dataBuffer = (char[]) extendArray(dataBuffer,
- dataBuffer.length, dataBufferPos);
- }
- dataBuffer[dataBufferPos++] = c;
- }
-
- /**
- * Add a string to the data buffer.
- */
- private void dataBufferAppend(String s)
- {
- dataBufferAppend(s.toCharArray(), 0, s.length());
- }
-
- /**
- * Append (part of) a character array to the data buffer.
- */
- private void dataBufferAppend(char[] ch, int start, int length)
- {
- dataBuffer = (char[]) extendArray(dataBuffer, dataBuffer.length,
- dataBufferPos + length);
-
- System.arraycopy(ch, start, dataBuffer, dataBufferPos, length);
- dataBufferPos += length;
- }
-
- /**
- * Normalise space characters in the data buffer.
- */
- private void dataBufferNormalize()
- {
- int i = 0;
- int j = 0;
- int end = dataBufferPos;
-
- // Skip spaces at the start.
- while (j < end && dataBuffer[j] == ' ')
- {
- j++;
- }
-
- // Skip whitespace at the end.
- while (end > j && dataBuffer[end - 1] == ' ')
- {
- end --;
- }
-
- // Start copying to the left.
- while (j < end)
- {
-
- char c = dataBuffer[j++];
-
- // Normalise all other spaces to
- // a single space.
- if (c == ' ')
- {
- while (j < end && dataBuffer[j++] == ' ')
- {
- continue;
- }
- dataBuffer[i++] = ' ';
- dataBuffer[i++] = dataBuffer[j - 1];
- }
- else
- {
- dataBuffer[i++] = c;
- }
- }
-
- // The new length is <= the old one.
- dataBufferPos = i;
- }
-
- /**
- * Convert the data buffer to a string.
- */
- private String dataBufferToString()
- {
- String s = new String(dataBuffer, 0, dataBufferPos);
- dataBufferPos = 0;
- return s;
- }
-
- /**
- * Flush the contents of the data buffer to the handler, as
- * appropriate, and reset the buffer for new input.
- */
- private void dataBufferFlush()
- throws SAXException
- {
- if (currentElementContent == CONTENT_ELEMENTS
- && dataBufferPos > 0
- && !inCDATA)
- {
- // We can't just trust the buffer to be whitespace, there
- // are (error) cases when it isn't
- for (int i = 0; i < dataBufferPos; i++)
- {
- if (!isWhitespace(dataBuffer[i]))
- {
- handler.charData(dataBuffer, 0, dataBufferPos);
- dataBufferPos = 0;
- }
- }
- if (dataBufferPos > 0)
- {
- handler.ignorableWhitespace(dataBuffer, 0, dataBufferPos);
- dataBufferPos = 0;
- }
- }
- else if (dataBufferPos > 0)
- {
- handler.charData(dataBuffer, 0, dataBufferPos);
- dataBufferPos = 0;
- }
- }
-
- /**
- * Require a string to appear, or throw an exception.
- * <p><em>Precondition:</em> Entity expansion is not required.
- * <p><em>Precondition:</em> data buffer has no characters that
- * will get sent to the application.
- */
- private void require(String delim)
- throws SAXException, IOException
- {
- int length = delim.length();
- char[] ch;
-
- if (length < dataBuffer.length)
- {
- ch = dataBuffer;
- delim.getChars(0, length, ch, 0);
- }
- else
- {
- ch = delim.toCharArray();
- }
-
- if (USE_CHEATS && length <= (readBufferLength - readBufferPos))
- {
- int offset = readBufferPos;
-
- for (int i = 0; i < length; i++, offset++)
- {
- if (ch[i] != readBuffer[offset])
- {
- error ("required string", null, delim);
- }
- }
- readBufferPos = offset;
-
- }
- else
- {
- for (int i = 0; i < length; i++)
- {
- require(ch[i]);
- }
- }
- }
-
- /**
- * Require a character to appear, or throw an exception.
- */
- private void require(char delim)
- throws SAXException, IOException
- {
- char c = readCh();
-
- if (c != delim)
- {
- error("required character", c, new Character(delim).toString());
- }
- }
-
- /**
- * Create an interned string from a character array.
- * &AElig;lfred uses this method to create an interned version
- * of all names and name tokens, so that it can test equality
- * with <code>==</code> instead of <code>String.equals ()</code>.
- *
- * <p>This is much more efficient than constructing a non-interned
- * string first, and then interning it.
- *
- * @param ch an array of characters for building the string.
- * @param start the starting position in the array.
- * @param length the number of characters to place in the string.
- * @return an interned string.
- * @see #intern (String)
- * @see java.lang.String#intern
- */
- public String intern(char[] ch, int start, int length)
- {
- int index = 0;
- int hash = 0;
- Object[] bucket;
-
- // Generate a hash code. This is a widely used string hash,
- // often attributed to Brian Kernighan.
- for (int i = start; i < start + length; i++)
- {
- hash = 31 * hash + ch[i];
- }
- hash = (hash & 0x7fffffff) % SYMBOL_TABLE_LENGTH;
-
- // Get the bucket -- consists of {array,String} pairs
- if ((bucket = symbolTable[hash]) == null)
- {
- // first string in this bucket
- bucket = new Object[8];
-
- // Search for a matching tuple, and
- // return the string if we find one.
- }
- else
- {
- while (index < bucket.length)
- {
- char[] chFound = (char[]) bucket[index];
-
- // Stop when we hit an empty entry.
- if (chFound == null)
- {
- break;
- }
-
- // If they're the same length, check for a match.
- if (chFound.length == length)
- {
- for (int i = 0; i < chFound.length; i++)
- {
- // continue search on failure
- if (ch[start + i] != chFound[i])
- {
- break;
- }
- else if (i == length - 1)
- {
- // That's it, we have a match!
- return (String) bucket[index + 1];
- }
- }
- }
- index += 2;
- }
- // Not found -- we'll have to add it.
-
- // Do we have to grow the bucket?
- bucket = (Object[]) extendArray(bucket, bucket.length, index);
- }
- symbolTable[hash] = bucket;
-
- // OK, add it to the end of the bucket -- "local" interning.
- // Intern "globally" to let applications share interning benefits.
- // That is, "!=" and "==" work on our strings, not just equals().
- String s = new String(ch, start, length).intern();
- bucket[index] = s.toCharArray();
- bucket[index + 1] = s;
- return s;
- }
-
- /**
- * Ensure the capacity of an array, allocating a new one if
- * necessary. Usually extends only for name hash collisions.
- */
- private Object extendArray(Object array, int currentSize, int requiredSize)
- {
- if (requiredSize < currentSize)
- {
- return array;
- }
- else
- {
- Object newArray = null;
- int newSize = currentSize * 2;
-
- if (newSize <= requiredSize)
- {
- newSize = requiredSize + 1;
- }
-
- if (array instanceof char[])
- {
- newArray = new char[newSize];
- }
- else if (array instanceof Object[])
- {
- newArray = new Object[newSize];
- }
- else
- {
- throw new RuntimeException();
- }
-
- System.arraycopy(array, 0, newArray, 0, currentSize);
- return newArray;
- }
- }
-
- //////////////////////////////////////////////////////////////////////
- // XML query routines.
- //////////////////////////////////////////////////////////////////////
-
- boolean isStandalone()
- {
- return docIsStandalone;
- }
-
- //
- // Elements
- //
-
- private int getContentType(ElementDecl element, int defaultType)
- {
- int retval;
-
- if (element == null)
- {
- return defaultType;
- }
- retval = element.contentType;
- if (retval == CONTENT_UNDECLARED)
- {
- retval = defaultType;
- }
- return retval;
- }
-
- /**
- * Look up the content type of an element.
- * @param name The element type name.
- * @return An integer constant representing the content type.
- * @see #CONTENT_UNDECLARED
- * @see #CONTENT_ANY
- * @see #CONTENT_EMPTY
- * @see #CONTENT_MIXED
- * @see #CONTENT_ELEMENTS
- */
- public int getElementContentType(String name)
- {
- ElementDecl element = (ElementDecl) elementInfo.get(name);
- return getContentType(element, CONTENT_UNDECLARED);
- }
-
- /**
- * Register an element.
- * Array format:
- * [0] element type name
- * [1] content model (mixed, elements only)
- * [2] attribute hash table
- */
- private void setElement(String name, int contentType,
- String contentModel, HashMap attributes)
- throws SAXException
- {
- if (skippedPE)
- {
- return;
- }
-
- ElementDecl element = (ElementDecl) elementInfo.get(name);
-
- // first <!ELEMENT ...> or <!ATTLIST ...> for this type?
- if (element == null)
- {
- element = new ElementDecl();
- element.contentType = contentType;
- element.contentModel = contentModel;
- element.attributes = attributes;
- elementInfo.put(name, element);
- return;
- }
-
- // <!ELEMENT ...> declaration?
- if (contentType != CONTENT_UNDECLARED)
- {
- // ... following an associated <!ATTLIST ...>
- if (element.contentType == CONTENT_UNDECLARED)
- {
- element.contentType = contentType;
- element.contentModel = contentModel;
- }
- else
- {
- // VC: Unique Element Type Declaration
- handler.verror("multiple declarations for element type: "
- + name);
- }
- }
-
- // first <!ATTLIST ...>, before <!ELEMENT ...> ?
- else if (attributes != null)
- {
- element.attributes = attributes;
- }
- }
-
- /**
- * Look up the attribute hash table for an element.
- * The hash table is the second item in the element array.
- */
- private HashMap getElementAttributes(String name)
- {
- ElementDecl element = (ElementDecl) elementInfo.get(name);
- return (element == null) ? null : element.attributes;
- }
-
- //
- // Attributes
- //
-
- /**
- * Get the declared attributes for an element type.
- * @param elname The name of the element type.
- * @return An iterator over all the attributes declared for
- * a specific element type. The results will be valid only
- * after the DTD (if any) has been parsed.
- * @see #getAttributeType
- * @see #getAttributeEnumeration
- * @see #getAttributeDefaultValueType
- * @see #getAttributeDefaultValue
- * @see #getAttributeExpandedValue
- */
- private Iterator declaredAttributes(ElementDecl element)
- {
- HashMap attlist;
-
- if (element == null)
- {
- return null;
- }
- if ((attlist = element.attributes) == null)
- {
- return null;
- }
- return attlist.keySet().iterator();
- }
-
- /**
- * Get the declared attributes for an element type.
- * @param elname The name of the element type.
- * @return An iterator over all the attributes declared for
- * a specific element type. The results will be valid only
- * after the DTD (if any) has been parsed.
- * @see #getAttributeType
- * @see #getAttributeEnumeration
- * @see #getAttributeDefaultValueType
- * @see #getAttributeDefaultValue
- * @see #getAttributeExpandedValue
- */
- public Iterator declaredAttributes(String elname)
- {
- return declaredAttributes((ElementDecl) elementInfo.get(elname));
- }
-
- /**
- * Retrieve the declared type of an attribute.
- * @param name The name of the associated element.
- * @param aname The name of the attribute.
- * @return An interend string denoting the type, or null
- * indicating an undeclared attribute.
- */
- public String getAttributeType(String name, String aname)
- {
- AttributeDecl attribute = getAttribute(name, aname);
- return (attribute == null) ? null : attribute.type;
- }
-
- /**
- * Retrieve the allowed values for an enumerated attribute type.
- * @param name The name of the associated element.
- * @param aname The name of the attribute.
- * @return A string containing the token list.
- */
- public String getAttributeEnumeration(String name, String aname)
- {
- AttributeDecl attribute = getAttribute(name, aname);
- // assert: attribute.enumeration is "ENUMERATION" or "NOTATION"
- return (attribute == null) ? null : attribute.enumeration;
- }
-
- /**
- * Retrieve the default value of a declared attribute.
- * @param name The name of the associated element.
- * @param aname The name of the attribute.
- * @return The default value, or null if the attribute was
- * #IMPLIED or simply undeclared and unspecified.
- * @see #getAttributeExpandedValue
- */
- public String getAttributeDefaultValue(String name, String aname)
- {
- AttributeDecl attribute = getAttribute(name, aname);
- return (attribute == null) ? null : attribute.value;
- }
-
- /*
-
-// FIXME: Leaving this in, until W3C finally resolves the confusion
-// between parts of the XML 2nd REC about when entity declararations
-// are guaranteed to be known. Current code matches what section 5.1
-// (conformance) describes, but some readings of the self-contradicting
-// text in 4.1 (the "Entity Declared" WFC and VC) seem to expect that
-// attribute expansion/normalization must be deferred in some cases
-// (just TRY to identify them!).
-
- * Retrieve the expanded value of a declared attribute.
- * <p>General entities (and char refs) will be expanded (once).
- * @param name The name of the associated element.
- * @param aname The name of the attribute.
- * @return The expanded default value, or null if the attribute was
- * #IMPLIED or simply undeclared
- * @see #getAttributeDefaultValue
- public String getAttributeExpandedValue (String name, String aname)
- throws Exception
- {
- AttributeDecl attribute = getAttribute (name, aname);
-
- if (attribute == null) {
- return null;
- } else if (attribute.defaultValue == null && attribute.value != null) {
- // we MUST use the same buf for both quotes else the literal
- // can't be properly terminated
- char buf [] = new char [1];
- int flags = LIT_ENTITY_REF | LIT_ATTRIBUTE;
- String type = getAttributeType (name, aname);
-
- if (type != "CDATA" && type != null)
- flags |= LIT_NORMALIZE;
- buf [0] = '"';
- pushCharArray (null, buf, 0, 1);
- pushString (null, attribute.value);
- pushCharArray (null, buf, 0, 1);
- attribute.defaultValue = readLiteral (flags);
- }
- return attribute.defaultValue;
- }
- */
-
- /**
- * Retrieve the default value mode of a declared attribute.
- * @see #ATTRIBUTE_DEFAULT_SPECIFIED
- * @see #ATTRIBUTE_DEFAULT_IMPLIED
- * @see #ATTRIBUTE_DEFAULT_REQUIRED
- * @see #ATTRIBUTE_DEFAULT_FIXED
- */
- public int getAttributeDefaultValueType(String name, String aname)
- {
- AttributeDecl attribute = getAttribute(name, aname);
- return (attribute == null) ? ATTRIBUTE_DEFAULT_UNDECLARED :
- attribute.valueType;
- }
-
- /**
- * Register an attribute declaration for later retrieval.
- * Format:
- * - String type
- * - String default value
- * - int value type
- * - enumeration
- * - processed default value
- */
- private void setAttribute(String elName, String name, String type,
- String enumeration, String value, int valueType)
- throws Exception
- {
- HashMap attlist;
-
- if (skippedPE)
- {
- return;
- }
-
- // Create a new hashtable if necessary.
- attlist = getElementAttributes(elName);
- if (attlist == null)
- {
- attlist = new HashMap();
- }
-
- // ignore multiple attribute declarations!
- if (attlist.get(name) != null)
- {
- // warn ...
- return;
- }
- else
- {
- AttributeDecl attribute = new AttributeDecl();
- attribute.type = type;
- attribute.value = value;
- attribute.valueType = valueType;
- attribute.enumeration = enumeration;
- attlist.put(name, attribute);
-
- // save; but don't overwrite any existing <!ELEMENT ...>
- setElement(elName, CONTENT_UNDECLARED, null, attlist);
- }
- }
-
- /**
- * Retrieve the attribute declaration for the given element name and name.
- */
- private AttributeDecl getAttribute(String elName, String name)
- {
- HashMap attlist = getElementAttributes(elName);
- return (attlist == null) ? null : (AttributeDecl) attlist.get(name);
- }
-
- //
- // Entities
- //
-
- /**
- * Find the type of an entity.
- * @returns An integer constant representing the entity type.
- * @see #ENTITY_UNDECLARED
- * @see #ENTITY_INTERNAL
- * @see #ENTITY_NDATA
- * @see #ENTITY_TEXT
- */
- public int getEntityType(String ename)
- {
- EntityInfo entity = (EntityInfo) entityInfo.get(ename);
- return (entity == null) ? ENTITY_UNDECLARED : entity.type;
- }
-
- /**
- * Return an external entity's identifiers.
- * @param ename The name of the external entity.
- * @return The entity's public identifier, system identifier, and base URI.
- * Null if the entity was not declared as an external entity.
- * @see #getEntityType
- */
- public ExternalIdentifiers getEntityIds(String ename)
- {
- EntityInfo entity = (EntityInfo) entityInfo.get(ename);
- return (entity == null) ? null : entity.ids;
- }
-
- /**
- * Return an internal entity's replacement text.
- * @param ename The name of the internal entity.
- * @return The entity's replacement text, or null if
- * the entity was not declared as an internal entity.
- * @see #getEntityType
- */
- public String getEntityValue(String ename)
- {
- EntityInfo entity = (EntityInfo) entityInfo.get(ename);
- return (entity == null) ? null : entity.value;
- }
-
- /**
- * Register an entity declaration for later retrieval.
- */
- private void setInternalEntity(String eName, String value)
- throws SAXException
- {
- if (skippedPE)
- {
- return;
- }
-
- if (entityInfo.get(eName) == null)
- {
- EntityInfo entity = new EntityInfo();
- entity.type = ENTITY_INTERNAL;
- entity.value = value;
- entityInfo.put(eName, entity);
- }
- if (handler.stringInterning)
- {
- if ("lt" == eName || "gt" == eName || "quot" == eName
- || "apos" == eName || "amp" == eName)
- {
- return;
- }
- }
- else
- {
- if ("lt".equals(eName) || "gt".equals(eName) || "quot".equals(eName)
- || "apos".equals(eName) || "amp".equals(eName))
- {
- return;
- }
- }
- handler.getDeclHandler().internalEntityDecl(eName, value);
- }
-
- /**
- * Register an external entity declaration for later retrieval.
- */
- private void setExternalEntity(String eName, int eClass,
- ExternalIdentifiers ids, String nName)
- {
- if (entityInfo.get(eName) == null)
- {
- EntityInfo entity = new EntityInfo();
- entity.type = eClass;
- entity.ids = ids;
- entity.notationName = nName;
- entityInfo.put(eName, entity);
- }
- }
-
- //
- // Notations.
- //
-
- /**
- * Report a notation declaration, checking for duplicates.
- */
- private void setNotation(String nname, ExternalIdentifiers ids)
- throws SAXException
- {
- if (skippedPE)
- {
- return;
- }
-
- handler.notationDecl(nname, ids.publicId, ids.systemId, ids.baseUri);
- if (notationInfo.get(nname) == null)
- {
- notationInfo.put(nname, nname);
- }
- else
- {
- // VC: Unique Notation Name
- handler.verror("Duplicate notation name decl: " + nname);
- }
- }
-
- //
- // Location.
- //
-
- /**
- * Return the current line number.
- */
- public int getLineNumber()
- {
- return line;
- }
-
- /**
- * Return the current column number.
- */
- public int getColumnNumber()
- {
- return column;
- }
-
- //////////////////////////////////////////////////////////////////////
- // High-level I/O.
- //////////////////////////////////////////////////////////////////////
-
- /**
- * Read a single character from the readBuffer.
- * <p>The readDataChunk () method maintains the buffer.
- * <p>If we hit the end of an entity, try to pop the stack and
- * keep going.
- * <p> (This approach doesn't really enforce XML's rules about
- * entity boundaries, but this is not currently a validating
- * parser).
- * <p>This routine also attempts to keep track of the current
- * position in external entities, but it's not entirely accurate.
- * @return The next available input character.
- * @see #unread (char)
- * @see #readDataChunk
- * @see #readBuffer
- * @see #line
- * @return The next character from the current input source.
- */
- private char readCh()
- throws SAXException, IOException
- {
- // As long as there's nothing in the
- // read buffer, try reading more data
- // (for an external entity) or popping
- // the entity stack (for either).
- while (readBufferPos >= readBufferLength)
- {
- switch (sourceType)
- {
- case INPUT_READER:
- case INPUT_STREAM:
- readDataChunk();
- while (readBufferLength < 1)
- {
- popInput();
- if (readBufferLength < 1)
- {
- readDataChunk();
- }
- }
- break;
-
- default:
-
- popInput();
- break;
- }
- }
-
- char c = readBuffer[readBufferPos++];
-
- if (c == '\n')
- {
- line++;
- column = 0;
- }
- else
- {
- if (c == '<')
- {
- /* the most common return to parseContent () ... NOP */
- }
- else if (((c < 0x0020 && (c != '\t') && (c != '\r')) || c > 0xFFFD)
- || ((c >= 0x007f) && (c <= 0x009f) && (c != 0x0085)
- && xmlVersion == XML_11))
- {
- error("illegal XML character U+" + Integer.toHexString(c));
- }
-
- // If we're in the DTD and in a context where PEs get expanded,
- // do so ... 1/14/2000 errata identify those contexts. There
- // are also spots in the internal subset where PE refs are fatal
- // errors, hence yet another flag.
- else if (c == '%' && expandPE)
- {
- if (peIsError)
- {
- error("PE reference within decl in internal subset.");
- }
- parsePEReference();
- return readCh();
- }
- column++;
- }
-
- return c;
- }
-
- /**
- * Push a single character back onto the current input stream.
- * <p>This method usually pushes the character back onto
- * the readBuffer.
- * <p>I don't think that this would ever be called with
- * readBufferPos = 0, because the methods always reads a character
- * before unreading it, but just in case, I've added a boundary
- * condition.
- * @param c The character to push back.
- * @see #readCh
- * @see #unread (char[])
- * @see #readBuffer
- */
- private void unread(char c)
- throws SAXException
- {
- // Normal condition.
- if (c == '\n')
- {
- line--;
- column = -1;
- }
- if (readBufferPos > 0)
- {
- readBuffer[--readBufferPos] = c;
- }
- else
- {
- pushString(null, new Character(c).toString());
- }
- }
-
- /**
- * Push a char array back onto the current input stream.
- * <p>NOTE: you must <em>never</em> push back characters that you
- * haven't actually read: use pushString () instead.
- * @see #readCh
- * @see #unread (char)
- * @see #readBuffer
- * @see #pushString
- */
- private void unread(char[] ch, int length)
- throws SAXException
- {
- for (int i = 0; i < length; i++)
- {
- if (ch[i] == '\n')
- {
- line--;
- column = -1;
- }
- }
- if (length < readBufferPos)
- {
- readBufferPos -= length;
- }
- else
- {
- pushCharArray(null, ch, 0, length);
- }
- }
-
- /**
- * Push, or skip, a new external input source.
- * The source will be some kind of parsed entity, such as a PE
- * (including the external DTD subset) or content for the body.
- *
- * @param url The java.net.URL object for the entity.
- * @see SAXDriver#resolveEntity
- * @see #pushString
- * @see #sourceType
- * @see #pushInput
- * @see #detectEncoding
- * @see #sourceType
- * @see #readBuffer
- */
- private void pushURL(boolean isPE,
- String ename,
- ExternalIdentifiers ids,
- Reader reader,
- InputStream stream,
- String encoding,
- boolean doResolve)
- throws SAXException, IOException
- {
- boolean ignoreEncoding;
- String systemId;
- InputSource source;
-
- if (!isPE)
- {
- dataBufferFlush();
- }
-
- scratch.setPublicId(ids.publicId);
- scratch.setSystemId(ids.systemId);
-
- // See if we should skip or substitute the entity.
- // If we're not skipping, resolving reports startEntity()
- // and updates the (handler's) stack of URIs.
- if (doResolve)
- {
- // assert (stream == null && reader == null && encoding == null)
- source = handler.resolveEntity(isPE, ename, scratch, ids.baseUri);
- if (source == null)
- {
- handler.warn("skipping entity: " + ename);
- handler.skippedEntity(ename);
- if (isPE)
- {
- skippedPE = true;
- }
- return;
- }
-
- // we might be using alternate IDs/encoding
- systemId = source.getSystemId();
- // The following warning and setting systemId was deleted bcause
- // the application has the option of not setting systemId
- // provided that it has set the characte/byte stream.
- /*
- if (systemId == null) {
- handler.warn ("missing system ID, using " + ids.systemId);
- systemId = ids.systemId;
- }
- */
- }
- else
- {
- // "[document]", or "[dtd]" via getExternalSubset()
- scratch.setCharacterStream(reader);
- scratch.setByteStream(stream);
- scratch.setEncoding(encoding);
- source = scratch;
- systemId = ids.systemId;
- if (handler.stringInterning)
- {
- handler.startExternalEntity(ename, systemId,
- "[document]" == ename);
- }
- else
- {
- handler.startExternalEntity(ename, systemId,
- "[document]".equals(ename));
- }
- }
-
- // we may have been given I/O streams directly
- if (source.getCharacterStream() != null)
- {
- if (source.getByteStream() != null)
- error("InputSource has two streams!");
- reader = source.getCharacterStream();
- }
- else if (source.getByteStream() != null)
- {
- encoding = source.getEncoding();
- if (encoding == null)
- {
- stream = source.getByteStream();
- }
- else
- {
- try
- {
- reader = new InputStreamReader(source.getByteStream(),
- encoding);
- }
- catch (IOException e)
- {
- stream = source.getByteStream();
- }
- }
- }
- else if (systemId == null)
- {
- error("InputSource has no URI!");
- }
- scratch.setCharacterStream(null);
- scratch.setByteStream(null);
- scratch.setEncoding(null);
-
- // Push the existing status.
- pushInput(ename);
-
- // Create a new read buffer.
- // (Note the four-character margin)
- readBuffer = new char[READ_BUFFER_MAX + 4];
- readBufferPos = 0;
- readBufferLength = 0;
- readBufferOverflow = -1;
- is = null;
- line = 1;
- column = 0;
- currentByteCount = 0;
-
- // If there's an explicit character stream, just
- // ignore encoding declarations.
- if (reader != null)
- {
- sourceType = INPUT_READER;
- this.reader = reader;
- tryEncodingDecl(true);
- return;
- }
-
- // Else we handle the conversion, and need to ensure
- // it's done right.
- sourceType = INPUT_STREAM;
- if (stream != null)
- {
- is = stream;
- }
- else
- {
- // We have to open our own stream to the URL.
- URL url = new URL(systemId);
-
- externalEntity = url.openConnection();
- externalEntity.connect();
- is = externalEntity.getInputStream();
- }
-
- // If we get to here, there must be
- // an InputStream available.
- if (!is.markSupported())
- {
- is = new BufferedInputStream(is);
- }
-
- // Get any external encoding label.
- if (encoding == null && externalEntity != null)
- {
- // External labels can be untrustworthy; filesystems in
- // particular often have the wrong default for content
- // that wasn't locally originated. Those we autodetect.
- if (!"file".equals(externalEntity.getURL().getProtocol()))
- {
- int temp;
-
- // application/xml;charset=something;otherAttr=...
- // ... with many variants on 'something'
- encoding = externalEntity.getContentType();
-
- // MHK code (fix for Saxon 5.5.1/007):
- // protect against encoding==null
- if (encoding == null)
- {
- temp = -1;
- }
- else
- {
- temp = encoding.indexOf("charset");
- }
-
- // RFC 2376 sez MIME text defaults to ASCII, but since the
- // JDK will create a MIME type out of thin air, we always
- // autodetect when there's no explicit charset attribute.
- if (temp < 0)
- {
- encoding = null; // autodetect
- }
- else
- {
- // only this one attribute
- if ((temp = encoding.indexOf(';')) > 0)
- {
- encoding = encoding.substring(0, temp);
- }
-
- if ((temp = encoding.indexOf('=', temp + 7)) > 0)
- {
- encoding = encoding.substring(temp + 1);
-
- // attributes can have comment fields (RFC 822)
- if ((temp = encoding.indexOf('(')) > 0)
- {
- encoding = encoding.substring(0, temp);
- }
- // ... and values may be quoted
- if ((temp = encoding.indexOf('"')) > 0)
- {
- encoding =
- encoding.substring(temp + 1,
- encoding.indexOf('"', temp + 2));
- }
- encoding.trim();
- }
- else
- {
- handler.warn("ignoring illegal MIME attribute: "
- + encoding);
- encoding = null;
- }
- }
- }
- }
-
- // if we got an external encoding label, use it ...
- if (encoding != null)
- {
- this.encoding = ENCODING_EXTERNAL;
- setupDecoding(encoding);
- ignoreEncoding = true;
-
- // ... else autodetect from first bytes.
- }
- else
- {
- detectEncoding();
- ignoreEncoding = false;
- }
-
- // Read any XML or text declaration.
- // If we autodetected, it may tell us the "real" encoding.
- try
- {
- tryEncodingDecl(ignoreEncoding);
- }
- catch (UnsupportedEncodingException x)
- {
- encoding = x.getMessage();
-
- // if we don't handle the declared encoding,
- // try letting a JVM InputStreamReader do it
- try
- {
- if (sourceType != INPUT_STREAM)
- {
- throw x;
- }
-
- is.reset();
- readBufferPos = 0;
- readBufferLength = 0;
- readBufferOverflow = -1;
- line = 1;
- currentByteCount = column = 0;
-
- sourceType = INPUT_READER;
- this.reader = new InputStreamReader(is, encoding);
- is = null;
-
- tryEncodingDecl(true);
-
- }
- catch (IOException e)
- {
- error("unsupported text encoding",
- encoding,
- null);
- }
- }
- }
-
- /**
- * Check for an encoding declaration. This is the second part of the
- * XML encoding autodetection algorithm, relying on detectEncoding to
- * get to the point that this part can read any encoding declaration
- * in the document (using only US-ASCII characters).
- *
- * <p> Because this part starts to fill parser buffers with this data,
- * it's tricky to setup a reader so that Java's built-in decoders can be
- * used for the character encodings that aren't built in to this parser
- * (such as EUC-JP, KOI8-R, Big5, etc).
- *
- * @return any encoding in the declaration, uppercased; or null
- * @see detectEncoding
- */
- private String tryEncodingDecl(boolean ignoreEncoding)
- throws SAXException, IOException
- {
- // Read the XML/text declaration.
- if (tryRead("<?xml"))
- {
- if (tryWhitespace())
- {
- if (inputStack.size() > 0)
- {
- return parseTextDecl(ignoreEncoding);
- }
- else
- {
- return parseXMLDecl(ignoreEncoding);
- }
- }
- else
- {
- // <?xml-stylesheet ...?> or similar
- unread('l');
- unread('m');
- unread('x');
- unread('?');
- unread('<');
- }
- }
- return null;
- }
-
- /**
- * Attempt to detect the encoding of an entity.
- * <p>The trick here (as suggested in the XML standard) is that
- * any entity not in UTF-8, or in UCS-2 with a byte-order mark,
- * <b>must</b> begin with an XML declaration or an encoding
- * declaration; we simply have to look for "&lt;?xml" in various
- * encodings.
- * <p>This method has no way to distinguish among 8-bit encodings.
- * Instead, it sets up for UTF-8, then (possibly) revises its assumption
- * later in setupDecoding (). Any ASCII-derived 8-bit encoding
- * should work, but most will be rejected later by setupDecoding ().
- * @see #tryEncoding (byte[], byte, byte, byte, byte)
- * @see #tryEncoding (byte[], byte, byte)
- * @see #setupDecoding
- */
- private void detectEncoding()
- throws SAXException, IOException
- {
- byte[] signature = new byte[4];
-
- // Read the first four bytes for
- // autodetection.
- is.mark(4);
- is.read(signature);
- is.reset();
-
- //
- // FIRST: four byte encodings (who uses these?)
- //
- if (tryEncoding(signature, (byte) 0x00, (byte) 0x00,
- (byte) 0x00, (byte) 0x3c))
- {
- // UCS-4 must begin with "<?xml"
- // 0x00 0x00 0x00 0x3c: UCS-4, big-endian (1234)
- // "UTF-32BE"
- encoding = ENCODING_UCS_4_1234;
- }
- else if (tryEncoding(signature, (byte) 0x3c, (byte) 0x00,
- (byte) 0x00, (byte) 0x00))
- {
- // 0x3c 0x00 0x00 0x00: UCS-4, little-endian (4321)
- // "UTF-32LE"
- encoding = ENCODING_UCS_4_4321;
- }
- else if (tryEncoding(signature, (byte) 0x00, (byte) 0x00,
- (byte) 0x3c, (byte) 0x00))
- {
- // 0x00 0x00 0x3c 0x00: UCS-4, unusual (2143)
- encoding = ENCODING_UCS_4_2143;
- }
- else if (tryEncoding(signature, (byte) 0x00, (byte) 0x3c,
- (byte) 0x00, (byte) 0x00))
- {
- // 0x00 0x3c 0x00 0x00: UCS-4, unusual (3421)
- encoding = ENCODING_UCS_4_3412;
-
- // 00 00 fe ff UCS_4_1234 (with BOM)
- // ff fe 00 00 UCS_4_4321 (with BOM)
- }
-
- //
- // SECOND: two byte encodings
- // note ... with 1/14/2000 errata the XML spec identifies some
- // more "broken UTF-16" autodetection cases, with no XML decl,
- // which we don't handle here (that's legal too).
- //
- else if (tryEncoding(signature, (byte) 0xfe, (byte) 0xff))
- {
- // UCS-2 with a byte-order marker. (UTF-16)
- // 0xfe 0xff: UCS-2, big-endian (12)
- encoding = ENCODING_UCS_2_12;
- is.read(); is.read();
- }
- else if (tryEncoding(signature, (byte) 0xff, (byte) 0xfe))
- {
- // UCS-2 with a byte-order marker. (UTF-16)
- // 0xff 0xfe: UCS-2, little-endian (21)
- encoding = ENCODING_UCS_2_21;
- is.read(); is.read();
- }
- else if (tryEncoding(signature, (byte) 0x00, (byte) 0x3c,
- (byte) 0x00, (byte) 0x3f))
- {
- // UTF-16BE (otherwise, malformed UTF-16)
- // 0x00 0x3c 0x00 0x3f: UCS-2, big-endian, no byte-order mark
- encoding = ENCODING_UCS_2_12;
- error("no byte-order mark for UCS-2 entity");
- }
- else if (tryEncoding(signature, (byte) 0x3c, (byte) 0x00,
- (byte) 0x3f, (byte) 0x00))
- {
- // UTF-16LE (otherwise, malformed UTF-16)
- // 0x3c 0x00 0x3f 0x00: UCS-2, little-endian, no byte-order mark
- encoding = ENCODING_UCS_2_21;
- error("no byte-order mark for UCS-2 entity");
- }
-
- //
- // THIRD: ASCII-derived encodings, fixed and variable lengths
- //
- else if (tryEncoding(signature, (byte) 0x3c, (byte) 0x3f,
- (byte) 0x78, (byte) 0x6d))
- {
- // ASCII derived
- // 0x3c 0x3f 0x78 0x6d: UTF-8 or other 8-bit markup (read ENCODING)
- encoding = ENCODING_UTF_8;
- prefetchASCIIEncodingDecl();
- }
- else if (signature[0] == (byte) 0xef
- && signature[1] == (byte) 0xbb
- && signature[2] == (byte) 0xbf)
- {
- // 0xef 0xbb 0xbf: UTF-8 BOM (not part of document text)
- // this un-needed notion slipped into XML 2nd ed through a
- // "non-normative" erratum; now required by MSFT and UDDI,
- // and E22 made it normative.
- encoding = ENCODING_UTF_8;
- is.read(); is.read(); is.read();
- }
- else
- {
- // 4c 6f a7 94 ... we don't understand EBCDIC flavors
- // ... but we COULD at least kick in some fixed code page
-
- // (default) UTF-8 without encoding/XML declaration
- encoding = ENCODING_UTF_8;
- }
- }
-
- /**
- * Check for a four-byte signature.
- * <p>Utility routine for detectEncoding ().
- * <p>Always looks for some part of "<?XML" in a specific encoding.
- * @param sig The first four bytes read.
- * @param b1 The first byte of the signature
- * @param b2 The second byte of the signature
- * @param b3 The third byte of the signature
- * @param b4 The fourth byte of the signature
- * @see #detectEncoding
- */
- private static boolean tryEncoding(byte[] sig, byte b1, byte b2,
- byte b3, byte b4)
- {
- return (sig[0] == b1 && sig[1] == b2
- && sig[2] == b3 && sig[3] == b4);
- }
-
- /**
- * Check for a two-byte signature.
- * <p>Looks for a UCS-2 byte-order mark.
- * <p>Utility routine for detectEncoding ().
- * @param sig The first four bytes read.
- * @param b1 The first byte of the signature
- * @param b2 The second byte of the signature
- * @see #detectEncoding
- */
- private static boolean tryEncoding(byte[] sig, byte b1, byte b2)
- {
- return ((sig[0] == b1) && (sig[1] == b2));
- }
-
- /**
- * This method pushes a string back onto input.
- * <p>It is useful either as the expansion of an internal entity,
- * or for backtracking during the parse.
- * <p>Call pushCharArray () to do the actual work.
- * @param s The string to push back onto input.
- * @see #pushCharArray
- */
- private void pushString(String ename, String s)
- throws SAXException
- {
- char[] ch = s.toCharArray();
- pushCharArray(ename, ch, 0, ch.length);
- }
-
- /**
- * Push a new internal input source.
- * <p>This method is useful for expanding an internal entity,
- * or for unreading a string of characters. It creates a new
- * readBuffer containing the characters in the array, instead
- * of characters converted from an input byte stream.
- * @param ch The char array to push.
- * @see #pushString
- * @see #pushURL
- * @see #readBuffer
- * @see #sourceType
- * @see #pushInput
- */
- private void pushCharArray(String ename, char[] ch, int start, int length)
- throws SAXException
- {
- // Push the existing status
- pushInput(ename);
- if (ename != null && doReport)
- {
- dataBufferFlush();
- handler.startInternalEntity(ename);
- }
- sourceType = INPUT_INTERNAL;
- readBuffer = ch;
- readBufferPos = start;
- readBufferLength = length;
- readBufferOverflow = -1;
- }
-
- /**
- * Save the current input source onto the stack.
- * <p>This method saves all of the global variables associated with
- * the current input source, so that they can be restored when a new
- * input source has finished. It also tests for entity recursion.
- * <p>The method saves the following global variables onto a stack
- * using a fixed-length array:
- * <ol>
- * <li>sourceType
- * <li>externalEntity
- * <li>readBuffer
- * <li>readBufferPos
- * <li>readBufferLength
- * <li>line
- * <li>encoding
- * </ol>
- * @param ename The name of the entity (if any) causing the new input.
- * @see #popInput
- * @see #sourceType
- * @see #externalEntity
- * @see #readBuffer
- * @see #readBufferPos
- * @see #readBufferLength
- * @see #line
- * @see #encoding
- */
- private void pushInput(String ename)
- throws SAXException
- {
- // Check for entity recursion.
- if (ename != null)
- {
- Iterator entities = entityStack.iterator();
- while (entities.hasNext())
- {
- String e = (String) entities.next();
- if (e != null && e == ename)
- {
- error("recursive reference to entity", ename, null);
- }
- }
- }
- entityStack.addLast(ename);
-
- // Don't bother if there is no current input.
- if (sourceType == INPUT_NONE)
- {
- return;
- }
-
- // Set up a snapshot of the current
- // input source.
- Input input = new Input();
-
- input.sourceType = sourceType;
- input.externalEntity = externalEntity;
- input.readBuffer = readBuffer;
- input.readBufferPos = readBufferPos;
- input.readBufferLength = readBufferLength;
- input.line = line;
- input.encoding = encoding;
- input.readBufferOverflow = readBufferOverflow;
- input.is = is;
- input.currentByteCount = currentByteCount;
- input.column = column;
- input.reader = reader;
-
- // Push it onto the stack.
- inputStack.addLast(input);
- }
-
- /**
- * Restore a previous input source.
- * <p>This method restores all of the global variables associated with
- * the current input source.
- * @exception java.io.EOFException
- * If there are no more entries on the input stack.
- * @see #pushInput
- * @see #sourceType
- * @see #externalEntity
- * @see #readBuffer
- * @see #readBufferPos
- * @see #readBufferLength
- * @see #line
- * @see #encoding
- */
- private void popInput()
- throws SAXException, IOException
- {
- String ename = (String) entityStack.removeLast();
-
- if (ename != null && doReport)
- {
- dataBufferFlush();
- }
- switch (sourceType)
- {
- case INPUT_STREAM:
- handler.endExternalEntity(ename);
- is.close();
- break;
- case INPUT_READER:
- handler.endExternalEntity(ename);
- reader.close();
- break;
- case INPUT_INTERNAL:
- if (ename != null && doReport)
- {
- handler.endInternalEntity(ename);
- }
- break;
- }
-
- // Throw an EOFException if there
- // is nothing else to pop.
- if (inputStack.isEmpty())
- {
- throw new EOFException("no more input");
- }
-
- Input input = (Input) inputStack.removeLast();
-
- sourceType = input.sourceType;
- externalEntity = input.externalEntity;
- readBuffer = input.readBuffer;
- readBufferPos = input.readBufferPos;
- readBufferLength = input.readBufferLength;
- line = input.line;
- encoding = input.encoding;
- readBufferOverflow = input.readBufferOverflow;
- is = input.is;
- currentByteCount = input.currentByteCount;
- column = input.column;
- reader = input.reader;
- }
-
- /**
- * Return true if we can read the expected character.
- * <p>Note that the character will be removed from the input stream
- * on success, but will be put back on failure. Do not attempt to
- * read the character again if the method succeeds.
- * @param delim The character that should appear next. For a
- * insensitive match, you must supply this in upper-case.
- * @return true if the character was successfully read, or false if
- * it was not.
- * @see #tryRead (String)
- */
- private boolean tryRead(char delim)
- throws SAXException, IOException
- {
- char c;
-
- // Read the character
- c = readCh();
-
- // Test for a match, and push the character
- // back if the match fails.
- if (c == delim)
- {
- return true;
- }
- else
- {
- unread(c);
- return false;
- }
- }
-
- /**
- * Return true if we can read the expected string.
- * <p>This is simply a convenience method.
- * <p>Note that the string will be removed from the input stream
- * on success, but will be put back on failure. Do not attempt to
- * read the string again if the method succeeds.
- * <p>This method will push back a character rather than an
- * array whenever possible (probably the majority of cases).
- * @param delim The string that should appear next.
- * @return true if the string was successfully read, or false if
- * it was not.
- * @see #tryRead (char)
- */
- private boolean tryRead(String delim)
- throws SAXException, IOException
- {
- return tryRead(delim.toCharArray());
- }
-
- private boolean tryRead(char[] ch)
- throws SAXException, IOException
- {
- char c;
-
- // Compare the input, character-
- // by character.
-
- for (int i = 0; i < ch.length; i++)
- {
- c = readCh();
- if (c != ch[i])
- {
- unread(c);
- if (i != 0)
- {
- unread(ch, i);
- }
- return false;
- }
- }
- return true;
- }
-
- /**
- * Return true if we can read some whitespace.
- * <p>This is simply a convenience method.
- * <p>This method will push back a character rather than an
- * array whenever possible (probably the majority of cases).
- * @return true if whitespace was found.
- */
- private boolean tryWhitespace()
- throws SAXException, IOException
- {
- char c;
- c = readCh();
- if (isWhitespace(c))
- {
- skipWhitespace();
- return true;
- }
- else
- {
- unread(c);
- return false;
- }
- }
-
- /**
- * Read all data until we find the specified string.
- * This is useful for scanning CDATA sections and PIs.
- * <p>This is inefficient right now, since it calls tryRead ()
- * for every character.
- * @param delim The string delimiter
- * @see #tryRead (String, boolean)
- * @see #readCh
- */
- private void parseUntil(String delim)
- throws SAXException, IOException
- {
- parseUntil(delim.toCharArray());
- }
-
- private void parseUntil(char[] delim)
- throws SAXException, IOException
- {
- char c;
- int startLine = line;
-
- try
- {
- while (!tryRead(delim))
- {
- c = readCh();
- dataBufferAppend(c);
- }
- }
- catch (EOFException e)
- {
- error("end of input while looking for delimiter "
- + "(started on line " + startLine
- + ')', null, new String(delim));
- }
- }
-
- //////////////////////////////////////////////////////////////////////
- // Low-level I/O.
- //////////////////////////////////////////////////////////////////////
-
- /**
- * Prefetch US-ASCII XML/text decl from input stream into read buffer.
- * Doesn't buffer more than absolutely needed, so that when an encoding
- * decl says we need to create an InputStreamReader, we can discard our
- * buffer and reset(). Caller knows the first chars of the decl exist
- * in the input stream.
- */
- private void prefetchASCIIEncodingDecl()
- throws SAXException, IOException
- {
- int ch;
- readBufferPos = readBufferLength = 0;
-
- is.mark(readBuffer.length);
- while (true)
- {
- ch = is.read();
- readBuffer[readBufferLength++] = (char) ch;
- switch (ch)
- {
- case (int) '>':
- return;
- case -1:
- error("file ends before end of XML or encoding declaration.",
- null, "?>");
- }
- if (readBuffer.length == readBufferLength)
- {
- error("unfinished XML or encoding declaration");
- }
- }
- }
-
- /**
- * Read a chunk of data from an external input source.
- * <p>This is simply a front-end that fills the rawReadBuffer
- * with bytes, then calls the appropriate encoding handler.
- * @see #encoding
- * @see #rawReadBuffer
- * @see #readBuffer
- * @see #filterCR
- * @see #copyUtf8ReadBuffer
- * @see #copyIso8859_1ReadBuffer
- * @see #copyUcs_2ReadBuffer
- * @see #copyUcs_4ReadBuffer
- */
- private void readDataChunk()
- throws SAXException, IOException
- {
- int count;
-
- // See if we have any overflow (filterCR sets for CR at end)
- if (readBufferOverflow > -1)
- {
- readBuffer[0] = (char) readBufferOverflow;
- readBufferOverflow = -1;
- readBufferPos = 1;
- sawCR = true;
- }
- else
- {
- readBufferPos = 0;
- sawCR = false;
- }
-
- // input from a character stream.
- if (sourceType == INPUT_READER)
- {
- count = reader.read(readBuffer,
- readBufferPos, READ_BUFFER_MAX - readBufferPos);
- if (count < 0)
- {
- readBufferLength = readBufferPos;
- }
- else
- {
- readBufferLength = readBufferPos + count;
- }
- if (readBufferLength > 0)
- {
- filterCR(count >= 0);
- }
- sawCR = false;
- return;
- }
-
- // Read as many bytes as possible into the raw buffer.
- count = is.read(rawReadBuffer, 0, READ_BUFFER_MAX);
-
- // Dispatch to an encoding-specific reader method to populate
- // the readBuffer. In most parser speed profiles, these routines
- // show up at the top of the CPU usage chart.
- if (count > 0)
- {
- switch (encoding)
- {
- // one byte builtins
- case ENCODING_ASCII:
- copyIso8859_1ReadBuffer(count, (char) 0x0080);
- break;
- case ENCODING_UTF_8:
- copyUtf8ReadBuffer(count);
- break;
- case ENCODING_ISO_8859_1:
- copyIso8859_1ReadBuffer(count, (char) 0);
- break;
-
- // two byte builtins
- case ENCODING_UCS_2_12:
- copyUcs2ReadBuffer(count, 8, 0);
- break;
- case ENCODING_UCS_2_21:
- copyUcs2ReadBuffer(count, 0, 8);
- break;
-
- // four byte builtins
- case ENCODING_UCS_4_1234:
- copyUcs4ReadBuffer(count, 24, 16, 8, 0);
- break;
- case ENCODING_UCS_4_4321:
- copyUcs4ReadBuffer(count, 0, 8, 16, 24);
- break;
- case ENCODING_UCS_4_2143:
- copyUcs4ReadBuffer(count, 16, 24, 0, 8);
- break;
- case ENCODING_UCS_4_3412:
- copyUcs4ReadBuffer(count, 8, 0, 24, 16);
- break;
- }
- }
- else
- {
- readBufferLength = readBufferPos;
- }
-
- readBufferPos = 0;
-
- // Filter out all carriage returns if we've seen any
- // (including any saved from a previous read)
- if (sawCR)
- {
- filterCR(count >= 0);
- sawCR = false;
-
- // must actively report EOF, lest some CRs get lost.
- if (readBufferLength == 0 && count >= 0)
- {
- readDataChunk();
- }
- }
-
- if (count > 0)
- {
- currentByteCount += count;
- }
- }
-
- /**
- * Filter carriage returns in the read buffer.
- * CRLF becomes LF; CR becomes LF.
- * @param moreData true iff more data might come from the same source
- * @see #readDataChunk
- * @see #readBuffer
- * @see #readBufferOverflow
- */
- private void filterCR(boolean moreData)
- {
- int i, j;
-
- readBufferOverflow = -1;
-
-loop:
- for (i = j = readBufferPos; j < readBufferLength; i++, j++)
- {
- switch (readBuffer[j])
- {
- case '\r':
- if (j == readBufferLength - 1)
- {
- if (moreData)
- {
- readBufferOverflow = '\r';
- readBufferLength--;
- }
- else // CR at end of buffer
- {
- readBuffer[i++] = '\n';
- }
- break loop;
- }
- else if (readBuffer[j + 1] == '\n')
- {
- j++;
- }
- readBuffer[i] = '\n';
- break;
-
- case '\n':
- default:
- readBuffer[i] = readBuffer[j];
- break;
- }
- }
- readBufferLength = i;
- }
-
- /**
- * Convert a buffer of UTF-8-encoded bytes into UTF-16 characters.
- * <p>When readDataChunk () calls this method, the raw bytes are in
- * rawReadBuffer, and the final characters will appear in
- * readBuffer.
- * <p>Note that as of Unicode 3.1, good practice became a requirement,
- * so that each Unicode character has exactly one UTF-8 representation.
- * @param count The number of bytes to convert.
- * @see #readDataChunk
- * @see #rawReadBuffer
- * @see #readBuffer
- * @see #getNextUtf8Byte
- */
- private void copyUtf8ReadBuffer(int count)
- throws SAXException, IOException
- {
- int i = 0;
- int j = readBufferPos;
- int b1;
- char c = 0;
-
- /*
- // check once, so the runtime won't (if it's smart enough)
- if (count < 0 || count > rawReadBuffer.length)
- throw new ArrayIndexOutOfBoundsException (Integer.toString (count));
- */
-
- while (i < count)
- {
- b1 = rawReadBuffer[i++];
-
- // Determine whether we are dealing
- // with a one-, two-, three-, or four-
- // byte sequence.
- if (b1 < 0)
- {
- if ((b1 & 0xe0) == 0xc0)
- {
- // 2-byte sequence: 00000yyyyyxxxxxx = 110yyyyy 10xxxxxx
- c = (char) (((b1 & 0x1f) << 6)
- | getNextUtf8Byte(i++, count));
- if (c < 0x0080)
- {
- encodingError("Illegal two byte UTF-8 sequence",
- c, 0);
- }
-
- //Sec 2.11
- // [1] the two-character sequence #xD #xA
- // [2] the two-character sequence #xD #x85
- if ((c == 0x0085 || c == 0x000a) && sawCR)
- {
- continue;
- }
-
- // Sec 2.11
- // [3] the single character #x85
-
- if (c == 0x0085 && xmlVersion == XML_11)
- {
- readBuffer[j++] = '\r';
- }
- }
- else if ((b1 & 0xf0) == 0xe0)
- {
- // 3-byte sequence:
- // zzzzyyyyyyxxxxxx = 1110zzzz 10yyyyyy 10xxxxxx
- // most CJKV characters
- c = (char) (((b1 & 0x0f) << 12) |
- (getNextUtf8Byte(i++, count) << 6) |
- getNextUtf8Byte(i++, count));
- //sec 2.11
- //[4] the single character #x2028
- if (c == 0x2028 && xmlVersion == XML_11)
- {
- readBuffer[j++] = '\r';
- sawCR = true;
- continue;
- }
- if (c < 0x0800 || (c >= 0xd800 && c <= 0xdfff))
- {
- encodingError("Illegal three byte UTF-8 sequence",
- c, 0);
- }
- }
- else if ((b1 & 0xf8) == 0xf0)
- {
- // 4-byte sequence: 11101110wwwwzzzzyy + 110111yyyyxxxxxx
- // = 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx
- // (uuuuu = wwww + 1)
- // "Surrogate Pairs" ... from the "Astral Planes"
- // Unicode 3.1 assigned the first characters there
- int iso646 = b1 & 07;
- iso646 = (iso646 << 6) + getNextUtf8Byte(i++, count);
- iso646 = (iso646 << 6) + getNextUtf8Byte(i++, count);
- iso646 = (iso646 << 6) + getNextUtf8Byte(i++, count);
-
- if (iso646 <= 0xffff)
- {
- encodingError("Illegal four byte UTF-8 sequence",
- iso646, 0);
- }
- else
- {
- if (iso646 > 0x0010ffff)
- {
- encodingError("UTF-8 value out of range for Unicode",
- iso646, 0);
- }
- iso646 -= 0x010000;
- readBuffer[j++] = (char) (0xd800 | (iso646 >> 10));
- readBuffer[j++] = (char) (0xdc00 | (iso646 & 0x03ff));
- continue;
- }
- }
- else
- {
- // The five and six byte encodings aren't supported;
- // they exceed the Unicode (and XML) range.
- encodingError("unsupported five or six byte UTF-8 sequence",
- 0xff & b1, i);
- // NOTREACHED
- c = 0;
- }
- }
- else
- {
- // 1-byte sequence: 000000000xxxxxxx = 0xxxxxxx
- // (US-ASCII character, "common" case, one branch to here)
- c = (char) b1;
- }
- readBuffer[j++] = c;
- if (c == '\r')
- {
- sawCR = true;
- }
- }
- // How many characters have we read?
- readBufferLength = j;
- }
-
- /**
- * Return the next byte value in a UTF-8 sequence.
- * If it is not possible to get a byte from the current
- * entity, throw an exception.
- * @param pos The current position in the rawReadBuffer.
- * @param count The number of bytes in the rawReadBuffer
- * @return The significant six bits of a non-initial byte in
- * a UTF-8 sequence.
- * @exception EOFException If the sequence is incomplete.
- */
- private int getNextUtf8Byte(int pos, int count)
- throws SAXException, IOException
- {
- int val;
-
- // Take a character from the buffer
- // or from the actual input stream.
- if (pos < count)
- {
- val = rawReadBuffer[pos];
- }
- else
- {
- val = is.read();
- if (val == -1)
- {
- encodingError("unfinished multi-byte UTF-8 sequence at EOF",
- -1, pos);
- }
- }
-
- // Check for the correct bits at the start.
- if ((val & 0xc0) != 0x80)
- {
- encodingError("bad continuation of multi-byte UTF-8 sequence",
- val, pos + 1);
- }
-
- // Return the significant bits.
- return (val & 0x3f);
- }
-
- /**
- * Convert a buffer of US-ASCII or ISO-8859-1-encoded bytes into
- * UTF-16 characters.
- *
- * <p>When readDataChunk () calls this method, the raw bytes are in
- * rawReadBuffer, and the final characters will appear in
- * readBuffer.
- *
- * @param count The number of bytes to convert.
- * @param mask For ASCII conversion, 0x7f; else, 0xff.
- * @see #readDataChunk
- * @see #rawReadBuffer
- * @see #readBuffer
- */
- private void copyIso8859_1ReadBuffer(int count, char mask)
- throws IOException
- {
- int i, j;
- for (i = 0, j = readBufferPos; i < count; i++, j++)
- {
- char c = (char) (rawReadBuffer[i] & 0xff);
- if ((c & mask) != 0)
- {
- throw new CharConversionException("non-ASCII character U+"
- + Integer.toHexString(c));
- }
- if (c == 0x0085 && xmlVersion == XML_11)
- {
- c = '\r';
- }
- readBuffer[j] = c;
- if (c == '\r')
- {
- sawCR = true;
- }
- }
- readBufferLength = j;
- }
-
- /**
- * Convert a buffer of UCS-2-encoded bytes into UTF-16 characters
- * (as used in Java string manipulation).
- *
- * <p>When readDataChunk () calls this method, the raw bytes are in
- * rawReadBuffer, and the final characters will appear in
- * readBuffer.
- * @param count The number of bytes to convert.
- * @param shift1 The number of bits to shift byte 1.
- * @param shift2 The number of bits to shift byte 2
- * @see #readDataChunk
- * @see #rawReadBuffer
- * @see #readBuffer
- */
- private void copyUcs2ReadBuffer(int count, int shift1, int shift2)
- throws SAXException
- {
- int j = readBufferPos;
-
- if (count > 0 && (count % 2) != 0)
- {
- encodingError("odd number of bytes in UCS-2 encoding", -1, count);
- }
- // The loops are faster with less internal brancing; hence two
- if (shift1 == 0)
- { // "UTF-16-LE"
- for (int i = 0; i < count; i += 2)
- {
- char c = (char) (rawReadBuffer[i + 1] << 8);
- c |= 0xff & rawReadBuffer[i];
- readBuffer[j++] = c;
- if (c == '\r')
- {
- sawCR = true;
- }
- }
- }
- else
- { // "UTF-16-BE"
- for (int i = 0; i < count; i += 2)
- {
- char c = (char) (rawReadBuffer[i] << 8);
- c |= 0xff & rawReadBuffer[i + 1];
- readBuffer[j++] = c;
- if (c == '\r')
- {
- sawCR = true;
- }
- }
- }
- readBufferLength = j;
- }
-
- /**
- * Convert a buffer of UCS-4-encoded bytes into UTF-16 characters.
- *
- * <p>When readDataChunk () calls this method, the raw bytes are in
- * rawReadBuffer, and the final characters will appear in
- * readBuffer.
- * <p>Java has Unicode chars, and this routine uses surrogate pairs
- * for ISO-10646 values between 0x00010000 and 0x000fffff. An
- * exception is thrown if the ISO-10646 character has no Unicode
- * representation.
- *
- * @param count The number of bytes to convert.
- * @param shift1 The number of bits to shift byte 1.
- * @param shift2 The number of bits to shift byte 2
- * @param shift3 The number of bits to shift byte 2
- * @param shift4 The number of bits to shift byte 2
- * @see #readDataChunk
- * @see #rawReadBuffer
- * @see #readBuffer
- */
- private void copyUcs4ReadBuffer(int count, int shift1, int shift2,
- int shift3, int shift4)
- throws SAXException
- {
- int j = readBufferPos;
-
- if (count > 0 && (count % 4) != 0)
- {
- encodingError("number of bytes in UCS-4 encoding " +
- "not divisible by 4",
- -1, count);
- }
- for (int i = 0; i < count; i += 4)
- {
- int value = (((rawReadBuffer [i] & 0xff) << shift1) |
- ((rawReadBuffer [i + 1] & 0xff) << shift2) |
- ((rawReadBuffer [i + 2] & 0xff) << shift3) |
- ((rawReadBuffer [i + 3] & 0xff) << shift4));
- if (value < 0x0000ffff)
- {
- readBuffer [j++] = (char) value;
- if (value == (int) '\r')
- {
- sawCR = true;
- }
- }
- else if (value < 0x0010ffff)
- {
- value -= 0x010000;
- readBuffer[j++] = (char) (0xd8 | ((value >> 10) & 0x03ff));
- readBuffer[j++] = (char) (0xdc | (value & 0x03ff));
- }
- else
- {
- encodingError("UCS-4 value out of range for Unicode",
- value, i);
- }
- }
- readBufferLength = j;
- }
-
- /**
- * Report a character encoding error.
- */
- private void encodingError(String message, int value, int offset)
- throws SAXException
- {
- if (value != -1)
- {
- message = message + " (character code: 0x" +
- Integer.toHexString(value) + ')';
- error(message);
- }
- }
-
- //////////////////////////////////////////////////////////////////////
- // Local Variables.
- //////////////////////////////////////////////////////////////////////
-
- /**
- * Re-initialize the variables for each parse.
- */
- private void initializeVariables()
- {
- // First line
- line = 1;
- column = 0;
-
- // Set up the buffers for data and names
- dataBufferPos = 0;
- dataBuffer = new char[DATA_BUFFER_INITIAL];
- nameBufferPos = 0;
- nameBuffer = new char[NAME_BUFFER_INITIAL];
-
- // Set up the DTD hash tables
- elementInfo = new HashMap();
- entityInfo = new HashMap();
- notationInfo = new HashMap();
- skippedPE = false;
-
- // Set up the variables for the current
- // element context.
- currentElement = null;
- currentElementContent = CONTENT_UNDECLARED;
-
- // Set up the input variables
- sourceType = INPUT_NONE;
- inputStack = new LinkedList();
- entityStack = new LinkedList();
- externalEntity = null;
- tagAttributePos = 0;
- tagAttributes = new String[100];
- rawReadBuffer = new byte[READ_BUFFER_MAX];
- readBufferOverflow = -1;
-
- scratch = new InputSource();
-
- inLiteral = false;
- expandPE = false;
- peIsError = false;
-
- doReport = false;
-
- inCDATA = false;
-
- symbolTable = new Object[SYMBOL_TABLE_LENGTH][];
- }
-
- static class ExternalIdentifiers
- {
-
- String publicId;
- String systemId;
- String baseUri;
-
- ExternalIdentifiers()
- {
- }
-
- ExternalIdentifiers(String publicId, String systemId, String baseUri)
- {
- this.publicId = publicId;
- this.systemId = systemId;
- this.baseUri = baseUri;
- }
-
- }
-
- static class EntityInfo
- {
-
- int type;
- ExternalIdentifiers ids;
- String value;
- String notationName;
-
- }
-
- static class AttributeDecl
- {
-
- String type;
- String value;
- int valueType;
- String enumeration;
- String defaultValue;
-
- }
-
- static class ElementDecl
- {
-
- int contentType;
- String contentModel;
- HashMap attributes;
-
- }
-
- static class Input
- {
-
- int sourceType;
- URLConnection externalEntity;
- char[] readBuffer;
- int readBufferPos;
- int readBufferLength;
- int line;
- int encoding;
- int readBufferOverflow;
- InputStream is;
- int currentByteCount;
- int column;
- Reader reader;
-
- }
-
-}
-
diff --git a/libjava/gnu/xml/aelfred2/XmlReader.java b/libjava/gnu/xml/aelfred2/XmlReader.java
deleted file mode 100644
index a3bd03a8644..00000000000
--- a/libjava/gnu/xml/aelfred2/XmlReader.java
+++ /dev/null
@@ -1,374 +0,0 @@
-/* XmlReader.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.aelfred2;
-
-import java.io.IOException;
-import java.util.Locale;
-
-import org.xml.sax.*;
-import org.xml.sax.ext.*;
-
-import gnu.xml.pipeline.EventFilter;
-import gnu.xml.pipeline.ValidationConsumer;
-
-
-/**
- * This SAX2 parser optionally layers a validator over the &AElig;lfred2
- * SAX2 parser. While this will not evaluate every XML validity constraint,
- * it does support all the validity constraints that are of any real utility
- * outside the strict SGML-compatible world. See the documentation for the
- * SAXDriver class for information about the SAX2 features and properties
- * that are supported, and documentation for the ValidationConsumer for
- * information about what validity constraints may not be supported.
- * (&AElig;lfred2 tests some of those, even in non-validating mode, to
- * achieve better conformance.)
- *
- * <p> Note that due to its internal construction, you can't change most
- * handlers until parse() returns. This diverges slightly from SAX, which
- * expects later binding to be supported. Early binding involves less
- * runtime overhead, which is an issue for event pipelines as used inside
- * this parser. Rather than relying on the parser to handle late binding
- * to your own handlers, do it yourself.
- *
- * @see SAXDriver
- * @see gnu.xml.pipeline.ValidationConsumer
- *
- * @author David Brownell
- */
-public final class XmlReader
- implements XMLReader
-{
-
- static class FatalErrorHandler
- extends DefaultHandler2
- {
-
- public void error(SAXParseException e)
- throws SAXException
- {
- throw e;
- }
-
- }
-
- private SAXDriver aelfred2 = new SAXDriver();
- private EventFilter filter = new EventFilter();
- private boolean isValidating;
- private boolean active;
-
- /**
- * Constructs a SAX Parser.
- */
- public XmlReader()
- {
- }
-
- /**
- * Constructs a SAX Parser, optionally treating validity errors
- * as if they were fatal errors.
- */
- public XmlReader(boolean invalidIsFatal)
- {
- if (invalidIsFatal)
- {
- setErrorHandler(new FatalErrorHandler());
- }
- }
-
- /**
- * <b>SAX2</b>: Returns the object used to report the logical
- * content of an XML document.
- */
- public ContentHandler getContentHandler()
- {
- return filter.getContentHandler();
- }
-
- /**
- * <b>SAX2</b>: Assigns the object used to report the logical
- * content of an XML document.
- * @exception IllegalStateException if called mid-parse
- */
- public void setContentHandler(ContentHandler handler)
- {
- if (active)
- {
- throw new IllegalStateException("already parsing");
- }
- filter.setContentHandler(handler);
- }
-
- /**
- * <b>SAX2</b>: Returns the object used to process declarations related
- * to notations and unparsed entities.
- */
- public DTDHandler getDTDHandler()
- {
- return filter.getDTDHandler();
- }
-
- /**
- * <b>SAX1</b> Assigns DTD handler
- * @exception IllegalStateException if called mid-parse
- */
- public void setDTDHandler(DTDHandler handler)
- {
- if (active)
- {
- throw new IllegalStateException("already parsing");
- }
- filter.setDTDHandler(handler);
- }
-
- /**
- * <b>SAX2</b>: Returns the object used when resolving external
- * entities during parsing (both general and parameter entities).
- */
- public EntityResolver getEntityResolver()
- {
- return aelfred2.getEntityResolver();
- }
-
- /**
- * <b>SAX1</b> Assigns parser's entity resolver
- */
- public void setEntityResolver(EntityResolver handler)
- {
- aelfred2.setEntityResolver(handler);
- }
-
- /**
- * <b>SAX2</b>: Returns the object used to receive callbacks for XML
- * errors of all levels (fatal, nonfatal, warning); this is never null;
- */
- public ErrorHandler getErrorHandler()
- {
- return aelfred2.getErrorHandler();
- }
-
- /**
- * <b>SAX1</b> Assigns error handler
- * @exception IllegalStateException if called mid-parse
- */
- public void setErrorHandler(ErrorHandler handler)
- {
- if (active)
- {
- throw new IllegalStateException("already parsing");
- }
- aelfred2.setErrorHandler(handler);
- }
-
- /**
- * <b>SAX2</b>: Assigns the specified property.
- * @exception IllegalStateException if called mid-parse
- */
- public void setProperty(String propertyId, Object value)
- throws SAXNotRecognizedException, SAXNotSupportedException
- {
- if (active)
- {
- throw new IllegalStateException("already parsing");
- }
- if (getProperty(propertyId) != value)
- {
- filter.setProperty(propertyId, value);
- }
- }
-
- /**
- * <b>SAX2</b>: Returns the specified property.
- */
- public Object getProperty(String propertyId)
- throws SAXNotRecognizedException
- {
- if ((SAXDriver.PROPERTY + "declaration-handler").equals(propertyId)
- || (SAXDriver.PROPERTY + "lexical-handler").equals(propertyId))
- {
- return filter.getProperty(propertyId);
- }
- throw new SAXNotRecognizedException(propertyId);
- }
-
- private void forceValidating()
- throws SAXNotRecognizedException, SAXNotSupportedException
- {
- aelfred2.setFeature(SAXDriver.FEATURE + "namespace-prefixes",
- true);
- aelfred2.setFeature(SAXDriver.FEATURE + "external-general-entities",
- true);
- aelfred2.setFeature(SAXDriver.FEATURE + "external-parameter-entities",
- true);
- }
-
- /**
- * <b>SAX2</b>: Sets the state of features supported in this parser.
- * Note that this parser requires reporting of namespace prefixes when
- * validating.
- */
- public void setFeature(String featureId, boolean state)
- throws SAXNotRecognizedException, SAXNotSupportedException
- {
- boolean value = getFeature(featureId);
-
- if (state == value)
- {
- return;
- }
-
- if ((SAXDriver.FEATURE + "validation").equals(featureId))
- {
- if (active)
- {
- throw new SAXNotSupportedException("already parsing");
- }
- if (state)
- {
- forceValidating();
- }
- isValidating = state;
- }
- else
- {
- aelfred2.setFeature(featureId, state);
- }
- }
-
- /**
- * <b>SAX2</b>: Tells whether this parser supports the specified feature.
- * At this time, this directly parallels the underlying SAXDriver,
- * except that validation is optionally supported.
- *
- * @see SAXDriver
- */
- public boolean getFeature(String featureId)
- throws SAXNotRecognizedException, SAXNotSupportedException
- {
- if ((SAXDriver.FEATURE + "validation").equals(featureId))
- {
- return isValidating;
- }
-
- return aelfred2.getFeature(featureId);
- }
-
- /**
- * <b>SAX1</b>: Sets the locale used for diagnostics; currently,
- * only locales using the English language are supported.
- * @param locale The locale for which diagnostics will be generated
- */
- public void setLocale(Locale locale)
- throws SAXException
- {
- aelfred2.setLocale(locale);
- }
-
- /**
- * <b>SAX1</b>: Preferred API to parse an XML document, using a
- * system identifier (URI).
- */
- public void parse(String systemId)
- throws SAXException, IOException
- {
- parse(new InputSource(systemId));
- }
-
- /**
- * <b>SAX1</b>: Underlying API to parse an XML document, used
- * directly when no URI is available. When this is invoked,
- * and the parser is set to validate, some features will be
- * automatically reset to appropriate values: for reporting
- * namespace prefixes, and incorporating external entities.
- *
- * @param source The XML input source.
- *
- * @exception IllegalStateException if called mid-parse
- * @exception SAXException The handlers may throw any SAXException,
- * and the parser normally throws SAXParseException objects.
- * @exception IOException IOExceptions are normally through through
- * the parser if there are problems reading the source document.
- */
- public void parse(InputSource source)
- throws SAXException, IOException
- {
- EventFilter next;
- boolean nsdecls;
-
- synchronized (aelfred2)
- {
- if (active)
- {
- throw new IllegalStateException("already parsing");
- }
- active = true;
- }
-
- // set up the output pipeline
- if (isValidating)
- {
- forceValidating();
- next = new ValidationConsumer(filter);
- }
- else
- {
- next = filter;
- }
-
- // connect pipeline and error handler
- // don't let _this_ call to bind() affect xmlns* attributes
- nsdecls = aelfred2.getFeature(SAXDriver.FEATURE + "namespace-prefixes");
- EventFilter.bind(aelfred2, next);
- if (!nsdecls)
- {
- aelfred2.setFeature(SAXDriver.FEATURE + "namespace-prefixes",
- false);
- }
-
- // parse, clean up
- try
- {
- aelfred2.parse(source);
- }
- finally
- {
- active = false;
- }
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/Consumer.java b/libjava/gnu/xml/dom/Consumer.java
deleted file mode 100644
index f99e221e998..00000000000
--- a/libjava/gnu/xml/dom/Consumer.java
+++ /dev/null
@@ -1,368 +0,0 @@
-/* Consumer.java --
- Copyright (C) 2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.xml.dom;
-
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.ext.Attributes2;
-
-import gnu.xml.pipeline.DomConsumer;
-import gnu.xml.pipeline.EventConsumer;
-
-
-/**
- * Event consumer which constructs DOM documents using the implementation
- * in this package, using SAX2 events. This packages various backdoors
- * into this DOM implementation, as needed to address DOM requirements
- * that can't be met by strictly conforming implementations of DOM.
- *
- * <p> These requirements all relate to {@link DocumentType} nodes and
- * features of that node type. These features are normally not used,
- * because that interface only exposes a subset of the information found
- * in DTDs. More, that subset does not include the most important typing
- * information. For example, it excludes element content models and
- * attribute typing. It does expose some entity management issues,
- * although entity management doesn't relate to document typing.
- *
- * <p> Note that SAX2 does not expose the literal text of the DTD's
- * internal subset, so it will not be present in DOM trees constructed
- * using this API. (Though with a good SAX2 implementation, it could
- * be partially recreated...)
- *
- * @author David Brownell
- */
-public class Consumer extends DomConsumer
-{
- /**
- * Constructs an unconfigured event consumer,
- * as a terminus in a SAX event pipeline.
- */
- // used by PipelineFactory [terminus]
- public Consumer ()
- throws SAXException
- {
- super (DomDocument.class);
- setHandler (new Backdoor (this));
- }
-
- /**
- * Constructs an unconfigured event consumer,
- * as a stage in a SAX event pipeline.
- */
- // used by PipelineFactory [filter]
- public Consumer (EventConsumer next)
- throws SAXException
- {
- super (DomDocument.class, next);
- setHandler (new Backdoor (this));
- }
-
- /**
- * Implements the backdoors needed by DOM.
- * All methods in this class use implementation-specific APIs that are
- * implied by the DOM specification (needed to implement testable
- * behavior) but which are excluded from the DOM specification.
- */
- public static class Backdoor extends DomConsumer.Handler
- {
- /**
- * Constructor.
- * @param consumer must have been initialized to use the
- * {@link DomDocument} class (or a subclass) for
- * constructing DOM trees
- */
- protected Backdoor (DomConsumer consumer)
- throws SAXException
- { super (consumer); }
-
- // helper routine
- private DomDoctype getDoctype ()
- throws SAXException
- {
- DomDocument doc = (DomDocument) getDocument ();
- DocumentType dt = doc.getDoctype ();
-
- if (dt == null)
- throw new SAXException ("doctype missing!");
- return (DomDoctype) dt;
- }
-
- // SAX2 "lexical" event
- public void startDTD (String name, String publicId, String systemId)
- throws SAXException
- {
- DomDocument doc = (DomDocument) getDocument ();
-
- super.startDTD (name, publicId, systemId);
- // DOM L2 doctype creation model is bizarre
- DomDoctype dt = new DomDoctype (doc, name, publicId, systemId);
- doc.appendChild (dt);
- }
-
- // SAX2 "lexical" event
- public void endDTD ()
- throws SAXException
- {
- super.endDTD ();
- // DOM L2 has no way to make things readonly
- getDoctype ().makeReadonly ();
- }
-
- // SAX1 DTD event
- public void notationDecl (
- String name,
- String publicId, String systemId
- ) throws SAXException
- {
- // DOM L2 can't create/save notation nodes
- getDoctype ().declareNotation (name, publicId, systemId);
- }
-
- // SAX1 DTD event
- public void unparsedEntityDecl (
- String name,
- String publicId, String systemId,
- String notationName
- ) throws SAXException
- {
- // DOM L2 can't create/save entity nodes
- getDoctype ().declareEntity (name, publicId, systemId,
- notationName);
- }
-
- // SAX2 declaration event
- public void internalEntityDecl (String name, String value)
- throws SAXException
- {
- // DOM L2 can't create/save entity nodes
- // NOTE: this doesn't save the value as a child of this
- // node, though it could realistically do so.
- getDoctype ().declareEntity (name, null, null, null);
- }
-
- // SAX2 declaration event
- public void externalEntityDecl (
- String name,
- String publicId,
- String systemId
- ) throws SAXException
- {
- // DOM L2 can't create/save entity nodes
- // NOTE: DOM allows for these to have children, if
- // they don't have unbound namespace references.
- getDoctype ().declareEntity (name, publicId, systemId, null);
- }
-
- // SAX2 element
- public void startElement (
- String uri,
- String localName,
- String qName,
- Attributes atts
- ) throws SAXException
- {
- Node top;
-
- super.startElement (uri, localName, qName, atts);
-
- // might there be more work?
- top = getTop ();
- if (!top.hasAttributes () || !(atts instanceof Attributes2))
- return;
-
- // remember any attributes that got defaulted
- DomNamedNodeMap map = (DomNamedNodeMap) top.getAttributes ();
- Attributes2 attrs = (Attributes2) atts;
- int length = atts.getLength ();
-
- //map.compact ();
- for (int i = 0; i < length; i++) {
- if (attrs.isSpecified (i))
- continue;
-
- // value was defaulted.
- String temp = attrs.getQName (i);
- DomAttr attr;
-
- if ("".equals (temp))
- attr = (DomAttr) map.getNamedItemNS (attrs.getURI (i),
- atts.getLocalName (i));
- else
- attr = (DomAttr) map.getNamedItem (temp);
-
- // DOM L2 can't write this flag, only read it
- attr.setSpecified (false);
- }
- }
-
- public void endElement (
- String uri,
- String localName,
- String qName
- ) throws SAXException
- {
- DomNode top = (DomNode) getTop ();
- top.compact ();
- super.endElement (uri, localName, qName);
- }
-
- protected Text createText (
- boolean isCDATA,
- char buf [],
- int off,
- int len
- ) {
- DomDocument doc = (DomDocument) getDocument ();
-
- if (isCDATA)
- return doc.createCDATASection (buf, off, len);
- else
- return doc.createTextNode (buf, off, len);
- }
-
- public void elementDecl(String name, String model)
- throws SAXException
- {
- getDoctype().elementDecl(name, model);
- }
-
- public void attributeDecl (
- String ename,
- String aname,
- String type,
- String mode,
- String value
- ) throws SAXException
- {
- getDoctype().attributeDecl(ename, aname, type, mode, value);
- /*
- if (value == null && !"ID".equals (type))
- return;
-
- DomDoctype.ElementInfo info;
-
- info = getDoctype ().getElementInfo (ename);
- if (value != null)
- info.setAttrDefault (aname, value);
- if ("ID".equals (type))
- info.setIdAttr (aname);
- */
-
- }
-
- // force duplicate name checking off while we're
- // using parser output (don't duplicate the work)
- public void startDocument () throws SAXException
- {
- super.startDocument ();
-
- DomDocument doc = (DomDocument) getDocument ();
- doc.setStrictErrorChecking(false);
- doc.setBuilding(true);
- }
-
- /**
- * Required by DOM Level 3 to report document parameters
- */
- public void xmlDecl(String version,
- String encoding,
- boolean standalone,
- String inputEncoding)
- throws SAXException
- {
- super.xmlDecl(version, encoding, standalone, inputEncoding);
-
- DomDocument doc = (DomDocument) getDocument();
- doc.setXmlEncoding(encoding);
- doc.setInputEncoding(inputEncoding);
- }
-
- public void endDocument ()
- throws SAXException
- {
- DomDocument doc = (DomDocument) getDocument ();
- doc.setStrictErrorChecking(true);
- doc.setBuilding(false);
- doc.compact ();
- DomDoctype doctype = (DomDoctype) doc.getDoctype();
- if (doctype != null)
- {
- doctype.makeReadonly();
- }
- super.endDocument ();
- }
-
- // these three methods collaborate to populate entity
- // refs, marking contents readonly on end-of-entity
-
- public boolean canPopulateEntityRefs ()
- { return true; }
-
- public void startEntity (String name)
- throws SAXException
- {
- if (name.charAt (0) == '%' || "[dtd]".equals (name))
- return;
- super.startEntity (name);
-
- DomNode top = (DomNode) getTop ();
-
- if (top.getNodeType () == Node.ENTITY_REFERENCE_NODE)
- top.readonly = false;
- }
-
- public void endEntity (String name)
- throws SAXException
- {
- if (name.charAt (0) == '%' || "[dtd]".equals (name))
- return;
- DomNode top = (DomNode) getTop ();
-
- if (top.getNodeType () == Node.ENTITY_REFERENCE_NODE) {
- top.compact ();
- top.makeReadonly ();
- }
- super.endEntity (name);
- }
- }
-}
diff --git a/libjava/gnu/xml/dom/DTDAttributeTypeInfo.java b/libjava/gnu/xml/dom/DTDAttributeTypeInfo.java
deleted file mode 100644
index e3c69c43ecb..00000000000
--- a/libjava/gnu/xml/dom/DTDAttributeTypeInfo.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/* DTDAttributeTypeInfo.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.TypeInfo;
-
-/**
- * Attribute type information supplied by a DTD attribute declaration.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class DTDAttributeTypeInfo
- implements TypeInfo
-{
-
- final String elementName;
- final String name;
- final String type;
- final String mode;
- final String value;
-
- DTDAttributeTypeInfo(String elementName, String name, String type,
- String mode, String value)
- {
- this.elementName = elementName;
- this.name = name;
- this.type = type;
- this.mode = mode;
- this.value = value;
- }
-
- public final String getTypeName()
- {
- return type;
- }
-
- public final String getTypeNamespace()
- {
- return "http://www.w3.org/TR/REC-xml";
- }
-
- public final boolean isDerivedFrom(String typeNamespace, String typeName,
- int derivationMethod)
- {
- return false;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DTDElementTypeInfo.java b/libjava/gnu/xml/dom/DTDElementTypeInfo.java
deleted file mode 100644
index c5553e20e62..00000000000
--- a/libjava/gnu/xml/dom/DTDElementTypeInfo.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/* DTDElementTypeInfo.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import org.w3c.dom.TypeInfo;
-
-/**
- * Element type information provided by a DTD element declaration.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class DTDElementTypeInfo
- implements TypeInfo
-{
-
- final String name;
- String model;
- HashMap attributes;
- String idAttrName;
-
- DTDElementTypeInfo(String name, String model)
- {
- this.name = name;
- this.model = model;
- }
-
- public final String getTypeName()
- {
- return null;
- }
-
- public final String getTypeNamespace()
- {
- return "http://www.w3.org/TR/REC-xml";
- }
-
- public final boolean isDerivedFrom(String typeNamespace, String typeName,
- int derivationMethod)
- {
- return false;
- }
-
- DTDAttributeTypeInfo getAttributeTypeInfo(String name)
- {
- if (attributes == null)
- {
- return null;
- }
- return (DTDAttributeTypeInfo) attributes.get(name);
- }
-
- void setAttributeTypeInfo(String name, DTDAttributeTypeInfo info)
- {
- if (attributes == null)
- {
- attributes = new HashMap();
- }
- attributes.put(name, info);
- if ("ID".equals(info.type))
- {
- idAttrName = name;
- }
- }
-
- Iterator attributes()
- {
- if (attributes == null)
- {
- return null;
- }
- return attributes.values().iterator();
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomAttr.java b/libjava/gnu/xml/dom/DomAttr.java
deleted file mode 100644
index 8673a796161..00000000000
--- a/libjava/gnu/xml/dom/DomAttr.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/* DomAttr.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.TypeInfo;
-import org.w3c.dom.events.MutationEvent;
-
-
-/**
- * <p> "Attr" implementation. In DOM, attributes cost quite a lot of
- * memory because their values are complex structures rather than just
- * simple strings. To reduce your costs, avoid having more than one
- * child of an attribute; stick to a single Text node child, and ignore
- * even that by using the attribute's "nodeValue" property.</p>
- *
- * <p> As a bit of general advice, only look at attribute modification
- * events through the DOMAttrModified event (sent to the associated
- * element). Implementations are not guaranteed to report other events
- * in the same order, so you're very likely to write nonportable code if
- * you monitor events at the "children of Attr" level.</p>
- *
- * <p> At this writing, not all attribute modifications will cause the
- * DOMAttrModified event to be triggered ... only the ones using the string
- * methods (setNodeValue, setValue, and Element.setAttribute) to modify
- * those values. That is, if you manipulate those children directly,
- * elements won't get notified that attribute values have changed.
- * The natural fix for that will report other modifications, but won't
- * be able to expose "previous" attribute value; it'll need to be cached
- * or something (at which point why bother using child nodes). </p>
- *
- * <p><em>You are strongly advised not to use "children" of any attribute
- * nodes you work with.</em> </p>
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomAttr
- extends DomNsNode
- implements Attr
-{
-
- private boolean specified;
- private String value; // string value cache
-
- /**
- * Constructs an Attr node associated with the specified document.
- * The "specified" flag is initialized to true, since this DOM has
- * no current "back door" mechanisms to manage default values so
- * that every value must effectively be "specified".
- *
- * <p>This constructor should only be invoked by a Document as part of
- * its createAttribute functionality, or through a subclass which is
- * similarly used in a "Sub-DOM" style layer.
- *
- * @param owner The document with which this node is associated
- * @param namespaceURI Combined with the local part of the name,
- * this is used to uniquely identify a type of attribute
- * @param name Name of this attribute, which may include a prefix
- */
- protected DomAttr(DomDocument owner, String namespaceURI, String name)
- {
- super(ATTRIBUTE_NODE, owner, namespaceURI, name);
- specified = true;
- length = 1;
-
- // XXX register self to get insertion/removal events
- // and character data change events and when they happen,
- // report self-mutation
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the attribute name (same as getNodeName)
- */
- public final String getName()
- {
- return getNodeName();
- }
-
- /**
- * <b>DOM L1</b>
- * Returns true if a parser reported this was in the source text.
- */
- public final boolean getSpecified()
- {
- return specified;
- }
-
- /**
- * Records whether this attribute was in the source text.
- */
- public final void setSpecified(boolean value)
- {
- specified = value;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the attribute value, with character and entity
- * references substituted.
- * <em>NOTE: entity refs as children aren't currently handled.</em>
- */
- public String getNodeValue()
- {
- // If we have a simple node-value, use that
- if (first == null)
- {
- return (value == null) ? "" : value;
- }
- // Otherwise collect child node-values
- StringBuffer buf = new StringBuffer();
- for (DomNode ctx = first; ctx != null; ctx = ctx.next)
- {
- switch (ctx.nodeType)
- {
- case Node.TEXT_NODE:
- buf.append(ctx.getNodeValue());
- break;
- case Node.ENTITY_REFERENCE_NODE:
- // TODO
- break;
- }
- }
- return buf.toString();
- }
-
- /**
- * <b>DOM L1</b>
- * Assigns the value of the attribute; it will have one child,
- * which is a text node with the specified value (same as
- * setNodeValue).
- */
- public final void setValue(String value)
- {
- setNodeValue(value);
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the value of the attribute as a non-null string; same
- * as getNodeValue.
- * <em>NOTE: entity refs as children aren't currently handled.</em>
- */
- public final String getValue()
- {
- return getNodeValue();
- }
-
- /**
- * <b>DOM L1</b>
- * Assigns the attribute value; using this API, no entity or
- * character references will exist.
- * Causes a DOMAttrModified mutation event to be sent.
- */
- public void setNodeValue(String value)
- {
- if (readonly)
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
- }
- if (value == null)
- {
- value = "";
- }
- String oldValue = getNodeValue();
- while (last != null)
- {
- removeChild(last);
- }
- // don't create a new node just for this...
- /*
- Node text = owner.createTextNode(value);
- appendChild(text);
- */
- this.value = value;
- length = 1;
- specified = true;
-
- mutating(oldValue, value, MutationEvent.MODIFICATION);
- }
-
- public final Node getFirstChild()
- {
- // Create a child text node if necessary
- if (first == null)
- {
- length = 0;
- Node text = owner.createTextNode((value == null) ? "" : value);
- appendChild(text);
- }
- return first;
- }
-
- public final Node getLastChild()
- {
- // Create a child text node if necessary
- if (last == null)
- {
- length = 0;
- Node text = owner.createTextNode((value == null) ? "" : value);
- appendChild(text);
- }
- return last;
- }
-
- public Node item(int index)
- {
- // Create a child text node if necessary
- if (first == null)
- {
- length = 0;
- Node text = owner.createTextNode((value == null) ? "" : value);
- appendChild(text);
- }
- return super.item(index);
- }
-
- /**
- * <b>DOM L2</b>
- * Returns the element with which this attribute is associated.
- */
- public final Element getOwnerElement()
- {
- return (Element) parent;
- }
-
- public final Node getNextSibling()
- {
- return null;
- }
-
- public final Node getPreviousSibling()
- {
- return null;
- }
-
- public Node getParentNode()
- {
- return null;
- }
-
- /**
- * Records the element with which this attribute is associated.
- */
- public final void setOwnerElement(Element e)
- {
- if (parent != null)
- {
- throw new DomDOMException(DOMException.HIERARCHY_REQUEST_ERR);
- }
- if (!(e instanceof DomElement))
- {
- throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR);
- }
- parent = (DomElement) e;
- depth = parent.depth + 1;
- }
-
- /**
- * The base URI of an Attr is always <code>null</code>.
- */
- public final String getBaseURI()
- {
- return null;
- }
-
- /**
- * Shallow clone of the attribute, breaking all ties with any
- * elements.
- */
- public Object clone()
- {
- DomAttr retval = (DomAttr) super.clone();
- retval.specified = true;
- return retval;
- }
-
- private void mutating(String oldValue, String newValue, short why)
- {
- if (!reportMutations || parent == null)
- {
- return;
- }
-
- // EVENT: DOMAttrModified, target = parent,
- // prev/new values provided, also attr name
- MutationEvent event;
-
- event = (MutationEvent) createEvent ("MutationEvents");
- event.initMutationEvent ("DOMAttrModified",
- true /* bubbles */, false /* nocancel */,
- null, oldValue, newValue, getNodeName (), why);
- parent.dispatchEvent (event);
- }
-
- // DOM Level 3 methods
-
- public TypeInfo getSchemaTypeInfo()
- {
- if (parent != null)
- {
- // DTD implementation
- DomDoctype doctype = (DomDoctype) parent.owner.getDoctype();
- if (doctype != null)
- {
- return doctype.getAttributeTypeInfo(parent.getNodeName(),
- getNodeName());
- }
- // TODO XML Schema implementation
- }
- return null;
- }
-
- public boolean isId()
- {
- if (parent != null)
- {
- DomDoctype doctype = (DomDoctype) parent.owner.getDoctype();
- if (doctype != null)
- {
- DTDAttributeTypeInfo info =
- doctype.getAttributeTypeInfo(parent.getNodeName(),
- getNodeName());
- if (info != null && "ID".equals(info.type))
- {
- return true;
- }
- }
- DomElement element = (DomElement) parent;
- if (element.userIdAttrs != null &&
- element.userIdAttrs.contains(this))
- {
- return true;
- }
- // TODO XML Schema implementation
- }
- return false;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomCDATASection.java b/libjava/gnu/xml/dom/DomCDATASection.java
deleted file mode 100644
index e34359e71bf..00000000000
--- a/libjava/gnu/xml/dom/DomCDATASection.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/* DomCDATASection.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.CDATASection;
-
-/**
- * <p> "CDATASection" implementation.
- * This is a non-core DOM class, supporting the "XML" feature.
- * CDATA sections are just ways to represent text using different
- * delimeters. </p>
- *
- * <p> <em>You are strongly advised not to use CDATASection nodes.</em>
- * The advantage of having slightly prettier ways to print text that may
- * have lots of embedded XML delimiters, such as "&amp;" and "&lt;",
- * can be dwarfed by the cost of dealing with multiple kinds of text
- * nodes in all your algorithms. </p>
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomCDATASection
- extends DomText
- implements CDATASection
-{
-
- /**
- * Constructs a CDATA section node associated with the specified
- * document and holding the specified data.
- *
- * <p>This constructor should only be invoked by a Document as part of
- * its createCDATASection functionality, or through a subclass which is
- * similarly used in a "Sub-DOM" style layer.
- *
- */
- protected DomCDATASection(DomDocument owner, String value)
- {
- super(CDATA_SECTION_NODE, owner, value);
- }
-
- protected DomCDATASection(DomDocument owner, char buf [], int off, int len)
- {
- super(CDATA_SECTION_NODE, owner, buf, off, len);
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the string "#cdata-section".
- */
- final public String getNodeName()
- {
- return "#cdata-section";
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomCharacterData.java b/libjava/gnu/xml/dom/DomCharacterData.java
deleted file mode 100644
index e94dcc4ecf9..00000000000
--- a/libjava/gnu/xml/dom/DomCharacterData.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/* DomCharacterData.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.CharacterData;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.events.MutationEvent;
-
-
-/**
- * <p> Abstract "CharacterData" implementation. This
- * facilitates reusing code in classes implementing subtypes of that DOM
- * interface (Text, Comment, CDATASection). </p>
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public abstract class DomCharacterData
- extends DomNode
- implements CharacterData
-{
-
- private String text;
-
- // package private
- DomCharacterData(short nodeType, DomDocument doc, String value)
- {
- super(nodeType, doc);
- text = (value == null) ? "" : value;
- }
-
- // package private
- DomCharacterData(short nodeType, DomDocument doc,
- char[] buf, int offset, int length)
- {
- super(nodeType, doc);
- text = (buf == null) ? "" : new String(buf, offset, length);
- }
-
- /**
- * <b>DOM L1</b>
- * Appends the specified data to the value of this node.
- * Causes a DOMCharacterDataModified mutation event to be reported.
- */
- public void appendData(String arg)
- {
- if (isReadonly())
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
- }
- String value = text + arg;
- mutating(value);
- text = value;
- }
-
- /**
- * <b>DOM L1</b>
- * Modifies the value of this node.
- * Causes a DOMCharacterDataModified mutation event to be reported.
- */
- public void deleteData(int offset, int count)
- {
- if (isReadonly())
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
- }
- char[] raw = text.toCharArray();
- if (offset < 0 || count < 0 || offset > raw.length)
- {
- throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
- }
- if ((offset + count) > raw.length)
- {
- count = raw.length - offset;
- }
- if (count == 0)
- {
- return;
- }
- try
- {
- char[] buf = new char[raw.length - count];
- System.arraycopy(raw, 0, buf, 0, offset);
- System.arraycopy(raw, offset + count, buf, offset,
- raw.length - (offset + count));
- String value = new String(buf);
- mutating(value);
- text = value;
- }
- catch (IndexOutOfBoundsException x)
- {
- throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
- }
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the value of this node.
- */
- public String getNodeValue()
- {
- return text;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the value of this node; same as getNodeValue.
- */
- public final String getData()
- {
- return text;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the length of the data.
- */
- public int getLength()
- {
- return text.length();
- }
-
- /**
- * <b>DOM L1</b>
- * Modifies the value of this node.
- */
- public void insertData(int offset, String arg)
- {
- if (isReadonly())
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
- }
- char[] raw = text.toCharArray();
- char[] tmp = arg.toCharArray ();
- char[] buf = new char[raw.length + tmp.length];
-
- try
- {
- System.arraycopy(raw, 0, buf, 0, offset);
- System.arraycopy(tmp, 0, buf, offset, tmp.length);
- System.arraycopy(raw, offset, buf, offset + tmp.length,
- raw.length - offset);
- String value = new String(buf);
- mutating(value);
- text = value;
- }
- catch (IndexOutOfBoundsException x)
- {
- throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
- }
- }
-
- /**
- * <b>DOM L1</b>
- * Modifies the value of this node. Causes DOMCharacterDataModified
- * mutation events to be reported (at least one).
- */
- public void replaceData(int offset, int count, String arg)
- {
- if (readonly)
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
- }
- char[] raw = text.toCharArray();
-
- // deleteData
- if (offset < 0 || count < 0 || offset > raw.length)
- {
- throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
- }
- if ((offset + count) > raw.length)
- {
- count = raw.length - offset;
- }
- try
- {
- char[] buf = new char[raw.length - count];
- System.arraycopy(raw, 0, buf, 0, offset);
- System.arraycopy(raw, offset + count, buf, offset,
- raw.length - (offset + count));
-
- // insertData
- char[] tmp = arg.toCharArray ();
- char[] buf2 = new char[buf.length + tmp.length];
- System.arraycopy(raw, 0, buf, 0, offset);
- System.arraycopy(tmp, 0, buf, offset, tmp.length);
- System.arraycopy(raw, offset, buf, offset + tmp.length,
- raw.length - offset);
- String value = new String(buf);
- mutating(value);
- text = value;
- }
- catch (IndexOutOfBoundsException x)
- {
- throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
- }
- }
-
- /**
- * <b>DOM L1</b>
- * Assigns the value of this node.
- * Causes a DOMCharacterDataModified mutation event to be reported.
- */
- public void setNodeValue(String value)
- {
- if (isReadonly())
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
- }
- if (value == null)
- {
- value = "";
- }
- mutating(value);
- text = value;
- }
-
- /**
- * <b>DOM L1</b>
- * Assigns the value of this node; same as setNodeValue.
- */
- final public void setData(String data)
- {
- setNodeValue(data);
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the specified substring.
- */
- public String substringData(int offset, int count)
- {
- try
- {
- return text.substring(offset, count);
- }
- catch (StringIndexOutOfBoundsException e)
- {
- if (offset >= 0 && count >= 0 && offset < text.length())
- {
- return text.substring(offset);
- }
- throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
- }
- }
-
- /**
- * The base URI for character data is <code>null</code>.
- * @since DOM Level 3 Core
- */
- public final String getBaseURI()
- {
- return null;
- }
-
- private void mutating(String newValue)
- {
- if (!reportMutations)
- {
- return;
- }
-
- // EVENT: DOMCharacterDataModified, target = this,
- // prev/new values provided
- MutationEvent event;
-
- event = (MutationEvent) createEvent("MutationEvents");
- event.initMutationEvent("DOMCharacterDataModified",
- true /* bubbles */, false /* nocancel */,
- null, text, newValue, null, (short) 0);
- dispatchEvent(event);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomComment.java b/libjava/gnu/xml/dom/DomComment.java
deleted file mode 100644
index 71c8160485f..00000000000
--- a/libjava/gnu/xml/dom/DomComment.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/* DomComment.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.Comment;
-
-/**
- * <p> "Comment" implementation.
- * Comments hold data intended for direct consumption by people;
- * programs should only use ProcessingInstruction nodes. Note that
- * since SAX makes comment reporting optional, XML systems that
- * rely on comments (such as by using this class) will often lose
- * those comments at some point in the processing pipeline. </p>
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomComment
- extends DomCharacterData
- implements Comment
-{
-
- /**
- * Constructs a comment node associated with the specified
- * document and holding the specified data.
- *
- * <p>This constructor should only be invoked by a Document as part of
- * its createComment functionality, or through a subclass which is
- * similarly used in a "Sub-DOM" style layer.
- */
- protected DomComment(DomDocument owner, String value)
- {
- super(COMMENT_NODE, owner, value);
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the string "#comment".
- */
- final public String getNodeName()
- {
- return "#comment";
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomDOMException.java b/libjava/gnu/xml/dom/DomDOMException.java
deleted file mode 100644
index cf93fcf9749..00000000000
--- a/libjava/gnu/xml/dom/DomDOMException.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/* DomDOMException.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Node;
-
-/**
- * <p> DOMException implementation. The version that
- * is provided by the W3C is abstract, so it can't be instantiated.
- *
- * <p> This also provides a bit more information about the error
- * that is being reported, in terms of the relevant DOM structures
- * and data.
- *
- * @author David Brownell
- */
-public class DomDOMException
- extends DOMException
-{
-
- /** @serial Data that caused an error to be reported */
- private String data;
-
- /** @serial Node associated with the error. */
- private Node node;
-
- /** @serial Data associated with the error. */
- private int value;
-
- /**
- * Constructs an exception, with the diagnostic message
- * corresponding to the specified code.
- */
- public DomDOMException(short code)
- {
- super(code, diagnostic(code));
- }
-
- /**
- * Constructs an exception, with the diagnostic message
- * corresponding to the specified code and additional
- * information as provided.
- */
- public DomDOMException(short code, String data, Node node, int value)
- {
- super(code, diagnostic(code));
- this.data = data;
- this.node = node;
- this.value = value;
- }
-
- /** Returns the node to which the diagnotic applies, or null. */
- final public Node getNode()
- {
- return node;
- }
-
- /** Returns data to which the diagnotic applies, or null. */
- final public String getData()
- {
- return data;
- }
-
- /** Returns data to which the diagnotic applies, or null. */
- final public int getValue()
- {
- return value;
- }
-
- /**
- * Returns a diagnostic message that may be slightly more useful
- * than the generic one, where possible.
- */
- public String getMessage()
- {
- String retval = super.getMessage();
-
- if (data != null)
- {
- retval += "\nMore Information: " + data;
- }
- if (value != 0)
- {
- retval += "\nNumber: " + value;
- }
- if (node != null)
- {
- retval += "\nNode Name: " + node.getNodeName();
- }
- return retval;
- }
-
- // these strings should be localizable.
-
- private static String diagnostic(short code)
- {
- switch (code)
- {
- // DOM L1:
- case INDEX_SIZE_ERR:
- return "An index or size is out of range.";
- case DOMSTRING_SIZE_ERR:
- return "A string is too big.";
- case HIERARCHY_REQUEST_ERR:
- return "The node doesn't belong here.";
- case WRONG_DOCUMENT_ERR:
- return "The node belongs in another document.";
- case INVALID_CHARACTER_ERR:
- return "That character is not permitted.";
- case NO_DATA_ALLOWED_ERR:
- return "This node does not permit data.";
- case NO_MODIFICATION_ALLOWED_ERR:
- return "No changes are allowed.";
- case NOT_FOUND_ERR:
- return "The node was not found in that context.";
- case NOT_SUPPORTED_ERR:
- return "That object is not supported.";
- case INUSE_ATTRIBUTE_ERR:
- return "The attribute belongs to a different element.";
-
- // DOM L2:
- case INVALID_STATE_ERR:
- return "The object is not usable.";
- case SYNTAX_ERR:
- return "An illegal string was provided.";
- case INVALID_MODIFICATION_ERR:
- return "An object's type may not be changed.";
- case NAMESPACE_ERR:
- return "The operation violates XML Namespaces.";
- case INVALID_ACCESS_ERR:
- return "Parameter or operation isn't supported by this node.";
- case TYPE_MISMATCH_ERR:
- return "The type of the argument is incompatible with the expected type.";
- }
- return "Reserved exception number: " + code;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomDoctype.java b/libjava/gnu/xml/dom/DomDoctype.java
deleted file mode 100644
index d35eedc7f75..00000000000
--- a/libjava/gnu/xml/dom/DomDoctype.java
+++ /dev/null
@@ -1,455 +0,0 @@
-/* DomDoctype.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import java.util.HashMap;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.Entity;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.Notation;
-
-/**
- * <p> "DocumentType" implementation (with no extensions for supporting
- * any document typing information). This is a non-core DOM class,
- * supporting the "XML" feature. </p>
- *
- * <p> <em>Few XML applications will actually care about this partial
- * DTD support</em>, since it doesn't expose any (!) of the data typing
- * facilities which can motivate applications to use DTDs. It does not
- * expose element content models, or information about attribute typing
- * rules. Plus the information it exposes isn't very useful; as one example,
- * DOM exposes information about unparsed ENTITY objects, which is only used
- * with certain element attributes, but does not expose the information about
- * those attributes which is needed to apply that data! </p>
- *
- * <p> Also, note that there are no nonportable ways to associate even the
- * notation and entity information exposed by DOM with a DocumentType. While
- * there is a DOM L2 method to construct a DocumentType, it only gives access
- * to the textual content of the &lt;!DOCTYPE ...&gt; declaration. </p>
- *
- * <p> In short, <em>you are strongly advised not to rely on this incomplete
- * DTD functionality</em> in your application code.</p>
- *
- * @see DomEntity
- * @see DomEntityReference
- * @see DomNotation
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomDoctype
- extends DomExtern
- implements DocumentType
-{
-
- private DomNamedNodeMap notations;
- private DomNamedNodeMap entities;
- private final DOMImplementation implementation;
- private String subset;
-
- private HashMap elements = new HashMap();
- private boolean ids;
-
- /**
- * Constructs a DocumentType node associated with the specified
- * implementation, with the specified name.
- *
- * <p>This constructor should only be invoked by a DOMImplementation as
- * part of its createDocumentType functionality, or through a subclass
- * which is similarly used in a "Sub-DOM" style layer.
- *
- * <p> Note that at this time there is no standard SAX API granting
- * access to the internal subset text, so that relying on that value
- * is not currently portable.
- *
- * @param impl The implementation with which this object is associated
- * @param name Name of this root element
- * @param publicId If non-null, provides the external subset's
- * PUBLIC identifier
- * @param systemId If non-null, provides the external subset's
- * SYSTEM identifier
- * @param internalSubset Provides the literal value (unparsed, no
- * entities expanded) of the DTD's internal subset.
- */
- protected DomDoctype(DOMImplementation impl,
- String name,
- String publicId,
- String systemId,
- String internalSubset)
- {
- super(DOCUMENT_TYPE_NODE, null, name, publicId, systemId);
- implementation = impl;
- subset = internalSubset;
- }
-
- /**
- * JAXP builder constructor.
- * @param doc the document
- * @param name the name of the document element
- * @param publicId the public ID of the document type declaration
- * @param systemId the system ID of the document type declaration
- */
- public DomDoctype(DomDocument doc,
- String name,
- String publicId,
- String systemId)
- {
- super(DOCUMENT_TYPE_NODE, doc, name, publicId, systemId);
- implementation = doc.getImplementation();
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the root element's name (just like getNodeName).
- */
- final public String getName()
- {
- return getNodeName();
- }
-
- /**
- * <b>DOM L1</b>
- * Returns information about any general entities declared
- * in the DTD.
- *
- * <p><em>Note: DOM L1 doesn't throw a DOMException here, but
- * then it doesn't have the strange construction rules of L2.</em>
- *
- * @exception DOMException HIERARCHY_REQUEST_ERR if the DocumentType
- * is not associated with a document.
- */
- public NamedNodeMap getEntities()
- {
- if (entities == null)
- {
- entities = new DomNamedNodeMap(this, Node.ENTITY_NODE);
- }
- return entities;
- }
-
- /**
- * Records the declaration of a general entity in this DocumentType.
- *
- * @param name Name of the entity
- * @param publicId If non-null, provides the entity's PUBLIC identifier
- * @param systemId Provides the entity's SYSTEM identifier
- * @param notation If non-null, provides the entity's notation
- * (indicating an unparsed entity)
- * @return The Entity that was declared, or null if the entity wasn't
- * recorded (because it's a parameter entity or because an entity with
- * this name was already declared).
- *
- * @exception DOMException NO_MODIFICATION_ALLOWED_ERR if the
- * DocumentType is no longer writable.
- * @exception DOMException HIERARCHY_REQUEST_ERR if the DocumentType
- * is not associated with a document.
- */
- public Entity declareEntity(String name,
- String publicId,
- String systemId,
- String notation)
- {
- DomEntity entity;
-
- if (name.charAt(0) == '%' || "[dtd]".equals(name))
- {
- return null;
- }
- if (isReadonly())
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
- }
- getEntities();
-
- DomDocument.checkName(name, (owner != null) ?
- "1.1".equals(owner.getXmlVersion()) : false);
- if (entities.getNamedItem(name) != null)
- {
- return null;
- }
-
- entity = new DomEntity(owner, name, publicId, systemId, notation);
- entities.setNamedItem(entity);
- return entity;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns information about any notations declared in the DTD.
- *
- * <p><em>Note: DOM L1 doesn't throw a DOMException here, but
- * then it doesn't have the strange construction rules of L2.</em>
- *
- * @exception DOMException HIERARCHY_REQUEST_ERR if the DocumentType
- * is not associated with a document.
- */
- public NamedNodeMap getNotations()
- {
- if (notations == null)
- {
- notations = new DomNamedNodeMap(this, Node.NOTATION_NODE);
- }
- return notations;
- }
-
- /**
- * Records the declaration of a notation in this DocumentType.
- *
- * @param name Name of the notation
- * @param publicId If non-null, provides the notation's PUBLIC identifier
- * @param systemId If non-null, provides the notation's SYSTEM identifier
- * @return The notation that was declared.
- *
- * @exception DOMException NO_MODIFICATION_ALLOWED_ERR if the
- * DocumentType is no longer writable.
- * @exception DOMException HIERARCHY_REQUEST_ERR if the DocumentType
- * is not associated with a document.
- */
- public Notation declareNotation(String name,
- String publicId,
- String systemId)
- {
- DomNotation notation;
-
- if (isReadonly())
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
- }
- getNotations();
-
- DomDocument.checkName(name, (owner != null) ?
- "1.1".equals(owner.getXmlVersion()) : false);
-
- notation = new DomNotation(owner, name, publicId, systemId);
- notations.setNamedItem(notation);
- return notation;
- }
-
- /**
- * <b>DOM L2</b>
- * Returns the internal subset of the document, as a string of unparsed
- * XML declarations (and comments, PIs, whitespace); or returns null if
- * there is no such subset. There is no vendor-independent expectation
- * that this attribute be set, or that declarations found in it be
- * reflected in the <em>entities</em> or <em>notations</em> attributes
- * of this Document "Type" object.
- *
- * <p> Some application-specific XML profiles require that documents
- * only use specific PUBLIC identifiers, without an internal subset
- * to modify the interperetation of the declarations associated with
- * that PUBLIC identifier through some standard.
- */
- public String getInternalSubset()
- {
- return subset;
- }
-
- /**
- * The base URI of a DocumentType is always <code>null</code>.
- * See the Infoset Mapping, appendix C.
- */
- public final String getBaseURI()
- {
- return null;
- }
-
- /**
- * Sets the internal "readonly" flag so the node and its associated
- * data (only lists of entities and notations, no type information
- * at the moment) can't be changed.
- */
- public void makeReadonly()
- {
- super.makeReadonly();
- if (entities != null)
- {
- entities.makeReadonly();
- }
- if (notations != null)
- {
- notations.makeReadonly();
- }
- }
-
- void setOwner(DomDocument doc)
- {
- if (entities != null)
- {
- for (DomNode ctx = entities.first; ctx != null; ctx = ctx.next)
- {
- ctx.setOwner(doc);
- }
- }
- if (notations != null)
- {
- for (DomNode ctx = notations.first; ctx != null; ctx = ctx.next)
- {
- ctx.setOwner(doc);
- }
- }
- super.setOwner(doc);
- }
-
- /**
- * <b>DOM L2</b>
- * Consults the DOM implementation to determine if the requested
- * feature is supported.
- */
- final public boolean supports(String feature, String version)
- {
- return implementation.hasFeature(feature, version);
- }
-
- /**
- * Returns the implementation associated with this document type.
- */
- final public DOMImplementation getImplementation()
- {
- return implementation;
- }
-
- public void elementDecl(String name, String model)
- {
- DTDElementTypeInfo info = getElementTypeInfo(name);
- if (info == null)
- {
- info = new DTDElementTypeInfo(name, model);
- elements.put(name, info);
- }
- else
- {
- info.model = model;
- }
- }
-
- DTDElementTypeInfo getElementTypeInfo(String name)
- {
- return (DTDElementTypeInfo) elements.get(name);
- }
-
- public void attributeDecl(String eName, String aName, String type,
- String mode, String value)
- {
- DTDAttributeTypeInfo info = new DTDAttributeTypeInfo(eName, aName, type,
- mode, value);
- DTDElementTypeInfo elementInfo = getElementTypeInfo(eName);
- if (elementInfo == null)
- {
- elementInfo = new DTDElementTypeInfo(eName, null);
- elements.put(eName, elementInfo);
- }
- elementInfo.setAttributeTypeInfo(aName, info);
- if ("ID".equals(type))
- {
- ids = true;
- }
- }
-
- DTDAttributeTypeInfo getAttributeTypeInfo(String elementName, String name)
- {
- DTDElementTypeInfo elementInfo =
- (DTDElementTypeInfo) elements.get(elementName);
- return (elementInfo == null) ? null :
- elementInfo.getAttributeTypeInfo(name);
- }
-
- boolean hasIds()
- {
- return ids;
- }
-
- public boolean isSameNode(Node arg)
- {
- if (equals(arg))
- {
- return true;
- }
- if (!(arg instanceof DocumentType))
- {
- return false;
- }
- DocumentType doctype = (DocumentType) arg;
- if (!equal(getPublicId(), doctype.getPublicId()))
- {
- return false;
- }
- if (!equal(getSystemId(), doctype.getSystemId()))
- {
- return false;
- }
- if (!equal(getInternalSubset(), doctype.getInternalSubset()))
- {
- return false;
- }
- // TODO entities
- // TODO notations
- return true;
- }
-
- /**
- * Shallow clone of the doctype, except that associated
- * entities and notations are (deep) cloned.
- */
- public Object clone()
- {
- DomDoctype node = (DomDoctype) super.clone();
-
- if (entities != null)
- {
- node.entities = new DomNamedNodeMap(node, Node.ENTITY_NODE);
- for (DomNode ctx = entities.first; ctx != null; ctx = ctx.next)
- {
- node.entities.setNamedItem(ctx.cloneNode(true));
- }
- }
- if (notations != null)
- {
- node.notations = new DomNamedNodeMap(node, Node.NOTATION_NODE);
- for (DomNode ctx = notations.first; ctx != null; ctx = ctx.next)
- {
- node.notations.setNamedItem(ctx.cloneNode(true));
- }
- }
- return node;
- }
-
-
-}
diff --git a/libjava/gnu/xml/dom/DomDocument.java b/libjava/gnu/xml/dom/DomDocument.java
deleted file mode 100644
index ec422d1b4de..00000000000
--- a/libjava/gnu/xml/dom/DomDocument.java
+++ /dev/null
@@ -1,1387 +0,0 @@
-/* DomDocument.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import java.util.Iterator;
-import javax.xml.XMLConstants;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.CDATASection;
-import org.w3c.dom.Comment;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.DOMConfiguration;
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Element;
-import org.w3c.dom.Entity;
-import org.w3c.dom.EntityReference;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.Notation;
-import org.w3c.dom.ProcessingInstruction;
-import org.w3c.dom.Text;
-import org.w3c.dom.UserDataHandler;
-import org.w3c.dom.traversal.DocumentTraversal;
-import org.w3c.dom.traversal.NodeFilter;
-import org.w3c.dom.traversal.NodeIterator;
-import org.w3c.dom.traversal.TreeWalker;
-import org.w3c.dom.xpath.XPathEvaluator;
-import org.w3c.dom.xpath.XPathException;
-import org.w3c.dom.xpath.XPathExpression;
-import org.w3c.dom.xpath.XPathNSResolver;
-
-/**
- * <p> "Document" and "DocumentTraversal" implementation.
- *
- * <p> Note that when this checks names for legality, it uses an
- * approximation of the XML rules, not the real ones. Specifically,
- * it uses Unicode rules, with sufficient tweaks to pass a majority
- * of basic XML conformance tests. (The huge XML character tables are
- * hairy to implement.)
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomDocument
- extends DomNode
- implements Document, DocumentTraversal, XPathEvaluator
-{
-
- private final DOMImplementation implementation;
- private boolean checkingCharacters = true;
- boolean checkingWellformedness = true;
-
- boolean building; // if true, skip mutation events in the tree
-
- DomDocumentConfiguration config;
-
- String inputEncoding;
- String encoding;
- String version = "1.0";
- boolean standalone;
- String systemId;
-
- /**
- * Constructs a Document node, associating it with an instance
- * of the DomImpl class.
- *
- * <p> Note that this constructor disables character checking.
- * It is normally used when connecting a DOM to an XML parser,
- * and duplicating such checks is undesirable. When used for
- * purposes other than connecting to a parser, you should
- * re-enable that checking.
- *
- * @see #setCheckingCharacters
- */
- public DomDocument()
- {
- this(new DomImpl());
- }
-
- /**
- * Constructs a Document node, associating it with the specified
- * implementation. This should only be used in conjunction with
- * a specialized implementation; it will normally be called by
- * that implementation.
- *
- * @see DomImpl
- * @see #setCheckingCharacters
- */
- protected DomDocument(DOMImplementation impl)
- {
- super(DOCUMENT_NODE, null);
- implementation = impl;
- }
-
- /**
- * Sets the <code>building</code> flag.
- * Mutation events in the document are not reported.
- */
- public void setBuilding(boolean flag)
- {
- building = flag;
- }
-
- /**
- * Sets whether to check for document well-formedness.
- * If true, an exception will be raised if a second doctype or root
- * element node is added to the document.
- */
- public void setCheckWellformedness(boolean flag)
- {
- checkingWellformedness = flag;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the constant "#document".
- */
- final public String getNodeName()
- {
- return "#document";
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the document's root element, or null.
- */
- final public Element getDocumentElement()
- {
- for (DomNode ctx = first; ctx != null; ctx = ctx.next)
- {
- if (ctx.nodeType == ELEMENT_NODE)
- {
- return (Element) ctx;
- }
- }
- return null;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the document's DocumentType, or null.
- */
- final public DocumentType getDoctype()
- {
- for (DomNode ctx = first; ctx != null; ctx = ctx.next)
- {
- if (ctx.nodeType == DOCUMENT_TYPE_NODE)
- {
- return (DocumentType) ctx;
- }
- }
- return null;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the document's DOMImplementation.
- */
- final public DOMImplementation getImplementation()
- {
- return implementation;
- }
-
- /**
- * <b>DOM L1 (relocated in DOM L2)</b>
- * Returns the element with the specified "ID" attribute, or null.
- *
- * <p>Returns null unless {@link Consumer} was used to populate internal
- * DTD declaration information, using package-private APIs. If that
- * internal DTD information is available, the document may be searched for
- * the element with that ID.
- */
- public Element getElementById(String id)
- {
- DomDoctype doctype = (DomDoctype) getDoctype();
-
- if (doctype == null || !doctype.hasIds()
- || id == null || id.length() == 0)
- {
- return null;
- }
-
- // yes, this is linear in size of document.
- // it'd be easy enough to maintain a hashtable.
- Node current = getDocumentElement();
- Node temp;
-
- if (current == null)
- {
- return null;
- }
- while (current != this)
- {
- // done?
- if (current.getNodeType() == ELEMENT_NODE)
- {
- DomElement element = (DomElement) current;
- DTDElementTypeInfo info =
- doctype.getElementTypeInfo(current.getNodeName());
- if (info != null &&
- id.equals(element.getAttribute(info.idAttrName)))
- {
- return element;
- }
- else if (element.userIdAttrs != null)
- {
- for (Iterator i = element.userIdAttrs.iterator();
- i.hasNext(); )
- {
- Node idAttr = (Node) i.next();
- if (id.equals(idAttr.getNodeValue()))
- {
- return element;
- }
- }
- }
- }
-
- // descend?
- if (current.hasChildNodes())
- {
- current = current.getFirstChild();
- continue;
- }
-
- // lateral?
- temp = current.getNextSibling();
- if (temp != null)
- {
- current = temp;
- continue;
- }
-
- // back up ...
- do
- {
- temp = current.getParentNode();
- if (temp == null)
- {
- return null;
- }
- current = temp;
- temp = current.getNextSibling();
- }
- while (temp == null);
- current = temp;
- }
- return null;
- }
-
- private void checkNewChild(Node newChild)
- {
- if (newChild.getNodeType() == ELEMENT_NODE
- && getDocumentElement() != null)
- {
- throw new DomDOMException(DOMException.HIERARCHY_REQUEST_ERR,
- "document element already present: " +
- getDocumentElement(), newChild, 0);
- }
- if (newChild.getNodeType() == DOCUMENT_TYPE_NODE
- && getDoctype() != null)
- {
- throw new DomDOMException(DOMException.HIERARCHY_REQUEST_ERR,
- "document type already present: " +
- getDoctype(), newChild, 0);
- }
- }
-
- /**
- * <b>DOM L1</b>
- * Appends the specified node to this node's list of children,
- * enforcing the constraints that there be only one root element
- * and one document type child.
- */
- public Node appendChild(Node newChild)
- {
- if (checkingWellformedness)
- {
- checkNewChild(newChild);
- }
- return super.appendChild(newChild);
- }
-
- /**
- * <b>DOM L1</b>
- * Inserts the specified node in this node's list of children,
- * enforcing the constraints that there be only one root element
- * and one document type child.
- */
- public Node insertBefore(Node newChild, Node refChild)
- {
- if (checkingWellformedness)
- {
- checkNewChild(newChild);
- }
- return super.insertBefore(newChild, refChild);
- }
-
- /**
- * <b>DOM L1</b>
- * Replaces the specified node in this node's list of children,
- * enforcing the constraints that there be only one root element
- * and one document type child.
- */
- public Node replaceChild(Node newChild, Node refChild)
- {
- if (checkingWellformedness &&
- ((newChild.getNodeType() == ELEMENT_NODE &&
- refChild.getNodeType() != ELEMENT_NODE) ||
- (newChild.getNodeType() == DOCUMENT_TYPE_NODE &&
- refChild.getNodeType() != DOCUMENT_TYPE_NODE)))
- {
- checkNewChild(newChild);
- }
- return super.replaceChild(newChild, refChild);
- }
-
- // NOTE: DOM can't really tell when the name of an entity,
- // notation, or PI must follow the namespace rules (excluding
- // colons) instead of the XML rules (which allow them without
- // much restriction). That's an API issue. verifyXmlName
- // aims to enforce the XML rules, not the namespace rules.
-
- /**
- * Throws a DOM exception if the specified name is not a legal XML 1.0
- * Name.
- * @deprecated This method is deprecated and may be removed in future
- * versions of GNU JAXP
- */
- public static void verifyXmlName(String name)
- {
- // XXX why is this public?
- checkName(name, false);
- }
-
- static void checkName(String name, boolean xml11)
- {
- if (name == null)
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR, name, null, 0);
- }
- int len = name.length();
- if (len == 0)
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR, name, null, 0);
- }
-
- // dog: rewritten to use the rules for XML 1.0 and 1.1
-
- // Name start character
- char c = name.charAt(0);
- if (xml11)
- {
- // XML 1.1
- if ((c < 0x0041 || c > 0x005a) &&
- (c < 0x0061 || c > 0x007a) &&
- c != ':' && c != '_' &&
- (c < 0x00c0 || c > 0x00d6) &&
- (c < 0x00d8 || c > 0x00f6) &&
- (c < 0x00f8 || c > 0x02ff) &&
- (c < 0x0370 || c > 0x037d) &&
- (c < 0x037f || c > 0x1fff) &&
- (c < 0x200c || c > 0x200d) &&
- (c < 0x2070 || c > 0x218f) &&
- (c < 0x2c00 || c > 0x2fef) &&
- (c < 0x3001 || c > 0xd7ff) &&
- (c < 0xf900 || c > 0xfdcf) &&
- (c < 0xfdf0 || c > 0xfffd) &&
- (c < 0x10000 || c > 0xeffff))
- {
- throw new DomDOMException(DOMException.INVALID_CHARACTER_ERR,
- name, null, c);
- }
- }
- else
- {
- // XML 1.0
- int type = Character.getType(c);
- switch (type)
- {
- case Character.LOWERCASE_LETTER: // Ll
- case Character.UPPERCASE_LETTER: // Lu
- case Character.OTHER_LETTER: // Lo
- case Character.TITLECASE_LETTER: // Lt
- case Character.LETTER_NUMBER: // Nl
- if ((c > 0xf900 && c < 0xfffe) ||
- (c >= 0x20dd && c <= 0x20e0))
- {
- // Compatibility area and Unicode 2.0 exclusions
- throw new DomDOMException(DOMException.INVALID_CHARACTER_ERR,
- name, null, c);
- }
- break;
- default:
- if (c != ':' && c != '_' && (c < 0x02bb || c > 0x02c1) &&
- c != 0x0559 && c != 0x06e5 && c != 0x06e6)
- {
- throw new DomDOMException(DOMException.INVALID_CHARACTER_ERR,
- name, null, c);
- }
- }
- }
-
- // Subsequent characters
- for (int i = 1; i < len; i++)
- {
- c = name.charAt(i);
- if (xml11)
- {
- // XML 1.1
- if ((c < 0x0041 || c > 0x005a) &&
- (c < 0x0061 || c > 0x007a) &&
- (c < 0x0030 || c > 0x0039) &&
- c != ':' && c != '_' && c != '-' && c != '.' &&
- (c < 0x00c0 || c > 0x00d6) &&
- (c < 0x00d8 || c > 0x00f6) &&
- (c < 0x00f8 || c > 0x02ff) &&
- (c < 0x0370 || c > 0x037d) &&
- (c < 0x037f || c > 0x1fff) &&
- (c < 0x200c || c > 0x200d) &&
- (c < 0x2070 || c > 0x218f) &&
- (c < 0x2c00 || c > 0x2fef) &&
- (c < 0x3001 || c > 0xd7ff) &&
- (c < 0xf900 || c > 0xfdcf) &&
- (c < 0xfdf0 || c > 0xfffd) &&
- (c < 0x10000 || c > 0xeffff) &&
- c != 0x00b7 &&
- (c < 0x0300 || c > 0x036f) &&
- (c < 0x203f || c > 0x2040))
- {
- throw new DomDOMException(DOMException.INVALID_CHARACTER_ERR, name,
- null, c);
- }
- }
- else
- {
- // XML 1.0
- int type = Character.getType(c);
- switch (type)
- {
- case Character.LOWERCASE_LETTER: // Ll
- case Character.UPPERCASE_LETTER: // Lu
- case Character.DECIMAL_DIGIT_NUMBER: // Nd
- case Character.OTHER_LETTER: // Lo
- case Character.TITLECASE_LETTER: // Lt
- case Character.LETTER_NUMBER: // Nl
- case Character.COMBINING_SPACING_MARK: // Mc
- case Character.ENCLOSING_MARK: // Me
- case Character.NON_SPACING_MARK: // Mn
- case Character.MODIFIER_LETTER: // Lm
- if ((c > 0xf900 && c < 0xfffe) ||
- (c >= 0x20dd && c <= 0x20e0))
- {
- // Compatibility area and Unicode 2.0 exclusions
- throw new DomDOMException(DOMException.INVALID_CHARACTER_ERR,
- name, null, c);
- }
- break;
- default:
- if (c != '-' && c != '.' && c != ':' && c != '_' &&
- c != 0x0387 && (c < 0x02bb || c > 0x02c1) &&
- c != 0x0559 && c != 0x06e5 && c != 0x06e6 && c != 0x00b7)
- {
- throw new DomDOMException(DOMException.INVALID_CHARACTER_ERR,
- name, null, c);
- }
- }
- }
- }
-
- // FIXME characters with a font or compatibility decomposition (i.e.
- // those with a "compatibility formatting tag" in field 5 of the
- // database -- marked by field 5 beginning with a "<") are not allowed.
- }
-
- // package private
- static void checkNCName(String name, boolean xml11)
- {
- checkName(name, xml11);
- int len = name.length();
- int index = name.indexOf(':');
- if (index != -1)
- {
- if (index == 0 || index == (len - 1) ||
- name.lastIndexOf(':') != index)
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- name, null, 0);
- }
- }
- }
-
- // package private
- static void checkChar(String value, boolean xml11)
- {
- char[] chars = value.toCharArray();
- checkChar(chars, 0, chars.length, xml11);
- }
-
- static void checkChar(char[] buf, int off, int len, boolean xml11)
- {
- for (int i = 0; i < len; i++)
- {
- char c = buf[i];
-
- // assume surrogate pairing checks out OK, for simplicity
- if ((c >= 0x0020 && c <= 0xd7ff) ||
- (c == 0x000a || c == 0x000d || c == 0x0009) ||
- (c >= 0xe000 && c <= 0xfffd) ||
- (c >= 0x10000 && c <= 0x10ffff))
- {
- continue;
- }
- if (xml11)
- {
- if ((c >= 0x0001 && c <= 0x001f) ||
- (c >= 0x007f && c <= 0x0084) ||
- (c >= 0x0086 && c <= 0x009f))
- {
- continue;
- }
- }
- throw new DomDOMException(DOMException.INVALID_CHARACTER_ERR,
- new String(buf, off, len), null, c);
- }
- }
-
- /**
- * <b>DOM L1</b>
- * Returns a newly created element with the specified name.
- */
- public Element createElement(String name)
- {
- Element element;
-
- if (checkingCharacters)
- {
- checkName(name, "1.1".equals(version));
- }
- if (name.startsWith("xml:"))
- {
- element = createElementNS(null, name);
- }
- else
- {
- element = new DomElement(this, null, name);
- }
- defaultAttributes(element, name);
- return element;
- }
-
- /**
- * <b>DOM L2</b>
- * Returns a newly created element with the specified name
- * and namespace information.
- */
- public Element createElementNS(String namespaceURI, String name)
- {
- if (checkingCharacters)
- {
- checkNCName(name, "1.1".equals(version));
- }
-
- if ("".equals(namespaceURI))
- {
- namespaceURI = null;
- }
- if (name.startsWith("xml:"))
- {
- if (namespaceURI != null
- && !XMLConstants.XML_NS_URI.equals(namespaceURI))
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "xml namespace is always " +
- XMLConstants.XML_NS_URI, this, 0);
- }
- namespaceURI = XMLConstants.XML_NS_URI;
- }
- else if (XMLConstants.XMLNS_ATTRIBUTE.equals(name) ||
- name.startsWith("xmlns:"))
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "xmlns is reserved", this, 0);
- }
- else if (namespaceURI == null && name.indexOf(':') != -1)
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "prefixed name '" + name +
- "' needs a URI", this, 0);
- }
-
- Element element = new DomElement(this, namespaceURI, name);
- defaultAttributes(element, name);
- return element;
- }
-
- private void defaultAttributes(Element element, String name)
- {
- DomDoctype doctype = (DomDoctype) getDoctype();
- if (doctype == null)
- {
- return;
- }
-
- // default any attributes that need it
- DTDElementTypeInfo info = doctype.getElementTypeInfo(name);
- if (info != null)
- {
- for (Iterator i = info.attributes(); i != null && i.hasNext(); )
- {
- DTDAttributeTypeInfo attr = (DTDAttributeTypeInfo) i.next();
- DomAttr node = (DomAttr) createAttribute(attr.name);
-
- String value = attr.value;
- if (value == null)
- {
- value = "";
- }
- node.setValue(value);
- node.setSpecified(false);
- element.setAttributeNode(node);
- }
- }
- }
-
- /**
- * <b>DOM L1</b>
- * Returns a newly created document fragment.
- */
- public DocumentFragment createDocumentFragment()
- {
- return new DomDocumentFragment(this);
- }
-
- /**
- * <b>DOM L1</b>
- * Returns a newly created text node with the specified value.
- */
- public Text createTextNode(String value)
- {
- if (checkingCharacters)
- {
- checkChar(value, "1.1".equals(version));
- }
- return new DomText(this, value);
- }
-
- /**
- * Returns a newly created text node with the specified value.
- */
- public Text createTextNode(char[] buf, int off, int len)
- {
- if (checkingCharacters)
- {
- checkChar(buf, off, len, "1.1".equals(version));
- }
- return new DomText(this, buf, off, len);
- }
-
- /**
- * <b>DOM L1</b>
- * Returns a newly created comment node with the specified value.
- */
- public Comment createComment(String value)
- {
- if (checkingCharacters)
- {
- checkChar(value, "1.1".equals(version));
- }
- return new DomComment(this, value);
- }
-
- /**
- * <b>DOM L1</b>
- * Returns a newly created CDATA section node with the specified value.
- */
- public CDATASection createCDATASection(String value)
- {
- if (checkingCharacters)
- {
- checkChar(value, "1.1".equals(version));
- }
- return new DomCDATASection(this, value);
- }
-
- /**
- * Returns a newly created CDATA section node with the specified value.
- */
- public CDATASection createCDATASection(char[] buf, int off, int len)
- {
- if (checkingCharacters)
- {
- checkChar(buf, off, len, "1.1".equals(version));
- }
- return new DomCDATASection(this, buf, off, len);
- }
-
- /**
- * <b>DOM L1</b>
- * Returns a newly created processing instruction.
- */
- public ProcessingInstruction createProcessingInstruction(String target,
- String data)
- {
- if (checkingCharacters)
- {
- boolean xml11 = "1.1".equals(version);
- checkName(target, xml11);
- if ("xml".equalsIgnoreCase(target))
- {
- throw new DomDOMException(DOMException.SYNTAX_ERR,
- "illegal PI target name",
- this, 0);
- }
- checkChar(data, xml11);
- }
- return new DomProcessingInstruction(this, target, data);
- }
-
- /**
- * <b>DOM L1</b>
- * Returns a newly created attribute with the specified name.
- */
- public Attr createAttribute(String name)
- {
- if (checkingCharacters)
- {
- checkName(name, "1.1".equals(version));
- }
- if (name.startsWith("xml:"))
- {
- return createAttributeNS(XMLConstants.XML_NS_URI, name);
- }
- else if (XMLConstants.XMLNS_ATTRIBUTE.equals(name) ||
- name.startsWith("xmlns:"))
- {
- return createAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, name);
- }
- else
- {
- return new DomAttr(this, null, name);
- }
- }
-
- /**
- * <b>DOM L2</b>
- * Returns a newly created attribute with the specified name
- * and namespace information.
- */
- public Attr createAttributeNS(String namespaceURI, String name)
- {
- if (checkingCharacters)
- {
- checkNCName(name, "1.1".equals(version));
- }
-
- if ("".equals(namespaceURI))
- {
- namespaceURI = null;
- }
- if (name.startsWith ("xml:"))
- {
- if (namespaceURI == null)
- {
- namespaceURI = XMLConstants.XML_NS_URI;
- }
- else if (!XMLConstants.XML_NS_URI.equals(namespaceURI))
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "xml namespace is always " +
- XMLConstants.XML_NS_URI,
- this, 0);
- }
- }
- else if (XMLConstants.XMLNS_ATTRIBUTE.equals(name) ||
- name.startsWith("xmlns:"))
- {
- if (namespaceURI == null)
- {
- namespaceURI = XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
- }
- else if (!XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceURI))
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "xmlns namespace must be " +
- XMLConstants.XMLNS_ATTRIBUTE_NS_URI,
- this, 0);
- }
- }
- else if (namespaceURI == null && name.indexOf(':') != -1)
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "prefixed name needs a URI: " + name, this, 0);
- }
- return new DomAttr(this, namespaceURI, name);
- }
-
- /**
- * <b>DOM L1</b>
- * Returns a newly created reference to the specified entity.
- * The caller should populate this with the appropriate children
- * and then mark it as readonly.
- *
- * @see DomNode#makeReadonly
- */
- public EntityReference createEntityReference(String name)
- {
- DomEntityReference ret = new DomEntityReference(this, name);
- DocumentType doctype = getDoctype();
- if (doctype != null)
- {
- DomEntity ent = (DomEntity) doctype.getEntities().getNamedItem(name);
- if (ent != null)
- {
- for (DomNode ctx = ent.first; ctx != null; ctx = ctx.next)
- {
- ret.appendChild(ctx.cloneNode(true));
- }
- }
- }
- ret.makeReadonly();
- return ret;
- }
-
- /**
- * <b>DOM L2</b>
- * Makes a copy of the specified node, with all nodes "owned" by
- * this document and with children optionally copied. This type
- * of standard utility has become, well, a standard utility.
- *
- * <p> Note that EntityReference nodes created through this method (either
- * directly, or recursively) never have children, and that there is no
- * portable way to associate them with such children.
- *
- * <p> Note also that there is no requirement that the specified node
- * be associated with a different document. This differs from the
- * <em>cloneNode</em> operation in that the node itself is not given
- * an opportunity to participate, so that any information managed
- * by node subclasses will be lost.
- */
- public Node importNode(Node src, boolean deep)
- {
- Node dst = null;
- switch (src.getNodeType())
- {
- case TEXT_NODE:
- dst = createTextNode(src.getNodeValue());
- break;
- case CDATA_SECTION_NODE:
- dst = createCDATASection(src.getNodeValue());
- break;
- case COMMENT_NODE:
- dst = createComment(src.getNodeValue());
- break;
- case PROCESSING_INSTRUCTION_NODE:
- dst = createProcessingInstruction(src.getNodeName(),
- src.getNodeValue());
- break;
- case NOTATION_NODE:
- // NOTE: There's no standard way to create
- // these, or add them to a doctype. Useless.
- Notation notation = (Notation) src;
- dst = new DomNotation(this, notation.getNodeName(),
- notation.getPublicId(),
- notation.getSystemId());
- break;
- case ENTITY_NODE:
- // NOTE: There's no standard way to create
- // these, or add them to a doctype. Useless.
- Entity entity = (Entity) src;
- dst = new DomEntity(this, entity.getNodeName(),
- entity.getPublicId(),
- entity.getSystemId(),
- entity.getNotationName());
- if (deep)
- {
- for (Node ctx = src.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- dst.appendChild(importNode(ctx, deep));
- }
- }
- break;
- case ENTITY_REFERENCE_NODE:
- dst = createEntityReference(src.getNodeName());
- break;
- case DOCUMENT_FRAGMENT_NODE:
- dst = new DomDocumentFragment(this);
- if (deep)
- {
- for (Node ctx = src.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- dst.appendChild(importNode(ctx, deep));
- }
- }
- break;
- case ATTRIBUTE_NODE:
- String attr_nsuri = src.getNamespaceURI();
- if (attr_nsuri != null)
- {
- dst = createAttributeNS(attr_nsuri, src.getNodeName());
- }
- else
- {
- dst = createAttribute(src.getNodeName());
- }
- // this is _always_ done regardless of "deep" setting
- for (Node ctx = src.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- dst.appendChild(importNode(ctx, false));
- }
- break;
- case ELEMENT_NODE:
- String elem_nsuri = src.getNamespaceURI();
- if (elem_nsuri != null)
- {
- dst = createElementNS(elem_nsuri, src.getNodeName());
- }
- else
- {
- dst = createElement(src.getNodeName());
- }
- NamedNodeMap srcAttrs = src.getAttributes();
- NamedNodeMap dstAttrs = dst.getAttributes();
- int len = srcAttrs.getLength();
- for (int i = 0; i < len; i++)
- {
- Attr a = (Attr) srcAttrs.item(i);
- Attr dflt;
-
- // maybe update defaulted attributes
- dflt = (Attr) dstAttrs.getNamedItem(a.getNodeName());
- if (dflt != null)
- {
- String newval = a.getNodeValue();
- if (!dflt.getNodeValue().equals(newval)
- || a.getSpecified () == true)
- {
- dflt.setNodeValue (newval);
- }
- continue;
- }
-
- dstAttrs.setNamedItem((Attr) importNode(a, false));
- }
- if (deep)
- {
- for (Node ctx = src.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- dst.appendChild(importNode(ctx, true));
- }
- }
- break;
- // can't import document or doctype nodes
- case DOCUMENT_NODE:
- case DOCUMENT_TYPE_NODE:
- // FALLTHROUGH
- // can't import unrecognized or nonstandard nodes
- default:
- throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR, null, src, 0);
- }
-
- // FIXME cleanup a bit -- for deep copies, copy those
- // children in one place, here (code sharing is healthy)
-
- if (src instanceof DomNode)
- {
- ((DomNode) src).notifyUserDataHandlers(UserDataHandler.NODE_IMPORTED,
- src, dst);
- }
- return dst;
- }
-
- /**
- * <b>DOM L2 (Traversal)</b>
- * Returns a newly created node iterator. Don't forget to detach
- * this iterator when you're done using it!
- *
- * @see DomIterator
- */
- public NodeIterator createNodeIterator(Node root,
- int whatToShow,
- NodeFilter filter,
- boolean expandEntities)
- {
- return new DomNodeIterator(root, whatToShow, filter, expandEntities,
- false);
- }
-
- public TreeWalker createTreeWalker(Node root,
- int whatToShow,
- NodeFilter filter,
- boolean expandEntities)
- {
- return new DomNodeIterator(root, whatToShow, filter, expandEntities,
- true);
- }
-
- // DOM Level 3 methods
-
- /**
- * DOM L3
- */
- public String getInputEncoding()
- {
- return inputEncoding;
- }
-
- public void setInputEncoding(String inputEncoding)
- {
- this.inputEncoding = inputEncoding;
- }
-
- /**
- * DOM L3
- */
- public String getXmlEncoding()
- {
- return encoding;
- }
-
- public void setXmlEncoding(String encoding)
- {
- this.encoding = encoding;
- }
-
- public boolean getXmlStandalone()
- {
- return standalone;
- }
-
- public void setXmlStandalone(boolean xmlStandalone)
- {
- standalone = xmlStandalone;
- }
-
- public String getXmlVersion()
- {
- return version;
- }
-
- public void setXmlVersion(String xmlVersion)
- {
- if (xmlVersion == null)
- {
- xmlVersion = "1.0";
- }
- if ("1.0".equals(xmlVersion) ||
- "1.1".equals(xmlVersion))
- {
- version = xmlVersion;
- }
- else
- {
- throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
- }
- }
-
- public boolean getStrictErrorChecking()
- {
- return checkingCharacters;
- }
-
- public void setStrictErrorChecking(boolean strictErrorChecking)
- {
- checkingCharacters = strictErrorChecking;
- }
-
- public String lookupPrefix(String namespaceURI)
- {
- Node root = getDocumentElement();
- return (root == null) ? null : root.lookupPrefix(namespaceURI);
- }
-
- public boolean isDefaultNamespace(String namespaceURI)
- {
- Node root = getDocumentElement();
- return (root == null) ? false : root.isDefaultNamespace(namespaceURI);
- }
-
- public String lookupNamespaceURI(String prefix)
- {
- Node root = getDocumentElement();
- return (root == null) ? null : root.lookupNamespaceURI(prefix);
- }
-
- public String getBaseURI()
- {
- return getDocumentURI();
- /*
- Node root = getDocumentElement();
- if (root != null)
- {
- NamedNodeMap attrs = root.getAttributes();
- Node xmlBase = attrs.getNamedItemNS(XMLConstants.XML_NS_URI, "base");
- if (xmlBase != null)
- {
- return xmlBase.getNodeValue();
- }
- }
- return systemId;
- */
- }
-
- public String getDocumentURI()
- {
- return systemId;
- }
-
- public void setDocumentURI(String documentURI)
- {
- systemId = documentURI;
- }
-
- public Node adoptNode(Node source)
- {
- switch (source.getNodeType())
- {
- case DOCUMENT_NODE:
- case DOCUMENT_TYPE_NODE:
- throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
- case ENTITY_NODE:
- case NOTATION_NODE:
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
- }
- if (source instanceof DomNode)
- {
- DomNode src = (DomNode) source;
- DomNode dst = src;
- if (dst.parent != null)
- {
- dst = (DomNode) dst.cloneNode(true);
- }
- dst.setOwner(this);
- src.notifyUserDataHandlers(UserDataHandler.NODE_ADOPTED, src, dst);
- return dst;
- }
- return null;
- }
-
- public DOMConfiguration getDomConfig()
- {
- if (config == null)
- {
- config = new DomDocumentConfiguration();
- }
- return config;
- }
-
- public void normalizeDocument()
- {
- boolean save = building;
- building = true;
- normalizeNode(this);
- building = save;
- }
-
- void normalizeNode(DomNode node)
- {
- node.normalize();
- if (config != null)
- {
- switch (node.nodeType)
- {
- case CDATA_SECTION_NODE:
- if (!config.cdataSections)
- {
- // replace CDATA section with text node
- Text text = createTextNode(node.getNodeValue());
- node.parent.insertBefore(text, node);
- node.parent.removeChild(node);
- // merge adjacent text nodes
- String data = text.getWholeText();
- node = (DomNode) text.replaceWholeText(data);
- }
- else if (config.splitCdataSections)
- {
- String value = node.getNodeValue();
- int i = value.indexOf("]]>");
- while (i != -1)
- {
- Node node2 = createCDATASection(value.substring(0, i));
- node.parent.insertBefore(node2, node);
- value = value.substring(i + 3);
- node.setNodeValue(value);
- i = value.indexOf("]]>");
- }
- }
- break;
- case COMMENT_NODE:
- if (!config.comments)
- {
- node.parent.removeChild(node);
- }
- break;
- case TEXT_NODE:
- if (!config.elementContentWhitespace &&
- ((Text) node).isElementContentWhitespace())
- {
- node.parent.removeChild(node);
- }
- break;
- case ENTITY_REFERENCE_NODE:
- if (!config.entities)
- {
- for (DomNode ctx = node.first; ctx != null; )
- {
- DomNode ctxNext = ctx.next;
- node.parent.insertBefore(ctx, node);
- ctx = ctxNext;
- }
- node.parent.removeChild(node);
- }
- break;
- case ELEMENT_NODE:
- if (!config.namespaceDeclarations)
- {
- DomNamedNodeMap attrs =
- (DomNamedNodeMap) node.getAttributes();
- boolean aro = attrs.readonly;
- attrs.readonly = false; // Ensure we can delete if necessary
- int len = attrs.getLength();
- for (int i = 0; i < len; i++)
- {
- Node attr = attrs.item(i);
- String namespace = attr.getNamespaceURI();
- if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespace))
- {
- attrs.removeNamedItemNS(namespace,
- attr.getLocalName());
- i--;
- len--;
- }
- }
- attrs.readonly = aro;
- }
- break;
- }
- }
- for (DomNode ctx = node.first; ctx != null; )
- {
- DomNode ctxNext = ctx.next;
- normalizeNode(ctx);
- ctx = ctxNext;
- }
- }
-
- public Node renameNode(Node n, String namespaceURI, String qualifiedName)
- throws DOMException
- {
- if (n instanceof DomNsNode)
- {
- DomNsNode src = (DomNsNode) n;
- if (src == null)
- {
- throw new DomDOMException(DOMException.NOT_FOUND_ERR);
- }
- if (src.owner != this)
- {
- throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR,
- null, src, 0);
- }
- boolean xml11 = "1.1".equals(version);
- checkName(qualifiedName, xml11);
- int ci = qualifiedName.indexOf(':');
- if ("".equals(namespaceURI))
- {
- namespaceURI = null;
- }
- if (namespaceURI != null)
- {
- checkNCName(qualifiedName, xml11);
- String prefix = (ci == -1) ? "" :
- qualifiedName.substring(0, ci);
- if (XMLConstants.XML_NS_PREFIX.equals(prefix) &&
- !XMLConstants.XML_NS_URI.equals(namespaceURI))
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "xml namespace must be " +
- XMLConstants.XML_NS_URI, src, 0);
- }
- else if (src.nodeType == ATTRIBUTE_NODE &&
- (XMLConstants.XMLNS_ATTRIBUTE.equals(prefix) ||
- XMLConstants.XMLNS_ATTRIBUTE.equals(qualifiedName)) &&
- !XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceURI))
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "xmlns namespace must be " +
- XMLConstants.XMLNS_ATTRIBUTE_NS_URI, src, 0);
- }
- if (XMLConstants.XML_NS_URI.equals(namespaceURI) &&
- !XMLConstants.XML_NS_PREFIX.equals(prefix))
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "xml namespace must be " +
- XMLConstants.XML_NS_URI, src, 0);
- }
- else if (src.nodeType == ATTRIBUTE_NODE &&
- XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceURI) &&
- !(XMLConstants.XMLNS_ATTRIBUTE.equals(prefix) ||
- XMLConstants.XMLNS_ATTRIBUTE.equals(qualifiedName)))
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "xmlns namespace must be " +
- XMLConstants.XMLNS_ATTRIBUTE_NS_URI, src, 0);
- }
-
- }
- src.setNodeName(qualifiedName);
- src.setNamespaceURI(namespaceURI);
- src.notifyUserDataHandlers(UserDataHandler.NODE_RENAMED, src, src);
- // TODO MutationNameEvents
- // DOMElementNameChanged or DOMAttributeNameChanged
- return src;
- }
- throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR, null, n, 0);
- }
-
- // -- XPathEvaluator --
-
- public XPathExpression createExpression(String expression,
- XPathNSResolver resolver)
- throws XPathException, DOMException
- {
- return new DomXPathExpression(this, expression, resolver);
- }
-
- public XPathNSResolver createNSResolver(Node nodeResolver)
- {
- return new DomXPathNSResolver(nodeResolver);
- }
-
- public Object evaluate(String expression,
- Node contextNode,
- XPathNSResolver resolver,
- short type,
- Object result)
- throws XPathException, DOMException
- {
- XPathExpression xpe =
- new DomXPathExpression(this, expression, resolver);
- return xpe.evaluate(contextNode, type, result);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomDocumentBuilder.java b/libjava/gnu/xml/dom/DomDocumentBuilder.java
deleted file mode 100644
index 66dd2b0edfa..00000000000
--- a/libjava/gnu/xml/dom/DomDocumentBuilder.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/* DomDocumentBuilder.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import java.io.InputStream;
-import java.io.IOException;
-import javax.xml.parsers.DocumentBuilder;
-import org.w3c.dom.Document;
-import org.w3c.dom.DOMConfiguration;
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.ls.DOMImplementationLS;
-import org.w3c.dom.ls.LSInput;
-import org.w3c.dom.ls.LSParser;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-/**
- * Document builder using the GNU DOM Load &amp; Save implementation.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class DomDocumentBuilder
- extends DocumentBuilder
-{
-
- final DOMImplementation impl;
- final DOMImplementationLS ls;
- final LSParser parser;
-
- DomDocumentBuilder(DOMImplementation impl,
- DOMImplementationLS ls,
- LSParser parser)
- {
- this.impl = impl;
- this.ls = ls;
- this.parser = parser;
- }
-
- public boolean isNamespaceAware()
- {
- DOMConfiguration config = parser.getDomConfig();
- return ((Boolean) config.getParameter("namespaces")).booleanValue();
- }
-
- public boolean isValidating()
- {
- DOMConfiguration config = parser.getDomConfig();
- return ((Boolean) config.getParameter("validating")).booleanValue();
- }
-
- public boolean isXIncludeAware()
- {
- DOMConfiguration config = parser.getDomConfig();
- return ((Boolean) config.getParameter("xinclude-aware")).booleanValue();
- }
-
- public void setEntityResolver(EntityResolver resolver)
- {
- DOMConfiguration config = parser.getDomConfig();
- config.setParameter("entity-resolver", resolver);
- }
-
- public void setErrorHandler(ErrorHandler handler)
- {
- DOMConfiguration config = parser.getDomConfig();
- config.setParameter("error-handler", handler);
- }
-
- public DOMImplementation getDOMImplementation()
- {
- return impl;
- }
-
- public Document newDocument()
- {
- return impl.createDocument(null, null, null);
- }
-
- public Document parse(InputStream in)
- throws SAXException, IOException
- {
- LSInput input = ls.createLSInput();
- input.setByteStream(in);
- return parser.parse(input);
- }
-
- public Document parse(InputStream in, String systemId)
- throws SAXException, IOException
- {
- LSInput input = ls.createLSInput();
- input.setByteStream(in);
- input.setSystemId(systemId);
- return parser.parse(input);
- }
-
- public Document parse(String systemId)
- throws SAXException, IOException
- {
- return parser.parseURI(systemId);
- }
-
- public Document parse(InputSource is)
- throws SAXException, IOException
- {
- LSInput input = ls.createLSInput();
- InputStream in = is.getByteStream();
- if (in != null)
- {
- input.setByteStream(in);
- }
- else
- {
- input.setCharacterStream(is.getCharacterStream());
- }
- input.setPublicId(is.getPublicId());
- input.setSystemId(is.getSystemId());
- input.setEncoding(is.getEncoding());
- return parser.parse(input);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomDocumentBuilderFactory.java b/libjava/gnu/xml/dom/DomDocumentBuilderFactory.java
deleted file mode 100644
index 814141c9441..00000000000
--- a/libjava/gnu/xml/dom/DomDocumentBuilderFactory.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/* DomDocumentBuilderFactory.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.FactoryConfigurationError;
-import javax.xml.parsers.ParserConfigurationException;
-import org.w3c.dom.DOMConfiguration;
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.bootstrap.DOMImplementationRegistry;
-import org.w3c.dom.ls.DOMImplementationLS;
-import org.w3c.dom.ls.LSParser;
-
-/**
- * Document builder factory that uses a DOM Level 3 Load &amp; Save
- * implementation.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomDocumentBuilderFactory
- extends DocumentBuilderFactory
-{
-
- final DOMImplementation impl;
- final DOMImplementationLS ls;
-
- public DomDocumentBuilderFactory()
- {
- try
- {
- DOMImplementationRegistry reg =
- DOMImplementationRegistry.newInstance();
- impl = reg.getDOMImplementation("LS 3.0");
- if (impl == null)
- {
- throw new FactoryConfigurationError("no LS implementations found");
- }
- ls = (DOMImplementationLS) impl;
- }
- catch (Exception e)
- {
- throw new FactoryConfigurationError(e);
- }
- }
-
- public DocumentBuilder newDocumentBuilder()
- throws ParserConfigurationException
- {
- LSParser parser = ls.createLSParser(DOMImplementationLS.MODE_ASYNCHRONOUS,
- "http://www.w3.org/TR/REC-xml");
- DOMConfiguration config = parser.getDomConfig();
- setParameter(config, "namespaces",
- isNamespaceAware() ? Boolean.TRUE : Boolean.FALSE);
- setParameter(config, "element-content-whitespace",
- isIgnoringElementContentWhitespace() ? Boolean.FALSE :
- Boolean.TRUE);
- setParameter(config, "comments",
- isIgnoringComments() ? Boolean.FALSE : Boolean.TRUE);
- setParameter(config, "expand-entity-references",
- isExpandEntityReferences() ? Boolean.TRUE : Boolean.FALSE);
- setParameter(config, "coalescing",
- isCoalescing() ? Boolean.TRUE : Boolean.FALSE);
- setParameter(config, "validating",
- isValidating() ? Boolean.TRUE : Boolean.FALSE);
- setParameter(config, "xinclude-aware",
- isXIncludeAware() ? Boolean.TRUE : Boolean.FALSE);
- return new DomDocumentBuilder(impl, ls, parser);
- }
-
- void setParameter(DOMConfiguration config, String name, Object value)
- throws ParserConfigurationException
- {
- if (!config.canSetParameter(name, value))
- {
- throw new ParserConfigurationException(name);
- }
- config.setParameter(name, value);
- }
-
- public Object getAttribute(String name)
- {
- // TODO
- return null;
- }
-
- public void setAttribute(String name, Object value)
- {
- // TODO
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomDocumentConfiguration.java b/libjava/gnu/xml/dom/DomDocumentConfiguration.java
deleted file mode 100644
index 5c589f82fe2..00000000000
--- a/libjava/gnu/xml/dom/DomDocumentConfiguration.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/* DomDocumentConfiguration.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import java.util.Arrays;
-import java.util.List;
-import org.w3c.dom.DOMConfiguration;
-import org.w3c.dom.DOMErrorHandler;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.DOMStringList;
-
-/**
- * Document configuration, used to store normalization and other parameters.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class DomDocumentConfiguration
- implements DOMConfiguration, DOMStringList
-{
-
- private static final List SUPPORTED_PARAMETERS =
- Arrays.asList(new String[] { "cdata-sections",
- "comments",
- "element-content-whitespace",
- "entities",
- "error-handler",
- "namespace-declarations",
- "split-cdata-sections",
- "infoset"});
-
- boolean cdataSections = true;
- boolean comments = true;
- boolean elementContentWhitespace = true;
- boolean entities = true;
- DOMErrorHandler errorHandler;
- boolean namespaceDeclarations = true;
- boolean splitCdataSections = true;
-
- public void setParameter(String name, Object value)
- throws DOMException
- {
- name = name.toLowerCase();
- if ("cdata-sections".equals(name))
- {
- cdataSections = "true".equals(value.toString());
- }
- else if ("comments".equals(name))
- {
- comments = "true".equals(value.toString());
- }
- else if ("element-content-whitespace".equals(name))
- {
- elementContentWhitespace = "true".equals(value.toString());
- }
- else if ("entities".equals(name))
- {
- entities = "true".equals(value.toString());
- }
- else if ("error-handler".equals(name))
- {
- try
- {
- errorHandler = (DOMErrorHandler) value;
- }
- catch (ClassCastException e)
- {
- throw new DomDOMException(DOMException.TYPE_MISMATCH_ERR,
- value.getClass().getName(), null, 0);
- }
- }
- else if ("namespace-declarations".equals(name))
- {
- namespaceDeclarations = "true".equals(value.toString());
- }
- else if ("split-cdata-sections".equals(name))
- {
- comments = "true".equals(value.toString());
- }
- else if ("infoset".equals(name))
- {
- if ("true".equals(value.toString()))
- {
- entities = false;
- cdataSections = false;
- namespaceDeclarations = true;
- elementContentWhitespace = true;
- comments = true;
- }
- }
- else if (("canonical-form".equals(name) ||
- "check-character-normalization".equals(name) ||
- "datatype-normalization".equals(name) ||
- "normalize-characters".equals(name) ||
- "validate".equals(name) ||
- "validate-if-schema".equals(name)) &&
- "false".equals(value.toString()))
- {
- // NOOP
- }
- else if (("namespaces".equals(name) ||
- "well-formed".equals(name)) &&
- "true".equals(value.toString()))
- {
- // NOOP
- }
- else
- {
- throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR,
- name, null, 0);
- }
- }
-
- public Object getParameter(String name)
- throws DOMException
- {
- name = name.toLowerCase();
- if ("cdata-sections".equals(name))
- {
- return cdataSections ? Boolean.TRUE : Boolean.FALSE;
- }
- else if ("comments".equals(name))
- {
- return comments ? Boolean.TRUE : Boolean.FALSE;
- }
- else if ("element-content-whitespace".equals(name))
- {
- return elementContentWhitespace ? Boolean.TRUE : Boolean.FALSE;
- }
- else if ("entities".equals(name))
- {
- return entities ? Boolean.TRUE : Boolean.FALSE;
- }
- else if ("error-handler".equals(name))
- {
- return errorHandler;
- }
- else if ("namespace-declarations".equals(name))
- {
- return namespaceDeclarations ? Boolean.TRUE : Boolean.FALSE;
- }
- else if ("split-cdata-sections".equals(name))
- {
- return comments ? Boolean.TRUE : Boolean.FALSE;
- }
- else if ("canonical-form".equals(name) ||
- "check-character-normalization".equals(name) ||
- "datatype-normalization".equals(name) ||
- "normalize-characters".equals(name) ||
- "validate".equals(name) ||
- "validate-if-schema".equals(name))
- {
- return Boolean.FALSE;
- }
- else if ("namespaces".equals(name) ||
- "well-formed".equals(name))
- {
- return Boolean.TRUE;
- }
- else if ("infoset".equals(name))
- {
- return (entities == false &&
- cdataSections == false &&
- namespaceDeclarations == true &&
- comments == true) ? Boolean.TRUE : Boolean.FALSE;
- }
- throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR, name, null, 0);
- }
-
- public boolean canSetParameter(String name, Object value)
- {
- name = name.toLowerCase();
- if ("error-handler".equals(name))
- {
- return (value == null || value instanceof DOMErrorHandler);
- }
- else if (contains(name))
- {
- return true;
- }
- else if ("canonical-form".equals(name) ||
- "check-character-normalization".equals(name) ||
- "datatype-normalization".equals(name) ||
- "normalize-characters".equals(name) ||
- "validate".equals(name) ||
- "validate-if-schema".equals(name))
- {
- return "false".equals(value.toString());
- }
- else if ("namespaces".equals(name) ||
- "well-formed".equals(name))
- {
- return "true".equals(value.toString());
- }
- return false;
- }
-
- public DOMStringList getParameterNames()
- {
- return this;
- }
-
- public String item(int i)
- {
- try
- {
- return (String) SUPPORTED_PARAMETERS.get(i);
- }
- catch (IndexOutOfBoundsException e)
- {
- return null;
- }
- }
-
- public int getLength()
- {
- return SUPPORTED_PARAMETERS.size();
- }
-
- public boolean contains(String str)
- {
- str = str.toLowerCase();
- return SUPPORTED_PARAMETERS.contains(str);
- }
-
-}
diff --git a/libjava/gnu/xml/dom/DomDocumentFragment.java b/libjava/gnu/xml/dom/DomDocumentFragment.java
deleted file mode 100644
index 8d260377821..00000000000
--- a/libjava/gnu/xml/dom/DomDocumentFragment.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/* DomDocumentFragment.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.DocumentFragment;
-
-/**
- * <p> "DocumentFragment" implementation. </p>
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomDocumentFragment
- extends DomNode
- implements DocumentFragment
-{
-
- /**
- * Constructs a DocumentFragment node associated with the
- * specified document.
- *
- * <p>This constructor should only be invoked by a Document as part of
- * its createDocumentFragment functionality, or through a subclass which
- * is similarly used in a "Sub-DOM" style layer.
- */
- protected DomDocumentFragment(DomDocument owner)
- {
- super(DOCUMENT_FRAGMENT_NODE, owner);
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the string "#document-fragment".
- */
- final public String getNodeName()
- {
- return "#document-fragment";
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomElement.java b/libjava/gnu/xml/dom/DomElement.java
deleted file mode 100644
index 34509f647bc..00000000000
--- a/libjava/gnu/xml/dom/DomElement.java
+++ /dev/null
@@ -1,523 +0,0 @@
-/* DomElement.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.xml.XMLConstants;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.TypeInfo;
-
-/**
- * <p> "Element" implementation.
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomElement
- extends DomNsNode
- implements Element
-{
-
- /**
- * User-defined ID attributes.
- * Used by DomAttr.isId and DomDocument.getElementById
- */
- Set userIdAttrs;
-
- // Attributes are VERY expensive in DOM, and not just for
- // this implementation. Avoid creating them.
- private DomNamedNodeMap attributes;
-
- // xml:space cache
- String xmlSpace = "";
-
- /**
- * Constructs an Element node associated with the specified document.
- *
- * <p>This constructor should only be invoked by a Document as part
- * of its createElement functionality, or through a subclass which is
- * similarly used in a "Sub-DOM" style layer.
- *
- * @param owner The document with which this node is associated
- * @param namespaceURI Combined with the local part of the name,
- * this is used to uniquely identify a type of element
- * @param name Name of this element, which may include a prefix
- */
- protected DomElement(DomDocument owner, String namespaceURI, String name)
- {
- super(ELEMENT_NODE, owner, namespaceURI, name);
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the element's attributes
- */
- public NamedNodeMap getAttributes()
- {
- if (attributes == null)
- {
- attributes = new DomNamedNodeMap(this, Node.ATTRIBUTE_NODE);
- }
- return attributes;
- }
-
- /**
- * <b>DOM L2></b>
- * Returns true iff this is an element node with attributes.
- */
- public boolean hasAttributes()
- {
- return attributes != null && attributes.length != 0;
- }
-
- /**
- * Shallow clone of the element, except that associated
- * attributes are (deep) cloned.
- */
- public Object clone()
- {
- DomElement node = (DomElement) super.clone();
-
- if (attributes != null)
- {
- node.attributes = new DomNamedNodeMap(node, Node.ATTRIBUTE_NODE);
- for (DomNode ctx = attributes.first; ctx != null; ctx = ctx.next)
- {
- node.attributes.setNamedItemNS(ctx.cloneNode(true));
- }
- }
- return node;
- }
-
- void setOwner(DomDocument doc)
- {
- if (attributes != null)
- {
- for (DomNode ctx = attributes.first; ctx != null; ctx = ctx.next)
- {
- ctx.setOwner(doc);
- }
- }
- super.setOwner(doc);
- }
-
- /**
- * Marks this element, its children, and its associated attributes as
- * readonly.
- */
- public void makeReadonly()
- {
- super.makeReadonly();
- if (attributes != null)
- {
- attributes.makeReadonly();
- }
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the element name (same as getNodeName).
- */
- final public String getTagName()
- {
- return getNodeName();
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the value of the specified attribute, or an
- * empty string.
- */
- public String getAttribute(String name)
- {
- if ("xml:space" == name) // NB only works on interned string
- {
- // Use cached value
- return xmlSpace;
- }
- Attr attr = getAttributeNode(name);
- return (attr == null) ? "" : attr.getValue();
- }
-
- /**
- * <b>DOM L2</b>
- * Returns true if the element has an attribute with the
- * specified name (specified or DTD defaulted).
- */
- public boolean hasAttribute(String name)
- {
- return getAttributeNode(name) != null;
- }
-
- /**
- * <b>DOM L2</b>
- * Returns true if the element has an attribute with the
- * specified name (specified or DTD defaulted).
- */
- public boolean hasAttributeNS(String namespaceURI, String local)
- {
- return getAttributeNodeNS(namespaceURI, local) != null;
- }
-
- /**
- * <b>DOM L2</b>
- * Returns the value of the specified attribute, or an
- * empty string.
- */
- public String getAttributeNS(String namespaceURI, String local)
- {
- Attr attr = getAttributeNodeNS(namespaceURI, local);
- return (attr == null) ? "" : attr.getValue();
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the appropriate attribute node; the name is the
- * nodeName property of the attribute.
- */
- public Attr getAttributeNode(String name)
- {
- return (attributes == null) ? null :
- (Attr) attributes.getNamedItem(name);
- }
-
- /**
- * <b>DOM L2</b>
- * Returns the appropriate attribute node; the name combines
- * the namespace name and the local part.
- */
- public Attr getAttributeNodeNS(String namespace, String localPart)
- {
- return (attributes == null) ? null :
- (Attr) attributes.getNamedItemNS(namespace, localPart);
- }
-
- /**
- * <b>DOM L1</b>
- * Modifies an existing attribute to have the specified value,
- * or creates a new one with that value. The name used is the
- * nodeName value.
- */
- public void setAttribute(String name, String value)
- {
- Attr attr = getAttributeNode(name);
- if (attr != null)
- {
- attr.setNodeValue(value);
- ((DomAttr) attr).setSpecified(true);
- return;
- }
- attr = owner.createAttribute(name);
- attr.setNodeValue(value);
- setAttributeNode(attr);
- }
-
- /**
- * <b>DOM L2</b>
- * Modifies an existing attribute to have the specified value,
- * or creates a new one with that value.
- */
- public void setAttributeNS(String uri, String aname, String value)
- {
- if (("xmlns".equals (aname) || aname.startsWith ("xmlns:"))
- && !XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals (uri))
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "setting xmlns attribute to illegal value", this, 0);
- }
-
- Attr attr = getAttributeNodeNS(uri, aname);
- if (attr != null)
- {
- attr.setNodeValue(value);
- return;
- }
- attr = owner.createAttributeNS(uri, aname);
- attr.setNodeValue(value);
- setAttributeNodeNS(attr);
- }
-
- /**
- * <b>DOM L1</b>
- * Stores the specified attribute, optionally overwriting any
- * existing one with that name.
- */
- public Attr setAttributeNode(Attr attr)
- {
- return (Attr) getAttributes().setNamedItem(attr);
- }
-
- /**
- * <b>DOM L2</b>
- * Stores the specified attribute, optionally overwriting any
- * existing one with that name.
- */
- public Attr setAttributeNodeNS(Attr attr)
- {
- return (Attr) getAttributes().setNamedItemNS(attr);
- }
-
- /**
- * <b>DOM L1</b>
- * Removes the appropriate attribute node.
- * If there is no such node, this is (bizarrely enough) a NOP so you
- * won't see exceptions if your code deletes non-existent attributes.
- *
- * <p>Note that since there is no portable way for DOM to record
- * DTD information, default values for attributes will never be
- * provided automatically.
- */
- public void removeAttribute(String name)
- {
- if (attributes == null)
- {
- return;
- }
-
- try
- {
- attributes.removeNamedItem(name);
- }
- catch (DomDOMException e)
- {
- if (e.code != DOMException.NOT_FOUND_ERR)
- {
- throw e;
- }
- }
- }
-
- /**
- * <b>DOM L1</b>
- * Removes the appropriate attribute node; the name is the
- * nodeName property of the attribute.
- *
- * <p>Note that since there is no portable way for DOM to record
- * DTD information, default values for attributes will never be
- * provided automatically.
- */
- public Attr removeAttributeNode(Attr node)
- {
- if (attributes == null)
- {
- throw new DomDOMException(DOMException.NOT_FOUND_ERR, null, node, 0);
- }
- return (Attr) attributes.removeNamedItem(node.getNodeName());
- }
-
- /**
- * <b>DOM L2</b>
- * Removes the appropriate attribute node; the name combines
- * the namespace name and the local part.
- *
- * <p>Note that since there is no portable way for DOM to record
- * DTD information, default values for attributes will never be
- * provided automatically.
- */
- public void removeAttributeNS(String namespace, String localPart)
- {
- if (attributes == null)
- {
- throw new DomDOMException(DOMException.NOT_FOUND_ERR, localPart, null, 0);
- }
- attributes.removeNamedItemNS (namespace, localPart);
- }
-
- // DOM Level 3 methods
-
- public String lookupPrefix(String namespaceURI)
- {
- if (namespaceURI == null)
- {
- return null;
- }
- String namespace = getNamespaceURI();
- if (namespace != null && namespace.equals(namespaceURI))
- {
- return getPrefix();
- }
- if (attributes != null)
- {
- for (DomNode ctx = attributes.first; ctx != null; ctx = ctx.next)
- {
- if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI
- .equals(ctx.getNamespaceURI()))
- {
- String value = ctx.getNodeValue();
- if (value.equals(namespaceURI))
- {
- return ctx.getLocalName();
- }
- }
- }
- }
- return super.lookupPrefix(namespaceURI);
- }
-
- public boolean isDefaultNamespace(String namespaceURI)
- {
- String namespace = getNamespaceURI();
- if (namespace != null && namespace.equals(namespaceURI))
- {
- return getPrefix() == null;
- }
- if (attributes != null)
- {
- for (DomNode ctx = attributes.first; ctx != null; ctx = ctx.next)
- {
- if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI
- .equals(ctx.getNamespaceURI()))
- {
- String qName = ctx.getNodeName();
- return (XMLConstants.XMLNS_ATTRIBUTE.equals(qName));
- }
- }
- }
- return super.isDefaultNamespace(namespaceURI);
- }
-
- public String lookupNamespaceURI(String prefix)
- {
- String namespace = getNamespaceURI();
- if (namespace != null && equal(prefix, getPrefix()))
- {
- return namespace;
- }
- if (attributes != null)
- {
- for (DomNode ctx = attributes.first; ctx != null; ctx = ctx.next)
- {
- if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI
- .equals(ctx.getNamespaceURI()))
- {
- if (prefix == null)
- {
- if (XMLConstants.XMLNS_ATTRIBUTE.equals(ctx.getNodeName()))
- {
- return ctx.getNodeValue();
- }
- }
- else
- {
- if (prefix.equals(ctx.getLocalName()))
- {
- return ctx.getNodeValue();
- }
- }
- }
- }
- }
- return super.lookupNamespaceURI(prefix);
- }
-
- public String getBaseURI()
- {
- if (attributes != null)
- {
- Node xmlBase =
- attributes.getNamedItemNS(XMLConstants.XML_NS_URI, "base");
- if (xmlBase != null)
- {
- return xmlBase.getNodeValue();
- }
- }
- return super.getBaseURI();
- }
-
- public TypeInfo getSchemaTypeInfo()
- {
- // DTD implementation
- DomDoctype doctype = (DomDoctype) owner.getDoctype();
- if (doctype != null)
- {
- return doctype.getElementTypeInfo(getNodeName());
- }
- // TODO XML Schema implementation
- return null;
- }
-
- public void setIdAttribute(String name, boolean isId)
- {
- NamedNodeMap attrs = getAttributes();
- Attr attr = (Attr) attrs.getNamedItem(name);
- setIdAttributeNode(attr, isId);
- }
-
- public void setIdAttributeNode(Attr attr, boolean isId)
- {
- if (readonly)
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
- }
- if (attr == null || attr.getOwnerElement() != this)
- {
- throw new DomDOMException(DOMException.NOT_FOUND_ERR);
- }
- if (isId)
- {
- if (userIdAttrs == null)
- {
- userIdAttrs = new HashSet();
- }
- userIdAttrs.add(attr);
- }
- else if (userIdAttrs != null)
- {
- userIdAttrs.remove(attr);
- if (userIdAttrs.isEmpty())
- {
- userIdAttrs = null;
- }
- }
- }
-
- public void setIdAttributeNS(String namespaceURI, String localName,
- boolean isId)
- {
- NamedNodeMap attrs = getAttributes();
- Attr attr = (Attr) attrs.getNamedItemNS(namespaceURI, localName);
- setIdAttributeNode(attr, isId);
- }
-
-}
diff --git a/libjava/gnu/xml/dom/DomEntity.java b/libjava/gnu/xml/dom/DomEntity.java
deleted file mode 100644
index 3a76479a389..00000000000
--- a/libjava/gnu/xml/dom/DomEntity.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/* DomEntity.java --
- Copyright (C) 1999,2000,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.Entity;
-
-/**
- * <p> "Entity" implementation. This is a non-core DOM class, supporting the
- * "XML" feature. There are two types of entities, neither of which works
- * particularly well in this API:</p><dl>
- *
- * <dt><em>Unparsed Entities</em></dt>
- * <dd>Since ENTITY/ENTITIES attributes, the only legal use of unparsed
- * entities in XML, can't be detected with DOM, there isn't much point in
- * trying to use unparsed entities in DOM applications. (XML Linking is
- * working to provide a better version of this functionality.) </dd>
- *
- * <dt><em>Parsed Entities</em></dt>
- * <dd> While the DOM specification permits nodes for parsed entities
- * to have a readonly set of children, this is not required and there
- * is no portable way to provide such children. <em>This implementation
- * currently does not permit children to be added to Entities.</em>
- * There are related issues with the use of EntityReference nodes. </dd>
- *
- * </dl>
- *
- * <p> In short, <em>avoid using this DOM functionality</em>.
- *
- * @see DomDoctype
- * @see DomEntityReference
- * @see DomNotation
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomEntity
- extends DomExtern
- implements Entity
-{
-
- private String notation;
-
- /**
- * Constructs an Entity node associated with the specified document,
- * with the specified descriptive data.
- *
- * <p>This constructor should only be invoked by a DomDoctype as part
- * of its declareEntity functionality, or through a subclass which is
- * similarly used in a "Sub-DOM" style layer.
- *
- * @param owner The document with which this entity is associated
- * @param name Name of this entity
- * @param publicId If non-null, provides the entity's PUBLIC identifier
- * @param systemId Provides the entity's SYSTEM identifier (URI)
- * @param notation If non-null, provides the unparsed entity's notation.
- */
- protected DomEntity(DomDocument owner,
- String name,
- String publicId,
- String systemId,
- String notation)
- {
- super(ENTITY_NODE, owner, name, publicId, systemId);
- this.notation = notation;
-
- // NOTE: if notation == null, this is a parsed entity
- // which could reasonably be given child nodes ...
- makeReadonly();
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the NOTATION identifier associated with this entity, if any.
- */
- final public String getNotationName()
- {
- return notation;
- }
-
- // DOM Level 3 methods
-
- public String getInputEncoding()
- {
- // TODO
- return null;
- }
-
- public String getXmlEncoding()
- {
- // TODO
- return null;
- }
-
- public String getXmlVersion()
- {
- // TODO
- return null;
- }
-
- /**
- * The base URI of an external entity is its system ID.
- * The base URI of an internal entity is the parent document's base URI.
- * @since DOM Level 3 Core
- */
- public String getBaseURI()
- {
- String systemId = getSystemId();
- return (systemId == null) ? owner.getBaseURI() : systemId;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomEntityReference.java b/libjava/gnu/xml/dom/DomEntityReference.java
deleted file mode 100644
index d4596b405d4..00000000000
--- a/libjava/gnu/xml/dom/DomEntityReference.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/* DomEntityReference.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.Entity;
-import org.w3c.dom.EntityReference;
-
-/**
- * <p> "EntityReference" implementation (reference to parsed entity).
- * This is a non-core DOM class, supporting the "XML" feature.
- * It does not represent builtin entities (such as "&amp;amp;")
- * or character references, which are always directly expanded in
- * DOM trees.</p>
- *
- * <p> Note that while the DOM specification permits these nodes to have
- * a readonly set of children, this is not required. Similarly, it does
- * not require a DOM to couple EntityReference nodes with any Entity nodes
- * that have the same entity name (and equivalent children). It also
- * effectively guarantees that references created directly or indirectly
- * through the <em>Document.ImportNode</em> method will not have children.
- * The level of functionality you may get is extremely variable.
- *
- * <p> Also significant is that even at their most functional level, the fact
- * that EntityReference children must be readonly has caused significant
- * problems when modifying work products held in DOM trees. Other problems
- * include issues related to undeclared namespace prefixes (and references
- * to the current default namespace) that may be found in the text of such
- * parsed entities nodes. These must be contextually bound as part of DOM
- * tree construction. When such nodes are moved, the namespace associated
- * with a given prefix (or default) may change to be in conflict with the
- * namespace bound to the node at creation time.
- *
- * <p> In short, <em>avoid using this DOM functionality</em>.
- *
- * @see DomDoctype
- * @see DomEntity
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomEntityReference
- extends DomNode
- implements EntityReference
-{
-
- private String name;
-
- /**
- * Constructs an EntityReference node associated with the specified
- * document. The creator should populate this with whatever contents
- * are appropriate, and then mark it as readonly.
- *
- * <p>This constructor should only be invoked by a Document as part of
- * its createEntityReference functionality, or through a subclass which
- * is similarly used in a "Sub-DOM" style layer.
- *
- * @see DomNode#makeReadonly
- */
- protected DomEntityReference(DomDocument owner, String name)
- {
- super(ENTITY_REFERENCE_NODE, owner);
- this.name = name;
- }
-
- /**
- * Returns the name of the referenced entity.
- * @since DOM Level 1 Core
- */
- public final String getNodeName()
- {
- return name;
- }
-
- /**
- * The base URI of an entity reference is the base URI where the entity
- * declaration occurs.
- * @since DOM Level 3 Core
- */
- public final String getBaseURI()
- {
- DocumentType doctype = owner.getDoctype();
- if (doctype == null)
- {
- return null;
- }
- Entity entity = (Entity) doctype.getEntities().getNamedItem(name);
- if (entity == null)
- {
- return null;
- }
- return entity.getBaseURI();
- }
-
-}
diff --git a/libjava/gnu/xml/dom/DomEvent.java b/libjava/gnu/xml/dom/DomEvent.java
deleted file mode 100644
index d57eac0e445..00000000000
--- a/libjava/gnu/xml/dom/DomEvent.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/* DomEvent.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.*;
-import org.w3c.dom.events.*;
-import org.w3c.dom.views.AbstractView; // used by UIEvent
-
-/**
- * "Event" implementation. Events are
- * created (through DocumentEvent interface methods on the document object),
- * and are sent to any target node in the document.
- *
- * <p> Applications may define application specific event subclasses, but
- * should otherwise use the <em>DocumentTraversal</em> interface to acquire
- * event objects.
- *
- * @author David Brownell
- */
-public class DomEvent
- implements Event
-{
-
- String type; // init
- EventTarget target;
- EventTarget currentNode;
- short eventPhase;
- boolean bubbles; // init
- boolean cancelable; // init
- long timeStamp; // ?
-
- /** Returns the event's type (name) as initialized */
- public final String getType()
- {
- return type;
- }
-
- /**
- * Returns event's target; delivery of an event is initiated
- * by a <em>target.dispatchEvent(event)</em> invocation.
- */
- public final EventTarget getTarget()
- {
- return target;
- }
-
- /**
- * Returns the target to which events are currently being
- * delivered. When capturing or bubbling, this will not
- * be what <em>getTarget</em> returns.
- */
- public final EventTarget getCurrentTarget()
- {
- return currentNode;
- }
-
- /**
- * Returns CAPTURING_PHASE, AT_TARGET, or BUBBLING;
- * only meaningful within EventListener.handleEvent
- */
- public final short getEventPhase()
- {
- return eventPhase;
- }
-
- /**
- * Returns true if the news of the event bubbles to tree tops
- * (as specified during initialization).
- */
- public final boolean getBubbles()
- {
- return bubbles;
- }
-
- /**
- * Returns true if the default handling may be canceled
- * (as specified during initialization).
- */
- public final boolean getCancelable()
- {
- return cancelable;
- }
-
- /**
- * Returns the event's timestamp.
- */
- public final long getTimeStamp()
- {
- return timeStamp;
- }
-
- boolean stop;
- boolean doDefault;
-
- /**
- * Requests the event no longer be captured or bubbled; only
- * listeners on the event target will see the event, if they
- * haven't yet been notified.
- *
- * <p> <em> Avoid using this </em> except for application-specific
- * events, for which you the protocol explicitly "blesses" the use
- * of this with some event types. Otherwise, you are likely to break
- * algorithms which depend on event notification either directly or
- * through bubbling or capturing. </p>
- *
- * <p> Note that this method is not final, specifically to enable
- * enforcing of policies about events always propagating. </p>
- */
- public void stopPropagation()
- {
- stop = true;
- }
-
- /**
- * Requests that whoever dispatched the event not perform their
- * default processing when event delivery completes. Initializes
- * event timestamp.
- */
- public final void preventDefault()
- {
- doDefault = false;
- }
-
- /** Initializes basic event state. */
- public void initEvent(String typeArg,
- boolean canBubbleArg,
- boolean cancelableArg)
- {
- eventPhase = 0;
- type = typeArg;
- bubbles = canBubbleArg;
- cancelable = cancelableArg;
- timeStamp = System.currentTimeMillis();
- }
-
- /** Constructs, but does not initialize, an event. */
- public DomEvent(String type)
- {
- this.type = type;
- }
-
- /**
- * Returns a basic printable description of the event's type,
- * state, and delivery conditions
- */
- public String toString()
- {
- StringBuffer buf = new StringBuffer("[Event ");
- buf.append(type);
- switch (eventPhase)
- {
- case CAPTURING_PHASE:
- buf.append(", CAPTURING");
- break;
- case AT_TARGET:
- buf.append(", AT TARGET");
- break;
- case BUBBLING_PHASE:
- buf.append(", BUBBLING");
- break;
- default:
- buf.append(", (inactive)");
- break;
- }
- if (bubbles && eventPhase != BUBBLING_PHASE)
- {
- buf.append(", bubbles");
- }
- if (cancelable)
- {
- buf.append(", can cancel");
- }
- // were we to provide subclass info, this's where it'd live
- buf.append("]");
- return buf.toString();
- }
-
- /**
- * "MutationEvent" implementation.
- */
- public static final class DomMutationEvent
- extends DomEvent
- implements MutationEvent
- {
-
- // package private
- Node relatedNode; // init
-
- private String prevValue; // init
- private String newValue; // init
-
- private String attrName; // init
- private short attrChange; // init
-
- /** Returns any "related" node provided by this type of event */
- public final Node getRelatedNode()
- {
- return relatedNode;
- }
-
- /** Returns any "previous value" provided by this type of event */
- public final String getPrevValue()
- {
- return prevValue;
- }
-
- /** Returns any "new value" provided by this type of event */
- public final String getNewValue()
- {
- return newValue;
- }
-
- /** For attribute change events, returns the attribute's name */
- public final String getAttrName()
- {
- return attrName;
- }
-
- /** For attribute change events, returns how the attribuet changed */
- public final short getAttrChange()
- {
- return attrChange;
- }
-
- /** Initializes a mutation event */
- public final void initMutationEvent(String typeArg,
- boolean canBubbleArg,
- boolean cancelableArg,
- Node relatedNodeArg,
- String prevValueArg,
- String newValueArg,
- String attrNameArg,
- short attrChangeArg)
- {
- // super.initEvent is inlined here for speed
- // (mutation events are issued on all DOM changes)
- eventPhase = 0;
- type = typeArg;
- bubbles = canBubbleArg;
- cancelable = cancelableArg;
- timeStamp = System.currentTimeMillis();
-
- relatedNode = relatedNodeArg;
- prevValue = prevValueArg;
- newValue = newValueArg;
- attrName = attrNameArg;
- attrChange = attrChangeArg;
- }
-
- // clear everything that should be GC-able
- void clear()
- {
- type = null;
- target = null;
- relatedNode = null;
- currentNode = null;
- prevValue = newValue = attrName = null;
- }
-
- /** Constructs an uninitialized mutation event. */
- public DomMutationEvent(String type)
- {
- super(type);
- }
-
- }
-
- /**
- * "UIEvent" implementation.
- */
- public static class DomUIEvent
- extends DomEvent
- implements UIEvent
- {
-
- private AbstractView view; // init
- private int detail; // init
-
- /** Constructs an uninitialized User Interface (UI) event */
- public DomUIEvent (String type) { super (type); }
-
- public final AbstractView getView () { return view; }
- public final int getDetail () { return detail; }
-
- /** Initializes a UI event */
- public final void initUIEvent(String typeArg,
- boolean canBubbleArg,
- boolean cancelableArg,
- AbstractView viewArg,
- int detailArg)
- {
- super.initEvent(typeArg, canBubbleArg, cancelableArg);
- view = viewArg;
- detail = detailArg;
- }
-
- }
-
- /*
-
- static final class DomMouseEvent extends DomUIEvent
- implements MouseEvent
- {
- // another half dozen state variables/accessors
- }
-
- */
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomExtern.java b/libjava/gnu/xml/dom/DomExtern.java
deleted file mode 100644
index 87a6909f758..00000000000
--- a/libjava/gnu/xml/dom/DomExtern.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/* DomExtern.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-/**
- * <p> Abstract implemention of nodes describing external DTD-related
- * objects. This facilitates reusing code for Entity, Notation, and
- * DocumentType (really, external subset) nodes. Such support is not
- * part of the core DOM; it's for the "XML" feature. </p>
- *
- * <p> Note that you are strongly advised to avoid using the DOM
- * features that take advantage of this class, since (as of L2) none
- * of them is defined fully enough to permit full use of the
- * XML feature they partially expose. </p>
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public abstract class DomExtern
- extends DomNode
-{
-
- private final String name;
- private final String publicId;
- private final String systemId;
-
- /**
- * Constructs a node associated with the specified document,
- * with the specified descriptive data.
- *
- * @param owner The document with which this object is associated
- * @param name Name of this object
- * @param publicId If non-null, provides the entity's PUBLIC identifier
- * @param systemId If non-null, provides the entity's SYSTEM identifier
- */
- // package private
- DomExtern(short nodeType,
- DomDocument owner,
- String name,
- String publicId,
- String systemId)
- {
- super(nodeType, owner);
- this.name = name;
- this.publicId = publicId;
- this.systemId = systemId;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the SYSTEM identifier associated with this object, if any.
- */
- public final String getSystemId()
- {
- return systemId;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the PUBLIC identifier associated with this object, if any.
- */
- public final String getPublicId()
- {
- return publicId;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the object's name.
- */
- public final String getNodeName()
- {
- return name;
- }
-
- public final String getLocalName()
- {
- return name;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomImpl.java b/libjava/gnu/xml/dom/DomImpl.java
deleted file mode 100644
index cabe741c931..00000000000
--- a/libjava/gnu/xml/dom/DomImpl.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/* DomImpl.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.Element;
-import org.w3c.dom.ls.DOMImplementationLS;
-import org.w3c.dom.ls.LSInput;
-import org.w3c.dom.ls.LSOutput;
-import org.w3c.dom.ls.LSParser;
-import org.w3c.dom.ls.LSSerializer;
-import gnu.xml.dom.html2.DomHTMLImpl;
-import gnu.xml.dom.ls.DomLSInput;
-import gnu.xml.dom.ls.DomLSOutput;
-import gnu.xml.dom.ls.DomLSParser;
-import gnu.xml.dom.ls.DomLSSerializer;
-
-/**
- * <p> "DOMImplementation" implementation. </p>
- *
- * <p> At this writing, the following features are supported:
- * "XML" (L1, L2, L3),
- * "Events" (L2), "MutationEvents" (L2), "USER-Events" (a conformant extension),
- * "HTMLEvents" (L2), "UIEvents" (L2), "Traversal" (L2), "XPath" (L3),
- * "LS" (L3) "LS-Async" (L3).
- * It is possible to compile the package so it doesn't support some of these
- * features (notably, Traversal).
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomImpl
- implements DOMImplementation, DOMImplementationLS
-{
-
- /**
- * Constructs a DOMImplementation object which supports
- * "XML" and other DOM Level 2 features.
- */
- public DomImpl()
- {
- }
-
- /**
- * <b>DOM L1</b>
- * Returns true if the specified feature and version are
- * supported. Note that the case of the feature name is ignored.
- */
- public boolean hasFeature(String name, String version)
- {
- if (name.length() == 0)
- {
- return false;
- }
- name = name.toLowerCase();
- if (name.charAt(0) == '+')
- {
- name = name.substring(1);
- }
-
- if ("xml".equals(name) || "core".equals(name))
- {
- return (version == null ||
- "".equals(version) ||
- "1.0".equals(version) ||
- "2.0".equals(version) ||
- "3.0".equals(version));
-
- }
- else if ("ls".equals(name) || "ls-async".equals(name))
- {
- return (version == null ||
- "".equals(version) ||
- "3.0".equals(version));
- }
- else if ("events".equals(name)
- || "mutationevents".equals(name)
- || "uievents".equals(name)
- // || "mouseevents".equals(name)
- || "htmlevents".equals(name))
- {
- return (version == null ||
- "".equals(version) ||
- "2.0".equals(version));
-
- // Extension: "USER-" prefix event types can
- // be created and passed through the DOM.
-
- }
- else if ("user-events".equals(name))
- {
- return (version == null ||
- "".equals(version) ||
- "0.1".equals(version));
-
- // NOTE: "hasFeature" for events is here interpreted to
- // mean the DOM can manufacture those sorts of events,
- // since actually choosing to report the events is more
- // often part of the environment or application. It's
- // only really an issue for mutation events.
-
- }
- else if (DomNode.reportMutations
- && "traversal".equals(name))
- {
- return (version == null ||
- "".equals(version) ||
- "2.0".equals(version));
- }
- else if ("xpath".equals(name))
- {
- return (version == null ||
- "".equals(version) ||
- "3.0".equals(version));
- }
- else if ("html".equals(name) || "xhtml".equals(name))
- {
- return (version == null ||
- "".equals(version) ||
- "2.0".equals(version));
- }
-
- // views
- // stylesheets
- // css, css2
- // range
-
- return false;
- }
-
- /**
- * <b>DOM L2</b>
- * Creates and returns a DocumentType, associated with this
- * implementation. This DocumentType can have no associated
- * objects(notations, entities) until the DocumentType is
- * first associated with a document.
- *
- * <p> Note that there is no implication that this DTD will
- * be parsed by the DOM, or ever have contents. Moreover, the
- * DocumentType created here can only be added to a document by
- * the createDocument method(below). <em>That means that the only
- * portable way to create a Document object is to start parsing,
- * queue comment and processing instruction (PI) nodes, and then only
- * create a DOM Document after <b>(a)</b> it's known if a DocumentType
- * object is needed, and <b>(b) the name and namespace of the root
- * element is known. Queued comment and PI nodes would then be
- * inserted appropriately in the document prologue, both before and
- * after the DTD node, and additional attributes assigned to the
- * root element.</em>
- *(One hopes that the final DOM REC fixes this serious botch.)
- */
- public DocumentType createDocumentType(String rootName,
- String publicId,
- String systemId)
- // CR2 deleted internal subset, ensuring DocumentType
- // is 100% useless instead of just 90% so.
- {
- DomDocument.checkNCName(rootName, false);
- return new DomDoctype(this, rootName, publicId, systemId, null);
- }
-
- /**
- * <b>DOM L2</b>
- * Creates and returns a Document, populated only with a root element and
- * optionally a document type(if that was provided).
- */
- public Document createDocument(String namespaceURI,
- String rootName,
- DocumentType doctype)
- {
- Document doc = createDocument();
- Element root = null;
-
- if (rootName != null)
- {
- root = doc.createElementNS(namespaceURI, rootName);
- if (rootName.startsWith("xmlns:"))
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "xmlns is reserved", null, 0);
- }
- }
- // Bleech -- L2 seemingly _requires_ omission of xmlns attributes.
- if (doctype != null)
- {
- doc.appendChild(doctype); // handles WRONG_DOCUMENT error
- }
- if (root != null)
- {
- doc.appendChild(root);
- }
- return doc;
- }
-
- protected Document createDocument()
- {
- return new DomDocument(this);
- }
-
- // DOM Level 3
-
- public Object getFeature(String feature, String version)
- {
- if (hasFeature(feature, version))
- {
- if ("html".equalsIgnoreCase(feature) ||
- "xhtml".equalsIgnoreCase(feature))
- {
- return new DomHTMLImpl();
- }
- return this;
- }
- return null;
- }
-
- // -- DOMImplementationLS --
-
- public LSParser createLSParser(short mode, String schemaType)
- throws DOMException
- {
- return new DomLSParser(mode, schemaType);
- }
-
- public LSSerializer createLSSerializer()
- {
- return new DomLSSerializer();
- }
-
- public LSInput createLSInput()
- {
- return new DomLSInput();
- }
-
- public LSOutput createLSOutput()
- {
- return new DomLSOutput();
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomIterator.java b/libjava/gnu/xml/dom/DomIterator.java
deleted file mode 100644
index 472c6e80585..00000000000
--- a/libjava/gnu/xml/dom/DomIterator.java
+++ /dev/null
@@ -1,373 +0,0 @@
-/* DomIterator.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Node;
-import org.w3c.dom.events.Event;
-import org.w3c.dom.events.EventListener;
-import org.w3c.dom.events.EventTarget;
-import org.w3c.dom.events.MutationEvent;
-import org.w3c.dom.traversal.NodeFilter;
-import org.w3c.dom.traversal.NodeIterator;
-
-/**
- * <p> "NodeIterator" implementation, usable with any L2 DOM which
- * supports MutationEvents. </p>
- *
- * @author David Brownell
- */
-public final class DomIterator
- implements NodeIterator, EventListener
-{
-
- private Node reference;
- private boolean right;
- private boolean done;
-
- private final Node root;
- private final int whatToShow;
- private final NodeFilter filter;
- private final boolean expandEntityReferences;
-
- /**
- * Constructs and initializes an iterator.
- */
- protected DomIterator(Node root,
- int whatToShow,
- NodeFilter filter,
- boolean entityReferenceExpansion)
- {
- if (!root.isSupported("MutationEvents", "2.0"))
- {
- throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR,
- "Iterator needs mutation events", root, 0);
- }
-
- this.root = root;
- this.whatToShow = whatToShow;
- this.filter = filter;
- this.expandEntityReferences = entityReferenceExpansion;
-
- // start condition: going right, seen nothing yet.
- reference = null;
- right = true;
-
- EventTarget target = (EventTarget) root;
- target.addEventListener("DOMNodeRemoved", this, false);
- }
-
- /**
- * <b>DOM L2</b>
- * Flags the iterator as done, unregistering its event listener so
- * that the iterator can be garbage collected without relying on weak
- * references (a "Java 2" feature) in the event subsystem.
- */
- public void detach()
- {
- EventTarget target = (EventTarget) root;
- target.removeEventListener("DOMNodeRemoved", this, false);
- done = true;
- }
-
- /**
- * <b>DOM L2</b>
- * Returns the flag controlling whether iteration descends
- * through entity references.
- */
- public boolean getExpandEntityReferences()
- {
- return expandEntityReferences;
- }
-
- /**
- * <b>DOM L2</b>
- * Returns the filter provided during construction.
- */
- public NodeFilter getFilter()
- {
- return filter;
- }
-
- /**
- * <b>DOM L2</b>
- * Returns the root of the tree this is iterating through.
- */
- public Node getRoot()
- {
- return root;
- }
-
- /**
- * <b>DOM L2</b>
- * Returns the mask of flags provided during construction.
- */
- public int getWhatToShow()
- {
- return whatToShow;
- }
-
- /**
- * <b>DOM L2</b>
- * Returns the next node in a forward iteration, masked and filtered.
- * Note that the node may be read-only due to entity expansions.
- * A null return indicates the iteration is complete, but may still
- * be processed backwards.
- */
- public Node nextNode()
- {
- if (done)
- {
- throw new DomDOMException(DOMException.INVALID_STATE_ERR);
- }
- right = true;
- return walk(true);
- }
-
- /**
- * <b>DOM L2</b>
- * Returns the next node in a backward iteration, masked and filtered.
- * Note that the node may be read-only due to entity expansions.
- * A null return indicates the iteration is complete, but may still
- * be processed forwards.
- */
- public Node previousNode()
- {
- if (done)
- {
- throw new DomDOMException(DOMException.INVALID_STATE_ERR);
- }
- Node previous = reference;
- right = false;
- walk(false);
- return previous;
- }
-
- private boolean shouldShow(Node node)
- // raises Runtime exceptions indirectly, via acceptNode()
- {
- if ((whatToShow & (1 << (node.getNodeType() - 1))) == 0)
- {
- return false;
- }
- if (filter == null)
- {
- return true;
- }
- return filter.acceptNode(node) == NodeFilter.FILTER_ACCEPT;
- }
-
- //
- // scenario: root = 1, sequence = 1 2 ... 3 4
- // forward walk: 1 2 ... 3 4 null
- // then backward: 4 3 ... 2 1 null
- //
- // At the leftmost end, "previous" == null
- // At the rightmost end, "previous" == 4
- //
- // The current draft spec really seem to make no sense re the
- // role of the reference node, so what it says is ignored here.
- //
- private Node walk(boolean forward)
- {
- Node here = reference;
-
- while ((here = successor(here, forward)) != null
- && !shouldShow(here))
- {
- continue;
- }
- if (here != null || !forward)
- {
- reference = here;
- }
- return here;
- }
-
- private boolean isLeaf(Node here)
- {
- boolean leaf = !here.hasChildNodes();
- if (!leaf && !expandEntityReferences)
- {
- leaf = (here.getNodeType() == Node.ENTITY_REFERENCE_NODE);
- }
- return leaf;
- }
-
- //
- // Returns the immediate successor in a forward (or backward)
- // document order walk, sans filtering ... except that it knows
- // how to stop, returning null when done. This is a depth first
- // preorder traversal when run in the forward direction.
- //
- private Node successor(Node here, boolean forward)
- {
- Node next;
-
- // the "leftmost" end is funky
- if (here == null)
- {
- return forward ? root : null;
- }
-
- //
- // Forward, this is preorder: children before siblings.
- // Backward, it's postorder: we saw the children already.
- //
- if (forward && !isLeaf(here))
- {
- return here.getFirstChild();
- }
-
- //
- // Siblings ... if forward, we visit them, if backwards
- // we visit their children first.
- //
- if (forward)
- {
- if ((next = here.getNextSibling()) != null)
- {
- return next;
- }
- }
- else if ((next = here.getPreviousSibling()) != null)
- {
- if (isLeaf(next))
- {
- return next;
- }
- next = next.getLastChild();
- while (!isLeaf(next))
- {
- next = next.getLastChild();
- }
- return next;
- }
-
- //
- // We can't go down or lateral -- it's up, then. The logic is
- // the converse of what's above: backwards is easy (the parent
- // is next), forwards isn't.
- //
- next = here.getParentNode();
- if (!forward)
- {
- return next;
- }
-
- Node temp = null;
- while (next != null
- && next != root
- && (temp = next.getNextSibling()) == null)
- {
- next = next.getParentNode();
- }
- if (next == root)
- {
- return null;
- }
- return temp;
- }
-
- /**
- * Not for public use. This lets the iterator know when its
- * reference node will be removed from the tree, so that a new
- * one may be selected.
- *
- * <p> This version works by watching removal events as they
- * bubble up. So, don't prevent them from bubbling.
- */
- public void handleEvent(Event e)
- {
- MutationEvent event;
- Node ancestor, removed;
-
- if (reference == null
- || !"DOMNodeRemoved".equals(e.getType())
- || e.getEventPhase() != Event.BUBBLING_PHASE)
- {
- return;
- }
-
- event = (MutationEvent) e;
- removed = (Node) event.getTarget();
-
- // See if the removal will cause trouble for this iterator
- // by being the reference node or an ancestor of it.
- for (ancestor = reference;
- ancestor != null && ancestor != root;
- ancestor = ancestor.getParentNode())
- {
- if (ancestor == removed)
- {
- break;
- }
- }
- if (ancestor != removed)
- {
- return;
- }
-
- // OK, it'll cause trouble. We want to make the "next"
- // node in our current traversal direction seem right.
- // So we pick the nearest node that's not getting removed,
- // but go in the _opposite_ direction from our current
- // traversal ... so the "next" doesn't skip anything.
- Node candidate;
-
-search:
- while ((candidate = walk(!right)) != null)
- {
- for (ancestor = candidate;
- ancestor != null && ancestor != root;
- ancestor = ancestor.getParentNode())
- {
- if (ancestor == removed)
- {
- continue search;
- }
- }
- return;
- }
-
- // The current DOM WD talks about a special case here;
- // I've not yet seen it.
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomNSResolverContext.java b/libjava/gnu/xml/dom/DomNSResolverContext.java
deleted file mode 100644
index 4cf57772e9b..00000000000
--- a/libjava/gnu/xml/dom/DomNSResolverContext.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/* DomNSResolverContext.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import java.util.Iterator;
-import javax.xml.namespace.NamespaceContext;
-import org.w3c.dom.xpath.XPathNSResolver;
-
-/**
- * Namespace content wrapper for an XPathNSResolver.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class DomNSResolverContext
- implements NamespaceContext, Iterator
-{
-
- final XPathNSResolver resolver;
-
- DomNSResolverContext(XPathNSResolver resolver)
- {
- this.resolver = resolver;
- }
-
- public String getNamespaceURI(String prefix)
- {
- return resolver.lookupNamespaceURI(prefix);
- }
-
- public String getPrefix(String namespaceURI)
- {
- return null;
- }
-
- public Iterator getPrefixes(String namespaceURI)
- {
- return this;
- }
-
- public boolean hasNext()
- {
- return false;
- }
-
- public Object next()
- {
- return null;
- }
-
- public void remove()
- {
- throw new UnsupportedOperationException();
- }
-
-}
diff --git a/libjava/gnu/xml/dom/DomNamedNodeMap.java b/libjava/gnu/xml/dom/DomNamedNodeMap.java
deleted file mode 100644
index fa5ac964b8a..00000000000
--- a/libjava/gnu/xml/dom/DomNamedNodeMap.java
+++ /dev/null
@@ -1,417 +0,0 @@
-/* DomNamedNodeMap.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.DOMException;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
-/**
- * <p> "NamedNodeMap" implementation. </p>
- * Used mostly to hold element attributes, but sometimes also
- * to list notations or entities.
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomNamedNodeMap
- implements NamedNodeMap
-{
-
- final DomNode owner;
- final short type;
-
- DomNode first;
- int length;
- boolean readonly;
-
- // package private
- DomNamedNodeMap(DomNode owner, short type)
- {
- this.owner = owner;
- this.type = type;
- }
-
- /**
- * Exposes the internal "readonly" flag. In DOM, all NamedNodeMap
- * objects found in a DocumentType object are read-only (after
- * they are fully constructed), and those holding attributes of
- * a readonly element will also be readonly.
- */
- public final boolean isReadonly()
- {
- return readonly;
- }
-
- /**
- * Sets the internal "readonly" flag so the node and its
- * children can't be changed.
- */
- public void makeReadonly()
- {
- readonly = true;
- for (DomNode ctx = first; ctx != null; ctx = ctx.next)
- {
- ctx.makeReadonly();
- }
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the named item from the map, or null; names are just
- * the nodeName property.
- */
- public Node getNamedItem(String name)
- {
- for (DomNode ctx = first; ctx != null; ctx = ctx.next)
- {
- if (ctx.getNodeName().equals(name))
- {
- return ctx;
- }
- }
- return null;
- }
-
- /**
- * <b>DOM L2</b>
- * Returns the named item from the map, or null; names are the
- * localName and namespaceURI properties, ignoring any prefix.
- */
- public Node getNamedItemNS(String namespaceURI, String localName)
- {
- if ("".equals(namespaceURI))
- {
- namespaceURI = null;
- }
- for (DomNode ctx = first; ctx != null; ctx = ctx.next)
- {
- String name = ctx.getLocalName();
- if ((localName == null && name == null) ||
- (localName != null && localName.equals(name)))
- {
- String uri = ctx.getNamespaceURI();
- if ("".equals(uri))
- {
- uri = null;
- }
- if ((namespaceURI == null && uri == null) ||
- (namespaceURI != null && namespaceURI.equals(uri)))
- {
- return ctx;
- }
- }
- }
- return null;
- }
-
- /**
- * <b>DOM L1</b>
- * Stores the named item into the map, optionally overwriting
- * any existing node with that name. The name used is just
- * the nodeName attribute.
- */
- public Node setNamedItem(Node arg)
- {
- return setNamedItem(arg, false);
- }
-
- /**
- * <b>DOM L2</b>
- * Stores the named item into the map, optionally overwriting
- * any existing node with that fully qualified name. The name
- * used incorporates the localName and namespaceURI properties,
- * and ignores any prefix.
- */
- public Node setNamedItemNS(Node arg)
- {
- return setNamedItem(arg, true);
- }
-
- Node setNamedItem(Node arg, boolean ns)
- {
- if (readonly)
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
- }
-
- DomNode node = (DomNode) arg;
- if (node.owner != owner.owner)
- {
- throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR);
- }
- if (node.nodeType != type)
- {
- throw new DomDOMException(DOMException.HIERARCHY_REQUEST_ERR);
- }
- if (node.nodeType == Node.ATTRIBUTE_NODE)
- {
- DomNode element = node.parent;
- if (element != null && element != owner)
- {
- throw new DomDOMException(DOMException.INUSE_ATTRIBUTE_ERR);
- }
- node.parent = owner;
- node.depth = owner.depth + 1;
- }
-
- String nodeName = node.getNodeName();
- String localName = ns ? node.getLocalName() : null;
- String namespaceURI = ns ? node.getNamespaceURI() : null;
- if ("".equals(namespaceURI))
- {
- namespaceURI = null;
- }
-
- // maybe attribute ADDITION events (?)
- DomNode last = null;
- for (DomNode ctx = first; ctx != null; ctx = ctx.next)
- {
- boolean test = false;
- if (ns)
- {
- String tln = ctx.getLocalName();
- if (tln.equals(localName))
- {
- String tu = ctx.getNamespaceURI();
- if ((tu == null && namespaceURI == null) ||
- (tu != null && tu.equals(namespaceURI)))
- {
- test = true;
- }
- }
- }
- else
- {
- test = ctx.getNodeName().equals(nodeName);
- }
- if (test)
- {
- // replace
- node.previous = ctx.previous;
- node.next = ctx.next;
- if (ctx.previous != null)
- {
- ctx.previous.next = node;
- }
- if (ctx.next != null)
- {
- ctx.next.previous = node;
- }
- if (first == ctx)
- {
- first = node;
- }
- reparent(node, nodeName, ctx.index);
- ctx.parent = null;
- ctx.next = null;
- ctx.previous = null;
- ctx.setDepth(0);
- ctx.index = 0;
- return ctx;
- }
- last = ctx;
- }
- // append
- if (last != null)
- {
- last.next = node;
- node.previous = last;
- }
- else
- {
- first = node;
- }
- length++;
- reparent(node, nodeName, 0);
- return null;
- }
-
- void reparent(DomNode node, String nodeName, int i)
- {
- node.parent = owner;
- node.setDepth(owner.depth + 1);
- // index renumbering
- for (DomNode ctx = node; ctx != null; ctx = ctx.next)
- {
- ctx.index = i++;
- }
- // cache xml:space
- boolean xmlSpace = "xml:space".equals(nodeName);
- if (xmlSpace && owner instanceof DomElement)
- {
- ((DomElement) owner).xmlSpace = node.getNodeValue();
- }
- }
-
- /**
- * <b>DOM L1</b>
- * Removes the named item from the map, or reports an exception;
- * names are just the nodeName property.
- */
- public Node removeNamedItem(String name)
- {
- return removeNamedItem(null, name, false);
- }
-
- /**
- * <b>DOM L2</b>
- * Removes the named item from the map, or reports an exception;
- * names are the localName and namespaceURI properties.
- */
- public Node removeNamedItemNS(String namespaceURI, String localName)
- {
- return removeNamedItem(namespaceURI, localName, true);
- }
-
- Node removeNamedItem(String uri, String name, boolean ns)
- {
- if (readonly)
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
- }
-
- // report attribute REMOVAL event?
-
- for (DomNode ctx = first; ctx != null; ctx = ctx.next)
- {
- boolean test = false;
- String nodeName = ctx.getNodeName();
- if (ns)
- {
- String tln = ctx.getLocalName();
- if (tln.equals(name))
- {
- String tu = ctx.getNamespaceURI();
- if ((tu == null && uri == null) ||
- (tu != null && tu.equals(uri)))
- {
- test = true;
- }
- }
- }
- else
- {
- test = nodeName.equals(name);
- }
- if (test)
- {
- // uncache xml:space
- boolean xmlSpace = "xml:space".equals(nodeName);
- if (xmlSpace && owner instanceof DomElement)
- {
- ((DomElement) owner).xmlSpace = "";
- }
- // is this a default attribute?
- if (ctx.nodeType == Node.ATTRIBUTE_NODE)
- {
- String def = getDefaultValue(ctx.getNodeName());
- if (def != null)
- {
- ctx.setNodeValue(def);
- ((DomAttr) ctx).setSpecified(false);
- return null;
- }
- }
- // remove
- if (ctx == first)
- {
- first = ctx.next;
- }
- if (ctx.previous != null)
- {
- ctx.previous.next = ctx.next;
- }
- if (ctx.next != null)
- {
- ctx.next.previous = ctx.previous;
- }
- length--;
- ctx.previous = null;
- ctx.next = null;
- ctx.parent = null;
- ctx.setDepth(0);
- ctx.index = 0;
- return ctx;
- }
- }
- throw new DomDOMException(DOMException.NOT_FOUND_ERR);
- }
-
- String getDefaultValue(String name)
- {
- DomDoctype doctype = (DomDoctype) owner.owner.getDoctype();
- if (doctype == null)
- {
- return null;
- }
- DTDAttributeTypeInfo info =
- doctype.getAttributeTypeInfo(owner.getNodeName(), name);
- if (info == null)
- {
- return null;
- }
- return info.value;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the indexed item from the map, or null.
- */
- public Node item(int index)
- {
- DomNode ctx = first;
- int count = 0;
- while (ctx != null && count < index)
- {
- ctx = ctx.next;
- count++;
- }
- return ctx;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the length of the map.
- */
- public int getLength()
- {
- return length;
- }
-
-}
diff --git a/libjava/gnu/xml/dom/DomNode.java b/libjava/gnu/xml/dom/DomNode.java
deleted file mode 100644
index 761c8de494d..00000000000
--- a/libjava/gnu/xml/dom/DomNode.java
+++ /dev/null
@@ -1,2189 +0,0 @@
-/* DomNode.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Text;
-import org.w3c.dom.UserDataHandler;
-import org.w3c.dom.events.DocumentEvent;
-import org.w3c.dom.events.Event;
-import org.w3c.dom.events.EventException;
-import org.w3c.dom.events.EventListener;
-import org.w3c.dom.events.EventTarget;
-import org.w3c.dom.events.MutationEvent;
-import org.w3c.dom.traversal.NodeFilter;
-import org.w3c.dom.traversal.NodeIterator;
-
-/**
- * <p> "Node", "EventTarget", and "DocumentEvent" implementation.
- * This provides most of the core DOM functionality; only more
- * specialized features are provided by subclasses. Those subclasses may
- * have some particular constraints they must implement, by overriding
- * methods defined here. Such constraints are noted here in the method
- * documentation. </p>
- *
- * <p> Note that you can create events with type names prefixed with "USER-",
- * and pass them through this DOM. This lets you use the DOM event scheme
- * for application specific purposes, although you must use a predefined event
- * structure (such as MutationEvent) to pass data along with those events.
- * Test for existence of this feature with the "USER-Events" DOM feature
- * name.</p>
- *
- * <p> Other kinds of events you can send include the "html" events,
- * like "load", "unload", "abort", "error", and "blur"; and the mutation
- * events. If this DOM has been compiled with mutation event support
- * enabled, it will send mutation events when you change parts of the
- * tree; otherwise you may create and send such events yourself, but
- * they won't be generated by the DOM itself. </p>
- *
- * <p> Note that there is a namespace-aware name comparison method,
- * <em>nameAndTypeEquals</em>, which compares the names (and types) of
- * two nodes in conformance with the "Namespaces in XML" specification.
- * While mostly intended for use with elements and attributes, this should
- * also be helpful for ProcessingInstruction nodes and some others which
- * do not have namespace URIs.
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public abstract class DomNode
- implements Node, NodeList, EventTarget, DocumentEvent, Cloneable, Comparable
-{
-
- // package private
- //final static String xmlNamespace = "http://www.w3.org/XML/1998/namespace";
- //final static String xmlnsURI = "http://www.w3.org/2000/xmlns/";
-
- // tunable
- // NKIDS_* affects arrays of children (which grow)
- // (currently) fixed size:
- // ANCESTORS_* is for event capture/bubbling, # ancestors
- // NOTIFICATIONS_* is for per-node event delivery, # events
- private static final int NKIDS_DELTA = 8;
- private static final int ANCESTORS_INIT = 20;
- private static final int NOTIFICATIONS_INIT = 10;
-
- // tunable: enable mutation events or not? Enabling it costs about
- // 10-15% in DOM construction time, last time it was measured.
-
- // package private !!!
- static final boolean reportMutations = true;
-
- // locking protocol changeable only within this class
- private static final Object lockNode = new Object();
-
- // NON-FINAL class data
-
- // Optimize event dispatch by not allocating memory each time
- private static boolean dispatchDataLock;
- private static DomNode[] ancestors = new DomNode[ANCESTORS_INIT];
- private static ListenerRecord[] notificationSet
- = new ListenerRecord[NOTIFICATIONS_INIT];
-
- // Ditto for the (most common) event object itself!
- private static boolean eventDataLock;
- private static DomEvent.DomMutationEvent mutationEvent
- = new DomEvent.DomMutationEvent(null);
-
- //
- // PER-INSTANCE DATA
- //
-
- DomDocument owner;
- DomNode parent; // parent node;
- DomNode previous; // previous sibling node
- DomNode next; // next sibling node
- DomNode first; // first child node
- DomNode last; // last child node
- int index; // index of this node in its parent's children
- int depth; // depth of the node in the document
- int length; // number of children
- final short nodeType;
-
- // Bleech ... "package private" so a builder can populate entity refs.
- // writable during construction. DOM spec is nasty.
- boolean readonly;
-
- // event registrations
- private ListenerRecord[] listeners;
- private int nListeners;
-
- // DOM Level 3 userData dictionary.
- private HashMap userData;
- private HashMap userDataHandlers;
-
- //
- // Some of the methods here are declared 'final' because
- // knowledge about their implementation is built into this
- // class -- for both integrity and performance.
- //
-
- /**
- * Reduces space utilization for this node.
- */
- public void compact()
- {
- if (listeners != null && listeners.length != nListeners)
- {
- if (nListeners == 0)
- {
- listeners = null;
- }
- else
- {
- ListenerRecord[] l = new ListenerRecord[nListeners];
- System.arraycopy(listeners, 0, l, 0, nListeners);
- listeners = l;
- }
- }
- }
-
- /**
- * Constructs a node and associates it with its owner. Only
- * Document and DocumentType nodes may be created with no owner,
- * and DocumentType nodes get an owner as soon as they are
- * associated with a document.
- */
- protected DomNode(short nodeType, DomDocument owner)
- {
- this.nodeType = nodeType;
-
- if (owner == null)
- {
- // DOM calls never go down this path
- if (nodeType != DOCUMENT_NODE && nodeType != DOCUMENT_TYPE_NODE)
- {
- throw new IllegalArgumentException ("no owner!");
- }
- }
- this.owner = owner;
- }
-
-
- /**
- * <b>DOM L1</b>
- * Returns null; Element subclasses must override this method.
- */
- public NamedNodeMap getAttributes()
- {
- return null;
- }
-
- /**
- * <b>DOM L2></b>
- * Returns true iff this is an element node with attributes.
- */
- public boolean hasAttributes()
- {
- return false;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns a list, possibly empty, of the children of this node.
- * In this implementation, to conserve memory, nodes are the same
- * as their list of children. This can have ramifications for
- * subclasses, which may need to provide their own getLength method
- * for reasons unrelated to the NodeList method of the same name.
- */
- public NodeList getChildNodes()
- {
- return this;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the first child of this node, or null if there are none.
- */
- public Node getFirstChild()
- {
- return first;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the last child of this node, or null if there are none.
- */
- public Node getLastChild()
- {
- return last;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns true if this node has children.
- */
- public boolean hasChildNodes()
- {
- return length != 0;
- }
-
-
- /**
- * Exposes the internal "readonly" flag. In DOM, children of
- * entities and entity references are readonly, as are the
- * objects associated with DocumentType objets.
- */
- public final boolean isReadonly()
- {
- return readonly;
- }
-
- /**
- * Sets the internal "readonly" flag so this subtree can't be changed.
- * Subclasses need to override this method for any associated content
- * that's not a child node, such as an element's attributes or the
- * (few) declarations associated with a DocumentType.
- */
- public void makeReadonly()
- {
- readonly = true;
- for (DomNode child = first; child != null; child = child.next)
- {
- child.makeReadonly();
- }
- }
-
- /**
- * Used to adopt a node to a new document.
- */
- void setOwner(DomDocument doc)
- {
- this.owner = doc;
- for (DomNode ctx = first; ctx != null; ctx = ctx.next)
- {
- ctx.setOwner(doc);
- }
- }
-
- // just checks the node for inclusion -- may be called many
- // times (docfrag) before anything is allowed to change
- private void checkMisc(DomNode child)
- {
- if (readonly && !owner.building)
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
- null, this, 0);
- }
- for (DomNode ctx = this; ctx != null; ctx = ctx.parent)
- {
- if (child == ctx)
- {
- throw new DomDOMException(DOMException.HIERARCHY_REQUEST_ERR,
- "can't make ancestor into a child",
- this, 0);
- }
- }
-
- DomDocument owner = (nodeType == DOCUMENT_NODE) ? (DomDocument) this :
- this.owner;
- DomDocument childOwner = child.owner;
- short childNodeType = child.nodeType;
-
- if (childOwner != owner)
- {
- // new in DOM L2, this case -- patch it up later, in reparent()
- if (!(childNodeType == DOCUMENT_TYPE_NODE && childOwner == null))
- {
- throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR,
- null, child, 0);
- }
- }
-
- // enforce various structural constraints
- switch (nodeType)
- {
- case DOCUMENT_NODE:
- switch (childNodeType)
- {
- case ELEMENT_NODE:
- case PROCESSING_INSTRUCTION_NODE:
- case COMMENT_NODE:
- case DOCUMENT_TYPE_NODE:
- return;
- }
- break;
-
- case ATTRIBUTE_NODE:
- switch (childNodeType)
- {
- case TEXT_NODE:
- case ENTITY_REFERENCE_NODE:
- return;
- }
- break;
-
- case DOCUMENT_FRAGMENT_NODE:
- case ENTITY_REFERENCE_NODE:
- case ELEMENT_NODE:
- case ENTITY_NODE:
- switch (childNodeType)
- {
- case ELEMENT_NODE:
- case TEXT_NODE:
- case COMMENT_NODE:
- case PROCESSING_INSTRUCTION_NODE:
- case CDATA_SECTION_NODE:
- case ENTITY_REFERENCE_NODE:
- return;
- }
- break;
- }
- if (owner.checkingWellformedness)
- {
- throw new DomDOMException(DOMException.HIERARCHY_REQUEST_ERR,
- "can't append " +
- nodeTypeToString(childNodeType) +
- " to node of type " +
- nodeTypeToString(nodeType),
- this, 0);
- }
- }
-
- // Here's hoping a good optimizer will detect the case when the
- // next several methods are never called, and won't allocate
- // object code space of any kind. (Case: not reporting any
- // mutation events. We can also remove some static variables
- // listed above.)
-
- private void insertionEvent(DomEvent.DomMutationEvent event,
- DomNode target)
- {
- if (owner == null || owner.building)
- {
- return;
- }
- boolean doFree = false;
-
- if (event == null)
- {
- event = getMutationEvent();
- }
- if (event != null)
- {
- doFree = true;
- }
- else
- {
- event = new DomEvent.DomMutationEvent(null);
- }
- event.initMutationEvent("DOMNodeInserted",
- true /* bubbles */, false /* nocancel */,
- this /* related */, null, null, null, (short) 0);
- target.dispatchEvent(event);
-
- // XXX should really visit every descendant of 'target'
- // and sent a DOMNodeInsertedIntoDocument event to it...
- // bleech, there's no way to keep that acceptably fast.
-
- if (doFree)
- {
- event.target = null;
- event.relatedNode = null;
- event.currentNode = null;
- eventDataLock = false;
- } // else we created work for the GC
- }
-
- private void removalEvent(DomEvent.DomMutationEvent event,
- DomNode target)
- {
- if (owner == null || owner.building)
- {
- return;
- }
- boolean doFree = false;
-
- if (event == null)
- {
- event = getMutationEvent();
- }
- if (event != null)
- {
- doFree = true;
- }
- else
- {
- event = new DomEvent.DomMutationEvent(null);
- }
- event.initMutationEvent("DOMNodeRemoved",
- true /* bubbles */, false /* nocancel */,
- this /* related */, null, null, null, (short) 0);
- target.dispatchEvent(event);
-
- // XXX should really visit every descendant of 'target'
- // and sent a DOMNodeRemovedFromDocument event to it...
- // bleech, there's no way to keep that acceptably fast.
-
- event.target = null;
- event.relatedNode = null;
- event.currentNode = null;
- if (doFree)
- {
- eventDataLock = false;
- }
- // else we created more work for the GC
- }
-
- //
- // Avoid creating lots of memory management work, by using a simple
- // allocation strategy for the mutation event objects that get used
- // at least once per tree modification. We can't use stack allocation,
- // so we do the next simplest thing -- more or less, static allocation.
- // Concurrent notifications should be rare, anyway.
- //
- // Returns the preallocated object, which needs to be carefully freed,
- // or null to indicate the caller needs to allocate their own.
- //
- static private DomEvent.DomMutationEvent getMutationEvent()
- {
- synchronized (lockNode)
- {
- if (eventDataLock)
- {
- return null;
- }
- eventDataLock = true;
- return mutationEvent;
- }
- }
-
- // NOTE: this is manually inlined in the insertion
- // and removal event methods above; change in sync.
- static private void freeMutationEvent()
- {
- // clear fields to enable GC
- mutationEvent.clear();
- eventDataLock = false;
- }
-
- void setDepth(int depth)
- {
- this.depth = depth;
- for (DomNode ctx = first; ctx != null; ctx = ctx.next)
- {
- ctx.setDepth(depth + 1);
- }
- }
-
- /**
- * <b>DOM L1</b>
- * Appends the specified node to this node's list of children.
- * Document subclasses must override this to enforce the restrictions
- * that there be only one element and document type child.
- *
- * <p> Causes a DOMNodeInserted mutation event to be reported.
- * Will first cause a DOMNodeRemoved event to be reported if the
- * parameter already has a parent. If the new child is a document
- * fragment node, both events will be reported for each child of
- * the fragment; the order in which children are removed and
- * inserted is implementation-specific.
- *
- * <p> If this DOM has been compiled without mutation event support,
- * these events will not be reported.
- */
- public Node appendChild(Node newChild)
- {
- try
- {
- DomNode child = (DomNode) newChild;
-
- if (child.nodeType == DOCUMENT_FRAGMENT_NODE)
- {
- // Append all nodes in the fragment to this node
- for (DomNode ctx = child.first; ctx != null; ctx = ctx.next)
- {
- checkMisc(ctx);
- }
- for (DomNode ctx = child.first; ctx != null; )
- {
- DomNode ctxNext = ctx.next;
- appendChild(ctx);
- ctx = ctxNext;
- }
- }
- else
- {
- checkMisc(child);
- if (child.parent != null)
- {
- child.parent.removeChild(child);
- }
- child.parent = this;
- child.index = length++;
- child.setDepth(depth + 1);
- child.next = null;
- if (last == null)
- {
- first = child;
- child.previous = null;
- }
- else
- {
- last.next = child;
- child.previous = last;
- }
- last = child;
-
- if (reportMutations)
- {
- insertionEvent(null, child);
- }
- }
-
- return child;
- }
- catch (ClassCastException e)
- {
- throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR,
- null, newChild, 0);
- }
- }
-
- /**
- * <b>DOM L1</b>
- * Inserts the specified node in this node's list of children.
- * Document subclasses must override this to enforce the restrictions
- * that there be only one element and document type child.
- *
- * <p> Causes a DOMNodeInserted mutation event to be reported. Will
- * first cause a DOMNodeRemoved event to be reported if the newChild
- * parameter already has a parent. If the new child is a document
- * fragment node, both events will be reported for each child of
- * the fragment; the order in which children are removed and inserted
- * is implementation-specific.
- *
- * <p> If this DOM has been compiled without mutation event support,
- * these events will not be reported.
- */
- public Node insertBefore(Node newChild, Node refChild)
- {
- if (refChild == null)
- {
- return appendChild(newChild);
- }
-
- try
- {
- DomNode child = (DomNode) newChild;
- DomNode ref = (DomNode) refChild;
-
- if (child.nodeType == DOCUMENT_FRAGMENT_NODE)
- {
- // Append all nodes in the fragment to this node
- for (DomNode ctx = child.first; ctx != null; ctx = ctx.next)
- {
- checkMisc(ctx);
- }
- for (DomNode ctx = child.first; ctx != null; )
- {
- DomNode ctxNext = ctx.next;
- insertBefore(ctx, ref);
- ctx = ctxNext;
- }
- }
- else
- {
- checkMisc(child);
- if (ref == null || ref.parent != this)
- {
- throw new DomDOMException(DOMException.NOT_FOUND_ERR,
- null, ref, 0);
- }
- if (ref == child)
- {
- throw new DomDOMException(DOMException.HIERARCHY_REQUEST_ERR,
- "can't insert node before itself",
- ref, 0);
- }
-
- if (child.parent != null)
- {
- child.parent.removeChild(child);
- }
- child.parent = this;
- int i = ref.index;
- child.setDepth(depth + 1);
- child.next = ref;
- if (ref.previous != null)
- {
- ref.previous.next = child;
- }
- child.previous = ref.previous;
- ref.previous = child;
- if (first == ref)
- {
- first = child;
- }
- // index renumbering
- for (DomNode ctx = child; ctx != null; ctx = ctx.next)
- {
- ctx.index = i++;
- }
-
- if (reportMutations)
- {
- insertionEvent(null, child);
- }
- }
-
- return child;
- }
- catch (ClassCastException e)
- {
- throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR,
- null, newChild, 0);
- }
- }
-
- /**
- * <b>DOM L1</b>
- * Replaces the specified node in this node's list of children.
- * Document subclasses must override this to test the restrictions
- * that there be only one element and document type child.
- *
- * <p> Causes DOMNodeRemoved and DOMNodeInserted mutation event to be
- * reported. Will cause another DOMNodeRemoved event to be reported if
- * the newChild parameter already has a parent. These events may be
- * delivered in any order, except that the event reporting removal
- * from such an existing parent will always be delivered before the
- * event reporting its re-insertion as a child of some other node.
- * The order in which children are removed and inserted is implementation
- * specific.
- *
- * <p> If your application needs to depend on the in which those removal
- * and insertion events are delivered, don't use this API. Instead,
- * invoke the removeChild and insertBefore methods directly, to guarantee
- * a specific delivery order. Similarly, don't use document fragments,
- * Otherwise your application code may not work on a DOM which implements
- * this method differently.
- *
- * <p> If this DOM has been compiled without mutation event support,
- * these events will not be reported.
- */
- public Node replaceChild(Node newChild, Node refChild)
- {
- try
- {
- DomNode child = (DomNode) newChild;
- DomNode ref = (DomNode) refChild;
-
- DomEvent.DomMutationEvent event = getMutationEvent();
- boolean doFree = (event != null);
-
- if (child.nodeType == DOCUMENT_FRAGMENT_NODE)
- {
- // Append all nodes in the fragment to this node
- for (DomNode ctx = child.first; ctx != null; ctx = ctx.next)
- {
- checkMisc(ctx);
- }
- if (ref == null || ref.parent != this)
- {
- throw new DomDOMException(DOMException.NOT_FOUND_ERR,
- null, ref, 0);
- }
-
- if (reportMutations)
- {
- removalEvent(event, ref);
- }
- length--;
- length += child.length;
-
- if (child.length == 0)
- {
- // Removal
- if (ref.previous != null)
- {
- ref.previous.next = ref.next;
- }
- if (ref.next != null)
- {
- ref.next.previous = ref.previous;
- }
- if (first == ref)
- {
- first = ref.next;
- }
- if (last == ref)
- {
- last = ref.previous;
- }
- }
- else
- {
- int i = ref.index;
- for (DomNode ctx = child.first; ctx != null; ctx = ctx.next)
- {
- // Insertion
- ctx.parent = this;
- ctx.index = i++;
- ctx.setDepth(ref.depth);
- if (ctx == child.first)
- {
- ctx.previous = ref.previous;
- }
- if (ctx == child.last)
- {
- ctx.next = ref.next;
- }
- }
- if (first == ref)
- {
- first = child.first;
- }
- if (last == ref)
- {
- last = child.last;
- }
- }
- }
- else
- {
- checkMisc(child);
- if (ref == null || ref.parent != this)
- {
- throw new DomDOMException(DOMException.NOT_FOUND_ERR,
- null, ref, 0);
- }
-
- if (reportMutations)
- {
- removalEvent(event, ref);
- }
-
- if (child.parent != null)
- {
- child.parent.removeChild(child);
- }
- child.parent = this;
- child.index = ref.index;
- child.setDepth(ref.depth);
- if (ref.previous != null)
- {
- ref.previous.next = child;
- }
- child.previous = ref.previous;
- if (ref.next != null)
- {
- ref.next.previous = child;
- }
- child.next = ref.next;
- if (first == ref)
- {
- first = child;
- }
- if (last == ref)
- {
- last = child;
- }
-
- if (reportMutations)
- {
- insertionEvent(event, child);
- }
- if (doFree)
- {
- freeMutationEvent();
- }
- }
- ref.parent = null;
- ref.index = 0;
- ref.setDepth(0);
- ref.previous = null;
- ref.next = null;
-
- return ref;
- }
- catch (ClassCastException e)
- {
- throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR,
- null, newChild, 0);
- }
- }
-
- /**
- * <b>DOM L1</b>
- * Removes the specified child from this node's list of children,
- * or else reports an exception.
- *
- * <p> Causes a DOMNodeRemoved mutation event to be reported.
- *
- * <p> If this DOM has been compiled without mutation event support,
- * these events will not be reported.
- */
- public Node removeChild(Node refChild)
- {
- try
- {
- DomNode ref = (DomNode) refChild;
-
- if (ref == null || ref.parent != this)
- {
- throw new DomDOMException(DOMException.NOT_FOUND_ERR,
- null, ref, 0);
- }
- if (readonly && !owner.building)
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR,
- null, this, 0);
- }
-
- for (DomNode child = first; child != null; child = child.next)
- {
- if (child == ref)
- {
- if (reportMutations)
- {
- removalEvent(null, child);
- }
-
- length--;
- if (ref.previous != null)
- {
- ref.previous.next = ref.next;
- }
- if (ref.next != null)
- {
- ref.next.previous = ref.previous;
- }
- if (first == ref)
- {
- first = ref.next;
- }
- if (last == ref)
- {
- last = ref.previous;
- }
- // renumber indices
- int i = 0;
- for (DomNode ctx = first; ctx != null; ctx = ctx.next)
- {
- ctx.index = i++;
- }
- ref.parent = null;
- ref.setDepth(0);
- ref.index = 0;
- ref.previous = null;
- ref.next = null;
-
- return ref;
- }
- }
- throw new DomDOMException(DOMException.NOT_FOUND_ERR,
- "that's no child of mine", refChild, 0);
- }
- catch (ClassCastException e)
- {
- throw new DomDOMException(DOMException.WRONG_DOCUMENT_ERR,
- null, refChild, 0);
- }
- }
-
- /**
- * <b>DOM L1 (NodeList)</b>
- * Returns the item with the specified index in this NodeList,
- * else null.
- */
- public Node item(int index)
- {
- DomNode child = first;
- int count = 0;
- while (child != null && count < index)
- {
- child = child.next;
- count++;
- }
- return child;
- }
-
- /**
- * <b>DOM L1 (NodeList)</b>
- * Returns the number of elements in this NodeList.
- * (Note that many interfaces have a "Length" property, not just
- * NodeList, and if a node subtype must implement one of those,
- * it will also need to override getChildNodes.)
- */
- public int getLength()
- {
- return length;
- }
-
- /**
- * Minimize extra space consumed by this node to hold children and event
- * listeners.
- */
- public void trimToSize()
- {
- if (listeners != null && listeners.length != nListeners)
- {
- ListenerRecord[] newKids = new ListenerRecord[length];
- System.arraycopy(listeners, 0, newKids, 0, nListeners);
- listeners = newKids;
- }
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the previous sibling, if one is known.
- */
- public Node getNextSibling()
- {
- return next;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the previous sibling, if one is known.
- */
- public Node getPreviousSibling()
- {
- return previous;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the parent node, if one is known.
- */
- public Node getParentNode()
- {
- return parent;
- }
-
- /**
- * <b>DOM L2</b>
- * Consults the DOM implementation to determine if the requested
- * feature is supported. DocumentType subclasses must override
- * this method, and associate themselves directly with the
- * DOMImplementation node used. (This method relies on being able
- * to access the DOMImplementation from the owner document, but
- * DocumentType nodes can be created without an owner.)
- */
- public boolean isSupported(String feature, String version)
- {
- Document doc = owner;
- DOMImplementation impl = null;
-
- if (doc == null && nodeType == DOCUMENT_NODE)
- {
- doc = (Document) this;
- }
-
- if (doc == null)
- {
- // possible for DocumentType
- throw new IllegalStateException ("unbound ownerDocument");
- }
-
- impl = doc.getImplementation();
- return impl.hasFeature(feature, version);
- }
-
- /**
- * <b>DOM L1 (modified in L2)</b>
- * Returns the owner document. This is only null for Document nodes,
- * and (new in L2) for DocumentType nodes which have not yet been
- * associated with the rest of their document.
- */
- final public Document getOwnerDocument()
- {
- return owner;
- }
-
- /**
- * <b>DOM L1</b>
- * Does nothing; this must be overridden (along with the
- * getNodeValue method) for nodes with a non-null defined value.
- */
- public void setNodeValue(String value)
- {
- }
-
- /**
- * <b>DOM L1</b>
- * Returns null; this must be overridden for nodes types with
- * a defined value, along with the setNodeValue method.
- */
- public String getNodeValue()
- {
- return null;
- }
-
- /** This forces GCJ compatibility.
- * Without this method GCJ is unable to compile to byte code.
- */
- public final short getNodeType()
- {
- return nodeType;
- }
-
- /** This forces GCJ compatibility.
- * Without this method GCJ seems unable to natively compile GNUJAXP.
- */
- public abstract String getNodeName();
-
- /**
- * <b>DOM L2</b>
- * Does nothing; this must be overridden (along with the
- * getPrefix method) for element and attribute nodes.
- */
- public void setPrefix(String prefix)
- {
- }
-
- /**
- * <b>DOM L2</b>
- * Returns null; this must be overridden for element and
- * attribute nodes.
- */
- public String getPrefix()
- {
- return null;
- }
-
- /**
- * <b>DOM L2</b>
- * Returns null; this must be overridden for element and
- * attribute nodes.
- */
- public String getNamespaceURI()
- {
- return null;
- }
-
- /**
- * <b>DOM L2</b>
- * Returns the node name; this must be overridden for element and
- * attribute nodes.
- */
- public String getLocalName()
- {
- return null;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns a clone of this node which optionally includes cloned
- * versions of child nodes. Clones are always mutable, except for
- * entity reference nodes.
- */
- public Node cloneNode(boolean deep)
- {
- DomNode node = (DomNode) clone();
-
- if (deep)
- {
- DomDocument doc = (nodeType == DOCUMENT_NODE) ?
- (DomDocument) node : node.owner;
- for (DomNode ctx = first; ctx != null; ctx = ctx.next)
- {
- DomNode newChild = (DomNode) ctx.cloneNode(deep);
- newChild.setOwner(doc);
- node.appendChild(newChild);
- }
- }
-
- if (nodeType == ENTITY_REFERENCE_NODE)
- {
- node.makeReadonly();
- }
- notifyUserDataHandlers(UserDataHandler.NODE_CLONED, this, node);
- return node;
- }
-
- void notifyUserDataHandlers(short op, Node src, Node dst)
- {
- if (userDataHandlers != null)
- {
- for (Iterator i = userDataHandlers.entrySet().iterator(); i.hasNext(); )
- {
- Map.Entry entry = (Map.Entry) i.next();
- String key = (String) entry.getKey();
- UserDataHandler handler = (UserDataHandler) entry.getValue();
- Object data = userData.get(key);
- handler.handle(op, key, data, src, dst);
- }
- }
- }
-
- /**
- * Clones this node; roughly equivalent to cloneNode(false).
- * Element subclasses must provide a new implementation which
- * invokes this method to handle the basics, and then arranges
- * to clone any element attributes directly. Attribute subclasses
- * must make similar arrangements, ensuring that existing ties to
- * elements are broken by cloning.
- */
- public Object clone()
- {
- try
- {
- DomNode node = (DomNode) super.clone();
-
- node.parent = null;
- node.depth = 0;
- node.index = 0;
- node.length = 0;
- node.first = null;
- node.last = null;
- node.previous = null;
- node.next = null;
-
- node.readonly = false;
- node.listeners = null;
- node.nListeners = 0;
- return node;
-
- }
- catch (CloneNotSupportedException x)
- {
- throw new Error("clone didn't work");
- }
- }
-
- // the elements-by-tagname stuff is needed for both
- // elements and documents ... this is in lieu of a
- // common base class between Node and NodeNS.
-
- /**
- * <b>DOM L1</b>
- * Creates a NodeList giving array-style access to elements with
- * the specified name. Access is fastest if indices change by
- * small values, and the DOM is not modified.
- */
- public NodeList getElementsByTagName(String tag)
- {
- return new ShadowList(null, tag);
- }
-
- /**
- * <b>DOM L2</b>
- * Creates a NodeList giving array-style access to elements with
- * the specified namespace and local name. Access is fastest if
- * indices change by small values, and the DOM is not modified.
- */
- public NodeList getElementsByTagNameNS(String namespace, String local)
- {
- return new ShadowList(namespace, local);
- }
-
-
- //
- // This shadow class is GC-able even when the live list it shadows
- // can't be, because of event registration hookups. Its finalizer
- // makes that live list become GC-able.
- //
- final class ShadowList
- implements NodeList
- {
-
- private LiveNodeList liveList;
-
- ShadowList(String ns, String local)
- {
- liveList = new LiveNodeList(ns, local);
- }
-
- public void finalize()
- {
- liveList.detach();
- liveList = null;
- }
-
- public Node item(int index)
- {
- return liveList.item(index);
- }
-
- public int getLength()
- {
- return liveList.getLength();
- }
- }
-
- final class LiveNodeList
- implements NodeList, EventListener, NodeFilter
- {
-
- private final boolean matchAnyURI;
- private final boolean matchAnyName;
- private final String elementURI;
- private final String elementName;
-
- private DomIterator current;
- private int lastIndex;
-
- LiveNodeList(String uri, String name)
- {
- elementURI = uri;
- elementName = name;
- matchAnyURI = "*".equals(uri);
- matchAnyName = "*".equals(name);
-
- DomNode.this.addEventListener("DOMNodeInserted", this, true);
- DomNode.this.addEventListener("DOMNodeRemoved", this, true);
- }
-
- void detach()
- {
- current.detach();
- current = null;
-
- DomNode.this.removeEventListener("DOMNodeInserted", this, true);
- DomNode.this.removeEventListener("DOMNodeRemoved", this, true);
- }
-
- public short acceptNode(Node element)
- {
- if (element == DomNode.this)
- {
- return FILTER_SKIP;
- }
-
- // use namespace-aware matching ...
- if (elementURI != null)
- {
- if (!(matchAnyURI
- || elementURI.equals(element.getNamespaceURI())))
- {
- return FILTER_SKIP;
- }
- if (!(matchAnyName
- || elementName.equals(element.getLocalName())))
- {
- return FILTER_SKIP;
- }
-
- // ... or qName-based kind.
- }
- else
- {
- if (!(matchAnyName
- || elementName.equals(element.getNodeName())))
- {
- return FILTER_SKIP;
- }
- }
- return FILTER_ACCEPT;
- }
-
- private DomIterator createIterator()
- {
- return new DomIterator(DomNode.this,
- NodeFilter.SHOW_ELEMENT,
- this, /* filter */
- true /* expand entity refs */
- );
- }
-
- public void handleEvent(Event e)
- {
- MutationEvent mutation = (MutationEvent) e;
- Node related = mutation.getRelatedNode();
-
- // XXX if it's got children ... check all kids too, they
- // will invalidate our saved index
-
- if (related.getNodeType() != Node.ELEMENT_NODE ||
- related.getNodeName() != elementName ||
- related.getNamespaceURI() != elementURI)
- {
- return;
- }
-
- current = null;
- }
-
- public Node item(int index)
- {
- if (current == null)
- {
- current = createIterator();
- lastIndex = -1;
- }
-
- // last node or before? go backwards
- if (index <= lastIndex) {
- while (index != lastIndex) {
- current.previousNode ();
- lastIndex--;
- }
- Node ret = current.previousNode ();
- current = null;
- return ret;
- }
-
- // somewhere after last node
- while (++lastIndex != index)
- current.nextNode ();
- Node ret = current.nextNode ();
- current = null;
- return ret;
- }
-
- public int getLength()
- {
- int retval = 0;
- NodeIterator iter = createIterator();
-
- while (iter.nextNode() != null)
- {
- retval++;
- }
- current = null;
- return retval;
- }
-
- }
-
- //
- // EventTarget support
- //
- static final class ListenerRecord
- {
-
- String type;
- EventListener listener;
- boolean useCapture;
-
- // XXX use JDK 1.2 java.lang.ref.WeakReference to listener,
- // and we can both get rid of "shadow" classes and remove
- // the need for applications to apply similar trix ... but
- // JDK 1.2 support isn't generally available yet
-
- ListenerRecord(String type, EventListener listener, boolean useCapture)
- {
- this.type = type.intern();
- this.listener = listener;
- this.useCapture = useCapture;
- }
-
- boolean equals(ListenerRecord rec)
- {
- return listener == rec.listener
- && useCapture == rec.useCapture
- && type == rec.type;
- }
-
- }
-
- /**
- * <b>DOM L2 (Events)</b>
- * Returns an instance of the specified type of event object.
- * Understands about DOM Mutation, HTML, and UI events.
- *
- * <p>If the name of the event type begins with "USER-", then an object
- * implementing the "Event" class will be returned; this provides a
- * limited facility for application-defined events to use the DOM event
- * infrastructure. Alternatively, use one of the standard DOM event
- * classes and initialize it using use such a "USER-" event type name;
- * or defin, instantiate, and initialize an application-specific subclass
- * of DomEvent and pass that to dispatchEvent().
- *
- * @param eventType Identifies the particular DOM feature module
- * defining the type of event, such as "MutationEvents".
- * <em>The event "name" is a different kind of "type".</em>
- */
- public Event createEvent(String eventType)
- {
- eventType = eventType.toLowerCase();
-
- if ("mutationevents".equals(eventType))
- {
- return new DomEvent.DomMutationEvent(null);
- }
-
- if ("htmlevents".equals(eventType)
- || "events".equals(eventType)
- || "user-events".equals(eventType))
- {
- return new DomEvent(null);
- }
-
- if ("uievents".equals(eventType))
- {
- return new DomEvent.DomUIEvent(null);
- }
-
- // mouse events
-
- throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR,
- eventType, null, 0);
- }
-
- /**
- * <b>DOM L2 (Events)</b>
- * Registers an event listener's interest in a class of events.
- */
- public final void addEventListener(String type,
- EventListener listener,
- boolean useCapture)
- {
- if (listeners == null)
- {
- listeners = new ListenerRecord[1];
- }
- else if (nListeners == listeners.length)
- {
- ListenerRecord[] newListeners =
- new ListenerRecord[listeners.length + NKIDS_DELTA];
- System.arraycopy(listeners, 0, newListeners, 0, nListeners);
- listeners = newListeners;
- }
-
- // prune duplicates
- ListenerRecord record;
-
- record = new ListenerRecord(type, listener, useCapture);
- for (int i = 0; i < nListeners; i++)
- {
- if (record.equals(listeners[i]))
- {
- return;
- }
- }
- listeners [nListeners++] = record;
- }
-
- // XXX this exception should be discarded from DOM
-
- // this class can be instantiated, unlike the one in the spec
- static final class DomEventException
- extends EventException
- {
-
- DomEventException()
- {
- super(UNSPECIFIED_EVENT_TYPE_ERR, "unspecified event type");
- }
-
- }
-
- /**
- * <b>DOM L2 (Events)</b>
- * Delivers an event to all relevant listeners, returning true if the
- * caller should perform their default action. Note that the event
- * must have been provided by the createEvent() method on this
- * class, else it can't be dispatched.
- *
- * @see #createEvent
- *
- * @exception NullPointerException When a null event is passed.
- * @exception ClassCastException When the event wasn't provided by
- * the createEvent method, or otherwise isn't a DomEvent.
- * @exception EventException If the event type wasn't specified
- */
- public final boolean dispatchEvent(Event event)
- throws EventException
- {
- DomEvent e = (DomEvent) event;
- DomNode[] ancestors = null;
- int ancestorMax = 0;
- boolean haveDispatchDataLock = false;
-
- if (e.type == null)
- {
- throw new DomEventException();
- }
-
- e.doDefault = true;
- e.target = this;
-
- //
- // Typical case: one nonrecursive dispatchEvent call at a time
- // for this class. If that's our case, we can avoid allocating
- // garbage, which is overall a big win. Even with advanced GCs
- // that deal well with short-lived garbage, and wayfast allocators,
- // it still helps.
- //
- // Remember -- EVERY mutation goes though here at least once.
- //
- // When populating a DOM tree, trying to send mutation events is
- // the primary cost; this dominates the critical path.
- //
- try
- {
- DomNode current;
- int index;
- boolean haveAncestorRegistrations = false;
- ListenerRecord[] notificationSet;
- int ancestorLen;
-
- synchronized (lockNode)
- {
- if (!dispatchDataLock)
- {
- haveDispatchDataLock = dispatchDataLock = true;
- notificationSet = DomNode.notificationSet;
- ancestors = DomNode.ancestors;
- }
- else
- {
- notificationSet = new ListenerRecord[NOTIFICATIONS_INIT];
- ancestors = new DomNode[ANCESTORS_INIT];
- }
- ancestorLen = ancestors.length;
- }
-
- // XXX autogrow ancestors ... based on statistics
-
- // Climb to the top of this subtree and handle capture, letting
- // each node (from the top down) capture until one stops it or
- // until we get to this one.
-
- for (index = 0, current = parent;
- current != null && index < ancestorLen;
- index++, current = current.parent)
- {
- if (current.nListeners != 0)
- {
- haveAncestorRegistrations = true;
- }
- ancestors [index] = current;
- }
- if (current != null)
- {
- throw new RuntimeException("dispatchEvent capture stack size");
- }
-
- ancestorMax = index;
- e.stop = false;
-
- if (haveAncestorRegistrations)
- {
- e.eventPhase = Event.CAPTURING_PHASE;
- while (!e.stop && index-- > 0)
- {
- current = ancestors [index];
- if (current.nListeners != 0)
- {
- notifyNode(e, current, true, notificationSet);
- }
- }
- }
-
- // Always deliver events to the target node (this)
- // unless stopPropagation was called. If we saw
- // no registrations yet (typical!), we never will.
- if (!e.stop && nListeners != 0)
- {
- e.eventPhase = Event.AT_TARGET;
- notifyNode (e, this, false, notificationSet);
- }
- else if (!haveAncestorRegistrations)
- {
- e.stop = true;
- }
-
- // If the event bubbles and propagation wasn't halted,
- // walk back up the ancestor list. Stop bubbling when
- // any bubbled event handler stops it.
-
- if (!e.stop && e.bubbles)
- {
- e.eventPhase = Event.BUBBLING_PHASE;
- for (index = 0;
- !e.stop
- && index < ancestorMax
- && (current = ancestors[index]) != null;
- index++)
- {
- if (current.nListeners != 0)
- {
- notifyNode(e, current, false, notificationSet);
- }
- }
- }
- e.eventPhase = 0;
-
- // Caller chooses whether to perform the default
- // action based on return from this method.
- return e.doDefault;
-
- }
- finally
- {
- if (haveDispatchDataLock)
- {
- // synchronize to force write ordering
- synchronized (lockNode)
- {
- // null out refs to ensure they'll be GC'd
- for (int i = 0; i < ancestorMax; i++)
- {
- ancestors [i] = null;
- }
- // notificationSet handled by notifyNode
-
- dispatchDataLock = false;
- }
- }
- }
- }
-
- private void notifyNode(DomEvent e,
- DomNode current,
- boolean capture,
- ListenerRecord[] notificationSet)
- {
- int count = 0;
-
- // do any of this set of listeners get notified?
- for (int i = 0; i < current.nListeners; i++)
- {
- ListenerRecord rec = current.listeners[i];
-
- if (rec.useCapture != capture)
- {
- continue;
- }
- if (!e.type.equals (rec.type))
- {
- continue;
- }
- if (count >= notificationSet.length)
- {
- // very simple growth algorithm
- int len = Math.max(notificationSet.length, 1);
- ListenerRecord[] tmp = new ListenerRecord[len * 2];
- System.arraycopy(notificationSet, 0, tmp, 0,
- notificationSet.length);
- notificationSet = tmp;
- }
- notificationSet[count++] = rec;
- }
-
- // Notify just those listeners
- e.currentNode = current;
- for (int i = 0; i < count; i++)
- {
- try
- {
- // Late in the DOM CR process (3rd or 4th CR?) the
- // removeEventListener spec became asymmetric with respect
- // to addEventListener ... effect is now immediate.
- for (int j = 0; j < current.nListeners; j++)
- {
- if (current.listeners[j].equals(notificationSet[i]))
- {
- notificationSet[i].listener.handleEvent(e);
- break;
- }
- }
-
- }
- catch (Exception x)
- {
- // ignore all exceptions
- }
- notificationSet[i] = null; // free for GC
- }
- }
-
- /**
- * <b>DOM L2 (Events)</b>
- * Unregisters an event listener.
- */
- public final void removeEventListener(String type,
- EventListener listener,
- boolean useCapture)
- {
- for (int i = 0; i < nListeners; i++)
- {
- if (listeners[i].listener != listener)
- {
- continue;
- }
- if (listeners[i].useCapture != useCapture)
- {
- continue;
- }
- if (!listeners[i].type.equals(type))
- {
- continue;
- }
-
- if (nListeners == 1)
- {
- listeners = null;
- nListeners = 0;
- }
- else
- {
- for (int j = i + 1; j < nListeners; j++)
- {
- listeners[i++] = listeners[j++];
- }
- listeners[--nListeners] = null;
- }
- break;
- }
- // no exceptions reported
- }
-
- /**
- * <b>DOM L1 (relocated in DOM L2)</b>
- * In this node and all contained nodes (including attributes if
- * relevant) merge adjacent text nodes. This is done while ignoring
- * text which happens to use CDATA delimiters).
- */
- public final void normalize()
- {
- // Suspend readonly status
- boolean saved = readonly;
- readonly = false;
- for (DomNode ctx = first; ctx != null; ctx = ctx.next)
- {
- switch (ctx.nodeType)
- {
- case TEXT_NODE:
- while (ctx.next != null && ctx.next.nodeType == TEXT_NODE)
- {
- Text text = (Text) ctx;
- text.appendData(ctx.next.getNodeValue());
- removeChild(ctx.next);
- }
- break;
- case ELEMENT_NODE:
- NamedNodeMap attrs = ctx.getAttributes();
- int len = attrs.getLength();
- for (int i = 0; i < len; i++)
- {
- attrs.item(i).normalize();
- }
- // Fall through
- case DOCUMENT_NODE:
- case DOCUMENT_FRAGMENT_NODE:
- case ATTRIBUTE_NODE:
- case ENTITY_REFERENCE_NODE:
- ctx.normalize();
- break;
- }
- }
- readonly = saved;
- }
-
- /**
- * Returns true iff node types match, and either (a) both nodes have no
- * namespace and their getNodeName() values are the same, or (b) both
- * nodes have the same getNamespaceURI() and same getLocalName() values.
- *
- * <p>Note that notion of a "Per-Element-Type" attribute name scope, as
- * found in a non-normative appendix of the XML Namespaces specification,
- * is not supported here. Your application must implement that notion,
- * typically by not bothering to check nameAndTypeEquals for attributes
- * without namespace URIs unless you already know their elements are
- * nameAndTypeEquals.
- */
- public boolean nameAndTypeEquals(Node other)
- {
- if (other == this)
- {
- return true;
- }
- // node types must match
- if (nodeType != other.getNodeType())
- {
- return false;
- }
-
- // if both have namespaces, do a "full" comparision
- // this is a "global" partition
- String ns1 = this.getNamespaceURI();
- String ns2 = other.getNamespaceURI();
-
- if (ns1 != null && ns2 != null)
- {
- return ns1.equals(ns2) &&
- getLocalName().equals(other.getLocalName());
- }
-
- // if neither has a namespace, this is a "no-namespace" name.
- if (ns1 == null && ns2 == null)
- {
- if (!getNodeName().equals(other.getNodeName()))
- {
- return false;
- }
- // can test the non-normative "per-element-type" scope here.
- // if this is an attribute node and both nodes have been bound
- // to elements (!!), then return the nameAndTypeEquals()
- // comparison of those elements.
- return true;
- }
-
- // otherwise they're unequal: one scoped, one not.
- return false;
- }
-
- // DOM Level 3 methods
-
- public String getBaseURI()
- {
- return (parent != null) ? parent.getBaseURI() : null;
- }
-
- public short compareDocumentPosition(Node other)
- throws DOMException
- {
- return (short) compareTo(other);
- }
-
- /**
- * DOM nodes have a natural ordering: document order.
- */
- public final int compareTo(Object other)
- {
- if (other instanceof DomNode)
- {
- DomNode n1 = this;
- DomNode n2 = (DomNode) other;
- if (n1.owner != n2.owner)
- {
- return 0;
- }
- int d1 = n1.depth, d2 = n2.depth;
- int delta = d1 - d2;
- while (d1 > d2)
- {
- n1 = n1.parent;
- d1--;
- }
- while (d2 > d1)
- {
- n2 = n2.parent;
- d2--;
- }
- int c = compareTo2(n1, n2);
- return (c != 0) ? c : delta;
- }
- return 0;
- }
-
- /**
- * Compare two nodes at the same depth.
- */
- final int compareTo2(DomNode n1, DomNode n2)
- {
- if (n1 == n2 || n1.depth == 0 || n2.depth == 0)
- {
- return 0;
- }
- int c = compareTo2(n1.parent, n2.parent);
- return (c != 0) ? c : n1.index - n2.index;
- }
-
- public final String getTextContent()
- throws DOMException
- {
- return getTextContent(true);
- }
-
- final String getTextContent(boolean topLevel)
- throws DOMException
- {
- switch (nodeType)
- {
- case ELEMENT_NODE:
- case ENTITY_NODE:
- case ENTITY_REFERENCE_NODE:
- case DOCUMENT_FRAGMENT_NODE:
- StringBuffer buffer = new StringBuffer();
- for (DomNode ctx = first; ctx != null; ctx = ctx.next)
- {
- String textContent = ctx.getTextContent(false);
- if (textContent != null)
- {
- buffer.append(textContent);
- }
- }
- return buffer.toString();
- case TEXT_NODE:
- case CDATA_SECTION_NODE:
- if (((Text) this).isElementContentWhitespace())
- {
- return "";
- }
- return getNodeValue();
- case ATTRIBUTE_NODE:
- return getNodeValue();
- case COMMENT_NODE:
- case PROCESSING_INSTRUCTION_NODE:
- return topLevel ? getNodeValue() : "";
- default:
- return null;
- }
- }
-
- public void setTextContent(String textContent)
- throws DOMException
- {
- switch (nodeType)
- {
- case ELEMENT_NODE:
- case ATTRIBUTE_NODE:
- case ENTITY_NODE:
- case ENTITY_REFERENCE_NODE:
- case DOCUMENT_FRAGMENT_NODE:
- for (DomNode ctx = first; ctx != null; )
- {
- DomNode n = ctx.next;
- removeChild(ctx);
- ctx = n;
- }
- if (textContent != null)
- {
- Text text = owner.createTextNode(textContent);
- appendChild(text);
- }
- break;
- case TEXT_NODE:
- case CDATA_SECTION_NODE:
- case COMMENT_NODE:
- case PROCESSING_INSTRUCTION_NODE:
- setNodeValue(textContent);
- break;
- }
- }
-
- public boolean isSameNode(Node other)
- {
- return this == other;
- }
-
- public String lookupPrefix(String namespaceURI)
- {
- return (parent == null || parent == owner) ? null :
- parent.lookupPrefix(namespaceURI);
- }
-
- public boolean isDefaultNamespace(String namespaceURI)
- {
- return (parent == null || parent == owner) ? false :
- parent.isDefaultNamespace(namespaceURI);
- }
-
- public String lookupNamespaceURI(String prefix)
- {
- return (parent == null || parent == owner) ? null :
- parent.lookupNamespaceURI(prefix);
- }
-
- public boolean isEqualNode(Node arg)
- {
- if (this == arg)
- {
- return true;
- }
- if (arg == null)
- {
- return false;
- }
- if (nodeType != arg.getNodeType() ||
- !equal(getNodeName(), arg.getNodeName()) ||
- !equal(getLocalName(), arg.getLocalName()) ||
- !equal(getNamespaceURI(), arg.getNamespaceURI()) ||
- !equal(getPrefix(), arg.getPrefix()) ||
- !equal(getNodeValue(), arg.getNodeValue()))
- {
- return false;
- }
- // Children
- Node argCtx = arg.getFirstChild();
- getFirstChild(); // because of DomAttr lazy children
- for (DomNode ctx = first; ctx != null; ctx = ctx.next)
- {
- if (!ctx.isEqualNode(argCtx))
- {
- return false;
- }
- argCtx = argCtx.getNextSibling();
- }
- if (argCtx != null)
- {
- return false;
- }
-
- // TODO Attr NamedNodeMap
- // TODO DocumentType
- return true;
- }
-
- boolean equal(String arg1, String arg2)
- {
- return ((arg1 == null && arg2 == null) ||
- (arg1 != null && arg1.equals(arg2)));
- }
-
- public Object getFeature(String feature, String version)
- {
- DOMImplementation impl = (nodeType == DOCUMENT_NODE) ?
- ((Document) this).getImplementation() : owner.getImplementation();
- if (impl.hasFeature(feature, version))
- {
- return this;
- }
- return null;
- }
-
- public Object setUserData(String key, Object data, UserDataHandler handler)
- {
- if (userData == null)
- {
- userData = new HashMap();
- }
- if (handler != null)
- {
- if (userDataHandlers == null)
- {
- userDataHandlers = new HashMap();
- }
- userDataHandlers.put(key, handler);
- }
- return userData.put(key, data);
- }
-
- public Object getUserData(String key)
- {
- if (userData == null)
- {
- return null;
- }
- return userData.get(key);
- }
-
- public String toString()
- {
- String nodeName = getNodeName();
- String nodeValue = getNodeValue();
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- if (nodeName != null)
- {
- buf.append(nodeName);
- }
- if (nodeValue != null)
- {
- if (nodeName != null)
- {
- buf.append('=');
- }
- buf.append('\'');
- buf.append(encode(nodeValue));
- buf.append('\'');
- }
- buf.append(']');
- return buf.toString();
- }
-
- String encode(String value)
- {
- StringBuffer buf = null;
- int len = value.length();
- for (int i = 0; i < len; i++)
- {
- char c = value.charAt(i);
- if (c == '\n')
- {
- if (buf == null)
- {
- buf = new StringBuffer(value.substring(0, i));
- }
- buf.append("\\n");
- }
- else if (c == '\r')
- {
- if (buf == null)
- {
- buf = new StringBuffer(value.substring(0, i));
- }
- buf.append("\\r");
- }
- else if (buf != null)
- {
- buf.append(c);
- }
- }
- return (buf != null) ? buf.toString() : value;
- }
-
- String nodeTypeToString(short nodeType)
- {
- switch (nodeType)
- {
- case ELEMENT_NODE:
- return "ELEMENT_NODE";
- case ATTRIBUTE_NODE:
- return "ATTRIBUTE_NODE";
- case TEXT_NODE:
- return "TEXT_NODE";
- case CDATA_SECTION_NODE:
- return "CDATA_SECTION_NODE";
- case DOCUMENT_NODE:
- return "DOCUMENT_NODE";
- case DOCUMENT_TYPE_NODE:
- return "DOCUMENT_TYPE_NODE";
- case COMMENT_NODE:
- return "COMMENT_NODE";
- case PROCESSING_INSTRUCTION_NODE:
- return "PROCESSING_INSTRUCTION_NODE";
- case DOCUMENT_FRAGMENT_NODE:
- return "DOCUMENT_FRAGMENT_NODE";
- case ENTITY_NODE:
- return "ENTITY_NODE";
- case ENTITY_REFERENCE_NODE:
- return "ENTITY_REFERENCE_NODE";
- case NOTATION_NODE:
- return "NOTATION_NODE";
- default:
- return "UNKNOWN";
- }
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomNodeIterator.java b/libjava/gnu/xml/dom/DomNodeIterator.java
deleted file mode 100644
index 6079f7a126a..00000000000
--- a/libjava/gnu/xml/dom/DomNodeIterator.java
+++ /dev/null
@@ -1,327 +0,0 @@
-/* DomNodeIterator.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-package gnu.xml.dom;
-
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Node;
-import org.w3c.dom.traversal.NodeFilter;
-import org.w3c.dom.traversal.NodeIterator;
-import org.w3c.dom.traversal.TreeWalker;
-
-/**
- * Node iterator and tree walker.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomNodeIterator
- implements NodeIterator, TreeWalker
-{
-
- Node root;
- final int whatToShow;
- final NodeFilter filter;
- final boolean entityReferenceExpansion;
- final boolean walk;
- Node current;
-
- public DomNodeIterator(Node root, int whatToShow, NodeFilter filter,
- boolean entityReferenceExpansion, boolean walk)
- {
- if (root == null)
- {
- throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "null root");
- }
- this.root = root;
- this.whatToShow = whatToShow;
- this.filter = filter;
- this.entityReferenceExpansion = entityReferenceExpansion;
- this.walk = walk;
- current = root;
- }
-
- public Node getRoot()
- {
- return root;
- }
-
- public int getWhatToShow()
- {
- return whatToShow;
- }
-
- public NodeFilter getFilter()
- {
- return filter;
- }
-
- public boolean getExpandEntityReferences()
- {
- return entityReferenceExpansion;
- }
-
- public Node nextNode()
- throws DOMException
- {
- if (root == null)
- {
- throw new DOMException(DOMException.INVALID_STATE_ERR, "null root");
- }
- Node ret;
- do
- {
- if (current.equals(root))
- {
- ret = root.getFirstChild();
- }
- else if (walk)
- {
- ret = current.getFirstChild();
- if (ret == null)
- {
- ret = current.getNextSibling();
- }
- if (ret == null)
- {
- Node tmp = current;
- ret = tmp.getParentNode();
- while (!ret.equals(root) && tmp.equals(ret.getLastChild()))
- {
- tmp = ret;
- ret = tmp.getParentNode();
- }
- if (ret.equals(root))
- {
- ret = null;
- }
- else
- {
- ret = ret.getNextSibling();
- }
- }
- }
- else
- {
- ret = current.getNextSibling();
- }
- }
- while (!accept(ret));
- current = (ret == null) ? current : ret;
- return ret;
- }
-
- public Node previousNode()
- throws DOMException
- {
- if (root == null)
- {
- throw new DOMException(DOMException.INVALID_STATE_ERR, "null root");
- }
- Node ret;
- do
- {
- if (current.equals(root))
- {
- ret = current.getLastChild();
- }
- else if (walk)
- {
- ret = current.getLastChild();
- if (ret == null)
- {
- ret = current.getPreviousSibling();
- }
- if (ret == null)
- {
- Node tmp = current;
- ret = tmp.getParentNode();
- while (!ret.equals(root) && tmp.equals(ret.getFirstChild()))
- {
- tmp = ret;
- ret = tmp.getParentNode();
- }
- if (ret.equals(root))
- {
- ret = null;
- }
- else
- {
- ret = ret.getPreviousSibling();
- }
- }
- }
- else
- {
- ret = current.getPreviousSibling();
- }
- }
- while (!accept(ret));
- current = (ret == null) ? current : ret;
- return ret;
- }
-
- public Node getCurrentNode()
- {
- return current;
- }
-
- public void setCurrentNode(Node current)
- throws DOMException
- {
- if (current == null)
- {
- throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "null root");
- }
- this.current = current;
- }
-
- public Node parentNode()
- {
- Node ret = current.getParentNode();
- if (!accept (ret))
- {
- ret = null;
- }
- current = (ret == null) ? current : ret;
- return ret;
- }
-
- public Node firstChild ()
- {
- Node ret = current.getFirstChild();
- while (!accept(ret))
- {
- ret = ret.getNextSibling();
- }
- current = (ret == null) ? current : ret;
- return ret;
- }
-
- public Node lastChild()
- {
- Node ret = current.getLastChild();
- while (!accept(ret))
- {
- ret = ret.getPreviousSibling();
- }
- current = (ret == null) ? current : ret;
- return ret;
- }
-
- public Node previousSibling()
- {
- Node ret = current.getPreviousSibling();
- while (!accept(ret))
- {
- ret = ret.getPreviousSibling();
- }
- current = (ret == null) ? current : ret;
- return ret;
- }
-
- public Node nextSibling()
- {
- Node ret = current.getNextSibling();
- while (!accept(ret))
- {
- ret = ret.getNextSibling();
- }
- current = (ret == null) ? current : ret;
- return ret;
- }
-
- public void detach()
- {
- root = null;
- }
-
- boolean accept(Node node)
- {
- if (node == null)
- {
- return true;
- }
- boolean ret;
- switch (node.getNodeType())
- {
- case Node.ATTRIBUTE_NODE:
- ret = (whatToShow & NodeFilter.SHOW_ATTRIBUTE) != 0;
- break;
- case Node.CDATA_SECTION_NODE:
- ret = (whatToShow & NodeFilter.SHOW_CDATA_SECTION) != 0;
- break;
- case Node.COMMENT_NODE:
- ret = (whatToShow & NodeFilter.SHOW_COMMENT) != 0;
- break;
- case Node.DOCUMENT_NODE:
- ret = (whatToShow & NodeFilter.SHOW_DOCUMENT) != 0;
- break;
- case Node.DOCUMENT_FRAGMENT_NODE:
- ret = (whatToShow & NodeFilter.SHOW_DOCUMENT_FRAGMENT) != 0;
- break;
- case Node.DOCUMENT_TYPE_NODE:
- ret = (whatToShow & NodeFilter.SHOW_DOCUMENT_TYPE) != 0;
- break;
- case Node.ELEMENT_NODE:
- ret = (whatToShow & NodeFilter.SHOW_ELEMENT) != 0;
- break;
- case Node.ENTITY_NODE:
- ret = (whatToShow & NodeFilter.SHOW_ENTITY) != 0;
- break;
- case Node.ENTITY_REFERENCE_NODE:
- ret = (whatToShow & NodeFilter.SHOW_ENTITY_REFERENCE) != 0;
- ret = ret && entityReferenceExpansion;
- break;
- case Node.NOTATION_NODE:
- ret = (whatToShow & NodeFilter.SHOW_NOTATION) != 0;
- break;
- case Node.PROCESSING_INSTRUCTION_NODE:
- ret = (whatToShow & NodeFilter.SHOW_PROCESSING_INSTRUCTION) != 0;
- break;
- case Node.TEXT_NODE:
- ret = (whatToShow & NodeFilter.SHOW_TEXT) != 0;
- break;
- default:
- ret = true;
- }
- if (ret && filter != null)
- {
- ret = (filter.acceptNode(node) == NodeFilter.FILTER_ACCEPT);
- }
- return ret;
- }
-
-}
diff --git a/libjava/gnu/xml/dom/DomNotation.java b/libjava/gnu/xml/dom/DomNotation.java
deleted file mode 100644
index 26e78724f27..00000000000
--- a/libjava/gnu/xml/dom/DomNotation.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/* DomNotation.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.Notation;
-
-/**
- * <p> "Notation" implementation. This is a non-core DOM class, supporting
- * the "XML" feature. </p>
- *
- * <p> Although unparsed entities using this notation can be detected using
- * DOM, neither NOTATIONS nor ENTITY/ENTITIES attributes can be so detected.
- * More, there is no portable way to construct a Notation node, so there's
- * no way that vendor-neutral DOM construction APIs could even report a
- * NOTATION used to identify the intended meaning of a ProcessingInstruction.
- * </p>
- *
- * <p> In short, <em>avoid using this DOM functionality</em>.
- *
- * @see DomDoctype
- * @see DomEntity
- * @see DomPI
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomNotation
- extends DomExtern
- implements Notation
-{
-
- /**
- * Constructs a Notation node associated with the specified document,
- * with the specified descriptive data. Note that at least one of
- * the PUBLIC and SYSTEM identifiers must be provided; unlike other
- * external objects in XML, notations may have only a PUBLIC identifier.
- *
- * <p>This constructor should only be invoked by a DomDoctype object
- * as part of its declareNotation functionality, or through a subclass
- * which is similarly used in a "Sub-DOM" style layer.
- *
- * @param owner The document with which this notation is associated
- * @param name Name of this notation
- * @param publicId If non-null, provides the notation's PUBLIC identifier
- * @param systemId If non-null, rovides the notation's SYSTEM identifier
- */
- protected DomNotation(DomDocument owner,
- String name,
- String publicId,
- String systemId)
- {
- super(NOTATION_NODE, owner, name, publicId, systemId);
- makeReadonly();
- }
-
- /**
- * The base URI of an external entity is its system ID.
- * The base URI of an internal entity is the parent document's base URI.
- * @since DOM Level 3 Core
- */
- public String getBaseURI()
- {
- String systemId = getSystemId();
- return (systemId == null) ? owner.getBaseURI() : systemId;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomNsNode.java b/libjava/gnu/xml/dom/DomNsNode.java
deleted file mode 100644
index 4dec5af21d7..00000000000
--- a/libjava/gnu/xml/dom/DomNsNode.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/* DomNsNode.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import javax.xml.XMLConstants;
-import org.w3c.dom.DOMException;
-
-/**
- * <p> Abstract implemention of namespace support. This facilitates
- * sharing code for attribute and element nodes.
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public abstract class DomNsNode
- extends DomNode
-{
-
- private String name;
- private String namespace;
- private String prefix;
- private String localName;
-
- /**
- * Constructs a node associated with the specified document, and
- * with the specified namespace information.
- *
- * @param owner The document with which this entity is associated
- * @param namespaceURI Combined with the local part of the name,
- * this identifies a type of element or attribute; may be null.
- * If this is the empty string, it is reassigned as null so that
- * applications only need to test that case.
- * @param name Name of this node, which may include a prefix
- */
- // package private
- DomNsNode(short nodeType, DomDocument owner, String namespaceURI, String name)
- {
- super(nodeType, owner);
- setNodeName(name);
- setNamespaceURI(namespaceURI);
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the node's name, including any namespace prefix.
- */
- public final String getNodeName()
- {
- return name;
- }
-
- final void setNodeName(String name)
- {
- this.name = name.intern();
- int index = name.indexOf(':');
- if (index == -1)
- {
- prefix = null;
- localName = this.name;
- }
- else
- {
- prefix = name.substring(0, index).intern();
- localName = name.substring(index + 1).intern();
- }
- }
-
- /**
- * <b>DOM L2</b>
- * Returns the node's namespace URI
- * <em>or null</em> if the node name is not namespace scoped.
- */
- public final String getNamespaceURI()
- {
- return namespace;
- }
-
- final void setNamespaceURI(String namespaceURI)
- {
- if ("".equals(namespaceURI))
- {
- namespaceURI = null;
- }
- namespace = (namespaceURI == null) ? null : namespaceURI.intern();
- }
-
- /**
- * <b>DOM L2</b>
- * Returns any prefix part of the node's name (before any colon).
- */
- public final String getPrefix()
- {
- return prefix;
- }
-
- /**
- * <b>DOM L2</b>
- * Assigns the prefix part of the node's name (before any colon).
- */
- public final void setPrefix(String prefix)
- {
- if (readonly)
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
- }
-
- if (prefix == null)
- {
- name = localName;
- return;
- }
- else if (namespace == null)
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "can't set prefix, node has no namespace URI",
- this, 0);
- }
-
- DomDocument.checkName(prefix, "1.1".equals(owner.getXmlVersion()));
- if (prefix.indexOf (':') != -1)
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "illegal prefix " + prefix, this, 0);
- }
-
- if (XMLConstants.XML_NS_PREFIX.equals(prefix)
- && !XMLConstants.XML_NS_URI.equals(namespace))
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "xml namespace is always " +
- XMLConstants.XML_NS_URI, this, 0);
- }
-
- if (XMLConstants.XMLNS_ATTRIBUTE.equals(prefix))
- {
- if (namespace != null || getNodeType() != ATTRIBUTE_NODE)
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "xmlns attribute prefix is reserved",
- this, 0);
- }
- }
- else if (getNodeType () == ATTRIBUTE_NODE
- && (XMLConstants.XMLNS_ATTRIBUTE.equals(name) ||
- name.startsWith("xmlns:")))
- {
- throw new DomDOMException(DOMException.NAMESPACE_ERR,
- "namespace declarations can't change names",
- this, 0);
- }
-
- this.prefix = prefix.intern();
- }
-
- /**
- * <b>DOM L2</b>
- * Returns the local part of the node's name (after any colon).
- */
- public final String getLocalName()
- {
- return localName;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomProcessingInstruction.java b/libjava/gnu/xml/dom/DomProcessingInstruction.java
deleted file mode 100644
index 2c90967d00f..00000000000
--- a/libjava/gnu/xml/dom/DomProcessingInstruction.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/* DomProcessingInstruction.java --
- Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.DOMException;
-import org.w3c.dom.ProcessingInstruction;
-
-/**
- * <p> "ProcessingInstruction" (PI) implementation.
- * This is a non-core DOM class, supporting the "XML" feature. </p>
- *
- * <p> Unlike other DOM APIs in the "XML" feature, this one fully
- * exposes the functionality it describes. So there is no reason
- * inherent in DOM to avoid using this API, unless you want to rely
- * on NOTATION declarations to associate meaning with your PIs;
- * there is no vendor-neutal way to record those notations in DOM.</p>
- *
- * <p> Also of note is that PI support is part of SAX, so that XML
- * systems using PIs can choose among multiple APIs. </p>
- *
- * @see DomNotation
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomProcessingInstruction
- extends DomNode
- implements ProcessingInstruction
-{
-
- private String target;
- private String data;
-
- /**
- * Constructs a ProcessingInstruction node associated with the
- * specified document, with the specified data.
- *
- * <p>This constructor should only be invoked by a Document object as
- * part of its createProcessingInstruction functionality, or through
- * a subclass which is similarly used in a "Sub-DOM" style layer.
- */
- protected DomProcessingInstruction(DomDocument owner,
- String target, String data)
- {
- super(PROCESSING_INSTRUCTION_NODE, owner);
- this.target = target;
- this.data = data;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the target of the processing instruction.
- */
- public final String getTarget()
- {
- return target;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the target of the processing instruction
- * (same as getTarget).
- */
- public final String getNodeName()
- {
- return target;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the data associated with the processing instruction.
- */
- public final String getData()
- {
- return data;
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the data associated with the processing instruction
- * (same as getData).
- */
- public final String getNodeValue()
- {
- return data;
- }
-
- /**
- * <b>DOM L1</b>
- * Assigns the data associated with the processing instruction;
- * same as setNodeValue.
- */
- public final void setData(String data)
- {
- setNodeValue(data);
- }
-
- /**
- * <b>DOM L1</b>
- * Assigns the data associated with the processing instruction.
- */
- public final void setNodeValue(String data)
- {
- if (isReadonly())
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
- }
- this.data = data;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/DomText.java b/libjava/gnu/xml/dom/DomText.java
deleted file mode 100644
index 3ca17dc9b87..00000000000
--- a/libjava/gnu/xml/dom/DomText.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/* DomText.java --
- Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Text;
-
-/**
- * <p> "Text" implementation. </p>
- *
- * @author David Brownell
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomText
- extends DomCharacterData
- implements Text
-{
-
- // NOTE: deleted unused per-instance "isIgnorable"
- // support to reclaim its space.
-
- /**
- * Constructs a text node associated with the specified
- * document and holding the specified data.
- *
- * <p>This constructor should only be invoked by a Document object
- * as part of its createTextNode functionality, or through a subclass
- * which is similarly used in a "Sub-DOM" style layer.
- */
- protected DomText(DomDocument owner, String value)
- {
- super(TEXT_NODE, owner, value);
- }
-
- protected DomText(DomDocument owner, char[] buf, int off, int len)
- {
- super(TEXT_NODE, owner, buf, off, len);
- }
-
- // Used by DomCDATA
- DomText(short nodeType, DomDocument owner, String value)
- {
- super(nodeType, owner, value);
- }
-
- DomText(short nodeType, DomDocument owner, char[] buf, int off, int len)
- {
- super(nodeType, owner, buf, off, len);
- }
-
- /**
- * <b>DOM L1</b>
- * Returns the string "#text".
- */
- // can't be 'final' with CDATA subclassing
- public String getNodeName()
- {
- return "#text";
- }
-
- /**
- * <b>DOM L1</b>
- * Splits this text node in two parts at the offset, returning
- * the new text node (the sibling with the second part).
- */
- public Text splitText(int offset)
- {
- if (isReadonly())
- {
- throw new DomDOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR);
- }
- try
- {
- String text = getNodeValue();
- String before = text.substring(0, offset);
- String after = text.substring(offset);
- Text next;
-
- if (getNodeType() == TEXT_NODE)
- {
- next = owner.createTextNode(after);
- }
- else // CDATA_SECTION_NODE
- {
- next = owner.createCDATASection(after);
- }
-
- if (this.next != null)
- {
- parent.insertBefore(next, this.next);
- }
- else
- {
- parent.appendChild(next);
- }
- setNodeValue(before);
- return next;
-
- }
- catch (IndexOutOfBoundsException x)
- {
- throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
- }
- }
-
- // DOM Level 3
-
- public boolean isElementContentWhitespace()
- {
- if (parent != null)
- {
- DomDoctype doctype = (DomDoctype) owner.getDoctype();
- if (doctype != null)
- {
- DTDElementTypeInfo info =
- doctype.getElementTypeInfo(parent.getNodeName());
- if (info != null)
- {
- if (info.model == null && info.model.indexOf("#PCDATA") != -1)
- {
- return false;
- }
- return getNodeValue().trim().length() == 0;
- }
- }
- }
- return false;
- }
-
- public String getWholeText()
- {
- DomNode ref = this;
- DomNode ctx;
- for (ctx = previous; ctx != null &&
- (ctx.nodeType == TEXT_NODE || ctx.nodeType == CDATA_SECTION_NODE);
- ctx = ctx.previous)
- {
- ref = ctx;
- }
- StringBuffer buf = new StringBuffer(ref.getNodeValue());
- for (ctx = ref.next; ctx != null &&
- (ctx.nodeType == TEXT_NODE || ctx.nodeType == CDATA_SECTION_NODE);
- ctx = ctx.next)
- {
- buf.append(ctx.getNodeValue());
- }
- return buf.toString ();
- }
-
- public Text replaceWholeText(String content)
- throws DOMException
- {
- boolean isEmpty = (content == null || content.length () == 0);
- if (!isEmpty)
- {
- setNodeValue(content);
- }
-
- DomNode ref = this;
- DomNode ctx;
- for (ctx = previous; ctx != null &&
- (ctx.nodeType == TEXT_NODE || ctx.nodeType == CDATA_SECTION_NODE);
- ctx = ctx.previous)
- {
- ref = ctx;
- }
- ctx = ref.next;
- if ((isEmpty || ref != this) && parent != null)
- {
- parent.removeChild(ref);
- }
- for (; ctx != null &&
- (ctx.nodeType == TEXT_NODE || ctx.nodeType == CDATA_SECTION_NODE);
- ctx = ref)
- {
- ref = ctx.next;
- if ((isEmpty || ctx != this) && parent != null)
- {
- parent.removeChild(ctx);
- }
- }
- return (isEmpty) ? null : this;
- }
-
-}
diff --git a/libjava/gnu/xml/dom/DomXPathExpression.java b/libjava/gnu/xml/dom/DomXPathExpression.java
deleted file mode 100644
index 25187520c0f..00000000000
--- a/libjava/gnu/xml/dom/DomXPathExpression.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/* DomXPathExpression.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import javax.xml.namespace.QName;
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpression;
-import javax.xml.xpath.XPathExpressionException;
-import javax.xml.xpath.XPathFactory;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Node;
-import org.w3c.dom.xpath.XPathException;
-import org.w3c.dom.xpath.XPathNSResolver;
-import org.w3c.dom.xpath.XPathResult;
-import gnu.xml.xpath.DocumentOrderComparator;
-
-/**
- * An XPath expression.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class DomXPathExpression
-implements org.w3c.dom.xpath.XPathExpression
-{
-
- final DomDocument doc;
- final XPathExpression expression;
- final XPathNSResolver resolver;
-
- DomXPathExpression(DomDocument doc, String expression,
- XPathNSResolver resolver)
- throws XPathException
- {
- this.doc = doc;
- this.resolver = resolver;
-
- XPathFactory factory = XPathFactory.newInstance();
- XPath xpath = factory.newXPath();
- if (resolver != null)
- {
- xpath.setNamespaceContext(new DomNSResolverContext(resolver));
- }
- try
- {
- this.expression = xpath.compile(expression);
- }
- catch (XPathExpressionException e)
- {
- throw new XPathException(XPathException.INVALID_EXPRESSION_ERR,
- e.getMessage ());
- }
- }
-
- public Object evaluate(Node contextNode, short type, Object result)
- throws XPathException, DOMException
- {
- try
- {
- QName typeName = null;
- switch (type)
- {
- case XPathResult.BOOLEAN_TYPE:
- typeName = XPathConstants.BOOLEAN;
- break;
- case XPathResult.NUMBER_TYPE:
- typeName = XPathConstants.NUMBER;
- break;
- case XPathResult.STRING_TYPE:
- typeName = XPathConstants.STRING;
- break;
- case XPathResult.ANY_UNORDERED_NODE_TYPE:
- case XPathResult.FIRST_ORDERED_NODE_TYPE:
- typeName = XPathConstants.NODE;
- break;
- case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
- case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE:
- case XPathResult.ORDERED_NODE_ITERATOR_TYPE:
- case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
- typeName = XPathConstants.NODESET;
- break;
- default:
- throw new XPathException(XPathException.TYPE_ERR, null);
- }
- Object val = expression.evaluate(contextNode, typeName);
- switch (type)
- {
- case XPathResult.ORDERED_NODE_ITERATOR_TYPE:
- case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
- // Sort the nodes
- List ns = new ArrayList((Collection) val);
- Collections.sort(ns, new DocumentOrderComparator());
- val = ns;
- }
- return new DomXPathResult(val, type);
- }
- catch (javax.xml.xpath.XPathException e)
- {
- throw new XPathException(XPathException.TYPE_ERR, e.getMessage());
- }
- }
-
- public String toString ()
- {
- return getClass ().getName () + "[expression=" + expression + "]";
- }
-
-}
diff --git a/libjava/gnu/xml/dom/DomXPathNSResolver.java b/libjava/gnu/xml/dom/DomXPathNSResolver.java
deleted file mode 100644
index 96dfd97d46a..00000000000
--- a/libjava/gnu/xml/dom/DomXPathNSResolver.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/* DomXPathNSResolver.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.xpath.XPathNSResolver;
-
-/**
- * Generic XPath namespace resolver using a DOM Node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class DomXPathNSResolver
-implements XPathNSResolver
-{
-
- Node node;
-
- DomXPathNSResolver (Node node)
- {
- this.node = node;
- }
-
- public String lookupNamespaceURI (String prefix)
- {
- return node.lookupNamespaceURI (prefix);
- }
-
-}
diff --git a/libjava/gnu/xml/dom/DomXPathResult.java b/libjava/gnu/xml/dom/DomXPathResult.java
deleted file mode 100644
index bed249624f9..00000000000
--- a/libjava/gnu/xml/dom/DomXPathResult.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/* DomXPathResult.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom;
-
-import java.util.Collection;
-import java.util.Iterator;
-import org.w3c.dom.Node;
-import org.w3c.dom.xpath.XPathException;
-import org.w3c.dom.xpath.XPathResult;
-
-/**
- * An XPath result object.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class DomXPathResult
-implements XPathResult
-{
-
- final Object value;
- final short type;
- Iterator iterator;
-
- DomXPathResult (Object value, short requestedType)
- {
- this.value = value;
- if (value instanceof Boolean)
- {
- type = XPathResult.BOOLEAN_TYPE;
- }
- else if (value instanceof Double)
- {
- type = XPathResult.NUMBER_TYPE;
- }
- else if (value instanceof String)
- {
- type = XPathResult.STRING_TYPE;
- }
- else if (value instanceof Collection)
- {
- Collection ns = (Collection) value;
- switch (requestedType)
- {
- case XPathResult.ANY_TYPE:
- case XPathResult.ANY_UNORDERED_NODE_TYPE:
- type = (ns.size () == 1) ? XPathResult.FIRST_ORDERED_NODE_TYPE :
- XPathResult.ORDERED_NODE_ITERATOR_TYPE;
- break;
- default:
- type = requestedType;
- }
- iterator = ns.iterator ();
- }
- else
- {
- throw new IllegalArgumentException ();
- }
- }
-
- public boolean getBooleanValue()
- {
- if (type == XPathResult.BOOLEAN_TYPE)
- {
- return ((Boolean) value).booleanValue ();
- }
- throw new XPathException (XPathException.TYPE_ERR, value.toString ());
- }
-
- public boolean getInvalidIteratorState()
- {
- return iterator == null;
- }
-
- public double getNumberValue()
- {
- if (type == XPathResult.NUMBER_TYPE)
- {
- return ((Double) value).doubleValue ();
- }
- throw new XPathException (XPathException.TYPE_ERR, value.toString ());
- }
-
- public short getResultType()
- {
- return type;
- }
-
- public Node getSingleNodeValue()
- {
- switch (type)
- {
- case XPathResult.FIRST_ORDERED_NODE_TYPE:
- case XPathResult.ORDERED_NODE_ITERATOR_TYPE:
- case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
- case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
- case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE:
- Collection ns = (Collection) value;
- if (ns.isEmpty ())
- {
- return null;
- }
- else
- {
- return (Node) ns.iterator ().next ();
- }
- }
- throw new XPathException (XPathException.TYPE_ERR, value.toString ());
- }
-
- public int getSnapshotLength()
- {
- switch (type)
- {
- case XPathResult.FIRST_ORDERED_NODE_TYPE:
- case XPathResult.ORDERED_NODE_ITERATOR_TYPE:
- case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
- case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
- case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE:
- return ((Collection) value).size ();
- }
- throw new XPathException (XPathException.TYPE_ERR, value.toString ());
- }
-
- public String getStringValue()
- {
- if (type == XPathResult.STRING_TYPE)
- {
- return (String) value;
- }
- throw new XPathException (XPathException.TYPE_ERR, value.toString ());
- }
-
- public Node iterateNext()
- {
- if (iterator != null)
- {
- if (iterator.hasNext ())
- {
- return (Node) iterator.next ();
- }
- else
- {
- iterator = null;
- return null;
- }
- }
- throw new XPathException (XPathException.TYPE_ERR, value.toString ());
- }
-
- public Node snapshotItem(int index)
- {
- switch (type)
- {
- case XPathResult.FIRST_ORDERED_NODE_TYPE:
- case XPathResult.ORDERED_NODE_ITERATOR_TYPE:
- case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
- case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
- case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE:
- Collection ns = (Collection) value;
- Node[] nodes = new Node[ns.size ()];
- ns.toArray (nodes);
- return nodes[index];
- }
- throw new XPathException (XPathException.TYPE_ERR, value.toString ());
- }
-
- public String toString ()
- {
- return getClass ().getName () + "[type=" + typeName (type) + ",value=" +
- value + ']';
- }
-
- private String typeName (short type)
- {
- switch (type)
- {
- case XPathResult.BOOLEAN_TYPE:
- return "BOOLEAN_TYPE";
- case XPathResult.NUMBER_TYPE:
- return "NUMBER_TYPE";
- case XPathResult.STRING_TYPE:
- return "STRING_TYPE";
- case XPathResult.FIRST_ORDERED_NODE_TYPE:
- return "FIRST_ORDERED_NODE_TYPE";
- case XPathResult.ORDERED_NODE_ITERATOR_TYPE:
- return "ORDERED_NODE_ITERATOR_TYPE";
- case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:
- return "ORDERED_NODE_SNAPSHOT_TYPE";
- case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
- return "UNORDERED_NODE_ITERATOR_TYPE";
- case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE:
- return "UNORDERED_NODE_SNAPSHOT_TYPE";
- default:
- return "(unknown)";
- }
- }
-
-}
diff --git a/libjava/gnu/xml/dom/ImplementationList.java b/libjava/gnu/xml/dom/ImplementationList.java
deleted file mode 100644
index 8c0f4491610..00000000000
--- a/libjava/gnu/xml/dom/ImplementationList.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/* ImplementationList.java --
- Copyright (C) 2004 Free Software Foundation, Inc..
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-package gnu.xml.dom;
-
-import java.util.List;
-
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.DOMImplementationList;
-
-/**
- * Implementation list for GNU JAXP.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class ImplementationList
- implements DOMImplementationList
-{
-
- private List list;
-
- ImplementationList(List list)
- {
- this.list = list;
- }
-
- public int getLength()
- {
- return list.size();
- }
-
- public DOMImplementation item(int index)
- {
- return (DOMImplementation) list.get(index);
- }
-
-}
diff --git a/libjava/gnu/xml/dom/ImplementationSource.java b/libjava/gnu/xml/dom/ImplementationSource.java
deleted file mode 100644
index 913079cd0c3..00000000000
--- a/libjava/gnu/xml/dom/ImplementationSource.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/* ImplementationSource.java --
- Copyright (C) 2004 Free Software Foundation, Inc..
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-package gnu.xml.dom;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.DOMImplementationList;
-import org.w3c.dom.DOMImplementationSource;
-
-/**
- * Implementation source for GNU JAXP.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class ImplementationSource
- implements DOMImplementationSource
-{
-
- private static final String DIGITS = "1234567890";
-
- /*
- * GNU DOM implementations.
- */
- private static final DOMImplementation[] implementations;
-
- static
- {
- List acc = new ArrayList();
- acc.add(new gnu.xml.dom.DomImpl());
- try
- {
- Class t = Class.forName("gnu.xml.libxmlj.dom.GnomeDocumentBuilder");
- acc.add(t.newInstance());
- }
- catch (Exception e)
- {
- // libxmlj not available
- }
- catch (UnsatisfiedLinkError e)
- {
- // libxmlj not available
- }
- implementations = new DOMImplementation[acc.size()];
- acc.toArray(implementations);
- }
-
- public DOMImplementation getDOMImplementation(String features)
- {
- List available = getImplementations(features);
- if (available.isEmpty())
- {
- return null;
- }
- return (DOMImplementation) available.get(0);
- }
-
- public DOMImplementationList getDOMImplementationList(String features)
- {
- List available = getImplementations(features);
- return new ImplementationList(available);
- }
-
- /**
- * Returns a list of the implementations that support the specified
- * features.
- */
- private final List getImplementations(String features)
- {
- List available = new ArrayList(Arrays.asList(implementations));
- for (Iterator i = parseFeatures(features).iterator(); i.hasNext(); )
- {
- String feature = (String) i.next();
- String version = null;
- int si = feature.indexOf(' ');
- if (si != -1)
- {
- version = feature.substring(si + 1);
- feature = feature.substring(0, si);
- }
- for (Iterator j = available.iterator(); j.hasNext(); )
- {
- DOMImplementation impl = (DOMImplementation) j.next();
- if (!impl.hasFeature(feature, version))
- {
- j.remove();
- }
- }
- }
- return available;
- }
-
- /**
- * Parses the feature list into feature tokens.
- */
- final List parseFeatures(String features)
- {
- List list = new ArrayList();
- int pos = 0, start = 0;
- int len = features.length();
- for (; pos < len; pos++)
- {
- char c = features.charAt(pos);
- if (c == ' ')
- {
- if (pos + 1 < len &&
- DIGITS.indexOf(features.charAt(pos + 1)) == -1)
- {
- list.add(getFeature(features, start, pos));
- start = pos + 1;
- }
- }
- }
- if (pos > start)
- {
- list.add(getFeature(features, start, len));
- }
- return list;
- }
-
- final String getFeature(String features, int start, int end)
- {
- if (features.length() > 0 && features.charAt(start) == '+')
- {
- return features.substring(start + 1, end);
- }
- return features.substring(start, end);
- }
-
-}
diff --git a/libjava/gnu/xml/dom/JAXPFactory.java b/libjava/gnu/xml/dom/JAXPFactory.java
deleted file mode 100644
index 8f481fad643..00000000000
--- a/libjava/gnu/xml/dom/JAXPFactory.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/* JAXPFactory.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.dom;
-
-import java.io.IOException;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.DOMImplementation;
-
-import org.xml.sax.EntityResolver;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.XMLReader;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
-
-
-/**
- * DOM bootstrapping API, for use with JAXP.
- *
- * @see Consumer
- *
- * @author David Brownell
- */
-public final class JAXPFactory
- extends DocumentBuilderFactory
-{
-
- private static final String PROPERTY = "http://xml.org/sax/properties/";
- private static final String FEATURE = "http://xml.org/sax/features/";
-
- private SAXParserFactory pf;
-
- /**
- * Default constructor.
- */
- public JAXPFactory()
- {
- }
-
- /**
- * Constructs a JAXP document builder which uses the default
- * JAXP SAX2 parser and the DOM implementation in this package.
- */
- public DocumentBuilder newDocumentBuilder()
- throws ParserConfigurationException
- {
- if (pf == null)
- {
- // Force use of AElfred2 since not all JAXP parsers
- // conform very well to the SAX2 API spec ...
- pf = new gnu.xml.aelfred2.JAXPFactory();
- // pf = SAXParserFactory.newInstance ();
- }
-
- // JAXP default: false
- pf.setValidating(isValidating());
-
- // FIXME: this namespace setup may cause errors in some
- // conformant SAX2 parsers, which we CAN patch up by
- // splicing a "NSFilter" stage up front ...
-
- // JAXP default: false
- pf.setNamespaceAware(isNamespaceAware());
-
- try
- {
- // undo rude "namespace-prefixes=false" default
- pf.setFeature(FEATURE + "namespace-prefixes", true);
-
- return new JAXPBuilder(pf.newSAXParser().getXMLReader(), this);
- }
- catch (SAXException e)
- {
- String msg = "can't create JAXP DocumentBuilder: " + e.getMessage();
- throw new ParserConfigurationException(msg);
- }
- }
-
- /** There seems to be no useful specification for attribute names */
- public void setAttribute(String name, Object value)
- throws IllegalArgumentException
- {
- if ("http://java.sun.com/xml/jaxp/properties/schemaLanguage".equals(name))
- {
- // TODO
- }
- else
- {
- throw new IllegalArgumentException(name);
- }
- }
-
- /** There seems to be no useful specification for attribute names */
- public Object getAttribute(String name)
- throws IllegalArgumentException
- {
- throw new IllegalArgumentException(name);
- }
-
- static final class JAXPBuilder
- extends DocumentBuilder
- implements ErrorHandler
- {
-
- private Consumer consumer;
- private XMLReader producer;
- private DomImpl impl;
-
- JAXPBuilder(XMLReader parser, JAXPFactory factory)
- throws ParserConfigurationException
- {
- impl = new DomImpl();
-
- // set up consumer side
- try
- {
- consumer = new Consumer();
- }
- catch (SAXException e)
- {
- throw new ParserConfigurationException(e.getMessage());
- }
-
- // JAXP defaults: true, noise nodes are good (bleech)
- consumer.setHidingReferences(factory.isExpandEntityReferences());
- consumer.setHidingComments(factory.isIgnoringComments());
- consumer.setHidingWhitespace(factory.isIgnoringElementContentWhitespace());
- consumer.setHidingCDATA(factory.isCoalescing());
-
- // set up producer side
- producer = parser;
- producer.setContentHandler(consumer.getContentHandler());
- producer.setDTDHandler(consumer.getDTDHandler());
-
- try
- {
- String id;
-
- // if validating, report validity errors, and default
- // to treating them as fatal
- if (factory.isValidating ())
- {
- producer.setFeature(FEATURE + "validation", true);
- producer.setErrorHandler(this);
- }
-
- // always save prefix info, maybe do namespace processing
- producer.setFeature(FEATURE + "namespace-prefixes", true);
- producer.setFeature(FEATURE + "namespaces",
- factory.isNamespaceAware());
-
- // set important handlers
- id = PROPERTY + "lexical-handler";
- producer.setProperty(id, consumer.getProperty(id));
-
- id = PROPERTY + "declaration-handler";
- producer.setProperty(id, consumer.getProperty(id));
-
- }
- catch (SAXException e)
- {
- throw new ParserConfigurationException(e.getMessage());
- }
- }
-
- public Document parse(InputSource source)
- throws SAXException, IOException
- {
- producer.parse(source);
- Document doc = consumer.getDocument();
- // TODO inputEncoding
- doc.setDocumentURI(source.getSystemId());
- return doc;
- }
-
- public boolean isNamespaceAware()
- {
- try
- {
- return producer.getFeature(FEATURE + "namespaces");
- }
- catch (SAXException e)
- {
- // "can't happen"
- throw new RuntimeException(e.getMessage());
- }
- }
-
- public boolean isValidating()
- {
- try
- {
- return producer.getFeature(FEATURE + "validation");
- }
- catch (SAXException e)
- {
- // "can't happen"
- throw new RuntimeException(e.getMessage());
- }
- }
-
- public void setEntityResolver(EntityResolver resolver)
- {
- producer.setEntityResolver(resolver);
- }
-
- public void setErrorHandler(ErrorHandler handler)
- {
- producer.setErrorHandler(handler);
- consumer.setErrorHandler(handler);
- }
-
- public DOMImplementation getDOMImplementation()
- {
- return impl;
- }
-
- public Document newDocument()
- {
- return new DomDocument();
- }
-
- // implementation of error handler that's used when validating
- public void fatalError(SAXParseException e)
- throws SAXException
- {
- throw e;
- }
-
- public void error(SAXParseException e)
- throws SAXException
- {
- throw e;
- }
-
- public void warning(SAXParseException e)
- throws SAXException
- {
- /* ignore */
- }
-
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLAnchorElement.java b/libjava/gnu/xml/dom/html2/DomHTMLAnchorElement.java
deleted file mode 100644
index 5da91330604..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLAnchorElement.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/* DomHTMLAnchorElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLAnchorElement;
-
-/**
- * An HTML 'A' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLAnchorElement
- extends DomHTMLElement
- implements HTMLAnchorElement
-{
-
- protected DomHTMLAnchorElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getAccessKey()
- {
- return getHTMLAttribute("accesskey");
- }
-
- public void setAccessKey(String accessKey)
- {
- setHTMLAttribute("accesskey", accessKey);
- }
-
- public String getCharset()
- {
- return getHTMLAttribute("charset");
- }
-
- public void setCharset(String charset)
- {
- setHTMLAttribute("charset", charset);
- }
-
- public String getCoords()
- {
- return getHTMLAttribute("coords");
- }
-
- public void setCoords(String coords)
- {
- setHTMLAttribute("coords", coords);
- }
-
- public String getHref()
- {
- return getHTMLAttribute("href");
- }
-
- public void setHref(String href)
- {
- setHTMLAttribute("href", href);
- }
-
- public String getHreflang()
- {
- return getHTMLAttribute("hreflang");
- }
-
- public void setHreflang(String hreflang)
- {
- setHTMLAttribute("hreflang", hreflang);
- }
-
- public String getName()
- {
- return getHTMLAttribute("name");
- }
-
- public void setName(String name)
- {
- setHTMLAttribute("name", name);
- }
-
- public String getRel()
- {
- return getHTMLAttribute("rel");
- }
-
- public void setRel(String rel)
- {
- setHTMLAttribute("rel", rel);
- }
-
- public String getRev()
- {
- return getHTMLAttribute("rev");
- }
-
- public void setRev(String rev)
- {
- setHTMLAttribute("rev", rev);
- }
-
- public String getShape()
- {
- return getHTMLAttribute("shape");
- }
-
- public void setShape(String shape)
- {
- setHTMLAttribute("shape", shape);
- }
-
- public int getTabIndex()
- {
- return getIntHTMLAttribute("tabindex");
- }
-
- public void setTabIndex(int tabIndex)
- {
- setIntHTMLAttribute("tabindex", tabIndex);
- }
-
- public String getTarget()
- {
- return getHTMLAttribute("target");
- }
-
- public void setTarget(String target)
- {
- setHTMLAttribute("target", target);
- }
-
- public String getType()
- {
- return getHTMLAttribute("type");
- }
-
- public void setType(String type)
- {
- setHTMLAttribute("type", type);
- }
-
- public void blur()
- {
- dispatchUIEvent("blur");
- }
-
- public void focus()
- {
- dispatchUIEvent("focus");
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLAppletElement.java b/libjava/gnu/xml/dom/html2/DomHTMLAppletElement.java
deleted file mode 100644
index 8ec4d3c83bb..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLAppletElement.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/* DomHTMLAppletElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLAppletElement;
-
-/**
- * An HTML 'APPLET' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLAppletElement
- extends DomHTMLElement
- implements HTMLAppletElement
-{
-
- protected DomHTMLAppletElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
- public String getAlt()
- {
- return getHTMLAttribute("alt");
- }
-
- public void setAlt(String alt)
- {
- setHTMLAttribute("alt", alt);
- }
-
- public String getArchive()
- {
- return getHTMLAttribute("archive");
- }
-
- public void setArchive(String archive)
- {
- setHTMLAttribute("archive", archive);
- }
-
- public String getCode()
- {
- return getHTMLAttribute("code");
- }
-
- public void setCode(String code)
- {
- setHTMLAttribute("code", code);
- }
-
- public String getCodeBase()
- {
- return getHTMLAttribute("codebase");
- }
-
- public void setCodeBase(String codeBase)
- {
- setHTMLAttribute("codebase", codeBase);
- }
-
- public String getHeight()
- {
- return getHTMLAttribute("height");
- }
-
- public void setHeight(String height)
- {
- setHTMLAttribute("height", height);
- }
-
- public int getHspace()
- {
- return getIntHTMLAttribute("hspace");
- }
-
- public void setHspace(int hspace)
- {
- setIntHTMLAttribute("hspace", hspace);
- }
-
- public String getName()
- {
- return getHTMLAttribute("name");
- }
-
- public void setName(String name)
- {
- setHTMLAttribute("name", name);
- }
-
- public String getObject()
- {
- return getHTMLAttribute("object");
- }
-
- public void setObject(String object)
- {
- setHTMLAttribute("object", object);
- }
-
- public int getVspace()
- {
- return getIntHTMLAttribute("vspace");
- }
-
- public void setVspace(int vspace)
- {
- setIntHTMLAttribute("vspace", vspace);
- }
-
- public String getWidth()
- {
- return getHTMLAttribute("width");
- }
-
- public void setWidth(String width)
- {
- setHTMLAttribute("width", width);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLAreaElement.java b/libjava/gnu/xml/dom/html2/DomHTMLAreaElement.java
deleted file mode 100644
index d7eed07dd1f..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLAreaElement.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/* DomHTMLAreaElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLAreaElement;
-
-/**
- * An HTML 'AREA' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLAreaElement
- extends DomHTMLElement
- implements HTMLAreaElement
-{
-
- protected DomHTMLAreaElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getAccessKey()
- {
- return getHTMLAttribute("accesskey");
- }
-
- public void setAccessKey(String accessKey)
- {
- setHTMLAttribute("accesskey", accessKey);
- }
-
- public String getAlt()
- {
- return getHTMLAttribute("alt");
- }
-
- public void setAlt(String alt)
- {
- setHTMLAttribute("alt", alt);
- }
-
- public String getCoords()
- {
- return getHTMLAttribute("coords");
- }
-
- public void setCoords(String coords)
- {
- setHTMLAttribute("coords", coords);
- }
-
- public String getHref()
- {
- return getHTMLAttribute("href");
- }
-
- public void setHref(String href)
- {
- setHTMLAttribute("href", href);
- }
-
- public boolean getNoHref()
- {
- return getBooleanHTMLAttribute("nohref");
- }
-
- public void setNoHref(boolean nohref)
- {
- setBooleanHTMLAttribute("nohref", nohref);
- }
-
- public String getShape()
- {
- return getHTMLAttribute("shape");
- }
-
- public void setShape(String shape)
- {
- setHTMLAttribute("shape", shape);
- }
-
- public int getTabIndex()
- {
- return getIntHTMLAttribute("tabindex");
- }
-
- public void setTabIndex(int tabIndex)
- {
- setIntHTMLAttribute("tabindex", tabIndex);
- }
-
- public String getTarget()
- {
- return getHTMLAttribute("target");
- }
-
- public void setTarget(String target)
- {
- setHTMLAttribute("target", target);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLBRElement.java b/libjava/gnu/xml/dom/html2/DomHTMLBRElement.java
deleted file mode 100644
index 673699d527a..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLBRElement.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* DomHTMLBRElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLBRElement;
-
-/**
- * An HTML 'BR' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLBRElement
- extends DomHTMLElement
- implements HTMLBRElement
-{
-
- protected DomHTMLBRElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getClear()
- {
- return getHTMLAttribute("clear");
- }
-
- public void setClear(String clear)
- {
- setHTMLAttribute("clear", clear);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLBaseElement.java b/libjava/gnu/xml/dom/html2/DomHTMLBaseElement.java
deleted file mode 100644
index ddc8053079f..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLBaseElement.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/* DomHTMLBaseElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLBaseElement;
-
-/**
- * An HTML 'BASE' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLBaseElement
- extends DomHTMLElement
- implements HTMLBaseElement
-{
-
- protected DomHTMLBaseElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getHref()
- {
- return getHTMLAttribute("href");
- }
-
- public void setHref(String href)
- {
- setHTMLAttribute("href", href);
- }
-
- public String getTarget()
- {
- return getHTMLAttribute("target");
- }
-
- public void setTarget(String target)
- {
- setHTMLAttribute("target", target);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLBaseFontElement.java b/libjava/gnu/xml/dom/html2/DomHTMLBaseFontElement.java
deleted file mode 100644
index 73172d3bf11..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLBaseFontElement.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/* DomHTMLBaseFontElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLBaseFontElement;
-
-/**
- * An HTML 'BASEFONT' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLBaseFontElement
- extends DomHTMLElement
- implements HTMLBaseFontElement
-{
-
- protected DomHTMLBaseFontElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getColor()
- {
- return getHTMLAttribute("color");
- }
-
- public void setColor(String color)
- {
- setHTMLAttribute("color", color);
- }
-
- public String getFace()
- {
- return getHTMLAttribute("face");
- }
-
- public void setFace(String face)
- {
- setHTMLAttribute("face", face);
- }
-
- public int getSize()
- {
- return getIntHTMLAttribute("size");
- }
-
- public void setSize(int size)
- {
- setIntHTMLAttribute("size", size);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLBodyElement.java b/libjava/gnu/xml/dom/html2/DomHTMLBodyElement.java
deleted file mode 100644
index 44fbcf23cc5..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLBodyElement.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/* DomHTMLBodyElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLBodyElement;
-
-/**
- * An HTML 'BODY' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLBodyElement
- extends DomHTMLElement
- implements HTMLBodyElement
-{
-
- protected DomHTMLBodyElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getALink()
- {
- return getHTMLAttribute("alink");
- }
-
- public void setALink(String alink)
- {
- setHTMLAttribute("alink", alink);
- }
-
- public String getBackground()
- {
- return getHTMLAttribute("background");
- }
-
- public void setBackground(String background)
- {
- setHTMLAttribute("background", background);
- }
-
- public String getBgColor()
- {
- return getHTMLAttribute("bgcolor");
- }
-
- public void setBgColor(String bgcolor)
- {
- setHTMLAttribute("bgcolor", bgcolor);
- }
-
- public String getLink()
- {
- return getHTMLAttribute("link");
- }
-
- public void setLink(String link)
- {
- setHTMLAttribute("link", link);
- }
-
- public String getText()
- {
- return getHTMLAttribute("text");
- }
-
- public void setText(String text)
- {
- setHTMLAttribute("text", text);
- }
-
- public String getVLink()
- {
- return getHTMLAttribute("vlink");
- }
-
- public void setVLink(String vlink)
- {
- setHTMLAttribute("vlink", vlink);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLButtonElement.java b/libjava/gnu/xml/dom/html2/DomHTMLButtonElement.java
deleted file mode 100644
index 5aff5f8c1a9..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLButtonElement.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/* DomHTMLButtonElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.html2.HTMLButtonElement;
-import org.w3c.dom.html2.HTMLFormElement;
-
-/**
- * An HTML 'BUTTON' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLButtonElement
- extends DomHTMLElement
- implements HTMLButtonElement
-{
-
- protected DomHTMLButtonElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public HTMLFormElement getForm()
- {
- return (HTMLFormElement) getParentElement("form");
- }
-
- public String getAccessKey()
- {
- return getHTMLAttribute("accesskey");
- }
-
- public void setAccessKey(String accessKey)
- {
- setHTMLAttribute("accesskey", accessKey);
- }
-
- public boolean getDisabled()
- {
- return getBooleanHTMLAttribute("disabled");
- }
-
- public void setDisabled(boolean disabled)
- {
- setBooleanHTMLAttribute("disabled", disabled);
- }
-
- public String getName()
- {
- return getHTMLAttribute("name");
- }
-
- public void setName(String name)
- {
- setHTMLAttribute("name", name);
- }
-
- public int getTabIndex()
- {
- return getIntHTMLAttribute("tabindex");
- }
-
- public void setTabIndex(int tabIndex)
- {
- setIntHTMLAttribute("tabindex", tabIndex);
- }
-
- public String getType()
- {
- return getHTMLAttribute("type");
- }
-
- public String getValue()
- {
- return getHTMLAttribute("value");
- }
-
- public void setValue(String value)
- {
- setHTMLAttribute("value", value);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLCollection.java b/libjava/gnu/xml/dom/html2/DomHTMLCollection.java
deleted file mode 100644
index 05dc99a271b..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLCollection.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/* DomHTMLCollection.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import gnu.xml.dom.DomDOMException;
-import gnu.xml.dom.DomElement;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.html2.HTMLCollection;
-import org.w3c.dom.html2.HTMLOptionsCollection;
-import org.w3c.dom.traversal.NodeFilter;
-import org.w3c.dom.traversal.NodeIterator;
-
-/**
- * An HTML element collection.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class DomHTMLCollection
- implements HTMLCollection, HTMLOptionsCollection, NodeList, NodeFilter
-{
-
- final DomHTMLDocument doc;
- final Node root;
- List nodeNames;
- List attributeNames;
- List results;
-
- DomHTMLCollection(DomHTMLDocument doc, Node root)
- {
- this.doc = doc;
- this.root = root;
- }
-
- // -- Node name and attribute filtering --
-
- void addNodeName(String name)
- {
- if (nodeNames == null)
- {
- nodeNames = new LinkedList();
- }
- nodeNames.add(name);
- }
-
- void addAttributeName(String name)
- {
- if (attributeNames == null)
- {
- attributeNames = new LinkedList();
- }
- attributeNames.add(name);
- }
-
- public short acceptNode(Node n)
- {
- if (n.getNodeType() != Node.ELEMENT_NODE)
- {
- return NodeFilter.FILTER_SKIP;
- }
- if (nodeNames != null && !acceptName(n.getLocalName()))
- {
- return NodeFilter.FILTER_SKIP;
- }
- if (attributeNames != null && !acceptAttributes(n.getAttributes()))
- {
- return NodeFilter.FILTER_SKIP;
- }
- return NodeFilter.FILTER_ACCEPT;
- }
-
- private boolean acceptName(String name)
- {
- for (Iterator i = nodeNames.iterator(); i.hasNext(); )
- {
- String nodeName = (String) i.next();
- if (nodeName.equalsIgnoreCase(name))
- {
- return true;
- }
- }
- return false;
- }
-
- private boolean acceptAttributes(NamedNodeMap attrs)
- {
- for (Iterator i = attributeNames.iterator(); i.hasNext(); )
- {
- String attributeName = (String) i.next();
- Node attr = getNamedItem(attrs, attributeName);
- if (attr != null)
- {
- // Check that attribute has a non-null value
- String nodeValue = attr.getNodeValue();
- if (nodeValue != null && nodeValue.length() > 0)
- {
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * Case-insensitive version of getNamedItem.
- */
- private Node getNamedItem(NamedNodeMap attrs, String name)
- {
- int len = attrs.getLength();
- for (int i = 0; i < len; i++)
- {
- Node attr = attrs.item(i);
- String attrName = attr.getLocalName();
- if (name.equalsIgnoreCase(attrName))
- {
- return attr;
- }
- }
- return null;
- }
-
- // -- Perform query --
-
- void evaluate()
- {
- NodeIterator i = doc.createNodeIterator(root, NodeFilter.SHOW_ELEMENT,
- this, true);
- results = new ArrayList();
- for (Node node = i.nextNode(); node != null; node = i.nextNode())
- {
- results.add(node);
- }
- }
-
- // -- HTMLCollection/NodeList interface --
-
- public int getLength()
- {
- return results.size();
- }
-
- public void setLength(int length)
- {
- throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
- }
-
- public Node item(int index)
- {
- return (Node) results.get(index);
- }
-
- public Node namedItem(String name)
- {
- boolean xhtml = false; // FIXME detect XHTML document
- for (Iterator i = results.iterator(); i.hasNext(); )
- {
- Node node = (Node) i.next();
- NamedNodeMap attrs = node.getAttributes();
- Node attr = getNamedItem(attrs, "id");
- if (name.equals(attr.getTextContent()))
- {
- return node;
- }
- if (!xhtml)
- {
- attr = getNamedItem(attrs, "name");
- if (name.equals(attr.getTextContent()))
- {
- return node;
- }
- }
- }
- return null;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLDListElement.java b/libjava/gnu/xml/dom/html2/DomHTMLDListElement.java
deleted file mode 100644
index 2b9dbf23623..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLDListElement.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* DomHTMLDListElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLDListElement;
-
-/**
- * An HTML 'DL' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLDListElement
- extends DomHTMLElement
- implements HTMLDListElement
-{
-
- protected DomHTMLDListElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public boolean getCompact()
- {
- return getBooleanHTMLAttribute("compact");
- }
-
- public void setCompact(boolean compact)
- {
- setBooleanHTMLAttribute("compact", compact);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLDirectoryElement.java b/libjava/gnu/xml/dom/html2/DomHTMLDirectoryElement.java
deleted file mode 100644
index 26af97e781b..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLDirectoryElement.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* DomHTMLDirectoryElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLDirectoryElement;
-
-/**
- * An HTML 'DIR' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLDirectoryElement
- extends DomHTMLElement
- implements HTMLDirectoryElement
-{
-
- protected DomHTMLDirectoryElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public boolean getCompact()
- {
- return getBooleanHTMLAttribute("compact");
- }
-
- public void setCompact(boolean compact)
- {
- setBooleanHTMLAttribute("compact", compact);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLDivElement.java b/libjava/gnu/xml/dom/html2/DomHTMLDivElement.java
deleted file mode 100644
index 462069dcf1a..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLDivElement.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* DomHTMLDivElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLDivElement;
-
-/**
- * An HTML 'DIV' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLDivElement
- extends DomHTMLElement
- implements HTMLDivElement
-{
-
- protected DomHTMLDivElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLDocument.java b/libjava/gnu/xml/dom/html2/DomHTMLDocument.java
deleted file mode 100644
index 10ee9e74767..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLDocument.java
+++ /dev/null
@@ -1,425 +0,0 @@
-/* DomHTMLDocument.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import gnu.xml.dom.DomDocument;
-import gnu.xml.dom.DomDOMException;
-import java.lang.reflect.Constructor;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.html2.HTMLCollection;
-import org.w3c.dom.html2.HTMLDocument;
-import org.w3c.dom.html2.HTMLElement;
-
-/**
- * An HTML document.
- * This is the factory object used to create HTML elements.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLDocument
- extends DomDocument
- implements HTMLDocument
-{
-
- private static final Class[] ELEMENT_PT = new Class[] {
- DomHTMLDocument.class,
- String.class,
- String.class
- };
-
- private static Map ELEMENT_CLASSES;
- static
- {
- Map map = new HashMap();
- map.put("a", DomHTMLAnchorElement.class);
- map.put("applet", DomHTMLAppletElement.class);
- map.put("area", DomHTMLAreaElement.class);
- map.put("base", DomHTMLBaseElement.class);
- map.put("basefont", DomHTMLBaseFontElement.class);
- map.put("body", DomHTMLBodyElement.class);
- map.put("br", DomHTMLBRElement.class);
- map.put("button", DomHTMLButtonElement.class);
- map.put("dir", DomHTMLDirectoryElement.class);
- map.put("div", DomHTMLDivElement.class);
- map.put("dlist", DomHTMLDListElement.class);
- map.put("fieldset", DomHTMLFieldSetElement.class);
- map.put("font", DomHTMLFontElement.class);
- map.put("form", DomHTMLFormElement.class);
- map.put("frame", DomHTMLFrameElement.class);
- map.put("frameset", DomHTMLFrameSetElement.class);
- map.put("head", DomHTMLHeadElement.class);
- map.put("h1", DomHTMLHeadingElement.class);
- map.put("h2", DomHTMLHeadingElement.class);
- map.put("h3", DomHTMLHeadingElement.class);
- map.put("h4", DomHTMLHeadingElement.class);
- map.put("h5", DomHTMLHeadingElement.class);
- map.put("h6", DomHTMLHeadingElement.class);
- map.put("html", DomHTMLHtmlElement.class);
- map.put("iframe", DomHTMLIFrameElement.class);
- map.put("img", DomHTMLImageElement.class);
- map.put("input", DomHTMLInputElement.class);
- map.put("isindex", DomHTMLIsIndexElement.class);
- map.put("label", DomHTMLLabelElement.class);
- map.put("legend", DomHTMLLegendElement.class);
- map.put("li", DomHTMLLIElement.class);
- map.put("link", DomHTMLLinkElement.class);
- map.put("map", DomHTMLMapElement.class);
- map.put("menu", DomHTMLMenuElement.class);
- map.put("meta", DomHTMLMetaElement.class);
- map.put("ins", DomHTMLModElement.class);
- map.put("del", DomHTMLModElement.class);
- map.put("object", DomHTMLObjectElement.class);
- map.put("ol", DomHTMLOListElement.class);
- map.put("optgroup", DomHTMLOptGroupElement.class);
- map.put("option", DomHTMLOptionElement.class);
- map.put("p", DomHTMLParagraphElement.class);
- map.put("param", DomHTMLParamElement.class);
- map.put("pre", DomHTMLPreElement.class);
- map.put("q", DomHTMLQuoteElement.class);
- map.put("blockquote", DomHTMLQuoteElement.class);
- map.put("script", DomHTMLScriptElement.class);
- map.put("select", DomHTMLSelectElement.class);
- map.put("style", DomHTMLStyleElement.class);
- map.put("caption", DomHTMLTableCaptionElement.class);
- map.put("th", DomHTMLTableCellElement.class);
- map.put("td", DomHTMLTableCellElement.class);
- map.put("col", DomHTMLTableColElement.class);
- map.put("colgroup", DomHTMLTableColElement.class);
- map.put("table", DomHTMLTableElement.class);
- map.put("tr", DomHTMLTableRowElement.class);
- map.put("thead", DomHTMLTableSectionElement.class);
- map.put("tfoot", DomHTMLTableSectionElement.class);
- map.put("tbody", DomHTMLTableSectionElement.class);
- map.put("textarea", DomHTMLTextAreaElement.class);
- map.put("title", DomHTMLTitleElement.class);
- map.put("ul", DomHTMLUListElement.class);
- ELEMENT_CLASSES = Collections.unmodifiableMap(map);
- }
-
- private static Set HTML_NS_URIS;
- static
- {
- Set set = new HashSet();
- set.add("http://www.w3.org/TR/html4/strict");
- set.add("http://www.w3.org/TR/html4/loose");
- set.add("http://www.w3.org/TR/html4/frameset");
- set.add("http://www.w3.org/1999/xhtml");
- set.add("http://www.w3.org/TR/xhtml1/strict");
- set.add("http://www.w3.org/TR/xhtml1/loose");
- set.add("http://www.w3.org/TR/xhtml1/frameset");
- HTML_NS_URIS = Collections.unmodifiableSet(set);
- }
-
- /**
- * Convenience constructor.
- */
- public DomHTMLDocument()
- {
- this(new DomHTMLImpl());
- }
-
- /**
- * Constructor.
- * This is called by the DOMImplementation.
- */
- public DomHTMLDocument(DomHTMLImpl impl)
- {
- super(impl);
- }
-
- private Node getChildNodeByName(Node parent, String name)
- {
- for (Node ctx = parent.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- if (name.equalsIgnoreCase(ctx.getNodeName()))
- {
- return ctx;
- }
- }
- return null;
- }
-
- public String getTitle()
- {
- Node html = getDocumentElement();
- if (html != null)
- {
- Node head = getChildNodeByName(html, "head");
- if (head != null)
- {
- Node title = getChildNodeByName(head, "title");
- if (title != null)
- {
- return title.getTextContent();
- }
- }
- }
- return null;
- }
-
- public void setTitle(String title)
- {
- Node html = getDocumentElement();
- if (html == null)
- {
- html = createElement("html");
- appendChild(html);
- }
- Node head = getChildNodeByName(html, "head");
- if (head == null)
- {
- head = createElement("head");
- Node first = html.getFirstChild();
- if (first != null)
- {
- html.insertBefore(first, head);
- }
- else
- {
- html.appendChild(head);
- }
- }
- Node titleNode = getChildNodeByName(head, "title");
- if (titleNode == null)
- {
- titleNode = createElement("title");
- Node first = head.getFirstChild();
- if (first != null)
- {
- head.insertBefore(first, titleNode);
- }
- else
- {
- head.appendChild(titleNode);
- }
- }
- titleNode.setTextContent(title);
- }
-
- public String getReferrer()
- {
- // TODO getReferrer
- return null;
- }
-
- public String getDomain()
- {
- try
- {
- URL url = new URL(getDocumentURI());
- return url.getHost();
- }
- catch (MalformedURLException e)
- {
- return null;
- }
- }
-
- public String getURL()
- {
- return getDocumentURI();
- }
-
- public HTMLElement getBody()
- {
- Node html = getDocumentElement();
- if (html != null)
- {
- Node body = getChildNodeByName(html, "body");
- if (body == null)
- {
- body = getChildNodeByName(html, "frameset");
- }
- return (HTMLElement) body;
- }
- return null;
- }
-
- public void setBody(HTMLElement body)
- {
- Node html = getDocumentElement();
- if (html == null)
- {
- html = createElement("html");
- appendChild(html);
- }
- Node ref = getBody();
- if (ref == null)
- {
- html.appendChild(body);
- }
- else
- {
- html.replaceChild(body, ref);
- }
- }
-
- public HTMLCollection getImages()
- {
- DomHTMLCollection ret = new DomHTMLCollection(this, this);
- ret.addNodeName("img");
- ret.evaluate();
- return ret;
- }
-
- public HTMLCollection getApplets()
- {
- DomHTMLCollection ret = new DomHTMLCollection(this, this);
- ret.addNodeName("object");
- ret.addNodeName("applet");
- ret.evaluate();
- return ret;
- }
-
- public HTMLCollection getLinks()
- {
- DomHTMLCollection ret = new DomHTMLCollection(this, this);
- ret.addNodeName("area");
- ret.addNodeName("a");
- ret.evaluate();
- return ret;
- }
-
- public HTMLCollection getForms()
- {
- DomHTMLCollection ret = new DomHTMLCollection(this, this);
- ret.addNodeName("form");
- ret.evaluate();
- return ret;
- }
-
- public HTMLCollection getAnchors()
- {
- DomHTMLCollection ret = new DomHTMLCollection(this, this);
- ret.addNodeName("a");
- ret.addAttributeName("name");
- ret.evaluate();
- return ret;
- }
-
- public String getCookie()
- {
- // TODO getCookie
- return null;
- }
-
- public void setCookie(String cookie)
- {
- // TODO setCookie
- }
-
- public void open()
- {
- // TODO open
- }
-
- public void close()
- {
- // TODO close
- }
-
- public void write(String text)
- {
- // TODO write
- }
-
- public void writeln(String text)
- {
- // TODO write
- }
-
- public NodeList getElementsByName(String name)
- {
- DomHTMLCollection ret = new DomHTMLCollection(this, this);
- ret.addNodeName(name);
- ret.evaluate();
- return ret;
- // TODO xhtml: return only form controls (?)
- }
-
- public Element createElement(String tagName)
- {
- return createElementNS(null, tagName);
- }
-
- public Element createElementNS(String uri, String qName)
- {
- /* If a non-HTML element, use the default implementation. */
- if (uri != null && !HTML_NS_URIS.contains(uri))
- {
- return super.createElementNS(uri, qName);
- }
- String localName = qName.toLowerCase();
- int ci = qName.indexOf(':');
- if (ci != -1)
- {
- localName = qName.substring(ci + 1);
- }
- Class t = (Class) ELEMENT_CLASSES.get(localName);
- /* If a non-HTML element, use the default implementation. */
- if (t == null)
- {
- return super.createElementNS(uri, qName);
- }
- try
- {
- Constructor c = t.getDeclaredConstructor(ELEMENT_PT);
- Object[] args = new Object[] { this, uri, qName };
- return (Element) c.newInstance(args);
- }
- catch (Exception e)
- {
- DOMException e2 = new DomDOMException(DOMException.TYPE_MISMATCH_ERR);
- e2.initCause(e);
- throw e2;
- }
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLElement.java b/libjava/gnu/xml/dom/html2/DomHTMLElement.java
deleted file mode 100644
index 844ffefe49c..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLElement.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/* DomHTMLElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import gnu.xml.dom.DomDOMException;
-import gnu.xml.dom.DomElement;
-import gnu.xml.dom.DomEvent;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.events.UIEvent;
-import org.w3c.dom.html2.HTMLElement;
-
-/**
- * Abstract implementation of an HTML element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public abstract class DomHTMLElement
- extends DomElement
- implements HTMLElement
-{
-
- protected DomHTMLElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- /**
- * Returns the value of the specified attribute.
- * The attribute name is case insensitive.
- */
- protected String getHTMLAttribute(String name)
- {
- if (hasAttributes())
- {
- NamedNodeMap attrs = getAttributes();
- int len = attrs.getLength();
- for (int i = 0; i < len; i++)
- {
- Node attr = attrs.item(i);
- String attrName = attr.getLocalName();
- if (attrName.equalsIgnoreCase(name))
- {
- return attr.getNodeValue();
- }
- }
- }
- return "";
- }
-
- protected int getIntHTMLAttribute(String name)
- {
- String value = getHTMLAttribute(name);
- if (value == null)
- {
- return -1;
- }
- try
- {
- return Integer.parseInt(value);
- }
- catch (NumberFormatException e)
- {
- return -1;
- }
- }
-
- protected boolean getBooleanHTMLAttribute(String name)
- {
- String value = getHTMLAttribute(name);
- return value != null;
- }
-
- /**
- * Sets the value of the specified attribute.
- * The attribute name is case insensitive.
- */
- protected void setHTMLAttribute(String name, String value)
- {
- Node attr;
- NamedNodeMap attrs = getAttributes();
- int len = attrs.getLength();
- for (int i = 0; i < len; i++)
- {
- attr = attrs.item(i);
- String attrName = attr.getLocalName();
- if (attrName.equalsIgnoreCase(name))
- {
- if (value != null)
- {
- attr.setNodeValue(value);
- }
- else
- {
- attrs.removeNamedItem(attr.getNodeName());
- }
- return;
- }
- }
- if (value != null)
- {
- // Create a new attribute
- DomHTMLDocument doc = (DomHTMLDocument) getOwnerDocument();
- // XXX namespace URI for attribute?
- attr = doc.createAttribute(name);
- attr.setNodeValue(value);
- }
- }
-
- protected void setIntHTMLAttribute(String name, int value)
- {
- setHTMLAttribute(name, Integer.toString(value));
- }
-
- protected void setBooleanHTMLAttribute(String name, boolean value)
- {
- setHTMLAttribute(name, value ? name : null);
- }
-
- /**
- * Returns the first parent element with the specified name.
- */
- protected Node getParentElement(String name)
- {
- for (Node parent = getParentNode(); parent != null;
- parent = parent.getParentNode())
- {
- if (name.equalsIgnoreCase(parent.getLocalName()))
- {
- return parent;
- }
- }
- return null;
- }
-
- /**
- * Returns the first child element with the specified name.
- */
- protected Node getChildElement(String name)
- {
- for (Node child = getFirstChild(); child != null;
- child = child.getNextSibling())
- {
- if (name.equalsIgnoreCase(child.getLocalName()))
- {
- return child;
- }
- }
- return null;
- }
-
- /**
- * Returns the index of this element among elements of the same name,
- * relative to its parent.
- */
- protected int getIndex()
- {
- int index = 0;
- Node parent = getParentNode();
- if (parent != null)
- {
- for (Node ctx = parent.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- if (ctx == this)
- {
- return index;
- }
- index++;
- }
- }
- throw new DomDOMException(DOMException.NOT_FOUND_ERR);
- }
-
- protected void dispatchUIEvent(String name)
- {
- UIEvent event = new DomEvent.DomUIEvent(name);
- dispatchEvent(event);
- }
-
- public String getId()
- {
- return getHTMLAttribute("id");
- }
-
- public void setId(String id)
- {
- setHTMLAttribute("id", id);
- }
-
- public String getTitle()
- {
- return getHTMLAttribute("title");
- }
-
- public void setTitle(String title)
- {
- setHTMLAttribute("title", title);
- }
-
- public String getLang()
- {
- return getHTMLAttribute("lang");
- }
-
- public void setLang(String lang)
- {
- setHTMLAttribute("lang", lang);
- }
-
- public String getDir()
- {
- return getHTMLAttribute("dir");
- }
-
- public void setDir(String dir)
- {
- setHTMLAttribute("dir", dir);
- }
-
- public String getClassName()
- {
- return getHTMLAttribute("class");
- }
-
- public void setClassName(String className)
- {
- setHTMLAttribute("class", className);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLFieldSetElement.java b/libjava/gnu/xml/dom/html2/DomHTMLFieldSetElement.java
deleted file mode 100644
index 2c857721947..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLFieldSetElement.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/* DomHTMLFieldSetElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLFieldSetElement;
-import org.w3c.dom.html2.HTMLFormElement;
-
-/**
- * An HTML 'FIELDSET' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLFieldSetElement
- extends DomHTMLElement
- implements HTMLFieldSetElement
-{
-
- protected DomHTMLFieldSetElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public HTMLFormElement getForm()
- {
- return (HTMLFormElement) getParentElement("form");
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLFontElement.java b/libjava/gnu/xml/dom/html2/DomHTMLFontElement.java
deleted file mode 100644
index 08bd349fa62..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLFontElement.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/* DomHTMLFontElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLFontElement;
-
-/**
- * An HTML 'FONT' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLFontElement
- extends DomHTMLElement
- implements HTMLFontElement
-{
-
- protected DomHTMLFontElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getColor()
- {
- return getHTMLAttribute("color");
- }
-
- public void setColor(String color)
- {
- setHTMLAttribute("color", color);
- }
-
- public String getFace()
- {
- return getHTMLAttribute("face");
- }
-
- public void setFace(String face)
- {
- setHTMLAttribute("face", face);
- }
-
- public String getSize()
- {
- return getHTMLAttribute("size");
- }
-
- public void setSize(String size)
- {
- setHTMLAttribute("size", size);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLFormElement.java b/libjava/gnu/xml/dom/html2/DomHTMLFormElement.java
deleted file mode 100644
index 119d97eb885..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLFormElement.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/* DomHTMLFormElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLCollection;
-import org.w3c.dom.html2.HTMLFormElement;
-
-/**
- * An HTML 'FORM' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLFormElement
- extends DomHTMLElement
- implements HTMLFormElement
-{
-
- protected DomHTMLFormElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public HTMLCollection getElements()
- {
- DomHTMLCollection ret =
- new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
- ret.addNodeName("input");
- ret.addNodeName("button");
- ret.addNodeName("select");
- ret.addNodeName("textarea");
- ret.addNodeName("isindex");
- ret.addNodeName("label");
- ret.addNodeName("option");
- ret.evaluate();
- return ret;
- }
-
- public int getLength()
- {
- return getElements().getLength();
- }
-
- public String getName()
- {
- return getHTMLAttribute("name");
- }
-
- public void setName(String name)
- {
- setHTMLAttribute("name", name);
- }
-
- public String getAcceptCharset()
- {
- return getHTMLAttribute("accept-charset");
- }
-
- public void setAcceptCharset(String acceptCharset)
- {
- setHTMLAttribute("accept-charset", acceptCharset);
- }
-
- public String getAction()
- {
- return getHTMLAttribute("action");
- }
-
- public void setAction(String action)
- {
- setHTMLAttribute("action", action);
- }
-
- public String getEnctype()
- {
- return getHTMLAttribute("enctype");
- }
-
- public void setEnctype(String enctype)
- {
- setHTMLAttribute("enctype", enctype);
- }
-
- public String getMethod()
- {
- return getHTMLAttribute("method");
- }
-
- public void setMethod(String method)
- {
- setHTMLAttribute("method", method);
- }
-
- public String getTarget()
- {
- return getHTMLAttribute("target");
- }
-
- public void setTarget(String target)
- {
- setHTMLAttribute("target", target);
- }
-
- public void submit()
- {
- dispatchUIEvent("submit");
- }
-
- public void reset()
- {
- dispatchUIEvent("reset");
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLFrameElement.java b/libjava/gnu/xml/dom/html2/DomHTMLFrameElement.java
deleted file mode 100644
index 124f35268e8..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLFrameElement.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/* DomHTMLFrameElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.html2.HTMLFrameElement;
-
-/**
- * An HTML 'FRAME' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLFrameElement
- extends DomHTMLElement
- implements HTMLFrameElement
-{
-
- protected DomHTMLFrameElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getFrameBorder()
- {
- return getHTMLAttribute("frameborder");
- }
-
- public void setFrameBorder(String frameBorder)
- {
- setHTMLAttribute("frameborder", frameBorder);
- }
-
- public String getLongDesc()
- {
- return getHTMLAttribute("longdesc");
- }
-
- public void setLongDesc(String longDesc)
- {
- setHTMLAttribute("longdesc", longDesc);
- }
-
- public String getMarginHeight()
- {
- return getHTMLAttribute("marginheight");
- }
-
- public void setMarginHeight(String marginHeight)
- {
- setHTMLAttribute("marginheight", marginHeight);
- }
-
- public String getMarginWidth()
- {
- return getHTMLAttribute("marginwidth");
- }
-
- public void setMarginWidth(String marginWidth)
- {
- setHTMLAttribute("marginwidth", marginWidth);
- }
-
- public String getName()
- {
- return getHTMLAttribute("name");
- }
-
- public void setName(String name)
- {
- setHTMLAttribute("name", name);
- }
-
- public boolean getNoResize()
- {
- return getBooleanHTMLAttribute("noresize");
- }
-
- public void setNoResize(boolean noResize)
- {
- setBooleanHTMLAttribute("noresize", noResize);
- }
-
- public String getScrolling()
- {
- return getHTMLAttribute("scrolling");
- }
-
- public void setScrolling(String scrolling)
- {
- setHTMLAttribute("scrolling", scrolling);
- }
-
- public String getSrc()
- {
- return getHTMLAttribute("src");
- }
-
- public void setSrc(String src)
- {
- setHTMLAttribute("src", src);
- }
-
- public Document getContentDocument()
- {
- // TODO getContentDocument
- return null;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLFrameSetElement.java b/libjava/gnu/xml/dom/html2/DomHTMLFrameSetElement.java
deleted file mode 100644
index 44d317f64a3..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLFrameSetElement.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/* DomHTMLFrameSetElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLFrameSetElement;
-
-/**
- * An HTML 'FRAMESET' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLFrameSetElement
- extends DomHTMLElement
- implements HTMLFrameSetElement
-{
-
- protected DomHTMLFrameSetElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getCols()
- {
- return getHTMLAttribute("cols");
- }
-
- public void setCols(String cols)
- {
- setHTMLAttribute("cols", cols);
- }
-
- public String getRows()
- {
- return getHTMLAttribute("rows");
- }
-
- public void setRows(String rows)
- {
- setHTMLAttribute("rows", rows);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLHRElement.java b/libjava/gnu/xml/dom/html2/DomHTMLHRElement.java
deleted file mode 100644
index d1b48012175..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLHRElement.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/* DomHTMLHRElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLHRElement;
-
-/**
- * An HTML 'HR' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLHRElement
- extends DomHTMLElement
- implements HTMLHRElement
-{
-
- protected DomHTMLHRElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
- public boolean getNoShade()
- {
- return getBooleanHTMLAttribute("noshade");
- }
-
- public void setNoShade(boolean noShade)
- {
- setBooleanHTMLAttribute("noshade", noShade);
- }
-
- public String getSize()
- {
- return getHTMLAttribute("size");
- }
-
- public void setSize(String size)
- {
- setHTMLAttribute("size", size);
- }
-
- public String getWidth()
- {
- return getHTMLAttribute("width");
- }
-
- public void setWidth(String width)
- {
- setHTMLAttribute("width", width);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLHeadElement.java b/libjava/gnu/xml/dom/html2/DomHTMLHeadElement.java
deleted file mode 100644
index f68e8c7fad3..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLHeadElement.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* DomHTMLHeadElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLHeadElement;
-
-/**
- * An HTML 'HEAD' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLHeadElement
- extends DomHTMLElement
- implements HTMLHeadElement
-{
-
- protected DomHTMLHeadElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getProfile()
- {
- return getHTMLAttribute("profile");
- }
-
- public void setProfile(String profile)
- {
- setHTMLAttribute("profile", profile);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLHeadingElement.java b/libjava/gnu/xml/dom/html2/DomHTMLHeadingElement.java
deleted file mode 100644
index f1427ad89e6..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLHeadingElement.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* DomHTMLHeadingElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLHeadingElement;
-
-/**
- * An HTML 'H1', 'H2', 'H3', 'H4', 'H5', or 'H6' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLHeadingElement
- extends DomHTMLElement
- implements HTMLHeadingElement
-{
-
- protected DomHTMLHeadingElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLHtmlElement.java b/libjava/gnu/xml/dom/html2/DomHTMLHtmlElement.java
deleted file mode 100644
index 95d45264eee..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLHtmlElement.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* DomHTMLHtmlElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLHtmlElement;
-
-/**
- * An HTML 'HTML' top-level element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLHtmlElement
- extends DomHTMLElement
- implements HTMLHtmlElement
-{
-
- protected DomHTMLHtmlElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getVersion()
- {
- return getHTMLAttribute("version");
- }
-
- public void setVersion(String version)
- {
- setHTMLAttribute("version", version);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLIFrameElement.java b/libjava/gnu/xml/dom/html2/DomHTMLIFrameElement.java
deleted file mode 100644
index c5ca75d8c21..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLIFrameElement.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/* DomHTMLIFrameElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.html2.HTMLIFrameElement;
-
-/**
- * An HTML 'IFRAME' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLIFrameElement
- extends DomHTMLElement
- implements HTMLIFrameElement
-{
-
- protected DomHTMLIFrameElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
- public String getFrameBorder()
- {
- return getHTMLAttribute("frameborder");
- }
-
- public void setFrameBorder(String frameBorder)
- {
- setHTMLAttribute("frameborder", frameBorder);
- }
-
- public String getHeight()
- {
- return getHTMLAttribute("height");
- }
-
- public void setHeight(String height)
- {
- setHTMLAttribute("height", height);
- }
-
- public String getLongDesc()
- {
- return getHTMLAttribute("longdesc");
- }
-
- public void setLongDesc(String longDesc)
- {
- setHTMLAttribute("longdesc", longDesc);
- }
-
- public String getMarginHeight()
- {
- return getHTMLAttribute("marginheight");
- }
-
- public void setMarginHeight(String marginHeight)
- {
- setHTMLAttribute("marginheight", marginHeight);
- }
-
- public String getMarginWidth()
- {
- return getHTMLAttribute("marginwidth");
- }
-
- public void setMarginWidth(String marginWidth)
- {
- setHTMLAttribute("marginwidth", marginWidth);
- }
-
- public String getName()
- {
- return getHTMLAttribute("name");
- }
-
- public void setName(String name)
- {
- setHTMLAttribute("name", name);
- }
-
- public String getScrolling()
- {
- return getHTMLAttribute("scrolling");
- }
-
- public void setScrolling(String scrolling)
- {
- setHTMLAttribute("scrolling", scrolling);
- }
-
- public String getSrc()
- {
- return getHTMLAttribute("src");
- }
-
- public void setSrc(String src)
- {
- setHTMLAttribute("src", src);
- }
-
- public String getWidth()
- {
- return getHTMLAttribute("width");
- }
-
- public void setWidth(String width)
- {
- setHTMLAttribute("width", width);
- }
-
- public Document getContentDocument()
- {
- // TODO getContentDocument
- return null;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLImageElement.java b/libjava/gnu/xml/dom/html2/DomHTMLImageElement.java
deleted file mode 100644
index c96e5fede4d..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLImageElement.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/* DomHTMLImageElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLImageElement;
-
-/**
- * An HTML 'IMG' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLImageElement
- extends DomHTMLElement
- implements HTMLImageElement
-{
-
- protected DomHTMLImageElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getName()
- {
- return getHTMLAttribute("name");
- }
-
- public void setName(String name)
- {
- setHTMLAttribute("name", name);
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
- public String getAlt()
- {
- return getHTMLAttribute("alt");
- }
-
- public void setAlt(String alt)
- {
- setHTMLAttribute("alt", alt);
- }
-
- public String getBorder()
- {
- return getHTMLAttribute("border");
- }
-
- public void setBorder(String border)
- {
- setHTMLAttribute("border", border);
- }
-
- public int getHeight()
- {
- return getIntHTMLAttribute("height");
- }
-
- public void setHeight(int height)
- {
- setIntHTMLAttribute("height", height);
- }
-
- public int getHspace()
- {
- return getIntHTMLAttribute("hspace");
- }
-
- public void setHspace(int hspace)
- {
- setIntHTMLAttribute("hspace", hspace);
- }
-
- public boolean getIsMap()
- {
- return getBooleanHTMLAttribute("ismap");
- }
-
- public void setIsMap(boolean isMap)
- {
- setBooleanHTMLAttribute("ismap", isMap);
- }
-
- public String getLongDesc()
- {
- return getHTMLAttribute("longdesc");
- }
-
- public void setLongDesc(String longDesc)
- {
- setHTMLAttribute("longdesc", longDesc);
- }
-
- public String getSrc()
- {
- return getHTMLAttribute("src");
- }
-
- public void setSrc(String src)
- {
- setHTMLAttribute("src", src);
- }
-
- public String getUseMap()
- {
- return getHTMLAttribute("usemap");
- }
-
- public void setUseMap(String useMap)
- {
- setHTMLAttribute("usemap", useMap);
- }
-
- public int getVspace()
- {
- return getIntHTMLAttribute("vspace");
- }
-
- public void setVspace(int vspace)
- {
- setIntHTMLAttribute("vspace", vspace);
- }
-
- public int getWidth()
- {
- return getIntHTMLAttribute("width");
- }
-
- public void setWidth(int width)
- {
- setIntHTMLAttribute("width", width);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLImpl.java b/libjava/gnu/xml/dom/html2/DomHTMLImpl.java
deleted file mode 100644
index 9f0db085040..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLImpl.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/* DomHTMLImpl.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import gnu.xml.dom.DomImpl;
-import org.w3c.dom.Document;
-
-/**
- * Specialised DOMImplementation for creating HTML documents.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLImpl
- extends DomImpl
-{
-
- protected Document createDocument()
- {
- return new DomHTMLDocument(this);
- }
-
- public Object getFeature(String feature, String version)
- {
- if (hasFeature(feature, version))
- {
- return this;
- }
- return null;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLInputElement.java b/libjava/gnu/xml/dom/html2/DomHTMLInputElement.java
deleted file mode 100644
index 1dbc9c28de0..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLInputElement.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/* DomHTMLInputElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLFormElement;
-import org.w3c.dom.html2.HTMLInputElement;
-
-/**
- * An HTML 'INPUT' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLInputElement
- extends DomHTMLElement
- implements HTMLInputElement
-{
-
- protected String value;
- protected Boolean checked;
-
- protected DomHTMLInputElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getDefaultValue()
- {
- return getHTMLAttribute("value");
- }
-
- public void setDefaultValue(String defaultValue)
- {
- setHTMLAttribute("value", defaultValue);
- }
-
- public boolean getDefaultChecked()
- {
- return getBooleanHTMLAttribute("checked");
- }
-
- public void setDefaultChecked(boolean defaultChecked)
- {
- setBooleanHTMLAttribute("checked", defaultChecked);
- }
-
- public HTMLFormElement getForm()
- {
- return (HTMLFormElement) getParentElement("form");
- }
-
- public String getAccept()
- {
- return getHTMLAttribute("accept");
- }
-
- public void setAccept(String accept)
- {
- setHTMLAttribute("accept", accept);
- }
-
- public String getAccessKey()
- {
- return getHTMLAttribute("accesskey");
- }
-
- public void setAccessKey(String accessKey)
- {
- setHTMLAttribute("accesskey", accessKey);
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
- public String getAlt()
- {
- return getHTMLAttribute("alt");
- }
-
- public void setAlt(String alt)
- {
- setHTMLAttribute("alt", alt);
- }
-
- public boolean getChecked()
- {
- if (checked == null)
- {
- checked = Boolean.valueOf(getDefaultChecked());
- }
- return checked.booleanValue();
- }
-
- public void setChecked(boolean checked)
- {
- this.checked = Boolean.valueOf(checked);
- }
-
- public boolean getDisabled()
- {
- return getBooleanHTMLAttribute("disabled");
- }
-
- public void setDisabled(boolean disabled)
- {
- setBooleanHTMLAttribute("disabled", disabled);
- }
-
- public int getMaxLength()
- {
- return getIntHTMLAttribute("maxLength");
- }
-
- public void setMaxLength(int maxLength)
- {
- setIntHTMLAttribute("maxLength", maxLength);
- }
-
- public String getName()
- {
- return getHTMLAttribute("name");
- }
-
- public void setName(String name)
- {
- setHTMLAttribute("name", name);
- }
-
- public boolean getReadOnly()
- {
- return getBooleanHTMLAttribute("readonly");
- }
-
- public void setReadOnly(boolean readOnly)
- {
- setBooleanHTMLAttribute("readonly", readOnly);
- }
-
- public int getSize()
- {
- return getIntHTMLAttribute("size");
- }
-
- public void setSize(int size)
- {
- setIntHTMLAttribute("size", size);
- }
-
- public String getSrc()
- {
- return getHTMLAttribute("src");
- }
-
- public void setSrc(String src)
- {
- setHTMLAttribute("src", src);
- }
-
- public int getTabIndex()
- {
- return getIntHTMLAttribute("tabindex");
- }
-
- public void setTabIndex(int tabIndex)
- {
- setIntHTMLAttribute("tabindex", tabIndex);
- }
-
- public String getType()
- {
- return getHTMLAttribute("type");
- }
-
- public void setType(String type)
- {
- setHTMLAttribute("type", type);
- }
-
- public String getUseMap()
- {
- return getHTMLAttribute("usemap");
- }
-
- public void setUseMap(String useMap)
- {
- setHTMLAttribute("usemap", useMap);
- }
-
- public String getValue()
- {
- if (value == null)
- {
- value = getDefaultValue();
- }
- return value;
- }
-
- public void setValue(String value)
- {
- this.value = value;
- }
-
- public void blur()
- {
- dispatchUIEvent("blur");
- }
-
- public void focus()
- {
- dispatchUIEvent("focus");
- }
-
- public void select()
- {
- dispatchUIEvent("select");
- }
-
- public void click()
- {
- dispatchUIEvent("click");
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLIsIndexElement.java b/libjava/gnu/xml/dom/html2/DomHTMLIsIndexElement.java
deleted file mode 100644
index 087f4a0cd79..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLIsIndexElement.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/* DomHTMLIsIndexElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLFormElement;
-import org.w3c.dom.html2.HTMLIsIndexElement;
-
-/**
- * An HTML 'ISINDEX' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLIsIndexElement
- extends DomHTMLElement
- implements HTMLIsIndexElement
-{
-
- protected DomHTMLIsIndexElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public HTMLFormElement getForm()
- {
- return (HTMLFormElement) getParentElement("form");
- }
-
- public String getPrompt()
- {
- return getHTMLAttribute("prompt");
- }
-
- public void setPrompt(String prompt)
- {
- setHTMLAttribute("prompt", prompt);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLLIElement.java b/libjava/gnu/xml/dom/html2/DomHTMLLIElement.java
deleted file mode 100644
index 11eccdf5df3..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLLIElement.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/* DomHTMLLIElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLLIElement;
-
-/**
- * An HTML 'LI' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLLIElement
- extends DomHTMLElement
- implements HTMLLIElement
-{
-
- protected DomHTMLLIElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getType()
- {
- return getHTMLAttribute("type");
- }
-
- public void setType(String type)
- {
- setHTMLAttribute("type", type);
- }
-
- public int getValue()
- {
- return getIntHTMLAttribute("value");
- }
-
- public void setValue(int value)
- {
- setIntHTMLAttribute("value", value);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLLabelElement.java b/libjava/gnu/xml/dom/html2/DomHTMLLabelElement.java
deleted file mode 100644
index c0cc39f8e96..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLLabelElement.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/* DomHTMLLabelElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLFormElement;
-import org.w3c.dom.html2.HTMLLabelElement;
-
-/**
- * An HTML 'LABEL' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLLabelElement
- extends DomHTMLElement
- implements HTMLLabelElement
-{
-
- protected DomHTMLLabelElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public HTMLFormElement getForm()
- {
- return (HTMLFormElement) getParentElement("form");
- }
-
- public String getAccessKey()
- {
- return getHTMLAttribute("accesskey");
- }
-
- public void setAccessKey(String accessKey)
- {
- setHTMLAttribute("accesskey", accessKey);
- }
-
- public String getHtmlFor()
- {
- return getHTMLAttribute("for");
- }
-
- public void setHtmlFor(String htmlFor)
- {
- setHTMLAttribute("for", htmlFor);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLLegendElement.java b/libjava/gnu/xml/dom/html2/DomHTMLLegendElement.java
deleted file mode 100644
index a500f8fa14c..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLLegendElement.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/* DomHTMLLegendElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLFormElement;
-import org.w3c.dom.html2.HTMLLegendElement;
-
-/**
- * An HTML 'LEGEND' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLLegendElement
- extends DomHTMLElement
- implements HTMLLegendElement
-{
-
- protected DomHTMLLegendElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public HTMLFormElement getForm()
- {
- return (HTMLFormElement) getParentElement("form");
- }
-
- public String getAccessKey()
- {
- return getHTMLAttribute("accesskey");
- }
-
- public void setAccessKey(String accessKey)
- {
- setHTMLAttribute("accesskey", accessKey);
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLLinkElement.java b/libjava/gnu/xml/dom/html2/DomHTMLLinkElement.java
deleted file mode 100644
index 127726ef7e3..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLLinkElement.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/* DomHTMLLinkElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLLinkElement;
-
-/**
- * An HTML 'LINK' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLLinkElement
- extends DomHTMLElement
- implements HTMLLinkElement
-{
-
- protected DomHTMLLinkElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public boolean getDisabled()
- {
- return getBooleanHTMLAttribute("disabled");
- }
-
- public void setDisabled(boolean disabled)
- {
- setBooleanHTMLAttribute("disabled", disabled);
- }
-
- public String getCharset()
- {
- return getHTMLAttribute("charset");
- }
-
- public void setCharset(String charset)
- {
- setHTMLAttribute("charset", charset);
- }
-
- public String getHref()
- {
- return getHTMLAttribute("href");
- }
-
- public void setHref(String href)
- {
- setHTMLAttribute("href", href);
- }
-
- public String getHreflang()
- {
- return getHTMLAttribute("hreflang");
- }
-
- public void setHreflang(String hreflang)
- {
- setHTMLAttribute("hreflang", hreflang);
- }
-
- public String getMedia()
- {
- return getHTMLAttribute("media");
- }
-
- public void setMedia(String media)
- {
- setHTMLAttribute("media", media);
- }
-
- public String getRel()
- {
- return getHTMLAttribute("rel");
- }
-
- public void setRel(String rel)
- {
- setHTMLAttribute("rel", rel);
- }
-
- public String getRev()
- {
- return getHTMLAttribute("rev");
- }
-
- public void setRev(String rev)
- {
- setHTMLAttribute("rev", rev);
- }
-
- public String getTarget()
- {
- return getHTMLAttribute("target");
- }
-
- public void setTarget(String target)
- {
- setHTMLAttribute("target", target);
- }
-
- public String getType()
- {
- return getHTMLAttribute("type");
- }
-
- public void setType(String type)
- {
- setHTMLAttribute("type", type);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLMapElement.java b/libjava/gnu/xml/dom/html2/DomHTMLMapElement.java
deleted file mode 100644
index 1f7182f4f29..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLMapElement.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/* DomHTMLMapElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLCollection;
-import org.w3c.dom.html2.HTMLMapElement;
-
-/**
- * An HTML 'MAP' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLMapElement
- extends DomHTMLElement
- implements HTMLMapElement
-{
-
- protected DomHTMLMapElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public HTMLCollection getAreas()
- {
- DomHTMLCollection ret =
- new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
- ret.addNodeName("area");
- ret.evaluate();
- return ret;
- }
-
- public String getName()
- {
- return getHTMLAttribute("name");
- }
-
- public void setName(String name)
- {
- setHTMLAttribute("name", name);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLMenuElement.java b/libjava/gnu/xml/dom/html2/DomHTMLMenuElement.java
deleted file mode 100644
index 17f6f589f9a..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLMenuElement.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* DomHTMLMenuElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLMenuElement;
-
-/**
- * An HTML 'MENU' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLMenuElement
- extends DomHTMLElement
- implements HTMLMenuElement
-{
-
- protected DomHTMLMenuElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public boolean getCompact()
- {
- return getBooleanHTMLAttribute("compact");
- }
-
- public void setCompact(boolean compact)
- {
- setBooleanHTMLAttribute("compact", compact);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLMetaElement.java b/libjava/gnu/xml/dom/html2/DomHTMLMetaElement.java
deleted file mode 100644
index 1a0440504de..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLMetaElement.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/* DomHTMLMetaElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLMetaElement;
-
-/**
- * An HTML 'META' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLMetaElement
- extends DomHTMLElement
- implements HTMLMetaElement
-{
-
- protected DomHTMLMetaElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getContent()
- {
- return getHTMLAttribute("content");
- }
-
- public void setContent(String content)
- {
- setHTMLAttribute("content", content);
- }
-
- public String getHttpEquiv()
- {
- return getHTMLAttribute("http-equiv");
- }
-
- public void setHttpEquiv(String httpEquiv)
- {
- setHTMLAttribute("http-equiv", httpEquiv);
- }
-
- public String getName()
- {
- return getHTMLAttribute("name");
- }
-
- public void setName(String name)
- {
- setHTMLAttribute("name", name);
- }
-
- public String getScheme()
- {
- return getHTMLAttribute("scheme");
- }
-
- public void setScheme(String scheme)
- {
- setHTMLAttribute("scheme", scheme);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLModElement.java b/libjava/gnu/xml/dom/html2/DomHTMLModElement.java
deleted file mode 100644
index 493f7242ba1..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLModElement.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/* DomHTMLModElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLModElement;
-
-/**
- * An HTML 'INS' or 'DEL' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLModElement
- extends DomHTMLElement
- implements HTMLModElement
-{
-
- protected DomHTMLModElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getCite()
- {
- return getHTMLAttribute("cite");
- }
-
- public void setCite(String cite)
- {
- setHTMLAttribute("cite", cite);
- }
-
- public String getDateTime()
- {
- return getHTMLAttribute("datetime");
- }
-
- public void setDateTime(String dateTime)
- {
- setHTMLAttribute("datetime", dateTime);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLOListElement.java b/libjava/gnu/xml/dom/html2/DomHTMLOListElement.java
deleted file mode 100644
index fb98cf40d79..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLOListElement.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/* DomHTMLOListElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLOListElement;
-
-/**
- * An HTML 'OL' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLOListElement
- extends DomHTMLElement
- implements HTMLOListElement
-{
-
- protected DomHTMLOListElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public boolean getCompact()
- {
- return getBooleanHTMLAttribute("compact");
- }
-
- public void setCompact(boolean compact)
- {
- setBooleanHTMLAttribute("compact", compact);
- }
-
- public int getStart()
- {
- return getIntHTMLAttribute("start");
- }
-
- public void setStart(int start)
- {
- setIntHTMLAttribute("start", start);
- }
-
- public String getType()
- {
- return getHTMLAttribute("type");
- }
-
- public void setType(String type)
- {
- setHTMLAttribute("type", type);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLObjectElement.java b/libjava/gnu/xml/dom/html2/DomHTMLObjectElement.java
deleted file mode 100644
index fdea9b15373..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLObjectElement.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/* DomHTMLObjectElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.html2.HTMLFormElement;
-import org.w3c.dom.html2.HTMLObjectElement;
-
-/**
- * An HTML 'OBJECT' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLObjectElement
- extends DomHTMLElement
- implements HTMLObjectElement
-{
-
- protected DomHTMLObjectElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public HTMLFormElement getForm()
- {
- return (HTMLFormElement) getParentElement("form");
- }
-
- public String getCode()
- {
- return getHTMLAttribute("code");
- }
-
- public void setCode(String code)
- {
- setHTMLAttribute("code", code);
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
- public String getArchive()
- {
- return getHTMLAttribute("archive");
- }
-
- public void setArchive(String archive)
- {
- setHTMLAttribute("archive", archive);
- }
-
- public String getBorder()
- {
- return getHTMLAttribute("border");
- }
-
- public void setBorder(String border)
- {
- setHTMLAttribute("border", border);
- }
-
- public String getCodeBase()
- {
- return getHTMLAttribute("codebase");
- }
-
- public void setCodeBase(String codeBase)
- {
- setHTMLAttribute("codebase", codeBase);
- }
-
- public String getCodeType()
- {
- return getHTMLAttribute("codetype");
- }
-
- public void setCodeType(String codeType)
- {
- setHTMLAttribute("codetype", codeType);
- }
-
- public String getData()
- {
- return getHTMLAttribute("data");
- }
-
- public void setData(String data)
- {
- setHTMLAttribute("data", data);
- }
-
- public boolean getDeclare()
- {
- return getBooleanHTMLAttribute("declare");
- }
-
- public void setDeclare(boolean declare)
- {
- setBooleanHTMLAttribute("declare", declare);
- }
-
- public String getHeight()
- {
- return getHTMLAttribute("height");
- }
-
- public void setHeight(String height)
- {
- setHTMLAttribute("height", height);
- }
-
- public int getHspace()
- {
- return getIntHTMLAttribute("hspace");
- }
-
- public void setHspace(int hspace)
- {
- setIntHTMLAttribute("hspace", hspace);
- }
-
- public String getName()
- {
- return getHTMLAttribute("name");
- }
-
- public void setName(String name)
- {
- setHTMLAttribute("name", name);
- }
-
- public String getStandby()
- {
- return getHTMLAttribute("standby");
- }
-
- public void setStandby(String standby)
- {
- setHTMLAttribute("standby", standby);
- }
-
- public int getTabIndex()
- {
- return getIntHTMLAttribute("tabindex");
- }
-
- public void setTabIndex(int tabIndex)
- {
- setIntHTMLAttribute("tabindex", tabIndex);
- }
-
- public String getType()
- {
- return getHTMLAttribute("type");
- }
-
- public void setType(String type)
- {
- setHTMLAttribute("type", type);
- }
-
- public String getUseMap()
- {
- return getHTMLAttribute("usemap");
- }
-
- public void setUseMap(String useMap)
- {
- setHTMLAttribute("usemap", useMap);
- }
-
- public int getVspace()
- {
- return getIntHTMLAttribute("vspace");
- }
-
- public void setVspace(int vspace)
- {
- setIntHTMLAttribute("vspace", vspace);
- }
-
- public String getWidth()
- {
- return getHTMLAttribute("width");
- }
-
- public void setWidth(String width)
- {
- setHTMLAttribute("width", width);
- }
-
- public Document getContentDocument()
- {
- // TODO getContentDocument
- return null;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLOptGroupElement.java b/libjava/gnu/xml/dom/html2/DomHTMLOptGroupElement.java
deleted file mode 100644
index 76545e130cb..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLOptGroupElement.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/* DomHTMLOptGroupElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLOptGroupElement;
-
-/**
- * An HTML 'OPTGROUP' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLOptGroupElement
- extends DomHTMLElement
- implements HTMLOptGroupElement
-{
-
- protected DomHTMLOptGroupElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public boolean getDisabled()
- {
- return getBooleanHTMLAttribute("disabled");
- }
-
- public void setDisabled(boolean disabled)
- {
- setBooleanHTMLAttribute("disabled", disabled);
- }
-
- public String getLabel()
- {
- return getHTMLAttribute("label");
- }
-
- public void setLabel(String label)
- {
- setHTMLAttribute("label", label);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLOptionElement.java b/libjava/gnu/xml/dom/html2/DomHTMLOptionElement.java
deleted file mode 100644
index 69c059d9d43..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLOptionElement.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/* DomHTMLOptionElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLFormElement;
-import org.w3c.dom.html2.HTMLOptionElement;
-
-/**
- * An HTML 'OPTION' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLOptionElement
- extends DomHTMLElement
- implements HTMLOptionElement
-{
-
- protected Boolean selected;
-
- protected DomHTMLOptionElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public HTMLFormElement getForm()
- {
- return (HTMLFormElement) getParentElement("form");
- }
-
- public boolean getDefaultSelected()
- {
- return getBooleanHTMLAttribute("selected");
- }
-
- public void setDefaultSelected(boolean defaultSelected)
- {
- setBooleanHTMLAttribute("selected", defaultSelected);
- }
-
- public String getText()
- {
- return getTextContent();
- }
-
- public int getIndex()
- {
- return super.getIndex();
- }
-
- public boolean getDisabled()
- {
- return getBooleanHTMLAttribute("disabled");
- }
-
- public void setDisabled(boolean disabled)
- {
- setBooleanHTMLAttribute("disabled", disabled);
- }
-
- public String getLabel()
- {
- return getHTMLAttribute("label");
- }
-
- public void setLabel(String label)
- {
- setHTMLAttribute("label", label);
- }
-
- public boolean getSelected()
- {
- if (selected == null)
- {
- selected = Boolean.valueOf(getDefaultSelected());
- }
- return selected.booleanValue();
- }
-
- public void setSelected(boolean selected)
- {
- this.selected = Boolean.valueOf(selected);
- }
-
- public String getValue()
- {
- return getHTMLAttribute("value");
- }
-
- public void setValue(String value)
- {
- setHTMLAttribute("value", value);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLParagraphElement.java b/libjava/gnu/xml/dom/html2/DomHTMLParagraphElement.java
deleted file mode 100644
index 2a8c4f6fb11..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLParagraphElement.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* DomHTMLParagraphElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLParagraphElement;
-
-/**
- * An HTML 'P' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLParagraphElement
- extends DomHTMLElement
- implements HTMLParagraphElement
-{
-
- protected DomHTMLParagraphElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLParamElement.java b/libjava/gnu/xml/dom/html2/DomHTMLParamElement.java
deleted file mode 100644
index 81c6559529e..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLParamElement.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/* DomHTMLParamElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLParamElement;
-
-/**
- * An HTML 'PARAM' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLParamElement
- extends DomHTMLElement
- implements HTMLParamElement
-{
-
- protected DomHTMLParamElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getName()
- {
- return getHTMLAttribute("name");
- }
-
- public void setName(String name)
- {
- setHTMLAttribute("name", name);
- }
-
- public String getType()
- {
- return getHTMLAttribute("type");
- }
-
- public void setType(String type)
- {
- setHTMLAttribute("type", type);
- }
-
- public String getValue()
- {
- return getHTMLAttribute("value");
- }
-
- public void setValue(String value)
- {
- setHTMLAttribute("value", value);
- }
-
- public String getValueType()
- {
- return getHTMLAttribute("valuetype");
- }
-
- public void setValueType(String valueType)
- {
- setHTMLAttribute("valuetype", valueType);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLParser.java b/libjava/gnu/xml/dom/html2/DomHTMLParser.java
deleted file mode 100644
index 7b445622509..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLParser.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/* DomHTMLParser.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-
-package gnu.xml.dom.html2;
-
-import gnu.javax.swing.text.html.parser.support.Parser;
-
-import java.io.IOException;
-import java.io.Reader;
-
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.LinkedList;
-
-import javax.swing.text.AttributeSet;
-import javax.swing.text.html.HTML;
-import javax.swing.text.html.parser.DTD;
-import javax.swing.text.html.parser.TagElement;
-
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.html2.HTMLDocument;
-
-/**
- * This parser reads HTML from the given stream and stores into
- * {@link HTMLDocument}. The HTML tag becomes the {@link Node}.
- * The tag attributes become the node attributes. The text inside
- * HTML tag is inserted as one or several text nodes. The nested
- * HTML tags are inserted as child nodes.
- *
- * If the strict tree structure, closing the tag means closing all
- * nested tags. To work around this, this parser closes the nested
- * tags and immediately reopens them after the closed tag.
- * In this way, <code>&lt;b&gt;&lt;i&gt;c&lt;/b&gt;d</code>
- * is parsed as <code>&lt;b&gt;&lt;i&gt;c&lt;/i&gt;&lt;/b&gt;&lt;i&gt;d</code> .
- *
- * @author Audrius Meskauskas (AudriusA@Bioinformatics.org)
- */
-public class DomHTMLParser
- extends gnu.javax.swing.text.html.parser.support.Parser
-{
- /**
- * The target where HTML document will be inserted.
- */
- protected DomHTMLDocument document;
-
- /**
- * The subsequently created new nodes will be inserted as the
- * childs of this cursor.
- */
- protected Node cursor;
-
- /**
- * Create parser using the given DTD.
- *
- * @param dtd the DTD (for example,
- * {@link gnu.javax.swing.text.html.parser.HTML_401F}).
- */
- public DomHTMLParser(DTD dtd)
- {
- super(dtd);
- }
-
- /**
- * Parse SGML insertion ( &lt;! ... &gt; ).
- * Currently just treats it as comment.
- */
- public boolean parseMarkupDeclarations(StringBuffer strBuff)
- throws java.io.IOException
- {
- Node c = document.createComment(strBuff.toString());
- cursor.appendChild(c);
- return false;
- }
-
- /**
- * Read the document, present in the given stream, and
- * return the corresponding {@link HTMLDocument}.
- *
- * @param input a stream to read from.
- * @return a document, reflecting the structure of the provided HTML
- * text.
- *
- * @throws IOException if the reader throws one.
- */
- public HTMLDocument parseDocument(Reader input)
- throws IOException
- {
- try
- {
- document = new DomHTMLDocument();
-
- cursor = document;
-
- parse(input);
-
- DomHTMLDocument h = document;
- document = null;
- return h;
- }
- catch (Exception ex)
- {
- ex.printStackTrace();
- throw new IOException("Exception: " + ex.getMessage());
- }
- }
-
- /**
- * Create a new node.
- * @param name the name of node, case insensitive.
- * @return the created node.
- */
- protected Node createNode(String name)
- {
- Node new_node = document.createElement(name.toLowerCase());
- AttributeSet hatts = getAttributes();
- NamedNodeMap natts = new_node.getAttributes();
-
- Enumeration enumeration = hatts.getAttributeNames();
- Object key;
- Node attribute;
-
- while (hatts != null)
- {
- while (enumeration.hasMoreElements())
- {
- key = enumeration.nextElement();
- attribute = document.createAttribute(key.toString());
- attribute.setNodeValue(hatts.getAttribute(key).toString());
- natts.setNamedItem(attribute);
- }
-
- // The default values are stored in a parent node.
- hatts = hatts.getResolveParent();
- }
-
- return new_node;
- }
-
- /**
- * Handle comment by inserting the comment node.
- * @param text the comment text.
- */
- protected void handleComment(char[] text)
- {
- Node c = document.createComment(new String(text));
- cursor.appendChild(c);
- }
-
- /**
- * Handle the tag with no content.
- * @param tag the tag to handle.
- */
- protected void handleEmptyTag(TagElement tag)
- {
- String name = tag.getHTMLTag().toString();
-
- if (name.equalsIgnoreCase("#pcdata"))
- return;
-
- Node c = createNode(name);
- cursor.appendChild(c);
- }
-
- /**
- * Close the given tag. Close and reopen all nested tags.
- * @param tag the tag to close.
- */
- protected void handleEndTag(TagElement tag)
- {
- String name = tag.getHTMLTag().toString();
- String nname = cursor.getNodeName();
-
- // Closing the current tag.
- if (nname != null && nname.equalsIgnoreCase(name))
- {
- cursor = cursor.getParentNode();
- }
- else
- {
- Node nCursor = cursor.getParentNode();
-
- // Remember the opened nodes.
- LinkedList open = new LinkedList();
- Node close = cursor;
- while (close != null && !close.getNodeName().equalsIgnoreCase(name))
- {
- if (close != document)
- open.addFirst(close);
- close = close.getParentNode();
- }
-
- if (close == null)
- cursor = document;
- else
- cursor = close.getParentNode();
-
- // Insert the copies of the opened nodes.
- Iterator iter = open.iterator();
- while (iter.hasNext())
- {
- Node item = (Node) iter.next();
- Node copy = item.cloneNode(true);
- cursor.appendChild(copy);
- cursor = copy;
- }
- }
- }
-
- /**
- * Handle the start tag by inserting the HTML element.
- * @param tag the tag to handle.
- */
- protected void handleStartTag(TagElement tag)
- {
- HTML.Tag h = tag.getHTMLTag();
- Node c = createNode(h.toString());
- cursor.appendChild(c);
- cursor = c;
- }
-
- /**
- * Handle text by inserting the text node.
- * @param text the text to insert.
- */
- protected void handleText(char[] text)
- {
- Node c = document.createTextNode(text, 0, text.length);
- cursor.appendChild(c);
- }
-}
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLPreElement.java b/libjava/gnu/xml/dom/html2/DomHTMLPreElement.java
deleted file mode 100644
index 9b36a288700..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLPreElement.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* DomHTMLPreElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLPreElement;
-
-/**
- * An HTML 'PRE' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLPreElement
- extends DomHTMLElement
- implements HTMLPreElement
-{
-
- protected DomHTMLPreElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public int getWidth()
- {
- return getIntHTMLAttribute("width");
- }
-
- public void setWidth(int width)
- {
- setIntHTMLAttribute("width", width);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLQuoteElement.java b/libjava/gnu/xml/dom/html2/DomHTMLQuoteElement.java
deleted file mode 100644
index 678a5ada697..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLQuoteElement.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* DomHTMLQuoteElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLQuoteElement;
-
-/**
- * An HTML 'Q' or 'BLOCKQUOTE' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLQuoteElement
- extends DomHTMLElement
- implements HTMLQuoteElement
-{
-
- protected DomHTMLQuoteElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getCite()
- {
- return getHTMLAttribute("cite");
- }
-
- public void setCite(String cite)
- {
- setHTMLAttribute("cite", cite);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLScriptElement.java b/libjava/gnu/xml/dom/html2/DomHTMLScriptElement.java
deleted file mode 100644
index 8f8fff58a82..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLScriptElement.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/* DomHTMLScriptElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLScriptElement;
-
-/**
- * An HTML 'SCRIPT' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLScriptElement
- extends DomHTMLElement
- implements HTMLScriptElement
-{
-
- protected DomHTMLScriptElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getText()
- {
- return getTextContent();
- }
-
- public void setText(String text)
- {
- setTextContent(text);
- }
-
- public String getHtmlFor()
- {
- return getHTMLAttribute("for");
- }
-
- public void setHtmlFor(String htmlFor)
- {
- setHTMLAttribute("for", htmlFor);
- }
-
- public String getEvent()
- {
- return getHTMLAttribute("event");
- }
-
- public void setEvent(String event)
- {
- setHTMLAttribute("event", event);
- }
-
- public String getCharset()
- {
- return getHTMLAttribute("charset");
- }
-
- public void setCharset(String charset)
- {
- setHTMLAttribute("charset", charset);
- }
-
- public boolean getDefer()
- {
- return getBooleanHTMLAttribute("defer");
- }
-
- public void setDefer(boolean defer)
- {
- setBooleanHTMLAttribute("defer", defer);
- }
-
- public String getSrc()
- {
- return getHTMLAttribute("src");
- }
-
- public void setSrc(String src)
- {
- setHTMLAttribute("src", src);
- }
-
- public String getType()
- {
- return getHTMLAttribute("type");
- }
-
- public void setType(String type)
- {
- setHTMLAttribute("type", type);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLSelectElement.java b/libjava/gnu/xml/dom/html2/DomHTMLSelectElement.java
deleted file mode 100644
index 09752e1ffe4..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLSelectElement.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/* DomHTMLSelectElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import gnu.xml.dom.DomDOMException;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.html2.HTMLElement;
-import org.w3c.dom.html2.HTMLFormElement;
-import org.w3c.dom.html2.HTMLOptionElement;
-import org.w3c.dom.html2.HTMLOptionsCollection;
-import org.w3c.dom.html2.HTMLSelectElement;
-
-/**
- * An HTML 'SELECT' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLSelectElement
- extends DomHTMLElement
- implements HTMLSelectElement
-{
-
- protected DomHTMLSelectElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getType()
- {
- return getHTMLAttribute("type");
- }
-
- public int getSelectedIndex()
- {
- HTMLOptionsCollection options = getOptions();
- int len = options.getLength();
- for (int i = 0; i < len; i++)
- {
- HTMLOptionElement option = (HTMLOptionElement) options.item(i);
- if (option.getSelected())
- {
- return i;
- }
- }
- return -1;
- }
-
- public void setSelectedIndex(int selectedIndex)
- {
- HTMLOptionsCollection options = getOptions();
- int len = options.getLength();
- if (selectedIndex < 0 || selectedIndex >= len)
- {
- throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
- }
- for (int i = 0; i < len; i++)
- {
- HTMLOptionElement option = (HTMLOptionElement) options.item(i);
- option.setSelected(i == selectedIndex);
- }
- }
-
- public String getValue()
- {
- return getHTMLAttribute("value");
- }
-
- public void setValue(String value)
- {
- setHTMLAttribute("value", value);
- }
-
- public int getLength()
- {
- return getIntHTMLAttribute("length");
- }
-
- public void setLength(int length)
- {
- setIntHTMLAttribute("length", length);
- }
-
- public HTMLFormElement getForm()
- {
- return (HTMLFormElement) getParentElement("form");
- }
-
- public HTMLOptionsCollection getOptions()
- {
- DomHTMLCollection ret =
- new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
- ret.addNodeName("option");
- ret.evaluate();
- return ret;
- }
-
- public boolean getDisabled()
- {
- return getBooleanHTMLAttribute("disabled");
- }
-
- public void setDisabled(boolean disabled)
- {
- setBooleanHTMLAttribute("disabled", disabled);
- }
-
- public boolean getMultiple()
- {
- return getBooleanHTMLAttribute("multiple");
- }
-
- public void setMultiple(boolean multiple)
- {
- setBooleanHTMLAttribute("multiple", multiple);
- }
-
- public String getName()
- {
- return getHTMLAttribute("name");
- }
-
- public void setName(String name)
- {
- setHTMLAttribute("name", name);
- }
-
- public int getSize()
- {
- return getIntHTMLAttribute("size");
- }
-
- public void setSize(int size)
- {
- setIntHTMLAttribute("size", size);
- }
-
- public int getTabIndex()
- {
- return getIntHTMLAttribute("tabindex");
- }
-
- public void setTabIndex(int tabIndex)
- {
- setIntHTMLAttribute("tabindex", tabIndex);
- }
-
- public void add(HTMLElement element, HTMLElement before)
- {
- insertBefore(before, element);
- }
-
- public void remove(int index)
- {
- HTMLOptionsCollection options = getOptions();
- int len = options.getLength();
- if (index < 0 || index >= len)
- {
- throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
- }
- HTMLOptionElement option = (HTMLOptionElement) options.item(index);
- option.getParentNode().removeChild(option);
- }
-
- public void blur()
- {
- dispatchUIEvent("blur");
- }
-
- public void focus()
- {
- dispatchUIEvent("focus");
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLStyleElement.java b/libjava/gnu/xml/dom/html2/DomHTMLStyleElement.java
deleted file mode 100644
index f6f1fcc6844..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLStyleElement.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/* DomHTMLStyleElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLStyleElement;
-
-/**
- * An HTML 'STYLE' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLStyleElement
- extends DomHTMLElement
- implements HTMLStyleElement
-{
-
- protected DomHTMLStyleElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public boolean getDisabled()
- {
- return getBooleanHTMLAttribute("disabled");
- }
-
- public void setDisabled(boolean disabled)
- {
- setBooleanHTMLAttribute("disabled", disabled);
- }
-
- public String getMedia()
- {
- return getHTMLAttribute("media");
- }
-
- public void setMedia(String media)
- {
- setHTMLAttribute("media", media);
- }
-
- public String getType()
- {
- return getHTMLAttribute("type");
- }
-
- public void setType(String type)
- {
- setHTMLAttribute("type", type);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java
deleted file mode 100644
index 28ea3418895..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLTableCaptionElement.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/* DomHTMLTableCaptionElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLTableCaptionElement;
-
-/**
- * An HTML 'CAPTION' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLTableCaptionElement
- extends DomHTMLElement
- implements HTMLTableCaptionElement
-{
-
- protected DomHTMLTableCaptionElement(DomHTMLDocument owner,
- String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTableCellElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTableCellElement.java
deleted file mode 100644
index 41d33af26f8..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLTableCellElement.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/* DomHTMLTableCellElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLTableCellElement;
-
-/**
- * An HTML 'TH' or 'TD' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLTableCellElement
- extends DomHTMLElement
- implements HTMLTableCellElement
-{
-
- protected DomHTMLTableCellElement(DomHTMLDocument owner,
- String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public int getCellIndex()
- {
- return getIndex();
- }
-
- public String getAbbr()
- {
- return getHTMLAttribute("abbr");
- }
-
- public void setAbbr(String abbr)
- {
- setHTMLAttribute("abbr", abbr);
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
- public String getAxis()
- {
- return getHTMLAttribute("axis");
- }
-
- public void setAxis(String axis)
- {
- setHTMLAttribute("axis", axis);
- }
-
- public String getBgColor()
- {
- return getHTMLAttribute("bgcolor");
- }
-
- public void setBgColor(String bgColor)
- {
- setHTMLAttribute("bgcolor", bgColor);
- }
-
- public String getCh()
- {
- return getHTMLAttribute("char");
- }
-
- public void setCh(String ch)
- {
- setHTMLAttribute("char", ch);
- }
-
- public String getChOff()
- {
- return getHTMLAttribute("charoff");
- }
-
- public void setChOff(String chOff)
- {
- setHTMLAttribute("charoff", chOff);
- }
-
- public int getColSpan()
- {
- return getIntHTMLAttribute("colspan");
- }
-
- public void setColSpan(int colSpan)
- {
- setIntHTMLAttribute("colspan", colSpan);
- }
-
- public String getHeaders()
- {
- return getHTMLAttribute("headers");
- }
-
- public void setHeaders(String headers)
- {
- setHTMLAttribute("headers", headers);
- }
-
- public String getHeight()
- {
- return getHTMLAttribute("height");
- }
-
- public void setHeight(String height)
- {
- setHTMLAttribute("height", height);
- }
-
- public boolean getNoWrap()
- {
- return getBooleanHTMLAttribute("nowrap");
- }
-
- public void setNoWrap(boolean noWrap)
- {
- setBooleanHTMLAttribute("nowrap", noWrap);
- }
-
- public int getRowSpan()
- {
- return getIntHTMLAttribute("rowspan");
- }
-
- public void setRowSpan(int rowSpan)
- {
- setIntHTMLAttribute("rowspan", rowSpan);
- }
-
- public String getScope()
- {
- return getHTMLAttribute("scope");
- }
-
- public void setScope(String scope)
- {
- setHTMLAttribute("scope", scope);
- }
-
- public String getVAlign()
- {
- return getHTMLAttribute("valign");
- }
-
- public void setVAlign(String vAlign)
- {
- setHTMLAttribute("valign", vAlign);
- }
-
- public String getWidth()
- {
- return getHTMLAttribute("width");
- }
-
- public void setWidth(String width)
- {
- setHTMLAttribute("width", width);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTableColElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTableColElement.java
deleted file mode 100644
index 799447dc81e..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLTableColElement.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/* DomHTMLTableColElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLTableColElement;
-
-/**
- * An HTML 'COL' or 'COLGROUP' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLTableColElement
- extends DomHTMLElement
- implements HTMLTableColElement
-{
-
- protected DomHTMLTableColElement(DomHTMLDocument owner,
- String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
- public String getCh()
- {
- return getHTMLAttribute("char");
- }
-
- public void setCh(String ch)
- {
- setHTMLAttribute("char", ch);
- }
-
- public String getChOff()
- {
- return getHTMLAttribute("charoff");
- }
-
- public void setChOff(String chOff)
- {
- setHTMLAttribute("charoff", chOff);
- }
-
- public int getSpan()
- {
- return getIntHTMLAttribute("span");
- }
-
- public void setSpan(int span)
- {
- setIntHTMLAttribute("span", span);
- }
-
- public String getVAlign()
- {
- return getHTMLAttribute("valign");
- }
-
- public void setVAlign(String vAlign)
- {
- setHTMLAttribute("valign", vAlign);
- }
-
- public String getWidth()
- {
- return getHTMLAttribute("width");
- }
-
- public void setWidth(String width)
- {
- setHTMLAttribute("width", width);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTableElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTableElement.java
deleted file mode 100644
index 73a3a45c61d..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLTableElement.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/* DomHTMLTableElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import gnu.xml.dom.DomDOMException;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Node;
-import org.w3c.dom.html2.HTMLCollection;
-import org.w3c.dom.html2.HTMLElement;
-import org.w3c.dom.html2.HTMLTableCaptionElement;
-import org.w3c.dom.html2.HTMLTableElement;
-import org.w3c.dom.html2.HTMLTableSectionElement;
-
-/**
- * An HTML 'TABLE' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLTableElement
- extends DomHTMLElement
- implements HTMLTableElement
-{
-
- protected DomHTMLTableElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public HTMLTableCaptionElement getCaption()
- {
- return (HTMLTableCaptionElement) getChildElement("caption");
- }
-
- public void setCaption(HTMLTableCaptionElement caption)
- {
- HTMLTableCaptionElement ref = getCaption();
- if (ref == null)
- {
- appendChild(caption);
- }
- else
- {
- replaceChild(caption, ref);
- }
- }
-
- public HTMLTableSectionElement getTHead()
- {
- return (HTMLTableSectionElement) getChildElement("thead");
- }
-
- public void setTHead(HTMLTableSectionElement tHead)
- {
- HTMLTableSectionElement ref = getTHead();
- if (ref == null)
- {
- appendChild(tHead);
- }
- else
- {
- replaceChild(tHead, ref);
- }
- }
-
- public HTMLTableSectionElement getTFoot()
- {
- return (HTMLTableSectionElement) getChildElement("tfoot");
- }
-
- public void setTFoot(HTMLTableSectionElement tFoot)
- {
- HTMLTableSectionElement ref = getTFoot();
- if (ref == null)
- {
- appendChild(tFoot);
- }
- else
- {
- replaceChild(tFoot, ref);
- }
- }
-
- public HTMLCollection getRows()
- {
- DomHTMLCollection ret =
- new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
- ret.addNodeName("tr");
- ret.evaluate();
- return ret;
- }
-
- public HTMLCollection getTBodies()
- {
- DomHTMLCollection ret =
- new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
- ret.addNodeName("tbody");
- ret.evaluate();
- return ret;
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
- public String getBgColor()
- {
- return getHTMLAttribute("bgcolor");
- }
-
- public void setBgColor(String bgColor)
- {
- setHTMLAttribute("bgcolor", bgColor);
- }
-
- public String getBorder()
- {
- return getHTMLAttribute("border");
- }
-
- public void setBorder(String border)
- {
- setHTMLAttribute("border", border);
- }
-
- public String getCellPadding()
- {
- return getHTMLAttribute("cellpadding");
- }
-
- public void setCellPadding(String cellPadding)
- {
- setHTMLAttribute("cellpadding", cellPadding);
- }
-
- public String getCellSpacing()
- {
- return getHTMLAttribute("cellspacing");
- }
-
- public void setCellSpacing(String cellSpacing)
- {
- setHTMLAttribute("cellspacing", cellSpacing);
- }
-
- public String getFrame()
- {
- return getHTMLAttribute("frame");
- }
-
- public void setFrame(String frame)
- {
- setHTMLAttribute("frame", frame);
- }
-
- public String getRules()
- {
- return getHTMLAttribute("rules");
- }
-
- public void setRules(String rules)
- {
- setHTMLAttribute("rules", rules);
- }
-
- public String getSummary()
- {
- return getHTMLAttribute("summary");
- }
-
- public void setSummary(String summary)
- {
- setHTMLAttribute("summary", summary);
- }
-
- public String getWidth()
- {
- return getHTMLAttribute("width");
- }
-
- public void setWidth(String width)
- {
- setHTMLAttribute("width", width);
- }
-
- public HTMLElement createTHead()
- {
- HTMLTableSectionElement ref = getTHead();
- if (ref == null)
- {
- return (HTMLElement) getOwnerDocument().createElement("thead");
- }
- else
- {
- return ref;
- }
- }
-
- public void deleteTHead()
- {
- HTMLTableSectionElement ref = getTHead();
- if (ref != null)
- {
- removeChild(ref);
- }
- }
-
- public HTMLElement createTFoot()
- {
- HTMLTableSectionElement ref = getTFoot();
- if (ref == null)
- {
- return (HTMLElement) getOwnerDocument().createElement("tfoot");
- }
- else
- {
- return ref;
- }
- }
-
- public void deleteTFoot()
- {
- HTMLTableSectionElement ref = getTFoot();
- if (ref != null)
- {
- removeChild(ref);
- }
- }
-
- public HTMLElement createCaption()
- {
- HTMLTableCaptionElement ref = getCaption();
- if (ref == null)
- {
- return (HTMLElement) getOwnerDocument().createElement("caption");
- }
- else
- {
- return ref;
- }
- }
-
- public void deleteCaption()
- {
- HTMLTableCaptionElement ref = getCaption();
- if (ref != null)
- {
- removeChild(ref);
- }
- }
-
- public HTMLElement insertRow(int index)
- {
- Node ref = getRow(index);
- Node row = getOwnerDocument().createElement("tr");
- if (ref == null)
- {
- Node tbody = getChildElement("tbody");
- if (tbody == null)
- {
- tbody = getOwnerDocument().createElement("tfoot");
- appendChild(tbody);
- }
- tbody.appendChild(row);
- }
- else
- {
- ref.getParentNode().insertBefore(row, ref);
- }
- return (HTMLElement) row;
- }
-
- public void deleteRow(int index)
- {
- Node ref = getRow(index);
- if (ref == null)
- {
- throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
- }
- ref.getParentNode().removeChild(ref);
- }
-
- Node getRow(final int index)
- {
- int i = 0;
- Node thead = getChildElement("thead");
- if (thead != null)
- {
- for (Node ctx = thead.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- if (!"tr".equalsIgnoreCase(ctx.getLocalName()))
- {
- continue;
- }
- if (index == i)
- {
- return ctx;
- }
- i++;
- }
- }
- Node tbody = getChildElement("tbody");
- if (tbody == null)
- {
- tbody = this;
- }
- for (Node ctx = tbody.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- if (!"tr".equalsIgnoreCase(ctx.getLocalName()))
- {
- continue;
- }
- if (index == i)
- {
- return ctx;
- }
- i++;
- }
- Node tfoot = getChildElement("tfoot");
- if (tfoot != null)
- {
- for (Node ctx = tfoot.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- if (!"tr".equalsIgnoreCase(ctx.getLocalName()))
- {
- continue;
- }
- if (index == i)
- {
- return ctx;
- }
- i++;
- }
- }
- return null;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTableRowElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTableRowElement.java
deleted file mode 100644
index 2a1b6785a5d..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLTableRowElement.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/* DomHTMLTableRowElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import gnu.xml.dom.DomDOMException;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Node;
-import org.w3c.dom.html2.HTMLCollection;
-import org.w3c.dom.html2.HTMLElement;
-import org.w3c.dom.html2.HTMLTableRowElement;
-
-/**
- * An HTML 'TR' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLTableRowElement
- extends DomHTMLElement
- implements HTMLTableRowElement
-{
-
- protected DomHTMLTableRowElement(DomHTMLDocument owner,
- String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public int getRowIndex()
- {
- return getIndex();
- }
-
- public int getSectionRowIndex()
- {
- int index = 0;
- DomHTMLElement parent = (DomHTMLElement) getParentElement("table");
- if (parent != null)
- {
- Node thead = parent.getChildElement("thead");
- if (thead != null)
- {
- for (Node ctx = thead.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- if (ctx == this)
- {
- return index;
- }
- index++;
- }
- }
- Node tbody = parent.getChildElement("tbody");
- if (tbody != null)
- {
- for (Node ctx = tbody.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- if (ctx == this)
- {
- return index;
- }
- index++;
- }
- }
- Node tfoot = parent.getChildElement("tfoot");
- if (tfoot != null)
- {
- for (Node ctx = tfoot.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- if (ctx == this)
- {
- return index;
- }
- index++;
- }
- }
- }
- throw new DomDOMException(DOMException.NOT_FOUND_ERR);
- }
-
- public HTMLCollection getCells()
- {
- DomHTMLCollection ret =
- new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
- ret.addNodeName("th");
- ret.addNodeName("td");
- ret.evaluate();
- return ret;
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
- public String getBgColor()
- {
- return getHTMLAttribute("bgcolor");
- }
-
- public void setBgColor(String bgColor)
- {
- setHTMLAttribute("bgcolor", bgColor);
- }
-
- public String getCh()
- {
- return getHTMLAttribute("char");
- }
-
- public void setCh(String ch)
- {
- setHTMLAttribute("char", ch);
- }
-
- public String getChOff()
- {
- return getHTMLAttribute("charoff");
- }
-
- public void setChOff(String chOff)
- {
- setHTMLAttribute("charoff", chOff);
- }
-
- public String getVAlign()
- {
- return getHTMLAttribute("valign");
- }
-
- public void setVAlign(String vAlign)
- {
- setHTMLAttribute("valign", vAlign);
- }
-
- public HTMLElement insertCell(int index)
- {
- Node ref = getCell(index);
- Node cell = getOwnerDocument().createElement("td");
- if (ref == null)
- {
- appendChild(cell);
- }
- else
- {
- insertBefore(cell, ref);
- }
- return (HTMLElement) cell;
- }
-
- public void deleteCell(int index)
- {
- Node ref = getCell(index);
- if (ref == null)
- {
- throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
- }
- removeChild(ref);
- }
-
- Node getCell(final int index)
- {
- int i = 0;
- for (Node ctx = getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- String name = ctx.getLocalName();
- if (!"td".equalsIgnoreCase(name) &&
- !"th".equalsIgnoreCase(name))
- {
- continue;
- }
- if (index == i)
- {
- return ctx;
- }
- i++;
- }
- return null;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTableSectionElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTableSectionElement.java
deleted file mode 100644
index 79cce67feeb..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLTableSectionElement.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/* DomHTMLTableSectionElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import gnu.xml.dom.DomDOMException;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Node;
-import org.w3c.dom.html2.HTMLCollection;
-import org.w3c.dom.html2.HTMLElement;
-import org.w3c.dom.html2.HTMLTableSectionElement;
-
-/**
- * An HTML 'THEAD', 'TFOOT', or 'TBODY' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLTableSectionElement
- extends DomHTMLElement
- implements HTMLTableSectionElement
-{
-
- protected DomHTMLTableSectionElement(DomHTMLDocument owner,
- String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getAlign()
- {
- return getHTMLAttribute("align");
- }
-
- public void setAlign(String align)
- {
- setHTMLAttribute("align", align);
- }
-
- public String getCh()
- {
- return getHTMLAttribute("char");
- }
-
- public void setCh(String ch)
- {
- setHTMLAttribute("char", ch);
- }
-
- public String getChOff()
- {
- return getHTMLAttribute("charoff");
- }
-
- public void setChOff(String chOff)
- {
- setHTMLAttribute("charoff", chOff);
- }
-
- public String getVAlign()
- {
- return getHTMLAttribute("valign");
- }
-
- public void setVAlign(String vAlign)
- {
- setHTMLAttribute("valign", vAlign);
- }
-
- public HTMLCollection getRows()
- {
- DomHTMLCollection ret =
- new DomHTMLCollection((DomHTMLDocument) getOwnerDocument(), this);
- ret.addNodeName("tr");
- ret.evaluate();
- return ret;
- }
-
- public HTMLElement insertRow(int index)
- {
- Node ref = getRow(index);
- Node row = getOwnerDocument().createElement("tr");
- if (ref == null)
- {
- appendChild(row);
- }
- else
- {
- insertBefore(row, ref);
- }
- return (HTMLElement) row;
- }
-
- public void deleteRow(int index)
- {
- Node ref = getRow(index);
- if (ref == null)
- {
- throw new DomDOMException(DOMException.INDEX_SIZE_ERR);
- }
- removeChild(ref);
- }
-
- Node getRow(final int index)
- {
- int i = 0;
- for (Node ctx = getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- if (!"tr".equalsIgnoreCase(ctx.getLocalName()))
- {
- continue;
- }
- if (index == i)
- {
- return ctx;
- }
- i++;
- }
- return null;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTextAreaElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTextAreaElement.java
deleted file mode 100644
index 22d6105696f..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLTextAreaElement.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/* DomHTMLTextAreaElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLFormElement;
-import org.w3c.dom.html2.HTMLTextAreaElement;
-
-/**
- * An HTML 'TEXTAREA' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLTextAreaElement
- extends DomHTMLElement
- implements HTMLTextAreaElement
-{
-
- protected String value;
-
- protected DomHTMLTextAreaElement(DomHTMLDocument owner,
- String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getDefaultValue()
- {
- return getHTMLAttribute("value");
- }
-
- public void setDefaultValue(String defaultValue)
- {
- setHTMLAttribute("value", defaultValue);
- }
-
- public HTMLFormElement getForm()
- {
- return (HTMLFormElement) getParentElement("form");
- }
-
- public String getAccessKey()
- {
- return getHTMLAttribute("accesskey");
- }
-
- public void setAccessKey(String accessKey)
- {
- setHTMLAttribute("accesskey", accessKey);
- }
-
- public int getCols()
- {
- return getIntHTMLAttribute("cols");
- }
-
- public void setCols(int cols)
- {
- setIntHTMLAttribute("cols", cols);
- }
-
- public boolean getDisabled()
- {
- return getBooleanHTMLAttribute("disabled");
- }
-
- public void setDisabled(boolean disabled)
- {
- setBooleanHTMLAttribute("disabled", disabled);
- }
-
- public String getName()
- {
- return getHTMLAttribute("name");
- }
-
- public void setName(String name)
- {
- setHTMLAttribute("name", name);
- }
-
- public boolean getReadOnly()
- {
- return getBooleanHTMLAttribute("readOnly");
- }
-
- public void setReadOnly(boolean readOnly)
- {
- setBooleanHTMLAttribute("readonly", readOnly);
- }
-
- public int getRows()
- {
- return getIntHTMLAttribute("rows");
- }
-
- public void setRows(int rows)
- {
- setIntHTMLAttribute("rows", rows);
- }
-
- public int getTabIndex()
- {
- return getIntHTMLAttribute("tabindex");
- }
-
- public void setTabIndex(int tabIndex)
- {
- setIntHTMLAttribute("tabindex", tabIndex);
- }
-
- public String getType()
- {
- return "textarea";
- }
-
- public String getValue()
- {
- if (value == null)
- {
- value = getDefaultValue();
- }
- return value;
- }
-
- public void setValue(String value)
- {
- this.value = value;
- }
-
- public void blur()
- {
- dispatchUIEvent("blur");
- }
-
- public void focus()
- {
- dispatchUIEvent("focus");
- }
-
- public void select()
- {
- dispatchUIEvent("select");
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLTitleElement.java b/libjava/gnu/xml/dom/html2/DomHTMLTitleElement.java
deleted file mode 100644
index f62342d6ff5..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLTitleElement.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* DomHTMLTitleElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLTitleElement;
-
-/**
- * An HTML 'TITLE' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLTitleElement
- extends DomHTMLElement
- implements HTMLTitleElement
-{
-
- protected DomHTMLTitleElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public String getText()
- {
- return getTextContent();
- }
-
- public void setText(String text)
- {
- setTextContent(text);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/html2/DomHTMLUListElement.java b/libjava/gnu/xml/dom/html2/DomHTMLUListElement.java
deleted file mode 100644
index c07adeabf20..00000000000
--- a/libjava/gnu/xml/dom/html2/DomHTMLUListElement.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/* DomHTMLUListElement.java --
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.html2;
-
-import org.w3c.dom.html2.HTMLUListElement;
-
-/**
- * An HTML 'UL' element node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomHTMLUListElement
- extends DomHTMLElement
- implements HTMLUListElement
-{
-
- protected DomHTMLUListElement(DomHTMLDocument owner, String namespaceURI,
- String name)
- {
- super(owner, namespaceURI, name);
- }
-
- public boolean getCompact()
- {
- return getBooleanHTMLAttribute("compact");
- }
-
- public void setCompact(boolean compact)
- {
- setBooleanHTMLAttribute("compact", compact);
- }
-
- public String getType()
- {
- return getHTMLAttribute("type");
- }
-
- public void setType(String type)
- {
- setHTMLAttribute("type", type);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/ls/DomLSException.java b/libjava/gnu/xml/dom/ls/DomLSException.java
deleted file mode 100644
index 6ac49e66934..00000000000
--- a/libjava/gnu/xml/dom/ls/DomLSException.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/* DomLSException.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.ls;
-
-import org.w3c.dom.ls.LSException;
-
-/**
- * A DOM LS exception incorporating a cause.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomLSException
- extends LSException
-{
-
- public DomLSException(short type, Exception cause)
- {
- super(type, (cause == null) ? null : cause.getMessage());
- initCause(cause);
- }
-
-}
diff --git a/libjava/gnu/xml/dom/ls/DomLSInput.java b/libjava/gnu/xml/dom/ls/DomLSInput.java
deleted file mode 100644
index 44274ec4734..00000000000
--- a/libjava/gnu/xml/dom/ls/DomLSInput.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/* DomLSInput.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.ls;
-
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import org.w3c.dom.ls.LSInput;
-
-/**
- * Specification of XML input to parse.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomLSInput
- implements LSInput
-{
-
- private InputStream in;
- private String systemId;
- private String publicId;
- private String baseURI;
- private String encoding;
- private boolean certifiedText;
-
- public Reader getCharacterStream()
- {
- return new InputStreamReader(in);
- }
-
- public void setCharacterStream(Reader characterStream)
- {
- in = new ReaderInputStream(characterStream);
- }
-
- public InputStream getByteStream()
- {
- return in;
- }
-
- public void setByteStream(InputStream byteStream)
- {
- in = byteStream;
- }
-
- public String getStringData()
- {
- StringBuffer acc = new StringBuffer();
- Reader reader = getCharacterStream();
- try
- {
- char[] buf = new char[4096];
- for (int len = reader.read(buf); len != -1; len = reader.read(buf))
- {
- acc.append(buf, 0, len);
- }
- }
- catch (IOException e)
- {
- return null; // ?
- }
- return acc.toString();
- }
-
- public void setStringData(String stringData)
- {
- in = new ReaderInputStream(new StringReader(stringData));
- }
-
- public String getSystemId()
- {
- return systemId;
- }
-
- public void setSystemId(String systemId)
- {
- this.systemId = systemId;
- }
-
- public String getPublicId()
- {
- return publicId;
- }
-
- public void setPublicId(String publicId)
- {
- this.publicId = publicId;
- }
-
- public String getBaseURI()
- {
- return baseURI;
- }
-
- public void setBaseURI(String baseURI)
- {
- this.baseURI = baseURI;
- }
-
- public String getEncoding()
- {
- return encoding;
- }
-
- public void setEncoding(String encoding)
- {
- this.encoding = encoding;
- }
-
- public boolean getCertifiedText()
- {
- return certifiedText;
- }
-
- public void setCertifiedText(boolean certifiedText)
- {
- this.certifiedText = certifiedText;
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/ls/DomLSOutput.java b/libjava/gnu/xml/dom/ls/DomLSOutput.java
deleted file mode 100644
index c2f4d4132ce..00000000000
--- a/libjava/gnu/xml/dom/ls/DomLSOutput.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/* DomLSOutput.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.ls;
-
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import org.w3c.dom.ls.LSOutput;
-
-/**
- * Specification of XML output to produce.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomLSOutput
- implements LSOutput
-{
-
- private OutputStream out;
- private String systemId;
- private String encoding;
-
- public Writer getCharacterStream()
- {
- return new OutputStreamWriter(out);
- }
-
- public void setCharacterStream(Writer characterStream)
- {
- out = new WriterOutputStream(characterStream);
- }
-
- public OutputStream getByteStream()
- {
- return out;
- }
-
- public void setByteStream(OutputStream out)
- {
- this.out = out;
- }
-
- public String getSystemId()
- {
- return systemId;
- }
-
- public void setSystemId(String systemId)
- {
- this.systemId = systemId;
- }
-
- public String getEncoding()
- {
- return encoding;
- }
-
- public void setEncoding(String encoding)
- {
- this.encoding = encoding;
- }
-
-}
diff --git a/libjava/gnu/xml/dom/ls/DomLSParser.java b/libjava/gnu/xml/dom/ls/DomLSParser.java
deleted file mode 100644
index eb7c1c49f3a..00000000000
--- a/libjava/gnu/xml/dom/ls/DomLSParser.java
+++ /dev/null
@@ -1,574 +0,0 @@
-/* DomLSParser.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.ls;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.List;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.DOMConfiguration;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.DOMStringList;
-import org.w3c.dom.Node;
-import org.w3c.dom.ls.DOMImplementationLS;
-import org.w3c.dom.ls.LSException;
-import org.w3c.dom.ls.LSInput;
-import org.w3c.dom.ls.LSParser;
-import org.w3c.dom.ls.LSParserFilter;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXNotRecognizedException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.XMLReader;
-import gnu.xml.dom.DomDocument;
-import gnu.xml.dom.DomDOMException;
-
-/**
- * Parser implementation for GNU DOM.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomLSParser
- implements LSParser, DOMConfiguration, DOMStringList, ErrorHandler
-{
-
- private static final List SUPPORTED_PARAMETERS
- = Arrays.asList(new String[] { "cdata-sections",
- "comments",
- "element-content-whitespace",
- "namespaces",
- "expand-entity-references",
- "coalescing",
- "validating",
- "xinclude-aware",
- "entity-resolver",
- "error-handler" });
-
- private LSParserFilter filter;
- private final boolean async;
- private String schemaType;
- private SAXEventSink eventSink;
- private SAXParserFactory factory;
- private XMLReader reader;
-
- private boolean namespaceAware = true;
- private boolean ignoreWhitespace;
- private boolean expandEntityReferences;
- private boolean ignoreComments;
- private boolean coalescing;
- private boolean validating;
- private boolean xIncludeAware;
- private EntityResolver entityResolver;
- private ErrorHandler errorHandler;
-
- public DomLSParser(short mode, String schemaType)
- throws DOMException
- {
- switch (mode)
- {
- case DOMImplementationLS.MODE_ASYNCHRONOUS:
- async = true;
- break;
- case DOMImplementationLS.MODE_SYNCHRONOUS:
- async = false;
- break;
- default:
- throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
- }
- // TODO schemaType
- this.schemaType = schemaType;
- factory = SAXParserFactory.newInstance();
- }
-
- // -- LSParser --
-
- public DOMConfiguration getDomConfig()
- {
- return this;
- }
-
- public LSParserFilter getFilter()
- {
- return filter;
- }
-
- public void setFilter(LSParserFilter filter)
- {
- this.filter = filter;
- }
-
- public boolean getAsync()
- {
- return async;
- }
-
- public boolean getBusy()
- {
- return eventSink != null;
- }
-
- public Document parse(LSInput input)
- throws DOMException, LSException
- {
- if (async)
- {
- return doParse(input);
- }
- else
- {
- synchronized (this)
- {
- return doParse(input);
- }
- }
- }
-
- public Document parseURI(String uri)
- throws DOMException, LSException
- {
- LSInput input = new DomLSInput();
- input.setSystemId(uri);
- return parse(input);
- }
-
- public Node parseWithContext(LSInput input, Node context, short action)
- throws DOMException, LSException
- {
- Document doc = (context.getNodeType() == Node.DOCUMENT_NODE) ?
- (Document) context : context.getOwnerDocument();
- input.setBaseURI(doc.getDocumentURI());
- // TODO use namespaces defined on context node
- Document ret = parse(input);
- Node root = ret.getDocumentElement();
- root = doc.adoptNode(root);
- switch (action)
- {
- case ACTION_APPEND_AS_CHILDREN:
- context.appendChild(root);
- break;
- case ACTION_REPLACE_CHILDREN:
- Node c1 = context.getFirstChild();
- while (c1 != null)
- {
- Node next = c1.getNextSibling();
- context.removeChild(c1);
- c1 = next;
- }
- context.appendChild(root);
- break;
- case ACTION_INSERT_BEFORE:
- Node p1 = context.getParentNode();
- p1.insertBefore(root, context);
- break;
- case ACTION_INSERT_AFTER:
- Node p2 = context.getParentNode();
- Node r1 = context.getNextSibling();
- if (r1 == null)
- {
- p2.appendChild(root);
- }
- else
- {
- p2.insertBefore(root, r1);
- }
- break;
- case ACTION_REPLACE:
- Node p3 = context.getParentNode();
- Node r2 = context.getNextSibling();
- p3.removeChild(context);
- if (r2 == null)
- {
- p3.appendChild(root);
- }
- else
- {
- p3.insertBefore(root, r2);
- }
- break;
- }
- return root;
- }
-
- public void abort()
- {
- if (eventSink != null)
- {
- eventSink.interrupt();
- }
- }
-
- private Document doParse(LSInput input)
- throws DOMException, LSException
- {
- // create event sink
- if (eventSink != null)
- {
- throw new LSException(LSException.PARSE_ERR, "parse in progress");
- }
- InputSource source = getInputSource(input);
- eventSink = (filter == null) ? new SAXEventSink() :
- new FilteredSAXEventSink(filter);
- // configure sink
- eventSink.namespaceAware = namespaceAware;
- eventSink.ignoreWhitespace = ignoreWhitespace;
- eventSink.expandEntityReferences = expandEntityReferences;
- eventSink.ignoreComments = ignoreComments;
- eventSink.coalescing = coalescing;
- // get and configure reader
- XMLReader reader = getXMLReader();
- try
- {
- reader.setContentHandler(eventSink);
- reader.setDTDHandler(eventSink);
- reader.setProperty("http://xml.org/sax/properties/lexical-handler",
- eventSink);
- reader.setProperty("http://xml.org/sax/properties/declaration-handler",
- eventSink);
- reader.setFeature("http://xml.org/sax/features/namespaces",
- namespaceAware);
- reader.setFeature("http://xml.org/sax/features/namespace-prefixes",
- true);
- reader.setFeature("http://xml.org/sax/features/validation",
- validating);
- try
- {
- reader.setFeature("http://xml.org/sax/features/use-attributes2",
- true);
- }
- catch (SAXNotRecognizedException e)
- {
- // ignore
- }
- try
- {
- reader.setFeature("http://xml.org/sax/features/external-general-entities",
- true);
- }
- catch (SAXNotRecognizedException e)
- {
- // ignore
- }
- reader.setEntityResolver(entityResolver);
- reader.setErrorHandler(errorHandler);
- // parse
- reader.parse(source);
- }
- catch (DOMException e)
- {
- reader = null;
- eventSink = null;
- throw e;
- }
- catch (SAXException e)
- {
- reader = null;
- eventSink = null;
- throw new DomLSException(LSException.PARSE_ERR, e);
- }
- catch (IOException e)
- {
- reader = null;
- eventSink = null;
- throw new DomLSException(LSException.PARSE_ERR, e);
- }
- // return document
- Document ret = eventSink.doc;
- String systemId = input.getSystemId();
- if (systemId != null && ret instanceof DomDocument)
- {
- ((DomDocument) ret).setDocumentURI(systemId);
- }
- eventSink = null;
- return ret;
- }
-
- private XMLReader getXMLReader()
- throws LSException
- {
- if (reader == null)
- {
- factory.setNamespaceAware(namespaceAware);
- factory.setValidating(validating);
- factory.setXIncludeAware(xIncludeAware);
- try
- {
- SAXParser parser = factory.newSAXParser();
- reader = parser.getXMLReader();
- }
- catch (ParserConfigurationException e)
- {
- throw new DomLSException(LSException.PARSE_ERR, e);
- }
- catch (SAXException e)
- {
- throw new DomLSException(LSException.PARSE_ERR, e);
- }
- }
- return reader;
- }
-
- private InputSource getInputSource(LSInput input)
- throws LSException
- {
- InputSource source = null;
- String systemId = input.getSystemId();
- InputStream in = input.getByteStream();
- if (in != null)
- {
- source = new InputSource(in);
- source.setSystemId(systemId);
- }
- if (source == null && entityResolver != null)
- {
- String publicId = input.getPublicId();
- try
- {
- source = entityResolver.resolveEntity(publicId, systemId);
- }
- catch (SAXException e)
- {
- throw new DomLSException(LSException.PARSE_ERR, e);
- }
- catch (IOException e)
- {
- throw new DomLSException(LSException.PARSE_ERR, e);
- }
- }
- if (source == null)
- {
- URL url = null;
- String base = input.getBaseURI();
- try
- {
- try
- {
- URL baseURL = (base == null) ? null : new URL(base);
- url = (baseURL == null) ? new URL(systemId) :
- new URL(baseURL, systemId);
- }
- catch (MalformedURLException e)
- {
- File baseFile = (base == null) ? null : new File(base);
- url = (baseFile == null) ? new File(systemId).toURL() :
- new File(baseFile, systemId).toURL();
- }
- in = url.openStream();
- systemId = url.toString();
- source = new InputSource(in);
- source.setSystemId(systemId);
- }
- catch (IOException e)
- {
- throw new DomLSException(LSException.PARSE_ERR, e);
- }
- }
- return source;
- }
-
- // -- DOMConfiguration --
-
- public void setParameter(String name, Object value)
- throws DOMException
- {
- name = name.toLowerCase();
- if ("cdata-sections".equals(name))
- {
- coalescing = !((Boolean) value).booleanValue();
- }
- else if ("comments".equals(name))
- {
- ignoreComments = !((Boolean) value).booleanValue();
- }
- else if ("element-content-whitespace".equals(name))
- {
- ignoreWhitespace = !((Boolean) value).booleanValue();
- }
- else if ("namespaces".equals(name))
- {
- namespaceAware = ((Boolean) value).booleanValue();
- }
- else if ("expand-entity-references".equals(name))
- {
- expandEntityReferences = ((Boolean) value).booleanValue();
- }
- else if ("coalescing".equals(name))
- {
- coalescing = ((Boolean) value).booleanValue();
- }
- else if ("validating".equals(name))
- {
- validating = ((Boolean) value).booleanValue();
- }
- else if ("xinclude-aware".equals(name))
- {
- xIncludeAware = ((Boolean) value).booleanValue();
- }
- else if ("entity-resolver".equals(name))
- {
- entityResolver = (EntityResolver) value;
- }
- else if ("error-handler".equals(name))
- {
- errorHandler = (ErrorHandler) value;
- }
- else
- {
- throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
- }
- // invalidate reader, a new one will be created
- reader = null;
- }
-
- public Object getParameter(String name)
- throws DOMException
- {
- name = name.toLowerCase();
- if ("cdata-sections".equals(name))
- {
- return coalescing ? Boolean.FALSE : Boolean.TRUE;
- }
- else if ("comments".equals(name))
- {
- return ignoreComments ? Boolean.FALSE : Boolean.TRUE;
- }
- else if ("element-content-whitespace".equals(name))
- {
- return ignoreWhitespace ? Boolean.FALSE : Boolean.TRUE;
- }
- else if ("namespaces".equals(name))
- {
- return namespaceAware ? Boolean.TRUE : Boolean.FALSE;
- }
- else if ("expand-entity-references".equals(name))
- {
- return expandEntityReferences ? Boolean.TRUE : Boolean.FALSE;
- }
- else if ("coalescing".equals(name))
- {
- return coalescing ? Boolean.TRUE : Boolean.FALSE;
- }
- else if ("validating".equals(name))
- {
- return validating ? Boolean.TRUE : Boolean.FALSE;
- }
- else if ("xinclude-aware".equals(name))
- {
- return xIncludeAware ? Boolean.TRUE : Boolean.FALSE;
- }
- else if ("entity-resolver".equals(name))
- {
- return entityResolver;
- }
- else if ("error-handler".equals(name))
- {
- return errorHandler;
- }
- else
- {
- throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
- }
- }
-
- public boolean canSetParameter(String name, Object value)
- {
- return contains(name);
- }
-
- public DOMStringList getParameterNames()
- {
- return this;
- }
-
- // -- DOMStringList --
-
- public String item(int i)
- {
- return (String) SUPPORTED_PARAMETERS.get(i);
- }
-
- public int getLength()
- {
- return SUPPORTED_PARAMETERS.size();
- }
-
- public boolean contains(String str)
- {
- return SUPPORTED_PARAMETERS.contains(str);
- }
-
- // -- ErrorHandler --
-
- public void warning(SAXParseException e)
- throws SAXException
- {
- if (errorHandler != null)
- {
- errorHandler.warning(e);
- }
- }
-
- public void error(SAXParseException e)
- throws SAXException
- {
- if (errorHandler != null)
- {
- errorHandler.error(e);
- }
- }
-
- public void fatalError(SAXParseException e)
- throws SAXException
- {
- if (errorHandler != null)
- {
- errorHandler.fatalError(e);
- }
- abort();
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/ls/DomLSSerializer.java b/libjava/gnu/xml/dom/ls/DomLSSerializer.java
deleted file mode 100644
index cedaf151e70..00000000000
--- a/libjava/gnu/xml/dom/ls/DomLSSerializer.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/* DomLSSerializer.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.ls;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Arrays;
-import java.util.List;
-import org.w3c.dom.DOMConfiguration;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.DOMStringList;
-import org.w3c.dom.Node;
-import org.w3c.dom.ls.LSException;
-import org.w3c.dom.ls.LSOutput;
-import org.w3c.dom.ls.LSSerializer;
-import org.w3c.dom.ls.LSSerializerFilter;
-import org.w3c.dom.traversal.NodeFilter;
-import gnu.xml.dom.DomDOMException;
-import gnu.xml.transform.StreamSerializer;
-
-/**
- * Serialize a DOM node to a stream.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DomLSSerializer
- extends StreamSerializer
- implements LSSerializer, DOMConfiguration, DOMStringList
-{
-
- private static final List SUPPORTED_PARAMETERS =
- Arrays.asList(new String[] {"discard-default-content",
- "xml-declaration"});
-
- private LSSerializerFilter filter;
- private StreamSerializer serializer;
-
- public DomLSSerializer()
- {
- super();
- discardDefaultContent = true;
- }
-
- // -- LSSerializer --
-
- public DOMConfiguration getDomConfig()
- {
- return this;
- }
-
- public String getNewLine()
- {
- return eol;
- }
-
- public void setNewLine(String newLine)
- {
- if (newLine == null)
- {
- newLine = System.getProperty("line.separator");
- }
- eol = newLine;
- }
-
- public LSSerializerFilter getFilter()
- {
- return filter;
- }
-
- public void setFilter(LSSerializerFilter filter)
- {
- this.filter = filter;
- }
-
- public boolean write(Node node, LSOutput output)
- throws LSException
- {
- OutputStream out = output.getByteStream();
- try
- {
- if (out == null)
- {
- String systemId = output.getSystemId();
- try
- {
- URL url = new URL(systemId);
- URLConnection connection = url.openConnection();
- connection.setDoOutput(true);
- if (connection instanceof HttpURLConnection)
- {
- ((HttpURLConnection) connection).setRequestMethod("PUT");
- }
- out = connection.getOutputStream();
- }
- catch (MalformedURLException e)
- {
- File file = new File(systemId);
- out = new FileOutputStream(file);
- }
- }
- serialize(node, out);
- out.flush();
- return true;
- }
- catch (IOException e)
- {
- throw new DomLSException(LSException.SERIALIZE_ERR, e);
- }
- }
-
- public boolean writeToURI(Node node, String uri)
- throws LSException
- {
- LSOutput output = new DomLSOutput();
- output.setSystemId(uri);
- return write(node, output);
- }
-
- public String writeToString(Node node)
- throws DOMException, LSException
- {
- Writer writer = new StringWriter();
- LSOutput output = new DomLSOutput();
- output.setCharacterStream(writer);
- write(node, output);
- return writer.toString();
- }
-
- public void serialize(Node node, OutputStream out)
- throws IOException
- {
- if (filter == null)
- {
- super.serialize(node, out);
- }
- else
- {
- int wts = filter.getWhatToShow();
- if (wts != NodeFilter.SHOW_ALL)
- {
- switch (node.getNodeType())
- {
- case Node.ATTRIBUTE_NODE:
- if ((wts & NodeFilter.SHOW_ATTRIBUTE) == 0)
- {
- super.serialize(node, out);
- return;
- }
- break;
- case Node.TEXT_NODE:
- if ((wts & NodeFilter.SHOW_TEXT) == 0)
- {
- super.serialize(node, out);
- return;
- }
- break;
- case Node.ELEMENT_NODE:
- if ((wts & NodeFilter.SHOW_ELEMENT) == 0)
- {
- super.serialize(node, out);
- return;
- }
- break;
- case Node.CDATA_SECTION_NODE:
- if ((wts & NodeFilter.SHOW_CDATA_SECTION) == 0)
- {
- super.serialize(node, out);
- return;
- }
- break;
- case Node.COMMENT_NODE:
- if ((wts & NodeFilter.SHOW_COMMENT) == 0)
- {
- super.serialize(node, out);
- return;
- }
- break;
- case Node.DOCUMENT_NODE:
- if ((wts & NodeFilter.SHOW_DOCUMENT) == 0)
- {
- super.serialize(node, out);
- return;
- }
- break;
- case Node.DOCUMENT_TYPE_NODE:
- if ((wts & NodeFilter.SHOW_DOCUMENT_TYPE) == 0)
- {
- super.serialize(node, out);
- return;
- }
- break;
- case Node.PROCESSING_INSTRUCTION_NODE:
- if ((wts & NodeFilter.SHOW_PROCESSING_INSTRUCTION) == 0)
- {
- super.serialize(node, out);
- return;
- }
- break;
- case Node.DOCUMENT_FRAGMENT_NODE:
- if ((wts & NodeFilter.SHOW_DOCUMENT_FRAGMENT) == 0)
- {
- super.serialize(node, out);
- return;
- }
- break;
- case Node.ENTITY_NODE:
- if ((wts & NodeFilter.SHOW_ENTITY) == 0)
- {
- super.serialize(node, out);
- return;
- }
- break;
- case Node.ENTITY_REFERENCE_NODE:
- if ((wts & NodeFilter.SHOW_ENTITY_REFERENCE) == 0)
- {
- super.serialize(node, out);
- return;
- }
- break;
- case Node.NOTATION_NODE:
- if ((wts & NodeFilter.SHOW_NOTATION) == 0)
- {
- super.serialize(node, out);
- return;
- }
- break;
- }
- }
- switch (filter.acceptNode(node))
- {
- case NodeFilter.FILTER_ACCEPT:
- super.serialize(node, out);
- break;
- case NodeFilter.FILTER_REJECT:
- break;
- case NodeFilter.FILTER_SKIP:
- Node first = node.getFirstChild();
- if (first != null)
- {
- serialize(first, out);
- }
- break;
- }
- }
- }
-
- // -- DOMConfiguration --
-
- public void setParameter(String name, Object value)
- throws DOMException
- {
- if ("discard-default-content".equals(name))
- {
- discardDefaultContent = "true".equals(value.toString());
- }
- else if ("xml-declaration".equals(name))
- {
- xmlDeclaration = "false".equals(value.toString());
- }
- else
- {
- throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
- }
- }
-
- public Object getParameter(String name)
- throws DOMException
- {
- if ("discard-default-content".equals(name))
- {
- return discardDefaultContent ? "true" : "false";
- }
- else if ("xml-declaration".equals(name))
- {
- return xmlDeclaration ? "true" : "false";
- }
- else
- {
- throw new DomDOMException(DOMException.NOT_SUPPORTED_ERR);
- }
- }
-
- public boolean canSetParameter(String name, Object value)
- {
- return contains(name);
- }
-
- public DOMStringList getParameterNames()
- {
- return this;
- }
-
- // -- DOMStringList --
-
- public String item(int i)
- {
- return (String) SUPPORTED_PARAMETERS.get(i);
- }
-
- public int getLength()
- {
- return SUPPORTED_PARAMETERS.size();
- }
-
- public boolean contains(String str)
- {
- return SUPPORTED_PARAMETERS.contains(str);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/ls/FilteredSAXEventSink.java b/libjava/gnu/xml/dom/ls/FilteredSAXEventSink.java
deleted file mode 100644
index 1c99ee524fa..00000000000
--- a/libjava/gnu/xml/dom/ls/FilteredSAXEventSink.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/* FilteredSAXEventSink.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.ls;
-
-import java.util.LinkedList;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-import org.w3c.dom.ls.LSParserFilter;
-import org.w3c.dom.traversal.NodeFilter;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-/**
- * A SAX event sink that calls out to a parser filter in order to decide
- * whether to insert nodes into the tree.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class FilteredSAXEventSink
- extends SAXEventSink
-{
-
- final LSParserFilter filter;
- final int whatToShow;
-
- /**
- * Stack of elements to insert.
- */
- LinkedList nodes;
-
- /**
- * Corresponding stack of filter decisions about the nodes.
- */
- LinkedList decisions;
-
- /**
- * True when rejecting child nodes.
- */
- boolean rejecting;
-
- FilteredSAXEventSink(LSParserFilter filter)
- {
- this.filter = filter;
- whatToShow = filter.getWhatToShow();
- }
-
- public void startDocument()
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- nodes = new LinkedList();
- decisions = new LinkedList();
-
- super.startDocument();
- }
-
- public void endDocument()
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- super.endDocument();
-
- switch (getDecision(ctx, false))
- {
- case LSParserFilter.FILTER_REJECT:
- ctx = null;
- doc = null;
- break;
- }
-
- nodes = null;
- decisions = null;
- }
-
- public void startElement(String uri, String localName, String qName,
- Attributes atts)
- throws SAXException
- {
- if (rejecting || interrupted)
- {
- return;
- }
- Element element = createElement(uri, localName, qName, atts);
- ctx = element;
-
- short decision = getDecision(element, true);
- nodes.addLast(element);
- decisions.addLast(new Short(decision));
-
- switch (decision)
- {
- case LSParserFilter.FILTER_REJECT:
- rejecting = true;
- break;
- case LSParserFilter.FILTER_INTERRUPT:
- interrupted = true;
- break;
- }
- }
-
- protected Attr createAttr(Attributes atts, int index)
- {
- Attr attr = super.createAttr(atts, index);
- short decision = getDecision(attr, false);
- switch (decision)
- {
- case LSParserFilter.FILTER_REJECT:
- return null;
- case LSParserFilter.FILTER_INTERRUPT:
- interrupted = true;
- return null;
- }
- return attr;
- }
-
- public void endElement(String uri, String localName, String qName)
- throws SAXException
- {
- if (rejecting || interrupted)
- {
- return;
- }
- super.endElement(uri, localName, qName);
-
- Element element = (Element) nodes.removeLast();
- Node parent = nodes.isEmpty() ? doc : (Node) nodes.getLast();
- ctx = parent;
- short decision = ((Short) decisions.removeLast()).shortValue();
- switch (decision)
- {
- case LSParserFilter.FILTER_SKIP:
- // Add all children of element to parent
- for (Node child = element.getFirstChild(); child != null;
- child = child.getNextSibling())
- {
- parent.insertBefore(child, element);
- }
- return;
- case LSParserFilter.FILTER_REJECT:
- rejecting = false;
- break;
- }
- decision = getDecision(element, false);
- switch (decision)
- {
- case LSParserFilter.FILTER_ACCEPT:
- parent.appendChild(element);
- break;
- case LSParserFilter.FILTER_INTERRUPT:
- interrupted = true;
- break;
- }
- }
-
- public void characters(char[] c, int off, int len)
- throws SAXException
- {
- if (rejecting || interrupted)
- {
- return;
- }
- Text text = createText(c, off, len);
- short decision = getDecision(text, false);
- switch (decision)
- {
- case LSParserFilter.FILTER_ACCEPT:
- ctx.appendChild(text);
- break;
- case LSParserFilter.FILTER_INTERRUPT:
- interrupted = true;
- break;
- }
- }
-
- public void processingInstruction(String target, String data)
- throws SAXException
- {
- if (rejecting || interrupted || inDTD)
- {
- return;
- }
- Node pi = createProcessingInstruction(target, data);
- short decision = getDecision(pi, false);
- switch (decision)
- {
- case LSParserFilter.FILTER_ACCEPT:
- ctx.appendChild(pi);
- break;
- case LSParserFilter.FILTER_INTERRUPT:
- interrupted = true;
- break;
- }
- }
-
- public void startDTD(String name, String publicId, String systemId)
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- Node doctype = createDocumentType(name, publicId, systemId);
- ctx = doctype;
- inDTD = true;
- nodes.addLast(doctype);
- decisions.addLast(new Short(LSParserFilter.FILTER_ACCEPT));
- }
-
- public void endDTD()
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- Node doctype = (Node) nodes.removeLast();
- decisions.removeLast();
- inDTD = false;
- ctx = doc;
- short decision = getDecision(doctype, false);
- switch (decision)
- {
- case LSParserFilter.FILTER_ACCEPT:
- ctx.appendChild(doctype);
- break;
- case LSParserFilter.FILTER_INTERRUPT:
- interrupted = true;
- break;
- }
- }
-
- public void comment(char[] c, int off, int len)
- throws SAXException
- {
- if (rejecting || interrupted || inDTD)
- {
- return;
- }
- Node comment = createComment(c, off, len);
- short decision = getDecision(comment, false);
- switch (decision)
- {
- case LSParserFilter.FILTER_ACCEPT:
- ctx.appendChild(comment);
- break;
- case LSParserFilter.FILTER_INTERRUPT:
- interrupted = true;
- break;
- }
- }
-
- // TODO declarations
-
- short getDecision(Node node, boolean start)
- {
- boolean show = (whatToShow == NodeFilter.SHOW_ALL);
- if (!show)
- {
- switch (node.getNodeType())
- {
- case Node.ATTRIBUTE_NODE:
- show = ((whatToShow & NodeFilter.SHOW_ATTRIBUTE) != 0);
- break;
- case Node.TEXT_NODE:
- show = ((whatToShow & NodeFilter.SHOW_TEXT) != 0);
- break;
- case Node.CDATA_SECTION_NODE:
- show = ((whatToShow & NodeFilter.SHOW_CDATA_SECTION) != 0);
- break;
- case Node.ELEMENT_NODE:
- show = ((whatToShow & NodeFilter.SHOW_ELEMENT) != 0);
- break;
- case Node.COMMENT_NODE:
- show = ((whatToShow & NodeFilter.SHOW_COMMENT) != 0);
- break;
- case Node.DOCUMENT_NODE:
- show = ((whatToShow & NodeFilter.SHOW_DOCUMENT) != 0);
- break;
- case Node.PROCESSING_INSTRUCTION_NODE:
- show = ((whatToShow & NodeFilter.SHOW_PROCESSING_INSTRUCTION) != 0);
- break;
- case Node.DOCUMENT_FRAGMENT_NODE:
- show = ((whatToShow & NodeFilter.SHOW_DOCUMENT_FRAGMENT) != 0);
- break;
- case Node.DOCUMENT_TYPE_NODE:
- show = ((whatToShow & NodeFilter.SHOW_DOCUMENT_TYPE) != 0);
- break;
- case Node.ENTITY_REFERENCE_NODE:
- show = ((whatToShow & NodeFilter.SHOW_ENTITY_REFERENCE) != 0);
- break;
- case Node.ENTITY_NODE:
- show = ((whatToShow & NodeFilter.SHOW_ENTITY) != 0);
- break;
- case Node.NOTATION_NODE:
- show = ((whatToShow & NodeFilter.SHOW_NOTATION) != 0);
- break;
- }
- }
- if (!show)
- {
- return LSParserFilter.FILTER_ACCEPT;
- }
- if (start)
- {
- return filter.startElement((Element) node);
- }
- return filter.acceptNode(node);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/ls/ReaderInputStream.java b/libjava/gnu/xml/dom/ls/ReaderInputStream.java
deleted file mode 100644
index 5b41abd3d74..00000000000
--- a/libjava/gnu/xml/dom/ls/ReaderInputStream.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/* ReaderInputStream.java --
- Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.ls;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.Reader;
-
-/**
- * Character stream wrapper.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- * @author <a href='mailto:mark@klomp.org'>Mark Wielaard</a>
- */
-public class ReaderInputStream
- extends InputStream
-{
-
- private Reader reader;
- private String encoding;
-
- // Holds extra spillover data if necessary
- private byte extra[];
- private int pos;
-
- private byte extra_marked[];
- private int pos_marked;
-
- public ReaderInputStream(Reader reader)
- {
- this.reader = reader;
- this.encoding = "UTF-8";
- }
-
- void setEncoding(String encoding)
- {
- this.encoding = encoding;
- }
-
- public int read()
- throws IOException
- {
- if (extra != null)
- {
- int result = extra[pos];
- pos++;
- if (pos >= extra.length)
- {
- extra = null;
- }
- return result;
- }
- return reader.read();
- }
-
- public int read(byte[] b)
- throws IOException
- {
- return read(b, 0, b.length);
- }
-
- public int read(byte[] b, int off, int len)
- throws IOException
- {
- if (len == 0)
- {
- return 0;
- }
-
- if (extra != null)
- {
- int available = extra.length - pos;
- int l = available < len ? available : len;
- System.arraycopy(extra, 0, b, off, l);
- pos += l;
- if (pos >= extra.length)
- {
- extra = null;
- }
- return l;
- }
-
- char[] c = new char[len];
- int l = reader.read(c, 0, len);
- if (l == -1)
- {
- return -1;
- }
-
- String s = new String(c, 0, l);
- byte[] d = s.getBytes(encoding);
-
- int available = d.length;
- int more = d.length - len;
- if (more > 0)
- {
- extra = new byte[more];
- pos = 0;
- System.arraycopy(d, len, extra, 0, more);
- available -= more;
- }
-
- System.arraycopy(d, 0, b, off, available);
- return available;
- }
-
- public void close()
- throws IOException
- {
- reader.close();
- }
-
- public boolean markSupported()
- {
- return reader.markSupported();
- }
-
- public void mark(int limit)
- {
- if (extra != null)
- {
- extra_marked = new byte[extra.length];
- System.arraycopy(extra, 0, extra_marked, 0, extra.length);
- pos_marked = pos;
- }
- else
- {
- extra_marked = null;
- }
-
- try
- {
- // Note that this might be a bit more than asked for.
- // Because we might also have the extra_marked bytes.
- // That is fine (and necessary for reset() to work).
- reader.mark(limit);
- }
- catch (IOException ioe)
- {
- throw new RuntimeException(ioe);
- }
- }
-
- public void reset()
- throws IOException
- {
- extra = extra_marked;
- pos = pos_marked;
- extra_marked = null;
-
- reader.reset();
- }
-
- public long skip(long n)
- throws IOException
- {
- long done = 0;
- if (extra != null)
- {
- int available = extra.length - pos;
- done = available < n ? available : n;
- pos += done;
- if (pos >= extra.length)
- {
- extra = null;
- }
- }
-
- n -= done;
- if (n > 0)
- {
- return reader.skip(n) + done;
- }
- else
- {
- return done;
- }
- }
-
- /**
- * Returns conservative number of bytes available without blocking.
- * Actual number of bytes that can be read without blocking might
- * be (much) bigger.
- */
- public int available()
- throws IOException
- {
- if (extra != null)
- {
- return pos - extra.length;
- }
-
- return reader.ready() ? 1 : 0;
- }
-
- public String toString()
- {
- return getClass().getName() + "[" + reader + ", " + encoding + "]";
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/ls/SAXEventSink.java b/libjava/gnu/xml/dom/ls/SAXEventSink.java
deleted file mode 100644
index a850460b1e2..00000000000
--- a/libjava/gnu/xml/dom/ls/SAXEventSink.java
+++ /dev/null
@@ -1,557 +0,0 @@
-/* SAXEventSink.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.ls;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import javax.xml.XMLConstants;
-import org.w3c.dom.Attr;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.Element;
-import org.w3c.dom.Entity;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-import org.xml.sax.Attributes;
-import org.xml.sax.DTDHandler;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.ext.Attributes2;
-import org.xml.sax.ext.DeclHandler;
-import org.xml.sax.ext.LexicalHandler;
-import gnu.xml.aelfred2.ContentHandler2;
-import gnu.xml.dom.DomAttr;
-import gnu.xml.dom.DomDocument;
-import gnu.xml.dom.DomDoctype;
-
-/**
- * A SAX content and lexical handler used to construct a DOM document.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class SAXEventSink
- implements ContentHandler2, LexicalHandler, DTDHandler, DeclHandler
-{
-
- private static final String XMLNS_URI = XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
- private static final String XMLNS_PREFIX = XMLConstants.XMLNS_ATTRIBUTE;
-
- boolean namespaceAware;
- boolean ignoreWhitespace;
- boolean expandEntityReferences;
- boolean ignoreComments;
- boolean coalescing;
-
- DomDocument doc; // document being constructed
- Node ctx; // current context (parent node)
- LinkedList entityCtx; // entity context
- List pending; // namespace nodes waiting for a declaring element
- Locator locator;
- boolean inCDATA;
- boolean inDTD;
- boolean interrupted;
-
- void interrupt()
- {
- interrupted = true;
- }
-
- // -- ContentHandler2 --
-
- public void setDocumentLocator(Locator locator)
- {
- this.locator = locator;
- }
-
- public void startDocument()
- throws SAXException
- {
- if (namespaceAware)
- {
- pending = new LinkedList();
- }
- doc = new DomDocument();
- doc.setStrictErrorChecking(false);
- doc.setBuilding(true);
- ctx = doc;
- }
-
- public void xmlDecl(String version, String encoding, boolean standalone,
- String inputEncoding)
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- doc.setXmlVersion(version);
- doc.setXmlEncoding(encoding);
- doc.setXmlStandalone(standalone);
- doc.setInputEncoding(inputEncoding);
- }
-
- public void endDocument()
- throws SAXException
- {
- doc.setStrictErrorChecking(true);
- doc.setBuilding(false);
- DomDoctype doctype = (DomDoctype) doc.getDoctype();
- if (doctype != null)
- {
- doctype.makeReadonly();
- }
- ctx = null;
- locator = null;
- }
-
- public void startPrefixMapping(String prefix, String uri)
- throws SAXException
- {
- if (namespaceAware)
- {
- String nsName = (prefix != null && prefix.length() > 0) ?
- XMLNS_PREFIX + ":" + prefix : XMLNS_PREFIX;
- DomAttr ns = (DomAttr) doc.createAttributeNS(XMLNS_URI, nsName);
- ns.setNodeValue(uri);
- if (ctx.getNodeType() == Node.ATTRIBUTE_NODE)
- {
- // Add to owner element
- Node target = ((Attr) ctx).getOwnerElement();
- target.getAttributes().setNamedItemNS(ns);
- }
- else
- {
- // Add to pending list; namespace node will be inserted when
- // element is seen
- pending.add(ns);
- }
- }
- }
-
- public void endPrefixMapping(String prefix)
- throws SAXException
- {
- }
-
- public void startElement(String uri, String localName, String qName,
- Attributes atts)
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- Element element = createElement(uri, localName, qName, atts);
- // add element to context
- ctx.appendChild(element);
- ctx = element;
- }
-
- protected Element createElement(String uri, String localName, String qName,
- Attributes atts)
- throws SAXException
- {
- // create element node
- Element element = namespaceAware ?
- doc.createElementNS(uri, qName) :
- doc.createElement(qName);
- NamedNodeMap attrs = element.getAttributes();
- if (namespaceAware && !pending.isEmpty())
- {
- // add pending namespace nodes
- for (Iterator i = pending.iterator(); i.hasNext(); )
- {
- Node ns = (Node) i.next();
- attrs.setNamedItemNS(ns);
- }
- pending.clear();
- }
- // add attributes
- int len = atts.getLength();
- for (int i = 0; i < len; i++)
- {
- // create attribute
- Attr attr = createAttr(atts, i);
- if (attr != null)
- {
- // add attribute to element
- if (namespaceAware)
- {
- attrs.setNamedItemNS(attr);
- }
- else
- {
- attrs.setNamedItem(attr);
- }
- }
- }
- return element;
- }
-
- protected Attr createAttr(Attributes atts, int index)
- {
- DomAttr attr;
- if (namespaceAware)
- {
- String a_uri = atts.getURI(index);
- String a_qName = atts.getQName(index);
- attr = (DomAttr) doc.createAttributeNS(a_uri, a_qName);
- }
- else
- {
- String a_qName = atts.getQName(index);
- attr = (DomAttr) doc.createAttribute(a_qName);
- }
- attr.setNodeValue(atts.getValue(index));
- if (atts instanceof Attributes2)
- {
- Attributes2 atts2 = (Attributes2) atts;
- // TODO attr.setDeclared(atts2.isDeclared(index));
- attr.setSpecified(atts2.isSpecified(index));
- }
- return attr;
- }
-
- public void endElement(String uri, String localName, String qName)
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- if (namespaceAware)
- {
- pending.clear();
- }
- ctx = ctx.getParentNode();
- }
-
- public void characters(char[] c, int off, int len)
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- ctx.appendChild(createText(c, off, len));
- }
-
- protected Text createText(char[] c, int off, int len)
- throws SAXException
- {
- Text text = (inCDATA && !coalescing) ?
- doc.createCDATASection(new String(c, off, len)) :
- doc.createTextNode(new String(c, off, len));
- return text;
- }
-
- public void ignorableWhitespace(char[] c, int off, int len)
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- if (!ignoreWhitespace)
- {
- characters(c, off, len);
- }
- }
-
- public void processingInstruction(String target, String data)
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- if (!inDTD)
- {
- Node pi = createProcessingInstruction(target, data);
- ctx.appendChild(pi);
- }
- }
-
- protected Node createProcessingInstruction(String target, String data)
- {
- return doc.createProcessingInstruction(target, data);
- }
-
- public void skippedEntity(String name)
- throws SAXException
- {
- // This callback is totally pointless
- }
-
- // -- LexicalHandler --
-
- public void startDTD(String name, String publicId, String systemId)
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- Node doctype = createDocumentType(name, publicId, systemId);
- doc.appendChild(doctype);
- ctx = doctype;
- inDTD = true;
- }
-
- protected Node createDocumentType(String name, String publicId,
- String systemId)
- {
- return new DomDoctype(doc, name, publicId, systemId);
- }
-
- public void endDTD()
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- inDTD = false;
- ctx = ctx.getParentNode();
- }
-
- public void startEntity(String name)
- throws SAXException
- {
- DocumentType doctype = doc.getDoctype();
- if (doctype == null)
- {
- throw new SAXException("SAX parser error: " +
- "reference to entity in undeclared doctype");
- }
- if ("[dtd]".equals(name) || name.charAt(0) == '%')
- {
- // Ignore DTD and parameter entities
- ctx = doctype;
- return;
- }
- if ("lt".equals(name) ||
- "gt".equals(name) ||
- "amp".equals(name) ||
- "apos".equals(name) ||
- "quot".equals(name))
- {
- return;
- }
- // Get entity
- NamedNodeMap entities = doctype.getEntities();
- Entity entity = (Entity) entities.getNamedItem(name);
- if (entity == null)
- {
- throw new SAXException("SAX parser error: " +
- "reference to undeclared entity: " + name);
- }
- pushEntity(entity);
- }
-
- public void endEntity(String name)
- throws SAXException
- {
- if ("[dtd]".equals(name) || name.charAt(0) == '%')
- {
- // Ignore DTD and parameter entities
- return;
- }
- if ("lt".equals(name) ||
- "gt".equals(name) ||
- "amp".equals(name) ||
- "apos".equals(name) ||
- "quot".equals(name))
- {
- return;
- }
- // Get entity
- Entity entity = popEntity();
- // TODO resolve external entities to ensure that entity has content
- if (expandEntityReferences)
- {
- // Get entity content
- for (Node child = entity.getFirstChild(); child != null;
- child = child.getNextSibling())
- {
- ctx.appendChild(child);
- }
- }
- else
- {
- Node entityReference = doc.createEntityReference(name);
- ctx.appendChild(entityReference);
- }
- }
-
- void pushEntity(Node entity)
- {
- if (entityCtx == null)
- {
- entityCtx = new LinkedList();
- }
- entityCtx.addLast(ctx);
- ctx = entity;
- }
-
- Entity popEntity()
- {
- Entity ret = (Entity) ctx;
- ctx = (Node) entityCtx.removeLast();
- return ret;
- }
-
- public void startCDATA()
- throws SAXException
- {
- inCDATA = true;
- }
-
- public void endCDATA()
- throws SAXException
- {
- inCDATA = false;
- }
-
- public void comment(char[] c, int off, int len)
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- if (!inDTD)
- {
- Node comment = createComment(c, off, len);
- ctx.appendChild(comment);
- }
- }
-
- protected Node createComment(char[] c, int off, int len)
- {
- return doc.createComment(new String(c, off, len));
- }
-
- // -- DTDHandler --
-
- public void notationDecl(String name, String publicId, String systemId)
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- DomDoctype doctype = (DomDoctype) ctx;
- doctype.declareNotation(name, publicId, systemId);
- }
-
- public void unparsedEntityDecl(String name, String publicId, String systemId,
- String notationName)
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- DomDoctype doctype = (DomDoctype) ctx;
- Entity entity = doctype.declareEntity(name, publicId, systemId,
- notationName);
- }
-
- // -- DeclHandler --
-
- public void elementDecl(String name, String model)
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- // Ignore fake element declarations generated by ValidationConsumer.
- // If an element is not really declared in the DTD it will not be
- // declared in the document model.
- if (!(ctx instanceof DomDoctype))
- {
- return;
- }
- DomDoctype doctype = (DomDoctype) ctx;
- doctype.elementDecl(name, model);
- }
-
- public void attributeDecl(String eName, String aName, String type,
- String mode, String value)
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- DomDoctype doctype = (DomDoctype) ctx;
- doctype.attributeDecl(eName, aName, type, mode, value);
- }
-
- public void internalEntityDecl(String name, String value)
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- DomDoctype doctype = (DomDoctype) ctx;
- Entity entity = doctype.declareEntity(name, null, null, null);
- if (entity != null)
- {
- Node text = doc.createTextNode(value);
- entity.appendChild(text);
- }
- }
-
- public void externalEntityDecl(String name, String publicId, String systemId)
- throws SAXException
- {
- if (interrupted)
- {
- return;
- }
- DomDoctype doctype = (DomDoctype) ctx;
- Entity entity = doctype.declareEntity(name, publicId, systemId, null);
- }
-
-}
-
diff --git a/libjava/gnu/xml/dom/ls/WriterOutputStream.java b/libjava/gnu/xml/dom/ls/WriterOutputStream.java
deleted file mode 100644
index 2fb20614722..00000000000
--- a/libjava/gnu/xml/dom/ls/WriterOutputStream.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/* WriterOutputStream.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.dom.ls;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-
-/**
- * Character stream wrapper.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class WriterOutputStream
- extends OutputStream
-{
-
- private Writer writer;
- private String encoding;
-
- public WriterOutputStream(Writer writer)
- {
- this.writer = writer;
- this.encoding = "UTF-8";
- }
-
- void setEncoding(String encoding)
- {
- this.encoding = encoding;
- }
-
- public void write(int c)
- throws IOException
- {
- writer.write(c);
- }
-
- public void write(byte[] b)
- throws IOException
- {
- write(b, 0, b.length);
- }
-
- public void write(byte[] b, int off, int len)
- throws IOException
- {
- writer.write(new String(b, off, len, encoding));
- }
-
- public void close()
- throws IOException
- {
- writer.close();
- }
-
- public void flush()
- throws IOException
- {
- writer.flush();
- }
-
-}
-
diff --git a/libjava/gnu/xml/pipeline/CallFilter.java b/libjava/gnu/xml/pipeline/CallFilter.java
deleted file mode 100644
index 3b337517377..00000000000
--- a/libjava/gnu/xml/pipeline/CallFilter.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/* CallFilter.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.pipeline;
-
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.net.URL;
-import java.net.URLConnection;
-import java.io.Writer;
-
-import org.xml.sax.DTDHandler;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXNotRecognizedException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.XMLReaderFactory;
-
-import gnu.xml.util.Resolver;
-import gnu.xml.util.XMLWriter;
-
-
-/**
- * Input is sent as an XML request to given URI, and the output of this
- * filter is the parsed response to that request.
- * A connection is opened to the remote URI when the startDocument call is
- * issued through this filter, and the request is finished when the
- * endDocument call is issued. Events should be written quickly enough to
- * prevent the remote HTTP server from aborting the connection due to
- * inactivity; you may want to buffer text in an earlier pipeline stage.
- * If your application requires validity checking of such
- * outputs, have the output pipeline include a validation stage.
- *
- * <p>In effect, this makes a remote procedure call to the URI, with the
- * request and response document syntax as chosen by the application.
- * <em>Note that all the input events must be seen, and sent to the URI,
- * before the first output event can be seen. </em> Clients are delayed
- * at least by waiting for the server to respond, constraining concurrency.
- * Services can thus be used to synchronize concurrent activities, and
- * even to prioritize service among different clients.
- *
- * <p> You are advised to avoid restricting yourself to an "RPC" model
- * for distributed computation. With a World Wide Web, network latencies
- * and failures (e.g. non-availability)
- * are significant; adopting a "procedure" model, rather than a workflow
- * model where bulk requests are sent and worked on asynchronously, is not
- * generally an optimal system-wide architecture. When the messages may
- * need authentication, such as with an OpenPGP signature, or when server
- * loads don't argue in favor of immediate responses, non-RPC models can
- * be advantageous. (So-called "peer to peer" computing models are one
- * additional type of model, though too often that term is applied to
- * systems that still have a centralized control structure.)
- *
- * <p> <em>Be strict in what you send, liberal in what you accept,</em> as
- * the Internet tradition goes. Strictly conformant data should never cause
- * problems to its receiver; make your request pipeline be very strict, and
- * don't compromise on that. Make your response pipeline strict as well,
- * but be ready to tolerate specific mild, temporary, and well-documented
- * variations from specific communications peers.
- *
- * @see XmlServlet
- *
- * @author David Brownell
- */
-final public class CallFilter implements EventConsumer
-{
- private Requestor req;
- private EventConsumer next;
- private URL target;
- private URLConnection conn;
- private ErrorHandler errHandler;
-
-
- /**
- * Initializes a call filter so that its inputs are sent to the
- * specified URI, and its outputs are sent to the next consumer
- * provided.
- *
- * @exception IOException if the URI isn't accepted as a URL
- */
- // constructor used by PipelineFactory
- public CallFilter (String uri, EventConsumer next)
- throws IOException
- {
- this.next = next;
- req = new Requestor ();
- setCallTarget (uri);
- }
-
- /**
- * Assigns the URI of the call target to be used.
- * Does not affect calls currently being made.
- */
- final public void setCallTarget (String uri)
- throws IOException
- {
- target = new URL (uri);
- }
-
- /**
- * Assigns the error handler to be used to present most fatal
- * errors.
- */
- public void setErrorHandler (ErrorHandler handler)
- {
- req.setErrorHandler (handler);
- }
-
-
- /**
- * Returns the call target's URI.
- */
- final public String getCallTarget ()
- {
- return target.toString ();
- }
-
- /** Returns the content handler currently in use. */
- final public org.xml.sax.ContentHandler getContentHandler ()
- {
- return req;
- }
-
- /** Returns the DTD handler currently in use. */
- final public DTDHandler getDTDHandler ()
- {
- return req;
- }
-
-
- /**
- * Returns the declaration or lexical handler currently in
- * use, or throws an exception for other properties.
- */
- final public Object getProperty (String id)
- throws SAXNotRecognizedException
- {
- if (EventFilter.DECL_HANDLER.equals (id))
- return req;
- if (EventFilter.LEXICAL_HANDLER.equals (id))
- return req;
- throw new SAXNotRecognizedException (id);
- }
-
-
- // JDK 1.1 seems to need it to be done this way, sigh
- ErrorHandler getErrorHandler () { return errHandler; }
-
- //
- // Takes input and echoes to server as POST input.
- // Then sends the POST reply to the next pipeline element.
- //
- final class Requestor extends XMLWriter
- {
- Requestor ()
- {
- super ((Writer)null);
- }
-
- public synchronized void startDocument () throws SAXException
- {
- // Connect to remote object and set up to send it XML text
- try {
- if (conn != null)
- throw new IllegalStateException ("call is being made");
-
- conn = target.openConnection ();
- conn.setDoOutput (true);
- conn.setRequestProperty ("Content-Type",
- "application/xml;charset=UTF-8");
-
- setWriter (new OutputStreamWriter (
- conn.getOutputStream (),
- "UTF8"), "UTF-8");
-
- } catch (IOException e) {
- fatal ("can't write (POST) to URI: " + target, e);
- }
-
- // NOW base class can safely write that text!
- super.startDocument ();
- }
-
- public void endDocument () throws SAXException
- {
- //
- // Finish writing the request (for HTTP, a POST);
- // this closes the output stream.
- //
- super.endDocument ();
-
- //
- // Receive the response.
- // Produce events for the next stage.
- //
- InputSource source;
- XMLReader producer;
- String encoding;
-
- try {
-
- source = new InputSource (conn.getInputStream ());
-
-// FIXME if status is anything but success, report it!! It'd be good to
-// save the request data just in case we need to deal with a forward.
-
- encoding = Resolver.getEncoding (conn.getContentType ());
- if (encoding != null)
- source.setEncoding (encoding);
-
- producer = XMLReaderFactory.createXMLReader ();
- producer.setErrorHandler (getErrorHandler ());
- EventFilter.bind (producer, next);
- producer.parse (source);
- conn = null;
-
- } catch (IOException e) {
- fatal ("I/O Exception reading response, " + e.getMessage (), e);
- }
- }
- }
-}
diff --git a/libjava/gnu/xml/pipeline/DomConsumer.java b/libjava/gnu/xml/pipeline/DomConsumer.java
deleted file mode 100644
index 389e02bb387..00000000000
--- a/libjava/gnu/xml/pipeline/DomConsumer.java
+++ /dev/null
@@ -1,982 +0,0 @@
-/* DomConsumer.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.pipeline;
-
-import gnu.xml.aelfred2.ContentHandler2;
-import gnu.xml.util.DomParser;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.DTDHandler;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXNotRecognizedException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.ext.DeclHandler;
-import org.xml.sax.ext.LexicalHandler;
-import org.xml.sax.helpers.AttributesImpl;
-import org.w3c.dom.Attr;
-import org.w3c.dom.CDATASection;
-import org.w3c.dom.CharacterData;
-import org.w3c.dom.Document;
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.Element;
-import org.w3c.dom.EntityReference;
-import org.w3c.dom.Node;
-import org.w3c.dom.ProcessingInstruction;
-import org.w3c.dom.Text;
-
-/**
- * This consumer builds a DOM Document from its input, acting either as a
- * pipeline terminus or as an intermediate buffer. When a document's worth
- * of events has been delivered to this consumer, that document is read with
- * a {@link DomParser} and sent to the next consumer. It is also available
- * as a read-once property.
- *
- * <p>The DOM tree is constructed as faithfully as possible. There are some
- * complications since a DOM should expose behaviors that can't be implemented
- * without API backdoors into that DOM, and because some SAX parsers don't
- * report all the information that DOM permits to be exposed. The general
- * problem areas involve information from the Document Type Declaration (DTD).
- * DOM only represents a limited subset, but has some behaviors that depend
- * on much deeper knowledge of a document's DTD. You shouldn't have much to
- * worry about unless you change handling of "noise" nodes from its default
- * setting (which ignores them all); note if you use JAXP to populate your
- * DOM trees, it wants to save "noise" nodes by default. (Such nodes include
- * ignorable whitespace, comments, entity references and CDATA boundaries.)
- * Otherwise, your
- * main worry will be if you use a SAX parser that doesn't flag ignorable
- * whitespace unless it's validating (few don't).
- *
- * <p> The SAX2 events used as input must contain XML Names for elements
- * and attributes, with original prefixes. In SAX2,
- * this is optional unless the "namespace-prefixes" parser feature is set.
- * Moreover, many application components won't provide completely correct
- * structures anyway. <em>Before you convert a DOM to an output document,
- * you should plan to postprocess it to create or repair such namespace
- * information.</em> The {@link NSFilter} pipeline stage does such work.
- *
- * <p> <em>Note: changes late in DOM L2 process made it impractical to
- * attempt to create the DocumentType node in any implementation-neutral way,
- * much less to populate it (L1 didn't support even creating such nodes).
- * To create and populate such a node, subclass the inner
- * {@link DomConsumer.Handler} class and teach it about the backdoors into
- * whatever DOM implementation you want. It's possible that some revised
- * DOM API (L3?) will make this problem solvable again. </em>
- *
- * @see DomParser
- *
- * @author David Brownell
- */
-public class DomConsumer implements EventConsumer
-{
- private Class domImpl;
-
- private boolean hidingCDATA = true;
- private boolean hidingComments = true;
- private boolean hidingWhitespace = true;
- private boolean hidingReferences = true;
-
- private Handler handler;
- private ErrorHandler errHandler;
-
- private EventConsumer next;
-
- // FIXME: this can't be a generic pipeline stage just now,
- // since its input became a Class not a String (to be turned
- // into a class, using the right class loader)
-
-
- /**
- * Configures this pipeline terminus to use the specified implementation
- * of DOM when constructing its result value.
- *
- * @param impl class implementing {@link org.w3c.dom.Document Document}
- * which publicly exposes a default constructor
- *
- * @exception SAXException when there is a problem creating an
- * empty DOM document using the specified implementation
- */
- public DomConsumer (Class impl)
- throws SAXException
- {
- domImpl = impl;
- handler = new Handler (this);
- }
-
- /**
- * This is the hook through which a subclass provides a handler
- * which knows how to access DOM extensions, specific to some
- * implementation, to record additional data in a DOM.
- * Treat this as part of construction; don't call it except
- * before (or between) parses.
- */
- protected void setHandler (Handler h)
- {
- handler = h;
- }
-
-
- private Document emptyDocument ()
- throws SAXException
- {
- try {
- return (Document) domImpl.newInstance ();
- } catch (IllegalAccessException e) {
- throw new SAXException ("can't access constructor: "
- + e.getMessage ());
- } catch (InstantiationException e) {
- throw new SAXException ("can't instantiate Document: "
- + e.getMessage ());
- }
- }
-
-
- /**
- * Configures this consumer as a buffer/filter, using the specified
- * DOM implementation when constructing its result value.
- *
- * <p> This event consumer acts as a buffer and filter, in that it
- * builds a DOM tree and then writes it out when <em>endDocument</em>
- * is invoked. Because of the limitations of DOM, much information
- * will as a rule not be seen in that replay. To get a full fidelity
- * copy of the input event stream, use a {@link TeeConsumer}.
- *
- * @param impl class implementing {@link org.w3c.dom.Document Document}
- * which publicly exposes a default constructor
- * @param next receives a "replayed" sequence of parse events when
- * the <em>endDocument</em> method is invoked.
- *
- * @exception SAXException when there is a problem creating an
- * empty DOM document using the specified DOM implementation
- */
- public DomConsumer (Class impl, EventConsumer n)
- throws SAXException
- {
- this (impl);
- next = n;
- }
-
-
- /**
- * Returns the document constructed from the preceding
- * sequence of events. This method should not be
- * used again until another sequence of events has been
- * given to this EventConsumer.
- */
- final public Document getDocument ()
- {
- return handler.clearDocument ();
- }
-
- public void setErrorHandler (ErrorHandler handler)
- {
- errHandler = handler;
- }
-
-
- /**
- * Returns true if the consumer is hiding entity references nodes
- * (the default), and false if EntityReference nodes should
- * instead be created. Such EntityReference nodes will normally be
- * empty, unless an implementation arranges to populate them and then
- * turn them back into readonly objects.
- *
- * @see #setHidingReferences
- */
- final public boolean isHidingReferences ()
- { return hidingReferences; }
-
- /**
- * Controls whether the consumer will hide entity expansions,
- * or will instead mark them with entity reference nodes.
- *
- * @see #isHidingReferences
- * @param flag False if entity reference nodes will appear
- */
- final public void setHidingReferences (boolean flag)
- { hidingReferences = flag; }
-
-
- /**
- * Returns true if the consumer is hiding comments (the default),
- * and false if they should be placed into the output document.
- *
- * @see #setHidingComments
- */
- public final boolean isHidingComments ()
- { return hidingComments; }
-
- /**
- * Controls whether the consumer is hiding comments.
- *
- * @see #isHidingComments
- */
- public final void setHidingComments (boolean flag)
- { hidingComments = flag; }
-
-
- /**
- * Returns true if the consumer is hiding ignorable whitespace
- * (the default), and false if such whitespace should be placed
- * into the output document as children of element nodes.
- *
- * @see #setHidingWhitespace
- */
- public final boolean isHidingWhitespace ()
- { return hidingWhitespace; }
-
- /**
- * Controls whether the consumer hides ignorable whitespace
- *
- * @see #isHidingComments
- */
- public final void setHidingWhitespace (boolean flag)
- { hidingWhitespace = flag; }
-
-
- /**
- * Returns true if the consumer is saving CDATA boundaries, or
- * false (the default) otherwise.
- *
- * @see #setHidingCDATA
- */
- final public boolean isHidingCDATA ()
- { return hidingCDATA; }
-
- /**
- * Controls whether the consumer will save CDATA boundaries.
- *
- * @see #isHidingCDATA
- * @param flag True to treat CDATA text differently from other
- * text nodes
- */
- final public void setHidingCDATA (boolean flag)
- { hidingCDATA = flag; }
-
-
-
- /** Returns the document handler being used. */
- final public ContentHandler getContentHandler ()
- { return handler; }
-
- /** Returns the DTD handler being used. */
- final public DTDHandler getDTDHandler ()
- { return handler; }
-
- /**
- * Returns the lexical handler being used.
- * (DOM construction can't really use declaration handlers.)
- */
- final public Object getProperty (String id)
- throws SAXNotRecognizedException
- {
- if ("http://xml.org/sax/properties/lexical-handler".equals (id))
- return handler;
- if ("http://xml.org/sax/properties/declaration-handler".equals (id))
- return handler;
- throw new SAXNotRecognizedException (id);
- }
-
- EventConsumer getNext () { return next; }
-
- ErrorHandler getErrorHandler () { return errHandler; }
-
- /**
- * Class used to intercept various parsing events and use them to
- * populate a DOM document. Subclasses would typically know and use
- * backdoors into specific DOM implementations, used to implement
- * DTD-related functionality.
- *
- * <p> Note that if this ever throws a DOMException (runtime exception)
- * that will indicate a bug in the DOM (e.g. doesn't support something
- * per specification) or the parser (e.g. emitted an illegal name, or
- * accepted illegal input data). </p>
- */
- public static class Handler
- implements ContentHandler2, LexicalHandler,
- DTDHandler, DeclHandler
- {
- protected DomConsumer consumer;
-
- private DOMImplementation impl;
- private Document document;
- private boolean isL2;
-
- private Locator locator;
- private Node top;
- private boolean inCDATA;
- private boolean mergeCDATA;
- private boolean inDTD;
- private String currentEntity;
-
- private boolean recreatedAttrs;
- private AttributesImpl attributes = new AttributesImpl ();
-
- /**
- * Subclasses may use SAX2 events to provide additional
- * behaviors in the resulting DOM.
- */
- protected Handler (DomConsumer consumer)
- throws SAXException
- {
- this.consumer = consumer;
- document = consumer.emptyDocument ();
- impl = document.getImplementation ();
- isL2 = impl.hasFeature ("XML", "2.0");
- }
-
- private void fatal (String message, Exception x)
- throws SAXException
- {
- SAXParseException e;
- ErrorHandler errHandler = consumer.getErrorHandler ();;
-
- if (locator == null)
- e = new SAXParseException (message, null, null, -1, -1, x);
- else
- e = new SAXParseException (message, locator, x);
- if (errHandler != null)
- errHandler.fatalError (e);
- throw e;
- }
-
- /**
- * Returns and forgets the document produced. If the handler is
- * reused, a new document may be created.
- */
- Document clearDocument ()
- {
- Document retval = document;
- document = null;
- locator = null;
- return retval;
- }
-
- /**
- * Returns the document under construction.
- */
- protected Document getDocument ()
- { return document; }
-
- /**
- * Returns the current node being populated. This is usually
- * an Element or Document, but it might be an EntityReference
- * node if some implementation-specific code knows how to put
- * those into the result tree and later mark them as readonly.
- */
- protected Node getTop ()
- { return top; }
-
-
- // SAX1
- public void setDocumentLocator (Locator locator)
- {
- this.locator = locator;
- }
-
- // SAX1
- public void startDocument ()
- throws SAXException
- {
- if (document == null)
- try {
- if (isL2) {
- // couple to original implementation
- document = impl.createDocument (null, "foo", null);
- document.removeChild (document.getFirstChild ());
- } else {
- document = consumer.emptyDocument ();
- }
- } catch (Exception e) {
- fatal ("DOM create document", e);
- }
- top = document;
- }
-
- // ContentHandler2
- public void xmlDecl(String version,
- String encoding,
- boolean standalone,
- String inputEncoding)
- throws SAXException
- {
- if (document != null)
- {
- document.setXmlVersion(version);
- document.setXmlStandalone(standalone);
- }
- }
-
- // SAX1
- public void endDocument ()
- throws SAXException
- {
- try {
- if (consumer.getNext () != null && document != null) {
- DomParser parser = new DomParser (document);
-
- EventFilter.bind (parser, consumer.getNext ());
- parser.parse ("ignored");
- }
- } finally {
- top = null;
- }
- }
-
- // SAX1
- public void processingInstruction (String target, String data)
- throws SAXException
- {
- // we can't create populated entity ref nodes using
- // only public DOM APIs (they've got to be readonly)
- if (currentEntity != null)
- return;
-
- ProcessingInstruction pi;
-
- if (isL2
- // && consumer.isUsingNamespaces ()
- && target.indexOf (':') != -1)
- namespaceError (
- "PI target name is namespace nonconformant: "
- + target);
- if (inDTD)
- return;
- pi = document.createProcessingInstruction (target, data);
- top.appendChild (pi);
- }
-
- /**
- * Subclasses may overrride this method to provide a more efficient
- * way to construct text nodes.
- * Typically, copying the text into a single character array will
- * be more efficient than doing that as well as allocating other
- * needed for a String, including an internal StringBuffer.
- * Those additional memory and CPU costs can be incurred later,
- * if ever needed.
- * Unfortunately the standard DOM factory APIs encourage those costs
- * to be incurred early.
- */
- protected Text createText (
- boolean isCDATA,
- char ch [],
- int start,
- int length
- ) {
- String value = new String (ch, start, length);
-
- if (isCDATA)
- return document.createCDATASection (value);
- else
- return document.createTextNode (value);
- }
-
- // SAX1
- public void characters (char ch [], int start, int length)
- throws SAXException
- {
- // we can't create populated entity ref nodes using
- // only public DOM APIs (they've got to be readonly
- // at creation time)
- if (currentEntity != null)
- return;
-
- Node lastChild = top.getLastChild ();
-
- // merge consecutive text or CDATA nodes if appropriate.
- if (lastChild instanceof Text) {
- if (consumer.isHidingCDATA ()
- // consecutive Text content ... always merge
- || (!inCDATA
- && !(lastChild instanceof CDATASection))
- // consecutive CDATASection content ... don't
- // merge between sections, only within them
- || (inCDATA && mergeCDATA
- && lastChild instanceof CDATASection)
- ) {
- CharacterData last = (CharacterData) lastChild;
- String value = new String (ch, start, length);
-
- last.appendData (value);
- return;
- }
- }
- if (inCDATA && !consumer.isHidingCDATA ()) {
- top.appendChild (createText (true, ch, start, length));
- mergeCDATA = true;
- } else
- top.appendChild (createText (false, ch, start, length));
- }
-
- // SAX2
- public void skippedEntity (String name)
- throws SAXException
- {
- // this callback is useless except to report errors, since
- // we can't know if the ref was in content, within an
- // attribute, within a declaration ... only one of those
- // cases supports more intelligent action than a panic.
- fatal ("skipped entity: " + name, null);
- }
-
- // SAX2
- public void startPrefixMapping (String prefix, String uri)
- throws SAXException
- {
- // reconstruct "xmlns" attributes deleted by all
- // SAX2 parsers without "namespace-prefixes" = true
- if ("".equals (prefix))
- attributes.addAttribute ("", "", "xmlns",
- "CDATA", uri);
- else
- attributes.addAttribute ("", "", "xmlns:" + prefix,
- "CDATA", uri);
- recreatedAttrs = true;
- }
-
- // SAX2
- public void endPrefixMapping (String prefix)
- throws SAXException
- { }
-
- // SAX2
- public void startElement (
- String uri,
- String localName,
- String qName,
- Attributes atts
- ) throws SAXException
- {
- // we can't create populated entity ref nodes using
- // only public DOM APIs (they've got to be readonly)
- if (currentEntity != null)
- return;
-
- // parser discarded basic information; DOM tree isn't writable
- // without massaging to assign prefixes to all nodes.
- // the "NSFilter" class does that massaging.
- if (qName.length () == 0)
- qName = localName;
-
-
- Element element;
- int length = atts.getLength ();
-
- if (!isL2) {
- element = document.createElement (qName);
-
- // first the explicit attributes ...
- length = atts.getLength ();
- for (int i = 0; i < length; i++)
- element.setAttribute (atts.getQName (i),
- atts.getValue (i));
- // ... then any recreated ones (DOM deletes duplicates)
- if (recreatedAttrs) {
- recreatedAttrs = false;
- length = attributes.getLength ();
- for (int i = 0; i < length; i++)
- element.setAttribute (attributes.getQName (i),
- attributes.getValue (i));
- attributes.clear ();
- }
-
- top.appendChild (element);
- top = element;
- return;
- }
-
- // For an L2 DOM when namespace use is enabled, use
- // createElementNS/createAttributeNS except when
- // (a) it's an element in the default namespace, or
- // (b) it's an attribute with no prefix
- String namespace;
-
- if (localName.length () != 0)
- namespace = (uri.length () == 0) ? null : uri;
- else
- namespace = getNamespace (getPrefix (qName), atts);
-
- if (namespace == null)
- element = document.createElement (qName);
- else
- element = document.createElementNS (namespace, qName);
-
- populateAttributes (element, atts);
- if (recreatedAttrs) {
- recreatedAttrs = false;
- // ... DOM deletes any duplicates
- populateAttributes (element, attributes);
- attributes.clear ();
- }
-
- top.appendChild (element);
- top = element;
- }
-
- final static String xmlnsURI = "http://www.w3.org/2000/xmlns/";
-
- private void populateAttributes (Element element, Attributes attrs)
- throws SAXParseException
- {
- int length = attrs.getLength ();
-
- for (int i = 0; i < length; i++) {
- String type = attrs.getType (i);
- String value = attrs.getValue (i);
- String name = attrs.getQName (i);
- String local = attrs.getLocalName (i);
- String uri = attrs.getURI (i);
-
- // parser discarded basic information, DOM tree isn't writable
- if (name.length () == 0)
- name = local;
-
- // all attribute types other than these three may not
- // contain scoped names... enumerated attributes get
- // reported as NMTOKEN, except for NOTATION values
- if (!("CDATA".equals (type)
- || "NMTOKEN".equals (type)
- || "NMTOKENS".equals (type))) {
- if (value.indexOf (':') != -1) {
- namespaceError (
- "namespace nonconformant attribute value: "
- + "<" + element.getNodeName ()
- + " " + name + "='" + value + "' ...>");
- }
- }
-
- // xmlns="" is legal (undoes default NS)
- // xmlns:foo="" is illegal
- String prefix = getPrefix (name);
- String namespace;
-
- if ("xmlns".equals (prefix)) {
- if ("".equals (value))
- namespaceError ("illegal null namespace decl, " + name);
- namespace = xmlnsURI;
- } else if ("xmlns".equals (name))
- namespace = xmlnsURI;
-
- else if (prefix == null)
- namespace = null;
- else if (!"".equals(uri) && uri.length () != 0)
- namespace = uri;
- else
- namespace = getNamespace (prefix, attrs);
-
- if (namespace == null)
- element.setAttribute (name, value);
- else
- element.setAttributeNS (namespace, name, value);
- }
- }
-
- private String getPrefix (String name)
- {
- int temp;
-
- if ((temp = name.indexOf (':')) > 0)
- return name.substring (0, temp);
- return null;
- }
-
- // used with SAX1-level parser output
- private String getNamespace (String prefix, Attributes attrs)
- throws SAXParseException
- {
- String namespace;
- String decl;
-
- // defaulting
- if (prefix == null) {
- decl = "xmlns";
- namespace = attrs.getValue (decl);
- if ("".equals (namespace))
- return null;
- else if (namespace != null)
- return namespace;
-
- // "xmlns" is like a keyword
- // ... according to the Namespace REC, but DOM L2 CR2+
- // and Infoset violate that by assigning a namespace.
- // that conflict is resolved elsewhere.
- } else if ("xmlns".equals (prefix))
- return null;
-
- // "xml" prefix is fixed
- else if ("xml".equals (prefix))
- return "http://www.w3.org/XML/1998/namespace";
-
- // otherwise, expect a declaration
- else {
- decl = "xmlns:" + prefix;
- namespace = attrs.getValue (decl);
- }
-
- // if we found a local declaration, great
- if (namespace != null)
- return namespace;
-
-
- // ELSE ... search up the tree we've been building
- for (Node n = top;
- n != null && n.getNodeType () != Node.DOCUMENT_NODE;
- n = (Node) n.getParentNode ()) {
- if (n.getNodeType () == Node.ENTITY_REFERENCE_NODE)
- continue;
- Element e = (Element) n;
- Attr attr = e.getAttributeNode (decl);
- if (attr != null)
- return attr.getNodeValue ();
- }
- // see above re "xmlns" as keyword
- if ("xmlns".equals (decl))
- return null;
-
- namespaceError ("Undeclared namespace prefix: " + prefix);
- return null;
- }
-
- // SAX2
- public void endElement (String uri, String localName, String qName)
- throws SAXException
- {
- // we can't create populated entity ref nodes using
- // only public DOM APIs (they've got to be readonly)
- if (currentEntity != null)
- return;
-
- top = top.getParentNode ();
- }
-
- // SAX1 (mandatory reporting if validating)
- public void ignorableWhitespace (char ch [], int start, int length)
- throws SAXException
- {
- if (consumer.isHidingWhitespace ())
- return;
- characters (ch, start, length);
- }
-
- // SAX2 lexical event
- public void startCDATA ()
- throws SAXException
- {
- inCDATA = true;
- // true except for the first fragment of a cdata section
- mergeCDATA = false;
- }
-
- // SAX2 lexical event
- public void endCDATA ()
- throws SAXException
- {
- inCDATA = false;
- }
-
- // SAX2 lexical event
- //
- // this SAX2 callback merges two unrelated things:
- // - Declaration of the root element type ... belongs with
- // the other DTD declaration methods, NOT HERE.
- // - IDs for the optional external subset ... belongs here
- // with other lexical information.
- //
- // ...and it doesn't include the internal DTD subset, desired
- // both to support DOM L2 and to enable "pass through" processing
- //
- public void startDTD (String name, String publicId, String SystemId)
- throws SAXException
- {
- // need to filter out comments and PIs within the DTD
- inDTD = true;
- }
-
- // SAX2 lexical event
- public void endDTD ()
- throws SAXException
- {
- inDTD = false;
- }
-
- // SAX2 lexical event
- public void comment (char ch [], int start, int length)
- throws SAXException
- {
- Node comment;
-
- // we can't create populated entity ref nodes using
- // only public DOM APIs (they've got to be readonly)
- if (consumer.isHidingComments ()
- || inDTD
- || currentEntity != null)
- return;
- comment = document.createComment (new String (ch, start, length));
- top.appendChild (comment);
- }
-
- /**
- * May be overridden by subclasses to return true, indicating
- * that entity reference nodes can be populated and then made
- * read-only.
- */
- public boolean canPopulateEntityRefs ()
- { return false; }
-
- // SAX2 lexical event
- public void startEntity (String name)
- throws SAXException
- {
- // are we ignoring what would be contents of an
- // entity ref, since we can't populate it?
- if (currentEntity != null)
- return;
-
- // Are we hiding all entity boundaries?
- if (consumer.isHidingReferences ())
- return;
-
- // SAX2 shows parameter entities; DOM hides them
- if (name.charAt (0) == '%' || "[dtd]".equals (name))
- return;
-
- // Since we can't create a populated entity ref node in any
- // standard way, we create an unpopulated one.
- EntityReference ref = document.createEntityReference (name);
- top.appendChild (ref);
- top = ref;
-
- // ... allowing subclasses to populate them
- if (!canPopulateEntityRefs ())
- currentEntity = name;
- }
-
- // SAX2 lexical event
- public void endEntity (String name)
- throws SAXException
- {
- if (name.charAt (0) == '%' || "[dtd]".equals (name))
- return;
- if (name.equals (currentEntity))
- currentEntity = null;
- if (!consumer.isHidingReferences ())
- top = top.getParentNode ();
- }
-
-
- // SAX1 DTD event
- public void notationDecl (
- String name,
- String publicId, String SystemId
- ) throws SAXException
- {
- /* IGNORE -- no public DOM API lets us store these
- * into the doctype node
- */
- }
-
- // SAX1 DTD event
- public void unparsedEntityDecl (
- String name,
- String publicId, String SystemId,
- String notationName
- ) throws SAXException
- {
- /* IGNORE -- no public DOM API lets us store these
- * into the doctype node
- */
- }
-
- // SAX2 declaration event
- public void elementDecl (String name, String model)
- throws SAXException
- {
- /* IGNORE -- no content model support in DOM L2 */
- }
-
- // SAX2 declaration event
- public void attributeDecl (
- String eName,
- String aName,
- String type,
- String mode,
- String value
- ) throws SAXException
- {
- /* IGNORE -- no attribute model support in DOM L2 */
- }
-
- // SAX2 declaration event
- public void internalEntityDecl (String name, String value)
- throws SAXException
- {
- /* IGNORE -- no public DOM API lets us store these
- * into the doctype node
- */
- }
-
- // SAX2 declaration event
- public void externalEntityDecl (
- String name,
- String publicId,
- String SystemId
- ) throws SAXException
- {
- /* IGNORE -- no public DOM API lets us store these
- * into the doctype node
- */
- }
-
- //
- // These really should offer the option of nonfatal handling,
- // like other validity errors, though that would cause major
- // chaos in the DOM data structures. DOM is already spec'd
- // to treat many of these as fatal, so this is consistent.
- //
- private void namespaceError (String description)
- throws SAXParseException
- {
- SAXParseException err;
-
- err = new SAXParseException (description, locator);
- throw err;
- }
- }
-}
diff --git a/libjava/gnu/xml/pipeline/EventConsumer.java b/libjava/gnu/xml/pipeline/EventConsumer.java
deleted file mode 100644
index 017bc7f74f1..00000000000
--- a/libjava/gnu/xml/pipeline/EventConsumer.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/* EventConsumer.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.pipeline;
-
-import org.xml.sax.*;
-
-
-/**
- * Collects the event consumption apparatus of a SAX pipeline stage.
- * Consumers which permit some handlers or other characteristics to be
- * configured will provide methods to support that configuration.
- *
- * <p> Two important categories of consumers include <em>filters</em>, which
- * process events and pass them on to other consumers, and <em>terminus</em>
- * (or <em>terminal</em>) stages, which don't pass events on. Filters are not
- * necessarily derived from the {@link EventFilter} class, although that
- * class can substantially simplify their construction by automating the
- * most common activities.
- *
- * <p> Event consumers which follow certain conventions for the signatures
- * of their constructors can be automatically assembled into pipelines
- * by the {@link PipelineFactory} class.
- *
- * @author David Brownell
- */
-public interface EventConsumer
-{
- /** Most stages process these core SAX callbacks. */
- public ContentHandler getContentHandler ();
-
- /** Few stages will use unparsed entities. */
- public DTDHandler getDTDHandler ();
-
- /**
- * This method works like the SAX2 XMLReader method of the same name,
- * and is used to retrieve the optional lexical and declaration handlers
- * in a pipeline.
- *
- * @param id This is a URI identifying the type of property desired.
- * @return The value of that property, if it is defined.
- *
- * @exception SAXNotRecognizedException Thrown if the particular
- * pipeline stage does not understand the specified identifier.
- */
- public Object getProperty (String id)
- throws SAXNotRecognizedException;
-
- /**
- * This method provides a filter stage with a handler that abstracts
- * presentation of warnings and both recoverable and fatal errors.
- * Most pipeline stages should share a single policy and mechanism
- * for such reports, since application components require consistency
- * in such activities. Accordingly, typical responses to this method
- * invocation involve saving the handler for use; filters will pass
- * it on to any other consumers they use.
- *
- * @param handler encapsulates error handling policy for this stage
- */
- public void setErrorHandler (ErrorHandler handler);
-}
diff --git a/libjava/gnu/xml/pipeline/EventFilter.java b/libjava/gnu/xml/pipeline/EventFilter.java
deleted file mode 100644
index 6600271718a..00000000000
--- a/libjava/gnu/xml/pipeline/EventFilter.java
+++ /dev/null
@@ -1,809 +0,0 @@
-/* EventFilter.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.pipeline;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import org.xml.sax.*;
-import org.xml.sax.ext.*;
-import org.xml.sax.helpers.XMLFilterImpl;
-
-import gnu.xml.aelfred2.ContentHandler2;
-
-/**
- * A customizable event consumer, used to assemble various kinds of filters
- * using SAX handlers and an optional second consumer. It can be constructed
- * in two ways: <ul>
- *
- * <li> To serve as a passthrough, sending all events to a second consumer.
- * The second consumer may be identified through {@link #getNext}.
- *
- * <li> To serve as a dead end, with all handlers null;
- * {@link #getNext} returns null.
- *
- * </ul>
- *
- * <p> Additionally, SAX handlers may be assigned, which completely replace
- * the "upstream" view (through {@link EventConsumer}) of handlers, initially
- * null or the "next" consumer provided to the constructor. To make
- * it easier to build specialized filter classes, this class implements
- * all the standard SAX consumer handlers, and those implementations
- * delegate "downstream" to the consumer accessed by {@link #getNext}.
- *
- * <p> The simplest way to create a custom a filter class is to create a
- * subclass which overrides one or more handler interface methods. The
- * constructor for that subclass then registers itself as a handler for
- * those interfaces using a call such as <em>setContentHandler(this)</em>,
- * so the "upstream" view of event delivery is modified from the state
- * established in the base class constructor. That way,
- * the overridden methods intercept those event callbacks
- * as they go "downstream", and
- * all other event callbacks will pass events to any next consumer.
- * Overridden methods may invoke superclass methods (perhaps after modifying
- * parameters) if they wish to delegate such calls. Such subclasses
- * should use {@link #getErrorHandler} to report errors using the
- * common error reporting mechanism.
- *
- * <p> Another important technique is to construct a filter consisting
- * of only a few specific types of handler. For example, one could easily
- * prune out lexical events or various declarations by providing handlers
- * which don't pass those events downstream, or by providing null handlers.
- *
- * <hr />
- *
- * <p> This may be viewed as the consumer oriented analogue of the SAX2
- * {@link org.xml.sax.helpers.XMLFilterImpl XMLFilterImpl} class.
- * Key differences include: <ul>
- *
- * <li> This fully separates consumer and producer roles: it
- * does not implement the producer side <em>XMLReader</em> or
- * <em>EntityResolver</em> interfaces, so it can only be used
- * in "push" mode (it has no <em>parse()</em> methods).
- *
- * <li> "Extension" handlers are fully supported, enabling a
- * richer set of application requirements.
- * And it implements {@link EventConsumer}, which groups related
- * consumer methods together, rather than leaving them separated.
- *
- * <li> The chaining which is visible is "downstream" to the next
- * consumer, not "upstream" to the preceding producer.
- * It supports "fan-in", where
- * a consumer can be fed by several producers. (For "fan-out",
- * see the {@link TeeConsumer} class.)
- *
- * <li> Event chaining is set up differently. It is intended to
- * work "upstream" from terminus towards producer, during filter
- * construction, as described above.
- * This is part of an early binding model:
- * events don't need to pass through stages which ignore them.
- *
- * <li> ErrorHandler support is separated, on the grounds that
- * pipeline stages need to share the same error handling policy.
- * For the same reason, error handler setup goes "downstream":
- * when error handlers get set, they are passed to subsequent
- * consumers.
- *
- * </ul>
- *
- * <p> The {@link #chainTo chainTo()} convenience routine supports chaining to
- * an XMLFilterImpl, in its role as a limited functionality event
- * consumer. Its event producer role ({@link XMLFilter}) is ignored.
- *
- * <hr />
- *
- * <p> The {@link #bind bind()} routine may be used associate event pipelines
- * with any kind of {@link XMLReader} that will produce the events.
- * Such pipelines don't necessarily need to have any members which are
- * implemented using this class. That routine has some intelligence
- * which supports automatic changes to parser feature flags, letting
- * event piplines become largely independent of the particular feature
- * sets of parsers.
- *
- * @author David Brownell
- */
-public class EventFilter
- implements EventConsumer, ContentHandler2, DTDHandler,
- LexicalHandler, DeclHandler
-{
- // SAX handlers
- private ContentHandler docHandler, docNext;
- private DTDHandler dtdHandler, dtdNext;
- private LexicalHandler lexHandler, lexNext;
- private DeclHandler declHandler, declNext;
- // and ideally, one more for the stuff SAX2 doesn't show
-
- private Locator locator;
- private EventConsumer next;
- private ErrorHandler errHandler;
-
-
- /** SAX2 URI prefix for standard feature flags. */
- public static final String FEATURE_URI
- = "http://xml.org/sax/features/";
- /** SAX2 URI prefix for standard properties (mostly for handlers). */
- public static final String PROPERTY_URI
- = "http://xml.org/sax/properties/";
-
- /** SAX2 property identifier for {@link DeclHandler} events */
- public static final String DECL_HANDLER
- = PROPERTY_URI + "declaration-handler";
- /** SAX2 property identifier for {@link LexicalHandler} events */
- public static final String LEXICAL_HANDLER
- = PROPERTY_URI + "lexical-handler";
-
- //
- // These class objects will be null if the relevant class isn't linked.
- // Small configurations (pJava and some kinds of embedded systems) need
- // to facilitate smaller executables. So "instanceof" is undesirable
- // when bind() sees if it can remove some stages.
- //
- // SECURITY NOTE: assuming all these classes are part of the same sealed
- // package, there's no problem saving these in the instance of this class
- // that's associated with "this" class loader. But that wouldn't be true
- // for classes in another package.
- //
- private static boolean loaded;
- private static Class nsClass;
- private static Class validClass;
- private static Class wfClass;
- private static Class xincClass;
-
- static ClassLoader getClassLoader ()
- {
- Method m = null;
-
- try {
- m = Thread.class.getMethod("getContextClassLoader", null);
- } catch (NoSuchMethodException e) {
- // Assume that we are running JDK 1.1, use the current ClassLoader
- return EventFilter.class.getClassLoader();
- }
-
- try {
- return (ClassLoader) m.invoke(Thread.currentThread(), null);
- } catch (IllegalAccessException e) {
- // assert(false)
- throw new UnknownError(e.getMessage());
- } catch (InvocationTargetException e) {
- // assert(e.getTargetException() instanceof SecurityException)
- throw new UnknownError(e.getMessage());
- }
- }
-
- static Class loadClass (ClassLoader classLoader, String className)
- {
- try {
- if (classLoader == null)
- return Class.forName(className);
- else
- return classLoader.loadClass(className);
- } catch (Exception e) {
- return null;
- }
- }
-
- static private void loadClasses ()
- {
- ClassLoader loader = getClassLoader ();
-
- nsClass = loadClass (loader, "gnu.xml.pipeline.NSFilter");
- validClass = loadClass (loader, "gnu.xml.pipeline.ValidationConsumer");
- wfClass = loadClass (loader, "gnu.xml.pipeline.WellFormednessFilter");
- xincClass = loadClass (loader, "gnu.xml.pipeline.XIncludeFilter");
- loaded = true;
- }
-
-
- /**
- * Binds the standard SAX2 handlers from the specified consumer
- * pipeline to the specified producer. These handlers include the core
- * {@link ContentHandler} and {@link DTDHandler}, plus the extension
- * {@link DeclHandler} and {@link LexicalHandler}. Any additional
- * application-specific handlers need to be bound separately.
- * The {@link ErrorHandler} is handled differently: the producer's
- * error handler is passed through to the consumer pipeline.
- * The producer is told to include namespace prefix information if it
- * can, since many pipeline stages need that Infoset information to
- * work well.
- *
- * <p> At the head of the pipeline, certain standard event filters are
- * recognized and handled specially. This facilitates construction
- * of processing pipelines that work regardless of the capabilities
- * of the XMLReader implementation in use; for example, it permits
- * validating output of a {@link gnu.xml.util.DomParser}. <ul>
- *
- * <li> {@link NSFilter} will be removed if the producer can be
- * told not to discard namespace data, using the "namespace-prefixes"
- * feature flag.
- *
- * <li> {@link ValidationConsumer} will be removed if the producer
- * can be told to validate, using the "validation" feature flag.
- *
- * <li> {@link WellFormednessFilter} is always removed, on the
- * grounds that no XMLReader is permitted to producee malformed
- * event streams and this would just be processing overhead.
- *
- * <li> {@link XIncludeFilter} stops the special handling, except
- * that it's told about the "namespace-prefixes" feature of the
- * event producer so that the event stream is internally consistent.
- *
- * <li> The first consumer which is not one of those classes stops
- * such special handling. This means that if you want to force
- * one of those filters to be used, you could just precede it with
- * an instance of {@link EventFilter} configured as a pass-through.
- * You might need to do that if you are using an {@link NSFilter}
- * subclass to fix names found in attributes or character data.
- *
- * </ul>
- *
- * <p> Other than that, this method works with any kind of event consumer,
- * not just event filters. Note that in all cases, the standard handlers
- * are assigned; any previous handler assignments for the handler will
- * be overridden.
- *
- * @param producer will deliver events to the specified consumer
- * @param consumer pipeline supplying event handlers to be associated
- * with the producer (may not be null)
- */
- public static void bind (XMLReader producer, EventConsumer consumer)
- {
- Class klass = null;
- boolean prefixes;
-
- if (!loaded)
- loadClasses ();
-
- // DOM building, printing, layered validation, and other
- // things don't work well when prefix info is discarded.
- // Include it by default, whenever possible.
- try {
- producer.setFeature (FEATURE_URI + "namespace-prefixes",
- true);
- prefixes = true;
- } catch (SAXException e) {
- prefixes = false;
- }
-
- // NOTE: This loop doesn't use "instanceof", since that
- // would prevent compiling/linking without those classes
- // being present.
- while (consumer != null) {
- klass = consumer.getClass ();
-
- // we might have already changed this problematic SAX2 default.
- if (nsClass != null && nsClass.isAssignableFrom (klass)) {
- if (!prefixes)
- break;
- consumer = ((EventFilter)consumer).getNext ();
-
- // the parser _might_ do DTD validation by default ...
- // if not, maybe we can change this setting.
- } else if (validClass != null
- && validClass.isAssignableFrom (klass)) {
- try {
- producer.setFeature (FEATURE_URI + "validation",
- true);
- consumer = ((ValidationConsumer)consumer).getNext ();
- } catch (SAXException e) {
- break;
- }
-
- // parsers are required not to have such bugs
- } else if (wfClass != null && wfClass.isAssignableFrom (klass)) {
- consumer = ((WellFormednessFilter)consumer).getNext ();
-
- // stop on the first pipeline stage we can't remove
- } else
- break;
-
- if (consumer == null)
- klass = null;
- }
-
- // the actual setting here doesn't matter as much
- // as that producer and consumer agree
- if (xincClass != null && klass != null
- && xincClass.isAssignableFrom (klass))
- ((XIncludeFilter)consumer).setSavingPrefixes (prefixes);
-
- // Some SAX parsers can't handle null handlers -- bleech
- DefaultHandler2 h = new DefaultHandler2 ();
-
- if (consumer != null && consumer.getContentHandler () != null)
- producer.setContentHandler (consumer.getContentHandler ());
- else
- producer.setContentHandler (h);
- if (consumer != null && consumer.getDTDHandler () != null)
- producer.setDTDHandler (consumer.getDTDHandler ());
- else
- producer.setDTDHandler (h);
-
- try {
- Object dh;
-
- if (consumer != null)
- dh = consumer.getProperty (DECL_HANDLER);
- else
- dh = null;
- if (dh == null)
- dh = h;
- producer.setProperty (DECL_HANDLER, dh);
- } catch (Exception e) { /* ignore */ }
- try {
- Object lh;
-
- if (consumer != null)
- lh = consumer.getProperty (LEXICAL_HANDLER);
- else
- lh = null;
- if (lh == null)
- lh = h;
- producer.setProperty (LEXICAL_HANDLER, lh);
- } catch (Exception e) { /* ignore */ }
-
- // this binding goes the other way around
- if (producer.getErrorHandler () == null)
- producer.setErrorHandler (h);
- if (consumer != null)
- consumer.setErrorHandler (producer.getErrorHandler ());
- }
-
- /**
- * Initializes all handlers to null.
- */
- // constructor used by PipelineFactory
- public EventFilter () { }
-
-
- /**
- * Handlers that are not otherwise set will default to those from
- * the specified consumer, making it easy to pass events through.
- * If the consumer is null, all handlers are initialzed to null.
- */
- // constructor used by PipelineFactory
- public EventFilter (EventConsumer consumer)
- {
- if (consumer == null)
- return;
-
- next = consumer;
-
- // We delegate through the "xxNext" handlers, and
- // report the "xxHandler" ones on our input side.
-
- // Normally a subclass would both override handler
- // methods and register itself as the "xxHandler".
-
- docHandler = docNext = consumer.getContentHandler ();
- dtdHandler = dtdNext = consumer.getDTDHandler ();
- try {
- declHandler = declNext = (DeclHandler)
- consumer.getProperty (DECL_HANDLER);
- } catch (SAXException e) { /* leave value null */ }
- try {
- lexHandler = lexNext = (LexicalHandler)
- consumer.getProperty (LEXICAL_HANDLER);
- } catch (SAXException e) { /* leave value null */ }
- }
-
- /**
- * Treats the XMLFilterImpl as a limited functionality event consumer,
- * by arranging to deliver events to it; this lets such classes be
- * "wrapped" as pipeline stages.
- *
- * <p> <em>Upstream Event Setup:</em>
- * If no handlers have been assigned to this EventFilter, then the
- * handlers from specified XMLFilterImpl are returned from this
- * {@link EventConsumer}: the XMLFilterImpl is just "wrapped".
- * Otherwise the specified handlers will be returned.
- *
- * <p> <em>Downstream Event Setup:</em>
- * Subclasses may chain event delivery to the specified XMLFilterImpl
- * by invoking the appropiate superclass methods,
- * as if their constructor passed a "next" EventConsumer to the
- * constructor for this class.
- * If this EventFilter has an ErrorHandler, it is assigned as
- * the error handler for the XMLFilterImpl, just as would be
- * done for a next stage implementing {@link EventConsumer}.
- *
- * @param next the next downstream component of the pipeline.
- * @exception IllegalStateException if the "next" consumer has
- * already been set through the constructor.
- */
- public void chainTo (XMLFilterImpl next)
- {
- if (this.next != null)
- throw new IllegalStateException ();
-
- docNext = next.getContentHandler ();
- if (docHandler == null)
- docHandler = docNext;
- dtdNext = next.getDTDHandler ();
- if (dtdHandler == null)
- dtdHandler = dtdNext;
-
- try {
- declNext = (DeclHandler) next.getProperty (DECL_HANDLER);
- if (declHandler == null)
- declHandler = declNext;
- } catch (SAXException e) { /* leave value null */ }
- try {
- lexNext = (LexicalHandler) next.getProperty (LEXICAL_HANDLER);
- if (lexHandler == null)
- lexHandler = lexNext;
- } catch (SAXException e) { /* leave value null */ }
-
- if (errHandler != null)
- next.setErrorHandler (errHandler);
- }
-
- /**
- * Records the error handler that should be used by this stage, and
- * passes it "downstream" to any subsequent stage.
- */
- final public void setErrorHandler (ErrorHandler handler)
- {
- errHandler = handler;
- if (next != null)
- next.setErrorHandler (handler);
- }
-
- /**
- * Returns the error handler assigned this filter stage, or null
- * if no such assigment has been made.
- */
- final public ErrorHandler getErrorHandler ()
- {
- return errHandler;
- }
-
-
- /**
- * Returns the next event consumer in sequence; or null if there
- * is no such handler.
- */
- final public EventConsumer getNext ()
- { return next; }
-
-
- /**
- * Assigns the content handler to use; a null handler indicates
- * that these events will not be forwarded.
- * This overrides the previous settting for this handler, which was
- * probably pointed to the next consumer by the base class constructor.
- */
- final public void setContentHandler (ContentHandler h)
- {
- docHandler = h;
- }
-
- /** Returns the content handler being used. */
- final public ContentHandler getContentHandler ()
- {
- return docHandler;
- }
-
- /**
- * Assigns the DTD handler to use; a null handler indicates
- * that these events will not be forwarded.
- * This overrides the previous settting for this handler, which was
- * probably pointed to the next consumer by the base class constructor.
- */
- final public void setDTDHandler (DTDHandler h)
- { dtdHandler = h; }
-
- /** Returns the dtd handler being used. */
- final public DTDHandler getDTDHandler ()
- {
- return dtdHandler;
- }
-
- /**
- * Stores the property, normally a handler; a null handler indicates
- * that these events will not be forwarded.
- * This overrides the previous handler settting, which was probably
- * pointed to the next consumer by the base class constructor.
- */
- final public void setProperty (String id, Object o)
- throws SAXNotRecognizedException, SAXNotSupportedException
- {
- try {
- Object value = getProperty (id);
-
- if (value == o)
- return;
- if (DECL_HANDLER.equals (id)) {
- declHandler = (DeclHandler) o;
- return;
- }
- if (LEXICAL_HANDLER.equals (id)) {
- lexHandler = (LexicalHandler) o;
- return;
- }
- throw new SAXNotSupportedException (id);
-
- } catch (ClassCastException e) {
- throw new SAXNotSupportedException (id);
- }
- }
-
- /** Retrieves a property of unknown intent (usually a handler) */
- final public Object getProperty (String id)
- throws SAXNotRecognizedException
- {
- if (DECL_HANDLER.equals (id))
- return declHandler;
- if (LEXICAL_HANDLER.equals (id))
- return lexHandler;
-
- throw new SAXNotRecognizedException (id);
- }
-
- /**
- * Returns any locator provided to the next consumer, if this class
- * (or a subclass) is handling {@link ContentHandler } events.
- */
- public Locator getDocumentLocator ()
- { return locator; }
-
-
- // CONTENT HANDLER DELEGATIONS
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void setDocumentLocator (Locator locator)
- {
- this.locator = locator;
- if (docNext != null)
- docNext.setDocumentLocator (locator);
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void startDocument () throws SAXException
- {
- if (docNext != null)
- docNext.startDocument ();
- }
-
- public void xmlDecl(String version, String encoding, boolean standalone,
- String inputEncoding)
- throws SAXException
- {
- if (docNext != null && docNext instanceof ContentHandler2)
- {
- ((ContentHandler2) docNext).xmlDecl(version, encoding, standalone,
- inputEncoding);
- }
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void skippedEntity (String name) throws SAXException
- {
- if (docNext != null)
- docNext.skippedEntity (name);
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void processingInstruction (String target, String data)
- throws SAXException
- {
- if (docNext != null)
- docNext.processingInstruction (target, data);
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void characters (char ch [], int start, int length)
- throws SAXException
- {
- if (docNext != null)
- docNext.characters (ch, start, length);
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void ignorableWhitespace (char ch [], int start, int length)
- throws SAXException
- {
- if (docNext != null)
- docNext.ignorableWhitespace (ch, start, length);
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void startPrefixMapping (String prefix, String uri)
- throws SAXException
- {
- if (docNext != null)
- docNext.startPrefixMapping (prefix, uri);
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void startElement (
- String uri, String localName,
- String qName, Attributes atts
- ) throws SAXException
- {
- if (docNext != null)
- docNext.startElement (uri, localName, qName, atts);
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void endElement (String uri, String localName, String qName)
- throws SAXException
- {
- if (docNext != null)
- docNext.endElement (uri, localName, qName);
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void endPrefixMapping (String prefix) throws SAXException
- {
- if (docNext != null)
- docNext.endPrefixMapping (prefix);
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void endDocument () throws SAXException
- {
- if (docNext != null)
- docNext.endDocument ();
- locator = null;
- }
-
-
- // DTD HANDLER DELEGATIONS
-
- /** <b>SAX1:</b> passes this callback to the next consumer, if any */
- public void unparsedEntityDecl (
- String name,
- String publicId,
- String systemId,
- String notationName
- ) throws SAXException
- {
- if (dtdNext != null)
- dtdNext.unparsedEntityDecl (name, publicId, systemId, notationName);
- }
-
- /** <b>SAX1:</b> passes this callback to the next consumer, if any */
- public void notationDecl (String name, String publicId, String systemId)
- throws SAXException
- {
- if (dtdNext != null)
- dtdNext.notationDecl (name, publicId, systemId);
- }
-
-
- // LEXICAL HANDLER DELEGATIONS
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void startDTD (String name, String publicId, String systemId)
- throws SAXException
- {
- if (lexNext != null)
- lexNext.startDTD (name, publicId, systemId);
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void endDTD ()
- throws SAXException
- {
- if (lexNext != null)
- lexNext.endDTD ();
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void comment (char ch [], int start, int length)
- throws SAXException
- {
- if (lexNext != null)
- lexNext.comment (ch, start, length);
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void startCDATA ()
- throws SAXException
- {
- if (lexNext != null)
- lexNext.startCDATA ();
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void endCDATA ()
- throws SAXException
- {
- if (lexNext != null)
- lexNext.endCDATA ();
- }
-
- /**
- * <b>SAX2:</b> passes this callback to the next consumer, if any.
- */
- public void startEntity (String name)
- throws SAXException
- {
- if (lexNext != null)
- lexNext.startEntity (name);
- }
-
- /**
- * <b>SAX2:</b> passes this callback to the next consumer, if any.
- */
- public void endEntity (String name)
- throws SAXException
- {
- if (lexNext != null)
- lexNext.endEntity (name);
- }
-
-
- // DECLARATION HANDLER DELEGATIONS
-
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void elementDecl (String name, String model)
- throws SAXException
- {
- if (declNext != null)
- declNext.elementDecl (name, model);
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void attributeDecl (String eName, String aName,
- String type, String mode, String value)
- throws SAXException
- {
- if (declNext != null)
- declNext.attributeDecl (eName, aName, type, mode, value);
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void externalEntityDecl (String name,
- String publicId, String systemId)
- throws SAXException
- {
- if (declNext != null)
- declNext.externalEntityDecl (name, publicId, systemId);
- }
-
- /** <b>SAX2:</b> passes this callback to the next consumer, if any */
- public void internalEntityDecl (String name, String value)
- throws SAXException
- {
- if (declNext != null)
- declNext.internalEntityDecl (name, value);
- }
-}
diff --git a/libjava/gnu/xml/pipeline/LinkFilter.java b/libjava/gnu/xml/pipeline/LinkFilter.java
deleted file mode 100644
index ddb9fda2e75..00000000000
--- a/libjava/gnu/xml/pipeline/LinkFilter.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/* LinkFilter.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.pipeline;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.Vector;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-
-/**
- * Pipeline filter to remember XHTML links found in a document,
- * so they can later be crawled. Fragments are not counted, and duplicates
- * are ignored. Callers are responsible for filtering out URLs they aren't
- * interested in. Events are passed through unmodified.
- *
- * <p> Input MUST include a setDocumentLocator() call, as it's used to
- * resolve relative links in the absence of a "base" element. Input MUST
- * also include namespace identifiers, since it is the XHTML namespace
- * identifier which is used to identify the relevant elements.
- *
- * <p><em>FIXME:</em> handle xml:base attribute ... in association with
- * a stack of base URIs. Similarly, recognize/support XLink data.
- *
- * @author David Brownell
- */
-public class LinkFilter extends EventFilter
-{
- // for storing URIs
- private Vector vector = new Vector ();
-
- // struct for "full" link record (tbd)
- // these for troubleshooting original source:
- // original uri
- // uri as resolved (base, relative, etc)
- // URI of originating doc
- // line #
- // original element + attrs (img src, desc, etc)
-
- // XLink model of the link ... for inter-site pairups ?
-
- private String baseURI;
-
- private boolean siteRestricted = false;
-
- //
- // XXX leverage blacklist info (like robots.txt)
- //
- // XXX constructor w/param ... pipeline for sending link data
- // probably XHTML --> XLink, providing info as sketched above
- //
-
-
- /**
- * Constructs a new event filter, which collects links in private data
- * structure for later enumeration.
- */
- // constructor used by PipelineFactory
- public LinkFilter ()
- {
- super.setContentHandler (this);
- }
-
-
- /**
- * Constructs a new event filter, which collects links in private data
- * structure for later enumeration and passes all events, unmodified,
- * to the next consumer.
- */
- // constructor used by PipelineFactory
- public LinkFilter (EventConsumer next)
- {
- super (next);
- super.setContentHandler (this);
- }
-
-
- /**
- * Returns an enumeration of the links found since the filter
- * was constructed, or since removeAllLinks() was called.
- *
- * @return enumeration of strings.
- */
- public Enumeration getLinks ()
- {
- return vector.elements ();
- }
-
- /**
- * Removes records about all links reported to the event
- * stream, as if the filter were newly created.
- */
- public void removeAllLinks ()
- {
- vector = new Vector ();
- }
-
-
- /**
- * Collects URIs for (X)HTML content from elements which hold them.
- */
- public void startElement (
- String uri,
- String localName,
- String qName,
- Attributes atts
- ) throws SAXException
- {
- String link;
-
- // Recognize XHTML links.
- if ("http://www.w3.org/1999/xhtml".equals (uri)) {
-
- if ("a".equals (localName) || "base".equals (localName)
- || "area".equals (localName))
- link = atts.getValue ("href");
- else if ("iframe".equals (localName) || "frame".equals (localName))
- link = atts.getValue ("src");
- else if ("blockquote".equals (localName) || "q".equals (localName)
- || "ins".equals (localName) || "del".equals (localName))
- link = atts.getValue ("cite");
- else
- link = null;
- link = maybeAddLink (link);
-
- // "base" modifies designated baseURI
- if ("base".equals (localName) && link != null)
- baseURI = link;
-
- if ("iframe".equals (localName) || "img".equals (localName))
- maybeAddLink (atts.getValue ("longdesc"));
- }
-
- super.startElement (uri, localName, qName, atts);
- }
-
- private String maybeAddLink (String link)
- {
- int index;
-
- // ignore empty links and fragments inside docs
- if (link == null)
- return null;
- if ((index = link.indexOf ("#")) >= 0)
- link = link.substring (0, index);
- if (link.equals (""))
- return null;
-
- try {
- // get the real URI
- URL base = new URL ((baseURI != null)
- ? baseURI
- : getDocumentLocator ().getSystemId ());
- URL url = new URL (base, link);
-
- link = url.toString ();
-
- // ignore duplicates
- if (vector.contains (link))
- return link;
-
- // other than what "base" does, stick to original site:
- if (siteRestricted) {
- // don't switch protocols
- if (!base.getProtocol ().equals (url.getProtocol ()))
- return link;
- // don't switch servers
- if (base.getHost () != null
- && !base.getHost ().equals (url.getHost ()))
- return link;
- }
-
- vector.addElement (link);
-
- return link;
-
- } catch (IOException e) {
- // bad URLs we don't want
- }
- return null;
- }
-
- /**
- * Reports an error if no Locator has been made available.
- */
- public void startDocument ()
- throws SAXException
- {
- if (getDocumentLocator () == null)
- throw new SAXException ("no Locator!");
- }
-
- /**
- * Forgets about any base URI information that may be recorded.
- * Applications will often want to call removeAllLinks(), likely
- * after examining the links which were reported.
- */
- public void endDocument ()
- throws SAXException
- {
- baseURI = null;
- super.endDocument ();
- }
-}
diff --git a/libjava/gnu/xml/pipeline/NSFilter.java b/libjava/gnu/xml/pipeline/NSFilter.java
deleted file mode 100644
index db875e1debf..00000000000
--- a/libjava/gnu/xml/pipeline/NSFilter.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/* NSFilter.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.pipeline;
-
-import java.util.Enumeration;
-import java.util.Stack;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.helpers.AttributesImpl;
-import org.xml.sax.helpers.NamespaceSupport;
-
-/**
- * This filter ensures that element and attribute names are properly prefixed,
- * and that such prefixes are declared. Such data is critical for operations
- * like writing XML text, and validating against DTDs: names or their prefixes
- * may have been discarded, although they are essential to the exchange of
- * information using XML. There are various common ways that such data
- * gets discarded: <ul>
- *
- * <li> By default, SAX2 parsers must discard the "xmlns*"
- * attributes, and may also choose not to report properly prefixed
- * names for elements or attributes. (Some parsers may support
- * changing the <em>namespace-prefixes</em> value from the default
- * to <em>true</em>, effectively eliminating the need to use this
- * filter on their output.)
- *
- * <li> When event streams are generated from a DOM tree, they may
- * have never have had prefixes or declarations for namespaces; or
- * the existing prefixes or declarations may have been invalidated
- * by structural modifications to that DOM tree.
- *
- * <li> Other software writing SAX event streams won't necessarily
- * be worrying about prefix management, and so they will need to
- * have a transparent solution for managing them.
- *
- * </ul>
- *
- * <p> This filter uses a heuristic to choose the prefix to assign to any
- * particular name which wasn't already corectly prefixed. The associated
- * namespace will be correct, and the prefix will be declared. Original
- * structures facilitating text editing, such as conventions about use of
- * mnemonic prefix names or the scoping of prefixes, can't always be
- * reconstructed after they are discarded, as strongly encouraged by the
- * current SAX2 defaults.
- *
- * <p> Note that this can't possibly know whether values inside attribute
- * value or document content involve prefixed names. If your application
- * requires using prefixed names in such locations you'll need to add some
- * appropriate logic (perhaps adding additional heuristics in a subclass).
- *
- * @author David Brownell
- */
-public class NSFilter extends EventFilter
-{
- private NamespaceSupport nsStack = new NamespaceSupport ();
- private Stack elementStack = new Stack ();
-
- private boolean pushedContext;
- private String nsTemp [] = new String [3];
- private AttributesImpl attributes = new AttributesImpl ();
- private boolean usedDefault;
-
- // gensymmed prefixes use this root name
- private static final String prefixRoot = "prefix-";
-
-
- /**
- * Passes events through to the specified consumer, after first
- * processing them.
- *
- * @param next the next event consumer to receive events.
- */
- // constructor used by PipelineFactory
- public NSFilter (EventConsumer next)
- {
- super (next);
-
- setContentHandler (this);
- }
-
- private void fatalError (String message)
- throws SAXException
- {
- SAXParseException e;
- ErrorHandler handler = getErrorHandler ();
- Locator locator = getDocumentLocator ();
-
- if (locator == null)
- e = new SAXParseException (message, null, null, -1, -1);
- else
- e = new SAXParseException (message, locator);
- if (handler != null)
- handler.fatalError (e);
- throw e;
- }
-
-
- public void startDocument () throws SAXException
- {
- elementStack.removeAllElements ();
- nsStack.reset ();
- pushedContext = false;
- super.startDocument ();
- }
-
- /**
- * This call is not passed to the next consumer in the chain.
- * Prefix declarations and scopes are only exposed in the form
- * of attributes; this callback just records a declaration that
- * will be exposed as an attribute.
- */
- public void startPrefixMapping (String prefix, String uri)
- throws SAXException
- {
- if (pushedContext == false) {
- nsStack.pushContext ();
- pushedContext = true;
- }
-
- // this check is awkward, but the paranoia prevents big trouble
- for (Enumeration e = nsStack.getDeclaredPrefixes ();
- e.hasMoreElements ();
- /* NOP */ ) {
- String declared = (String) e.nextElement ();
-
- if (!declared.equals (prefix))
- continue;
- if (uri.equals (nsStack.getURI (prefix)))
- return;
- fatalError ("inconsistent binding for prefix '" + prefix
- + "' ... " + uri + " (was " + nsStack.getURI (prefix) + ")");
- }
-
- if (!nsStack.declarePrefix (prefix, uri))
- fatalError ("illegal prefix declared: " + prefix);
- }
-
- private String fixName (String ns, String l, String name, boolean isAttr)
- throws SAXException
- {
- if ("".equals (name) || name == null) {
- name = l;
- if ("".equals (name) || name == null)
- fatalError ("empty/null name");
- }
-
- // can we correctly process the name as-is?
- // handles "element scope" attribute names here.
- if (nsStack.processName (name, nsTemp, isAttr) != null
- && nsTemp [0].equals (ns)
- ) {
- return nsTemp [2];
- }
-
- // nope, gotta modify the name or declare a default mapping
- int temp;
-
- // get rid of any current prefix
- if ((temp = name.indexOf (':')) >= 0) {
- name = name.substring (temp + 1);
-
- // ... maybe that's enough (use/prefer default namespace) ...
- if (!isAttr && nsStack.processName (name, nsTemp, false) != null
- && nsTemp [0].equals (ns)
- ) {
- return nsTemp [2];
- }
- }
-
- // must we define and use the default/undefined prefix?
- if ("".equals (ns)) {
- if (isAttr)
- fatalError ("processName bug");
- if (attributes.getIndex ("xmlns") != -1)
- fatalError ("need to undefine default NS, but it's bound: "
- + attributes.getValue ("xmlns"));
-
- nsStack.declarePrefix ("", "");
- attributes.addAttribute ("", "", "xmlns", "CDATA", "");
- return name;
- }
-
- // is there at least one non-null prefix we can use?
- for (Enumeration e = nsStack.getDeclaredPrefixes ();
- e.hasMoreElements ();
- /* NOP */) {
- String prefix = (String) e.nextElement ();
- String uri = nsStack.getURI (prefix);
-
- if (uri == null || !uri.equals (ns))
- continue;
- return prefix + ":" + name;
- }
-
- // no such luck. create a prefix name, declare it, use it.
- for (temp = 0; temp >= 0; temp++) {
- String prefix = prefixRoot + temp;
-
- if (nsStack.getURI (prefix) == null) {
- nsStack.declarePrefix (prefix, ns);
- attributes.addAttribute ("", "", "xmlns:" + prefix,
- "CDATA", ns);
- return prefix + ":" + name;
- }
- }
- fatalError ("too many prefixes genned");
- // NOTREACHED
- return null;
- }
-
- public void startElement (
- String uri, String localName,
- String qName, Attributes atts
- ) throws SAXException
- {
- if (!pushedContext)
- nsStack.pushContext ();
- pushedContext = false;
-
- // make sure we have all NS declarations handy before we start
- int length = atts.getLength ();
-
- for (int i = 0; i < length; i++) {
- String aName = atts.getQName (i);
-
- if (!aName.startsWith ("xmlns"))
- continue;
-
- String prefix;
-
- if ("xmlns".equals (aName))
- prefix = "";
- else if (aName.indexOf (':') == 5)
- prefix = aName.substring (6);
- else // "xmlnsfoo" etc.
- continue;
- startPrefixMapping (prefix, atts.getValue (i));
- }
-
- // put namespace decls at the start of our regenned attlist
- attributes.clear ();
- for (Enumeration e = nsStack.getDeclaredPrefixes ();
- e.hasMoreElements ();
- /* NOP */) {
- String prefix = (String) e.nextElement ();
-
- attributes.addAttribute ("", "",
- ("".equals (prefix)
- ? "xmlns"
- : "xmlns:" + prefix),
- "CDATA",
- nsStack.getURI (prefix));
- }
-
- // name fixups: element, then attributes.
- // fixName may declare a new prefix or, for the element,
- // redeclare the default (if element name needs it).
- qName = fixName (uri, localName, qName, false);
-
- for (int i = 0; i < length; i++) {
- String aName = atts.getQName (i);
- String aNS = atts.getURI (i);
- String aLocal = atts.getLocalName (i);
- String aType = atts.getType (i);
- String aValue = atts.getValue (i);
-
- if (aName.startsWith ("xmlns"))
- continue;
- aName = fixName (aNS, aLocal, aName, true);
- attributes.addAttribute (aNS, aLocal, aName, aType, aValue);
- }
-
- elementStack.push (qName);
-
- // pass event along, with cleaned-up names and decls.
- super.startElement (uri, localName, qName, attributes);
- }
-
- public void endElement (String uri, String localName, String qName)
- throws SAXException
- {
- nsStack.popContext ();
- qName = (String) elementStack.pop ();
- super.endElement (uri, localName, qName);
- }
-
- /**
- * This call is not passed to the next consumer in the chain.
- * Prefix declarations and scopes are only exposed in their
- * attribute form.
- */
- public void endPrefixMapping (String prefix)
- throws SAXException
- { }
-
- public void endDocument () throws SAXException
- {
- elementStack.removeAllElements ();
- nsStack.reset ();
- super.endDocument ();
- }
-}
diff --git a/libjava/gnu/xml/pipeline/PipelineFactory.java b/libjava/gnu/xml/pipeline/PipelineFactory.java
deleted file mode 100644
index f88ab164311..00000000000
--- a/libjava/gnu/xml/pipeline/PipelineFactory.java
+++ /dev/null
@@ -1,723 +0,0 @@
-/* PipelineFactory.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.pipeline;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.lang.reflect.Constructor;
-import java.util.StringTokenizer;
-
-import org.xml.sax.*;
-import org.xml.sax.ext.*;
-
-
-/**
- * This provides static factory methods for creating simple event pipelines.
- * These pipelines are specified by strings, suitable for passing on
- * command lines or embedding in element attributes. For example, one way
- * to write a pipeline that restores namespace syntax, validates (stopping
- * the pipeline on validity errors) and then writes valid data to standard
- * output is this: <pre>
- * nsfix | validate | write ( stdout )</pre>
- *
- * <p> In this syntax, the tokens are always separated by whitespace, and each
- * stage of the pipeline may optionally have a parameter (which can be a
- * pipeline) in parentheses. Interior stages are called filters, and the
- * rightmost end of a pipeline is called a terminus.
- *
- * <p> Stages are usually implemented by a single class, which may not be
- * able to act as both a filter and a terminus; but any terminus can be
- * automatically turned into a filter, through use of a {@link TeeConsumer}.
- * The stage identifiers are either class names, or are one of the following
- * short identifiers built into this class. (Most of these identifiers are
- * no more than aliases for classes.) The built-in identifiers include:</p>
-
- <table border="1" cellpadding="3" cellspacing="0">
- <tr bgcolor="#ccccff" class="TableHeadingColor">
- <th align="center" width="5%">Stage</th>
- <th align="center" width="9%">Parameter</th>
- <th align="center" width="1%">Terminus</th>
- <th align="center">Description</th>
- </tr>
-
- <tr valign="top" align="center">
- <td><a href="../dom/Consumer.html">dom</a></td>
- <td><em>none</em></td>
- <td> yes </td>
- <td align="left"> Applications code can access a DOM Document built
- from the input event stream. When used as a filter, this buffers
- data up to an <em>endDocument</em> call, and then uses a DOM parser
- to report everything that has been recorded (which can easily be
- less than what was reported to it). </td>
- </tr>
- <tr valign="top" align="center">
- <td><a href="NSFilter.html">nsfix</a></td>
- <td><em>none</em></td>
- <td>no</td>
- <td align="left">This stage ensures that the XML element and attribute
- names in its output use namespace prefixes and declarations correctly.
- That is, so that they match the "Namespace plus LocalName" naming data
- with which each XML element and attribute is already associated. </td>
- </tr>
- <tr valign="top" align="center">
- <td><a href="EventFilter.html">null</a></td>
- <td><em>none</em></td>
- <td>yes</td>
- <td align="left">This stage ignores all input event data.</td>
- </tr>
- <tr valign="top" align="center">
- <td><a href="CallFilter.html">server</a></td>
- <td><em>required</em><br> server URL </td>
- <td>no</td>
- <td align="left">Sends its input as XML request to a remote server,
- normally a web application server using the HTTP or HTTPS protocols.
- The output of this stage is the parsed response from that server.</td>
- </tr>
- <tr valign="top" align="center">
- <td><a href="TeeConsumer.html">tee</a></td>
- <td><em>required</em><br> first pipeline</td>
- <td>no</td>
- <td align="left">This sends its events down two paths; its parameter
- is a pipeline descriptor for the first path, and the second path
- is the output of this stage.</td>
- </tr>
-
- <tr valign="top" align="center">
- <td><a href="ValidationConsumer.html">validate</a></td>
- <td><em>none</em></td>
- <td>yes</td>
- <td align="left">This checks for validity errors, and reports them
- through its error handler. The input must include declaration events
- and some lexical events. </td>
- </tr>
- <tr valign="top" align="center">
- <td><a href="WellFormednessFilter.html">wf</a></td>
- <td><em>none</em></td>
- <td>yes</td>
- <td align="left"> This class provides some basic "well formedness"
- tests on the input event stream, and reports a fatal error if any
- of them fail. One example: start/end calls for elements must match.
- No SAX parser is permitted to produce malformed output, but other
- components can easily do so.</td>
- </tr>
- <tr valign="top" align="center">
- <td>write</td>
- <td><em>required</em><br> "stdout", "stderr", or filename</td>
- <td>yes</td>
- <td align="left"> Writes its input to the specified output, as pretty
- printed XML text encoded using UTF-8. Input events must be well
- formed and "namespace fixed", else the output won't be XML (or possibly
- namespace) conformant. The symbolic names represent
- <em>System.out</em> and <em>System.err</em> respectively; names must
- correspond to files which don't yet exist.</td>
- </tr>
- <tr valign="top" align="center">
- <td>xhtml</td>
- <td><em>required</em><br> "stdout", "stderr", or filename</td>
- <td>yes</td>
- <td align="left"> Like <em>write</em> (above), except that XHTML rules
- are followed. The XHTML 1.0 Transitional document type is declared,
- and only ASCII characters are written (for interoperability). Other
- characters are written as entity or character references; the text is
- pretty printed.</td>
- </tr>
- <tr valign="top" align="center">
- <td><a href="XIncludeFilter.html">xinclude</a></td>
- <td><em>none</em></td>
- <td>no</td>
- <td align="left">This stage handles XInclude processing.
- This is like entity inclusion, except that the included content
- is declared in-line rather than in the DTD at the beginning of
- a document.
- </td>
- </tr>
- <tr valign="top" align="center">
- <td><a href="XsltFilter.html">xslt</a></td>
- <td><em>required</em><br> XSLT stylesheet URI</td>
- <td>no</td>
- <td align="left">This stage handles XSLT transformation
- according to a stylesheet.
- The implementation of the transformation may not actually
- stream data, although if such an XSLT engine is in use
- then that can happen.
- </td>
- </tr>
-
- </table>
-
- * <p> Note that {@link EventFilter#bind} can automatically eliminate
- * some filters by setting SAX2 parser features appropriately. This means
- * that you can routinely put filters like "nsfix", "validate", or "wf" at the
- * front of a pipeline (for components that need inputs conditioned to match
- * that level of correctness), and know that it won't actually be used unless
- * it's absolutely necessary.
- *
- * @author David Brownell
- */
-public class PipelineFactory
-{
- /**
- * Creates a simple pipeline according to the description string passed in.
- */
- public static EventConsumer createPipeline (String description)
- throws IOException
- {
- return createPipeline (description, null);
- }
-
- /**
- * Extends an existing pipeline by prepending the filter pipeline to the
- * specified consumer. Some pipelines need more customization than can
- * be done through this simplified syntax. When they are set up with
- * direct API calls, use this method to merge more complex pipeline
- * segments with easily configured ones.
- */
- public static EventConsumer createPipeline (
- String description,
- EventConsumer next
- ) throws IOException
- {
- // tokens are (for now) what's separated by whitespace;
- // very easy to parse, but IDs never have spaces.
-
- StringTokenizer tokenizer;
- String tokens [];
-
- tokenizer = new StringTokenizer (description);
- tokens = new String [tokenizer.countTokens ()];
- for (int i = 0; i < tokens.length; i++)
- tokens [i] = tokenizer.nextToken ();
-
- PipelineFactory factory = new PipelineFactory ();
- Pipeline pipeline = factory.parsePipeline (tokens, next);
-
- return pipeline.createPipeline ();
- }
-
-
- private PipelineFactory () { /* NYET */ }
-
-
- /**
- * Extends an existing pipeline by prepending a pre-tokenized filter
- * pipeline to the specified consumer. Tokens are class names (or the
- * predefined aliases) left and right parenthesis, and the vertical bar.
- */
- public static EventConsumer createPipeline (
- String tokens [],
- EventConsumer next
- ) throws IOException
- {
- PipelineFactory factory = new PipelineFactory ();
- Pipeline pipeline = factory.parsePipeline (tokens, next);
-
- return pipeline.createPipeline ();
- }
-
-
- private String tokens [];
- private int index;
-
- private Pipeline parsePipeline (String toks [], EventConsumer next)
- {
- tokens = toks;
- index = 0;
-
- Pipeline retval = parsePipeline (next);
-
- if (index != toks.length)
- throw new ArrayIndexOutOfBoundsException (
- "extra token: " + tokens [index]);
- return retval;
- }
-
- // pipeline ::= stage | stage '|' pipeline
- private Pipeline parsePipeline (EventConsumer next)
- {
- Pipeline retval = new Pipeline (parseStage ());
-
- // minimal pipelines: "stage" and "... | id"
- if (index > (tokens.length - 2)
- || !"|".equals (tokens [index])
- ) {
- retval.next = next;
- return retval;
- }
- index++;
- retval.rest = parsePipeline (next);
- return retval;
- }
-
- // stage ::= id | id '(' pipeline ')'
- private Stage parseStage ()
- {
- Stage retval = new Stage (tokens [index++]);
-
- // minimal stages: "id" and "id ( id )"
- if (index > (tokens.length - 2)
- || !"(".equals (tokens [index]) /*)*/
- )
- return retval;
-
- index++;
- retval.param = parsePipeline (null);
- if (index >= tokens.length)
- throw new ArrayIndexOutOfBoundsException (
- "missing right paren");
- if (/*(*/ !")".equals (tokens [index++]))
- throw new ArrayIndexOutOfBoundsException (
- "required right paren, not: " + tokens [index - 1]);
- return retval;
- }
-
-
- //
- // these classes obey the conventions for constructors, so they're
- // only built in to this table of shortnames
- //
- // - filter (one or two types of arglist)
- // * last constructor is 'next' element
- // * optional (first) string parameter
- //
- // - terminus (one or types of arglist)
- // * optional (only) string parameter
- //
- // terminus stages are transformed into filters if needed, by
- // creating a "tee". filter stages aren't turned to terminus
- // stages though; either eliminate such stages, or add some
- // terminus explicitly.
- //
- private static final String builtinStages [][] = {
- { "dom", "gnu.xml.dom.Consumer" },
- { "nsfix", "gnu.xml.pipeline.NSFilter" },
- { "null", "gnu.xml.pipeline.EventFilter" },
- { "server", "gnu.xml.pipeline.CallFilter" },
- { "tee", "gnu.xml.pipeline.TeeConsumer" },
- { "validate", "gnu.xml.pipeline.ValidationConsumer" },
- { "wf", "gnu.xml.pipeline.WellFormednessFilter" },
- { "xinclude", "gnu.xml.pipeline.XIncludeFilter" },
- { "xslt", "gnu.xml.pipeline.XsltFilter" },
-
-// XXX want: option for validate, to preload external part of a DTD
-
- // xhtml, write ... nyet generic-ready
- };
-
- private static class Stage
- {
- String id;
- Pipeline param;
-
- Stage (String name)
- { id = name; }
-
- public String toString ()
- {
- if (param == null)
- return id;
- return id + " ( " + param + " )";
- }
-
- private void fail (String message)
- throws IOException
- {
- throw new IOException ("in '" + id
- + "' stage of pipeline, " + message);
- }
-
- EventConsumer createStage (EventConsumer next)
- throws IOException
- {
- String name = id;
-
- // most builtins are just class aliases
- for (int i = 0; i < builtinStages.length; i++) {
- if (id.equals (builtinStages [i][0])) {
- name = builtinStages [i][1];
- break;
- }
- }
-
- // Save output as XML or XHTML text
- if ("write".equals (name) || "xhtml".equals (name)) {
- String filename;
- boolean isXhtml = "xhtml".equals (name);
- OutputStream out = null;
- TextConsumer consumer;
-
- if (param == null)
- fail ("parameter is required");
-
- filename = param.toString ();
- if ("stdout".equals (filename))
- out = System.out;
- else if ("stderr".equals (filename))
- out = System.err;
- else {
- File f = new File (filename);
-
-/*
- if (!f.isAbsolute ())
- fail ("require absolute file paths");
- */
- if (f.exists ())
- fail ("file already exists: " + f.getName ());
-
-// XXX this races against the existence test
- out = new FileOutputStream (f);
- }
-
- if (!isXhtml)
- consumer = new TextConsumer (out);
- else
- consumer = new TextConsumer (
- new OutputStreamWriter (out, "8859_1"),
- true);
-
- consumer.setPrettyPrinting (true);
- if (next == null)
- return consumer;
- return new TeeConsumer (consumer, next);
-
- } else {
- //
- // Here go all the builtins that are just aliases for
- // classes, and all stage IDs that started out as such
- // class names. The following logic relies on several
- // documented conventions for constructor invocation.
- //
- String msg = null;
-
- try {
- Class klass = Class.forName (name);
- Class argTypes [] = null;
- Constructor constructor = null;
- boolean filter = false;
- Object params [] = null;
- Object obj = null;
-
- // do we need a filter stage?
- if (next != null) {
- // "next" consumer is always passed, with
- // or without the optional string param
- if (param == null) {
- argTypes = new Class [1];
- argTypes [0] = EventConsumer.class;
-
- params = new Object [1];
- params [0] = next;
-
- msg = "no-param filter";
- } else {
- argTypes = new Class [2];
- argTypes [0] = String.class;
- argTypes [1] = EventConsumer.class;
-
- params = new Object [2];
- params [0] = param.toString ();
- params [1] = next;
-
- msg = "one-param filter";
- }
-
-
- try {
- constructor = klass.getConstructor (argTypes);
- } catch (NoSuchMethodException e) {
- // try creating a filter from a
- // terminus and a tee
- filter = true;
- msg += " built from ";
- }
- }
-
- // build from a terminus stage, with or
- // without the optional string param
- if (constructor == null) {
- String tmp;
-
- if (param == null) {
- argTypes = new Class [0];
- params = new Object [0];
-
- tmp = "no-param terminus";
- } else {
- argTypes = new Class [1];
- argTypes [0] = String.class;
-
- params = new Object [1];
- params [0] = param.toString ();
-
- tmp = "one-param terminus";
- }
- if (msg == null)
- msg = tmp;
- else
- msg += tmp;
- constructor = klass.getConstructor (argTypes);
- // NOT creating terminus by dead-ending
- // filters ... users should think about
- // that one, something's likely wrong
- }
-
- obj = constructor.newInstance (params);
-
- // return EventConsumers directly, perhaps after
- // turning them into a filter
- if (obj instanceof EventConsumer) {
- if (filter)
- return new TeeConsumer ((EventConsumer) obj, next);
- return (EventConsumer) obj;
- }
-
- // if it's not a handler, it's an error
- // we can wrap handlers in a filter
- EventFilter retval = new EventFilter ();
- boolean updated = false;
-
- if (obj instanceof ContentHandler) {
- retval.setContentHandler ((ContentHandler) obj);
- updated = true;
- }
- if (obj instanceof DTDHandler) {
- retval.setDTDHandler ((DTDHandler) obj);
- updated = true;
- }
- if (obj instanceof LexicalHandler) {
- retval.setProperty (
- EventFilter.PROPERTY_URI + "lexical-handler",
- obj);
- updated = true;
- }
- if (obj instanceof DeclHandler) {
- retval.setProperty (
- EventFilter.PROPERTY_URI + "declaration-handler",
- obj);
- updated = true;
- }
-
- if (!updated)
- fail ("class is neither Consumer nor Handler");
-
- if (filter)
- return new TeeConsumer (retval, next);
- return retval;
-
- } catch (IOException e) {
- throw e;
-
- } catch (NoSuchMethodException e) {
- fail (name + " constructor missing -- " + msg);
-
- } catch (ClassNotFoundException e) {
- fail (name + " class not found");
-
- } catch (Exception e) {
- // e.printStackTrace ();
- fail ("stage not available: " + e.getMessage ());
- }
- }
- // NOTREACHED
- return null;
- }
- }
-
- private static class Pipeline
- {
- Stage stage;
-
- // rest may be null
- Pipeline rest;
- EventConsumer next;
-
- Pipeline (Stage s)
- { stage = s; }
-
- public String toString ()
- {
- if (rest == null && next == null)
- return stage.toString ();
- if (rest != null)
- return stage + " | " + rest;
- throw new IllegalArgumentException ("next");
- }
-
- EventConsumer createPipeline ()
- throws IOException
- {
- if (next == null) {
- if (rest == null)
- next = stage.createStage (null);
- else
- next = stage.createStage (rest.createPipeline ());
- }
- return next;
- }
- }
-
-/*
- public static void main (String argv [])
- {
- try {
- // three basic terminus cases
- createPipeline ("null");
- createPipeline ("validate");
- createPipeline ("write ( stdout )");
-
- // four basic filters
- createPipeline ("nsfix | write ( stderr )");
- createPipeline ("wf | null");
- createPipeline ("null | null");
- createPipeline (
-"call ( http://www.example.com/services/xml-1a ) | xhtml ( stdout )");
-
- // tee junctions
- createPipeline ("tee ( validate ) | write ( stdout )");
- createPipeline ("tee ( nsfix | write ( stdout ) ) | validate");
-
- // longer pipeline
- createPipeline ("nsfix | tee ( validate ) | write ( stdout )");
- createPipeline (
- "null | wf | nsfix | tee ( validate ) | write ( stdout )");
-
- // try some parsing error cases
- try {
- createPipeline ("null ("); // extra token '('
- System.err.println ("** didn't report error");
- } catch (Exception e) {
- System.err.println ("== err: " + e.getMessage ()); }
-
- try {
- createPipeline ("nsfix |"); // extra token '|'
- System.err.println ("** didn't report error");
- } catch (Exception e) {
- System.err.println ("== err: " + e.getMessage ()); }
-
- try {
- createPipeline ("xhtml ( foo"); // missing right paren
- System.err.println ("** didn't report error");
- } catch (Exception e) {
- System.err.println ("== err: " + e.getMessage ()); }
-
- try {
- createPipeline ("xhtml ( foo bar"); // required right paren
- System.err.println ("** didn't report error");
- } catch (Exception e) {
- System.err.println ("== err: " + e.getMessage ()); }
-
- try {
- createPipeline ("tee ( nsfix | validate");// missing right paren
- System.err.println ("** didn't report error");
- } catch (Exception e) {
- System.err.println ("== err: " + e.getMessage ()); }
-
- // try some construction error cases
-
- try {
- createPipeline ("call"); // missing param
- System.err.println ("** didn't report error");
- } catch (Exception e) {
- System.err.println ("== err: " + e.getMessage ()); }
- try {
- createPipeline ("call ( foobar )"); // broken param
- System.err.println ("** didn't report error");
- } catch (Exception e) {
- System.err.println ("== err: " + e.getMessage ()); }
- try {
- createPipeline ("nsfix ( foobar )"); // illegal param
- System.err.println ("** didn't report error");
- } catch (Exception e) {
- System.err.println ("== err: " + e.getMessage ()); }
- try {
- createPipeline ("null ( foobar )"); // illegal param
- System.err.println ("** didn't report error");
- } catch (Exception e) {
- System.err.println ("== err: " + e.getMessage ()); }
- try {
- createPipeline ("wf ( foobar )"); // illegal param
- System.err.println ("** didn't report error");
- } catch (Exception e) {
- System.err.println ("== err: " + e.getMessage ()); }
- try {
- createPipeline ("xhtml ( foobar.html )");
- new File ("foobar.html").delete ();
- // now supported
- } catch (Exception e) {
- System.err.println ("** err: " + e.getMessage ()); }
- try {
- createPipeline ("xhtml"); // missing param
- System.err.println ("** didn't report error");
- } catch (Exception e) {
- System.err.println ("== err: " + e.getMessage ()); }
- try {
- createPipeline ("write ( stdout ) | null"); // nonterminal
- System.err.println ("** didn't report error");
- } catch (Exception e) {
- System.err.println ("== err: " + e.getMessage ()); }
- try {
- createPipeline ("validate | null");
- // now supported
- } catch (Exception e) {
- System.err.println ("** err: " + e.getMessage ()); }
- try {
- createPipeline ("validate ( foo )"); // illegal param
- System.err.println ("** didn't report error");
- } catch (Exception e) {
- System.err.println ("== err: " + e.getMessage ()); }
- try {
- createPipeline ("tee"); // missing param
- System.err.println ("** didn't report error");
- } catch (Exception e) {
- System.err.println ("== err: " + e.getMessage ()); }
- try {
- // only builtins so far
- createPipeline ("com.example.xml.FilterClass");
- System.err.println ("** didn't report error");
- } catch (Exception e) {
- System.err.println ("== err: " + e.getMessage ()); }
-
- } catch (Exception e) {
- e.printStackTrace ();
- }
- }
-/**/
-
-}
diff --git a/libjava/gnu/xml/pipeline/TeeConsumer.java b/libjava/gnu/xml/pipeline/TeeConsumer.java
deleted file mode 100644
index 8186de4df66..00000000000
--- a/libjava/gnu/xml/pipeline/TeeConsumer.java
+++ /dev/null
@@ -1,417 +0,0 @@
-/* TeeConsumer.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.pipeline;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.DTDHandler;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXNotRecognizedException;
-import org.xml.sax.ext.DeclHandler;
-import org.xml.sax.ext.LexicalHandler;
-
-/**
- * Fans its events out to two other consumers, a "tee" filter stage in an
- * event pipeline. Networks can be assembled with multiple output points.
- *
- * <p> Error handling should be simple if you remember that exceptions
- * you throw will cancel later stages in that callback's pipeline, and
- * generally the producer will stop if it sees such an exception. You
- * may want to protect your pipeline against such backflows, making a
- * kind of reverse filter (or valve?) so that certain exceptions thrown by
- * your pipeline will caught and handled before the producer sees them.
- * Just use a "try/catch" block, rememebering that really important
- * cleanup tasks should be in "finally" clauses.
- *
- * <p> That issue isn't unique to "tee" consumers, but tee consumers have
- * the additional twist that exceptions thrown by the first consumer
- * will cause the second consumer not to see the callback (except for
- * the endDocument callback, which signals state cleanup).
- *
- * @author David Brownell
- */
-final public class TeeConsumer
- implements EventConsumer,
- ContentHandler, DTDHandler,
- LexicalHandler,DeclHandler
-{
- private EventConsumer first, rest;
-
- // cached to minimize time overhead
- private ContentHandler docFirst, docRest;
- private DeclHandler declFirst, declRest;
- private LexicalHandler lexFirst, lexRest;
-
-
- /**
- * Constructs a consumer which sends all its events to the first
- * consumer, and then the second one. If the first consumer throws
- * an exception, the second one will not see the event which
- * caused that exception to be reported.
- *
- * @param car The first consumer to get the events
- * @param cdr The second consumer to get the events
- */
- public TeeConsumer (EventConsumer car, EventConsumer cdr)
- {
- if (car == null || cdr == null)
- throw new NullPointerException ();
- first = car;
- rest = cdr;
-
- //
- // Cache the handlers.
- //
- docFirst = first.getContentHandler ();
- docRest = rest.getContentHandler ();
- // DTD handler isn't cached (rarely needed)
-
- try {
- declFirst = null;
- declFirst = (DeclHandler) first.getProperty (
- EventFilter.DECL_HANDLER);
- } catch (SAXException e) {}
- try {
- declRest = null;
- declRest = (DeclHandler) rest.getProperty (
- EventFilter.DECL_HANDLER);
- } catch (SAXException e) {}
-
- try {
- lexFirst = null;
- lexFirst = (LexicalHandler) first.getProperty (
- EventFilter.LEXICAL_HANDLER);
- } catch (SAXException e) {}
- try {
- lexRest = null;
- lexRest = (LexicalHandler) rest.getProperty (
- EventFilter.LEXICAL_HANDLER);
- } catch (SAXException e) {}
- }
-
-/* FIXME
- /**
- * Constructs a pipeline, and is otherwise a shorthand for the
- * two-consumer constructor for this class.
- *
- * @param first Description of the first pipeline to get events,
- * which will be passed to {@link PipelineFactory#createPipeline}
- * @param rest The second pipeline to get the events
- * /
- // constructor used by PipelineFactory
- public TeeConsumer (String first, EventConsumer rest)
- throws IOException
- {
- this (PipelineFactory.createPipeline (first), rest);
- }
-*/
-
- /** Returns the first pipeline to get event calls. */
- public EventConsumer getFirst ()
- { return first; }
-
- /** Returns the second pipeline to get event calls. */
- public EventConsumer getRest ()
- { return rest; }
-
- /** Returns the content handler being used. */
- final public ContentHandler getContentHandler ()
- {
- if (docRest == null)
- return docFirst;
- if (docFirst == null)
- return docRest;
- return this;
- }
-
- /** Returns the dtd handler being used. */
- final public DTDHandler getDTDHandler ()
- {
- // not cached (hardly used)
- if (rest.getDTDHandler () == null)
- return first.getDTDHandler ();
- if (first.getDTDHandler () == null)
- return rest.getDTDHandler ();
- return this;
- }
-
- /** Returns the declaration or lexical handler being used. */
- final public Object getProperty (String id)
- throws SAXNotRecognizedException
- {
- //
- // in degenerate cases, we have no work to do.
- //
- Object firstProp = null, restProp = null;
-
- try { firstProp = first.getProperty (id); }
- catch (SAXNotRecognizedException e) { /* ignore */ }
- try { restProp = rest.getProperty (id); }
- catch (SAXNotRecognizedException e) { /* ignore */ }
-
- if (restProp == null)
- return firstProp;
- if (firstProp == null)
- return restProp;
-
- //
- // we've got work to do; handle two builtin cases.
- //
- if (EventFilter.DECL_HANDLER.equals (id))
- return this;
- if (EventFilter.LEXICAL_HANDLER.equals (id))
- return this;
-
- //
- // non-degenerate, handled by both consumers, but we don't know
- // how to handle this.
- //
- throw new SAXNotRecognizedException ("can't tee: " + id);
- }
-
- /**
- * Provides the error handler to both subsequent nodes of
- * this filter stage.
- */
- public void setErrorHandler (ErrorHandler handler)
- {
- first.setErrorHandler (handler);
- rest.setErrorHandler (handler);
- }
-
-
- //
- // ContentHandler
- //
- public void setDocumentLocator (Locator locator)
- {
- // this call is not made by all parsers
- docFirst.setDocumentLocator (locator);
- docRest.setDocumentLocator (locator);
- }
-
- public void startDocument ()
- throws SAXException
- {
- docFirst.startDocument ();
- docRest.startDocument ();
- }
-
- public void endDocument ()
- throws SAXException
- {
- try {
- docFirst.endDocument ();
- } finally {
- docRest.endDocument ();
- }
- }
-
- public void startPrefixMapping (String prefix, String uri)
- throws SAXException
- {
- docFirst.startPrefixMapping (prefix, uri);
- docRest.startPrefixMapping (prefix, uri);
- }
-
- public void endPrefixMapping (String prefix)
- throws SAXException
- {
- docFirst.endPrefixMapping (prefix);
- docRest.endPrefixMapping (prefix);
- }
-
- public void skippedEntity (String name)
- throws SAXException
- {
- docFirst.skippedEntity (name);
- docRest.skippedEntity (name);
- }
-
- public void startElement (String uri, String localName,
- String qName, Attributes atts)
- throws SAXException
- {
- docFirst.startElement (uri, localName, qName, atts);
- docRest.startElement (uri, localName, qName, atts);
- }
-
- public void endElement (String uri, String localName, String qName)
- throws SAXException
- {
- docFirst.endElement (uri, localName, qName);
- docRest.endElement (uri, localName, qName);
- }
-
- public void processingInstruction (String target, String data)
- throws SAXException
- {
- docFirst.processingInstruction (target, data);
- docRest.processingInstruction (target, data);
- }
-
- public void characters (char ch [], int start, int length)
- throws SAXException
- {
- docFirst.characters (ch, start, length);
- docRest.characters (ch, start, length);
- }
-
- public void ignorableWhitespace (char ch [], int start, int length)
- throws SAXException
- {
- docFirst.ignorableWhitespace (ch, start, length);
- docRest.ignorableWhitespace (ch, start, length);
- }
-
-
- //
- // DTDHandler
- //
- public void notationDecl (String name, String publicId, String systemId)
- throws SAXException
- {
- DTDHandler l1 = first.getDTDHandler ();
- DTDHandler l2 = rest.getDTDHandler ();
-
- l1.notationDecl (name, publicId, systemId);
- l2.notationDecl (name, publicId, systemId);
- }
-
- public void unparsedEntityDecl (String name,
- String publicId, String systemId,
- String notationName
- ) throws SAXException
- {
- DTDHandler l1 = first.getDTDHandler ();
- DTDHandler l2 = rest.getDTDHandler ();
-
- l1.unparsedEntityDecl (name, publicId, systemId, notationName);
- l2.unparsedEntityDecl (name, publicId, systemId, notationName);
- }
-
-
- //
- // DeclHandler
- //
- public void attributeDecl (String eName, String aName,
- String type,
- String mode, String value)
- throws SAXException
- {
- declFirst.attributeDecl (eName, aName, type, mode, value);
- declRest.attributeDecl (eName, aName, type, mode, value);
- }
-
- public void elementDecl (String name, String model)
- throws SAXException
- {
- declFirst.elementDecl (name, model);
- declRest.elementDecl (name, model);
- }
-
- public void externalEntityDecl (String name,
- String publicId, String systemId)
- throws SAXException
- {
- declFirst.externalEntityDecl (name, publicId, systemId);
- declRest.externalEntityDecl (name, publicId, systemId);
- }
-
- public void internalEntityDecl (String name, String value)
- throws SAXException
- {
- declFirst.internalEntityDecl (name, value);
- declRest.internalEntityDecl (name, value);
- }
-
-
- //
- // LexicalHandler
- //
- public void comment (char ch [], int start, int length)
- throws SAXException
- {
- lexFirst.comment (ch, start, length);
- lexRest.comment (ch, start, length);
- }
-
- public void startCDATA ()
- throws SAXException
- {
- lexFirst.startCDATA ();
- lexRest.startCDATA ();
- }
-
- public void endCDATA ()
- throws SAXException
- {
- lexFirst.endCDATA ();
- lexRest.endCDATA ();
- }
-
- public void startEntity (String name)
- throws SAXException
- {
- lexFirst.startEntity (name);
- lexRest.startEntity (name);
- }
-
- public void endEntity (String name)
- throws SAXException
- {
- lexFirst.endEntity (name);
- lexRest.endEntity (name);
- }
-
- public void startDTD (String name, String publicId, String systemId)
- throws SAXException
- {
- lexFirst.startDTD (name, publicId, systemId);
- lexRest.startDTD (name, publicId, systemId);
- }
-
- public void endDTD ()
- throws SAXException
- {
- lexFirst.endDTD ();
- lexRest.endDTD ();
- }
-}
diff --git a/libjava/gnu/xml/pipeline/TextConsumer.java b/libjava/gnu/xml/pipeline/TextConsumer.java
deleted file mode 100644
index 67bd23b00d6..00000000000
--- a/libjava/gnu/xml/pipeline/TextConsumer.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/* TextConsumer.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.pipeline;
-
-import java.io.*;
-
-import org.xml.sax.*;
-
-import gnu.xml.util.XMLWriter;
-
-
-/**
- * Terminates a pipeline, consuming events to print them as well formed
- * XML (or XHTML) text.
- *
- * <p> Input must be well formed, and must include XML names (e.g. the
- * prefixes and prefix declarations must be present), or the output of
- * this class is undefined.
- *
- * @see NSFilter
- * @see WellFormednessFilter
- *
- * @author David Brownell
- */
-public class TextConsumer extends XMLWriter implements EventConsumer
-{
- /**
- * Constructs an event consumer which echoes its input as text,
- * optionally adhering to some basic XHTML formatting options
- * which increase interoperability with old (v3) browsers.
- *
- * <p> For the best interoperability, when writing as XHTML only
- * ASCII characters are emitted; other characters are turned to
- * entity or character references as needed, and no XML declaration
- * is provided in the document.
- */
- public TextConsumer (Writer w, boolean isXhtml)
- throws IOException
- {
- super (w, isXhtml ? "US-ASCII" : null);
- setXhtml (isXhtml);
- }
-
- /**
- * Constructs a consumer that writes its input as XML text.
- * XHTML rules are not followed.
- */
- public TextConsumer (Writer w)
- throws IOException
- {
- this (w, false);
- }
-
- /**
- * Constructs a consumer that writes its input as XML text,
- * encoded in UTF-8. XHTML rules are not followed.
- */
- public TextConsumer (OutputStream out)
- throws IOException
- {
- this (new OutputStreamWriter (out, "UTF8"), false);
- }
-
- /** <b>EventConsumer</b> Returns the document handler being used. */
- public ContentHandler getContentHandler ()
- { return this; }
-
- /** <b>EventConsumer</b> Returns the dtd handler being used. */
- public DTDHandler getDTDHandler ()
- { return this; }
-
- /** <b>XMLReader</b>Retrieves a property (lexical and decl handlers) */
- public Object getProperty (String propertyId)
- throws SAXNotRecognizedException
- {
- if (EventFilter.LEXICAL_HANDLER.equals (propertyId))
- return this;
- if (EventFilter.DECL_HANDLER.equals (propertyId))
- return this;
- throw new SAXNotRecognizedException (propertyId);
- }
-}
diff --git a/libjava/gnu/xml/pipeline/ValidationConsumer.java b/libjava/gnu/xml/pipeline/ValidationConsumer.java
deleted file mode 100644
index 2510c768cfb..00000000000
--- a/libjava/gnu/xml/pipeline/ValidationConsumer.java
+++ /dev/null
@@ -1,1929 +0,0 @@
-/* ValidationConsumer.java --
- Copyright (C) 1999,2000,2001, 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.pipeline;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.EmptyStackException;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Stack;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.XMLReaderFactory;
-
-/**
- * This class checks SAX2 events to report validity errors; it works as
- * both a filter and a terminus on an event pipeline. It relies on the
- * producer of SAX events to: </p> <ol>
- *
- * <li> Conform to the specification of a non-validating XML parser that
- * reads all external entities, reported using SAX2 events. </li>
- *
- * <li> Report ignorable whitespace as such (through the ContentHandler
- * interface). This is, strictly speaking, optional for nonvalidating
- * XML processors. </li>
- *
- * <li> Make SAX2 DeclHandler callbacks, with default
- * attribute values already normalized (and without "&lt;").</li>
- *
- * <li> Make SAX2 LexicalHandler startDTD() and endDTD ()
- * callbacks. </li>
- *
- * <li> Act as if the <em>(URI)/namespace-prefixes</em> property were
- * set to true, by providing XML 1.0 names and all <code>xmlns*</code>
- * attributes (rather than omitting either or both). </li>
- *
- * </ol>
- *
- * <p> At this writing, the major SAX2 parsers (such as &AElig;lfred2,
- * Crimson, and Xerces) meet these requirements, and this validation
- * module is used by the optional &AElig;lfred2 validation support.
- * </p>
- *
- * <p> Note that because this is a layered validator, it has to duplicate some
- * work that the parser is doing; there are also other cost to layering.
- * However, <em>because of layering it doesn't need a parser</em> in order
- * to work! You can use it with anything that generates SAX events, such
- * as an application component that wants to detect invalid content in
- * a changed area without validating an entire document, or which wants to
- * ensure that it doesn't write invalid data to a communications partner.</p>
- *
- * <p> Also, note that because this is a layered validator, the line numbers
- * reported for some errors may seem strange. For example, if an element does
- * not permit character content, the validator
- * will use the locator provided to it.
- * That might reflect the last character of a <em>characters</em> event
- * callback, rather than the first non-whitespace character. </p>
- *
- * <hr />
- *
- * <!--
- * <p> Of interest is the fact that unlike most currently known XML validators,
- * this one can report some cases of non-determinism in element content models.
- * It is a compile-time option, enabled by default. This will only report
- * such XML errors if they relate to content actually appearing in a document;
- * content models aren't aggressively scanned for non-deterministic structure.
- * Documents which trigger such non-deterministic transitions may be handled
- * differently by different validating parsers, without losing conformance
- * to the XML specification. </p>
- * -->
- *
- * <p> Current limitations of the validation performed are in roughly three
- * categories. </p>
- *
- * <p> The first category represents constraints which demand violations
- * of software layering: exposing lexical details, one of the first things
- * that <em>application</em> programming interfaces (APIs) hide. These
- * invariably relate to XML entity handling, and to historical oddities
- * of the XML validation semantics. Curiously,
- * recent (Autumn 1999) conformance testing showed that these constraints are
- * among those handled worst by existing XML validating parsers. Arguments
- * have been made that each of these VCs should be turned into WFCs (most
- * of them) or discarded (popular for the standalone declaration); in short,
- * that these are bugs in the XML specification (not all via SGML): </p><ul>
- *
- * <li> The <em>Proper Declaration/PE Nesting</em> and
- * <em>Proper Group/PE Nesting</em> VCs can't be tested because they
- * require access to particularly low level lexical level information.
- * In essence, the reason XML isn't a simple thing to parse is that
- * it's not a context free grammar, and these constraints elevate that
- * SGML-derived context sensitivity to the level of a semantic rule.
- *
- * <li> The <em>Standalone Document Declaration</em> VC can't be
- * tested. This is for two reasons. First, this flag isn't made
- * available through SAX2. Second, it also requires breaking that
- * lexical layering boundary. (If you ever wondered why classes
- * in compiler construction or language design barely mention the
- * existence of context-sensitive grammars, it's because of messy
- * issues like these.)
- *
- * <li> The <em>Entity Declared</em> VC can't be tested, because it
- * also requires breaking that lexical layering boundary! There's also
- * another issue: the VC wording (and seemingly intent) is ambiguous.
- * (This is still true in the "Second edition" XML spec.)
- * Since there is a WFC of the same name, everyone's life would be
- * easier if references to undeclared parsed entities were always well
- * formedness errors, regardless of whether they're parameter entities
- * or not. (Note that nonvalidating parsers are not required
- * to report all such well formedness errors if they don't read external
- * parameter entities, although currently most XML parsers read them
- * in an attempt to avoid problems from inconsistent parser behavior.)
- *
- * </ul>
- *
- * <p> The second category of limitations on this validation represent
- * constraints associated with information that is not guaranteed to be
- * available (or in one case, <em>is guaranteed not to be available</em>,
- * through the SAX2 API: </p><ul>
- *
- * <li> The <em>Unique Element Type Declaration</em> VC may not be
- * reportable, if the underlying parser happens not to expose
- * multiple declarations. (&AElig;lfred2 reports these validity
- * errors directly.)</li>
- *
- * <li> Similarly, the <em>Unique Notation Name</em> VC, added in the
- * 14-January-2000 XML spec errata to restrict typing models used by
- * elements, may not be reportable. (&AElig;lfred reports these
- * validity errors directly.) </li>
- *
- * </ul>
- *
- * <p> A third category relates to ease of implementation. (Think of this
- * as "bugs".) The most notable issue here is character handling. Rather
- * than attempting to implement the voluminous character tables in the XML
- * specification (Appendix B), Unicode rules are used directly from
- * the java.lang.Character class. Recent JVMs have begun to diverge from
- * the original specification for that class (Unicode 2.0), meaning that
- * different JVMs may handle that aspect of conformance differently.
- * </p>
- *
- * <p> Note that for some of the validity errors that SAX2 does not
- * expose, a nonvalidating parser is permitted (by the XML specification)
- * to report validity errors. When used with a parser that does so for
- * the validity constraints mentioned above (or any other SAX2 event
- * stream producer that does the same thing), overall conformance is
- * substantially improved.
- *
- * @see gnu.xml.aelfred2.SAXDriver
- * @see gnu.xml.aelfred2.XmlReader
- *
- * @author David Brownell
- */
-public final class ValidationConsumer extends EventFilter
-{
- // report error if we happen to notice a non-deterministic choice?
- // we won't report buggy content models; just buggy instances
- private static final boolean warnNonDeterministic = false;
-
- // for tracking active content models
- private String rootName;
- private Stack contentStack = new Stack ();
-
- // flags for "saved DTD" processing
- private boolean disableDeclarations;
- private boolean disableReset;
-
- //
- // most VCs get tested when we see element start tags. the per-element
- // info (including attributes) recorded here duplicates that found inside
- // many nonvalidating parsers, hence dual lookups etc ... that's why a
- // layered validator isn't going to be as fast as a non-layered one.
- //
-
- // key = element name; value = ElementInfo
- private Hashtable elements = new Hashtable ();
-
- // some VCs relate to ID/IDREF/IDREFS attributes
- // key = id; value = boolean true (defd) or false (refd)
- private Hashtable ids = new Hashtable ();
-
- // we just record declared notation and unparsed entity names.
- // the implementation here is simple/slow; these features
- // are seldom used, one hopes they'll wither away soon
- private Vector notations = new Vector (5, 5);
- private Vector nDeferred = new Vector (5, 5);
- private Vector unparsed = new Vector (5, 5);
- private Vector uDeferred = new Vector (5, 5);
-
- // note: DocBk 3.1.7 XML defines over 2 dozen notations,
- // used when defining unparsed entities for graphics
- // (and maybe in other places)
-
-
-
- /**
- * Creates a pipeline terminus which consumes all events passed to
- * it; this will report validity errors as if they were fatal errors,
- * unless an error handler is assigned.
- *
- * @see #setErrorHandler
- */
- // constructor used by PipelineFactory
- // ... and want one taking system ID of an external subset
- public ValidationConsumer ()
- {
- this (null);
- }
-
- /**
- * Creates a pipeline filter which reports validity errors and then
- * passes events on to the next consumer if they were not fatal.
- *
- * @see #setErrorHandler
- */
- // constructor used by PipelineFactory
- // ... and want one taking system ID of an external subset
- // (which won't send declaration events)
- public ValidationConsumer (EventConsumer next)
- {
- super (next);
-
- setContentHandler (this);
- setDTDHandler (this);
- try { setProperty (DECL_HANDLER, this); }
- catch (Exception e) { /* "can't happen" */ }
- try { setProperty (LEXICAL_HANDLER, this); }
- catch (Exception e) { /* "can't happen" */ }
- }
-
-
- private static final String fakeRootName
- = ":Nobody:in:their_Right.Mind_would:use:this-name:1x:";
-
- /**
- * Creates a validation consumer which is preloaded with the DTD provided.
- * It does this by constructing a document with that DTD, then parsing
- * that document and recording its DTD declarations. Then it arranges
- * not to modify that information.
- *
- * <p> The resulting validation consumer will only validate against
- * the specified DTD, regardless of whether some other DTD is found
- * in a document being parsed.
- *
- * @param rootName The name of the required root element; if this is
- * null, any root element name will be accepted.
- * @param publicId If non-null and there is a non-null systemId, this
- * identifier provides an alternate access identifier for the DTD's
- * external subset.
- * @param systemId If non-null, this is a URI (normally URL) that
- * may be used to access the DTD's external subset.
- * @param internalSubset If non-null, holds literal markup declarations
- * comprising the DTD's internal subset.
- * @param resolver If non-null, this will be provided to the parser for
- * use when resolving parameter entities (including any external subset).
- * @param resolver If non-null, this will be provided to the parser for
- * use when resolving parameter entities (including any external subset).
- * @param minimalElement If non-null, a minimal valid document.
- *
- * @exception SAXNotSupportedException If the default SAX parser does
- * not support the standard lexical or declaration handlers.
- * @exception SAXParseException If the specified DTD has either
- * well-formedness or validity errors
- * @exception IOException If the specified DTD can't be read for
- * some reason
- */
- public ValidationConsumer (
- String rootName,
- String publicId,
- String systemId,
- String internalSubset,
- EntityResolver resolver,
- String minimalDocument
- ) throws SAXException, IOException
- {
- this (null);
-
- disableReset = true;
- if (rootName == null)
- rootName = fakeRootName;
-
- //
- // Synthesize document with that DTD; is it possible to do
- // better for the declaration of the root element?
- //
- // NOTE: can't use SAX2 to write internal subsets.
- //
- StringWriter writer = new StringWriter ();
-
- writer.write ("<!DOCTYPE ");
- writer.write (rootName);
- if (systemId != null) {
- writer.write ("\n ");
- if (publicId != null) {
- writer.write ("PUBLIC '");
- writer.write (publicId);
- writer.write ("'\n\t'");
- } else
- writer.write ("SYSTEM '");
- writer.write (systemId);
- writer.write ("'");
- }
- writer.write (" [ ");
- if (rootName == fakeRootName) {
- writer.write ("\n<!ELEMENT ");
- writer.write (rootName);
- writer.write (" EMPTY>");
- }
- if (internalSubset != null)
- writer.write (internalSubset);
- writer.write ("\n ]>");
-
- if (minimalDocument != null) {
- writer.write ("\n");
- writer.write (minimalDocument);
- writer.write ("\n");
- } else {
- writer.write (" <");
- writer.write (rootName);
- writer.write ("/>\n");
- }
- minimalDocument = writer.toString ();
-
- //
- // OK, load it
- //
- XMLReader producer;
-
- producer = XMLReaderFactory.createXMLReader ();
- bind (producer, this);
-
- if (resolver != null)
- producer.setEntityResolver (resolver);
-
- InputSource in;
-
- in = new InputSource (new StringReader (minimalDocument));
- producer.parse (in);
-
- disableDeclarations = true;
- if (rootName == fakeRootName)
- this.rootName = null;
- }
-
- private void resetState ()
- {
- if (!disableReset) {
- rootName = null;
- contentStack.removeAllElements ();
- elements.clear ();
- ids.clear ();
-
- notations.removeAllElements ();
- nDeferred.removeAllElements ();
- unparsed.removeAllElements ();
- uDeferred.removeAllElements ();
- }
- }
-
-
- private void warning (String description)
- throws SAXException
- {
- ErrorHandler errHandler = getErrorHandler ();
- Locator locator = getDocumentLocator ();
- SAXParseException err;
-
- if (errHandler == null)
- return;
-
- if (locator == null)
- err = new SAXParseException (description, null, null, -1, -1);
- else
- err = new SAXParseException (description, locator);
- errHandler.warning (err);
- }
-
- // package private (for ChildrenRecognizer)
- private void error (String description)
- throws SAXException
- {
- ErrorHandler errHandler = getErrorHandler ();
- Locator locator = getDocumentLocator ();
- SAXParseException err;
-
- if (locator == null)
- err = new SAXParseException (description, null, null, -1, -1);
- else
- err = new SAXParseException (description, locator);
- if (errHandler != null)
- errHandler.error (err);
- else // else we always treat it as fatal!
- throw err;
- }
-
- private void fatalError (String description)
- throws SAXException
- {
- ErrorHandler errHandler = getErrorHandler ();
- Locator locator = getDocumentLocator ();
- SAXParseException err;
-
- if (locator != null)
- err = new SAXParseException (description, locator);
- else
- err = new SAXParseException (description, null, null, -1, -1);
- if (errHandler != null)
- errHandler.fatalError (err);
- // we always treat this as fatal, regardless of the handler
- throw err;
- }
-
-
- private static boolean isExtender (char c)
- {
- // [88] Extender ::= ...
- return c == 0x00b7 || c == 0x02d0 || c == 0x02d1 || c == 0x0387
- || c == 0x0640 || c == 0x0e46 || c == 0x0ec6 || c == 0x3005
- || (c >= 0x3031 && c <= 0x3035)
- || (c >= 0x309d && c <= 0x309e)
- || (c >= 0x30fc && c <= 0x30fe);
- }
-
-
- // use augmented Unicode rules, not full XML rules
- private boolean isName (String name, String context, String id)
- throws SAXException
- {
- char buf [] = name.toCharArray ();
- boolean pass = true;
-
- if (!Character.isUnicodeIdentifierStart (buf [0])
- && ":_".indexOf (buf [0]) == -1)
- pass = false;
- else {
- int max = buf.length;
- for (int i = 1; pass && i < max; i++) {
- char c = buf [i];
- if (!Character.isUnicodeIdentifierPart (c)
- && ":-_.".indexOf (c) == -1
- && !isExtender (c))
- pass = false;
- }
- }
-
- if (!pass)
- error ("In " + context + " for " + id
- + ", '" + name + "' is not a name");
- return pass; // true == OK
- }
-
- // use augmented Unicode rules, not full XML rules
- private boolean isNmtoken (String nmtoken, String context, String id)
- throws SAXException
- {
- char buf [] = nmtoken.toCharArray ();
- boolean pass = true;
- int max = buf.length;
-
- // XXX make this share code with isName
-
- for (int i = 0; pass && i < max; i++) {
- char c = buf [i];
- if (!Character.isUnicodeIdentifierPart (c)
- && ":-_.".indexOf (c) == -1
- && !isExtender (c))
- pass = false;
- }
-
- if (!pass)
- error ("In " + context + " for " + id
- + ", '" + nmtoken + "' is not a name token");
- return pass; // true == OK
- }
-
- private void checkEnumeration (String value, String type, String name)
- throws SAXException
- {
- if (!hasMatch (value, type))
- // VC: Enumeration
- error ("Value '" + value
- + "' for attribute '" + name
- + "' is not permitted: " + type);
- }
-
- // used to test enumerated attributes and mixed content models
- // package private
- static boolean hasMatch (String value, String orList)
- {
- int len = value.length ();
- int max = orList.length () - len;
-
- for (int start = 0;
- (start = orList.indexOf (value, start)) != -1;
- start++) {
- char c;
-
- if (start > max)
- break;
- c = orList.charAt (start - 1);
- if (c != '|' && c != '('/*)*/)
- continue;
- c = orList.charAt (start + len);
- if (c != '|' && /*(*/ c != ')')
- continue;
- return true;
- }
- return false;
- }
-
- /**
- * <b>LexicalHandler</b> Records the declaration of the root
- * element, so it can be verified later.
- * Passed to the next consumer, unless this one was
- * preloaded with a particular DTD.
- */
- public void startDTD (String name, String publicId, String systemId)
- throws SAXException
- {
- if (disableDeclarations)
- return;
-
- rootName = name;
- super.startDTD (name, publicId, systemId);
- }
-
- /**
- * <b>LexicalHandler</b> Verifies that all referenced notations
- * and unparsed entities have been declared.
- * Passed to the next consumer, unless this one was
- * preloaded with a particular DTD.
- */
- public void endDTD ()
- throws SAXException
- {
- if (disableDeclarations)
- return;
-
- // this is a convenient hook for end-of-dtd checks, but we
- // could also trigger it in the first startElement call.
- // locator info is more appropriate here though.
-
- // VC: Notation Declared (NDATA can refer to them before decls,
- // as can NOTATION attribute enumerations and defaults)
- int length = nDeferred.size ();
- for (int i = 0; i < length; i++) {
- String notation = (String) nDeferred.elementAt (i);
- if (!notations.contains (notation)) {
- error ("A declaration referred to notation '" + notation
- + "' which was never declared");
- }
- }
- nDeferred.removeAllElements ();
-
- // VC: Entity Name (attribute values can refer to them
- // before they're declared); VC Attribute Default Legal
- length = uDeferred.size ();
- for (int i = 0; i < length; i++) {
- String entity = (String) uDeferred.elementAt (i);
- if (!unparsed.contains (entity)) {
- error ("An attribute default referred to entity '" + entity
- + "' which was never declared");
- }
- }
- uDeferred.removeAllElements ();
- super.endDTD ();
- }
-
-
- // These are interned, so we can rely on "==" to find the type of
- // all attributes except enumerations ...
- // "(this|or|that|...)" and "NOTATION (this|or|that|...)"
- static final String types [] = {
- "CDATA",
- "ID", "IDREF", "IDREFS",
- "NMTOKEN", "NMTOKENS",
- "ENTITY", "ENTITIES"
- };
-
-
- /**
- * <b>DecllHandler</b> Records attribute declaration for later use
- * in validating document content, and checks validity constraints
- * that are applicable to attribute declarations.
- * Passed to the next consumer, unless this one was
- * preloaded with a particular DTD.
- */
- public void attributeDecl (
- String eName,
- String aName,
- String type,
- String mode,
- String value
- ) throws SAXException
- {
- if (disableDeclarations)
- return;
-
- ElementInfo info = (ElementInfo) elements.get (eName);
- AttributeInfo ainfo = new AttributeInfo ();
- boolean checkOne = false;
- boolean interned = false;
-
- // cheap interning of type names and #FIXED, #REQUIRED
- // for faster startElement (we can use "==")
- for (int i = 0; i < types.length; i++) {
- if (types [i].equals (type)) {
- type = types [i];
- interned = true;
- break;
- }
- }
- if ("#FIXED".equals (mode))
- mode = "#FIXED";
- else if ("#REQUIRED".equals (mode))
- mode = "#REQUIRED";
-
- ainfo.type = type;
- ainfo.mode = mode;
- ainfo.value = value;
-
- // we might not have seen the content model yet
- if (info == null) {
- info = new ElementInfo (eName);
- elements.put (eName, info);
- }
- if ("ID" == type) {
- checkOne = true;
- if (!("#REQUIRED" == mode || "#IMPLIED".equals (mode))) {
- // VC: ID Attribute Default
- error ("ID attribute '" + aName
- + "' must be #IMPLIED or #REQUIRED");
- }
-
- } else if (!interned && type.startsWith ("NOTATION ")) {
- checkOne = true;
-
- // VC: Notation Attributes (notations must be declared)
- StringTokenizer tokens = new StringTokenizer (
- type.substring (10, type.lastIndexOf (')')),
- "|");
- while (tokens.hasMoreTokens ()) {
- String token = tokens.nextToken ();
- if (!notations.contains (token))
- nDeferred.addElement (token);
- }
- }
- if (checkOne) {
- for (Enumeration e = info.attributes.keys ();
- e.hasMoreElements ();
- /* NOP */) {
- String name;
- AttributeInfo ainfo2;
-
- name = (String) e.nextElement ();
- ainfo2 = (AttributeInfo) info.attributes.get (name);
- if (type == ainfo2.type || !interned /* NOTATION */) {
- // VC: One ID per Element Type
- // VC: One Notation per Element TYpe
- error ("Element '" + eName
- + "' already has an attribute of type "
- + (interned ? "NOTATION" : type)
- + " ('" + name
- + "') so '" + aName
- + "' is a validity error");
- }
- }
- }
-
- // VC: Attribute Default Legal
- if (value != null) {
-
- if ("CDATA" == type) {
- // event source rejected '<'
-
- } else if ("NMTOKEN" == type) {
- // VC: Name Token (is a nmtoken)
- isNmtoken (value, "attribute default", aName);
-
- } else if ("NMTOKENS" == type) {
- // VC: Name Token (is a nmtoken; at least one value)
- StringTokenizer tokens = new StringTokenizer (value);
- if (!tokens.hasMoreTokens ())
- error ("Default for attribute '" + aName
- + "' must have at least one name token.");
- else do {
- String token = tokens.nextToken ();
- isNmtoken (token, "attribute default", aName);
- } while (tokens.hasMoreTokens ());
-
- } else if ("IDREF" == type || "ENTITY" == type) {
- // VC: Entity Name (is a name)
- // VC: IDREF (is a name) (is declared)
- isName (value, "attribute default", aName);
- if ("ENTITY" == type && !unparsed.contains (value))
- uDeferred.addElement (value);
-
- } else if ("IDREFS" == type || "ENTITIES" == type) {
- // VC: Entity Name (is a name; at least one value)
- // VC: IDREF (is a name; at least one value)
- StringTokenizer names = new StringTokenizer (value);
- if (!names.hasMoreTokens ())
- error ("Default for attribute '" + aName
- + "' must have at least one name.");
- else do {
- String name = names.nextToken ();
- isName (name, "attribute default", aName);
- if ("ENTITIES" == type && !unparsed.contains (name))
- uDeferred.addElement (value);
- } while (names.hasMoreTokens ());
-
- } else if (type.charAt (0) == '(' /*)*/ ) {
- // VC: Enumeration (must match)
- checkEnumeration (value, type, aName);
-
- } else if (!interned && checkOne) { /* NOTATION */
- // VC: Notation attributes (must be names)
- isName (value, "attribute default", aName);
-
- // VC: Notation attributes (must be declared)
- if (!notations.contains (value))
- nDeferred.addElement (value);
-
- // VC: Enumeration (must match)
- checkEnumeration (value, type, aName);
-
- } else if ("ID" != type)
- throw new RuntimeException ("illegal attribute type: " + type);
- }
-
- if (info.attributes.get (aName) == null)
- info.attributes.put (aName, ainfo);
- /*
- else
- warning ("Element '" + eName
- + "' already has an attribute named '" + aName + "'");
- */
-
- if ("xml:space".equals (aName)) {
- if (!("(default|preserve)".equals (type)
- || "(preserve|default)".equals (type)
- // these next two are arguable; XHTML's DTD doesn't
- // deserve errors. After all, it's not like any
- // illegal _value_ could pass ...
- || "(preserve)".equals (type)
- || "(default)".equals (type)
- ))
- error (
- "xml:space attribute type must be like '(default|preserve)'"
- + " not '" + type + "'"
- );
-
- }
- super.attributeDecl (eName, aName, type, mode, value);
- }
-
- /**
- * <b>DecllHandler</b> Records the element declaration for later use
- * when checking document content, and checks validity constraints that
- * apply to element declarations. Passed to the next consumer, unless
- * this one was preloaded with a particular DTD.
- */
- public void elementDecl (String name, String model)
- throws SAXException
- {
- if (disableDeclarations)
- return;
-
- ElementInfo info = (ElementInfo) elements.get (name);
-
- // we might have seen an attribute decl already
- if (info == null) {
- info = new ElementInfo (name);
- elements.put (name, info);
- }
- if (info.model != null) {
- // NOTE: not all parsers can report such duplicates.
- // VC: Unique Element Type Declaration
- error ("Element type '" + name
- + "' was already declared.");
- } else {
- info.model = model;
-
- // VC: No Duplicate Types (in mixed content models)
- if (model.charAt (1) == '#') // (#PCDATA...
- info.getRecognizer (this);
- }
- super.elementDecl (name, model);
- }
-
- /**
- * <b>DecllHandler</b> passed to the next consumer, unless this
- * one was preloaded with a particular DTD
- */
- public void internalEntityDecl (String name, String value)
- throws SAXException
- {
- if (!disableDeclarations)
- super.internalEntityDecl (name, value);
- }
-
- /**
- * <b>DecllHandler</b> passed to the next consumer, unless this
- * one was preloaded with a particular DTD
- */
- public void externalEntityDecl (String name,
- String publicId, String systemId)
- throws SAXException
- {
- if (!disableDeclarations)
- super.externalEntityDecl (name, publicId, systemId);
- }
-
-
- /**
- * <b>DTDHandler</b> Records the notation name, for checking
- * NOTATIONS attribute values and declararations of unparsed
- * entities. Passed to the next consumer, unless this one was
- * preloaded with a particular DTD.
- */
- public void notationDecl (String name, String publicId, String systemId)
- throws SAXException
- {
- if (disableDeclarations)
- return;
-
- notations.addElement (name);
- super.notationDecl (name, publicId, systemId);
- }
-
- /**
- * <b>DTDHandler</b> Records the entity name, for checking
- * ENTITY and ENTITIES attribute values; records the notation
- * name if it hasn't yet been declared. Passed to the next consumer,
- * unless this one was preloaded with a particular DTD.
- */
- public void unparsedEntityDecl (
- String name,
- String publicId,
- String systemId,
- String notationName
- ) throws SAXException
- {
- if (disableDeclarations)
- return;
-
- unparsed.addElement (name);
- if (!notations.contains (notationName))
- nDeferred.addElement (notationName);
- super.unparsedEntityDecl (name, publicId, systemId, notationName);
- }
-
-
- /**
- * <b>ContentHandler</b> Ensures that state from any previous parse
- * has been deleted.
- * Passed to the next consumer.
- */
- public void startDocument ()
- throws SAXException
- {
- resetState ();
- super.startDocument ();
- }
-
-
- private static boolean isAsciiLetter (char c)
- {
- return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
- }
-
-
- /**
- * <b>ContentHandler</b> Reports a fatal exception. Validating
- * XML processors may not skip any entities.
- */
- public void skippedEntity (String name)
- throws SAXException
- {
- fatalError ("may not skip entities");
- }
-
- /*
- * SAX2 doesn't expand non-PE refs in attribute defaults...
- */
- private String expandDefaultRefs (String s)
- throws SAXException
- {
- if (s.indexOf ('&') < 0)
- return s;
-
-// FIXME: handle &#nn; &#xnn; &name;
- String message = "Can't expand refs in attribute default: " + s;
- warning (message);
-
- return s;
- }
-
- /**
- * <b>ContentHandler</b> Performs validity checks against element
- * (and document) content models, and attribute values.
- * Passed to the next consumer.
- */
- public void startElement (
- String uri,
- String localName,
- String qName,
- Attributes atts
- ) throws SAXException
- {
- //
- // First check content model for the enclosing scope.
- //
- if (contentStack.isEmpty ()) {
- // VC: Root Element Type
- if (!qName.equals (rootName)) {
- if (rootName == null)
- warning ("This document has no DTD, can't be valid");
- else
- error ("Root element type '" + qName
- + "' was declared to be '" + rootName + "'");
- }
- } else {
- Recognizer state = (Recognizer) contentStack.peek ();
-
- if (state != null) {
- Recognizer newstate = state.acceptElement (qName);
-
- if (newstate == null)
- error ("Element type '" + qName
- + "' in element '" + state.type.name
- + "' violates content model " + state.type.model
- );
- if (newstate != state) {
- contentStack.pop ();
- contentStack.push (newstate);
- }
- }
- }
-
- //
- // Then check that this element was declared, and push the
- // object used to validate its content model onto our stack.
- //
- // This is where the recognizer gets created, if needed; if
- // it's a "children" (elements) content model, an NDFA is
- // created. (One recognizer is used per content type, no
- // matter how complex that recognizer is.)
- //
- ElementInfo info;
-
- info = (ElementInfo) elements.get (qName);
- if (info == null || info.model == null) {
- // VC: Element Valid (base clause)
- error ("Element type '" + qName + "' was not declared");
- contentStack.push (null);
-
- // for less diagnostic noise, fake a declaration.
- elementDecl (qName, "ANY");
- } else
- contentStack.push (info.getRecognizer (this));
-
- //
- // Then check each attribute present
- //
- int len;
- String aname;
- AttributeInfo ainfo;
-
- if (atts != null)
- len = atts.getLength ();
- else
- len = 0;
-
- for (int i = 0; i < len; i++) {
- aname = atts.getQName (i);
-
- if (info == null
- || (ainfo = (AttributeInfo) info.attributes.get (aname))
- == null) {
- // VC: Attribute Value Type
- error ("Attribute '" + aname
- + "' was not declared for element type " + qName);
- continue;
- }
-
- String value = atts.getValue (i);
-
- // note that "==" for type names and "#FIXED" is correct
- // (and fast) since we've interned those literals.
-
- if ("#FIXED" == ainfo.mode) {
- String expanded = expandDefaultRefs (ainfo.value);
-
- // VC: Fixed Attribute Default
- if (!value.equals (expanded)) {
- error ("Attribute '" + aname
- + "' must match " + expanded
- );
- continue;
- }
- }
-
- if ("CDATA" == ainfo.type)
- continue;
-
- //
- // For all other attribute types, there are various
- // rules to follow.
- //
-
- if ("ID" == ainfo.type) {
- // VC: ID (must be a name)
- if (isName (value, "ID attribute", aname)) {
- if (Boolean.TRUE == ids.get (value))
- // VC: ID (appears once)
- error ("ID attribute " + aname
- + " uses an ID value '" + value
- + "' which was already declared.");
- else
- // any forward refs are no longer problems
- ids.put (value, Boolean.TRUE);
- }
- continue;
- }
-
- if ("IDREF" == ainfo.type) {
- // VC: IDREF (value must be a name)
- if (isName (value, "IDREF attribute", aname)) {
- // VC: IDREF (must match some ID attribute)
- if (ids.get (value) == null)
- // new -- assume it's a forward ref
- ids.put (value, Boolean.FALSE);
- }
- continue;
- }
-
- if ("IDREFS" == ainfo.type) {
- StringTokenizer tokens = new StringTokenizer (value, " ");
-
- if (!tokens.hasMoreTokens ()) {
- // VC: IDREF (one or more values)
- error ("IDREFS attribute " + aname
- + " must have at least one ID ref");
- } else do {
- String id = tokens.nextToken ();
-
- // VC: IDREF (value must be a name)
- if (isName (id, "IDREFS attribute", aname)) {
- // VC: IDREF (must match some ID attribute)
- if (ids.get (id) == null)
- // new -- assume it's a forward ref
- ids.put (id, Boolean.FALSE);
- }
- } while (tokens.hasMoreTokens ());
- continue;
- }
-
- if ("NMTOKEN" == ainfo.type) {
- // VC: Name Token (is a name token)
- isNmtoken (value, "NMTOKEN attribute", aname);
- continue;
- }
-
- if ("NMTOKENS" == ainfo.type) {
- StringTokenizer tokens = new StringTokenizer (value, " ");
-
- if (!tokens.hasMoreTokens ()) {
- // VC: Name Token (one or more values)
- error ("NMTOKENS attribute " + aname
- + " must have at least one name token");
- } else do {
- String token = tokens.nextToken ();
-
- // VC: Name Token (is a name token)
- isNmtoken (token, "NMTOKENS attribute", aname);
- } while (tokens.hasMoreTokens ());
- continue;
- }
-
- if ("ENTITY" == ainfo.type) {
- if (!unparsed.contains (value))
- // VC: Entity Name
- error ("Value of attribute '" + aname
- + "' refers to unparsed entity '" + value
- + "' which was not declared.");
- continue;
- }
-
- if ("ENTITIES" == ainfo.type) {
- StringTokenizer tokens = new StringTokenizer (value, " ");
-
- if (!tokens.hasMoreTokens ()) {
- // VC: Entity Name (one or more values)
- error ("ENTITIES attribute " + aname
- + " must have at least one name token");
- } else do {
- String entity = tokens.nextToken ();
-
- if (!unparsed.contains (entity))
- // VC: Entity Name
- error ("Value of attribute '" + aname
- + "' refers to unparsed entity '" + entity
- + "' which was not declared.");
- } while (tokens.hasMoreTokens ());
- continue;
- }
-
- //
- // check for enumerations last; more expensive
- //
- if (ainfo.type.charAt (0) == '(' /*)*/
- || ainfo.type.startsWith ("NOTATION ")
- ) {
- // VC: Enumeration (value must be defined)
- checkEnumeration (value, ainfo.type, aname);
- continue;
- }
- }
-
- //
- // Last, check that all #REQUIRED attributes were provided
- //
- if (info != null) {
- Hashtable table = info.attributes;
-
- if (table.size () != 0) {
- Enumeration e = table.keys ();
-
- // XXX table.keys uses the heap, bleech -- slows things
-
- while (e.hasMoreElements ()) {
- aname = (String) e.nextElement ();
- ainfo = (AttributeInfo) table.get (aname);
-
- // "#REQUIRED" mode was interned in attributeDecl
- if ("#REQUIRED" == ainfo.mode
- && atts.getValue (aname) == null) {
- // VC: Required Attribute
- error ("Attribute '" + aname + "' must be specified "
- + "for element type " + qName);
- }
- }
- }
- }
- super.startElement (uri, localName, qName, atts);
- }
-
- /**
- * <b>ContentHandler</b> Reports a validity error if the element's content
- * model does not permit character data.
- * Passed to the next consumer.
- */
- public void characters (char ch [], int start, int length)
- throws SAXException
- {
- Recognizer state;
-
- if (contentStack.empty ())
- state = null;
- else
- state = (Recognizer) contentStack.peek ();
-
- // NOTE: if this ever supports with SAX parsers that don't
- // report ignorable whitespace as such (only XP?), this class
- // needs to morph it into ignorableWhitespace() as needed ...
-
- if (state != null && !state.acceptCharacters ())
- // VC: Element Valid (clauses three, four -- see recognizer)
- error ("Character content not allowed in element "
- + state.type.name);
-
- super.characters (ch, start, length);
- }
-
-
- /**
- * <b>ContentHandler</b> Reports a validity error if the element's content
- * model does not permit end-of-element yet, or a well formedness error
- * if there was no matching startElement call.
- * Passed to the next consumer.
- */
- public void endElement (String uri, String localName, String qName)
- throws SAXException
- {
- try {
- Recognizer state = (Recognizer) contentStack.pop ();
-
- if (state != null && !state.completed ())
- // VC: Element valid (clauses two, three, four; see Recognizer)
- error ("Premature end for element '"
- + state.type.name
- + "', content model "
- + state.type.model);
-
- // could insist on match of start element, but that's
- // something the input stream must to guarantee.
-
- } catch (EmptyStackException e) {
- fatalError ("endElement without startElement: " + qName
- + ((uri == null)
- ? ""
- : ( " { '" + uri + "', " + localName + " }")));
- }
- super.endElement (uri, localName, qName);
- }
-
- /**
- * <b>ContentHandler</b> Checks whether all ID values that were
- * referenced have been declared, and releases all resources.
- * Passed to the next consumer.
- *
- * @see #setDocumentLocator
- */
- public void endDocument ()
- throws SAXException
- {
- for (Enumeration idNames = ids.keys ();
- idNames.hasMoreElements ();
- /* NOP */) {
- String id = (String) idNames.nextElement ();
-
- if (Boolean.FALSE == ids.get (id)) {
- // VC: IDREF (must match ID)
- error ("Undeclared ID value '" + id
- + "' was referred to by an IDREF/IDREFS attribute");
- }
- }
-
- resetState ();
- super.endDocument ();
- }
-
-
- /** Holds per-element declarations */
- static private final class ElementInfo
- {
- String name;
- String model;
-
- // key = attribute name; value = AttributeInfo
- Hashtable attributes = new Hashtable (11);
-
- ElementInfo (String n) { name = n; }
-
- private Recognizer recognizer;
-
- // for validating content models: one per type, shared,
- // and constructed only on demand ... so unused elements do
- // not need to consume resources.
- Recognizer getRecognizer (ValidationConsumer consumer)
- throws SAXException
- {
- if (recognizer == null) {
- if ("ANY".equals (model))
- recognizer = ANY;
- else if ("EMPTY".equals (model))
- recognizer = new EmptyRecognizer (this);
- else if ('#' == model.charAt (1))
- // n.b. this constructor does a validity check
- recognizer = new MixedRecognizer (this, consumer);
- else
- recognizer = new ChildrenRecognizer (this, consumer);
- }
- return recognizer;
- }
- }
-
- /** Holds per-attribute declarations */
- static private final class AttributeInfo
- {
- String type;
- String mode; // #REQUIRED, etc (or null)
- String value; // or null
- }
-
-
- //
- // Content model validation
- //
-
- // GCJ LOCAL: package private to work around gcj bug.
- static final Recognizer ANY = new Recognizer (null);
-
-
- // Base class defines the calls used to validate content,
- // and supports the "ANY" content model
- static private class Recognizer
- {
- final ElementInfo type;
-
- Recognizer (ElementInfo t) { type = t; }
-
- // return true iff character data is legal here
- boolean acceptCharacters ()
- throws SAXException
- // VC: Element Valid (third and fourth clauses)
- { return true; }
-
- // null return = failure
- // otherwise, next state (like an FSM)
- // prerequisite: tested that name was declared
- Recognizer acceptElement (String name)
- throws SAXException
- // VC: Element Valid (fourth clause)
- { return this; }
-
- // return true iff model is completed, can finish
- boolean completed ()
- throws SAXException
- // VC: Element Valid (fourth clause)
- { return true; }
-
- public String toString ()
- // n.b. "children" is the interesting case!
- { return (type == null) ? "ANY" : type.model; }
- }
-
- // "EMPTY" content model -- no characters or elements
- private static final class EmptyRecognizer extends Recognizer
- {
- public EmptyRecognizer (ElementInfo type)
- { super (type); }
-
- // VC: Element Valid (first clause)
- boolean acceptCharacters ()
- { return false; }
-
- // VC: Element Valid (first clause)
- Recognizer acceptElement (String name)
- { return null; }
- }
-
- // "Mixed" content model -- ANY, but restricts elements
- private static final class MixedRecognizer extends Recognizer
- {
- private String permitted [];
-
- // N.B. constructor tests for duplicated element names (VC)
- public MixedRecognizer (ElementInfo t, ValidationConsumer v)
- throws SAXException
- {
- super (t);
-
- // (#PCDATA...)* or (#PCDATA) ==> ... or empty
- // with the "..." being "|elname|..."
- StringTokenizer tokens = new StringTokenizer (
- t.model.substring (8, t.model.lastIndexOf (')')),
- "|");
- Vector vec = new Vector ();
-
- while (tokens.hasMoreTokens ()) {
- String token = tokens.nextToken ();
-
- if (vec.contains (token))
- v.error ("element " + token
- + " is repeated in mixed content model: "
- + t.model);
- else
- vec.addElement (token.intern ());
- }
- permitted = new String [vec.size ()];
- for (int i = 0; i < permitted.length; i++)
- permitted [i] = (String) vec.elementAt (i);
-
- // in one large machine-derived DTD sample, most of about
- // 250 mixed content models were empty, and 25 had ten or
- // more entries. 2 had over a hundred elements. Linear
- // search isn't obviously wrong.
- }
-
- // VC: Element Valid (third clause)
- Recognizer acceptElement (String name)
- {
- int length = permitted.length;
-
- // first pass -- optimistic w.r.t. event source interning
- // (and document validity)
- for (int i = 0; i < length; i++)
- if (permitted [i] == name)
- return this;
- // second pass -- pessimistic w.r.t. event source interning
- for (int i = 0; i < length; i++)
- if (permitted [i].equals (name))
- return this;
- return null;
- }
- }
-
-
- // recognizer loop flags, see later
- private static final int F_LOOPHEAD = 0x01;
- private static final int F_LOOPNEXT = 0x02;
-
- // for debugging -- used to label/count nodes in toString()
- private static int nodeCount;
-
- /**
- * "Children" content model -- these are nodes in NDFA state graphs.
- * They work in fixed space. Note that these graphs commonly have
- * cycles, handling features such as zero-or-more and one-or-more.
- *
- * <p>It's readonly, so only one copy is ever needed. The content model
- * stack may have any number of pointers into each graph, when a model
- * happens to be needed more than once due to element nesting. Since
- * traversing the graph just moves to another node, and never changes
- * it, traversals never interfere with each other.
- *
- * <p>There is an option to report non-deterministic models. These are
- * always XML errors, but ones which are not often reported despite the
- * fact that they can lead to different validating parsers giving
- * different results for the same input. (The XML spec doesn't require
- * them to be reported.)
- *
- * <p><b>FIXME</b> There's currently at least one known bug here, in that
- * it's not actually detecting the non-determinism it tries to detect.
- * (Of the "optional.xml" test, the once-or-twice-2* tests are all non-D;
- * maybe some others.) This may relate to the issue flagged below as
- * "should not" happen (but it was), which showed up when patching the
- * graph to have one exit node (or more EMPTY nodes).
- */
- private static final class ChildrenRecognizer extends Recognizer
- implements Cloneable
- {
- // for reporting non-deterministic content models
- // ... a waste of space if we're not reporting those!
- // ... along with the 'model' member (in base class)
- private ValidationConsumer consumer;
-
- // for CHOICE nodes -- each component is an arc that
- // accepts a different NAME (or is EMPTY indicating
- // NDFA termination).
- private Recognizer components [];
-
- // for NAME/SEQUENCE nodes -- accepts that NAME and
- // then goes to the next node (CHOICE, NAME, EMPTY).
- private String name;
- private Recognizer next;
-
- // loops always point back to a CHOICE node. we mark such choice
- // nodes (F_LOOPHEAD) for diagnostics and faster deep cloning.
- // We also mark nodes before back pointers (F_LOOPNEXT), to ensure
- // termination when we patch sequences and loops.
- private int flags;
-
-
- // prevent a needless indirection between 'this' and 'node'
- private void copyIn (ChildrenRecognizer node)
- {
- // model & consumer are already set
- components = node.components;
- name = node.name;
- next = node.next;
- flags = node.flags;
- }
-
- // used to construct top level "children" content models,
- public ChildrenRecognizer (ElementInfo type, ValidationConsumer vc)
- {
- this (vc, type);
- populate (type.model.toCharArray (), 0);
- patchNext (new EmptyRecognizer (type), null);
- }
-
- // used internally; populating is separate
- private ChildrenRecognizer (ValidationConsumer vc, ElementInfo type)
- {
- super (type);
- consumer = vc;
- }
-
-
- //
- // When rewriting some graph nodes we need deep clones in one case;
- // mostly shallow clones (what the JVM handles for us) are fine.
- //
- private ChildrenRecognizer shallowClone ()
- {
- try {
- return (ChildrenRecognizer) clone ();
- } catch (CloneNotSupportedException e) {
- throw new Error ("clone");
- }
- }
-
- private ChildrenRecognizer deepClone ()
- {
- return deepClone (new Hashtable (37));
- }
-
- private ChildrenRecognizer deepClone (Hashtable table)
- {
- ChildrenRecognizer retval;
-
- if ((flags & F_LOOPHEAD) != 0) {
- retval = (ChildrenRecognizer) table.get (this);
- if (retval != null)
- return this;
-
- retval = shallowClone ();
- table.put (this, retval);
- } else
- retval = shallowClone ();
-
- if (next != null) {
- if (next instanceof ChildrenRecognizer)
- retval.next = ((ChildrenRecognizer)next)
- .deepClone (table);
- else if (!(next instanceof EmptyRecognizer))
- throw new RuntimeException ("deepClone");
- }
-
- if (components != null) {
- retval.components = new Recognizer [components.length];
- for (int i = 0; i < components.length; i++) {
- Recognizer temp = components [i];
-
- if (temp == null)
- retval.components [i] = null;
- else if (temp instanceof ChildrenRecognizer)
- retval.components [i] = ((ChildrenRecognizer)temp)
- .deepClone (table);
- else if (!(temp instanceof EmptyRecognizer))
- throw new RuntimeException ("deepClone");
- }
- }
-
- return retval;
- }
-
- // connect subgraphs, first to next (sequencing)
- private void patchNext (Recognizer theNext, Hashtable table)
- {
- // backpointers must not be repatched or followed
- if ((flags & F_LOOPNEXT) != 0)
- return;
-
- // XXX this table "shouldn't" be needed, right?
- // but some choice nodes looped if it isn't there.
- if (table != null && table.get (this) != null)
- return;
- if (table == null)
- table = new Hashtable ();
-
- // NAME/SEQUENCE
- if (name != null) {
- if (next == null)
- next = theNext;
- else if (next instanceof ChildrenRecognizer) {
- ((ChildrenRecognizer)next).patchNext (theNext, table);
- } else if (!(next instanceof EmptyRecognizer))
- throw new RuntimeException ("patchNext");
- return;
- }
-
- // CHOICE
- for (int i = 0; i < components.length; i++) {
- if (components [i] == null)
- components [i] = theNext;
- else if (components [i] instanceof ChildrenRecognizer) {
- ((ChildrenRecognizer)components [i])
- .patchNext (theNext, table);
- } else if (!(components [i] instanceof EmptyRecognizer))
- throw new RuntimeException ("patchNext");
- }
-
- if (table != null && (flags | F_LOOPHEAD) != 0)
- table.put (this, this);
- }
-
- /**
- * Parses a 'children' spec (or recursively 'cp') and makes this
- * become a regular graph node.
- *
- * @return index after this particle
- */
- private int populate (char parseBuf [], int startPos)
- {
- int nextPos = startPos + 1;
- char c;
-
- if (nextPos < 0 || nextPos >= parseBuf.length)
- throw new IndexOutOfBoundsException ();
-
- // Grammar of the string is from the XML spec, but
- // with whitespace removed by the SAX parser.
-
- // children ::= (choice | seq) ('?' | '*' | '+')?
- // cp ::= (Name | choice | seq) ('?' | '*' | '+')?
- // choice ::= '(' cp ('|' choice)* ')'
- // seq ::= '(' cp (',' choice)* ')'
-
- // interior nodes only
- // cp ::= name ...
- if (parseBuf [startPos] != '('/*)*/) {
- boolean done = false;
- do {
- switch (c = parseBuf [nextPos]) {
- case '?': case '*': case '+':
- case '|': case ',':
- case /*(*/ ')':
- done = true;
- continue;
- default:
- nextPos++;
- continue;
- }
- } while (!done);
- name = new String (parseBuf, startPos, nextPos - startPos);
-
- // interior OR toplevel nodes
- // cp ::= choice ..
- // cp ::= seq ..
- } else {
- // collect everything as a separate list, and merge it
- // into "this" later if we can (SEQUENCE or singleton)
- ChildrenRecognizer first;
-
- first = new ChildrenRecognizer (consumer, type);
- nextPos = first.populate (parseBuf, nextPos);
- c = parseBuf [nextPos++];
-
- if (c == ',' || c == '|') {
- ChildrenRecognizer current = first;
- char separator = c;
- Vector v = null;
-
- if (separator == '|') {
- v = new Vector ();
- v.addElement (first);
- }
-
- do {
- ChildrenRecognizer link;
-
- link = new ChildrenRecognizer (consumer, type);
- nextPos = link.populate (parseBuf, nextPos);
-
- if (separator == ',') {
- current.patchNext (link, null);
- current = link;
- } else
- v.addElement (link);
-
- c = parseBuf [nextPos++];
- } while (c == separator);
-
- // choice ... collect everything into one array.
- if (separator == '|') {
- // assert v.size() > 1
- components = new Recognizer [v.size ()];
- for (int i = 0; i < components.length; i++) {
- components [i] = (Recognizer)
- v.elementAt (i);
- }
- // assert flags == 0
-
- // sequence ... merge into "this" to be smaller.
- } else
- copyIn (first);
-
- // treat singletons like one-node sequences.
- } else
- copyIn (first);
-
- if (c != /*(*/ ')')
- throw new RuntimeException ("corrupt content model");
- }
-
- //
- // Arity is optional, and the root of all fun. We keep the
- // FSM state graph simple by only having NAME/SEQUENCE and
- // CHOICE nodes (or EMPTY to terminate a model), easily
- // evaluated. So we rewrite each node that has arity, using
- // those primitives. We create loops here, if needed.
- //
- if (nextPos < parseBuf.length) {
- c = parseBuf [nextPos];
- if (c == '?' || c == '*' || c == '+') {
- nextPos++;
-
- // Rewrite 'zero-or-one' "?" arity to a CHOICE:
- // - SEQUENCE (clone, what's next)
- // - or, what's next
- // Size cost: N --> N + 1
- if (c == '?') {
- Recognizer once = shallowClone ();
-
- components = new Recognizer [2];
- components [0] = once;
- // components [1] initted to null
- name = null;
- next = null;
- flags = 0;
-
-
- // Rewrite 'zero-or-more' "*" arity to a CHOICE.
- // - LOOP (clone, back to this CHOICE)
- // - or, what's next
- // Size cost: N --> N + 1
- } else if (c == '*') {
- ChildrenRecognizer loop = shallowClone ();
-
- loop.patchNext (this, null);
- loop.flags |= F_LOOPNEXT;
- flags = F_LOOPHEAD;
-
- components = new Recognizer [2];
- components [0] = loop;
- // components [1] initted to null
- name = null;
- next = null;
-
-
- // Rewrite 'one-or-more' "+" arity to a SEQUENCE.
- // Basically (a)+ --> ((a),(a)*).
- // - this
- // - CHOICE
- // * LOOP (clone, back to the CHOICE)
- // * or, whatever's next
- // Size cost: N --> 2N + 1
- } else if (c == '+') {
- ChildrenRecognizer loop = deepClone ();
- ChildrenRecognizer choice;
-
- choice = new ChildrenRecognizer (consumer, type);
- loop.patchNext (choice, null);
- loop.flags |= F_LOOPNEXT;
- choice.flags = F_LOOPHEAD;
-
- choice.components = new Recognizer [2];
- choice.components [0] = loop;
- // choice.components [1] initted to null
- // choice.name, choice.next initted to null
-
- patchNext (choice, null);
- }
- }
- }
-
- return nextPos;
- }
-
- // VC: Element Valid (second clause)
- boolean acceptCharacters ()
- { return false; }
-
- // VC: Element Valid (second clause)
- Recognizer acceptElement (String type)
- throws SAXException
- {
- // NAME/SEQUENCE
- if (name != null) {
- if (name.equals (type))
- return next;
- return null;
- }
-
- // CHOICE ... optionally reporting nondeterminism we
- // run across. we won't check out every transition
- // for nondeterminism; only the ones we follow.
- Recognizer retval = null;
-
- for (int i = 0; i < components.length; i++) {
- Recognizer temp = components [i].acceptElement (type);
-
- if (temp == null)
- continue;
- else if (!warnNonDeterministic)
- return temp;
- else if (retval == null)
- retval = temp;
- else if (retval != temp)
- consumer.error ("Content model " + this.type.model
- + " is non-deterministic for " + type);
- }
- return retval;
- }
-
- // VC: Element Valid (second clause)
- boolean completed ()
- throws SAXException
- {
- // expecting a specific element
- if (name != null)
- return false;
-
- // choice, some sequences
- for (int i = 0; i < components.length; i++) {
- if (components [i].completed ())
- return true;
- }
-
- return false;
- }
-
-/** /
- // FOR DEBUGGING ... flattens the graph for printing.
-
- public String toString ()
- {
- StringBuffer buf = new StringBuffer ();
-
- // only one set of loop labels can be generated
- // at a time...
- synchronized (ANY) {
- nodeCount = 0;
-
- toString (buf, new Hashtable ());
- return buf.toString ();
- }
- }
-
- private void toString (StringBuffer buf, Hashtable table)
- {
- // When we visit a node, label and count it.
- // Nodes are never visited/counted more than once.
- // For small models labels waste space, but if arity
- // mappings were used the savings are substantial.
- // (Plus, the output can be more readily understood.)
- String temp = (String) table.get (this);
-
- if (temp != null) {
- buf.append ('{');
- buf.append (temp);
- buf.append ('}');
- return;
- } else {
- StringBuffer scratch = new StringBuffer (15);
-
- if ((flags & F_LOOPHEAD) != 0)
- scratch.append ("loop");
- else
- scratch.append ("node");
- scratch.append ('-');
- scratch.append (++nodeCount);
- temp = scratch.toString ();
-
- table.put (this, temp);
- buf.append ('[');
- buf.append (temp);
- buf.append (']');
- buf.append (':');
- }
-
- // NAME/SEQUENCE
- if (name != null) {
- // n.b. some output encodings turn some name chars into '?'
- // e.g. with Japanese names and ASCII output
- buf.append (name);
- if (components != null) // bug!
- buf.append ('$');
- if (next == null)
- buf.append (",*");
- else if (next instanceof EmptyRecognizer) // patch-to-next
- buf.append (",{}");
- else if (next instanceof ChildrenRecognizer) {
- buf.append (',');
- ((ChildrenRecognizer)next).toString (buf, table);
- } else // bug!
- buf.append (",+");
- return;
- }
-
- // CHOICE
- buf.append ("<");
- for (int i = 0; i < components.length; i++) {
- if (i != 0)
- buf.append ("|");
- if (components [i] instanceof EmptyRecognizer) {
- buf.append ("{}");
- } else if (components [i] == null) { // patch-to-next
- buf.append ('*');
- } else {
- ChildrenRecognizer r;
-
- r = (ChildrenRecognizer) components [i];
- r.toString (buf, table);
- }
- }
- buf.append (">");
- }
-/**/
- }
-}
diff --git a/libjava/gnu/xml/pipeline/WellFormednessFilter.java b/libjava/gnu/xml/pipeline/WellFormednessFilter.java
deleted file mode 100644
index ef430165203..00000000000
--- a/libjava/gnu/xml/pipeline/WellFormednessFilter.java
+++ /dev/null
@@ -1,363 +0,0 @@
-/* WellFormednessFilter.java --
- Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.pipeline;
-
-import java.util.EmptyStackException;
-import java.util.Stack;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-/**
- * This filter reports fatal exceptions in the case of event streams that
- * are not well formed. The rules currently tested include: <ul>
- *
- * <li>setDocumentLocator ... may be called only before startDocument
- *
- * <li>startDocument/endDocument ... must be paired, and all other
- * calls (except setDocumentLocator) must be nested within these.
- *
- * <li>startElement/endElement ... must be correctly paired, and
- * may never appear within CDATA sections.
- *
- * <li>comment ... can't contain "--"
- *
- * <li>character data ... can't contain "]]&gt;"
- *
- * <li>whitespace ... can't contain CR
- *
- * <li>whitespace and character data must be within an element
- *
- * <li>processing instruction ... can't contain "?&gt;" or CR
- *
- * <li>startCDATA/endCDATA ... must be correctly paired.
- *
- * </ul>
- *
- * <p> Other checks for event stream correctness may be provided in
- * the future. For example, insisting that
- * entity boundaries nest correctly,
- * namespace scopes nest correctly,
- * namespace values never contain relative URIs,
- * attributes don't have "&lt;" characters;
- * and more.
- *
- * @author David Brownell
- */
-public final class WellFormednessFilter extends EventFilter
-{
- private boolean startedDoc;
- private Stack elementStack = new Stack ();
- private boolean startedCDATA;
- private String dtdState = "before";
-
-
- /**
- * Swallows all events after performing well formedness checks.
- */
- // constructor used by PipelineFactory
- public WellFormednessFilter ()
- { this (null); }
-
-
- /**
- * Passes events through to the specified consumer, after first
- * processing them.
- */
- // constructor used by PipelineFactory
- public WellFormednessFilter (EventConsumer consumer)
- {
- super (consumer);
-
- setContentHandler (this);
- setDTDHandler (this);
-
- try {
- setProperty (LEXICAL_HANDLER, this);
- } catch (SAXException e) { /* can't happen */ }
- }
-
- /**
- * Resets state as if any preceding event stream was well formed.
- * Particularly useful if it ended through some sort of error,
- * and the endDocument call wasn't made.
- */
- public void reset ()
- {
- startedDoc = false;
- startedCDATA = false;
- elementStack.removeAllElements ();
- }
-
-
- private SAXParseException getException (String message)
- {
- SAXParseException e;
- Locator locator = getDocumentLocator ();
-
- if (locator == null)
- return new SAXParseException (message, null, null, -1, -1);
- else
- return new SAXParseException (message, locator);
- }
-
- private void fatalError (String message)
- throws SAXException
- {
- SAXParseException e = getException (message);
- ErrorHandler handler = getErrorHandler ();
-
- if (handler != null)
- handler.fatalError (e);
- throw e;
- }
-
- /**
- * Throws an exception when called after startDocument.
- *
- * @param locator the locator, to be used in error reporting or relative
- * URI resolution.
- *
- * @exception IllegalStateException when called after the document
- * has already been started
- */
- public void setDocumentLocator (Locator locator)
- {
- if (startedDoc)
- throw new IllegalStateException (
- "setDocumentLocator called after startDocument");
- super.setDocumentLocator (locator);
- }
-
- public void startDocument () throws SAXException
- {
- if (startedDoc)
- fatalError ("startDocument called more than once");
- startedDoc = true;
- startedCDATA = false;
- elementStack.removeAllElements ();
- super.startDocument ();
- }
-
- public void startElement (
- String uri, String localName,
- String qName, Attributes atts
- ) throws SAXException
- {
- if (!startedDoc)
- fatalError ("callback outside of document?");
- if ("inside".equals (dtdState))
- fatalError ("element inside DTD?");
- else
- dtdState = "after";
- if (startedCDATA)
- fatalError ("element inside CDATA section");
- if (qName == null || "".equals (qName))
- fatalError ("startElement name missing");
- elementStack.push (qName);
- super.startElement (uri, localName, qName, atts);
- }
-
- public void endElement (String uri, String localName, String qName)
- throws SAXException
- {
- if (!startedDoc)
- fatalError ("callback outside of document?");
- if (startedCDATA)
- fatalError ("element inside CDATA section");
- if (qName == null || "".equals (qName))
- fatalError ("endElement name missing");
-
- try {
- String top = (String) elementStack.pop ();
-
- if (!qName.equals (top))
- fatalError ("<" + top + " ...>...</" + qName + ">");
- // XXX could record/test namespace info
- } catch (EmptyStackException e) {
- fatalError ("endElement without startElement: </" + qName + ">");
- }
- super.endElement (uri, localName, qName);
- }
-
- public void endDocument () throws SAXException
- {
- if (!startedDoc)
- fatalError ("callback outside of document?");
- dtdState = "before";
- startedDoc = false;
- super.endDocument ();
- }
-
-
- public void startDTD (String root, String publicId, String systemId)
- throws SAXException
- {
- if (!startedDoc)
- fatalError ("callback outside of document?");
- if ("before" != dtdState)
- fatalError ("two DTDs?");
- if (!elementStack.empty ())
- fatalError ("DTD must precede root element");
- dtdState = "inside";
- super.startDTD (root, publicId, systemId);
- }
-
- public void notationDecl (String name, String publicId, String systemId)
- throws SAXException
- {
-// FIXME: not all parsers will report startDTD() ...
-// we'd rather insist we're "inside".
- if ("after" == dtdState)
- fatalError ("not inside DTD");
- super.notationDecl (name, publicId, systemId);
- }
-
- public void unparsedEntityDecl (String name,
- String publicId, String systemId, String notationName)
- throws SAXException
- {
-// FIXME: not all parsers will report startDTD() ...
-// we'd rather insist we're "inside".
- if ("after" == dtdState)
- fatalError ("not inside DTD");
- super.unparsedEntityDecl (name, publicId, systemId, notationName);
- }
-
- // FIXME: add the four DeclHandler calls too
-
- public void endDTD ()
- throws SAXException
- {
- if (!startedDoc)
- fatalError ("callback outside of document?");
- if ("inside" != dtdState)
- fatalError ("DTD ends without start?");
- dtdState = "after";
- super.endDTD ();
- }
-
- public void characters (char ch [], int start, int length)
- throws SAXException
- {
- int here = start, end = start + length;
- if (elementStack.empty ())
- fatalError ("characters must be in an element");
- while (here < end) {
- if (ch [here++] != ']')
- continue;
- if (here == end) // potential problem ...
- continue;
- if (ch [here++] != ']')
- continue;
- if (here == end) // potential problem ...
- continue;
- if (ch [here++] == '>')
- fatalError ("character data can't contain \"]]>\"");
- }
- super.characters (ch, start, length);
- }
-
- public void ignorableWhitespace (char ch [], int start, int length)
- throws SAXException
- {
- int here = start, end = start + length;
- if (elementStack.empty ())
- fatalError ("characters must be in an element");
- while (here < end) {
- if (ch [here++] == '\r')
- fatalError ("whitespace can't contain CR");
- }
- super.ignorableWhitespace (ch, start, length);
- }
-
- public void processingInstruction (String target, String data)
- throws SAXException
- {
- if (data.indexOf ('\r') > 0)
- fatalError ("PIs can't contain CR");
- if (data.indexOf ("?>") > 0)
- fatalError ("PIs can't contain \"?>\"");
- }
-
- public void comment (char ch [], int start, int length)
- throws SAXException
- {
- if (!startedDoc)
- fatalError ("callback outside of document?");
- if (startedCDATA)
- fatalError ("comments can't nest in CDATA");
- int here = start, end = start + length;
- while (here < end) {
- if (ch [here] == '\r')
- fatalError ("comments can't contain CR");
- if (ch [here++] != '-')
- continue;
- if (here == end)
- fatalError ("comments can't end with \"--->\"");
- if (ch [here++] == '-')
- fatalError ("comments can't contain \"--\"");
- }
- super.comment (ch, start, length);
- }
-
- public void startCDATA ()
- throws SAXException
- {
- if (!startedDoc)
- fatalError ("callback outside of document?");
- if (startedCDATA)
- fatalError ("CDATA starts can't nest");
- startedCDATA = true;
- super.startCDATA ();
- }
-
- public void endCDATA ()
- throws SAXException
- {
- if (!startedDoc)
- fatalError ("callback outside of document?");
- if (!startedCDATA)
- fatalError ("CDATA end without start?");
- startedCDATA = false;
- super.endCDATA ();
- }
-}
diff --git a/libjava/gnu/xml/pipeline/XIncludeFilter.java b/libjava/gnu/xml/pipeline/XIncludeFilter.java
deleted file mode 100644
index 02607a4e06d..00000000000
--- a/libjava/gnu/xml/pipeline/XIncludeFilter.java
+++ /dev/null
@@ -1,579 +0,0 @@
-/* XIncludeFilter.java --
- Copyright (C) 2001,2002 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.pipeline;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Hashtable;
-import java.util.Stack;
-import java.util.Vector;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.XMLReaderFactory;
-
-import gnu.xml.util.Resolver;
-
-
-
-/**
- * Filter to process an XPointer-free subset of
- * <a href="http://www.w3.org/TR/xinclude">XInclude</a>, supporting its
- * use as a kind of replacement for parsed general entities.
- * XInclude works much like the <code>#include</code> of C/C++ but
- * works for XML documents as well as unparsed text files.
- * Restrictions from the 17-Sept-2002 CR draft of XInclude are as follows:
- *
- * <ul>
- *
- * <li> URIs must not include fragment identifiers.
- * The CR specifies support for XPointer <em>element()</em> fragment IDs,
- * which is not currently implemented here.
- *
- * <li> <em>xi:fallback</em> handling of resource errors is not
- * currently supported.
- *
- * <li> DTDs are not supported in included files, since the SAX DTD events
- * must have completely preceded any included file.
- * The CR explicitly allows the DTD related portions of the infoset to
- * grow as an effect of including XML documents.
- *
- * <li> <em>xml:base</em> fixup isn't done.
- *
- * </ul>
- *
- * <p> XML documents that are included will normally be processed using
- * the default SAX namespace rules, meaning that prefix information may
- * be discarded. This may be changed with {@link #setSavingPrefixes
- * setSavingPrefixes()}. <em>You are strongly advised to do this.</em>
- *
- * <p> Note that XInclude allows highly incompatible implementations, which
- * are specialized to handle application-specific infoset extensions. Some
- * such implementations can be implemented by subclassing this one, but
- * they may only be substituted in applications at "user option".
- *
- * <p>TBD: "IURI" handling.
- *
- * @author David Brownell
- */
-public class XIncludeFilter extends EventFilter implements Locator
-{
- private Hashtable extEntities = new Hashtable (5, 5);
- private int ignoreCount;
- private Stack uris = new Stack ();
- private Locator locator;
- private Vector inclusions = new Vector (5, 5);
- private boolean savingPrefixes;
-
- /**
- */
- public XIncludeFilter (EventConsumer next)
- throws SAXException
- {
- super (next);
- setContentHandler (this);
- // DTDHandler callbacks pass straight through
- setProperty (DECL_HANDLER, this);
- setProperty (LEXICAL_HANDLER, this);
- }
-
- private void fatal (SAXParseException e) throws SAXException
- {
- ErrorHandler eh;
-
- eh = getErrorHandler ();
- if (eh != null)
- eh.fatalError (e);
- throw e;
- }
-
- /**
- * Passes "this" down the filter chain as a proxy locator.
- */
- public void setDocumentLocator (Locator locator)
- {
- this.locator = locator;
- super.setDocumentLocator (this);
- }
-
- /** Used for proxy locator; do not call directly. */
- public String getSystemId ()
- { return (locator == null) ? null : locator.getSystemId (); }
- /** Used for proxy locator; do not call directly. */
- public String getPublicId ()
- { return (locator == null) ? null : locator.getPublicId (); }
- /** Used for proxy locator; do not call directly. */
- public int getLineNumber ()
- { return (locator == null) ? -1 : locator.getLineNumber (); }
- /** Used for proxy locator; do not call directly. */
- public int getColumnNumber ()
- { return (locator == null) ? -1 : locator.getColumnNumber (); }
-
- /**
- * Assigns the flag controlling the setting of the SAX2
- * <em>namespace-prefixes</em> flag.
- */
- public void setSavingPrefixes (boolean flag)
- { savingPrefixes = flag; }
-
- /**
- * Returns the flag controlling the setting of the SAX2
- * <em>namespace-prefixes</em> flag when parsing included documents.
- * The default value is the SAX2 default (false), which discards
- * information that can be useful.
- */
- public boolean isSavingPrefixes ()
- { return savingPrefixes; }
-
- //
- // Two mechanisms are interacting here.
- //
- // - XML Base implies a stack of base URIs, updated both by
- // "real entity" boundaries and element boundaries.
- //
- // - Active "Real Entities" (for document and general entities,
- // and by xincluded files) are tracked to prevent circular
- // inclusions.
- //
- private String addMarker (String uri)
- throws SAXException
- {
- if (locator != null && locator.getSystemId () != null)
- uri = locator.getSystemId ();
-
- // guard against InputSource objects without system IDs
- if (uri == null)
- fatal (new SAXParseException ("Entity URI is unknown", locator));
-
- try {
- URL url = new URL (uri);
-
- uri = url.toString ();
- if (inclusions.contains (uri))
- fatal (new SAXParseException (
- "XInclude, circular inclusion", locator));
- inclusions.addElement (uri);
- uris.push (url);
- } catch (IOException e) {
- // guard against illegal relative URIs (Xerces)
- fatal (new SAXParseException ("parser bug: relative URI",
- locator, e));
- }
- return uri;
- }
-
- private void pop (String uri)
- {
- inclusions.removeElement (uri);
- uris.pop ();
- }
-
- //
- // Document entity boundaries get both treatments.
- //
- public void startDocument () throws SAXException
- {
- ignoreCount = 0;
- addMarker (null);
- super.startDocument ();
- }
-
- public void endDocument () throws SAXException
- {
- inclusions.setSize (0);
- extEntities.clear ();
- uris.setSize (0);
- super.endDocument ();
- }
-
- //
- // External general entity boundaries get both treatments.
- //
- public void externalEntityDecl (String name,
- String publicId, String systemId)
- throws SAXException
- {
- if (name.charAt (0) == '%')
- return;
- try {
- URL url = new URL (locator.getSystemId ());
- systemId = new URL (url, systemId).toString ();
- } catch (IOException e) {
- // what could we do?
- }
- extEntities.put (name, systemId);
- }
-
- public void startEntity (String name)
- throws SAXException
- {
- if (ignoreCount != 0) {
- ignoreCount++;
- return;
- }
-
- String uri = (String) extEntities.get (name);
- if (uri != null)
- addMarker (uri);
- super.startEntity (name);
- }
-
- public void endEntity (String name)
- throws SAXException
- {
- if (ignoreCount != 0) {
- if (--ignoreCount != 0)
- return;
- }
-
- String uri = (String) extEntities.get (name);
-
- if (uri != null)
- pop (uri);
- super.endEntity (name);
- }
-
- //
- // element boundaries only affect the base URI stack,
- // unless they're XInclude elements.
- //
- public void
- startElement (String uri, String localName, String qName, Attributes atts)
- throws SAXException
- {
- if (ignoreCount != 0) {
- ignoreCount++;
- return;
- }
-
- URL baseURI = (URL) uris.peek ();
- String base;
-
- base = atts.getValue ("http://www.w3.org/XML/1998/namespace", "base");
- if (base == null)
- uris.push (baseURI);
- else {
- URL url;
-
- if (base.indexOf ('#') != -1)
- fatal (new SAXParseException (
- "xml:base with fragment: " + base,
- locator));
-
- try {
- baseURI = new URL (baseURI, base);
- uris.push (baseURI);
- } catch (Exception e) {
- fatal (new SAXParseException (
- "xml:base with illegal uri: " + base,
- locator, e));
- }
- }
-
- if (!"http://www.w3.org/2001/XInclude".equals (uri)) {
- super.startElement (uri, localName, qName, atts);
- return;
- }
-
- if ("include".equals (localName)) {
- String href = atts.getValue ("href");
- String parse = atts.getValue ("parse");
- String encoding = atts.getValue ("encoding");
- URL url = (URL) uris.peek ();
- SAXParseException x = null;
-
- if (href == null)
- fatal (new SAXParseException (
- "XInclude missing href",
- locator));
- if (href.indexOf ('#') != -1)
- fatal (new SAXParseException (
- "XInclude with fragment: " + href,
- locator));
-
- if (parse == null || "xml".equals (parse))
- x = xinclude (url, href);
- else if ("text".equals (parse))
- x = readText (url, href, encoding);
- else
- fatal (new SAXParseException (
- "unknown XInclude parsing mode: " + parse,
- locator));
- if (x == null) {
- // strip out all child content
- ignoreCount++;
- return;
- }
-
- // FIXME the 17-Sept-2002 CR of XInclude says we "must"
- // use xi:fallback elements to handle resource errors,
- // if they exist.
- fatal (x);
-
- } else if ("fallback".equals (localName)) {
- fatal (new SAXParseException (
- "illegal top level XInclude 'fallback' element",
- locator));
- } else {
- ErrorHandler eh = getErrorHandler ();
-
- // CR doesn't say this is an error
- if (eh != null)
- eh.warning (new SAXParseException (
- "unrecognized toplevel XInclude element: " + localName,
- locator));
- super.startElement (uri, localName, qName, atts);
- }
- }
-
- public void endElement (String uri, String localName, String qName)
- throws SAXException
- {
- if (ignoreCount != 0) {
- if (--ignoreCount != 0)
- return;
- }
-
- uris.pop ();
- if (!("http://www.w3.org/2001/XInclude".equals (uri)
- && "include".equals (localName)))
- super.endElement (uri, localName, qName);
- }
-
- //
- // ignore all content within non-empty xi:include elements
- //
- public void characters (char ch [], int start, int length)
- throws SAXException
- {
- if (ignoreCount == 0)
- super.characters (ch, start, length);
- }
-
- public void processingInstruction (String target, String value)
- throws SAXException
- {
- if (ignoreCount == 0)
- super.processingInstruction (target, value);
- }
-
- public void ignorableWhitespace (char ch [], int start, int length)
- throws SAXException
- {
- if (ignoreCount == 0)
- super.ignorableWhitespace (ch, start, length);
- }
-
- public void comment (char ch [], int start, int length)
- throws SAXException
- {
- if (ignoreCount == 0)
- super.comment (ch, start, length);
- }
-
- public void startCDATA () throws SAXException
- {
- if (ignoreCount == 0)
- super.startCDATA ();
- }
-
- public void endCDATA () throws SAXException
- {
- if (ignoreCount == 0)
- super.endCDATA ();
- }
-
- public void startPrefixMapping (String prefix, String uri)
- throws SAXException
- {
- if (ignoreCount == 0)
- super.startPrefixMapping (prefix, uri);
- }
-
- public void endPrefixMapping (String prefix) throws SAXException
- {
- if (ignoreCount == 0)
- super.endPrefixMapping (prefix);
- }
-
- public void skippedEntity (String name) throws SAXException
- {
- if (ignoreCount == 0)
- super.skippedEntity (name);
- }
-
- // JDK 1.1 seems to need it to be done this way, sigh
- void setLocator (Locator l) { locator = l; }
- Locator getLocator () { return locator; }
-
-
- //
- // for XIncluded entities, manage the current locator and
- // filter out events that would be incorrect to report
- //
- private class Scrubber extends EventFilter
- {
- Scrubber (EventFilter f)
- throws SAXException
- {
- // delegation passes to next in chain
- super (f);
-
- // process all content events
- super.setContentHandler (this);
- super.setProperty (LEXICAL_HANDLER, this);
-
- // drop all DTD events
- super.setDTDHandler (null);
- super.setProperty (DECL_HANDLER, null);
- }
-
- // maintain proxy locator
- // only one startDocument()/endDocument() pair per event stream
- public void setDocumentLocator (Locator l)
- { setLocator (l); }
- public void startDocument ()
- { }
- public void endDocument ()
- { }
-
- private void reject (String message) throws SAXException
- { fatal (new SAXParseException (message, getLocator ())); }
-
- // only the DTD from the "base document" gets reported
- public void startDTD (String root, String publicId, String systemId)
- throws SAXException
- { reject ("XIncluded DTD: " + systemId); }
- public void endDTD ()
- throws SAXException
- { reject ("XIncluded DTD"); }
- // ... so this should never happen
- public void skippedEntity (String name) throws SAXException
- { reject ("XInclude skipped entity: " + name); }
-
- // since we rejected DTDs, only builtin entities can be reported
- }
-
- // <xi:include parse='xml' ...>
- // relative to the base URI passed
- private SAXParseException xinclude (URL url, String href)
- throws SAXException
- {
- XMLReader helper;
- Scrubber scrubber;
- Locator savedLocator = locator;
-
- // start with a parser acting just like our input
- // modulo DTD-ish stuff (validation flag, entity resolver)
- helper = XMLReaderFactory.createXMLReader ();
- helper.setErrorHandler (getErrorHandler ());
- helper.setFeature (FEATURE_URI + "namespace-prefixes", true);
-
- // Set up the proxy locator and event filter.
- scrubber = new Scrubber (this);
- locator = null;
- bind (helper, scrubber);
-
- // Merge the included document, except its DTD
- try {
- url = new URL (url, href);
- href = url.toString ();
-
- if (inclusions.contains (href))
- fatal (new SAXParseException (
- "XInclude, circular inclusion", locator));
-
- inclusions.addElement (href);
- uris.push (url);
- helper.parse (new InputSource (href));
- return null;
- } catch (java.io.IOException e) {
- return new SAXParseException (href, locator, e);
- } finally {
- pop (href);
- locator = savedLocator;
- }
- }
-
- // <xi:include parse='text' ...>
- // relative to the base URI passed
- private SAXParseException readText (URL url, String href, String encoding)
- throws SAXException
- {
- InputStream in = null;
-
- try {
- URLConnection conn;
- InputStreamReader reader;
- char buf [] = new char [4096];
- int count;
-
- url = new URL (url, href);
- conn = url.openConnection ();
- in = conn.getInputStream ();
- if (encoding == null)
- encoding = Resolver.getEncoding (conn.getContentType ());
- if (encoding == null) {
- ErrorHandler eh = getErrorHandler ();
- if (eh != null)
- eh.warning (new SAXParseException (
- "guessing text encoding for URL: " + url,
- locator));
- reader = new InputStreamReader (in);
- } else
- reader = new InputStreamReader (in, encoding);
-
- while ((count = reader.read (buf, 0, buf.length)) != -1)
- super.characters (buf, 0, count);
- in.close ();
- return null;
- } catch (IOException e) {
- return new SAXParseException (
- "can't XInclude text",
- locator, e);
- }
- }
-}
diff --git a/libjava/gnu/xml/pipeline/XsltFilter.java b/libjava/gnu/xml/pipeline/XsltFilter.java
deleted file mode 100644
index 0a1872c5a80..00000000000
--- a/libjava/gnu/xml/pipeline/XsltFilter.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/* XsltFilter.java --
- Copyright (C) 2001 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.pipeline;
-
-import java.io.IOException;
-
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.sax.*;
-import javax.xml.transform.stream.StreamSource;
-
-import org.xml.sax.SAXException;
-import org.xml.sax.ext.LexicalHandler;
-
-
-/**
- * Packages an XSLT transform as a pipeline component.
- * Note that all DTD events (callbacks to DeclHandler and DTDHandler
- * interfaces) are discarded, although XSLT transforms may be set up to
- * use the LexicalHandler to write DTDs with only an external subset.
- * Not every XSLT engine will necessarily be usable with this filter,
- * but current versions of
- * <a href="http://saxon.sourceforge.net">SAXON</a> and
- * <a href="http://xml.apache.org/xalan-j">Xalan</a> should work well.
- *
- * @see TransformerFactory
- *
- * @author David Brownell
- */
-final public class XsltFilter extends EventFilter
-{
- /**
- * Creates a filter that performs the specified transform.
- * Uses the JAXP 1.1 interfaces to access the default XSLT
- * engine configured for in the current execution context,
- * and parses the stylesheet without custom EntityResolver
- * or ErrorHandler support.
- *
- * @param stylesheet URI for the stylesheet specifying the
- * XSLT transform
- * @param next provides the ContentHandler and LexicalHandler
- * to receive XSLT output.
- * @exception SAXException if the stylesheet can't be parsed
- * @exception IOException if there are difficulties
- * bootstrapping the XSLT engine, such as it not supporting
- * SAX well enough to use this way.
- */
- public XsltFilter (String stylesheet, EventConsumer next)
- throws SAXException, IOException
- {
- // First, get a transformer with the stylesheet preloaded
- TransformerFactory tf = null;
- TransformerHandler th;
-
- try {
- SAXTransformerFactory stf;
-
- tf = TransformerFactory.newInstance ();
- if (!tf.getFeature (SAXTransformerFactory.FEATURE) // sax inputs
- || !tf.getFeature (SAXResult.FEATURE) // sax outputs
- || !tf.getFeature (StreamSource.FEATURE) // stylesheet
- )
- throw new IOException ("XSLT factory ("
- + tf.getClass ().getName ()
- + ") does not support SAX");
- stf = (SAXTransformerFactory) tf;
- th = stf.newTransformerHandler (new StreamSource (stylesheet));
- } catch (TransformerConfigurationException e) {
- throw new IOException ("XSLT factory ("
- + (tf == null
- ? "none available"
- : tf.getClass ().getName ())
- + ") configuration error, "
- + e.getMessage ()
- );
- }
-
- // Hook its outputs up to the pipeline ...
- SAXResult out = new SAXResult ();
-
- out.setHandler (next.getContentHandler ());
- try {
- LexicalHandler lh;
- lh = (LexicalHandler) next.getProperty (LEXICAL_HANDLER);
- out.setLexicalHandler (lh);
- } catch (Exception e) {
- // ignore
- }
- th.setResult (out);
-
- // ... and make sure its inputs look like ours.
- setContentHandler (th);
- setProperty (LEXICAL_HANDLER, th);
- }
-}
diff --git a/libjava/gnu/xml/transform/AbstractNumberNode.java b/libjava/gnu/xml/transform/AbstractNumberNode.java
deleted file mode 100644
index 01c2dbb83d8..00000000000
--- a/libjava/gnu/xml/transform/AbstractNumberNode.java
+++ /dev/null
@@ -1,321 +0,0 @@
-/* AbstractNumberNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-import gnu.xml.xpath.Expr;
-
-/**
- * A template node representing the XSL <code>number</code> instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-abstract class AbstractNumberNode
- extends TemplateNode
-{
-
- static final int ALPHABETIC = 0;
- static final int TRADITIONAL = 1;
-
- final TemplateNode format;
- final String lang;
- final int letterValue;
- final String groupingSeparator;
- final int groupingSize;
-
- AbstractNumberNode(TemplateNode children, TemplateNode next,
- TemplateNode format, String lang,
- int letterValue, String groupingSeparator,
- int groupingSize)
- {
- super(children, next);
- this.format = format;
- this.lang = lang;
- this.letterValue = letterValue;
- this.groupingSeparator = groupingSeparator;
- this.groupingSize = groupingSize;
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- Document doc = (parent instanceof Document) ? (Document) parent :
- parent.getOwnerDocument();
- DocumentFragment fragment = doc.createDocumentFragment();
- format.apply(stylesheet, mode, context, pos, len, fragment, null);
- String f = Expr._string(context, Collections.singleton(fragment));
- String value = format(f, compute(stylesheet, context, pos, len));
- Text text = doc.createTextNode(value);
- if (nextSibling != null)
- {
- parent.insertBefore(text, nextSibling);
- }
- else
- {
- parent.appendChild(text);
- }
- // xsl:number doesn't process children
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- String format(String format, int[] number)
- {
- if (number.length == 0)
- {
- return "";
- }
- int start = 0, end = 0, len = format.length(); // region of format
- // Tokenize
- List tokens = new ArrayList((number.length * 2) + 1);
- List types = new ArrayList(tokens.size());
- while (end < len)
- {
- while (end < len && !isAlphanumeric(format.charAt(end)))
- {
- end++;
- }
- if (end > start)
- {
- tokens.add(format.substring(start, end));
- types.add(Boolean.FALSE);
- }
- start = end;
- while (end < len && isAlphanumeric(format.charAt(end)))
- {
- end++;
- }
- if (end > start)
- {
- tokens.add(format.substring(start, end));
- types.add(Boolean.TRUE);
- }
- start = end;
- }
- // Process tokens
- StringBuffer buf = new StringBuffer();
- len = tokens.size();
- int pos = 0;
- for (int i = 0; i < len; i++)
- {
- String token = (i < 0) ? "." : (String) tokens.get(i);
- boolean alpha = (i < 0) ? true :
- ((Boolean) types.get(i)).booleanValue();
- if (!alpha)
- {
- buf.append(token);
- }
- else
- {
- if (pos < number.length)
- {
- format(buf, number[pos++], token);
- if (((i + 1 == len) || (i + 2 == len)) &&
- (pos < number.length))
- {
- // More numbers than tokens, reuse last token
- i -= 2;
- }
- }
- if (pos == number.length && i < (len - 2))
- {
- // No more numbers. Skip to the end...
- i = len - 2;
- if (((Boolean) types.get(i + 1)).booleanValue())
- {
- // number formatting token, ignore
- i++;
- }
- }
- }
- }
- //System.err.println("format: '"+format+"' "+asList(number)+" = '"+buf.toString()+"'");
- return buf.toString();
- }
-
- /*List asList(int[] number)
- {
- List l = new ArrayList();
- for (int i = 0; i < number.length; i++)
- l.add(new Integer(number[i]));
- return l;
- }*/
-
- void format(StringBuffer buf, int number, String formatToken)
- {
- int len = formatToken.length();
- char c = formatToken.charAt(len - 1);
- if (Character.digit(c, 10) == 1)
- {
- // Check preceding characters
- for (int i = len - 2; i >= 0; i--)
- {
- if (formatToken.charAt(i) != (c - 1))
- {
- format(buf, number, "1");
- return;
- }
- }
- // Decimal representation
- String val = Integer.toString(number);
- for (int d = len - val.length(); d > 0; d--)
- {
- buf.append('0');
- }
- buf.append(val);
- }
- else if ("A".equals(formatToken))
- {
- buf.append(alphabetic('@', number));
- }
- else if ("a".equals(formatToken))
- {
- buf.append(alphabetic('`', number));
- }
- else if ("i".equals(formatToken))
- {
- buf.append(roman(false, number));
- }
- else if ("I".equals(formatToken))
- {
- buf.append(roman(true, number));
- }
- else
- {
- // Unknown numbering sequence
- format(buf, number, "1");
- }
- }
-
- static final boolean isAlphanumeric(char c)
- {
- switch (Character.getType(c))
- {
- case Character.DECIMAL_DIGIT_NUMBER: // Nd
- case Character.LETTER_NUMBER: // Nl
- case Character.OTHER_NUMBER: // No
- case Character.UPPERCASE_LETTER: // Lu
- case Character.LOWERCASE_LETTER: // Ll
- case Character.TITLECASE_LETTER: // Lt
- case Character.MODIFIER_LETTER: // Lm
- case Character.OTHER_LETTER: // Lo
- return true;
- default:
- return false;
- }
- }
-
- static final String alphabetic(char offset, int number)
- {
- StringBuffer buf = new StringBuffer();
- while (number > 0)
- {
- int r = number % 26;
- number = number / 26;
- buf.insert(0, (char) (offset + r));
- }
- return buf.toString();
- }
-
- static final int[] roman_numbers = {1, 5, 10, 50, 100, 500, 1000};
- static final char[] roman_chars = {'i', 'v', 'x', 'l', 'c', 'd', 'm'};
-
- static final String roman(boolean upper, int number)
- {
- StringBuffer buf = new StringBuffer();
- for (int pos = roman_numbers.length - 1; pos >= 0; pos -= 2)
- {
- int f = number / roman_numbers[pos];
- if (f != 0)
- {
- number = number % (f * roman_numbers[pos]);
- }
- if (f > 4 && f < 9)
- {
- buf.append(roman_chars[pos + 1]);
- f -= 5;
- }
- if (f == 4)
- {
- buf.append(roman_chars[pos]);
- buf.append(roman_chars[pos + 1]);
- }
- else if (f == 9)
- {
- buf.append(roman_chars[pos]);
- buf.append(roman_chars[pos + 2]);
- }
- else
- {
- for (; f > 0; f--)
- {
- buf.append(roman_chars[pos]);
- }
- }
- }
- return upper ? buf.toString().toUpperCase() : buf.toString();
- }
-
- abstract int[] compute(Stylesheet stylesheet, Node context, int pos, int len)
- throws TransformerException;
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append("format=");
- buf.append(format);
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/ApplyImportsNode.java b/libjava/gnu/xml/transform/ApplyImportsNode.java
deleted file mode 100644
index 4d171b7acf6..00000000000
--- a/libjava/gnu/xml/transform/ApplyImportsNode.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/* ApplyImportsNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Node;
-
-/**
- * A template node representing an XSLT <code>apply-imports</code> instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class ApplyImportsNode
- extends TemplateNode
-{
-
- ApplyImportsNode(TemplateNode children, TemplateNode next)
- {
- super(children, next);
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new ApplyImportsNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet));
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- TemplateNode t = stylesheet.getTemplate(mode, context, true);
- if (t != null)
- {
- t.apply(stylesheet, mode, context, pos, len,
- parent, nextSibling);
- }
- if (next != null)
- {
- next.apply(stylesheet, mode, context, pos, len,
- parent, nextSibling);
- }
- }
-
-}
-
diff --git a/libjava/gnu/xml/transform/ApplyTemplatesNode.java b/libjava/gnu/xml/transform/ApplyTemplatesNode.java
deleted file mode 100644
index bf267212013..00000000000
--- a/libjava/gnu/xml/transform/ApplyTemplatesNode.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/* ApplyTemplatesNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-
-/**
- * A template node representing the XSL <code>apply-templates</code>
- * instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class ApplyTemplatesNode
- extends TemplateNode
-{
-
- final Expr select;
- final QName mode;
- final List sortKeys;
- final List withParams;
- final boolean isDefault;
-
- ApplyTemplatesNode(TemplateNode children, TemplateNode next,
- Expr select, QName mode,
- List sortKeys, List withParams, boolean isDefault)
- {
- super(children, next);
- this.select = select;
- this.mode = mode;
- this.sortKeys = sortKeys;
- this.withParams = withParams;
- this.isDefault = isDefault;
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- int len = sortKeys.size();
- List sortKeys2 = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- sortKeys2.add(((Key) sortKeys.get(i)).clone(stylesheet));
- }
- len = withParams.size();
- List withParams2 = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- withParams2.add(((WithParam) withParams.get(i)).clone(stylesheet));
- }
- return new ApplyTemplatesNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- select.clone(stylesheet),
- mode, sortKeys2, withParams2, isDefault);
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- Object ret = select.evaluate(context, pos, len);
- if (ret != null && ret instanceof Collection)
- {
- if (withParams != null)
- {
- // push the parameter context
- stylesheet.bindings.push(false);
- // set the parameters
- for (Iterator i = withParams.iterator(); i.hasNext(); )
- {
- WithParam p = (WithParam) i.next();
- Object value = p.getValue(stylesheet, mode, context, pos, len);
- stylesheet.bindings.set(p.name, value, false);
- }
- }
- Collection ns = (Collection) ret;
- List nodes = new ArrayList(ns);
- if (sortKeys != null)
- {
- for (Iterator i = sortKeys.iterator(); i.hasNext(); )
- {
- SortKey sortKey = (SortKey) i.next();
- sortKey.init(stylesheet, mode, context, pos, len, parent,
- nextSibling);
- }
- Collections.sort(nodes, new XSLComparator(sortKeys));
- }
- else
- {
- Collections.sort(nodes, documentOrderComparator);
- }
- int l = nodes.size();
- QName effectiveMode = isDefault ? mode : this.mode;
- for (int i = 0; i < l; i++)
- {
- Node node = (Node) nodes.get(i);
- TemplateNode t = stylesheet.getTemplate(effectiveMode, node,
- false);
- if (t != null)
- {
- if (stylesheet.debug)
- {
- System.err.println("Applying " + t);
- }
- stylesheet.current = node;
- t.apply(stylesheet, effectiveMode, node, i + 1, l,
- parent, nextSibling);
- }
- }
- if (withParams != null)
- {
- // pop the variable context
- stylesheet.bindings.pop(false);
- }
- }
- // apply-templates doesn't have processable children
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- boolean o = false;
- if (select != null)
- {
- buf.append("select=");
- buf.append(select);
- o = true;
- }
- if (mode != null)
- {
- if (o)
- {
- buf.append(',');
- }
- buf.append("mode=");
- buf.append(mode);
- }
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/AttributeNode.java b/libjava/gnu/xml/transform/AttributeNode.java
deleted file mode 100644
index c26a7f6f52b..00000000000
--- a/libjava/gnu/xml/transform/AttributeNode.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/* AttributeNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.XMLConstants;
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.Attr;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-
-/**
- * A template node representing an XSL <code>attribute</code> instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class AttributeNode
- extends TemplateNode
-{
-
- final TemplateNode name;
- final TemplateNode namespace;
- final Node source;
-
- AttributeNode(TemplateNode children, TemplateNode next, TemplateNode name,
- TemplateNode namespace, Node source)
- {
- super(children, next);
- this.name = name;
- this.namespace = namespace;
- this.source = source;
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new AttributeNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null : next.clone(stylesheet),
- name.clone(stylesheet),
- (namespace == null) ? null :
- namespace.clone(stylesheet),
- source);
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- Document doc = (parent instanceof Document) ? (Document) parent :
- parent.getOwnerDocument();
- // Create a document fragment to hold the name
- DocumentFragment fragment = doc.createDocumentFragment();
- // Apply name to the fragment
- name.apply(stylesheet, mode,
- context, pos, len,
- fragment, null);
- // Use XPath string-value of fragment
- String nameValue = Expr.stringValue(fragment);
-
- String namespaceValue = null;
- if (namespace != null)
- {
- // Create a document fragment to hold the namespace
- fragment = doc.createDocumentFragment();
- // Apply namespace to the fragment
- namespace.apply(stylesheet, mode,
- context, pos, len,
- fragment, null);
- // Use XPath string-value of fragment
- namespaceValue = Expr.stringValue(fragment);
- if (namespaceValue.length() == 0)
- {
- namespaceValue = null;
- }
- }
-
- String prefix = getPrefix(nameValue);
- if (namespaceValue == null)
- {
- if (prefix != null)
- {
- if (XMLConstants.XML_NS_PREFIX.equals(prefix))
- {
- namespaceValue = XMLConstants.XML_NS_URI;
- }
- else
- {
- // Resolve namespace for this prefix
- namespaceValue = source.lookupNamespaceURI(prefix);
- }
- }
- }
- else
- {
- if (prefix != null)
- {
- String ns2 = source.lookupNamespaceURI(prefix);
- if (ns2 != null && !ns2.equals(namespaceValue))
- {
- // prefix clashes, reset it
- prefix = null;
- int ci = nameValue.indexOf(':');
- nameValue = nameValue.substring(ci + 1);
- }
- }
- }
- if (prefix == null)
- {
- // Resolve prefix for this namespace
- prefix = source.lookupPrefix(namespaceValue);
- if (prefix != null)
- {
- nameValue = prefix + ":" + nameValue;
- }
- else
- {
- if (namespaceValue != null)
- {
- // Must invent a prefix
- prefix = inventPrefix(parent);
- nameValue = prefix + ":" + nameValue;
- }
- }
- }
- NamedNodeMap attrs = parent.getAttributes();
- boolean insert = true;
- if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceValue) ||
- XMLConstants.XMLNS_ATTRIBUTE.equals(nameValue) ||
- nameValue.startsWith("xmlns:"))
- {
- // Namespace declaration, do not output
- insert = false;
- }
- if (prefix != null && namespaceValue == null)
- {
- // Not a QName
- insert = false;
- }
- if (parent.getNodeType() == Node.ELEMENT_NODE &&
- parent.getFirstChild() != null)
- {
- // XSLT 7.1.3 Adding an attribute to an element after children have
- // been added to it is an error
- insert = false;
- }
- if (insert)
- {
- // Insert attribute
- Attr attr = (namespaceValue != null) ?
- doc.createAttributeNS(namespaceValue, nameValue) :
- doc.createAttribute(nameValue);
- if (attrs != null)
- {
- if (namespace != null)
- {
- attrs.setNamedItemNS(attr);
- }
- else
- {
- attrs.setNamedItem(attr);
- }
- }
- if (children != null)
- {
- children.apply(stylesheet, mode,
- context, pos, len,
- attr, null);
- }
- }
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- final String getPrefix(String name)
- {
- int ci = name.indexOf(':');
- return (ci == -1) ? null : name.substring(0, ci);
- }
-
- final String inventPrefix(Node parent)
- {
- String base = "ns";
- int count = 0;
- String ret = base + Integer.toString(count);
- while (parent.lookupNamespaceURI(ret) != null)
- {
- count++;
- ret = base + Integer.toString(count);
- }
- return ret;
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append("name=");
- buf.append(name);
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/AttributeSet.java b/libjava/gnu/xml/transform/AttributeSet.java
deleted file mode 100644
index 3ece9c83f5e..00000000000
--- a/libjava/gnu/xml/transform/AttributeSet.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/* AttributeSet.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-/**
- * An attribute-set entry in a stylesheet.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class AttributeSet
-{
-
- final TemplateNode children;
- final String name;
- final String uas;
-
- AttributeSet(TemplateNode children, String name, String uas)
- {
- this.children = children;
- this.name = name;
- this.uas = uas;
- }
-
- AttributeSet clone(Stylesheet stylesheet)
- {
- return new AttributeSet((children == null) ? null :
- children.clone(stylesheet),
- name, uas);
- }
-
-}
-
diff --git a/libjava/gnu/xml/transform/Bindings.java b/libjava/gnu/xml/transform/Bindings.java
deleted file mode 100644
index 7bea4e8231d..00000000000
--- a/libjava/gnu/xml/transform/Bindings.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/* Bindings.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Map;
-import javax.xml.namespace.QName;
-import javax.xml.xpath.XPathVariableResolver;
-import org.w3c.dom.Node;
-
-/**
- * The set of variable bindings in effect for a stylesheet.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class Bindings
- implements XPathVariableResolver, Cloneable
-{
-
- final Stylesheet stylesheet;
-
- /**
- * Global variables.
- */
- final LinkedList variables;
-
- /**
- * Parameter value stack.
- */
- final LinkedList parameters;
-
- Bindings(Stylesheet stylesheet)
- {
- this.stylesheet = stylesheet;
- variables = new LinkedList();
- parameters = new LinkedList();
- push(true);
- push(false);
- }
-
- public Object clone()
- {
- try
- {
- return (Bindings) super.clone();
- }
- catch (CloneNotSupportedException e)
- {
- throw new Error(e.getMessage());
- }
- }
-
- void push(boolean global)
- {
- if (global)
- {
- variables.addFirst(new HashMap());
- }
- else
- {
- parameters.addFirst(new HashMap());
- }
- }
-
- void pop(boolean global)
- {
- if (global)
- {
- variables.removeFirst();
- }
- else
- {
- parameters.removeFirst();
- }
- }
-
- public boolean containsKey(String name, boolean global)
- {
- Iterator i = global ? variables.iterator() : parameters.iterator();
- while (i.hasNext())
- {
- Map ctx = (Map) i.next();
- if (ctx.containsKey(name))
- {
- return true;
- }
- }
- return false;
- }
-
- public Object get(String name, Node context, int pos, int len)
- {
- //System.err.println("bindings.get: "+name);
- //System.err.println("\t"+toString());
- Object ret = null;
- for (Iterator i = variables.iterator(); i.hasNext() && ret == null; )
- {
- Map vctx = (Map) i.next();
- ret = vctx.get(name);
- }
- if (ret == null)
- {
- for (Iterator i = parameters.iterator(); i.hasNext() && ret == null; )
- {
- Map pctx = (Map) i.next();
- ret = pctx.get(name);
- }
- }
- /*if (ret instanceof Expr && context != null)
- {
- Expr expr = (Expr) ret;
- ret = expr.evaluate(context, 1, 1);
- }*/
- if (ret instanceof Node)
- {
- ret = Collections.singleton(ret);
- }
- if (ret == null)
- {
- ret = "";
- }
- //System.err.println("\tret="+ret);
- return ret;
- }
-
- void set(String name, Object value, boolean global)
- {
- if (global)
- {
- Map context = (Map) variables.getFirst();
- context.put(name, value);
- }
- else
- {
- Map context = (Map) parameters.getFirst();
- context.put(name, value);
- }
- }
-
- public Object resolveVariable(QName qName)
- {
- return get(qName.toString(), null, 1, 1);
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer();
- boolean next = false;
- Collection seen = new HashSet();
- buf.append('{');
- for (Iterator i = variables.iterator(); i.hasNext(); )
- {
- Map ctx = (Map) i.next();
- for (Iterator j = ctx.entrySet().iterator(); j.hasNext(); )
- {
- if (next)
- {
- buf.append(',');
- }
- else
- {
- next = true;
- }
- Map.Entry entry = (Map.Entry) j.next();
- Object key = entry.getKey();
- if (!seen.contains(key))
- {
- buf.append(key);
- buf.append('=');
- buf.append(entry.getValue());
- seen.add(key);
- }
- }
- }
- for (Iterator i = parameters.iterator(); i.hasNext(); )
- {
- Map ctx = (Map) i.next();
- for (Iterator j = ctx.entrySet().iterator(); j.hasNext(); )
- {
- if (next)
- {
- buf.append(',');
- }
- else
- {
- next = true;
- }
- Map.Entry entry = (Map.Entry) j.next();
- Object key = entry.getKey();
- if (!seen.contains(key))
- {
- buf.append(key);
- buf.append('=');
- buf.append(entry.getValue());
- seen.add(key);
- }
- }
- }
- buf.append('}');
- return buf.toString();
- }
-}
diff --git a/libjava/gnu/xml/transform/CallTemplateNode.java b/libjava/gnu/xml/transform/CallTemplateNode.java
deleted file mode 100644
index bb494084f7c..00000000000
--- a/libjava/gnu/xml/transform/CallTemplateNode.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/* CallTemplateNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Node;
-
-/**
- * A template node representing the XSL <code>call-template</code>
- * instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class CallTemplateNode
- extends TemplateNode
-{
-
- final QName name;
- final List withParams;
-
- CallTemplateNode(TemplateNode children, TemplateNode next,
- QName name, List withParams)
- {
- super(children, next);
- this.name = name;
- this.withParams = withParams;
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- int len = withParams.size();
- List withParams2 = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- withParams2.add(((WithParam) withParams.get(i)).clone(stylesheet));
- }
- return new CallTemplateNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- name, withParams2);
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- if (withParams != null)
- {
- // push the parameter context
- stylesheet.bindings.push(false);
- // set the parameters
- for (Iterator i = withParams.iterator(); i.hasNext(); )
- {
- WithParam p = (WithParam) i.next();
- Object value = p.getValue(stylesheet, mode, context, pos, len);
- stylesheet.bindings.set(p.name, value, false);
- }
- }
- TemplateNode t = stylesheet.getTemplate(mode, name);
- if (t != null)
- {
- t.apply(stylesheet, mode, context, pos, len,
- parent, nextSibling);
- }
- if (withParams != null)
- {
- // pop the variable context
- stylesheet.bindings.pop(false);
- }
- // call-template doesn't have processable children
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append("name=");
- buf.append(name);
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/ChooseNode.java b/libjava/gnu/xml/transform/ChooseNode.java
deleted file mode 100644
index 4a34712e43c..00000000000
--- a/libjava/gnu/xml/transform/ChooseNode.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/* ChooseNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Node;
-
-/**
- * A template node representing an XSL <code>choose</code> instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class ChooseNode
- extends TemplateNode
-{
-
- ChooseNode(TemplateNode children, TemplateNode next)
- {
- super(children, next);
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new ChooseNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet));
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- if (children != null)
- {
- children.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/CommentNode.java b/libjava/gnu/xml/transform/CommentNode.java
deleted file mode 100644
index 969555e8419..00000000000
--- a/libjava/gnu/xml/transform/CommentNode.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/* CommentNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Comment;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-
-/**
- * A template node representing the XSL <code>comment</code> instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class CommentNode
- extends TemplateNode
-{
-
- CommentNode(TemplateNode children, TemplateNode next)
- {
- super(children, next);
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new CommentNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet));
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- String value = "";
- Document doc = (parent instanceof Document) ? (Document) parent :
- parent.getOwnerDocument();
- if (children != null)
- {
- // Create a document fragment to hold the text
- DocumentFragment fragment = doc.createDocumentFragment();
- // Apply children to the fragment
- children.apply(stylesheet, mode,
- context, pos, len,
- fragment, null);
- // Use XPath string-value of fragment
- value = Expr.stringValue(fragment);
- }
- Comment comment = doc.createComment(value);
- // Insert into result tree
- if (nextSibling != null)
- {
- parent.insertBefore(comment, nextSibling);
- }
- else
- {
- parent.appendChild(comment);
- }
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/CopyNode.java b/libjava/gnu/xml/transform/CopyNode.java
deleted file mode 100644
index b2c81b725ec..00000000000
--- a/libjava/gnu/xml/transform/CopyNode.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/* CopyNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.Iterator;
-import java.util.StringTokenizer;
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Document;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
-/**
- * A template node representing the XSL <code>copy</code> instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class CopyNode
- extends TemplateNode
-{
-
- final String uas;
-
- CopyNode(TemplateNode children, TemplateNode next, String uas)
- {
- super(children, next);
- this.uas = uas;
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new CopyNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- uas);
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- Node copy = parent;
- switch (context.getNodeType())
- {
- case Node.TEXT_NODE:
- case Node.ATTRIBUTE_NODE:
- case Node.ELEMENT_NODE:
- case Node.PROCESSING_INSTRUCTION_NODE:
- case Node.COMMENT_NODE:
- Document doc = (parent instanceof Document) ? (Document) parent :
- parent.getOwnerDocument();
- copy = context.cloneNode(false);
- copy = doc.adoptNode(copy);
- if (copy.getNodeType() == Node.ATTRIBUTE_NODE)
- {
- if (parent.getFirstChild() != null)
- {
- // Ignore attempt to add attribute after children
- }
- else
- {
- NamedNodeMap attrs = parent.getAttributes();
- if (attrs != null)
- {
- attrs.setNamedItemNS(copy);
- }
- }
- }
- else
- {
- if (nextSibling != null)
- {
- parent.insertBefore(copy, nextSibling);
- }
- else
- {
- parent.appendChild(copy);
- }
- }
- }
- if (uas != null)
- {
- StringTokenizer st = new StringTokenizer(uas, " ");
- while (st.hasMoreTokens())
- {
- addAttributeSet(stylesheet, mode, context, pos, len,
- copy, null, st.nextToken());
- }
- }
- if (children != null)
- {
- children.apply(stylesheet, mode,
- context, pos, len,
- copy, null);
- }
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- void addAttributeSet(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling, String attributeSet)
- throws TransformerException
- {
- for (Iterator i = stylesheet.attributeSets.iterator(); i.hasNext(); )
- {
- AttributeSet as = (AttributeSet) i.next();
- if (!as.name.equals(attributeSet))
- {
- continue;
- }
- if (as.uas != null)
- {
- StringTokenizer st = new StringTokenizer(as.uas, " ");
- while (st.hasMoreTokens())
- {
- addAttributeSet(stylesheet, mode, context, pos, len,
- parent, nextSibling, st.nextToken());
- }
- }
- if (as.children != null)
- {
- as.children.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/CopyOfNode.java b/libjava/gnu/xml/transform/CopyOfNode.java
deleted file mode 100644
index 4e09eeffb63..00000000000
--- a/libjava/gnu/xml/transform/CopyOfNode.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/* CopyOfNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Document;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-import gnu.xml.xpath.Expr;
-
-/**
- * A template node representing an XSLT <code>copy-of</code> instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class CopyOfNode
- extends TemplateNode
-{
-
- final Expr select;
-
- CopyOfNode(TemplateNode children, TemplateNode next, Expr select)
- {
- super(children, next);
- this.select = select;
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new CopyOfNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- select.clone(stylesheet));
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- Object ret = select.evaluate(context, pos, len);
- Document doc = (parent instanceof Document) ? (Document) parent :
- parent.getOwnerDocument();
- if (ret instanceof Collection)
- {
- Collection ns = (Collection) ret;
- List list = new ArrayList(ns);
- Collections.sort(list, documentOrderComparator);
- for (Iterator i = list.iterator(); i.hasNext(); )
- {
- Node src = (Node) i.next();
- short nodeType = src.getNodeType();
- if (nodeType == Node.DOCUMENT_NODE)
- {
- // Use document element
- src = ((Document) src).getDocumentElement();
- if (src == null)
- {
- continue;
- }
- nodeType = Node.ELEMENT_NODE;
- }
- else if (nodeType == Node.ATTRIBUTE_NODE)
- {
- if (parent.getFirstChild() != null)
- {
- // Ignore attempt to add attribute after children
- continue;
- }
- }
- if (parent.getNodeType() == Node.ATTRIBUTE_NODE &&
- nodeType != Node.TEXT_NODE &&
- nodeType != Node.ENTITY_REFERENCE_NODE)
- {
- // Ignore
- continue;
- }
- Node node = src.cloneNode(true);
- node = doc.adoptNode(node);
- if (nodeType == Node.ATTRIBUTE_NODE)
- {
- NamedNodeMap attrs = parent.getAttributes();
- if (attrs != null)
- {
- attrs.setNamedItemNS(node);
- }
- }
- else
- {
- if (nextSibling != null)
- {
- parent.insertBefore(node, nextSibling);
- }
- else
- {
- parent.appendChild(node);
- }
- }
- }
- }
- else
- {
- String value = Expr._string(context, ret);
- if (value != null && value.length() > 0)
- {
- Text textNode = doc.createTextNode(value);
- if (nextSibling != null)
- {
- parent.insertBefore(textNode, nextSibling);
- }
- else
- {
- parent.appendChild(textNode);
- }
- }
- }
- // copy-of doesn't process children
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append("select=");
- buf.append(select);
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/CurrentFunction.java b/libjava/gnu/xml/transform/CurrentFunction.java
deleted file mode 100644
index 845793ac795..00000000000
--- a/libjava/gnu/xml/transform/CurrentFunction.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/* CurrentFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.Collections;
-import java.util.List;
-import javax.xml.xpath.XPathFunction;
-import javax.xml.xpath.XPathFunctionException;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-import gnu.xml.xpath.Function;
-
-/**
- * The XSLT <code>current()</code>function.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class CurrentFunction
- extends Expr
- implements Function, XPathFunction
-{
-
- final Stylesheet stylesheet;
-
- CurrentFunction(Stylesheet stylesheet)
- {
- this.stylesheet = stylesheet;
- }
-
- public Object evaluate(List args)
- throws XPathFunctionException
- {
- // We can't do anything useful here.
- // So much for the JAXP API...
- return Collections.EMPTY_SET;
- }
-
- public void setArguments(List args)
- {
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- return Collections.singleton(stylesheet.current);
- }
-
- public Expr clone(Object context)
- {
- Stylesheet s = stylesheet;
- if (context instanceof Stylesheet)
- {
- s = (Stylesheet) context;
- }
- return new CurrentFunction(s);
- }
-
- public String toString()
- {
- return "current()";
- }
-
-}
-
diff --git a/libjava/gnu/xml/transform/DOMSourceLocator.java b/libjava/gnu/xml/transform/DOMSourceLocator.java
deleted file mode 100644
index 9bc8fb1b6c8..00000000000
--- a/libjava/gnu/xml/transform/DOMSourceLocator.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/* DOMSourceLocator.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.transform.dom.DOMLocator;
-import org.w3c.dom.Node;
-
-/**
- * Simple DOMLocator implementation.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class DOMSourceLocator
- implements DOMLocator
-{
-
- final Node node;
-
- DOMSourceLocator(Node node)
- {
- this.node = node;
- }
-
- public Node getOriginatingNode()
- {
- return node;
- }
-
- public String getPublicId()
- {
- return null;
- }
-
- public String getSystemId()
- {
- return null;
- }
-
- public int getLineNumber()
- {
- return -1;
- }
-
- public int getColumnNumber()
- {
- return -1;
- }
-
-}
diff --git a/libjava/gnu/xml/transform/DocumentFunction.java b/libjava/gnu/xml/transform/DocumentFunction.java
deleted file mode 100644
index 22dac75db12..00000000000
--- a/libjava/gnu/xml/transform/DocumentFunction.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/* DocumentFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.TreeSet;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.xpath.XPathFunction;
-import javax.xml.xpath.XPathFunctionException;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Constant;
-import gnu.xml.xpath.Expr;
-import gnu.xml.xpath.Function;
-import gnu.xml.xpath.IdFunction;
-
-/**
- * The XSLT <code>document()</code>function.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class DocumentFunction
- extends Expr
- implements Function, XPathFunction
-{
-
- final Stylesheet stylesheet;
- final Node base;
- List args;
- List values;
-
- DocumentFunction(Stylesheet stylesheet, Node base)
- {
- this.stylesheet = stylesheet;
- this.base = base;
- }
-
- public Object evaluate(List args)
- throws XPathFunctionException
- {
- values = args;
- return evaluate(null, 1, 1);
- }
-
- public void setArguments(List args)
- {
- this.args = args;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- int arity = args.size();
- if (values == null)
- {
- values = new ArrayList(arity);
- for (int i = 0; i < arity; i++)
- {
- Expr arg = (Expr) args.get(i);
- values.add(arg.evaluate(context, pos, len));
- }
- }
- Object ret;
- switch (arity)
- {
- case 1:
- Object arg = values.get(0);
- if (arg instanceof Collection)
- {
- Collection ns = (Collection) arg;
- Collection acc = new TreeSet();
- for (Iterator i = ns.iterator(); i.hasNext(); )
- {
- Node node = (Node) i.next();
- String s = Expr.stringValue(node);
- acc.addAll(document(s, node.getBaseURI()));
- }
- ret = acc;
- }
- else
- {
- String s = Expr._string(context, arg);
- ret = document(s, base.getBaseURI());
- }
- break;
- case 2:
- Object arg1 = values.get(0);
- Object arg2 = values.get(1);
- if (!(arg2 instanceof Collection))
- {
- throw new RuntimeException("second argument is not a node-set");
- }
- Collection arg2ns = (Collection) arg2;
- String base2 = arg2ns.isEmpty() ? null :
- ((Node) arg2ns.iterator().next()).getBaseURI();
- if (arg1 instanceof Collection)
- {
- Collection arg1ns = (Collection) arg1;
- Collection acc = new TreeSet();
- for (Iterator i = arg1ns.iterator(); i.hasNext(); )
- {
- Node node = (Node) i.next();
- String s = Expr.stringValue(node);
- acc.addAll(document(s, base2));
- }
- ret = acc;
- }
- else
- {
- String s = Expr._string(context, arg1);
- ret = document(s, base2);
- }
- break;
- default:
- throw new RuntimeException("invalid arity");
- }
- values = null;
- return ret;
- }
-
- /**
- * The XSL <code>document</code> function.
- * @see XSLT 12.1
- * @param uri the URI from which to retrieve nodes
- * @param base the base URI for relative URIs
- */
- Collection document(String uri, String base)
- {
- if ("".equals(uri) || uri == null)
- {
- uri = this.base.getBaseURI();
- }
-
- // Get fragment
- Expr fragment = null;
- int hi = uri.indexOf('#');
- if (hi != -1)
- {
- String f = uri.substring(hi + 1);
- uri = uri.substring(0, hi);
- // TODO handle xpointer() here
- // this only handles IDs
- fragment = new IdFunction(new Constant(f));
- }
-
- // Get document source
- try
- {
- DOMSource source;
- XSLURIResolver resolver = stylesheet.factory.resolver;
- synchronized (resolver)
- {
- if (stylesheet.transformer != null)
- {
- resolver.setUserResolver(stylesheet.transformer.uriResolver);
- resolver.setUserListener(stylesheet.transformer.errorListener);
- }
- source = resolver.resolveDOM(null, base, uri);
- }
- Node node = source.getNode();
- if (fragment == null)
- {
- return Collections.singleton(node);
- }
- else
- {
- Object ret = fragment.evaluate(node, 1, 1);
- if (!(ret instanceof Collection))
- {
- // XXX Report error?
- return Collections.EMPTY_SET;
- }
- return (Collection) ret;
- }
- }
- catch (TransformerException e)
- {
- String msg = "can't open " + uri;
- if (base != null)
- {
- msg += " with base " + base;
- }
- throw new RuntimeException(msg);
- }
- }
-
- public Expr clone(Object context)
- {
- Stylesheet s = stylesheet;
- if (context instanceof Stylesheet)
- {
- s = (Stylesheet) context;
- }
- DocumentFunction f = new DocumentFunction(s, base);
- int len = args.size();
- List args2 = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- args2.add(((Expr) args.get(i)).clone(context));
- }
- f.setArguments(args2);
- return f;
- }
-
-}
diff --git a/libjava/gnu/xml/transform/ElementAvailableFunction.java b/libjava/gnu/xml/transform/ElementAvailableFunction.java
deleted file mode 100644
index 7cf00d3252d..00000000000
--- a/libjava/gnu/xml/transform/ElementAvailableFunction.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/* ElementAvailableFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.TreeSet;
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.xpath.XPathFunction;
-import javax.xml.xpath.XPathFunctionException;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-import gnu.xml.xpath.Function;
-
-/**
- * The XSLT <code>element-available</code> function.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class ElementAvailableFunction
- extends Expr
- implements Function, XPathFunction
-{
-
- static final Collection elements;
- static
- {
- TreeSet acc = new TreeSet();
- acc.add("stylesheet");
- acc.add("template");
- acc.add("param");
- acc.add("variable");
- acc.add("include");
- acc.add("import");
- acc.add("output");
- acc.add("preserve-space");
- acc.add("strip-space");
- acc.add("key");
- acc.add("decimal-format");
- acc.add("namespace-alias");
- acc.add("attribute-set");
- acc.add("apply-templates");
- acc.add("call-template");
- acc.add("value-of");
- acc.add("for-each");
- acc.add("if");
- acc.add("choose");
- acc.add("when");
- acc.add("otherwise");
- acc.add("element");
- acc.add("attribute");
- acc.add("text");
- acc.add("copy");
- acc.add("processing-instruction");
- acc.add("comment");
- acc.add("number");
- acc.add("copy-of");
- acc.add("message");
- acc.add("sort");
- acc.add("with-param");
- acc.add("fallback");
- acc.add("apply-imports");
- elements = Collections.unmodifiableSet(acc);
- }
-
- final NamespaceContext nsctx;
- List args;
-
- ElementAvailableFunction(NamespaceContext nsctx)
- {
- this.nsctx = nsctx;
- }
-
- public Object evaluate(List args)
- throws XPathFunctionException
- {
- // Useless...
- return Collections.EMPTY_SET;
- }
-
- public void setArguments(List args)
- {
- this.args = args;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Expr arg = (Expr) args.get(0);
- Object val = arg.evaluate(context, pos, len);
- String name = _string(context, val);
- String prefix, localName, uri;
- int ci = name.indexOf(':');
- if (ci == -1)
- {
- prefix = null;
- localName = name;
- }
- else
- {
- prefix = name.substring(0, ci);
- localName = name.substring(ci + 1);
- }
- uri = nsctx.getNamespaceURI(prefix);
- if (Stylesheet.XSL_NS.equals(uri))
- {
- return elements.contains(localName) ?
- Boolean.TRUE : Boolean.FALSE;
- // TODO extension elements
- }
- return Boolean.FALSE;
- }
-
- public Expr clone(Object context)
- {
- NamespaceContext n = nsctx;
- if (context instanceof NamespaceContext)
- {
- n = (NamespaceContext) context;
- }
- ElementAvailableFunction f = new ElementAvailableFunction(n);
- int len = args.size();
- List args2 = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- args2.add(((Expr) args.get(i)).clone(context));
- }
- f.setArguments(args2);
- return f;
- }
-
-}
-
diff --git a/libjava/gnu/xml/transform/ElementNode.java b/libjava/gnu/xml/transform/ElementNode.java
deleted file mode 100644
index 3609f0e0c19..00000000000
--- a/libjava/gnu/xml/transform/ElementNode.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/* ElementNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.StringTokenizer;
-import javax.xml.XMLConstants;
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-
-/**
- * A template node representing an XSL <code>element</code> instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class ElementNode
- extends TemplateNode
-{
-
- final TemplateNode name;
- final TemplateNode namespace;
- final String uas;
- final Node source;
- final Collection elementExcludeResultPrefixes;
-
- ElementNode(TemplateNode children, TemplateNode next, TemplateNode name,
- TemplateNode namespace, String uas, Node source)
- {
- super(children, next);
- this.name = name;
- this.namespace = namespace;
- this.uas = uas;
- this.source = source;
- NamedNodeMap attrs = source.getAttributes();
- Node attr = attrs.getNamedItemNS(Stylesheet.XSL_NS,
- "exclude-result-prefixes");
- if (attr != null)
- {
- elementExcludeResultPrefixes = new HashSet();
- StringTokenizer st = new StringTokenizer(attr.getNodeValue());
- while (st.hasMoreTokens())
- {
- elementExcludeResultPrefixes.add(st.nextToken());
- }
- }
- else
- {
- elementExcludeResultPrefixes = Collections.EMPTY_SET;
- }
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new ElementNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- name.clone(stylesheet),
- (namespace == null) ? null :
- namespace.clone(stylesheet),
- uas, source);
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- Document doc = (parent instanceof Document) ? (Document) parent :
- parent.getOwnerDocument();
- // Create a document fragment to hold the name
- DocumentFragment fragment = doc.createDocumentFragment();
- // Apply name to the fragment
- name.apply(stylesheet, mode,
- context, pos, len,
- fragment, null);
- // Use XPath string-value of fragment
- String nameValue = Expr.stringValue(fragment);
-
- String namespaceValue = null;
- if (namespace != null)
- {
- // Create a document fragment to hold the namespace
- fragment = doc.createDocumentFragment();
- // Apply namespace to the fragment
- namespace.apply(stylesheet, mode,
- context, pos, len,
- fragment, null);
- // Use XPath string-value of fragment
- namespaceValue = Expr.stringValue(fragment);
- if (namespaceValue.length() == 0)
- {
- namespaceValue = null;
- }
- }
-
- String prefix = getPrefix(nameValue);
- if (XMLConstants.XMLNS_ATTRIBUTE.equals(prefix))
- {
- int ci = nameValue.indexOf(':');
- nameValue = nameValue.substring(ci + 1);
- }
- else
- {
- // Namespace aliasing
- if (prefix == null)
- {
- prefix = "#default";
- }
- String resultPrefix =
- (String) stylesheet.namespaceAliases.get(prefix);
- if (resultPrefix != null)
- {
- if ("#default".equals(resultPrefix))
- {
- resultPrefix = null;
- }
- namespaceValue = source.lookupNamespaceURI(resultPrefix);
- }
- if (prefix == "#default")
- {
- prefix = null;
- }
- // Look up ordinary namespace for this prefix
- if (namespaceValue == null)
- {
- if (XMLConstants.XML_NS_PREFIX.equals(prefix))
- {
- namespaceValue = XMLConstants.XML_NS_URI;
- }
- else
- {
- // Resolve namespace for this prefix
- namespaceValue = source.lookupNamespaceURI(prefix);
- }
- }
- /*if (prefix == null)
- {
- // Resolve prefix for this namespace
- prefix = parent.lookupPrefix(namespaceValue);
- if (prefix != null)
- {
- nameValue = prefix + ":" + nameValue;
- }
- }*/
- }
- // Create element
- Element element = (namespaceValue != null) ?
- doc.createElementNS(namespaceValue, nameValue) :
- doc.createElement(nameValue);
- if (nextSibling != null)
- {
- parent.insertBefore(element, nextSibling);
- }
- else
- {
- parent.appendChild(element);
- }
- stylesheet.addNamespaceNodes(source, element, doc,
- elementExcludeResultPrefixes);
- if (uas != null)
- {
- StringTokenizer st = new StringTokenizer(uas, " ");
- while (st.hasMoreTokens())
- {
- addAttributeSet(stylesheet, mode, context, pos, len,
- element, null, st.nextToken());
- }
- }
- if (children != null)
- {
- children.apply(stylesheet, mode,
- context, pos, len,
- element, null);
- }
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- final String getPrefix(String name)
- {
- int ci = name.indexOf(':');
- return (ci == -1) ? null : name.substring(0, ci);
- }
-
- void addAttributeSet(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling, String attributeSet)
- throws TransformerException
- {
- for (Iterator i = stylesheet.attributeSets.iterator(); i.hasNext(); )
- {
- AttributeSet as = (AttributeSet) i.next();
- if (!as.name.equals(attributeSet))
- {
- continue;
- }
- if (as.uas != null)
- {
- StringTokenizer st = new StringTokenizer(as.uas, " ");
- while (st.hasMoreTokens())
- {
- addAttributeSet(stylesheet, mode, context, pos, len,
- parent, nextSibling, st.nextToken());
- }
- }
- if (as.children != null)
- {
- as.children.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append("name=");
- buf.append(name);
- if (uas != null)
- {
- buf.append(",uas=");
- buf.append(uas);
- }
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/ErrorListenerErrorHandler.java b/libjava/gnu/xml/transform/ErrorListenerErrorHandler.java
deleted file mode 100644
index d79bb15467a..00000000000
--- a/libjava/gnu/xml/transform/ErrorListenerErrorHandler.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/* ErrorListenerErrorHandler.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.transform.ErrorListener;
-import javax.xml.transform.TransformerException;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-/**
- * An ErrorHandler that wraps an ErrorListener.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class ErrorListenerErrorHandler
- implements ErrorHandler
-{
-
- final ErrorListener listener;
-
- ErrorListenerErrorHandler(ErrorListener listener)
- {
- this.listener = listener;
- }
-
- public void warning(SAXParseException e)
- throws SAXException
- {
- try
- {
- listener.warning(new TransformerException(e));
- }
- catch (TransformerException e2)
- {
- throw new SAXException(e2);
- }
- }
-
- public void error(SAXParseException e)
- throws SAXException
- {
- try
- {
- listener.error(new TransformerException(e));
- }
- catch (TransformerException e2)
- {
- throw new SAXException(e2);
- }
- }
-
- public void fatalError(SAXParseException e)
- throws SAXException
- {
- try
- {
- listener.fatalError(new TransformerException(e));
- }
- catch (TransformerException e2)
- {
- throw new SAXException(e2);
- }
- }
-
-}
diff --git a/libjava/gnu/xml/transform/ForEachNode.java b/libjava/gnu/xml/transform/ForEachNode.java
deleted file mode 100644
index fd9797dd474..00000000000
--- a/libjava/gnu/xml/transform/ForEachNode.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/* ForEachNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-
-/**
- * A template node representing an XSLT <code>for-each</code> instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class ForEachNode
- extends TemplateNode
-{
-
- final Expr select;
- final List sortKeys;
-
- ForEachNode(TemplateNode children, TemplateNode next, Expr select,
- List sortKeys)
- {
- super(children, next);
- this.select = select;
- this.sortKeys = sortKeys;
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- int len = sortKeys.size();
- List sortKeys2 = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- sortKeys2.add(((Key) sortKeys.get(i)).clone(stylesheet));
- }
- return new ForEachNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- select.clone(stylesheet),
- sortKeys2);
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- if (children != null)
- {
- // Set current template to null
- Template saved = stylesheet.currentTemplate;
- stylesheet.currentTemplate = null;
- Object ret = select.evaluate(context, pos, len);
- //System.err.println(toString() + ": " + context+" -> "+ret);
- if (ret instanceof Collection)
- {
- Collection ns = (Collection) ret;
- List list = new ArrayList(ns);
- if (sortKeys != null)
- {
- for (Iterator i = sortKeys.iterator(); i.hasNext(); )
- {
- SortKey sortKey = (SortKey) i.next();
- sortKey.init(stylesheet, mode, context, pos, len, parent,
- nextSibling);
- }
- Collections.sort(list, new XSLComparator(sortKeys));
- }
- else
- {
- Collections.sort(list, documentOrderComparator);
- }
- // Perform children for each node
- int l = list.size();
- int p = 1;
- for (Iterator i = list.iterator(); i.hasNext(); )
- {
- Node node = (Node) i.next();
- stylesheet.current = node;
- children.apply(stylesheet, mode,
- node, p++, l,
- parent, nextSibling);
- }
- }
- // Restore current template
- stylesheet.currentTemplate = saved;
- }
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append("select=");
- buf.append(select);
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/FormatNumberFunction.java b/libjava/gnu/xml/transform/FormatNumberFunction.java
deleted file mode 100644
index aaa015b4ae9..00000000000
--- a/libjava/gnu/xml/transform/FormatNumberFunction.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/* FormatNumberFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import javax.xml.xpath.XPathFunction;
-import javax.xml.xpath.XPathFunctionException;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-import gnu.xml.xpath.Function;
-
-/**
- * The XSLT <code>format-number()</code>function.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class FormatNumberFunction
- extends Expr
- implements XPathFunction, Function
-{
-
- final Stylesheet stylesheet;
- List args;
-
- FormatNumberFunction(Stylesheet stylesheet)
- {
- this.stylesheet = stylesheet;
- }
-
- public Object evaluate(List args)
- throws XPathFunctionException
- {
- // Useless...
- return Collections.EMPTY_SET;
- }
-
- public void setArguments(List args)
- {
- this.args = args;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- int arity = args.size();
- List values = new ArrayList(arity);
- for (int i = 0; i < arity; i++)
- {
- Expr arg = (Expr) args.get(i);
- values.add(arg.evaluate(context, pos, len));
- }
- double number = _number(context, values.get(0));
- String pattern = _string(context, values.get(1));
- // Currency symbol &#x00a4; is not supposed to be present
- if (pattern.indexOf('\u00a4') != -1)
- {
- // Replace with $ (Xalan does this)
- pattern = pattern.replace('\u00a4', '$');
- }
- String dfName = null;
- if (arity > 2)
- {
- dfName = _string(context, values.get(2));
- // otherwise the default decimal-format will be used
- }
- DecimalFormat df = (DecimalFormat) stylesheet.decimalFormats.get(dfName);
- if (df == null)
- {
- throw new IllegalArgumentException("No such decimal-format: " +
- dfName);
- }
- df.applyLocalizedPattern(pattern);
- return df.format(number);
- }
-
- public Expr clone(Object context)
- {
- Stylesheet s = stylesheet;
- if (context instanceof Stylesheet)
- {
- s = (Stylesheet) context;
- }
- FormatNumberFunction f = new FormatNumberFunction(s);
- int len = args.size();
- List args2 = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- args2.add(((Expr) args.get(i)).clone(context));
- }
- f.setArguments(args2);
- return f;
- }
-
-}
-
diff --git a/libjava/gnu/xml/transform/FunctionAvailableFunction.java b/libjava/gnu/xml/transform/FunctionAvailableFunction.java
deleted file mode 100644
index b7dfb6192ff..00000000000
--- a/libjava/gnu/xml/transform/FunctionAvailableFunction.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/* FunctionAvailableFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.TreeSet;
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.xpath.XPathFunction;
-import javax.xml.xpath.XPathFunctionException;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-import gnu.xml.xpath.Function;
-
-/**
- * The XSLT <code>function-available</code> function.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class FunctionAvailableFunction
- extends Expr
- implements Function, XPathFunction
-{
-
- static final Collection xsltFunctions;
- static final Collection xpathFunctions;
- static
- {
- TreeSet acc = new TreeSet();
- acc.add("document");
- acc.add("key");
- acc.add("format-number");
- acc.add("current");
- acc.add("unparsed-entity-uri");
- acc.add("generate-id");
- acc.add("system-property");
- acc.add("element-available");
- acc.add("function-available");
- xsltFunctions = Collections.unmodifiableSet(acc);
- acc = new TreeSet();
- acc.add("boolean");
- acc.add("ceiling");
- acc.add("concat");
- acc.add("contains");
- acc.add("count");
- acc.add("false");
- acc.add("floor");
- acc.add("id");
- acc.add("lang");
- acc.add("last");
- acc.add("local-name");
- acc.add("name");
- acc.add("namespace-uri");
- acc.add("normalize-space");
- acc.add("not");
- acc.add("number");
- acc.add("position");
- acc.add("round");
- acc.add("starts-with");
- acc.add("string");
- acc.add("string-length");
- acc.add("substring-after");
- acc.add("substring-before");
- acc.add("substring");
- acc.add("sum");
- acc.add("translate");
- acc.add("true");
- xpathFunctions = Collections.unmodifiableSet(acc);
- }
-
- final NamespaceContext nsctx;
- List args;
-
- FunctionAvailableFunction(NamespaceContext nsctx)
- {
- this.nsctx = nsctx;
- }
-
- public Object evaluate(List args)
- throws XPathFunctionException
- {
- // Useless...
- return Collections.EMPTY_SET;
- }
-
- public void setArguments(List args)
- {
- this.args = args;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Expr arg = (Expr) args.get(0);
- Object val = arg.evaluate(context, pos, len);
- String name = _string(context, val);
- String prefix, localName, uri;
- int ci = name.indexOf(':');
- if (ci == -1)
- {
- prefix = null;
- localName = name;
- }
- else
- {
- prefix = name.substring(0, ci);
- localName = name.substring(ci + 1);
- }
- uri = nsctx.getNamespaceURI(prefix);
- if (uri == null)
- {
- return xsltFunctions.contains(localName) ||
- xpathFunctions.contains(localName) ?
- Boolean.TRUE : Boolean.FALSE;
- // TODO extension functions
- }
- return Boolean.FALSE;
- }
-
- public Expr clone(Object context)
- {
- NamespaceContext n = nsctx;
- if (context instanceof NamespaceContext)
- {
- n = (NamespaceContext) context;
- }
- FunctionAvailableFunction f = new FunctionAvailableFunction(n);
- int len = args.size();
- List args2 = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- args2.add(((Expr) args.get(i)).clone(context));
- }
- f.setArguments(args2);
- return f;
- }
-
-}
-
diff --git a/libjava/gnu/xml/transform/GenerateIdFunction.java b/libjava/gnu/xml/transform/GenerateIdFunction.java
deleted file mode 100644
index a7682c91802..00000000000
--- a/libjava/gnu/xml/transform/GenerateIdFunction.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/* GenerateIdFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import javax.xml.xpath.XPathFunction;
-import javax.xml.xpath.XPathFunctionException;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-import gnu.xml.xpath.Function;
-
-/**
- * The XSLT <code>generate-id()</code>function.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class GenerateIdFunction
- extends Expr
- implements XPathFunction, Function
-{
-
- List args;
-
- public Object evaluate(List args)
- throws XPathFunctionException
- {
- // Useless...
- return Collections.EMPTY_SET;
- }
-
- public void setArguments(List args)
- {
- this.args = args;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- int arity = args.size();
- List values = new ArrayList(arity);
- for (int i = 0; i < arity; i++)
- {
- Expr arg = (Expr) args.get(i);
- values.add(arg.evaluate(context, pos, len));
- }
- Node node;
- Collection ns = (arity == 0) ? Collections.EMPTY_SET :
- (Collection) values.get(0);
- if (ns.isEmpty())
- {
- node = context;
- }
- else
- {
- List list = new ArrayList(ns);
- Collections.sort(list, documentOrderComparator);
- node = (Node) list.get(0);
- }
-
- String name = node.getNodeName();
- int index = 0, depth = 0;
- for (Node ctx = node.getPreviousSibling(); ctx != null;
- ctx = ctx.getPreviousSibling())
- {
- index++;
- }
- for (Node ctx = node.getParentNode(); ctx != null;
- ctx = ctx.getParentNode())
- {
- depth++;
- }
- return name + "-" + index + "-" + depth;
- }
-
- public Expr clone(Object context)
- {
- GenerateIdFunction f = new GenerateIdFunction();
- int len = args.size();
- List args2 = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- args2.add(((Expr) args.get(i)).clone(context));
- }
- f.setArguments(args2);
- return f;
- }
-
-}
-
diff --git a/libjava/gnu/xml/transform/IfNode.java b/libjava/gnu/xml/transform/IfNode.java
deleted file mode 100644
index f277cce07b9..00000000000
--- a/libjava/gnu/xml/transform/IfNode.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/* IfNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-
-/**
- * A template node representing an XSL <code>if</code> instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class IfNode
- extends TemplateNode
-{
-
- final Expr test;
-
- IfNode(TemplateNode children, TemplateNode next, Expr test)
- {
- super(children, next);
- this.test = test;
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new IfNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- test.clone(stylesheet));
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- Object ret = test.evaluate(context, pos, len);
- boolean success = (ret instanceof Boolean) ?
- ((Boolean) ret).booleanValue() :
- Expr._boolean(context, ret);
- if (success)
- {
- if (children != null)
- {
- children.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append("test=");
- buf.append(test);
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/Key.java b/libjava/gnu/xml/transform/Key.java
deleted file mode 100644
index 72bd90aedb0..00000000000
--- a/libjava/gnu/xml/transform/Key.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Key.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.namespace.QName;
-import gnu.xml.xpath.Expr;
-import gnu.xml.xpath.Pattern;
-
-/**
- * An XSL key.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class Key
-{
-
- final QName name;
- final Pattern match;
- final Expr use;
-
- Key(QName name, Pattern match, Expr use)
- {
- this.name = name;
- this.match = match;
- this.use = use;
- }
-
- Key clone(Stylesheet stylesheet)
- {
- return new Key(name,
- (Pattern) match.clone(stylesheet),
- use.clone(stylesheet));
- }
-
-}
-
diff --git a/libjava/gnu/xml/transform/KeyFunction.java b/libjava/gnu/xml/transform/KeyFunction.java
deleted file mode 100644
index eb842f289c9..00000000000
--- a/libjava/gnu/xml/transform/KeyFunction.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/* KeyFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import javax.xml.namespace.QName;
-import javax.xml.xpath.XPathFunction;
-import javax.xml.xpath.XPathFunctionException;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-import gnu.xml.xpath.Function;
-import gnu.xml.xpath.Pattern;
-
-/**
- * The XSLT <code>key()</code>function.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class KeyFunction
- extends Pattern
- implements XPathFunction, Function
-{
-
- final Stylesheet stylesheet;
- List args;
-
- KeyFunction(Stylesheet stylesheet)
- {
- this.stylesheet = stylesheet;
- }
-
- public Object evaluate(List args)
- throws XPathFunctionException
- {
- // Useless...
- return Collections.EMPTY_SET;
- }
-
- public void setArguments(List args)
- {
- this.args = args;
- }
-
- public boolean matches(Node context)
- {
- Object ret = evaluate(context, 1, 1);
- return !((Collection) ret).isEmpty();
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- // Evaluate arguments
- int arity = args.size();
- List values = new ArrayList(arity);
- for (int i = 0; i < arity; i++)
- {
- Expr arg = (Expr) args.get(i);
- values.add(arg.evaluate(context, pos, len));
- }
- // Get key name
- QName keyName = QName.valueOf(_string(context, values.get(0)));
- // Expand qualified name
- String uri = keyName.getNamespaceURI();
- String prefix = keyName.getPrefix();
- if ((uri == null || uri.length() == 0) &&
- (prefix != null && prefix.length() > 0))
- {
- uri = stylesheet.getNamespaceURI(prefix);
- if (uri != null && uri.length() > 0)
- {
- String localName = keyName.getLocalPart();
- keyName = new QName(uri, localName, prefix);
- }
- }
- // Compute matching key set
- Collection keySet = new LinkedList();
- for (Iterator i = stylesheet.keys.iterator(); i.hasNext(); )
- {
- Key key = (Key) i.next();
- if (key.name.equals(keyName))
- {
- keySet.add(key);
- }
- }
- // Get target
- Object target = values.get(1);
- Collection acc = new LinkedHashSet();
- Document doc = (context instanceof Document) ? (Document) context :
- context.getOwnerDocument();
- if (target instanceof Collection)
- {
- for (Iterator i = ((Collection) target).iterator(); i.hasNext(); )
- {
- String val = Expr.stringValue((Node) i.next());
- addKeyNodes(doc, keySet, val, acc);
- }
- }
- else
- {
- String val = Expr._string(context, target);
- addKeyNodes(doc, keySet, val, acc);
- }
- List ret = new ArrayList(acc);
- Collections.sort(ret, documentOrderComparator);
- return ret;
- }
-
- final void addKeyNodes(Node node, Collection keySet,
- String value, Collection acc)
- {
- addKeyNodeIfMatch(node, keySet, value, acc);
- // Apply children
- for (Node ctx = node.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- addKeyNodes(ctx, keySet, value, acc);
- }
- }
-
- final void addKeyNodeIfMatch(Node node, Collection keySet,
- String value, Collection acc)
- {
- for (Iterator i = keySet.iterator(); i.hasNext(); )
- {
- Key key = (Key) i.next();
- if (key.match.matches(node))
- {
- Object eval = key.use.evaluate(node, 1, 1);
- if (eval instanceof Collection)
- {
- for (Iterator j = ((Collection) eval).iterator();
- j.hasNext(); )
- {
- String keyValue = Expr.stringValue((Node) j.next());
- if (value.equals(keyValue))
- {
- acc.add(node);
- return;
- }
- }
- }
- else
- {
- String keyValue = Expr._string(node, eval);
- if (value.equals(keyValue))
- {
- acc.add(node);
- return;
- }
- }
- }
- }
- }
-
- public Expr clone(Object context)
- {
- Stylesheet s = stylesheet;
- if (context instanceof Stylesheet)
- {
- s = (Stylesheet) context;
- }
- KeyFunction f = new KeyFunction(s);
- int len = args.size();
- List args2 = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- args2.add(((Expr) args.get(i)).clone(context));
- }
- f.setArguments(args2);
- return f;
- }
-
-}
-
diff --git a/libjava/gnu/xml/transform/LiteralNode.java b/libjava/gnu/xml/transform/LiteralNode.java
deleted file mode 100644
index b053727d7f3..00000000000
--- a/libjava/gnu/xml/transform/LiteralNode.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/* LiteralNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.StringTokenizer;
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Document;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
-/**
- * A template node that copies a DOM node in the template to the result
- * tree.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class LiteralNode
- extends TemplateNode
-{
-
- /**
- * The source node in the XSL template.
- */
- final Node source;
-
- final Collection elementExcludeResultPrefixes;
-
- LiteralNode(TemplateNode children, TemplateNode next, Node source)
- {
- super(children, next);
- this.source = source;
- if (source.getNodeType() == Node.ELEMENT_NODE)
- {
- NamedNodeMap attrs = source.getAttributes();
- Node attr = attrs.getNamedItemNS(Stylesheet.XSL_NS,
- "exclude-result-prefixes");
- if (attr != null)
- {
- elementExcludeResultPrefixes = new HashSet();
- StringTokenizer st = new StringTokenizer(attr.getNodeValue());
- while (st.hasMoreTokens())
- {
- elementExcludeResultPrefixes.add(st.nextToken());
- }
- }
- else
- {
- elementExcludeResultPrefixes = Collections.EMPTY_SET;
- }
- }
- else
- {
- elementExcludeResultPrefixes = null;
- }
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new LiteralNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- source);
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- Node result = null;
- Document doc = (parent instanceof Document) ? (Document) parent :
- parent.getOwnerDocument();
- short nodeType = source.getNodeType();
- if (nodeType == Node.ATTRIBUTE_NODE &&
- parent.getFirstChild() != null)
- {
- // Ignore attributes added after child elements
- }
- else
- {
- // Namespace aliasing
- if (nodeType == Node.ELEMENT_NODE)
- {
- String prefix = source.getPrefix();
- if (prefix == null)
- {
- prefix = "#default";
- }
- String resultPrefix =
- (String) stylesheet.namespaceAliases.get(prefix);
- if (resultPrefix != null)
- {
- if ("#default".equals(resultPrefix))
- {
- resultPrefix = null;
- }
- String uri = source.lookupNamespaceURI(resultPrefix);
- String name = source.getNodeName();
- // Create a new element node in the result document
- result = doc.createElementNS(uri, name);
- // copy attributes
- NamedNodeMap srcAttrs = source.getAttributes();
- NamedNodeMap dstAttrs = result.getAttributes();
- int l = srcAttrs.getLength();
- for (int i = 0; i < l; i++)
- {
- Node attr = srcAttrs.item(i);
- if (!Stylesheet.XSL_NS.equals(attr.getNamespaceURI()))
- {
- attr = attr.cloneNode(true);
- attr = doc.adoptNode(attr);
- dstAttrs.setNamedItemNS(attr);
- }
- }
- }
- }
- if (result == null)
- {
- // Create result node
- result = source.cloneNode(false);
- // Remove any XSL attributes
- NamedNodeMap attrs = result.getAttributes();
- if (attrs != null)
- {
- int l = attrs.getLength();
- for (int i = 0; i < l; i++)
- {
- Node attr = attrs.item(i);
- if (Stylesheet.XSL_NS.equals(attr.getNamespaceURI()))
- {
- attrs.removeNamedItem(attr.getNodeName());
- i--;
- l--;
- }
- }
- }
- result = doc.adoptNode(result);
- if (result == null)
- {
- String msg = "Error adopting node to result tree";
- DOMSourceLocator l = new DOMSourceLocator(context);
- throw new TransformerException(msg, l);
- }
- }
- if (nextSibling != null)
- {
- parent.insertBefore(result, nextSibling);
- }
- else
- {
- parent.appendChild(result);
- }
- if (nodeType == Node.ELEMENT_NODE)
- {
- stylesheet.addNamespaceNodes(source, result, doc,
- elementExcludeResultPrefixes);
- }
- // children
- if (children != null)
- {
- children.apply(stylesheet, mode,
- context, pos, len,
- result, null);
- }
- }
- // next sibling
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append("source=");
- buf.append(source);
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/MessageNode.java b/libjava/gnu/xml/transform/MessageNode.java
deleted file mode 100644
index 9feeb752788..00000000000
--- a/libjava/gnu/xml/transform/MessageNode.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/* MessageNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-
-/**
- * An XSL <code>message</code> instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class MessageNode
- extends TemplateNode
-{
-
- final boolean terminate;
-
- MessageNode(TemplateNode children, TemplateNode next, boolean terminate)
- {
- super(children, next);
- this.terminate = terminate;
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new MessageNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- terminate);
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- if (children != null)
- {
- Document doc = (parent instanceof Document) ? (Document) parent :
- parent.getOwnerDocument();
- DocumentFragment fragment = doc.createDocumentFragment();
- children.apply(stylesheet, mode, context, pos, len, fragment, null);
- String message = Expr.stringValue(fragment);
- System.err.println(message);
- if (terminate)
- {
- stylesheet.terminated = true;
- }
- }
- if (next != null && !terminate)
- {
- next.apply(stylesheet, mode, context, pos, len, parent, nextSibling);
- }
- }
-
-}
diff --git a/libjava/gnu/xml/transform/NodeNumberNode.java b/libjava/gnu/xml/transform/NodeNumberNode.java
deleted file mode 100644
index 99ffe8bbb24..00000000000
--- a/libjava/gnu/xml/transform/NodeNumberNode.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/* NodeNumberNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-import gnu.xml.xpath.Pattern;
-import gnu.xml.xpath.Selector;
-import gnu.xml.xpath.UnionExpr;
-
-/**
- * A template node representing the XSL <code>number</code> instruction
- * with no <code>value</code> expression, i.e. the value is computed from
- * the document position of the context node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class NodeNumberNode
- extends AbstractNumberNode
-{
-
- static final int SINGLE = 0;
- static final int MULTIPLE = 1;
- static final int ANY = 2;
-
- final int level;
- final Pattern count;
- final Pattern from;
-
- NodeNumberNode(TemplateNode children, TemplateNode next,
- int level, Pattern count, Pattern from,
- TemplateNode format, String lang,
- int letterValue, String groupingSeparator, int groupingSize)
- {
- super(children, next, format, lang, letterValue, groupingSeparator,
- groupingSize);
- this.level = level;
- this.count = count;
- this.from = from;
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new NodeNumberNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- level,
- (count == null) ? null :
- (Pattern) count.clone(stylesheet),
- (from == null) ? from :
- (Pattern) from.clone(stylesheet),
- format, lang, letterValue,
- groupingSeparator, groupingSize);
- }
-
- int[] compute(Stylesheet stylesheet, Node context, int pos, int len)
- throws TransformerException
- {
- /*if (from != null)
- {
- Object ret = from.evaluate(context, pos, len);
- if (ret instanceof Collection)
- {
- Collection ns = (Collection) ret;
- if (ns.size() > 0)
- {
- List list = new ArrayList(ns);
- Collections.sort(list, documentOrderComparator);
- context = (Node) list.get(0);
- }
- else
- {
- return new int[0];
- }
- }
- else
- {
- return new int[0];
- }
- }*/
- Node current = context;
- switch (level)
- {
- case SINGLE:
- if (from == null)
- {
- while (context != null && !countMatches(current, context))
- {
- context = context.getParentNode();
- }
- }
- else
- {
- while (context != null && !countMatches(current, context) &&
- !fromMatches(context))
- {
- context = context.getParentNode();
- }
- }
- return (context == null) ? new int[0] :
- new int[] { (context == current) ? pos : getIndex(current, context) };
- case MULTIPLE:
- List ancestors = new ArrayList();
- while (context != null)
- {
- if (countMatches(current, context))
- {
- if (from == null || fromMatches(context))
- {
- ancestors.add(context);
- }
- }
- context = context.getParentNode();
- }
- Collections.sort(ancestors, documentOrderComparator);
- int[] ret = new int[ancestors.size()];
- for (int i = 0; i < ret.length; i++)
- {
- ret[i] = getIndex(current, (Node) ancestors.get(i));
- }
- return ret;
- case ANY:
- Expr preceding = new Selector(Selector.PRECEDING,
- Collections.EMPTY_LIST);
- Expr ancestorOrSelf = new Selector(Selector.ANCESTOR_OR_SELF,
- Collections.EMPTY_LIST);
- Expr any = new UnionExpr(preceding, ancestorOrSelf);
- Object eval = any.evaluate(context, pos, len);
- if (eval instanceof Collection)
- {
- Collection ns = (Collection) eval;
- List candidates = new ArrayList();
- for (Iterator i = ns.iterator(); i.hasNext(); )
- {
- Node candidate = (Node) i.next();
- if (countMatches(current, candidate))
- {
- candidates.add(candidate);
- if (from != null && from.matches(candidate))
- {
- break;
- }
- }
- }
- return new int[] { candidates.size() };
- }
- return new int[0];
- default:
- throw new TransformerException("invalid level");
- }
- }
-
- boolean countMatches(Node current, Node node)
- {
- if (count == null)
- {
- int cnt = current.getNodeType();
- int nnt = node.getNodeType();
- if (cnt != nnt)
- {
- return false;
- }
- if (nnt == Node.ELEMENT_NODE || nnt == Node.ATTRIBUTE_NODE)
- {
- String curi = current.getNamespaceURI();
- String nuri = node.getNamespaceURI();
- if ((curi == null && nuri != null) ||
- (curi != null && !curi.equals(nuri)))
- {
- return false;
- }
- String cn = current.getLocalName();
- String nn = current.getLocalName();
- if (!cn.equals(nn))
- {
- return false;
- }
- }
- return true;
- }
- else
- {
- return count.matches(node);
- }
- }
-
- boolean fromMatches(Node node)
- {
- for (Node ctx = node.getParentNode(); ctx != null;
- ctx = ctx.getParentNode())
- {
- if (from.matches(ctx))
- {
- return true;
- }
- }
- return false;
- }
-
- int getIndex(Node current, Node node)
- {
- int index = 0;
- do
- {
- do
- {
- node = node.getPreviousSibling();
- }
- while (node != null && !countMatches(current, node));
- index++;
- }
- while (node != null);
- return index;
- }
-
-}
diff --git a/libjava/gnu/xml/transform/NumberNode.java b/libjava/gnu/xml/transform/NumberNode.java
deleted file mode 100644
index c16324b63a4..00000000000
--- a/libjava/gnu/xml/transform/NumberNode.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/* NumberNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-
-/**
- * A template node representing the XSL <code>number</code> instruction
- * with a <code>value</code> expression.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class NumberNode
- extends AbstractNumberNode
-{
-
- final Expr value;
-
- NumberNode(TemplateNode children, TemplateNode next,
- Expr value, TemplateNode format, String lang,
- int letterValue, String groupingSeparator, int groupingSize)
- {
- super(children, next, format, lang, letterValue, groupingSeparator,
- groupingSize);
- this.value = value;
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new NumberNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- value.clone(stylesheet),
- format, lang, letterValue,
- groupingSeparator, groupingSize);
- }
-
- int[] compute(Stylesheet stylesheet, Node context, int pos, int len)
- throws TransformerException
- {
- Object ret = value.evaluate(context, pos, len);
- Double d = (ret instanceof Double) ? ((Double) ret) :
- new Double(Expr._number(context, ret));
- return new int[] { d.intValue() };
- }
-
-}
diff --git a/libjava/gnu/xml/transform/OtherwiseNode.java b/libjava/gnu/xml/transform/OtherwiseNode.java
deleted file mode 100644
index 00a3d9d3c81..00000000000
--- a/libjava/gnu/xml/transform/OtherwiseNode.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/* OtherwiseNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Node;
-
-/**
- * A template node representing an XSL <code>otherwise</code> instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class OtherwiseNode
- extends TemplateNode
-{
-
- OtherwiseNode(TemplateNode children, TemplateNode next)
- {
- super(children, next);
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new OtherwiseNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet));
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- if (children != null)
- {
- children.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/ParameterNode.java b/libjava/gnu/xml/transform/ParameterNode.java
deleted file mode 100644
index 8d709f80115..00000000000
--- a/libjava/gnu/xml/transform/ParameterNode.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/* ParameterNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.Collections;
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-
-/**
- * A template node that sets a variable or parameter during template
- * processing.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class ParameterNode
- extends TemplateNode
-{
-
- final String name;
- final Expr select;
- final boolean global;
-
- ParameterNode(TemplateNode children, TemplateNode next,
- String name, Expr select, boolean global)
- {
- super(children, next);
- this.name = name;
- this.select = select;
- this.global = global;
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new ParameterNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- name,
- select.clone(stylesheet),
- global);
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- boolean apply = global || !stylesheet.bindings.containsKey(name, global);
- if (apply)
- {
- // push the variable context
- stylesheet.bindings.push(global);
- // set the variable
- Object value = getValue(stylesheet, mode, context, pos, len);
- if (value != null)
- {
- stylesheet.bindings.set(name, value, global);
- }
- }
- // variable and param don't process children as such
- // all subsequent instructions are processed with that variable context
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- if (apply)
- {
- // pop the variable context
- stylesheet.bindings.pop(global);
- }
- }
-
- Object getValue(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len)
- throws TransformerException
- {
- if (select != null)
- {
- return select.evaluate(context, pos, len);
- }
- else if (children != null)
- {
- Document doc = (context instanceof Document) ? (Document) context :
- context.getOwnerDocument();
- DocumentFragment fragment = doc.createDocumentFragment();
- children.apply(stylesheet, mode, context, pos, len, fragment, null);
- return Collections.singleton(fragment);
- }
- else
- {
- return null;
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append("name=");
- buf.append(name);
- if (select != null)
- {
- buf.append(",select=");
- buf.append(select);
- }
- if (global)
- {
- buf.append(",global");
- }
- buf.append(']');
- return buf.toString();
- }
-
-}
-
diff --git a/libjava/gnu/xml/transform/ProcessingInstructionNode.java b/libjava/gnu/xml/transform/ProcessingInstructionNode.java
deleted file mode 100644
index e6823a5b2c6..00000000000
--- a/libjava/gnu/xml/transform/ProcessingInstructionNode.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/* ProcessingInstructionNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.Node;
-import org.w3c.dom.ProcessingInstruction;
-import gnu.xml.xpath.Expr;
-
-/**
- * A template node representing the XSL <code>processing-instruction</code>
- * instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class ProcessingInstructionNode
- extends TemplateNode
-{
-
- final String name;
-
- ProcessingInstructionNode(TemplateNode children, TemplateNode next,
- String name)
- {
- super(children, next);
- this.name = name;
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new ProcessingInstructionNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- name);
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- String data = null;
- Document doc = (parent instanceof Document) ? (Document) parent :
- parent.getOwnerDocument();
- if (children != null)
- {
- // Create a document fragment to hold the text
- DocumentFragment fragment = doc.createDocumentFragment();
- // Apply children to the fragment
- children.apply(stylesheet, mode,
- context, pos, len,
- fragment, null);
- // Use XPath string-value of fragment
- data = Expr.stringValue(fragment);
- }
- ProcessingInstruction pi = doc.createProcessingInstruction(name, data);
- // Insert into result tree
- if (nextSibling != null)
- {
- parent.insertBefore(pi, nextSibling);
- }
- else
- {
- parent.appendChild(pi);
- }
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append("name=");
- buf.append(name);
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/SAXSerializer.java b/libjava/gnu/xml/transform/SAXSerializer.java
deleted file mode 100644
index 9650e3e052d..00000000000
--- a/libjava/gnu/xml/transform/SAXSerializer.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/* SAXSerializer.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import org.w3c.dom.Attr;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.ext.LexicalHandler;
-
-/**
- * Serializes a DOM node to a sequence of SAX events.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class SAXSerializer
- implements Attributes
-{
-
- transient NamedNodeMap attrs;
- transient LinkedList namespaces = new LinkedList();
-
- boolean isDefined(String prefix, String uri)
- {
- for (Iterator i = namespaces.iterator(); i.hasNext(); )
- {
- HashMap ctx = (HashMap) i.next();
- if (uri.equals(ctx.get(prefix)))
- {
- return true;
- }
- }
- return false;
- }
-
- void define(String prefix, String uri)
- {
- for (Iterator i = namespaces.iterator(); i.hasNext(); )
- {
- HashMap ctx = (HashMap) i.next();
- if (ctx.containsKey(prefix))
- {
- HashMap newCtx = new HashMap();
- newCtx.put(prefix, uri);
- namespaces.addFirst(newCtx);
- return;
- }
- }
- HashMap ctx;
- if (namespaces.isEmpty())
- {
- ctx = new HashMap();
- namespaces.add(ctx);
- }
- else
- {
- ctx = (HashMap) namespaces.getFirst();
- }
- ctx.put(prefix, uri);
- }
-
- void undefine(String prefix, String uri)
- {
- for (Iterator i = namespaces.iterator(); i.hasNext(); )
- {
- HashMap ctx = (HashMap) i.next();
- if (uri.equals(ctx.get(prefix)))
- {
- ctx.remove(prefix);
- if (ctx.isEmpty())
- {
- namespaces.remove(ctx);
- }
- return;
- }
- }
- }
-
- public int getLength()
- {
- return attrs.getLength();
- }
-
- public String getURI(int index)
- {
- return attrs.item(index).getNamespaceURI();
- }
-
- public String getLocalName(int index)
- {
- return attrs.item(index).getLocalName();
- }
-
- public String getQName(int index)
- {
- return attrs.item(index).getNodeName();
- }
-
- public String getType(int index)
- {
- Attr attr = (Attr) attrs.item(index);
- return attr.isId() ? "ID" : "CDATA";
- }
-
- public String getValue(int index)
- {
- return attrs.item(index).getNodeValue();
- }
-
- public int getIndex(String uri, String localName)
- {
- int len = attrs.getLength();
- for (int i = 0; i < len; i++)
- {
- Node attr = attrs.item(i);
- String a_uri = attr.getNamespaceURI();
- String a_localName = attr.getLocalName();
- if (((a_uri == null && uri == null) ||
- (a_uri != null && a_uri.equals(uri))) &&
- a_localName.equals(localName))
- {
- return i;
- }
- }
- return -1;
- }
-
- public int getIndex(String qName)
- {
- int len = attrs.getLength();
- for (int i = 0; i < len; i++)
- {
- Node attr = attrs.item(i);
- String a_name = attr.getNodeName();
- if (a_name.equals(qName))
- {
- return i;
- }
- }
- return -1;
- }
-
- public String getType(String uri, String localName)
- {
- Attr attr = (Attr) attrs.getNamedItemNS(uri, localName);
- return attr.isId() ? "ID" : "CDATA";
- }
-
- public String getType(String qName)
- {
- Attr attr = (Attr) attrs.getNamedItem(qName);
- return attr.isId() ? "ID" : "CDATA";
- }
-
- public String getValue(String uri, String localName)
- {
- return attrs.getNamedItemNS(uri, localName).getNodeValue();
- }
-
- public String getValue(String qName)
- {
- return attrs.getNamedItem(qName).getNodeValue();
- }
-
- void serialize(Node node, ContentHandler ch, LexicalHandler lh)
- throws SAXException
- {
- attrs = node.getAttributes();
- Node children;
- Node next = node.getNextSibling();
- switch (node.getNodeType())
- {
- case Node.ELEMENT_NODE:
- String uri = node.getNamespaceURI();
- String prefix = node.getPrefix();
- boolean defined = isDefined(prefix, uri);
- if (!defined)
- {
- define(prefix, uri);
- ch.startPrefixMapping(prefix, uri);
- }
- String localName = node.getLocalName();
- String qName = node.getNodeName();
- ch.startElement(uri, localName, qName, this);
- children = node.getFirstChild();
- if (children != null)
- {
- serialize(children, ch, lh);
- }
- ch.endElement(uri, localName, qName);
- if (!defined)
- {
- ch.endPrefixMapping(prefix);
- undefine(prefix, uri);
- }
- break;
- case Node.TEXT_NODE:
- char[] chars = node.getNodeValue().toCharArray();
- ch.characters(chars, 0, chars.length);
- break;
- case Node.CDATA_SECTION_NODE:
- char[] cdata = node.getNodeValue().toCharArray();
- if (lh != null)
- {
- lh.startCDATA();
- ch.characters(cdata, 0, cdata.length);
- lh.endCDATA();
- }
- else
- {
- ch.characters(cdata, 0, cdata.length);
- }
- break;
- case Node.COMMENT_NODE:
- if (lh != null)
- {
- char[] comment = node.getNodeValue().toCharArray();
- lh.comment(comment, 0, comment.length);
- }
- break;
- case Node.DOCUMENT_NODE:
- case Node.DOCUMENT_FRAGMENT_NODE:
- ch.startDocument();
- children = node.getFirstChild();
- if (children != null)
- {
- serialize(children, ch, lh);
- }
- ch.endDocument();
- break;
- case Node.DOCUMENT_TYPE_NODE:
- if (lh != null)
- {
- DocumentType doctype = (DocumentType) node;
- String publicId = doctype.getPublicId();
- String systemId = doctype.getSystemId();
- lh.startDTD(node.getNodeName(), publicId, systemId);
- NamedNodeMap entities = doctype.getEntities();
- int len = entities.getLength();
- for (int i = 0; i < len; i++)
- {
- Node entity = entities.item(i);
- String entityName = entity.getNodeName();
- lh.startEntity(entityName);
- lh.endEntity(entityName);
- }
- lh.endDTD();
- }
- break;
- case Node.PROCESSING_INSTRUCTION_NODE:
- ch.processingInstruction(node.getNodeName(), node.getNodeValue());
- break;
- case Node.ENTITY_REFERENCE_NODE:
- ch.skippedEntity(node.getNodeName());
- break;
- }
- attrs = null;
- if (next != null)
- {
- serialize(next, ch, lh);
- }
- }
-
-}
diff --git a/libjava/gnu/xml/transform/SortKey.java b/libjava/gnu/xml/transform/SortKey.java
deleted file mode 100644
index 1ec9bdd57b9..00000000000
--- a/libjava/gnu/xml/transform/SortKey.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/* SortKey.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-
-/**
- * An XSL sort key.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class SortKey
-{
-
- static final int DEFAULT = 0;
- static final int UPPER_FIRST = 1;
- static final int LOWER_FIRST = 2;
-
- final Expr select;
- final TemplateNode langTemplate;
- final TemplateNode dataTypeTemplate;
- final TemplateNode orderTemplate;
- final TemplateNode caseOrderTemplate;
-
- transient String lang;
- transient String dataType;
- transient boolean descending;
- transient int caseOrder;
-
- SortKey(Expr select, TemplateNode lang, TemplateNode dataType,
- TemplateNode order, TemplateNode caseOrder)
- {
- this.select = select;
- this.langTemplate = lang;
- this.dataTypeTemplate = dataType;
- this.orderTemplate = order;
- this.caseOrderTemplate = caseOrder;
- }
-
- String key(Node node)
- {
- Object ret = select.evaluate(node, 1, 1);
- if (ret instanceof String)
- {
- return (String) ret;
- }
- else
- {
- return Expr._string(node, ret);
- }
- }
-
- /**
- * Prepare for a sort.
- * This sets all transient variables from their AVTs.
- */
- void init(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- Document doc = (context instanceof Document) ? (Document) context :
- context.getOwnerDocument();
- if (langTemplate == null)
- {
- lang = null;
- }
- else
- {
- DocumentFragment fragment = doc.createDocumentFragment();
- langTemplate.apply(stylesheet, mode, context, pos, len,
- fragment, null);
- lang = Expr.stringValue(fragment);
- }
- if (dataTypeTemplate == null)
- {
- dataType = "text";
- }
- else
- {
- DocumentFragment fragment = doc.createDocumentFragment();
- dataTypeTemplate.apply(stylesheet, mode, context, pos, len,
- fragment, null);
- dataType = Expr.stringValue(fragment);
- }
- if (orderTemplate == null)
- {
- descending = false;
- }
- else
- {
- DocumentFragment fragment = doc.createDocumentFragment();
- orderTemplate.apply(stylesheet, mode, context, pos, len,
- fragment, null);
- String order = Expr.stringValue(fragment);
- descending = "descending".equals(order);
- }
- if (caseOrderTemplate == null)
- {
- caseOrder = DEFAULT;
- }
- else
- {
- DocumentFragment fragment = doc.createDocumentFragment();
- caseOrderTemplate.apply(stylesheet, mode, context, pos, len,
- fragment, null);
- String co = Expr.stringValue(fragment);
- caseOrder = "upper-first".equals(co) ? UPPER_FIRST :
- "lower-first".equals(co) ? LOWER_FIRST :
- DEFAULT;
- }
- }
-
-}
diff --git a/libjava/gnu/xml/transform/StreamSerializer.java b/libjava/gnu/xml/transform/StreamSerializer.java
deleted file mode 100644
index 80a1f7016a5..00000000000
--- a/libjava/gnu/xml/transform/StreamSerializer.java
+++ /dev/null
@@ -1,632 +0,0 @@
-/* StreamSerializer.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import javax.xml.XMLConstants;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
-/**
- * Serializes a DOM node to an output stream.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class StreamSerializer
-{
-
- static final int SPACE = 0x20;
- static final int BANG = 0x21; // !
- static final int APOS = 0x27; // '
- static final int SLASH = 0x2f; // /
- static final int BRA = 0x3c; // <
- static final int KET = 0x3e; // >
- static final int EQ = 0x3d; // =
-
- protected String encoding;
- boolean compatibilityMode;
- final int mode;
- final Map namespaces;
- protected String eol;
- Collection cdataSectionElements = Collections.EMPTY_SET;
-
- protected boolean discardDefaultContent;
- protected boolean xmlDeclaration = true;
-
- public StreamSerializer()
- {
- this(Stylesheet.OUTPUT_XML, null, null);
- }
-
- public StreamSerializer(String encoding)
- {
- this(Stylesheet.OUTPUT_XML, encoding, null);
- }
-
- public StreamSerializer(int mode, String encoding, String eol)
- {
- this.mode = mode;
- if (encoding == null)
- {
- encoding = "UTF-8";
- }
- this.encoding = encoding.intern();
- compatibilityMode = true;
- if (encoding.length() > 3)
- {
- String p = encoding.substring(0, 3);
- if (p.equalsIgnoreCase("UTF") ||
- p.equalsIgnoreCase("UCS"))
- {
- compatibilityMode = false;
- }
- }
- this.eol = (eol != null) ? eol : System.getProperty("line.separator");
- namespaces = new HashMap();
- }
-
- void setCdataSectionElements(Collection c)
- {
- cdataSectionElements = c;
- }
-
- public void serialize(final Node node, final OutputStream out)
- throws IOException
- {
- serialize(node, out, false);
- }
-
- void serialize(final Node node, final OutputStream out,
- boolean convertToCdata)
- throws IOException
- {
- if (out == null)
- {
- throw new NullPointerException("no output stream");
- }
- String value, prefix;
- Node children;
- Node next = node.getNextSibling();
- String uri = node.getNamespaceURI();
- boolean defined = false;
- short nt = node.getNodeType();
- if (convertToCdata && nt == Node.TEXT_NODE)
- {
- nt = Node.CDATA_SECTION_NODE;
- }
- switch (nt)
- {
- case Node.ATTRIBUTE_NODE:
- prefix = node.getPrefix();
- if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(uri) ||
- XMLConstants.XMLNS_ATTRIBUTE.equals(prefix) ||
- (prefix != null && prefix.startsWith("xmlns:")))
- {
- String nsuri = node.getNodeValue();
- if (isDefined(nsuri))
- {
- break;
- }
- define(nsuri, node.getLocalName());
- }
- else if (uri != null && !isDefined(uri))
- {
- prefix = define(uri, prefix);
- String nsname = (prefix == null) ? "xmlns" : "xmlns:" + prefix;
- out.write(SPACE);
- out.write(encodeText(nsname));
- out.write(EQ);
- String nsvalue = "'" + encode(uri, true, true) + "'";
- out.write(nsvalue.getBytes(encoding));
- defined = true;
- }
- out.write(SPACE);
- String a_nodeName = node.getNodeName();
- out.write(encodeText(a_nodeName));
- String a_nodeValue = node.getNodeValue();
- if (mode == Stylesheet.OUTPUT_HTML &&
- a_nodeName.equals(a_nodeValue))
- {
- break;
- }
- out.write(EQ);
- value = "'" + encode(a_nodeValue, true, true) + "'";
- out.write(encodeText(value));
- break;
- case Node.ELEMENT_NODE:
- value = node.getNodeName();
- out.write(BRA);
- out.write(encodeText(value));
- if (uri != null && !isDefined(uri))
- {
- prefix = define(uri, node.getPrefix());
- String nsname = (prefix == null) ? "xmlns" : "xmlns:" + prefix;
- out.write(SPACE);
- out.write(encodeText(nsname));
- out.write(EQ);
- String nsvalue = "'" + encode(uri, true, true) + "'";
- out.write(encodeText(nsvalue));
- defined = true;
- }
- NamedNodeMap attrs = node.getAttributes();
- if (attrs != null)
- {
- int len = attrs.getLength();
- for (int i = 0; i < len; i++)
- {
- Attr attr = (Attr) attrs.item(i);
- if (discardDefaultContent && !attr.getSpecified())
- {
- // NOOP
- }
- else
- {
- serialize(attr, out, false);
- }
- }
- }
- convertToCdata = cdataSectionElements.contains(value);
- children = node.getFirstChild();
- if (children == null)
- {
- out.write(SLASH);
- out.write(KET);
- }
- else
- {
- out.write(KET);
- serialize(children, out, convertToCdata);
- out.write(BRA);
- out.write(SLASH);
- out.write(encodeText(value));
- out.write(KET);
- }
- break;
- case Node.TEXT_NODE:
- value = node.getNodeValue();
- if (!"yes".equals(node.getUserData("disable-output-escaping")))
- {
- value = encode(value, false, false);
- }
- out.write(encodeText(value));
- break;
- case Node.CDATA_SECTION_NODE:
- value = "<![CDATA[" + node.getNodeValue() + "]]>";
- out.write(encodeText(value));
- break;
- case Node.COMMENT_NODE:
- value = "<!--" + node.getNodeValue() + "-->";
- out.write(encodeText(value));
- Node cp = node.getParentNode();
- if (cp != null && cp.getNodeType() == Node.DOCUMENT_NODE)
- {
- out.write(encodeText(eol));
- }
- break;
- case Node.DOCUMENT_NODE:
- case Node.DOCUMENT_FRAGMENT_NODE:
- if (mode == Stylesheet.OUTPUT_XML)
- {
- if ("UTF-16".equalsIgnoreCase(encoding))
- {
- out.write(0xfe);
- out.write(0xff);
- }
- if (!"yes".equals(node.getUserData("omit-xml-declaration")) &&
- xmlDeclaration)
- {
- Document doc = (node instanceof Document) ?
- (Document) node : null;
- String version = (doc != null) ? doc.getXmlVersion() : null;
- if (version == null)
- {
- version = (String) node.getUserData("version");
- }
- if (version == null)
- {
- version = "1.0";
- }
- out.write(BRA);
- out.write(0x3f);
- out.write("xml version='".getBytes("US-ASCII"));
- out.write(version.getBytes("US-ASCII"));
- out.write(APOS);
- if (!("UTF-8".equalsIgnoreCase(encoding)))
- {
- out.write(" encoding='".getBytes("US-ASCII"));
- out.write(encoding.getBytes("US-ASCII"));
- out.write(APOS);
- }
- if ((doc != null && doc.getXmlStandalone()) ||
- "yes".equals(node.getUserData("standalone")))
- {
- out.write(" standalone='yes'".getBytes("US-ASCII"));
- }
- out.write(0x3f);
- out.write(KET);
- out.write(encodeText(eol));
- }
- // TODO warn if not outputting the declaration would be a
- // problem
- }
- else if (mode == Stylesheet.OUTPUT_HTML)
- {
- // Ensure that encoding is accessible
- String mediaType = (String) node.getUserData("media-type");
- if (mediaType == null)
- {
- mediaType = "text/html";
- }
- String contentType = mediaType + "; charset=" +
- ((encoding.indexOf(' ') != -1) ?
- "\"" + encoding + "\"" :
- encoding);
- Document doc = (node instanceof Document) ? (Document) node :
- node.getOwnerDocument();
- Node html = null;
- for (Node ctx = node.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- if (ctx.getNodeType() == Node.ELEMENT_NODE)
- {
- html = ctx;
- break;
- }
- }
- if (html == null)
- {
- html = doc.createElement("html");
- node.appendChild(html);
- }
- Node head = null;
- for (Node ctx = html.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- if (ctx.getNodeType() == Node.ELEMENT_NODE &&
- "head".equalsIgnoreCase(ctx.getLocalName()))
- {
- head = ctx;
- break;
- }
- }
- if (head == null)
- {
- head = doc.createElement("head");
- Node c1 = null;
- for (Node ctx = html.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- if (ctx.getNodeType() == Node.ELEMENT_NODE)
- {
- c1 = ctx;
- break;
- }
- }
- if (c1 != null)
- {
- html.insertBefore(head, c1);
- }
- else
- {
- html.appendChild(head);
- }
- }
- Node meta = null;
- Node metaContent = null;
- for (Node ctx = head.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- if (ctx.getNodeType() == Node.ELEMENT_NODE &&
- "meta".equalsIgnoreCase(ctx.getLocalName()))
- {
- NamedNodeMap metaAttrs = ctx.getAttributes();
- int len = metaAttrs.getLength();
- String httpEquiv = null;
- Node content = null;
- for (int i = 0; i < len; i++)
- {
- Node attr = metaAttrs.item(i);
- String attrName = attr.getNodeName();
- if ("http-equiv".equalsIgnoreCase(attrName))
- {
- httpEquiv = attr.getNodeValue();
- }
- else if ("content".equalsIgnoreCase(attrName))
- {
- content = attr;
- }
- }
- if ("Content-Type".equalsIgnoreCase(httpEquiv))
- {
- meta = ctx;
- metaContent = content;
- break;
- }
- }
- }
- if (meta == null)
- {
- meta = doc.createElement("meta");
- // Insert first
- Node first = head.getFirstChild();
- if (first == null)
- {
- head.appendChild(meta);
- }
- else
- {
- head.insertBefore(meta, first);
- }
- Node metaHttpEquiv = doc.createAttribute("http-equiv");
- meta.getAttributes().setNamedItem(metaHttpEquiv);
- metaHttpEquiv.setNodeValue("Content-Type");
- }
- if (metaContent == null)
- {
- metaContent = doc.createAttribute("content");
- meta.getAttributes().setNamedItem(metaContent);
- }
- metaContent.setNodeValue(contentType);
- // phew
- }
- children = node.getFirstChild();
- if (children != null)
- {
- serialize(children, out, convertToCdata);
- }
- break;
- case Node.DOCUMENT_TYPE_NODE:
- DocumentType doctype = (DocumentType) node;
- out.write(BRA);
- out.write(BANG);
- value = doctype.getNodeName();
- out.write(encodeText(value));
- String publicId = doctype.getPublicId();
- if (publicId != null)
- {
- out.write(encodeText(" PUBLIC "));
- out.write(APOS);
- out.write(encodeText(publicId));
- out.write(APOS);
- }
- String systemId = doctype.getSystemId();
- if (systemId != null)
- {
- out.write(encodeText(" SYSTEM "));
- out.write(APOS);
- out.write(encodeText(systemId));
- out.write(APOS);
- }
- String internalSubset = doctype.getInternalSubset();
- if (internalSubset != null)
- {
- out.write(encodeText(internalSubset));
- }
- out.write(KET);
- out.write(eol.getBytes(encoding));
- break;
- case Node.ENTITY_REFERENCE_NODE:
- value = "&" + node.getNodeValue() + ";";
- out.write(encodeText(value));
- break;
- case Node.PROCESSING_INSTRUCTION_NODE:
- value = "<?" + node.getNodeName() + " " + node.getNodeValue() + "?>";
- out.write(encodeText(value));
- Node pp = node.getParentNode();
- if (pp != null && pp.getNodeType() == Node.DOCUMENT_NODE)
- {
- out.write(encodeText(eol));
- }
- break;
- }
- if (defined)
- {
- undefine(uri);
- }
- if (next != null)
- {
- serialize(next, out, convertToCdata);
- }
- }
-
- boolean isDefined(String uri)
- {
- return XMLConstants.XML_NS_URI.equals(uri) ||
- XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(uri) ||
- namespaces.containsKey(uri);
- }
-
- String define(String uri, String prefix)
- {
- while (namespaces.containsValue(prefix))
- {
- // Fabricate new prefix
- prefix = prefix + "_";
- }
- namespaces.put(uri, prefix);
- return prefix;
- }
-
- void undefine(String uri)
- {
- namespaces.remove(uri);
- }
-
- final byte[] encodeText(String text)
- throws UnsupportedEncodingException
- {
- if (compatibilityMode)
- {
- int len = text.length();
- StringBuffer buf = null;
- for (int i = 0; i < len; i++)
- {
- char c = text.charAt(i);
- if (c >= 127)
- {
- if (buf == null)
- {
- buf = new StringBuffer(text.substring(0, i));
- }
- buf.append('&');
- buf.append('#');
- buf.append((int) c);
- buf.append(';');
- }
- else if (buf != null)
- {
- buf.append(c);
- }
- }
- if (buf != null)
- {
- text = buf.toString();
- }
- }
- return text.getBytes(encoding);
- }
-
- String encode(String text, boolean encodeCtl, boolean inAttr)
- {
- int len = text.length();
- StringBuffer buf = null;
- for (int i = 0; i < len; i++)
- {
- char c = text.charAt(i);
- if (c == '<')
- {
- if (buf == null)
- {
- buf = new StringBuffer(text.substring(0, i));
- }
- buf.append("&lt;");
- }
- else if (c == '>')
- {
- if (buf == null)
- {
- buf = new StringBuffer(text.substring(0, i));
- }
- buf.append("&gt;");
- }
- else if (c == '&')
- {
- if (mode == Stylesheet.OUTPUT_HTML && (i + 1) < len &&
- text.charAt(i + 1) == '{')
- {
- if (buf != null)
- {
- buf.append(c);
- }
- }
- else
- {
- if (buf == null)
- {
- buf = new StringBuffer(text.substring(0, i));
- }
- buf.append("&amp;");
- }
- }
- else if (c == '\'' && inAttr)
- {
- if (buf == null)
- {
- buf = new StringBuffer(text.substring(0, i));
- }
- buf.append("&apos;");
- }
- else if (c == '"' && inAttr)
- {
- if (buf == null)
- {
- buf = new StringBuffer(text.substring(0, i));
- }
- buf.append("&quot;");
- }
- else if (encodeCtl)
- {
- if (c < 0x20)
- {
- if (buf == null)
- {
- buf = new StringBuffer(text.substring(0, i));
- }
- buf.append('&');
- buf.append('#');
- buf.append((int) c);
- buf.append(';');
- }
- else if (buf != null)
- {
- buf.append(c);
- }
- }
- else if (buf != null)
- {
- buf.append(c);
- }
- }
- return (buf == null) ? text : buf.toString();
- }
-
- String toString(Node node)
- {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- try
- {
- serialize(node, out);
- return new String(out.toByteArray(), encoding);
- }
- catch (IOException e)
- {
- throw new RuntimeException(e.getMessage());
- }
- }
-
-}
diff --git a/libjava/gnu/xml/transform/Stylesheet.java b/libjava/gnu/xml/transform/Stylesheet.java
deleted file mode 100644
index 5efd5ca3e3e..00000000000
--- a/libjava/gnu/xml/transform/Stylesheet.java
+++ /dev/null
@@ -1,1728 +0,0 @@
-/* Stylesheet.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.TreeSet;
-import javax.xml.XMLConstants;
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.namespace.QName;
-import javax.xml.transform.Source;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.xpath.XPathFunction;
-import javax.xml.xpath.XPathFunctionResolver;
-import javax.xml.xpath.XPathExpressionException;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-import org.w3c.dom.UserDataHandler;
-import gnu.xml.xpath.Expr;
-import gnu.xml.xpath.NameTest;
-import gnu.xml.xpath.NodeTypeTest;
-import gnu.xml.xpath.Pattern;
-import gnu.xml.xpath.Selector;
-import gnu.xml.xpath.Root;
-import gnu.xml.xpath.Test;
-import gnu.xml.xpath.XPathImpl;
-
-/**
- * An XSL stylesheet.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class Stylesheet
- implements NamespaceContext, XPathFunctionResolver, UserDataHandler, Cloneable
-{
-
- static final String XSL_NS = "http://www.w3.org/1999/XSL/Transform";
-
- static final int OUTPUT_XML = 0;
- static final int OUTPUT_HTML = 1;
- static final int OUTPUT_TEXT = 2;
-
- final TransformerFactoryImpl factory;
- TransformerImpl transformer;
- Stylesheet parent;
- final XPathImpl xpath;
- final String systemId;
- final int precedence;
-
- final boolean debug;
-
- /**
- * Version of XSLT.
- */
- String version;
-
- Collection extensionElementPrefixes;
- Collection excludeResultPrefixes;
-
- /**
- * Set of element names for which we should strip whitespace.
- */
- Set stripSpace;
-
- /**
- * Set of element names for which we should preserve whitespace.
- */
- Set preserveSpace;
-
- /**
- * Output options.
- */
- int outputMethod;
- String outputVersion;
- String outputEncoding;
- boolean outputOmitXmlDeclaration;
- boolean outputStandalone;
- String outputPublicId;
- String outputSystemId;
- Collection outputCdataSectionElements;
- boolean outputIndent;
- String outputMediaType;
-
- /**
- * Keys.
- */
- Collection keys;
-
- /**
- * Decimal formats.
- */
- Map decimalFormats;
-
- /**
- * Namespace aliases.
- */
- Map namespaceAliases;
-
- /**
- * Attribute-sets.
- */
- List attributeSets;
-
- /**
- * Variables.
- */
- List variables;
-
- /**
- * Variable and parameter bindings.
- */
- Bindings bindings;
-
- /**
- * Templates.
- */
- LinkedList templates;
-
- TemplateNode builtInNodeTemplate;
- TemplateNode builtInTextTemplate;
-
- /**
- * Holds the current node while parsing.
- * Necessary to associate the document function with its declaring node,
- * to resolve namespaces, and to maintain the current node for the
- * current() function.
- */
- Node current;
-
- /**
- * Set by a terminating message.
- */
- transient boolean terminated;
-
- /**
- * Current template in force.
- */
- transient Template currentTemplate;
-
- Stylesheet(TransformerFactoryImpl factory,
- Stylesheet parent,
- Document doc,
- String systemId,
- int precedence)
- throws TransformerConfigurationException
- {
- this.factory = factory;
- this.systemId = systemId;
- this.precedence = precedence;
- this.parent = parent;
- extensionElementPrefixes = new HashSet();
- excludeResultPrefixes = new HashSet();
- stripSpace = new LinkedHashSet();
- preserveSpace = new LinkedHashSet();
- outputCdataSectionElements = new LinkedHashSet();
- xpath = (XPathImpl) factory.xpathFactory.newXPath();
- if (parent == null)
- {
- bindings = new Bindings(this);
- attributeSets = new LinkedList();
- variables = new LinkedList();
- namespaceAliases = new LinkedHashMap();
- templates = new LinkedList();
- keys = new LinkedList();
- decimalFormats = new LinkedHashMap();
- initDefaultDecimalFormat();
- xpath.setNamespaceContext(this);
- xpath.setXPathFunctionResolver(this);
- }
- else
- {
- /* Test for import circularity */
- for (Stylesheet ctx = this; ctx.parent != null; ctx = ctx.parent)
- {
- if (systemId != null && systemId.equals(ctx.parent.systemId))
- {
- String msg = "circularity importing " + systemId;
- throw new TransformerConfigurationException(msg);
- }
- }
- /* OK */
- Stylesheet root = getRootStylesheet();
- bindings = root.bindings;
- attributeSets = root.attributeSets;
- variables = root.variables;
- namespaceAliases = root.namespaceAliases;
- templates = root.templates;
- keys = root.keys;
- decimalFormats = root.decimalFormats;
- xpath.setNamespaceContext(root);
- xpath.setXPathFunctionResolver(root);
- }
- xpath.setXPathVariableResolver(bindings);
-
- Test anyNode = new NodeTypeTest((short) 0);
- List tests = Collections.singletonList(anyNode);
- builtInNodeTemplate =
- new ApplyTemplatesNode(null, null,
- new Selector(Selector.CHILD, tests),
- null, null, null, true);
- builtInTextTemplate =
- new ValueOfNode(null, null,
- new Selector(Selector.SELF, tests),
- false);
-
- parse(doc.getDocumentElement(), true);
- current = doc; // Alow namespace resolution during processing
-
- debug = ("yes".equals(System.getProperty("xsl.debug")));
-
- if (debug)
- {
- System.err.println("Stylesheet: " + doc.getDocumentURI());
- for (Iterator i = templates.iterator(); i.hasNext(); )
- {
- Template t = (Template) i.next();
- t.list(System.err);
- System.err.println("--------------------");
- }
- }
- }
-
- Stylesheet getRootStylesheet()
- {
- Stylesheet stylesheet = this;
- while (stylesheet.parent != null)
- {
- stylesheet = stylesheet.parent;
- }
- return stylesheet;
- }
-
- void initDefaultDecimalFormat()
- {
- DecimalFormat defaultDecimalFormat = new DecimalFormat();
- DecimalFormatSymbols symbols = new DecimalFormatSymbols();
- symbols.setDecimalSeparator('.');
- symbols.setGroupingSeparator(',');
- symbols.setPercent('%');
- symbols.setPerMill('\u2030');
- symbols.setZeroDigit('0');
- symbols.setDigit('#');
- symbols.setPatternSeparator(';');
- symbols.setInfinity("Infinity");
- symbols.setNaN("NaN");
- symbols.setMinusSign('-');
- defaultDecimalFormat.setDecimalFormatSymbols(symbols);
- decimalFormats.put(null, defaultDecimalFormat);
- }
-
- // -- Cloneable --
-
- public Object clone()
- {
- try
- {
- Stylesheet clone = (Stylesheet) super.clone();
- clone.bindings = (Bindings) bindings.clone();
-
- LinkedList templates2 = new LinkedList();
- for (Iterator i = templates.iterator(); i.hasNext(); )
- {
- Template t = (Template) i.next();
- templates2.add(t.clone(clone));
- }
- clone.templates = templates2;
-
- LinkedList attributeSets2 = new LinkedList();
- for (Iterator i = attributeSets.iterator(); i.hasNext(); )
- {
- AttributeSet as = (AttributeSet) i.next();
- attributeSets2.add(as.clone(clone));
- }
- clone.attributeSets = attributeSets2;
-
- LinkedList variables2 = new LinkedList();
- for (Iterator i = variables.iterator(); i.hasNext(); )
- {
- ParameterNode var = (ParameterNode) i.next();
- variables2.add(var.clone(clone));
- }
- clone.variables = variables2;
-
- LinkedList keys2 = new LinkedList();
- for (Iterator i = keys.iterator(); i.hasNext(); )
- {
- Key k = (Key) i.next();
- keys2.add(k.clone(clone));
- }
- clone.keys = keys2;
-
- return clone;
- }
- catch (CloneNotSupportedException e)
- {
- throw new Error(e.getMessage());
- }
- }
-
- // -- Variable evaluation --
-
- void initTopLevelVariables(Node context)
- throws TransformerException
- {
- for (Iterator i = variables.iterator(); i.hasNext(); )
- {
- ParameterNode var = (ParameterNode) i.next();
- bindings.set(var.name,
- var.getValue(this, null, context, 1, 1),
- var.global);
- }
- }
-
- // -- NamespaceContext --
-
- public String getNamespaceURI(String prefix)
- {
- return (current == null) ? null : current.lookupNamespaceURI(prefix);
- }
-
- public String getPrefix(String namespaceURI)
- {
- return (current == null) ? null : current.lookupPrefix(namespaceURI);
- }
-
- public Iterator getPrefixes(String namespaceURI)
- {
- // TODO
- return Collections.singleton(getPrefix(namespaceURI)).iterator();
- }
-
- // -- Template selection --
-
- TemplateNode getTemplate(QName mode, Node context, boolean applyImports)
- throws TransformerException
- {
- //System.err.println("getTemplate: mode="+mode+" context="+context);
- Set candidates = new TreeSet();
- for (Iterator j = templates.iterator(); j.hasNext(); )
- {
- Template t = (Template) j.next();
- boolean isMatch = t.matches(mode, context);
- if (applyImports)
- {
- if (currentTemplate == null)
- {
- String msg = "current template may not be null " +
- "during apply-imports";
- throw new TransformerException(msg);
- }
- if (!currentTemplate.imports(t))
- {
- isMatch = false;
- }
- }
- //System.err.println("\t"+context+" "+t+"="+isMatch);
- if (isMatch)
- {
- candidates.add(t);
- }
- }
- //System.err.println("\tcandidates="+candidates);
- if (candidates.isEmpty())
- {
- // Apply built-in template
- // Current template is unchanged
- //System.err.println("\tbuiltInTemplate context="+context);
- switch (context.getNodeType())
- {
- case Node.ELEMENT_NODE:
- case Node.DOCUMENT_NODE:
- case Node.DOCUMENT_FRAGMENT_NODE:
- case Node.PROCESSING_INSTRUCTION_NODE:
- case Node.COMMENT_NODE:
- return builtInNodeTemplate;
- case Node.TEXT_NODE:
- case Node.ATTRIBUTE_NODE:
- return builtInTextTemplate;
- default:
- return null;
- }
- }
- else
- {
- Template t = (Template) candidates.iterator().next();
- // Set current template
- currentTemplate = t;
- //System.err.println("\ttemplate="+t+" context="+context);
- return t.node;
- }
- }
-
- TemplateNode getTemplate(QName mode, QName name)
- throws TransformerException
- {
- //System.err.println("getTemplate: mode="+mode+" name="+name);
- Set candidates = new TreeSet();
- for (Iterator j = templates.iterator(); j.hasNext(); )
- {
- Template t = (Template) j.next();
- boolean isMatch = t.matches(name);
- //System.err.println("\t"+name+" "+t+"="+isMatch);
- if (isMatch)
- {
- candidates.add(t);
- }
- }
- if (candidates.isEmpty())
- {
- return null;
- //throw new TransformerException("template '" + name + "' not found");
- }
- Template t = (Template) candidates.iterator().next();
- //System.err.println("\ttemplate="+t+" context="+context);
- return t.node;
- }
-
- /**
- * template
- */
- final Template parseTemplate(Node node, NamedNodeMap attrs)
- throws TransformerConfigurationException, XPathExpressionException
- {
- String n = getAttribute(attrs, "name");
- QName name = (n == null) ? null : getQName(n);
- String m = getAttribute(attrs, "match");
- Pattern match = null;
- if (m != null)
- {
- try
- {
- match = (Pattern) xpath.compile(m);
- }
- catch (ClassCastException e)
- {
- String msg = "illegal pattern: " + m;
- throw new TransformerConfigurationException(msg);
- }
- }
- String p = getAttribute(attrs, "priority");
- String mm = getAttribute(attrs, "mode");
- QName mode = (mm == null) ? null : getQName(mm);
- double priority = (p == null) ? Template.DEFAULT_PRIORITY :
- Double.parseDouble(p);
- return new Template(this, name, match, parse(node.getFirstChild()),
- precedence, priority, mode);
- }
-
- /**
- * output
- */
- final void parseOutput(Node node, NamedNodeMap attrs)
- throws TransformerConfigurationException
- {
- String method = getAttribute(attrs, "method");
- if ("xml".equals(method) || method == null)
- {
- outputMethod = OUTPUT_XML;
- }
- else if ("html".equals(method))
- {
- outputMethod = OUTPUT_HTML;
- }
- else if ("text".equals(method))
- {
- outputMethod = OUTPUT_TEXT;
- }
- else
- {
- String msg = "unsupported output method: " + method;
- DOMSourceLocator l = new DOMSourceLocator(node);
- throw new TransformerConfigurationException(msg, l);
- }
- outputPublicId = getAttribute(attrs, "public-id");
- outputSystemId = getAttribute(attrs, "system-id");
- outputEncoding = getAttribute(attrs, "encoding");
- String indent = getAttribute(attrs, "indent");
- if (indent != null)
- {
- outputIndent = "yes".equals(indent);
- }
- outputVersion = getAttribute(attrs, "version");
- String omitXmlDecl = getAttribute(attrs, "omit-xml-declaration");
- if (omitXmlDecl != null)
- {
- outputOmitXmlDeclaration = "yes".equals(omitXmlDecl);
- }
- String standalone = getAttribute(attrs, "standalone");
- if (standalone != null)
- {
- outputStandalone = "yes".equals(standalone);
- }
- outputMediaType = getAttribute(attrs, "media-type");
- String cdataSectionElements =
- getAttribute(attrs, "cdata-section-elements");
- if (cdataSectionElements != null)
- {
- StringTokenizer st = new StringTokenizer(cdataSectionElements, " ");
- while (st.hasMoreTokens())
- {
- outputCdataSectionElements.add(st.nextToken());
- }
- }
- }
-
- /**
- * key
- */
- final void parseKey(Node node, NamedNodeMap attrs)
- throws TransformerConfigurationException, XPathExpressionException
- {
- String n = getRequiredAttribute(attrs, "name", node);
- String m = getRequiredAttribute(attrs, "match", node);
- String u = getRequiredAttribute(attrs, "use", node);
- QName name = getQName(n);
- Expr use = (Expr) xpath.compile(u);
- try
- {
- Pattern match = (Pattern) xpath.compile(m);
- Key key = new Key(name, match, use);
- keys.add(key);
- }
- catch (ClassCastException e)
- {
- throw new TransformerConfigurationException("invalid pattern: " + m);
- }
- }
-
- /**
- * decimal-format
- */
- final void parseDecimalFormat(Node node, NamedNodeMap attrs)
- throws TransformerConfigurationException
- {
- String dfName = getAttribute(attrs, "name");
- DecimalFormat df = new DecimalFormat();
- DecimalFormatSymbols symbols = new DecimalFormatSymbols();
- symbols.setDecimalSeparator(parseDFChar(attrs, "decimal-separator", '.'));
- symbols.setGroupingSeparator(parseDFChar(attrs, "grouping-separator", ','));
- symbols.setInfinity(parseDFString(attrs, "infinity", "Infinity"));
- symbols.setMinusSign(parseDFChar(attrs, "minus-sign", '-'));
- symbols.setNaN(parseDFString(attrs, "NaN", "NaN"));
- symbols.setPercent(parseDFChar(attrs, "percent", '%'));
- symbols.setPerMill(parseDFChar(attrs, "per-mille", '\u2030'));
- symbols.setZeroDigit(parseDFChar(attrs, "zero-digit", '0'));
- symbols.setDigit(parseDFChar(attrs, "digit", '#'));
- symbols.setPatternSeparator(parseDFChar(attrs, "pattern-separator", ';'));
- df.setDecimalFormatSymbols(symbols);
- decimalFormats.put(dfName, df);
- }
-
- private final char parseDFChar(NamedNodeMap attrs, String name, char def)
- throws TransformerConfigurationException
- {
- Node attr = attrs.getNamedItem(name);
- try
- {
- return (attr == null) ? def : attr.getNodeValue().charAt(0);
- }
- catch (StringIndexOutOfBoundsException e)
- {
- throw new TransformerConfigurationException("empty attribute '" +
- name +
- "' in decimal-format", e);
- }
- }
-
- private final String parseDFString(NamedNodeMap attrs, String name,
- String def)
- {
- Node attr = attrs.getNamedItem(name);
- return (attr == null) ? def : attr.getNodeValue();
- }
-
- /**
- * namespace-alias
- */
- final void parseNamespaceAlias(Node node, NamedNodeMap attrs)
- throws TransformerConfigurationException
- {
- String sp = getRequiredAttribute(attrs, "stylesheet-prefix", node);
- String rp = getRequiredAttribute(attrs, "result-prefix", node);
- namespaceAliases.put(sp, rp);
- }
-
- /**
- * attribute-set
- */
- final void parseAttributeSet(Node node, NamedNodeMap attrs)
- throws TransformerConfigurationException, XPathExpressionException
- {
- TemplateNode children = parse(node.getFirstChild());
- String name = getRequiredAttribute(attrs, "name", node);
- String uas = getAttribute(attrs, "use-attribute-sets");
- attributeSets.add(new AttributeSet(children, name, uas));
- }
-
- /**
- * Parse top-level elements.
- */
- void parse(Node node, boolean root)
- throws TransformerConfigurationException
- {
- if (node == null)
- {
- return;
- }
- current = node;
- try
- {
- String namespaceUri = node.getNamespaceURI();
- if (XSL_NS.equals(namespaceUri) &&
- node.getNodeType() == Node.ELEMENT_NODE)
- {
- String name = node.getLocalName();
- NamedNodeMap attrs = node.getAttributes();
- if ("stylesheet".equals(name))
- {
- version = getAttribute(attrs, "version");
- String eep = getAttribute(attrs, "extension-element-prefixes");
- if (eep != null)
- {
- StringTokenizer st = new StringTokenizer(eep);
- while (st.hasMoreTokens())
- {
- extensionElementPrefixes.add(st.nextToken());
- }
- }
- String erp = getAttribute(attrs, "exclude-result-prefixes");
- if (erp != null)
- {
- StringTokenizer st = new StringTokenizer(erp);
- while (st.hasMoreTokens())
- {
- excludeResultPrefixes.add(st.nextToken());
- }
- }
- parse(node.getFirstChild(), false);
- return;
- }
- else if ("template".equals(name))
- {
- templates.addFirst(parseTemplate(node, attrs));
- }
- else if ("param".equals(name) ||
- "variable".equals(name))
- {
- boolean global = "variable".equals(name);
- TemplateNode content = parse(node.getFirstChild());
- String paramName = getRequiredAttribute(attrs, "name", node);
- String select = getAttribute(attrs, "select");
- if (select != null && select.length() > 0)
- {
- if (content != null)
- {
- String msg = "parameter '" + paramName +
- "' has both select and content";
- DOMSourceLocator l = new DOMSourceLocator(node);
- throw new TransformerConfigurationException(msg, l);
- }
- Expr expr = (Expr) xpath.compile(select);
- variables.add(new ParameterNode(null, null,
- paramName,
- expr, global));
- }
- else
- {
- variables.add(new ParameterNode(content, null,
- paramName,
- null, global));
- }
- bindings.set(paramName, content, global);
- }
- else if ("include".equals(name) || "import".equals(name))
- {
- int delta = "import".equals(name) ? -1 : 0;
- String href = getRequiredAttribute(attrs, "href", node);
- Source source;
- synchronized (factory.resolver)
- {
- if (transformer != null)
- {
- factory.resolver
- .setUserResolver(transformer.getURIResolver());
- factory.resolver
- .setUserListener(transformer.getErrorListener());
- }
- source = factory.resolver.resolve(systemId, href);
- }
- factory.newStylesheet(source, precedence + delta, this);
- }
- else if ("output".equals(name))
- {
- parseOutput(node, attrs);
- }
- else if ("preserve-space".equals(name))
- {
- String elements =
- getRequiredAttribute(attrs, "elements", node);
- StringTokenizer st = new StringTokenizer(elements,
- " \t\n\r");
- while (st.hasMoreTokens())
- {
- preserveSpace.add(parseNameTest(st.nextToken()));
- }
- }
- else if ("strip-space".equals(name))
- {
- String elements =
- getRequiredAttribute(attrs, "elements", node);
- StringTokenizer st = new StringTokenizer(elements,
- " \t\n\r");
- while (st.hasMoreTokens())
- {
- stripSpace.add(parseNameTest(st.nextToken()));
- }
- }
- else if ("key".equals(name))
- {
- parseKey(node, attrs);
- }
- else if ("decimal-format".equals(name))
- {
- parseDecimalFormat(node, attrs);
- }
- else if ("namespace-alias".equals(name))
- {
- parseNamespaceAlias(node, attrs);
- }
- else if ("attribute-set".equals(name))
- {
- parseAttributeSet(node, attrs);
- }
- parse(node.getNextSibling(), false);
- }
- else if (root)
- {
- // Literal document element
- Attr versionNode =
- ((Element)node).getAttributeNodeNS(XSL_NS, "version");
- if (versionNode == null)
- {
- String msg = "no xsl:version attribute on literal result node";
- DOMSourceLocator l = new DOMSourceLocator(node);
- throw new TransformerConfigurationException(msg, l);
- }
- version = versionNode.getValue();
- Node rootClone = node.cloneNode(true);
- NamedNodeMap attrs = rootClone.getAttributes();
- attrs.removeNamedItemNS(XSL_NS, "version");
- templates.add(new Template(this, null, new Root(),
- parse(rootClone),
- precedence,
- Template.DEFAULT_PRIORITY,
- null));
- }
- else
- {
- // Skip unknown elements, text, comments, etc
- parse(node.getNextSibling(), false);
- }
- }
- catch (TransformerException e)
- {
- DOMSourceLocator l = new DOMSourceLocator(node);
- throw new TransformerConfigurationException(e.getMessage(), l, e);
- }
- catch (DOMException e)
- {
- DOMSourceLocator l = new DOMSourceLocator(node);
- throw new TransformerConfigurationException(e.getMessage(), l, e);
- }
- catch (XPathExpressionException e)
- {
- DOMSourceLocator l = new DOMSourceLocator(node);
- throw new TransformerConfigurationException(e.getMessage(), l, e);
- }
- }
-
- final NameTest parseNameTest(String token)
- {
- if ("*".equals(token))
- {
- return new NameTest(null, true, true);
- }
- else if (token.endsWith(":*"))
- {
- QName qName = getQName(token.substring(0, token.length() - 2));
- return new NameTest(qName, true, false);
- }
- else
- {
- QName qName = getQName(token);
- return new NameTest(qName, false, false);
- }
- }
-
- final QName getQName(String name)
- {
- QName qName = QName.valueOf(name);
- String prefix = qName.getPrefix();
- String uri = qName.getNamespaceURI();
- if (prefix != null && (uri == null || uri.length() == 0))
- {
- uri = getNamespaceURI(prefix);
- String localName = qName.getLocalPart();
- qName = new QName(uri, localName, prefix);
- }
- return qName;
- }
-
- final TemplateNode parseAttributeValueTemplate(String value, Node source)
- throws TransformerConfigurationException, XPathExpressionException
- {
- current = source;
- // Tokenize
- int len = value.length();
- int off = 0;
- List tokens = new ArrayList(); // text tokens
- List types = new ArrayList(); // literal or expression
- int depth = 0;
- for (int i = 0; i < len; i++)
- {
- char c = value.charAt(i);
- if (c == '{')
- {
- if (i < (len - 1) && value.charAt(i + 1) == '{')
- {
- tokens.add(value.substring(off, i + 1));
- types.add(Boolean.FALSE);
- i++;
- off = i + 1;
- continue;
- }
- if (depth == 0)
- {
- if (i - off > 0)
- {
- tokens.add(value.substring(off, i));
- types.add(Boolean.FALSE);
- }
- off = i + 1;
- }
- depth++;
- }
- else if (c == '}')
- {
- if (i < (len - 1) && value.charAt(i + 1) == '}')
- {
- tokens.add(value.substring(off, i + 1));
- types.add(Boolean.FALSE);
- i++;
- off = i + 1;
- continue;
- }
- if (depth == 1)
- {
- if (i - off > 0)
- {
- tokens.add(value.substring(off, i));
- types.add(Boolean.TRUE);
- }
- else
- {
- String msg = "attribute value template " +
- "must contain expression: " + value;
- DOMSourceLocator l = new DOMSourceLocator(source);
- throw new TransformerConfigurationException(msg, l);
- }
- off = i + 1;
- }
- depth--;
- }
- }
- if (depth > 0)
- {
- String msg = "invalid attribute value template: " + value;
- throw new TransformerConfigurationException(msg);
- }
- if (len - off > 0)
- {
- // Trailing text
- tokens.add(value.substring(off));
- types.add(Boolean.FALSE);
- }
-
- // Construct template node tree
- TemplateNode ret = null;
- Document doc = source.getOwnerDocument();
- len = tokens.size();
- for (int i = len - 1; i >= 0; i--)
- {
- String token = (String) tokens.get(i);
- Boolean type = (Boolean) types.get(i);
- if (type == Boolean.TRUE)
- {
- // Expression text
- Expr select = (Expr) xpath.compile(token);
- ret = new ValueOfNode(null, ret, select, false);
- }
- else
- {
- // Verbatim text
- ret = new LiteralNode(null, ret, doc.createTextNode(token));
- }
- }
- return ret;
- }
-
- boolean isPreserved(Text text)
- throws TransformerConfigurationException
- {
- // Check characters in text
- String value = text.getData();
- if (value != null)
- {
- int len = value.length();
- for (int i = 0; i < len; i++)
- {
- char c = value.charAt(i);
- if (c != 0x20 && c != 0x09 && c != 0x0a && c != 0x0d)
- {
- return true;
- }
- }
- }
- // Check parent node
- Node ctx = text.getParentNode();
- if (!preserveSpace.isEmpty())
- {
- for (Iterator i = preserveSpace.iterator(); i.hasNext(); )
- {
- NameTest preserveTest = (NameTest) i.next();
- if (preserveTest.matches(ctx, 1, 1))
- {
- boolean override = false;
- if (!stripSpace.isEmpty())
- {
- for (Iterator j = stripSpace.iterator(); j.hasNext(); )
- {
- NameTest stripTest = (NameTest) j.next();
- if (stripTest.matches(ctx, 1, 1))
- {
- override = true;
- break;
- }
- }
- }
- if (!override)
- {
- return true;
- }
- }
- }
- }
- // Check whether any ancestor specified xml:space
- while (ctx != null)
- {
- if (ctx.getNodeType() == Node.ELEMENT_NODE)
- {
- Element element = (Element) ctx;
- String xmlSpace = element.getAttribute("xml:space");
- if ("default".equals(xmlSpace))
- {
- break;
- }
- else if ("preserve".equals(xmlSpace))
- {
- return true;
- }
- else if (xmlSpace.length() > 0)
- {
- String msg = "Illegal value for xml:space: " + xmlSpace;
- throw new TransformerConfigurationException(msg);
- }
- else if ("text".equals(ctx.getLocalName()) &&
- XSL_NS.equals(ctx.getNamespaceURI()))
- {
- // xsl:text implies xml:space='preserve'
- return true;
- }
- }
- ctx = ctx.getParentNode();
- }
- return false;
- }
-
- public XPathFunction resolveFunction(QName name, int arity)
- {
- String uri = name.getNamespaceURI();
- if (XSL_NS.equals(uri) || uri == null || uri.length() == 0)
- {
- String localName = name.getLocalPart();
- if ("document".equals(localName) && (arity == 1 || arity == 2))
- {
- if (current == null)
- {
- throw new RuntimeException("current is null");
- }
- return new DocumentFunction(getRootStylesheet(), current);
- }
- else if ("key".equals(localName) && (arity == 2))
- {
- return new KeyFunction(getRootStylesheet());
- }
- else if ("format-number".equals(localName) &&
- (arity == 2 || arity == 3))
- {
- return new FormatNumberFunction(getRootStylesheet());
- }
- else if ("current".equals(localName) && (arity == 0))
- {
- return new CurrentFunction(getRootStylesheet());
- }
- else if ("unparsed-entity-uri".equals(localName) && (arity == 1))
- {
- return new UnparsedEntityUriFunction();
- }
- else if ("generate-id".equals(localName) &&
- (arity == 1 || arity == 0))
- {
- return new GenerateIdFunction();
- }
- else if ("system-property".equals(localName) && (arity == 1))
- {
- return new SystemPropertyFunction();
- }
- else if ("element-available".equals(localName) && (arity == 1))
- {
- return new ElementAvailableFunction(this);
- }
- else if ("function-available".equals(localName) && (arity == 1))
- {
- return new FunctionAvailableFunction(this);
- }
- }
- return null;
- }
-
- // -- Parsing --
-
- /**
- * apply-templates
- */
- final TemplateNode parseApplyTemplates(Node node, Node children, Node next)
- throws TransformerConfigurationException, XPathExpressionException
- {
- NamedNodeMap attrs = node.getAttributes();
- String m = getAttribute(attrs, "mode");
- QName mode = (m == null) ? null : getQName(m);
- String s = getAttribute(attrs, "select");
- if (s == null)
- {
- s = "child::node()";
- }
- List sortKeys = parseSortKeys(children);
- List withParams = parseWithParams(children);
- Expr select = (Expr) xpath.compile(s);
- return new ApplyTemplatesNode(null, parse(next),
- select, mode,
- sortKeys, withParams, false);
- }
-
- /**
- * call-template
- */
- final TemplateNode parseCallTemplate(Node node, Node children, Node next)
- throws TransformerConfigurationException, XPathExpressionException
- {
- NamedNodeMap attrs = node.getAttributes();
- String n = getRequiredAttribute(attrs, "name", node);
- QName name = getQName(n);
- List withParams = parseWithParams(children);
- return new CallTemplateNode(null, parse(next), name,
- withParams);
- }
-
- /**
- * value-of
- */
- final TemplateNode parseValueOf(Node node, Node children, Node next)
- throws TransformerConfigurationException, XPathExpressionException
- {
- NamedNodeMap attrs = node.getAttributes();
- String s = getRequiredAttribute(attrs, "select", node);
- String doe = getAttribute(attrs, "disable-output-escaping");
- boolean d = "yes".equals(doe);
- Expr select = (Expr) xpath.compile(s);
- return new ValueOfNode(null, parse(next), select, d);
- }
-
- /**
- * for-each
- */
- final TemplateNode parseForEach(Node node, Node children, Node next)
- throws TransformerConfigurationException, XPathExpressionException
- {
- NamedNodeMap attrs = node.getAttributes();
- String s = getRequiredAttribute(attrs, "select", node);
- List sortKeys = parseSortKeys(children);
- Expr select = (Expr) xpath.compile(s);
- return new ForEachNode(parse(children), parse(next), select, sortKeys);
- }
-
- /**
- * if
- */
- final TemplateNode parseIf(Node node, Node children, Node next)
- throws TransformerConfigurationException, XPathExpressionException
- {
- NamedNodeMap attrs = node.getAttributes();
- String t = getRequiredAttribute(attrs, "test", node);
- Expr test = (Expr) xpath.compile(t);
- return new IfNode(parse(children), parse(next), test);
- }
-
- /**
- * when
- */
- final TemplateNode parseWhen(Node node, Node children, Node next)
- throws TransformerConfigurationException, XPathExpressionException
- {
- NamedNodeMap attrs = node.getAttributes();
- String t = getRequiredAttribute(attrs, "test", node);
- Expr test = (Expr) xpath.compile(t);
- return new WhenNode(parse(children), parse(next), test);
- }
-
- /**
- * element
- */
- final TemplateNode parseElement(Node node, Node children, Node next)
- throws TransformerConfigurationException, XPathExpressionException
- {
- NamedNodeMap attrs = node.getAttributes();
- String name = getRequiredAttribute(attrs, "name", node);
- String namespace = getAttribute(attrs, "namespace");
- String uas = getAttribute(attrs, "use-attribute-sets");
- TemplateNode n = parseAttributeValueTemplate(name, node);
- TemplateNode ns = (namespace == null) ? null :
- parseAttributeValueTemplate(namespace, node);
- return new ElementNode(parse(children), parse(next), n, ns, uas, node);
- }
-
- /**
- * attribute
- */
- final TemplateNode parseAttribute(Node node, Node children, Node next)
- throws TransformerConfigurationException, XPathExpressionException
- {
- NamedNodeMap attrs = node.getAttributes();
- String name = getRequiredAttribute(attrs, "name", node);
- String namespace = getAttribute(attrs, "namespace");
- TemplateNode n = parseAttributeValueTemplate(name, node);
- TemplateNode ns = (namespace == null) ? null :
- parseAttributeValueTemplate(namespace, node);
- return new AttributeNode(parse(children), parse(next), n, ns, node);
- }
-
- /**
- * text
- */
- final TemplateNode parseText(Node node, Node children, Node next)
- throws TransformerConfigurationException, XPathExpressionException
- {
- NamedNodeMap attrs = node.getAttributes();
- String doe = getAttribute(attrs, "disable-output-escaping");
- boolean d = "yes".equals(doe);
- return new TextNode(parse(children), parse(next), d);
- }
-
- /**
- * copy
- */
- final TemplateNode parseCopy(Node node, Node children, Node next)
- throws TransformerConfigurationException, XPathExpressionException
- {
- NamedNodeMap attrs = node.getAttributes();
- String uas = getAttribute(attrs, "use-attribute-sets");
- return new CopyNode(parse(children), parse(next), uas);
- }
-
- /**
- * processing-instruction
- */
- final TemplateNode parseProcessingInstruction(Node node, Node children,
- Node next)
- throws TransformerConfigurationException, XPathExpressionException
- {
- NamedNodeMap attrs = node.getAttributes();
- String name = getRequiredAttribute(attrs, "name", node);
- return new ProcessingInstructionNode(parse(children),
- parse(next), name);
- }
-
- /**
- * number
- */
- final TemplateNode parseNumber(Node node, Node children, Node next)
- throws TransformerConfigurationException, XPathExpressionException
- {
- NamedNodeMap attrs = node.getAttributes();
- String v = getAttribute(attrs, "value");
- String ff = getAttribute(attrs, "format");
- if (ff == null)
- {
- ff = "1";
- }
- TemplateNode format = parseAttributeValueTemplate(ff, node);
- String lang = getAttribute(attrs, "lang");
- String lv = getAttribute(attrs, "letter-value");
- int letterValue = "traditional".equals(lv) ?
- AbstractNumberNode.TRADITIONAL :
- AbstractNumberNode.ALPHABETIC;
- String gs = getAttribute(attrs, "grouping-separator");
- String gz = getAttribute(attrs, "grouping-size");
- int gz2 = (gz != null && gz.length() > 0) ?
- Integer.parseInt(gz) : 1;
- if (v != null && v.length() > 0)
- {
- Expr value = (Expr) xpath.compile(v);
- return new NumberNode(parse(children), parse(next),
- value, format, lang,
- letterValue, gs, gz2);
- }
- else
- {
- String l = getAttribute(attrs, "level");
- int level =
- "multiple".equals(l) ? NodeNumberNode.MULTIPLE :
- "any".equals(l) ? NodeNumberNode.ANY :
- NodeNumberNode.SINGLE;
- String c = getAttribute(attrs, "count");
- String f = getAttribute(attrs, "from");
- Pattern count = null;
- Pattern from = null;
- if (c != null)
- {
- try
- {
- count = (Pattern) xpath.compile(c);
- }
- catch (ClassCastException e)
- {
- String msg = "invalid pattern: " + c;
- throw new TransformerConfigurationException(msg);
- }
- }
- if (f != null)
- {
- try
- {
- from = (Pattern) xpath.compile(f);
- }
- catch (ClassCastException e)
- {
- String msg = "invalid pattern: " + f;
- throw new TransformerConfigurationException(msg);
- }
- }
- return new NodeNumberNode(parse(children), parse(next),
- level, count, from,
- format, lang,
- letterValue, gs, gz2);
- }
- }
-
- /**
- * copy-of
- */
- final TemplateNode parseCopyOf(Node node, Node children, Node next)
- throws TransformerConfigurationException, XPathExpressionException
- {
- NamedNodeMap attrs = node.getAttributes();
- String s = getRequiredAttribute(attrs, "select", node);
- Expr select = (Expr) xpath.compile(s);
- return new CopyOfNode(parse(children), parse(next), select);
- }
-
- /**
- * message
- */
- final TemplateNode parseMessage(Node node, Node children, Node next)
- throws TransformerConfigurationException, XPathExpressionException
- {
- NamedNodeMap attrs = node.getAttributes();
- String t = getAttribute(attrs, "terminate");
- boolean terminate = "yes".equals(t);
- return new MessageNode(parse(children), parse(next), terminate);
- }
-
- /**
- * Parse template-level elements.
- */
- final TemplateNode parse(Node node)
- throws TransformerConfigurationException
- {
- if (node == null)
- {
- return null;
- }
- // Hack to associate the document function with its declaring node
- current = node;
- Node children = node.getFirstChild();
- Node next = node.getNextSibling();
- try
- {
- String namespaceUri = node.getNamespaceURI();
- if (Stylesheet.XSL_NS.equals(namespaceUri) &&
- Node.ELEMENT_NODE == node.getNodeType())
- {
- String name = node.getLocalName();
- if ("apply-templates".equals(name))
- {
- return parseApplyTemplates(node, children, next);
- }
- else if ("call-template".equals(name))
- {
- return parseCallTemplate(node, children, next);
- }
- else if ("value-of".equals(name))
- {
- return parseValueOf(node, children, next);
- }
- else if ("for-each".equals(name))
- {
- return parseForEach(node, children, next);
- }
- else if ("if".equals(name))
- {
- return parseIf(node, children, next);
- }
- else if ("choose".equals(name))
- {
- return new ChooseNode(parse(children), parse(next));
- }
- else if ("when".equals(name))
- {
- return parseWhen(node, children, next);
- }
- else if ("otherwise".equals(name))
- {
- return new OtherwiseNode(parse(children), parse(next));
- }
- else if ("element".equals(name))
- {
- return parseElement(node, children, next);
- }
- else if ("attribute".equals(name))
- {
- return parseAttribute(node, children, next);
- }
- else if ("text".equals(name))
- {
- return parseText(node, children, next);
- }
- else if ("copy".equals(name))
- {
- return parseCopy(node, children, next);
- }
- else if ("processing-instruction".equals(name))
- {
- return parseProcessingInstruction(node, children, next);
- }
- else if ("comment".equals(name))
- {
- return new CommentNode(parse(children), parse(next));
- }
- else if ("number".equals(name))
- {
- return parseNumber(node, children, next);
- }
- else if ("param".equals(name) ||
- "variable".equals(name))
- {
- boolean global = "variable".equals(name);
- NamedNodeMap attrs = node.getAttributes();
- TemplateNode content = parse(children);
- String paramName = getRequiredAttribute(attrs, "name", node);
- String select = getAttribute(attrs, "select");
- if (select != null)
- {
- if (content != null)
- {
- String msg = "parameter '" + paramName +
- "' has both select and content";
- DOMSourceLocator l = new DOMSourceLocator(node);
- throw new TransformerConfigurationException(msg, l);
- }
- Expr expr = (Expr) xpath.compile(select);
- return new ParameterNode(null, parse(next),
- paramName, expr, global);
- }
- else
- {
- return new ParameterNode(content, parse(next),
- paramName, null, global);
- }
- }
- else if ("copy-of".equals(name))
- {
- return parseCopyOf(node, children, next);
- }
- else if ("message".equals(name))
- {
- return parseMessage(node, children, next);
- }
- else if ("apply-imports".equals(name))
- {
- return new ApplyImportsNode(parse(children), parse(next));
- }
- else
- {
- // xsl:fallback
- // Pass over any other XSLT nodes
- return parse(next);
- }
- }
- String prefix = node.getPrefix();
- if (extensionElementPrefixes.contains(prefix))
- {
- // Pass over extension elements
- return parse(next);
- }
- switch (node.getNodeType())
- {
- case Node.TEXT_NODE:
- // Determine whether to strip whitespace
- Text text = (Text) node;
- if (!isPreserved(text))
- {
- // Strip
- text.getParentNode().removeChild(text);
- return parse(next);
- }
- break;
- case Node.COMMENT_NODE:
- // Ignore comments
- return parse(next);
- case Node.ELEMENT_NODE:
- // Check for attribute value templates and use-attribute-sets
- NamedNodeMap attrs = node.getAttributes();
- boolean convert = false;
- String useAttributeSets = null;
- int len = attrs.getLength();
- for (int i = 0; i < len; i++)
- {
- Node attr = attrs.item(i);
- String value = attr.getNodeValue();
- if (Stylesheet.XSL_NS.equals(attr.getNamespaceURI()) &&
- "use-attribute-sets".equals(attr.getLocalName()))
- {
- useAttributeSets = value;
- convert = true;
- break;
- }
- int start = value.indexOf('{');
- int end = value.indexOf('}');
- if (start != -1 || end != -1)
- {
- convert = true;
- break;
- }
- }
- if (convert)
- {
- // Create an element-producing template node instead
- // with appropriate attribute-producing child template nodes
- TemplateNode child = parse(children);
- for (int i = 0; i < len; i++)
- {
- Node attr = attrs.item(i);
- String ans = attr.getNamespaceURI();
- String aname = attr.getNodeName();
- if (Stylesheet.XSL_NS.equals(ans) &&
- "use-attribute-sets".equals(attr.getLocalName()))
- {
- continue;
- }
- String value = attr.getNodeValue();
- TemplateNode grandchild =
- parseAttributeValueTemplate(value, node);
- TemplateNode n =
- parseAttributeValueTemplate(aname, node);
- TemplateNode ns = (ans == null) ? null :
- parseAttributeValueTemplate(ans, node);
- child = new AttributeNode(grandchild, child, n, ns, attr);
- }
- String ename = node.getNodeName();
- TemplateNode n = parseAttributeValueTemplate(ename, node);
- TemplateNode ns = (namespaceUri == null) ? null :
- parseAttributeValueTemplate(namespaceUri, node);
- return new ElementNode(child, parse(next),
- n, ns, useAttributeSets,
- node);
- }
- // Otherwise fall through
- break;
- }
- }
- catch (XPathExpressionException e)
- {
- DOMSourceLocator l = new DOMSourceLocator(node);
- throw new TransformerConfigurationException(e.getMessage(), l, e);
- }
- return new LiteralNode(parse(children), parse(next), node);
- }
-
- final List parseSortKeys(Node node)
- throws TransformerConfigurationException, XPathExpressionException
- {
- List ret = new LinkedList();
- while (node != null)
- {
- String namespaceUri = node.getNamespaceURI();
- if (Stylesheet.XSL_NS.equals(namespaceUri) &&
- Node.ELEMENT_NODE == node.getNodeType() &&
- "sort".equals(node.getLocalName()))
- {
- NamedNodeMap attrs = node.getAttributes();
- String s = getAttribute(attrs, "select");
- if (s == null)
- {
- s = ".";
- }
- Expr select = (Expr) xpath.compile(s);
- String l = getAttribute(attrs, "lang");
- TemplateNode lang = (l == null) ? null :
- parseAttributeValueTemplate(l, node);
- String dt = getAttribute(attrs, "data-type");
- TemplateNode dataType = (dt == null) ? null :
- parseAttributeValueTemplate(dt, node);
- String o = getAttribute(attrs, "order");
- TemplateNode order = (o == null) ? null :
- parseAttributeValueTemplate(o, node);
- String co = getAttribute(attrs, "case-order");
- TemplateNode caseOrder = (co == null) ? null :
- parseAttributeValueTemplate(co, node);
- ret.add(new SortKey(select, lang, dataType, order, caseOrder));
- }
- node = node.getNextSibling();
- }
- return ret.isEmpty() ? null : ret;
- }
-
- final List parseWithParams(Node node)
- throws TransformerConfigurationException, XPathExpressionException
- {
- List ret = new LinkedList();
- while (node != null)
- {
- String namespaceUri = node.getNamespaceURI();
- if (Stylesheet.XSL_NS.equals(namespaceUri) &&
- Node.ELEMENT_NODE == node.getNodeType() &&
- "with-param".equals(node.getLocalName()))
- {
- NamedNodeMap attrs = node.getAttributes();
- TemplateNode content = parse(node.getFirstChild());
- String name = getRequiredAttribute(attrs, "name", node);
- String select = getAttribute(attrs, "select");
- if (select != null)
- {
- if (content != null)
- {
- String msg = "parameter '" + name +
- "' has both select and content";
- DOMSourceLocator l = new DOMSourceLocator(node);
- throw new TransformerConfigurationException(msg, l);
- }
- Expr expr = (Expr) xpath.compile(select);
- ret.add(new WithParam(name, expr));
- }
- else
- {
- ret.add(new WithParam(name, content));
- }
- }
- node = node.getNextSibling();
- }
- return ret.isEmpty() ? null : ret;
- }
-
- /**
- * Created element nodes have a copy of the namespace nodes in the
- * stylesheet, except the XSLT namespace, extension namespaces, and
- * exclude-result-prefixes.
- */
- final void addNamespaceNodes(Node source, Node target, Document doc,
- Collection elementExcludeResultPrefixes)
- {
- NamedNodeMap attrs = source.getAttributes();
- if (attrs != null)
- {
- int len = attrs.getLength();
- for (int i = 0; i < len; i++)
- {
- Node attr = attrs.item(i);
- String uri = attr.getNamespaceURI();
- if (uri == XMLConstants.XMLNS_ATTRIBUTE_NS_URI)
- {
- String prefix = attr.getLocalName();
- if (XMLConstants.XMLNS_ATTRIBUTE.equals(prefix))
- {
- prefix = "#default";
- }
- String ns = attr.getNodeValue();
- // Should the namespace be excluded?
- if (XSL_NS.equals(ns) ||
- extensionElementPrefixes.contains(prefix) ||
- elementExcludeResultPrefixes.contains(prefix) ||
- excludeResultPrefixes.contains(prefix))
- {
- continue;
- }
- // Is the namespace already defined on the target?
- if (prefix == "#default")
- {
- prefix = null;
- }
- if (target.lookupNamespaceURI(prefix) != null)
- {
- continue;
- }
- attr = attr.cloneNode(true);
- attr = doc.adoptNode(attr);
- target.getAttributes().setNamedItemNS(attr);
- }
- }
- }
- Node parent = source.getParentNode();
- if (parent != null)
- {
- addNamespaceNodes(parent, target, doc, elementExcludeResultPrefixes);
- }
- }
-
- static final String getAttribute(NamedNodeMap attrs, String name)
- {
- Node attr = attrs.getNamedItem(name);
- if (attr == null)
- {
- return null;
- }
- String ret = attr.getNodeValue();
- if (ret.length() == 0)
- {
- return null;
- }
- return ret;
- }
-
- static final String getRequiredAttribute(NamedNodeMap attrs, String name,
- Node source)
- throws TransformerConfigurationException
- {
- String value = getAttribute(attrs, name);
- if (value == null || value.length() == 0)
- {
- String msg =
- name + " attribute is required on " + source.getNodeName();
- DOMSourceLocator l = new DOMSourceLocator(source);
- throw new TransformerConfigurationException(msg, l);
- }
- return value;
- }
-
- // Handle user data changes when nodes are cloned etc
-
- public void handle(short op, String key, Object data, Node src, Node dst)
- {
- dst.setUserData(key, data, this);
- }
-
-}
-
diff --git a/libjava/gnu/xml/transform/SystemPropertyFunction.java b/libjava/gnu/xml/transform/SystemPropertyFunction.java
deleted file mode 100644
index 33616d39628..00000000000
--- a/libjava/gnu/xml/transform/SystemPropertyFunction.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/* SystemPropertyFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.xml.namespace.QName;
-import javax.xml.xpath.XPathFunction;
-import javax.xml.xpath.XPathFunctionException;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-import gnu.xml.xpath.Function;
-
-/**
- * The XSLT <code>system-property()</code>function.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class SystemPropertyFunction
- extends Expr
- implements XPathFunction, Function
-{
-
- List args;
-
- public Object evaluate(List args)
- throws XPathFunctionException
- {
- String name = (String) args.get(0);
- return systemProperty(QName.valueOf(name));
- }
-
- public void setArguments(List args)
- {
- this.args = args;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- int arity = args.size();
- List values = new ArrayList(arity);
- for (int i = 0; i < arity; i++)
- {
- Expr arg = (Expr) args.get(i);
- values.add(arg.evaluate(context, pos, len));
- }
- String name = _string(context, values.get(0));
- return systemProperty(QName.valueOf(name));
- }
-
- Object systemProperty(QName name)
- {
- String localName = name.getLocalPart();
- String prefix = name.getPrefix();
- String uri = name.getNamespaceURI();
- if (Stylesheet.XSL_NS.equals(uri) ||
- "xsl".equals(prefix))
- {
- if ("version".equals(localName))
- {
- return new Double(1.0d);
- }
- else if ("vendor".equals(localName))
- {
- return "The Free Software Foundation";
- }
- else if ("vendor-url".equals(localName))
- {
- return "http://www.gnu.org/";
- }
- else
- {
- return "";
- }
- }
- return System.getProperty(localName);
- }
-
- public Expr clone(Object context)
- {
- SystemPropertyFunction f = new SystemPropertyFunction();
- int len = args.size();
- List args2 = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- args2.add(((Expr) args.get(i)).clone(context));
- }
- f.setArguments(args2);
- return f;
- }
-
-}
-
diff --git a/libjava/gnu/xml/transform/Template.java b/libjava/gnu/xml/transform/Template.java
deleted file mode 100644
index 1673a8aa63b..00000000000
--- a/libjava/gnu/xml/transform/Template.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/* Template.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.io.PrintStream;
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-import gnu.xml.xpath.NameTest;
-import gnu.xml.xpath.NodeTypeTest;
-import gnu.xml.xpath.Pattern;
-import gnu.xml.xpath.Selector;
-import gnu.xml.xpath.Test;
-
-/**
- * A template in an XSL stylesheet.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class Template
- implements Comparable
-{
-
- static final double DEFAULT_PRIORITY = 0.5d;
-
- final Stylesheet stylesheet;
- final QName name;
- final Pattern match;
- final TemplateNode node;
- final double priority;
- final int precedence;
- final QName mode;
-
- Template(Stylesheet stylesheet,
- QName name, Pattern match, TemplateNode node,
- int precedence, double priority, QName mode)
- {
- this.stylesheet = stylesheet;
- this.name = name;
- this.match = match;
- this.node = node;
- // adjust priority if necessary
- // see XSLT section 5.5
- Test test = getNodeTest(match);
- if (test != null)
- {
- if (test instanceof NameTest)
- {
- NameTest nameTest = (NameTest) test;
- if (nameTest.matchesAny() ||
- nameTest.matchesAnyLocalName())
- {
- priority = -0.25d;
- }
- else
- {
- priority = 0.0d;
- }
- }
- else
- {
- NodeTypeTest nodeTypeTest = (NodeTypeTest) test;
- if (nodeTypeTest.getNodeType() ==
- Node.PROCESSING_INSTRUCTION_NODE &&
- nodeTypeTest.getData() != null)
- {
- priority = 0.0d;
- }
- else
- {
- priority = -0.5d;
- }
- }
- }
- this.precedence = precedence;
- this.priority = priority;
- this.mode = mode;
- }
-
- Template clone(Stylesheet stylesheet)
- {
- // FIXME by cloning we lose the imports() functionality, so
- // apply-imports will be broken.
- return new Template(stylesheet,
- name,
- (match == null) ? null :
- (Pattern) match.clone(stylesheet),
- (node == null) ? null : node.clone(stylesheet),
- precedence,
- priority,
- mode);
- }
-
- public int compareTo(Object other)
- {
- if (other instanceof Template)
- {
- Template t = (Template) other;
- int d = t.precedence - precedence;
- if (d != 0)
- {
- return d;
- }
- double d2 = t.priority - priority;
- if (d2 != 0.0d)
- {
- return (int) Math.round(d2 * 1000.0d);
- }
- }
- return 0;
- }
-
- Test getNodeTest(Expr expr)
- {
- if (expr instanceof Selector)
- {
- Selector selector = (Selector) expr;
- Test[] tests = selector.getTests();
- if (tests.length > 0)
- {
- return tests[0];
- }
- }
- return null;
- }
-
- boolean matches(QName mode, Node node)
- {
- if ((mode == null && this.mode != null) ||
- (mode != null && !mode.equals(this.mode)))
- {
- return false;
- }
- if (match == null)
- {
- return false;
- }
- return match.matches(node);
- }
-
- boolean matches(QName name)
- {
- return name.equals(this.name);
- }
-
- boolean imports(Template other)
- {
- for (Stylesheet ctx = other.stylesheet.parent;
- ctx != null;
- ctx = ctx.parent)
- {
- if (ctx == stylesheet)
- {
- return true;
- }
- }
- return false;
- }
-
- /**
- * @param stylesheet the stylesheet
- * @param parent the parent of result nodes
- * @param context the context node in the source document
- * @param pos the context position
- * @param len the context size
- * @param nextSibling if non-null, add result nodes before this node
- */
- void apply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- //System.err.println("...applying " + toString() + " to " + context);
- if (node != null)
- {
- node.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- if (name != null)
- {
- buf.append("name=");
- buf.append(name);
- }
- else if (match != null)
- {
- buf.append("match=");
- buf.append(match);
- }
- if (mode != null)
- {
- buf.append(",mode=");
- buf.append(mode);
- }
- buf.append(']');
- return buf.toString();
-
- //return (name != null) ? name.toString() : match.toString();
- }
-
- void list(PrintStream out)
- {
- out.println(toString());
- if (node != null)
- {
- node.list(1, out, true);
- }
- }
-
-}
diff --git a/libjava/gnu/xml/transform/TemplateNode.java b/libjava/gnu/xml/transform/TemplateNode.java
deleted file mode 100644
index df13a4d1ec0..00000000000
--- a/libjava/gnu/xml/transform/TemplateNode.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/* TemplateNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.io.PrintStream;
-import java.util.Comparator;
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.DocumentOrderComparator;
-
-/**
- * Wrapper for a source node in a template.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-abstract class TemplateNode
-{
-
- static final Comparator documentOrderComparator =
- new DocumentOrderComparator();
-
- final TemplateNode children;
- final TemplateNode next;
-
- TemplateNode(TemplateNode children, TemplateNode next)
- {
- this.children = children;
- this.next = next;
- }
-
- final void apply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- if (stylesheet.terminated)
- {
- return;
- }
- if (Thread.currentThread().isInterrupted())
- {
- // Try to head off any infinite loops at the pass
- return;
- }
- if (stylesheet.debug)
- {
- System.err.println("Applying " + toString());
- }
- doApply(stylesheet, mode, context, pos, len, parent, nextSibling);
- }
-
- abstract void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException;
-
- abstract TemplateNode clone(Stylesheet stylesheet);
-
- /**
- * Debugging
- */
- void list(int depth, PrintStream out, boolean listNext)
- {
- for (int i = 0; i < depth; i++)
- {
- out.print(" ");
- }
- out.println(toString());
- if (children != null)
- {
- children.list(depth + 1, out, true);
- }
- if (listNext && next != null)
- {
- next.list(depth, out, listNext);
- }
- }
-
-}
diff --git a/libjava/gnu/xml/transform/TemplatesImpl.java b/libjava/gnu/xml/transform/TemplatesImpl.java
deleted file mode 100644
index 527bd979db0..00000000000
--- a/libjava/gnu/xml/transform/TemplatesImpl.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/* TemplatesImpl.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.Properties;
-import javax.xml.transform.Templates;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-
-/**
- * GNU precompiled stylesheet implementation.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class TemplatesImpl
- implements Templates
-{
-
- final TransformerFactoryImpl factory;
- final Stylesheet stylesheet;
- final Properties outputProperties;
-
- TemplatesImpl(TransformerFactoryImpl factory, Stylesheet stylesheet)
- {
- this.factory = factory;
- this.stylesheet = stylesheet;
- outputProperties = new TransformerOutputProperties(stylesheet);
- }
-
- public Transformer newTransformer()
- throws TransformerConfigurationException
- {
- Stylesheet stylesheet = (Stylesheet) this.stylesheet.clone();
- TransformerImpl transformer =
- new TransformerImpl(factory, stylesheet, outputProperties);
- stylesheet.transformer = transformer;
- return transformer;
- }
-
- public Properties getOutputProperties()
- {
- return (Properties) outputProperties.clone();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/TextNode.java b/libjava/gnu/xml/transform/TextNode.java
deleted file mode 100644
index b5ea1b57af7..00000000000
--- a/libjava/gnu/xml/transform/TextNode.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/* TextNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-import gnu.xml.xpath.Expr;
-
-/**
- * A template node representing the XSL <code>text</code> instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class TextNode
- extends TemplateNode
-{
-
- final boolean disableOutputEscaping;
-
- TextNode(TemplateNode children, TemplateNode next,
- boolean disableOutputEscaping)
- {
- super(children, next);
- this.disableOutputEscaping = disableOutputEscaping;
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new TextNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- disableOutputEscaping);
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- String value = "";
- Document doc = (parent instanceof Document) ? (Document) parent :
- parent.getOwnerDocument();
- if (children != null)
- {
- // Create a document fragment to hold the text
- DocumentFragment fragment = doc.createDocumentFragment();
- // Apply children to the fragment
- children.apply(stylesheet, mode,
- context, pos, len,
- fragment, null);
- // Use XPath string-value of fragment
- value = Expr.stringValue(fragment);
- }
- Text text = doc.createTextNode(value);
- if (disableOutputEscaping)
- {
- text.setUserData("disable-output-escaping", "yes", stylesheet);
- }
- // Insert into result tree
- if (nextSibling != null)
- {
- parent.insertBefore(text, nextSibling);
- }
- else
- {
- parent.appendChild(text);
- }
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
-}
diff --git a/libjava/gnu/xml/transform/TransformerFactoryImpl.java b/libjava/gnu/xml/transform/TransformerFactoryImpl.java
deleted file mode 100644
index dde2017ff6b..00000000000
--- a/libjava/gnu/xml/transform/TransformerFactoryImpl.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/* TransformerFactoryImpl.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Properties;
-import javax.xml.transform.ErrorListener;
-import javax.xml.transform.Source;
-import javax.xml.transform.Templates;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.URIResolver;
-import javax.xml.transform.dom.DOMResult;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.sax.SAXResult;
-import javax.xml.transform.sax.SAXSource;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.xpath.XPathFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import gnu.xml.dom.DomDocument;
-
-/**
- * GNU transformer factory implementation.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class TransformerFactoryImpl
- extends TransformerFactory
-{
-
- final XPathFactory xpathFactory;
- final XSLURIResolver resolver;
- ErrorListener userListener;
- URIResolver userResolver;
-
- public TransformerFactoryImpl()
- {
- xpathFactory = new gnu.xml.xpath.XPathFactoryImpl();
- resolver = new XSLURIResolver();
- }
-
- public Transformer newTransformer(Source source)
- throws TransformerConfigurationException
- {
- Stylesheet stylesheet = newStylesheet(source, 0, null);
- Properties outputProperties =
- new TransformerOutputProperties(stylesheet);
- TransformerImpl transformer =
- new TransformerImpl(this, stylesheet, outputProperties);
- stylesheet.transformer = transformer;
- return transformer;
- }
-
- public Transformer newTransformer()
- throws TransformerConfigurationException
- {
- return new TransformerImpl(this, null, new Properties());
- }
-
- public Templates newTemplates(Source source)
- throws TransformerConfigurationException
- {
- Stylesheet stylesheet = newStylesheet(source, 0, null);
- return new TemplatesImpl(this, stylesheet);
- }
-
- Stylesheet newStylesheet(Source source, int precedence, Stylesheet parent)
- throws TransformerConfigurationException
- {
- Document doc = null;
- String systemId = null;
- if (source != null)
- {
- try
- {
- DOMSource ds;
- synchronized (resolver)
- {
- resolver.setUserResolver(userResolver);
- resolver.setUserListener(userListener);
- ds = resolver.resolveDOM(source, null, null);
- }
- Node node = ds.getNode();
- if (node == null)
- {
- throw new TransformerConfigurationException("no source document");
- }
- doc = (node instanceof Document) ? (Document) node :
- node.getOwnerDocument();
- systemId = ds.getSystemId();
- }
- catch (TransformerException e)
- {
- throw new TransformerConfigurationException(e);
- }
- }
- return new Stylesheet(this, parent, doc, systemId, precedence);
- }
-
- public Source getAssociatedStylesheet(Source source,
- String media,
- String title,
- String charset)
- throws TransformerConfigurationException
- {
- try
- {
- DOMSource ds;
- synchronized (resolver)
- {
- resolver.setUserResolver(userResolver);
- resolver.setUserListener(userListener);
- ds = resolver.resolveDOM(source, null, null);
- }
- Node node = ds.getNode();
- if (node == null)
- {
- throw new TransformerConfigurationException("no source document");
- }
- Document doc = (node instanceof Document) ? (Document) node :
- node.getOwnerDocument();
- LinkedList matches = new LinkedList();
- for (node = doc.getFirstChild();
- node != null;
- node = node.getNextSibling())
- {
- if (node.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE &&
- "xml-stylesheet".equals(node.getNodeName()))
- {
- Map params = parseParameters(node.getNodeValue());
- if (media != null && !media.equals(params.get("media")))
- {
- continue;
- }
- if (title != null && !title.equals(params.get("title")))
- {
- continue;
- }
- if (charset != null && !charset.equals(params.get("charset")))
- {
- continue;
- }
- String href = (String) params.get("href");
- URL url = resolver.resolveURL(null, node.getBaseURI(), href);
- matches.add(url);
- }
- }
- switch (matches.size())
- {
- case 0:
- return null;
- case 1:
- return new StreamSource(((URL) matches.getFirst()).toString());
- default:
- // Create a source representing a stylesheet with a list of
- // imports
- DomDocument ssDoc = new DomDocument();
- ssDoc.setBuilding(true);
- // Create document element
- Node root =
- ssDoc.createElementNS(Stylesheet.XSL_NS, "stylesheet");
- Node version =
- ssDoc.createAttributeNS(null, "version");
- version.setNodeValue("1.0");
- root.getAttributes().setNamedItemNS(version);
- ssDoc.appendChild(root);
- // Create xsl:import for each URL
- for (Iterator i = matches.iterator(); i.hasNext(); )
- {
- URL url = (URL) i.next();
- Node imp =
- ssDoc.createElementNS(Stylesheet.XSL_NS, "import");
- Node href =
- ssDoc.createAttributeNS(null, "href");
- href.setNodeValue(url.toString());
- imp.getAttributes().setNamedItemNS(href);
- root.appendChild(imp);
- }
- ssDoc.setBuilding(false);
- return new DOMSource(ssDoc);
- }
- }
- catch (IOException e)
- {
- throw new TransformerConfigurationException(e);
- }
- catch (TransformerException e)
- {
- throw new TransformerConfigurationException(e);
- }
- }
-
- Map parseParameters(String data)
- {
- Map ret = new LinkedHashMap();
- int len = data.length();
- String key = null;
- int start = 0;
- char quoteChar = '\u0000';
- for (int i = 0; i < len; i++)
- {
- char c = data.charAt(i);
- if (quoteChar == '\u0000' && c == ' ')
- {
- if (key == null && start < i)
- {
- key = data.substring(start, i);
- }
- else
- {
- String val = unquote(data.substring(start, i).trim());
- ret.put(key, val);
- key = null;
- }
- start = i + 1;
- }
- else if (c == '"')
- {
- quoteChar = (quoteChar == c) ? '\u0000' : c;
- }
- else if (c == '\'')
- {
- quoteChar = (quoteChar == c) ? '\u0000' : c;
- }
- }
- if (start < len && key != null)
- {
- String val = unquote(data.substring(start, len).trim());
- ret.put(key, val);
- }
- return ret;
- }
-
- String unquote(String text)
- {
- int end = text.length() - 1;
- if (text.charAt(0) == '\'' && text.charAt(end) == '\'')
- {
- return text.substring(1, end);
- }
- if (text.charAt(0) == '"' && text.charAt(end) == '"')
- {
- return text.substring(1, end);
- }
- return text;
- }
-
- public void setURIResolver(URIResolver resolver)
- {
- userResolver = resolver;
- }
-
- public URIResolver getURIResolver()
- {
- return userResolver;
- }
-
- public void setFeature(String name, boolean value)
- throws TransformerConfigurationException
- {
- throw new TransformerConfigurationException("not supported");
- }
-
- public boolean getFeature(String name)
- {
- if (SAXSource.FEATURE.equals(name) ||
- SAXResult.FEATURE.equals(name) ||
- StreamSource.FEATURE.equals(name) ||
- StreamResult.FEATURE.equals(name) ||
- DOMSource.FEATURE.equals(name) ||
- DOMResult.FEATURE.equals(name))
- {
- return true;
- }
- return false;
- }
-
- public void setAttribute(String name, Object value)
- throws IllegalArgumentException
- {
- throw new IllegalArgumentException("not supported");
- }
-
- public Object getAttribute(String name)
- throws IllegalArgumentException
- {
- throw new IllegalArgumentException("not supported");
- }
-
- public void setErrorListener(ErrorListener listener)
- throws IllegalArgumentException
- {
- userListener = listener;
- }
-
- public ErrorListener getErrorListener()
- {
- return userListener;
- }
-
-}
diff --git a/libjava/gnu/xml/transform/TransformerImpl.java b/libjava/gnu/xml/transform/TransformerImpl.java
deleted file mode 100644
index 73c4c0a4e08..00000000000
--- a/libjava/gnu/xml/transform/TransformerImpl.java
+++ /dev/null
@@ -1,580 +0,0 @@
-/* TransformerImpl.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.io.BufferedOutputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-import java.io.Writer;
-import java.net.MalformedURLException;
-import java.net.UnknownServiceException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Collection;
-import java.util.Properties;
-import javax.xml.transform.ErrorListener;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.URIResolver;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.dom.DOMResult;
-import javax.xml.transform.sax.SAXResult;
-import javax.xml.transform.stream.StreamResult;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.ext.LexicalHandler;
-import gnu.xml.dom.DomDoctype;
-import gnu.xml.dom.DomDocument;
-import gnu.xml.dom.ls.WriterOutputStream;
-
-/**
- * The transformation process for a given stylesheet.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class TransformerImpl
- extends Transformer
-{
-
- final TransformerFactoryImpl factory;
- final Stylesheet stylesheet;
- URIResolver uriResolver;
- ErrorListener errorListener;
- Properties outputProperties;
-
- TransformerImpl(TransformerFactoryImpl factory,
- Stylesheet stylesheet,
- Properties outputProperties)
- throws TransformerConfigurationException
- {
- this.factory = factory;
- uriResolver = factory.userResolver;
- errorListener = factory.userListener;
- this.stylesheet = stylesheet;
- this.outputProperties = outputProperties;
- if (stylesheet != null)
- {
- // Set up parameter context for this transformer
- stylesheet.bindings.push(false);
- }
- }
-
- public void transform(Source xmlSource, Result outputTarget)
- throws TransformerException
- {
- // Get the source tree
- DOMSource source;
- synchronized (factory.resolver)
- {
- factory.resolver.setUserResolver(uriResolver);
- factory.resolver.setUserListener(errorListener);
- source = factory.resolver.resolveDOM(xmlSource, null, null);
- }
- Node context = source.getNode();
- Document doc = (context instanceof Document) ? (Document) context :
- context.getOwnerDocument();
- if (doc instanceof DomDocument)
- {
- // Suppress mutation events
- ((DomDocument) doc).setBuilding(true);
- // TODO find a better/more generic way of doing this than
- // casting
- }
- // Get the result tree
- Node parent = null, nextSibling = null;
- if (outputTarget instanceof DOMResult)
- {
- DOMResult dr = (DOMResult) outputTarget;
- parent = dr.getNode();
- nextSibling = dr.getNextSibling();
-
- Document rdoc = (parent instanceof Document) ? (Document) parent :
- parent.getOwnerDocument();
- if (rdoc instanceof DomDocument)
- {
- // Suppress mutation events and allow multiple root elements
- DomDocument drdoc = (DomDocument) rdoc;
- drdoc.setBuilding(true);
- drdoc.setCheckWellformedness(false);
- // TODO find a better/more generic way of doing this than
- // casting
- }
- }
- boolean created = false;
- // Transformation
- if (stylesheet != null)
- {
- if (parent == null)
- {
- // Create a new document to hold the result
- DomDocument resultDoc = new DomDocument();
- resultDoc.setBuilding(true);
- resultDoc.setCheckWellformedness(false);
- parent = resultDoc;
- created = true;
- }
- // Make a copy of the source node, and strip it
- context = context.cloneNode(true);
- strip(context);
- // XSLT transformation
- try
- {
- // Set output properties in the underlying stylesheet
- ((TransformerOutputProperties) outputProperties).apply();
- stylesheet.initTopLevelVariables(context);
- TemplateNode t = stylesheet.getTemplate(null, context, false);
- if (t != null)
- {
- stylesheet.current = context;
- t.apply(stylesheet, null, context, 1, 1, parent, nextSibling);
- }
- }
- catch (TransformerException e)
- {
- // Done transforming, reset document
- if (doc instanceof DomDocument)
- {
- ((DomDocument) doc).setBuilding(false);
- }
- throw e;
- }
- }
- else
- {
- // Identity transform
- Node clone = context.cloneNode(true);
- if (context.getNodeType() != Node.DOCUMENT_NODE)
- {
- Document resultDoc;
- if (parent == null)
- {
- // Create a new document to hold the result
- DomDocument rd = new DomDocument();
- rd.setBuilding(true);
- rd.setCheckWellformedness(false);
- parent = resultDoc = rd;
- created = true;
- }
- else
- {
- resultDoc = (parent instanceof Document) ?
- (Document) parent :
- parent.getOwnerDocument();
- }
- Document sourceDoc = context.getOwnerDocument();
- if (sourceDoc != resultDoc)
- {
- clone = resultDoc.adoptNode(clone);
- }
- if (nextSibling != null)
- {
- parent.insertBefore(clone, nextSibling);
- }
- else
- {
- parent.appendChild(clone);
- }
- }
- else
- {
- // Cannot append document to another tree
- parent = clone;
- created = true;
- }
- }
- String method = outputProperties.getProperty(OutputKeys.METHOD);
- int outputMethod = "html".equals(method) ? Stylesheet.OUTPUT_HTML :
- "text".equals(method) ? Stylesheet.OUTPUT_TEXT :
- Stylesheet.OUTPUT_XML;
- String encoding = outputProperties.getProperty(OutputKeys.ENCODING);
- String publicId = outputProperties.getProperty(OutputKeys.DOCTYPE_PUBLIC);
- String systemId = outputProperties.getProperty(OutputKeys.DOCTYPE_SYSTEM);
- String version = outputProperties.getProperty(OutputKeys.VERSION);
- boolean omitXmlDeclaration =
- "yes".equals(outputProperties.getProperty(OutputKeys.OMIT_XML_DECLARATION));
- boolean standalone =
- "yes".equals(outputProperties.getProperty(OutputKeys.STANDALONE));
- String mediaType = outputProperties.getProperty(OutputKeys.MEDIA_TYPE);
- // TODO cdata-section-elements
- // TODO indent
- if (created)
- {
- // Discover document element
- DomDocument resultDoc = (DomDocument) parent;
- Node root = resultDoc.getDocumentElement();
- // Add doctype if specified
- if ((publicId != null || systemId != null) &&
- root != null)
- {
- // We must know the name of the root element to
- // create the document type
- resultDoc.appendChild(new DomDoctype(resultDoc,
- root.getNodeName(),
- publicId,
- systemId));
- }
- resultDoc.setBuilding(false);
- resultDoc.setCheckWellformedness(true);
- }
- else if (publicId != null || systemId != null)
- {
- switch (parent.getNodeType())
- {
- case Node.DOCUMENT_NODE:
- case Node.DOCUMENT_FRAGMENT_NODE:
- Document resultDoc = (parent instanceof Document) ?
- (Document) parent :
- parent.getOwnerDocument();
- DOMImplementation impl = resultDoc.getImplementation();
- DocumentType doctype =
- impl.createDocumentType(resultDoc.getNodeName(),
- publicId,
- systemId);
- // Try to insert doctype before first element
- Node ctx = parent.getFirstChild();
- for (; ctx != null &&
- ctx.getNodeType() != Node.ELEMENT_NODE;
- ctx = ctx.getNextSibling())
- {
- }
- if (ctx != null)
- {
- parent.insertBefore(doctype, ctx);
- }
- else
- {
- parent.appendChild(doctype);
- }
- }
- }
- if (version != null)
- {
- parent.setUserData("version", version, stylesheet);
- }
- if (omitXmlDeclaration)
- {
- parent.setUserData("omit-xml-declaration", "yes", stylesheet);
- }
- if (standalone)
- {
- parent.setUserData("standalone", "yes", stylesheet);
- }
- if (mediaType != null)
- {
- parent.setUserData("media-type", mediaType, stylesheet);
- }
- // Render result to the target device
- if (outputTarget instanceof DOMResult)
- {
- if (created)
- {
- DOMResult dr = (DOMResult) outputTarget;
- dr.setNode(parent);
- dr.setNextSibling(null);
- }
- }
- else if (outputTarget instanceof StreamResult)
- {
- StreamResult sr = (StreamResult) outputTarget;
- IOException ex = null;
- try
- {
- writeStreamResult(parent, sr, outputMethod, encoding);
- }
- catch (UnsupportedEncodingException e)
- {
- try
- {
- writeStreamResult(parent, sr, outputMethod, "UTF-8");
- }
- catch (IOException e2)
- {
- ex = e2;
- }
- }
- catch (IOException e)
- {
- ex = e;
- }
- if (ex != null)
- {
- if (errorListener != null)
- {
- errorListener.error(new TransformerException(ex));
- }
- else
- {
- ex.printStackTrace(System.err);
- }
- }
- }
- else if (outputTarget instanceof SAXResult)
- {
- SAXResult sr = (SAXResult) outputTarget;
- try
- {
- ContentHandler ch = sr.getHandler();
- LexicalHandler lh = sr.getLexicalHandler();
- if (lh == null && ch instanceof LexicalHandler)
- {
- lh = (LexicalHandler) ch;
- }
- SAXSerializer serializer = new SAXSerializer();
- serializer.serialize(parent, ch, lh);
- }
- catch (SAXException e)
- {
- if (errorListener != null)
- {
- errorListener.error(new TransformerException(e));
- }
- else
- {
- e.printStackTrace(System.err);
- }
- }
- }
- }
-
- /**
- * Strip whitespace from the source tree.
- */
- void strip(Node node)
- throws TransformerConfigurationException
- {
- short nt = node.getNodeType();
- if (nt == Node.ENTITY_REFERENCE_NODE)
- {
- // Replace entity reference with its content
- Node parent = node.getParentNode();
- Node child = node.getFirstChild();
- if (child != null)
- {
- strip(child);
- }
- while (child != null)
- {
- Node next = child.getNextSibling();
- node.removeChild(child);
- parent.insertBefore(child, node);
- child = next;
- }
- parent.removeChild(node);
- }
- if (nt == Node.TEXT_NODE) // CDATA sections ?
- {
- if (!stylesheet.isPreserved((Text) node))
- {
- node.getParentNode().removeChild(node);
- }
- }
- else
- {
- for (Node child = node.getFirstChild(); child != null;
- child = child.getNextSibling())
- {
- strip(child);
- }
- }
- }
-
- /**
- * Obtain a suitable output stream for writing the result to,
- * and use the StreamSerializer to write the result tree to the stream.
- */
- void writeStreamResult(Node node, StreamResult sr, int outputMethod,
- String encoding)
- throws IOException
- {
- OutputStream out = null;
- try
- {
- out = sr.getOutputStream();
- if (out == null)
- {
- Writer writer = sr.getWriter();
- if (writer != null)
- {
- out = new WriterOutputStream(writer);
- }
- }
- if (out == null)
- {
- String systemId = sr.getSystemId();
- try
- {
- URL url = new URL(systemId);
- URLConnection connection = url.openConnection();
- connection.setDoOutput(true);
- out = connection.getOutputStream();
- }
- catch (MalformedURLException e)
- {
- out = new FileOutputStream(systemId);
- }
- catch (UnknownServiceException e)
- {
- URL url = new URL(systemId);
- out = new FileOutputStream(url.getPath());
- }
- }
- out = new BufferedOutputStream(out);
- StreamSerializer serializer =
- new StreamSerializer(outputMethod, encoding, null);
- if (stylesheet != null)
- {
- Collection celem = stylesheet.outputCdataSectionElements;
- serializer.setCdataSectionElements(celem);
- }
- serializer.serialize(node, out);
- out.flush();
- }
- finally
- {
- try
- {
- if (out != null)
- {
- out.close();
- }
- }
- catch (IOException e)
- {
- }
- }
- }
-
- void copyChildren(Document dstDoc, Node src, Node dst)
- {
- Node srcChild = src.getFirstChild();
- while (srcChild != null)
- {
- Node dstChild = dstDoc.adoptNode(srcChild);
- dst.appendChild(dstChild);
- srcChild = srcChild.getNextSibling();
- }
- }
-
- public void setParameter(String name, Object value)
- {
- if (stylesheet != null)
- {
- stylesheet.bindings.set(name, value, false);
- }
- }
-
- public Object getParameter(String name)
- {
- if (stylesheet != null)
- {
- return stylesheet.bindings.get(name, null, 1, 1);
- }
- return null;
- }
-
- public void clearParameters()
- {
- if (stylesheet != null)
- {
- stylesheet.bindings.pop(false);
- stylesheet.bindings.push(false);
- }
- }
-
- public void setURIResolver(URIResolver resolver)
- {
- uriResolver = resolver;
- }
-
- public URIResolver getURIResolver()
- {
- return uriResolver;
- }
-
- public void setOutputProperties(Properties oformat)
- throws IllegalArgumentException
- {
- if (oformat == null)
- {
- outputProperties.clear();
- }
- else
- {
- outputProperties.putAll(oformat);
- }
- }
-
- public Properties getOutputProperties()
- {
- return (Properties) outputProperties.clone();
- }
-
- public void setOutputProperty(String name, String value)
- throws IllegalArgumentException
- {
- outputProperties.put(name, value);
- }
-
- public String getOutputProperty(String name)
- throws IllegalArgumentException
- {
- return outputProperties.getProperty(name);
- }
-
- public void setErrorListener(ErrorListener listener)
- {
- errorListener = listener;
- }
-
- public ErrorListener getErrorListener()
- {
- return errorListener;
- }
-
-}
diff --git a/libjava/gnu/xml/transform/TransformerOutputProperties.java b/libjava/gnu/xml/transform/TransformerOutputProperties.java
deleted file mode 100644
index cc8593c4601..00000000000
--- a/libjava/gnu/xml/transform/TransformerOutputProperties.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/* TransformerOutputProperties.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import javax.xml.transform.OutputKeys;
-
-/**
- * Helper class to manage JAXP user setting of output properties.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class TransformerOutputProperties
- extends Properties
-{
-
- final Properties defaultProperties;
- final Stylesheet stylesheet;
- boolean dirty;
-
- TransformerOutputProperties(Stylesheet stylesheet)
- {
- this.stylesheet = stylesheet;
- defaultProperties = new Properties();
- switch (stylesheet.outputMethod)
- {
- case Stylesheet.OUTPUT_XML:
- defaultProperties.put(OutputKeys.METHOD, "xml");
- break;
- case Stylesheet.OUTPUT_HTML:
- defaultProperties.put(OutputKeys.METHOD, "html");
- break;
- case Stylesheet.OUTPUT_TEXT:
- defaultProperties.put(OutputKeys.METHOD, "text");
- break;
- }
- if (stylesheet.outputVersion != null)
- {
- defaultProperties.put(OutputKeys.VERSION, stylesheet.outputVersion);
- }
- if (stylesheet.outputEncoding != null)
- {
- defaultProperties.put(OutputKeys.ENCODING, stylesheet.outputEncoding);
- }
- defaultProperties.put(OutputKeys.OMIT_XML_DECLARATION,
- stylesheet.outputOmitXmlDeclaration ? "yes" : "no");
- defaultProperties.put(OutputKeys.STANDALONE,
- stylesheet.outputStandalone ? "yes" : "no");
- if (stylesheet.outputPublicId != null)
- {
- defaultProperties.put(OutputKeys.DOCTYPE_PUBLIC,
- stylesheet.outputPublicId);
- }
- if (stylesheet.outputSystemId != null)
- {
- defaultProperties.put(OutputKeys.DOCTYPE_SYSTEM,
- stylesheet.outputSystemId);
- }
- StringBuffer buf = new StringBuffer();
- for (Iterator i = stylesheet.outputCdataSectionElements.iterator();
- i.hasNext(); )
- {
- if (buf.length() > 0)
- {
- buf.append(' ');
- }
- buf.append((String) i.next());
- }
- defaultProperties.put(OutputKeys.CDATA_SECTION_ELEMENTS, buf.toString());
- defaultProperties.put(OutputKeys.INDENT,
- stylesheet.outputIndent ? "yes" : "no");
- if (stylesheet.outputMediaType != null)
- {
- defaultProperties.put(OutputKeys.MEDIA_TYPE,
- stylesheet.outputMediaType);
- }
- }
-
- public String getProperty(String key)
- {
- String val = super.getProperty(key);
- if (val == null)
- {
- val = defaultProperties.getProperty(key);
- }
- return val;
- }
-
- public Object put(Object key, Object value)
- {
- Object ret = super.put(key, value);
- dirty = true;
- return ret;
- }
-
- public void clear()
- {
- super.clear();
- dirty = true;
- }
-
- /**
- * Applies the current set of properties to the underlying stylesheet.
- */
- void apply()
- {
- if (!dirty)
- {
- return;
- }
- String method = getProperty(OutputKeys.METHOD);
- if ("xml".equals(method))
- {
- stylesheet.outputMethod = Stylesheet.OUTPUT_XML;
- }
- else if ("html".equals(method))
- {
- stylesheet.outputMethod = Stylesheet.OUTPUT_HTML;
- }
- else if ("text".equals(method))
- {
- stylesheet.outputMethod = Stylesheet.OUTPUT_TEXT;
- }
- stylesheet.outputVersion = getProperty(OutputKeys.VERSION);
- stylesheet.outputEncoding = getProperty(OutputKeys.ENCODING);
- stylesheet.outputOmitXmlDeclaration =
- "yes".equals(getProperty(OutputKeys.OMIT_XML_DECLARATION));
- stylesheet.outputStandalone =
- "yes".equals(getProperty(OutputKeys.STANDALONE));
- stylesheet.outputPublicId = getProperty(OutputKeys.DOCTYPE_PUBLIC);
- stylesheet.outputSystemId = getProperty(OutputKeys.DOCTYPE_SYSTEM);
- StringTokenizer st =
- new StringTokenizer(getProperty(OutputKeys.CDATA_SECTION_ELEMENTS));
- Collection acc = new LinkedHashSet();
- while (st.hasMoreTokens())
- {
- acc.add(st.nextToken());
- }
- stylesheet.outputCdataSectionElements = acc;
- stylesheet.outputIndent = "yes".equals(getProperty(OutputKeys.INDENT));
- stylesheet.outputMediaType = getProperty(OutputKeys.MEDIA_TYPE);
- dirty = false;
- }
-
-}
-
diff --git a/libjava/gnu/xml/transform/URIResolverEntityResolver.java b/libjava/gnu/xml/transform/URIResolverEntityResolver.java
deleted file mode 100644
index 762416fde36..00000000000
--- a/libjava/gnu/xml/transform/URIResolverEntityResolver.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/* URIResolverEntityResolver.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.io.IOException;
-import javax.xml.transform.Source;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.URIResolver;
-import javax.xml.transform.sax.SAXSource;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-/**
- * EntityResolver that wraps a URIResolver.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class URIResolverEntityResolver
- implements EntityResolver
-{
-
- final URIResolver resolver;
-
- URIResolverEntityResolver(URIResolver resolver)
- {
- this.resolver = resolver;
- }
-
- public InputSource resolveEntity(String publicId, String systemId)
- throws SAXException, IOException
- {
- try
- {
- Source source = resolver.resolve(null, systemId);
- if (source == null)
- {
- return null;
- }
- return SAXSource.sourceToInputSource(source);
- }
- catch (TransformerException e)
- {
- throw new SAXException(e);
- }
- }
-
-}
diff --git a/libjava/gnu/xml/transform/UnparsedEntityUriFunction.java b/libjava/gnu/xml/transform/UnparsedEntityUriFunction.java
deleted file mode 100644
index ca72b6534df..00000000000
--- a/libjava/gnu/xml/transform/UnparsedEntityUriFunction.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/* UnparsedEntityUriFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import javax.xml.xpath.XPathFunction;
-import javax.xml.xpath.XPathFunctionException;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.Notation;
-import gnu.xml.xpath.Expr;
-import gnu.xml.xpath.Function;
-
-/**
- * The XSLT <code>unparsed-entity-uri()</code>function.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class UnparsedEntityUriFunction
- extends Expr
- implements XPathFunction, Function
-{
-
- List args;
-
- public Object evaluate(List args)
- throws XPathFunctionException
- {
- // Useless...
- return Collections.EMPTY_SET;
- }
-
- public void setArguments(List args)
- {
- this.args = args;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- int arity = args.size();
- List values = new ArrayList(arity);
- for (int i = 0; i < arity; i++)
- {
- Expr arg = (Expr) args.get(i);
- values.add(arg.evaluate(context, pos, len));
- }
- String name = _string(context, values.get(0));
- DocumentType doctype = context.getOwnerDocument().getDoctype();
- if (doctype != null)
- {
- NamedNodeMap notations = doctype.getNotations();
- Notation notation = (Notation) notations.getNamedItem(name);
- if (notation != null)
- {
- String systemId = notation.getSystemId();
- // XXX absolutize?
- if (systemId != null)
- {
- return systemId;
- }
- }
- }
- return "";
- }
-
- public Expr clone(Object context)
- {
- UnparsedEntityUriFunction f = new UnparsedEntityUriFunction();
- int len = args.size();
- List args2 = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- args2.add(((Expr) args.get(i)).clone(context));
- }
- f.setArguments(args2);
- return f;
- }
-
-}
-
diff --git a/libjava/gnu/xml/transform/ValueOfNode.java b/libjava/gnu/xml/transform/ValueOfNode.java
deleted file mode 100644
index 88ab166911d..00000000000
--- a/libjava/gnu/xml/transform/ValueOfNode.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/* ValueOfNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-import gnu.xml.xpath.Expr;
-
-/**
- * A template node representing an XSLT <code>value-of</code> instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class ValueOfNode
- extends TemplateNode
-{
-
- final Expr select;
- final boolean disableOutputEscaping;
-
- ValueOfNode(TemplateNode children, TemplateNode next, Expr select,
- boolean disableOutputEscaping)
- {
- super(children, next);
- this.select = select;
- this.disableOutputEscaping = disableOutputEscaping;
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new ValueOfNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- select.clone(stylesheet),
- disableOutputEscaping);
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- Object ret = select.evaluate(context, pos, len);
- String value = Expr._string(context, ret);
- //System.err.println("value-of: "+context+" "+ select + " -> "+ value);
- if (value != null && value.length() > 0)
- {
- Document doc = (parent instanceof Document) ?
- (Document) parent : parent.getOwnerDocument();
- Text textNode = doc.createTextNode(value);
- if (disableOutputEscaping)
- {
- textNode.setUserData("disable-output-escaping", "yes", stylesheet);
- }
- if (nextSibling != null)
- {
- parent.insertBefore(textNode, nextSibling);
- }
- else
- {
- parent.appendChild(textNode);
- }
- }
- // value-of doesn't process children
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append("select=");
- buf.append(select);
- if (disableOutputEscaping)
- {
- buf.append(",disableOutputEscaping");
- }
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/WhenNode.java b/libjava/gnu/xml/transform/WhenNode.java
deleted file mode 100644
index 8c292fb279b..00000000000
--- a/libjava/gnu/xml/transform/WhenNode.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/* WhenNode.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-
-/**
- * A template node representing an XSL <code>when</code> instruction.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class WhenNode
- extends TemplateNode
-{
-
- final Expr test;
-
- WhenNode(TemplateNode children, TemplateNode next, Expr test)
- {
- super(children, next);
- this.test = test;
- }
-
- TemplateNode clone(Stylesheet stylesheet)
- {
- return new WhenNode((children == null) ? null :
- children.clone(stylesheet),
- (next == null) ? null :
- next.clone(stylesheet),
- test.clone(stylesheet));
- }
-
- void doApply(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len,
- Node parent, Node nextSibling)
- throws TransformerException
- {
- Object ret = test.evaluate(context, pos, len);
- boolean success = (ret instanceof Boolean) ?
- ((Boolean) ret).booleanValue() :
- Expr._boolean(context, ret);
- if (success)
- {
- if (children != null)
- {
- children.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
- else
- {
- if (next != null)
- {
- next.apply(stylesheet, mode,
- context, pos, len,
- parent, nextSibling);
- }
- }
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer(getClass().getName());
- buf.append('[');
- buf.append("test=");
- buf.append(test);
- buf.append(']');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/transform/WithParam.java b/libjava/gnu/xml/transform/WithParam.java
deleted file mode 100644
index 7c3379833ce..00000000000
--- a/libjava/gnu/xml/transform/WithParam.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/* WithParam.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.Collections;
-import javax.xml.namespace.QName;
-import javax.xml.transform.TransformerException;
-import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-
-/**
- * A specification for setting a variable or parameter during template
- * processing with <code>apply-templates</code> or
- * <code>call-template</code>.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class WithParam
-{
-
- final String name;
- final Expr select;
- final TemplateNode content;
-
- WithParam(String name, Expr select)
- {
- this.name = name;
- this.select = select;
- content = null;
- }
-
- WithParam(String name, TemplateNode content)
- {
- this.name = name;
- this.content = content;
- select = null;
- }
-
- Object getValue(Stylesheet stylesheet, QName mode,
- Node context, int pos, int len)
- throws TransformerException
- {
- if (select != null)
- {
- return select.evaluate(context, pos, len);
- }
- else
- {
- Document doc = (context instanceof Document) ? (Document) context :
- context.getOwnerDocument();
- DocumentFragment fragment = doc.createDocumentFragment();
- content.apply(stylesheet, mode,
- context, pos, len,
- fragment, null);
- return Collections.singleton(fragment);
- }
- }
-
- WithParam clone(Stylesheet stylesheet)
- {
- if (content == null)
- {
- return new WithParam(name,
- select.clone(stylesheet));
- }
- else
- {
- return new WithParam(name,
- content.clone(stylesheet));
- }
- }
-
-}
diff --git a/libjava/gnu/xml/transform/XSLComparator.java b/libjava/gnu/xml/transform/XSLComparator.java
deleted file mode 100644
index 222f370c8b9..00000000000
--- a/libjava/gnu/xml/transform/XSLComparator.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/* XSLComparator.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.text.Collator;
-import org.w3c.dom.Node;
-import gnu.xml.xpath.Expr;
-
-/**
- * Comparator for sorting lists of nodes according to a list of sort keys.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class XSLComparator
- implements Comparator
-{
-
- final List sortKeys;
-
- XSLComparator(List sortKeys)
- {
- this.sortKeys = sortKeys;
- }
-
- public int compare(Object o1, Object o2)
- {
- if (o1 instanceof Node && o2 instanceof Node)
- {
- Node n1 = (Node) o1;
- Node n2 = (Node) o2;
- for (Iterator i = sortKeys.iterator(); i.hasNext(); )
- {
- SortKey sortKey = (SortKey) i.next();
- String k1 = sortKey.key(n1);
- String k2 = sortKey.key(n2);
- if ("text".equals(sortKey.dataType))
- {
- Locale locale = (sortKey.lang == null) ? Locale.getDefault() :
- new Locale(sortKey.lang);
- Collator collator = Collator.getInstance(locale);
- int d = collator.compare(k1, k2);
- if (d != 0)
- {
- switch (sortKey.caseOrder)
- {
- case SortKey.UPPER_FIRST:
- // TODO
- break;
- case SortKey.LOWER_FIRST:
- // TODO
- break;
- }
- if (sortKey.descending)
- {
- d = -d;
- }
- return d;
- }
- }
- else if ("number".equals(sortKey.dataType))
- {
- double kn1 = Expr._number(n1, k1);
- double kn2 = Expr._number(n2, k2);
- int d;
- if (Double.isNaN(kn1) || Double.isInfinite(kn2))
- {
- d = -1;
- }
- else if (Double.isNaN(kn2) || Double.isInfinite(kn1))
- {
- d = 1;
- }
- else
- {
- // conversion to int may give 0 for small numbers
- d = (kn1 > kn2) ? 1 : (kn1 < kn2) ? -1 : 0;
- }
- return (sortKey.descending) ? -d : d;
- }
- }
- }
- return 0;
- }
-
-}
diff --git a/libjava/gnu/xml/transform/XSLURIResolver.java b/libjava/gnu/xml/transform/XSLURIResolver.java
deleted file mode 100644
index 2e4e6545a87..00000000000
--- a/libjava/gnu/xml/transform/XSLURIResolver.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/* XSLURIResolver.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.transform;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.Reader;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.HashMap;
-import java.util.Map;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.ErrorListener;
-import javax.xml.transform.Source;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.URIResolver;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamSource;
-import org.w3c.dom.Node;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import gnu.xml.dom.ls.ReaderInputStream;
-
-/**
- * URI resolver for XSLT.
- * This resolver parses external entities into DOMSources. It
- * maintains a cache of URIs to DOMSources to avoid expensive re-parsing.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class XSLURIResolver
- implements URIResolver
-{
-
- Map lastModifiedCache = new HashMap();
- Map nodeCache = new HashMap();
- DocumentBuilder builder;
- URIResolver userResolver;
- ErrorListener userListener;
-
- void setUserResolver(URIResolver userResolver)
- {
- this.userResolver = userResolver;
- }
-
- void setUserListener(ErrorListener userListener)
- {
- this.userListener = userListener;
- }
-
- /**
- * Clear the cache.
- */
- void flush()
- {
- lastModifiedCache.clear();
- nodeCache.clear();
- }
-
- public Source resolve(String href, String base)
- throws TransformerException
- {
- Source source = null;
- if (userResolver != null)
- {
- source = userResolver.resolve(base, href);
- }
- return resolveDOM(source, href, base);
- }
-
- DOMSource resolveDOM(Source source, String base, String href)
- throws TransformerException
- {
- if (source != null && source instanceof DOMSource)
- {
- return (DOMSource) source;
- }
- String systemId = (source == null) ? null : source.getSystemId();
- long lastModified = 0L, lastLastModified = 0L;
-
- try
- {
- URL url = resolveURL(systemId, base, href);
- Node node = null;
- InputStream in = null;
- if (source instanceof StreamSource)
- {
- StreamSource ss = (StreamSource) source;
- in = ss.getInputStream();
- if (in == null)
- {
- Reader reader = ss.getReader();
- if (reader != null)
- {
- in = new ReaderInputStream(reader);
- }
- }
- }
- if (in == null && url != null)
- {
- systemId = url.toString();
- node = (Node) nodeCache.get(systemId);
- // Is the resource up to date?
- URLConnection conn = url.openConnection();
- Long llm = (Long) lastModifiedCache.get(systemId);
- if (llm != null)
- {
- lastLastModified = llm.longValue();
- conn.setIfModifiedSince(lastLastModified);
- }
- conn.connect();
- lastModified = conn.getLastModified();
- if (node != null &&
- lastModified > 0L &&
- lastModified <= lastLastModified)
- {
- // Resource unchanged
- return new DOMSource(node, systemId);
- }
- else
- {
- // Resource new or modified
- in = conn.getInputStream();
- nodeCache.put(systemId, node);
- lastModifiedCache.put(systemId, new Long(lastModified));
- }
- }
- InputSource input = new InputSource(in);
- input.setSystemId(systemId);
- DocumentBuilder builder = getDocumentBuilder();
- node = builder.parse(input);
- return new DOMSource(node, systemId);
- }
- catch (IOException e)
- {
- throw new TransformerException(e);
- }
- catch (SAXException e)
- {
- throw new TransformerException(e);
- }
- }
-
- URL resolveURL(String systemId, String base, String href)
- throws IOException
- {
- URL url = null;
- try
- {
- if (systemId != null)
- {
- try
- {
- url = new URL(systemId);
- }
- catch (MalformedURLException e)
- {
- // Try building from base + href
- }
- }
- if (url == null)
- {
- if (base != null)
- {
- URL baseURL = new URL(base);
- url = new URL(baseURL, href);
- }
- else if (href != null)
- {
- url = new URL(href);
- }
- }
- return url;
- }
- catch (MalformedURLException e)
- {
- // Fall back to local filesystem
- File file = null;
- if (href == null)
- {
- href = systemId;
- }
- if (base != null)
- {
- int lsi = base.lastIndexOf(File.separatorChar);
- if (lsi != -1 && lsi < base.length() - 1)
- {
- base = base.substring(0, lsi);
- }
- File baseFile = new File(base);
- file = new File(baseFile, href);
- }
- else if (href != null)
- {
- file = new File(href);
- }
- return (file == null) ? null : file.toURL();
- }
- }
-
- DocumentBuilder getDocumentBuilder()
- throws TransformerException
- {
- try
- {
- if (builder == null)
- {
- DocumentBuilderFactory factory =
- DocumentBuilderFactory.newInstance();
- factory.setNamespaceAware(true);
- factory.setExpandEntityReferences(true);
- builder = factory.newDocumentBuilder();
- }
- if (userResolver != null)
- {
- builder.setEntityResolver(new URIResolverEntityResolver(userResolver));
- }
- if (userListener != null)
- {
- builder.setErrorHandler(new ErrorListenerErrorHandler(userListener));
- }
- return builder;
- }
- catch (Exception e)
- {
- throw new TransformerException(e);
- }
- }
-
-}
-
diff --git a/libjava/gnu/xml/util/DoParse.java b/libjava/gnu/xml/util/DoParse.java
deleted file mode 100644
index 5da086ed8f9..00000000000
--- a/libjava/gnu/xml/util/DoParse.java
+++ /dev/null
@@ -1,300 +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 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
- ) {
- StringBuffer buf = new StringBuffer ();
- 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/gnu/xml/util/DomParser.java b/libjava/gnu/xml/util/DomParser.java
deleted file mode 100644
index b28b6103b70..00000000000
--- a/libjava/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/gnu/xml/util/Resolver.java b/libjava/gnu/xml/util/Resolver.java
deleted file mode 100644
index e84b5ade106..00000000000
--- a/libjava/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 dictionary 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/gnu/xml/util/SAXNullTransformerFactory.java b/libjava/gnu/xml/util/SAXNullTransformerFactory.java
deleted file mode 100644
index 81ad8231270..00000000000
--- a/libjava/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/gnu/xml/util/XCat.java b/libjava/gnu/xml/util/XCat.java
deleted file mode 100644
index 0f163387081..00000000000
--- a/libjava/gnu/xml/util/XCat.java
+++ /dev/null
@@ -1,1609 +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 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:")) {
- StringBuffer buf = new StringBuffer ();
- 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) {
- StringBuffer buf = new StringBuffer (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/gnu/xml/util/XHTMLWriter.java b/libjava/gnu/xml/util/XHTMLWriter.java
deleted file mode 100644
index 272c66cd34c..00000000000
--- a/libjava/gnu/xml/util/XHTMLWriter.java
+++ /dev/null
@@ -1,112 +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
- */
-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/gnu/xml/util/XMLWriter.java b/libjava/gnu/xml/util/XMLWriter.java
deleted file mode 100644
index fd36b715325..00000000000
--- a/libjava/gnu/xml/util/XMLWriter.java
+++ /dev/null
@@ -1,1927 +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 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
- */
-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 StringBuffer 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 StringBuffer ();
- }
-
- 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/gnu/xml/xpath/AndExpr.java b/libjava/gnu/xml/xpath/AndExpr.java
deleted file mode 100644
index 680e84792fb..00000000000
--- a/libjava/gnu/xml/xpath/AndExpr.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/* AndExpr.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import org.w3c.dom.Node;
-
-/**
- * Logical and.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public final class AndExpr
- extends Expr
-{
-
- final Expr lhs;
- final Expr rhs;
-
- public AndExpr(Expr lhs, Expr rhs)
- {
- this.lhs = lhs;
- this.rhs = rhs;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object left = lhs.evaluate(context, pos, len);
- if (!_boolean(context, left))
- {
- return Boolean.FALSE;
- }
- Object right = rhs.evaluate(context, pos, len);
- return _boolean(context, right) ? Boolean.TRUE : Boolean.FALSE;
- }
-
- public Expr clone(Object context)
- {
- return new AndExpr(lhs.clone(context), rhs.clone(context));
- }
-
- public String toString()
- {
- return lhs + " and " + rhs;
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/ArithmeticExpr.java b/libjava/gnu/xml/xpath/ArithmeticExpr.java
deleted file mode 100644
index f972d7d4afd..00000000000
--- a/libjava/gnu/xml/xpath/ArithmeticExpr.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/* ArithmeticExpr.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import org.w3c.dom.Node;
-
-/**
- * Binary arithmetic expression.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class ArithmeticExpr
- extends Expr
-{
-
- static final int ADD = 0;
- static final int SUBTRACT = 1;
- static final int MULTIPLY = 2;
- static final int DIVIDE = 3;
- static final int MODULO = 4;
-
- final Expr lhs;
- final Expr rhs;
- final int op;
-
- ArithmeticExpr(Expr lhs, Expr rhs, int op)
- {
- this.lhs = lhs;
- this.rhs = rhs;
- switch (op)
- {
- case ADD:
- case SUBTRACT:
- case MULTIPLY:
- case DIVIDE:
- case MODULO:
- this.op = op;
- break;
- default:
- throw new IllegalArgumentException();
- }
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object left = lhs.evaluate(context, pos, len);
- Object right = rhs.evaluate(context, pos, len);
-
- double ln = _number(context, left);
- double rn = _number(context, right);
- switch (op)
- {
- case ADD:
- return new Double(ln + rn);
- case SUBTRACT:
- return new Double(ln - rn);
- case MULTIPLY:
- return new Double(ln * rn);
- case DIVIDE:
- if (rn == 0.0d || rn == -0.0d)
- {
- return new Double(ln < 0.0d ?
- Double.NEGATIVE_INFINITY :
- Double.POSITIVE_INFINITY);
- }
- return new Double(ln / rn);
- case MODULO:
- if (rn == 0.0d || rn == -0.0d)
- {
- return new Double(ln < 0.0d ?
- Double.NEGATIVE_INFINITY :
- Double.POSITIVE_INFINITY);
- }
- return new Double(ln % rn);
- default:
- throw new IllegalStateException();
- }
- }
-
- public Expr clone(Object context)
- {
- return new ArithmeticExpr(lhs.clone(context), rhs.clone(context), op);
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer();
- buf.append(lhs);
- buf.append(' ');
- switch (op)
- {
- case ADD:
- buf.append('+');
- break;
- case SUBTRACT:
- buf.append('-');
- break;
- case MULTIPLY:
- buf.append('*');
- break;
- case DIVIDE:
- buf.append("div");
- break;
- case MODULO:
- buf.append("mod");
- break;
- }
- buf.append(' ');
- buf.append(rhs);
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/BooleanFunction.java b/libjava/gnu/xml/xpath/BooleanFunction.java
deleted file mode 100644
index 018348ff2e7..00000000000
--- a/libjava/gnu/xml/xpath/BooleanFunction.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/* BooleanFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>boolean</code> function converts its argument to a boolean as
- * follows:
- * <ul>
- * <li>a number is true if and only if it is neither positive or negative
- * zero nor NaN</li>
- * <li>a node-set is true if and only if it is non-empty</li>
- * <li>a string is true if and only if its length is non-zero</li>
- * <li>an object of a type other than the four basic types is converted to a
- * boolean in a way that is dependent on that type</li>
- * </ul>
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class BooleanFunction
- extends Expr
-{
-
- final Expr arg;
-
- BooleanFunction(List args)
- {
- this((Expr) args.get(0));
- }
-
- BooleanFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = arg.evaluate(context, pos, len);
- return _boolean(context, val) ? Boolean.TRUE : Boolean.FALSE;
- }
-
- public Expr clone(Object context)
- {
- return new BooleanFunction(arg.clone(context));
- }
-
- public String toString()
- {
- return "boolean(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/CeilingFunction.java b/libjava/gnu/xml/xpath/CeilingFunction.java
deleted file mode 100644
index 50dc45d550f..00000000000
--- a/libjava/gnu/xml/xpath/CeilingFunction.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/* CeilingFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>ceiling</code> function returns the smallest (closest to
- * negative infinity) number that is not less than the argument and that
- * is an integer.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class CeilingFunction
- extends Expr
-{
-
- final Expr arg;
-
- CeilingFunction(List args)
- {
- this((Expr) args.get(0));
- }
-
- CeilingFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = arg.evaluate(context, pos, len);
- double n = _number(context, val);
- return new Double(Math.ceil(n));
- }
-
- public Expr clone(Object context)
- {
- return new CeilingFunction(arg.clone(context));
- }
-
- public String toString()
- {
- return "ceiling(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/ConcatFunction.java b/libjava/gnu/xml/xpath/ConcatFunction.java
deleted file mode 100644
index 60802081d92..00000000000
--- a/libjava/gnu/xml/xpath/ConcatFunction.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/* ConcatFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>concat</code> function returns the concatenation of its arguments.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class ConcatFunction
- extends Expr
-{
-
- final List args;
-
- ConcatFunction(List args)
- {
- this.args = args;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- StringBuffer buf = new StringBuffer();
- for (Iterator i = args.iterator(); i.hasNext(); )
- {
- Expr arg = (Expr) i.next();
- Object val = arg.evaluate(context, pos, len);
- buf.append(_string(context, val));
- }
- return buf.toString();
- }
-
- public Expr clone(Object context)
- {
- int len = args.size();
- List args2 = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- args2.add(((Expr) args.get(i)).clone(context));
- }
- return new ConcatFunction(args2);
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer("concat(");
- int len = args.size();
- for (int i = 0; i < len; i++)
- {
- if (i > 0)
- {
- buf.append(',');
- }
- buf.append(args.get(i));
- }
- buf.append(')');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/Constant.java b/libjava/gnu/xml/xpath/Constant.java
deleted file mode 100644
index ca7c1d674b0..00000000000
--- a/libjava/gnu/xml/xpath/Constant.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Constant.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import org.w3c.dom.Node;
-
-/**
- * Constant value (string literal or number).
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public final class Constant
- extends Expr
-{
-
- final Object value;
-
- public Constant(Object value)
- {
- this.value = value;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- return value;
- }
-
- public Expr clone(Object context)
- {
- return new Constant(value);
- }
-
- public String toString()
- {
- String ret = value.toString();
- if (value instanceof String)
- {
- if (ret.indexOf('\'') == -1)
- {
- return '\'' + ret + '\'';
- }
- else
- {
- return '"' + ret + '"';
- }
- }
- if (value instanceof Double)
- {
- if (ret.endsWith(".0"))
- {
- ret = ret.substring(0, ret.length() - 2);
- }
- }
- return ret;
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/ContainsFunction.java b/libjava/gnu/xml/xpath/ContainsFunction.java
deleted file mode 100644
index 3910d15ef26..00000000000
--- a/libjava/gnu/xml/xpath/ContainsFunction.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/* ContainsFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>contains</code> function returns true if the first argument
- * string contains the second argument string, and otherwise returns false.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class ContainsFunction
- extends Expr
-{
-
- final Expr arg1;
- final Expr arg2;
-
- ContainsFunction(List args)
- {
- this((Expr) args.get(0), (Expr) args.get(1));
- }
-
- ContainsFunction(Expr arg1, Expr arg2)
- {
- this.arg1 = arg1;
- this.arg2 = arg2;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val1 = arg1.evaluate(context, pos, len);
- Object val2 = arg2.evaluate(context, pos, len);
- String s1 = _string(context, val1);
- String s2 = _string(context, val2);
- return (s1.indexOf(s2) != -1) ? Boolean.TRUE : Boolean.FALSE;
- }
-
- public Expr clone(Object context)
- {
- return new ContainsFunction(arg1.clone(context), arg2.clone(context));
- }
-
- public String toString()
- {
- return "contains(" + arg1 + "," + arg2 + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/CountFunction.java b/libjava/gnu/xml/xpath/CountFunction.java
deleted file mode 100644
index 4164f69f321..00000000000
--- a/libjava/gnu/xml/xpath/CountFunction.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/* CountFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.Collection;
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>count</code> function returns the number of nodes in the
- * argument node-set.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class CountFunction
- extends Expr
-{
-
- final Expr arg;
-
- CountFunction(List args)
- {
- this((Expr) args.get(0));
- }
-
- CountFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = arg.evaluate(context, pos, len);
- return new Double((double) ((Collection) val).size());
- }
-
- public Expr clone(Object context)
- {
- return new CountFunction(arg.clone(context));
- }
-
- public String toString()
- {
- return "count(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/DocumentOrderComparator.java b/libjava/gnu/xml/xpath/DocumentOrderComparator.java
deleted file mode 100644
index c7d7de9f7c7..00000000000
--- a/libjava/gnu/xml/xpath/DocumentOrderComparator.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/* DocumentOrderComparator.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.Comparator;
-import org.w3c.dom.Node;
-
-/**
- * Sorts nodes into document order.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class DocumentOrderComparator
- implements Comparator
-{
-
- public int compare(Object o1, Object o2)
- {
- if (o1 instanceof Node && o2 instanceof Node)
- {
- Node n1 = (Node)o1;
- Node n2 = (Node)o2;
- return (int) n1.compareDocumentPosition(n2);
- }
- return 0;
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/EqualityExpr.java b/libjava/gnu/xml/xpath/EqualityExpr.java
deleted file mode 100644
index d4a2f6890f0..00000000000
--- a/libjava/gnu/xml/xpath/EqualityExpr.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/* EqualityExpr.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.Collection;
-import java.util.Iterator;
-import org.w3c.dom.Node;
-
-/**
- * Boolean equality expression.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class EqualityExpr
- extends Expr
-{
-
- final Expr lhs;
- final Expr rhs;
- final boolean invert;
-
- EqualityExpr(Expr lhs, Expr rhs, boolean invert)
- {
- this.lhs = lhs;
- this.rhs = rhs;
- this.invert = invert;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- boolean val = evaluateImpl(context, pos, len);
- if (invert)
- {
- return val ? Boolean.FALSE : Boolean.TRUE;
- }
- else
- {
- return val ? Boolean.TRUE : Boolean.FALSE;
- }
- }
-
- private boolean evaluateImpl(Node context, int pos, int len)
- {
- Object left = lhs.evaluate(context, pos, len);
- Object right = rhs.evaluate(context, pos, len);
-
- /*
- * If both objects to be compared are node-sets, then the comparison
- * will be true if and only if there is a node in the first node-set and
- * a node in the second node-set such that the result of performing the
- * comparison on the string-values of the two nodes is true.
- */
- boolean flns = left instanceof Collection;
- boolean frns = right instanceof Collection;
- if (flns && frns)
- {
- Collection lns = (Collection) left;
- Collection rns = (Collection) right;
- boolean all = true;
- for (Iterator i = lns.iterator(); i.hasNext(); )
- {
- Node ltest = (Node) i.next();
- for (Iterator j = rns.iterator(); j.hasNext(); )
- {
- Node rtest = (Node) j.next();
- if (ltest == rtest || ltest.equals(rtest))
- {
- // much shorter
- if (!invert)
- {
- return true;
- }
- }
- else if (stringValue(ltest).equals(stringValue(rtest)))
- {
- if (!invert)
- {
- return true;
- }
- }
- else
- {
- all = false;
- }
- }
- }
- return false;
- }
- /*
- * If one object to be compared is a node-set and the other is a number,
- * then the comparison will be true if and only if there is a node in
- * the node-set such that the result of performing the comparison on the
- * number to be compared and on the result of converting the
- * string-value of that node to a number using the number function is
- * true.
- */
- boolean fln = left instanceof Double;
- boolean frn = right instanceof Double;
- if ((flns && frn) || (frns && fln))
- {
- Collection ns = flns ? (Collection) left : (Collection) right;
- double n = fln ? ((Double) left).doubleValue() :
- ((Double) right).doubleValue();
- boolean all = true;
- for (Iterator i = ns.iterator(); i.hasNext(); )
- {
- Node test = (Node) i.next();
- double nn = _number(context, stringValue(test));
- if (nn == n)
- {
- if (!invert)
- {
- return true;
- }
- }
- else
- {
- all = false;
- }
- }
- return invert ? all : false;
- }
- /*
- * If one object to be compared is a node-set and the other is a
- * string, then the comparison will be true if and only if there is a
- * node in the node-set such that the result of performing the
- * comparison on the string-value of the node and the other string is
- * true.
- */
- boolean fls = left instanceof String;
- boolean frs = right instanceof String;
- if ((flns && frs) || (frns && fls))
- {
- Collection ns = flns ? (Collection) left : (Collection) right;
- String s = fls ? (String) left : (String) right;
- boolean all = true;
- for (Iterator i = ns.iterator(); i.hasNext(); )
- {
- Node test = (Node) i.next();
- if (stringValue(test).equals(s))
- {
- if (!invert)
- {
- return true;
- }
- }
- else
- {
- all = false;
- }
- }
- return invert ? all : false;
- }
- /*
- * If one object to be compared is a node-set and the other is a
- * boolean, then the comparison will be true if and only if the result
- * of performing the comparison on the boolean and on the result of
- * converting the node-set to a boolean using the boolean function is
- * true.
- */
- boolean flb = left instanceof Boolean;
- boolean frb = right instanceof Boolean;
- if ((flns && frb) || (frns && flb))
- {
- Collection ns = flns ? (Collection) left : (Collection) right;
- boolean b = flb ? ((Boolean) left).booleanValue() :
- ((Boolean) right).booleanValue();
- return _boolean(context, ns) == b;
- }
- /*
- * If at least one object to be compared is a boolean, then each object
- * to be compared is converted to a boolean as if by applying the
- * boolean function.
- */
- if (flb || frb)
- {
- boolean lb = flb ? ((Boolean) left).booleanValue() :
- _boolean(context, left);
- boolean rb = frb ? ((Boolean) right).booleanValue() :
- _boolean(context, right);
- return lb == rb;
- }
- /*
- * Otherwise, if at least one object to be compared is
- * a number, then each object to be compared is converted to a number as
- * if by applying the number function.
- */
- if (fln || frn)
- {
- double ln = fln ? ((Double) left).doubleValue() :
- _number(context, left);
- double rn = frn ? ((Double) right).doubleValue() :
- _number(context, right);
- return ln == rn;
- }
- /*
- * Otherwise, both objects to be
- * compared are converted to strings as if by applying the string
- * function.
- */
- String ls = fls ? (String) left : _string(context, left);
- String rs = frs ? (String) right : _string(context, right);
- return ls.equals(rs);
- }
-
- public Expr clone(Object context)
- {
- return new EqualityExpr(lhs.clone(context), rhs.clone(context), invert);
- }
-
- public String toString()
- {
- if (invert)
- {
- return lhs + " != " + rhs;
- }
- else
- {
- return lhs + " = " + rhs;
- }
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/Expr.java b/libjava/gnu/xml/xpath/Expr.java
deleted file mode 100644
index 5957828522e..00000000000
--- a/libjava/gnu/xml/xpath/Expr.java
+++ /dev/null
@@ -1,474 +0,0 @@
-/* Expr.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.io.IOException;
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
-import java.util.StringTokenizer;
-import javax.xml.namespace.QName;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpression;
-import javax.xml.xpath.XPathExpressionException;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-/**
- * An XPath expression.
- * This can be evaluated in the context of a node to produce a result.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public abstract class Expr
- implements XPathExpression
-{
-
- protected static final Comparator documentOrderComparator =
- new DocumentOrderComparator();
-
- protected static final DecimalFormat decimalFormat =
- new DecimalFormat("####################################################" +
- ".####################################################",
- new DecimalFormatSymbols(Locale.US));
-
- public Object evaluate(Object item, QName returnType)
- throws XPathExpressionException
- {
- Object ret = null;
- Node context = null;
- if (item instanceof Node)
- {
- context = (Node) item;
- ret = evaluate(context, 1, 1);
- if (XPathConstants.STRING == returnType &&
- !(ret instanceof String))
- {
- ret = _string(context, ret);
- }
- else if (XPathConstants.NUMBER == returnType &&
- !(ret instanceof Double))
- {
- ret = new Double(_number(context, ret));
- }
- else if (XPathConstants.BOOLEAN == returnType &&
- !(ret instanceof Boolean))
- {
- ret = _boolean(context, ret) ? Boolean.TRUE : Boolean.FALSE;
- }
- else if (XPathConstants.NODE == returnType)
- {
- if (ret instanceof Collection)
- {
- Collection ns = (Collection) ret;
- switch (ns.size())
- {
- case 0:
- ret = null;
- break;
- case 1:
- ret = (Node) ns.iterator().next();
- break;
- default:
- throw new XPathExpressionException("multiple nodes in node-set");
- }
- }
- else if (ret != null)
- {
- throw new XPathExpressionException("return value is not a node-set");
- }
- }
- else if (XPathConstants.NODESET == returnType)
- {
- if (ret != null && !(ret instanceof Collection))
- {
- throw new XPathExpressionException("return value is not a node-set");
- }
- }
- }
- return ret;
- }
-
- public String evaluate(Object item)
- throws XPathExpressionException
- {
- return (String) evaluate(item, XPathConstants.STRING);
- }
-
- public Object evaluate(InputSource source, QName returnType)
- throws XPathExpressionException
- {
- try
- {
- DocumentBuilderFactory factory =
- new gnu.xml.dom.JAXPFactory();
- DocumentBuilder builder = factory.newDocumentBuilder();
- Document doc = builder.parse(source);
- return evaluate(doc, returnType);
- }
- catch (ParserConfigurationException e)
- {
- throw new XPathExpressionException(e);
- }
- catch (SAXException e)
- {
- throw new XPathExpressionException(e);
- }
- catch (IOException e)
- {
- throw new XPathExpressionException(e);
- }
- }
-
- public String evaluate(InputSource source)
- throws XPathExpressionException
- {
- return (String) evaluate(source, XPathConstants.STRING);
- }
-
- public abstract Object evaluate(Node context, int pos, int len);
-
- public abstract Expr clone(Object context);
-
- /* -- 4.1 Node Set Functions -- */
-
- /**
- * The id function selects elements by their unique ID.
- * When the argument to id is of type node-set, then the result is
- * the union of the result of applying id to the string-value of each of
- * the nodes in the argument node-set. When the argument to id is of any
- * other type, the argument is converted to a string as if by a call to
- * the string function; the string is split into a whitespace-separated
- * list of tokens (whitespace is any sequence of characters matching the
- * production S); the result is a node-set containing the elements in the
- * same document as the context node that have a unique ID equal to any of
- * the tokens in the list.
- */
- public static Collection _id(Node context, Object object)
- {
- Set ret = new HashSet();
- if (object instanceof Collection)
- {
- Collection nodeSet = (Collection) object;
- for (Iterator i = nodeSet.iterator(); i.hasNext(); )
- {
- String string = stringValue((Node) i.next());
- ret.addAll(_id (context, string));
- }
- }
- else
- {
- Document doc = (context instanceof Document) ? (Document) context :
- context.getOwnerDocument();
- String string = _string(context, object);
- StringTokenizer st = new StringTokenizer(string, " \t\r\n");
- while (st.hasMoreTokens())
- {
- Node element = doc.getElementById(st.nextToken());
- if (element != null)
- {
- ret.add(element);
- }
- }
- }
- return ret;
- }
-
- /**
- * The local-name function returns the local part of the expanded-name of
- * the node in the argument node-set that is first in document order. If
- * the argument node-set is empty or the first node has no expanded-name,
- * an empty string is returned. If the argument is omitted, it defaults to
- * a node-set with the context node as its only member.
- */
- public static String _local_name(Node context, Collection nodeSet)
- {
- Node node = (nodeSet == null || nodeSet.size() == 0) ? context :
- firstNode(nodeSet);
- return node.getLocalName();
- }
-
- /**
- * The namespace-uri function returns the namespace URI of the
- * expanded-name of the node in the argument node-set that is first in
- * document order. If the argument node-set is empty, the first node has
- * no expanded-name, or the namespace URI of the expanded-name is null, an
- * empty string is returned. If the argument is omitted, it defaults to a
- * node-set with the context node as its only member.
- */
- public static String _namespace_uri(Node context, Collection nodeSet)
- {
- Node node = (nodeSet == null || nodeSet.size() == 0) ? context :
- firstNode(nodeSet);
- return node.getNamespaceURI();
- }
-
- /**
- * The name function returns a string containing a QName representing the
- * expanded-name of the node in the argument node-set that is first in
- * document order. The QName must represent the expanded-name with respect
- * to the namespace declarations in effect on the node whose expanded-name
- * is being represented. Typically, this will be the QName that occurred
- * in the XML source. This need not be the case if there are namespace
- * declarations in effect on the node that associate multiple prefixes
- * with the same namespace. However, an implementation may include
- * information about the original prefix in its representation of nodes;
- * in this case, an implementation can ensure that the returned string is
- * always the same as the QName used in the XML source. If the argument
- * node-set is empty or the first node has no expanded-name, an empty
- * string is returned. If the argument it omitted, it defaults to a
- * node-set with the context node as its only member.
- */
- public static String _name(Node context, Collection nodeSet)
- {
- Node node = (nodeSet == null || nodeSet.size() == 0) ? context :
- firstNode(nodeSet);
- switch (node.getNodeType())
- {
- case Node.ATTRIBUTE_NODE:
- case Node.ELEMENT_NODE:
- case Node.PROCESSING_INSTRUCTION_NODE:
- return node.getNodeName();
- default:
- return "";
- }
- }
-
- /**
- * Returns the first node in the set in document order.
- */
- static Node firstNode(Collection nodeSet)
- {
- List list = new ArrayList(nodeSet);
- Collections.sort(list, documentOrderComparator);
- return (Node) list.get(0);
- }
-
- /* -- 4.2 String Functions -- */
-
- /**
- * Implementation of the XPath <code>string</code> function.
- */
- public static String _string(Node context, Object object)
- {
- if (object == null)
- {
- return stringValue(context);
- }
- if (object instanceof String)
- {
- return (String) object;
- }
- if (object instanceof Boolean)
- {
- return object.toString();
- }
- if (object instanceof Double)
- {
- double d = ((Double) object).doubleValue();
- if (Double.isNaN(d))
- {
- return "NaN";
- }
- else if (d == 0.0d)
- {
- return "0";
- }
- else if (Double.isInfinite(d))
- {
- if (d < 0)
- {
- return "-Infinity";
- }
- else
- {
- return "Infinity";
- }
- }
- else
- {
- String ret = decimalFormat.format(d);
- if (ret.endsWith (".0"))
- {
- ret = ret.substring(0, ret.length() - 2);
- }
- return ret;
- }
- }
- if (object instanceof Collection)
- {
- Collection nodeSet = (Collection) object;
- if (nodeSet.isEmpty())
- {
- return "";
- }
- Node node = firstNode(nodeSet);
- return stringValue(node);
- }
- throw new IllegalArgumentException(object.toString());
- }
-
- /* -- 4.3 Boolean Functions -- */
-
- /**
- * Implementation of the XPath <code>boolean</code> function.
- */
- public static boolean _boolean(Node context, Object object)
- {
- if (object instanceof Boolean)
- {
- return ((Boolean) object).booleanValue();
- }
- if (object instanceof Double)
- {
- return ((Double) object).doubleValue() != 0.0;
- }
- if (object instanceof String)
- {
- return ((String) object).length() != 0;
- }
- if (object instanceof Collection)
- {
- return ((Collection) object).size() != 0;
- }
- return false; // TODO user defined types
- }
-
- /* -- 4.4 Number Functions -- */
-
- /**
- * Implementation of the XPath <code>number</code> function.
- */
- public static double _number(Node context, Object object)
- {
- if (object == null)
- {
- object = Collections.singleton(context);
- }
- if (object instanceof Double)
- {
- return ((Double) object).doubleValue();
- }
- if (object instanceof Boolean)
- {
- return ((Boolean) object).booleanValue() ? 1.0 : 0.0;
- }
- if (object instanceof Collection)
- {
- // Convert node-set to string
- object = stringValue((Collection) object);
- }
- if (object instanceof String)
- {
- String string = ((String) object).trim();
- try
- {
- return Double.parseDouble(string);
- }
- catch (NumberFormatException e)
- {
- return Double.NaN;
- }
- }
- return Double.NaN; // TODO user-defined types
- }
-
- /**
- * Computes the XPath string-value of the specified node-set.
- */
- public static String stringValue(Collection nodeSet)
- {
- StringBuffer buf = new StringBuffer();
- for (Iterator i = nodeSet.iterator(); i.hasNext(); )
- {
- buf.append(stringValue((Node) i.next()));
- }
- return buf.toString();
- }
-
- /**
- * Computes the XPath string-value of the specified node.
- */
- public static String stringValue(Node node)
- {
- return stringValue(node, false);
- }
-
- static String stringValue(Node node, boolean elementMode)
- {
- switch (node.getNodeType())
- {
- case Node.DOCUMENT_NODE: // 5.1 Root Node
- case Node.DOCUMENT_FRAGMENT_NODE:
- case Node.ELEMENT_NODE: // 5.2 Element Nodes
- StringBuffer buf = new StringBuffer();
- for (Node ctx = node.getFirstChild(); ctx != null;
- ctx = ctx.getNextSibling())
- {
- buf.append(stringValue(ctx, true));
- }
- return buf.toString();
- case Node.TEXT_NODE: // 5.7 Text Nodes
- case Node.CDATA_SECTION_NODE:
- return node.getNodeValue();
- case Node.ATTRIBUTE_NODE: // 5.3 Attribute Nodes
- case Node.PROCESSING_INSTRUCTION_NODE: // 5.5 Processing Instruction
- case Node.COMMENT_NODE: // 5.6 Comment Nodes
- if (!elementMode)
- {
- return node.getNodeValue();
- }
- default:
- return "";
- }
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/FalseFunction.java b/libjava/gnu/xml/xpath/FalseFunction.java
deleted file mode 100644
index ca07b7870e8..00000000000
--- a/libjava/gnu/xml/xpath/FalseFunction.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/* FalseFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import org.w3c.dom.Node;
-
-/**
- * The <code>false</code> function returns false.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class FalseFunction
- extends Expr
-{
-
- public Object evaluate(Node context, int pos, int len)
- {
- return Boolean.FALSE;
- }
-
- public Expr clone(Object context)
- {
- return new FalseFunction();
- }
-
- public String toString()
- {
- return "false()";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/FloorFunction.java b/libjava/gnu/xml/xpath/FloorFunction.java
deleted file mode 100644
index c8608cdc1f5..00000000000
--- a/libjava/gnu/xml/xpath/FloorFunction.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/* FloorFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>floor</code> function returns the largest (closest to positive
- * infinity) number that is not greater than the argument and that is an
- * integer.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class FloorFunction
- extends Expr
-{
-
- final Expr arg;
-
- FloorFunction(List args)
- {
- this((Expr) args.get(0));
- }
-
- FloorFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = arg.evaluate(context, pos, len);
- double n = _number(context, val);
- return new Double(Math.floor(n));
- }
-
- public Expr clone(Object context)
- {
- return new FloorFunction(arg.clone(context));
- }
-
- public String toString()
- {
- return "floor(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/Function.java b/libjava/gnu/xml/xpath/Function.java
deleted file mode 100644
index aecd49d9c73..00000000000
--- a/libjava/gnu/xml/xpath/Function.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Function.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-
-/**
- * Interface to be implemented by external functions that need to receive
- * parameter values.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public interface Function
-{
-
- /**
- * Sets the list of expressions to evaluate as parameter values.
- */
- void setArguments(List args);
-
-}
-
diff --git a/libjava/gnu/xml/xpath/FunctionCall.java b/libjava/gnu/xml/xpath/FunctionCall.java
deleted file mode 100644
index 97763e09764..00000000000
--- a/libjava/gnu/xml/xpath/FunctionCall.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/* FunctionCall.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import javax.xml.namespace.QName;
-import javax.xml.xpath.XPathFunction;
-import javax.xml.xpath.XPathFunctionException;
-import javax.xml.xpath.XPathFunctionResolver;
-import org.w3c.dom.Node;
-
-/**
- * Executes an XPath core or extension function.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public final class FunctionCall
- extends Expr
-{
-
- final XPathFunctionResolver resolver;
- final String name;
- final List args;
-
- public FunctionCall(XPathFunctionResolver resolver, String name)
- {
- this(resolver, name, Collections.EMPTY_LIST);
- }
-
- public FunctionCall(XPathFunctionResolver resolver, String name, List args)
- {
- this.resolver = resolver;
- this.name = name;
- this.args = args;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- if (resolver != null)
- {
- QName qname = QName.valueOf(name);
- int arity = args.size();
- XPathFunction function = resolver.resolveFunction(qname, arity);
- if (function != null)
- {
- //System.err.println("Calling "+toString()+" with "+values);
- if (function instanceof Expr)
- {
- if (function instanceof Function)
- {
- ((Function) function).setArguments(args);
- }
- return ((Expr) function).evaluate(context, pos, len);
- }
- else
- {
- List values = new ArrayList(arity);
- for (int i = 0; i < arity; i++)
- {
- Expr arg = (Expr) args.get(i);
- values.add(arg.evaluate(context, pos, len));
- }
- try
- {
- return function.evaluate(values);
- }
- catch (XPathFunctionException e)
- {
- e.printStackTrace(System.err); // FIXME
- throw new RuntimeException(e.getMessage(), e);
- }
- }
- }
- }
- throw new IllegalArgumentException("Invalid function call: " +
- toString());
- }
-
- public Expr clone(Object context)
- {
- int len = args.size();
- List args2 = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- args2.add(((Expr) args.get(i)).clone(context));
- }
- XPathFunctionResolver r = resolver;
- if (context instanceof XPathFunctionResolver)
- {
- r = (XPathFunctionResolver) context;
- }
- return new FunctionCall(r, name, args2);
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer();
- buf.append(name);
- buf.append('(');
- int len = args.size();
- for (int i = 0; i < len; i++)
- {
- if (i > 0)
- {
- buf.append(',');
- }
- buf.append(args.get(i));
- }
- buf.append(')');
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/IdFunction.java b/libjava/gnu/xml/xpath/IdFunction.java
deleted file mode 100644
index 164e141a7c4..00000000000
--- a/libjava/gnu/xml/xpath/IdFunction.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/* IdFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.Collection;
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>id</code> function selects elements by their unique ID.
- * When the argument to id is of type node-set, then the result is
- * the union of the result of applying id to the string-value of each of the
- * nodes in the argument node-set. When the argument to id is of any other
- * type, the argument is converted to a string as if by a call to the string
- * function; the string is split into a whitespace-separated list of tokens
- * (whitespace is any sequence of characters matching the production S); the
- * result is a node-set containing the elements in the same document as the
- * context node that have a unique ID equal to any of the tokens in the
- * list.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public final class IdFunction
- extends Pattern
-{
-
- final Expr arg;
-
- IdFunction(List args)
- {
- this((Expr) args.get(0));
- }
-
- public IdFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public boolean matches(Node context)
- {
- Object ret = evaluate(context, 1, 1);
- return !((Collection) ret).isEmpty();
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = arg.evaluate(context, pos, len);
- return _id(context, val);
- }
-
- public Expr clone(Object context)
- {
- return new IdFunction(arg.clone(context));
- }
-
- public String toString()
- {
- return "id(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/LangFunction.java b/libjava/gnu/xml/xpath/LangFunction.java
deleted file mode 100644
index fbf3af1f95c..00000000000
--- a/libjava/gnu/xml/xpath/LangFunction.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/* LangFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-/**
- * The <code>lang</code> function returns true or false depending on whether
- * the language of the context node as specified by xml:lang attributes is
- * the same as or is a sublanguage of the language specified by the argument
- * string. The language of the context node is determined by the value of
- * the xml:lang attribute on the context node, or, if the context node has
- * no xml:lang attribute, by the value of the xml:lang attribute on the
- * nearest ancestor of the context node that has an xml:lang attribute. If
- * there is no such attribute, then lang returns false. If there is such an
- * attribute, then lang returns true if the attribute value is equal to the
- * argument ignoring case, or if there is some suffix starting with - such
- * that the attribute value is equal to the argument ignoring that suffix of
- * the attribute value and ignoring case.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class LangFunction
- extends Expr
-{
-
- final Expr arg;
-
- LangFunction(List args)
- {
- this((Expr) args.get(0));
- }
-
- LangFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = arg.evaluate(context, pos, len);
- String lang = _string(context, val);
- String clang = getLang(context);
- while (clang == null && context != null)
- {
- context = context.getParentNode();
- clang = getLang(context);
- }
- boolean ret = (clang == null) ? false :
- clang.toLowerCase().startsWith(lang.toLowerCase());
- return ret ? Boolean.TRUE : Boolean.FALSE;
- }
-
- String getLang(Node node)
- {
- if (node.getNodeType() == Node.ELEMENT_NODE)
- {
- return ((Element) node).getAttribute("xml:lang");
- }
- return null;
- }
-
- public Expr clone(Object context)
- {
- return new IdFunction(arg.clone(context));
- }
-
- public String toString()
- {
- return "lang(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/LastFunction.java b/libjava/gnu/xml/xpath/LastFunction.java
deleted file mode 100644
index b24e0482d90..00000000000
--- a/libjava/gnu/xml/xpath/LastFunction.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/* LastFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import org.w3c.dom.Node;
-
-/**
- * The <code>last</code> function returns a number equal to the context
- * size from the expression evaluation context.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class LastFunction
- extends Expr
-{
-
- public Object evaluate(Node context, int pos, int len)
- {
- return new Double((double) len);
- }
-
- public Expr clone(Object context)
- {
- return new LastFunction();
- }
-
- public String toString()
- {
- return "last()";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/LocalNameFunction.java b/libjava/gnu/xml/xpath/LocalNameFunction.java
deleted file mode 100644
index 342d9331a74..00000000000
--- a/libjava/gnu/xml/xpath/LocalNameFunction.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/* LocalNameFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.Collection;
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>local-name</code> function returns the local part of the
- * expanded-name of the node in the argument node-set that is first in
- * document order.
- * If the argument node-set is empty or the first node has no expanded-name,
- * an empty string is returned. If the argument is omitted, it defaults to a
- * node-set with the context node as its only member.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class LocalNameFunction
- extends Expr
-{
-
- final Expr arg;
-
- LocalNameFunction(List args)
- {
- this(args.size() > 0 ? (Expr) args.get(0) : null);
- }
-
- LocalNameFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = (arg == null) ? null : arg.evaluate(context, pos, len);
- return _local_name(context, (Collection) val);
- }
-
- public Expr clone(Object context)
- {
- return new LocalNameFunction((arg == null) ? null :
- arg.clone(context));
- }
-
- public String toString()
- {
- return (arg == null) ? "local-name()" : "local-name(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/NameFunction.java b/libjava/gnu/xml/xpath/NameFunction.java
deleted file mode 100644
index bd34325a097..00000000000
--- a/libjava/gnu/xml/xpath/NameFunction.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/* NameFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.Collection;
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>name</code> function returns a string containing a QName
- * representing the expanded-name of the node in the argument node-set that
- * is first in document order. The QName must represent the expanded-name
- * with respect to the namespace declarations in effect on the node whose
- * expanded-name is being represented. Typically, this will be the QName
- * that occurred in the XML source. This need not be the case if there are
- * namespace declarations in effect on the node that associate multiple
- * prefixes with the same namespace. However, an implementation may include
- * information about the original prefix in its representation of nodes; in
- * this case, an implementation can ensure that the returned string is
- * always the same as the QName used in the XML source. If the argument
- * node-set is empty or the first node has no expanded-name, an empty string
- * is returned. If the argument it omitted, it defaults to a node-set with
- * the context node as its only member.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class NameFunction
- extends Expr
-{
-
- final Expr arg;
-
- NameFunction(List args)
- {
- this(args.size() > 0 ? (Expr) args.get(0) : null);
- }
-
- NameFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = (arg == null) ? null : arg.evaluate(context, pos, len);
- return _name(context, (Collection) val);
- }
-
- public Expr clone(Object context)
- {
- return new NameFunction((arg == null) ? null :
- arg.clone(context));
- }
-
- public String toString()
- {
- return (arg == null) ? "name()" : "name(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/NameTest.java b/libjava/gnu/xml/xpath/NameTest.java
deleted file mode 100644
index d2e892beb2b..00000000000
--- a/libjava/gnu/xml/xpath/NameTest.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/* NameTest.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import javax.xml.XMLConstants;
-import javax.xml.namespace.QName;
-import org.w3c.dom.Node;
-
-/**
- * Tests whether a node has the specified name.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public final class NameTest
- extends Test
-{
-
- final QName qName;
- final boolean anyLocalName;
- final boolean any;
-
- public NameTest(QName qName, boolean anyLocalName, boolean any)
- {
- this.anyLocalName = anyLocalName;
- this.any = any;
- this.qName = qName;
- }
-
- public boolean matchesAny()
- {
- return any;
- }
-
- public boolean matchesAnyLocalName()
- {
- return anyLocalName;
- }
-
- public boolean matches(Node node, int pos, int len)
- {
- switch (node.getNodeType())
- {
- case Node.ATTRIBUTE_NODE:
- // Do not match namespace attributes
- String uri = node.getNamespaceURI();
- if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(uri) ||
- XMLConstants.XMLNS_ATTRIBUTE.equals(node.getPrefix()) ||
- XMLConstants.XMLNS_ATTRIBUTE.equals(node.getNodeName()))
- {
- return false;
- }
- // Fall through
- case Node.ELEMENT_NODE:
- break;
- default:
- return false;
- }
- if (any)
- {
- return true;
- }
- String uri = qName.getNamespaceURI();
- if (!equal(uri, node.getNamespaceURI()))
- {
- return false;
- }
- if (anyLocalName)
- {
- return true;
- }
- String localName = qName.getLocalPart();
- return (localName.equals(node.getLocalName()));
- }
-
- final boolean equal(String s1, String s2)
- {
- return (((s1 == null || s1.length() == 0) &&
- (s2 == null || s2.length() == 0)) ||
- s1 != null && s1.equals(s2));
- }
-
- public Test clone(Object context)
- {
- return new NameTest(qName, anyLocalName, any);
- }
-
- public String toString ()
- {
- if (any)
- {
- return "*";
- }
- return qName.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/NamespaceTest.java b/libjava/gnu/xml/xpath/NamespaceTest.java
deleted file mode 100644
index 8240bf8deaf..00000000000
--- a/libjava/gnu/xml/xpath/NamespaceTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/* NamespaceTest.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import javax.xml.XMLConstants;
-import javax.xml.namespace.QName;
-import org.w3c.dom.Node;
-
-/**
- * Tests whether a namespace attribute has the specified name.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public final class NamespaceTest
- extends Test
-{
-
- final QName qName;
- final boolean anyLocalName;
- final boolean any;
-
- public NamespaceTest(QName qName, boolean anyLocalName, boolean any)
- {
- this.anyLocalName = anyLocalName;
- this.any = any;
- this.qName = qName;
- }
-
- public boolean matchesAny()
- {
- return any;
- }
-
- public boolean matchesAnyLocalName()
- {
- return anyLocalName;
- }
-
- public boolean matches(Node node, int pos, int len)
- {
- switch (node.getNodeType())
- {
- case Node.ATTRIBUTE_NODE:
- // Only match namespace attributes
- String uri = node.getNamespaceURI();
- if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(uri) ||
- XMLConstants.XMLNS_ATTRIBUTE.equals(node.getPrefix()) ||
- XMLConstants.XMLNS_ATTRIBUTE.equals(node.getNodeName()))
- {
- break;
- }
- // Fall through
- default:
- // Only process namespace attributes
- return false;
- }
- if (any)
- {
- return true;
- }
- if (anyLocalName)
- {
- return true;
- }
- String localName = qName.getLocalPart();
- return (localName.equals(node.getLocalName()));
- }
-
- public Test clone(Object context)
- {
- return new NamespaceTest(qName, anyLocalName, any);
- }
-
- public String toString ()
- {
- if (any)
- {
- return "*";
- }
- return qName.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/NamespaceUriFunction.java b/libjava/gnu/xml/xpath/NamespaceUriFunction.java
deleted file mode 100644
index 9a42e775488..00000000000
--- a/libjava/gnu/xml/xpath/NamespaceUriFunction.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/* NamespaceUriFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.Collection;
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>namespace-uri</code> function returns the namespace URI of the
- * expanded-name of the node in the argument node-set that is first in
- * document order. If the argument node-set is empty, the first node has no
- * expanded-name, or the namespace URI of the expanded-name is null, an
- * empty string is returned. If the argument is omitted, it defaults to a
- * node-set with the context node as its only member.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class NamespaceUriFunction
- extends Expr
-{
-
- final Expr arg;
-
- NamespaceUriFunction(List args)
- {
- this(args.size() > 0 ? (Expr) args.get(0) : null);
- }
-
- NamespaceUriFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = (arg == null) ? null : arg.evaluate(context, pos, len);
- return _namespace_uri(context, (Collection) val);
- }
-
- public Expr clone(Object context)
- {
- return new NamespaceUriFunction((arg == null) ? null :
- arg.clone(context));
- }
-
- public String toString()
- {
- return (arg == null) ? "namespace-uri()" : "namespace-uri(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/NegativeExpr.java b/libjava/gnu/xml/xpath/NegativeExpr.java
deleted file mode 100644
index bb84eebf05e..00000000000
--- a/libjava/gnu/xml/xpath/NegativeExpr.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/* NegativeExpr.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import org.w3c.dom.Node;
-
-/**
- * Unary negative.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class NegativeExpr
- extends Expr
-{
-
- final Expr expr;
-
- NegativeExpr(Expr expr)
- {
- this.expr = expr;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = expr.evaluate(context, pos, len);
- double n = _number(context, val);
- return new Double(-n);
- }
-
- public Expr clone(Object context)
- {
- return new NegativeExpr(expr.clone(context));
- }
-
- public String toString()
- {
- return "-" + expr;
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/NodeTypeTest.java b/libjava/gnu/xml/xpath/NodeTypeTest.java
deleted file mode 100644
index 521104cdb75..00000000000
--- a/libjava/gnu/xml/xpath/NodeTypeTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/* NodeTypeTest.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import org.w3c.dom.Node;
-
-/**
- * Tests whether a node is of a given type.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public final class NodeTypeTest
- extends Test
-{
-
- final short type;
- final String data;
-
- public NodeTypeTest(short type)
- {
- this(type, null);
- }
-
- public NodeTypeTest(short type, String data)
- {
- this.type = type;
- this.data = data;
- }
-
- public short getNodeType()
- {
- return type;
- }
-
- public String getData()
- {
- return data;
- }
-
- public boolean matches(Node node, int pos, int len)
- {
- short nodeType = node.getNodeType();
- switch (nodeType)
- {
- case Node.ELEMENT_NODE:
- case Node.ATTRIBUTE_NODE:
- case Node.TEXT_NODE:
- case Node.CDATA_SECTION_NODE:
- case Node.COMMENT_NODE:
- case Node.PROCESSING_INSTRUCTION_NODE:
- if (type > 0)
- {
- if (nodeType != type)
- {
- return false;
- }
- if (data != null && !data.equals(node.getNodeValue()))
- {
- return false;
- }
- }
- return true;
- default:
- // Not part of XPath data model
- return false;
- }
- }
-
- public Test clone(Object context)
- {
- return new NodeTypeTest(type, data);
- }
-
- public String toString()
- {
- switch (type)
- {
- case 0:
- return "node()";
- case Node.TEXT_NODE:
- return "text()";
- case Node.COMMENT_NODE:
- return "comment()";
- case Node.PROCESSING_INSTRUCTION_NODE:
- if (data != null)
- {
- return "processing-instruction('" + data + "')";
- }
- return "processing-instruction()";
- default:
- throw new IllegalStateException();
- }
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/NormalizeSpaceFunction.java b/libjava/gnu/xml/xpath/NormalizeSpaceFunction.java
deleted file mode 100644
index a61e118f2e5..00000000000
--- a/libjava/gnu/xml/xpath/NormalizeSpaceFunction.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/* NormalizeSpaceFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import java.util.StringTokenizer;
-import org.w3c.dom.Node;
-
-/**
- * The <code>normalize-space</code> function returns the argument string
- * with whitespace normalized by stripping leading and trailing whitespace
- * and replacing sequences of whitespace characters by a single space.
- * Whitespace characters are the same as those allowed by the S production
- * in XML. If the argument is omitted, it defaults to the context node
- * converted to a string, in other words the string-value of the context
- * node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class NormalizeSpaceFunction
- extends Expr
-{
-
- final Expr arg;
-
- NormalizeSpaceFunction(List args)
- {
- this((Expr) args.get(0));
- }
-
- NormalizeSpaceFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = (arg == null) ? null : arg.evaluate(context, pos, len);
- String s = _string(context, val);
- StringTokenizer st = new StringTokenizer(s, " \t\r\n");
- StringBuffer buf = new StringBuffer();
- if (st.hasMoreTokens())
- {
- buf.append(st.nextToken());
- while (st.hasMoreTokens())
- {
- buf.append(' ');
- buf.append(st.nextToken());
- }
- }
- return buf.toString();
- }
-
- public Expr clone(Object context)
- {
- return new NormalizeSpaceFunction(arg.clone(context));
- }
-
- public String toString()
- {
- return (arg == null) ? "normalize-space()" : "normalize-space(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/NotFunction.java b/libjava/gnu/xml/xpath/NotFunction.java
deleted file mode 100644
index dcb7ad4fb68..00000000000
--- a/libjava/gnu/xml/xpath/NotFunction.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/* NotFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>not</code> function returns true if its argument is false,
- * and false otherwise.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class NotFunction
- extends Expr
-{
-
- final Expr arg;
-
- NotFunction(List args)
- {
- this((Expr) args.get(0));
- }
-
- NotFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = arg.evaluate(context, pos, len);
- return _boolean(context, val) ? Boolean.FALSE : Boolean.TRUE;
- }
-
- public Expr clone(Object context)
- {
- return new NotFunction(arg.clone(context));
- }
-
- public String toString()
- {
- return "not(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/NumberFunction.java b/libjava/gnu/xml/xpath/NumberFunction.java
deleted file mode 100644
index a27eb7a46cf..00000000000
--- a/libjava/gnu/xml/xpath/NumberFunction.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/* NumberFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>number</code> function converts its argument to a number as
- * follows:
- * <ul>
- * <li>a string that consists of optional whitespace followed by an optional
- * minus sign followed by a Number followed by whitespace is converted to
- * the IEEE 754 number that is nearest (according to the IEEE 754
- * round-to-nearest rule) to the mathematical value represented by the
- * string; any other string is converted to NaN</li>
- * <li>boolean true is converted to 1; boolean false is converted to 0</li>
- * <li>a node-set is first converted to a string as if by a call to the
- * string function and then converted in the same way as a string
- * argument</li>
- * <li>an object of a type other than the four basic types is converted to a
- * number in a way that is dependent on that type</li>
- * </ul>
- * If the argument is omitted, it defaults to a node-set with the context
- * node as its only member.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class NumberFunction
- extends Expr
-{
-
- final Expr arg;
-
- NumberFunction(List args)
- {
- this(args.size() > 0 ? (Expr) args.get(0) : null);
- }
-
- NumberFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = (arg == null) ? null : arg.evaluate(context, pos, len);
- return new Double(_number(context, val));
- }
-
- public Expr clone(Object context)
- {
- return new NumberFunction(arg.clone(context));
- }
-
- public String toString()
- {
- return "number(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/OrExpr.java b/libjava/gnu/xml/xpath/OrExpr.java
deleted file mode 100644
index ca3fd227718..00000000000
--- a/libjava/gnu/xml/xpath/OrExpr.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/* OrExpr.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import org.w3c.dom.Node;
-
-/**
- * Logical or.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public final class OrExpr
- extends Expr
-{
-
- final Expr lhs;
- final Expr rhs;
-
- public OrExpr(Expr lhs, Expr rhs)
- {
- this.lhs = lhs;
- this.rhs = rhs;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object left = lhs.evaluate(context, pos, len);
- if (_boolean(context, left))
- {
- return Boolean.TRUE;
- }
- Object right = rhs.evaluate(context, pos, len);
- return _boolean(context, right) ? Boolean.TRUE : Boolean.FALSE;
- }
-
- public Expr clone(Object context)
- {
- return new OrExpr(lhs.clone(context), rhs.clone(context));
- }
-
- public String toString()
- {
- return lhs + " or " + rhs;
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/ParenthesizedExpr.java b/libjava/gnu/xml/xpath/ParenthesizedExpr.java
deleted file mode 100644
index 6a8bb12fa32..00000000000
--- a/libjava/gnu/xml/xpath/ParenthesizedExpr.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/* ParenthesizedExpr.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * Simple subexpression.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class ParenthesizedExpr
- extends Expr
-{
-
- final Expr expr;
-
- ParenthesizedExpr(Expr expr)
- {
- this.expr = expr;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object ret = expr.evaluate(context, pos, len);
- if (ret instanceof Collection)
- {
- List list = new ArrayList((Collection) ret);
- Collections.sort(list, documentOrderComparator);
- ret = list;
- }
- return ret;
- }
-
- public Expr clone(Object context)
- {
- return new ParenthesizedExpr(expr.clone(context));
- }
-
- public String toString()
- {
- return "(" + expr + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/Path.java b/libjava/gnu/xml/xpath/Path.java
deleted file mode 100644
index 4b01f0918ab..00000000000
--- a/libjava/gnu/xml/xpath/Path.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Path.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.Collection;
-import org.w3c.dom.Node;
-
-/**
- * An XPath path component expression.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-abstract class Path
- extends Pattern
-{
-
- abstract Collection evaluate(Node context, Collection nodeSet);
-
-}
diff --git a/libjava/gnu/xml/xpath/Pattern.java b/libjava/gnu/xml/xpath/Pattern.java
deleted file mode 100644
index d992c6d4e63..00000000000
--- a/libjava/gnu/xml/xpath/Pattern.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Pattern.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import org.w3c.dom.Node;
-
-/**
- * Interface implemented by expressions that can for part of XSL patterns.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public abstract class Pattern
- extends Expr
-{
-
- public abstract boolean matches(Node context);
-
-}
-
diff --git a/libjava/gnu/xml/xpath/PositionFunction.java b/libjava/gnu/xml/xpath/PositionFunction.java
deleted file mode 100644
index 790b0e005cf..00000000000
--- a/libjava/gnu/xml/xpath/PositionFunction.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/* PositionFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import org.w3c.dom.Node;
-
-/**
- * The <code>position</code> function returns a number equal to the context
- * position from the expression evaluation context.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class PositionFunction
- extends Expr
-{
-
- public Object evaluate(Node context, int pos, int len)
- {
- return new Double((double) pos);
- }
-
- public Expr clone(Object context)
- {
- return new PositionFunction();
- }
-
- public String toString()
- {
- return "position()";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/Predicate.java b/libjava/gnu/xml/xpath/Predicate.java
deleted file mode 100644
index d495440fdbb..00000000000
--- a/libjava/gnu/xml/xpath/Predicate.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Predicate.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import org.w3c.dom.Node;
-
-/**
- * Tests whether an expression matches against a given context node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-class Predicate
- extends Test
-{
-
- final Expr expr;
-
- Predicate(Expr expr)
- {
- this.expr = expr;
- }
-
- public boolean matches(Node node, int pos, int len)
- {
- Object ret = expr.evaluate(node, pos, len);
- if (ret instanceof Double)
- {
- // Same as [position() = x]
- return ((Double) ret).intValue() == pos;
- }
- return Expr._boolean(node, expr.evaluate(node, pos, len));
- }
-
- public Test clone(Object context)
- {
- return new Predicate(expr.clone(context));
- }
-
- public String toString()
- {
- return "[" + expr + "]";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/RelationalExpr.java b/libjava/gnu/xml/xpath/RelationalExpr.java
deleted file mode 100644
index 622d2290106..00000000000
--- a/libjava/gnu/xml/xpath/RelationalExpr.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/* RelationalExpr.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import org.w3c.dom.Node;
-
-/**
- * Numerical comparison expression.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class RelationalExpr
- extends Expr
-{
-
- final Expr lhs;
- final Expr rhs;
- final boolean lt;
- final boolean eq;
-
- RelationalExpr(Expr lhs, Expr rhs, boolean lt, boolean eq)
- {
- this.lhs = lhs;
- this.rhs = rhs;
- this.lt = lt;
- this.eq = eq;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object left = lhs.evaluate(context, pos, len);
- Object right = rhs.evaluate(context, pos, len);
- double ln = _number(context, left);
- double rn = _number(context, right);
- if (eq && ln == rn)
- {
- return Boolean.TRUE;
- }
- if (lt)
- {
- if (ln < rn || Double.isInfinite(rn))
- {
- return Boolean.TRUE;
- }
- }
- else
- {
- if (ln > rn || Double.isInfinite(ln))
- {
- return Boolean.TRUE;
- }
- }
- return Boolean.FALSE;
- }
-
- public Expr clone(Object context)
- {
- return new RelationalExpr(lhs.clone(context), rhs.clone(context), lt, eq);
- }
-
- public String toString()
- {
- return lhs + " " + (lt ? "<" : ">") + (eq ? "=" : "") + " " + rhs;
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/Root.java b/libjava/gnu/xml/xpath/Root.java
deleted file mode 100644
index cf8f8d17e54..00000000000
--- a/libjava/gnu/xml/xpath/Root.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Root.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.Collection;
-import java.util.Collections;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-
-/**
- * Expression that evaluates to the document root.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public final class Root
- extends Path
-{
-
- public boolean matches(Node node)
- {
- return (node.getNodeType() == Node.DOCUMENT_NODE);
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- return evaluate(context, Collections.EMPTY_SET);
- }
-
- Collection evaluate(Node context, Collection ns)
- {
- Document doc = (context instanceof Document) ? (Document) context :
- context.getOwnerDocument();
- return Collections.singleton(doc);
- }
-
- public Expr clone(Object context)
- {
- return new Root();
- }
-
- public String toString()
- {
- return "/";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/RoundFunction.java b/libjava/gnu/xml/xpath/RoundFunction.java
deleted file mode 100644
index 7f9ff2a96a3..00000000000
--- a/libjava/gnu/xml/xpath/RoundFunction.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/* RoundFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>round</code> function returns the number that is closest to the
- * argument and that is an integer. If there are two such numbers, then the
- * one that is closest to positive infinity is returned. If the argument is
- * NaN, then NaN is returned. If the argument is positive infinity, then
- * positive infinity is returned. If the argument is negative infinity, then
- * negative infinity is returned. If the argument is positive zero, then
- * positive zero is returned. If the argument is negative zero, then
- * negative zero is returned. If the argument is less than zero, but greater
- * than or equal to -0.5, then negative zero is returned.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class RoundFunction
- extends Expr
-{
-
- final Expr arg;
-
- RoundFunction(List args)
- {
- this((Expr) args.get(0));
- }
-
- RoundFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = arg.evaluate(context, pos, len);
- double n = _number(context, val);
- return (Double.isNaN(n) || Double.isInfinite(n)) ?
- new Double(n) : new Double(Math.round(n));
- }
-
- public Expr clone(Object context)
- {
- return new RoundFunction(arg.clone(context));
- }
-
- public String toString()
- {
- return "round(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/Selector.java b/libjava/gnu/xml/xpath/Selector.java
deleted file mode 100644
index 383893d9280..00000000000
--- a/libjava/gnu/xml/xpath/Selector.java
+++ /dev/null
@@ -1,498 +0,0 @@
-/* Selector.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Set;
-import javax.xml.XMLConstants;
-import org.w3c.dom.Attr;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
-/**
- * A single component of a location path.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public final class Selector
- extends Path
-{
-
- public static final int ANCESTOR = 0;
- public static final int ANCESTOR_OR_SELF = 1;
- public static final int ATTRIBUTE = 2;
- public static final int CHILD = 3;
- public static final int DESCENDANT = 4;
- public static final int DESCENDANT_OR_SELF = 5;
- public static final int FOLLOWING = 6;
- public static final int FOLLOWING_SIBLING = 7;
- public static final int NAMESPACE = 8;
- public static final int PARENT = 9;
- public static final int PRECEDING = 10;
- public static final int PRECEDING_SIBLING = 11;
- public static final int SELF = 12;
-
- /**
- * Axis to select nodes in.
- */
- final int axis;
-
- /**
- * List of tests to perform on candidates.
- */
- final Test[] tests;
-
- public Selector(int axis, List tests)
- {
- this.axis = axis;
- this.tests = new Test[tests.size()];
- tests.toArray(this.tests);
- if (axis == NAMESPACE &&
- this.tests.length > 0 &&
- this.tests[0] instanceof NameTest)
- {
- NameTest nt = (NameTest) this.tests[0];
- this.tests[0] = new NamespaceTest(nt.qName, nt.anyLocalName, nt.any);
- }
- }
-
- /**
- * Returns the list of tests to perform on candidates.
- */
- public Test[] getTests()
- {
- return tests;
- }
-
- public boolean matches(Node context)
- {
- short nodeType = context.getNodeType();
- switch (axis)
- {
- case CHILD:
- if (nodeType == Node.ATTRIBUTE_NODE)
- {
- return false;
- }
- break;
- case ATTRIBUTE:
- case NAMESPACE:
- if (nodeType != Node.ATTRIBUTE_NODE)
- {
- return false;
- }
- break;
- case DESCENDANT_OR_SELF:
- return true;
- default:
- return false;
- }
- int tlen = tests.length;
- if (tlen > 0)
- {
- int pos = getContextPosition(context);
- int len = getContextSize(context);
- for (int j = 0; j < tlen && len > 0; j++)
- {
- Test test = tests[j];
- if (!test.matches(context, pos, len))
- {
- return false;
- }
- }
- }
- return true;
- }
-
- private int getContextPosition(Node ctx)
- {
- int pos = 1;
- for (ctx = ctx.getPreviousSibling(); ctx != null;
- ctx = ctx.getPreviousSibling())
- {
- pos++;
- }
- return pos;
- }
-
- private int getContextSize(Node ctx)
- {
- if (ctx.getNodeType() == Node.ATTRIBUTE_NODE)
- {
- Node parent = ((Attr) ctx).getOwnerElement();
- return parent.getAttributes().getLength();
- }
- Node parent = ctx.getParentNode();
- if (parent != null)
- {
- return parent.getChildNodes().getLength();
- }
- return 1;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Set acc = new LinkedHashSet();
- addCandidates(context, acc);
- List candidates = new ArrayList(acc);
- //Collections.sort(candidates, documentOrderComparator);
- List ret = filterCandidates(candidates, false);
- return ret;
- }
-
- Collection evaluate(Node context, Collection ns)
- {
- Set acc = new LinkedHashSet();
- for (Iterator i = ns.iterator(); i.hasNext(); )
- {
- addCandidates((Node) i.next(), acc);
- }
- List candidates = new ArrayList(acc);
- //Collections.sort(candidates, documentOrderComparator);
- List ret = filterCandidates(candidates, true);
- return ret;
- }
-
- /**
- * Filter the given list of candidates according to the node tests.
- */
- List filterCandidates(List candidates, boolean cascade)
- {
- int len = candidates.size();
- int tlen = tests.length;
- if (tlen > 0 && len > 0)
- {
- // Present the result of each successful generation to the next test
- for (int j = 0; j < tlen && len > 0; j++)
- {
- Test test = tests[j];
- List successful = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- Node node = (Node) candidates.get(i);
- if (cascade)
- {
- // Documents and DocumentFragments should be considered
- // if part of a location path where the axis involves
- // the SELF concept
- short nodeType = node.getNodeType();
- if ((nodeType == Node.DOCUMENT_NODE ||
- nodeType == Node.DOCUMENT_FRAGMENT_NODE) &&
- (axis == DESCENDANT_OR_SELF ||
- axis == ANCESTOR_OR_SELF ||
- axis == SELF) &&
- (tests.length == 1 &&
- tests[0] instanceof NodeTypeTest &&
- ((NodeTypeTest) tests[0]).type == (short) 0))
- {
- successful.add(node);
- continue;
- }
- }
- if (test.matches(node, i + 1, len))
- {
- successful.add(node);
- }
- /*
- System.err.println("Testing "+node);
- int p = getContextPosition(node);
- int l = getContextSize(node);
- if (test.matches(node, p, l))
- {
- successful.add(node);
- }*/
- }
- candidates = successful;
- len = candidates.size();
- }
- }
- return candidates;
- }
-
- void addCandidates(Node context, Collection candidates)
- {
- // Build list of candidates
- switch (axis)
- {
- case CHILD:
- addChildNodes(context, candidates, false);
- break;
- case DESCENDANT:
- addChildNodes(context, candidates, true);
- break;
- case DESCENDANT_OR_SELF:
- candidates.add (context);
- addChildNodes(context, candidates, true);
- break;
- case PARENT:
- addParentNode(context, candidates, false);
- break;
- case ANCESTOR:
- addParentNode(context, candidates, true);
- break;
- case ANCESTOR_OR_SELF:
- candidates.add(context);
- addParentNode(context, candidates, true);
- break;
- case FOLLOWING_SIBLING:
- addFollowingNodes(context, candidates, false);
- break;
- case PRECEDING_SIBLING:
- addPrecedingNodes(context, candidates, false);
- break;
- case FOLLOWING:
- addFollowingNodes(context, candidates, true);
- break;
- case PRECEDING:
- addPrecedingNodes(context, candidates, true);
- break;
- case ATTRIBUTE:
- addAttributes(context, candidates);
- break;
- case NAMESPACE:
- addNamespaceAttributes(context, candidates);
- break;
- case SELF:
- candidates.add(context);
- break;
- }
- }
-
- void addChildNodes(Node context, Collection acc, boolean recurse)
- {
- Node child = context.getFirstChild();
- while (child != null)
- {
- acc.add(child);
- if (recurse)
- {
- addChildNodes(child, acc, recurse);
- }
- child = child.getNextSibling();
- }
- }
-
- void addParentNode(Node context, Collection acc, boolean recurse)
- {
- Node parent = (context.getNodeType() == Node.ATTRIBUTE_NODE) ?
- ((Attr) context).getOwnerElement() : context.getParentNode();
- if (parent != null)
- {
- acc.add(parent);
- if (recurse)
- {
- addParentNode(parent, acc, recurse);
- }
- }
- }
-
- void addFollowingNodes(Node context, Collection acc, boolean recurse)
- {
- Node cur = context.getNextSibling();
- while (cur != null)
- {
- acc.add(cur);
- if (recurse)
- {
- addChildNodes(cur, acc, true);
- }
- cur = cur.getNextSibling();
- }
- if (recurse)
- {
- context = (context.getNodeType() == Node.ATTRIBUTE_NODE) ?
- ((Attr) context).getOwnerElement() : context.getParentNode();
- if (context != null)
- {
- addFollowingNodes(context, acc, recurse);
- }
- }
- }
-
- void addPrecedingNodes(Node context, Collection acc, boolean recurse)
- {
- Node cur = context.getPreviousSibling();
- while (cur != null)
- {
- acc.add(cur);
- if (recurse)
- {
- addChildNodes(cur, acc, true);
- }
- cur = cur.getPreviousSibling();
- }
- if (recurse)
- {
- context = (context.getNodeType() == Node.ATTRIBUTE_NODE) ?
- ((Attr) context).getOwnerElement() : context.getParentNode();
- if (context != null)
- {
- addPrecedingNodes(context, acc, recurse);
- }
- }
- }
-
- void addAttributes(Node context, Collection acc)
- {
- NamedNodeMap attrs = context.getAttributes();
- if (attrs != null)
- {
- int attrLen = attrs.getLength();
- for (int i = 0; i < attrLen; i++)
- {
- Node attr = attrs.item(i);
- if (!isNamespaceAttribute(attr))
- {
- acc.add(attr);
- }
- }
- }
- }
-
- void addNamespaceAttributes(Node context, Collection acc)
- {
- NamedNodeMap attrs = context.getAttributes();
- if (attrs != null)
- {
- int attrLen = attrs.getLength();
- for (int i = 0; i < attrLen; i++)
- {
- Node attr = attrs.item(i);
- if (isNamespaceAttribute(attr))
- {
- acc.add(attr);
- }
- }
- }
- }
-
- final boolean isNamespaceAttribute(Node node)
- {
- String uri = node.getNamespaceURI();
- return (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(uri) ||
- XMLConstants.XMLNS_ATTRIBUTE.equals(node.getPrefix()) ||
- XMLConstants.XMLNS_ATTRIBUTE.equals(node.getNodeName()));
- }
-
- public Expr clone(Object context)
- {
- int len = tests.length;
- List tests2 = new ArrayList(len);
- for (int i = 0; i < len; i++)
- {
- tests2.add(tests[i].clone(context));
- }
- return new Selector(axis, tests2);
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer();
- switch (axis)
- {
- case ANCESTOR:
- buf.append("ancestor::");
- break;
- case ANCESTOR_OR_SELF:
- buf.append("ancestor-or-self::");
- break;
- case ATTRIBUTE:
- buf.append("attribute::");
- break;
- case CHILD:
- //buf.append("child::");
- break;
- case DESCENDANT:
- buf.append("descendant::");
- break;
- case DESCENDANT_OR_SELF:
- buf.append("descendant-or-self::");
- break;
- case FOLLOWING:
- buf.append("following::");
- break;
- case FOLLOWING_SIBLING:
- buf.append("following-sibling::");
- break;
- case NAMESPACE:
- buf.append("namespace::");
- break;
- case PARENT:
- if (tests.length == 0 ||
- (tests[0] instanceof NodeTypeTest &&
- ((NodeTypeTest) tests[0]).type == 0))
- {
- return "..";
- }
- buf.append("parent::");
- break;
- case PRECEDING:
- buf.append("preceding::");
- break;
- case PRECEDING_SIBLING:
- buf.append("preceding-sibling::");
- break;
- case SELF:
- if (tests.length == 0 ||
- (tests[0] instanceof NodeTypeTest &&
- ((NodeTypeTest) tests[0]).type == 0))
- {
- return ".";
- }
- buf.append("self::");
- break;
- }
- if (tests.length == 0)
- {
- buf.append('*');
- }
- else
- {
- for (int i = 0; i < tests.length; i++)
- {
- buf.append(tests[i]);
- }
- }
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/StartsWithFunction.java b/libjava/gnu/xml/xpath/StartsWithFunction.java
deleted file mode 100644
index 2cee8555fbf..00000000000
--- a/libjava/gnu/xml/xpath/StartsWithFunction.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/* StartsWithFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>starts-with</code> function returns true if the first argument
- * string starts with the second argument string, and otherwise returns false.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class StartsWithFunction
- extends Expr
-{
-
- final Expr arg1;
- final Expr arg2;
-
- StartsWithFunction(List args)
- {
- this((Expr) args.get(0), (Expr) args.get(1));
- }
-
- StartsWithFunction(Expr arg1, Expr arg2)
- {
- this.arg1 = arg1;
- this.arg2 = arg2;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val1 = arg1.evaluate(context, pos, len);
- Object val2 = arg2.evaluate(context, pos, len);
- String s1 = _string(context, val1);
- String s2 = _string(context, val2);
- return s1.startsWith(s2) ? Boolean.TRUE : Boolean.FALSE;
- }
-
- public Expr clone(Object context)
- {
- return new StartsWithFunction(arg1.clone(context), arg2.clone(context));
- }
-
- public String toString()
- {
- return "starts-with(" + arg1 + "," + arg2 + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/Steps.java b/libjava/gnu/xml/xpath/Steps.java
deleted file mode 100644
index e8cbc4e619b..00000000000
--- a/libjava/gnu/xml/xpath/Steps.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/* Steps.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.Set;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Node;
-
-/**
- * A list of transitions between components in a location path.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public final class Steps
- extends Path
-{
-
- final LinkedList path;
-
- public Steps()
- {
- this(new LinkedList());
- }
-
- Steps(LinkedList path)
- {
- this.path = path;
- }
-
- public boolean matches(Node context)
- {
- // Right to left
- return matches(context, path.size() - 1);
- }
-
- boolean matches(Node context, int pos)
- {
- Pattern right = (Pattern) path.get(pos);
- if (!right.matches(context))
- {
- return false;
- }
- if (pos > 0)
- {
- Pattern left = (Pattern) path.get(pos - 1);
- Iterator j = possibleContexts(right, context).iterator();
- while (j.hasNext())
- {
- Node candidate = (Node) j.next();
- if (left.matches(candidate) &&
- matches(candidate, pos - 1))
- {
- return true;
- }
- // keep going, there may be another candidate
- }
- return false;
- }
- return true;
- }
-
- /**
- * Essentially the reverse of Selector.addCandidates.
- * The idea is to determine possible context nodes for a match.
- */
- Collection possibleContexts(Pattern pattern, Node context)
- {
- if (pattern instanceof Selector)
- {
- Selector s = (Selector) pattern;
- Collection candidates = new LinkedHashSet();
- switch (s.axis)
- {
- case Selector.PARENT:
- s.addChildNodes(context, candidates, false);
- break;
- case Selector.ANCESTOR:
- s.addChildNodes(context, candidates, true);
- break;
- case Selector.ANCESTOR_OR_SELF:
- candidates.add (context);
- s.addChildNodes(context, candidates, true);
- break;
- case Selector.CHILD:
- s.addParentNode(context, candidates, false);
- break;
- case Selector.DESCENDANT:
- s.addParentNode(context, candidates, true);
- break;
- case Selector.DESCENDANT_OR_SELF:
- candidates.add(context);
- s.addParentNode(context, candidates, true);
- break;
- case Selector.PRECEDING_SIBLING:
- s.addFollowingNodes(context, candidates, false);
- break;
- case Selector.FOLLOWING_SIBLING:
- s.addPrecedingNodes(context, candidates, false);
- break;
- case Selector.PRECEDING:
- s.addFollowingNodes(context, candidates, true);
- break;
- case Selector.FOLLOWING:
- s.addPrecedingNodes(context, candidates, true);
- break;
- case Selector.ATTRIBUTE:
- case Selector.NAMESPACE:
- if (context.getNodeType() == Node.ATTRIBUTE_NODE)
- {
- candidates.add(((Attr) context).getOwnerElement());
- }
- break;
- case Selector.SELF:
- candidates.add(context);
- break;
- }
- return candidates;
- }
- return Collections.EMPTY_SET;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- //System.err.println(toString()+" evaluate");
- // Left to right
- Iterator i = path.iterator();
- Expr lhs = (Expr) i.next();
- Object val = lhs.evaluate(context, pos, len);
- //System.err.println("\tevaluate "+lhs+" = "+val);
- while (val instanceof Collection && i.hasNext())
- {
- Path rhs = (Path) i.next();
- val = rhs.evaluate(context, (Collection) val);
- //System.err.println("\tevaluate "+rhs+" = "+val);
- }
- return val;
- }
-
- Collection evaluate(Node context, Collection ns)
- {
- // Left to right
- Iterator i = path.iterator();
- Expr lhs = (Expr) i.next();
- if (lhs instanceof Path)
- {
- ns = ((Path) lhs).evaluate(context, ns);
- }
- else
- {
- Set acc = new LinkedHashSet();
- int pos = 1, len = ns.size();
- for (Iterator j = ns.iterator(); j.hasNext(); )
- {
- Node node = (Node) j.next();
- Object ret = lhs.evaluate(node, pos++, len);
- if (ret instanceof Collection)
- {
- acc.addAll((Collection) ret);
- }
- }
- ns = acc;
- }
- while (i.hasNext())
- {
- Path rhs = (Path) i.next();
- ns = rhs.evaluate(context, ns);
- }
- return ns;
- }
-
- public Expr clone(Object context)
- {
- int len = path.size();
- LinkedList path2 = new LinkedList();
- for (int i = 0; i < len; i++)
- {
- path2.add(((Expr) path.get(i)).clone(context));
- }
- return new Steps(path2);
- }
-
- public String toString()
- {
- StringBuffer buf = new StringBuffer();
- Iterator i = path.iterator();
- Expr expr = (Expr) i.next();
- if (!(expr instanceof Root))
- {
- buf.append(expr);
- }
- while (i.hasNext())
- {
- expr = (Expr) i.next();
- buf.append('/');
- buf.append(expr);
- }
- return buf.toString();
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/StringFunction.java b/libjava/gnu/xml/xpath/StringFunction.java
deleted file mode 100644
index fac15050aaf..00000000000
--- a/libjava/gnu/xml/xpath/StringFunction.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/* StringFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>string function converts an object to a string as follows:
- * <ul>
- * <li>A node-set is converted to a string by returning the string-value of
- * the node in the node-set that is first in document order. If the node-set
- * is empty, an empty string is returned.</li>
- * <li>A number is converted to a string as follows
- * <ul>
- * <li>NaN is converted to the string NaN</li>
- * <li>positive zero is converted to the string 0</li>
- * <li>negative zero is converted to the string 0</li>
- * <li>positive infinity is converted to the string Infinity</li>
- * <li>negative infinity is converted to the string -Infinity</li>
- * <li>if the number is an integer, the number is represented in decimal
- * form as a Number with no decimal point and no leading zeros, preceded by
- * a minus sign (-) if the number is negative</li>
- * <li>otherwise, the number is represented in decimal form as a Number
- * including a decimal point with at least one digit before the decimal
- * point and at least one digit after the decimal point, preceded by a minus
- * sign (-) if the number is negative; there must be no leading zeros before
- * the decimal point apart possibly from the one required digit immediately
- * before the decimal point; beyond the one required digit after the decimal
- * point there must be as many, but only as many, more digits as are needed
- * to uniquely distinguish the number from all other IEEE 754 numeric
- * values.</li>
- * </ul>
- * </li>
- * <li>The boolean false value is converted to the string false. The boolean
- * true value is converted to the string true.</li>
- * <li>An object of a type other than the four basic types is converted to a
- * string in a way that is dependent on that type.</li>
- * </ul>
- * If the argument is omitted, it defaults to a node-set with the context
- * node as its only member.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class StringFunction
- extends Expr
-{
-
- final Expr arg;
-
- StringFunction(List args)
- {
- this(args.size() > 0 ? (Expr) args.get(0) : null);
- }
-
- StringFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = (arg == null) ? null : arg.evaluate(context, pos, len);
- return _string(context, val);
- }
-
- public Expr clone(Object context)
- {
- return new StringFunction((arg == null) ? null :
- arg.clone(context));
- }
-
- public String toString()
- {
- return (arg == null) ? "string()" : "string(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/StringLengthFunction.java b/libjava/gnu/xml/xpath/StringLengthFunction.java
deleted file mode 100644
index 4545c895fec..00000000000
--- a/libjava/gnu/xml/xpath/StringLengthFunction.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/* StringLengthFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>string-length</code> function returns the number of characters
- * in the string.
- * If the argument is omitted, it defaults to the context node converted to
- * a string, in other words the string-value of the context node.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class StringLengthFunction
- extends Expr
-{
-
- final Expr arg;
-
- StringLengthFunction(List args)
- {
- this(args.isEmpty() ? null : (Expr) args.get(0));
- }
-
- StringLengthFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = (arg == null) ? null : arg.evaluate(context, pos, len);
- String s = _string(context, val);
- return new Double((double) s.length());
- }
-
- public Expr clone(Object context)
- {
- return new StringLengthFunction((arg == null) ? null :
- arg.clone(context));
- }
-
- public String toString()
- {
- return (arg == null) ? "string-length()" : "string-length(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/SubstringAfterFunction.java b/libjava/gnu/xml/xpath/SubstringAfterFunction.java
deleted file mode 100644
index dcdff31f165..00000000000
--- a/libjava/gnu/xml/xpath/SubstringAfterFunction.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/* SubstringAfterFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>substring-after</code> function returns the substring of the
- * first argument string that follows the first occurrence of the second
- * argument string in the first argument string, or the empty string if the
- * first argument string does not contain the second argument string. For
- * example, substring-after("1999/04/01","/") returns 04/01, and
- * substring-after("1999/04/01","19") returns 99/04/01.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class SubstringAfterFunction
- extends Expr
-{
-
- final Expr arg1;
- final Expr arg2;
-
- SubstringAfterFunction(List args)
- {
- this((Expr) args.get(0), (Expr) args.get(1));
- }
-
- SubstringAfterFunction(Expr arg1, Expr arg2)
- {
- this.arg1 = arg1;
- this.arg2 = arg2;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val1 = arg1.evaluate(context, pos, len);
- Object val2 = arg2.evaluate(context, pos, len);
- String s1 = _string(context, val1);
- String s2 = _string(context, val2);
- int index = s1.indexOf(s2);
- return (index == -1) ? "" : s1.substring(index + s2.length());
- }
-
- public Expr clone(Object context)
- {
- return new SubstringAfterFunction(arg1.clone(context),
- arg2.clone(context));
- }
-
- public String toString()
- {
- return "substring-after(" + arg1 + "," + arg2 + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/SubstringBeforeFunction.java b/libjava/gnu/xml/xpath/SubstringBeforeFunction.java
deleted file mode 100644
index 4322bcd691b..00000000000
--- a/libjava/gnu/xml/xpath/SubstringBeforeFunction.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/* SubstringBeforeFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>substring-before</code> function returns the substring of the
- * first argument string that precedes the first occurrence of the second
- * argument string in the first argument string, or the empty string if the
- * first argument string does not contain the second argument string. For
- * example, substring-before("1999/04/01","/") returns 1999.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class SubstringBeforeFunction
- extends Expr
-{
-
- final Expr arg1;
- final Expr arg2;
-
- SubstringBeforeFunction(List args)
- {
- this((Expr) args.get(0), (Expr) args.get(1));
- }
-
- SubstringBeforeFunction(Expr arg1, Expr arg2)
- {
- this.arg1 = arg1;
- this.arg2 = arg2;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val1 = arg1.evaluate(context, pos, len);
- Object val2 = arg2.evaluate(context, pos, len);
- String s1 = _string(context, val1);
- String s2 = _string(context, val2);
- int index = s1.indexOf(s2);
- return (index == -1) ? "" : s1.substring(0, index);
- }
-
- public Expr clone(Object context)
- {
- return new SubstringBeforeFunction(arg1.clone(context),
- arg2.clone(context));
- }
-
- public String toString()
- {
- return "substring-before(" + arg1 + "," + arg2 + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/SubstringFunction.java b/libjava/gnu/xml/xpath/SubstringFunction.java
deleted file mode 100644
index a554045cff0..00000000000
--- a/libjava/gnu/xml/xpath/SubstringFunction.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/* SubstringFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The substring function returns the substring of the first argument
- * starting at the position specified in the second argument with length
- * specified in the third argument. For example, substring("12345",2,3)
- * returns "234". If the third argument is not specified, it returns the
- * substring starting at the position specified in the second argument and
- * continuing to the end of the string. For example, substring("12345",2)
- * returns "2345".
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class SubstringFunction
- extends Expr
-{
-
- final Expr arg1;
- final Expr arg2;
- final Expr arg3;
-
- SubstringFunction(List args)
- {
- this((Expr) args.get(0), (Expr) args.get(1),
- (args.size() > 2) ? (Expr) args.get(2) : null);
- }
-
- SubstringFunction(Expr arg1, Expr arg2, Expr arg3)
- {
- this.arg1 = arg1;
- this.arg2 = arg2;
- this.arg3 = arg3;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val1 = arg1.evaluate(context, pos, len);
- Object val2 = arg2.evaluate(context, pos, len);
- String s = _string(context, val1);
- int p = (val2 instanceof Double) ?
- ((Double) val2).intValue() :
- (int) Math.round(_number(context, val2));
- p--;
- if (p < 0)
- {
- p = 0;
- }
-
- int l = s.length() - p;
- if (l <= 0)
- {
- return "";
- }
-
- if (arg3 != null)
- {
- Object val3 = arg3.evaluate(context, pos, len);
- int v3 = (val3 instanceof Double) ?
- ((Double) val3).intValue() :
- (int) Math.round(_number(context, val3));
- if (v3 < l)
- {
- l = v3;
- }
- }
-
- return s.substring(p, p + l);
- }
-
- public Expr clone(Object context)
- {
- return new SubstringFunction(arg1.clone(context), arg2.clone(context),
- (arg3 == null) ? null : arg3.clone(context));
- }
-
- public String toString()
- {
- return (arg3 == null) ? "substring(" + arg1 + "," + arg2 + ")" :
- "substring(" + arg1 + "," + arg2 + "," + arg3 + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/SumFunction.java b/libjava/gnu/xml/xpath/SumFunction.java
deleted file mode 100644
index 61452f80947..00000000000
--- a/libjava/gnu/xml/xpath/SumFunction.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/* SumFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>sum</code> function returns the sum, for each node in the
- * argument node-set, of the result of converting the string-values of the
- * node to a number.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class SumFunction
- extends Expr
-{
-
- final Expr arg;
-
- SumFunction(List args)
- {
- this((Expr) args.get(0));
- }
-
- SumFunction(Expr arg)
- {
- this.arg = arg;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val = arg.evaluate(context, pos, len);
- double sum = 0.0d;
- if (val instanceof Collection)
- {
- for (Iterator i = ((Collection) val).iterator(); i.hasNext(); )
- {
- Node node = (Node) i.next();
- String s = stringValue(node);
- sum += _number(context, s);
- }
- }
- return new Double(sum);
- }
-
- public Expr clone(Object context)
- {
- return new SumFunction(arg.clone(context));
- }
-
- public String toString()
- {
- return "sum(" + arg + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/Test.java b/libjava/gnu/xml/xpath/Test.java
deleted file mode 100644
index 1ea4bc473a4..00000000000
--- a/libjava/gnu/xml/xpath/Test.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Test.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import org.w3c.dom.Node;
-
-/**
- * A test that can be performed on a node to determine whether to include it
- * in a selection.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public abstract class Test
-{
-
- public abstract boolean matches(Node node, int pos, int len);
-
- public abstract Test clone(Object context);
-
-}
diff --git a/libjava/gnu/xml/xpath/TranslateFunction.java b/libjava/gnu/xml/xpath/TranslateFunction.java
deleted file mode 100644
index b62180734ce..00000000000
--- a/libjava/gnu/xml/xpath/TranslateFunction.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/* TranslateFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.List;
-import org.w3c.dom.Node;
-
-/**
- * The <code>translate</code> function returns the first argument string
- * with occurrences of characters in the second argument string replaced by
- * the character at the corresponding position in the third argument string.
- * For example, translate("bar","abc","ABC") returns the string BAr. If
- * there is a character in the second argument string with no character at a
- * corresponding position in the third argument string (because the second
- * argument string is longer than the third argument string), then
- * occurrences of that character in the first argument string are removed.
- * For example, translate("--aaa--","abc-","ABC") returns "AAA". If a
- * character occurs more than once in the second argument string, then the
- * first occurrence determines the replacement character. If the third
- * argument string is longer than the second argument string, then excess
- * characters are ignored.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class TranslateFunction
- extends Expr
-{
-
- final Expr arg1;
- final Expr arg2;
- final Expr arg3;
-
- TranslateFunction(List args)
- {
- this((Expr) args.get(0), (Expr) args.get(1), (Expr) args.get(2));
- }
-
- TranslateFunction(Expr arg1, Expr arg2, Expr arg3)
- {
- this.arg1 = arg1;
- this.arg2 = arg2;
- this.arg3 = arg3;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object val1 = arg1.evaluate(context, pos, len);
- Object val2 = arg2.evaluate(context, pos, len);
- Object val3 = arg3.evaluate(context, pos, len);
- String string = _string(context, val1);
- String search = _string(context, val2);
- String replace = _string(context, val3);
- StringBuffer buf = new StringBuffer();
- int l1 = string.length();
- int l2 = search.length();
- int l3 = replace.length();
- for (int i = 0; i < l1; i++)
- {
- char c = string.charAt(i);
- boolean replaced = false;
- for (int j = 0; j < l2; j++)
- {
- if (c == search.charAt(j))
- {
- if (j < l3)
- {
- buf.append(replace.charAt(j));
- }
- replaced = true;
- }
- }
- if (!replaced)
- {
- buf.append(c);
- }
- }
- return new String(buf);
- }
-
- public Expr clone(Object context)
- {
- return new TranslateFunction(arg1.clone(context), arg2.clone(context),
- arg3.clone(context));
- }
-
- public String toString()
- {
- return "translate(" + arg1 + "," + arg2 + "," + arg3 + ")";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/TrueFunction.java b/libjava/gnu/xml/xpath/TrueFunction.java
deleted file mode 100644
index 3dd68bd5aa4..00000000000
--- a/libjava/gnu/xml/xpath/TrueFunction.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/* TrueFunction.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import org.w3c.dom.Node;
-
-/**
- * The <code>true</code> function returns true.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-final class TrueFunction
- extends Expr
-{
-
- public Object evaluate(Node context, int pos, int len)
- {
- return Boolean.TRUE;
- }
-
- public Expr clone(Object context)
- {
- return new TrueFunction();
- }
-
- public String toString()
- {
- return "true()";
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/UnionExpr.java b/libjava/gnu/xml/xpath/UnionExpr.java
deleted file mode 100644
index 58c28a4d176..00000000000
--- a/libjava/gnu/xml/xpath/UnionExpr.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/* UnionExpr.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import org.w3c.dom.Node;
-
-/**
- * The union of two node-sets.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public final class UnionExpr
- extends Pattern
-{
-
- final Expr lhs;
- final Expr rhs;
-
- public UnionExpr(Expr lhs, Expr rhs)
- {
- this.lhs = lhs;
- this.rhs = rhs;
- }
-
- public boolean matches(Node context)
- {
- if (lhs instanceof Pattern && rhs instanceof Pattern)
- {
- return ((Pattern) lhs).matches(context) ||
- ((Pattern) rhs).matches(context);
- }
- return false;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- Object left = lhs.evaluate(context, pos, len);
- Object right = rhs.evaluate(context, pos, len);
- if (left instanceof Collection && right instanceof Collection)
- {
- Set set = new HashSet();
- set.addAll ((Collection) left);
- set.addAll ((Collection) right);
- List list = new ArrayList(set);
- Collections.sort(list, documentOrderComparator);
- return list;
- }
- return Collections.EMPTY_SET;
- }
-
- public Expr clone(Object context)
- {
- return new UnionExpr(lhs.clone(context), rhs.clone(context));
- }
-
- public String toString()
- {
- return lhs + " | " + rhs;
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/VariableReference.java b/libjava/gnu/xml/xpath/VariableReference.java
deleted file mode 100644
index e53d1faa858..00000000000
--- a/libjava/gnu/xml/xpath/VariableReference.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/* VariableReference.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import javax.xml.namespace.QName;
-import javax.xml.xpath.XPathVariableResolver;
-import org.w3c.dom.Node;
-import gnu.xml.transform.Bindings;
-
-public class VariableReference
- extends Expr
-{
-
- final XPathVariableResolver resolver;
- final String name;
-
- public VariableReference(XPathVariableResolver resolver, String name)
- {
- this.resolver = resolver;
- this.name = name;
- }
-
- public Object evaluate(Node context, int pos, int len)
- {
- if (resolver != null)
- {
- if (resolver instanceof Bindings)
- {
- // Needs context to operate properly
- return ((Bindings) resolver).get(name, context, pos, len);
- }
- QName qname = QName.valueOf(name);
- return resolver.resolveVariable(qname);
- }
- throw new IllegalStateException("no variable resolver");
- }
-
- public Expr clone(Object context)
- {
- XPathVariableResolver r = resolver;
- if (context instanceof XPathVariableResolver)
- {
- r = (XPathVariableResolver) context;
- }
- return new VariableReference(r, name);
- }
-
- public String toString()
- {
- return "$" + name;
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/XPathFactoryImpl.java b/libjava/gnu/xml/xpath/XPathFactoryImpl.java
deleted file mode 100644
index 45dc57ed14a..00000000000
--- a/libjava/gnu/xml/xpath/XPathFactoryImpl.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/* XPathFactoryImpl.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathFactory;
-import javax.xml.xpath.XPathFactoryConfigurationException;
-import javax.xml.xpath.XPathFunctionResolver;
-import javax.xml.xpath.XPathVariableResolver;
-
-/**
- * GNU XPath factory implementation.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class XPathFactoryImpl
- extends XPathFactory
-{
-
- XPathVariableResolver variableResolver;
- XPathFunctionResolver functionResolver;
-
- public boolean isObjectModelSupported(String objectModel)
- {
- return XPathFactory.DEFAULT_OBJECT_MODEL_URI.equals(objectModel);
- }
-
- public void setFeature(String name, boolean value)
- throws XPathFactoryConfigurationException
- {
- throw new XPathFactoryConfigurationException(name);
- }
-
- public boolean getFeature(String name)
- throws XPathFactoryConfigurationException
- {
- throw new XPathFactoryConfigurationException(name);
- }
-
- public void setXPathVariableResolver(XPathVariableResolver resolver)
- {
- variableResolver = resolver;
- }
-
- public void setXPathFunctionResolver(XPathFunctionResolver resolver)
- {
- functionResolver = resolver;
- }
-
- public XPath newXPath()
- {
- return new XPathImpl(null, variableResolver, functionResolver);
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/XPathImpl.java b/libjava/gnu/xml/xpath/XPathImpl.java
deleted file mode 100644
index 3511834ca90..00000000000
--- a/libjava/gnu/xml/xpath/XPathImpl.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/* XPathImpl.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.io.IOException;
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.namespace.QName;
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathExpression;
-import javax.xml.xpath.XPathExpressionException;
-import javax.xml.xpath.XPathFunctionResolver;
-import javax.xml.xpath.XPathVariableResolver;
-import org.xml.sax.InputSource;
-
-/**
- * JAXP XPath implementation.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class XPathImpl
- implements XPath
-{
-
- XPathParser parser;
- NamespaceContext namespaceContext;
- XPathVariableResolver variableResolver;
- XPathFunctionResolver functionResolver;
-
- XPathImpl(NamespaceContext namespaceContext,
- XPathVariableResolver variableResolver,
- XPathFunctionResolver functionResolver)
- {
- parser = new XPathParser();
- this.namespaceContext = namespaceContext;
- this.variableResolver = variableResolver;
- this.functionResolver = functionResolver;
- reset();
- }
-
- public void reset()
- {
- parser.namespaceContext = namespaceContext;
- parser.variableResolver = variableResolver;
- parser.functionResolver = functionResolver;
- }
-
- public void setXPathVariableResolver(XPathVariableResolver resolver)
- {
- parser.variableResolver = resolver;
- }
-
- public XPathVariableResolver getXPathVariableResolver()
- {
- return parser.variableResolver;
- }
-
- public void setXPathFunctionResolver(XPathFunctionResolver resolver)
- {
- parser.functionResolver = resolver;
- }
-
- public XPathFunctionResolver getXPathFunctionResolver()
- {
- return parser.functionResolver;
- }
-
- public void setNamespaceContext(NamespaceContext nsContext)
- {
- parser.namespaceContext = nsContext;
- }
-
- public NamespaceContext getNamespaceContext()
- {
- return parser.namespaceContext;
- }
-
- public XPathExpression compile(String expression)
- throws XPathExpressionException
- {
- XPathTokenizer tokenizer = new XPathTokenizer(expression);
- try
- {
- return (Expr) parser.yyparse(tokenizer);
- }
- catch (IOException e)
- {
- throw new XPathExpressionException(e);
- }
- catch (XPathParser.yyException e)
- {
- throw new XPathExpressionException(expression);
- }
- }
-
- public Object evaluate(String expression,
- Object item,
- QName returnType)
- throws XPathExpressionException
- {
- XPathExpression expr = compile(expression);
- return expr.evaluate(item, returnType);
- }
-
- public String evaluate(String expression,
- Object item)
- throws XPathExpressionException
- {
- XPathExpression expr = compile(expression);
- return expr.evaluate(item);
- }
-
- public Object evaluate(String expression,
- InputSource source,
- QName returnType)
- throws XPathExpressionException
- {
- XPathExpression expr = compile(expression);
- return expr.evaluate(source, returnType);
- }
-
- public String evaluate(String expression,
- InputSource source)
- throws XPathExpressionException
- {
- XPathExpression expr = compile(expression);
- return expr.evaluate(source);
- }
-
-}
diff --git a/libjava/gnu/xml/xpath/XPathParser.java b/libjava/gnu/xml/xpath/XPathParser.java
deleted file mode 100644
index 01c744790dc..00000000000
--- a/libjava/gnu/xml/xpath/XPathParser.java
+++ /dev/null
@@ -1,1461 +0,0 @@
-// created by jay 0.8 (c) 1998 Axel.Schreiner@informatik.uni-osnabrueck.de
-
- // line 2 "XPathParser.y"
-/* XPathParser.java -- An XPath 1.0 parser.
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.namespace.QName;
-import javax.xml.xpath.XPathFunctionResolver;
-import javax.xml.xpath.XPathVariableResolver;
-import org.w3c.dom.Node;
-
-/**
- * An XPath 1.0 parser.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class XPathParser
-{
-
- NamespaceContext namespaceContext;
- XPathVariableResolver variableResolver;
- XPathFunctionResolver functionResolver;
-
- QName getQName(String name)
- {
- QName qName = QName.valueOf(name);
- if (namespaceContext != null)
- {
- String prefix = qName.getPrefix();
- String uri = qName.getNamespaceURI();
- if (prefix != null && (uri == null || uri.length() == 0))
- {
- uri = namespaceContext.getNamespaceURI(prefix);
- String localName = qName.getLocalPart();
- qName = new QName(uri, localName, prefix);
- }
- }
- return qName;
- }
-
- Expr lookupFunction(String name, List args)
- {
- int arity = args.size();
- if ("position".equals(name) && arity == 0)
- {
- return new PositionFunction();
- }
- else if ("last".equals(name) && arity == 0)
- {
- return new LastFunction();
- }
- else if ("string".equals(name) && (arity == 1 || arity == 0))
- {
- return new StringFunction(args);
- }
- else if ("number".equals(name) && (arity == 1 || arity == 0))
- {
- return new NumberFunction(args);
- }
- else if ("boolean".equals(name) && arity == 1)
- {
- return new BooleanFunction(args);
- }
- else if ("count".equals(name) && arity == 1)
- {
- return new CountFunction(args);
- }
- else if ("not".equals(name) && arity == 1)
- {
- return new NotFunction(args);
- }
- else if ("id".equals(name) && arity == 1)
- {
- return new IdFunction(args);
- }
- else if ("concat".equals(name) && arity > 1)
- {
- return new ConcatFunction(args);
- }
- else if ("true".equals(name) && arity == 0)
- {
- return new TrueFunction();
- }
- else if ("false".equals(name) && arity == 0)
- {
- return new FalseFunction();
- }
- else if ("name".equals(name) && (arity == 1 || arity == 0))
- {
- return new NameFunction(args);
- }
- else if ("local-name".equals(name) && (arity == 1 || arity == 0))
- {
- return new LocalNameFunction(args);
- }
- else if ("namespace-uri".equals(name) && (arity == 1 || arity == 0))
- {
- return new NamespaceUriFunction(args);
- }
- else if ("starts-with".equals(name) && arity == 2)
- {
- return new StartsWithFunction(args);
- }
- else if ("contains".equals(name) && arity == 2)
- {
- return new ContainsFunction(args);
- }
- else if ("string-length".equals(name) && (arity == 1 || arity == 0))
- {
- return new StringLengthFunction(args);
- }
- else if ("translate".equals(name) && arity == 3)
- {
- return new TranslateFunction(args);
- }
- else if ("normalize-space".equals(name) && (arity == 1 || arity == 0))
- {
- return new NormalizeSpaceFunction(args);
- }
- else if ("substring".equals(name) && (arity == 2 || arity == 3))
- {
- return new SubstringFunction(args);
- }
- else if ("substring-before".equals(name) && arity == 2)
- {
- return new SubstringBeforeFunction(args);
- }
- else if ("substring-after".equals(name) && arity == 2)
- {
- return new SubstringAfterFunction(args);
- }
- else if ("lang".equals(name) && arity == 1)
- {
- return new LangFunction(args);
- }
- else if ("sum".equals(name) && arity == 1)
- {
- return new SumFunction(args);
- }
- else if ("floor".equals(name) && arity == 1)
- {
- return new FloorFunction(args);
- }
- else if ("ceiling".equals(name) && arity == 1)
- {
- return new CeilingFunction(args);
- }
- else if ("round".equals(name) && arity == 1)
- {
- return new RoundFunction(args);
- }
- else if (functionResolver != null)
- {
- QName qName = QName.valueOf(name);
- Object function = functionResolver.resolveFunction(qName, arity);
- if (function != null &&
- function instanceof Function &&
- function instanceof Expr)
- {
- Function f = (Function) function;
- f.setArguments(args);
- return (Expr) function;
- }
- }
- return new FunctionCall(functionResolver, name, args);
- }
-
- // line 210 "-"
-// %token constants
-
- public static final int LITERAL = 257;
- public static final int DIGITS = 258;
- public static final int NAME = 259;
- public static final int LP = 260;
- public static final int RP = 261;
- public static final int LB = 262;
- public static final int RB = 263;
- public static final int COMMA = 264;
- public static final int PIPE = 265;
- public static final int SLASH = 266;
- public static final int DOUBLE_SLASH = 267;
- public static final int EQ = 268;
- public static final int NE = 269;
- public static final int GT = 270;
- public static final int LT = 271;
- public static final int GTE = 272;
- public static final int LTE = 273;
- public static final int PLUS = 274;
- public static final int MINUS = 275;
- public static final int AT = 276;
- public static final int STAR = 277;
- public static final int DOLLAR = 278;
- public static final int COLON = 279;
- public static final int DOUBLE_COLON = 280;
- public static final int DOT = 281;
- public static final int DOUBLE_DOT = 282;
- public static final int ANCESTOR = 283;
- public static final int ANCESTOR_OR_SELF = 284;
- public static final int ATTRIBUTE = 285;
- public static final int CHILD = 286;
- public static final int DESCENDANT = 287;
- public static final int DESCENDANT_OR_SELF = 288;
- public static final int FOLLOWING = 289;
- public static final int FOLLOWING_SIBLING = 290;
- public static final int NAMESPACE = 291;
- public static final int PARENT = 292;
- public static final int PRECEDING = 293;
- public static final int PRECEDING_SIBLING = 294;
- public static final int SELF = 295;
- public static final int DIV = 296;
- public static final int MOD = 297;
- public static final int OR = 298;
- public static final int AND = 299;
- public static final int COMMENT = 300;
- public static final int PROCESSING_INSTRUCTION = 301;
- public static final int TEXT = 302;
- public static final int NODE = 303;
- public static final int UNARY = 304;
- public static final int yyErrorCode = 256;
-
- /** thrown for irrecoverable syntax errors and stack overflow.
- */
- public static class yyException extends java.lang.Exception {
- public yyException (String message) {
- super(message);
- }
- }
-
- /** must be implemented by a scanner object to supply input to the parser.
- */
- public interface yyInput {
- /** move on to next token.
- @return false if positioned beyond tokens.
- @throws IOException on input error.
- */
- boolean advance () throws java.io.IOException;
- /** classifies current token.
- Should not be called if advance() returned false.
- @return current %token or single character.
- */
- int token ();
- /** associated with current token.
- Should not be called if advance() returned false.
- @return value for token().
- */
- Object value ();
- }
-
- /** simplified error message.
- @see <a href="#yyerror(java.lang.String, java.lang.String[])">yyerror</a>
- */
- public void yyerror (String message) {
- yyerror(message, null);
- }
-
- /** (syntax) error message.
- Can be overwritten to control message format.
- @param message text to be displayed.
- @param expected vector of acceptable tokens, if available.
- */
- public void yyerror (String message, String[] expected) {
- if (expected != null && expected.length > 0) {
- System.err.print(message+", expecting");
- for (int n = 0; n < expected.length; ++ n)
- System.err.print(" "+expected[n]);
- System.err.println();
- } else
- System.err.println(message);
- }
-
- /** debugging support, requires the package jay.yydebug.
- Set to null to suppress debugging messages.
- */
-//t protected jay.yydebug.yyDebug yydebug;
-
- protected static final int yyFinal = 30;
-
- /** index-checked interface to yyName[].
- @param token single character or %token value.
- @return token name or [illegal] or [unknown].
- */
-//t public static final String yyname (int token) {
-//t if (token < 0 || token > YyNameClass.yyName.length) return "[illegal]";
-//t String name;
-//t if ((name = YyNameClass.yyName[token]) != null) return name;
-//t return "[unknown]";
-//t }
-
- /** computes list of expected tokens on error by tracing the tables.
- @param state for which to compute the list.
- @return list of token names.
- */
- protected String[] yyExpecting (int state) {
- int token, n, len = 0;
- boolean[] ok = new boolean[YyNameClass.yyName.length];
-
- if ((n = YySindexClass.yySindex[state]) != 0)
- for (token = n < 0 ? -n : 0;
- token < YyNameClass.yyName.length && n+token < YyTableClass.yyTable.length; ++ token)
- if (YyCheckClass.yyCheck[n+token] == token && !ok[token] && YyNameClass.yyName[token] != null) {
- ++ len;
- ok[token] = true;
- }
- if ((n = YyRindexClass.yyRindex[state]) != 0)
- for (token = n < 0 ? -n : 0;
- token < YyNameClass.yyName.length && n+token < YyTableClass.yyTable.length; ++ token)
- if (YyCheckClass.yyCheck[n+token] == token && !ok[token] && YyNameClass.yyName[token] != null) {
- ++ len;
- ok[token] = true;
- }
-
- String result[] = new String[len];
- for (n = token = 0; n < len; ++ token)
- if (ok[token]) result[n++] = YyNameClass.yyName[token];
- return result;
- }
-
- /** the generated parser, with debugging messages.
- Maintains a state and a value stack, currently with fixed maximum size.
- @param yyLex scanner.
- @param yydebug debug message writer implementing yyDebug, or null.
- @return result of the last reduction, if any.
- @throws yyException on irrecoverable parse error.
- */
- public Object yyparse (yyInput yyLex, Object yydebug)
- throws java.io.IOException, yyException {
-//t this.yydebug = (jay.yydebug.yyDebug)yydebug;
- return yyparse(yyLex);
- }
-
- /** initial size and increment of the state/value stack [default 256].
- This is not final so that it can be overwritten outside of invocations
- of yyparse().
- */
- protected int yyMax;
-
- /** executed at the beginning of a reduce action.
- Used as $$ = yyDefault($1), prior to the user-specified action, if any.
- Can be overwritten to provide deep copy, etc.
- @param first value for $1, or null.
- @return first.
- */
- protected Object yyDefault (Object first) {
- return first;
- }
-
- /** the generated parser.
- Maintains a state and a value stack, currently with fixed maximum size.
- @param yyLex scanner.
- @return result of the last reduction, if any.
- @throws yyException on irrecoverable parse error.
- */
- public Object yyparse (yyInput yyLex)
- throws java.io.IOException, yyException {
- if (yyMax <= 0) yyMax = 256; // initial size
- int yyState = 0, yyStates[] = new int[yyMax]; // state stack
- Object yyVal = null, yyVals[] = new Object[yyMax]; // value stack
- int yyToken = -1; // current input
- int yyErrorFlag = 0; // #tks to shift
-
- yyLoop: for (int yyTop = 0;; ++ yyTop) {
- if (yyTop >= yyStates.length) { // dynamically increase
- int[] i = new int[yyStates.length+yyMax];
- System.arraycopy(yyStates, 0, i, 0, yyStates.length);
- yyStates = i;
- Object[] o = new Object[yyVals.length+yyMax];
- System.arraycopy(yyVals, 0, o, 0, yyVals.length);
- yyVals = o;
- }
- yyStates[yyTop] = yyState;
- yyVals[yyTop] = yyVal;
-//t if (yydebug != null) yydebug.push(yyState, yyVal);
-
- yyDiscarded: for (;;) { // discarding a token does not change stack
- int yyN;
- if ((yyN = YyDefRedClass.yyDefRed[yyState]) == 0) { // else [default] reduce (yyN)
- if (yyToken < 0) {
- yyToken = yyLex.advance() ? yyLex.token() : 0;
-//t if (yydebug != null)
-//t yydebug.lex(yyState, yyToken, yyname(yyToken), yyLex.value());
- }
- if ((yyN = YySindexClass.yySindex[yyState]) != 0 && (yyN += yyToken) >= 0
- && yyN < YyTableClass.yyTable.length && YyCheckClass.yyCheck[yyN] == yyToken) {
-//t if (yydebug != null)
-//t yydebug.shift(yyState, YyTableClass.yyTable[yyN], yyErrorFlag-1);
- yyState = YyTableClass.yyTable[yyN]; // shift to yyN
- yyVal = yyLex.value();
- yyToken = -1;
- if (yyErrorFlag > 0) -- yyErrorFlag;
- continue yyLoop;
- }
- if ((yyN = YyRindexClass.yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0
- && yyN < YyTableClass.yyTable.length && YyCheckClass.yyCheck[yyN] == yyToken)
- yyN = YyTableClass.yyTable[yyN]; // reduce (yyN)
- else
- switch (yyErrorFlag) {
-
- case 0:
- yyerror("syntax error", yyExpecting(yyState));
-//t if (yydebug != null) yydebug.error("syntax error");
-
- case 1: case 2:
- yyErrorFlag = 3;
- do {
- if ((yyN = YySindexClass.yySindex[yyStates[yyTop]]) != 0
- && (yyN += yyErrorCode) >= 0 && yyN < YyTableClass.yyTable.length
- && YyCheckClass.yyCheck[yyN] == yyErrorCode) {
-//t if (yydebug != null)
-//t yydebug.shift(yyStates[yyTop], YyTableClass.yyTable[yyN], 3);
- yyState = YyTableClass.yyTable[yyN];
- yyVal = yyLex.value();
- continue yyLoop;
- }
-//t if (yydebug != null) yydebug.pop(yyStates[yyTop]);
- } while (-- yyTop >= 0);
-//t if (yydebug != null) yydebug.reject();
- throw new yyException("irrecoverable syntax error");
-
- case 3:
- if (yyToken == 0) {
-//t if (yydebug != null) yydebug.reject();
- throw new yyException("irrecoverable syntax error at end-of-file");
- }
-//t if (yydebug != null)
-//t yydebug.discard(yyState, yyToken, yyname(yyToken),
-//t yyLex.value());
- yyToken = -1;
- continue yyDiscarded; // leave stack alone
- }
- }
- int yyV = yyTop + 1-YyLenClass.yyLen[yyN];
-//t if (yydebug != null)
-//t yydebug.reduce(yyState, yyStates[yyV-1], yyN, YyRuleClass.yyRule[yyN], YyLenClass.yyLen[yyN]);
- yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]);
- switch (yyN) {
-case 4:
- // line 276 "XPathParser.y"
- {
- yyVal = new Root();
- }
- break;
-case 5:
- // line 280 "XPathParser.y"
- {
- Steps steps;
- if (yyVals[0+yyTop] instanceof Steps)
- {
- steps = (Steps) yyVals[0+yyTop];
- }
- else
- {
- steps = new Steps();
- steps.path.addFirst(yyVals[0+yyTop]);
- }
- steps.path.addFirst(new Root());
- yyVal = steps;
- /*$$ = new Step(new Root(), (Path) $2);*/
- }
- break;
-case 6:
- // line 296 "XPathParser.y"
- {
- Test nt = new NodeTypeTest((short) 0);
- Selector s = new Selector(Selector.DESCENDANT_OR_SELF,
- Collections.singletonList (nt));
- Steps steps;
- if (yyVals[0+yyTop] instanceof Steps)
- {
- steps = (Steps) yyVals[0+yyTop];
- }
- else
- {
- steps = new Steps();
- steps.path.addFirst(yyVals[0+yyTop]);
- }
- steps.path.addFirst(s);
- steps.path.addFirst(new Root());
- yyVal = steps;
- /*Step step = new Step(s, (Path) $2);*/
- /*$$ = new Step(new Root(), step);*/
- }
- break;
-case 8:
- // line 321 "XPathParser.y"
- {
- Steps steps;
- if (yyVals[-2+yyTop] instanceof Steps)
- {
- steps = (Steps) yyVals[-2+yyTop];
- }
- else
- {
- steps = new Steps();
- steps.path.addFirst(yyVals[-2+yyTop]);
- }
- steps.path.addLast(yyVals[0+yyTop]);
- yyVal = steps;
- /*$$ = new Step((Expr) $1, (Path) $3);*/
- }
- break;
-case 9:
- // line 337 "XPathParser.y"
- {
- Test nt = new NodeTypeTest((short) 0);
- Selector s = new Selector(Selector.DESCENDANT_OR_SELF,
- Collections.singletonList (nt));
- Steps steps;
- if (yyVals[-2+yyTop] instanceof Steps)
- {
- steps = (Steps) yyVals[-2+yyTop];
- }
- else
- {
- steps = new Steps();
- steps.path.addFirst(yyVals[-2+yyTop]);
- }
- steps.path.addLast(s);
- steps.path.addLast(yyVals[0+yyTop]);
- yyVal = steps;
- /*Step step = new Step(s, (Path) $3);*/
- /*$$ = new Step((Expr) $1, step);*/
- }
- break;
-case 10:
- // line 361 "XPathParser.y"
- {
- yyVal = new Selector (Selector.CHILD, (List) yyVals[0+yyTop]);
- }
- break;
-case 11:
- // line 365 "XPathParser.y"
- {
- yyVal = new Selector (Selector.ATTRIBUTE, (List) yyVals[0+yyTop]);
- }
- break;
-case 12:
- // line 369 "XPathParser.y"
- {
- yyVal = new Selector (((Integer) yyVals[-2+yyTop]).intValue (), (List) yyVals[0+yyTop]);
- }
- break;
-case 13:
- // line 373 "XPathParser.y"
- {
- yyVal = new Selector (Selector.SELF, Collections.EMPTY_LIST);
- }
- break;
-case 14:
- // line 377 "XPathParser.y"
- {
- yyVal = new Selector (Selector.PARENT, Collections.EMPTY_LIST);
- }
- break;
-case 15:
- // line 384 "XPathParser.y"
- {
- List list = new ArrayList();
- list.add(yyVals[0+yyTop]);
- yyVal = list;
- }
- break;
-case 16:
- // line 390 "XPathParser.y"
- {
- List list = (List)yyVals[-1+yyTop];
- list.add(yyVals[0+yyTop]);
- yyVal = list;
- }
- break;
-case 17:
- // line 414 "XPathParser.y"
- {
- yyVal = new Integer(Selector.ANCESTOR);
- }
- break;
-case 18:
- // line 418 "XPathParser.y"
- {
- yyVal = new Integer(Selector.ANCESTOR_OR_SELF);
- }
- break;
-case 19:
- // line 422 "XPathParser.y"
- {
- yyVal = new Integer(Selector.ATTRIBUTE);
- }
- break;
-case 20:
- // line 426 "XPathParser.y"
- {
- yyVal = new Integer(Selector.CHILD);
- }
- break;
-case 21:
- // line 430 "XPathParser.y"
- {
- yyVal = new Integer(Selector.DESCENDANT);
- }
- break;
-case 22:
- // line 434 "XPathParser.y"
- {
- yyVal = new Integer(Selector.DESCENDANT_OR_SELF);
- }
- break;
-case 23:
- // line 438 "XPathParser.y"
- {
- yyVal = new Integer(Selector.FOLLOWING);
- }
- break;
-case 24:
- // line 442 "XPathParser.y"
- {
- yyVal = new Integer(Selector.FOLLOWING_SIBLING);
- }
- break;
-case 25:
- // line 446 "XPathParser.y"
- {
- yyVal = new Integer(Selector.NAMESPACE);
- }
- break;
-case 26:
- // line 450 "XPathParser.y"
- {
- yyVal = new Integer(Selector.PARENT);
- }
- break;
-case 27:
- // line 454 "XPathParser.y"
- {
- yyVal = new Integer(Selector.PRECEDING);
- }
- break;
-case 28:
- // line 458 "XPathParser.y"
- {
- yyVal = new Integer(Selector.PRECEDING_SIBLING);
- }
- break;
-case 29:
- // line 462 "XPathParser.y"
- {
- yyVal = new Integer(Selector.SELF);
- }
- break;
-case 31:
- // line 471 "XPathParser.y"
- {
- yyVal = new NodeTypeTest(Node.PROCESSING_INSTRUCTION_NODE, (String) yyVals[-1+yyTop]);
- }
- break;
-case 32:
- // line 476 "XPathParser.y"
- {
- yyVal = new NodeTypeTest(((Short) yyVals[-1+yyTop]).shortValue());
- }
- break;
-case 33:
- // line 483 "XPathParser.y"
- {
- yyVal = new Predicate((Expr) yyVals[-1+yyTop]);
- }
- break;
-case 35:
- // line 491 "XPathParser.y"
- {
- yyVal = new ParenthesizedExpr((Expr) yyVals[-1+yyTop]);
- }
- break;
-case 36:
- // line 495 "XPathParser.y"
- {
- yyVal = new Constant(yyVals[0+yyTop]);
- }
- break;
-case 37:
- // line 499 "XPathParser.y"
- {
- yyVal = new Constant(yyVals[0+yyTop]);
- }
- break;
-case 39:
- // line 507 "XPathParser.y"
- {
- yyVal = lookupFunction((String) yyVals[-2+yyTop], Collections.EMPTY_LIST);
- }
- break;
-case 40:
- // line 511 "XPathParser.y"
- {
- yyVal = lookupFunction((String) yyVals[-3+yyTop], (List) yyVals[-1+yyTop]);
- }
- break;
-case 41:
- // line 518 "XPathParser.y"
- {
- List list = new ArrayList();
- list.add(yyVals[0+yyTop]);
- yyVal = list;
- }
- break;
-case 42:
- // line 524 "XPathParser.y"
- {
- List list = (List) yyVals[0+yyTop];
- list.add(0, yyVals[-2+yyTop]);
- yyVal = list;
- }
- break;
-case 44:
- // line 534 "XPathParser.y"
- {
- yyVal = new UnionExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop]);
- }
- break;
-case 47:
- // line 543 "XPathParser.y"
- {
- Steps steps;
- if (yyVals[0+yyTop] instanceof Steps)
- {
- steps = (Steps) yyVals[0+yyTop];
- }
- else
- {
- steps = new Steps();
- steps.path.addFirst(yyVals[0+yyTop]);
- }
- steps.path.addFirst(yyVals[-2+yyTop]);
- yyVal = steps;
- /*$$ = new Step ((Expr) $1, (Path) $3);*/
- }
- break;
-case 48:
- // line 559 "XPathParser.y"
- {
- Test nt = new NodeTypeTest((short) 0);
- Selector s = new Selector(Selector.DESCENDANT_OR_SELF,
- Collections.singletonList(nt));
- Steps steps;
- if (yyVals[0+yyTop] instanceof Steps)
- {
- steps = (Steps) yyVals[0+yyTop];
- }
- else
- {
- steps = new Steps();
- steps.path.addFirst(yyVals[0+yyTop]);
- }
- steps.path.addFirst(s);
- steps.path.addFirst(yyVals[-2+yyTop]);
- yyVal = steps;
- /*Step step = new Step (s, (Path) $3);*/
- /*$$ = new Step ((Expr) $1, step);*/
- }
- break;
-case 50:
- // line 584 "XPathParser.y"
- {
- Predicate filter = (Predicate) yyVals[0+yyTop];
- Selector s = new Selector(Selector.SELF,
- Collections.singletonList(filter));
- Steps steps;
- if (yyVals[-1+yyTop] instanceof Steps)
- {
- steps = (Steps) yyVals[-1+yyTop];
- }
- else
- {
- steps = new Steps();
- steps.path.addFirst(yyVals[-1+yyTop]);
- }
- steps.path.addLast(s);
- yyVal = steps;
- /*$$ = new Step ((Expr) $1, s);*/
- }
- break;
-case 52:
- // line 607 "XPathParser.y"
- {
- yyVal = new OrExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop]);
- }
- break;
-case 54:
- // line 615 "XPathParser.y"
- {
- yyVal = new AndExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop]);
- }
- break;
-case 56:
- // line 623 "XPathParser.y"
- {
- yyVal = new EqualityExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], false);
- }
- break;
-case 57:
- // line 627 "XPathParser.y"
- {
- yyVal = new EqualityExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], true);
- }
- break;
-case 59:
- // line 635 "XPathParser.y"
- {
- yyVal = new RelationalExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], true, false);
- }
- break;
-case 60:
- // line 639 "XPathParser.y"
- {
- yyVal = new RelationalExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], false, false);
- }
- break;
-case 61:
- // line 643 "XPathParser.y"
- {
- yyVal = new RelationalExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], true, true);
- }
- break;
-case 62:
- // line 647 "XPathParser.y"
- {
- yyVal = new RelationalExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], false, true);
- }
- break;
-case 64:
- // line 655 "XPathParser.y"
- {
- yyVal = new ArithmeticExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], ArithmeticExpr.ADD);
- }
- break;
-case 65:
- // line 659 "XPathParser.y"
- {
- yyVal = new ArithmeticExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], ArithmeticExpr.SUBTRACT);
- }
- break;
-case 67:
- // line 667 "XPathParser.y"
- {
- yyVal = new ArithmeticExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], ArithmeticExpr.MULTIPLY);
- }
- break;
-case 68:
- // line 671 "XPathParser.y"
- {
- yyVal = new ArithmeticExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], ArithmeticExpr.DIVIDE);
- }
- break;
-case 69:
- // line 675 "XPathParser.y"
- {
- yyVal = new ArithmeticExpr((Expr) yyVals[-2+yyTop], (Expr) yyVals[0+yyTop], ArithmeticExpr.MODULO);
- }
- break;
-case 71:
- // line 683 "XPathParser.y"
- {
- yyVal = new NegativeExpr((Expr) yyVals[0+yyTop]);
- }
- break;
-case 72:
- // line 690 "XPathParser.y"
- {
- yyVal = new Double((String) yyVals[0+yyTop] + ".0");
- }
- break;
-case 73:
- // line 694 "XPathParser.y"
- {
- yyVal = new Double((String) yyVals[-1+yyTop] + ".0");
- }
- break;
-case 74:
- // line 698 "XPathParser.y"
- {
- yyVal = new Double((String) yyVals[-2+yyTop] + "." + (String) yyVals[0+yyTop]);
- }
- break;
-case 75:
- // line 702 "XPathParser.y"
- {
- yyVal = new Double("0." + (String) yyVals[0+yyTop]);
- }
- break;
-case 77:
- // line 731 "XPathParser.y"
- {
- yyVal = new VariableReference(variableResolver, (String) yyVals[0+yyTop]);
- }
- break;
-case 78:
- // line 738 "XPathParser.y"
- {
- yyVal = new NameTest(null, true, true);
- }
- break;
-case 79:
- // line 742 "XPathParser.y"
- {
- QName qName = getQName((String) yyVals[-2+yyTop]);
- yyVal = new NameTest(qName, true, false);
- }
- break;
-case 80:
- // line 747 "XPathParser.y"
- {
- QName qName = getQName((String) yyVals[0+yyTop]);
- yyVal = new NameTest(qName, false, false);
- }
- break;
-case 82:
- // line 756 "XPathParser.y"
- {
- yyVal = (String) yyVals[-2+yyTop] + ':' + (String) yyVals[0+yyTop];
- }
- break;
-case 83:
- // line 763 "XPathParser.y"
- {
- yyVal = new Short(Node.COMMENT_NODE);
- }
- break;
-case 84:
- // line 767 "XPathParser.y"
- {
- yyVal = new Short(Node.TEXT_NODE);
- }
- break;
-case 85:
- // line 771 "XPathParser.y"
- {
- yyVal = new Short(Node.PROCESSING_INSTRUCTION_NODE);
- }
- break;
-case 86:
- // line 775 "XPathParser.y"
- {
- yyVal = new Short((short) 0);
- }
- break;
- // line 986 "-"
- }
- yyTop -= YyLenClass.yyLen[yyN];
- yyState = yyStates[yyTop];
- int yyM = YyLhsClass.yyLhs[yyN];
- if (yyState == 0 && yyM == 0) {
-//t if (yydebug != null) yydebug.shift(0, yyFinal);
- yyState = yyFinal;
- if (yyToken < 0) {
- yyToken = yyLex.advance() ? yyLex.token() : 0;
-//t if (yydebug != null)
-//t yydebug.lex(yyState, yyToken,yyname(yyToken), yyLex.value());
- }
- if (yyToken == 0) {
-//t if (yydebug != null) yydebug.accept(yyVal);
- return yyVal;
- }
- continue yyLoop;
- }
- if ((yyN = YyGindexClass.yyGindex[yyM]) != 0 && (yyN += yyState) >= 0
- && yyN < YyTableClass.yyTable.length && YyCheckClass.yyCheck[yyN] == yyState)
- yyState = YyTableClass.yyTable[yyN];
- else
- yyState = YyDgotoClass.yyDgoto[yyM];
-//t if (yydebug != null) yydebug.shift(yyStates[yyTop], yyState);
- continue yyLoop;
- }
- }
- }
-
- protected static final class YyLhsClass {
-
- public static final short yyLhs [] = { -1,
- 0, 2, 2, 4, 4, 4, 3, 3, 3, 5,
- 5, 5, 5, 5, 6, 6, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 8,
- 8, 8, 9, 12, 12, 12, 12, 12, 15, 15,
- 17, 17, 18, 18, 19, 19, 19, 19, 20, 20,
- 1, 1, 21, 21, 22, 22, 22, 23, 23, 23,
- 23, 23, 24, 24, 24, 25, 25, 25, 25, 26,
- 26, 14, 14, 14, 14, 16, 13, 10, 10, 10,
- 27, 27, 11, 11, 11, 11,
- };
- } /* End of class YyLhsClass */
-
- protected static final class YyLenClass {
-
- public static final short yyLen [] = { 2,
- 1, 1, 1, 1, 2, 2, 1, 3, 3, 1,
- 2, 3, 1, 1, 1, 2, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 3, 2, 3, 1, 3, 1, 1, 1, 3, 4,
- 1, 3, 1, 3, 1, 1, 3, 3, 1, 2,
- 1, 3, 1, 3, 1, 3, 3, 1, 3, 3,
- 3, 3, 1, 3, 3, 1, 3, 3, 3, 1,
- 2, 1, 2, 3, 2, 1, 2, 1, 3, 1,
- 1, 3, 1, 1, 1, 1,
- };
- } /* End class YyLenClass */
-
- protected static final class YyDefRedClass {
-
- public static final short yyDefRed [] = { 0,
- 36, 0, 0, 0, 0, 0, 0, 0, 78, 0,
- 0, 14, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 83, 0, 84, 86, 0,
- 0, 45, 0, 3, 7, 0, 0, 15, 30, 0,
- 49, 34, 37, 38, 0, 0, 43, 0, 0, 0,
- 0, 0, 0, 66, 0, 0, 0, 0, 13, 0,
- 80, 0, 71, 0, 0, 77, 75, 0, 0, 0,
- 0, 0, 16, 0, 32, 0, 0, 0, 0, 50,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 74, 82, 79, 35, 0, 31, 0, 8,
- 9, 0, 0, 39, 0, 0, 44, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 67, 68,
- 69, 33, 0, 40, 42,
- };
- } /* End of class YyDefRedClass */
-
- protected static final class YyDgotoClass {
-
- public static final short yyDgoto [] = { 105,
- 31, 32, 33, 34, 35, 36, 37, 38, 73, 39,
- 40, 41, 42, 43, 44, 45, 106, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55,
- };
- } /* End of class YyDgotoClass */
-
- protected static final class YySindexClass {
-
- public static final short yySindex [] = { -97,
- 0, -271, -267, -97, -239, -239, -97, -199, 0, -236,
- -222, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -218, 0, 0, 0,
- -257, 0, -241, 0, 0, -205, -221, 0, 0, -194,
- 0, 0, 0, 0, -190, -185, 0, -238, -211, -234,
- -255, -209, -275, 0, 0, -169, -250, -168, 0, -241,
- 0, -241, 0, -205, -187, 0, 0, -167, -97, -239,
- -239, -97, 0, -199, 0, -151, -43, -239, -239, 0,
- -97, -97, -97, -97, -97, -97, -97, -97, -97, -97,
- -97, -97, 0, 0, 0, 0, -164, 0, -211, 0,
- 0, -166, -205, 0, -165, -163, 0, -241, -241, -234,
- -255, -255, -209, -209, -209, -209, -275, -275, 0, 0,
- 0, 0, -97, 0, 0,
- };
- } /* End of class YySindexClass */
-
- protected static final class YyRindexClass {
-
- public static final short yyRindex [] = { 0,
- 0, 58, 1, 0, 420, 0, 0, 0, 0, 0,
- 129, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -161, 0, 0, 0,
- 40, 0, 237, 0, 0, 168, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 459, 0, 277, 557, 544,
- 656, 561, 474, 0, 19, 75, 0, 0, 0, 295,
- 0, 334, 0, 183, 114, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 686, 0,
- 0, 0, 222, 0, -156, 0, 0, 351, 405, 553,
- 665, 697, 577, 600, 617, 639, 513, 528, 0, 0,
- 0, 0, 0, 0, 0,
- };
- } /* End of class YyRindexClass */
-
- protected static final class YyGindexClass {
-
- public static final short yyGindex [] = { 7,
- 0, 0, 8, 0, 3, -3, 0, 0, 48, 0,
- 0, 0, 0, 0, 0, 0, -12, 0, 35, 0,
- 44, 36, -1, -54, 2, -7, -2,
- };
- } /* End of class YyGindexClass */
-
- protected static final class YyTableClass {
-
- public static final short yyTable [] = { 63,
- 81, 90, 61, 61, 64, 61, 30, 66, 94, 56,
- 58, 57, 60, 62, 84, 85, 86, 87, 80, 3,
- 91, 92, 65, 72, 70, 71, 95, 78, 79, 113,
- 114, 115, 116, 82, 83, 67, 8, 9, 68, 1,
- 69, 59, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 72, 72, 74, 3,
- 26, 27, 28, 29, 88, 89, 75, 61, 61, 76,
- 103, 61, 100, 101, 73, 61, 61, 9, 102, 77,
- 111, 112, 119, 120, 121, 108, 109, 81, 93, 117,
- 118, 97, 96, 98, 94, 80, 122, 124, 123, 85,
- 26, 27, 28, 29, 41, 1, 2, 3, 4, 104,
- 125, 107, 99, 81, 5, 6, 110, 0, 0, 0,
- 0, 0, 0, 7, 8, 9, 10, 0, 13, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 0, 0, 0, 0, 26, 27,
- 28, 29, 0, 0, 0, 0, 0, 0, 0, 1,
- 2, 3, 4, 0, 0, 0, 0, 10, 5, 6,
- 0, 0, 0, 0, 0, 0, 0, 7, 8, 9,
- 10, 0, 11, 11, 12, 13, 14, 15, 16, 17,
- 18, 19, 20, 21, 22, 23, 24, 25, 0, 0,
- 0, 0, 26, 27, 28, 29, 0, 0, 0, 0,
- 0, 0, 0, 1, 2, 3, 4, 0, 0, 0,
- 0, 12, 5, 6, 0, 0, 0, 0, 0, 0,
- 0, 0, 8, 9, 10, 0, 2, 11, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, 0, 0, 0, 0, 26, 27, 28, 29,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 46, 81, 76, 80,
- 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 80, 80, 80, 80, 5, 80, 81, 81, 81, 81,
- 1, 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 80, 80, 80, 80, 72, 72,
- 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
- 72, 72, 72, 6, 72, 73, 73, 73, 73, 73,
- 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
- 47, 73, 0, 72, 72, 72, 72, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 73, 73, 73, 73, 81, 81, 81, 81, 81, 81,
- 81, 81, 81, 81, 81, 81, 81, 81, 81, 13,
- 81, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 48, 13, 0, 0, 0, 81,
- 81, 81, 81, 0, 0, 0, 0, 0, 0, 4,
- 0, 0, 0, 0, 13, 13, 13, 13, 10, 0,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 11, 10, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 70, 11,
- 0, 0, 0, 10, 10, 10, 10, 0, 0, 0,
- 0, 0, 0, 63, 0, 0, 0, 0, 11, 11,
- 11, 11, 12, 0, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 2, 12, 2,
- 2, 2, 0, 0, 2, 2, 2, 2, 2, 2,
- 2, 2, 64, 2, 0, 0, 0, 12, 12, 12,
- 12, 0, 0, 0, 0, 0, 0, 65, 0, 0,
- 0, 0, 2, 2, 2, 2, 0, 46, 0, 46,
- 46, 46, 0, 53, 46, 46, 46, 46, 46, 46,
- 46, 46, 54, 46, 0, 5, 51, 5, 5, 5,
- 58, 0, 5, 5, 5, 5, 5, 5, 5, 5,
- 0, 5, 46, 46, 46, 46, 60, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 5, 5, 5, 5, 6, 0, 6, 6, 6, 59,
- 0, 6, 6, 6, 6, 6, 6, 6, 6, 0,
- 6, 47, 0, 47, 47, 47, 62, 0, 47, 47,
- 47, 47, 47, 47, 47, 47, 0, 47, 0, 6,
- 6, 6, 6, 0, 0, 0, 0, 0, 61, 0,
- 0, 0, 0, 0, 0, 0, 47, 47, 47, 47,
- 0, 0, 0, 0, 0, 55, 0, 0, 0, 0,
- 0, 0, 0, 0, 56, 48, 0, 48, 48, 48,
- 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
- 4, 48, 4, 4, 4, 52, 0, 4, 4, 4,
- 4, 4, 4, 4, 4, 0, 57, 0, 0, 0,
- 48, 48, 48, 48, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 4, 4, 4, 70,
- 0, 70, 70, 0, 0, 0, 70, 70, 70, 70,
- 70, 70, 70, 70, 63, 70, 63, 63, 0, 0,
- 0, 63, 63, 63, 63, 63, 63, 63, 63, 0,
- 0, 0, 0, 0, 70, 70, 70, 70, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 63, 63, 64, 0, 64, 64, 0, 0, 0,
- 64, 64, 64, 64, 64, 64, 64, 64, 65, 0,
- 65, 65, 0, 0, 0, 65, 65, 65, 65, 65,
- 65, 65, 65, 0, 53, 0, 53, 53, 0, 0,
- 64, 64, 0, 54, 0, 54, 54, 51, 0, 51,
- 51, 58, 0, 58, 58, 65, 65, 0, 58, 58,
- 58, 58, 58, 58, 0, 0, 0, 60, 0, 60,
- 60, 53, 53, 0, 60, 60, 60, 60, 60, 60,
- 54, 54, 0, 0, 51, 0, 0, 0, 58, 58,
- 59, 0, 59, 59, 0, 0, 0, 59, 59, 59,
- 59, 59, 59, 0, 60, 60, 0, 62, 0, 62,
- 62, 0, 0, 0, 62, 62, 62, 62, 62, 62,
- 0, 0, 0, 0, 0, 0, 0, 59, 59, 61,
- 0, 61, 61, 0, 0, 0, 61, 61, 61, 61,
- 61, 61, 0, 0, 62, 62, 55, 0, 55, 55,
- 0, 0, 0, 55, 55, 56, 0, 56, 56, 0,
- 0, 0, 56, 56, 0, 0, 61, 61, 0, 0,
- 0, 0, 0, 0, 0, 0, 52, 0, 52, 52,
- 0, 0, 0, 55, 55, 0, 0, 57, 0, 57,
- 57, 0, 56, 56, 57, 57, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 52, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 57, 57,
- };
- } /* End of class YyTableClass */
-
- protected static final class YyCheckClass {
-
- public static final short yyCheck [] = { 7,
- 0, 277, 5, 6, 8, 8, 0, 10, 259, 281,
- 4, 279, 5, 6, 270, 271, 272, 273, 0, 259,
- 296, 297, 259, 262, 266, 267, 277, 266, 267, 84,
- 85, 86, 87, 268, 269, 258, 276, 277, 257, 0,
- 298, 281, 282, 283, 284, 285, 286, 287, 288, 289,
- 290, 291, 292, 293, 294, 295, 262, 0, 280, 259,
- 300, 301, 302, 303, 274, 275, 261, 70, 71, 260,
- 74, 74, 70, 71, 0, 78, 79, 277, 72, 265,
- 82, 83, 90, 91, 92, 78, 79, 299, 258, 88,
- 89, 279, 261, 261, 259, 48, 263, 261, 264, 261,
- 300, 301, 302, 303, 261, 257, 258, 259, 260, 261,
- 123, 77, 69, 0, 266, 267, 81, -1, -1, -1,
- -1, -1, -1, 275, 276, 277, 278, -1, 0, 281,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- 292, 293, 294, 295, -1, -1, -1, -1, 300, 301,
- 302, 303, -1, -1, -1, -1, -1, -1, -1, 257,
- 258, 259, 260, -1, -1, -1, -1, 0, 266, 267,
- -1, -1, -1, -1, -1, -1, -1, 275, 276, 277,
- 278, -1, 0, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 291, 292, 293, 294, 295, -1, -1,
- -1, -1, 300, 301, 302, 303, -1, -1, -1, -1,
- -1, -1, -1, 257, 258, 259, 260, -1, -1, -1,
- -1, 0, 266, 267, -1, -1, -1, -1, -1, -1,
- -1, -1, 276, 277, 278, -1, 0, 281, 282, 283,
- 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
- 294, 295, -1, -1, -1, -1, 300, 301, 302, 303,
- 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
- 270, 271, 272, 273, 274, 275, 0, 277, 260, 261,
- 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
- 272, 273, 274, 275, 0, 277, 296, 297, 298, 299,
- 261, -1, 263, 264, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 296, 297, 298, 299, 261, 262,
- 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
- 273, 274, 275, 0, 277, 261, 262, 263, 264, 265,
- 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
- 0, 277, -1, 296, 297, 298, 299, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 296, 297, 298, 299, 261, 262, 263, 264, 265, 266,
- 267, 268, 269, 270, 271, 272, 273, 274, 275, 261,
- 277, 263, 264, 265, 266, 267, 268, 269, 270, 271,
- 272, 273, 274, 275, 0, 277, -1, -1, -1, 296,
- 297, 298, 299, -1, -1, -1, -1, -1, -1, 0,
- -1, -1, -1, -1, 296, 297, 298, 299, 261, -1,
- 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
- 273, 274, 275, 261, 277, 263, 264, 265, 266, 267,
- 268, 269, 270, 271, 272, 273, 274, 275, 0, 277,
- -1, -1, -1, 296, 297, 298, 299, -1, -1, -1,
- -1, -1, -1, 0, -1, -1, -1, -1, 296, 297,
- 298, 299, 261, -1, 263, 264, 265, 266, 267, 268,
- 269, 270, 271, 272, 273, 274, 275, 261, 277, 263,
- 264, 265, -1, -1, 268, 269, 270, 271, 272, 273,
- 274, 275, 0, 277, -1, -1, -1, 296, 297, 298,
- 299, -1, -1, -1, -1, -1, -1, 0, -1, -1,
- -1, -1, 296, 297, 298, 299, -1, 261, -1, 263,
- 264, 265, -1, 0, 268, 269, 270, 271, 272, 273,
- 274, 275, 0, 277, -1, 261, 0, 263, 264, 265,
- 0, -1, 268, 269, 270, 271, 272, 273, 274, 275,
- -1, 277, 296, 297, 298, 299, 0, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 296, 297, 298, 299, 261, -1, 263, 264, 265, 0,
- -1, 268, 269, 270, 271, 272, 273, 274, 275, -1,
- 277, 261, -1, 263, 264, 265, 0, -1, 268, 269,
- 270, 271, 272, 273, 274, 275, -1, 277, -1, 296,
- 297, 298, 299, -1, -1, -1, -1, -1, 0, -1,
- -1, -1, -1, -1, -1, -1, 296, 297, 298, 299,
- -1, -1, -1, -1, -1, 0, -1, -1, -1, -1,
- -1, -1, -1, -1, 0, 261, -1, 263, 264, 265,
- -1, -1, 268, 269, 270, 271, 272, 273, 274, 275,
- 261, 277, 263, 264, 265, 0, -1, 268, 269, 270,
- 271, 272, 273, 274, 275, -1, 0, -1, -1, -1,
- 296, 297, 298, 299, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 296, 297, 298, 299, 261,
- -1, 263, 264, -1, -1, -1, 268, 269, 270, 271,
- 272, 273, 274, 275, 261, 277, 263, 264, -1, -1,
- -1, 268, 269, 270, 271, 272, 273, 274, 275, -1,
- -1, -1, -1, -1, 296, 297, 298, 299, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 298, 299, 261, -1, 263, 264, -1, -1, -1,
- 268, 269, 270, 271, 272, 273, 274, 275, 261, -1,
- 263, 264, -1, -1, -1, 268, 269, 270, 271, 272,
- 273, 274, 275, -1, 261, -1, 263, 264, -1, -1,
- 298, 299, -1, 261, -1, 263, 264, 261, -1, 263,
- 264, 261, -1, 263, 264, 298, 299, -1, 268, 269,
- 270, 271, 272, 273, -1, -1, -1, 261, -1, 263,
- 264, 298, 299, -1, 268, 269, 270, 271, 272, 273,
- 298, 299, -1, -1, 298, -1, -1, -1, 298, 299,
- 261, -1, 263, 264, -1, -1, -1, 268, 269, 270,
- 271, 272, 273, -1, 298, 299, -1, 261, -1, 263,
- 264, -1, -1, -1, 268, 269, 270, 271, 272, 273,
- -1, -1, -1, -1, -1, -1, -1, 298, 299, 261,
- -1, 263, 264, -1, -1, -1, 268, 269, 270, 271,
- 272, 273, -1, -1, 298, 299, 261, -1, 263, 264,
- -1, -1, -1, 268, 269, 261, -1, 263, 264, -1,
- -1, -1, 268, 269, -1, -1, 298, 299, -1, -1,
- -1, -1, -1, -1, -1, -1, 261, -1, 263, 264,
- -1, -1, -1, 298, 299, -1, -1, 261, -1, 263,
- 264, -1, 298, 299, 268, 269, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 298, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 298, 299,
- };
- } /* End of class YyCheckClass */
-
-
-//t protected static final class YyRuleClass {
-
-//t public static final String yyRule [] = {
-//t "$accept : expr",
-//t "expr : or_expr",
-//t "location_path : relative_location_path",
-//t "location_path : absolute_location_path",
-//t "absolute_location_path : SLASH",
-//t "absolute_location_path : SLASH relative_location_path",
-//t "absolute_location_path : DOUBLE_SLASH relative_location_path",
-//t "relative_location_path : step",
-//t "relative_location_path : relative_location_path SLASH step",
-//t "relative_location_path : relative_location_path DOUBLE_SLASH step",
-//t "step : step_node_test",
-//t "step : AT step_node_test",
-//t "step : axis_name DOUBLE_COLON step_node_test",
-//t "step : DOT",
-//t "step : DOUBLE_DOT",
-//t "step_node_test : node_test",
-//t "step_node_test : step_node_test predicate",
-//t "axis_name : ANCESTOR",
-//t "axis_name : ANCESTOR_OR_SELF",
-//t "axis_name : ATTRIBUTE",
-//t "axis_name : CHILD",
-//t "axis_name : DESCENDANT",
-//t "axis_name : DESCENDANT_OR_SELF",
-//t "axis_name : FOLLOWING",
-//t "axis_name : FOLLOWING_SIBLING",
-//t "axis_name : NAMESPACE",
-//t "axis_name : PARENT",
-//t "axis_name : PRECEDING",
-//t "axis_name : PRECEDING_SIBLING",
-//t "axis_name : SELF",
-//t "node_test : name_test",
-//t "node_test : PROCESSING_INSTRUCTION LITERAL RP",
-//t "node_test : node_type RP",
-//t "predicate : LB expr RB",
-//t "primary_expr : variable_reference",
-//t "primary_expr : LP expr RP",
-//t "primary_expr : LITERAL",
-//t "primary_expr : number",
-//t "primary_expr : function_call",
-//t "function_call : function_name LP RP",
-//t "function_call : function_name LP argument_list RP",
-//t "argument_list : expr",
-//t "argument_list : expr COMMA argument_list",
-//t "union_expr : path_expr",
-//t "union_expr : union_expr PIPE path_expr",
-//t "path_expr : location_path",
-//t "path_expr : filter_expr",
-//t "path_expr : filter_expr SLASH relative_location_path",
-//t "path_expr : filter_expr DOUBLE_SLASH relative_location_path",
-//t "filter_expr : primary_expr",
-//t "filter_expr : filter_expr predicate",
-//t "or_expr : and_expr",
-//t "or_expr : or_expr OR and_expr",
-//t "and_expr : equality_expr",
-//t "and_expr : and_expr AND equality_expr",
-//t "equality_expr : relational_expr",
-//t "equality_expr : equality_expr EQ relational_expr",
-//t "equality_expr : equality_expr NE relational_expr",
-//t "relational_expr : additive_expr",
-//t "relational_expr : relational_expr LT additive_expr",
-//t "relational_expr : relational_expr GT additive_expr",
-//t "relational_expr : relational_expr LTE additive_expr",
-//t "relational_expr : relational_expr GTE additive_expr",
-//t "additive_expr : multiplicative_expr",
-//t "additive_expr : additive_expr PLUS multiplicative_expr",
-//t "additive_expr : additive_expr MINUS multiplicative_expr",
-//t "multiplicative_expr : unary_expr",
-//t "multiplicative_expr : multiplicative_expr STAR unary_expr",
-//t "multiplicative_expr : multiplicative_expr DIV unary_expr",
-//t "multiplicative_expr : multiplicative_expr MOD unary_expr",
-//t "unary_expr : union_expr",
-//t "unary_expr : MINUS unary_expr",
-//t "number : DIGITS",
-//t "number : DIGITS DOT",
-//t "number : DIGITS DOT DIGITS",
-//t "number : DOT DIGITS",
-//t "function_name : qname",
-//t "variable_reference : DOLLAR qname",
-//t "name_test : STAR",
-//t "name_test : NAME COLON STAR",
-//t "name_test : qname",
-//t "qname : NAME",
-//t "qname : NAME COLON NAME",
-//t "node_type : COMMENT",
-//t "node_type : TEXT",
-//t "node_type : PROCESSING_INSTRUCTION",
-//t "node_type : NODE",
-//t };
-//t } /* End of class YyRuleClass */
-
- protected static final class YyNameClass {
-
- public static final String yyName [] = {
- "end-of-file",null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,null,null,null,null,null,null,null,
- null,null,null,null,null,null,null,"LITERAL","DIGITS","NAME","LP",
- "RP","LB","RB","COMMA","PIPE","SLASH","DOUBLE_SLASH","EQ","NE","GT",
- "LT","GTE","LTE","PLUS","MINUS","AT","STAR","DOLLAR","COLON",
- "DOUBLE_COLON","DOT","DOUBLE_DOT","ANCESTOR","ANCESTOR_OR_SELF",
- "ATTRIBUTE","CHILD","DESCENDANT","DESCENDANT_OR_SELF","FOLLOWING",
- "FOLLOWING_SIBLING","NAMESPACE","PARENT","PRECEDING",
- "PRECEDING_SIBLING","SELF","DIV","MOD","OR","AND","COMMENT",
- "PROCESSING_INSTRUCTION","TEXT","NODE","UNARY",
- };
- } /* End of class YyNameClass */
-
-
- // line 781 "XPathParser.y"
-
-}
- // line 1461 "-"
diff --git a/libjava/gnu/xml/xpath/XPathTokenizer.java b/libjava/gnu/xml/xpath/XPathTokenizer.java
deleted file mode 100644
index a287137827b..00000000000
--- a/libjava/gnu/xml/xpath/XPathTokenizer.java
+++ /dev/null
@@ -1,592 +0,0 @@
-/* XPathTokenizer.java --
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.xml.xpath;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.util.Map;
-import java.util.TreeMap;
-
-/*import antlr.Token;
-import antlr.TokenStream;
-import antlr.TokenStreamException;
-import antlr.TokenStreamIOException;*/
-
-/**
- * XPath 1.0 expression tokenizer.
- *
- * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a>
- */
-public class XPathTokenizer
-implements XPathParser.yyInput
-//implements TokenStream
-{
-
- static class XPathToken
- //extends Token
- {
-
- int type;
- String val;
-
- XPathToken (int type)
- {
- this (type, null);
- }
-
- XPathToken (int type, String val)
- {
- //super (type);
- this.type = type;
- this.val = val;
- }
-
- public String getText ()
- {
- return val;
- }
-
- public String toString ()
- {
- return val;
- }
-
- }
-
- static final Map keywords = new TreeMap ();
- static
- {
- keywords.put ("ancestor", new Integer (XPathParser.ANCESTOR));
- keywords.put ("ancestor-or-self", new Integer (XPathParser.ANCESTOR_OR_SELF));
- keywords.put ("attribute", new Integer (XPathParser.ATTRIBUTE));
- keywords.put ("child", new Integer (XPathParser.CHILD));
- keywords.put ("descendant", new Integer (XPathParser.DESCENDANT));
- keywords.put ("descendant-or-self", new Integer (XPathParser.DESCENDANT_OR_SELF));
- keywords.put ("following", new Integer (XPathParser.FOLLOWING));
- keywords.put ("following-sibling", new Integer (XPathParser.FOLLOWING_SIBLING));
- keywords.put ("namespace", new Integer (XPathParser.NAMESPACE));
- keywords.put ("parent", new Integer (XPathParser.PARENT));
- keywords.put ("preceding", new Integer (XPathParser.PRECEDING));
- keywords.put ("preceding-sibling", new Integer (XPathParser.PRECEDING_SIBLING));
- keywords.put ("self", new Integer (XPathParser.SELF));
- keywords.put ("div", new Integer (XPathParser.DIV));
- keywords.put ("mod", new Integer (XPathParser.MOD));
- keywords.put ("or", new Integer (XPathParser.OR));
- keywords.put ("and", new Integer (XPathParser.AND));
- keywords.put ("comment", new Integer (XPathParser.COMMENT));
- keywords.put ("processing-instruction", new Integer (XPathParser.PROCESSING_INSTRUCTION));
- keywords.put ("text", new Integer (XPathParser.TEXT));
- keywords.put ("node", new Integer (XPathParser.NODE));
- }
-
- Reader in;
- XPathToken token;
- XPathToken lastToken;
-
- public XPathTokenizer (String expr)
- {
- this (new StringReader (expr));
- }
-
- XPathTokenizer (Reader in)
- {
- this.in = in.markSupported () ? in : new BufferedReader (in);
- }
-
- /* Begin ANTLR specific *
-
- public Token nextToken ()
- throws TokenStreamException
- {
- try
- {
- if (!advance ())
- {
- throw new TokenStreamException ("eof");
- }
- token ();
- return token;
- }
- catch (IOException e)
- {
- throw new TokenStreamIOException (e);
- }
- }
-
- * End ANTLR specific */
-
- public boolean advance ()
- throws IOException
- {
- lastToken = token;
- int c = in.read ();
- switch (c)
- {
- case -1: // eof
- return false;
- case 0x20:
- case 0x09:
- case 0x0d:
- case 0x0a: // skip whitespace
- return advance ();
- case 0x22: // "
- case 0x27: // '
- token = consume_literal (c);
- break;
- case 0x28: // (
- token = new XPathToken (XPathParser.LP);
- break;
- case 0x29: // )
- token = new XPathToken (XPathParser.RP);
- break;
- case 0x5b: // [
- token = new XPathToken (XPathParser.LB);
- break;
- case 0x5d: // ]
- token = new XPathToken (XPathParser.RB);
- break;
- case 0x2c: // ,
- token = new XPathToken (XPathParser.COMMA);
- break;
- case 0x7c: // |
- token = new XPathToken (XPathParser.PIPE);
- break;
- case 0x2f: // /
- in.mark (1);
- int d1 = in.read ();
- if (d1 == 0x2f)
- {
- token = new XPathToken (XPathParser.DOUBLE_SLASH);
- }
- else
- {
- in.reset ();
- token = new XPathToken (XPathParser.SLASH);
- }
- break;
- case 0x3d: // =
- token = new XPathToken (XPathParser.EQ);
- break;
- case 0x21: // !
- in.mark (1);
- int d2 = in.read ();
- if (d2 == 0x3d) // =
- {
- token = new XPathToken (XPathParser.NE);
- }
- else
- {
- in.reset ();
- token = new XPathToken (XPathParser.yyErrorCode);
- }
- break;
- case 0x3e: // >
- in.mark (1);
- int d3 = in.read ();
- if (d3 == 0x3d) // =
- {
- token = new XPathToken (XPathParser.GTE);
- }
- else
- {
- in.reset ();
- token = new XPathToken (XPathParser.GT);
- }
- break;
- case 0x3c: // <
- in.mark (1);
- int d4 = in.read ();
- if (d4 == 0x3d) // =
- {
- token = new XPathToken (XPathParser.LTE);
- }
- else
- {
- in.reset ();
- token = new XPathToken (XPathParser.LT);
- }
- break;
- case 0x2b: // +
- token = new XPathToken (XPathParser.PLUS);
- break;
- case 0x2d: // -
- token = new XPathToken (XPathParser.MINUS);
- break;
- case 0x40: // @
- token = new XPathToken (XPathParser.AT);
- break;
- case 0x2a: // *
- token = new XPathToken (XPathParser.STAR);
- break;
- case 0x24: // $
- token = new XPathToken (XPathParser.DOLLAR);
- break;
- case 0x3a: // :
- in.mark (1);
- int d5 = in.read ();
- if (d5 == 0x3a)
- {
- token = new XPathToken (XPathParser.DOUBLE_COLON);
- }
- else
- {
- in.reset ();
- token = new XPathToken (XPathParser.COLON);
- }
- break;
- case 0x2e: // .
- in.mark (1);
- int d6 = in.read ();
- if (d6 == 0x2e)
- {
- token = new XPathToken (XPathParser.DOUBLE_DOT);
- }
- else
- {
- in.reset ();
- token = new XPathToken (XPathParser.DOT);
- }
- break;
- default:
- if (c >= 0x30 && c <= 0x39)
- {
- token = consume_digits (c);
- }
- else if (c == 0x5f || Character.isLetter ((char) c))
- {
- token = consume_name (c);
- }
- else
- {
- token = new XPathToken (XPathParser.yyErrorCode);
- }
- }
- return true;
- }
-
- public int token ()
- {
- return token.type;
- }
-
- public Object value ()
- {
- return token.val;
- }
-
- XPathToken consume_literal (int delimiter)
- throws IOException
- {
- StringBuffer buf = new StringBuffer ();
- while (true)
- {
- int c = in.read ();
- if (c == -1)
- {
- return new XPathToken (XPathParser.yyErrorCode);
- }
- else if (c == delimiter)
- {
- return new XPathToken (XPathParser.LITERAL, buf.toString ());
- }
- else
- {
- buf.append ((char) c);
- }
- }
- }
-
- XPathToken consume_digits (int c)
- throws IOException
- {
- StringBuffer buf = new StringBuffer ();
- buf.append ((char) c);
- while (true)
- {
- in.mark (1);
- c = in.read ();
- if (c >= 0x30 && c <= 0x39)
- {
- buf.append ((char) c);
- }
- else
- {
- in.reset ();
- return new XPathToken (XPathParser.DIGITS, buf.toString ());
- }
- }
- }
-
- XPathToken consume_name (int c)
- throws IOException
- {
- StringBuffer buf = new StringBuffer ();
- buf.append ((char) c);
- while (true)
- {
- in.mark (1);
- c = in.read ();
- if (isNameChar (c))
- {
- buf.append ((char) c);
- }
- else
- {
- in.reset ();
- String name = buf.toString ();
- Integer keyword = (Integer) keywords.get (name);
- if (keyword == null)
- {
- return new XPathToken (XPathParser.NAME, name);
- }
- else
- {
- int val = keyword.intValue ();
- switch (val)
- {
- case XPathParser.NODE:
- case XPathParser.COMMENT:
- case XPathParser.TEXT:
- case XPathParser.PROCESSING_INSTRUCTION:
- // Consume subsequent (
- in.mark (1);
- do
- {
- c = in.read ();
- }
- while (c == 0x20 || c == 0x09);
- if (c != 0x28)
- {
- in.reset ();
- return new XPathToken (XPathParser.NAME, name);
- }
- break;
- case XPathParser.CHILD:
- case XPathParser.PARENT:
- case XPathParser.SELF:
- case XPathParser.DESCENDANT:
- case XPathParser.ANCESTOR:
- case XPathParser.DESCENDANT_OR_SELF:
- case XPathParser.ANCESTOR_OR_SELF:
- case XPathParser.ATTRIBUTE:
- case XPathParser.NAMESPACE:
- case XPathParser.FOLLOWING:
- case XPathParser.FOLLOWING_SIBLING:
- case XPathParser.PRECEDING:
- case XPathParser.PRECEDING_SIBLING:
- // Check that this is an axis specifier
- in.mark(1);
- do
- {
- c = in.read();
- }
- while (c == 0x20 || c == 0x09);
- if (c == 0x3a)
- {
- c = in.read();
- if (c == 0x3a)
- {
- in.reset();
- return new XPathToken(val);
- }
- }
- in.reset();
- return new XPathToken(XPathParser.NAME, name);
- case XPathParser.DIV:
- case XPathParser.MOD:
- // May be a name
- if (lastToken == null)
- {
- return new XPathToken(XPathParser.NAME, name);
- }
- switch (lastToken.type)
- {
- case XPathParser.LP:
- case XPathParser.LB:
- case XPathParser.COMMA:
- case XPathParser.PIPE:
- case XPathParser.EQ:
- case XPathParser.NE:
- case XPathParser.GT:
- case XPathParser.LT:
- case XPathParser.GTE:
- case XPathParser.LTE:
- case XPathParser.PLUS:
- case XPathParser.MINUS:
- case XPathParser.STAR:
- case XPathParser.AT:
- case XPathParser.DOLLAR:
- case XPathParser.COLON:
- case XPathParser.DOUBLE_COLON:
- case XPathParser.DIV:
- case XPathParser.MOD:
- case XPathParser.OR:
- case XPathParser.AND:
- case XPathParser.SLASH:
- return new XPathToken(XPathParser.NAME, name);
- }
- break;
- }
- return new XPathToken (val);
- }
- }
- }
- }
-
- boolean isNameChar (int c)
- {
- /* Name */
- return (c == 0x5f
- || c == 0x2d
- || c == 0x2e
- || (c >= 0x30 && c <= 0x39)
- /* CombiningChar */
- || (c >= 0x0300 && c <= 0x0345)
- || (c >= 0x0360 && c <= 0x0361)
- || (c >= 0x0483 && c <= 0x0486)
- || (c >= 0x0591 && c <= 0x05A1)
- || (c >= 0x05A3 && c <= 0x05B9)
- || (c >= 0x05BB && c <= 0x05BD)
- || c == 0x05BF
- || (c >= 0x05C1 && c <= 0x05C2)
- || c == 0x05C4
- || (c >= 0x064B && c <= 0x0652)
- || c == 0x0670
- || (c >= 0x06D6 && c <= 0x06DC)
- || (c >= 0x06DD && c <= 0x06DF)
- || (c >= 0x06E0 && c <= 0x06E4)
- || (c >= 0x06E7 && c <= 0x06E8)
- || (c >= 0x06EA && c <= 0x06ED)
- || (c >= 0x0901 && c <= 0x0903)
- || c == 0x093C
- || (c >= 0x093E && c <= 0x094C)
- || c == 0x094D
- || (c >= 0x0951 && c <= 0x0954)
- || (c >= 0x0962 && c <= 0x0963)
- || (c >= 0x0981 && c <= 0x0983)
- || c == 0x09BC
- || c == 0x09BE
- || c == 0x09BF
- || (c >= 0x09C0 && c <= 0x09C4)
- || (c >= 0x09C7 && c <= 0x09C8)
- || (c >= 0x09CB && c <= 0x09CD)
- || c == 0x09D7
- || (c >= 0x09E2 && c <= 0x09E3)
- || c == 0x0A02
- || c == 0x0A3C
- || c == 0x0A3E
- || c == 0x0A3F
- || (c >= 0x0A40 && c <= 0x0A42)
- || (c >= 0x0A47 && c <= 0x0A48)
- || (c >= 0x0A4B && c <= 0x0A4D)
- || (c >= 0x0A70 && c <= 0x0A71)
- || (c >= 0x0A81 && c <= 0x0A83)
- || c == 0x0ABC
- || (c >= 0x0ABE && c <= 0x0AC5)
- || (c >= 0x0AC7 && c <= 0x0AC9)
- || (c >= 0x0ACB && c <= 0x0ACD)
- || (c >= 0x0B01 && c <= 0x0B03)
- || c == 0x0B3C
- || (c >= 0x0B3E && c <= 0x0B43)
- || (c >= 0x0B47 && c <= 0x0B48)
- || (c >= 0x0B4B && c <= 0x0B4D)
- || (c >= 0x0B56 && c <= 0x0B57)
- || (c >= 0x0B82 && c <= 0x0B83)
- || (c >= 0x0BBE && c <= 0x0BC2)
- || (c >= 0x0BC6 && c <= 0x0BC8)
- || (c >= 0x0BCA && c <= 0x0BCD)
- || c == 0x0BD7
- || (c >= 0x0C01 && c <= 0x0C03)
- || (c >= 0x0C3E && c <= 0x0C44)
- || (c >= 0x0C46 && c <= 0x0C48)
- || (c >= 0x0C4A && c <= 0x0C4D)
- || (c >= 0x0C55 && c <= 0x0C56)
- || (c >= 0x0C82 && c <= 0x0C83)
- || (c >= 0x0CBE && c <= 0x0CC4)
- || (c >= 0x0CC6 && c <= 0x0CC8)
- || (c >= 0x0CCA && c <= 0x0CCD)
- || (c >= 0x0CD5 && c <= 0x0CD6)
- || (c >= 0x0D02 && c <= 0x0D03)
- || (c >= 0x0D3E && c <= 0x0D43)
- || (c >= 0x0D46 && c <= 0x0D48)
- || (c >= 0x0D4A && c <= 0x0D4D)
- || c == 0x0D57
- || c == 0x0E31
- || (c >= 0x0E34 && c <= 0x0E3A)
- || (c >= 0x0E47 && c <= 0x0E4E)
- || c == 0x0EB1
- || (c >= 0x0EB4 && c <= 0x0EB9)
- || (c >= 0x0EBB && c <= 0x0EBC)
- || (c >= 0x0EC8 && c <= 0x0ECD)
- || (c >= 0x0F18 && c <= 0x0F19)
- || c == 0x0F35
- || c == 0x0F37
- || c == 0x0F39
- || c == 0x0F3E
- || c == 0x0F3F
- || (c >= 0x0F71 && c <= 0x0F84)
- || (c >= 0x0F86 && c <= 0x0F8B)
- || (c >= 0x0F90 && c <= 0x0F95)
- || c == 0x0F97
- || (c >= 0x0F99 && c <= 0x0FAD)
- || (c >= 0x0FB1 && c <= 0x0FB7)
- || c == 0x0FB9
- || (c >= 0x20D0 && c <= 0x20DC)
- || c == 0x20E1
- || (c >= 0x302A && c <= 0x302F)
- || c == 0x3099
- || c == 0x309A
- /* Extender */
- || c == 0x00B7
- || c == 0x02D0
- || c == 0x02D1
- || c == 0x0387
- || c == 0x0640
- || c == 0x0E46
- || c == 0x0EC6
- || c == 0x3005
- || (c >= 0x3031 && c <= 0x3035)
- || (c >= 0x309D && c <= 0x309E)
- || (c >= 0x30FC && c <= 0x30FE)
- /* Name */
- || Character.isLetter ((char) c));
- }
-
-}