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