knoaman 2002/12/03 17:47:08 Modified: c/src/xercesc/dom/deprecated DOMParser.hpp DOMParser.cpp Log: Scanner re-organization. Revision Changes Path 1.12 +52 -10 xml-xerces/c/src/xercesc/dom/deprecated/DOMParser.hpp Index: DOMParser.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/deprecated/DOMParser.hpp,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- DOMParser.hpp 4 Nov 2002 15:04:44 -0000 1.11 +++ DOMParser.hpp 4 Dec 2002 01:47:08 -0000 1.12 @@ -62,7 +62,6 @@ #if !defined(DOMPARSER_HPP) #define DOMPARSER_HPP - #include <xercesc/framework/XMLDocumentHandler.hpp> #include <xercesc/framework/XMLErrorReporter.hpp> #include <xercesc/framework/XMLEntityHandler.hpp> @@ -82,7 +81,7 @@ class XMLScanner; class XMLValidator; class Grammar; - +class GrammarResolver; /** * This class implements the Document Object Model (DOM) interface. @@ -402,6 +401,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 @@ -726,6 +738,29 @@ */ 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); + //@} @@ -1613,6 +1648,12 @@ private : // ----------------------------------------------------------------------- + // Protected setter methods + // ----------------------------------------------------------------------- + void initialize(); + void cleanUp(); + + // ----------------------------------------------------------------------- // Private data members // // fCurrentNode @@ -1661,23 +1702,25 @@ // This is an extension to xerces implementation // // ----------------------------------------------------------------------- + bool fToCreateXMLDeclTypeNode; + bool fCreateEntityReferenceNodes; + bool fIncludeIgnorableWhitespace; + bool fParseInProgress; + bool fWithinElement; DOM_Node fCurrentParent; DOM_Node fCurrentNode; DOM_Document fDocument; EntityResolver* fEntityResolver; ErrorHandler* fErrorHandler; - bool fCreateEntityReferenceNodes; - bool fIncludeIgnorableWhitespace; ValueStackOf<DOM_Node>* fNodeStack; - bool fParseInProgress; XMLScanner* fScanner; - bool fWithinElement; DocumentTypeImpl* fDocumentType; - bool fToCreateXMLDeclTypeNode; + GrammarResolver* fGrammarResolver; + XMLStringPool* fURIStringPool; + XMLValidator* fValidator; }; - // --------------------------------------------------------------------------- // DOMParser: Handlers for the XMLEntityHandler interface // --------------------------------------------------------------------------- @@ -1787,7 +1830,6 @@ { return fCurrentNode; } - // --------------------------------------------------------------------------- // DOMParser: Protected setter methods 1.10 +77 -21 xml-xerces/c/src/xercesc/dom/deprecated/DOMParser.cpp Index: DOMParser.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/deprecated/DOMParser.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- DOMParser.cpp 4 Nov 2002 15:04:44 -0000 1.9 +++ DOMParser.cpp 4 Dec 2002 01:47:08 -0000 1.10 @@ -68,14 +68,15 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- +#include <xercesc/internal/XMLScannerResolver.hpp> #include <xercesc/sax/EntityResolver.hpp> #include <xercesc/util/XMLUniDefs.hpp> #include <xercesc/sax/ErrorHandler.hpp> #include <xercesc/sax/SAXParseException.hpp> #include <xercesc/framework/XMLNotationDecl.hpp> #include <xercesc/util/IOException.hpp> -#include <xercesc/internal/XMLScanner.hpp> -#include <xercesc/validators/DTD/DTDValidator.hpp> +#include <xercesc/framework/XMLValidator.hpp> +#include <xercesc/validators/common/GrammarResolver.hpp> #include "DOMParser.hpp" #include "ElementImpl.hpp" #include "AttrImpl.hpp" @@ -100,35 +101,68 @@ // --------------------------------------------------------------------------- DOMParser::DOMParser(XMLValidator* const valToAdopt) : -fErrorHandler(0) -, fEntityResolver(0) -, fCreateEntityReferenceNodes(true) -, fToCreateXMLDeclTypeNode(false) -, fIncludeIgnorableWhitespace(true) -, fNodeStack(0) -, fScanner(0) + fToCreateXMLDeclTypeNode(false) + , fCreateEntityReferenceNodes(true) + , fIncludeIgnorableWhitespace(true) + , fParseInProgress(false) + , fWithinElement(false) + , fEntityResolver(0) + , fErrorHandler(0) + , fNodeStack(0) + , fScanner(0) + , fDocumentType(0) + , fGrammarResolver(0) + , fURIStringPool(0) + , fValidator(valToAdopt) { - // + try + { + initialize(); + } + catch(...) + { + cleanUp(); + throw; + } +} + + +DOMParser::~DOMParser() +{ + cleanUp(); +} + +// --------------------------------------------------------------------------- +// DOMParser: Initialize/CleanUp methods +// --------------------------------------------------------------------------- +void DOMParser::initialize() +{ + // Create grammar resolver and URI 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<DOM_Node>(64); this->reset(); - - } - -DOMParser::~DOMParser() -{ +void DOMParser::cleanUp() +{ delete fNodeStack; delete fScanner; -} + delete fGrammarResolver; + delete fURIStringPool; + if (fValidator) + delete fValidator; +} void DOMParser::reset() { @@ -221,7 +255,7 @@ Grammar* DOMParser::getGrammar(const XMLCh* const nameSpaceKey) { - return fScanner->getGrammar(nameSpaceKey); + return fGrammarResolver->getGrammar(nameSpaceKey); } Grammar* DOMParser::getRootGrammar() @@ -234,6 +268,10 @@ return fScanner->getURIText(uriId); } +bool DOMParser::getCalculateSrcOfs() const +{ + return fScanner->getCalculateSrcOfs(); +} // --------------------------------------------------------------------------- // DOMParser: Setter methods @@ -329,6 +367,24 @@ fScanner->useCachedGrammarInParse(newState); } +void DOMParser::setCalculateSrcOfs(const bool newState) +{ + fScanner->setCalculateSrcOfs(newState); +} + +void DOMParser::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); + } +} // --------------------------------------------------------------------------- // DOMParser: Parsing methods @@ -1340,7 +1396,7 @@ void DOMParser::resetCachedGrammarPool() { - fScanner->resetCachedGrammarPool(); + fGrammarResolver->resetCachedGrammar(); } XERCES_CPP_NAMESPACE_END
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]