You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by an...@locus.apache.org on 2000/10/06 20:22:49 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/impl XMLDocumentScanner.java XMLEntityManager.java

andyc       00/10/06 11:22:49

  Modified:    java/src/org/apache/xerces/impl Tag: xerces_j_2
                        XMLDocumentScanner.java XMLEntityManager.java
  Log:
  Handle built-in entities: "amp", "lt", "gt", "quot", and "apos".
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.13  +86 -10    xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLDocumentScanner.java
  
  Index: XMLDocumentScanner.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLDocumentScanner.java,v
  retrieving revision 1.1.2.12
  retrieving revision 1.1.2.13
  diff -u -r1.1.2.12 -r1.1.2.13
  --- XMLDocumentScanner.java	2000/10/06 17:50:00	1.1.2.12
  +++ XMLDocumentScanner.java	2000/10/06 18:22:48	1.1.2.13
  @@ -100,7 +100,7 @@
    * @author Stubs generated by DesignDoc on Mon Sep 11 11:10:57 PDT 2000
    * @author Andy Clark, IBM
    *
  - * @version $Id: XMLDocumentScanner.java,v 1.1.2.12 2000/10/06 17:50:00 andyc Exp $
  + * @version $Id: XMLDocumentScanner.java,v 1.1.2.13 2000/10/06 18:22:48 andyc Exp $
    */
   public class XMLDocumentScanner
       extends XMLScanner
  @@ -283,6 +283,38 @@
       /** Single character array. */
       private final char[] fSingleChar = new char[1];
   
  +    // symbols
  +
  +    /** Symbol: "amp". */
  +    private String fAmpSymbol;
  +
  +    /** Symbol: "lt". */
  +    private String fLtSymbol;
  +
  +    /** Symbol: "gt". */
  +    private String fGtSymbol;
  +
  +    /** Symbol: "quot". */
  +    private String fQuotSymbol;
  +
  +    /** Symbol: "apos". */
  +    private String fAposSymbol;
  +
  +    /** Symbol: "version". */
  +    private String fVersionSymbol;
  +
  +    /** Symbol: "encoding". */
  +    private String fEncodingSymbol;
  +
  +    /** Symbol: "standalone". */
  +    private String fStandaloneSymbol;
  +
  +    /** Symbol: "xml". */
  +    private String fXmlSymbol;
  +
  +    /** Symbol: "xmlns". */
  +    private String fXmlnsSymbol;
  +
       //
       // Constructors
       //
  @@ -364,6 +396,18 @@
           fStandalone = false;
           fScanningDTD = false;
   
  +        // save built-in entity names
  +        fAmpSymbol = fSymbolTable.addSymbol("amp");
  +        fLtSymbol = fSymbolTable.addSymbol("lt");
  +        fGtSymbol = fSymbolTable.addSymbol("gt");
  +        fQuotSymbol = fSymbolTable.addSymbol("quot");
  +        fAposSymbol = fSymbolTable.addSymbol("apos");
  +        fVersionSymbol = fSymbolTable.addSymbol("version");
  +        fEncodingSymbol = fSymbolTable.addSymbol("encoding");
  +        fStandaloneSymbol = fSymbolTable.addSymbol("standalone");
  +        fXmlSymbol = fSymbolTable.addSymbol("xml");
  +        fXmlnsSymbol = fSymbolTable.addSymbol("xmlns");
  +
           // setup dispatcher
           setScannerState(SCANNER_STATE_XML_DECL);
           setDispatcher(fXMLDeclDispatcher);
  @@ -559,7 +603,7 @@
               String name = scanPseudoAttribute(fString);
               switch (state) {
                   case STATE_VERSION: {
  -                    if (name.equals("version")) {
  +                    if (name == fVersionSymbol) {
                           version = fString.toString();
                           state = STATE_ENCODING;
                           if (!version.equals("1.0")) {
  @@ -569,7 +613,7 @@
                                                          XMLErrorReporter.SEVERITY_FATAL_ERROR);
                           }
                       }
  -                    else if (name.equals("encoding")) {
  +                    else if (name == fEncodingSymbol) {
                           if (!scanningTextDecl) {
                               fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN, 
                                                          "VersionInfoRequired", 
  @@ -593,13 +637,13 @@
                       break;
                   }
                   case STATE_ENCODING: {
  -                    if (name.equals("encoding")) {
  +                    if (name == fEncodingSymbol) {
                           encoding = fString.toString();
                           state = scanningTextDecl ? STATE_DONE : STATE_STANDALONE;
                           // TODO: check encoding name; set encoding on
                           //       entity scanner
                       }
  -                    else if (!scanningTextDecl && name.equals("standalone")) {
  +                    else if (!scanningTextDecl && name == fStandaloneSymbol) {
                           standalone = fString.toString();
                           state = STATE_DONE;
                           if (!standalone.equals("yes") && !standalone.equals("no")) {
  @@ -616,7 +660,7 @@
                       break;
                   }
                   case STATE_STANDALONE: {
  -                    if (name.equals("standalone")) {
  +                    if (name == fStandaloneSymbol) {
                           standalone = fString.toString();
                           state = STATE_DONE;
                           if (!standalone.equals("yes") && !standalone.equals("no")) {
  @@ -1122,13 +1166,45 @@
               throw new SAXException("entity reference must end with semi-colon");
           }
   
  +        // handle built-in entities
  +        if (name == fAmpSymbol) {
  +            handleCharacter('&');
  +        }
  +        else if (name == fLtSymbol) {
  +            handleCharacter('<');
  +        }
  +        else if (name == fGtSymbol) {
  +            handleCharacter('>');
  +        }
  +        else if (name == fQuotSymbol) {
  +            handleCharacter('"');
  +        }
  +        else if (name == fAposSymbol) {
  +            handleCharacter('\'');
  +        }
  +        
           // start entity
  -        fEntityManager.startEntity(name);
  +        else {
  +            fEntityManager.startEntity(name);
  +        }
   
       } // scanEntityReference()
   
       // utility methods
   
  +    /** 
  +     * Calls document handler with a single character. 
  +     *
  +     * @param c
  +     */
  +    protected void handleCharacter(char c) throws SAXException {
  +        if (fDocumentHandler != null) {
  +            fSingleChar[0] = c;
  +            fString.setValues(fSingleChar, 0, 1);
  +            fDocumentHandler.characters(fString);
  +        }
  +    } // handleCharacter(char)
  +
       /**
        * Binds the namespaces. This method will handle calling the
        * document handler to start the prefix mappings.
  @@ -1186,11 +1262,11 @@
               String arawname = fAttributeQName.rawname;
               String aprefix = fAttributeQName.prefix != null 
                              ? fAttributeQName.prefix : "";
  -            if (aprefix.equals("xml")) {
  +            if (aprefix == fXmlSymbol) {
                   fAttributeQName.uri = NamespaceSupport.XMLNS;
                   attributes.setName(i, fAttributeQName);
               }
  -            else if (!arawname.equals("xmlns") && !arawname.startsWith("xmlns:")) {
  +            else if (arawname != fXmlnsSymbol && !arawname.startsWith("xmlns:")) {
                   if (fAttributeQName.prefix != null) {
                       fAttributeQName.uri = fNamespaceSupport.getURI(fAttributeQName.prefix);
                       if (fAttributeQName.uri == null) {
  @@ -1225,7 +1301,7 @@
   
           // make sure the elements match
           QName startElement = (QName)fElementStack.pop();
  -        if (!element.rawname.equals(startElement.rawname)) {
  +        if (element.rawname != startElement.rawname) {
               // REVISIT: report error
               throw new SAXException("end tag doesn't match start tag");
           }
  
  
  
  1.1.2.8   +4 -9      xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLEntityManager.java
  
  Index: XMLEntityManager.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/Attic/XMLEntityManager.java,v
  retrieving revision 1.1.2.7
  retrieving revision 1.1.2.8
  diff -u -r1.1.2.7 -r1.1.2.8
  --- XMLEntityManager.java	2000/10/06 03:49:34	1.1.2.7
  +++ XMLEntityManager.java	2000/10/06 18:22:48	1.1.2.8
  @@ -105,7 +105,7 @@
    * @author Stubs generated by DesignDoc on Mon Sep 18 18:23:16 PDT 2000
    * @author Andy Clark, IBM
    *
  - * @version $Id: XMLEntityManager.java,v 1.1.2.7 2000/10/06 03:49:34 andyc Exp $
  + * @version $Id: XMLEntityManager.java,v 1.1.2.8 2000/10/06 18:22:48 andyc Exp $
    */
   public class XMLEntityManager
       implements XMLComponent {
  @@ -362,13 +362,6 @@
           fEntities.clear();
           fEntityStack.removeAllElements();
   
  -        // add default entities
  -        addInternalEntity("lt", "<");
  -        addInternalEntity("gt", ">");
  -        addInternalEntity("amp", "&");
  -        addInternalEntity("apos", "'");
  -        addInternalEntity("quot", "\"");
  -
       } // reset(XMLComponentManager)
   
       /**
  @@ -473,7 +466,9 @@
   
           // call handler
           if (fEntityHandler != null) {
  -            String ianaEncoding = EncodingMap.getJava2IANAMapping(encoding);
  +            String ianaEncoding = encoding != null
  +                                ? EncodingMap.getJava2IANAMapping(encoding)
  +                                : null;
               fEntityHandler.startEntity(name, publicId, systemId, ianaEncoding);
           }