neilg 2003/03/25 20:19:23 Modified: java/src/org/apache/xerces/parsers AbstractSAXParser.java java/src/org/apache/xerces/util ErrorHandlerWrapper.java java/src/org/apache/xerces/impl XMLScanner.java XMLEntityScanner.java XMLEntityManager.java java/src/org/apache/xerces/impl/xs/util SimpleLocator.java Log: implementation of XNI change (addition of getEncoding to XMLLocator) Revision Changes Path 1.40 +63 -4 xml-xerces/java/src/org/apache/xerces/parsers/AbstractSAXParser.java Index: AbstractSAXParser.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/parsers/AbstractSAXParser.java,v retrieving revision 1.39 retrieving revision 1.40 diff -u -r1.39 -r1.40 --- AbstractSAXParser.java 10 Feb 2003 22:21:34 -0000 1.39 +++ AbstractSAXParser.java 26 Mar 2003 04:19:22 -0000 1.40 @@ -211,6 +211,9 @@ */ protected boolean fParseInProgress = false; + // track the version of the document being parsed + protected String fVersion; + // temp vars private final AttributesProxy fAttributesProxy = new AttributesProxy(); private Augmentations fAugmentations = null; @@ -274,6 +277,7 @@ throws XNIException { fNamespaceContext = namespaceContext; + try { // SAX1 if (fDocumentHandler != null) { @@ -298,6 +302,27 @@ } // startDocument(locator,encoding,augs) /** + * Notifies of the presence of an XMLDecl line in the document. If + * present, this method will be called immediately following the + * startDocument call. + * + * @param version The XML version. + * @param encoding The IANA encoding name of the document, or null if + * not specified. + * @param standalone The standalone value, or null if not specified. + * @param augs Additional information that may include infoset augmentations + * + * @throws XNIException Thrown by handler to signal an error. + */ + public void xmlDecl(String version, String encoding, String standalone, Augmentations augs) + throws XNIException { + + // the version need only be set once; if + // document's XML 1.0|1.1, that's how it'll stay + fVersion = version; + } // xmlDecl(String,String,String) + + /** * Notifies of the presence of the DOCTYPE line in the document. * * @param rootElement The name of the root element. @@ -1070,7 +1095,19 @@ if (ex == null) { // must be a parser exception; mine it for locator info and throw // a SAXParseException - LocatorImpl locatorImpl = new LocatorImpl(); + LocatorImpl locatorImpl = new LocatorImpl(){ + public String getXMLVersion() { + return fVersion; + } + // since XMLParseExceptions know nothing about encoding, + // we cannot return anything meaningful in this context. + // We *could* consult the LocatorProxy, but the + // application can do this itself if it wishes to possibly + // be mislead. + public String getEncoding() { + return null; + } + }; locatorImpl.setPublicId(e.getPublicId()); locatorImpl.setSystemId(e.getExpandedSystemId()); locatorImpl.setLineNumber(e.getLineNumber()); @@ -1131,7 +1168,19 @@ if (ex == null) { // must be a parser exception; mine it for locator info and throw // a SAXParseException - LocatorImpl locatorImpl = new LocatorImpl(); + LocatorImpl locatorImpl = new LocatorImpl() { + public String getXMLVersion() { + return fVersion; + } + // since XMLParseExceptions know nothing about encoding, + // we cannot return anything meaningful in this context. + // We *could* consult the LocatorProxy, but the + // application can do this itself if it wishes to possibly + // be mislead. + public String getEncoding() { + return null; + } + }; locatorImpl.setPublicId(e.getPublicId()); locatorImpl.setSystemId(e.getExpandedSystemId()); locatorImpl.setLineNumber(e.getLineNumber()); @@ -1894,6 +1943,7 @@ // reset state fInDTD = false; + fVersion = "1.0"; // features fNamespaces = fConfiguration.getFeature(NAMESPACES); @@ -1907,7 +1957,7 @@ // Classes // - protected static class LocatorProxy + protected class LocatorProxy implements Locator { // @@ -1947,6 +1997,15 @@ /** Column number. */ public int getColumnNumber() { return fLocator.getColumnNumber(); + } + + // Locator2 methods + public String getXMLVersion() { + return fVersion; + } + + public String getEncoding() { + return fLocator.getEncoding(); } } // class LocatorProxy 1.7 +3 -2 xml-xerces/java/src/org/apache/xerces/util/ErrorHandlerWrapper.java Index: ErrorHandlerWrapper.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/util/ErrorHandlerWrapper.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- ErrorHandlerWrapper.java 16 Dec 2002 01:26:21 -0000 1.6 +++ ErrorHandlerWrapper.java 26 Mar 2003 04:19:22 -0000 1.7 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2001, 2002 The Apache Software Foundation. + * Copyright (c) 2001-2003 The Apache Software Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -256,6 +256,7 @@ public void setColumnNumber(int col) {} public int getLineNumber() { return fLineNumber; } public void setLineNumber(int line) {} + public String getEncoding() { return null; } }; return new XMLParseException(location, exception.getMessage(), exception.getException()); 1.27 +2 -2 xml-xerces/java/src/org/apache/xerces/impl/XMLScanner.java Index: XMLScanner.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLScanner.java,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- XMLScanner.java 3 Mar 2003 22:17:17 -0000 1.26 +++ XMLScanner.java 26 Mar 2003 04:19:22 -0000 1.27 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 1999-2002 The Apache Software Foundation. + * Copyright (c) 1999-2003 The Apache Software Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without 1.14 +28 -2 xml-xerces/java/src/org/apache/xerces/impl/XMLEntityScanner.java Index: XMLEntityScanner.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLEntityScanner.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- XMLEntityScanner.java 12 Feb 2003 17:10:33 -0000 1.13 +++ XMLEntityScanner.java 26 Mar 2003 04:19:22 -0000 1.14 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 1999-2002 The Apache Software Foundation. + * Copyright (c) 1999-2003 The Apache Software Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -85,6 +85,10 @@ private static final boolean DEBUG_ENCODINGS = false; private static final boolean DEBUG_BUFFER = false; + // + // Data + // + private XMLEntityManager fEntityManager = null; protected XMLEntityManager.ScannedEntity fCurrentEntity = null; @@ -183,6 +187,7 @@ } //fCurrentEntity.stream.reset(); fCurrentEntity.setReader(fCurrentEntity.stream, encoding, null); + fCurrentEntity.encoding = encoding; } else { if (DEBUG_ENCODINGS) System.out.println("$$$ reusing old reader on stream"); @@ -1437,6 +1442,27 @@ return -1; } // getColumnNumber():int + + /** Returns the encoding of the current entity. + * Note that, for a given entity, this value can only be + * considered final once the encoding declaration has been read (or once it + * has been determined that there is no such declaration) since, no encoding + * having been specified on the XMLInputSource, the parser + * will make an initial "guess" which could be in error. + */ + public String getEncoding() { + if (fCurrentEntity != null) { + if (fCurrentEntity.isExternal()) { + return fCurrentEntity.encoding; + } + else { + // ask current entity to find appropriate column number + return fCurrentEntity.getEncoding(); + } + } + + return null; + } // getEncoding():String /** * @see org.apache.xerces.xni.XMLLocator#setColumnNumber(int) 1.63 +15 -2 xml-xerces/java/src/org/apache/xerces/impl/XMLEntityManager.java Index: XMLEntityManager.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLEntityManager.java,v retrieving revision 1.62 retrieving revision 1.63 diff -u -r1.62 -r1.63 --- XMLEntityManager.java 12 Feb 2003 17:10:33 -0000 1.62 +++ XMLEntityManager.java 26 Mar 2003 04:19:22 -0000 1.63 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 1999-2002 The Apache Software Foundation. + * Copyright (c) 1999-2003 The Apache Software Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -2391,6 +2391,19 @@ } } return -1; + } + + // return encoding of most recent external entity + public String getEncoding() { + // search for the first external entity on the stack + int size = fEntityStack.size(); + for (int i=size-1; i>0 ; i--) { + ScannedEntity firstExternalEntity = (ScannedEntity)fEntityStack.elementAt(i); + if (firstExternalEntity.isExternal()) { + return firstExternalEntity.encoding; + } + } + return null; } // 1.3 +12 -2 xml-xerces/java/src/org/apache/xerces/impl/xs/util/SimpleLocator.java Index: SimpleLocator.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/util/SimpleLocator.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- SimpleLocator.java 16 Dec 2002 01:26:20 -0000 1.2 +++ SimpleLocator.java 26 Mar 2003 04:19:23 -0000 1.3 @@ -2,7 +2,7 @@ * The Apache Software License, Version 1.1 * * - * Copyright (c) 2002 The Apache Software Foundation. All rights + * Copyright (c) 2002, 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -146,5 +146,15 @@ * @see org.apache.xerces.xni.XMLResourceIdentifier#setPublicId(String) */ public void setPublicId(String publicId) {} + + /** Returns the encoding of the current entity. + * Since these locators are used in the construction of + * XMLParseExceptions, which know nothing about encodings, there is + * no point in having this object deal intelligently + * with encoding information. + */ + public String getEncoding() { + return null; + } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]