XMLScanner.hpp
上传用户:zhuqijet
上传日期:2013-06-25
资源大小:10074k
文件大小:48k
源码类别:

词法分析

开发平台:

Visual C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
  5.  * reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  *
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  *
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in
  16.  *    the documentation and/or other materials provided with the
  17.  *    distribution.
  18.  *
  19.  * 3. The end-user documentation included with the redistribution,
  20.  *    if any, must include the following acknowledgment:
  21.  *       "This product includes software developed by the
  22.  *        Apache Software Foundation (http://www.apache.org/)."
  23.  *    Alternately, this acknowledgment may appear in the software itself,
  24.  *    if and wherever such third-party acknowledgments normally appear.
  25.  *
  26.  * 4. The names "Xerces" and "Apache Software Foundation" must
  27.  *    not be used to endorse or promote products derived from this
  28.  *    software without prior written permission. For written
  29.  *    permission, please contact apache@apache.org.
  30.  *
  31.  * 5. Products derived from this software may not be called "Apache",
  32.  *    nor may "Apache" appear in their name, without prior written
  33.  *    permission of the Apache Software Foundation.
  34.  *
  35.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  36.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  37.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  38.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  39.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  41.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  42.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  43.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  44.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46.  * SUCH DAMAGE.
  47.  * ====================================================================
  48.  *
  49.  * This software consists of voluntary contributions made by many
  50.  * individuals on behalf of the Apache Software Foundation, and was
  51.  * originally based on software copyright (c) 1999, International
  52.  * Business Machines, Inc., http://www.ibm.com .  For more information
  53.  * on the Apache Software Foundation, please see
  54.  * <http://www.apache.org/>.
  55.  */
  56. /*
  57.  * $Log: XMLScanner.hpp,v $
  58.  * Revision 1.22  2003/05/16 21:36:58  knoaman
  59.  * Memory manager implementation: Modify constructors to pass in the memory manager.
  60.  *
  61.  * Revision 1.21  2003/05/15 18:26:29  knoaman
  62.  * Partial implementation of the configurable memory manager.
  63.  *
  64.  * Revision 1.20  2003/04/22 14:52:37  knoaman
  65.  * Initialize security manager in constructor.
  66.  *
  67.  * Revision 1.19  2003/04/17 22:00:46  neilg
  68.  * This commit implements detection of exponential entity
  69.  * expansions inside the scanner code.  This is only done when a
  70.  * security manager instance has been registered with the parser by
  71.  * the application.  The default number of entities which may be
  72.  * expanded is 50000; this appears to work very well for SAX, but DOM
  73.  * parsing applications may wish to set this limit considerably lower.
  74.  *
  75.  * Added SecurityManager to enable detection of exponentially-expanding entities
  76.  * 
  77.  * Revision 1.18  2003/03/10 15:27:29  tng
  78.  * XML1.0 Errata E38
  79.  *
  80.  * Revision 1.17  2003/03/07 18:08:58  tng
  81.  * Return a reference instead of void for operator=
  82.  *
  83.  * Revision 1.16  2003/01/03 20:08:40  tng
  84.  * New feature StandardUriConformant to force strict standard uri conformance.
  85.  *
  86.  * Revision 1.15  2002/12/27 16:16:51  knoaman
  87.  * Set scanner options and handlers.
  88.  *
  89.  * Revision 1.14  2002/12/20 22:09:56  tng
  90.  * XML 1.1
  91.  *
  92.  * Revision 1.13  2002/12/04 01:41:14  knoaman
  93.  * Scanner re-organization.
  94.  *
  95.  * Revision 1.12  2002/11/04 14:58:19  tng
  96.  * C++ Namespace Support.
  97.  *
  98.  * Revision 1.11  2002/08/27 05:56:39  knoaman
  99.  * Identity Constraint: handle case of recursive elements.
  100.  *
  101.  * Revision 1.10  2002/08/16 15:46:17  knoaman
  102.  * Bug 7698 : filenames with embedded spaces in schemaLocation strings not handled properly.
  103.  *
  104.  * Revision 1.9  2002/07/31 18:49:29  tng
  105.  * [Bug 6227] Make method getLastExtLocation() constant.
  106.  *
  107.  * Revision 1.8  2002/07/11 18:22:13  knoaman
  108.  * Grammar caching/preparsing - initial implementation.
  109.  *
  110.  * Revision 1.7  2002/06/17 16:13:01  tng
  111.  * DOM L3: Add the flag fNormalizeData so that datatype normalization defined by schema is done only if asked.
  112.  *
  113.  * Revision 1.6  2002/06/07 18:35:49  tng
  114.  * Add getReaderMgr in XMLScanner so that the parser can query encoding information.
  115.  *
  116.  * Revision 1.5  2002/05/30 16:20:57  tng
  117.  * Add feature to optionally ignore external DTD.
  118.  *
  119.  * Revision 1.4  2002/05/27 18:42:14  tng
  120.  * To get ready for 64 bit large file, use XMLSSize_t to represent line and column number.
  121.  *
  122.  * Revision 1.3  2002/05/22 20:54:33  knoaman
  123.  * Prepare for DOM L3 :
  124.  * - Make use of the XMLEntityHandler/XMLErrorReporter interfaces, instead of using
  125.  * EntityHandler/ErrorHandler directly.
  126.  * - Add 'AbstractDOMParser' class to provide common functionality for XercesDOMParser
  127.  * and DOMBuilder.
  128.  *
  129.  * Revision 1.2  2002/03/25 20:25:32  knoaman
  130.  * Move particle derivation checking from TraverseSchema to SchemaValidator.
  131.  *
  132.  * Revision 1.1.1.1  2002/02/01 22:22:03  peiyongz
  133.  * sane_include
  134.  *
  135.  * Revision 1.38  2001/11/30 22:19:15  peiyongz
  136.  * cleanUp function made member function
  137.  * cleanUp object moved to file scope
  138.  *
  139.  * Revision 1.37  2001/11/20 18:51:44  tng
  140.  * Schema: schemaLocation and noNamespaceSchemaLocation to be specified outside the instance document.  New methods setExternalSchemaLocation and setExternalNoNamespaceSchemaLocation are added (for SAX2, two new properties are added).
  141.  *
  142.  * Revision 1.36  2001/11/13 13:27:28  tng
  143.  * Move root element check to XMLScanner.
  144.  *
  145.  * Revision 1.35  2001/11/02 14:20:14  knoaman
  146.  * Add support for identity constraints.
  147.  *
  148.  * Revision 1.34  2001/10/12 20:52:18  tng
  149.  * Schema: Find the attributes see if they should be (un)qualified.
  150.  *
  151.  * Revision 1.33  2001/09/10 15:16:04  tng
  152.  * Store the fGrammarType instead of calling getGrammarType all the time for faster performance.
  153.  *
  154.  * Revision 1.32  2001/09/10 14:06:22  tng
  155.  * Schema: AnyAttribute support in Scanner and Validator.
  156.  *
  157.  * Revision 1.31  2001/08/13 15:06:39  knoaman
  158.  * update <any> validation.
  159.  *
  160.  * Revision 1.30  2001/08/02 16:54:39  tng
  161.  * Reset some Scanner flags in scanReset().
  162.  *
  163.  * Revision 1.29  2001/08/01 19:11:01  tng
  164.  * Add full schema constraint checking flag to the samples and the parser.
  165.  *
  166.  * Revision 1.28  2001/07/24 21:23:39  tng
  167.  * Schema: Use DatatypeValidator for ID/IDREF/ENTITY/ENTITIES/NOTATION.
  168.  *
  169.  * Revision 1.27  2001/07/13 16:56:48  tng
  170.  * ScanId fix.
  171.  *
  172.  * Revision 1.26  2001/07/12 18:50:17  tng
  173.  * Some performance modification regarding standalone check and xml decl check.
  174.  *
  175.  * Revision 1.25  2001/07/10 21:09:31  tng
  176.  * Give proper error messsage when scanning external id.
  177.  *
  178.  * Revision 1.24  2001/07/09 13:42:08  tng
  179.  * Partial Markup in Parameter Entity is validity constraint and thus should be just error, not fatal error.
  180.  *
  181.  * Revision 1.23  2001/07/05 13:12:11  tng
  182.  * Standalone checking is validity constraint and thus should be just error, not fatal error:
  183.  *
  184.  * Revision 1.22  2001/06/22 12:42:33  tng
  185.  * [Bug 2257] 1.5 thinks a <?xml-stylesheet ...> tag is a <?xml ...> tag
  186.  *
  187.  * Revision 1.21  2001/06/04 20:59:29  jberry
  188.  * Add method incrementErrorCount for use by validator. Make sure to reset error count in _both_ the scanReset methods.
  189.  *
  190.  * Revision 1.20  2001/06/03 19:21:40  jberry
  191.  * Add support for tracking error count during parse; enables simple parse without requiring error handler.
  192.  *
  193.  * Revision 1.19  2001/05/28 20:55:02  tng
  194.  * Schema: allocate a fDTDValidator, fSchemaValidator explicitly to avoid wrong cast
  195.  *
  196.  * Revision 1.18  2001/05/11 15:17:28  tng
  197.  * Schema: Nillable fixes.
  198.  *
  199.  * Revision 1.17  2001/05/11 13:26:17  tng
  200.  * Copyright update.
  201.  *
  202.  * Revision 1.16  2001/05/03 20:34:29  tng
  203.  * Schema: SchemaValidator update
  204.  *
  205.  * Revision 1.15  2001/05/03 19:09:09  knoaman
  206.  * Support Warning/Error/FatalError messaging.
  207.  * Validity constraints errors are treated as errors, with the ability by user to set
  208.  * validity constraints as fatal errors.
  209.  *
  210.  * Revision 1.14  2001/04/19 18:16:59  tng
  211.  * Schema: SchemaValidator update, and use QName in Content Model
  212.  *
  213.  * Revision 1.13  2001/03/30 16:46:56  tng
  214.  * Schema: Use setDoSchema instead of setSchemaValidation which makes more sense.
  215.  *
  216.  * Revision 1.12  2001/03/30 16:35:06  tng
  217.  * Schema: Whitespace normalization.
  218.  *
  219.  * Revision 1.11  2001/03/21 21:56:05  tng
  220.  * Schema: Add Schema Grammar, Schema Validator, and split the DTDValidator into DTDValidator, DTDScanner, and DTDGrammar.
  221.  *
  222.  * Revision 1.10  2001/02/15 15:56:27  tng
  223.  * Schema: Add setSchemaValidation and getSchemaValidation for DOMParser and SAXParser.
  224.  * Add feature "http://apache.org/xml/features/validation/schema" for SAX2XMLReader.
  225.  * New data field  fSchemaValidation in XMLScanner as the flag.
  226.  *
  227.  * Revision 1.9  2000/04/12 22:58:28  roddey
  228.  * Added support for 'auto validate' mode.
  229.  *
  230.  * Revision 1.8  2000/03/03 01:29:32  roddey
  231.  * Added a scanReset()/parseReset() method to the scanner and
  232.  * parsers, to allow for reset after early exit from a progressive parse.
  233.  * Added calls to new Terminate() call to all of the samples. Improved
  234.  * documentation in SAX and DOM parsers.
  235.  *
  236.  * Revision 1.7  2000/03/02 19:54:30  roddey
  237.  * This checkin includes many changes done while waiting for the
  238.  * 1.1.0 code to be finished. I can't list them all here, but a list is
  239.  * available elsewhere.
  240.  *
  241.  * Revision 1.6  2000/02/24 20:18:07  abagchi
  242.  * Swat for removing Log from API docs
  243.  *
  244.  * Revision 1.5  2000/02/06 07:47:54  rahulj
  245.  * Year 2K copyright swat.
  246.  *
  247.  * Revision 1.4  2000/01/24 20:40:43  roddey
  248.  * Exposed the APIs to get to the byte offset in the source XML buffer. This stuff
  249.  * is not tested yet, but I wanted to get the API changes in now so that the API
  250.  * can be stablized.
  251.  *
  252.  * Revision 1.3  2000/01/12 23:52:46  roddey
  253.  * These are trivial changes required to get the C++ and Java versions
  254.  * of error messages more into sync. Mostly it was where the Java version
  255.  * was passing out one or more parameter than the C++ version was. In
  256.  * some cases the change just required an extra parameter to get the
  257.  * needed info to the place where the error was issued.
  258.  *
  259.  * Revision 1.2  2000/01/12 00:15:04  roddey
  260.  * Changes to deal with multiply nested, relative pathed, entities and to deal
  261.  * with the new URL class changes.
  262.  *
  263.  * Revision 1.1.1.1  1999/11/09 01:08:23  twl
  264.  * Initial checkin
  265.  *
  266.  * Revision 1.4  1999/11/08 20:44:52  rahul
  267.  * Swat for adding in Product name and CVS comment log variable.
  268.  *
  269.  */
  270. #if !defined(XMLSCANNER_HPP)
  271. #define XMLSCANNER_HPP
  272. #include <xercesc/framework/XMLBufferMgr.hpp>
  273. #include <xercesc/framework/XMLErrorCodes.hpp>
  274. #include <xercesc/framework/XMLRefInfo.hpp>
  275. #include <xercesc/util/PlatformUtils.hpp>
  276. #include <xercesc/util/NameIdPool.hpp>
  277. #include <xercesc/util/RefHashTableOf.hpp>
  278. #include <xercesc/util/SecurityManager.hpp>
  279. #include <xercesc/internal/ReaderMgr.hpp>
  280. #include <xercesc/validators/DTD/DTDEntityDecl.hpp>
  281. #include <xercesc/framework/XMLAttr.hpp>
  282. XERCES_CPP_NAMESPACE_BEGIN
  283. class InputSource;
  284. class XMLDocumentHandler;
  285. class XMLEntityHandler;
  286. class ErrorHandler;
  287. class DocTypeHandler;
  288. class XMLPScanToken;
  289. class XMLStringPool;
  290. class Grammar;
  291. class GrammarResolver;
  292. class XMLValidator;
  293. class MemoryManager;
  294. //  This is the mondo scanner class, which does the vast majority of the
  295. //  work of parsing. It handles reading in input and spitting out events
  296. //  to installed handlers.
  297. class XMLPARSER_EXPORT XMLScanner : public XMemory
  298. {
  299. public :
  300.     // -----------------------------------------------------------------------
  301.     //  Public class types
  302.     //
  303.     //  NOTE: These should really be private, but some of the compilers we
  304.     //  have to deal with are too stupid to understand this.
  305.     //
  306.     //  DeclTypes
  307.     //      Used by scanXMLDecl() to know what type of decl it should scan.
  308.     //      Text decls have slightly different rules from XMLDecls.
  309.     //
  310.     //  EntityExpRes
  311.     //      These are the values returned from the entity expansion method,
  312.     //      to indicate how it went.
  313.     //
  314.     //  XMLTokens
  315.     //      These represent the possible types of input we can get while
  316.     //      scanning content.
  317.     //
  318.     //  ValScheme
  319.     //      This indicates what the scanner should do in terms of validation.
  320.     //      'Auto' means if there is any int/ext subset, then validate. Else,
  321.     //      don't.
  322.     // -----------------------------------------------------------------------
  323.     enum DeclTypes
  324.     {
  325.         Decl_Text
  326.         , Decl_XML
  327.     };
  328.     enum EntityExpRes
  329.     {
  330.         EntityExp_Pushed
  331.         , EntityExp_Returned
  332.         , EntityExp_Failed
  333.     };
  334.     enum XMLTokens
  335.     {
  336.         Token_CData
  337.         , Token_CharData
  338.         , Token_Comment
  339.         , Token_EndTag
  340.         , Token_EOF
  341.         , Token_PI
  342.         , Token_StartTag
  343.         , Token_Unknown
  344.     };
  345.     enum ValSchemes
  346.     {
  347.         Val_Never
  348.         , Val_Always
  349.         , Val_Auto
  350.     };
  351.     // -----------------------------------------------------------------------
  352.     //  Constructors and Destructor
  353.     // -----------------------------------------------------------------------
  354.     XMLScanner
  355.     (
  356.         XMLValidator* const valToAdopt
  357.         , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
  358.     );
  359.     XMLScanner
  360.     (
  361.         XMLDocumentHandler* const  docHandler
  362.         , DocTypeHandler* const    docTypeHandler
  363.         , XMLEntityHandler* const  entityHandler
  364.         , XMLErrorReporter* const  errReporter
  365.         , XMLValidator* const      valToAdopt
  366.         , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
  367.     );
  368.     virtual ~XMLScanner();
  369.     // -----------------------------------------------------------------------
  370.     //  Error emitter methods
  371.     // -----------------------------------------------------------------------
  372.     void emitError(const XMLErrs::Codes toEmit);
  373.     void emitError
  374.     (
  375.         const   XMLErrs::Codes    toEmit
  376.         , const XMLCh* const        text1
  377.         , const XMLCh* const        text2 = 0
  378.         , const XMLCh* const        text3 = 0
  379.         , const XMLCh* const        text4 = 0
  380.     );
  381.     void emitError
  382.     (
  383.         const   XMLErrs::Codes    toEmit
  384.         , const char* const         text1
  385.         , const char* const         text2 = 0
  386.         , const char* const         text3 = 0
  387.         , const char* const         text4 = 0
  388.     );
  389.     // -----------------------------------------------------------------------
  390.     //  Public pure virtual methods
  391.     // -----------------------------------------------------------------------
  392.     virtual const XMLCh* getName() const = 0;
  393.     virtual NameIdPool<DTDEntityDecl>* getEntityDeclPool() = 0;
  394.     virtual const NameIdPool<DTDEntityDecl>* getEntityDeclPool() const = 0;
  395.     virtual unsigned int resolveQName
  396.     (
  397.         const   XMLCh* const        qName
  398.         ,       XMLBuffer&          prefixBufToFill
  399.         , const short               mode
  400.         ,       int&                prefixColonPos
  401.     ) = 0;
  402.     virtual void scanDocument
  403.     (
  404.         const   InputSource&    src
  405.     ) = 0;
  406.     virtual bool scanNext(XMLPScanToken& toFill) = 0;
  407.     virtual Grammar* loadGrammar
  408.     (
  409.         const   InputSource&    src
  410.         , const short           grammarType
  411.         , const bool            toCache = false
  412.     ) = 0;
  413.     // -----------------------------------------------------------------------
  414.     //  Getter methods
  415.     // -----------------------------------------------------------------------
  416.     const XMLDocumentHandler* getDocHandler() const;
  417.     XMLDocumentHandler* getDocHandler();
  418.     const DocTypeHandler* getDocTypeHandler() const;
  419.     DocTypeHandler* getDocTypeHandler();
  420.     bool getDoNamespaces() const;
  421.     ValSchemes getValidationScheme() const;
  422.     bool getDoSchema() const;
  423.     bool getValidationSchemaFullChecking() const;
  424.     const XMLEntityHandler* getEntityHandler() const;
  425.     XMLEntityHandler* getEntityHandler();
  426.     const XMLErrorReporter* getErrorReporter() const;
  427.     XMLErrorReporter* getErrorReporter();
  428.     const ErrorHandler* getErrorHandler() const;
  429.     ErrorHandler* getErrorHandler();
  430.     bool getExitOnFirstFatal() const;
  431.     bool getValidationConstraintFatal() const;
  432.     RefHashTableOf<XMLRefInfo>* getIDRefList();
  433.     const RefHashTableOf<XMLRefInfo>* getIDRefList() const;
  434.     bool getInException() const;
  435.     /*bool getLastExtLocation
  436.     (
  437.                 XMLCh* const    sysIdToFill
  438.         , const unsigned int    maxSysIdChars
  439.         ,       XMLCh* const    pubIdToFill
  440.         , const unsigned int    maxPubIdChars
  441.         ,       XMLSSize_t&     lineToFill
  442.         ,       XMLSSize_t&     colToFill
  443.     ) const;*/
  444.     const Locator* getLocator() const;
  445.     const ReaderMgr* getReaderMgr() const;
  446.     unsigned int getSrcOffset() const;
  447.     bool getStandalone() const;
  448.     const XMLValidator* getValidator() const;
  449.     XMLValidator* getValidator();
  450.     int getErrorCount();
  451.     const XMLStringPool* getURIStringPool() const;
  452.     XMLStringPool* getURIStringPool();
  453.     bool getHasNoDTD() const;
  454.     XMLCh* getExternalSchemaLocation() const;
  455.     XMLCh* getExternalNoNamespaceSchemaLocation() const;
  456.     SecurityManager* getSecurityManager() const;
  457.     bool getLoadExternalDTD() const;
  458.     bool getNormalizeData() const;
  459.     bool isCachingGrammarFromParse() const;
  460.     bool isUsingCachedGrammarInParse() const;
  461.     bool getCalculateSrcOfs() const;
  462.     Grammar* getRootGrammar() const;
  463.     XMLReader::XMLVersion getXMLVersion() const;
  464.     MemoryManager* getMemoryManager() const;
  465.     // -----------------------------------------------------------------------
  466.     //  Getter methods
  467.     // -----------------------------------------------------------------------
  468.     /**
  469.       * When an attribute name has no prefix, unlike elements, it is not mapped
  470.       * to the global namespace. So, in order to have something to map it to
  471.       * for practical purposes, a id for an empty URL is created and used for
  472.       * such names.
  473.       *
  474.       * @return The URL pool id of the URL for an empty URL "".
  475.       */
  476.     unsigned int getEmptyNamespaceId() const;
  477.     /**
  478.       * When a prefix is found that has not been mapped, an error is issued.
  479.       * However, if the parser has been instructed not to stop on the first
  480.       * fatal error, it needs to be able to continue. To do so, it will map
  481.       * that prefix tot his magic unknown namespace id.
  482.       *
  483.       * @return The URL pool id of the URL for the unknown prefix
  484.       *         namespace.
  485.       */
  486.     unsigned int getUnknownNamespaceId() const;
  487.     /**
  488.       * The prefix 'xml' is a magic prefix, defined by the XML spec and
  489.       * requiring no prior definition. This method returns the id for the
  490.       * intrinsically defined URL for this prefix.
  491.       *
  492.       * @return The URL pool id of the URL for the 'xml' prefix.
  493.       */
  494.     unsigned int getXMLNamespaceId() const;
  495.     /**
  496.       * The prefix 'xmlns' is a magic prefix, defined by the namespace spec
  497.       * and requiring no prior definition. This method returns the id for the
  498.       * intrinsically defined URL for this prefix.
  499.       *
  500.       * @return The URL pool id of the URL for the 'xmlns' prefix.
  501.       */
  502.     unsigned int getXMLNSNamespaceId() const;
  503.     /**
  504.       * This method find the passed URI id in its URI pool and
  505.       * copy the text of that URI into the passed buffer.
  506.       */
  507.     bool getURIText
  508.     (
  509.         const   unsigned int    uriId
  510.         ,       XMLBuffer&      uriBufToFill
  511.     )   const;
  512.     const XMLCh* getURIText(const   unsigned int    uriId) const;
  513.     /* tell if the validator comes from user */
  514.     bool isValidatorFromUser();
  515.     /* tell if standard URI are forced */
  516.     bool getStandardUriConformant() const;
  517.     // -----------------------------------------------------------------------
  518.     //  Setter methods
  519.     // -----------------------------------------------------------------------
  520.     void setDocHandler(XMLDocumentHandler* const docHandler);
  521.     void setDocTypeHandler(DocTypeHandler* const docTypeHandler);
  522.     void setDoNamespaces(const bool doNamespaces);
  523.     void setEntityHandler(XMLEntityHandler* const docTypeHandler);
  524.     void setErrorReporter(XMLErrorReporter* const errHandler);
  525.     void setErrorHandler(ErrorHandler* const handler);
  526.     void setGrammarResolver(GrammarResolver* const grammarResolver);
  527.     void setURIStringPool(XMLStringPool* const stringPool);
  528.     void setExitOnFirstFatal(const bool newValue);
  529.     void setValidationConstraintFatal(const bool newValue);
  530.     void setValidationScheme(const ValSchemes newScheme);
  531.     void setValidator(XMLValidator* const valToAdopt);
  532.     void setDoSchema(const bool doSchema);
  533.     void setValidationSchemaFullChecking(const bool schemaFullChecking);
  534.     void setHasNoDTD(const bool hasNoDTD);
  535.     void cacheGrammarFromParse(const bool newValue);
  536.     void useCachedGrammarInParse(const bool newValue);
  537.     void setRootElemName(XMLCh* rootElemName);
  538.     void setExternalSchemaLocation(const XMLCh* const schemaLocation);
  539.     void setExternalNoNamespaceSchemaLocation(const XMLCh* const noNamespaceSchemaLocation);
  540.     void setExternalSchemaLocation(const char* const schemaLocation);
  541.     void setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation);
  542.     void setSecurityManager(SecurityManager* const securityManager);
  543.     void setLoadExternalDTD(const bool loadDTD);
  544.     void setNormalizeData(const bool normalizeData);
  545.     void setCalculateSrcOfs(const bool newValue);
  546.     void setParseSettings(XMLScanner* const refScanner);
  547.     void setStandardUriConformant(const bool newValue);
  548.     // -----------------------------------------------------------------------
  549.     //  Mutator methods
  550.     // -----------------------------------------------------------------------
  551.     void incrementErrorCount(void); // For use by XMLValidator
  552.     // -----------------------------------------------------------------------
  553.     //  Deprecated methods as of 3.2.0. Use getValidationScheme() and
  554.     //  setValidationScheme() instead.
  555.     // -----------------------------------------------------------------------
  556.     bool getDoValidation() const;
  557.     void setDoValidation(const bool validate);
  558.     // -----------------------------------------------------------------------
  559.     //  Document scanning methods
  560.     //
  561.     //  scanDocument() does the entire source document. scanFirst(),
  562.     //  scanNext(), and scanReset() support a progressive parse.
  563.     // -----------------------------------------------------------------------
  564.     void scanDocument
  565.     (
  566.         const   XMLCh* const    systemId
  567.     );
  568.     void scanDocument
  569.     (
  570.         const   char* const     systemId
  571.     );
  572.     bool scanFirst
  573.     (
  574.         const   InputSource&    src
  575.         ,       XMLPScanToken&  toFill
  576.     );
  577.     bool scanFirst
  578.     (
  579.         const   XMLCh* const    systemId
  580.         ,       XMLPScanToken&  toFill
  581.     );
  582.     bool scanFirst
  583.     (
  584.         const   char* const     systemId
  585.         ,       XMLPScanToken&  toFill
  586.     );
  587.     void scanReset(XMLPScanToken& toFill);
  588.     bool checkXMLDecl(bool startWithAngle);
  589.     // -----------------------------------------------------------------------
  590.     //  Grammar preparsing methods
  591.     // -----------------------------------------------------------------------
  592.     Grammar* loadGrammar
  593.     (
  594.         const   XMLCh* const    systemId
  595.         , const short           grammarType
  596.         , const bool            toCache = false
  597.     );
  598.     Grammar* loadGrammar
  599.     (
  600.         const   char* const     systemId
  601.         , const short           grammarType
  602.         , const bool            toCache = false
  603.     );
  604.     // -----------------------------------------------------------------------
  605.     //  Notification that lazy data has been deleted
  606.     // -----------------------------------------------------------------------
  607. static void reinitScannerMutex();
  608. static void reinitMsgLoader();
  609. protected:
  610.     // -----------------------------------------------------------------------
  611.     //  Protected pure virtual methods
  612.     // -----------------------------------------------------------------------
  613.     virtual void scanCDSection() = 0;
  614.     virtual void scanCharData(XMLBuffer& toToUse) = 0;
  615.     virtual EntityExpRes scanEntityRef
  616.     (
  617.         const   bool    inAttVal
  618.         ,       XMLCh&  firstCh
  619.         ,       XMLCh&  secondCh
  620.         ,       bool&   escaped
  621.     ) = 0;
  622.     virtual void scanDocTypeDecl() = 0;
  623.     virtual void scanReset(const InputSource& src) = 0;
  624.     virtual void sendCharData(XMLBuffer& toSend) = 0;
  625.     // -----------------------------------------------------------------------
  626.     //  Protected scanning methods
  627.     // -----------------------------------------------------------------------
  628.     bool scanCharRef(XMLCh& toFill, XMLCh& second);
  629.     void scanComment();
  630.     bool scanEq();
  631.     void scanMiscellaneous();
  632.     void scanPI();
  633.     void scanProlog();
  634.     void scanXMLDecl(const DeclTypes type);
  635.     // -----------------------------------------------------------------------
  636.     //  Private helper methods
  637.     // -----------------------------------------------------------------------
  638.     void checkIDRefs();
  639.     bool isLegalToken(const XMLPScanToken& toCheck);
  640.     XMLTokens senseNextToken(unsigned int& orgReader);
  641.     void initValidator(XMLValidator* theValidator);
  642.     // -----------------------------------------------------------------------
  643.     //  Data members
  644.     //
  645.     //  fAttrList
  646.     //      Every time we get a new element start tag, we have to pass to
  647.     //      the document handler the attributes found. To make it more
  648.     //      efficient we keep this ref vector of XMLAttr objects around. We
  649.     //      just reuse it over and over, allowing it to grow to meet the
  650.     //      peek need.
  651.     //
  652.     //  fBufMgr
  653.     //      This is a manager for temporary buffers used during scanning.
  654.     //      For efficiency we must use a set of static buffers, but we have
  655.     //      to insure that they are not incorrectly reused. So this manager
  656.     //      provides the smarts to hand out buffers as required.
  657.     //
  658.     //  fDocHandler
  659.     //      The client code's document handler. If zero, then no document
  660.     //      handler callouts are done. We don't adopt it.
  661.     //
  662.     //  fDocTypeHandler
  663.     //      The client code's document type handler (used by DTD Validator).
  664.     //
  665.     //  fDoNamespaces
  666.     //      This flag indicates whether the client code wants us to do
  667.     //      namespaces or not. If the installed validator indicates that it
  668.     //      has to do namespaces, then this is ignored.
  669.     //
  670.     //  fEntityHandler
  671.     //      The client code's entity handler. If zero, then no entity handler
  672.     //      callouts are done. We don't adopt it.
  673.     //
  674.     //  fErrorReporter
  675.     //      The client code's error reporter. If zero, then no error reporter
  676.     //      callouts are done. We don't adopt it.
  677.     //
  678.     //  fErrorHandler
  679.     //      The client code's error handler.  Need to store this info for
  680.     //      Schema parse error handling.
  681.     //
  682.     //  fExitOnFirstFatal
  683.     //      This indicates whether we bail out on the first fatal XML error
  684.     //      or not. It defaults to true, which is the strict XML way, but it
  685.     //      can be changed.
  686.     //
  687.     //  fValidationConstraintFatal
  688.     //      This indicates whether we treat validation constraint errors as
  689.     //      fatal errors or not. It defaults to false, but it can be changed.
  690.     //
  691.     //  fIDRefList
  692.     //      This is a list of XMLRefInfo objects. This member lets us do all
  693.     //      needed ID-IDREF balancing checks.
  694.     //
  695.     //  fInException
  696.     //      To avoid a circular freakout when we catch an exception and emit
  697.     //      it, which would normally throw again if the 'fail on first error'
  698.     //      flag is one.
  699.     //
  700.     //  fReaderMgr
  701.     //      This is the reader manager, from which we get characters. It
  702.     //      manages the reader stack for us, and provides a lot of convenience
  703.     //      methods to do specialized checking for chars, sequences of chars,
  704.     //      skipping chars, etc...
  705.     //
  706.     //  fScannerId
  707.     //  fSequenceId
  708.     //      These are used for progressive parsing, to make sure that the
  709.     //      client code does the right thing at the right time.
  710.     //
  711.     //  fStandalone
  712.     //      Indicates whether the document is standalone or not. Defaults to
  713.     //      no, but can be overridden in the XMLDecl.
  714.     //
  715.     //  fHasNoDTD
  716.     //      Indicates the document has no DTD or has only an internal DTD subset
  717.     //      which contains no parameter entity references.
  718.     //
  719.     //  fValidate
  720.     //      Indicates whether any validation should be done. This is defined
  721.     //      by the existence of a Grammar together with fValScheme.
  722.     //
  723.     //  fValidator
  724.     //      The installed validator. We look at them via the abstract
  725.     //      validator interface, and don't know what it actual is.
  726.     //      Either point to user's installed validator, or fDTDValidator
  727.     //      or fSchemaValidator.
  728.     //
  729.     //  fValidatorFromUser
  730.     //      This flag indicates whether the validator was installed from
  731.     //      user.  If false, then the validator was created by the Scanner.
  732.     //
  733.     //  fValScheme
  734.     //      This is the currently set validation scheme. It defaults to
  735.     //      'never', but can be set by the client.
  736.     //
  737.     //  fErrorCount
  738.     // The number of errors we've encountered.
  739.     //
  740.     //  fDoSchema
  741.     //      This flag indicates whether the client code wants Schema to
  742.     //      be processed or not.
  743.     //
  744.     //  fSchemaFullChecking
  745.     //      This flag indicates whether the client code wants full Schema
  746.     //      constraint checking.
  747.     //
  748.     //  fAttName
  749.     //  fAttValue
  750.     //  fCDataBuf
  751.     //  fNameBuf
  752.     //  fQNameBuf
  753.     //  fPrefixBuf
  754.     //      For the most part, buffers are obtained from the fBufMgr object
  755.     //      on the fly. However, for the start tag scan, we have a set of
  756.     //      fixed buffers for performance reasons. These are used a lot and
  757.     //      there are a number of them, so asking the buffer manager each
  758.     //      time for new buffers is a bit too much overhead.
  759.     //
  760.     //  fEmptyNamespaceId
  761.     //      This is the id of the empty namespace URI. This is a special one
  762.     //      because of the xmlns="" type of deal. We have to quickly sense
  763.     //      that its the empty namespace.
  764.     //
  765.     //  fUnknownNamespaceId
  766.     //      This is the id of the namespace URI which is assigned to the
  767.     //      global namespace. Its for debug purposes only, since there is no
  768.     //      real global namespace URI. Its set by the derived class.
  769.     //
  770.     //  fXMLNamespaceId
  771.     //  fXMLNSNamespaceId
  772.     //      These are the ids of the namespace URIs which are assigned to the
  773.     //      'xml' and 'xmlns' special prefixes. The former is officially
  774.     //      defined but the latter is not, so we just provide one for debug
  775.     //      purposes.
  776.     //
  777.     //  fSchemaNamespaceId
  778.     //      This is the id of the schema namespace URI.
  779.     //
  780.     //  fGrammarResolver
  781.     //      Grammar Pool that stores all the grammars. Key is namespace for
  782.     //      schema and system id for external DTD. When caching a grammar, if
  783.     //      a grammar is already in the pool, it will be replaced with the
  784.     //      new parsed one.
  785.     //
  786.     //  fGrammar
  787.     //      Current Grammar used by the Scanner and Validator
  788.     //
  789.     //  fRootGrammar
  790.     //      The grammar where the root element is declared.
  791.     //
  792.     //  fGrammarType
  793.     //      Current Grammar Type.  Store this value instead of calling getGrammarType
  794.     //      all the time for faster performance.
  795.     //
  796.     //  fURIStringPool
  797.     //      This is a pool for URIs with unique ids assigned. We use a standard
  798.     //      string pool class.  This pool is going to be shared by all Grammar.
  799.     //      Use only if namespace is turned on.
  800.     //
  801.     //  fRootElemName
  802.     //      No matter we are using DTD or Schema Grammar, if a DOCTYPE exists,
  803.     //      we need to verify the root element name.  So store the rootElement
  804.     //      that is used in the DOCTYPE in the Scanner instead of in the DTDGrammar
  805.     //      where it used to
  806.     //
  807.     //  fExternalSchemaLocation
  808.     //      The list of Namespace/SchemaLocation that was specified externally
  809.     //      using setExternalSchemaLocation.
  810.     //
  811.     //  fExternalNoNamespaceSchemaLocation
  812.     //      The no target namespace XML Schema Location that was specified
  813.     //      externally using setExternalNoNamespaceSchemaLocation.
  814.     //
  815.     //  fSecurityManager
  816.     //      The SecurityManager instance; as and when set by the application.
  817.     //
  818.     //  fEntityExpansionLimit
  819.     //      The number of entity expansions to be permitted while processing this document
  820.     //      Only meaningful when fSecurityManager != 0
  821.     //
  822.     //  fEntityExpansionCount
  823.     //      The number of general entities expanded so far in this document.
  824.     //      Only meaningful when fSecurityManager != null
  825.     //
  826.     //  fLoadExternalDTD
  827.     //      This flag indicates whether the external DTD be loaded or not
  828.     //
  829.     //  fNormalizeData
  830.     //      This flag indicates whether the parser should perform datatype
  831.     //      normalization that is defined in the schema.
  832.     //
  833.     //  fCalculateSrcOfs
  834.     //      This flag indicates the parser should calculate the source offset.
  835.     //      Turning this on may impact performance.
  836.     //
  837.     //  fStandardUriConformant
  838.     //      This flag controls whether we force conformant URI
  839.     //
  840.     //  fXMLVersion
  841.     //      Enum to indicate if the main doc is XML 1.1 or XML 1.0 conformant    
  842.     //
  843.     //  fMemoryManager
  844.     //      Pluggable memory manager for dynamic allocation/deallocation.
  845.     // -----------------------------------------------------------------------
  846.     bool                        fStandardUriConformant;
  847.     bool                        fCalculateSrcOfs;
  848.     bool                        fDoNamespaces;
  849.     bool                        fExitOnFirstFatal;
  850.     bool                        fValidationConstraintFatal;
  851.     bool                        fInException;
  852.     bool                        fStandalone;
  853.     bool                        fHasNoDTD;
  854.     bool                        fValidate;
  855.     bool                        fValidatorFromUser;
  856.     bool                        fDoSchema;
  857.     bool                        fSchemaFullChecking;
  858.     bool                        fToCacheGrammar;
  859.     bool                        fUseCachedGrammar;
  860.     bool                        fLoadExternalDTD;
  861.     bool                        fNormalizeData;
  862.     int                         fErrorCount;
  863.     unsigned int                fEntityExpansionLimit;
  864.     unsigned int                fEntityExpansionCount;
  865.     unsigned int                fEmptyNamespaceId;
  866.     unsigned int                fUnknownNamespaceId;
  867.     unsigned int                fXMLNamespaceId;
  868.     unsigned int                fXMLNSNamespaceId;
  869.     unsigned int                fSchemaNamespaceId;
  870.     XMLUInt32                   fScannerId;
  871.     XMLUInt32                   fSequenceId;
  872.     RefVectorOf<XMLAttr>*       fAttrList;
  873.     XMLDocumentHandler*         fDocHandler;
  874.     DocTypeHandler*             fDocTypeHandler;
  875.     XMLEntityHandler*           fEntityHandler;
  876.     XMLErrorReporter*           fErrorReporter;
  877.     ErrorHandler*               fErrorHandler;
  878.     RefHashTableOf<XMLRefInfo>* fIDRefList;
  879.     ReaderMgr                   fReaderMgr;
  880.     XMLValidator*               fValidator;
  881.     ValSchemes                  fValScheme;
  882.     GrammarResolver*            fGrammarResolver;
  883.     Grammar*                    fGrammar;
  884.     Grammar*                    fRootGrammar;
  885.     XMLStringPool*              fURIStringPool;
  886.     XMLCh*                      fRootElemName;
  887.     XMLCh*                      fExternalSchemaLocation;
  888.     XMLCh*                      fExternalNoNamespaceSchemaLocation;
  889.     SecurityManager*            fSecurityManager;
  890.     XMLReader::XMLVersion       fXMLVersion;
  891.     MemoryManager*              fMemoryManager;
  892.     XMLBufferMgr                fBufMgr;
  893.     XMLBuffer                   fAttNameBuf;
  894.     XMLBuffer                   fAttValueBuf;
  895.     XMLBuffer                   fCDataBuf;
  896.     XMLBuffer                   fQNameBuf;
  897.     XMLBuffer                   fPrefixBuf;
  898.     XMLBuffer                   fURIBuf;
  899. private :
  900.     // -----------------------------------------------------------------------
  901.     //  Unimplemented constructors and operators
  902.     // -----------------------------------------------------------------------
  903.     XMLScanner();
  904.     XMLScanner(const XMLScanner&);
  905.     XMLScanner& operator=(const XMLScanner&);
  906.     // -----------------------------------------------------------------------
  907.     //  Private helper methods
  908.     // -----------------------------------------------------------------------
  909.     void commonInit();
  910.     // -----------------------------------------------------------------------
  911.     //  Private scanning methods
  912.     // -----------------------------------------------------------------------
  913.     bool getQuotedString(XMLBuffer& toFill);
  914.     unsigned int scanUpToWSOr
  915.     (
  916.                 XMLBuffer&  toFill
  917.         , const XMLCh       chEndChar
  918.     );
  919. };
  920. // ---------------------------------------------------------------------------
  921. //  XMLScanner: Getter methods
  922. // ---------------------------------------------------------------------------
  923. inline const XMLDocumentHandler* XMLScanner::getDocHandler() const
  924. {
  925.     return fDocHandler;
  926. }
  927. inline XMLDocumentHandler* XMLScanner::getDocHandler()
  928. {
  929.     return fDocHandler;
  930. }
  931. inline const DocTypeHandler* XMLScanner::getDocTypeHandler() const
  932. {
  933.     return fDocTypeHandler;
  934. }
  935. inline DocTypeHandler* XMLScanner::getDocTypeHandler()
  936. {
  937.     return fDocTypeHandler;
  938. }
  939. inline bool XMLScanner::getDoNamespaces() const
  940. {
  941.     return fDoNamespaces;
  942. }
  943. inline const XMLEntityHandler* XMLScanner::getEntityHandler() const
  944. {
  945.     return fEntityHandler;
  946. }
  947. inline XMLEntityHandler* XMLScanner::getEntityHandler()
  948. {
  949.     return fEntityHandler;
  950. }
  951. inline const XMLErrorReporter* XMLScanner::getErrorReporter() const
  952. {
  953.     return fErrorReporter;
  954. }
  955. inline XMLErrorReporter* XMLScanner::getErrorReporter()
  956. {
  957.     return fErrorReporter;
  958. }
  959. inline const ErrorHandler* XMLScanner::getErrorHandler() const
  960. {
  961.     return fErrorHandler;
  962. }
  963. inline ErrorHandler* XMLScanner::getErrorHandler()
  964. {
  965.     return fErrorHandler;
  966. }
  967. inline bool XMLScanner::getExitOnFirstFatal() const
  968. {
  969.     return fExitOnFirstFatal;
  970. }
  971. inline bool XMLScanner::getValidationConstraintFatal() const
  972. {
  973.     return fValidationConstraintFatal;
  974. }
  975. inline bool XMLScanner::getInException() const
  976. {
  977.     return fInException;
  978. }
  979. inline RefHashTableOf<XMLRefInfo>* XMLScanner::getIDRefList()
  980. {
  981.     return fIDRefList;
  982. }
  983. inline const RefHashTableOf<XMLRefInfo>* XMLScanner::getIDRefList() const
  984. {
  985.     return fIDRefList;
  986. }
  987. inline const Locator* XMLScanner::getLocator() const
  988. {
  989.     return &fReaderMgr;
  990. }
  991. inline const ReaderMgr* XMLScanner::getReaderMgr() const
  992. {
  993.     return &fReaderMgr;
  994. }
  995. inline unsigned int XMLScanner::getSrcOffset() const
  996. {
  997.     return fReaderMgr.getSrcOffset();
  998. }
  999. inline bool XMLScanner::getStandalone() const
  1000. {
  1001.     return fStandalone;
  1002. }
  1003. inline XMLScanner::ValSchemes XMLScanner::getValidationScheme() const
  1004. {
  1005.     return fValScheme;
  1006. }
  1007. inline const XMLValidator* XMLScanner::getValidator() const
  1008. {
  1009.     return fValidator;
  1010. }
  1011. inline XMLValidator* XMLScanner::getValidator()
  1012. {
  1013.     return fValidator;
  1014. }
  1015. inline bool XMLScanner::getDoSchema() const
  1016. {
  1017.     return fDoSchema;
  1018. }
  1019. inline bool XMLScanner::getValidationSchemaFullChecking() const
  1020. {
  1021.     return fSchemaFullChecking;
  1022. }
  1023. inline int XMLScanner::getErrorCount()
  1024. {
  1025.     return fErrorCount;
  1026. }
  1027. inline bool XMLScanner::isValidatorFromUser()
  1028. {
  1029.     return fValidatorFromUser;
  1030. }
  1031. inline unsigned int XMLScanner::getEmptyNamespaceId() const
  1032. {
  1033.     return fEmptyNamespaceId;
  1034. }
  1035. inline unsigned int XMLScanner::getUnknownNamespaceId() const
  1036. {
  1037.     return fUnknownNamespaceId;
  1038. }
  1039. inline unsigned int XMLScanner::getXMLNamespaceId() const
  1040. {
  1041.     return fXMLNamespaceId;
  1042. }
  1043. inline unsigned int XMLScanner::getXMLNSNamespaceId() const
  1044. {
  1045.     return fXMLNSNamespaceId;
  1046. }
  1047. inline const XMLStringPool* XMLScanner::getURIStringPool() const
  1048. {
  1049.     return fURIStringPool;
  1050. }
  1051. inline XMLStringPool* XMLScanner::getURIStringPool()
  1052. {
  1053.     return fURIStringPool;
  1054. }
  1055. inline bool XMLScanner::getHasNoDTD() const
  1056. {
  1057.     return fHasNoDTD;
  1058. }
  1059. inline XMLCh* XMLScanner::getExternalSchemaLocation() const
  1060. {
  1061.     return fExternalSchemaLocation;
  1062. }
  1063. inline XMLCh* XMLScanner::getExternalNoNamespaceSchemaLocation() const
  1064. {
  1065.     return fExternalNoNamespaceSchemaLocation;
  1066. }
  1067. inline SecurityManager* XMLScanner::getSecurityManager() const
  1068. {
  1069.     return fSecurityManager;
  1070. }
  1071. inline bool XMLScanner::getLoadExternalDTD() const
  1072. {
  1073.     return fLoadExternalDTD;
  1074. }
  1075. inline bool XMLScanner::getNormalizeData() const
  1076. {
  1077.     return fNormalizeData;
  1078. }
  1079. inline bool XMLScanner::isCachingGrammarFromParse() const
  1080. {
  1081.     return fToCacheGrammar;
  1082. }
  1083. inline bool XMLScanner::isUsingCachedGrammarInParse() const
  1084. {
  1085.     return fUseCachedGrammar;
  1086. }
  1087. inline bool XMLScanner::getCalculateSrcOfs() const
  1088. {
  1089.     return fCalculateSrcOfs;
  1090. }
  1091. inline Grammar* XMLScanner::getRootGrammar() const
  1092. {
  1093.     return fRootGrammar;
  1094. }
  1095. inline bool XMLScanner::getStandardUriConformant() const
  1096. {
  1097.     return fStandardUriConformant;
  1098. }
  1099. inline XMLReader::XMLVersion XMLScanner::getXMLVersion() const
  1100. {
  1101. return fXMLVersion;
  1102. }
  1103. inline MemoryManager* XMLScanner::getMemoryManager() const
  1104. {
  1105.     return fMemoryManager;
  1106. }
  1107. // ---------------------------------------------------------------------------
  1108. //  XMLScanner: Setter methods
  1109. // ---------------------------------------------------------------------------
  1110. inline void XMLScanner::setDocHandler(XMLDocumentHandler* const docHandler)
  1111. {
  1112.     fDocHandler = docHandler;
  1113. }
  1114. inline void XMLScanner::setDocTypeHandler(DocTypeHandler* const docTypeHandler)
  1115. {
  1116.     fDocTypeHandler = docTypeHandler;
  1117. }
  1118. inline void XMLScanner::setErrorHandler(ErrorHandler* const handler)
  1119. {
  1120.     fErrorHandler = handler;
  1121. }
  1122. inline void XMLScanner::setEntityHandler(XMLEntityHandler* const entityHandler)
  1123. {
  1124.     fEntityHandler = entityHandler;
  1125.     fReaderMgr.setEntityHandler(entityHandler);
  1126. }
  1127. inline void XMLScanner::setErrorReporter(XMLErrorReporter* const errHandler)
  1128. {
  1129.     fErrorReporter = errHandler;
  1130. }
  1131. inline void XMLScanner::setGrammarResolver(GrammarResolver* const grammarResolver)
  1132. {
  1133.     fGrammarResolver = grammarResolver;
  1134. }
  1135. inline void XMLScanner::setExitOnFirstFatal(const bool newValue)
  1136. {
  1137.     fExitOnFirstFatal = newValue;
  1138. }
  1139. inline void XMLScanner::setValidationConstraintFatal(const bool newValue)
  1140. {
  1141.     fValidationConstraintFatal = newValue;
  1142. }
  1143. inline void XMLScanner::setValidationScheme(const ValSchemes newScheme)
  1144. {
  1145.     fValScheme = newScheme;
  1146.     // validation flag for Val_Auto is set to false by default,
  1147.     //   and will be turned to true if a grammar is seen
  1148.     if (fValScheme == Val_Always)
  1149.         fValidate = true;
  1150.     else
  1151.         fValidate = false;
  1152. }
  1153. inline void XMLScanner::setDoSchema(const bool doSchema)
  1154. {
  1155.     fDoSchema = doSchema;
  1156. }
  1157. inline void XMLScanner::setDoNamespaces(const bool doNamespaces)
  1158. {
  1159.     fDoNamespaces = doNamespaces;
  1160. }
  1161. inline void XMLScanner::setValidationSchemaFullChecking(const bool schemaFullChecking)
  1162. {
  1163.     fSchemaFullChecking = schemaFullChecking;
  1164. }
  1165. inline void XMLScanner::setHasNoDTD(const bool hasNoDTD)
  1166. {
  1167.     fHasNoDTD = hasNoDTD;
  1168. }
  1169. inline void XMLScanner::setRootElemName(XMLCh* rootElemName)
  1170. {
  1171.     fMemoryManager->deallocate(fRootElemName);//delete [] fRootElemName;
  1172.     fRootElemName = XMLString::replicate(rootElemName, fMemoryManager);
  1173. }
  1174. inline void XMLScanner::setExternalSchemaLocation(const XMLCh* const schemaLocation)
  1175. {
  1176.     fMemoryManager->deallocate(fExternalSchemaLocation);//delete [] fExternalSchemaLocation;
  1177.     fExternalSchemaLocation = XMLString::replicate(schemaLocation, fMemoryManager);
  1178. }
  1179. inline void XMLScanner::setExternalNoNamespaceSchemaLocation(const XMLCh* const noNamespaceSchemaLocation)
  1180. {
  1181.     fMemoryManager->deallocate(fExternalNoNamespaceSchemaLocation);//delete [] fExternalNoNamespaceSchemaLocation;
  1182.     fExternalNoNamespaceSchemaLocation = XMLString::replicate(noNamespaceSchemaLocation, fMemoryManager);
  1183. }
  1184. inline void XMLScanner::setExternalSchemaLocation(const char* const schemaLocation)
  1185. {
  1186.     fMemoryManager->deallocate(fExternalSchemaLocation);//delete [] fExternalSchemaLocation;
  1187.     fExternalSchemaLocation = XMLString::transcode(schemaLocation, fMemoryManager);
  1188. }
  1189. inline void XMLScanner::setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation)
  1190. {
  1191.     fMemoryManager->deallocate(fExternalNoNamespaceSchemaLocation);//delete [] fExternalNoNamespaceSchemaLocation;
  1192.     fExternalNoNamespaceSchemaLocation = XMLString::transcode(noNamespaceSchemaLocation, fMemoryManager);
  1193. }
  1194. inline void XMLScanner::setSecurityManager(SecurityManager* const securityManager)
  1195. {
  1196.     fSecurityManager = securityManager;
  1197.     if(securityManager != 0) 
  1198.     {
  1199.         fEntityExpansionLimit = securityManager->getEntityExpansionLimit();
  1200.         fEntityExpansionCount = 0;
  1201.     }
  1202. }
  1203. inline void XMLScanner::setLoadExternalDTD(const bool loadDTD)
  1204. {
  1205.     fLoadExternalDTD = loadDTD;
  1206. }
  1207. inline void XMLScanner::setNormalizeData(const bool normalizeData)
  1208. {
  1209.     fNormalizeData = normalizeData;
  1210. }
  1211. inline void XMLScanner::cacheGrammarFromParse(const bool newValue)
  1212. {
  1213.     fToCacheGrammar = newValue;
  1214. }
  1215. inline void XMLScanner::useCachedGrammarInParse(const bool newValue)
  1216. {
  1217.     fUseCachedGrammar = newValue;
  1218. }
  1219. inline void XMLScanner::setCalculateSrcOfs(const bool newValue)
  1220. {
  1221.     fCalculateSrcOfs = newValue;
  1222. }
  1223. inline void XMLScanner::setStandardUriConformant(const bool newValue)
  1224. {
  1225.     fStandardUriConformant = newValue;
  1226.     fReaderMgr.setStandardUriConformant(newValue);
  1227. }
  1228. // ---------------------------------------------------------------------------
  1229. //  XMLScanner: Mutator methods
  1230. // ---------------------------------------------------------------------------
  1231. inline void XMLScanner::incrementErrorCount()
  1232. {
  1233.     ++fErrorCount;
  1234. }
  1235. // ---------------------------------------------------------------------------
  1236. //  XMLScanner: Deprecated methods
  1237. // ---------------------------------------------------------------------------
  1238. inline bool XMLScanner::getDoValidation() const
  1239. {
  1240.     return fValidate;
  1241. }
  1242. inline void XMLScanner::setDoValidation(const bool validate)
  1243. {
  1244.     fValidate = validate;
  1245.     if (fValidate)
  1246.         fValScheme = Val_Always;
  1247.     else
  1248.         fValScheme = Val_Never;
  1249. }
  1250. XERCES_CPP_NAMESPACE_END
  1251. #endif