home *** CD-ROM | disk | FTP | other *** search
- package com.ms.xml.parser;
-
- import com.ms.xml.om.Element;
- import com.ms.xml.om.ElementImpl;
- import com.ms.xml.util.Atom;
- import com.ms.xml.util.Name;
- import com.ms.xml.util.XMLOutputStream;
- import java.io.IOException;
- import java.util.Enumeration;
- import java.util.Vector;
-
- public class ElementDecl extends ElementImpl {
- Name name;
- private Vector attdefs;
- private ContentModel content;
- ElementDecl base;
- Vector interfaces;
- Element schema = null;
- static Name nameELEMENTTYPE = Name.create("ELEMENTTYPE", "XML");
- static Name nameID = Name.create("ID", "XML");
-
- public final ContentModel getContent() {
- return this.content;
- }
-
- public final AttDef findAttDef(Name var1) {
- if (this.attdefs != null) {
- Enumeration var2 = this.attdefs.elements();
-
- while(var2.hasMoreElements()) {
- AttDef var3 = (AttDef)var2.nextElement();
- if (var3.name == var1) {
- return var3;
- }
- }
- }
-
- if (this.base != null) {
- AttDef var4 = this.base.findAttDef(var1);
- if (var4 != null) {
- return var4;
- }
- }
-
- if (this.interfaces != null) {
- Enumeration var5 = this.interfaces.elements();
-
- while(var5.hasMoreElements()) {
- AttDef var6 = ((ElementDecl)var5.nextElement()).findAttDef(var1);
- if (var6 != null) {
- return var6;
- }
- }
- }
-
- return null;
- }
-
- ElementDecl(Name var1) {
- super(var1, 9);
- this.name = var1;
- }
-
- final void parseAttList(Parser var1) throws ParseException {
- var1.nextToken();
-
- AttDef var4;
- for(; var1.token == -4; this.addAttDef(var4)) {
- Name var5 = var1.name;
- if (var5.getName().equals(Parser.nameXMLSpace.getName())) {
- var5 = Parser.nameXMLSpace;
- }
-
- var1.parseKeyword(0, "Attdef");
- switch (var1.token) {
- case -28:
- var1.parseToken(40, "(");
- Vector var8 = new Vector();
- int var2 = var1.parseNames(var8, 0, (StringBuffer)null);
- --var2;
-
- for(; var2 >= 0; --var2) {
- Name var6 = (Name)var8.elementAt(var2);
- if (var1.dtd.findNotation(var6) == null) {
- var1.error("Notation not declared '" + var6 + "'");
- }
- }
-
- var1.parseToken(41, ")");
- var4 = new AttDef(var5, 8, var8);
- break;
- case -27:
- case -26:
- case -25:
- case -24:
- case -23:
- case -22:
- case -21:
- case -20:
- var4 = new AttDef(var5, -20 - var1.token);
- break;
- case 40:
- ++var1.nametoken;
- Vector var3 = new Vector();
- var1.parseNames(var3, 124, (StringBuffer)null);
- var1.nametoken += -1;
- if (var1.token != 41) {
- var1.error("Expected )");
- }
-
- var4 = new AttDef(var5, 9, var3);
- break;
- default:
- var4 = null;
- var1.error("Unknown token in attlist declaration " + var1.token);
- }
-
- if (var1.nextToken() == 35) {
- var1.parseKeyword(0, "attribute default");
- switch (var1.token) {
- case -32:
- var4.presence = 2;
- break;
- case -31:
- var4.presence = 1;
- break;
- case -30:
- var4.presence = 3;
- break;
- default:
- var1.error("Expected 'REQUIRED', 'IMPLIED', or 'FIXED'.");
- }
-
- var1.nextToken();
- }
-
- if (var4.presence == 3 || var4.presence == 0) {
- switch (var1.token) {
- case 39:
- var4.def = var4.parseAttValue(this, var1, true);
- var1.nextToken();
- break;
- default:
- var1.error("Expected FIXED or DEFAULT value for " + var4.name);
- }
- }
- }
-
- }
-
- final boolean checkContent(Context var1, Element var2, Parser var3) throws ParseException {
- return this.content.checkContent(var1, var2, var3);
- }
-
- final void addAttDef(AttDef var1) {
- if (this.attdefs == null) {
- this.attdefs = new Vector();
- }
-
- this.attdefs.addElement(var1);
- }
-
- public Element toSchema() {
- if (this.schema == null) {
- ElementImpl var1 = new ElementImpl(nameELEMENTTYPE, 0);
- var1.setAttribute(nameID, this.name);
- Element var2 = this.content.toSchema();
- var1.addChild(var2, (Element)null);
- if (this.attdefs != null) {
- Enumeration var3 = this.attdefs.elements();
-
- while(var3.hasMoreElements()) {
- AttDef var4 = (AttDef)var3.nextElement();
- var1.addChild(var4.toSchema(), (Element)null);
- }
- }
-
- this.schema = var1;
- }
-
- return this.schema;
- }
-
- public void save(XMLOutputStream var1) throws IOException {
- var1.writeIndent();
- var1.writeChars("<!ELEMENT ");
- var1.writeQualifiedName(this.name, (Atom)null);
- var1.writeChars(" ");
- Atom var2 = this.name.getNameSpace();
- this.content.save(var2, var1);
- var1.write(62);
- if (this.attdefs != null) {
- int var3 = var1.getOutputStyle();
- if (var3 != XMLOutputStream.COMPACT) {
- var1.setOutputStyle(XMLOutputStream.PRETTY);
- }
-
- var1.writeNewLine();
- Enumeration var4 = this.attdefs.elements();
- var1.writeIndent();
- var1.writeChars("<!ATTLIST ");
- var1.writeQualifiedName(this.name, (Atom)null);
- var1.writeChars(" ");
-
- while(var4.hasMoreElements()) {
- var1.writeNewLine();
- AttDef var5 = (AttDef)var4.nextElement();
- var1.addIndent(1);
- var1.writeIndent();
- var1.addIndent(-1);
- var5.save(var2, var1);
- }
-
- var1.write(62);
- var1.setOutputStyle(var3);
- }
-
- var1.writeNewLine();
- }
-
- public final Name getName() {
- return this.name;
- }
-
- final boolean acceptEmpty(Context var1) {
- return this.content.acceptEmpty(var1);
- }
-
- final Vector expectedElements(int var1) {
- return this.content.expectedElements(var1);
- }
-
- final void checkOwnAttributes(Element var1, Parser var2) throws ParseException {
- if (this.attdefs != null) {
- Enumeration var3 = this.attdefs.elements();
-
- while(var3.hasMoreElements()) {
- AttDef var4 = (AttDef)var3.nextElement();
- if (var4.getPresence() == 1 && var1.getAttribute(var4.getName()) == null) {
- var2.error("Attribute '" + var4.getName() + "' is required.");
- }
- }
-
- }
- }
-
- final void initContent(Context var1, Parser var2) throws ParseException {
- var1.ed = this;
- AttDef var3 = this.findAttDef(Parser.nameXMLSpace);
- if (var3 != null) {
- Object var4 = var3.getDefault();
- if (var4 != null) {
- String var5 = (String)var4;
- var1.preserveWS = var5.equalsIgnoreCase("preserve");
- }
- }
-
- this.content.initContent(var1, var2);
- }
-
- final void checkAttributes(Element var1, Parser var2) throws ParseException {
- this.checkOwnAttributes(var1, var2);
- if (this.base != null) {
- this.base.checkOwnAttributes(var1, var2);
- }
-
- if (this.interfaces != null) {
- Enumeration var3 = this.interfaces.elements();
-
- while(var3.hasMoreElements()) {
- ((ElementDecl)var3.nextElement()).checkOwnAttributes(var1, var2);
- }
- }
-
- }
-
- final void parseModel(Parser var1) throws ParseException {
- this.content = new ContentModel();
- var1.parseKeyword(0, "EMPTY|...");
- if (var1.token == -37) {
- var1.parseToken(-4, "base element declaration");
- this.base = var1.dtd.findElementDecl(var1.name);
- if (this.base == null) {
- var1.error("Didn't find element declaration to extend " + var1.name);
- }
-
- var1.parseKeyword(0, "EMPTY|...");
- }
-
- if (var1.token == -38) {
- this.interfaces = new Vector();
- int var2 = var1.parseNames(this.interfaces, 44, (StringBuffer)null);
- --var2;
-
- for(; var2 >= 0; --var2) {
- ElementDecl var3 = var1.dtd.findElementDecl((Name)this.interfaces.elementAt(var2));
- if (var3 == null) {
- var1.error("Didn't find element declaration to implement " + this.interfaces.elementAt(var2));
- } else {
- this.interfaces.setElementAt(var3, var2);
- }
- }
-
- if (var1.token == -4) {
- var1.token = var1.lookup(this.name.getName());
- }
- }
-
- switch (var1.token) {
- case -17:
- this.content.type = 2;
- var1.nextToken();
- break;
- case -16:
- this.content.type = 1;
- var1.nextToken();
- break;
- case 40:
- this.content.type = 4;
- this.content.parseModel(var1);
- break;
- case 62:
- if (this.base != null) {
- this.content = this.base.content;
- break;
- }
- default:
- var1.error("Expected EMPTY, ANY, or '('.");
- }
-
- if (var1.token != 62) {
- var1.error("Element declaration syntax error. Expected '>' instead of '" + var1.tokenString(var1.token) + "'");
- }
-
- }
-
- final void parseAttribute(Element var1, Name var2, Parser var3) throws ParseException {
- AttDef var4 = this.findAttDef(var2);
- if (var4 == null) {
- var3.error("Illegal attribute name " + var2);
- }
-
- Object var5 = var4.parseAttribute(var1, var3);
- var1.setAttribute(var2, var5);
- }
- }
-