home *** CD-ROM | disk | FTP | other *** search
- package com.ibm.xml.parser;
-
- import com.ibm.xml.framework.ParserState;
- import com.ibm.xml.framework.StringPool;
- import com.ibm.xml.framework.XMLErrorHandler;
- import java.io.IOException;
- import java.io.Writer;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import java.util.StringTokenizer;
- import java.util.Vector;
- import org.w3c.dom.DOMException;
- import org.w3c.dom.DocumentType;
- import org.w3c.dom.Element;
- import org.w3c.dom.NamedNodeMap;
- import org.w3c.dom.Node;
- import org.w3c.dom.Notation;
-
- public class DTD extends Parent implements DocumentType {
- static final long serialVersionUID = 8746509003209143695L;
- private static final boolean DEBUG_VALIDATION = false;
- public static final String CM_EOC = " *EOC* ";
- public static final String CM_ERROR = " *ERROR* ";
- public static final String CM_PCDATA = "#PCDATA";
- private String name;
- private String xmlEncoding;
- private TXNodeList internalChildren;
- private TXNodeList externalChildren = new TXNodeList();
- private ExternalID externalID;
- private Hashtable elementDecls = new Hashtable();
- private Hashtable attListDecls = new Hashtable();
- private Hashtable notationDecls = new Hashtable();
- private boolean parsingExternal = false;
- boolean isPrintInternalDTD = true;
- private Hashtable idHash;
- EntityPool entityPool;
-
- public DTD() {
- this.internalChildren = super.children;
- }
-
- public DTD(String var1, ExternalID var2) {
- this.name = var1;
- this.externalID = var2;
- this.internalChildren = super.children;
- }
-
- public Object clone() {
- return this.cloneNode(true);
- }
-
- public synchronized Node cloneNode(boolean var1) {
- ((Child)this).checkFactory();
- DTD var2 = super.factory.createDTD(this.name, this.externalID);
- ((Child)var2).setFactory(((Child)this).getFactory());
- var2.isPrintInternalDTD = this.isPrintInternalDTD;
- var2.xmlEncoding = this.xmlEncoding;
- EntityPool var3 = new EntityPool();
- var3.add(super.factory.createEntityDecl("lt", "<", false));
- var3.add(super.factory.createEntityDecl("gt", ">", false));
- var3.add(super.factory.createEntityDecl("amp", "&", false));
- var3.add(super.factory.createEntityDecl("apos", "'", false));
- var3.add(super.factory.createEntityDecl("quot", """, false));
- var2.setEntityPool(var3);
- if (var1) {
- var2.setParsingExternal(true);
- var2.externalChildren.ensureCapacity(this.externalChildren.getLength());
-
- for(int var4 = 0; var4 < this.externalChildren.getLength(); ++var4) {
- ((Parent)var2).appendChild((Child)((Child)this.externalChildren.item(var4)).clone());
- }
-
- var2.setParsingExternal(false);
- var2.internalChildren.ensureCapacity(this.internalChildren.getLength());
-
- for(int var5 = 0; var5 < this.internalChildren.getLength(); ++var5) {
- ((Parent)var2).appendChild((Child)((Child)this.internalChildren.item(var5)).clone());
- }
- }
-
- var2.setParsingExternal(this.parsingExternal);
- return var2;
- }
-
- public short getNodeType() {
- return 10;
- }
-
- public String getNodeName() {
- return this.name;
- }
-
- public String getName() {
- return this.name;
- }
-
- public void setName(String var1) {
- this.name = var1;
- }
-
- public synchronized boolean equals(Node var1, boolean var2) {
- if (var1 == null) {
- return false;
- } else if (!(var1 instanceof DTD)) {
- return false;
- } else {
- DTD var3 = (DTD)var1;
- if (var3.name == null && this.name == null || var3.name != null && var3.name.equals(this.name)) {
- if (var3.externalID == null && this.externalID == null || var3.externalID != null && var3.externalID.equals(this.externalID)) {
- if (var3.xmlEncoding == null && this.xmlEncoding == null || var3.xmlEncoding != null && var3.xmlEncoding.equalsIgnoreCase(this.xmlEncoding)) {
- if (var2) {
- if (!var3.internalChildren.equals(this.internalChildren, var2)) {
- return false;
- }
-
- if (!var3.externalChildren.equals(this.externalChildren, var2)) {
- return false;
- }
- }
-
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
- } else {
- return false;
- }
- }
- }
-
- public void setParsingExternal(boolean var1) {
- this.parsingExternal = var1;
- super.children = var1 ? this.externalChildren : this.internalChildren;
- }
-
- public boolean isParsingExternal() {
- return this.parsingExternal;
- }
-
- public Enumeration internalElements() {
- return this.internalChildren.elements();
- }
-
- public Enumeration externalElements() {
- return this.externalChildren.elements();
- }
-
- public ExternalID getExternalID() {
- return this.externalID;
- }
-
- public void setExternalID(ExternalID var1) {
- this.externalID = var1;
- }
-
- public Enumeration getAttributeDeclarations(String var1) {
- Hashtable var2 = (Hashtable)this.attListDecls.get(var1);
- if (var2 == null) {
- var2 = new Hashtable();
- }
-
- return var2.elements();
- }
-
- public AttDef getAttributeDeclaration(String var1, String var2) {
- Hashtable var3 = (Hashtable)this.attListDecls.get(var1);
- return var3 == null ? null : (AttDef)var3.get(var2);
- }
-
- public boolean isAttributeDeclared(String var1, String var2) {
- return this.getAttributeDeclaration(var1, var2) != null;
- }
-
- public Enumeration getElementDeclarations() {
- return this.elementDecls.elements();
- }
-
- public ElementDecl getElementDeclaration(String var1) {
- return (ElementDecl)this.elementDecls.get(var1);
- }
-
- public boolean isElementDeclared(String var1) {
- return this.elementDecls.containsKey(var1);
- }
-
- public Vector makeContentElementList(String var1) {
- ElementDecl var2 = (ElementDecl)this.elementDecls.get(var1);
- return var2 == null ? null : var2.getXML4JContentModel().getChildrenOrder();
- }
-
- public Enumeration getNotationEnumeration() {
- return this.notationDecls.elements();
- }
-
- public Notation getNotation(String var1) {
- TXNotation var2 = (TXNotation)this.notationDecls.get(var1);
- return var2 == null ? null : var2.getNotationImpl();
- }
-
- public NamedNodeMap getNotations() {
- return new HashNamedNodeMap(this.notationDecls);
- }
-
- public void setEncoding(String var1) {
- this.xmlEncoding = var1;
- }
-
- public void printExternal(Writer var1, String var2) throws IOException {
- if (this.xmlEncoding != null) {
- var1.write("<?xml encoding=\"" + this.xmlEncoding + "\"?>");
- }
-
- for(int var3 = 0; var3 < this.externalChildren.getLength(); ++var3) {
- ((Child)this.externalChildren.item(var3)).print(var1, var2);
- }
-
- var1.flush();
- }
-
- public boolean checkContent(TXElement var1) {
- ElementDecl var2 = (ElementDecl)this.elementDecls.get(var1.getNodeName());
- return var2 == null ? false : var2.getXML4JContentModel().check(var1);
- }
-
- public Node validate(TXElement var1) {
- return this.validate(var1, (ParserState)null);
- }
-
- public Node validate(TXElement var1, ParserState var2) {
- String var3 = var1.getNodeName();
- ElementDecl var4 = (ElementDecl)this.elementDecls.get(var3);
- if (var4 == null) {
- if (var2 != null) {
- StringPool var14 = var2.getStringPool();
- int var6 = var14.addString(var3);
-
- try {
- XMLErrorHandler var9 = var2.getErrorHandler();
- var9.error1(166, var6);
- } catch (Exception var12) {
- } finally {
- var14.releaseString(var6);
- }
- }
-
- return var1;
- } else {
- Node var5 = this.validateAttributes(var1, var2);
- if (var5 == null) {
- var5 = var4.getXML4JContentModel().validate(var1, var2);
- }
-
- return var5;
- }
- }
-
- public ContentModel getContentModel(String var1) {
- ElementDecl var2 = (ElementDecl)this.elementDecls.get(var1);
- return var2 == null ? null : var2.getXML4JContentModel();
- }
-
- public int getContentType(String var1) {
- ElementDecl var2 = (ElementDecl)this.elementDecls.get(var1);
- return var2 == null ? -1 : var2.getXML4JContentModel().getType();
- }
-
- public Hashtable prepareTable(String var1) {
- ElementDecl var2 = (ElementDecl)this.elementDecls.get(var1);
- return var2 == null ? null : var2.getXML4JContentModel().prepareTable();
- }
-
- public Hashtable getInsertableElements(Element var1, int var2, Hashtable var3) {
- ContentModel var4 = this.getContentModel(var1.getNodeName());
- return var4 == null ? null : var4.getInsertableElements(var1, var2, var3, false);
- }
-
- public Hashtable getAppendableElements(Element var1, Hashtable var2) {
- return this.getInsertableElements(var1, var1.getChildNodes().getLength(), var2);
- }
-
- public Hashtable getInsertableElementsForValidContent(Element var1, int var2, Hashtable var3) {
- ContentModel var4 = this.getContentModel(var1.getNodeName());
- return var4 == null ? null : var4.getInsertableElements(var1, var2, var3, true);
- }
-
- public boolean registID(Element var1, String var2) {
- if (this.idHash == null) {
- this.idHash = new Hashtable();
- }
-
- if (this.idHash.containsKey(var2)) {
- return false;
- } else {
- this.idHash.put(var2, var1);
- return true;
- }
- }
-
- public boolean unregistID(String var1) {
- if (this.idHash == null) {
- return false;
- } else if (!this.idHash.containsKey(var1)) {
- return false;
- } else {
- this.idHash.remove(var1);
- return true;
- }
- }
-
- public Element checkID(String var1) {
- return this.idHash == null ? null : (Element)this.idHash.get(var1);
- }
-
- public Enumeration IDs() {
- return this.idHash == null ? (new Hashtable()).keys() : this.idHash.keys();
- }
-
- public Enumeration getEntityEnumeration() {
- return this.entityPool.elements();
- }
-
- public Enumeration getParameterEntityEnumeration() {
- return this.entityPool.parameterEntityElements();
- }
-
- public EntityDecl getEntityDecl(String var1, boolean var2) {
- EntityDecl var3;
- if (var2) {
- var3 = this.entityPool.referPara(var1);
- } else {
- var3 = this.entityPool.refer(var1);
- }
-
- return var3;
- }
-
- public NamedNodeMap getEntities() {
- return new HashNamedNodeMap(this.entityPool.getEntityHash());
- }
-
- public int getInternalSize() {
- return this.internalChildren.getLength();
- }
-
- public int getExternalSize() {
- return this.externalChildren.getLength();
- }
-
- public void setPrintInternalDTD(boolean var1) {
- this.isPrintInternalDTD = var1;
- }
-
- public boolean isPrintInternalDTD() {
- return this.isPrintInternalDTD;
- }
-
- public void acceptPre(Visitor var1) throws Exception {
- var1.visitDTDPre(this);
- }
-
- public void acceptPost(Visitor var1) throws Exception {
- var1.visitDTDPost(this);
- }
-
- public void setEntityPool(EntityPool var1) {
- this.entityPool = var1;
- }
-
- protected void realInsert(Node var1, int var2) throws DOMException {
- if (var1 != null) {
- super.realInsert(var1, var2);
- if (var1 instanceof ElementDecl) {
- ElementDecl var10 = (ElementDecl)var1;
- this.elementDecls.put(var10.getName(), var10);
- } else if (var1 instanceof Attlist) {
- Attlist var9 = (Attlist)var1;
- String var4 = var9.getName();
- Hashtable var5 = (Hashtable)this.attListDecls.get(var4);
- if (var5 == null) {
- var5 = new Hashtable();
- this.attListDecls.put(var4, var5);
- }
-
- for(int var6 = 0; var6 < var9.size(); ++var6) {
- AttDef var7 = var9.elementAt(var6);
- if (var5.get(var7.getName()) == null) {
- var5.put(var7.getName(), var7);
- }
- }
-
- } else if (var1 instanceof TXNotation) {
- TXNotation var8 = (TXNotation)var1;
- this.notationDecls.put(var8.getNodeName(), var8);
- } else {
- if (var1 instanceof EntityDecl) {
- EntityDecl var3 = (EntityDecl)var1;
- this.entityPool.add(var3);
- }
-
- }
- }
- }
-
- protected void checkChildType(Node var1) throws DOMException {
- switch (var1.getNodeType()) {
- case 3:
- case 6:
- case 7:
- case 8:
- case 12:
- case 20:
- case 21:
- case 23:
- return;
- default:
- throw new TXDOMException((short)3, "Specified node type (" + var1.getNodeType() + ") can't be a child of DocumentType.");
- }
- }
-
- Node validateAttributes(TXElement var1) {
- return this.validateAttributes(var1, (ParserState)null);
- }
-
- Node validateAttributes(TXElement var1, ParserState var2) {
- NamedNodeMap var3 = var1.getAttributes();
- String var4 = var1.getNodeName();
- Hashtable var5 = (Hashtable)this.attListDecls.get(var4);
- if (var5 != null && var5.size() != 0) {
- if (var3 == null) {
- Enumeration var244 = var5.keys();
-
- while(var244.hasMoreElements()) {
- String var245 = (String)var244.nextElement();
- AttDef var247 = (AttDef)var5.get(var245);
- if (var247.getDefaultType() == 2) {
- return var1;
- }
- }
- } else {
- Vector var6 = new Vector();
- Enumeration var7 = var5.keys();
-
- while(var7.hasMoreElements()) {
- String var8 = (String)var7.nextElement();
- var6.addElement(var5.get(var8));
- }
-
- int var246 = var6.size();
-
- for(AttDef var9 = (AttDef)var6.firstElement(); var9 != null; var9 = var6.size() > 0 ? (AttDef)var6.firstElement() : null) {
- String var10 = var9.getName();
- Node var11 = var3.getNamedItem(var10);
- int var12 = var9.getDefaultType();
- switch (var12) {
- case 1:
- if (var11 != null && !var11.getNodeValue().equals(var9.getDefaultStringValue())) {
- return var11;
- }
- break;
- case 2:
- if (var11 == null) {
- return var1;
- }
- }
-
- if (var11 != null) {
- int var13 = var9.getDeclaredType();
- String var14 = var11.getNodeValue();
- switch (var13) {
- case 1:
- int var260 = var14.length();
-
- for(int var269 = 0; var269 < var260; ++var269) {
- char var278 = var14.charAt(var269);
- if (!XMLChar.isChar(var278)) {
- if (var2 != null) {
- StringPool var283 = var2.getStringPool();
- int var284 = var283.addString(Integer.toHexString(var278));
-
- try {
- XMLErrorHandler var22 = var2.getErrorHandler();
- var22.error1(85, var284);
- } catch (Exception var242) {
- } finally {
- var283.releaseString(var284);
- }
- }
-
- return var11;
- }
- }
- break;
- case 2:
- String var259 = var14.trim();
- if (!Util.checkName(var259)) {
- if (var2 != null) {
- StringPool var268 = var2.getStringPool();
- int var277 = var268.addString(var259);
-
- try {
- XMLErrorHandler var289 = var2.getErrorHandler();
- var289.error1(89, var277);
- } catch (Exception var240) {
- } finally {
- var268.releaseString(var277);
- }
- }
-
- return var11;
- }
- break;
- case 3:
- String var258 = var14.trim();
- if (this.idHash == null || this.idHash.get(var258) == null) {
- if (var2 != null) {
- StringPool var267 = var2.getStringPool();
- int var276 = var267.addString(var258);
-
- try {
- XMLErrorHandler var288 = var2.getErrorHandler();
- var288.error1(84, var276);
- } catch (Exception var238) {
- } finally {
- var267.releaseString(var276);
- }
- }
-
- return var11;
- }
- break;
- case 4:
- StringTokenizer var257 = new StringTokenizer(var14);
-
- while(var257.hasMoreTokens()) {
- String var266 = var257.nextToken();
- if (this.idHash == null || this.idHash.get(var266) == null) {
- if (var2 != null) {
- StringPool var275 = var2.getStringPool();
- int var282 = var275.addString(var266);
-
- try {
- XMLErrorHandler var291 = var2.getErrorHandler();
- var291.error1(84, var282);
- } catch (Exception var236) {
- } finally {
- var275.releaseString(var282);
- }
- }
-
- return var11;
- }
- }
- break;
- case 5:
- String var256 = var14.trim();
- if (this.entityPool == null || this.entityPool.refer(var256) == null) {
- if (var2 != null) {
- StringPool var265 = var2.getStringPool();
- int var274 = var265.addString(var256);
-
- try {
- XMLErrorHandler var287 = var2.getErrorHandler();
- var287.error1(60, var274);
- } catch (Exception var234) {
- } finally {
- var265.releaseString(var274);
- }
- }
-
- return var11;
- }
- break;
- case 6:
- StringTokenizer var255 = new StringTokenizer(var14);
-
- while(var255.hasMoreTokens()) {
- String var264 = var255.nextToken();
- if (this.entityPool == null || this.entityPool.refer(var264) == null) {
- if (var2 != null) {
- StringPool var273 = var2.getStringPool();
- int var281 = var273.addString(var264);
-
- try {
- XMLErrorHandler var290 = var2.getErrorHandler();
- var290.error1(60, var281);
- } catch (Exception var232) {
- } finally {
- var273.releaseString(var281);
- }
- }
-
- return var11;
- }
- }
- break;
- case 7:
- String var254 = var14.trim();
- if (!Util.checkNmtoken(var254)) {
- if (var2 != null) {
- StringPool var263 = var2.getStringPool();
- int var272 = var263.addString(var254);
-
- try {
- XMLErrorHandler var286 = var2.getErrorHandler();
- var286.error1(90, var272);
- } catch (Exception var230) {
- } finally {
- var263.releaseString(var272);
- }
- }
-
- return var11;
- }
- break;
- case 8:
- StringTokenizer var253 = new StringTokenizer(var14);
-
- while(var253.hasMoreTokens()) {
- String var262 = var253.nextToken();
- if (!Util.checkNmtoken(var262)) {
- if (var2 != null) {
- StringPool var271 = var2.getStringPool();
- int var280 = var271.addString(var262);
-
- try {
- XMLErrorHandler var21 = var2.getErrorHandler();
- var21.error1(90, var280);
- } catch (Exception var228) {
- } finally {
- var271.releaseString(var280);
- }
- }
-
- return var11;
- }
- }
- break;
- case 9:
- String var252 = var14.trim();
- if (this.getNotation(var252) == null) {
- if (var2 != null) {
- StringPool var261 = var2.getStringPool();
- int var270 = var261.addString(var252);
-
- try {
- XMLErrorHandler var285 = var2.getErrorHandler();
- var285.error1(76, var270);
- } catch (Exception var226) {
- } finally {
- var261.releaseString(var270);
- }
- }
-
- return var11;
- }
- break;
- case 10:
- boolean var15 = false;
- String var16 = var14.trim();
- Enumeration var17 = var9.elements();
- if (var17 != null) {
- while(var17.hasMoreElements()) {
- String var18 = (String)var17.nextElement();
- if (var16.equals(var18)) {
- var15 = true;
- break;
- }
- }
- }
-
- if (!var15) {
- if (var2 != null) {
- StringPool var279 = var2.getStringPool();
- int var19 = var279.addString(var16);
- int var20 = var279.addString(var9.toString());
-
- try {
- XMLErrorHandler var23 = var2.getErrorHandler();
- var23.error2(161, var19, var20);
- } catch (Exception var224) {
- } finally {
- var279.releaseString(var19);
- var279.releaseString(var20);
- }
- }
-
- return var11;
- }
- }
- }
-
- var6.removeElementAt(0);
- }
-
- int var248 = var3.getLength();
- if (var248 > var246) {
- for(int var249 = 0; var249 < var248; ++var249) {
- Node var250 = var3.item(var249);
- String var251 = var250.getNodeName();
- if (this.getAttributeDeclaration(var4, var251) == null) {
- return var250;
- }
- }
- }
- }
- } else if (var3 != null && var3.getLength() > 0) {
- return var3.item(0);
- }
-
- return null;
- }
- }
-