You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2019/01/18 22:23:58 UTC

svn commit: r1851650 - in /xmlbeans/trunk: CHANGES.txt src/store/org/apache/xmlbeans/impl/store/Locale.java

Author: kiwiwings
Date: Fri Jan 18 22:23:58 2019
New Revision: 1851650

URL: http://svn.apache.org/viewvc?rev=1851650&view=rev
Log:
XMLBEANS-528: Allow document locator to be set after initialization

Modified:
    xmlbeans/trunk/CHANGES.txt
    xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Locale.java

Modified: xmlbeans/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/CHANGES.txt?rev=1851650&r1=1851649&r2=1851650&view=diff
==============================================================================
--- xmlbeans/trunk/CHANGES.txt (original)
+++ xmlbeans/trunk/CHANGES.txt Fri Jan 18 22:23:58 2019
@@ -1,5 +1,6 @@
 Changes in V3.0.3 since V3.0.2
 
+* XMLBEANS-528: Allow document locator to be set after initialization
 * XMLBEANS-527: Rename shell script directory, to align on typical directory layout
 
 Changes in V3.0.2 since V3.0.1

Modified: xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Locale.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Locale.java?rev=1851650&r1=1851649&r2=1851650&view=diff
==============================================================================
--- xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Locale.java (original)
+++ xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Locale.java Fri Jan 18 22:23:58 2019
@@ -3080,6 +3080,19 @@ public final class Locale
     private static abstract class SaxHandler
         implements ContentHandler, LexicalHandler , DeclHandler, DTDHandler
     {
+        protected Locale _locale;
+
+        protected LoadContext _context;
+
+        private boolean _wantLineNumbers;
+        private boolean _wantLineNumbersAtEndElt;
+        private boolean _wantCdataBookmarks;
+        private Locator _startLocator;
+        private boolean _insideCDATA = false;
+        private int _entityBytesLimit = 10240;
+        private int _entityBytes = 0;
+        private int _insideEntity = 0;
+
         SaxHandler(Locator startLocator)
         {
             _startLocator = startLocator;
@@ -3090,26 +3103,20 @@ public final class Locale
             this(null);
         }
 
-        void initSaxHandler(Locale l, XmlOptions options)
+        void initSaxHandler(Locale l, final XmlOptions options)
         {
             _locale = l;
 
-            options = XmlOptions.maskNull(options);
+            XmlOptions safeOptions = XmlOptions.maskNull(options);
 
-            _context = new Cur.CurLoadContext(_locale, options);
+            _context = new Cur.CurLoadContext(_locale, safeOptions);
 
-            _wantLineNumbers =
-                _startLocator != null &&
-                options.hasOption(XmlOptions.LOAD_LINE_NUMBERS);
-            _wantLineNumbersAtEndElt =
-                _startLocator != null &&
-                options.hasOption(XmlOptions.LOAD_LINE_NUMBERS_END_ELEMENT);
-            _wantCdataBookmarks =
-                _startLocator != null &&
-                options.hasOption(XmlOptions.LOAD_SAVE_CDATA_BOOKMARKS);
+            _wantLineNumbers = safeOptions.hasOption(XmlOptions.LOAD_LINE_NUMBERS);
+            _wantLineNumbersAtEndElt = safeOptions.hasOption(XmlOptions.LOAD_LINE_NUMBERS_END_ELEMENT);
+            _wantCdataBookmarks = safeOptions.hasOption(XmlOptions.LOAD_SAVE_CDATA_BOOKMARKS);
 
-            if (options.hasOption(XmlOptions.LOAD_ENTITY_BYTES_LIMIT))
-                _entityBytesLimit = ((Integer)(options.get(XmlOptions.LOAD_ENTITY_BYTES_LIMIT))).intValue();
+            if (safeOptions.hasOption(XmlOptions.LOAD_ENTITY_BYTES_LIMIT))
+                _entityBytesLimit = (Integer) (safeOptions.get(XmlOptions.LOAD_ENTITY_BYTES_LIMIT));
         }
 
         public void startDocument()
@@ -3145,7 +3152,7 @@ public final class Locale
 
             _context.startElement(_locale.makeQualifiedQName(uri, qName));
 
-            if (_wantLineNumbers)
+            if (_wantLineNumbers && _startLocator != null)
             {
                 _context.bookmark(
                     new XmlLineNumber(_startLocator.getLineNumber(),
@@ -3212,7 +3219,7 @@ public final class Locale
             throws SAXException
         {
             _context.endElement();
-            if (_wantLineNumbersAtEndElt)
+            if (_wantLineNumbersAtEndElt && _startLocator != null)
             {
                 _context.bookmark(
                     new XmlLineNumber(_startLocator.getLineNumber(),
@@ -3225,7 +3232,7 @@ public final class Locale
         {
             _context.text(ch, start, length);
 
-            if (_wantCdataBookmarks && _insideCDATA)
+            if (_wantCdataBookmarks && _insideCDATA && _startLocator != null)
                 _context.bookmarkLastNonAttr(CDataBookmark.CDATA_BOOKMARK);
 
             if (_insideEntity!=0)
@@ -3233,7 +3240,7 @@ public final class Locale
                 if ((_entityBytes += length) > _entityBytesLimit)
                 {
                     XmlError err = XmlError.forMessage(XmlErrorCodes.EXCEPTION_EXCEEDED_ENTITY_BYTES,
-                            new Integer[]{ new Integer(_entityBytesLimit) });
+                            new Integer[]{_entityBytesLimit});
 
                     throw new SAXException(err.getMessage());
                 }
@@ -3325,10 +3332,12 @@ public final class Locale
             }
         }
 
-        public void setDocumentLocator(Locator locator)
-        {
-            // TODO - for non-Piccolo use cases, use a locator to get line numbers
+        public void setDocumentLocator(Locator locator) {
+            if (_startLocator == null) {
+                _startLocator = locator;
+            }
         }
+
         //DeclHandler
         public void attributeDecl(String eName, String aName, String type, String valueDefault, String value){
              if (type.equals("ID")){
@@ -3347,18 +3356,6 @@ public final class Locale
         }
         public void unparsedEntityDecl(String name, String publicId, String systemId, String notationName){
         }
-        protected Locale _locale;
-
-        protected LoadContext _context;
-
-        private boolean _wantLineNumbers;
-        private boolean _wantLineNumbersAtEndElt;
-        private boolean _wantCdataBookmarks;
-        private Locator _startLocator;
-        private boolean _insideCDATA = false;
-        private int _entityBytesLimit = 10240;
-        private int _entityBytes = 0;
-        private int _insideEntity = 0;
     }
 
     private static abstract class SaxLoader



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org