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]