mrglavas    2004/09/02 08:43:32

  Modified:    java/src/org/apache/xerces/dom DOMLocatorImpl.java
                        DOMErrorImpl.java
               java/src/org/apache/xerces/impl/xs/opti SchemaDOMParser.java
                        ElementImpl.java SchemaDOM.java
               java/src/org/apache/xerces/impl/xs/traversers
                        XSDHandler.java
               java/src/org/apache/xerces/impl XMLEntityScanner.java
                        XMLVersionDetector.java XMLEntityManager.java
                        XML11EntityScanner.java
               java/src/org/apache/xerces/util DOMErrorHandlerWrapper.java
               java/src/org/apache/xerces/impl/xs/util SimpleLocator.java
  Log:
  Adding support for computing character offsets to the scanner.

  Exposing this information to the XNI and DOM locators. Thanks

  to Ankit Pasricha for this contribution.
  
  Revision  Changes    Path
  1.10      +10 -3     xml-xerces/java/src/org/apache/xerces/dom/DOMLocatorImpl.java
  
  Index: DOMLocatorImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/DOMLocatorImpl.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- DOMLocatorImpl.java       24 Feb 2004 23:23:17 -0000      1.9
  +++ DOMLocatorImpl.java       2 Sep 2004 15:43:26 -0000       1.10
  @@ -81,6 +81,13 @@
        fColumnNumber = columnNumber ;
        fUri = uri;
      } // DOMLocatorImpl (int lineNumber, int columnNumber, String uri )
  +   
  +   public DOMLocatorImpl (int lineNumber, int columnNumber, int utf16Offset, String 
uri ){
  +     fLineNumber = lineNumber ;
  +     fColumnNumber = columnNumber ;
  +     fUri = uri;
  +     fUtf16Offset = utf16Offset;
  +   } // DOMLocatorImpl (int lineNumber, int columnNumber, int utf16Offset, String 
uri )
   
      public DOMLocatorImpl (int lineNumber, int columnNumber, int byteoffset, Node 
relatedData, String uri ){
        fLineNumber = lineNumber ;
  @@ -90,13 +97,13 @@
        fUri = uri;
      } // DOMLocatorImpl (int lineNumber, int columnNumber, int offset, Node 
errorNode, String uri )
   
  -   public DOMLocatorImpl (int lineNumber, int columnNumber, int byteoffset, Node 
relatedData, String uri, int utf16Offsert ){
  +   public DOMLocatorImpl (int lineNumber, int columnNumber, int byteoffset, Node 
relatedData, String uri, int utf16Offset ){
        fLineNumber = lineNumber ;
        fColumnNumber = columnNumber ;
        fByteOffset = byteoffset ;
        fRelatedNode = relatedData ;
        fUri = uri;
  -     fUtf16Offset = utf16Offsert;
  +     fUtf16Offset = utf16Offset;
      } // DOMLocatorImpl (int lineNumber, int columnNumber, int offset, Node 
errorNode, String uri )
   
   
  
  
  
  1.12      +3 -3      xml-xerces/java/src/org/apache/xerces/dom/DOMErrorImpl.java
  
  Index: DOMErrorImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/DOMErrorImpl.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- DOMErrorImpl.java 24 Feb 2004 23:23:18 -0000      1.11
  +++ DOMErrorImpl.java 2 Sep 2004 15:43:26 -0000       1.12
  @@ -100,8 +100,8 @@
           // assuming DOMLocator wants the *expanded*, not the literal, URI of the 
doc... - neilg
           return new DOMLocatorImpl(exception.getLineNumber(),
                                     exception.getColumnNumber(),
  -                                  exception.getExpandedSystemId()
  -                                 );
  +                                  exception.getCharacterOffset(),
  +                                  exception.getExpandedSystemId());
       } // createDOMLocator()
   
   
  
  
  
  1.10      +5 -3      
xml-xerces/java/src/org/apache/xerces/impl/xs/opti/SchemaDOMParser.java
  
  Index: SchemaDOMParser.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/opti/SchemaDOMParser.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SchemaDOMParser.java      22 Jun 2004 04:08:45 -0000      1.9
  +++ SchemaDOMParser.java      2 Sep 2004 15:43:26 -0000       1.10
  @@ -222,7 +222,8 @@
           }
           schemaDOM.startElement(element, attributes, 
                                  fLocator.getLineNumber(),
  -                               fLocator.getColumnNumber());
  +                               fLocator.getColumnNumber(),
  +                               fLocator.getCharacterOffset());
   
       }
   
  @@ -262,7 +263,8 @@
           
           schemaDOM.emptyElement(element, attributes, 
                                  fLocator.getLineNumber(),
  -                               fLocator.getColumnNumber());
  +                               fLocator.getColumnNumber(),
  +                               fLocator.getCharacterOffset());
           
           if (fAnnotationDepth == -1) {
               // this is messed up, but a case to consider:
  
  
  
  1.7       +20 -3     
xml-xerces/java/src/org/apache/xerces/impl/xs/opti/ElementImpl.java
  
  Index: ElementImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/opti/ElementImpl.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ElementImpl.java  24 Feb 2004 22:59:11 -0000      1.6
  +++ ElementImpl.java  2 Sep 2004 15:43:26 -0000       1.7
  @@ -37,8 +37,9 @@
       
       int line;
       int column;
  +    int charOffset;
   
  -    public ElementImpl(int line, int column) {
  +    public ElementImpl(int line, int column, int offset) {
           row = -1;
           col = -1;
           parentRow = -1;
  @@ -46,11 +47,16 @@
           
           this.line = line;
           this.column = column;
  +        charOffset = offset;
  +    }
  +    
  +    public ElementImpl(int line, int column) {
  +       this(line, column, -1);
       }
       
       
       public ElementImpl(String prefix, String localpart, String rawname,
  -                       String uri, int line, int column) {
  +                       String uri, int line, int column, int offset) {
        super(prefix, localpart, rawname, uri, Node.ELEMENT_NODE);
        row = -1;
           col = -1;
  @@ -58,7 +64,13 @@
   
           this.line = line;
           this.column = column;
  +        charOffset = offset;
       }
  +    
  +    public ElementImpl(String prefix, String localpart, String rawname,
  +        String uri, int line, int column) {
  +             this(prefix, localpart, rawname, uri, line, column, -1);
  +     }
   
   
       //
  @@ -224,6 +236,11 @@
       /** Returns the column number. */
       public int getColumnNumber() {
           return column;
  +    }
  +    
  +    /** Returns the character offset. */
  +    public int getCharacterOffset() {
  +     return charOffset;
       }
   
   }
  
  
  
  1.8       +17 -6     
xml-xerces/java/src/org/apache/xerces/impl/xs/opti/SchemaDOM.java
  
  Index: SchemaDOM.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/opti/SchemaDOM.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- SchemaDOM.java    18 Jul 2004 20:04:36 -0000      1.7
  +++ SchemaDOM.java    2 Sep 2004 15:43:26 -0000       1.8
  @@ -57,8 +57,8 @@
       
   
       public void startElement(QName element, XMLAttributes attributes,
  -                             int line, int column) {
  -        ElementImpl node = new ElementImpl(line, column);
  +                             int line, int column, int offset) {
  +        ElementImpl node = new ElementImpl(line, column, offset);
           processElement(element, attributes, node);
           // now the current node added, becomes the parent
           parent = node;
  @@ -66,11 +66,22 @@
       
       
       public void emptyElement(QName element, XMLAttributes attributes,
  -                             int line, int column) {
  -        ElementImpl node = new ElementImpl(line, column);
  +                             int line, int column, int offset) {
  +        ElementImpl node = new ElementImpl(line, column, offset);
           processElement(element, attributes, node);
       }
       
  +    public void startElement(QName element, XMLAttributes attributes,
  +                             int line, int column) {
  +        startElement(element, attributes, line, column, -1);
  +    }
  +    
  +    
  +    public void emptyElement(QName element, XMLAttributes attributes,
  +                             int line, int column) {
  +        emptyElement(element, attributes, line, column, -1);
  +    }
  +    
       
       private void processElement(QName element, XMLAttributes attributes, 
ElementImpl node) {
   
  @@ -248,7 +259,7 @@
                   for(int j=0; j<relations[i].length; j++) 
                       relations[i][j] = null;
           relations = new NodeImpl[relationsRowResizeFactor][];
  -        parent = new ElementImpl(0, 0);
  +        parent = new ElementImpl(0, 0, 0);
           parent.rawname = "DOCUMENT_NODE";
           currLoc = 0;
           nextFreeLoc = 1;
  
  
  
  1.80      +3 -3      
xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java
  
  Index: XSDHandler.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java,v
  retrieving revision 1.79
  retrieving revision 1.80
  diff -u -r1.79 -r1.80
  --- XSDHandler.java   23 Jul 2004 22:16:09 -0000      1.79
  +++ XSDHandler.java   2 Sep 2004 15:43:29 -0000       1.80
  @@ -256,7 +256,7 @@
   
       // the Grammar Pool
       private XMLGrammarPool fGrammarPool;
  -
  +    
       //************ Traversers **********
       XSDAttributeGroupTraverser fAttributeGroupTraverser;
       XSDAttributeTraverser fAttributeTraverser;
  @@ -2106,7 +2106,7 @@
               // line/column numbers are stored in the element node
               int line = ele.getLineNumber();
               int column = ele.getColumnNumber();
  -            l.setValues(sid, sid, line, column);
  +            l.setValues(sid, sid, line, column, ele.getCharacterOffset());
               return true;
           }
           return false;
  
  
  
  1.22      +40 -6     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.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- XMLEntityScanner.java     1 Sep 2004 03:06:07 -0000       1.21
  +++ XMLEntityScanner.java     2 Sep 2004 15:43:30 -0000       1.22
  @@ -667,6 +667,7 @@
               fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
               load(1, false);
               fCurrentEntity.position = 0;
  +            fCurrentEntity.startPosition = 0;
           }
   
           // normalize newlines
  @@ -688,7 +689,9 @@
                       fCurrentEntity.columnNumber = 1;
                       if (fCurrentEntity.position == fCurrentEntity.count) {
                           offset = 0;
  +                        fCurrentEntity.baseCharOffset += (fCurrentEntity.position - 
fCurrentEntity.startPosition);
                           fCurrentEntity.position = newlines;
  +                        fCurrentEntity.startPosition = newlines;
                           if (load(newlines, false)) {
                               break;
                           }
  @@ -708,7 +711,9 @@
                       fCurrentEntity.columnNumber = 1;
                       if (fCurrentEntity.position == fCurrentEntity.count) {
                           offset = 0;
  +                        fCurrentEntity.baseCharOffset += (fCurrentEntity.position - 
fCurrentEntity.startPosition);
                           fCurrentEntity.position = newlines;
  +                        fCurrentEntity.startPosition = newlines;
                           if (load(newlines, false)) {
                               break;
                           }
  @@ -816,6 +821,7 @@
               fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
               load(1, false);
               fCurrentEntity.position = 0;
  +            fCurrentEntity.startPosition = 0;
           }
   
           // normalize newlines
  @@ -837,7 +843,9 @@
                       fCurrentEntity.columnNumber = 1;
                       if (fCurrentEntity.position == fCurrentEntity.count) {
                           offset = 0;
  +                        fCurrentEntity.baseCharOffset += (fCurrentEntity.position - 
fCurrentEntity.startPosition);
                           fCurrentEntity.position = newlines;
  +                        fCurrentEntity.startPosition = newlines;
                           if (load(newlines, false)) {
                               break;
                           }
  @@ -858,7 +866,9 @@
                       fCurrentEntity.columnNumber = 1;
                       if (fCurrentEntity.position == fCurrentEntity.count) {
                           offset = 0;
  +                        fCurrentEntity.baseCharOffset += (fCurrentEntity.position - 
fCurrentEntity.startPosition);
                           fCurrentEntity.position = newlines;
  +                        fCurrentEntity.startPosition = newlines;
                           if (load(newlines, false)) {
                               break;
                           }
  @@ -998,6 +1008,7 @@
   
             bNextEntity = load(fCurrentEntity.count - fCurrentEntity.position, false);
             fCurrentEntity.position = 0;
  +          fCurrentEntity.startPosition = 0;
           }
   
           if (fCurrentEntity.position >= fCurrentEntity.count - delimLen) {
  @@ -1005,7 +1016,9 @@
               int length = fCurrentEntity.count - fCurrentEntity.position;
               buffer.append (fCurrentEntity.ch, fCurrentEntity.position, length); 
               fCurrentEntity.columnNumber += fCurrentEntity.count;
  +            fCurrentEntity.baseCharOffset += (fCurrentEntity.position - 
fCurrentEntity.startPosition);
               fCurrentEntity.position = fCurrentEntity.count;
  +            fCurrentEntity.startPosition = fCurrentEntity.count;
               load(0,true);
               return false;
           }
  @@ -1028,7 +1041,9 @@
                       fCurrentEntity.columnNumber = 1;
                       if (fCurrentEntity.position == fCurrentEntity.count) {
                           offset = 0;
  +                        fCurrentEntity.baseCharOffset += (fCurrentEntity.position - 
fCurrentEntity.startPosition);
                           fCurrentEntity.position = newlines;
  +                        fCurrentEntity.startPosition = newlines;
                           if (load(newlines, false)) {
                               break;
                           }
  @@ -1048,7 +1063,9 @@
                       fCurrentEntity.columnNumber = 1;
                       if (fCurrentEntity.position == fCurrentEntity.count) {
                           offset = 0;
  +                        fCurrentEntity.baseCharOffset += (fCurrentEntity.position - 
fCurrentEntity.startPosition);
                           fCurrentEntity.position = newlines;
  +                        fCurrentEntity.startPosition = newlines;
                           fCurrentEntity.count = newlines;
                           if (load(newlines, false)) {
                               break;
  @@ -1242,10 +1259,12 @@
                       if (fCurrentEntity.position == fCurrentEntity.count - 1) {
                           fCurrentEntity.ch[0] = (char)c;
                           entityChanged = load(1, true);
  -                        if (!entityChanged)
  +                        if (!entityChanged) {
                               // the load change the position to be 1,
                               // need to restore it when entity not changed
                               fCurrentEntity.position = 0;
  +                            fCurrentEntity.startPosition = 0;
  +                        }
                       }
                       if (c == '\r' && external) {
                           // REVISIT: Does this need to be updated to fix the
  @@ -1333,10 +1352,12 @@
                       if (fCurrentEntity.position == fCurrentEntity.count - 1) {
                           fCurrentEntity.ch[0] = (char)c;
                           entityChanged = load(1, true);
  -                        if (!entityChanged)
  +                        if (!entityChanged) {
                               // the load change the position to be 1,
                               // need to restore it when entity not changed
                               fCurrentEntity.position = 0;
  +                            fCurrentEntity.startPosition = 0;
  +                        }
                       }
                       if (c == '\r' && external) {
                           // REVISIT: Does this need to be updated to fix the
  @@ -1425,6 +1446,7 @@
                   // REVISIT: Can a string to be skipped cross an
                   //          entity boundary? -Ac
                   if (load(i + 1, false)) {
  +                    fCurrentEntity.startPosition -= i + 1; 
                       fCurrentEntity.position -= i + 1;
                       if (DEBUG_BUFFER) {
                           System.out.print(")skipString, \""+s+"\": ");
  @@ -1597,7 +1619,16 @@
        * @return The character offset, or -1 if none is available.
        */
       public int getCharacterOffset() {
  -        /** TODO: Implement this method. **/
  +        if (fCurrentEntity != null) {
  +            if (fCurrentEntity.isExternal()) {
  +                return fCurrentEntity.baseCharOffset + (fCurrentEntity.position - 
fCurrentEntity.startPosition);
  +            }
  +            else {
  +                // ask current entity to find appropriate character offset
  +                return fCurrentEntity.getCharacterOffset();
  +            }
  +        }
  +        
           return -1;
       } // getCharacterOffset():int
       
  @@ -1622,7 +1653,7 @@
           return null;
       } // getEncoding():String
       
  -    /** 
  +    /**
        * Returns the XML version of the current entity. This will normally be the
        * value from the XML or text declaration or defaulted by the parser. Note that
        * that this value may be different than the version of the processing rules 
  @@ -1644,7 +1675,7 @@
           }
           return null;
       } // getXMLVersion():String
  -
  +    
       // allow entity manager to tell us what the current entityis:
       public void setCurrentEntity(XMLEntityManager.ScannedEntity ent) {
           fCurrentEntity = ent;
  @@ -1700,6 +1731,7 @@
               System.out.println();
           }
   
  +        fCurrentEntity.baseCharOffset += (fCurrentEntity.position - 
fCurrentEntity.startPosition);
           // read characters
           int length = fCurrentEntity.mayReadChunks?
                   (fCurrentEntity.ch.length - offset):
  @@ -1714,6 +1746,7 @@
               if (count != 0) {
                   fCurrentEntity.count = count + offset;
                   fCurrentEntity.position = offset;
  +                fCurrentEntity.startPosition = offset;
               }
           }
   
  @@ -1721,6 +1754,7 @@
           else {
               fCurrentEntity.count = offset;
               fCurrentEntity.position = offset;
  +            fCurrentEntity.startPosition = offset;
               entityChanged = true;
               if (changeEntity) {
                   fEntityManager.endEntity();
  
  
  
  1.13      +3 -1      
xml-xerces/java/src/org/apache/xerces/impl/XMLVersionDetector.java
  
  Index: XMLVersionDetector.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLVersionDetector.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- XMLVersionDetector.java   27 Feb 2004 20:36:07 -0000      1.12
  +++ XMLVersionDetector.java   2 Sep 2004 15:43:30 -0000       1.13
  @@ -220,6 +220,8 @@
           // prepend contents...
           System.arraycopy(scannedChars, 0, currentEntity.ch, 0, length);
           currentEntity.position = 0;
  +        currentEntity.baseCharOffset = 0;
  +        currentEntity.startPosition = 0;
           currentEntity.columnNumber = currentEntity.lineNumber = 1;
       }
   
  
  
  
  1.83      +39 -17    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.82
  retrieving revision 1.83
  diff -u -r1.82 -r1.83
  --- XMLEntityManager.java     1 Sep 2004 03:06:07 -0000       1.82
  +++ XMLEntityManager.java     2 Sep 2004 15:43:30 -0000       1.83
  @@ -2307,7 +2307,7 @@
           public int columnNumber = 1;
   
           // encoding
  -
  +        
           /** Auto-detected encoding. */
           public String encoding;
           
  @@ -2331,10 +2331,16 @@
   
           /** Character buffer. */
           public char[] ch = null;
  -
  +        
           /** Position in character buffer. */
           public int position;
  -
  +        
  +        /** Base character offset for computing absolute character offset. */
  +        public int baseCharOffset;
  +        
  +        /** Start position in character buffer. */
  +        public int startPosition;
  +        
           /** Count of characters in buffer. */
           public int count;
   
  @@ -2414,41 +2420,55 @@
               }
               return null;
           }
  -
  +        
           // return line number of position in most
           // recent external entity
           public int getLineNumber() {
               // 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);
  +                ScannedEntity firstExternalEntity = 
(ScannedEntity)fEntityStack.elementAt(i);
                   if (firstExternalEntity.isExternal()) {
                       return firstExternalEntity.lineNumber;
                   }
               }
               return -1;
           }
  -
  +        
           // return column number of position in most
           // recent external entity
           public int getColumnNumber() {
               // 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);
  +                ScannedEntity firstExternalEntity = 
(ScannedEntity)fEntityStack.elementAt(i);
                   if (firstExternalEntity.isExternal()) {
                       return firstExternalEntity.columnNumber;
                   }
               }
               return -1;
           }
  -
  +        
  +        // return character offset of position in most
  +        // recent external entity
  +        public int getCharacterOffset() {
  +            // 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.baseCharOffset + 
(firstExternalEntity.position - firstExternalEntity.startPosition);
  +                }
  +            }
  +            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);
  +                ScannedEntity firstExternalEntity = 
(ScannedEntity)fEntityStack.elementAt(i);
                   if (firstExternalEntity.isExternal()) {
                       return firstExternalEntity.encoding;
                   }
  @@ -2461,29 +2481,31 @@
               // 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);
  +                ScannedEntity firstExternalEntity = 
(ScannedEntity)fEntityStack.elementAt(i);
                   if (firstExternalEntity.isExternal()) {
                       return firstExternalEntity.xmlVersion;
                   }
               }
               return null;
           }
  -
  +        
           //
           // Object methods
           //
  -
  +        
           /** Returns a string representation of this object. */
           public String toString() {
  -
  +            
               StringBuffer str = new StringBuffer();
               str.append("name=\""+name+'"');
               str.append(",ch=");
               str.append(ch);
  -            str.append(",position="+position);
  -            str.append(",count="+count);
  +            str.append(",position=" + position);
  +            str.append(",count=" + count);
  +            str.append(",baseCharOffset=" + baseCharOffset);
  +            str.append(",startPosition=" + startPosition);
               return str.toString();
  -
  +            
           } // toString():String
                
                public boolean isDeclaredEncoding() {
  
  
  
  1.13      +32 -3     
xml-xerces/java/src/org/apache/xerces/impl/XML11EntityScanner.java
  
  Index: XML11EntityScanner.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XML11EntityScanner.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- XML11EntityScanner.java   24 Feb 2004 23:03:46 -0000      1.12
  +++ XML11EntityScanner.java   2 Sep 2004 15:43:31 -0000       1.13
  @@ -181,6 +181,7 @@
                       }
                       offset = 0;
                       if (load(length, false)) {
  +                        --fCurrentEntity.startPosition;
                           --fCurrentEntity.position;
                           break;
                       }
  @@ -271,6 +272,7 @@
                   offset = 0;
                   if (load(1, false)) {
                       --fCurrentEntity.position;
  +                    --fCurrentEntity.startPosition;
                       return null;
                   }
               }
  @@ -334,6 +336,7 @@
                       offset = 0;
                       if (load(length, false)) {
                           --fCurrentEntity.position;
  +                        --fCurrentEntity.startPosition;
                           break;
                       }
                   }
  @@ -424,6 +427,7 @@
                   offset = 0;
                   if (load(1, false)) {
                       --fCurrentEntity.position;
  +                    --fCurrentEntity.startPosition;
                       return null;
                   }
               }
  @@ -486,6 +490,7 @@
                       }
                       offset = 0;
                       if (load(length, false)) {
  +                        --fCurrentEntity.startPosition;
                           --fCurrentEntity.position;
                           break;
                       }
  @@ -583,6 +588,7 @@
                   fCurrentEntity.ch[0] = ch;
                   offset = 0;
                   if (load(1, false)) {
  +                    --fCurrentEntity.startPosition;
                       --fCurrentEntity.position;
                       return false;
                   }
  @@ -662,6 +668,7 @@
                       offset = 0;
                       if (load(length, false)) {
                           sawIncompleteSurrogatePair = true;
  +                        --fCurrentEntity.startPosition;
                           --fCurrentEntity.position;
                           break;
                       }
  @@ -773,6 +780,7 @@
               fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
               load(1, false);
               fCurrentEntity.position = 0;
  +            fCurrentEntity.startPosition = 0;
           }
   
           // normalize newlines
  @@ -789,7 +797,9 @@
                       fCurrentEntity.columnNumber = 1;
                       if (fCurrentEntity.position == fCurrentEntity.count) {
                           offset = 0;
  +                        fCurrentEntity.baseCharOffset += (fCurrentEntity.position - 
fCurrentEntity.startPosition);
                           fCurrentEntity.position = newlines;
  +                        fCurrentEntity.startPosition = newlines;
                           if (load(newlines, false)) {
                               break;
                           }
  @@ -810,7 +820,9 @@
                       fCurrentEntity.columnNumber = 1;
                       if (fCurrentEntity.position == fCurrentEntity.count) {
                           offset = 0;
  +                        fCurrentEntity.baseCharOffset += (fCurrentEntity.position - 
fCurrentEntity.startPosition);
                           fCurrentEntity.position = newlines;
  +                        fCurrentEntity.startPosition = newlines;
                           if (load(newlines, false)) {
                               break;
                           }
  @@ -909,6 +921,7 @@
           else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
               fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
               load(1, false);
  +            fCurrentEntity.startPosition = 0;
               fCurrentEntity.position = 0;
           }
   
  @@ -926,7 +939,9 @@
                       fCurrentEntity.columnNumber = 1;
                       if (fCurrentEntity.position == fCurrentEntity.count) {
                           offset = 0;
  +                        fCurrentEntity.baseCharOffset += (fCurrentEntity.position - 
fCurrentEntity.startPosition);
                           fCurrentEntity.position = newlines;
  +                        fCurrentEntity.startPosition = newlines;
                           if (load(newlines, false)) {
                               break;
                           }
  @@ -947,7 +962,9 @@
                       fCurrentEntity.columnNumber = 1;
                       if (fCurrentEntity.position == fCurrentEntity.count) {
                           offset = 0;
  +                        fCurrentEntity.baseCharOffset += (fCurrentEntity.position - 
fCurrentEntity.startPosition);
                           fCurrentEntity.position = newlines;
  +                        fCurrentEntity.startPosition = newlines;
                           if (load(newlines, false)) {
                               break;
                           }
  @@ -1067,6 +1084,7 @@
   
                 bNextEntity = load(fCurrentEntity.count - fCurrentEntity.position, 
false);
                 fCurrentEntity.position = 0;
  +              fCurrentEntity.startPosition = 0;
               }
   
               if (fCurrentEntity.position >= fCurrentEntity.count - delimLen) {
  @@ -1074,7 +1092,9 @@
                   int length = fCurrentEntity.count - fCurrentEntity.position;
                   buffer.append (fCurrentEntity.ch, fCurrentEntity.position, length); 
                   fCurrentEntity.columnNumber += fCurrentEntity.count;
  +                fCurrentEntity.baseCharOffset += (fCurrentEntity.position - 
fCurrentEntity.startPosition);
                   fCurrentEntity.position = fCurrentEntity.count;
  +                fCurrentEntity.startPosition = fCurrentEntity.count;
                   load(0,true);
                   return false;
               }
  @@ -1092,7 +1112,9 @@
                           fCurrentEntity.columnNumber = 1;
                           if (fCurrentEntity.position == fCurrentEntity.count) {
                               offset = 0;
  +                            fCurrentEntity.baseCharOffset += 
(fCurrentEntity.position - fCurrentEntity.startPosition);
                               fCurrentEntity.position = newlines;
  +                            fCurrentEntity.startPosition = newlines;
                               if (load(newlines, false)) {
                                   break;
                               }
  @@ -1113,7 +1135,9 @@
                           fCurrentEntity.columnNumber = 1;
                           if (fCurrentEntity.position == fCurrentEntity.count) {
                               offset = 0;
  +                            fCurrentEntity.baseCharOffset += 
(fCurrentEntity.position - fCurrentEntity.startPosition);
                               fCurrentEntity.position = newlines;
  +                            fCurrentEntity.startPosition = newlines;
                               fCurrentEntity.count = newlines;
                               if (load(newlines, false)) {
                                   break;
  @@ -1318,10 +1342,12 @@
                           if (fCurrentEntity.position == fCurrentEntity.count - 1) {
                               fCurrentEntity.ch[0] = (char)c;
                               entityChanged = load(1, true);
  -                            if (!entityChanged)
  +                            if (!entityChanged) {
                                   // the load change the position to be 1,
                                   // need to restore it when entity not changed
  +                                fCurrentEntity.startPosition = 0;
                                   fCurrentEntity.position = 0;
  +                            }
                           }
                           if (c == '\r') {
                               // REVISIT: Does this need to be updated to fix the
  @@ -1356,10 +1382,12 @@
                       if (fCurrentEntity.position == fCurrentEntity.count - 1) {
                           fCurrentEntity.ch[0] = (char)c;
                           entityChanged = load(1, true);
  -                        if (!entityChanged)
  +                        if (!entityChanged) {
                               // the load change the position to be 1,
                               // need to restore it when entity not changed
  +                            fCurrentEntity.startPosition = 0;
                               fCurrentEntity.position = 0;
  +                        }
                       }
                   }
                   else {
  @@ -1413,6 +1441,7 @@
                   // REVISIT: Can a string to be skipped cross an
                   //          entity boundary? -Ac
                   if (load(i + 1, false)) {
  +                    fCurrentEntity.startPosition -= i + 1;
                       fCurrentEntity.position -= i + 1;
                       return false;
                   }
  
  
  
  1.14      +4 -1      
xml-xerces/java/src/org/apache/xerces/util/DOMErrorHandlerWrapper.java
  
  Index: DOMErrorHandlerWrapper.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/util/DOMErrorHandlerWrapper.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- DOMErrorHandlerWrapper.java       5 Jul 2004 22:29:30 -0000       1.13
  +++ DOMErrorHandlerWrapper.java       2 Sep 2004 15:43:31 -0000       1.14
  @@ -134,6 +134,7 @@
           if (locator != null) {
               locator.fColumnNumber = exception.getColumnNumber();
               locator.fLineNumber = exception.getLineNumber();
  +            locator.fUtf16Offset = exception.getCharacterOffset();
               locator.fUri = exception.getExpandedSystemId();
               locator.fRelatedNode = fCurrentNode;
           }
  @@ -169,6 +170,7 @@
           if (locator != null) {
               locator.fColumnNumber = exception.getColumnNumber();
               locator.fLineNumber = exception.getLineNumber();
  +            locator.fUtf16Offset = exception.getCharacterOffset();
               locator.fUri = exception.getExpandedSystemId();
               locator.fRelatedNode= fCurrentNode;
           }
  @@ -213,6 +215,7 @@
           if (locator != null) {
               locator.fColumnNumber = exception.getColumnNumber();
               locator.fLineNumber = exception.getLineNumber();
  +            locator.fUtf16Offset = exception.getCharacterOffset();
               locator.fUri = exception.getExpandedSystemId();
               locator.fRelatedNode = fCurrentNode;
           }
  
  
  
  1.6       +53 -38    
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.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- SimpleLocator.java        1 Sep 2004 03:06:08 -0000       1.5
  +++ SimpleLocator.java        2 Sep 2004 15:43:32 -0000       1.6
  @@ -25,24 +25,36 @@
    * @version $Id$
    */
   public class SimpleLocator implements XMLLocator {
  +
       String lsid, esid;
       int line, column;
  +    int charOffset;
       
       public SimpleLocator() {
       }
       
       public SimpleLocator(String lsid, String esid, int line, int column) {
  +        this(lsid, esid, line, column, -1);
  +    }
  +    
  +    public void setValues(String lsid, String esid, int line, int column) {
  +        setValues(lsid, esid, line, column, -1);
  +    }
  +    
  +    public SimpleLocator(String lsid, String esid, int line, int column, int 
offset) {
           this.line = line;
           this.column = column;
           this.lsid = lsid;
           this.esid = esid;
  +        charOffset = offset;
       }
       
  -    public void setValues(String lsid, String esid, int line, int column) {
  +    public void setValues(String lsid, String esid, int line, int column, int 
offset) {
           this.line = line;
           this.column = column;
           this.lsid = lsid;
           this.esid = esid;
  +        charOffset = offset;
       }
       
       public int getLineNumber() {
  @@ -54,62 +66,66 @@
       }
       
       public int getCharacterOffset() {
  -        return -1;
  +        return charOffset;
       }
  -
  +    
       public String getPublicId() {
           return null;
       }
  -
  +    
       public String getExpandedSystemId() {
           return esid;
       }
  -
  +    
       public String getLiteralSystemId() {
           return lsid;
       }
  -
  +    
       public String getBaseSystemId() {
           return null;
       }
  -     /**
  -      * @see org.apache.xerces.xni.XMLLocator#setColumnNumber(int)
  -      */
  -     public void setColumnNumber(int col) {
  +    /**
  +     * @see org.apache.xerces.xni.XMLLocator#setColumnNumber(int)
  +     */
  +    public void setColumnNumber(int col) {
           this.column = col;
       }
  -
  -     /**
  -      * @see org.apache.xerces.xni.XMLLocator#setLineNumber(int)
  -      */
  -     public void setLineNumber(int line) {
  +    
  +    /**
  +     * @see org.apache.xerces.xni.XMLLocator#setLineNumber(int)
  +     */
  +    public void setLineNumber(int line) {
           this.line = line;
       }
  -
  -     /**
  -      * @see org.apache.xerces.xni.XMLResourceIdentifier#setBaseSystemId(String)
  -      */
  -     public void setBaseSystemId(String systemId) {}
  -
  -     /**
  -      * @see org.apache.xerces.xni.XMLResourceIdentifier#setExpandedSystemId(String)
  -      */
  -     public void setExpandedSystemId(String systemId) {
  +    
  +    public void setCharacterOffset(int offset) {
  +        charOffset = offset;
  +    }
  +    
  +    /**
  +     * @see org.apache.xerces.xni.XMLResourceIdentifier#setBaseSystemId(String)
  +     */
  +    public void setBaseSystemId(String systemId) {}
  +    
  +    /**
  +     * @see org.apache.xerces.xni.XMLResourceIdentifier#setExpandedSystemId(String)
  +     */
  +    public void setExpandedSystemId(String systemId) {
           esid = systemId;
       }
  -
  -     /**
  -      * @see org.apache.xerces.xni.XMLResourceIdentifier#setLiteralSystemId(String)
  -      */
  -     public void setLiteralSystemId(String systemId) {
  +    
  +    /**
  +     * @see org.apache.xerces.xni.XMLResourceIdentifier#setLiteralSystemId(String)
  +     */
  +    public void setLiteralSystemId(String systemId) {
           lsid = systemId;
       }
  -
  -     /**
  -      * @see org.apache.xerces.xni.XMLResourceIdentifier#setPublicId(String)
  -      */
  -     public void setPublicId(String publicId) {}
  -
  +    
  +    /**
  +     * @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
  @@ -123,5 +139,4 @@
       public String getXMLVersion() {
           return null;
       }
  -
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to