You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by er...@locus.apache.org on 2000/07/07 23:23:29 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/framework XMLDTDScanner.java

ericye      00/07/07 14:23:29

  Modified:    java/src/org/apache/xerces/validators/common
                        XMLValidator.java Grammar.java
               java/src/org/apache/xerces/utils Hash2intTable.java
               java/src/org/apache/xerces/framework XMLDTDScanner.java
  Log:
  Change element form attribute behavior to be 100% consistent with Schema spec
  
  Revision  Changes    Path
  1.41      +11 -9     xml-xerces/java/src/org/apache/xerces/validators/common/XMLValidator.java
  
  Index: XMLValidator.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/validators/common/XMLValidator.java,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- XMLValidator.java	2000/07/05 18:17:56	1.40
  +++ XMLValidator.java	2000/07/07 21:23:27	1.41
  @@ -105,7 +105,7 @@
   /**
    * This class is the super all-in-one validator used by the parser.
    *
  - * @version $Id: XMLValidator.java,v 1.40 2000/07/05 18:17:56 ericye Exp $
  + * @version $Id: XMLValidator.java,v 1.41 2000/07/07 21:23:27 ericye Exp $
    */
   public final class XMLValidator
       implements DefaultEntityHandler.EventHandler,
  @@ -1698,13 +1698,14 @@
       }
   
       /** Returns an attribute definition for an element type. */
  +    // this is only used by DTD validation.
       private int getAttDef(QName element, QName attribute) {
           if (fGrammar != null) {
               int scope = fCurrentScope;
               if (element.uri > -1) {
                   scope = TOP_LEVEL_SCOPE;
               }
  -            int elementIndex = fGrammar.getElementDeclIndex(element.localpart,scope);
  +            int elementIndex = fGrammar.getElementDeclIndex(element,scope);
               if (elementIndex == -1) {
                   return -1;
               }
  @@ -2273,20 +2274,21 @@
                                      +"' and scope : " + fCurrentScope);
               }
   
  -            if (element.uri == -1) {
  -                elementIndex = fGrammar.getElementDeclIndex(element.localpart,fCurrentScope);
  -            }
  -            else {
  -                elementIndex = fGrammar.getElementDeclIndex(element.localpart, TOP_LEVEL_SCOPE);
  +            elementIndex = fGrammar.getElementDeclIndex(element,fCurrentScope);
  +
  +            if (elementIndex == -1 ) {
  +                elementIndex = fGrammar.getElementDeclIndex(element, TOP_LEVEL_SCOPE);
               }
   
               if (elementIndex == -1) {
                   // if validating based on a Schema, try to resolve the element again by look it up in its ancestor types
  -                if (element.uri == -1 && fGrammarIsSchemaGrammar && fCurrentElementIndex != -1) {
  +                if (fGrammarIsSchemaGrammar && fCurrentElementIndex != -1) {
                       TraverseSchema.ComplexTypeInfo baseTypeInfo = null;
                       baseTypeInfo = ((SchemaGrammar)fGrammar).getElementComplexTypeInfo(fCurrentElementIndex);
  +                    //TO DO: 
  +                    //      should check if baseTypeInfo is from the same Schema.
                       while (baseTypeInfo != null) {
  -                        elementIndex = fGrammar.getElementDeclIndex(element.localpart, baseTypeInfo.scopeDefined);
  +                        elementIndex = fGrammar.getElementDeclIndex(element, baseTypeInfo.scopeDefined);
                           if (elementIndex > -1 ) {
                               break;
                           }
  
  
  
  1.8       +14 -5     xml-xerces/java/src/org/apache/xerces/validators/common/Grammar.java
  
  Index: Grammar.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/validators/common/Grammar.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Grammar.java	2000/06/30 01:10:59	1.7
  +++ Grammar.java	2000/07/07 21:23:27	1.8
  @@ -69,7 +69,7 @@
   
   
   /**
  - * @version $Id: Grammar.java,v 1.7 2000/06/30 01:10:59 ericye Exp $
  + * @version $Id: Grammar.java,v 1.8 2000/07/07 21:23:27 ericye Exp $
    */
   public class Grammar
   implements XMLContentSpec.Provider {
  @@ -142,12 +142,19 @@
           return fGrammarDocument;
       }
   
  -    public int getElementDeclIndex(int nameIndex, int scopeIndex) {//TODO
  -        if (nameIndex > -1 && scopeIndex >-2 ) {
  -            return fElementNameAndScopeToElementDeclIndexMapping.get(nameIndex, scopeIndex);
  +    public int getElementDeclIndex(int uriIndex, int localpartIndex, int scopeIndex) {
  +        if ( localpartIndex > -1 && scopeIndex >-2 ) {
  +            return fElementNameAndScopeToElementDeclIndexMapping.get(uriIndex, localpartIndex, scopeIndex);
           }
           return -1;
       }
  +    
  +    public int getElementDeclIndex(QName element, int scopeIndex) {
  +        if ( element.localpart > -1 && scopeIndex >-2 ) {
  +            return fElementNameAndScopeToElementDeclIndexMapping.get(element.uri, element.localpart, scopeIndex);
  +        }
  +        return -1;
  +    }
   
       public boolean getElementDecl(int elementDeclIndex, XMLElementDecl elementDecl) {
           if (elementDeclIndex < 0 || elementDeclIndex >= fElementDeclCount) {
  @@ -349,7 +356,9 @@
           fElementDeclContentSpecIndex[chunk][index]        = elementDecl.contentSpecIndex;
   
           // add the mapping information to the 
  -        fElementNameAndScopeToElementDeclIndexMapping.put(elementDecl.name.localpart, elementDecl.enclosingScope, 
  +        fElementNameAndScopeToElementDeclIndexMapping.put(elementDecl.name.uri, 
  +                                                          elementDecl.name.localpart, 
  +                                                          elementDecl.enclosingScope, 
                                                             elementDeclIndex);
       }
   
  
  
  
  1.3       +19 -20    xml-xerces/java/src/org/apache/xerces/utils/Hash2intTable.java
  
  Index: Hash2intTable.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/utils/Hash2intTable.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Hash2intTable.java	2000/05/17 18:32:51	1.2
  +++ Hash2intTable.java	2000/07/07 21:23:28	1.3
  @@ -66,27 +66,28 @@
       
       
       private static final int INITIAL_BUCKET_SIZE = 4;
  -    private static final int HASHTABLE_SIZE = 128;
  +    private static final int HASHTABLE_SIZE = 256;
       private int[][] fHashTable = new int[HASHTABLE_SIZE][];
   
   
  -    public void put(int key1, int key2, int value) {
  -        int hash = (key1+key2+1) % HASHTABLE_SIZE;
  +    public void put(int key1, int key2, int key3, int value) {
  +        int hash = (key1+key2+key3+2) % HASHTABLE_SIZE;
           int[] bucket = fHashTable[hash];
           
           if (bucket == null) {
  -            bucket = new int[1 + 3*INITIAL_BUCKET_SIZE];
  +            bucket = new int[1 + 4*INITIAL_BUCKET_SIZE];
               bucket[0] = 1;
               bucket[1] = key1;
               bucket[2] = key2;
  -            bucket[3] = value;
  +            bucket[3] = key3;
  +            bucket[4] = value;
               fHashTable[hash] = bucket;
           } else {
               int count = bucket[0];
  -            int offset = 1 + 3*count;
  +            int offset = 1 + 4*count;
               if (offset == bucket.length) {
                   int newSize = count + INITIAL_BUCKET_SIZE;
  -                int[] newBucket = new int[1 + 3*newSize];
  +                int[] newBucket = new int[1 + 4*newSize];
                   System.arraycopy(bucket, 0, newBucket, 0, offset);
                   bucket = newBucket;
                   fHashTable[hash] = bucket;
  @@ -94,16 +95,18 @@
               boolean found = false;
               int j=1;
               for (int i=0; i<count; i++){
  -                if ( bucket[j] == key1 && bucket[j+1] == key2) {
  -                    bucket[j+2] = value;
  +                if ( bucket[j] == key1 && bucket[j+1] == key2
  +                     && bucket[j+2] == key3 ) {
  +                    bucket[j+3] = value;
                       found = true;
                       break;
                   }
  -                j += 3;
  +                j += 4;
               }
               if (! found) {
                   bucket[offset++] = key1;
                   bucket[offset++] = key2;
  +                bucket[offset++] = key3;
                   bucket[offset]= value;
                   bucket[0] = ++count;
               }
  @@ -111,8 +114,8 @@
           }
       }
   
  -    public int get(int key1, int key2) {
  -        int hash = (key1+key2+1) % HASHTABLE_SIZE;
  +    public int get(int key1, int key2, int key3) {
  +        int hash = (key1+key2+key3+2) % HASHTABLE_SIZE;
           int[] bucket = fHashTable[hash];
   
           if (bucket == null) {
  @@ -120,17 +123,13 @@
           }
           int count = bucket[0];
   
  -        boolean found = false;
           int j=1;
           for (int i=0; i<count; i++){
  -            if ( bucket[j] == key1 && bucket[j+1] == key2) {
  -                found = true;
  -                return bucket[j+2];
  +            if ( bucket[j] == key1 && bucket[j+1] == key2
  +                  && bucket[j+2] == key3) {
  +                return bucket[j+3];
               }
  -            j += 3;
  -        }
  -        if (! found) {
  -            return -1;
  +            j += 4;
           }
           return -1;
       }
  
  
  
  1.12      +4 -4      xml-xerces/java/src/org/apache/xerces/framework/XMLDTDScanner.java
  
  Index: XMLDTDScanner.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/framework/XMLDTDScanner.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- XMLDTDScanner.java	2000/06/30 21:46:51	1.11
  +++ XMLDTDScanner.java	2000/07/07 21:23:29	1.12
  @@ -90,7 +90,7 @@
    * </ol>
    *
    * @see XMLDTDScanner.EventHandler
  - * @version $Id: XMLDTDScanner.java,v 1.11 2000/06/30 21:46:51 jeffreyr Exp $
  + * @version $Id: XMLDTDScanner.java,v 1.12 2000/07/07 21:23:29 ericye Exp $
    */
   public final class XMLDTDScanner {
       //
  @@ -1785,7 +1785,7 @@
               return;
           }
           decreaseMarkupDepth();
  -        int elementIndex = fDTDGrammar.getElementDeclIndex(fElementQName.localpart, -1);
  +        int elementIndex = fDTDGrammar.getElementDeclIndex(fElementQName, -1);
           boolean elementDeclIsExternal = getReadingExternalEntity();
           if (elementIndex == -1) {
               elementIndex = fDTDGrammar.addElementDecl(fElementQName, contentSpecType, contentSpec, elementDeclIsExternal);
  @@ -2016,7 +2016,7 @@
                           XMLMessages.P52_ELEMENT_TYPE_REQUIRED);
               return;
           }
  -        int elementIndex = fDTDGrammar.getElementDeclIndex(fElementQName.localpart, -1);
  +        int elementIndex = fDTDGrammar.getElementDeclIndex(fElementQName, -1);
           if (elementIndex == -1) {
               elementIndex = fDTDGrammar.addElementDecl(fElementQName);
               //System.out.println("XMLDTDScanner#scanAttListDecl->DTDGrammar#addElementDecl: "+elementIndex+" ("+fElementQName.localpart+","+fStringPool.toString(fElementQName.localpart)+')');
  @@ -2256,7 +2256,7 @@
                                       enumString, 
                                       attDefDefaultType, attDefDefaultValue);
           }
  -        int elementIndex = fDTDGrammar.getElementDeclIndex(element.localpart, -1);
  +        int elementIndex = fDTDGrammar.getElementDeclIndex(element, -1);
           if (elementIndex == -1) {
               // REPORT Internal error here
           }