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

词法分析

开发平台:

Visual C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 1999-2003 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: SAX2XMLReaderImpl.hpp,v $
  58.  * Revision 1.21  2003/05/22 02:10:51  knoaman
  59.  * Default the memory manager.
  60.  *
  61.  * Revision 1.20  2003/05/15 18:26:50  knoaman
  62.  * Partial implementation of the configurable memory manager.
  63.  *
  64.  * Revision 1.19  2003/04/17 21:58:50  neilg
  65.  * Adding a new property,
  66.  * http://apache.org/xml/properties/security-manager, with
  67.  * appropriate getSecurityManager/setSecurityManager methods on DOM
  68.  * and SAX parsers.  Also adding a new SecurityManager class.
  69.  *
  70.  * The purpose of these modifications is to permit applications a
  71.  * means to have the parser reject documents whose processing would
  72.  * otherwise consume large amounts of system resources.  Malicious
  73.  * use of such documents could be used to launch a denial-of-service
  74.  * attack against a system running the parser.  Initially, the
  75.  * SecurityManager only knows about attacks that can result from
  76.  * exponential entity expansion; this is the only known attack that
  77.  * involves processing a single XML document.  Other, simlar attacks
  78.  * can be launched if arbitrary schemas may be parsed; there already
  79.  * exist means (via use of the EntityResolver interface) by which
  80.  * applications can deny processing of untrusted schemas.  In future,
  81.  * the SecurityManager will be expanded to take these other exploits
  82.  * into account.
  83.  *
  84.  * Adding SecurityManager support
  85.  * 
  86.  * Revision 1.18  2003/03/07 18:09:16  tng
  87.  * Return a reference instead of void for operator=
  88.  *
  89.  * Revision 1.17  2003/01/09 19:07:08  tng
  90.  * [Bug 15802] Add "const" qualifier to getURIText.
  91.  *
  92.  * Revision 1.16  2002/12/23 15:23:18  knoaman
  93.  * Added a public api to various parsers to return the src offset within the input
  94.  * source.
  95.  *
  96.  * Revision 1.15  2002/12/04 01:57:09  knoaman
  97.  * Scanner re-organization.
  98.  *
  99.  * Revision 1.14  2002/11/04 14:57:03  tng
  100.  * C++ Namespace Support.
  101.  *
  102.  * Revision 1.13  2002/08/14 15:20:38  knoaman
  103.  * [Bug 3111] Problem with LexicalHandler::startDTD() and LexicalHandler::endDTD().
  104.  *
  105.  * Revision 1.12  2002/07/11 18:27:04  knoaman
  106.  * Grammar caching/preparsing - initial implementation.
  107.  *
  108.  * Revision 1.11  2002/06/27 18:47:32  tng
  109.  * API Documentation Update.
  110.  *
  111.  * Revision 1.10  2002/06/17 15:41:15  tng
  112.  * To be consistent, SAX2 is updated with:
  113.  * 1. the progressive parse methods should use the fReuseGrammar flag set from setFeature instead of using parameter
  114.  * 2. add feature "http://apache.org/xml/features/continue-after-fatal-error", and users should use setFeature instead of setExitOnFirstFatalError
  115.  * 3. add feature "http://apache.org/xml/features/validation-error-as-fatal", and users should use setFeature instead of setValidationConstraintFatal
  116.  *
  117.  * Revision 1.9  2002/06/06 20:38:18  tng
  118.  * Document Fix: document that the returned object from resolveEntity is owned by the parser
  119.  *
  120.  * Revision 1.8  2002/05/31 15:13:53  tng
  121.  * Fix doxygen documentation.
  122.  *
  123.  * Revision 1.7  2002/05/30 16:39:06  knoaman
  124.  * DOM L3 LS.
  125.  *
  126.  * Revision 1.6  2002/05/30 16:20:09  tng
  127.  * Add feature to optionally ignore external DTD.
  128.  *
  129.  * Revision 1.5  2002/05/29 21:37:47  knoaman
  130.  * Add baseURI to resolveEntity to support DOMInputSource.
  131.  *
  132.  * Revision 1.4  2002/05/28 20:44:14  tng
  133.  * [Bug 9104] prefixes dissapearing when schema validation turned on.
  134.  *
  135.  * Revision 1.3  2002/05/27 18:39:21  tng
  136.  * To get ready for 64 bit large file, use XMLSSize_t to represent line and column number.
  137.  *
  138.  * Revision 1.2  2002/02/13 16:09:24  knoaman
  139.  * Move SAX2 features/properties names constants to XMLUni.
  140.  *
  141.  * Revision 1.1.1.1  2002/02/01 22:22:07  peiyongz
  142.  * sane_include
  143.  *
  144.  * Revision 1.21  2002/01/28 18:45:40  knoaman
  145.  * Update documentation for SAX2 feature 'namespace-prefixes'.
  146.  *
  147.  * Revision 1.20  2002/01/28 17:08:47  knoaman
  148.  * SAX2-ext's DeclHandler support.
  149.  *
  150.  * Revision 1.19  2002/01/24 16:30:34  tng
  151.  * [Bug 3111] Problem with LexicalHandler::startDTD() and LexicalHandler::endDTD() .
  152.  *
  153.  * Revision 1.18  2002/01/18 16:31:38  tng
  154.  * Break program.xml which takes too long to load, into program-sax.xml, program-sax2.xml, program-dom.xml, program-idom.xml.
  155.  *
  156.  * Revision 1.17  2002/01/02 15:36:41  tng
  157.  * Some documentation update.
  158.  *
  159.  * Revision 1.16  2001/11/20 18:51:44  tng
  160.  * 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).
  161.  *
  162.  * Revision 1.15  2001/11/14 14:15:42  tng
  163.  * Update SAX2 feature documentation.
  164.  *
  165.  * Revision 1.14  2001/09/12 13:03:43  tng
  166.  * [Bug 3155] SAX2 does not offer progressive parse.
  167.  *
  168.  * Revision 1.13  2001/08/01 19:11:02  tng
  169.  * Add full schema constraint checking flag to the samples and the parser.
  170.  *
  171.  * Revision 1.12  2001/06/27 17:39:52  knoaman
  172.  * Fix for bug #2353.
  173.  *
  174.  * Revision 1.11  2001/06/19 16:45:08  tng
  175.  * Add installAdvDocHandler to SAX2XMLReader as the code is there already.
  176.  *
  177.  * Revision 1.10  2001/06/04 21:01:49  jberry
  178.  * getErrorCount is virtual in this class reflecting derivation from SAX2XMLReader.
  179.  *
  180.  * Revision 1.9  2001/06/03 19:26:19  jberry
  181.  * Add support for querying error count following parse; enables simple parse without requiring error handler.
  182.  *
  183.  * Revision 1.8  2001/05/11 13:26:21  tng
  184.  * Copyright update.
  185.  *
  186.  * Revision 1.7  2001/03/30 16:46:57  tng
  187.  * Schema: Use setDoSchema instead of setSchemaValidation which makes more sense.
  188.  *
  189.  * Revision 1.6  2001/03/21 21:56:08  tng
  190.  * Schema: Add Schema Grammar, Schema Validator, and split the DTDValidator into DTDValidator, DTDScanner, and DTDGrammar.
  191.  *
  192.  * Revision 1.5  2001/02/15 15:56:29  tng
  193.  * Schema: Add setSchemaValidation and getSchemaValidation for DOMParser and SAXParser.
  194.  * Add feature "http://apache.org/xml/features/validation/schema" for SAX2XMLReader.
  195.  * New data field  fSchemaValidation in XMLScanner as the flag.
  196.  *
  197.  * Revision 1.4  2000/12/22 15:16:53  tng
  198.  * SAX2-ext's LexicalHandler support added by David Bertoni.
  199.  *
  200.  * Revision 1.3  2000/08/09 22:16:13  jpolast
  201.  * many conformance & stability changes:
  202.  *   - ContentHandler::resetDocument() removed
  203.  *   - attrs param of ContentHandler::startDocument() made const
  204.  *   - SAXExceptions thrown now have msgs
  205.  *   - removed duplicate function signatures that had 'const'
  206.  *       [ eg: getContentHander() ]
  207.  *   - changed getFeature and getProperty to apply to const objs
  208.  *   - setProperty now takes a void* instead of const void*
  209.  *   - SAX2XMLReaderImpl does not inherit from SAXParser anymore
  210.  *   - Reuse Validator (http://apache.org/xml/features/reuse-validator) implemented
  211.  *   - Features & Properties now read-only during parse
  212.  *
  213.  * Revision 1.2  2000/08/02 20:46:32  aruna1
  214.  * sax2 changes
  215.  *
  216.  * Revision 1.1  2000/08/02 18:04:41  jpolast
  217.  * initial checkin of sax2 implemenation
  218.  * submitted by Simon Fell (simon@fell.com)
  219.  * and Joe Polastre (jpolast@apache.org)
  220.  *
  221.  *
  222.  */
  223. #if !defined(SAX2XMLReaderImpl_HPP)
  224. #define SAX2XMLReaderImpl_HPP
  225. #include <xercesc/parsers/SAXParser.hpp>
  226. #include <xercesc/sax/Parser.hpp>
  227. #include <xercesc/framework/XMLBuffer.hpp>
  228. #include <xercesc/internal/VecAttributesImpl.hpp>
  229. #include <xercesc/sax2/SAX2XMLReader.hpp>
  230. #include <xercesc/util/RefStackOf.hpp>
  231. #include <xercesc/util/SecurityManager.hpp>
  232. #include <xercesc/util/ValueStackOf.hpp>
  233. #include <xercesc/framework/XMLBufferMgr.hpp>
  234. XERCES_CPP_NAMESPACE_BEGIN
  235. class ContentHandler;
  236. class LexicalHandler;
  237. class DeclHandler;
  238. class GrammarResolver;
  239. /**
  240.   * This class implements the SAX2 'XMLReader' interface and should be
  241.   * used by applications wishing to parse the XML files using SAX2.
  242.   * It allows the client program to install SAX2 handlers for event
  243.   * callbacks.
  244.   *
  245.   * <p>It can be used to instantiate a validating or non-validating
  246.   * parser, by setting a member flag.</p>
  247.   *
  248.   * we basically re-use the existing SAX1 parser code, but provide a
  249.   * new implementation of XMLContentHandler that raises the new
  250.   * SAX2 style events
  251.   *
  252.   */
  253. class PARSERS_EXPORT SAX2XMLReaderImpl :
  254. public XMemory
  255.     , public SAX2XMLReader
  256.     , public XMLDocumentHandler
  257.     , public XMLErrorReporter
  258.     , public XMLEntityHandler
  259.     , public DocTypeHandler
  260. {
  261. public :
  262.     // -----------------------------------------------------------------------
  263.     //  Constructors and Destructor
  264.     // -----------------------------------------------------------------------
  265.     /** @name Constructors and Destructor */
  266.     //@{
  267.     /** The default constructor */
  268. SAX2XMLReaderImpl(MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
  269.     /** The destructor */
  270. ~SAX2XMLReaderImpl() ;
  271.    //@}
  272.     //-----------------------------------------------------------------------
  273.     // Implementation of SAX2XMLReader Interface
  274.     //-----------------------------------------------------------------------
  275.     //-----------------------------------------------------------------------
  276.     // The XMLReader interface
  277.     //-----------------------------------------------------------------------
  278.     /** @name Implementation of SAX 2.0 XMLReader interface's. */
  279.     //@{
  280.     /**
  281.       * This method returns the installed content handler.
  282.       *
  283.       * @return A pointer to the installed content handler object.
  284.       */
  285.     virtual ContentHandler* getContentHandler() const ;
  286.     /**
  287.       * This method returns the installed DTD handler.
  288.       *
  289.       * @return A pointer to the installed DTD handler object.
  290.       */
  291.     virtual DTDHandler* getDTDHandler() const ;
  292.     /**
  293.       * This method returns the installed entity resolver.
  294.       *
  295.       * @return A pointer to the installed entity resolver object.
  296.       */
  297.     virtual EntityResolver* getEntityResolver() const ;
  298.     /**
  299.       * This method returns the installed error handler.
  300.       *
  301.       * @return A pointer to the installed error handler object.
  302.       */
  303.     virtual ErrorHandler* getErrorHandler() const ;
  304. /**
  305.      * Query the current state of any feature in a SAX2 XMLReader.
  306.   *
  307.   * @param name The unique identifier (URI) of the feature being set.
  308.   * @return The current state of the feature.
  309.      * @exception SAXNotRecognizedException If the requested feature is not known.
  310.   */
  311. virtual bool getFeature(const XMLCh* const name) const ;
  312. /**
  313.      * Query the current value of a property in a SAX2 XMLReader.
  314.      *
  315.      * The parser owns the returned pointer.  The memory allocated for
  316.      * the returned pointer will be destroyed when the parser is deleted.
  317.      *
  318.      * To ensure assessiblity of the returned information after the parser
  319.      * is deleted, callers need to copy and store the returned information
  320.      * somewhere else; otherwise you may get unexpected result.  Since the returned
  321.      * pointer is a generic void pointer, see
  322.      * http://xml.apache.org/xerces-c/program-sax2.html#SAX2Properties to learn
  323.      * exactly what type of property value each property returns for replication.
  324.      *
  325.      * @param name The unique identifier (URI) of the property being set.
  326.      * @return     The current value of the property.  The pointer spans the same
  327.      *             life-time as the parser.  A null pointer is returned if nothing
  328.      *             was specified externally.
  329.      * @exception  SAXNotRecognizedException If the requested property is not known.
  330.      */
  331. virtual void* getProperty(const XMLCh* const name) const ;
  332.   /**
  333.     * Allow an application to register a document event handler.
  334.     *
  335.     * If the application does not register a document handler, all
  336.     * document events reported by the SAX parser will be silently
  337.     * ignored (this is the default behaviour implemented by
  338.     * HandlerBase).
  339.     *
  340.     * Applications may register a new or different handler in the
  341.     * middle of a parse, and the SAX parser must begin using the new
  342.     * handler immediately.
  343.     *
  344.     * @param handler The document handler.
  345.     * @see DocumentHandler#DocumentHandler
  346.     * @see HandlerBase#HandlerBase
  347.     */
  348.     virtual void setContentHandler(ContentHandler* const handler) ;
  349.   /**
  350.     * Allow an application to register a DTD event handler.
  351.     *
  352.     * If the application does not register a DTD handler, all DTD
  353.     * events reported by the SAX parser will be silently ignored (this
  354.     * is the default behaviour implemented by HandlerBase).
  355.     *
  356.     * Applications may register a new or different handler in the middle
  357.     * of a parse, and the SAX parser must begin using the new handler
  358.     * immediately.
  359.     *
  360.     * @param handler The DTD handler.
  361.     * @see DTDHandler#DTDHandler
  362.     * @see HandlerBase#HandlerBase
  363.     */
  364.     virtual void setDTDHandler(DTDHandler* const handler) ;
  365.   /**
  366.     * Allow an application to register a custom entity resolver.
  367.     *
  368.     * If the application does not register an entity resolver, the
  369.     * SAX parser will resolve system identifiers and open connections
  370.     * to entities itself (this is the default behaviour implemented in
  371.     * DefaultHandler).
  372.     *
  373.     * Applications may register a new or different entity resolver
  374.     * in the middle of a parse, and the SAX parser must begin using
  375.     * the new resolver immediately.
  376.     *
  377.     * @param resolver The object for resolving entities.
  378.     * @see EntityResolver#EntityResolver
  379.     * @see DefaultHandler#DefaultHandler
  380.     */
  381.     virtual void setEntityResolver(EntityResolver* const resolver) ;
  382.   /**
  383.     * Allow an application to register an error event handler.
  384.     *
  385.     * If the application does not register an error event handler,
  386.     * all error events reported by the SAX parser will be silently
  387.     * ignored, except for fatalError, which will throw a SAXException
  388.     * (this is the default behaviour implemented by HandlerBase).
  389.     *
  390.     * Applications may register a new or different handler in the
  391.     * middle of a parse, and the SAX parser must begin using the new
  392.     * handler immediately.
  393.     *
  394.     * @param handler The error handler.
  395.     * @see ErrorHandler#ErrorHandler
  396.     * @see SAXException#SAXException
  397.     * @see HandlerBase#HandlerBase
  398.     */
  399.     virtual void setErrorHandler(ErrorHandler* const handler) ;
  400.   /**
  401.     * Set the state of any feature in a SAX2 XMLReader.
  402.     * Supported features in SAX2 for xerces-c are:
  403.     * <br>(See http://xml.apache.org/xerces-c/program-sax2.html#SAX2Features for detail description).
  404.     *
  405.     * <br>http://xml.org/sax/features/validation (default: true)
  406.     * <br>http://xml.org/sax/features/namespaces (default: true)
  407.     * <br>http://xml.org/sax/features/namespace-prefixes (default: false)
  408.     * <br>http://apache.org/xml/features/validation/dynamic (default: false)
  409.     * <br>http://apache.org/xml/features/validation/reuse-grammar (default: false)
  410.     * <br>http://apache.org/xml/features/validation/schema (default: true)
  411.     * <br>http://apache.org/xml/features/validation/schema-full-checking (default: false)
  412.     * <br>http://apache.org/xml/features/nonvalidating/load-external-dtd (default: true)
  413.     * <br>http://apache.org/xml/features/continue-after-fatal-error (default: false)
  414.     * <br>http://apache.org/xml/features/validation-error-as-fatal (default: false)
  415.     * <br>http://apache.org/xml/features/validation/reuse-validator (Deprecated) (default: false)
  416.     *
  417.     * @param name The unique identifier (URI) of the feature.
  418.     * @param value The requested state of the feature (true or false).
  419.     * @exception SAXNotRecognizedException If the requested feature is not known.
  420.     * @exception SAXNotSupportedException Feature modification is not supported during parse
  421.     *
  422.     */
  423. virtual void setFeature(const XMLCh* const name, const bool value) ;
  424.   /**
  425.     * Set the value of any property in a SAX2 XMLReader.
  426.     * Supported properties in SAX2 for xerces-c are:
  427.     * <br>(See http://xml.apache.org/xerces-c/program-sax2.html#SAX2Properties for detail description).
  428.     *
  429.     * <br>http://apache.org/xml/properties/schema/external-schemaLocation
  430.     * <br>http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation.
  431.     *
  432.     * It takes a void pointer as the property value.  Application is required to initialize this void
  433.     * pointer to a correct type.  See http://xml.apache.org/xerces-c/program-sax2.html#SAX2Properties
  434.     * to learn exactly what type of property value each property expects for processing.
  435.     * Passing a void pointer that was initialized with a wrong type will lead to unexpected result.
  436.     * If the same property is set more than once, the last one takes effect.
  437.     *
  438.     * @param name The unique identifier (URI) of the property being set.
  439.     * @param value The requested value for the property.  See
  440.     *            http://xml.apache.org/xerces-c/program-sax2.html#SAX2Properties to learn
  441.     *            exactly what type of property value each property expects for processing.
  442.     *            Passing a void pointer that was initialized with a wrong type will lead
  443.     *            to unexpected result.
  444.     * @exception SAXNotRecognizedException If the requested property is not known.
  445.     * @exception SAXNotSupportedException Property modification is not supported during parse
  446.     */
  447. virtual void setProperty(const XMLCh* const name, void* value) ;
  448.   /**
  449.     * Parse an XML document.
  450.     *
  451.     * The application can use this method to instruct the SAX parser
  452.     * to begin parsing an XML document from any valid input
  453.     * source (a character stream, a byte stream, or a URI).
  454.     *
  455.     * Applications may not invoke this method while a parse is in
  456.     * progress (they should create a new Parser instead for each
  457.     * additional XML document).  Once a parse is complete, an
  458.     * application may reuse the same Parser object, possibly with a
  459.     * different input source.
  460.     *
  461.     * @param source The input source for the top-level of the
  462.     *               XML document.
  463.     * @exception SAXException Any SAX exception, possibly
  464.     *            wrapping another exception.
  465.     * @exception XMLException An exception from the parser or client
  466.     *            handler code.
  467.     * @see InputSource#InputSource
  468.     * @see #setEntityResolver
  469.     * @see #setDTDHandler
  470.     * @see #setDocumentHandler
  471.     * @see #setErrorHandler
  472.     */
  473.     virtual void parse
  474.     (
  475.         const   InputSource&    source
  476.     ) ;
  477.   /**
  478.     * Parse an XML document from a system identifier (URI).
  479.     *
  480.     * This method is a shortcut for the common case of reading a
  481.     * document from a system identifier.  It is the exact equivalent
  482.     * of the following:
  483.     *
  484.     * parse(new URLInputSource(systemId));
  485.     *
  486.     * If the system identifier is a URL, it must be fully resolved
  487.     * by the application before it is passed to the parser.
  488.     *
  489.     * @param systemId The system identifier (URI).
  490.     * @exception SAXException Any SAX exception, possibly
  491.     *            wrapping another exception.
  492.     * @exception XMLException An exception from the parser or client
  493.     *            handler code.
  494.     * @see #parse(InputSource)
  495.     */
  496.     virtual void parse
  497.     (
  498.         const   XMLCh* const    systemId
  499.     ) ;
  500.   /**
  501.     * Parse an XML document from a system identifier (URI).
  502.     *
  503.     * This method is a shortcut for the common case of reading a
  504.     * document from a system identifier.  It is the exact equivalent
  505.     * of the following:
  506.     *
  507.     * parse(new URLInputSource(systemId));
  508.     *
  509.     * If the system identifier is a URL, it must be fully resolved
  510.     * by the application before it is passed to the parser.
  511.     *
  512.     * @param systemId The system identifier (URI).
  513.     * @exception SAXException Any SAX exception, possibly
  514.     *            wrapping another exception.
  515.     * @exception XMLException An exception from the parser or client
  516.     *            handler code.
  517.     * @see #parse(InputSource)
  518.     */
  519.     virtual void parse
  520.     (
  521.         const   char* const     systemId
  522.     ) ;
  523.     //@}
  524.     // -----------------------------------------------------------------------
  525.     //  SAX 2.0-ext
  526.     // -----------------------------------------------------------------------
  527.     /** @name SAX 2.0-ext */
  528.     //@{
  529.     /**
  530.       * This method returns the installed declaration handler.
  531.       *
  532.       * @return A pointer to the installed declaration handler object.
  533.       */
  534.     virtual DeclHandler* getDeclarationHandler() const ;
  535. /**
  536.       * This method returns the installed lexical handler.
  537.       *
  538.       * @return A pointer to the installed lexical handler object.
  539.       */
  540.     virtual LexicalHandler* getLexicalHandler() const ;
  541.    /**
  542.     * Allow an application to register a declaration event handler.
  543.     *
  544.     * If the application does not register a declaration handler,
  545.     * all events reported by the SAX parser will be silently
  546.     * ignored. (this is the default behaviour implemented by DefaultHandler).
  547.     *
  548.     * Applications may register a new or different handler in the
  549.     * middle of a parse, and the SAX parser must begin using the new
  550.     * handler immediately.
  551.     *
  552.     * @param handler The DTD declaration handler.
  553.     * @see DeclHandler#DeclHandler
  554.     * @see SAXException#SAXException
  555.     * @see DefaultHandler#DefaultHandler
  556.     */
  557.     virtual void setDeclarationHandler(DeclHandler* const handler) ;
  558.    /**
  559.     * Allow an application to register a lexical event handler.
  560.     *
  561.     * If the application does not register a lexical handler,
  562.     * all events reported by the SAX parser will be silently
  563.     * ignored. (this is the default behaviour implemented by HandlerBase).
  564.     *
  565.     * Applications may register a new or different handler in the
  566.     * middle of a parse, and the SAX parser must begin using the new
  567.     * handler immediately.
  568.     *
  569.     * @param handler The error handler.
  570.     * @see LexicalHandler#LexicalHandler
  571.     * @see SAXException#SAXException
  572.     * @see HandlerBase#HandlerBase
  573.     */
  574.     virtual void setLexicalHandler(LexicalHandler* const handler) ;
  575.     //@}
  576.     // -----------------------------------------------------------------------
  577.     //  Getter Methods
  578.     // -----------------------------------------------------------------------
  579.     /** @name Getter Methods (Xerces-C specific) */
  580.     //@{
  581.     /**
  582.   * This method is used to get the current validator.
  583.   *
  584.   * <b>SAX2XMLReader assumes responsibility for the validator.  It will be
  585.   * deleted when the XMLReader is destroyed.</b>
  586.   *
  587.   * @return A pointer to the validator.  An application should not deleted
  588.   * the object returned.
  589.   *
  590.   */
  591. virtual XMLValidator* getValidator() const ;
  592.     //@}
  593.     /** Get error count from the last parse operation.
  594.       *
  595.       * This method returns the error count from the last parse
  596.       * operation. Note that this count is actually stored in the
  597.       * scanner, so this method simply returns what the
  598.       * scanner reports.
  599.       *
  600.       * @return number of errors encountered during the latest
  601.       * parse operation.
  602.       */
  603.     virtual int getErrorCount() const ;
  604.     /**
  605.       * This method returns the state of the parser's
  606.       * exit-on-First-Fatal-Error flag.
  607.       *
  608.       * <p>Or you can query the feature "http://apache.org/xml/features/continue-after-fatal-error"
  609.       * which indicates the opposite state.</p>
  610.       *
  611.       * @return true, if the parser is currently configured to
  612.       *         exit on the first fatal error, false otherwise.
  613.       *
  614.       * @see #setExitOnFirstFatalError
  615.       * @see #getFeature
  616.       */
  617.     virtual bool getExitOnFirstFatalError() const ;
  618.     /**
  619.       * This method returns the state of the parser's
  620.       * validation-constraint-fatal flag.
  621.       *
  622.       * <p>Or you can query the feature "http://apache.org/xml/features/validation-error-as-fatal"
  623.       * which means the same thing.
  624.       *
  625.       * @return true, if the parser is currently configured to
  626.       *         set validation constraint errors as fatal, false
  627.       *         otherwise.
  628.       *
  629.       * @see #setValidationContraintFatal
  630.       * @see #getFeature
  631.       */
  632.     virtual bool getValidationConstraintFatal() const ;
  633.     /**
  634.       * Retrieve the grammar that is associated with the specified namespace key
  635.       *
  636.       * @param  nameSpaceKey Namespace key
  637.       * @return Grammar associated with the Namespace key.
  638.       */
  639.     virtual Grammar* getGrammar(const XMLCh* const nameSpaceKey);
  640.     /**
  641.       * Retrieve the grammar where the root element is declared.
  642.       *
  643.       * @return Grammar where root element declared
  644.       */
  645.     virtual Grammar* getRootGrammar();
  646.     /**
  647.       * Returns the string corresponding to a URI id from the URI string pool.
  648.       *
  649.       * @param uriId id of the string in the URI string pool.
  650.       * @return URI string corresponding to the URI id.
  651.       */
  652.     virtual const XMLCh* getURIText(unsigned int uriId) const;
  653.     /**
  654.       * Returns the current src offset within the input source.
  655.       *
  656.       * @return offset within the input source
  657.       */
  658.     virtual unsigned int getSrcOffset() const;
  659.     //@}
  660.     // -----------------------------------------------------------------------
  661.     //  Setter Methods
  662.     // -----------------------------------------------------------------------
  663.     /** @name Setter Methods (Xerces-C specific) */
  664.     //@{
  665.     /**
  666.   * This method is used to set a validator.
  667.   *
  668.   * <b>SAX2XMLReader assumes responsibility for the validator.  It will be
  669.   * deleted when the XMLReader is destroyed.</b>
  670.   *
  671.   * @param valueToAdopt A pointer to the validator that the reader should use.
  672.   *
  673.   */
  674. virtual void setValidator(XMLValidator* valueToAdopt) ;
  675.     /**
  676.       * This method allows users to set the parser's behaviour when it
  677.       * encounters the first fatal error. If set to true, the parser
  678.       * will exit at the first fatal error. If false, then it will
  679.       * report the error and continue processing.
  680.       *
  681.       * <p>The default value is 'true' and the parser exits on the
  682.       * first fatal error.</p>
  683.       *
  684.       * <p>Or you can set the feature "http://apache.org/xml/features/continue-after-fatal-error"
  685.       * which has the opposite behaviour.</p>
  686.       *
  687.       * <p>If both the feature above and this function are used, the latter takes effect.</p>
  688.       *
  689.       * @param newState The value specifying whether the parser should
  690.       *                 continue or exit when it encounters the first
  691.       *                 fatal error.
  692.       *
  693.       * @see #getExitOnFirstFatalError
  694.       * @see #setFeature
  695.       */
  696.     virtual void setExitOnFirstFatalError(const bool newState) ;
  697.     /**
  698.       * This method allows users to set the parser's behaviour when it
  699.       * encounters a validtion constraint error. If set to true, and the
  700.       * the parser will treat validation error as fatal and will exit depends on the
  701.       * state of "getExitOnFirstFatalError". If false, then it will
  702.       * report the error and continue processing.
  703.       *
  704.       * Note: setting this true does not mean the validation error will be printed with
  705.       * the word "Fatal Error".   It is still printed as "Error", but the parser
  706.       * will exit if "setExitOnFirstFatalError" is set to true.
  707.       *
  708.       * <p>The default value is 'false'.</p>
  709.       *
  710.       * <p>Or you can set the feature "http://apache.org/xml/features/validation-error-as-fatal"
  711.       * which means the same thing.</p>
  712.       *
  713.       * <p>If both the feature above and this function are used, the latter takes effect.</p>
  714.       *
  715.       * @param newState If true, the parser will exit if "setExitOnFirstFatalError"
  716.       *                 is set to true.
  717.       *
  718.       * @see #getValidationConstraintFatal
  719.       * @see #setExitOnFirstFatalError
  720.       * @see #setFeature
  721.       */
  722.     virtual void setValidationConstraintFatal(const bool newState) ;
  723.     //@}
  724.     // -----------------------------------------------------------------------
  725.     //  Progressive scan methods
  726.     // -----------------------------------------------------------------------
  727.     /** @name Progressive scan methods */
  728.     //@{
  729.     /** Begin a progressive parse operation
  730.       *
  731.       * This method is used to start a progressive parse on a XML file.
  732.       * To continue parsing, subsequent calls must be to the parseNext
  733.       * method.
  734.       *
  735.       * It scans through the prolog and returns a token to be used on
  736.       * subsequent scanNext() calls. If the return value is true, then the
  737.       * token is legal and ready for further use. If it returns false, then
  738.       * the scan of the prolog failed and the token is not going to work on
  739.       * subsequent scanNext() calls.
  740.       *
  741.       * @param systemId A pointer to a Unicode string represting the path
  742.       *                 to the XML file to be parsed.
  743.       * @param toFill   A token maintaing state information to maintain
  744.       *                 internal consistency between invocation of 'parseNext'
  745.       *                 calls.
  746.       *
  747.       * @return 'true', if successful in parsing the prolog. It indicates the
  748.       *         user can go ahead with parsing the rest of the file. It
  749.       *         returns 'false' to indicate that the parser could parse the
  750.       *         prolog (which means the token will not be valid.)
  751.       *
  752.       * @see #parseNext
  753.       * @see #parseFirst(char*,...)
  754.       * @see #parseFirst(InputSource&,...)
  755.       */
  756.     virtual bool parseFirst
  757.     (
  758.         const   XMLCh* const    systemId
  759.         ,       XMLPScanToken&  toFill
  760.     ) ;
  761.     /** Begin a progressive parse operation
  762.       *
  763.       * This method is used to start a progressive parse on a XML file.
  764.       * To continue parsing, subsequent calls must be to the parseNext
  765.       * method.
  766.       *
  767.       * It scans through the prolog and returns a token to be used on
  768.       * subsequent scanNext() calls. If the return value is true, then the
  769.       * token is legal and ready for further use. If it returns false, then
  770.       * the scan of the prolog failed and the token is not going to work on
  771.       * subsequent scanNext() calls.
  772.       *
  773.       * @param systemId A pointer to a regular native string represting
  774.       *                 the path to the XML file to be parsed.
  775.       * @param toFill   A token maintaing state information to maintain
  776.       *                 internal consIstency between invocation of 'parseNext'
  777.       *                 calls.
  778.       *
  779.       * @return 'true', if successful in parsing the prolog. It indicates the
  780.       *         user can go ahead with parsing the rest of the file. It
  781.       *         returns 'false' to indicate that the parser could not parse
  782.       *         the prolog.
  783.       *
  784.       * @see #parseNext
  785.       * @see #parseFirst(XMLCh*,...)
  786.       * @see #parseFirst(InputSource&,...)
  787.       */
  788.     virtual bool parseFirst
  789.     (
  790.         const   char* const     systemId
  791.         ,       XMLPScanToken&  toFill
  792.     ) ;
  793.     /** Begin a progressive parse operation
  794.       *
  795.       * This method is used to start a progressive parse on a XML file.
  796.       * To continue parsing, subsequent calls must be to the parseNext
  797.       * method.
  798.       *
  799.       * It scans through the prolog and returns a token to be used on
  800.       * subsequent scanNext() calls. If the return value is true, then the
  801.       * token is legal and ready for further use. If it returns false, then
  802.       * the scan of the prolog failed and the token is not going to work on
  803.       * subsequent scanNext() calls.
  804.       *
  805.       * @param source   A const reference to the InputSource object which
  806.       *                 points to the XML file to be parsed.
  807.       * @param toFill   A token maintaing state information to maintain
  808.       *                 internal consistency between invocation of 'parseNext'
  809.       *                 calls.
  810.       *
  811.       * @return 'true', if successful in parsing the prolog. It indicates the
  812.       *         user can go ahead with parsing the rest of the file. It
  813.       *         returns 'false' to indicate that the parser could not parse
  814.       *         the prolog.
  815.       *
  816.       * @see #parseNext
  817.       * @see #parseFirst(XMLCh*,...)
  818.       * @see #parseFirst(char*,...)
  819.       */
  820.     virtual bool parseFirst
  821.     (
  822.         const   InputSource&    source
  823.         ,       XMLPScanToken&  toFill
  824.     ) ;
  825.     /** Continue a progressive parse operation
  826.       *
  827.       * This method is used to continue with progressive parsing of
  828.       * XML files started by a call to 'parseFirst' method.
  829.       *
  830.       * It parses the XML file and stops as soon as it comes across
  831.       * a XML token (as defined in the XML specification). Relevant
  832.       * callback handlers are invoked as required by the SAX
  833.       * specification.
  834.       *
  835.       * @param token A token maintaing state information to maintain
  836.       *              internal consistency between invocation of 'parseNext'
  837.       *              calls.
  838.       *
  839.       * @return 'true', if successful in parsing the next XML token.
  840.       *         It indicates the user can go ahead with parsing the rest
  841.       *         of the file. It returns 'false' to indicate that the parser
  842.       *         could not find next token as per the XML specification
  843.       *         production rule.
  844.       *
  845.       * @see #parseFirst(XMLCh*,...)
  846.       * @see #parseFirst(char*,...)
  847.       * @see #parseFirst(InputSource&,...)
  848.       */
  849.     virtual bool parseNext(XMLPScanToken& token) ;
  850.     /** Reset the parser after a progressive parse
  851.       *
  852.       * If a progressive parse loop exits before the end of the document
  853.       * is reached, the parser has no way of knowing this. So it will leave
  854.       * open any files or sockets or memory buffers that were in use at
  855.       * the time that the parse loop exited.
  856.       *
  857.       * The next parse operation will cause these open files and such to
  858.       * be closed, but the next parse operation might occur at some unknown
  859.       * future point. To avoid this problem, you should reset the parser if
  860.       * you exit the loop early.
  861.       *
  862.       * If you exited because of an error, then this cleanup will be done
  863.       * for you. Its only when you exit the file prematurely of your own
  864.       * accord, because you've found what you wanted in the file most
  865.       * likely.
  866.       *
  867.       * @param token A token maintaing state information to maintain
  868.       *              internal consistency between invocation of 'parseNext'
  869.       *              calls.
  870.       */
  871.     virtual void parseReset(XMLPScanToken& token) ;
  872.     //@}
  873.     // -----------------------------------------------------------------------
  874.     //  Implementation of the grammar preparsing interface
  875.     // -----------------------------------------------------------------------
  876.     /** @name Implementation of Grammar preparsing interface's. */
  877.     //@{
  878.     /**
  879.       * Preparse schema grammar (XML Schema, DTD, etc.) via an input source
  880.       * object.
  881.       *
  882.       * This method invokes the preparsing process on a schema grammar XML
  883.       * file specified by the SAX InputSource parameter.
  884.       *
  885.       * <p><b>"Experimental - subject to change"</b></p>
  886.       *
  887.       * @param source A const reference to the SAX InputSource object which
  888.       *               points to the schema grammar file to be preparsed.
  889.       * @param grammarType The grammar type (Schema or DTD).
  890.       * @param toCache If <code>true</code>, we cache the preparsed grammar,
  891.       *                otherwise, no chaching. Default is <code>false</code>.
  892.       * @return The preparsed schema grammar object (SchemaGrammar or
  893.       *         DTDGrammar). That grammar object is owned by the parser.
  894.       *
  895.       * @exception SAXException Any SAX exception, possibly
  896.       *            wrapping another exception.
  897.       * @exception XMLException An exception from the parser or client
  898.       *            handler code.
  899.       * @exception DOMException A DOM exception as per DOM spec.
  900.       *
  901.       * @see InputSource#InputSource
  902.       */
  903.     virtual Grammar* loadGrammar(const InputSource& source,
  904.                                  const short grammarType,
  905.                                  const bool toCache = false);
  906.     /**
  907.       * Preparse schema grammar (XML Schema, DTD, etc.) via a file path or URL
  908.       *
  909.       * This method invokes the preparsing process on a schema grammar XML
  910.       * file specified by the file path parameter.
  911.       *
  912.       * <p><b>"Experimental - subject to change"</b></p>
  913.       *
  914.       * @param systemId A const XMLCh pointer to the Unicode string which
  915.       *                 contains the path to the XML grammar file to be
  916.       *                 preparsed.
  917.       * @param grammarType The grammar type (Schema or DTD).
  918.       * @param toCache If <code>true</code>, we cache the preparsed grammar,
  919.       *                otherwise, no chaching. Default is <code>false</code>.
  920.       * @return The preparsed schema grammar object (SchemaGrammar or
  921.       *         DTDGrammar). That grammar object is owned by the parser.
  922.       *
  923.       * @exception SAXException Any SAX exception, possibly
  924.       *            wrapping another exception.
  925.       * @exception XMLException An exception from the parser or client
  926.       *            handler code.
  927.       * @exception DOMException A DOM exception as per DOM spec.
  928.       */
  929.     virtual Grammar* loadGrammar(const XMLCh* const systemId,
  930.                                  const short grammarType,
  931.                                  const bool toCache = false);
  932.     /**
  933.       * Preparse schema grammar (XML Schema, DTD, etc.) via a file path or URL
  934.       *
  935.       * This method invokes the preparsing process on a schema grammar XML
  936.       * file specified by the file path parameter.
  937.       *
  938.       * <p><b>"Experimental - subject to change"</b></p>
  939.       *
  940.       * @param systemId A const char pointer to a native string which contains
  941.       *                 the path to the XML grammar file to be preparsed.
  942.       * @param grammarType The grammar type (Schema or DTD).
  943.       * @param toCache If <code>true</code>, we cache the preparsed grammar,
  944.       *                otherwise, no chaching. Default is <code>false</code>.
  945.       * @return The preparsed schema grammar object (SchemaGrammar or
  946.       *         DTDGrammar). That grammar object is owned by the parser.
  947.       *
  948.       * @exception SAXException Any SAX exception, possibly
  949.       *            wrapping another exception.
  950.       * @exception XMLException An exception from the parser or client
  951.       *            handler code.
  952.       * @exception DOMException A DOM exception as per DOM spec.
  953.       */
  954.     virtual Grammar* loadGrammar(const char* const systemId,
  955.                                  const short grammarType,
  956.                                  const bool toCache = false);
  957.     /**
  958.       * Clear the cached grammar pool
  959.       */
  960.     virtual void resetCachedGrammarPool();
  961.     //@}
  962.     // -----------------------------------------------------------------------
  963.     //  Advanced document handler list maintenance methods
  964.     // -----------------------------------------------------------------------
  965.     /** @name Advanced document handler list maintenance methods */
  966.     //@{
  967.     /**
  968.       * This method installs the specified 'advanced' document callback
  969.       * handler, thereby allowing the user to customize the processing,
  970.       * if they choose to do so. Any number of advanced callback handlers
  971.       * maybe installed.
  972.       *
  973.       * <p>The methods in the advanced callback interface represent
  974.       * Xerces-C extensions. There is no specification for this interface.</p>
  975.       *
  976.       * @param toInstall A pointer to the users advanced callback handler.
  977.       *
  978.       * @see #removeAdvDocHandler
  979.       */
  980.     virtual void installAdvDocHandler(XMLDocumentHandler* const toInstall) ;
  981.     /**
  982.       * This method removes the 'advanced' document handler callback from
  983.       * the underlying parser scanner. If no handler is installed, advanced
  984.       * callbacks are not invoked by the scanner.
  985.       * @param toRemove A pointer to the advanced callback handler which
  986.       *                 should be removed.
  987.       *
  988.       * @see #installAdvDocHandler
  989.       */
  990.     virtual bool removeAdvDocHandler(XMLDocumentHandler* const toRemove) ;
  991.     //@}
  992. // -----------------------------------------------------------------------
  993.     //  Implementation of the XMLDocumentHandler interface
  994.     // -----------------------------------------------------------------------
  995.     /** @name Implementation of the XMLDocumentHandler Interface. */
  996.     //@{
  997.     /**
  998.       * This method is used to report all the characters scanned
  999.       * by the parser. The driver will invoke the 'characters'
  1000.       * method of the user installed SAX Document Handler.
  1001.       *
  1002.       * <p>If any advanced callback handlers are installed, the
  1003.       * corresponding 'docCharacters' method will also be invoked.</p>
  1004.       *
  1005.       * @param chars   A const pointer to a Unicode string representing the
  1006.       *                character data.
  1007.       * @param length  The length of the Unicode string returned in 'chars'.
  1008.       * @param cdataSection  A flag indicating if the characters represent
  1009.       *                      content from the CDATA section.
  1010.       * @see DocumentHandler#characters
  1011.       */
  1012.     virtual void docCharacters
  1013.     (
  1014.         const   XMLCh* const    chars
  1015.         , const unsigned int    length
  1016.         , const bool            cdataSection
  1017.     );
  1018.     /**
  1019.       * This method is used to report any comments scanned by the parser.
  1020.       * This method is a no-op unless, unless an advanced callback handler
  1021.       * is installed, in which case the corresponding 'docComment' method
  1022.       * is invoked.
  1023.       *
  1024.       * @param comment A const pointer to a null terminated Unicode
  1025.       *                string representing the comment text.
  1026.       */
  1027.     virtual void docComment
  1028.     (
  1029.         const   XMLCh* const    comment
  1030.     );
  1031.     /**
  1032.       * This method is used to report any PI scanned by the parser.
  1033.       *
  1034.       * <p>Any PI's occurring before any 'content' are not reported
  1035.       * to any SAX handler as per the specification. However, all
  1036.       * PI's within content are reported via the SAX Document Handler's
  1037.       * 'processingInstruction' method.
  1038.       *
  1039.       * <p>If any advanced callback handlers are installed, the
  1040.       * corresponding 'docPI' method will be invoked.</p>
  1041.       *
  1042.       * @param target A const pointer to a Unicode string representing the
  1043.       *               target of the PI declaration.
  1044.       * @param data   A const pointer to a Unicode string representing the
  1045.       *               data of the PI declaration. See the PI production rule
  1046.       *               in the XML specification for details.
  1047.       *
  1048.       * @see DocumentHandler#processingInstruction
  1049.       */
  1050.     virtual void docPI
  1051.     (
  1052.         const   XMLCh* const    target
  1053.         , const XMLCh* const    data
  1054.     );
  1055.     /**
  1056.       * This method is used to indicate the end of root element
  1057.       * was just scanned by the parser. Corresponding 'endDocument'
  1058.       * method of the user installed SAX Document Handler will also
  1059.       * be invoked.
  1060.       *
  1061.       * <p>In addition, if any advanced callback handlers are installed,
  1062.       * the corresponding 'endDocument' method is invoked.</p>
  1063.       *
  1064.       * @see DocumentHandler#endDocument
  1065.       */
  1066.     virtual void endDocument();
  1067.     /**
  1068.       * This method is used to indicate the end tag of an element.
  1069.       * The driver will invoke the corresponding 'endElement' method of
  1070.       * the SAX Document Handler interface.
  1071.       *
  1072.       * <p>If any advanced callback handlers are installed, the
  1073.       * corresponding 'endElement' method is also invoked.</p>
  1074.       *
  1075.       * @param elemDecl A const reference to the object containing element
  1076.       *                 declaration information.
  1077.       * @param urlId    An id referring to the namespace prefix, if
  1078.       *                 namespaces setting is switched on.
  1079.       * @param isRoot   A flag indicating whether this element was the
  1080.       *                 root element.
  1081.       * @param elemPrefix A const pointer to a Unicode string containing
  1082.       *                   the namespace prefix for this element. Applicable
  1083.       *                   only when namespace processing is enabled.
  1084.       * @see DocumentHandler#endElement
  1085.       */
  1086.     virtual void endElement
  1087.     (
  1088.         const   XMLElementDecl& elemDecl
  1089.         , const unsigned int    urlId
  1090.         , const bool            isRoot
  1091.         , const XMLCh* const    elemPrefix=0
  1092.     );
  1093.     /**
  1094.       * This method is used to indicate that an end of an entity reference
  1095.       * was just scanned.
  1096.       *
  1097.       * <p>If any advanced callback handlers are installed, the
  1098.       * corresponding 'endEnityReference' method is invoked.</p>
  1099.       *
  1100.       * @param entDecl A const reference to the object containing the
  1101.       *                entity declaration information.
  1102.       */
  1103.     virtual void endEntityReference
  1104.     (
  1105.         const   XMLEntityDecl&  entDecl
  1106.     );
  1107.     /**
  1108.       * This method is used to report all the whitespace characters,
  1109.       * which are determined to be 'ignorable'. This distinction
  1110.       * between characters is only made, if validation is enabled.
  1111.       * Corresponding 'ignorableWhitespace' method of the user installed
  1112.       * SAX Document Handler interface is called.
  1113.       *
  1114.       * <p>Any whitespace before content is not reported to the SAX
  1115.       * Document Handler method, as per the SAX specification.
  1116.       * However, if any advanced callback handlers are installed, the
  1117.       * corresponding 'ignorableWhitespace' method is invoked.</p>
  1118.       *
  1119.       * @param chars   A const pointer to a Unicode string representing the
  1120.       *                ignorable whitespace character data.
  1121.       * @param length  The length of the Unicode string 'chars'.
  1122.       * @param cdataSection  A flag indicating if the characters represent
  1123.       *                      content from the CDATA section.
  1124.       * @see DocumentHandler#ignorableWhitespace
  1125.       */
  1126.     virtual void ignorableWhitespace
  1127.     (
  1128.         const   XMLCh* const    chars
  1129.         , const unsigned int    length
  1130.         , const bool            cdataSection
  1131.     );
  1132.     /**
  1133.       * This method allows the user installed Document Handler and
  1134.       * any advanced callback handlers to 'reset' themselves.
  1135.       */
  1136.     virtual void resetDocument();
  1137.     /**
  1138.       * This method is used to report the start of the parsing process.
  1139.       * The corresponding user installed SAX Document Handler's method
  1140.       * 'startDocument' is invoked.
  1141.       *
  1142.       * <p>If any advanced callback handlers are installed, then the
  1143.       * corresponding 'startDocument' method is also called.</p>
  1144.       *
  1145.       * @see DocumentHandler#startDocument
  1146.       */
  1147.     virtual void startDocument();
  1148.     /**
  1149.       * This method is used to report the start of an element. It is
  1150.       * called at the end of the element, by which time all attributes
  1151.       * specified are also parsed. The corresponding user installed
  1152.       * SAX Document Handler's method 'startElement' is invoked.
  1153.       *
  1154.       * <p>If any advanced callback handlers are installed, then the
  1155.       * corresponding 'startElement' method is also called.</p>
  1156.       *
  1157.       * @param elemDecl A const reference to the object containing element
  1158.       *                 declaration information.
  1159.       * @param urlId    An id referring to the namespace prefix, if
  1160.       *                 namespaces setting is switched on.
  1161.       * @param elemPrefix A const pointer to a Unicode string containing
  1162.       *                   the namespace prefix for this element. Applicable
  1163.       *                   only when namespace processing is enabled.
  1164.       * @param attrList  A const reference to the object containing the
  1165.       *                  list of attributes just scanned for this element.
  1166.       * @param attrCount A count of number of attributes in the list
  1167.       *                  specified by the parameter 'attrList'.
  1168.       * @param isEmpty  A flag indicating whether this is an empty element
  1169.       *                 or not.
  1170.       * @param isRoot   A flag indicating whether this element was the
  1171.       *                 root element.
  1172.       * @see DocumentHandler#startElement
  1173.       */
  1174.     virtual void startElement
  1175.     (
  1176.         const   XMLElementDecl&         elemDecl
  1177.         , const unsigned int            urlId
  1178.         , const XMLCh* const            elemPrefix
  1179.         , const RefVectorOf<XMLAttr>&   attrList
  1180.         , const unsigned int            attrCount
  1181.         , const bool                    isEmpty
  1182.         , const bool                    isRoot
  1183.     );
  1184.     /**
  1185.       * This method is used to indicate the start of an entity reference.
  1186.       *
  1187.       * <p>If any advanced callback handlers are installed, the
  1188.       * corresponding 'endEnityReference' method is invoked.</p>
  1189.       *
  1190.       * @param entDecl A const reference to the object containing the
  1191.       *                entity declaration information.
  1192.       */
  1193.     virtual void startEntityReference
  1194.     (
  1195.         const   XMLEntityDecl&  entDecl
  1196.     );
  1197.     /**
  1198.       * This method is used to report the XML decl scanned by the parser.
  1199.       * Refer to the XML specification to see the meaning of parameters.
  1200.       *
  1201.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1202.       * implementation.</font></b>
  1203.       *
  1204.       * @param versionStr A const pointer to a Unicode string representing
  1205.       *                   version string value.
  1206.       * @param encodingStr A const pointer to a Unicode string representing
  1207.       *                    the encoding string value.
  1208.       * @param standaloneStr A const pointer to a Unicode string
  1209.       *                      representing the standalone string value.
  1210.       * @param actualEncodingStr A const pointer to a Unicode string
  1211.       *                          representing the actual encoding string
  1212.       *                          value.
  1213.       */
  1214.     virtual void XMLDecl
  1215.     (
  1216.         const   XMLCh* const    versionStr
  1217.         , const XMLCh* const    encodingStr
  1218.         , const XMLCh* const    standaloneStr
  1219.         , const XMLCh* const    actualEncodingStr
  1220.     );
  1221.     //@}
  1222.     // -----------------------------------------------------------------------
  1223.     //  Implementation of the XMLErrorReporter interface
  1224.     // -----------------------------------------------------------------------
  1225.     /** @name Implementation of the XMLErrorReporter Interface. */
  1226.     //@{
  1227.     /**
  1228.       * This method is used to report back errors found while parsing the
  1229.       * XML file. The driver will call the corresponding user installed
  1230.       * SAX Error Handler methods: 'fatal', 'error', 'warning' depending
  1231.       * on the severity of the error. This classification is defined by
  1232.       * the XML specification.
  1233.       *
  1234.       * @param errCode An integer code for the error.
  1235.       * @param msgDomain A const pointer to an Unicode string representing
  1236.       *                  the message domain to use.
  1237.       * @param errType An enumeration classifying the severity of the error.
  1238.       * @param errorText A const pointer to an Unicode string representing
  1239.       *                  the text of the error message.
  1240.       * @param systemId  A const pointer to an Unicode string representing
  1241.       *                  the system id of the XML file where this error
  1242.       *                  was discovered.
  1243.       * @param publicId  A const pointer to an Unicode string representing
  1244.       *                  the public id of the XML file where this error
  1245.       *                  was discovered.
  1246.       * @param lineNum   The line number where the error occurred.
  1247.       * @param colNum    The column number where the error occurred.
  1248.       * @see ErrorHandler
  1249.       */
  1250.     virtual void error
  1251.     (
  1252.         const   unsigned int                errCode
  1253.         , const XMLCh* const                msgDomain
  1254.         , const XMLErrorReporter::ErrTypes  errType
  1255.         , const XMLCh* const                errorText
  1256.         , const XMLCh* const                systemId
  1257.         , const XMLCh* const                publicId
  1258.         , const XMLSSize_t                   lineNum
  1259.         , const XMLSSize_t                   colNum
  1260.     );
  1261.     /**
  1262.       * This method allows the user installed Error Handler
  1263.       * callback to 'reset' itself.
  1264.       *
  1265.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1266.       * implementation.</font></b>
  1267.       *
  1268.       */
  1269.     virtual void resetErrors();
  1270.     //@}
  1271.     // -----------------------------------------------------------------------
  1272.     //  Implementation of the XMLEntityHandler interface
  1273.     // -----------------------------------------------------------------------
  1274.     /** @name Implementation of the XMLEntityHandler Interface. */
  1275.     //@{
  1276.     /**
  1277.       * This method is used to indicate the end of parsing of an external
  1278.       * entity file.
  1279.       *
  1280.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1281.       * implementation.</font></b>
  1282.       *
  1283.       * @param inputSource A const reference to the InputSource object
  1284.       *                    which points to the XML file being parsed.
  1285.       * @see InputSource
  1286.       */
  1287.     virtual void endInputSource(const InputSource& inputSource);
  1288.     /**
  1289.       * This method allows an installed XMLEntityHandler to further
  1290.       * process any system id's of enternal entities encountered in
  1291.       * the XML file being parsed, such as redirection etc.
  1292.       *
  1293.       * <b><font color="#FF0000">This method always returns 'false'
  1294.       * for this SAX driver implementation.</font></b>
  1295.       *
  1296.       * @param systemId  A const pointer to an Unicode string representing
  1297.       *                  the system id scanned by the parser.
  1298.       * @param toFill    A pointer to a buffer in which the application
  1299.       *                  processed system id is stored.
  1300.       * @return 'true', if any processing is done, 'false' otherwise.
  1301.       */
  1302.     virtual bool expandSystemId
  1303.     (
  1304.         const   XMLCh* const    systemId
  1305.         ,       XMLBuffer&      toFill
  1306.     );
  1307.     /**
  1308.       * This method allows the installed XMLEntityHandler to reset
  1309.       * itself.
  1310.       *
  1311.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1312.       * implementation.</font></b>
  1313.       */
  1314.     virtual void resetEntities();
  1315.     /**
  1316.       * This method allows a user installed entity handler to further
  1317.       * process any pointers to external entities. The applications
  1318.       * can implement 'redirection' via this callback. The driver
  1319.       * should call the SAX EntityHandler 'resolveEntity' method.
  1320.       *
  1321.       * @param publicId A const pointer to a Unicode string representing the
  1322.       *                 public id of the entity just parsed.
  1323.       * @param systemId A const pointer to a Unicode string representing the
  1324.       *                 system id of the entity just parsed.
  1325.       * @param baseURI  A const pointer to a Unicode string representing the
  1326.       *                 base URI of the entity just parsed,
  1327.       *                 or <code>null</code> if there is no base URI.
  1328.       * @return The value returned by the SAX resolveEntity method or
  1329.       *         NULL otherwise to indicate no processing was done.
  1330.       *         The returned InputSource is owned by the parser which is
  1331.       *         responsible to clean up the memory.
  1332.       * @see EntityResolver
  1333.       * @see XMLEntityHandler
  1334.       */
  1335.     virtual InputSource* resolveEntity
  1336.     (
  1337.         const   XMLCh* const    publicId
  1338.         , const XMLCh* const    systemId
  1339.         , const XMLCh* const    baseURI = 0
  1340.     );
  1341.     /**
  1342.       * This method is used to indicate the start of parsing an
  1343.       * external entity file.
  1344.       *
  1345.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1346.       * implementation.</font></b>
  1347.       *
  1348.       * @param inputSource A const reference to the InputSource object
  1349.       *                    which points to the external entity
  1350.       *                    being parsed.
  1351.       */
  1352.     virtual void startInputSource(const InputSource& inputSource);
  1353.     //@}
  1354.     // -----------------------------------------------------------------------
  1355.     //  Implementation of the Deprecated DocTypeHandler Interface
  1356.     // -----------------------------------------------------------------------
  1357.     /** @name Implementation of the deprecated DocTypeHandler Interface */
  1358.     //@{
  1359.     /**
  1360.       * This method is used to report an attribute definition.
  1361.       *
  1362.       * <b><font color="#FF0000">This method is a no-op for this SAX
  1363.       * driver implementation.</font></b>
  1364.       *
  1365.       * @param elemDecl A const reference to the object containing information
  1366.       *                 about the element whose attribute definition was just
  1367.       *                 parsed.
  1368.       * @param attDef   A const reference to the object containing information
  1369.       *                 attribute definition.
  1370.       * @param ignore   The flag indicating whether this attribute definition
  1371.       *                 was ignored by the parser or not.
  1372.       */
  1373.     virtual void attDef
  1374.     (
  1375.         const   DTDElementDecl& elemDecl
  1376.         , const DTDAttDef&      attDef
  1377.         , const bool            ignoring
  1378.     );
  1379.     /**
  1380.       * This method is used to report a comment occurring within the DTD.
  1381.       *
  1382.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1383.       * implementation.</font></b>
  1384.       *
  1385.       * @param comment  A const pointer to a Unicode string representing the
  1386.       *                 text of the comment just parsed.
  1387.       */
  1388.     virtual void doctypeComment
  1389.     (
  1390.         const   XMLCh* const    comment
  1391.     );
  1392.     /**
  1393.       * This method is used to report the DOCTYPE declaration.
  1394.       *
  1395.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1396.       * implementation.</font></b>
  1397.       *
  1398.       * @param elemDecl A const reference to the object containing information
  1399.       *                 about the root element definition declaration of the
  1400.       *                 XML document being parsed.
  1401.       * @param publicId A const pointer to a Unicode string representing the
  1402.       *                 public id of the DTD file.
  1403.       * @param systemId A const pointer to a Unicode string representing the
  1404.       *                 system id of the DTD file.
  1405.       * @param hasIntSubset A flag indicating if this XML file contains any
  1406.       *                     internal subset.
  1407.       * @param hasExtSubset A flag indicating if this XML file contains any
  1408.       *                     external subset. Default is false.
  1409.       */
  1410.     virtual void doctypeDecl
  1411.     (
  1412.         const   DTDElementDecl& elemDecl
  1413.         , const XMLCh* const    publicId
  1414.         , const XMLCh* const    systemId
  1415.         , const bool            hasIntSubset
  1416.         , const bool            hasExtSubset = false
  1417.     );
  1418.     /**
  1419.       * This method is used to report any PI declarations
  1420.       * occurring inside the DTD definition block.
  1421.       *
  1422.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1423.       * implementation.</font></b>
  1424.       *
  1425.       * @param target A const pointer to a Unicode string representing the
  1426.       *               target of the PI declaration.
  1427.       * @param data   A const pointer to a Unicode string representing the
  1428.       *               data of the PI declaration. See the PI production rule
  1429.       *               in the XML specification for details.
  1430.       */
  1431.     virtual void doctypePI
  1432.     (
  1433.         const   XMLCh* const    target
  1434.         , const XMLCh* const    data
  1435.     );
  1436.     /**
  1437.       * This method is used to report any whitespaces
  1438.       * occurring inside the DTD definition block.
  1439.       *
  1440.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1441.       * implementation.</font></b>
  1442.       *
  1443.       * @param chars  A const pointer to a Unicode string representing the
  1444.       *               whitespace characters.
  1445.       * @param length The length of the whitespace Unicode string.
  1446.       */
  1447.     virtual void doctypeWhitespace
  1448.     (
  1449.         const   XMLCh* const    chars
  1450.         , const unsigned int    length
  1451.     );
  1452.     /**
  1453.       * This method is used to report an element declarations
  1454.       * successfully scanned by the parser.
  1455.       *
  1456.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1457.       * implementation.</font></b>
  1458.       *
  1459.       * @param decl   A const reference to the object containing element
  1460.       *               declaration information.
  1461.       * @param isIgnored The flag indicating whether this definition was
  1462.       *                  ignored by the parser or not.
  1463.       */
  1464.     virtual void elementDecl
  1465.     (
  1466.         const   DTDElementDecl& decl
  1467.         , const bool            isIgnored
  1468.     );
  1469.     /**
  1470.       * This method is used to report the end of an attribute
  1471.       * list declaration for an element.
  1472.       *
  1473.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1474.       * implementation.</font></b>
  1475.       *
  1476.       * @param elemDecl A const reference to the object containing element
  1477.       *                 declaration information.
  1478.       */
  1479.     virtual void endAttList
  1480.     (
  1481.         const   DTDElementDecl& elemDecl
  1482.     );
  1483.     /**
  1484.       * This method is used to report the end of the internal subset.
  1485.       *
  1486.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1487.       * implementation.</font></b>
  1488.       */
  1489.     virtual void endIntSubset();
  1490.     /**
  1491.       * This method is used to report the end of the external subset.
  1492.       *
  1493.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1494.       * implementation.</font></b>
  1495.       */
  1496.     virtual void endExtSubset();
  1497.     /**
  1498.       * This method is used to report any entity declarations.
  1499.       * For unparsed entities, this driver will invoke the
  1500.       * SAX DTDHandler::unparsedEntityDecl callback.
  1501.       *
  1502.       * @param entityDecl A const reference to the object containing
  1503.       *                   the entity declaration information.
  1504.       * @param isPEDecl  The flag indicating whether this was a
  1505.       *                  parameter entity declaration or not.
  1506.       * @param isIgnored The flag indicating whether this definition
  1507.       *                  was ignored by the parser or not.
  1508.       *
  1509.       * @see DTDHandler#unparsedEntityDecl
  1510.       */
  1511.     virtual void entityDecl
  1512.     (
  1513.         const   DTDEntityDecl&  entityDecl
  1514.         , const bool            isPEDecl
  1515.         , const bool            isIgnored
  1516.     );
  1517.     /**
  1518.       * This method allows the user installed DTD handler to
  1519.       * reset itself.
  1520.       */
  1521.     virtual void resetDocType();
  1522.     /**
  1523.       * This method is used to report any notation declarations.
  1524.       * If there is a user installed DTDHandler, then the driver will
  1525.       * invoke the SAX DTDHandler::notationDecl callback.
  1526.       *
  1527.       * @param notDecl A const reference to the object containing the notation
  1528.       *                declaration information.
  1529.       * @param isIgnored The flag indicating whether this definition was ignored
  1530.       *                  by the parser or not.
  1531.       *
  1532.       * @see DTDHandler#notationDecl
  1533.       */
  1534.     virtual void notationDecl
  1535.     (
  1536.         const   XMLNotationDecl&    notDecl
  1537.         , const bool                isIgnored
  1538.     );
  1539.     /**
  1540.       * This method is used to indicate the start of an element's attribute
  1541.       * list declaration.
  1542.       *
  1543.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1544.       * implementation.</font></b>
  1545.       *
  1546.       * @param elemDecl A const reference to the object containing element
  1547.       *                 declaration information.
  1548.       */
  1549.     virtual void startAttList
  1550.     (
  1551.         const   DTDElementDecl& elemDecl
  1552.     );
  1553.     /**
  1554.       * This method is used indicate the start of the internal subset.
  1555.       *
  1556.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1557.       * implementation.</font></b>
  1558.       */
  1559.     virtual void startIntSubset();
  1560.     /**
  1561.       * This method is used indicate the start of the external subset.
  1562.       *
  1563.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1564.       * implementation.</font></b>
  1565.       */
  1566.     virtual void startExtSubset();
  1567.     /**
  1568.       * This method is used to report the TextDecl. Refer to the XML
  1569.       * specification for the syntax of a TextDecl.
  1570.       *
  1571.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1572.       * implementation.</font></b>
  1573.       *
  1574.       * @param versionStr A const pointer to a Unicode string representing
  1575.       *                   the version number of the 'version' clause.
  1576.       * @param encodingStr A const pointer to a Unicode string representing
  1577.       *                    the encoding name of the 'encoding' clause.
  1578.       */
  1579.     virtual void TextDecl
  1580.     (
  1581.         const   XMLCh* const    versionStr
  1582.         , const XMLCh* const    encodingStr
  1583.     );
  1584.     //@}
  1585. private :
  1586.     // -----------------------------------------------------------------------
  1587.     //  Unimplemented constructors and operators
  1588.     // -----------------------------------------------------------------------
  1589.     SAX2XMLReaderImpl(const SAX2XMLReaderImpl&);
  1590.     SAX2XMLReaderImpl& operator=(const SAX2XMLReaderImpl&);
  1591.     // -----------------------------------------------------------------------
  1592.     //  Initialize/Cleanup methods
  1593.     // -----------------------------------------------------------------------
  1594.     void initialize();
  1595.     void cleanUp();
  1596.     // -----------------------------------------------------------------------
  1597.     //  Private data members
  1598.     //
  1599.     //  fAttrList
  1600.     //      A temporary implementation of the basic SAX2 Attributes
  1601.     //      interface. We use this one over and over on each startElement
  1602.     //      event to allow SAX-like access to the element attributes.
  1603.     //
  1604.     //  fDocHandler
  1605.     //      The installed SAX content handler, if any. Null if none.
  1606.     //
  1607.     //  fnamespacePrefix
  1608.     //      Indicates whether the namespace-prefix feature is on or off.
  1609.     //
  1610.     //  fautoValidation
  1611.     //      Indicates whether automatic validation is on or off
  1612.     //
  1613.     //  fValidation
  1614.     //      Indicates whether the 'validation' core features is on or off
  1615.     //
  1616.     //  fReuseGrammar
  1617.     //      Tells the parser whether it should reuse the grammar or not.
  1618.     //      If true, there cannot be any internal subset.
  1619.     //
  1620.     // fStringBuffers
  1621.     // Any temporary strings we need are pulled out of this pool
  1622.     //
  1623.     // fPrefixes
  1624.     // A Stack of the current namespace prefixes that need calls to
  1625.     // endPrefixMapping
  1626.     //
  1627.     // fPrefixCounts
  1628.     // A Stack of the number of prefixes that need endPrefixMapping
  1629.     // calls for that element
  1630.     //
  1631.     //  fDTDHandler
  1632.     //      The installed SAX DTD handler, if any. Null if none.
  1633.     //
  1634.     //  fElemDepth
  1635.     //      This is used to track the element nesting depth, so that we can
  1636.     //      know when we are inside content. This is so we can ignore char
  1637.     //      data outside of content.
  1638.     //
  1639.     //  fEntityResolver
  1640.     //      The installed SAX entity handler, if any. Null if none.
  1641.     //
  1642.     //  fErrorHandler
  1643.     //      The installed SAX error handler, if any. Null if none.
  1644.     //
  1645.     //  fLexicalHandler
  1646.     //      The installed SAX lexical handler, if any.  Null if none.
  1647.     //
  1648.     //  fDecllHandler
  1649.     //      The installed SAX declaration handler, if any.  Null if none.
  1650.     //
  1651.     //  fAdvDHCount
  1652.     //  fAdvDHList
  1653.     //  fAdvDHListSize
  1654.     //      This is an array of pointers to XMLDocumentHandlers, which is
  1655.     //      how we see installed advanced document handlers. There will
  1656.     //      usually not be very many at all, so a simple array is used
  1657.     //      instead of a collection, for performance. It will grow if needed,
  1658.     //      but that is unlikely.
  1659.     //
  1660.     //      The count is how many handlers are currently installed. The size
  1661.     //      is how big the array itself is (for expansion purposes.) When
  1662.     //      count == size, is time to expand.
  1663.     //
  1664.     //  fParseInProgress
  1665.     //      This flag is set once a parse starts. It is used to prevent
  1666.     //      multiple entrance or reentrance of the parser.
  1667.     //
  1668.     //  fScanner
  1669.     //      The scanner being used by this parser. It is created internally
  1670.     //      during construction.
  1671.     //
  1672.     //  fHasExternalSubset
  1673.     //      Indicate if the document has external DTD subset.
  1674.     //
  1675.     // -----------------------------------------------------------------------
  1676.     bool                        fNamespacePrefix;
  1677.     bool                        fAutoValidation;
  1678.     bool                        fValidation;
  1679.     bool                        fParseInProgress;
  1680.     bool                        fHasExternalSubset;
  1681.     unsigned int                fElemDepth;
  1682.     unsigned int                fAdvDHCount;
  1683.     unsigned int                fAdvDHListSize;
  1684.     VecAttributesImpl fAttrList ;
  1685.     ContentHandler* fDocHandler ;
  1686.     RefVectorOf<XMLAttr>*       fTempAttrVec ;
  1687.     RefStackOf<XMLBuffer> *     fPrefixes ;
  1688.     ValueStackOf<unsigned int>* fPrefixCounts ;
  1689.     DTDHandler*                 fDTDHandler;
  1690.     EntityResolver*             fEntityResolver;
  1691.     ErrorHandler*               fErrorHandler;
  1692.     LexicalHandler*             fLexicalHandler;
  1693.     DeclHandler*                fDeclHandler;
  1694.     XMLDocumentHandler**        fAdvDHList;
  1695.     XMLScanner*                 fScanner;
  1696.     GrammarResolver*            fGrammarResolver;
  1697.     XMLStringPool*              fURIStringPool;
  1698.     XMLValidator*               fValidator;
  1699.     MemoryManager*              fMemoryManager;
  1700.     XMLBufferMgr         fStringBuffers ;
  1701.     // -----------------------------------------------------------------------
  1702.     // internal function used to set the state of the parser
  1703.     // -----------------------------------------------------------------------
  1704.     void setValidationScheme(const ValSchemes newScheme);
  1705.     void setDoNamespaces(const bool newState);
  1706.     bool getDoNamespaces() const;
  1707.     void setDoSchema(const bool newState);
  1708.     bool getDoSchema() const;
  1709. };
  1710. // ---------------------------------------------------------------------------
  1711. //  SAX2XMLReader: Getter methods
  1712. // ---------------------------------------------------------------------------
  1713. inline ContentHandler* SAX2XMLReaderImpl::getContentHandler() const
  1714. {
  1715.     return fDocHandler;
  1716. }
  1717. inline DTDHandler* SAX2XMLReaderImpl::getDTDHandler() const
  1718. {
  1719. return fDTDHandler ;
  1720. }
  1721. inline EntityResolver* SAX2XMLReaderImpl::getEntityResolver() const
  1722. {
  1723. return fEntityResolver;
  1724. }
  1725. inline ErrorHandler* SAX2XMLReaderImpl::getErrorHandler() const
  1726. {
  1727. return fErrorHandler;
  1728. }
  1729. inline LexicalHandler* SAX2XMLReaderImpl::getLexicalHandler() const
  1730. {
  1731.    return fLexicalHandler;
  1732. }
  1733. inline DeclHandler* SAX2XMLReaderImpl::getDeclarationHandler() const
  1734. {
  1735.    return fDeclHandler;
  1736. }
  1737. inline bool SAX2XMLReaderImpl::getExitOnFirstFatalError() const
  1738. {
  1739.     return fScanner->getExitOnFirstFatal();
  1740. }
  1741. inline bool SAX2XMLReaderImpl::getValidationConstraintFatal() const
  1742. {
  1743.     return fScanner->getValidationConstraintFatal();
  1744. }
  1745. inline Grammar* SAX2XMLReaderImpl::getRootGrammar()
  1746. {
  1747.     return fScanner->getRootGrammar();
  1748. }
  1749. inline const XMLCh* SAX2XMLReaderImpl::getURIText(unsigned int uriId) const
  1750. {
  1751.     return fScanner->getURIText(uriId);
  1752. }
  1753. inline unsigned int SAX2XMLReaderImpl::getSrcOffset() const
  1754. {
  1755.     return fScanner->getSrcOffset();
  1756. }
  1757. XERCES_CPP_NAMESPACE_END
  1758. #endif