00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 #if !defined(SAXPARSER_HPP)
00022 #define SAXPARSER_HPP
00023 
00024 #include <xercesc/sax/Parser.hpp>
00025 #include <xercesc/internal/VecAttrListImpl.hpp>
00026 #include <xercesc/framework/XMLDocumentHandler.hpp>
00027 #include <xercesc/framework/XMLElementDecl.hpp>
00028 #include <xercesc/framework/XMLEntityHandler.hpp>
00029 #include <xercesc/framework/XMLErrorReporter.hpp>
00030 #include <xercesc/framework/XMLBuffer.hpp>
00031 #include <xercesc/util/SecurityManager.hpp>
00032 #include <xercesc/validators/DTD/DocTypeHandler.hpp>
00033 
00034 XERCES_CPP_NAMESPACE_BEGIN
00035 
00036 
00037 class DocumentHandler;
00038 class EntityResolver;
00039 class XMLPScanToken;
00040 class XMLScanner;
00041 class XMLValidator;
00042 class Grammar;
00043 class GrammarResolver;
00044 class XMLGrammarPool;
00045 class XMLEntityResolver;
00046 class XMLResourceIdentifier;
00047 class PSVIHandler;
00048 
00063 class  SAXParser :
00064 
00065     public XMemory
00066     , public Parser
00067     , public XMLDocumentHandler
00068     , public XMLErrorReporter
00069     , public XMLEntityHandler
00070     , public DocTypeHandler    
00071 {
00072 public :
00073     
00074     
00075     
00084     enum ValSchemes
00085     {
00086         Val_Never
00087         , Val_Always
00088         , Val_Auto
00089     };
00090 
00091 
00092     
00093     
00094     
00105     SAXParser
00106     (
00107           XMLValidator*   const valToAdopt = 0
00108         , MemoryManager*  const manager = XMLPlatformUtils::fgMemoryManager
00109         , XMLGrammarPool* const gramPool = 0 
00110     );
00111 
00115     ~SAXParser();
00117 
00118 
00119     
00120     
00121     
00130     DocumentHandler* getDocumentHandler();
00131 
00138     const DocumentHandler* getDocumentHandler() const;
00139 
00146     EntityResolver* getEntityResolver();
00147 
00154     const EntityResolver* getEntityResolver() const;
00155 
00162     XMLEntityResolver* getXMLEntityResolver();
00163 
00170     const XMLEntityResolver* getXMLEntityResolver() const;
00171 
00178     ErrorHandler* getErrorHandler();
00179 
00186     const ErrorHandler* getErrorHandler() const;
00187 
00194     PSVIHandler* getPSVIHandler();
00195 
00202     const PSVIHandler* getPSVIHandler() const;
00203 
00210     const XMLValidator& getValidator() const;
00211 
00219     ValSchemes getValidationScheme() const;
00220 
00231     bool getDoSchema() const;
00232 
00243     bool getValidationSchemaFullChecking() const;
00244 
00255     bool getIdentityConstraintChecking() const;
00256 
00267     int getErrorCount() const;
00268 
00278     bool getDoNamespaces() const;
00279 
00289     bool getExitOnFirstFatalError() const;
00290 
00301     bool getValidationConstraintFatal() const;
00302 
00322     XMLCh* getExternalSchemaLocation() const;
00323 
00343     XMLCh* getExternalNoNamespaceSchemaLocation() const;
00344 
00360     SecurityManager* getSecurityManager() const;
00361 
00373     bool getLoadExternalDTD() const;
00374 
00385     bool isCachingGrammarFromParse() const;
00386 
00397     bool isUsingCachedGrammarInParse() const;
00398 
00410     bool getCalculateSrcOfs() const;
00411 
00422     bool getStandardUriConformant() const;
00423 
00430     Grammar* getGrammar(const XMLCh* const nameSpaceKey);
00431 
00437     Grammar* getRootGrammar();
00438 
00445     const XMLCh* getURIText(unsigned int uriId) const;
00446 
00453     unsigned int getSrcOffset() const;
00454 
00466     bool getGenerateSyntheticAnnotations() const;
00467 
00475     bool getValidateAnnotations() const;
00476 
00484     bool getIgnoreCachedDTD() const;
00485 
00493     bool getIgnoreAnnotations() const;
00494 
00502     bool getDisableDefaultEntityResolution() const;
00503 
00511     bool getSkipDTDValidation() const;
00512 
00514 
00515 
00516     
00517     
00518     
00519 
00532     void setGenerateSyntheticAnnotations(const bool newValue);
00533 
00541     void setValidateAnnotations(const bool newValue);
00542 
00556     void setDoNamespaces(const bool newState);
00557 
00574     void setValidationScheme(const ValSchemes newScheme);
00575 
00591     void setDoSchema(const bool newState);
00592 
00609     void setValidationSchemaFullChecking(const bool schemaFullChecking);
00610 
00622     void setIdentityConstraintChecking(const bool identityConstraintChecking);
00623 
00639     void setExitOnFirstFatalError(const bool newState);
00640 
00660     void setValidationConstraintFatal(const bool newState);
00661 
00682     void setExternalSchemaLocation(const XMLCh* const schemaLocation);
00683 
00692     void setExternalSchemaLocation(const char* const schemaLocation);
00693 
00708     void setExternalNoNamespaceSchemaLocation(const XMLCh* const noNamespaceSchemaLocation);
00709 
00718     void setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation);
00719 
00735     void setSecurityManager(SecurityManager* const securityManager);
00736 
00753     void setLoadExternalDTD(const bool newState);
00754 
00772     void cacheGrammarFromParse(const bool newState);
00773 
00792     void useCachedGrammarInParse(const bool newState);
00793 
00806     void setCalculateSrcOfs(const bool newState);
00807 
00818     void setStandardUriConformant(const bool newState);
00819 
00827     void useScanner(const XMLCh* const scannerName);
00828 
00839     void setInputBufferSize(const size_t bufferSize);
00840 
00855     void setIgnoreCachedDTD(const bool newValue);
00856 
00866     void setIgnoreAnnotations(const bool newValue);
00867 
00882     void setDisableDefaultEntityResolution(const bool newValue);
00883 
00896     void setSkipDTDValidation(const bool newValue);
00898 
00899 
00900     
00901     
00902     
00903 
00919     void installAdvDocHandler(XMLDocumentHandler* const toInstall);
00920 
00930     bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
00932 
00933 
00934     
00935     
00936     
00937 
00940 
00968     bool parseFirst
00969     (
00970         const   XMLCh* const    systemId
00971         ,       XMLPScanToken&  toFill
00972     );
00973 
01001     bool parseFirst
01002     (
01003         const   char* const     systemId
01004         ,       XMLPScanToken&  toFill
01005     );
01006 
01034     bool parseFirst
01035     (
01036         const   InputSource&    source
01037         ,       XMLPScanToken&  toFill
01038     );
01039 
01064     bool parseNext(XMLPScanToken& token);
01065 
01087     void parseReset(XMLPScanToken& token);
01088 
01090 
01091     
01092     
01093     
01094 
01124     Grammar* loadGrammar(const InputSource& source,
01125                          const short grammarType,
01126                          const bool toCache = false);
01127 
01153     Grammar* loadGrammar(const XMLCh* const systemId,
01154                          const short grammarType,
01155                          const bool toCache = false);
01156 
01181     Grammar* loadGrammar(const char* const systemId,
01182                          const short grammarType,
01183                          const bool toCache = false);
01184 
01188     void resetCachedGrammarPool();
01189 
01191 
01192 
01193     
01194     
01195     
01196 
01208     virtual void parse(const InputSource& source);
01209 
01219     virtual void parse(const XMLCh* const systemId);
01220 
01228     virtual void parse(const char* const systemId);
01229 
01240     virtual void setDocumentHandler(DocumentHandler* const handler);
01241 
01251     virtual void setDTDHandler(DTDHandler* const handler);
01252 
01263     virtual void setErrorHandler(ErrorHandler* const handler);
01264 
01275     virtual void setPSVIHandler(PSVIHandler* const handler);
01276 
01292     virtual void setEntityResolver(EntityResolver* const resolver);
01293 
01309     virtual void setXMLEntityResolver(XMLEntityResolver* const resolver);
01310 
01312 
01313 
01314     
01315     
01316     
01317 
01335     virtual void docCharacters
01336     (
01337         const   XMLCh* const    chars
01338         , const unsigned int    length
01339         , const bool            cdataSection
01340     );
01341 
01351     virtual void docComment
01352     (
01353         const   XMLCh* const    comment
01354     );
01355 
01375     virtual void docPI
01376     (
01377         const   XMLCh* const    target
01378         , const XMLCh* const    data
01379     );
01380 
01392     virtual void endDocument();
01393 
01413     virtual void endElement
01414     (
01415         const   XMLElementDecl& elemDecl
01416         , const unsigned int    urlId
01417         , const bool            isRoot
01418         , const XMLCh* const    elemPrefix
01419     );
01420 
01431     virtual void endEntityReference
01432     (
01433         const   XMLEntityDecl&  entDecl
01434     );
01435 
01455     virtual void ignorableWhitespace
01456     (
01457         const   XMLCh* const    chars
01458         , const unsigned int    length
01459         , const bool            cdataSection
01460     );
01461 
01466     virtual void resetDocument();
01467 
01478     virtual void startDocument();
01479 
01506     virtual void startElement
01507     (
01508         const   XMLElementDecl&         elemDecl
01509         , const unsigned int            urlId
01510         , const XMLCh* const            elemPrefix
01511         , const RefVectorOf<XMLAttr>&   attrList
01512         , const unsigned int            attrCount
01513         , const bool                    isEmpty
01514         , const bool                    isRoot
01515     );
01516 
01526     virtual void startEntityReference
01527     (
01528         const   XMLEntityDecl&  entDecl
01529     );
01530 
01548     virtual void XMLDecl
01549     (
01550         const   XMLCh* const    versionStr
01551         , const XMLCh* const    encodingStr
01552         , const XMLCh* const    standaloneStr
01553         , const XMLCh* const    actualEncodingStr
01554     );
01556 
01557 
01558     
01559     
01560     
01561 
01587     virtual void error
01588     (
01589         const   unsigned int                errCode
01590         , const XMLCh* const                msgDomain
01591         , const XMLErrorReporter::ErrTypes  errType
01592         , const XMLCh* const                errorText
01593         , const XMLCh* const                systemId
01594         , const XMLCh* const                publicId
01595         , const XMLSSize_t                  lineNum
01596         , const XMLSSize_t                  colNum
01597     );
01598 
01607     virtual void resetErrors();
01609 
01610 
01611     
01612     
01613     
01614 
01628     virtual void endInputSource(const InputSource& inputSource);
01629 
01644     virtual bool expandSystemId
01645     (
01646         const   XMLCh* const    systemId
01647         ,       XMLBuffer&      toFill
01648     );
01649 
01657     virtual void resetEntities();
01658 
01681     virtual InputSource* resolveEntity
01682     (
01683         const   XMLCh* const    publicId
01684         , const XMLCh* const    systemId
01685         , const XMLCh* const    baseURI = 0
01686     );
01687 
01704     virtual InputSource* resolveEntity
01705     (
01706         XMLResourceIdentifier* resourceIdentifier
01707     );
01708 
01720     virtual void startInputSource(const InputSource& inputSource);
01722 
01723 
01724     
01725     
01726     
01743     virtual void attDef
01744     (
01745         const   DTDElementDecl& elemDecl
01746         , const DTDAttDef&      attDef
01747         , const bool            ignore
01748     );
01749 
01759     virtual void doctypeComment
01760     (
01761         const   XMLCh* const    comment
01762     );
01763 
01782     virtual void doctypeDecl
01783     (
01784         const   DTDElementDecl& elemDecl
01785         , const XMLCh* const    publicId
01786         , const XMLCh* const    systemId
01787         , const bool            hasIntSubset
01788         , const bool            hasExtSubset = false
01789     );
01790 
01804     virtual void doctypePI
01805     (
01806         const   XMLCh* const    target
01807         , const XMLCh* const    data
01808     );
01809 
01821     virtual void doctypeWhitespace
01822     (
01823         const   XMLCh* const    chars
01824         , const unsigned int    length
01825     );
01826 
01839     virtual void elementDecl
01840     (
01841         const   DTDElementDecl& decl
01842         , const bool            isIgnored
01843     );
01844 
01855     virtual void endAttList
01856     (
01857         const   DTDElementDecl& elemDecl
01858     );
01859 
01866     virtual void endIntSubset();
01867 
01874     virtual void endExtSubset();
01875 
01890     virtual void entityDecl
01891     (
01892         const   DTDEntityDecl&  entityDecl
01893         , const bool            isPEDecl
01894         , const bool            isIgnored
01895     );
01896 
01901     virtual void resetDocType();
01902 
01915     virtual void notationDecl
01916     (
01917         const   XMLNotationDecl&    notDecl
01918         , const bool                isIgnored
01919     );
01920 
01931     virtual void startAttList
01932     (
01933         const   DTDElementDecl& elemDecl
01934     );
01935 
01942     virtual void startIntSubset();
01943 
01950     virtual void startExtSubset();
01951 
01964     virtual void TextDecl
01965     (
01966         const   XMLCh* const    versionStr
01967         , const XMLCh* const    encodingStr
01968     );
01970 
01971 
01972     
01973     
01974     
01987     bool getDoValidation() const;
01988 
02002     void setDoValidation(const bool newState);
02004 
02005 
02006 protected :
02007     
02008     
02009     
02016     const XMLScanner& getScanner() const;
02017 
02022     GrammarResolver* getGrammarResolver() const;
02023 
02024 
02025 private:
02026     
02027     
02028     
02029     SAXParser(const SAXParser&);
02030     SAXParser& operator=(const SAXParser&);
02031 
02032     
02033     
02034     
02035     void initialize();
02036     void cleanUp();
02037     void resetInProgress();
02038 
02039     
02040     
02041     
02042     
02043     
02044     
02045     
02046     
02047     
02048     
02049     
02050     
02051     
02052     
02053     
02054     
02055     
02056     
02057     
02058     
02059     
02060     
02061     
02062     
02063     
02064     
02065     
02066     
02067     
02068     
02069     
02070     
02071     
02072     
02073     
02074     
02075     
02076     
02077     
02078     
02079     
02080     
02081     
02082     
02083     
02084     
02085     
02086     
02087     
02088     
02089     
02090     
02091     
02092     
02093     bool                 fParseInProgress;
02094     unsigned int         fElemDepth;
02095     unsigned int         fAdvDHCount;
02096     unsigned int         fAdvDHListSize;
02097     VecAttrListImpl      fAttrList;
02098     DocumentHandler*     fDocHandler;
02099     DTDHandler*          fDTDHandler;
02100     EntityResolver*      fEntityResolver;
02101     XMLEntityResolver*   fXMLEntityResolver;
02102     ErrorHandler*        fErrorHandler;
02103     PSVIHandler*         fPSVIHandler;
02104     XMLDocumentHandler** fAdvDHList;
02105     XMLScanner*          fScanner;
02106     GrammarResolver*     fGrammarResolver;
02107     XMLStringPool*       fURIStringPool;
02108     XMLValidator*        fValidator;
02109     MemoryManager*       fMemoryManager;
02110     XMLGrammarPool*      fGrammarPool;
02111     XMLBuffer            fElemQNameBuf;
02112 };
02113 
02114 
02115 
02116 
02117 
02118 inline DocumentHandler* SAXParser::getDocumentHandler()
02119 {
02120     return fDocHandler;
02121 }
02122 
02123 inline const DocumentHandler* SAXParser::getDocumentHandler() const
02124 {
02125     return fDocHandler;
02126 }
02127 
02128 inline EntityResolver* SAXParser::getEntityResolver()
02129 {
02130     return fEntityResolver;
02131 }
02132 
02133 inline XMLEntityResolver* SAXParser::getXMLEntityResolver()
02134 {
02135     return fXMLEntityResolver;
02136 }
02137 
02138 inline const XMLEntityResolver* SAXParser::getXMLEntityResolver() const
02139 {
02140     return fXMLEntityResolver;
02141 }
02142 
02143 inline const EntityResolver* SAXParser::getEntityResolver() const
02144 {
02145     return fEntityResolver;
02146 }
02147 
02148 inline ErrorHandler* SAXParser::getErrorHandler()
02149 {
02150     return fErrorHandler;
02151 }
02152 
02153 inline const ErrorHandler* SAXParser::getErrorHandler() const
02154 {
02155     return fErrorHandler;
02156 }
02157 
02158 inline PSVIHandler* SAXParser::getPSVIHandler()
02159 {
02160     return fPSVIHandler;
02161 }
02162 
02163 inline const PSVIHandler* SAXParser::getPSVIHandler() const
02164 {
02165     return fPSVIHandler;
02166 }
02167 
02168 inline const XMLScanner& SAXParser::getScanner() const
02169 {
02170     return *fScanner;
02171 }
02172 
02173 inline GrammarResolver* SAXParser::getGrammarResolver() const
02174 {
02175     return fGrammarResolver;
02176 }
02177 
02178 XERCES_CPP_NAMESPACE_END
02179 
02180 #endif