Index: gnu/xml/stream/SAXParser.java =================================================================== RCS file: /cvsroot/classpath/classpath/gnu/xml/stream/SAXParser.java,v retrieving revision 1.2 diff -u -r1.2 SAXParser.java --- gnu/xml/stream/SAXParser.java 13 Dec 2005 18:37:00 -0000 1.2 +++ gnu/xml/stream/SAXParser.java 15 Dec 2005 18:10:42 -0000 @@ -90,6 +90,11 @@ boolean namespaceAware; boolean xIncludeAware; boolean stringInterning = true; + boolean coalescing = true; + boolean replaceERefs = true; + boolean externalEntities = true; + boolean supportDTD = true; + boolean baseAware = true; XMLParser parser; XMLStreamReader reader; @@ -254,12 +259,32 @@ String systemId = input.getSystemId(); InputStream in = input.getByteStream(); if (in != null) - parser = new XMLParser(in, systemId); + parser = new XMLParser(in, systemId, + validating, + namespaceAware, + coalescing, + replaceERefs, + externalEntities, + supportDTD, + baseAware, + stringInterning, + this, + this); else { Reader r = input.getCharacterStream(); if (r != null) - parser = new XMLParser(r, systemId); + parser = new XMLParser(r, systemId, + validating, + namespaceAware, + coalescing, + replaceERefs, + externalEntities, + supportDTD, + baseAware, + stringInterning, + this, + this); } if (parser == null) { @@ -267,16 +292,20 @@ throw new SAXException("No stream or system ID specified"); systemId = XMLParser.absolutize(null, systemId); in = new URL(systemId).openStream(); - parser = new XMLParser(in, systemId); + parser = new XMLParser(in, systemId, + validating, + namespaceAware, + coalescing, + replaceERefs, + externalEntities, + supportDTD, + baseAware, + stringInterning, + this, + this); } reader = parser; - parser.setValidating(validating); - parser.setNamespaceAware(namespaceAware); - parser.setStringInterning(stringInterning); - parser.setResolver(this); - parser.setReporter(this); - if (xIncludeAware) reader = new XIncludeFilter(parser, systemId, namespaceAware, validating, true); Index: gnu/xml/stream/XMLInputFactoryImpl.java =================================================================== RCS file: /cvsroot/classpath/classpath/gnu/xml/stream/XMLInputFactoryImpl.java,v retrieving revision 1.4 diff -u -r1.4 XMLInputFactoryImpl.java --- gnu/xml/stream/XMLInputFactoryImpl.java 13 Dec 2005 18:37:00 -0000 1.4 +++ gnu/xml/stream/XMLInputFactoryImpl.java 15 Dec 2005 18:10:42 -0000 @@ -78,24 +78,14 @@ protected boolean externalEntities = true; protected boolean supportDTD = true; protected boolean xIncludeAware = false; + protected boolean baseAware = true; + protected boolean stringInterning = true; public XMLInputFactoryImpl() { allocator = new XMLEventAllocatorImpl(); } - private void configureXMLParser(XMLParser parser) - { - parser.setResolver(resolver); - parser.setReporter(reporter); - parser.setValidating(validating); - parser.setNamespaceAware(namespaceAware); - parser.setCoalescing(coalescing); - parser.setReplacingEntityReferences(replacingEntityReferences); - parser.setExternalEntities(externalEntities); - parser.setSupportDTD(supportDTD); - } - public XMLStreamReader createXMLStreamReader(Reader reader) throws XMLStreamException { @@ -106,8 +96,17 @@ coalescing, replacingEntityReferences, externalEntities, supportDTD); */ - XMLParser ret = new XMLParser(reader, null); - configureXMLParser(ret); + XMLParser ret = new XMLParser(reader, null, + validating, + namespaceAware, + coalescing, + replacingEntityReferences, + externalEntities, + supportDTD, + baseAware, + stringInterning, + reporter, + resolver); if (xIncludeAware) return new XIncludeFilter(ret, null, namespaceAware, validating, replacingEntityReferences); @@ -124,8 +123,17 @@ validating, namespaceAware, coalescing, replacingEntityReferences, externalEntities, supportDTD);*/ - XMLParser ret = new XMLParser(in, systemId); - configureXMLParser(ret); + XMLParser ret = new XMLParser(in, systemId, + validating, + namespaceAware, + coalescing, + replacingEntityReferences, + externalEntities, + supportDTD, + baseAware, + stringInterning, + reporter, + resolver); if (xIncludeAware) return new XIncludeFilter(ret, systemId, namespaceAware, validating, replacingEntityReferences); @@ -140,8 +148,17 @@ validating, namespaceAware, coalescing, replacingEntityReferences, externalEntities, supportDTD);*/ - XMLParser ret = new XMLParser(in, null); - configureXMLParser(ret); + XMLParser ret = new XMLParser(in, null, + validating, + namespaceAware, + coalescing, + replacingEntityReferences, + externalEntities, + supportDTD, + baseAware, + stringInterning, + reporter, + resolver); if (xIncludeAware) return new XIncludeFilter(ret, null, namespaceAware, validating, replacingEntityReferences); @@ -243,6 +260,12 @@ resolver = (XMLResolver) value; else if (name.equals(ALLOCATOR)) allocator = (XMLEventAllocator) value; + else if (name.equals("gnu.xml.stream.stringInterning")) + stringInterning = ((Boolean) value).booleanValue(); + else if (name.equals("gnu.xml.stream.baseAware")) + baseAware = ((Boolean) value).booleanValue(); + else if (name.equals("gnu.xml.stream.xIncludeAware")) + xIncludeAware = ((Boolean) value).booleanValue(); else throw new IllegalArgumentException(name); } @@ -268,6 +291,12 @@ return resolver; if (name.equals(ALLOCATOR)) return allocator; + if (name.equals("gnu.xml.stream.stringInterning")) + return stringInterning ? Boolean.TRUE : Boolean.FALSE; + if (name.equals("gnu.xml.stream.baseAware")) + return baseAware ? Boolean.TRUE : Boolean.FALSE; + if (name.equals("gnu.xml.stream.xIncludeAware")) + return xIncludeAware ? Boolean.TRUE : Boolean.FALSE; throw new IllegalArgumentException(name); } @@ -281,7 +310,10 @@ name.equals(SUPPORT_DTD) || name.equals(REPORTER) || name.equals(RESOLVER) || - name.equals(ALLOCATOR); + name.equals(ALLOCATOR) || + name.equals("gnu.xml.stream.stringInterning") || + name.equals("gnu.xml.stream.baseAware") || + name.equals("gnu.xml.stream.xIncludeAware"); } public void setEventAllocator(XMLEventAllocator allocator) Index: gnu/xml/stream/XMLParser.java =================================================================== RCS file: /cvsroot/classpath/classpath/gnu/xml/stream/XMLParser.java,v retrieving revision 1.6 diff -u -r1.6 XMLParser.java --- gnu/xml/stream/XMLParser.java 15 Dec 2005 14:30:33 -0000 1.6 +++ gnu/xml/stream/XMLParser.java 15 Dec 2005 18:10:42 -0000 @@ -139,21 +139,22 @@ Doctype doctype; private boolean expandPE, peIsError; - private boolean stringInterning = true; - private boolean coalescing = false; - private boolean replaceERefs = true; - private boolean externalEntities = true; - private boolean supportDTD = true; - private boolean namespaceAware = true; + private final boolean validating; // TODO + private final boolean stringInterning; + private final boolean coalescing; + private final boolean replaceERefs; + private final boolean externalEntities; + private final boolean supportDTD; + private final boolean namespaceAware; + private final boolean baseAware; - private XMLReporter reporter; - private XMLResolver resolver; + private final XMLReporter reporter; + private final XMLResolver resolver; private static final String TEST_START_ELEMENT = "<"; private static final String TEST_END_ELEMENT = "')) + mark(1); + char c = readCh(); + if (c == '>') break; + else if (c == '\uffff') + popInput(); else { + reset(); peIsError = expandPE = true; readMarkupdecl(); peIsError = expandPE = false; @@ -1410,6 +1419,7 @@ } if (inputStack.size() != 2) error("external subset has unmatched '>'"); + popInput(); } // Make rootName available for reading @@ -1510,6 +1520,7 @@ readContentspec(name); skipWhitespace(); require('>'); + //System.out.println("ElementDecl "+name); } private void readContentspec(String elementName) @@ -1670,6 +1681,7 @@ readAttDef(elementName); white = tryWhitespace(); } + //System.out.println("AttlistDecl "+elementName); } /** @@ -2022,8 +2034,11 @@ } } } - String base = getAttributeValue(XMLConstants.XML_NS_URI, "base"); - bases.addFirst(base); + if (baseAware) + { + String base = getAttributeValue(XMLConstants.XML_NS_URI, "base"); + bases.addFirst(base); + } // make element name available for read buf.setLength(0); buf.append(elementName); @@ -2355,6 +2370,25 @@ skipWhitespace(); } + private char literalReadCh() + throws IOException, XMLStreamException + { + char c = readCh(); + while (c == '\uffff') + { + if (inputStack.size() > 1) + { + inputStack.removeLast(); + input = (Input) inputStack.getLast(); + // Don't issue end-entity + c = readCh(); + } + else + throw new EOFException(); + } + return c; + } + private String readLiteral(int flags) throws IOException, XMLStreamException { @@ -2366,7 +2400,7 @@ if ((flags & LIT_DISABLE_PE) != 0) expandPE = false; boolean entities = false; - for (char c = readCh(); c != delim; c = readCh()) + for (char c = literalReadCh(); c != delim; c = literalReadCh()) { switch (c) { @@ -2722,7 +2756,17 @@ if (args.length > 1 && "-x".equals(args[1])) xIncludeAware = true; XMLParser p = new XMLParser(new java.io.FileInputStream(args[0]), - absolutize(null, args[0])); + absolutize(null, args[0]), + false, // validating + true, // namespaceAware + true, // coalescing, + true, // replaceERefs + true, // externalEntities + true, // supportDTD + false, // baseAware + true, // stringInterning + null, + null); XMLStreamReader reader = p; if (xIncludeAware) reader = new XIncludeFilter(p, args[0], true, true, true);