00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 
00042 
00043 
00044 
00045 
00046 
00047 
00048 
00049 
00050 
00051 
00052 
00053 
00054 
00055 
00056 
00057 
00058 
00059 
00060 
00061 
00062 
00063 
00064 
00065 
00066 
00067 
00068 
00069 
00070 
00071 
00072 
00073 
00074 
00075 
00076 
00077 
00078 
00079 
00080 
00081 
00082 
00083 
00084 
00085 
00086 
00087 
00088 
00089 
00090 
00091 
00092 
00093 
00094 
00095 
00096 
00097 
00098 
00099 
00100 
00101 
00102 
00103 
00104 
00105 
00106 
00107 
00108 
00109 
00110 
00111 
00112 
00113 
00114 
00115 
00116 
00117 
00118 
00119 
00120 
00121 
00122 
00123 
00124 
00125 
00126 
00127 
00128 
00129 
00130 
00131 
00132 
00133 
00134 #if !defined(SAXPARSER_HPP)
00135 #define SAXPARSER_HPP
00136 
00137 #include <sax/Parser.hpp>
00138 #include <internal/VecAttrListImpl.hpp>
00139 #include <framework/XMLDocumentHandler.hpp>
00140 #include <framework/XMLElementDecl.hpp>
00141 #include <framework/XMLEntityHandler.hpp>
00142 #include <framework/XMLErrorReporter.hpp>
00143 #include <validators/DTD/DocTypeHandler.hpp>
00144 
00145 class DocumentHandler;
00146 class EntityResolver;
00147 class XMLPScanToken;
00148 class XMLScanner;
00149 class XMLValidator;
00150 
00151 
00161 
00162 class  SAXParser :
00163 
00164     public Parser
00165     , public XMLDocumentHandler
00166     , public XMLErrorReporter
00167     , public XMLEntityHandler
00168     , public DocTypeHandler
00169 {
00170 public :
00171     
00172     
00173     
00174     enum ValSchemes
00175     {
00176         Val_Never
00177         , Val_Always
00178         , Val_Auto
00179     };
00180 
00181 
00182     
00183     
00184     
00185 
00188 
00193     SAXParser(XMLValidator* const valToAdopt = 0);
00194 
00198     ~SAXParser();
00200 
00201 
00204 
00210     DocumentHandler* getDocumentHandler();
00211 
00218     const DocumentHandler* getDocumentHandler() const;
00219 
00226     EntityResolver* getEntityResolver();
00227 
00234     const EntityResolver* getEntityResolver() const;
00235 
00242     ErrorHandler* getErrorHandler();
00243 
00250     const ErrorHandler* getErrorHandler() const;
00251 
00258     const XMLScanner& getScanner() const;
00259 
00266     const XMLValidator& getValidator() const;
00267 
00275     ValSchemes getValidationScheme() const;
00276 
00287     bool getDoSchema() const;
00288 
00299     bool getValidationSchemaFullChecking() const;
00300 
00311     int getErrorCount() const;
00312 
00322     bool getDoNamespaces() const;
00323 
00333     bool getExitOnFirstFatalError() const;
00334 
00345     bool getValidationConstraintFatal() const;
00347 
00348 
00349     
00350     
00351     
00352 
00355 
00372     void setDoNamespaces(const bool newState);
00373 
00390     void setValidationScheme(const ValSchemes newScheme);
00391 
00405     void setDoSchema(const bool newState);
00406 
00423     void setValidationSchemaFullChecking(const bool schemaFullChecking);
00424 
00440     void setExitOnFirstFatalError(const bool newState);
00441 
00457     void setValidationConstraintFatal(const bool newState);
00459 
00460 
00461     
00462     
00463     
00464 
00467 
00480     void installAdvDocHandler(XMLDocumentHandler* const toInstall);
00481 
00491     bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
00493 
00494 
00495     
00496     
00497     
00498 
00501 
00513     virtual void parse(const InputSource& source, const bool reuseGrammar = false);
00514 
00527     virtual void parse(const XMLCh* const systemId, const bool reuseGrammar = false);
00528 
00539     virtual void parse(const char* const systemId, const bool reuseGrammar = false);
00540 
00551     virtual void setDocumentHandler(DocumentHandler* const handler);
00552 
00562     virtual void setDTDHandler(DTDHandler* const handler);
00563 
00574     virtual void setErrorHandler(ErrorHandler* const handler);
00575 
00587     virtual void setEntityResolver(EntityResolver* const resolver);
00589 
00590 
00591     
00592     
00593     
00594 
00597 
00628     bool parseFirst
00629     (
00630         const   XMLCh* const    systemId
00631         ,       XMLPScanToken&  toFill
00632         , const bool            reuseGrammar = false
00633     );
00634 
00665     bool parseFirst
00666     (
00667         const   char* const     systemId
00668         ,       XMLPScanToken&  toFill
00669         , const bool            reuseGrammar = false
00670     );
00671 
00702     bool parseFirst
00703     (
00704         const   InputSource&    source
00705         ,       XMLPScanToken&  toFill
00706         , const bool            reuseGrammar = false
00707     );
00708 
00733     bool parseNext(XMLPScanToken& token);
00734 
00756     void parseReset(XMLPScanToken& token);
00757 
00759 
00760 
00761 
00762     
00763     
00764     
00765 
00768 
00782     virtual void attDef
00783     (
00784         const   DTDElementDecl& elemDecl
00785         , const DTDAttDef&      attDef
00786         , const bool            ignoring
00787     );
00788 
00798     virtual void doctypeComment
00799     (
00800         const   XMLCh* const    comment
00801     );
00802 
00819     virtual void doctypeDecl
00820     (
00821         const   DTDElementDecl& elemDecl
00822         , const XMLCh* const    publicId
00823         , const XMLCh* const    systemId
00824         , const bool            hasIntSubset
00825     );
00826 
00840     virtual void doctypePI
00841     (
00842         const   XMLCh* const    target
00843         , const XMLCh* const    data
00844     );
00845 
00857     virtual void doctypeWhitespace
00858     (
00859         const   XMLCh* const    chars
00860         , const unsigned int    length
00861     );
00862 
00875     virtual void elementDecl
00876     (
00877         const   DTDElementDecl& decl
00878         , const bool            isIgnored
00879     );
00880 
00891     virtual void endAttList
00892     (
00893         const   DTDElementDecl& elemDecl
00894     );
00895 
00902     virtual void endIntSubset();
00903 
00910     virtual void endExtSubset();
00911 
00926     virtual void entityDecl
00927     (
00928         const   DTDEntityDecl&  entityDecl
00929         , const bool            isPEDecl
00930         , const bool            isIgnored
00931     );
00932 
00937     virtual void resetDocType();
00938 
00951     virtual void notationDecl
00952     (
00953         const   XMLNotationDecl&    notDecl
00954         , const bool                isIgnored
00955     );
00956 
00967     virtual void startAttList
00968     (
00969         const   DTDElementDecl& elemDecl
00970     );
00971 
00978     virtual void startIntSubset();
00979 
00986     virtual void startExtSubset();
00987 
01000     virtual void TextDecl
01001     (
01002         const   XMLCh* const    versionStr
01003         , const XMLCh* const    encodingStr
01004     );
01006 
01007 
01008     
01009     
01010     
01011 
01014 
01029     virtual void docCharacters
01030     (
01031         const   XMLCh* const    chars
01032         , const unsigned int    length
01033         , const bool            cdataSection
01034     );
01035 
01045     virtual void docComment
01046     (
01047         const   XMLCh* const    comment
01048     );
01049 
01069     virtual void docPI
01070     (
01071         const   XMLCh* const    target
01072         , const XMLCh* const    data
01073     );
01074 
01086     virtual void endDocument();
01087 
01104     virtual void endElement
01105     (
01106         const   XMLElementDecl& elemDecl
01107         , const unsigned int    urlId
01108         , const bool            isRoot
01109     );
01110 
01121     virtual void endEntityReference
01122     (
01123         const   XMLEntityDecl&  entDecl
01124     );
01125 
01145     virtual void ignorableWhitespace
01146     (
01147         const   XMLCh* const    chars
01148         , const unsigned int    length
01149         , const bool            cdataSection
01150     );
01151 
01156     virtual void resetDocument();
01157 
01168     virtual void startDocument();
01169 
01196     virtual void startElement
01197     (
01198         const   XMLElementDecl&         elemDecl
01199         , const unsigned int            urlId
01200         , const XMLCh* const            elemPrefix
01201         , const RefVectorOf<XMLAttr>&   attrList
01202         , const unsigned int            attrCount
01203         , const bool                    isEmpty
01204         , const bool                    isRoot
01205     );
01206 
01216     virtual void startEntityReference
01217     (
01218         const   XMLEntityDecl&  entDecl
01219     );
01220 
01238     virtual void XMLDecl
01239     (
01240         const   XMLCh* const    versionStr
01241         , const XMLCh* const    encodingStr
01242         , const XMLCh* const    standaloneStr
01243         , const XMLCh* const    actualEncodingStr
01244     );
01246 
01247 
01248     
01249     
01250     
01251 
01254 
01277     virtual void error
01278     (
01279         const   unsigned int                errCode
01280         , const XMLCh* const                msgDomain
01281         , const XMLErrorReporter::ErrTypes  errType
01282         , const XMLCh* const                errorText
01283         , const XMLCh* const                systemId
01284         , const XMLCh* const                publicId
01285         , const unsigned int                lineNum
01286         , const unsigned int                colNum
01287     );
01288 
01297     virtual void resetErrors();
01299 
01300 
01301     
01302     
01303     
01304 
01307 
01318     virtual void endInputSource(const InputSource& inputSource);
01319 
01334     virtual bool expandSystemId
01335     (
01336         const   XMLCh* const    systemId
01337         ,       XMLBuffer&      toFill
01338     );
01339 
01347     virtual void resetEntities();
01348 
01363     virtual InputSource* resolveEntity
01364     (
01365         const   XMLCh* const    publicId
01366         , const XMLCh* const    systemId
01367     );
01368 
01380     virtual void startInputSource(const InputSource& inputSource);
01382 
01383 
01386 
01396     bool getDoValidation() const;
01397 
01411     void setDoValidation(const bool newState);
01413 
01414 
01415 protected :
01416     
01417     
01418     
01419     SAXParser(const SAXParser&);
01420     void operator=(const SAXParser&);
01421 
01422 
01423     
01424     
01425     
01426     
01427     
01428     
01429     
01430     
01431     
01432     
01433     
01434     
01435     
01436     
01437     
01438     
01439     
01440     
01441     
01442     
01443     
01444     
01445     
01446     
01447     
01448     
01449     
01450     
01451     
01452     
01453     
01454     
01455     
01456     
01457     
01458     
01459     
01460     
01461     
01462     
01463     
01464     
01465     
01466     
01467     
01468     
01469     
01470     VecAttrListImpl         fAttrList;
01471     DocumentHandler*        fDocHandler;
01472     DTDHandler*             fDTDHandler;
01473     unsigned int            fElemDepth;
01474     EntityResolver*         fEntityResolver;
01475     ErrorHandler*           fErrorHandler;
01476     unsigned int            fAdvDHCount;
01477     XMLDocumentHandler**    fAdvDHList;
01478     unsigned int            fAdvDHListSize;
01479     bool                    fParseInProgress;
01480     XMLScanner*             fScanner;
01481 };
01482 
01483 
01484 
01485 
01486 
01487 inline DocumentHandler* SAXParser::getDocumentHandler()
01488 {
01489     return fDocHandler;
01490 }
01491 
01492 inline const DocumentHandler* SAXParser::getDocumentHandler() const
01493 {
01494     return fDocHandler;
01495 }
01496 
01497 inline EntityResolver* SAXParser::getEntityResolver()
01498 {
01499     return fEntityResolver;
01500 }
01501 
01502 inline const EntityResolver* SAXParser::getEntityResolver() const
01503 {
01504     return fEntityResolver;
01505 }
01506 
01507 inline ErrorHandler* SAXParser::getErrorHandler()
01508 {
01509     return fErrorHandler;
01510 }
01511 
01512 inline const ErrorHandler* SAXParser::getErrorHandler() const
01513 {
01514     return fErrorHandler;
01515 }
01516 
01517 inline const XMLScanner& SAXParser::getScanner() const
01518 {
01519     return *fScanner;
01520 }
01521 
01522 #endif