knoaman     2002/12/03 17:57:10

  Modified:    c/src/xercesc/parsers XercesDOMParser.cpp SAXParser.hpp
                        SAXParser.cpp SAX2XMLReaderImpl.hpp
                        SAX2XMLReaderImpl.cpp DOMBuilderImpl.cpp
                        AbstractDOMParser.hpp AbstractDOMParser.cpp
  Log:
  Scanner re-organization.
  
  Revision  Changes    Path
  1.9       +4 -3      xml-xerces/c/src/xercesc/parsers/XercesDOMParser.cpp
  
  Index: XercesDOMParser.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/XercesDOMParser.cpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XercesDOMParser.cpp       4 Nov 2002 14:57:03 -0000       1.8
  +++ XercesDOMParser.cpp       4 Dec 2002 01:57:09 -0000       1.9
  @@ -74,6 +74,7 @@
   #include <xercesc/util/IOException.hpp>
   #include <xercesc/internal/XMLScanner.hpp>
   #include <xercesc/parsers/XercesDOMParser.hpp>
  +#include <xercesc/validators/common/GrammarResolver.hpp>
   
   XERCES_CPP_NAMESPACE_BEGIN
   
  @@ -111,7 +112,7 @@
   
   Grammar* XercesDOMParser::getGrammar(const XMLCh* const nameSpaceKey)
   {
  -    return getScanner()->getGrammar(nameSpaceKey);
  +    return getGrammarResolver()->getGrammar(nameSpaceKey);
   }
   
   Grammar* XercesDOMParser::getRootGrammar()
  @@ -319,7 +320,7 @@
   
   void XercesDOMParser::resetCachedGrammarPool()
   {
  -    getScanner()->resetCachedGrammarPool();
  +    getGrammarResolver()->resetCachedGrammar();
   }
   
   XERCES_CPP_NAMESPACE_END
  
  
  
  1.15      +58 -11    xml-xerces/c/src/xercesc/parsers/SAXParser.hpp
  
  Index: SAXParser.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/SAXParser.hpp,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- SAXParser.hpp     4 Nov 2002 14:57:03 -0000       1.14
  +++ SAXParser.hpp     4 Dec 2002 01:57:09 -0000       1.15
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.15  2002/12/04 01:57:09  knoaman
  + * Scanner re-organization.
  + *
    * Revision 1.14  2002/11/04 14:57:03  tng
    * C++ Namespace Support.
    *
  @@ -199,6 +202,7 @@
   class XMLScanner;
   class XMLValidator;
   class Grammar;
  +class GrammarResolver;
   
   
   /**
  @@ -478,6 +482,19 @@
       bool isUsingCachedGrammarInParse() const;
   
       /**
  +      * Get the 'calculate src offset flag'
  +      *
  +      * This method returns the state of the parser's src offset calculation
  +      * when parsing an XML document.
  +      *
  +      * @return true, if the parser is currently configured to
  +      *         calculate src offsets, false otherwise.
  +      *
  +      * @see #setCalculateSrcOfs
  +      */
  +    bool getCalculateSrcOfs() const;
  +
  +    /**
        * Retrieve the grammar that is associated with the specified namespace key
        *
        * @param  nameSpaceKey Namespace key
  @@ -730,6 +747,28 @@
         */
       void useCachedGrammarInParse(const bool newState);
   
  +    /** Enable/disable src offset calculation
  +      *
  +      * This method allows users to enable/disable src offset calculation.
  +      * Disabling the calculation will improve performance.
  +      *
  +      * The parser's default state is: true.
  +      *
  +      * @param newState The value specifying whether we should enable or
  +      *                 disable src offset calculation
  +      *
  +      * @see #getCalculateSrcOfs
  +      */
  +    void setCalculateSrcOfs(const bool newState);
  +
  +    /** Set the scanner to use when scanning the XML document
  +      *
  +      * This method allows users to set the scanner to use
  +      * when scanning a given XML document.
  +      *
  +      * @param scannerName The name of the desired scanner
  +      */
  +    void useScanner(const XMLCh* const scannerName);
   
       //@}
   
  @@ -1803,6 +1842,11 @@
       SAXParser(const SAXParser&);
       void operator=(const SAXParser&);
   
  +    // -----------------------------------------------------------------------
  +    //  Initialize/Cleanup methods
  +    // -----------------------------------------------------------------------
  +    void initialize();
  +    void cleanUp();
   
       // -----------------------------------------------------------------------
       //  Private data members
  @@ -1851,17 +1895,20 @@
       //      during construction.
       //
       // -----------------------------------------------------------------------
  -    VecAttrListImpl         fAttrList;
  -    DocumentHandler*        fDocHandler;
  -    DTDHandler*             fDTDHandler;
  -    unsigned int            fElemDepth;
  -    EntityResolver*         fEntityResolver;
  -    ErrorHandler*           fErrorHandler;
  -    unsigned int            fAdvDHCount;
  -    XMLDocumentHandler**    fAdvDHList;
  -    unsigned int            fAdvDHListSize;
  -    bool                    fParseInProgress;
  -    XMLScanner*             fScanner;
  +    bool                 fParseInProgress;
  +    unsigned int         fElemDepth;
  +    unsigned int         fAdvDHCount;
  +    unsigned int         fAdvDHListSize;
  +    VecAttrListImpl      fAttrList;
  +    DocumentHandler*     fDocHandler;
  +    DTDHandler*          fDTDHandler;
  +    EntityResolver*      fEntityResolver;
  +    ErrorHandler*        fErrorHandler;
  +    XMLDocumentHandler** fAdvDHList;
  +    XMLScanner*          fScanner;
  +    GrammarResolver*     fGrammarResolver;
  +    XMLStringPool*       fURIStringPool;
  +    XMLValidator*        fValidator;
   };
   
   
  
  
  
  1.10      +76 -13    xml-xerces/c/src/xercesc/parsers/SAXParser.cpp
  
  Index: SAXParser.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/SAXParser.cpp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SAXParser.cpp     4 Nov 2002 14:57:03 -0000       1.9
  +++ SAXParser.cpp     4 Dec 2002 01:57:09 -0000       1.10
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.10  2002/12/04 01:57:09  knoaman
  + * Scanner re-organization.
  + *
    * Revision 1.9  2002/11/04 14:57:03  tng
    * C++ Namespace Support.
    *
  @@ -183,14 +186,16 @@
   // ---------------------------------------------------------------------------
   //  Includes
   // ---------------------------------------------------------------------------
  +#include <xercesc/parsers/SAXParser.hpp>
  +#include <xercesc/internal/XMLScannerResolver.hpp>
  +#include <xercesc/framework/XMLValidator.hpp>
   #include <xercesc/util/IOException.hpp>
   #include <xercesc/sax/DocumentHandler.hpp>
   #include <xercesc/sax/DTDHandler.hpp>
   #include <xercesc/sax/ErrorHandler.hpp>
   #include <xercesc/sax/EntityResolver.hpp>
   #include <xercesc/sax/SAXParseException.hpp>
  -#include <xercesc/internal/XMLScanner.hpp>
  -#include <xercesc/parsers/SAXParser.hpp>
  +#include <xercesc/validators/common/GrammarResolver.hpp>
   #include <string.h>
   
   XERCES_CPP_NAMESPACE_BEGIN
  @@ -201,32 +206,66 @@
   // ---------------------------------------------------------------------------
   SAXParser::SAXParser(XMLValidator* const valToAdopt) :
   
  -    fDocHandler(0)
  -    , fDTDHandler(0)
  +    fParseInProgress(false)
       , fElemDepth(0)
  +    , fAdvDHCount(0)
  +    , fAdvDHListSize(32)
  +    , fDocHandler(0)
  +    , fDTDHandler(0)
       , fEntityResolver(0)
       , fErrorHandler(0)
  -    , fAdvDHCount(0)
       , fAdvDHList(0)
  -    , fAdvDHListSize(32)
  -    , fParseInProgress(false)
       , fScanner(0)
  +    , fGrammarResolver(0)
  +    , fURIStringPool(0)
  +    , fValidator(valToAdopt)
  +{
  +    try
  +    {
  +        initialize();
  +    }
  +    catch(...)
  +    {
  +        cleanUp();
  +        throw;
  +    }
  +}
  +
  +
  +SAXParser::~SAXParser()
   {
  +    cleanUp();
  +}
  +
  +// ---------------------------------------------------------------------------
  +//  SAXParser: Initialize/CleanUp methods
  +// ---------------------------------------------------------------------------
  +void SAXParser::initialize()
  +{
  +    // Create grammar resolver and string pool to pass to scanner
  +    fGrammarResolver = new GrammarResolver();
  +    fURIStringPool = new XMLStringPool();
  +
       // Create our scanner and tell it what validator to use
  -    fScanner = new XMLScanner(valToAdopt);
  +    fScanner = XMLScannerResolver::getDefaultScanner(fValidator);
  +    fScanner->setGrammarResolver(fGrammarResolver);
  +    fScanner->setURIStringPool(fURIStringPool);
   
       // Create the initial advanced handler list array and zero it out
       fAdvDHList = new XMLDocumentHandler*[fAdvDHListSize];
       memset(fAdvDHList, 0, sizeof(void*) * fAdvDHListSize);
   }
   
  -
  -SAXParser::~SAXParser()
  +void SAXParser::cleanUp()
   {
       delete [] fAdvDHList;
       delete fScanner;
  -}
  +    delete fGrammarResolver;
  +    delete fURIStringPool;
   
  +    if (fValidator)
  +        delete fValidator;
  +}
   
   
   // ---------------------------------------------------------------------------
  @@ -396,9 +435,14 @@
       return fScanner->isUsingCachedGrammarInParse();
   }
   
  +bool SAXParser::getCalculateSrcOfs() const
  +{
  +    return fScanner->getCalculateSrcOfs();
  +}
  +
   Grammar* SAXParser::getGrammar(const XMLCh* const nameSpaceKey)
   {
  -    return fScanner->getGrammar(nameSpaceKey);
  +    return fGrammarResolver->getGrammar(nameSpaceKey);
   }
   
   Grammar* SAXParser::getRootGrammar()
  @@ -489,6 +533,25 @@
           fScanner->useCachedGrammarInParse(newState);
   }
   
  +void SAXParser::setCalculateSrcOfs(const bool newState)
  +{
  +    fScanner->setCalculateSrcOfs(newState);
  +}
  +
  +void SAXParser::useScanner(const XMLCh* const scannerName)
  +{
  +    XMLScanner* tempScanner = XMLScannerResolver::resolveScanner(scannerName, 
fValidator);
  +
  +    if (tempScanner) {
  +
  +        // REVISIT: need to set scanner options and handlers
  +        delete fScanner;
  +        fScanner = tempScanner;
  +        fScanner->setGrammarResolver(fGrammarResolver);
  +        fScanner->setURIStringPool(fURIStringPool);
  +    }
  +}
  +
   
   // ---------------------------------------------------------------------------
   //  SAXParser: Overrides of the SAX Parser interface
  @@ -1258,7 +1321,7 @@
   
   void SAXParser::resetCachedGrammarPool()
   {
  -    fScanner->resetCachedGrammarPool();
  +    fGrammarResolver->resetCachedGrammar();
   }
   
   XERCES_CPP_NAMESPACE_END
  
  
  
  1.15      +34 -30    xml-xerces/c/src/xercesc/parsers/SAX2XMLReaderImpl.hpp
  
  Index: SAX2XMLReaderImpl.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/SAX2XMLReaderImpl.hpp,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- SAX2XMLReaderImpl.hpp     4 Nov 2002 14:57:03 -0000       1.14
  +++ SAX2XMLReaderImpl.hpp     4 Dec 2002 01:57:09 -0000       1.15
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.15  2002/12/04 01:57:09  knoaman
  + * Scanner re-organization.
  + *
    * Revision 1.14  2002/11/04 14:57:03  tng
    * C++ Namespace Support.
    *
  @@ -199,6 +202,7 @@
   class ContentHandler;
   class LexicalHandler;
   class DeclHandler;
  +class GrammarResolver;
   
   /**
     * This class implements the SAX2 'XMLReader' interface and should be
  @@ -1643,6 +1647,12 @@
       void operator=(const SAX2XMLReaderImpl&);
   
       // -----------------------------------------------------------------------
  +    //  Initialize/Cleanup methods
  +    // -----------------------------------------------------------------------
  +    void initialize();
  +    void cleanUp();
  +
  +    // -----------------------------------------------------------------------
       //  Private data members
       //
       //  fAttrList
  @@ -1722,30 +1732,30 @@
       //      Indicate if the document has external DTD subset.
       //
       // -----------------------------------------------------------------------
  -     VecAttributesImpl                  fAttrList ;
  -     ContentHandler*                    fDocHandler ;
  -     RefVectorOf<XMLAttr>*      tempAttrVec ;
  -
  -     bool                       fnamespacePrefix;
  -     bool                       fautoValidation;
  -     bool                       fValidation;
  -
  -     XMLBufferMgr                       fStringBuffers ;
  -     RefStackOf<XMLBuffer> *    fPrefixes ;
  -     ValueStackOf<unsigned int> * prefixCounts ;
  -
  -    DTDHandler*                fDTDHandler;
  -    unsigned int               fElemDepth;
  -    EntityResolver*            fEntityResolver;
  -    ErrorHandler*              fErrorHandler;
  -    LexicalHandler*            fLexicalHandler;
  -    DeclHandler*               fDeclHandler;
  -    unsigned int               fAdvDHCount;
  -    XMLDocumentHandler**       fAdvDHList;
  -    unsigned int               fAdvDHListSize;
  -    bool                       fParseInProgress;
  -    XMLScanner*                fScanner;
  -    bool                       fHasExternalSubset;
  +    bool                        fNamespacePrefix;
  +    bool                        fAutoValidation;
  +    bool                        fValidation;
  +    bool                        fParseInProgress;
  +    bool                        fHasExternalSubset;
  +    unsigned int                fElemDepth;
  +    unsigned int                fAdvDHCount;
  +    unsigned int                fAdvDHListSize;
  +    VecAttributesImpl                fAttrList ;
  +    ContentHandler*          fDocHandler ;
  +    RefVectorOf<XMLAttr>*       fTempAttrVec ;
  +    XMLBufferMgr             fStringBuffers ;
  +    RefStackOf<XMLBuffer> *     fPrefixes ;
  +    ValueStackOf<unsigned int>* fPrefixCounts ;
  +    DTDHandler*                 fDTDHandler;
  +    EntityResolver*             fEntityResolver;
  +    ErrorHandler*               fErrorHandler;
  +    LexicalHandler*             fLexicalHandler;
  +    DeclHandler*                fDeclHandler;
  +    XMLDocumentHandler**        fAdvDHList;
  +    XMLScanner*                 fScanner;
  +    GrammarResolver*            fGrammarResolver;
  +    XMLStringPool*              fURIStringPool;
  +    XMLValidator*               fValidator;
        
       // -----------------------------------------------------------------------
       // internal function used to set the state of the parser
  @@ -1755,7 +1765,6 @@
       bool getDoNamespaces() const;
       void setDoSchema(const bool newState);
       bool getDoSchema() const;
  -
   };
   
   
  @@ -1800,11 +1809,6 @@
   inline bool SAX2XMLReaderImpl::getValidationConstraintFatal() const
   {
       return fScanner->getValidationConstraintFatal();
  -}
  -
  -inline Grammar* SAX2XMLReaderImpl::getGrammar(const XMLCh* const nameSpaceKey)
  -{
  -    return fScanner->getGrammar(nameSpaceKey);
   }
   
   inline Grammar* SAX2XMLReaderImpl::getRootGrammar()
  
  
  
  1.13      +103 -42   xml-xerces/c/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
  
  Index: SAX2XMLReaderImpl.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/SAX2XMLReaderImpl.cpp,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- SAX2XMLReaderImpl.cpp     4 Nov 2002 14:57:03 -0000       1.12
  +++ SAX2XMLReaderImpl.cpp     4 Dec 2002 01:57:09 -0000       1.13
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.13  2002/12/04 01:57:09  knoaman
  + * Scanner re-organization.
  + *
    * Revision 1.12  2002/11/04 14:57:03  tng
    * C++ Namespace Support.
    *
  @@ -224,6 +227,7 @@
   #include <xercesc/util/XMLChTranscoder.hpp>
   #include <xercesc/util/RefStackOf.hpp>
   #include <xercesc/util/XMLUniDefs.hpp>
  +#include <xercesc/util/Janitor.hpp>
   #include <xercesc/sax2/ContentHandler.hpp>
   #include <xercesc/sax2/LexicalHandler.hpp>
   #include <xercesc/sax2/DeclHandler.hpp>
  @@ -232,8 +236,9 @@
   #include <xercesc/sax/EntityResolver.hpp>
   #include <xercesc/sax/SAXParseException.hpp>
   #include <xercesc/sax/SAXException.hpp>
  -#include <xercesc/internal/XMLScanner.hpp>
  +#include <xercesc/internal/XMLScannerResolver.hpp>
   #include <xercesc/parsers/SAX2XMLReaderImpl.hpp>
  +#include <xercesc/validators/common/GrammarResolver.hpp>
   #include <string.h>
   
   XERCES_CPP_NAMESPACE_BEGIN
  @@ -245,25 +250,59 @@
   };
   
   SAX2XMLReaderImpl::SAX2XMLReaderImpl() :
  -    fDocHandler(0)
  -    , fDTDHandler(0)
  +
  +    fNamespacePrefix(false)
  +    , fAutoValidation(false)
  +    , fValidation(true)
  +    , fParseInProgress(false)
  +    , fHasExternalSubset(false)
       , fElemDepth(0)
  +    , fAdvDHCount(0)
  +    , fAdvDHListSize(32)
  +    , fDocHandler(0)
  +    , fTempAttrVec(0)
  +    , fPrefixes(0)
  +    , fPrefixCounts(0)
  +    , fDTDHandler(0)
       , fEntityResolver(0)
       , fErrorHandler(0)
       , fLexicalHandler(0)
       , fDeclHandler(0)
  -    , fAdvDHCount(0)
       , fAdvDHList(0)
  -    , fAdvDHListSize(32)
  -    , fParseInProgress(false)
       , fScanner(0)
  -    , fHasExternalSubset(false)
  +    , fGrammarResolver(0)
  +    , fURIStringPool(0)
   {
  -    //
  +    try
  +    {
  +        initialize();
  +    }
  +    catch(...)
  +    {
  +        cleanUp();
  +        throw;
  +    }
  +}
  +
  +SAX2XMLReaderImpl::~SAX2XMLReaderImpl()
  +{
  +    cleanUp();
  +}
  +
  +// ---------------------------------------------------------------------------
  +//  SAX2XMLReaderImpl: Initialize/Cleanup methods
  +// ---------------------------------------------------------------------------
  +void SAX2XMLReaderImpl::initialize()
  +{
  +    // Create grammar resolver and string pool that we pass to the scanner
  +    fGrammarResolver = new GrammarResolver();
  +    fURIStringPool = new XMLStringPool();
  +
       //  Create a scanner and tell it what validator to use. Then set us
       //  as the document event handler so we can fill the DOM document.
  -    //
  -    fScanner = new XMLScanner(0);
  +    fScanner = XMLScannerResolver::getDefaultScanner(0);
  +    fScanner->setGrammarResolver(fGrammarResolver);
  +    fScanner->setURIStringPool(fURIStringPool);
   
       // Create the initial advanced handler list array and zero it out
       fAdvDHList = new XMLDocumentHandler*[fAdvDHListSize];
  @@ -272,28 +311,24 @@
        // SAX2 default is for namespaces (feature 
http://xml.org/sax/features/namespaces) to be on
        setDoNamespaces(true) ;
   
  -     // SAX2 default is for namespaces-prefixes to be off
  -     fnamespacePrefix = false;
  -
  -     // SAX2 default: validation on, auto-validation off
  -     fValidation = true;
  -     fautoValidation = false;
  -
        // default: schema is on
        setDoSchema(true);
        
        fPrefixes    = new RefStackOf<XMLBuffer> (10, false) ;
  -     tempAttrVec  = new RefVectorOf<XMLAttr>  (10, false) ;
  -     prefixCounts = new ValueStackOf<unsigned int>(10) ;
  +     fTempAttrVec  = new RefVectorOf<XMLAttr>  (10, false) ;
  +     fPrefixCounts = new ValueStackOf<unsigned int>(10) ;
   }
   
  -SAX2XMLReaderImpl::~SAX2XMLReaderImpl()
  +
  +void SAX2XMLReaderImpl::cleanUp()
   {
       delete [] fAdvDHList;
       delete fScanner;
       delete fPrefixes;
  -    delete tempAttrVec;
  -    delete prefixCounts ;
  +    delete fTempAttrVec;
  +    delete fPrefixCounts;
  +    delete fGrammarResolver;
  +    delete fURIStringPool;
   }
   
   // ---------------------------------------------------------------------------
  @@ -389,6 +424,7 @@
   // ---------------------------------------------------------------------------
   void SAX2XMLReaderImpl::setValidator(XMLValidator* valueToAdopt)
   {
  +    fValidator = valueToAdopt;
        fScanner->setValidator(valueToAdopt);
   }
   
  @@ -757,9 +793,9 @@
       fElemDepth = 0;
   
       // Pop any prefix buffers left over from previous uses
  -    while (!prefixCounts->empty())
  +    while (!fPrefixCounts->empty())
       {
  -        unsigned int numPrefix = prefixCounts->pop();
  +        unsigned int numPrefix = fPrefixCounts->pop();
           for (unsigned int i = 0; i < numPrefix; i++)
           {
               XMLBuffer * buf = fPrefixes->pop() ;
  @@ -817,9 +853,9 @@
               const XMLCh*   nsURI    = 0;
               const XMLAttr* tempAttr = 0;
   
  -            if (!fnamespacePrefix)
  +            if (!fNamespacePrefix)
               {
  -                tempAttrVec->removeAllElements();
  +                fTempAttrVec->removeAllElements();
               }
   
               for (unsigned int i = 0; i < attrCount; i++)
  @@ -832,10 +868,10 @@
                       nsPrefix = tempAttr->getName();
                       nsURI = tempAttr->getValue();
                   }
  -                if (!fnamespacePrefix)
  +                if (!fNamespacePrefix)
                   {
                       if (nsURI == 0)
  -                        tempAttrVec->addElement((XMLAttr* const)tempAttr);
  +                        fTempAttrVec->addElement((XMLAttr* const)tempAttr);
                   }
                   if (nsURI != 0)
                   {
  @@ -850,9 +886,9 @@
                   nsURI = 0;
                   nsPrefix = 0;
               }
  -            prefixCounts->push(numPrefix) ;
  -            if (!fnamespacePrefix)
  -                fAttrList.setVector(tempAttrVec, tempAttrVec->size(), fScanner);
  +            fPrefixCounts->push(numPrefix) ;
  +            if (!fNamespacePrefix)
  +                fAttrList.setVector(fTempAttrVec, fTempAttrVec->size(), fScanner);
               else
                   fAttrList.setVector(&attrList, attrCount, fScanner);
   
  @@ -891,7 +927,7 @@
                                                                                       
 elemDecl.getBaseName(),
                                                                                       
 elemQName.getRawBuffer());
   
  -                unsigned int numPrefix = prefixCounts->pop();
  +                unsigned int numPrefix = fPrefixCounts->pop();
                   for (unsigned int i = 0; i < numPrefix; ++i)
                   {
                       XMLBuffer * buf = fPrefixes->pop() ;
  @@ -955,7 +991,7 @@
                                                                                
elemDecl.getBaseName(),
                                                                                
elemQName.getRawBuffer());
   
  -            unsigned int numPrefix = prefixCounts->pop();
  +            unsigned int numPrefix = fPrefixCounts->pop();
               for (unsigned int i = 0; i < numPrefix; i++)
               {
                   XMLBuffer * buf = fPrefixes->pop() ;
  @@ -1339,7 +1375,7 @@
       {
           fValidation = value;
           if (fValidation)
  -            if (fautoValidation)
  +            if (fAutoValidation)
                   setValidationScheme(Val_Auto);
               else
                   setValidationScheme(Val_Always);
  @@ -1348,14 +1384,14 @@
       }
       else if (XMLString::compareIString(name, XMLUni::fgSAX2CoreNameSpacePrefixes) 
== 0)
       {
  -        fnamespacePrefix = value;
  +        fNamespacePrefix = value;
       }
       else if (XMLString::compareIString(name, XMLUni::fgXercesDynamic) == 0)
       {
  -        fautoValidation = value;
  +        fAutoValidation = value;
           // for auto validation, the sax2 core validation feature must also be 
enabled.
           if (fValidation)
  -            if (fautoValidation)
  +            if (fAutoValidation)
                   setValidationScheme(Val_Auto);
               else
                   setValidationScheme(Val_Always);
  @@ -1394,6 +1430,10 @@
           if (value || !fScanner->isCachingGrammarFromParse())
               fScanner->useCachedGrammarInParse(value);
       }
  +    else if (XMLString::compareIString(name, XMLUni::fgXercesCalculateSrcOfs) == 0)
  +    {
  +        fScanner->setCalculateSrcOfs(value);
  +    }
       else
          throw SAXNotRecognizedException("Unknown Feature");
   }
  @@ -1405,9 +1445,9 @@
       else if (XMLString::compareIString(name, XMLUni::fgSAX2CoreValidation) == 0)
           return fValidation;
       else if (XMLString::compareIString(name, XMLUni::fgSAX2CoreNameSpacePrefixes) 
== 0)
  -        return fnamespacePrefix;
  +        return fNamespacePrefix;
       else if (XMLString::compareIString(name, XMLUni::fgXercesDynamic) == 0)
  -        return fautoValidation;
  +        return fAutoValidation;
       else if (XMLString::compareIString(name, XMLUni::fgXercesSchema) == 0)
           return getDoSchema();
       else if (XMLString::compareIString(name, XMLUni::fgXercesSchemaFullChecking) == 
0)
  @@ -1422,6 +1462,8 @@
           return fScanner->isCachingGrammarFromParse();
       else if (XMLString::compareIString(name, 
XMLUni::fgXercesUseCachedGrammarInParse) == 0)
           return fScanner->isUsingCachedGrammarInParse();
  +    else if (XMLString::compareIString(name, XMLUni::fgXercesCalculateSrcOfs) == 0)
  +        return fScanner->getCalculateSrcOfs();
       else
          throw SAXNotRecognizedException("Unknown Feature");
   
  @@ -1437,13 +1479,24 @@
        {
                fScanner->setExternalSchemaLocation((XMLCh*)value);
        }
  -
        else if (XMLString::compareIString(name, 
XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation) == 0)
        {
                fScanner->setExternalNoNamespaceSchemaLocation((XMLCh*)value);
        }
  +    else if (XMLString::equals(name, XMLUni::fgXercesScannerName))
  +    {
  +        XMLScanner* tempScanner = XMLScannerResolver::resolveScanner((const XMLCh*) 
value, fValidator);
   
  -   else
  +        if (tempScanner) {
  +
  +            // REVISIT: set scanner options and handlers
  +            tempScanner->setGrammarResolver(fGrammarResolver);
  +            tempScanner->setURIStringPool(fURIStringPool);
  +            delete fScanner;
  +            fScanner = tempScanner;
  +        }
  +    }
  +    else
          throw SAXNotRecognizedException("Unknown Property");
   }
   
  @@ -1454,6 +1507,8 @@
           return (void*)fScanner->getExternalSchemaLocation();
       else if (XMLString::compareIString(name, 
XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation) == 0)
           return (void*)fScanner->getExternalNoNamespaceSchemaLocation();
  +    else if (XMLString::equals(name, XMLUni::fgXercesScannerName))
  +        return (void*)fScanner->getName();
       else
           throw SAXNotRecognizedException("Unknown Property");
       return 0;
  @@ -1575,8 +1630,14 @@
   
   void SAX2XMLReaderImpl::resetCachedGrammarPool()
   {
  -    fScanner->resetCachedGrammarPool();
  +    fGrammarResolver->resetCachedGrammar();
   }
  +
  +Grammar* SAX2XMLReaderImpl::getGrammar(const XMLCh* const nameSpaceKey)
  +{
  +    return fGrammarResolver->getGrammar(nameSpaceKey);
  +}
  +
   
   XERCES_CPP_NAMESPACE_END
   
  
  
  
  1.14      +19 -5     xml-xerces/c/src/xercesc/parsers/DOMBuilderImpl.cpp
  
  Index: DOMBuilderImpl.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/DOMBuilderImpl.cpp,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- DOMBuilderImpl.cpp        4 Nov 2002 14:57:03 -0000       1.13
  +++ DOMBuilderImpl.cpp        4 Dec 2002 01:57:09 -0000       1.14
  @@ -78,6 +78,7 @@
   #include <xercesc/sax/SAXParseException.hpp>
   #include <xercesc/internal/XMLScanner.hpp>
   #include <xercesc/framework/Wrapper4DOMInputSource.hpp>
  +#include <xercesc/validators/common/GrammarResolver.hpp>
   
   XERCES_CPP_NAMESPACE_BEGIN
   
  @@ -231,7 +232,11 @@
       else if (XMLString::compareIString(name, 
XMLUni::fgXercesUseCachedGrammarInParse) == 0)
       {
           if (state || !getScanner()->isCachingGrammarFromParse())
  -         getScanner()->useCachedGrammarInParse(state);
  +            getScanner()->useCachedGrammarInParse(state);
  +    }
  +    else if (XMLString::compareIString(name, XMLUni::fgXercesCalculateSrcOfs) == 0)
  +    {
  +        getScanner()->setCalculateSrcOfs(state);
       }
       else {
           throw DOMException(DOMException::NOT_FOUND_ERR, 0);
  @@ -304,6 +309,10 @@
       {
           return getScanner()->isUsingCachedGrammarInParse();
       }
  +    else if (XMLString::compareIString(name, XMLUni::fgXercesCalculateSrcOfs) == 0)
  +    {
  +        return getScanner()->getCalculateSrcOfs();
  +    }
       else {
           throw DOMException(DOMException::NOT_FOUND_ERR, 0);
       }
  @@ -320,7 +329,8 @@
           (XMLString::compareIString(name, XMLUni::fgDOMValidation) == 0) ||
           (XMLString::compareIString(name, XMLUni::fgDOMValidateIfSchema) == 0) ||
           (XMLString::compareIString(name, XMLUni::fgDOMCharsetOverridesXMLEncoding) 
== 0) ||
  -        (XMLString::compareIString(name, XMLUni::fgDOMWhitespaceInElementContent) 
== 0)) {
  +        (XMLString::compareIString(name, XMLUni::fgDOMWhitespaceInElementContent) 
== 0) ||
  +        (XMLString::compareIString(name, XMLUni::fgXercesCalculateSrcOfs) == 0)) {
           return true;
       }
   
  @@ -362,6 +372,10 @@
        {
                setExternalNoNamespaceSchemaLocation((XMLCh*)value);
        }
  +    else if (XMLString::equals(name, XMLUni::fgXercesScannerName))
  +    {
  +        AbstractDOMParser::useScanner((const XMLCh*) value);
  +    }
       else
         throw DOMException(DOMException::NOT_FOUND_ERR, 0);
   }
  @@ -577,12 +591,12 @@
   
   void DOMBuilderImpl::resetCachedGrammarPool()
   {
  -    getScanner()->resetCachedGrammarPool();
  +    getGrammarResolver()->resetCachedGrammar();
   }
   
   Grammar* DOMBuilderImpl::getGrammar(const XMLCh* const nameSpaceKey) const
   {
  -    return getScanner()->getGrammar(nameSpaceKey);
  +    return getGrammarResolver()->getGrammar(nameSpaceKey);
   }
   
   Grammar* DOMBuilderImpl::getRootGrammar() const
  
  
  
  1.13      +60 -4     xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.hpp
  
  Index: AbstractDOMParser.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.hpp,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- AbstractDOMParser.hpp     4 Nov 2002 14:57:03 -0000       1.12
  +++ AbstractDOMParser.hpp     4 Dec 2002 01:57:09 -0000       1.13
  @@ -61,7 +61,6 @@
   #if !defined(ABSTRACTDOMPARSER_HPP)
   #define ABSTRACTDOMPARSER_HPP
   
  -
   #include <xercesc/dom/DOMDocument.hpp>
   #include <xercesc/framework/XMLDocumentHandler.hpp>
   #include <xercesc/framework/XMLErrorReporter.hpp>
  @@ -81,6 +80,7 @@
   class DOMDocumentImpl;
   class DOMDocumentTypeImpl;
   class DOMElement;
  +class GrammarResolver;
   
   
   /**
  @@ -362,6 +362,19 @@
         */
       bool  getCreateCommentNodes()const;
   
  +    /**
  +      * Get the 'calculate src offset flag'
  +      *
  +      * This method returns the state of the parser's src offset calculation
  +      * when parsing an XML document.
  +      *
  +      * @return true, if the parser is currently configured to
  +      *         calculate src offsets, false otherwise.
  +      *
  +      * @see #setCalculateSrcOfs
  +      */
  +    bool getCalculateSrcOfs() const;
  +
       //@}
   
   
  @@ -611,6 +624,29 @@
         */
       void setCreateCommentNodes(const bool create);
   
  +    /** Enable/disable src offset calculation
  +      *
  +      * This method allows users to enable/disable src offset calculation.
  +      * Disabling the calculation will improve performance.
  +      *
  +      * The parser's default state is: true.
  +      *
  +      * @param newState The value specifying whether we should enable or
  +      *                 disable src offset calculation
  +      *
  +      * @see #getCalculateSrcOfs
  +      */
  +    void setCalculateSrcOfs(const bool newState);
  +
  +    /** Set the scanner to use when scanning the XML document
  +      *
  +      * This method allows users to set the the scanner to use
  +      * when scanning a given XML document.
  +      *
  +      * @param scannerName The name of the desired scanner
  +      */
  +    void useScanner(const XMLCh* const scannerName);
  +
       //@}
   
   
  @@ -1234,6 +1270,12 @@
         */
       XMLScanner* getScanner() const;
   
  +    /** Get the Grammar resolver
  +      *
  +      * This provides derived classes with access to the grammar resolver.
  +      */
  +    GrammarResolver* getGrammarResolver() const;
  +
       /** Get the parse in progress flag
         *
         * This provides derived classes with access to the parse in progress
  @@ -1291,6 +1333,12 @@
   
   private :
       // -----------------------------------------------------------------------
  +    //  Initialize/Cleanup methods
  +    // -----------------------------------------------------------------------
  +    void initialize();
  +    void cleanUp();
  +
  +    // -----------------------------------------------------------------------
       //  Private data members
       //
       //  fCurrentNode
  @@ -1353,6 +1401,8 @@
       bool                          fIncludeIgnorableWhitespace;
       bool                          fWithinElement;
       bool                          fParseInProgress;
  +    bool                          fCreateCommentNodes;
  +    bool                          fDocumentAdoptedByUser;
       XMLBufferMgr                  fBufMgr;
       XMLScanner*                   fScanner;
       DOMNode*                      fCurrentParent;
  @@ -1362,8 +1412,9 @@
       ValueStackOf<DOMNode*>*       fNodeStack;
       DOMDocumentTypeImpl*          fDocumentType;
       RefVectorOf<DOMDocumentImpl>* fDocumentVector;
  -    bool                          fCreateCommentNodes;
  -    bool                          fDocumentAdoptedByUser;
  +    GrammarResolver*              fGrammarResolver;
  +    XMLStringPool*                fURIStringPool;
  +    XMLValidator*                 fValidator;
       XMLBuffer&                    fInternalSubset;
   };
   
  @@ -1394,6 +1445,11 @@
   inline XMLScanner* AbstractDOMParser::getScanner() const
   {
       return fScanner;
  +}
  +
  +inline GrammarResolver* AbstractDOMParser::getGrammarResolver() const
  +{
  +    return fGrammarResolver;
   }
   
   inline bool AbstractDOMParser::getCreateCommentNodes() const
  
  
  
  1.28      +73 -17    xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.cpp
  
  Index: AbstractDOMParser.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.cpp,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- AbstractDOMParser.cpp     4 Nov 2002 14:57:03 -0000       1.27
  +++ AbstractDOMParser.cpp     4 Dec 2002 01:57:09 -0000       1.28
  @@ -68,13 +68,14 @@
   // ---------------------------------------------------------------------------
   //  Includes
   // ---------------------------------------------------------------------------
  +#include <xercesc/parsers/AbstractDOMParser.hpp>
  +#include <xercesc/internal/XMLScannerResolver.hpp>
  +#include <xercesc/internal/ElemStack.hpp>
   #include <xercesc/sax/EntityResolver.hpp>
   #include <xercesc/util/XMLUniDefs.hpp>
   #include <xercesc/framework/XMLNotationDecl.hpp>
  +#include <xercesc/framework/XMLValidator.hpp>
   #include <xercesc/util/IOException.hpp>
  -#include <xercesc/internal/XMLScanner.hpp>
  -#include <xercesc/validators/DTD/DTDValidator.hpp>
  -#include <xercesc/parsers/AbstractDOMParser.hpp>
   #include <xercesc/dom/DOMImplementation.hpp>
   #include <xercesc/dom/DOMElement.hpp>
   #include <xercesc/dom/impl/DOMAttrImpl.hpp>
  @@ -92,9 +93,9 @@
   #include <xercesc/dom/DOMProcessingInstruction.hpp>
   #include <xercesc/dom/impl/DOMProcessingInstructionImpl.hpp>
   #include <xercesc/dom/impl/DOMNodeIDMap.hpp>
  -
   #include <xercesc/validators/common/ContentSpecNode.hpp>
  -#include <xercesc/validators/DTD/DTDAttDefList.hpp>
  +#include <xercesc/validators/common/GrammarResolver.hpp>
  +
   
   XERCES_CPP_NAMESPACE_BEGIN
   
  @@ -108,6 +109,8 @@
   , fIncludeIgnorableWhitespace(true)
   , fWithinElement(false)
   , fParseInProgress(false)
  +, fCreateCommentNodes(true)
  +, fDocumentAdoptedByUser(false)
   , fScanner(0)
   , fCurrentParent(0)
   , fCurrentNode(0)
  @@ -116,34 +119,65 @@
   , fNodeStack(0)
   , fDocumentType(0)
   , fDocumentVector(0)
  -, fCreateCommentNodes(true)
  -, fDocumentAdoptedByUser(false)
  +, fGrammarResolver(0)
  +, fURIStringPool(0)
  +, fValidator(valToAdopt)
   , fInternalSubset(fBufMgr.bidOnBuffer())
   {
  -    //
  +    try
  +    {
  +        initialize();
  +    }
  +    catch(...)
  +    {
  +       cleanUp();
  +       throw;
  +    }
  +}
  +
  +
  +AbstractDOMParser::~AbstractDOMParser()
  +{
  +    cleanUp();
  +}
  +
  +// ---------------------------------------------------------------------------
  +//  AbstractDOMParser: Initialize/CleanUp methods
  +// ---------------------------------------------------------------------------
  +void AbstractDOMParser::initialize()
  +{
  +    //  Create grammar resolver and string pool to pass to the scanner
  +    fGrammarResolver = new GrammarResolver;
  +    fURIStringPool = new XMLStringPool;
  +
       //  Create a scanner and tell it what validator to use. Then set us
       //  as the document event handler so we can fill the DOM document.
  -    //
  -    fScanner = new XMLScanner(valToAdopt);
  +    fScanner = XMLScannerResolver::getDefaultScanner(fValidator);
       fScanner->setDocHandler(this);
       fScanner->setDocTypeHandler(this);
  +    fScanner->setGrammarResolver(fGrammarResolver);
  +    fScanner->setURIStringPool(fURIStringPool);
   
       fNodeStack = new ValueStackOf<DOMNode*>(64);
       this->reset();
   }
   
  -
  -AbstractDOMParser::~AbstractDOMParser()
  +void AbstractDOMParser::cleanUp()
   {
       if (fDocumentVector)
           delete fDocumentVector;
   
       if (!fDocumentAdoptedByUser)
           delete fDocument;
  +
       delete fNodeStack;
       delete fScanner;
  -}
  +    delete fGrammarResolver;
  +    delete fURIStringPool;
   
  +    if (fValidator)
  +        delete fValidator;
  +}
   
   // ---------------------------------------------------------------------------
   //  AbstractDOMParser: Utilities
  @@ -266,6 +300,11 @@
       return fScanner->getLoadExternalDTD();
   }
   
  +bool AbstractDOMParser::getCalculateSrcOfs() const
  +{
  +    return fScanner->getCalculateSrcOfs();
  +}
  +
   
   // ---------------------------------------------------------------------------
   //  AbstractDOMParser: Setter methods
  @@ -328,6 +367,24 @@
       fScanner->setLoadExternalDTD(newState);
   }
   
  +void AbstractDOMParser::setCalculateSrcOfs(const bool newState)
  +{
  +    fScanner->setCalculateSrcOfs(newState);
  +}
  +
  +void AbstractDOMParser::useScanner(const XMLCh* const scannerName)
  +{
  +    XMLScanner* tempScanner = XMLScannerResolver::resolveScanner(scannerName, 
fValidator);
  +
  +    if (tempScanner) {
  +
  +        // REVISIT: need to set scanner options and handlers
  +        delete fScanner;
  +        fScanner = tempScanner;
  +        fScanner->setGrammarResolver(fGrammarResolver);
  +        fScanner->setURIStringPool(fURIStringPool);
  +    }
  +}
   
   // ---------------------------------------------------------------------------
   //  AbstractDOMParser: Parsing methods
  @@ -801,10 +858,9 @@
                           // done here.
                           const XMLCh* qualifiedName = attr->getFullName();
                           XMLBufBid bbPrefixQName(&fBufMgr);
  -                        XMLBufBid bbQName(&fBufMgr);
                           XMLBuffer& prefixBuf = bbPrefixQName.getBuffer();
  -                        XMLBuffer& nameBuf = bbQName.getBuffer();
  -                        unsigned int uriId = fScanner->resolveQName(qualifiedName, 
nameBuf, prefixBuf, ElemStack::Mode_Attribute);
  +                        int colonPos = -1;
  +                        unsigned int uriId = fScanner->resolveQName(qualifiedName, 
prefixBuf, ElemStack::Mode_Attribute, colonPos);
   
                           const XMLCh* namespaceURI = 0;
                           if (XMLString::equals(qualifiedName, XMLNS))    //for 
xmlns=...
  
  
  

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

Reply via email to