You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by an...@locus.apache.org on 2000/10/13 19:54:46 UTC
cvs commit: xml-xerces/java/src/org/apache/xerces/impl XMLDTDScanner.java XMLDocumentScanner.java XMLEntityManager.java
andyc 00/10/13 10:54:45
Modified: java/src/org/apache/xerces/impl Tag: xerces_j_2
XMLDTDScanner.java XMLDocumentScanner.java
XMLEntityManager.java
Log:
1) Updated EntityManager to have a separate addUnparsedEntity
method for unparsed entities. Updated DTDScanner to call it.
2) Updated DocumentScanner to not start an unparsed entity when
it sees an entity reference.
3) Fixed a bug in entity scanner that was swallowing the last
character if the entity ended in content. Now scanAttContent
and scanContent signal end of buffer by return -1 as the
next character. Changed DocumentScanner to not signal a
fatal error if it sees the -1 when scanning content.
Revision Changes Path
No revision
No revision
1.1.2.25 +10 -7 xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLDTDScanner.java
Index: XMLDTDScanner.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLDTDScanner.java,v
retrieving revision 1.1.2.24
retrieving revision 1.1.2.25
diff -u -r1.1.2.24 -r1.1.2.25
--- XMLDTDScanner.java 2000/10/13 00:08:14 1.1.2.24
+++ XMLDTDScanner.java 2000/10/13 17:54:36 1.1.2.25
@@ -85,7 +85,7 @@
* @author Arnaud Le Hors, IBM
* @author Andy Clark, IBM
*
- * @version $Id: XMLDTDScanner.java,v 1.1.2.24 2000/10/13 00:08:14 andyc Exp $
+ * @version $Id: XMLDTDScanner.java,v 1.1.2.25 2000/10/13 17:54:36 andyc Exp $
*/
public class XMLDTDScanner
extends XMLScanner
@@ -1237,15 +1237,18 @@
// register entity and make callback
if (systemId != null) {
if (!fEntityManager.isEntityDeclared(name)) {
- fEntityManager.addExternalEntity(name, publicId, systemId, null, notation);
+ if (notation != null) {
+ fEntityManager.addUnparsedEntity(name, publicId, systemId, notation);
+ }
+ else {
+ fEntityManager.addExternalEntity(name, publicId, systemId, null);
+ }
}
- if (notation != null) {
- if (fDTDHandler != null) {
+ if (fDTDHandler != null) {
+ if (notation != null) {
fDTDHandler.unparsedEntityDecl(name, publicId, systemId, notation);
}
- }
- else {
- if (fDTDHandler != null) {
+ else {
fDTDHandler.externalEntityDecl(name, publicId, systemId);
}
}
1.1.2.27 +10 -2 xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLDocumentScanner.java
Index: XMLDocumentScanner.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLDocumentScanner.java,v
retrieving revision 1.1.2.26
retrieving revision 1.1.2.27
diff -u -r1.1.2.26 -r1.1.2.27
--- XMLDocumentScanner.java 2000/10/12 17:16:16 1.1.2.26
+++ XMLDocumentScanner.java 2000/10/13 17:54:39 1.1.2.27
@@ -101,7 +101,7 @@
* @author Stubs generated by DesignDoc on Mon Sep 11 11:10:57 PDT 2000
* @author Andy Clark, IBM
*
- * @version $Id: XMLDocumentScanner.java,v 1.1.2.26 2000/10/12 17:16:16 andyc Exp $
+ * @version $Id: XMLDocumentScanner.java,v 1.1.2.27 2000/10/13 17:54:39 andyc Exp $
*/
public class XMLDocumentScanner
extends XMLScanner
@@ -1140,7 +1140,13 @@
return;
}
}
- if (fExternalGeneralEntities || !fEntityManager.isEntityExternal(name)) {
+ boolean external = fEntityManager.isEntityExternal(name);
+ boolean unparsed = false;
+ if (external) {
+ fEntityManager.getExternalEntity(name, fExternalEntity);
+ unparsed = fExternalEntity.notation != null;
+ }
+ if ((fExternalGeneralEntities && !unparsed) || !external) {
fEntityManager.startEntity(name);
}
else {
@@ -1830,6 +1836,7 @@
break;
}
else if (c == -1) {
+ /***
fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN, "ETagRequired",
new Object[] {fCurrentElement.rawname},
@@ -1837,6 +1844,7 @@
setScannerState(SCANNER_STATE_TERMINATED);
return false;
+ /***/
}
else if (XMLChar.isInvalid(c)) {
fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN, "InvalidCharInContent",
1.1.2.16 +103 -65 xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLEntityManager.java
Index: XMLEntityManager.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLEntityManager.java,v
retrieving revision 1.1.2.15
retrieving revision 1.1.2.16
diff -u -r1.1.2.15 -r1.1.2.16
--- XMLEntityManager.java 2000/10/13 00:08:15 1.1.2.15
+++ XMLEntityManager.java 2000/10/13 17:54:40 1.1.2.16
@@ -105,7 +105,7 @@
* @author Stubs generated by DesignDoc on Mon Sep 18 18:23:16 PDT 2000
* @author Andy Clark, IBM
*
- * @version $Id: XMLEntityManager.java,v 1.1.2.15 2000/10/13 00:08:15 andyc Exp $
+ * @version $Id: XMLEntityManager.java,v 1.1.2.16 2000/10/13 17:54:40 andyc Exp $
*/
public class XMLEntityManager
implements XMLComponent {
@@ -202,6 +202,17 @@
} // setEntityHandler(XMLEntityHandler)
/**
+ * addInternalEntity
+ *
+ * @param name
+ * @param text
+ */
+ public void addInternalEntity(String name, String text) {
+ Entity entity = new InternalEntity(name, text);
+ fEntities.put(name, entity);
+ } // addInternalEntity(String,String)
+
+ /**
* addExternalEntity
*
* @param name
@@ -211,22 +222,27 @@
* @param notation
*/
public void addExternalEntity(String name,
- String publicId, String systemId, String baseSystemId,
- String notation) {
- Entity entity = new ExternalEntity(name, publicId, systemId, baseSystemId, notation);
+ String publicId, String systemId,
+ String baseSystemId) {
+ Entity entity = new ExternalEntity(name, publicId, systemId, baseSystemId, null);
fEntities.put(name, entity);
} // addExternalEntity(String,String,String,String)
/**
- * addInternalEntity
+ * addUnparsedEntity
*
* @param name
- * @param text
+ * @param publicId
+ * @param systemId
+ * @param baseSystemId
+ * @param notation
*/
- public void addInternalEntity(String name, String text) {
- Entity entity = new InternalEntity(name, text);
+ public void addUnparsedEntity(String name,
+ String publicId, String systemId,
+ String notation) {
+ Entity entity = new ExternalEntity(name, publicId, systemId, null, notation);
fEntities.put(name, entity);
- } // addInternalEntity(String,String)
+ } // addUnparsedEntity(String,String,String,String)
/** Returns the values for an external entity. */
public boolean getExternalEntity(String name, ExternalEntity externalEntity) {
@@ -398,10 +414,10 @@
addInternalEntity("recursive-entity2", "<bar>&recursive-entity3;</bar>");
addInternalEntity("recursive-entity3", "<baz>&recursive-entity;</baz>");
- addExternalEntity("external-text", null, "external-text.ent", "test/external-text.xml", null);
- addExternalEntity("external-balanced-element", null, "external-balanced-element.ent", "test/external-balanced-element.xml", null);
- addExternalEntity("one", null, "ent/one.ent", "test/external-entity.xml", null);
- addExternalEntity("two", null, "ent/two.ent", "test/ent/one.xml", null);
+ addExternalEntity("external-text", null, "external-text.ent", "test/external-text.xml");
+ addExternalEntity("external-balanced-element", null, "external-balanced-element.ent", "test/external-balanced-element.xml");
+ addExternalEntity("one", null, "ent/one.ent", "test/external-entity.xml");
+ addExternalEntity("two", null, "ent/two.ent", "test/ent/one.xml");
}
} // reset(XMLComponentManager)
@@ -520,6 +536,11 @@
protected void endEntity() throws SAXException {
// call handler
+ if (DEBUG_PRINT) {
+ System.out.println("(endEntity: ");
+ print();
+ System.out.println();
+ }
if (fEntityHandler != null) {
fEntityHandler.endEntity(fCurrentEntity.name);
}
@@ -527,6 +548,11 @@
// pop stack
fCurrentEntity = fEntityStack.size() > 0
? (ScannedEntity)fEntityStack.pop() : null;
+ if (DEBUG_PRINT) {
+ System.out.println(")endEntity: ");
+ print();
+ System.out.println();
+ }
} // endEntity()
@@ -736,6 +762,49 @@
} // fixURI(String):String
+ /** Prints the contents of the buffer. */
+ final void print() {
+ if (DEBUG_PRINT) {
+ System.out.print('[');
+ System.out.print(fCurrentEntity.count);
+ if (fCurrentEntity.count > 0) {
+ System.out.print(" \"");
+ for (int i = 0; i < fCurrentEntity.count; i++) {
+ if (i == fCurrentEntity.position) {
+ System.out.print('^');
+ }
+ char c = fCurrentEntity.ch[i];
+ switch (c) {
+ case '\n': {
+ System.out.print("\\n");
+ break;
+ }
+ case '\r': {
+ System.out.print("\\r");
+ break;
+ }
+ case '\t': {
+ System.out.print("\\t");
+ break;
+ }
+ case '\\': {
+ System.out.print("\\\\");
+ break;
+ }
+ default: {
+ System.out.print(c);
+ }
+ }
+ }
+ if (fCurrentEntity.position == fCurrentEntity.count) {
+ System.out.print('^');
+ }
+ System.out.print('"');
+ }
+ System.out.print(']');
+ }
+ } // print()
+
//
// Classes
//
@@ -1244,6 +1313,11 @@
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
load(1);
}
+ if (DEBUG_PRINT) {
+ System.out.print("(scanContent: ");
+ print();
+ System.out.println();
+ }
// REVISIT: Use AndyH trick for grabbing longest runs of
// content characters. -Ac
@@ -1258,11 +1332,17 @@
int length = fCurrentEntity.position - offset;
content.setValues(fCurrentEntity.ch, offset, length);
- if (fCurrentEntity.position == fCurrentEntity.count) {
- fCurrentEntity.position--;
- content.length--;
+ // return next character
+ int c = -1;
+ if (fCurrentEntity.position != fCurrentEntity.count) {
+ c = fCurrentEntity.ch[fCurrentEntity.position];
}
- return fCurrentEntity.ch[fCurrentEntity.position];
+ if (DEBUG_PRINT) {
+ System.out.print(")scanContent: ");
+ print();
+ System.out.println(" -> '"+(char)c+"'");
+ }
+ return c;
} // scanContent(XMLString):int
@@ -1300,16 +1380,17 @@
int length = fCurrentEntity.position - offset;
content.setValues(fCurrentEntity.ch, offset, length);
- if (fCurrentEntity.position == fCurrentEntity.count) {
- fCurrentEntity.position--;
- content.length--;
+ // return next character
+ int c = -1;
+ if (fCurrentEntity.position != fCurrentEntity.count) {
+ c = fCurrentEntity.ch[fCurrentEntity.position];
}
if (DEBUG_PRINT) {
System.out.print(")scanAttContent, '"+(char)quote+"': ");
print();
- System.out.println(" -> '"+fCurrentEntity.ch[fCurrentEntity.position]+"'");
+ System.out.println(" -> '"+(char)c+"'");
}
- return fCurrentEntity.ch[fCurrentEntity.position];
+ return c;
} // scanAttContent(int,XMLString):int
@@ -1580,49 +1661,6 @@
}
} // load(int)
- /** Prints the contents of the buffer. */
- private final void print() {
- if (DEBUG_PRINT) {
- System.out.print('[');
- System.out.print(fCurrentEntity.count);
- if (fCurrentEntity.count > 0) {
- System.out.print(" \"");
- for (int i = 0; i < fCurrentEntity.count; i++) {
- if (i == fCurrentEntity.position) {
- System.out.print('^');
- }
- char c = fCurrentEntity.ch[i];
- switch (c) {
- case '\n': {
- System.out.print("\\n");
- break;
- }
- case '\r': {
- System.out.print("\\r");
- break;
- }
- case '\t': {
- System.out.print("\\t");
- break;
- }
- case '\\': {
- System.out.print("\\\\");
- break;
- }
- default: {
- System.out.print(c);
- }
- }
- }
- if (fCurrentEntity.position == fCurrentEntity.count) {
- System.out.print('^');
- }
- System.out.print('"');
- }
- System.out.print(']');
- }
- } // print()
-
} // class EntityScanner
/**