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.Name;
- import com.ms.xml.util.QualifiedName;
- 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;
-
- public final ContentModel getContent() {
- return this.content;
- }
-
- public final AttDef findAttDef(Name var1) {
- if (this.attdefs != null) {
- for(int var2 = 0; var2 < this.attdefs.size(); ++var2) {
- AttDef var3 = (AttDef)this.attdefs.elementAt(var2);
- if (var3.name.equals(var1)) {
- return var3;
- }
- }
- }
-
- return null;
- }
-
- final void parseAttList(Parser var1) throws ParseException {
- var1.nextToken();
-
- AttDef var4;
- for(; var1.token == -4; this.addAttDef(var4)) {
- Name var5 = var1.name;
- 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 + 0);
- 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 void save(XMLOutputStream var1) throws IOException {
- var1.writeIndent();
- var1.writeChars("<!ELEMENT ");
- var1.writeQualifiedName(this.name, (Name)null);
- var1.writeChars(" ");
- Name var2 = QualifiedName.getNameSpace(this.name);
- this.content.save(var2, var1);
- var1.write(62);
- var1.writeNewLine();
- if (this.attdefs != null) {
- Enumeration var3 = this.attdefs.elements();
- var1.writeIndent();
- var1.writeChars("<!ATTLIST ");
- var1.writeQualifiedName(this.name, (Name)null);
- var1.writeChars(" ");
-
- while(var3.hasMoreElements()) {
- var1.writeNewLine();
- AttDef var4 = (AttDef)var3.nextElement();
- var1.addIndent(1);
- var1.writeIndent();
- var1.addIndent(-1);
- var4.save(var2, var1);
- }
-
- var1.write(62);
- var1.writeNewLine();
- }
-
- }
-
- ElementDecl(Name var1) {
- super(var1, 9);
- this.name = var1;
- }
-
- public final Name getName() {
- return this.name;
- }
-
- final boolean acceptEmpty() {
- return this.content.acceptEmpty();
- }
-
- final Vector expectedElements(int var1) {
- return this.content.expectedElements(var1);
- }
-
- final void checkAttributes(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 parseAttribute(Element var1, Name var2, Parser var3) throws ParseException {
- if (this.attdefs != null) {
- AttDef var4 = this.findAttDef(var2);
- if (var4 == null) {
- var3.error("Illegal attribute name " + var2);
- }
-
- Object var5 = var4.parseAttribute(var1, var3);
- var1.setAttribute(var2, var5);
- }
-
- }
-
- final void parseModel(Parser var1) throws ParseException {
- this.content = new ContentModel();
- var1.parseKeyword(0, "EMPTY|...");
- 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;
- default:
- var1.error("Expected EMPTY, ANY, or '('.");
- }
-
- if (var1.token != 62) {
- var1.error("Element declaration syntax error. Expected '>' instead of '" + var1.tokenString(var1.token) + "'");
- }
-
- }
- }
-