home *** CD-ROM | disk | FTP | other *** search
- package com.sun.xml.tree;
-
- import com.sun.xml.parser.AttributeListEx;
- import com.sun.xml.parser.LexicalEventListener;
- import com.sun.xml.parser.Parser;
- import java.util.Locale;
- import java.util.Vector;
- import org.w3c.dom.CDATASection;
- import org.w3c.dom.Comment;
- import org.w3c.dom.DOMException;
- import org.w3c.dom.EntityReference;
- import org.xml.sax.AttributeList;
- import org.xml.sax.Locator;
- import org.xml.sax.SAXException;
- import org.xml.sax.SAXParseException;
-
- public class XmlDocumentBuilder implements LexicalEventListener {
- private static final String xmlURI = "http://www.w3.com/XML/1998/namespace";
- private XmlDocument document;
- private Locator locator;
- private ParseContextImpl context = new ParseContextImpl(this);
- private Locale locale = Locale.getDefault();
- private ElementFactory factory;
- private Parser parser;
- private Vector attrTmp = new Vector();
- private ParentNode[] elementStack;
- private int topOfStack;
- private boolean inDTD;
- private boolean inCDataSection;
- private boolean ignoringLexicalInfo = false;
- private boolean disableNamespaces = true;
-
- // $FF: synthetic method
- static Parser access$0(XmlDocumentBuilder var0) {
- return var0.parser;
- }
-
- // $FF: synthetic method
- static Locator access$1(XmlDocumentBuilder var0) {
- return var0.locator;
- }
-
- // $FF: synthetic method
- static XmlDocument access$2(XmlDocumentBuilder var0) {
- return var0.document;
- }
-
- // $FF: synthetic method
- static boolean access$3(XmlDocumentBuilder var0) {
- return var0.inDTD;
- }
-
- // $FF: synthetic method
- static void access$4(XmlDocumentBuilder var0, boolean var1) {
- var0.inDTD = var1;
- }
-
- // $FF: synthetic method
- static boolean access$5(XmlDocumentBuilder var0) {
- return var0.disableNamespaces;
- }
-
- // $FF: synthetic method
- static void access$6(XmlDocumentBuilder var0, SAXParseException var1) throws SAXException {
- var0.error(var1);
- }
-
- public void characters(char[] var1, int var2, int var3) throws SAXException {
- ParentNode var4 = this.elementStack[this.topOfStack];
- if (this.inCDataSection) {
- String var8 = new String(var1, var2, var3);
- CDATASection var10 = (CDATASection)var4.getLastChild();
- var10.appendData(var8);
- } else {
- try {
- NodeBase var5 = (NodeBase)var4.getLastChild();
- if (var5 instanceof TextNode) {
- String var6 = new String(var1, var2, var3);
- ((TextNode)var5).appendData(var6);
- } else {
- TextNode var9 = this.document.newText(var1, var2, var3);
- var4.appendChild(var9);
- var4.doneChild(var9, this.context);
- }
- } catch (DOMException var7) {
- this.fatal(new SAXParseException(this.getMessage("XDB-004", new Object[]{((Throwable)var7).getMessage()}), this.locator, var7));
- }
-
- }
- }
-
- public Locale chooseLocale(String[] var1) throws SAXException {
- Locale var2 = XmlDocument.catalog.chooseLocale(var1);
- if (var2 != null) {
- this.setLocale(var2);
- }
-
- return var2;
- }
-
- public void comment(String var1) throws SAXException {
- if (!this.ignoringLexicalInfo && !this.inDTD) {
- Comment var2 = this.document.createComment(var1);
- ParentNode var3 = this.elementStack[this.topOfStack];
-
- try {
- var3.appendChild(var2);
- var3.doneChild((NodeEx)var2, this.context);
- } catch (DOMException var5) {
- this.fatal(new SAXParseException(this.getMessage("XDB-004", new Object[]{((Throwable)var5).getMessage()}), this.locator, var5));
- }
-
- }
- }
-
- public XmlDocument createDocument() {
- XmlDocument var1 = new XmlDocument();
- if (this.factory != null) {
- var1.setElementFactory(this.factory);
- }
-
- return var1;
- }
-
- public void endCDATA() throws SAXException {
- if (this.inCDataSection) {
- ParentNode var1 = this.elementStack[this.topOfStack];
-
- try {
- this.inCDataSection = false;
- var1.doneChild((NodeEx)var1.getLastChild(), this.context);
- } catch (DOMException var3) {
- this.fatal(new SAXParseException(this.getMessage("XDB-004", new Object[]{((Throwable)var3).getMessage()}), this.locator, var3));
- }
-
- }
- }
-
- public void endDocument() throws SAXException {
- if (this.topOfStack != 0) {
- throw new IllegalStateException(this.getMessage("XDB-000"));
- } else {
- this.document.doneParse(this.context);
- this.document.trimToSize();
- }
- }
-
- public void endElement(String var1) throws SAXException {
- ElementNode var2 = (ElementNode)this.elementStack[this.topOfStack];
- this.elementStack[this.topOfStack--] = null;
-
- try {
- ((ParentNode)var2).doneParse(this.context);
- ((ParentNode)var2).reduceWaste();
- this.elementStack[this.topOfStack].doneChild(var2, this.context);
- } catch (DOMException var4) {
- this.fatal(new SAXParseException(this.getMessage("XDB-004", new Object[]{((Throwable)var4).getMessage()}), this.locator, var4));
- }
-
- }
-
- public void endParsedEntity(String var1, boolean var2) throws SAXException {
- ParentNode var3 = this.elementStack[this.topOfStack];
- if (var3 instanceof EntityReference) {
- ((NodeBase)var3).setReadonly(true);
- this.elementStack[this.topOfStack--] = null;
- if (!var1.equals(((NodeBase)var3).getNodeName())) {
- this.fatal(new SAXParseException(this.getMessage("XDB-011", new Object[]{var1, ((NodeBase)var3).getNodeName()}), this.locator));
- }
-
- try {
- this.elementStack[this.topOfStack].doneChild(var3, this.context);
- } catch (DOMException var5) {
- this.fatal(new SAXParseException(this.getMessage("XDB-004", new Object[]{((Throwable)var5).getMessage()}), this.locator, var5));
- }
-
- }
- }
-
- private void error(SAXParseException var1) throws SAXException {
- if (this.parser != null) {
- this.parser.getErrorHandler().error(var1);
- } else {
- throw var1;
- }
- }
-
- private void fatal(SAXParseException var1) throws SAXException {
- if (this.parser != null) {
- this.parser.getErrorHandler().fatalError(var1);
- }
-
- throw var1;
- }
-
- public boolean getDisableNamespaces() {
- return this.disableNamespaces;
- }
-
- public XmlDocument getDocument() {
- return this.document;
- }
-
- public Locator getDocumentLocator() {
- return this.locator;
- }
-
- public final ElementFactory getElementFactory() {
- return this.factory;
- }
-
- public Locale getLocale() {
- return this.parser != null ? this.parser.getLocale() : this.locale;
- }
-
- String getMessage(String var1) {
- return this.getMessage(var1, (Object[])null);
- }
-
- String getMessage(String var1, Object[] var2) {
- if (this.locale == null) {
- this.getLocale();
- }
-
- return XmlDocument.catalog.getMessage(this.locale, var1, var2);
- }
-
- private String getNamespaceURI(String var1) {
- if ("xml".equals(var1)) {
- return "http://www.w3.com/XML/1998/namespace";
- } else {
- return "xmlns".equals(var1) ? null : this.elementStack[this.topOfStack].getInheritedAttribute("xmlns:" + var1);
- }
- }
-
- public Parser getParser() {
- return this.parser;
- }
-
- public void ignorableWhitespace(char[] var1, int var2, int var3) throws SAXException {
- if (!this.ignoringLexicalInfo) {
- ParentNode var4 = this.elementStack[this.topOfStack];
- if (this.inCDataSection) {
- String var8 = new String(var1, var2, var3);
- CDATASection var6 = (CDATASection)var4.getLastChild();
- var6.appendData(var8);
- } else {
- TextNode var5 = this.document.newText(var1, var2, var3);
-
- try {
- var4.appendChild(var5);
- var4.doneChild(var5, this.context);
- } catch (DOMException var7) {
- this.fatal(new SAXParseException(this.getMessage("XDB-004", new Object[]{((Throwable)var7).getMessage()}), this.locator, var7));
- }
-
- }
- }
- }
-
- public boolean isIgnoringLexicalInfo() {
- return this.ignoringLexicalInfo;
- }
-
- public void processingInstruction(String var1, String var2) throws SAXException {
- if (!this.disableNamespaces && var1.indexOf(58) != -1) {
- this.error(new SAXParseException(this.getMessage("XDB-010"), this.locator));
- }
-
- if (!this.inDTD) {
- ParentNode var3 = this.elementStack[this.topOfStack];
-
- try {
- PINode var4 = (PINode)this.document.createProcessingInstruction(var1, var2);
- var3.appendChild(var4);
- var3.doneChild(var4, this.context);
- } catch (DOMException var6) {
- this.fatal(new SAXParseException(this.getMessage("XDB-004", new Object[]{((Throwable)var6).getMessage()}), this.locator, var6));
- }
-
- }
- }
-
- public void setDisableNamespaces(boolean var1) {
- this.disableNamespaces = var1;
- }
-
- public void setDocumentLocator(Locator var1) {
- this.locator = var1;
- }
-
- public final void setElementFactory(ElementFactory var1) {
- this.factory = var1;
- }
-
- public void setIgnoringLexicalInfo(boolean var1) {
- this.ignoringLexicalInfo = var1;
- }
-
- public void setLocale(Locale var1) throws SAXException {
- if (var1 == null) {
- var1 = Locale.getDefault();
- }
-
- if (this.parser != null) {
- this.parser.setLocale(var1);
- }
-
- this.locale = var1;
- }
-
- public void setParser(org.xml.sax.Parser var1) {
- var1.setDocumentHandler(this);
- if (var1 instanceof Parser) {
- this.parser = (Parser)var1;
- this.parser.setDTDHandler(new DtdListener(this));
- } else {
- this.parser = null;
- }
-
- }
-
- public void startCDATA() throws SAXException {
- if (!this.ignoringLexicalInfo) {
- CDATASection var1 = this.document.createCDATASection("");
- ParentNode var2 = this.elementStack[this.topOfStack];
-
- try {
- this.inCDataSection = true;
- var2.appendChild(var1);
- } catch (DOMException var4) {
- this.fatal(new SAXParseException(this.getMessage("XDB-004", new Object[]{((Throwable)var4).getMessage()}), this.locator, var4));
- }
-
- }
- }
-
- public void startDocument() throws SAXException {
- this.document = this.createDocument();
- if (this.locator != null) {
- this.document.setSystemId(this.locator.getSystemId());
- }
-
- this.elementStack = new ParentNode[200];
- this.topOfStack = 0;
- this.elementStack[this.topOfStack] = this.document;
- this.inDTD = false;
- this.document.startParse(this.context);
- }
-
- public void startElement(String var1, AttributeList var2) throws SAXException {
- AttributeSet var3 = null;
- ElementNode var4 = null;
- int var5 = var2 == null ? 0 : var2.getLength();
- if (var5 != 0) {
- try {
- if (!this.disableNamespaces) {
- for(int var6 = 0; var6 < var5; ++var6) {
- String var7 = var2.getType(var6);
- if (!"CDATA".equals(var7) && !var7.startsWith("NMTOKEN") && var2.getValue(var6).indexOf(58) != -1) {
- this.error(new SAXParseException(this.getMessage("XDB-001", new Object[]{var2.getName(var6)}), this.locator));
- }
- }
- }
-
- var3 = new AttributeSet(var2);
- } catch (DOMException var12) {
- this.fatal(new SAXParseException(this.getMessage("XDB-002", new Object[]{((Throwable)var12).getMessage()}), this.locator, var12));
- }
- }
-
- try {
- if (this.disableNamespaces) {
- var4 = (ElementNode)this.document.createElementEx(var1);
- } else {
- int var13 = var1.indexOf(58);
- String var16 = "xmlns";
- String var8 = "";
- String var9 = var1;
- if (var13 != -1) {
- var16 = "xmlns:" + var1.substring(0, var13);
- var9 = var1.substring(var13 + 1);
- if (var1.lastIndexOf(58) != var13) {
- this.error(new SAXParseException(this.getMessage("XDB-003", new Object[]{var1}), this.locator));
- }
- }
-
- if (var3 != null) {
- var8 = var3.getValue(var16);
- }
-
- if ("".equals(var8)) {
- var8 = this.elementStack[this.topOfStack].getInheritedAttribute(var16);
- }
-
- var4 = (ElementNode)this.document.createElementEx(var8, var9);
- if (var9 != var1) {
- var4.setTag(var1);
- }
- }
- } catch (DOMException var11) {
- this.fatal(new SAXParseException(this.getMessage("XDB-004", new Object[]{((Throwable)var11).getMessage()}), this.locator, var11));
- }
-
- if (var2 != null && var2 instanceof AttributeListEx) {
- var4.setIdAttributeName(((AttributeListEx)var2).getIdAttributeName());
- }
-
- if (var5 != 0) {
- var4.setAttributes(var3);
- }
-
- this.elementStack[this.topOfStack++].appendChild(var4);
- this.elementStack[this.topOfStack] = var4;
- ((ParentNode)var4).startParse(this.context);
- if (!this.disableNamespaces) {
- int var14 = var1.indexOf(58);
- if (var14 > 0) {
- String var17 = var1.substring(0, var14);
- if (this.getNamespaceURI(var17) == null) {
- this.error(new SAXParseException(this.getMessage("XDB-005", new Object[]{var17}), this.locator));
- }
- }
-
- if (var5 != 0) {
- for(int var19 = 0; var19 < var5; ++var19) {
- String var20 = var3.item(var19).getNodeName();
- var14 = var20.indexOf(58);
- if (var14 > 0) {
- String var18 = var20.substring(0, var14);
- if (!"xmlns".equals(var18)) {
- String var10 = this.getNamespaceURI(var18);
- if (var10 == null) {
- this.error(new SAXParseException(this.getMessage("XDB-006", new Object[]{var18}), this.locator));
- } else {
- if (var20.lastIndexOf(58) != var14) {
- this.error(new SAXParseException(this.getMessage("XDB-007", new Object[]{var20}), this.locator));
- }
-
- var20 = var20.substring(var14 + 1);
- var20 = var10 + '\uffff' + var20;
- if (this.attrTmp.contains(var20)) {
- this.error(new SAXParseException(this.getMessage("XDB-008", new Object[]{var3.item(var19).getNodeName()}), this.locator));
- } else {
- this.attrTmp.addElement(var20);
- }
- }
- }
- }
- }
-
- this.attrTmp.setSize(0);
- }
- }
-
- }
-
- public void startParsedEntity(String var1) throws SAXException {
- if (!this.ignoringLexicalInfo) {
- EntityReference var2 = this.document.createEntityReference(var1);
- this.elementStack[this.topOfStack++].appendChild(var2);
- this.elementStack[this.topOfStack] = (ParentNode)var2;
- }
- }
- }
-