[kaffe] CVS kaffe (robilad): Resynced with GNU JAXP: various fixes for DOM and eclipse3
Kaffe CVS
cvs-commits at kaffe.org
Wed Dec 8 16:04:06 PST 2004
PatchSet 5575
Date: 2004/12/08 22:03:23
Author: robilad
Branch: HEAD
Tag: (none)
Log:
Resynced with GNU JAXP: various fixes for DOM and eclipse3
Members:
ChangeLog:1.3121->1.3122
libraries/javalib/gnu/xml/dom/DomAttr.java:1.7->1.8
libraries/javalib/gnu/xml/dom/DomCharacterData.java:1.7->1.8
libraries/javalib/gnu/xml/dom/DomDoctype.java:1.7->1.8
libraries/javalib/gnu/xml/dom/DomDocument.java:1.9->1.10
libraries/javalib/gnu/xml/dom/DomEntity.java:1.7->1.8
libraries/javalib/gnu/xml/dom/DomEntityReference.java:1.7->1.8
libraries/javalib/gnu/xml/dom/DomExtern.java:1.7->1.8
libraries/javalib/gnu/xml/dom/DomImpl.java:1.8->1.9
libraries/javalib/gnu/xml/dom/DomNamedNodeMap.java:1.7->1.8
libraries/javalib/gnu/xml/dom/DomNode.java:1.9->1.10
libraries/javalib/gnu/xml/dom/DomNotation.java:1.7->1.8
libraries/javalib/gnu/xml/dom/ls/ReaderInputStream.java:1.3->1.4
libraries/javalib/gnu/xml/dom/ls/SAXEventSink.java:1.1->1.2
libraries/javalib/gnu/xml/libxmlj/dom/GnomeDocumentBuilder.java:1.6->1.7
libraries/javalib/gnu/xml/libxmlj/transform/GnomeTransformer.java:1.9->1.10
libraries/javalib/gnu/xml/libxmlj/transform/GnomeTransformerFactory.java:1.5->1.6
libraries/javalib/gnu/xml/libxmlj/transform/TransformTest.java:1.6->1.7
libraries/javalib/gnu/xml/transform/TransformerImpl.java:1.3->1.4
libraries/javalib/gnu/xml/transform/XSLComparator.java:1.2->1.3
libraries/javalib/gnu/xml/transform/XSLURIResolver.java:1.2->1.3
libraries/javalib/gnu/xml/xpath/XPathParser.y:1.4->1.5
libraries/javalib/javax/xml/namespace/QName.java:1.5->1.6
libraries/javalib/javax/xml/transform/TransformerFactory.java:1.11->1.12
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.3121 kaffe/ChangeLog:1.3122
--- kaffe/ChangeLog:1.3121 Wed Dec 8 21:16:45 2004
+++ kaffe/ChangeLog Wed Dec 8 22:03:23 2004
@@ -11,6 +11,63 @@
2004-12-08 Dalibor Topic <robilad at kaffe.org>
+ * libraries/javalib/gnu/xml/dom/DomAttr.java,
+ libraries/javalib/gnu/xml/dom/DomCharacterData.java,
+ libraries/javalib/gnu/xml/dom/DomDoctype.java,
+ libraries/javalib/gnu/xml/dom/DomDocument.java,
+ libraries/javalib/gnu/xml/dom/DomEntity.java,
+ libraries/javalib/gnu/xml/dom/DomEntityReference.java,
+ libraries/javalib/gnu/xml/dom/DomExtern.java,
+ libraries/javalib/gnu/xml/dom/DomImpl.java,
+ libraries/javalib/gnu/xml/dom/DomNamedNodeMap.java,
+ libraries/javalib/gnu/xml/dom/DomNode.java,
+ libraries/javalib/gnu/xml/dom/DomNotation.java,
+ libraries/javalib/gnu/xml/dom/ls/ReaderInputStream.java,
+ libraries/javalib/gnu/xml/dom/ls/SAXEventSink.java,
+ libraries/javalib/gnu/xml/libxmlj/dom/GnomeDocumentBuilder.java,
+ libraries/javalib/gnu/xml/libxmlj/transform/GnomeTransformer.java,
+ libraries/javalib/gnu/xml/libxmlj/transform/GnomeTransformerFactory.java,
+ libraries/javalib/gnu/xml/libxmlj/transform/TransformTest.java,
+ libraries/javalib/gnu/xml/transform/TransformerImpl.java,
+ libraries/javalib/gnu/xml/transform/XSLComparator.java,
+ libraries/javalib/gnu/xml/transform/XSLURIResolver.java,
+ libraries/javalib/gnu/xml/xpath/XPathParser.y,
+ libraries/javalib/javax/xml/namespace/QName.java,
+ libraries/javalib/javax/xml/transform/TransformerFactory.java:
+ Resynced with GNU JAXP.
+
+ 2004-12-07 Chris Burdess <dog at gnu.org>
+
+ * dom: Minor DOM Level 3 Core conformance improvements.
+
+ 2004-12-07 Mark Wielaard <mark at klomp.org>
+
+ * ReaderInputStream.java: Mark and reset implementation.
+
+ 2004-12-06 Chris Burdess <dog at gnu.org>
+
+ * dom: Minor DOM Level 3 Core conformance improvements.
+
+ 2004-12-06 Mark Wielaard <mark at klomp.org>
+
+ * TransformerImpl.java: Use StreamResult's Writer if no byte stream
+ is present.
+
+ 2004-12-05 Chris Burdess <dog at gnu.org>
+
+ * TransformerImpl.java,XSLURIResolver.java: Permit identity
+ transforms with target nodes and null system IDs.
+
+ 2004-12-04 Dalibor Topic <robilad at kaffe.org>
+
+ * ElementAvailableFunction.java,FunctionAvailableFunction.java,
+ KeyFunction.java,SortKey.java,Stylesheet.java,
+ SystemPropertyFunction.java,TransformerImpl.java,XSLComparator.java,
+ NameTest.java,NamespaceTest.java,XPathParser.java,QName.java:
+ Corrected QName.getLocalName to getLocalPart. Fixed missing imports.
+
+2004-12-08 Dalibor Topic <robilad at kaffe.org>
+
* libraries/javalib/gnu/java/net/protocol/http/HTTPURLConnection.java:
Resynced with GNU Classpath.
Index: kaffe/libraries/javalib/gnu/xml/dom/DomAttr.java
diff -u kaffe/libraries/javalib/gnu/xml/dom/DomAttr.java:1.7 kaffe/libraries/javalib/gnu/xml/dom/DomAttr.java:1.8
--- kaffe/libraries/javalib/gnu/xml/dom/DomAttr.java:1.7 Sat Dec 4 21:12:24 2004
+++ kaffe/libraries/javalib/gnu/xml/dom/DomAttr.java Wed Dec 8 22:03:29 2004
@@ -296,6 +296,14 @@
}
/**
+ * 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.
*/
Index: kaffe/libraries/javalib/gnu/xml/dom/DomCharacterData.java
diff -u kaffe/libraries/javalib/gnu/xml/dom/DomCharacterData.java:1.7 kaffe/libraries/javalib/gnu/xml/dom/DomCharacterData.java:1.8
--- kaffe/libraries/javalib/gnu/xml/dom/DomCharacterData.java:1.7 Sat Dec 4 21:12:25 2004
+++ kaffe/libraries/javalib/gnu/xml/dom/DomCharacterData.java Wed Dec 8 22:03:29 2004
@@ -281,6 +281,15 @@
}
}
+ /**
+ * 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)
Index: kaffe/libraries/javalib/gnu/xml/dom/DomDoctype.java
diff -u kaffe/libraries/javalib/gnu/xml/dom/DomDoctype.java:1.7 kaffe/libraries/javalib/gnu/xml/dom/DomDoctype.java:1.8
--- kaffe/libraries/javalib/gnu/xml/dom/DomDoctype.java:1.7 Sat Dec 4 21:12:25 2004
+++ kaffe/libraries/javalib/gnu/xml/dom/DomDoctype.java Wed Dec 8 22:03:29 2004
@@ -281,6 +281,15 @@
{
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
@@ -414,5 +423,33 @@
// 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;
+ }
+
}
Index: kaffe/libraries/javalib/gnu/xml/dom/DomDocument.java
diff -u kaffe/libraries/javalib/gnu/xml/dom/DomDocument.java:1.9 kaffe/libraries/javalib/gnu/xml/dom/DomDocument.java:1.10
--- kaffe/libraries/javalib/gnu/xml/dom/DomDocument.java:1.9 Sat Dec 4 21:12:25 2004
+++ kaffe/libraries/javalib/gnu/xml/dom/DomDocument.java Wed Dec 8 22:03:30 2004
@@ -432,7 +432,7 @@
}
break;
default:
- if (c != ':' && c != '_' && c < 0x02bb && c > 0x02c1 &&
+ if (c != ':' && c != '_' && (c < 0x02bb || c > 0x02c1) &&
c != 0x0559 && c != 0x06e5 && c != 0x06e6)
{
throw new DomEx(DomEx.INVALID_CHARACTER_ERR, name, null, c);
@@ -495,7 +495,7 @@
break;
default:
if (c != '-' && c != '.' && c != ':' && c != '_' &&
- c != 0x0387 && c < 0x02bb && c > 0x02c1 &&
+ c != 0x0387 && (c < 0x02bb || c > 0x02c1) &&
c != 0x0559 && c != 0x06e5 && c != 0x06e6 && c != 0x00b7)
{
throw new DomEx(DomEx.INVALID_CHARACTER_ERR, name, null, c);
@@ -836,22 +836,21 @@
*/
public EntityReference createEntityReference(String name)
{
- DomEntityReference retval;
-
- if (checkingCharacters)
+ DomEntityReference ret = new DomEntityReference(this, name);
+ DocumentType doctype = getDoctype();
+ if (doctype != null)
{
- checkName(name, "1.1".equals(version));
+ 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));
+ }
+ }
}
- retval = new DomEntityReference(this, name);
- //
- // If we have such an entity, it's allowed that one arrange that
- // the children of this reference be "the same as" (in an undefined
- // sense of "same", clearly not identity) the children of the entity.
- // That can be immediate or deferred. It's also allowed that nothing
- // be done -- we take that option here.
- //
- retval.makeReadonly();
- return retval;
+ ret.makeReadonly();
+ return ret;
}
/**
@@ -1076,12 +1075,12 @@
public void setXmlVersion(String xmlVersion)
{
- if (version == null)
+ if (xmlVersion == null)
{
- version = "1.0";
+ xmlVersion = "1.0";
}
- if ("1.0".equals(version) ||
- "1.1".equals(version))
+ if ("1.0".equals(xmlVersion) ||
+ "1.1".equals(xmlVersion))
{
version = xmlVersion;
}
@@ -1121,6 +1120,8 @@
public String getBaseURI()
{
+ return getDocumentURI();
+ /*
Node root = getDocumentElement();
if (root != null)
{
@@ -1132,6 +1133,7 @@
}
}
return systemId;
+ */
}
public String getDocumentURI()
@@ -1181,7 +1183,10 @@
public void normalizeDocument()
{
+ boolean save = building;
+ building = true;
normalizeNode(this);
+ building = save;
}
void normalizeNode(DomNode node)
Index: kaffe/libraries/javalib/gnu/xml/dom/DomEntity.java
diff -u kaffe/libraries/javalib/gnu/xml/dom/DomEntity.java:1.7 kaffe/libraries/javalib/gnu/xml/dom/DomEntity.java:1.8
--- kaffe/libraries/javalib/gnu/xml/dom/DomEntity.java:1.7 Sat Dec 4 21:12:25 2004
+++ kaffe/libraries/javalib/gnu/xml/dom/DomEntity.java Wed Dec 8 22:03:30 2004
@@ -96,12 +96,12 @@
String systemId,
String notation)
{
- super(ENTITY_NODE, owner, name, publicId, systemId);
+ 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();
+ // NOTE: if notation == null, this is a parsed entity
+ // which could reasonably be given child nodes ...
+ makeReadonly();
}
/**
@@ -132,5 +132,17 @@
// 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;
+ }
}
+
Index: kaffe/libraries/javalib/gnu/xml/dom/DomEntityReference.java
diff -u kaffe/libraries/javalib/gnu/xml/dom/DomEntityReference.java:1.7 kaffe/libraries/javalib/gnu/xml/dom/DomEntityReference.java:1.8
--- kaffe/libraries/javalib/gnu/xml/dom/DomEntityReference.java:1.7 Sat Dec 4 21:12:25 2004
+++ kaffe/libraries/javalib/gnu/xml/dom/DomEntityReference.java Wed Dec 8 22:03:30 2004
@@ -38,6 +38,8 @@
package gnu.xml.dom;
+import org.w3c.dom.DocumentType;
+import org.w3c.dom.Entity;
import org.w3c.dom.EntityReference;
/**
@@ -98,12 +100,32 @@
}
/**
- * <b>DOM L1</b>
* Returns the name of the referenced entity.
+ * @since DOM Level 1 Core
*/
- final public String getNodeName()
+ 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();
}
}
Index: kaffe/libraries/javalib/gnu/xml/dom/DomExtern.java
diff -u kaffe/libraries/javalib/gnu/xml/dom/DomExtern.java:1.7 kaffe/libraries/javalib/gnu/xml/dom/DomExtern.java:1.8
--- kaffe/libraries/javalib/gnu/xml/dom/DomExtern.java:1.7 Sat Dec 4 21:12:25 2004
+++ kaffe/libraries/javalib/gnu/xml/dom/DomExtern.java Wed Dec 8 22:03:30 2004
@@ -56,9 +56,9 @@
extends DomNode
{
- private String name;
- private String publicId;
- private String systemId;
+ private final String name;
+ private final String publicId;
+ private final String systemId;
/**
* Constructs a node associated with the specified document,
@@ -86,7 +86,7 @@
* <b>DOM L1</b>
* Returns the SYSTEM identifier associated with this object, if any.
*/
- final public String getSystemId()
+ public final String getSystemId()
{
return systemId;
}
@@ -95,7 +95,7 @@
* <b>DOM L1</b>
* Returns the PUBLIC identifier associated with this object, if any.
*/
- final public String getPublicId()
+ public final String getPublicId()
{
return publicId;
}
@@ -104,7 +104,12 @@
* <b>DOM L1</b>
* Returns the object's name.
*/
- final public String getNodeName()
+ public final String getNodeName()
+ {
+ return name;
+ }
+
+ public final String getLocalName()
{
return name;
}
Index: kaffe/libraries/javalib/gnu/xml/dom/DomImpl.java
diff -u kaffe/libraries/javalib/gnu/xml/dom/DomImpl.java:1.8 kaffe/libraries/javalib/gnu/xml/dom/DomImpl.java:1.9
--- kaffe/libraries/javalib/gnu/xml/dom/DomImpl.java:1.8 Sat Dec 4 21:12:25 2004
+++ kaffe/libraries/javalib/gnu/xml/dom/DomImpl.java Wed Dec 8 22:03:30 2004
@@ -86,6 +86,10 @@
*/
public boolean hasFeature(String name, String version)
{
+ if (name.length() == 0)
+ {
+ return false;
+ }
name = name.toLowerCase();
if (name.charAt(0) == '+')
{
@@ -104,6 +108,7 @@
else if ("ls".equals(name) || "ls-async".equals(name))
{
return (version == null ||
+ "".equals(version) ||
"3.0".equals(version));
}
else if ("events".equals(name)
@@ -136,9 +141,6 @@
else if (DomNode.reportMutations
&& "traversal".equals(name))
{
-
- // Note: nyet tree walker support ...
-
return (version == null ||
"".equals(version) ||
"2.0".equals(version));
@@ -225,15 +227,9 @@
public Object getFeature(String feature, String version)
{
- feature = feature.toLowerCase();
-
- // DOM Level 3 Load and Save
- if ("ls".equals(feature) || "ls-async".equals(feature))
+ if (hasFeature(feature, version))
{
- if (version == null || "3.0".equals(version))
- {
- return this;
- }
+ return this;
}
return null;
}
Index: kaffe/libraries/javalib/gnu/xml/dom/DomNamedNodeMap.java
diff -u kaffe/libraries/javalib/gnu/xml/dom/DomNamedNodeMap.java:1.7 kaffe/libraries/javalib/gnu/xml/dom/DomNamedNodeMap.java:1.8
--- kaffe/libraries/javalib/gnu/xml/dom/DomNamedNodeMap.java:1.7 Sat Dec 4 21:12:25 2004
+++ kaffe/libraries/javalib/gnu/xml/dom/DomNamedNodeMap.java Wed Dec 8 22:03:30 2004
@@ -115,6 +115,10 @@
*/
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();
@@ -122,6 +126,10 @@
(localName != null && localName.equals(name)))
{
String uri = ctx.getNamespaceURI();
+ if ("".equals(uri))
+ {
+ uri = null;
+ }
if ((namespaceURI == null && uri == null) ||
(namespaceURI != null && namespaceURI.equals(uri)))
{
@@ -182,7 +190,7 @@
node.depth = owner.depth + 1;
}
- String nodeName = ns ? null : node.getNodeName();
+ String nodeName = node.getNodeName();
String localName = ns ? node.getLocalName() : null;
String namespaceURI = ns ? node.getNamespaceURI() : null;
if ("".equals(namespaceURI))
Index: kaffe/libraries/javalib/gnu/xml/dom/DomNode.java
diff -u kaffe/libraries/javalib/gnu/xml/dom/DomNode.java:1.9 kaffe/libraries/javalib/gnu/xml/dom/DomNode.java:1.10
--- kaffe/libraries/javalib/gnu/xml/dom/DomNode.java:1.9 Sat Dec 4 21:12:25 2004
+++ kaffe/libraries/javalib/gnu/xml/dom/DomNode.java Wed Dec 8 22:03:30 2004
@@ -611,6 +611,7 @@
{
DomNode child = (DomNode) newChild;
DomNode ref = (DomNode) refChild;
+
if (child.nodeType == DOCUMENT_FRAGMENT_NODE)
{
// Append all nodes in the fragment to this node
@@ -628,7 +629,7 @@
else
{
checkMisc(child);
- if (ref.parent != this)
+ if (ref == null || ref.parent != this)
{
throw new DomEx(DomEx.NOT_FOUND_ERR, null, ref, 0);
}
@@ -719,6 +720,10 @@
{
checkMisc(ctx);
}
+ if (ref == null || ref.parent != this)
+ {
+ throw new DomEx(DomEx.NOT_FOUND_ERR, null, ref, 0);
+ }
if (reportMutations)
{
@@ -778,6 +783,10 @@
else
{
checkMisc(child);
+ if (ref == null || ref.parent != this)
+ {
+ throw new DomEx(DomEx.NOT_FOUND_ERR, null, ref, 0);
+ }
if (reportMutations)
{
@@ -821,7 +830,7 @@
}
ref.parent = null;
ref.index = 0;
- ref.depth = 0;
+ ref.setDepth(0);
ref.previous = null;
ref.next = null;
@@ -893,7 +902,7 @@
ctx.index = i++;
}
ref.parent = null;
- ref.depth = 0;
+ ref.setDepth(0);
ref.index = 0;
ref.previous = null;
ref.next = null;
@@ -1154,6 +1163,7 @@
node.parent = null;
node.depth = 0;
node.index = 0;
+ node.length = 0;
node.first = null;
node.last = null;
node.previous = null;
@@ -1749,8 +1759,11 @@
* relevant) merge adjacent text nodes. This is done while ignoring
* text which happens to use CDATA delimiters).
*/
- public void normalize()
+ public final void normalize()
{
+ // Suspend readonly status
+ boolean saved = readonly;
+ readonly = false;
for (DomNode ctx = first; ctx != null; ctx = ctx.next)
{
switch (ctx.nodeType)
@@ -1773,10 +1786,13 @@
// Fall through
case DOCUMENT_NODE:
case DOCUMENT_FRAGMENT_NODE:
+ case ATTRIBUTE_NODE:
+ case ENTITY_REFERENCE_NODE:
ctx.normalize();
break;
}
}
+ readonly = saved;
}
/**
@@ -1881,7 +1897,7 @@
*/
final int compareTo2(DomNode n1, DomNode n2)
{
- if (n1.depth == 0 || n1 == n2 || n1 == null || n2 == null)
+ if (n1 == n2 || n1.depth == 0 || n2.depth == 0)
{
return 0;
}
@@ -1901,7 +1917,6 @@
switch (nodeType)
{
case ELEMENT_NODE:
- case ATTRIBUTE_NODE:
case ENTITY_NODE:
case ENTITY_REFERENCE_NODE:
case DOCUMENT_FRAGMENT_NODE:
@@ -1922,6 +1937,8 @@
return "";
}
return getNodeValue();
+ case ATTRIBUTE_NODE:
+ return getNodeValue();
case COMMENT_NODE:
case PROCESSING_INSTRUCTION_NODE:
return topLevel ? getNodeValue() : "";
@@ -1990,16 +2007,35 @@
{
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()) ||
- !equal(getChildNodes(), arg.getChildNodes()))
+ !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;
@@ -2011,34 +2047,6 @@
(arg1 != null && arg1.equals(arg2)));
}
- boolean equal(NodeList arg1, NodeList arg2)
- {
- if (arg1 == null && arg2 == null)
- {
- return true;
- }
- if (arg1 == null || arg2 == null)
- {
- return false;
- }
- int len1 = arg1.getLength();
- int len2 = arg2.getLength();
- if (len1 != len2)
- {
- return false;
- }
- for (int i = 0; i < len1; i++)
- {
- Node child1 = arg1.item(i);
- Node child2 = arg2.item(i);
- if (!child1.isSameNode(child2))
- {
- return false;
- }
- }
- return true;
- }
-
public Object getFeature(String feature, String version)
{
DOMImplementation impl = (nodeType == DOCUMENT_NODE) ?
Index: kaffe/libraries/javalib/gnu/xml/dom/DomNotation.java
diff -u kaffe/libraries/javalib/gnu/xml/dom/DomNotation.java:1.7 kaffe/libraries/javalib/gnu/xml/dom/DomNotation.java:1.8
--- kaffe/libraries/javalib/gnu/xml/dom/DomNotation.java:1.7 Sat Dec 4 21:12:25 2004
+++ kaffe/libraries/javalib/gnu/xml/dom/DomNotation.java Wed Dec 8 22:03:30 2004
@@ -89,5 +89,16 @@
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;
+ }
+
}
Index: kaffe/libraries/javalib/gnu/xml/dom/ls/ReaderInputStream.java
diff -u kaffe/libraries/javalib/gnu/xml/dom/ls/ReaderInputStream.java:1.3 kaffe/libraries/javalib/gnu/xml/dom/ls/ReaderInputStream.java:1.4
--- kaffe/libraries/javalib/gnu/xml/dom/ls/ReaderInputStream.java:1.3 Mon Dec 6 09:02:52 2004
+++ kaffe/libraries/javalib/gnu/xml/dom/ls/ReaderInputStream.java Wed Dec 8 22:03:30 2004
@@ -1,6 +1,6 @@
/*
* ReaderInputStream.java
- * Copyright (C) 1999,2000,2001 The Free Software Foundation
+ * Copyright (C) 1999, 2000, 2001, 2004 The Free Software Foundation
*
* This file is part of GNU JAXP, a library.
*
@@ -46,6 +46,7 @@
* Character stream wrapper.
*
* @author <a href='mailto:dog at gnu.org'>Chris Burdess</a>
+ * @author <a href='mailto:mark at klomp.org'>Mark Wielaard</a>
*/
public class ReaderInputStream
extends InputStream
@@ -54,10 +55,17 @@
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;
- encoding = "UTF-8";
+ this.encoding = "UTF-8";
}
void setEncoding(String encoding)
@@ -68,6 +76,16 @@
public int read()
throws IOException
{
+ if (extra != null)
+ {
+ int result = extra[pos];
+ pos++;
+ if (pos >= extra.length)
+ {
+ extra = null;
+ }
+ return result;
+ }
return reader.read();
}
@@ -80,14 +98,46 @@
public int read(byte[] b, int off, int len)
throws IOException
{
- int l = len - off;
- char[] c = new char[l];
- l = reader.read(c, 0, l);
+ 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);
- // FIXME d.length may be > len
- System.arraycopy(d, 0, b, off, d.length);
- return d.length;
+
+ 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()
@@ -103,29 +153,86 @@
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 e)
+ catch (IOException ioe)
{
- throw new RuntimeException(e.getMessage());
+ 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
{
- return reader.skip(n);
+ 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;
}
- // TODO available
+ public String toString()
+ {
+ return getClass().getName() + "[" + reader + ", " + encoding + "]";
+ }
}
Index: kaffe/libraries/javalib/gnu/xml/dom/ls/SAXEventSink.java
diff -u kaffe/libraries/javalib/gnu/xml/dom/ls/SAXEventSink.java:1.1 kaffe/libraries/javalib/gnu/xml/dom/ls/SAXEventSink.java:1.2
--- kaffe/libraries/javalib/gnu/xml/dom/ls/SAXEventSink.java:1.1 Sat Dec 4 21:12:26 2004
+++ kaffe/libraries/javalib/gnu/xml/dom/ls/SAXEventSink.java Wed Dec 8 22:03:30 2004
@@ -81,6 +81,7 @@
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;
@@ -354,13 +355,19 @@
public void startEntity(String name)
throws SAXException
{
- // Get entity
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;
+ }
+ // Get entity
NamedNodeMap entities = doctype.getEntities();
Entity entity = (Entity) entities.getNamedItem(name);
if (entity == null)
@@ -368,6 +375,18 @@
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;
+ }
+ Entity entity = popEntity();
// TODO resolve external entities to ensure that entity has content
if (expandEntityReferences)
{
@@ -382,18 +401,24 @@
{
Node entityReference = doc.createEntityReference(name);
ctx.appendChild(entityReference);
- // Copy entity content
- for (Node child = entity.getFirstChild(); child != null;
- child = child.getNextSibling())
- {
- entityReference.appendChild(child.cloneNode(true));
- }
}
}
*** Patch too long, truncated ***
More information about the kaffe
mailing list