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 #if !defined(SAXPARSER_HPP)
00132 #define SAXPARSER_HPP
00133
00134 #include <sax/Parser.hpp>
00135 #include <internal/VecAttrListImpl.hpp>
00136 #include <framework/XMLDocumentHandler.hpp>
00137 #include <framework/XMLElementDecl.hpp>
00138 #include <framework/XMLEntityHandler.hpp>
00139 #include <framework/XMLErrorReporter.hpp>
00140 #include <validators/DTD/DocTypeHandler.hpp>
00141
00142 class DocumentHandler;
00143 class EntityResolver;
00144 class XMLPScanToken;
00145 class XMLScanner;
00146 class XMLValidator;
00147
00148
00158
00159 class SAXParser :
00160
00161 public Parser
00162 , public XMLDocumentHandler
00163 , public XMLErrorReporter
00164 , public XMLEntityHandler
00165 , public DocTypeHandler
00166 {
00167 public :
00168
00169
00170
00171 enum ValSchemes
00172 {
00173 Val_Never
00174 , Val_Always
00175 , Val_Auto
00176 };
00177
00178
00179
00180
00181
00182
00185
00190 SAXParser(XMLValidator* const valToAdopt = 0);
00191
00195 ~SAXParser();
00197
00198
00201
00207 DocumentHandler* getDocumentHandler();
00208
00215 const DocumentHandler* getDocumentHandler() const;
00216
00223 EntityResolver* getEntityResolver();
00224
00231 const EntityResolver* getEntityResolver() const;
00232
00239 ErrorHandler* getErrorHandler();
00240
00247 const ErrorHandler* getErrorHandler() const;
00248
00255 const XMLScanner& getScanner() const;
00256
00263 const XMLValidator& getValidator() const;
00264
00272 ValSchemes getValidationScheme() const;
00273
00284 bool getDoSchema() const;
00285
00296 int getErrorCount() const;
00297
00307 bool getDoNamespaces() const;
00308
00318 bool getExitOnFirstFatalError() const;
00319
00330 bool getValidationConstraintFatal() const;
00332
00333
00334
00335
00336
00337
00340
00357 void setDoNamespaces(const bool newState);
00358
00375 void setValidationScheme(const ValSchemes newScheme);
00376
00390 void setDoSchema(const bool newState);
00391
00392
00408 void setExitOnFirstFatalError(const bool newState);
00409
00425 void setValidationConstraintFatal(const bool newState);
00427
00428
00429
00430
00431
00432
00435
00448 void installAdvDocHandler(XMLDocumentHandler* const toInstall);
00449
00459 bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
00461
00462
00463
00464
00465
00466
00469
00481 virtual void parse(const InputSource& source, const bool reuseGrammar = false);
00482
00495 virtual void parse(const XMLCh* const systemId, const bool reuseGrammar = false);
00496
00507 virtual void parse(const char* const systemId, const bool reuseGrammar = false);
00508
00519 virtual void setDocumentHandler(DocumentHandler* const handler);
00520
00530 virtual void setDTDHandler(DTDHandler* const handler);
00531
00542 virtual void setErrorHandler(ErrorHandler* const handler);
00543
00555 virtual void setEntityResolver(EntityResolver* const resolver);
00557
00558
00559
00560
00561
00562
00565
00596 bool parseFirst
00597 (
00598 const XMLCh* const systemId
00599 , XMLPScanToken& toFill
00600 , const bool reuseGrammar = false
00601 );
00602
00633 bool parseFirst
00634 (
00635 const char* const systemId
00636 , XMLPScanToken& toFill
00637 , const bool reuseGrammar = false
00638 );
00639
00670 bool parseFirst
00671 (
00672 const InputSource& source
00673 , XMLPScanToken& toFill
00674 , const bool reuseGrammar = false
00675 );
00676
00701 bool parseNext(XMLPScanToken& token);
00702
00724 void parseReset(XMLPScanToken& token);
00725
00727
00728
00729
00730
00731
00732
00733
00736
00750 virtual void attDef
00751 (
00752 const DTDElementDecl& elemDecl
00753 , const DTDAttDef& attDef
00754 , const bool ignoring
00755 );
00756
00766 virtual void doctypeComment
00767 (
00768 const XMLCh* const comment
00769 );
00770
00787 virtual void doctypeDecl
00788 (
00789 const DTDElementDecl& elemDecl
00790 , const XMLCh* const publicId
00791 , const XMLCh* const systemId
00792 , const bool hasIntSubset
00793 );
00794
00808 virtual void doctypePI
00809 (
00810 const XMLCh* const target
00811 , const XMLCh* const data
00812 );
00813
00825 virtual void doctypeWhitespace
00826 (
00827 const XMLCh* const chars
00828 , const unsigned int length
00829 );
00830
00843 virtual void elementDecl
00844 (
00845 const DTDElementDecl& decl
00846 , const bool isIgnored
00847 );
00848
00859 virtual void endAttList
00860 (
00861 const DTDElementDecl& elemDecl
00862 );
00863
00870 virtual void endIntSubset();
00871
00878 virtual void endExtSubset();
00879
00894 virtual void entityDecl
00895 (
00896 const DTDEntityDecl& entityDecl
00897 , const bool isPEDecl
00898 , const bool isIgnored
00899 );
00900
00905 virtual void resetDocType();
00906
00919 virtual void notationDecl
00920 (
00921 const XMLNotationDecl& notDecl
00922 , const bool isIgnored
00923 );
00924
00935 virtual void startAttList
00936 (
00937 const DTDElementDecl& elemDecl
00938 );
00939
00946 virtual void startIntSubset();
00947
00954 virtual void startExtSubset();
00955
00968 virtual void TextDecl
00969 (
00970 const XMLCh* const versionStr
00971 , const XMLCh* const encodingStr
00972 );
00974
00975
00976
00977
00978
00979
00982
00997 virtual void docCharacters
00998 (
00999 const XMLCh* const chars
01000 , const unsigned int length
01001 , const bool cdataSection
01002 );
01003
01013 virtual void docComment
01014 (
01015 const XMLCh* const comment
01016 );
01017
01037 virtual void docPI
01038 (
01039 const XMLCh* const target
01040 , const XMLCh* const data
01041 );
01042
01054 virtual void endDocument();
01055
01072 virtual void endElement
01073 (
01074 const XMLElementDecl& elemDecl
01075 , const unsigned int urlId
01076 , const bool isRoot
01077 );
01078
01089 virtual void endEntityReference
01090 (
01091 const XMLEntityDecl& entDecl
01092 );
01093
01113 virtual void ignorableWhitespace
01114 (
01115 const XMLCh* const chars
01116 , const unsigned int length
01117 , const bool cdataSection
01118 );
01119
01124 virtual void resetDocument();
01125
01136 virtual void startDocument();
01137
01164 virtual void startElement
01165 (
01166 const XMLElementDecl& elemDecl
01167 , const unsigned int urlId
01168 , const XMLCh* const elemPrefix
01169 , const RefVectorOf<XMLAttr>& attrList
01170 , const unsigned int attrCount
01171 , const bool isEmpty
01172 , const bool isRoot
01173 );
01174
01184 virtual void startEntityReference
01185 (
01186 const XMLEntityDecl& entDecl
01187 );
01188
01206 virtual void XMLDecl
01207 (
01208 const XMLCh* const versionStr
01209 , const XMLCh* const encodingStr
01210 , const XMLCh* const standaloneStr
01211 , const XMLCh* const actualEncodingStr
01212 );
01214
01215
01216
01217
01218
01219
01222
01245 virtual void error
01246 (
01247 const unsigned int errCode
01248 , const XMLCh* const msgDomain
01249 , const XMLErrorReporter::ErrTypes errType
01250 , const XMLCh* const errorText
01251 , const XMLCh* const systemId
01252 , const XMLCh* const publicId
01253 , const unsigned int lineNum
01254 , const unsigned int colNum
01255 );
01256
01265 virtual void resetErrors();
01267
01268
01269
01270
01271
01272
01275
01286 virtual void endInputSource(const InputSource& inputSource);
01287
01302 virtual bool expandSystemId
01303 (
01304 const XMLCh* const systemId
01305 , XMLBuffer& toFill
01306 );
01307
01315 virtual void resetEntities();
01316
01331 virtual InputSource* resolveEntity
01332 (
01333 const XMLCh* const publicId
01334 , const XMLCh* const systemId
01335 );
01336
01348 virtual void startInputSource(const InputSource& inputSource);
01350
01351
01354
01364 bool getDoValidation() const;
01365
01379 void setDoValidation(const bool newState);
01381
01382
01383 protected :
01384
01385
01386
01387 SAXParser(const SAXParser&);
01388 void operator=(const SAXParser&);
01389
01390
01391
01392
01393
01394
01395
01396
01397
01398
01399
01400
01401
01402
01403
01404
01405
01406
01407
01408
01409
01410
01411
01412
01413
01414
01415
01416
01417
01418
01419
01420
01421
01422
01423
01424
01425
01426
01427
01428
01429
01430
01431
01432
01433
01434
01435
01436
01437
01438 VecAttrListImpl fAttrList;
01439 DocumentHandler* fDocHandler;
01440 DTDHandler* fDTDHandler;
01441 unsigned int fElemDepth;
01442 EntityResolver* fEntityResolver;
01443 ErrorHandler* fErrorHandler;
01444 unsigned int fAdvDHCount;
01445 XMLDocumentHandler** fAdvDHList;
01446 unsigned int fAdvDHListSize;
01447 bool fParseInProgress;
01448 XMLScanner* fScanner;
01449 };
01450
01451
01452
01453
01454
01455 inline DocumentHandler* SAXParser::getDocumentHandler()
01456 {
01457 return fDocHandler;
01458 }
01459
01460 inline const DocumentHandler* SAXParser::getDocumentHandler() const
01461 {
01462 return fDocHandler;
01463 }
01464
01465 inline EntityResolver* SAXParser::getEntityResolver()
01466 {
01467 return fEntityResolver;
01468 }
01469
01470 inline const EntityResolver* SAXParser::getEntityResolver() const
01471 {
01472 return fEntityResolver;
01473 }
01474
01475 inline ErrorHandler* SAXParser::getErrorHandler()
01476 {
01477 return fErrorHandler;
01478 }
01479
01480 inline const ErrorHandler* SAXParser::getErrorHandler() const
01481 {
01482 return fErrorHandler;
01483 }
01484
01485 inline const XMLScanner& SAXParser::getScanner() const
01486 {
01487 return *fScanner;
01488 }
01489
01490 #endif