diff options
author | Mark Wielaard <mark@gcc.gnu.org> | 2005-11-15 23:20:01 +0000 |
---|---|---|
committer | Mark Wielaard <mark@gcc.gnu.org> | 2005-11-15 23:20:01 +0000 |
commit | 8f523f3a1047919d3563daf1ef47ba87336ebe89 (patch) | |
tree | a5eb7cf42a51869cc8aa1fad7ad6a90cca47fdd8 /libjava/classpath/gnu/xml | |
parent | 02e549bfaaec38f68307e7f34e46ea57ea1809af (diff) | |
download | gcc-8f523f3a1047919d3563daf1ef47ba87336ebe89.zip gcc-8f523f3a1047919d3563daf1ef47ba87336ebe89.tar.gz gcc-8f523f3a1047919d3563daf1ef47ba87336ebe89.tar.bz2 |
Imported GNU Classpath 0.19 + gcj-import-20051115.
* sources.am: Regenerated.
* Makefile.in: Likewise.
* scripts/makemake.tcl: Use glob -nocomplain.
From-SVN: r107049
Diffstat (limited to 'libjava/classpath/gnu/xml')
9 files changed, 153 insertions, 51 deletions
diff --git a/libjava/classpath/gnu/xml/aelfred2/JAXPFactory.java b/libjava/classpath/gnu/xml/aelfred2/JAXPFactory.java index 37e8cc9..011ca3c 100644 --- a/libjava/classpath/gnu/xml/aelfred2/JAXPFactory.java +++ b/libjava/classpath/gnu/xml/aelfred2/JAXPFactory.java @@ -109,7 +109,7 @@ public final class JAXPFactory // (flags can't necessarily be set before parsing) new JaxpParser().getXMLReader().setFeature(name, value); - flags.put(name, new Boolean(value)); + flags.put(name, Boolean.valueOf(value)); } catch (SAXNotRecognizedException e) { diff --git a/libjava/classpath/gnu/xml/aelfred2/SAXDriver.java b/libjava/classpath/gnu/xml/aelfred2/SAXDriver.java index 7e950ce..6864ff6 100644 --- a/libjava/classpath/gnu/xml/aelfred2/SAXDriver.java +++ b/libjava/classpath/gnu/xml/aelfred2/SAXDriver.java @@ -717,7 +717,9 @@ final public class SAXDriver } else { - in.setSystemId(absolutize(baseURI, in.getSystemId(), false)); + in.setSystemId(absolutize(baseURI, + in.getSystemId(), + entityResolver != base)); source = entityResolver.resolveEntity(in.getPublicId(), in.getSystemId()); if (source == null) diff --git a/libjava/classpath/gnu/xml/dom/DomDocument.java b/libjava/classpath/gnu/xml/dom/DomDocument.java index dc476b5..29b8dc7 100644 --- a/libjava/classpath/gnu/xml/dom/DomDocument.java +++ b/libjava/classpath/gnu/xml/dom/DomDocument.java @@ -210,13 +210,15 @@ public class DomDocument */ public Element getElementById(String id) { - DomDoctype doctype = (DomDoctype) getDoctype(); - - if (doctype == null || !doctype.hasIds() - || id == null || id.length() == 0) + if (id == null || id.length() == 0) { return null; } + DomDoctype doctype = (DomDoctype) getDoctype(); + if (doctype != null && !doctype.hasIds()) + { + doctype = null; + } // yes, this is linear in size of document. // it'd be easy enough to maintain a hashtable. @@ -233,25 +235,39 @@ public class DomDocument 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) + if (doctype != null) { - for (Iterator i = element.userIdAttrs.iterator(); - i.hasNext(); ) + DTDElementTypeInfo info = + doctype.getElementTypeInfo(current.getNodeName()); + if (info != null && + id.equals(element.getAttribute(info.idAttrName))) { - Node idAttr = (Node) i.next(); - if (id.equals(idAttr.getNodeValue())) + return element; + } + else if (element.userIdAttrs != null) + { + for (Iterator i = element.userIdAttrs.iterator(); + i.hasNext(); ) { - return element; + Node idAttr = (Node) i.next(); + if (id.equals(idAttr.getNodeValue())) + { + return element; + } } } } + // xml:id + String xmlId = element.getAttribute("xml:id"); + if (xmlId == null) + { + xmlId = element.getAttributeNS(XMLConstants.XML_NS_URI, + "id"); + } + if (id.equals(xmlId)) + { + return element; + } } // descend? diff --git a/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocument.java b/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocument.java index 3706fba..03420c4 100644 --- a/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocument.java +++ b/libjava/classpath/gnu/xml/libxmlj/dom/GnomeDocument.java @@ -376,31 +376,31 @@ public class GnomeDocument name = name.toLowerCase(); if ("canonical-form".equals(name)) { - return new Boolean(canonicalForm); + return Boolean.valueOf(canonicalForm); } else if ("cdata-sections".equals(name)) { - return new Boolean(cdataSections); + return Boolean.valueOf(cdataSections); } else if ("check-character-normalization".equals(name)) { - return new Boolean(checkCharacterNormalization); + return Boolean.valueOf(checkCharacterNormalization); } else if ("comments".equals(name)) { - return new Boolean(comments); + return Boolean.valueOf(comments); } else if ("datatype-normalization".equals(name)) { - return new Boolean(datatypeNormalization); + return Boolean.valueOf(datatypeNormalization); } else if ("element-content-whitespace".equals(name)) { - return new Boolean(elementContentWhitespace); + return Boolean.valueOf(elementContentWhitespace); } else if ("entities".equals(name)) { - return new Boolean(entities); + return Boolean.valueOf(entities); } else if ("error-handler".equals(name)) { @@ -408,43 +408,43 @@ public class GnomeDocument } else if ("infoset".equals(name)) { - return new Boolean(!validateIfSchema && - !entities && - !datatypeNormalization && - !cdataSections && - namespaceDeclarations && - wellFormed && - elementContentWhitespace && - comments && - namespaces); + return Boolean.valueOf(!validateIfSchema && + !entities && + !datatypeNormalization && + !cdataSections && + namespaceDeclarations && + wellFormed && + elementContentWhitespace && + comments && + namespaces); } else if ("namespaces".equals(name)) { - return new Boolean(namespaces); + return Boolean.valueOf(namespaces); } else if ("namespace-declarations".equals(name)) { - return new Boolean(namespaceDeclarations); + return Boolean.valueOf(namespaceDeclarations); } else if ("normalize-characters".equals(name)) { - return new Boolean(normalizeCharacters); + return Boolean.valueOf(normalizeCharacters); } else if ("split-cdata-sections".equals(name)) { - return new Boolean(splitCdataSections); + return Boolean.valueOf(splitCdataSections); } else if ("validate".equals(name)) { - return new Boolean(validate); + return Boolean.valueOf(validate); } else if ("validate-if-schema".equals(name)) { - return new Boolean(validateIfSchema); + return Boolean.valueOf(validateIfSchema); } else if ("well-formed".equals(name)) { - return new Boolean(wellFormed); + return Boolean.valueOf(wellFormed); } else { @@ -497,7 +497,7 @@ public class GnomeDocument } else if (value instanceof String) { - return new Boolean ((String) value).booleanValue(); + return Boolean.valueOf ((String) value).booleanValue(); } return false; } diff --git a/libjava/classpath/gnu/xml/pipeline/ValidationConsumer.java b/libjava/classpath/gnu/xml/pipeline/ValidationConsumer.java index 0fbfa9264..8391767 100644 --- a/libjava/classpath/gnu/xml/pipeline/ValidationConsumer.java +++ b/libjava/classpath/gnu/xml/pipeline/ValidationConsumer.java @@ -1607,7 +1607,7 @@ public final class ValidationConsumer extends EventFilter throw new RuntimeException ("patchNext"); } - if (table != null && (flags | F_LOOPHEAD) != 0) + if (table != null && (flags & F_LOOPHEAD) != 0) table.put (this, this); } diff --git a/libjava/classpath/gnu/xml/stream/XMLOutputFactoryImpl.java b/libjava/classpath/gnu/xml/stream/XMLOutputFactoryImpl.java index 25f5204..05b6d6c 100644 --- a/libjava/classpath/gnu/xml/stream/XMLOutputFactoryImpl.java +++ b/libjava/classpath/gnu/xml/stream/XMLOutputFactoryImpl.java @@ -121,7 +121,8 @@ public class XMLOutputFactoryImpl { if (IS_PREFIX_DEFAULTING.equals(name)) prefixDefaulting = ((Boolean) value).booleanValue(); - throw new IllegalArgumentException(name); + else + throw new IllegalArgumentException(name); } public Object getProperty(String name) diff --git a/libjava/classpath/gnu/xml/stream/XMLStreamWriterImpl.java b/libjava/classpath/gnu/xml/stream/XMLStreamWriterImpl.java index 9ac0abe..d677048 100644 --- a/libjava/classpath/gnu/xml/stream/XMLStreamWriterImpl.java +++ b/libjava/classpath/gnu/xml/stream/XMLStreamWriterImpl.java @@ -39,7 +39,10 @@ package gnu.xml.stream; import java.io.IOException; import java.io.Writer; +import java.util.Enumeration; +import java.util.HashSet; import java.util.LinkedList; +import java.util.Set; import javax.xml.XMLConstants; import javax.xml.namespace.NamespaceContext; @@ -57,16 +60,56 @@ public class XMLStreamWriterImpl implements XMLStreamWriter { + /** + * The underlying character stream to write to. + */ protected final Writer writer; + + /** + * The encoding being used. + * Note that this must match the encoding of the character stream. + */ protected final String encoding; + + /** + * Whether prefix defaulting is being used. + * If true and a prefix has not been defined for a namespace specified on + * an element or an attribute, a new prefix and namespace declaration will + * be created. + */ protected final boolean prefixDefaulting; + + /** + * The namespace context used to determine the namespace-prefix mappings + * in scope. + */ protected NamespaceContext namespaceContext; + /** + * The stack of elements in scope. + * Used to close the remaining elements. + */ private LinkedList elements; + + /** + * Whether a start element has been opened but not yet closed. + */ private boolean inStartElement; + + /** + * Whether we are in an empty element. + */ private boolean emptyElement; + private NamespaceSupport namespaces; - + private int count = 0; + + /** + * Constructor. + * @see #writer + * @see #encoding + * @see #prefixDefaulting + */ protected XMLStreamWriterImpl(Writer writer, String encoding, boolean prefixDefaulting) { @@ -77,6 +120,10 @@ public class XMLStreamWriterImpl namespaces = new NamespaceSupport(); } + /** + * Write the end of a start-element event. + * This will close the element if it was defined to be an empty element. + */ private void endStartElement() throws IOException { @@ -128,7 +175,7 @@ public class XMLStreamWriterImpl if (!isDeclared) { if (prefixDefaulting) - prefix = XMLConstants.DEFAULT_NS_PREFIX; + prefix = createPrefix(namespaceURI); else throw new XMLStreamException("namespace " + namespaceURI + " has not been declared"); @@ -140,13 +187,13 @@ public class XMLStreamWriterImpl writer.write(':'); } writer.write(localName); - if (prefixDefaulting && !isDeclared) + inStartElement = true; + if (!isDeclared) { writeNamespace(prefix, namespaceURI); } elements.addLast(new String[] { prefix, localName }); - inStartElement = true; } catch (IOException e) { @@ -156,6 +203,26 @@ public class XMLStreamWriterImpl } } + /** + * Creates a new unique prefix in the document. + * Subclasses may override this method to provide a suitably unique prefix + * for the given namespace. + * @param namespaceURI the namespace URI + */ + protected String createPrefix(String namespaceURI) + { + Set prefixes = new HashSet(); + for (Enumeration e = namespaces.getPrefixes(); e.hasMoreElements(); ) + prefixes.add(e.nextElement()); + String ret; + do + { + ret = "ns" + (count++); + } + while (prefixes.contains(ret)); + return ret; + } + public void writeStartElement(String prefix, String localName, String namespaceURI) throws XMLStreamException @@ -656,6 +723,12 @@ public class XMLStreamWriterImpl throw new IllegalArgumentException(name); } + /** + * Write the specified text, ensuring that the content is suitably encoded + * for XML. + * @param text the text to write + * @param inAttr whether we are in an attribute value + */ private void writeEncoded(String text, boolean inAttr) throws IOException { diff --git a/libjava/classpath/gnu/xml/transform/StreamSerializer.java b/libjava/classpath/gnu/xml/transform/StreamSerializer.java index eb04539..74b1005 100644 --- a/libjava/classpath/gnu/xml/transform/StreamSerializer.java +++ b/libjava/classpath/gnu/xml/transform/StreamSerializer.java @@ -694,7 +694,11 @@ public class StreamSerializer { buf = new StringBuffer(text.substring(0, i)); } - buf.append("'"); + if (mode == Stylesheet.OUTPUT_HTML) + // HTML does not define ', use character entity ref + buf.append("'"); + else + buf.append("'"); } else if (c == '"' && inAttr) { diff --git a/libjava/classpath/gnu/xml/transform/TransformerImpl.java b/libjava/classpath/gnu/xml/transform/TransformerImpl.java index a36aa61..cf40488 100644 --- a/libjava/classpath/gnu/xml/transform/TransformerImpl.java +++ b/libjava/classpath/gnu/xml/transform/TransformerImpl.java @@ -1,5 +1,5 @@ /* TransformerImpl.java -- - Copyright (C) 2004 Free Software Foundation, Inc. + Copyright (C) 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -505,6 +505,12 @@ class TransformerImpl { URL url = new URL(systemId); URLConnection connection = url.openConnection(); + // We need to call setDoInput(false), because our + // implementation of the file protocol allows writing + // (unlike Sun), but it will fail with a FileNotFoundException + // if we also open the connection for input and the output + // file doesn't yet exist. + connection.setDoInput(false); connection.setDoOutput(true); out = connection.getOutputStream(); } |