home *** CD-ROM | disk | FTP | other *** search
- package com.ibm.xml.parsers;
-
- import com.ibm.xml.framework.ContentSpecNode;
- import com.ibm.xml.framework.ElementDeclPool;
- import com.ibm.xml.framework.StringPool;
- import com.ibm.xml.framework.XMLParser;
- import com.ibm.xml.parser.AttDef;
- import com.ibm.xml.parser.Attlist;
- import com.ibm.xml.parser.CM1op;
- import com.ibm.xml.parser.CM2op;
- import com.ibm.xml.parser.CMLeaf;
- import com.ibm.xml.parser.CMNode;
- import com.ibm.xml.parser.ContentModel;
- import com.ibm.xml.parser.DTD;
- import com.ibm.xml.parser.ElementDecl;
- import com.ibm.xml.parser.EntityDecl;
- import com.ibm.xml.parser.EntityPool;
- import com.ibm.xml.parser.ExternalID;
- import com.ibm.xml.parser.Parent;
- import com.ibm.xml.parser.TXDocument;
- import com.ibm.xml.parser.TXNotation;
- import com.ibm.xml.parser.TXText;
- import java.util.Stack;
- import org.w3c.dom.Comment;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.EntityReference;
- import org.w3c.dom.Node;
- import org.w3c.dom.ProcessingInstruction;
- import org.w3c.dom.Text;
- import org.xml.sax.AttributeList;
-
- public class NonValidatingTXDOMParser extends XMLParser {
- public static final boolean DEBUG = false;
- protected String fDocumentClass = "com.ibm.xml.parser.TXDocument";
- protected int fRootElementName = -1;
- protected TXDocument fDocument;
- protected DTD fDocumentType;
- protected EntityPool fEntityPool;
- protected Node fCurrentParent;
- protected Node fCurrentNode;
- protected Stack fNodeStack = new Stack();
- protected boolean fWithinElement = false;
- protected boolean fNormalizeTextNodes = true;
- protected boolean fExpandEntityReferences = false;
- int fAmpIndex = -1;
- int fLtIndex = -1;
- int fGtIndex = -1;
- int fAposIndex = -1;
- int fQuotIndex = -1;
-
- public NonValidatingTXDOMParser() {
- ((XMLParser)this).setDocumentHandler(this);
- ((XMLParser)this).setDocumentTypeHandler(this);
- ((XMLParser)this).getParserState().useDefaultStringPool();
- ((XMLParser)this).getParserState().useDefaultAttrPool();
- ((XMLParser)this).getParserState().useDefaultEntityPool();
- ((XMLParser)this).getParserState().useDefaultElementDeclPool();
- this.init();
- }
-
- public void reset() {
- super.reset();
- this.init();
- }
-
- protected void resetOrCopy() {
- super.resetOrCopy();
- this.init();
- }
-
- protected void init() {
- this.fRootElementName = -1;
- this.fDocument = null;
- this.fDocumentType = null;
- this.fCurrentParent = null;
- this.fCurrentNode = null;
- this.fNodeStack.removeAllElements();
- this.fWithinElement = false;
- this.fNormalizeTextNodes = true;
- this.fExpandEntityReferences = false;
- StringPool var1 = ((XMLParser)this).getParserState().getStringPool();
- this.fAmpIndex = var1.addSymbol("amp");
- this.fLtIndex = var1.addSymbol("lt");
- this.fGtIndex = var1.addSymbol("gt");
- this.fAposIndex = var1.addSymbol("apos");
- this.fQuotIndex = var1.addSymbol("quot");
- }
-
- protected void checkHandlers() throws Exception {
- super.checkHandlers();
- if (this.fDocument == null) {
- this.fDocument = (TXDocument)Class.forName(this.fDocumentClass).newInstance();
- }
-
- }
-
- private void initDTDEntityPool() {
- this.fEntityPool = new EntityPool();
- this.fEntityPool.add(this.fDocument.createEntityDecl("lt", "<", false));
- this.fEntityPool.add(this.fDocument.createEntityDecl("gt", ">", false));
- this.fEntityPool.add(this.fDocument.createEntityDecl("amp", "&", false));
- this.fEntityPool.add(this.fDocument.createEntityDecl("apos", "'", false));
- this.fEntityPool.add(this.fDocument.createEntityDecl("quot", """, false));
- }
-
- public void setNormalizeTextNodes(boolean var1) {
- this.fNormalizeTextNodes = var1;
- }
-
- public void setExpandEntityReferences(boolean var1) {
- this.fExpandEntityReferences = var1;
- }
-
- public boolean getExpandEntityReferences() {
- return this.fExpandEntityReferences;
- }
-
- public void doctypeDecl(int var1) throws Exception {
- this.fRootElementName = var1;
- StringPool var2 = ((XMLParser)this).getParserState().getStringPool();
- String var3 = var2.toString(this.fRootElementName);
- this.fDocumentType = this.fDocument.createDTD(var3, (ExternalID)null);
- if (this.fDocumentType != null) {
- this.initDTDEntityPool();
- this.fDocumentType.setEntityPool(this.fEntityPool);
- this.fCurrentParent.appendChild(this.fDocumentType);
- this.fCurrentNode = this.fDocumentType;
- }
- }
-
- public void startInternalSubset() throws Exception {
- if (this.fDocumentType != null) {
- this.fDocumentType.setParsingExternal(false);
- }
- }
-
- public void endInternalSubset() throws Exception {
- }
-
- public void startExternalSubset(int var1, int var2) throws Exception {
- if (this.fDocumentType != null) {
- StringPool var3 = ((XMLParser)this).getParserState().getStringPool();
- var3.toString(this.fRootElementName);
- if (var1 != -1 && var2 != -1) {
- this.fDocumentType.setExternalID(new ExternalID(var3.toString(var1), var3.toString(var2)));
- } else if (var2 != -1) {
- this.fDocumentType.setExternalID(new ExternalID(var3.toString(var2)));
- }
-
- this.fDocumentType.setParsingExternal(true);
- }
- }
-
- public void endExternalSubset() throws Exception {
- if (this.fDocumentType != null) {
- this.fDocumentType.setParsingExternal(false);
- }
- }
-
- public void elementDecl(int var1) throws Exception {
- if (this.fDocumentType != null) {
- ElementDeclPool var2 = ((XMLParser)this).getParserState().getElementDeclPool();
- String var3 = ((XMLParser)this).getParserState().getStringPool().toString(var2.getElementName(var1));
- int var4 = var2.getContentSpecType(var1);
- ContentModel var5 = null;
- Object var6 = null;
- switch (var4) {
- case 1:
- var5 = this.fDocument.createContentModel(1);
- break;
- case 2:
- var5 = this.fDocument.createContentModel(2);
- break;
- case 3:
- case 4:
- int var7 = var2.getContentSpec(var1);
- var5 = this.fDocument.createContentModel(this.buildCMNode(var1, var7));
- }
-
- if (var5 != null) {
- ElementDecl var8 = this.fDocument.createElementDecl(var3, var5);
- if (var8 == null) {
- return;
- }
-
- this.fDocumentType.appendChild(var8);
- this.fCurrentNode = var8;
- }
-
- }
- }
-
- protected CMNode buildCMNode(int var1, int var2) {
- StringPool var3 = ((XMLParser)this).getParserState().getStringPool();
- ElementDeclPool var4 = ((XMLParser)this).getParserState().getElementDeclPool();
- ContentSpecNode var5 = new ContentSpecNode();
- ContentSpecNode var6 = new ContentSpecNode();
- var4.getContentSpecNode(var2, var5);
- int var7 = var5.type;
- int var8 = var5.value;
- switch (var7) {
- case 0:
- String var9 = var8 == -1 ? "#PCDATA" : var3.toString(var8);
- return new CMLeaf(var9);
- case 1:
- var4.getContentSpecNode(var2, var6);
- return new CM1op(63, this.buildCMNode(var1, var6.value));
- case 2:
- var4.getContentSpecNode(var2, var6);
- return new CM1op(42, this.buildCMNode(var1, var6.value));
- case 3:
- var4.getContentSpecNode(var2, var6);
- return new CM1op(43, this.buildCMNode(var1, var6.value));
- case 4:
- var4.getContentSpecNode(var2, var6);
- return new CM2op(124, this.buildCMNode(var1, var6.value), this.buildCMNode(var1, var6.otherValue));
- case 5:
- var4.getContentSpecNode(var2, var6);
- return new CM2op(44, this.buildCMNode(var1, var6.value), this.buildCMNode(var1, var6.otherValue));
- default:
- return null;
- }
- }
-
- public void attlistDecl(int var1, int var2) throws Exception {
- if (this.fDocumentType != null) {
- StringPool var3 = ((XMLParser)this).getParserState().getStringPool();
- ElementDeclPool var4 = ((XMLParser)this).getParserState().getElementDeclPool();
- int var5 = var4.getElementName(var1);
- var3.toString(var5);
- Attlist var6 = this.fDocument.createAttlist(var3.toString(var5));
- AttDef var7 = this.fDocument.createAttDef(var3.toString(var4.getAttName(var2)));
- if (var6 != null && var7 != null) {
- if (var4.getAttType(var2) < 9) {
- var7.setDeclaredType(var4.getAttType(var2) + 1);
- } else {
- if (var4.getAttType(var2) != 9) {
- System.err.println("ERROR: UNKNOWN AttType:" + var4.getAttType(var2));
- return;
- }
-
- var7.setDeclaredType(10);
- }
-
- if (var4.getAttType(var2) == 9 | var4.getAttType(var2) == 8) {
- int[] var8 = var3.stringsInList(var4.getEnumeration(var2));
-
- for(int var9 = 0; var9 < var8.length; ++var9) {
- var7.addElement(var3.toString(var8[var9]));
- }
- }
-
- switch (var4.getAttDefaultType(var2)) {
- case 1:
- var7.setDefaultType(-1);
- break;
- case 2:
- var7.setDefaultType(2);
- break;
- case 3:
- var7.setDefaultType(3);
- break;
- case 4:
- var7.setDefaultType(1);
- break;
- default:
- var7.setDefaultType(0);
- }
-
- int var10 = var4.getAttValue(var2);
- if (var10 != -1) {
- var7.setDefaultStringValue(var3.toString(var10));
- }
-
- var6.addElement(var7);
- this.fDocumentType.appendChild(var6);
- this.fCurrentNode = var6;
- }
- }
- }
-
- public void internalEntityDecl(int var1) throws Exception {
- if (this.fDocumentType != null) {
- StringPool var2 = ((XMLParser)this).getParserState().getStringPool();
- com.ibm.xml.framework.EntityPool var3 = ((XMLParser)this).getParserState().getEntityPool();
- String var4 = var2.toString(var3.getEntityName(var1));
- String var5 = var2.toString(var3.getEntityValue(var1));
- EntityDecl var6 = this.fDocument.createEntityDecl(var4, var5, false);
- if (var6 != null) {
- Text var7 = this.fDocument.createTextNode(var5);
- if (var7 != null) {
- ((Parent)var6).appendChild(var7);
- }
-
- this.fDocumentType.appendChild(var6);
- this.fEntityPool.add(var6);
- this.fCurrentNode = var6;
- }
- }
- }
-
- public void externalEntityDecl(int var1) throws Exception {
- if (this.fDocumentType != null) {
- StringPool var2 = ((XMLParser)this).getParserState().getStringPool();
- com.ibm.xml.framework.EntityPool var3 = ((XMLParser)this).getParserState().getEntityPool();
- String var4 = var2.toString(var3.getEntityName(var1));
- String var5 = var2.toString(var3.getPublicId(var1));
- String var6 = var2.toString(var3.getSystemId(var1));
- EntityDecl var7 = this.fDocument.createEntityDecl(var4, new ExternalID(var5, var6), false, (String)null);
- if (var7 != null) {
- this.fDocumentType.appendChild(var7);
- this.fEntityPool.add(var7);
- this.fCurrentNode = var7;
- }
- }
- }
-
- public void unparsedEntityDecl(int var1) throws Exception {
- if (this.fDocumentType != null) {
- StringPool var2 = ((XMLParser)this).getParserState().getStringPool();
- com.ibm.xml.framework.EntityPool var3 = ((XMLParser)this).getParserState().getEntityPool();
- String var4 = var2.toString(var3.getEntityName(var1));
- String var5 = var2.toString(var3.getPublicId(var1));
- String var6 = var2.toString(var3.getSystemId(var1));
- String var7 = var2.toString(var3.getNotationName(var1));
- EntityDecl var8 = this.fDocument.createEntityDecl(var4, new ExternalID(var5, var6), false, var7);
- if (var8 != null) {
- this.fDocumentType.appendChild(var8);
- this.fEntityPool.add(var8);
- this.fCurrentNode = var8;
- }
- }
- }
-
- public void parameterEntityDecl(int var1) {
- StringPool var2 = ((XMLParser)this).getParserState().getStringPool();
- com.ibm.xml.framework.EntityPool var3 = ((XMLParser)this).getParserState().getParameterEntityPool();
- String var4 = var2.toString(var3.getEntityName(var1));
- String var5 = var2.toString(var3.getPublicId(var1));
- String var6 = var2.toString(var3.getSystemId(var1));
- String var7 = var2.toString(var3.getNotationName(var1));
- String var8 = var2.toString(var3.getEntityValue(var1));
- Object var9 = null;
- EntityDecl var10;
- if (var3.isExternal(var1)) {
- var10 = this.fDocument.createEntityDecl(var4, new ExternalID(var5, var6), true, var7);
- } else {
- var10 = this.fDocument.createEntityDecl(var4, var8, true);
- }
-
- if (var10 != null) {
- this.fDocumentType.appendChild(var10);
- this.fEntityPool.add(var10);
- this.fCurrentNode = var10;
- }
- }
-
- public void notationDecl(int var1) throws Exception {
- if (this.fDocumentType != null) {
- StringPool var2 = ((XMLParser)this).getParserState().getStringPool();
- com.ibm.xml.framework.EntityPool var3 = ((XMLParser)this).getParserState().getEntityPool();
- String var4 = var2.toString(var3.getNotationName(var1));
- String var5 = var2.toString(var3.getPublicId(var1));
- String var6 = var2.toString(var3.getSystemId(var1));
- TXNotation var7 = this.fDocument.createNotation(var4, new ExternalID(var5, var6));
- if (var7 != null) {
- this.fDocumentType.appendChild(var7);
- this.fCurrentNode = var7;
- }
- }
- }
-
- public void setDocumentClass(String var1) {
- this.fDocumentClass = var1;
- }
-
- public Document getDocument() {
- return this.fDocument;
- }
-
- public void startDocument(int var1, int var2, int var3) throws Exception {
- if (this.fDocument != null) {
- this.fCurrentParent = this.fDocument;
- this.fCurrentNode = this.fDocument;
- StringPool var4 = ((XMLParser)this).getParserState().getStringPool();
- String var5 = var4.orphanString(var1);
- String var6 = var4.orphanString(var2);
- String var7 = var4.orphanString(var3);
- if (var5 != null) {
- this.fDocument.setVersion(var5);
- }
-
- if (var6 != null) {
- this.fDocument.setEncoding(var6);
- }
-
- if (var7 != null) {
- this.fDocument.setStandalone(var7);
- }
-
- }
- }
-
- public void endDocument() throws Exception {
- }
-
- public void startElement(int var1, int var2) throws Exception {
- String var3 = ((XMLParser)this).getParserState().getStringPool().toString(var1);
- AttributeList var4 = ((XMLParser)this).getParserState().getAttrPool().getAttributeList(var2);
- Element var5 = this.fDocument.createElement(var3);
- if (var5 != null) {
- int var6 = var4.getLength();
-
- for(int var7 = 0; var7 < var6; ++var7) {
- var5.setAttribute(var4.getName(var7), var4.getValue(var7));
- if (this.fDocumentType != null && var4.getType(var7).equals("ID")) {
- this.fDocumentType.registID(var5, var4.getValue(var7));
- }
- }
-
- ((XMLParser)this).getParserState().getAttrPool().releaseAttrList(var2);
- this.fCurrentParent.appendChild(var5);
- this.fNodeStack.push(this.fCurrentParent);
- this.fCurrentParent = var5;
- this.fCurrentNode = var5;
- this.fWithinElement = true;
- }
- }
-
- public void endElement(int var1) throws Exception {
- this.fCurrentParent = (Node)this.fNodeStack.pop();
- this.fCurrentNode = this.fCurrentParent;
- this.fWithinElement = false;
- }
-
- public void startEntityReference(int var1) throws Exception {
- if (!this.fExpandEntityReferences) {
- com.ibm.xml.framework.EntityPool var2 = ((XMLParser)this).getParserState().getEntityPool();
- int var3 = var2.getEntityName(var1);
- if (var3 != this.fAmpIndex && var3 != this.fGtIndex && var3 != this.fLtIndex && var3 != this.fAposIndex && var3 != this.fQuotIndex) {
- StringPool var4 = ((XMLParser)this).getParserState().getStringPool();
- String var5 = var4.toString(var2.getEntityName(var1));
- EntityReference var6 = this.fDocument.createEntityReference(var5);
- if (var6 != null) {
- this.fCurrentParent.appendChild(var6);
- this.fNodeStack.push(this.fCurrentParent);
- this.fCurrentParent = var6;
- this.fCurrentNode = var6;
- }
- }
- }
- }
-
- public void endEntityReference(int var1) throws Exception {
- if (!this.fExpandEntityReferences) {
- int var2 = ((XMLParser)this).getParserState().getEntityPool().getEntityName(var1);
- if (var2 != this.fAmpIndex && var2 != this.fGtIndex && var2 != this.fLtIndex && var2 != this.fAposIndex && var2 != this.fQuotIndex) {
- this.fCurrentParent = (Node)this.fNodeStack.pop();
- this.fCurrentNode = this.fCurrentParent;
- }
- }
- }
-
- public void characters(int var1, boolean var2) throws Exception {
- Object var3 = null;
- if (var2) {
- var3 = this.fDocument.createCDATASection(((XMLParser)this).getParserState().getStringPool().orphanString(var1));
- } else {
- if (this.fNormalizeTextNodes && this.fWithinElement && this.fCurrentNode.getNodeType() == 3 && this.fCurrentNode.getParentNode().getNodeType() == 1) {
- ((Text)this.fCurrentNode).appendData(((XMLParser)this).getParserState().getStringPool().orphanString(var1));
- return;
- }
-
- var3 = this.fDocument.createTextNode(((XMLParser)this).getParserState().getStringPool().orphanString(var1));
- }
-
- if (var3 != null) {
- this.fCurrentParent.appendChild((Node)var3);
- this.fCurrentNode = (Node)var3;
- }
- }
-
- public void ignorableWhitespace(int var1, boolean var2) throws Exception {
- Object var3 = null;
- if (var2) {
- var3 = this.fDocument.createCDATASection(((XMLParser)this).getParserState().getStringPool().orphanString(var1));
- } else {
- var3 = this.fDocument.createTextNode(((XMLParser)this).getParserState().getStringPool().orphanString(var1), true);
- }
-
- if (var3 != null) {
- ((TXText)var3).setIsIgnorableWhitespace(true);
- this.fCurrentParent.appendChild((Node)var3);
- this.fCurrentNode = (Node)var3;
- }
- }
-
- public void processingInstruction(int var1, int var2) throws Exception {
- String var3 = ((XMLParser)this).getParserState().getStringPool().orphanString(var1);
- Object var4 = null;
- String var6;
- if (var2 >= 0) {
- var6 = ((XMLParser)this).getParserState().getStringPool().orphanString(var2);
- } else {
- var6 = "";
- }
-
- ProcessingInstruction var5 = this.fDocument.createProcessingInstruction(var3, var6);
- if (var5 != null) {
- this.fCurrentParent.appendChild(var5);
- this.fCurrentNode = var5;
- }
- }
-
- public void comment(int var1) throws Exception {
- Comment var2 = this.fDocument.createComment(((XMLParser)this).getParserState().getStringPool().orphanString(var1));
- if (var2 != null) {
- this.fCurrentParent.appendChild(var2);
- this.fCurrentNode = var2;
- }
- }
-
- public void characters(char[] var1, int var2, int var3, boolean var4) throws Exception {
- Object var5 = null;
- if (var4) {
- var5 = this.fDocument.createCDATASection(new String(var1, var2, var3));
- } else {
- if (this.fNormalizeTextNodes && this.fWithinElement && this.fCurrentNode.getNodeType() == 3 && this.fCurrentNode.getParentNode().getNodeType() == 1) {
- ((Text)this.fCurrentNode).appendData(new String(var1, var2, var3));
- return;
- }
-
- var5 = this.fDocument.createTextNode(new String(var1, var2, var3));
- }
-
- if (var5 != null) {
- this.fCurrentParent.appendChild((Node)var5);
- this.fCurrentNode = (Node)var5;
- }
- }
-
- public void ignorableWhitespace(char[] var1, int var2, int var3, boolean var4) throws Exception {
- Object var5 = null;
- if (var4) {
- var5 = this.fDocument.createCDATASection(new String(var1, var2, var3));
- } else {
- var5 = this.fDocument.createTextNode(new String(var1, var2, var3));
- }
-
- if (var5 != null) {
- ((TXText)var5).setIsIgnorableWhitespace(true);
- this.fCurrentParent.appendChild((Node)var5);
- this.fCurrentNode = (Node)var5;
- }
- }
- }
-