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
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201 #if !defined(SAXPARSER_HPP)
00202 #define SAXPARSER_HPP
00203
00204 #include <xercesc/sax/Parser.hpp>
00205 #include <xercesc/internal/VecAttrListImpl.hpp>
00206 #include <xercesc/framework/XMLDocumentHandler.hpp>
00207 #include <xercesc/framework/XMLElementDecl.hpp>
00208 #include <xercesc/framework/XMLEntityHandler.hpp>
00209 #include <xercesc/framework/XMLErrorReporter.hpp>
00210 #include <xercesc/framework/XMLBuffer.hpp>
00211 #include <xercesc/validators/DTD/DocTypeHandler.hpp>
00212
00213 XERCES_CPP_NAMESPACE_BEGIN
00214
00215
00216 class DocumentHandler;
00217 class EntityResolver;
00218 class XMLPScanToken;
00219 class XMLScanner;
00220 class XMLValidator;
00221 class Grammar;
00222 class GrammarResolver;
00223
00224
00235 class SAXParser :
00236
00237 public Parser
00238 , public XMLDocumentHandler
00239 , public XMLErrorReporter
00240 , public XMLEntityHandler
00241 , public DocTypeHandler
00242 {
00243 public :
00244
00245
00246
00255 enum ValSchemes
00256 {
00257 Val_Never
00258 , Val_Always
00259 , Val_Auto
00260 };
00261
00262
00263
00264
00265
00273 SAXParser(XMLValidator* const valToAdopt = 0);
00274
00278 ~SAXParser();
00280
00281
00282
00283
00284
00293 DocumentHandler* getDocumentHandler();
00294
00301 const DocumentHandler* getDocumentHandler() const;
00302
00309 EntityResolver* getEntityResolver();
00310
00317 const EntityResolver* getEntityResolver() const;
00318
00325 ErrorHandler* getErrorHandler();
00326
00333 const ErrorHandler* getErrorHandler() const;
00334
00341 const XMLValidator& getValidator() const;
00342
00350 ValSchemes getValidationScheme() const;
00351
00362 bool getDoSchema() const;
00363
00374 bool getValidationSchemaFullChecking() const;
00375
00386 int getErrorCount() const;
00387
00397 bool getDoNamespaces() const;
00398
00408 bool getExitOnFirstFatalError() const;
00409
00420 bool getValidationConstraintFatal() const;
00421
00441 XMLCh* getExternalSchemaLocation() const;
00442
00462 XMLCh* getExternalNoNamespaceSchemaLocation() const;
00463
00475 bool getLoadExternalDTD() const;
00476
00487 bool isCachingGrammarFromParse() const;
00488
00499 bool isUsingCachedGrammarInParse() const;
00500
00512 bool getCalculateSrcOfs() const;
00513
00524 bool getStandardUriConformant() const;
00525
00532 Grammar* getGrammar(const XMLCh* const nameSpaceKey);
00533
00539 Grammar* getRootGrammar();
00540
00547 const XMLCh* getURIText(unsigned int uriId) const;
00548
00554 unsigned int getSrcOffset() const;
00555
00557
00558
00559
00560
00561
00562
00578 void setDoNamespaces(const bool newState);
00579
00596 void setValidationScheme(const ValSchemes newScheme);
00597
00613 void setDoSchema(const bool newState);
00614
00631 void setValidationSchemaFullChecking(const bool schemaFullChecking);
00632
00648 void setExitOnFirstFatalError(const bool newState);
00649
00669 void setValidationConstraintFatal(const bool newState);
00670
00691 void setExternalSchemaLocation(const XMLCh* const schemaLocation);
00692
00701 void setExternalSchemaLocation(const char* const schemaLocation);
00702
00717 void setExternalNoNamespaceSchemaLocation(const XMLCh* const noNamespaceSchemaLocation);
00718
00727 void setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation);
00728
00745 void setLoadExternalDTD(const bool newState);
00746
00764 void cacheGrammarFromParse(const bool newState);
00765
00784 void useCachedGrammarInParse(const bool newState);
00785
00798 void setCalculateSrcOfs(const bool newState);
00799
00810 void setStandardUriConformant(const bool newState);
00811
00819 void useScanner(const XMLCh* const scannerName);
00820
00822
00823
00824
00825
00826
00827
00843 void installAdvDocHandler(XMLDocumentHandler* const toInstall);
00844
00854 bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
00856
00857
00858
00859
00860
00861
00864
00892 bool parseFirst
00893 (
00894 const XMLCh* const systemId
00895 , XMLPScanToken& toFill
00896 );
00897
00925 bool parseFirst
00926 (
00927 const char* const systemId
00928 , XMLPScanToken& toFill
00929 );
00930
00958 bool parseFirst
00959 (
00960 const InputSource& source
00961 , XMLPScanToken& toFill
00962 );
00963
00988 bool parseNext(XMLPScanToken& token);
00989
01011 void parseReset(XMLPScanToken& token);
01012
01014
01015
01016
01017
01018
01048 Grammar* loadGrammar(const InputSource& source,
01049 const short grammarType,
01050 const bool toCache = false);
01051
01077 Grammar* loadGrammar(const XMLCh* const systemId,
01078 const short grammarType,
01079 const bool toCache = false);
01080
01105 Grammar* loadGrammar(const char* const systemId,
01106 const short grammarType,
01107 const bool toCache = false);
01108
01112 void resetCachedGrammarPool();
01113
01115
01116
01117
01118
01119
01120
01132 virtual void parse(const InputSource& source);
01133
01143 virtual void parse(const XMLCh* const systemId);
01144
01152 virtual void parse(const char* const systemId);
01153
01164 virtual void setDocumentHandler(DocumentHandler* const handler);
01165
01175 virtual void setDTDHandler(DTDHandler* const handler);
01176
01187 virtual void setErrorHandler(ErrorHandler* const handler);
01188
01200 virtual void setEntityResolver(EntityResolver* const resolver);
01202
01203
01204
01205
01206
01207
01225 virtual void docCharacters
01226 (
01227 const XMLCh* const chars
01228 , const unsigned int length
01229 , const bool cdataSection
01230 );
01231
01241 virtual void docComment
01242 (
01243 const XMLCh* const comment
01244 );
01245
01265 virtual void docPI
01266 (
01267 const XMLCh* const target
01268 , const XMLCh* const data
01269 );
01270
01282 virtual void endDocument();
01283
01303 virtual void endElement
01304 (
01305 const XMLElementDecl& elemDecl
01306 , const unsigned int urlId
01307 , const bool isRoot
01308 , const XMLCh* const elemPrefix
01309 );
01310
01321 virtual void endEntityReference
01322 (
01323 const XMLEntityDecl& entDecl
01324 );
01325
01345 virtual void ignorableWhitespace
01346 (
01347 const XMLCh* const chars
01348 , const unsigned int length
01349 , const bool cdataSection
01350 );
01351
01356 virtual void resetDocument();
01357
01368 virtual void startDocument();
01369
01396 virtual void startElement
01397 (
01398 const XMLElementDecl& elemDecl
01399 , const unsigned int urlId
01400 , const XMLCh* const elemPrefix
01401 , const RefVectorOf<XMLAttr>& attrList
01402 , const unsigned int attrCount
01403 , const bool isEmpty
01404 , const bool isRoot
01405 );
01406
01416 virtual void startEntityReference
01417 (
01418 const XMLEntityDecl& entDecl
01419 );
01420
01438 virtual void XMLDecl
01439 (
01440 const XMLCh* const versionStr
01441 , const XMLCh* const encodingStr
01442 , const XMLCh* const standaloneStr
01443 , const XMLCh* const actualEncodingStr
01444 );
01446
01447
01448
01449
01450
01451
01477 virtual void error
01478 (
01479 const unsigned int errCode
01480 , const XMLCh* const msgDomain
01481 , const XMLErrorReporter::ErrTypes errType
01482 , const XMLCh* const errorText
01483 , const XMLCh* const systemId
01484 , const XMLCh* const publicId
01485 , const XMLSSize_t lineNum
01486 , const XMLSSize_t colNum
01487 );
01488
01497 virtual void resetErrors();
01499
01500
01501
01502
01503
01504
01518 virtual void endInputSource(const InputSource& inputSource);
01519
01534 virtual bool expandSystemId
01535 (
01536 const XMLCh* const systemId
01537 , XMLBuffer& toFill
01538 );
01539
01547 virtual void resetEntities();
01548
01569 virtual InputSource* resolveEntity
01570 (
01571 const XMLCh* const publicId
01572 , const XMLCh* const systemId
01573 , const XMLCh* const baseURI = 0
01574 );
01575
01587 virtual void startInputSource(const InputSource& inputSource);
01589
01590
01591
01592
01593
01610 virtual void attDef
01611 (
01612 const DTDElementDecl& elemDecl
01613 , const DTDAttDef& attDef
01614 , const bool ignore
01615 );
01616
01626 virtual void doctypeComment
01627 (
01628 const XMLCh* const comment
01629 );
01630
01649 virtual void doctypeDecl
01650 (
01651 const DTDElementDecl& elemDecl
01652 , const XMLCh* const publicId
01653 , const XMLCh* const systemId
01654 , const bool hasIntSubset
01655 , const bool hasExtSubset = false
01656 );
01657
01671 virtual void doctypePI
01672 (
01673 const XMLCh* const target
01674 , const XMLCh* const data
01675 );
01676
01688 virtual void doctypeWhitespace
01689 (
01690 const XMLCh* const chars
01691 , const unsigned int length
01692 );
01693
01706 virtual void elementDecl
01707 (
01708 const DTDElementDecl& decl
01709 , const bool isIgnored
01710 );
01711
01722 virtual void endAttList
01723 (
01724 const DTDElementDecl& elemDecl
01725 );
01726
01733 virtual void endIntSubset();
01734
01741 virtual void endExtSubset();
01742
01757 virtual void entityDecl
01758 (
01759 const DTDEntityDecl& entityDecl
01760 , const bool isPEDecl
01761 , const bool isIgnored
01762 );
01763
01768 virtual void resetDocType();
01769
01782 virtual void notationDecl
01783 (
01784 const XMLNotationDecl& notDecl
01785 , const bool isIgnored
01786 );
01787
01798 virtual void startAttList
01799 (
01800 const DTDElementDecl& elemDecl
01801 );
01802
01809 virtual void startIntSubset();
01810
01817 virtual void startExtSubset();
01818
01831 virtual void TextDecl
01832 (
01833 const XMLCh* const versionStr
01834 , const XMLCh* const encodingStr
01835 );
01837
01838
01839
01840
01841
01854 bool getDoValidation() const;
01855
01869 void setDoValidation(const bool newState);
01871
01872
01873 protected :
01874
01875
01876
01883 const XMLScanner& getScanner() const;
01884
01885
01886 private:
01887
01888
01889
01890 SAXParser(const SAXParser&);
01891 void operator=(const SAXParser&);
01892
01893
01894
01895
01896 void initialize();
01897 void cleanUp();
01898
01899
01900
01901
01902
01903
01904
01905
01906
01907
01908
01909
01910
01911
01912
01913
01914
01915
01916
01917
01918
01919
01920
01921
01922
01923
01924
01925
01926
01927
01928
01929
01930
01931
01932
01933
01934
01935
01936
01937
01938
01939
01940
01941
01942
01943
01944
01945
01946 bool fParseInProgress;
01947 unsigned int fElemDepth;
01948 unsigned int fAdvDHCount;
01949 unsigned int fAdvDHListSize;
01950 VecAttrListImpl fAttrList;
01951 DocumentHandler* fDocHandler;
01952 DTDHandler* fDTDHandler;
01953 EntityResolver* fEntityResolver;
01954 ErrorHandler* fErrorHandler;
01955 XMLDocumentHandler** fAdvDHList;
01956 XMLScanner* fScanner;
01957 GrammarResolver* fGrammarResolver;
01958 XMLStringPool* fURIStringPool;
01959 XMLValidator* fValidator;
01960 XMLBuffer fElemQNameBuf;
01961 };
01962
01963
01964
01965
01966
01967 inline DocumentHandler* SAXParser::getDocumentHandler()
01968 {
01969 return fDocHandler;
01970 }
01971
01972 inline const DocumentHandler* SAXParser::getDocumentHandler() const
01973 {
01974 return fDocHandler;
01975 }
01976
01977 inline EntityResolver* SAXParser::getEntityResolver()
01978 {
01979 return fEntityResolver;
01980 }
01981
01982 inline const EntityResolver* SAXParser::getEntityResolver() const
01983 {
01984 return fEntityResolver;
01985 }
01986
01987 inline ErrorHandler* SAXParser::getErrorHandler()
01988 {
01989 return fErrorHandler;
01990 }
01991
01992 inline const ErrorHandler* SAXParser::getErrorHandler() const
01993 {
01994 return fErrorHandler;
01995 }
01996
01997 inline const XMLScanner& SAXParser::getScanner() const
01998 {
01999 return *fScanner;
02000 }
02001
02002 XERCES_CPP_NAMESPACE_END
02003
02004 #endif