Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.wst.dtd.core/saxparser/org/eclipse/wst/dtd/core/internal/saxparser/DTDScanner.java')
-rw-r--r--bundles/org.eclipse.wst.dtd.core/saxparser/org/eclipse/wst/dtd/core/internal/saxparser/DTDScanner.java1126
1 files changed, 0 insertions, 1126 deletions
diff --git a/bundles/org.eclipse.wst.dtd.core/saxparser/org/eclipse/wst/dtd/core/internal/saxparser/DTDScanner.java b/bundles/org.eclipse.wst.dtd.core/saxparser/org/eclipse/wst/dtd/core/internal/saxparser/DTDScanner.java
deleted file mode 100644
index 7027058659..0000000000
--- a/bundles/org.eclipse.wst.dtd.core/saxparser/org/eclipse/wst/dtd/core/internal/saxparser/DTDScanner.java
+++ /dev/null
@@ -1,1126 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.wst.dtd.core.internal.saxparser;
-
-import java.util.Vector;
-
-/**
- * Scanning / parsing the content string from the Decl statement
- *
- * @version
- */
-public class DTDScanner {
- // element content model strings
- private static final char[] empty_string = {'E', 'M', 'P', 'T', 'Y'};
- private static final char[] any_string = {'A', 'N', 'Y'};
- private static final char[] pcdata_string = {'#', 'P', 'C', 'D', 'A', 'T', 'A'};
-
- // attribute type and default type strings
- private static final char[] cdata_string = {'C', 'D', 'A', 'T', 'A'};
- private static final char[] id_string = {'I', 'D'};
- private static final char[] ref_string = {'R', 'E', 'F'};
- private static final char[] entit_string = {'E', 'N', 'T', 'I', 'T'};
- private static final char[] ies_string = {'I', 'E', 'S'};
- private static final char[] nmtoken_string = {'N', 'M', 'T', 'O', 'K', 'E', 'N'};
- private static final char[] notation_string = {'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N'};
- private static final char[] required_string = {'#', 'R', 'E', 'Q', 'U', 'I', 'R', 'E', 'D'};
- private static final char[] implied_string = {'#', 'I', 'M', 'P', 'L', 'I', 'E', 'D'};
- private static final char[] fixed_string = {'#', 'F', 'I', 'X', 'E', 'D'};
-
- private static final char[] system_string = {'S', 'Y', 'S', 'T', 'E', 'M'};
- private static final char[] public_string = {'P', 'U', 'B', 'L', 'I', 'C'};
- private static final char[] ndata_string = {'N', 'D', 'A', 'T', 'A'};
-
- private int[] fOpStack = null;
- private CMGroupNode[] fGrpStack = null;
-
- private EntityPool entityPool;
-
- /* Attribute Def scanner state */
- static final int Att_Scanner_State_Name = 1, Att_Scanner_State_Type = 2, Att_Scanner_State_DefaultType = 3, Att_Scanner_State_DefaultValue = 4;
-
- private StringParser contentString;
- private String cData;
- private int prevNodeOffset = 0;
- private int nodeOffset = 1;
- private String ownerDTD;
-
- private String errorString;
-
- public DTDScanner(String ownerDTD, String cm) {
- // System.out.println("Cm: " + cm);
- contentString = new StringParser(cm);
- cData = cm;
- this.ownerDTD = ownerDTD;
- }
-
- //
- // [46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children
- //
- // Specific to VisualDTD : also allows %PEReference;
- //
- public CMNode scanContentModel() {
- CMNode cmNode = null;
- contentString.skipPastSpaces();
- if (contentString.skippedString(empty_string)) {
- cmNode = new CMBasicNode("EMPTY", CMNodeType.EMPTY); //$NON-NLS-1$
- }
- else if (contentString.skippedString(any_string)) {
- cmNode = new CMBasicNode("ANY", CMNodeType.ANY); //$NON-NLS-1$
- }
- else if (contentString.lookingAtChar('%', true)) {
- cmNode = new CMReferenceNode(contentString.getData(), CMNodeType.ENTITY_REFERENCE);
- }
- else if (!contentString.lookingAtChar('(', true)) {
- // This means that the contentmodel string is bad...
- // System.out.println("!!! exception - no (");
- return cmNode;
- }
- else {
- // System.out.println("Remaining String = " +
- // contentString.getRemainingString());
-
- contentString.skipPastSpaces();
- boolean skippedPCDATA = contentString.skippedString(pcdata_string);
- if (skippedPCDATA) {
- cmNode = scanMixed();
- }
- else {
- cmNode = scanChildren();
- }
-
- }
- return cmNode;
- }
-
- //
- // [51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | '(' S?
- // '#PCDATA' S? ')'
- //
- // Called after scanning past '(' S? '#PCDATA'
- //
- private CMNode scanMixed() {
- // System.out.println("ScanMixed...");
- CMGroupNode cmNode = new CMGroupNode();
- cmNode.setGroupKind(CMNodeType.GROUP_CHOICE);
- cmNode.addChild(new CMBasicNode("#PCDATA", CMNodeType.PCDATA)); //$NON-NLS-1$
-
- // int prevNodeIndex = -1;
- boolean starRequired = false;
-
-
- while (true) {
- if (contentString.lookingAtSpace(true)) {
- contentString.skipPastSpaces();
- }
- prevNodeOffset = contentString.getCurrentOffset();
-
- if (!contentString.lookingAtChar('|', true)) {
- if (!contentString.lookingAtChar(')', true)) {
- break;
- }
- if (contentString.lookingAtChar('*', true)) {
- cmNode.setOccurrence(CMNodeType.ZERO_OR_MORE);
- }
- else if (starRequired) {
- // System.out.println(" * is required ... ");
- }
- break;
- }
-
- if (contentString.lookingAtSpace(true)) {
- contentString.skipPastSpaces();
- }
-
- nodeOffset = contentString.getCurrentOffset();
- if (nodeOffset != -1) {
- // skip pass "|"
- prevNodeOffset = nodeOffset;
- }
-
- starRequired = true;
- contentString.skipPastNameAndPEReference(')');
- nodeOffset = contentString.getCurrentOffset();
-
- if (nodeOffset == -1)
- break;
-
- // add leave node
- int len = nodeOffset - prevNodeOffset;
- String refName = contentString.getString(prevNodeOffset, len);
- prevNodeOffset = nodeOffset;
- if (refName.startsWith("%")) //$NON-NLS-1$
- cmNode.addChild(new CMReferenceNode(refName, CMNodeType.ENTITY_REFERENCE));
- else
- cmNode.addChild(new CMReferenceNode(refName, CMNodeType.ELEMENT_REFERENCE));
-
- } // end while
-
-
- if (cmNode.getChildren().size() == 1) {
- // simplify the contentModel if the CMGroupNode only has one child
- // node.
- return (CMBasicNode) cmNode.getChildren().elementAt(0);
- }
-
- return cmNode;
- }
-
- //
- // [47] children ::= (choice | seq) ('?' | '*' | '+')?
- // [49] choice ::= '(' S? cp ( S? '|' S? cp )* S? ')'
- // [50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')'
- // [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')?
- //
- // Called after scanning past '('
-
- private CMNode scanChildren() {
-
- // System.out.println("scanChildren...");
-
- if (contentString.lookingAtSpace(true)) {
- contentString.skipPastSpaces();
- }
-
- prevNodeOffset = contentString.getCurrentOffset();
- nodeOffset = contentString.getCurrentOffset();
- int depth = 1;
- initializeContentModelStack(depth);
- int len;
-
- String nodeName;
- CMGroupNode cmNode = new CMGroupNode();
- fGrpStack[depth] = cmNode;
-
- while (true) {
-
- // System.out.println(" Begin outter while loop ..." );
- if (contentString.lookingAtChar('(', true)) {
- if (contentString.lookingAtSpace(true)) {
- // skip past any white spaces after the '('
- contentString.skipPastSpaces();
- }
-
- depth++;
- initializeContentModelStack(depth);
- fGrpStack[depth] = new CMGroupNode();
- fGrpStack[depth - 1].addChild(fGrpStack[depth]);
- continue;
- }
-
- prevNodeOffset = contentString.getCurrentOffset();
- contentString.skipPastNameAndPEReference(')');
- nodeOffset = contentString.getCurrentOffset();
-
- /*
- * System.out.println(" prevNodeOFfset " + prevNodeOffset);
- * System.out.println(" currentNodeOFfset " + nodeOffset);
- */
-
- len = nodeOffset - prevNodeOffset;
-
- if (nodeOffset == -1 || len < 1) {
- break;
- }
-
- nodeName = contentString.getString(prevNodeOffset, len);
-
- CMRepeatableNode rn;
- if (nodeName.startsWith("%")) { //$NON-NLS-1$
- rn = new CMReferenceNode(nodeName, CMNodeType.ENTITY_REFERENCE);
- }
- else {
- rn = new CMReferenceNode(nodeName, CMNodeType.ELEMENT_REFERENCE);
- }
-
- fGrpStack[depth].addChild(rn);
-
- prevNodeOffset = nodeOffset;
-
- if (contentString.lookingAtChar('?', true)) {
- rn.setOccurrence(CMNodeType.OPTIONAL);
- }
- else if (contentString.lookingAtChar('*', true)) {
- rn.setOccurrence(CMNodeType.ZERO_OR_MORE);
- }
- else if (contentString.lookingAtChar('+', true)) {
- rn.setOccurrence(CMNodeType.ONE_OR_MORE);
- }
-
- if (contentString.lookingAtSpace(true)) {
- contentString.skipPastSpaces();
- }
-
- prevNodeOffset = contentString.getCurrentOffset();
-
- while (true) {
- // System.out.println(" Begin inner while loop ... depth " +
- // depth );
- if (fOpStack[depth] != CMNodeType.GROUP_SEQUENCE && contentString.lookingAtChar('|', true)) {
- fOpStack[depth] = CMNodeType.GROUP_CHOICE;
- fGrpStack[depth].setGroupKind(CMNodeType.GROUP_CHOICE);
- if (contentString.lookingAtSpace(true))
- contentString.skipPastSpaces();
- break;
- }
- else if (fOpStack[depth] != CMNodeType.GROUP_CHOICE && contentString.lookingAtChar(',', true)) {
- fOpStack[depth] = CMNodeType.GROUP_SEQUENCE;
- fGrpStack[depth].setGroupKind(CMNodeType.GROUP_SEQUENCE);
- if (contentString.lookingAtSpace(true))
- contentString.skipPastSpaces();
- break;
- }
- else {
- if (contentString.lookingAtSpace(true)) {
- contentString.skipPastSpaces();
- }
- if (!contentString.lookingAtChar(')', true)) {
- // System.out.println(" error ) not found");
- }
- // end of the curent group node
- if (contentString.lookingAtChar('?', true)) {
- fGrpStack[depth].setOccurrence(CMNodeType.OPTIONAL);
- }
- else if (contentString.lookingAtChar('*', true)) {
- fGrpStack[depth].setOccurrence(CMNodeType.ZERO_OR_MORE);
- }
- else if (contentString.lookingAtChar('+', true)) {
- fGrpStack[depth].setOccurrence(CMNodeType.ONE_OR_MORE);
- }
- depth--;
- if (depth == 0) {
- break;
- }
- if (contentString.lookingAtSpace(true))
- contentString.skipPastSpaces();
-
- // System.out.println(" End end inner while loop ... depth
- // " + depth );
-
- }
- } // inner while
-
- if (depth == 0) {
- break;
- }
- } // outer while
-
- if (cmNode.getChildren().size() == 1) {
- // simplify the contentModel if the CMGroupNode only has one child
- // node and that node is an element ref.
- CMRepeatableNode rn = (CMRepeatableNode) cmNode.getChildren().elementAt(0);
- if (rn instanceof CMReferenceNode) {
- CMReferenceNode ref = (CMReferenceNode) rn;
- if (ref.getType() == CMNodeType.ELEMENT_REFERENCE) {
- if (ref.getOccurrence() == CMNodeType.ONE) {
- ref.setOccurrence(cmNode.getOccurrence());
- return ref;
- }
- else if (cmNode.getOccurrence() == CMNodeType.ONE) {
- return ref;
- }
- } // end of if ()
- }
- }
-
- return cmNode;
- }
-
- //
- // [52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>'
- // [53] AttDef ::= S Name S AttType S DefaultDecl
- // [60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)?
- // AttValue)
- //
-
- public Vector scanAttlistDecl(EntityPool entityPool) {
- Vector attList = new Vector();
- this.entityPool = entityPool;
-
- int scannerState = Att_Scanner_State_Name;
-
- AttNode attNode;
-
- while (true) {
- attNode = new AttNode();
-
- // System.out.println(" scanner state: " + scannerState);
-
- // scanning att name
- if (scannerState == Att_Scanner_State_Name) {
- // System.out.println("scan att Name...");
- scannerState = checkForAttributeWithPEReference(attNode, scannerState);
- if (scannerState == -1) {
- return attList;
- }
- }
-
- // scanning att type
- if (scannerState == Att_Scanner_State_Type) {
- // System.out.println("scan att type...");
-
- if (contentString.skippedString(cdata_string)) {
- attNode.type = new String(cdata_string);
- scannerState = Att_Scanner_State_DefaultType;
- }
- else if (contentString.skippedString(id_string)) {
- if (!contentString.skippedString(ref_string)) {
- attNode.type = new String(id_string);
- }
- else if (!contentString.lookingAtChar('S', true)) {
- attNode.type = "IDREF"; //$NON-NLS-1$
- }
- else {
- attNode.type = "IDREFS"; //$NON-NLS-1$
- }
- scannerState = Att_Scanner_State_DefaultType;
- }
- else if (contentString.skippedString(entit_string)) {
- if (contentString.lookingAtChar('Y', true)) {
- attNode.type = "ENTITY"; //$NON-NLS-1$
- }
- else if (contentString.skippedString(ies_string)) {
- attNode.type = "ENTITIES"; //$NON-NLS-1$
- }
- scannerState = Att_Scanner_State_DefaultType;
- }
- else if (contentString.skippedString(nmtoken_string)) {
- if (contentString.lookingAtChar('S', true)) {
- attNode.type = "NMTOKENS"; //$NON-NLS-1$
- }
- else {
- attNode.type = "NMTOKEN"; //$NON-NLS-1$
- }
- scannerState = Att_Scanner_State_DefaultType;
- }
- else if (contentString.skippedString(notation_string)) {
- if (contentString.lookingAtSpace(true)) {
- contentString.skipPastSpaces();
- }
- if (!contentString.lookingAtChar('(', true)) {
- System.out.println(" missing ( in notation "); //$NON-NLS-1$
- }
- attNode.type = "NOTATION"; //$NON-NLS-1$
- attNode.enumList = scanEnumeration(contentString, true);
- scannerState = Att_Scanner_State_DefaultType;
- }
- else if (contentString.lookingAtChar('(', true)) {
- attNode.type = "ENUMERATION"; //$NON-NLS-1$
- attNode.enumList = scanEnumeration(contentString, false);
- scannerState = Att_Scanner_State_DefaultType;
- }
- else {
- scannerState = checkForAttributeWithPEReference(attNode, scannerState);
- if (scannerState == Att_Scanner_State_Type) {
- setErrorString("Failed to find type for attribute '" + attNode.name + "'. Please refer to the original DTD file."); //$NON-NLS-1$ //$NON-NLS-2$
- // we failed to find a type for this attribute
- return attList;
- }
- }
- }
-
- if (scannerState == Att_Scanner_State_DefaultType) {
- contentString.skipPastSpaces();
- // System.out.println("scan default type...");
- if (contentString.skippedString(required_string)) {
- attNode.defaultType = new String(required_string);
- }
- else if (contentString.skippedString(implied_string)) {
- attNode.defaultType = new String(implied_string);
- }
- else {
- if (contentString.skippedString(fixed_string)) {
- contentString.skipPastSpaces();
- attNode.defaultType = new String(fixed_string);
- }
- else
- // "default"
- attNode.defaultType = "NOFIXED"; //$NON-NLS-1$
-
- if (contentString.lookingAtSpace(true))
- contentString.skipPastSpaces();
- attNode.defaultValue = scanDefaultAttValue(contentString);
- }
- scannerState = Att_Scanner_State_Name; // next
- }
-
-
- attList.addElement(attNode);
- if (contentString.lookingAtSpace(true))
- contentString.skipPastSpaces();
- nodeOffset = contentString.getCurrentOffset();
-
- if (nodeOffset >= cData.length())
- return attList;
-
- prevNodeOffset = contentString.getCurrentOffset();
-
- }// end while loop
- }
-
- //
- // content model stack
- //
- private void initializeContentModelStack(int depth) {
- if (fOpStack == null) {
- fOpStack = new int[8];
- fGrpStack = new CMGroupNode[8];
- }
- else if (depth == fOpStack.length) {
- int[] newStack = new int[depth * 2];
- System.arraycopy(fOpStack, 0, newStack, 0, depth);
- fOpStack = newStack;
-
- CMGroupNode[] newGrpStack = new CMGroupNode[depth * 2];
- System.arraycopy(fGrpStack, 0, newGrpStack, 0, depth);
- fGrpStack = newGrpStack;
- }
- fOpStack[depth] = -1;
- fGrpStack[depth] = null;
- }
-
- //
- private int checkForAttributeWithPEReference(AttNode attNode, int scannerState) {
- int state = -1;
- int len;
- String rawText;
- EntityDecl pEntity;
-
- // System.out.println(" checkforATTPERReference- start scannerState: "
- // + scannerState);
- if (scannerState == Att_Scanner_State_Name) {
- contentString.skipPastNameAndPEReference(' ');
- nodeOffset = contentString.getCurrentOffset();
- len = nodeOffset - prevNodeOffset;
-
- rawText = contentString.getString(prevNodeOffset, len);
- attNode.name = rawText;
-
- // System.out.println("State_name : " + rawText);
-
- if (rawText.startsWith("%") && rawText.endsWith(";")) { //$NON-NLS-1$ //$NON-NLS-2$
- String pe = rawText.substring(1, rawText.length() - 1);
-
- pEntity = entityPool.referPara(pe);
- if (pEntity != null) {
- // System.out.println(" name :" + rawText +" expandTo:" +
- // pEntity.expandedValue);
- state = whatIsTheNextAttributeScanningState(pEntity.expandedValue, scannerState);
- // System.out.println("checkForAttrwithPER - nextstate: "
- // + state);
- }
- else
- state = Att_Scanner_State_Type;
- }
- else
- state = Att_Scanner_State_Type;
-
- }
- else if (scannerState == Att_Scanner_State_Type) {
- if (contentString.lookingAtChar('%', true)) {
- rawText = getPEName();
- attNode.type = "%" + rawText; //$NON-NLS-1$
- String peName = rawText.substring(0, rawText.length() - 1);
- // System.out.println("State_type : pe- " + peName);
- pEntity = entityPool.referPara(peName);
- if (pEntity != null) {
- state = whatIsTheNextAttributeScanningState(pEntity.expandedValue, scannerState);
- }
- else
- state = Att_Scanner_State_DefaultType;
- }
- else
- state = Att_Scanner_State_Type;
- }
- else if (scannerState == Att_Scanner_State_DefaultType) {
- if (contentString.lookingAtChar('%', true)) {
- rawText = getPEName();
- attNode.defaultType = rawText;
- // System.out.println("State_defaultType : " + rawText);
- pEntity = entityPool.referPara(rawText.substring(1, rawText.length() - 1));
- if (pEntity != null) {
- state = whatIsTheNextAttributeScanningState(pEntity.expandedValue, scannerState);
- }
- else
- state = Att_Scanner_State_DefaultValue;
- }
- else
- state = Att_Scanner_State_DefaultType;
- }
- else if (scannerState == Att_Scanner_State_DefaultValue) {
- if (contentString.lookingAtChar('%', true)) {
- rawText = getPEName();
- attNode.defaultValue = rawText;
- // System.out.println("State_defaultValue : " + rawText);
-
- pEntity = entityPool.referPara(rawText.substring(1, rawText.length() - 1));
- if (pEntity != null) {
- state = whatIsTheNextAttributeScanningState(pEntity.expandedValue, scannerState);
- }
- else
- state = Att_Scanner_State_DefaultValue;
- }
- else
- state = Att_Scanner_State_DefaultValue;
- }
-
- if (contentString.lookingAtSpace(true))
- contentString.skipPastSpaces();
- prevNodeOffset = contentString.getCurrentOffset();
- return state;
- }
-
- private String getPEName() {
- prevNodeOffset = contentString.getCurrentOffset();
- contentString.skipToChar(';', true);
- nodeOffset = contentString.getCurrentOffset();
- int len = nodeOffset - prevNodeOffset;
- return contentString.getString(prevNodeOffset, len);
- }
-
- private int whatIsTheNextAttributeScanningState(String attrContentString, int currentState) {
- StringParser sp = new StringParser(attrContentString.trim());
-
-
- int nextState = currentState;
- int nOffset = 0;
-
- /*
- * System.out.println("WhatistheNext AttContentStringt : " +
- * attrContentString); System.out.println("WhatistheNext
- * AttContentStringL : " + attrContentString.length());
- * System.out.println("WhatistheNext currentstate : " + currentState);
- */
-
- while (true) {
- // System.out.println("WhatistheNext inside whil nextstate : " +
- // nextState);
- if (nextState == Att_Scanner_State_Name) { // the current
- // scanning state is
- // Attr Name, is the
- // next part Attr Type
- // ?
- if (isAttrName(sp)) {
- nextState = Att_Scanner_State_Type;
- }
- }
- else if (nextState == Att_Scanner_State_Type) { // the current
- // scanning state
- // is Attr Type,
- // is the next
- // part Default
- // Attr Type ?
-
- if (isAttrType(sp)) {
- nextState = Att_Scanner_State_DefaultType;
- }
- else
- System.out.println("WhatistheNext Attr Part - is not an Attr Type"); //$NON-NLS-1$
-
- }
-
- if (nextState == Att_Scanner_State_DefaultType) {
-
- int dType = isAttrDefaultType(sp);
- // System.out.println("WhatistheNext inside dType : " +
- // dType);
- if (dType == 1) // #REQUIRED or #IMPLIED
- {
- nextState = Att_Scanner_State_Name;
- }
- else {
- if (dType == 2) // #FIXED
- {
- // need to look at this again
- nextState = Att_Scanner_State_DefaultType;
- }
-
- if (scanDefaultAttValue(sp) != null) {
- nextState = Att_Scanner_State_Name;
-
- }
- }
- }
-
- sp.skipPastSpaces();
-
- if (nOffset == sp.getCurrentOffset())
- break;
-
- nOffset = sp.getCurrentOffset();
-
- if (nOffset >= attrContentString.length() || nOffset == -1)
- break;
-
- } // end while
-
- return nextState;
- }
-
-
- private boolean isAttrName(StringParser sp) {
- // System.out.println("isAttrName - sp:" + sp.fData);
- // System.out.println("isAttrName - currentOffset:" +
- // sp.getCurrentOffset());
- boolean isAttrName = false;
- int prev = sp.getCurrentOffset();
- sp.skipPastName(' ');
- if ((sp.getCurrentOffset() - prev) > 0)
- isAttrName = true;
- return isAttrName;
-
- }
-
- private boolean isAttrType(StringParser sp) {
- // System.out.println("isAttrType - sp:" + sp.fData);
- // System.out.println("isAttrType - currentOffset:" +
- // sp.getCurrentOffset());
- boolean isAttrType = false;
- if (sp.skippedString(cdata_string)) {
- isAttrType = true;
- }
- else if (sp.skippedString(id_string)) {
- if (!sp.skippedString(ref_string)) {
- isAttrType = true; // ID
- }
- else if (!sp.lookingAtChar('S', true)) {
- isAttrType = true; // IDREFS
- }
- else {
- isAttrType = true; // IDREF
- }
- }
- else if (sp.skippedString(entit_string)) {
- if (sp.lookingAtChar('Y', true)) {
- isAttrType = true; // ENTITY
- }
- else if (sp.skippedString(ies_string)) {
- isAttrType = true; // ENTITITES
- }
- }
- else if (sp.skippedString(nmtoken_string)) {
- if (sp.lookingAtChar('S', true)) {
- isAttrType = true; // NMTOKENS
- }
- else {
- isAttrType = true; // NMTOKEN
- }
- }
- else if (sp.skippedString(notation_string)) {
- if (!sp.lookingAtChar('(', true)) {
- // System.out.println(" missing ( in notation ");
- }
- Vector enumList = scanEnumeration(sp, true);
- if (enumList == null || enumList.size() == 0)
- isAttrType = false;
- else
- isAttrType = true;
- }
- else if (sp.lookingAtChar('(', true)) {
- // "ENUMERATION";
- Vector enumList = scanEnumeration(sp, false);
- if (enumList == null || enumList.size() == 0)
- isAttrType = false;
- else
- isAttrType = true;
- }
-
- return isAttrType;
-
- }
-
- /*
- * return 0 - not default type 1 - #REQUIRED or #IMPLIED 2 - #FIXED
- */
-
- private int isAttrDefaultType(StringParser sp) {
- // System.out.println("isAttrDefaultType - sp:" + sp.fData);
- int result = 0;
- if (sp.skippedString(required_string)) {
- result = 1;
- }
- else if (sp.skippedString(implied_string)) {
- result = 1;
- }
- else if (sp.skippedString(fixed_string)) {
- result = 2;
- }
- return result;
- }
-
- //
- // [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'
- // [59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'
- //
- // Called after scanning '('
- //
- private Vector scanEnumeration(StringParser sp, boolean isNotationType) {
- // System.out.println(" scanEnum ...");
- Vector enumList = null;
- int len;
-
- if (sp.lookingAtSpace(true))
- sp.skipPastSpaces();
-
- int prevNodeOffset = sp.getCurrentOffset();
- int nodeOffset;
-
- String nodeName;
-
- while (true) {
-
- if (isNotationType)
- sp.skipPastNameAndPEReference(')');
- else
- sp.skipPastNmtokenAndPEReference(')');
-
- nodeOffset = sp.getCurrentOffset();
-
- if (nodeOffset == -1) {
- return enumList;
- }
-
- len = nodeOffset - prevNodeOffset;
- nodeName = sp.getString(prevNodeOffset, len);
-
- if (enumList == null)
- enumList = new Vector();
-
- enumList.addElement(nodeName);
-
- if (sp.lookingAtSpace(true))
- sp.skipPastSpaces();
-
- if (!sp.lookingAtChar('|', true)) {
- if (!sp.lookingAtChar(')', true)) {
- System.out.println("scanning enum values - error missing ')'"); //$NON-NLS-1$
- break;
- }
- break;
- }
-
- if (sp.lookingAtSpace(true))
- sp.skipPastSpaces();
-
- prevNodeOffset = sp.getCurrentOffset();
- }
- return enumList;
- }
-
- //
- // [10] AttValue ::= '"' ([^<&"] | Reference)* '"'
- // | "'" ([^<&'] | Reference)* "'"
- //
- /**
- * Scan the default value in an attribute declaration
- *
- * @param elementType
- * handle to the element that owns the attribute
- * @param attrName
- * handle in the string pool for the attribute name
- * @return handle in the string pool for the default attribute value
- * @exception java.lang.Exception
- */
- public String scanDefaultAttValue(StringParser sp) {
- String value = null;
- // System.out.println("scan default ATT Value... sp:" + sp.fData);
-
- sp.skipPastSpaces();
-
- boolean single;
- if (!(single = sp.lookingAtChar('\'', true)) && !sp.lookingAtChar('\"', true)) {
- return value;
- }
-
- char qchar = single ? '\'' : '\"';
- int sOffset = sp.getCurrentOffset();
- sp.skipToChar(qchar, true);
- int len = sp.getCurrentOffset() - sOffset - 1;
- if (len == 0)
- value = ""; //$NON-NLS-1$
- else
- value = sp.getString(sOffset, len);
-
- return value;
- }
-
- //
- // [70] EntityDecl ::= GEDecl | PEDecl
- // [71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>'
- // [72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>'
- // [73] EntityDef ::= EntityValue | (ExternalID NDataDecl?)
- // [74] PEDef ::= EntityValue | ExternalID
- // [75] ExternalID ::= 'SYSTEM' S SystemLiteral
- // | 'PUBLIC' S PubidLiteral S SystemLiteral
- // [76] NDataDecl ::= S 'NDATA' S Name
- // [9] EntityValue ::= '"' ([^%&"] | PEReference | Reference)* '"'
- // | "'" ([^%&'] | PEReference | Reference)* "'"
- //
- // Called after scanning 'ENTITY'
- //
- public EntityDecl scanEntityDecl() {
- prevNodeOffset = 1;
- nodeOffset = 1;
- int len;
- boolean isPEDecl = false;
- EntityDecl entityDecl = null;
-
- String name = null;
- String ndata = null;
-
- if (contentString.lookingAtSpace(true)) {
- contentString.skipPastSpaces();
- if (!contentString.lookingAtChar('%', true)) {
- isPEDecl = false; // <!ENTITY x "x">
- }
- else if (contentString.lookingAtSpace(true)) {
- isPEDecl = true; // <!ENTITY % x "x">
- }
- prevNodeOffset = contentString.getCurrentOffset();
- contentString.skipPastName(' ');
- nodeOffset = contentString.getCurrentOffset();
- len = nodeOffset - prevNodeOffset;
- if (len > 0) {
- name = contentString.getString(prevNodeOffset, len);
- prevNodeOffset = nodeOffset;
- }
- }
-
- if (name == null)
- return null;
-
- contentString.skipPastSpaces();
- prevNodeOffset = contentString.getCurrentOffset();
-
- boolean single;
- if ((single = contentString.lookingAtChar('\'', true)) || contentString.lookingAtChar('\"', true)) {
- String value = scanEntityValue(single);
- entityDecl = new EntityDecl(name, ownerDTD, value, isPEDecl);
- }
- else {
- // external entity
- ExternalID xID = scanExternalID();
- if (xID != null) {
- if (!isPEDecl) // general entity
- {
- boolean unparsed = false;
- contentString.skipPastSpaces();
- unparsed = contentString.skippedString(ndata_string);
- if (unparsed) {
- contentString.skipPastSpaces();
- prevNodeOffset = contentString.getCurrentOffset();
- contentString.skipPastName(' ');
- nodeOffset = contentString.getCurrentOffset();
- len = nodeOffset - prevNodeOffset;
- ndata = contentString.getString(prevNodeOffset, len);
- }
- }
- entityDecl = new EntityDecl(name, ownerDTD, xID, isPEDecl, ndata);
- }
- }
- return entityDecl;
- }
-
-
- //
- // [82] NotationDecl ::= '<!NOTATION' S Name S (ExternalID | PublicID) S?
- // '>'
- // [75] ExternalID ::= 'SYSTEM' S SystemLiteral
- // | 'PUBLIC' S PubidLiteral S SystemLiteral
- // [83] PublicID ::= 'PUBLIC' S PubidLiteral
- //
- // Called after scanning 'NOTATION'
- //
- public NotationDecl scanNotationDecl() {
- prevNodeOffset = 1;
- nodeOffset = 1;
- int len;
- NotationDecl notationDecl = null;
-
- String name = null;
-
- if (contentString.lookingAtSpace(true)) {
- contentString.skipPastSpaces();
- prevNodeOffset = contentString.getCurrentOffset();
- contentString.skipPastName(' ');
- nodeOffset = contentString.getCurrentOffset();
- len = nodeOffset - prevNodeOffset;
- if (len > 0) {
- name = contentString.getString(prevNodeOffset, len);
- prevNodeOffset = nodeOffset;
- }
- }
-
- if (name == null)
- return null;
-
- contentString.skipPastSpaces();
- prevNodeOffset = contentString.getCurrentOffset();
-
- notationDecl = new NotationDecl(name, ownerDTD);
-
- ExternalID xID = scanExternalID();
- if (xID != null) {
- if (xID.getSystemLiteral() != null) {
- notationDecl.setSystemId(xID.getSystemLiteral());
- }
- if (xID.getPubIdLiteral() != null) {
- notationDecl.setPublicId(xID.getPubIdLiteral());
- }
- }
-
- return notationDecl;
- }
-
-
- private String scanEntityValue(boolean single) {
- char qchar = single ? '\'' : '\"';
- prevNodeOffset = contentString.getCurrentOffset();
- contentString.skipToChar(qchar, false);
- int len = contentString.getCurrentOffset() - prevNodeOffset;
- String value = contentString.getString(prevNodeOffset, len);
- return value;
- }
-
- //
- // [75] ExternalID ::= 'SYSTEM' S SystemLiteral
- // | 'PUBLIC' S PubidLiteral S SystemLiteral
- private ExternalID scanExternalID() {
- ExternalID xID = null;
- char qchar = '\"';
- if (contentString.skippedString(system_string)) {
- if (!contentString.lookingAtSpace(true)) {
- return null;
- }
- contentString.skipPastSpaces();
-
- if (contentString.lookingAtChar('\'', true))
- qchar = '\'';
- else if (contentString.lookingAtChar('\"', true))
- qchar = '\"';
-
- prevNodeOffset = contentString.getCurrentOffset();
- contentString.skipToChar(qchar, true);
- int len = contentString.getCurrentOffset() - prevNodeOffset - 1;
- String systemId = contentString.getString(prevNodeOffset, len);
- // System.out.println("systemid..." + systemId);
- xID = new ExternalID(systemId);
- }
- else if (contentString.skippedString(public_string)) {
- if (!contentString.lookingAtSpace(true)) {
- return null;
- }
-
- contentString.skipPastSpaces();
- if (contentString.lookingAtChar('\'', true))
- qchar = '\'';
- else if (contentString.lookingAtChar('\"', true))
- qchar = '\"';
-
- // publicLiteral
- prevNodeOffset = contentString.getCurrentOffset();
- contentString.skipToChar(qchar, true);
- int len = contentString.getCurrentOffset() - prevNodeOffset - 1;
- String publicId = contentString.getString(prevNodeOffset, len);
-
- // systemLiteral
- contentString.skipPastSpaces();
- if (contentString.lookingAtChar('\'', true))
- qchar = '\'';
- else if (contentString.lookingAtChar('\"', true))
- qchar = '\"';
- prevNodeOffset = contentString.getCurrentOffset();
- contentString.skipToChar(qchar, true);
- len = contentString.getCurrentOffset() - prevNodeOffset - 1;
-
- if (len > 0) {
- String systemId = contentString.getString(prevNodeOffset, len);
- xID = new ExternalID(publicId, systemId);
- }
- else {
- xID = new ExternalID(publicId, null);
- }
- }
- return xID;
- }
-
- //
- // [83] PublicID ::= 'PUBLIC' S PubidLiteral
- //
-
- // dmw 11/15 private method never read locally
- // TODO: change to private if used, otherwise should be removed
- String scanPublicID() {
- String pID = null;
- if (contentString.skippedString(public_string)) {
- if (!contentString.lookingAtSpace(true)) {
- return pID;
- }
- contentString.skipPastSpaces();
- prevNodeOffset = contentString.getCurrentOffset();
-
- contentString.skipToChar(' ', true);
- int len = contentString.getCurrentOffset() - prevNodeOffset;
- pID = contentString.getString(prevNodeOffset, len);
- }
-
- return pID;
- }
-
- //
- // Main
- //
-
- /** Main program entry point. */
- public static void main(String argv[]) {
-
- // is there anything to do?
- if (argv.length == 0) {
- System.exit(1);
- }
-
- // DTDScanner sc = new DTDScanner(argv[0]);
- DTDScanner sc = new DTDScanner("hello.dtd", " gif SYSTEM \"GIF File\" "); //$NON-NLS-1$ //$NON-NLS-2$
-
- NotationDecl n = sc.scanNotationDecl();
- System.out.println("Noation Name: " + n.getNodeName()); //$NON-NLS-1$
- System.out.println("SystemId: " + n.getSystemId()); //$NON-NLS-1$
-
-
- // Attributes
- // Vector lists = sc.scanAttlistDecl();
- // sc.printAttList(lists);
-
- // System.out.println("CM: " + sc.scanContentModel());
-
- } // main(String[])
-
- /**
- * Gets the errorString
- *
- * @return Returns a String
- */
- public String getErrorString() {
- return errorString;
- }
-
- /**
- * Sets the errorString
- *
- * @param errorString
- * The errorString to set
- */
- public void setErrorString(String errorString) {
- this.errorString = errorString;
- }
-
-}

Back to the top