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

词法分析

开发平台:

Visual C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 1999-2000 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: ParserTest_Parser.hpp,v $
  58.  * Revision 1.8  2002/11/05 21:47:36  tng
  59.  * Explicit code using namespace in application.
  60.  *
  61.  * Revision 1.7  2002/02/01 22:45:54  peiyongz
  62.  * sane_include
  63.  *
  64.  * Revision 1.6  2000/03/02 19:55:46  roddey
  65.  * This checkin includes many changes done while waiting for the
  66.  * 1.1.0 code to be finished. I can't list them all here, but a list is
  67.  * available elsewhere.
  68.  *
  69.  * Revision 1.5  2000/02/06 07:48:37  rahulj
  70.  * Year 2K copyright swat.
  71.  *
  72.  * Revision 1.4  2000/01/24 20:38:56  roddey
  73.  * Fixed some small bugs introduced in the recent move away from the util/* streams.
  74.  *
  75.  * Revision 1.3  2000/01/21 23:58:06  roddey
  76.  * Initial move away from util streams was bad. Wide char APIs didn't allow enough
  77.  * control to do canonical output, so changed to use std short char APIs.
  78.  *
  79.  * Revision 1.1  1999/11/09 01:02:23  twl
  80.  * Initial revision
  81.  *
  82.  * Revision 1.3  1999/11/08 20:42:25  rahul
  83.  * Swat for adding in Product name and CVS comment log variable.
  84.  *
  85.  */
  86. // ---------------------------------------------------------------------------
  87. //  Includes
  88. // ---------------------------------------------------------------------------
  89. #include    <xercesc/framework/XMLDocumentHandler.hpp>
  90. #include    <xercesc/framework/XMLErrorReporter.hpp>
  91. #include    <xercesc/validators/DTD/DocTypeHandler.hpp>
  92. XERCES_CPP_NAMESPACE_USE
  93. class TestParser :
  94.     public XMLDocumentHandler, public XMLErrorReporter, public DocTypeHandler
  95. {
  96. public :
  97.     // -----------------------------------------------------------------------
  98.     //  Constructors and Destructor
  99.     // -----------------------------------------------------------------------
  100.     TestParser();
  101.     ~TestParser();
  102.     // -----------------------------------------------------------------------
  103.     //  Setter methods
  104.     // -----------------------------------------------------------------------
  105.     void setDoNamespaces(const bool state);
  106.     void setScanner(XMLScanner* const state);
  107.     void setOutputType(const OutputTypes outType);
  108.     void setShowErrLoc(const bool state);
  109.     void setShowIntDTD(const bool state);
  110.     void setShowWarnings(const bool state);
  111.     // -----------------------------------------------------------------------
  112.     //  The XMLDocumentHandler interface
  113.     // -----------------------------------------------------------------------
  114.     virtual void docCharacters
  115.     (
  116.         const   XMLCh* const    chars
  117.         , const unsigned int    length
  118.         , const bool            cdataSection
  119.     );
  120.     virtual void docComment
  121.     (
  122.         const   XMLCh* const    comment
  123.     );
  124.     virtual void docPI
  125.     (
  126.         const   XMLCh* const    target
  127.         , const XMLCh* const    data
  128.     );
  129.     virtual void endDocument();
  130.     virtual void endElement
  131.     (
  132.         const   XMLElementDecl& elemDecl
  133.         , const unsigned int    uriId
  134.         , const bool            isRoot
  135.     );
  136.     virtual void endEntityReference
  137.     (
  138.         const   XMLEntityDecl&  entDecl
  139.     );
  140.     virtual void ignorableWhitespace
  141.     (
  142.         const   XMLCh* const    chars
  143.         , const unsigned int    length
  144.         , const bool            cdataSection
  145.     );
  146.     virtual void resetDocument();
  147.     virtual void startDocument();
  148.     virtual void startElement
  149.     (
  150.         const   XMLElementDecl&         elemDecl
  151.         , const unsigned int            elemURIId
  152.         , const XMLCh* const            elemPrefix
  153.         , const RefVectorOf<XMLAttr>&   attrList
  154.         , const unsigned int            attrCount
  155.         , const bool                    isEmpty
  156.         , const bool                    isRoot
  157.     );
  158.     virtual void startEntityReference
  159.     (
  160.         const   XMLEntityDecl&  entDecl
  161.     );
  162.     virtual void XMLDecl
  163.     (
  164.         const   XMLCh* const    versionStr
  165.         , const XMLCh* const    encodingStr
  166.         , const XMLCh* const    standaloneStr
  167.         , const XMLCh* const    autoEncStr
  168.     );
  169.     // -----------------------------------------------------------------------
  170.     //  Implementation of the XMLErrorReporter interface
  171.     // -----------------------------------------------------------------------
  172.     virtual void error
  173.     (
  174.         const   unsigned int                errCode
  175.         , const XMLCh* const                msgDomain
  176.         , const XMLErrorReporter::ErrTypes  type
  177.         , const XMLCh* const                text
  178.         , const XMLCh* const                systemId
  179.         , const XMLCh* const                publicId
  180.         , const unsigned int                lineNum
  181.         , const unsigned int                colNum
  182.     );
  183.     virtual void resetErrors();
  184.     // -----------------------------------------------------------------------
  185.     //  The document type handler virtual handler interface
  186.     // -----------------------------------------------------------------------
  187.     virtual void attDef
  188.     (
  189.         const   DTDElementDecl&     elemDecl
  190.         , const DTDAttDef&          attDef
  191.         , const bool                ignoring
  192.     );
  193.     virtual void doctypeComment
  194.     (
  195.         const   XMLCh* const    comment
  196.     );
  197.     virtual void doctypeDecl
  198.     (
  199.         const   DTDElementDecl& elemDecl
  200.         , const XMLCh* const    publicId
  201.         , const XMLCh* const    systemId
  202.         , const bool            hasIntSubset
  203.     );
  204.     virtual void doctypePI
  205.     (
  206.         const   XMLCh* const    target
  207.         , const XMLCh* const    data
  208.     );
  209.     virtual void doctypeWhitespace
  210.     (
  211.         const   XMLCh* const    chars
  212.         , const unsigned int    length
  213.     );
  214.     virtual void elementDecl
  215.     (
  216.         const   DTDElementDecl& decl
  217.         , const bool            isIgnored
  218.     );
  219.     virtual void endAttList
  220.     (
  221.         const   DTDElementDecl& elemDecl
  222.     );
  223.     virtual void endIntSubset();
  224.     virtual void endExtSubset();
  225.     virtual void entityDecl
  226.     (
  227.         const   DTDEntityDecl&  entityDecl
  228.         , const bool            isPEDecl
  229.         , const bool            isIgnored
  230.     );
  231.     virtual void resetDocType();
  232.     virtual void notationDecl
  233.     (
  234.         const   XMLNotationDecl&    notDecl
  235.         , const bool                isIgnored
  236.     );
  237.     virtual void startAttList
  238.     (
  239.         const   DTDElementDecl& elemDecl
  240.     );
  241.     virtual void startIntSubset();
  242.     virtual void startExtSubset();
  243.     virtual void TextDecl
  244.     (
  245.         const   XMLCh* const    versionStr
  246.         , const XMLCh* const    encodingStr
  247.     );
  248. private :
  249.     // -----------------------------------------------------------------------
  250.     //  Unimplemented constructors and operators
  251.     // -----------------------------------------------------------------------
  252.     TestParser(const TestParser&);
  253.     void operator=(const TestParser&);
  254.     // -----------------------------------------------------------------------
  255.     //  Private helper methods
  256.     // -----------------------------------------------------------------------
  257.     void showChar(const char toShow, const bool doCan);
  258.     void showChars
  259.     (
  260.         const   XMLCh* const    chars
  261.         , const unsigned int    length
  262.     );
  263.     void showIds(const XMLCh* const publicId, const XMLCh* const systemId);
  264.     void showString(const XMLCh* const toShow);
  265.     // -----------------------------------------------------------------------
  266.     //  Data members
  267.     //
  268.     //  fDoNamespaces
  269.     //      Indicates whether the user wanted us to be namespace aware or
  270.     //      not.
  271.     //
  272.     //  fInsideRoot
  273.     //      This is set once the first start element event is seen, and cleared
  274.     //      when the root element ends. Its used to support the canonical
  275.     //      format used by the Bosak tests. Basically it allows us to supress
  276.     //      the whitespace outside the internal subset but before the root
  277.     //      element.
  278.     //
  279.     //  fInExtSubSet
  280.     //      Indicates when we are in the external subset, so that we don't
  281.     //      display that part.
  282.     //
  283.     //  fIntDTDOutput
  284.     //      Indicates whether the data from the internal DTD subset is
  285.     //      output or not (only used if fXMLOutput is true.)
  286.     //
  287.     //  fNestingLevel
  288.     //      This is used to handle tabbing over nested elements. Each start
  289.     //      element bumps it up, and each end element bumps it down.
  290.     //
  291.     //  fOutputType
  292.     //      This flag controls the primary style of output used. It can
  293.     //      be set to do James Clark type canonical output, Sun style
  294.     //      canonical output, debug output, regular XML output, or none.
  295.     //
  296.     //  fScanner
  297.     //      The scanner we created to do the scanning.
  298.     //
  299.     //  fShowErrLoc
  300.     //      This flag turns on the special display mode that is used for
  301.     //      negative test testing. It puts out a special, condensed display
  302.     //      of error info that can be compared in subsequent runs to check
  303.     //      for changes. If its turned on, it forces the output type to
  304.     //      'none'.
  305.     //
  306.     //  fShowWarnings
  307.     //      Indicates whether warning messages should be displayed or not.
  308.     //
  309.     //  fSurrogate
  310.     //      Indicates that we got a surrogate char, so we have to wait for
  311.     //      the next char before we can output it. Its zero when not.
  312.     // -----------------------------------------------------------------------
  313.     bool            fDoNamespaces;
  314.     bool            fInExtSubset;
  315.     bool            fInsideRoot;
  316.     bool            fIntDTDOutput;
  317.     unsigned int    fNestingLevel;
  318.     OutputTypes     fOutputType;
  319.     XMLScanner*     fScanner;
  320.     bool            fShowErrLoc;
  321.     bool            fShowWarnings;
  322.     XMLCh           fSurrogate;
  323. };
  324. // ---------------------------------------------------------------------------
  325. //  TestParser: Setter Methods
  326. // ---------------------------------------------------------------------------
  327. inline void TestParser::setDoNamespaces(const bool state)
  328. {
  329.     fDoNamespaces = state;
  330. }
  331. inline void TestParser::setScanner(XMLScanner* const ourScanner)
  332. {
  333.     fScanner = ourScanner;
  334. }
  335. inline void TestParser::setOutputType(const OutputTypes outType)
  336. {
  337.     fOutputType = outType;
  338. }
  339. inline void TestParser::setShowIntDTD(const bool state)
  340. {
  341.     fIntDTDOutput = state;
  342. }
  343. inline void TestParser::setShowWarnings(const bool state)
  344. {
  345.     fShowWarnings = state;
  346. }
  347. inline void TestParser::setShowErrLoc(const bool state)
  348. {
  349.     fShowErrLoc = state;
  350. }