sandygao    2002/09/23 11:30:02

  Modified:    java/src/org/apache/xerces/impl/xs XMLSchemaValidator.java
  Log:
  1. A typo in "endElement" call: should apply schema default element value
  when the "schema default" feature is "on", istead of "off".
  2. Cleaned up some code related to normalizing data.
  
  Revision  Changes    Path
  1.103     +39 -99    
xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
  
  Index: XMLSchemaValidator.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java,v
  retrieving revision 1.102
  retrieving revision 1.103
  diff -u -r1.102 -r1.103
  --- XMLSchemaValidator.java   19 Sep 2002 18:19:19 -0000      1.102
  +++ XMLSchemaValidator.java   23 Sep 2002 18:30:02 -0000      1.103
  @@ -821,47 +821,30 @@
           // REVISIT: this methods basically duplicates implementation of
           //          handleCharacters(). We should be able to reuse some code
   
  -        boolean allWhiteSpace = true;
  -        boolean normalizedStr = false;
  -
  -        if (fNormalizeData) {
  -            // if whitespace == -1 skip normalization, because it is a complexType
  -            if (fWhiteSpace != -1 && fWhiteSpace != XSSimpleType.WS_PRESERVE) {
  -                // normalize data
  -                normalizeWhitespace(data, fWhiteSpace == XSSimpleType.WS_COLLAPSE);
  -                normalizedStr = true;
  -            }
  -        }
  -
  -        if (normalizedStr) {
  +        // if whitespace == -1 skip normalization, because it is a complexType
  +        // or a union type.
  +        if (fNormalizeData && fWhiteSpace != -1 && fWhiteSpace != 
XSSimpleType.WS_PRESERVE) {
  +            // normalize data
  +            normalizeWhitespace(data, fWhiteSpace == XSSimpleType.WS_COLLAPSE);
               fBuffer.append(fNormalizedStr.ch, fNormalizedStr.offset, 
fNormalizedStr.length);
  -        } else {
  +        }
  +        else {
               fBuffer.append(data);
           }
   
  -        boolean mixed = false;
  +        // When it's a complex type with element-only content, we need to
  +        // find out whether the content contains any non-whitespace character.
  +        boolean allWhiteSpace = true;
           if (fCurrentType != null && fCurrentType.getTypeCategory() == 
XSTypeDecl.COMPLEX_TYPE) {
               XSComplexTypeDecl ctype = (XSComplexTypeDecl)fCurrentType;
  -            if (ctype.fContentType == XSComplexTypeDecl.CONTENTTYPE_MIXED) {
  -                mixed = true;
  -            }
  -        }
  -
  -        if (DEBUG) {
  -            System.out.println("==>characters("+data+")," 
+fCurrentType.getName()+","+mixed);
  -        }
  -
  -        if (mixed || fWhiteSpace !=-1 || fUnionType) {
  -        // don't check characters: since it is either
  -        // a) mixed content model - we don't care if there were some characters
  -        // b) simpleType/simpleContent - in which case it is data in ELEMENT content
  -        }
  -        else  {
  -            // data outside of element content
  -            for (int i=0; i< data.length(); i++) {
  -                if (!XMLChar.isSpace(data.charAt(i))) {
  -                    allWhiteSpace = false;
  -                    break;
  +            if (ctype.fContentType == XSComplexTypeDecl.CONTENTTYPE_ELEMENT) {
  +                // data outside of element content
  +                for (int i=0; i< data.length(); i++) {
  +                    if (!XMLChar.isSpace(data.charAt(i))) {
  +                        allWhiteSpace = false;
  +                        fSawCharacters = true;
  +                        break;
  +                    }
                   }
               }
           }
  @@ -869,9 +852,6 @@
           // we saw first chunk of characters
           fFirstChunk = false;
   
  -        if (!allWhiteSpace) {
  -            fSawCharacters = true;
  -        }
           return allWhiteSpace;
       }
   
  @@ -1475,57 +1455,34 @@
           if (fSkipValidationDepth >= 0)
               return;
   
  -        boolean allWhiteSpace = true;
  -
  -        // find out if type is union, what is whitespace,
  -        // determine if there is a need to do normalization
           // Note: data in EntityRef and CDATA is normalized as well
  -        if (fNormalizeData) {
  -            // if whitespace == -1 skip normalization, because it is a complexType
  -            if (fWhiteSpace != -1 && !fUnionType && fWhiteSpace != 
XSSimpleType.WS_PRESERVE) {
  -                // normalize data
  -                normalizeWhitespace(text, fWhiteSpace == XSSimpleType.WS_COLLAPSE);
  -                text = fNormalizedStr;
  -            }
  +        // if whitespace == -1 skip normalization, because it is a complexType
  +        // or a union type.
  +        if (fNormalizeData && fWhiteSpace != -1 && fWhiteSpace != 
XSSimpleType.WS_PRESERVE) {
  +            // normalize data
  +            normalizeWhitespace(text, fWhiteSpace == XSSimpleType.WS_COLLAPSE);
  +            text = fNormalizedStr;
           }
  -
           fBuffer.append(text.ch, text.offset, text.length);
           
  -        boolean mixed = false;
  +        // When it's a complex type with element-only content, we need to
  +        // find out whether the content contains any non-whitespace character.
           if (fCurrentType != null && fCurrentType.getTypeCategory() == 
XSTypeDecl.COMPLEX_TYPE) {
  -              XSComplexTypeDecl ctype = (XSComplexTypeDecl)fCurrentType;
  -              if (ctype.fContentType == XSComplexTypeDecl.CONTENTTYPE_MIXED) {
  -                    mixed = true;
  -              }
  -        }
  -
  -        if (DEBUG) {
  -         System.out.println("==>characters("+text.toString()+")," 
+fCurrentType.getName()+","+mixed);
  -        }
  -
  -        if (mixed || fWhiteSpace !=-1 || fUnionType) {
  -            // don't check characters: since it is either
  -            // a) mixed content model - we don't care if there were some characters
  -            // b) simpleType/simpleContent - in which case it is data in ELEMENT 
content
  -        }
  -        else  {
  -            // data outside of element content
  -            for (int i=text.offset; i< text.offset+text.length; i++) {
  -                if (!XMLChar.isSpace(text.ch[i])) {
  -                    allWhiteSpace = false;
  -                    break;
  +            XSComplexTypeDecl ctype = (XSComplexTypeDecl)fCurrentType;
  +            if (ctype.fContentType == XSComplexTypeDecl.CONTENTTYPE_ELEMENT) {
  +                // data outside of element content
  +                for (int i=text.offset; i< text.offset+text.length; i++) {
  +                    if (!XMLChar.isSpace(text.ch[i])) {
  +                        fSawCharacters = true;
  +                        break;
  +                    }
                   }
               }
           }
   
  -
           // we saw first chunk of characters
           fFirstChunk = false;
   
  -        if (!allWhiteSpace) {
  -            fSawCharacters = true;
  -        }
  -
       } // handleCharacters(XMLString)
   
       /**
  @@ -1553,7 +1510,7 @@
           
           for (int i = value.offset; i < size; i++) {
               c = value.ch[i];
  -            if (c == 0x20 || c == 0x0D || c == 0x0A || c == 0x09) {
  +            if (XMLChar.isSpace(c)) {
                   if (!skipSpace) {
                       // take the first whitespace as a space and skip the others
                       fNormalizedStr.ch[fNormalizedStr.length++] = ' ';
  @@ -1610,11 +1567,8 @@
       }
   
   
  -    private int normalizeWhitespace( String value, boolean collapse) {
  +    private void normalizeWhitespace( String value, boolean collapse) {
           boolean skipSpace = collapse;
  -        boolean sawNonWS = false;
  -        int leading = 0;
  -        int trailing = 0;
           char c;
           int size = value.length();
   
  @@ -1627,38 +1581,24 @@
   
           for (int i = 0; i < size; i++) {
               c = value.charAt(i);
  -            if (c == 0x20 || c == 0x0D || c == 0x0A || c == 0x09) {
  +            if (XMLChar.isSpace(c)) {
                   if (!skipSpace) {
                       // take the first whitespace as a space and skip the others
                       fNormalizedStr.ch[fNormalizedStr.length++] = ' ';
                       skipSpace = collapse;
                   }
  -                if (!sawNonWS) {
  -                    // this is a leading whitespace, record it
  -                    leading = 1;
  -                }
               }
               else {
                   fNormalizedStr.ch[fNormalizedStr.length++] = c;
                   skipSpace = false;
  -                sawNonWS = true;
               }
           }
           if (skipSpace) {
  -            if (fNormalizedStr.length != 0) {
  +            if (fNormalizedStr.length != 0)
                   // if we finished on a space trim it but also record it
                   fNormalizedStr.length--;
  -                trailing = 2;
  -            }
  -            else if (leading != 0 && !sawNonWS) {
  -                // if all we had was whitespace we skipped record it as
  -                // trailing whitespace as well
  -                trailing = 2;
  -            }
           }
  -        return collapse ? leading + trailing : 0;
       }
  -
   
       // handle ignorable whitespace
       void handleIgnorableWhitespace(XMLString text) {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to