home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xml4j.jar / com / ibm / xml / parsers / NonValidatingTXDOMParser.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-08-30  |  11.5 KB  |  558 lines

  1. package com.ibm.xml.parsers;
  2.  
  3. import com.ibm.xml.framework.ContentSpecNode;
  4. import com.ibm.xml.framework.ElementDeclPool;
  5. import com.ibm.xml.framework.StringPool;
  6. import com.ibm.xml.framework.XMLParser;
  7. import com.ibm.xml.parser.AttDef;
  8. import com.ibm.xml.parser.Attlist;
  9. import com.ibm.xml.parser.CM1op;
  10. import com.ibm.xml.parser.CM2op;
  11. import com.ibm.xml.parser.CMLeaf;
  12. import com.ibm.xml.parser.CMNode;
  13. import com.ibm.xml.parser.ContentModel;
  14. import com.ibm.xml.parser.DTD;
  15. import com.ibm.xml.parser.ElementDecl;
  16. import com.ibm.xml.parser.EntityDecl;
  17. import com.ibm.xml.parser.EntityPool;
  18. import com.ibm.xml.parser.ExternalID;
  19. import com.ibm.xml.parser.Parent;
  20. import com.ibm.xml.parser.TXDocument;
  21. import com.ibm.xml.parser.TXNotation;
  22. import com.ibm.xml.parser.TXText;
  23. import java.util.Stack;
  24. import org.w3c.dom.Comment;
  25. import org.w3c.dom.Document;
  26. import org.w3c.dom.Element;
  27. import org.w3c.dom.EntityReference;
  28. import org.w3c.dom.Node;
  29. import org.w3c.dom.ProcessingInstruction;
  30. import org.w3c.dom.Text;
  31. import org.xml.sax.AttributeList;
  32.  
  33. public class NonValidatingTXDOMParser extends XMLParser {
  34.    public static final boolean DEBUG = false;
  35.    protected String fDocumentClass = "com.ibm.xml.parser.TXDocument";
  36.    protected int fRootElementName = -1;
  37.    protected TXDocument fDocument;
  38.    protected DTD fDocumentType;
  39.    protected EntityPool fEntityPool;
  40.    protected Node fCurrentParent;
  41.    protected Node fCurrentNode;
  42.    protected Stack fNodeStack = new Stack();
  43.    protected boolean fWithinElement = false;
  44.    protected boolean fNormalizeTextNodes = true;
  45.    protected boolean fExpandEntityReferences = false;
  46.    int fAmpIndex = -1;
  47.    int fLtIndex = -1;
  48.    int fGtIndex = -1;
  49.    int fAposIndex = -1;
  50.    int fQuotIndex = -1;
  51.  
  52.    public NonValidatingTXDOMParser() {
  53.       ((XMLParser)this).setDocumentHandler(this);
  54.       ((XMLParser)this).setDocumentTypeHandler(this);
  55.       ((XMLParser)this).getParserState().useDefaultStringPool();
  56.       ((XMLParser)this).getParserState().useDefaultAttrPool();
  57.       ((XMLParser)this).getParserState().useDefaultEntityPool();
  58.       ((XMLParser)this).getParserState().useDefaultElementDeclPool();
  59.       this.init();
  60.    }
  61.  
  62.    public void reset() {
  63.       super.reset();
  64.       this.init();
  65.    }
  66.  
  67.    protected void resetOrCopy() {
  68.       super.resetOrCopy();
  69.       this.init();
  70.    }
  71.  
  72.    protected void init() {
  73.       this.fRootElementName = -1;
  74.       this.fDocument = null;
  75.       this.fDocumentType = null;
  76.       this.fCurrentParent = null;
  77.       this.fCurrentNode = null;
  78.       this.fNodeStack.removeAllElements();
  79.       this.fWithinElement = false;
  80.       this.fNormalizeTextNodes = true;
  81.       this.fExpandEntityReferences = false;
  82.       StringPool var1 = ((XMLParser)this).getParserState().getStringPool();
  83.       this.fAmpIndex = var1.addSymbol("amp");
  84.       this.fLtIndex = var1.addSymbol("lt");
  85.       this.fGtIndex = var1.addSymbol("gt");
  86.       this.fAposIndex = var1.addSymbol("apos");
  87.       this.fQuotIndex = var1.addSymbol("quot");
  88.    }
  89.  
  90.    protected void checkHandlers() throws Exception {
  91.       super.checkHandlers();
  92.       if (this.fDocument == null) {
  93.          this.fDocument = (TXDocument)Class.forName(this.fDocumentClass).newInstance();
  94.       }
  95.  
  96.    }
  97.  
  98.    private void initDTDEntityPool() {
  99.       this.fEntityPool = new EntityPool();
  100.       this.fEntityPool.add(this.fDocument.createEntityDecl("lt", "<", false));
  101.       this.fEntityPool.add(this.fDocument.createEntityDecl("gt", ">", false));
  102.       this.fEntityPool.add(this.fDocument.createEntityDecl("amp", "&", false));
  103.       this.fEntityPool.add(this.fDocument.createEntityDecl("apos", "'", false));
  104.       this.fEntityPool.add(this.fDocument.createEntityDecl("quot", """, false));
  105.    }
  106.  
  107.    public void setNormalizeTextNodes(boolean var1) {
  108.       this.fNormalizeTextNodes = var1;
  109.    }
  110.  
  111.    public void setExpandEntityReferences(boolean var1) {
  112.       this.fExpandEntityReferences = var1;
  113.    }
  114.  
  115.    public boolean getExpandEntityReferences() {
  116.       return this.fExpandEntityReferences;
  117.    }
  118.  
  119.    public void doctypeDecl(int var1) throws Exception {
  120.       this.fRootElementName = var1;
  121.       StringPool var2 = ((XMLParser)this).getParserState().getStringPool();
  122.       String var3 = var2.toString(this.fRootElementName);
  123.       this.fDocumentType = this.fDocument.createDTD(var3, (ExternalID)null);
  124.       if (this.fDocumentType != null) {
  125.          this.initDTDEntityPool();
  126.          this.fDocumentType.setEntityPool(this.fEntityPool);
  127.          this.fCurrentParent.appendChild(this.fDocumentType);
  128.          this.fCurrentNode = this.fDocumentType;
  129.       }
  130.    }
  131.  
  132.    public void startInternalSubset() throws Exception {
  133.       if (this.fDocumentType != null) {
  134.          this.fDocumentType.setParsingExternal(false);
  135.       }
  136.    }
  137.  
  138.    public void endInternalSubset() throws Exception {
  139.    }
  140.  
  141.    public void startExternalSubset(int var1, int var2) throws Exception {
  142.       if (this.fDocumentType != null) {
  143.          StringPool var3 = ((XMLParser)this).getParserState().getStringPool();
  144.          var3.toString(this.fRootElementName);
  145.          if (var1 != -1 && var2 != -1) {
  146.             this.fDocumentType.setExternalID(new ExternalID(var3.toString(var1), var3.toString(var2)));
  147.          } else if (var2 != -1) {
  148.             this.fDocumentType.setExternalID(new ExternalID(var3.toString(var2)));
  149.          }
  150.  
  151.          this.fDocumentType.setParsingExternal(true);
  152.       }
  153.    }
  154.  
  155.    public void endExternalSubset() throws Exception {
  156.       if (this.fDocumentType != null) {
  157.          this.fDocumentType.setParsingExternal(false);
  158.       }
  159.    }
  160.  
  161.    public void elementDecl(int var1) throws Exception {
  162.       if (this.fDocumentType != null) {
  163.          ElementDeclPool var2 = ((XMLParser)this).getParserState().getElementDeclPool();
  164.          String var3 = ((XMLParser)this).getParserState().getStringPool().toString(var2.getElementName(var1));
  165.          int var4 = var2.getContentSpecType(var1);
  166.          ContentModel var5 = null;
  167.          Object var6 = null;
  168.          switch (var4) {
  169.             case 1:
  170.                var5 = this.fDocument.createContentModel(1);
  171.                break;
  172.             case 2:
  173.                var5 = this.fDocument.createContentModel(2);
  174.                break;
  175.             case 3:
  176.             case 4:
  177.                int var7 = var2.getContentSpec(var1);
  178.                var5 = this.fDocument.createContentModel(this.buildCMNode(var1, var7));
  179.          }
  180.  
  181.          if (var5 != null) {
  182.             ElementDecl var8 = this.fDocument.createElementDecl(var3, var5);
  183.             if (var8 == null) {
  184.                return;
  185.             }
  186.  
  187.             this.fDocumentType.appendChild(var8);
  188.             this.fCurrentNode = var8;
  189.          }
  190.  
  191.       }
  192.    }
  193.  
  194.    protected CMNode buildCMNode(int var1, int var2) {
  195.       StringPool var3 = ((XMLParser)this).getParserState().getStringPool();
  196.       ElementDeclPool var4 = ((XMLParser)this).getParserState().getElementDeclPool();
  197.       ContentSpecNode var5 = new ContentSpecNode();
  198.       ContentSpecNode var6 = new ContentSpecNode();
  199.       var4.getContentSpecNode(var2, var5);
  200.       int var7 = var5.type;
  201.       int var8 = var5.value;
  202.       switch (var7) {
  203.          case 0:
  204.             String var9 = var8 == -1 ? "#PCDATA" : var3.toString(var8);
  205.             return new CMLeaf(var9);
  206.          case 1:
  207.             var4.getContentSpecNode(var2, var6);
  208.             return new CM1op(63, this.buildCMNode(var1, var6.value));
  209.          case 2:
  210.             var4.getContentSpecNode(var2, var6);
  211.             return new CM1op(42, this.buildCMNode(var1, var6.value));
  212.          case 3:
  213.             var4.getContentSpecNode(var2, var6);
  214.             return new CM1op(43, this.buildCMNode(var1, var6.value));
  215.          case 4:
  216.             var4.getContentSpecNode(var2, var6);
  217.             return new CM2op(124, this.buildCMNode(var1, var6.value), this.buildCMNode(var1, var6.otherValue));
  218.          case 5:
  219.             var4.getContentSpecNode(var2, var6);
  220.             return new CM2op(44, this.buildCMNode(var1, var6.value), this.buildCMNode(var1, var6.otherValue));
  221.          default:
  222.             return null;
  223.       }
  224.    }
  225.  
  226.    public void attlistDecl(int var1, int var2) throws Exception {
  227.       if (this.fDocumentType != null) {
  228.          StringPool var3 = ((XMLParser)this).getParserState().getStringPool();
  229.          ElementDeclPool var4 = ((XMLParser)this).getParserState().getElementDeclPool();
  230.          int var5 = var4.getElementName(var1);
  231.          var3.toString(var5);
  232.          Attlist var6 = this.fDocument.createAttlist(var3.toString(var5));
  233.          AttDef var7 = this.fDocument.createAttDef(var3.toString(var4.getAttName(var2)));
  234.          if (var6 != null && var7 != null) {
  235.             if (var4.getAttType(var2) < 9) {
  236.                var7.setDeclaredType(var4.getAttType(var2) + 1);
  237.             } else {
  238.                if (var4.getAttType(var2) != 9) {
  239.                   System.err.println("ERROR: UNKNOWN AttType:" + var4.getAttType(var2));
  240.                   return;
  241.                }
  242.  
  243.                var7.setDeclaredType(10);
  244.             }
  245.  
  246.             if (var4.getAttType(var2) == 9 | var4.getAttType(var2) == 8) {
  247.                int[] var8 = var3.stringsInList(var4.getEnumeration(var2));
  248.  
  249.                for(int var9 = 0; var9 < var8.length; ++var9) {
  250.                   var7.addElement(var3.toString(var8[var9]));
  251.                }
  252.             }
  253.  
  254.             switch (var4.getAttDefaultType(var2)) {
  255.                case 1:
  256.                   var7.setDefaultType(-1);
  257.                   break;
  258.                case 2:
  259.                   var7.setDefaultType(2);
  260.                   break;
  261.                case 3:
  262.                   var7.setDefaultType(3);
  263.                   break;
  264.                case 4:
  265.                   var7.setDefaultType(1);
  266.                   break;
  267.                default:
  268.                   var7.setDefaultType(0);
  269.             }
  270.  
  271.             int var10 = var4.getAttValue(var2);
  272.             if (var10 != -1) {
  273.                var7.setDefaultStringValue(var3.toString(var10));
  274.             }
  275.  
  276.             var6.addElement(var7);
  277.             this.fDocumentType.appendChild(var6);
  278.             this.fCurrentNode = var6;
  279.          }
  280.       }
  281.    }
  282.  
  283.    public void internalEntityDecl(int var1) throws Exception {
  284.       if (this.fDocumentType != null) {
  285.          StringPool var2 = ((XMLParser)this).getParserState().getStringPool();
  286.          com.ibm.xml.framework.EntityPool var3 = ((XMLParser)this).getParserState().getEntityPool();
  287.          String var4 = var2.toString(var3.getEntityName(var1));
  288.          String var5 = var2.toString(var3.getEntityValue(var1));
  289.          EntityDecl var6 = this.fDocument.createEntityDecl(var4, var5, false);
  290.          if (var6 != null) {
  291.             Text var7 = this.fDocument.createTextNode(var5);
  292.             if (var7 != null) {
  293.                ((Parent)var6).appendChild(var7);
  294.             }
  295.  
  296.             this.fDocumentType.appendChild(var6);
  297.             this.fEntityPool.add(var6);
  298.             this.fCurrentNode = var6;
  299.          }
  300.       }
  301.    }
  302.  
  303.    public void externalEntityDecl(int var1) throws Exception {
  304.       if (this.fDocumentType != null) {
  305.          StringPool var2 = ((XMLParser)this).getParserState().getStringPool();
  306.          com.ibm.xml.framework.EntityPool var3 = ((XMLParser)this).getParserState().getEntityPool();
  307.          String var4 = var2.toString(var3.getEntityName(var1));
  308.          String var5 = var2.toString(var3.getPublicId(var1));
  309.          String var6 = var2.toString(var3.getSystemId(var1));
  310.          EntityDecl var7 = this.fDocument.createEntityDecl(var4, new ExternalID(var5, var6), false, (String)null);
  311.          if (var7 != null) {
  312.             this.fDocumentType.appendChild(var7);
  313.             this.fEntityPool.add(var7);
  314.             this.fCurrentNode = var7;
  315.          }
  316.       }
  317.    }
  318.  
  319.    public void unparsedEntityDecl(int var1) throws Exception {
  320.       if (this.fDocumentType != null) {
  321.          StringPool var2 = ((XMLParser)this).getParserState().getStringPool();
  322.          com.ibm.xml.framework.EntityPool var3 = ((XMLParser)this).getParserState().getEntityPool();
  323.          String var4 = var2.toString(var3.getEntityName(var1));
  324.          String var5 = var2.toString(var3.getPublicId(var1));
  325.          String var6 = var2.toString(var3.getSystemId(var1));
  326.          String var7 = var2.toString(var3.getNotationName(var1));
  327.          EntityDecl var8 = this.fDocument.createEntityDecl(var4, new ExternalID(var5, var6), false, var7);
  328.          if (var8 != null) {
  329.             this.fDocumentType.appendChild(var8);
  330.             this.fEntityPool.add(var8);
  331.             this.fCurrentNode = var8;
  332.          }
  333.       }
  334.    }
  335.  
  336.    public void parameterEntityDecl(int var1) {
  337.       StringPool var2 = ((XMLParser)this).getParserState().getStringPool();
  338.       com.ibm.xml.framework.EntityPool var3 = ((XMLParser)this).getParserState().getParameterEntityPool();
  339.       String var4 = var2.toString(var3.getEntityName(var1));
  340.       String var5 = var2.toString(var3.getPublicId(var1));
  341.       String var6 = var2.toString(var3.getSystemId(var1));
  342.       String var7 = var2.toString(var3.getNotationName(var1));
  343.       String var8 = var2.toString(var3.getEntityValue(var1));
  344.       Object var9 = null;
  345.       EntityDecl var10;
  346.       if (var3.isExternal(var1)) {
  347.          var10 = this.fDocument.createEntityDecl(var4, new ExternalID(var5, var6), true, var7);
  348.       } else {
  349.          var10 = this.fDocument.createEntityDecl(var4, var8, true);
  350.       }
  351.  
  352.       if (var10 != null) {
  353.          this.fDocumentType.appendChild(var10);
  354.          this.fEntityPool.add(var10);
  355.          this.fCurrentNode = var10;
  356.       }
  357.    }
  358.  
  359.    public void notationDecl(int var1) throws Exception {
  360.       if (this.fDocumentType != null) {
  361.          StringPool var2 = ((XMLParser)this).getParserState().getStringPool();
  362.          com.ibm.xml.framework.EntityPool var3 = ((XMLParser)this).getParserState().getEntityPool();
  363.          String var4 = var2.toString(var3.getNotationName(var1));
  364.          String var5 = var2.toString(var3.getPublicId(var1));
  365.          String var6 = var2.toString(var3.getSystemId(var1));
  366.          TXNotation var7 = this.fDocument.createNotation(var4, new ExternalID(var5, var6));
  367.          if (var7 != null) {
  368.             this.fDocumentType.appendChild(var7);
  369.             this.fCurrentNode = var7;
  370.          }
  371.       }
  372.    }
  373.  
  374.    public void setDocumentClass(String var1) {
  375.       this.fDocumentClass = var1;
  376.    }
  377.  
  378.    public Document getDocument() {
  379.       return this.fDocument;
  380.    }
  381.  
  382.    public void startDocument(int var1, int var2, int var3) throws Exception {
  383.       if (this.fDocument != null) {
  384.          this.fCurrentParent = this.fDocument;
  385.          this.fCurrentNode = this.fDocument;
  386.          StringPool var4 = ((XMLParser)this).getParserState().getStringPool();
  387.          String var5 = var4.orphanString(var1);
  388.          String var6 = var4.orphanString(var2);
  389.          String var7 = var4.orphanString(var3);
  390.          if (var5 != null) {
  391.             this.fDocument.setVersion(var5);
  392.          }
  393.  
  394.          if (var6 != null) {
  395.             this.fDocument.setEncoding(var6);
  396.          }
  397.  
  398.          if (var7 != null) {
  399.             this.fDocument.setStandalone(var7);
  400.          }
  401.  
  402.       }
  403.    }
  404.  
  405.    public void endDocument() throws Exception {
  406.    }
  407.  
  408.    public void startElement(int var1, int var2) throws Exception {
  409.       String var3 = ((XMLParser)this).getParserState().getStringPool().toString(var1);
  410.       AttributeList var4 = ((XMLParser)this).getParserState().getAttrPool().getAttributeList(var2);
  411.       Element var5 = this.fDocument.createElement(var3);
  412.       if (var5 != null) {
  413.          int var6 = var4.getLength();
  414.  
  415.          for(int var7 = 0; var7 < var6; ++var7) {
  416.             var5.setAttribute(var4.getName(var7), var4.getValue(var7));
  417.             if (this.fDocumentType != null && var4.getType(var7).equals("ID")) {
  418.                this.fDocumentType.registID(var5, var4.getValue(var7));
  419.             }
  420.          }
  421.  
  422.          ((XMLParser)this).getParserState().getAttrPool().releaseAttrList(var2);
  423.          this.fCurrentParent.appendChild(var5);
  424.          this.fNodeStack.push(this.fCurrentParent);
  425.          this.fCurrentParent = var5;
  426.          this.fCurrentNode = var5;
  427.          this.fWithinElement = true;
  428.       }
  429.    }
  430.  
  431.    public void endElement(int var1) throws Exception {
  432.       this.fCurrentParent = (Node)this.fNodeStack.pop();
  433.       this.fCurrentNode = this.fCurrentParent;
  434.       this.fWithinElement = false;
  435.    }
  436.  
  437.    public void startEntityReference(int var1) throws Exception {
  438.       if (!this.fExpandEntityReferences) {
  439.          com.ibm.xml.framework.EntityPool var2 = ((XMLParser)this).getParserState().getEntityPool();
  440.          int var3 = var2.getEntityName(var1);
  441.          if (var3 != this.fAmpIndex && var3 != this.fGtIndex && var3 != this.fLtIndex && var3 != this.fAposIndex && var3 != this.fQuotIndex) {
  442.             StringPool var4 = ((XMLParser)this).getParserState().getStringPool();
  443.             String var5 = var4.toString(var2.getEntityName(var1));
  444.             EntityReference var6 = this.fDocument.createEntityReference(var5);
  445.             if (var6 != null) {
  446.                this.fCurrentParent.appendChild(var6);
  447.                this.fNodeStack.push(this.fCurrentParent);
  448.                this.fCurrentParent = var6;
  449.                this.fCurrentNode = var6;
  450.             }
  451.          }
  452.       }
  453.    }
  454.  
  455.    public void endEntityReference(int var1) throws Exception {
  456.       if (!this.fExpandEntityReferences) {
  457.          int var2 = ((XMLParser)this).getParserState().getEntityPool().getEntityName(var1);
  458.          if (var2 != this.fAmpIndex && var2 != this.fGtIndex && var2 != this.fLtIndex && var2 != this.fAposIndex && var2 != this.fQuotIndex) {
  459.             this.fCurrentParent = (Node)this.fNodeStack.pop();
  460.             this.fCurrentNode = this.fCurrentParent;
  461.          }
  462.       }
  463.    }
  464.  
  465.    public void characters(int var1, boolean var2) throws Exception {
  466.       Object var3 = null;
  467.       if (var2) {
  468.          var3 = this.fDocument.createCDATASection(((XMLParser)this).getParserState().getStringPool().orphanString(var1));
  469.       } else {
  470.          if (this.fNormalizeTextNodes && this.fWithinElement && this.fCurrentNode.getNodeType() == 3 && this.fCurrentNode.getParentNode().getNodeType() == 1) {
  471.             ((Text)this.fCurrentNode).appendData(((XMLParser)this).getParserState().getStringPool().orphanString(var1));
  472.             return;
  473.          }
  474.  
  475.          var3 = this.fDocument.createTextNode(((XMLParser)this).getParserState().getStringPool().orphanString(var1));
  476.       }
  477.  
  478.       if (var3 != null) {
  479.          this.fCurrentParent.appendChild((Node)var3);
  480.          this.fCurrentNode = (Node)var3;
  481.       }
  482.    }
  483.  
  484.    public void ignorableWhitespace(int var1, boolean var2) throws Exception {
  485.       Object var3 = null;
  486.       if (var2) {
  487.          var3 = this.fDocument.createCDATASection(((XMLParser)this).getParserState().getStringPool().orphanString(var1));
  488.       } else {
  489.          var3 = this.fDocument.createTextNode(((XMLParser)this).getParserState().getStringPool().orphanString(var1), true);
  490.       }
  491.  
  492.       if (var3 != null) {
  493.          ((TXText)var3).setIsIgnorableWhitespace(true);
  494.          this.fCurrentParent.appendChild((Node)var3);
  495.          this.fCurrentNode = (Node)var3;
  496.       }
  497.    }
  498.  
  499.    public void processingInstruction(int var1, int var2) throws Exception {
  500.       String var3 = ((XMLParser)this).getParserState().getStringPool().orphanString(var1);
  501.       Object var4 = null;
  502.       String var6;
  503.       if (var2 >= 0) {
  504.          var6 = ((XMLParser)this).getParserState().getStringPool().orphanString(var2);
  505.       } else {
  506.          var6 = "";
  507.       }
  508.  
  509.       ProcessingInstruction var5 = this.fDocument.createProcessingInstruction(var3, var6);
  510.       if (var5 != null) {
  511.          this.fCurrentParent.appendChild(var5);
  512.          this.fCurrentNode = var5;
  513.       }
  514.    }
  515.  
  516.    public void comment(int var1) throws Exception {
  517.       Comment var2 = this.fDocument.createComment(((XMLParser)this).getParserState().getStringPool().orphanString(var1));
  518.       if (var2 != null) {
  519.          this.fCurrentParent.appendChild(var2);
  520.          this.fCurrentNode = var2;
  521.       }
  522.    }
  523.  
  524.    public void characters(char[] var1, int var2, int var3, boolean var4) throws Exception {
  525.       Object var5 = null;
  526.       if (var4) {
  527.          var5 = this.fDocument.createCDATASection(new String(var1, var2, var3));
  528.       } else {
  529.          if (this.fNormalizeTextNodes && this.fWithinElement && this.fCurrentNode.getNodeType() == 3 && this.fCurrentNode.getParentNode().getNodeType() == 1) {
  530.             ((Text)this.fCurrentNode).appendData(new String(var1, var2, var3));
  531.             return;
  532.          }
  533.  
  534.          var5 = this.fDocument.createTextNode(new String(var1, var2, var3));
  535.       }
  536.  
  537.       if (var5 != null) {
  538.          this.fCurrentParent.appendChild((Node)var5);
  539.          this.fCurrentNode = (Node)var5;
  540.       }
  541.    }
  542.  
  543.    public void ignorableWhitespace(char[] var1, int var2, int var3, boolean var4) throws Exception {
  544.       Object var5 = null;
  545.       if (var4) {
  546.          var5 = this.fDocument.createCDATASection(new String(var1, var2, var3));
  547.       } else {
  548.          var5 = this.fDocument.createTextNode(new String(var1, var2, var3));
  549.       }
  550.  
  551.       if (var5 != null) {
  552.          ((TXText)var5).setIsIgnorableWhitespace(true);
  553.          this.fCurrentParent.appendChild((Node)var5);
  554.          this.fCurrentNode = (Node)var5;
  555.       }
  556.    }
  557. }
  558.