From f0079a4f11c7108f064f67cd000f45ef2e31c8f0 Mon Sep 17 00:00:00 2001
From: Khaled Noaman <knoaman@apache.org>
Date: Fri, 27 Dec 2002 16:16:51 +0000
Subject: [PATCH] Set scanner options and handlers.

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@174557 13f79535-47bb-0310-9956-ffa450edef68
---
 src/xercesc/dom/deprecated/DOMParser.cpp  |  6 +++---
 src/xercesc/internal/XMLScanner.cpp       | 21 ++++++++++++++++++++-
 src/xercesc/internal/XMLScanner.hpp       | 18 +++++++++++++++++-
 src/xercesc/parsers/AbstractDOMParser.cpp |  8 +++-----
 src/xercesc/parsers/SAX2XMLReaderImpl.cpp |  5 ++++-
 src/xercesc/parsers/SAXParser.cpp         |  9 ++++++---
 6 files changed, 53 insertions(+), 14 deletions(-)

diff --git a/src/xercesc/dom/deprecated/DOMParser.cpp b/src/xercesc/dom/deprecated/DOMParser.cpp
index 83dc48e10..c2da4884a 100644
--- a/src/xercesc/dom/deprecated/DOMParser.cpp
+++ b/src/xercesc/dom/deprecated/DOMParser.cpp
@@ -383,11 +383,11 @@ void DOMParser::useScanner(const XMLCh* const scannerName)
 
     if (tempScanner) {
 
-        // REVISIT: need to set scanner options and handlers
+        tempScanner->setParseSettings(fScanner);
+        tempScanner->setGrammarResolver(fGrammarResolver);
+        tempScanner->setURIStringPool(fURIStringPool);
         delete fScanner;
         fScanner = tempScanner;
-        fScanner->setGrammarResolver(fGrammarResolver);
-        fScanner->setURIStringPool(fURIStringPool);
     }
 }
 
diff --git a/src/xercesc/internal/XMLScanner.cpp b/src/xercesc/internal/XMLScanner.cpp
index 54296478b..fa1ba381f 100644
--- a/src/xercesc/internal/XMLScanner.cpp
+++ b/src/xercesc/internal/XMLScanner.cpp
@@ -540,7 +540,26 @@ void XMLScanner::scanReset(XMLPScanToken& token)
     fErrorCount = 0;
 }
 
-
+void XMLScanner::setParseSettings(XMLScanner* const refScanner)
+{
+    setDocHandler(refScanner->getDocHandler());
+    setDocTypeHandler(refScanner->getDocTypeHandler());
+    setErrorHandler(refScanner->getErrorHandler());
+    setErrorReporter(refScanner->getErrorReporter());
+    setEntityHandler(refScanner->getEntityHandler());
+    setDoNamespaces(refScanner->getDoNamespaces());
+    setDoSchema(refScanner->getDoSchema());
+    setCalculateSrcOfs(refScanner->getCalculateSrcOfs());
+    setExitOnFirstFatal(refScanner->getExitOnFirstFatal());
+    setValidationConstraintFatal(refScanner->getValidationConstraintFatal());
+    setValidationSchemaFullChecking(refScanner->getValidationSchemaFullChecking());
+    cacheGrammarFromParse(refScanner->isCachingGrammarFromParse());
+    useCachedGrammarInParse(refScanner->isUsingCachedGrammarInParse());
+    setLoadExternalDTD(refScanner->getLoadExternalDTD());
+    setNormalizeData(refScanner->getNormalizeData());
+    setExternalSchemaLocation(refScanner->getExternalSchemaLocation());
+    setExternalNoNamespaceSchemaLocation(refScanner->getExternalNoNamespaceSchemaLocation());
+}
 
 // ---------------------------------------------------------------------------
 //  XMLScanner: Private helper methods.
diff --git a/src/xercesc/internal/XMLScanner.hpp b/src/xercesc/internal/XMLScanner.hpp
index 7a9be63ea..a599fc702 100644
--- a/src/xercesc/internal/XMLScanner.hpp
+++ b/src/xercesc/internal/XMLScanner.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.15  2002/12/27 16:16:51  knoaman
+ * Set scanner options and handlers.
+ *
  * Revision 1.14  2002/12/20 22:09:56  tng
  * XML 1.1
  *
@@ -408,6 +411,8 @@ public :
     XMLEntityHandler* getEntityHandler();
     const XMLErrorReporter* getErrorReporter() const;
     XMLErrorReporter* getErrorReporter();
+    const ErrorHandler* getErrorHandler() const;
+    ErrorHandler* getErrorHandler();
     bool getExitOnFirstFatal() const;
     bool getValidationConstraintFatal() const;
     RefHashTableOf<XMLRefInfo>* getIDRefList();
@@ -527,6 +532,7 @@ public :
     void setLoadExternalDTD(const bool loadDTD);
     void setNormalizeData(const bool normalizeData);
     void setCalculateSrcOfs(const bool newValue);
+    void setParseSettings(XMLScanner* const refScanner);
 
     // -----------------------------------------------------------------------
     //  Mutator methods
@@ -577,7 +583,7 @@ public :
 
     // -----------------------------------------------------------------------
     //  Grammar preparsing methods
-    // -----------------------------------------------------------------------
+    // -----------------------------------------------------------------------    
     Grammar* loadGrammar
     (
         const   XMLCh* const    systemId
@@ -934,6 +940,16 @@ inline XMLErrorReporter* XMLScanner::getErrorReporter()
     return fErrorReporter;
 }
 
+inline const ErrorHandler* XMLScanner::getErrorHandler() const
+{
+    return fErrorHandler;
+}
+
+inline ErrorHandler* XMLScanner::getErrorHandler()
+{
+    return fErrorHandler;
+}
+
 inline bool XMLScanner::getExitOnFirstFatal() const
 {
     return fExitOnFirstFatal;
diff --git a/src/xercesc/parsers/AbstractDOMParser.cpp b/src/xercesc/parsers/AbstractDOMParser.cpp
index 952afb877..b0e65e9b3 100644
--- a/src/xercesc/parsers/AbstractDOMParser.cpp
+++ b/src/xercesc/parsers/AbstractDOMParser.cpp
@@ -378,13 +378,11 @@ void AbstractDOMParser::useScanner(const XMLCh* const scannerName)
 
     if (tempScanner) {
 
-        // REVISIT: need to set scanner options and handlers
+        tempScanner->setParseSettings(fScanner);
+        tempScanner->setGrammarResolver(fGrammarResolver);
+        tempScanner->setURIStringPool(fURIStringPool);
         delete fScanner;
         fScanner = tempScanner;
-        fScanner->setDocHandler(this);
-        fScanner->setDocTypeHandler(this);
-        fScanner->setGrammarResolver(fGrammarResolver);
-        fScanner->setURIStringPool(fURIStringPool);
     }
 }
 
diff --git a/src/xercesc/parsers/SAX2XMLReaderImpl.cpp b/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
index af7f51e9a..3a7db573b 100644
--- a/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
+++ b/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.15  2002/12/27 16:16:51  knoaman
+ * Set scanner options and handlers.
+ *
  * Revision 1.14  2002/12/11 22:14:54  knoaman
  * Performance: no need to use temporary buffer to hold namespace value.
  *
@@ -1488,7 +1491,7 @@ void SAX2XMLReaderImpl::setProperty(const XMLCh* const name, void* value)
 
         if (tempScanner) {
 
-            // REVISIT: set scanner options and handlers
+            tempScanner->setParseSettings(fScanner);
             tempScanner->setGrammarResolver(fGrammarResolver);
             tempScanner->setURIStringPool(fURIStringPool);
             delete fScanner;
diff --git a/src/xercesc/parsers/SAXParser.cpp b/src/xercesc/parsers/SAXParser.cpp
index 5fd825e41..686378f1f 100644
--- a/src/xercesc/parsers/SAXParser.cpp
+++ b/src/xercesc/parsers/SAXParser.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.12  2002/12/27 16:16:51  knoaman
+ * Set scanner options and handlers.
+ *
  * Revision 1.11  2002/12/23 15:23:18  knoaman
  * Added a public api to various parsers to return the src offset within the input
  * source.
@@ -553,11 +556,11 @@ void SAXParser::useScanner(const XMLCh* const scannerName)
 
     if (tempScanner) {
 
-        // REVISIT: need to set scanner options and handlers
+        tempScanner->setParseSettings(fScanner);
+        tempScanner->setGrammarResolver(fGrammarResolver);
+        tempScanner->setURIStringPool(fURIStringPool);
         delete fScanner;
         fScanner = tempScanner;
-        fScanner->setGrammarResolver(fGrammarResolver);
-        fScanner->setURIStringPool(fURIStringPool);
     }
 }
 
-- 
GitLab