neilg       2003/06/05 14:49:04

  Modified:    java/src/org/apache/xerces/impl XMLScanner.java
                        XMLDTDScannerImpl.java
                        XMLDocumentFragmentScannerImpl.java
  Log:
  fix non-conformance to namespaces (1.0 and 1.1) with respect to ENTITY/NOTATION/PI 
names
  
  Revision  Changes    Path
  1.33      +33 -5     xml-xerces/java/src/org/apache/xerces/impl/XMLScanner.java
  
  Index: XMLScanner.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLScanner.java,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- XMLScanner.java   29 May 2003 13:25:41 -0000      1.32
  +++ XMLScanner.java   5 Jun 2003 21:49:03 -0000       1.33
  @@ -82,7 +82,8 @@
    * This component requires the following features and properties from the
    * component manager that uses it:
    * <ul>
  - *  <li>http://xml.org/sax/features/validation</li>
  + *  <li>http://xml.org/sax/features/validation</li> 
  + *  <li>http://xml.org/sax/features/namespaces</li>
    *  <li>http://apache.org/xml/features/scanner/notify-char-refs</li>
    *  <li>http://apache.org/xml/properties/internal/symbol-table</li>
    *  <li>http://apache.org/xml/properties/internal/error-reporter</li>
  @@ -108,6 +109,10 @@
       protected static final String VALIDATION =
           Constants.SAX_FEATURE_PREFIX + Constants.VALIDATION_FEATURE;
   
  +    /** Feature identifier: namespaces. */
  +    protected static final String NAMESPACES = 
  +        Constants.SAX_FEATURE_PREFIX + Constants.NAMESPACES_FEATURE;
  +
       /** Feature identifier: notify character references. */
       protected static final String NOTIFY_CHAR_REFS =
           Constants.XERCES_FEATURE_PREFIX + Constants.NOTIFY_CHAR_REFS_FEATURE;
  @@ -143,6 +148,9 @@
        */
       protected boolean fValidation = false;
       
  +    /** Namespaces. */
  +    protected boolean fNamespaces;
  +
       /** Character references notification. */
       protected boolean fNotifyCharRefs = false;
   
  @@ -252,6 +260,12 @@
               fValidation = false;
           }
           try {
  +            fNamespaces = componentManager.getFeature(NAMESPACES);
  +        }
  +        catch (XMLConfigurationException e) {
  +            fNamespaces = true;
  +        }
  +        try {
               fNotifyCharRefs = componentManager.getFeature(NOTIFY_CHAR_REFS);
           }
           catch (XMLConfigurationException e) {
  @@ -598,7 +612,12 @@
   
           // target
           fReportEntity = false;
  -        String target = fEntityScanner.scanName();
  +        String target = null;
  +        if(fNamespaces) {
  +            target = fEntityScanner.scanNCName();
  +        } else {
  +            target = fEntityScanner.scanName();
  +        }
           if (target == null) {
               reportFatalError("PITargetRequired", null);
           }
  @@ -641,8 +660,17 @@
                   return;
               }
               else {
  -                // if there is data there should be some space
  -                reportFatalError("SpaceRequiredInPI", null);
  +                if(fNamespaces && fEntityScanner.peekChar() == ':') { 
  +                    fEntityScanner.scanChar();
  +                    XMLStringBuffer colonName = new XMLStringBuffer(target);
  +                    colonName.append(":");
  +                    colonName.append(fEntityScanner.scanName());
  +                    reportFatalError("ColonNotLegalWithNS", new Object[] 
{colonName.toString()});
  +                    fEntityScanner.skipSpaces();
  +                } else {
  +                    // if there is data there should be some space
  +                    reportFatalError("SpaceRequiredInPI", null);
  +                }
               }
           }
   
  
  
  
  1.42      +37 -6     
xml-xerces/java/src/org/apache/xerces/impl/XMLDTDScannerImpl.java
  
  Index: XMLDTDScannerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLDTDScannerImpl.java,v
  retrieving revision 1.41
  retrieving revision 1.42
  diff -u -r1.41 -r1.42
  --- XMLDTDScannerImpl.java    14 May 2003 19:24:17 -0000      1.41
  +++ XMLDTDScannerImpl.java    5 Jun 2003 21:49:03 -0000       1.42
  @@ -1473,13 +1473,29 @@
           }
   
           // name
  -        String name = fEntityScanner.scanName();
  +        String name = null;
  +        if(fNamespaces) {
  +            name = fEntityScanner.scanNCName();
  +        } else { 
  +            name = fEntityScanner.scanName();
  +        }
           if (name == null) {
               reportFatalError("MSG_ENTITY_NAME_REQUIRED_IN_ENTITYDECL", null);
           }
  -
           // spaces
           if (!skipSeparator(true, !scanningInternalSubset())) {
  +            if(fNamespaces && fEntityScanner.peekChar() == ':') {
  +                fEntityScanner.scanChar();
  +                XMLStringBuffer colonName = new XMLStringBuffer(name);
  +                colonName.append(":");
  +                colonName.append(fEntityScanner.scanName());
  +                reportFatalError("ColonNotLegalWithNS", new Object[] 
{colonName.toString()});
  +            } 
  +            if (!skipSeparator(true, !scanningInternalSubset())) {
  +                
reportFatalError("MSG_SPACE_REQUIRED_AFTER_ENTITY_NAME_IN_ENTITYDECL",
  +                             new Object[]{name});
  +            }
  +        } else {
               reportFatalError("MSG_SPACE_REQUIRED_AFTER_ENTITY_NAME_IN_ENTITYDECL",
                                new Object[]{name});
           }
  @@ -1707,7 +1723,12 @@
           }
   
           // notation name
  -        String name = fEntityScanner.scanName();
  +        String name = null;
  +        if(fNamespaces) {
  +            name = fEntityScanner.scanNCName();
  +        } else {
  +            name = fEntityScanner.scanName();
  +        }
           if (name == null) {
               reportFatalError("MSG_NOTATION_NAME_REQUIRED_IN_NOTATIONDECL",
                                null);
  @@ -1715,8 +1736,18 @@
   
           // spaces
           if (!skipSeparator(true, !scanningInternalSubset())) {
  -            
reportFatalError("MSG_SPACE_REQUIRED_AFTER_NOTATION_NAME_IN_NOTATIONDECL",
  -                             new Object[]{name});
  +            // check for invalid ":"
  +            if(fNamespaces && fEntityScanner.peekChar() == ':') {
  +                fEntityScanner.scanChar();
  +                XMLStringBuffer colonName = new XMLStringBuffer(name);
  +                colonName.append(":");
  +                colonName.append(fEntityScanner.scanName());
  +                reportFatalError("ColonNotLegalWithNS", new Object[] 
{colonName.toString()});
  +                skipSeparator(true, !scanningInternalSubset());
  +            } else {
  +                
reportFatalError("MSG_SPACE_REQUIRED_AFTER_NOTATION_NAME_IN_NOTATIONDECL",
  +                                new Object[]{name});
  +            }
           }
   
           // external id
  
  
  
  1.34      +1 -11     
xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentFragmentScannerImpl.java
  
  Index: XMLDocumentFragmentScannerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentFragmentScannerImpl.java,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- XMLDocumentFragmentScannerImpl.java       29 May 2003 13:25:41 -0000      1.33
  +++ XMLDocumentFragmentScannerImpl.java       5 Jun 2003 21:49:03 -0000       1.34
  @@ -85,7 +85,6 @@
    * This component requires the following features and properties from the
    * component manager that uses it:
    * <ul>
  - *  <li>http://xml.org/sax/features/namespaces</li>
    *  <li>http://xml.org/sax/features/validation</li>
    *  <li>http://apache.org/xml/features/scanner/notify-char-refs</li>
    *  <li>http://apache.org/xml/features/scanner/notify-builtin-refs</li>
  @@ -241,9 +240,6 @@
   
       // features
   
  -    /** Namespaces. */
  -    protected boolean fNamespaces;
  -
       /** Notify built-in references. */
       protected boolean fNotifyBuiltInRefs = false;
   
  @@ -374,12 +370,6 @@
           //fDocumentSystemId = null;
   
           // sax features
  -        try {
  -            fNamespaces = componentManager.getFeature(NAMESPACES);
  -        }
  -        catch (XMLConfigurationException e) {
  -            fNamespaces = true;
  -        }
           fAttributes.setNamespaces(fNamespaces);
   
           // xerces features
  
  
  

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

Reply via email to