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 #if !defined(SAXPARSER_HPP)
00101 #define SAXPARSER_HPP
00102
00103 #include <sax/Parser.hpp>
00104 #include <internal/VecAttrListImpl.hpp>
00105 #include <framework/XMLDocumentHandler.hpp>
00106 #include <framework/XMLElementDecl.hpp>
00107 #include <framework/XMLEntityHandler.hpp>
00108 #include <framework/XMLErrorReporter.hpp>
00109 #include <validators/DTD/DocTypeHandler.hpp>
00110
00111 class DocumentHandler;
00112 class EntityResolver;
00113 class XMLPScanToken;
00114 class XMLScanner;
00115 class XMLValidator;
00116
00117
00127
00128 class SAXParser :
00129
00130 public Parser
00131 , public XMLDocumentHandler
00132 , public XMLErrorReporter
00133 , public XMLEntityHandler
00134 , public DocTypeHandler
00135 {
00136 public :
00137
00138
00139
00140 enum ValSchemes
00141 {
00142 Val_Never
00143 , Val_Always
00144 , Val_Auto
00145 };
00146
00147
00148
00149
00150
00151
00154
00159 SAXParser(XMLValidator* const valToAdopt = 0);
00160
00164 ~SAXParser();
00166
00167
00170
00176 DocumentHandler* getDocumentHandler();
00177
00184 const DocumentHandler* getDocumentHandler() const;
00185
00192 EntityResolver* getEntityResolver();
00193
00200 const EntityResolver* getEntityResolver() const;
00201
00208 ErrorHandler* getErrorHandler();
00209
00216 const ErrorHandler* getErrorHandler() const;
00217
00224 const XMLScanner& getScanner() const;
00225
00232 const XMLValidator& getValidator() const;
00233
00241 ValSchemes getValidationScheme() const;
00242
00252 bool getDoNamespaces() const;
00253
00263 bool getExitOnFirstFatalError() const;
00265
00266
00267
00268
00269
00270
00273
00290 void setDoNamespaces(const bool newState);
00291
00308 void setValidationScheme(const ValSchemes newScheme);
00309
00325 void setExitOnFirstFatalError(const bool newState);
00327
00328
00329
00330
00331
00332
00335
00348 void installAdvDocHandler(XMLDocumentHandler* const toInstall);
00349
00359 bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
00361
00362
00363
00364
00365
00366
00369
00381 virtual void parse(const InputSource& source, const bool reuseValidator = false);
00382
00395 virtual void parse(const XMLCh* const systemId, const bool reuseValidator = false);
00396
00407 virtual void parse(const char* const systemId, const bool reuseValidator = false);
00408
00419 virtual void setDocumentHandler(DocumentHandler* const handler);
00420
00430 virtual void setDTDHandler(DTDHandler* const handler);
00431
00442 virtual void setErrorHandler(ErrorHandler* const handler);
00443
00455 virtual void setEntityResolver(EntityResolver* const resolver);
00457
00458
00459
00460
00461
00462
00465
00497 bool parseFirst
00498 (
00499 const XMLCh* const systemId
00500 , XMLPScanToken& toFill
00501 , const bool reuseValidator = false
00502 );
00503
00534 bool parseFirst
00535 (
00536 const char* const systemId
00537 , XMLPScanToken& toFill
00538 , const bool reuseValidator = false
00539 );
00540
00571 bool parseFirst
00572 (
00573 const InputSource& source
00574 , XMLPScanToken& toFill
00575 , const bool reuseValidator = false
00576 );
00577
00602 bool parseNext(XMLPScanToken& token);
00603
00625 void parseReset(XMLPScanToken& token);
00626
00628
00629
00630
00631
00632
00633
00634
00637
00651 virtual void attDef
00652 (
00653 const DTDElementDecl& elemDecl
00654 , const DTDAttDef& attDef
00655 , const bool ignoring
00656 );
00657
00667 virtual void doctypeComment
00668 (
00669 const XMLCh* const comment
00670 );
00671
00688 virtual void doctypeDecl
00689 (
00690 const DTDElementDecl& elemDecl
00691 , const XMLCh* const publicId
00692 , const XMLCh* const systemId
00693 , const bool hasIntSubset
00694 );
00695
00709 virtual void doctypePI
00710 (
00711 const XMLCh* const target
00712 , const XMLCh* const data
00713 );
00714
00726 virtual void doctypeWhitespace
00727 (
00728 const XMLCh* const chars
00729 , const unsigned int length
00730 );
00731
00744 virtual void elementDecl
00745 (
00746 const DTDElementDecl& decl
00747 , const bool isIgnored
00748 );
00749
00760 virtual void endAttList
00761 (
00762 const DTDElementDecl& elemDecl
00763 );
00764
00771 virtual void endIntSubset();
00772
00779 virtual void endExtSubset();
00780
00795 virtual void entityDecl
00796 (
00797 const DTDEntityDecl& entityDecl
00798 , const bool isPEDecl
00799 , const bool isIgnored
00800 );
00801
00806 virtual void resetDocType();
00807
00820 virtual void notationDecl
00821 (
00822 const XMLNotationDecl& notDecl
00823 , const bool isIgnored
00824 );
00825
00836 virtual void startAttList
00837 (
00838 const DTDElementDecl& elemDecl
00839 );
00840
00847 virtual void startIntSubset();
00848
00855 virtual void startExtSubset();
00856
00869 virtual void TextDecl
00870 (
00871 const XMLCh* const versionStr
00872 , const XMLCh* const encodingStr
00873 );
00875
00876
00877
00878
00879
00880
00883
00898 virtual void docCharacters
00899 (
00900 const XMLCh* const chars
00901 , const unsigned int length
00902 , const bool cdataSection
00903 );
00904
00914 virtual void docComment
00915 (
00916 const XMLCh* const comment
00917 );
00918
00938 virtual void docPI
00939 (
00940 const XMLCh* const target
00941 , const XMLCh* const data
00942 );
00943
00955 virtual void endDocument();
00956
00973 virtual void endElement
00974 (
00975 const XMLElementDecl& elemDecl
00976 , const unsigned int urlId
00977 , const bool isRoot
00978 );
00979
00990 virtual void endEntityReference
00991 (
00992 const XMLEntityDecl& entDecl
00993 );
00994
01014 virtual void ignorableWhitespace
01015 (
01016 const XMLCh* const chars
01017 , const unsigned int length
01018 , const bool cdataSection
01019 );
01020
01025 virtual void resetDocument();
01026
01037 virtual void startDocument();
01038
01065 virtual void startElement
01066 (
01067 const XMLElementDecl& elemDecl
01068 , const unsigned int urlId
01069 , const XMLCh* const elemPrefix
01070 , const RefVectorOf<XMLAttr>& attrList
01071 , const unsigned int attrCount
01072 , const bool isEmpty
01073 , const bool isRoot
01074 );
01075
01085 virtual void startEntityReference
01086 (
01087 const XMLEntityDecl& entDecl
01088 );
01089
01107 virtual void XMLDecl
01108 (
01109 const XMLCh* const versionStr
01110 , const XMLCh* const encodingStr
01111 , const XMLCh* const standaloneStr
01112 , const XMLCh* const actualEncodingStr
01113 );
01115
01116
01117
01118
01119
01120
01123
01146 virtual void error
01147 (
01148 const unsigned int errCode
01149 , const XMLCh* const msgDomain
01150 , const XMLErrorReporter::ErrTypes errType
01151 , const XMLCh* const errorText
01152 , const XMLCh* const systemId
01153 , const XMLCh* const publicId
01154 , const unsigned int lineNum
01155 , const unsigned int colNum
01156 );
01157
01166 virtual void resetErrors();
01168
01169
01170
01171
01172
01173
01176
01187 virtual void endInputSource(const InputSource& inputSource);
01188
01203 virtual bool expandSystemId
01204 (
01205 const XMLCh* const systemId
01206 , XMLBuffer& toFill
01207 );
01208
01216 virtual void resetEntities();
01217
01232 virtual InputSource* resolveEntity
01233 (
01234 const XMLCh* const publicId
01235 , const XMLCh* const systemId
01236 );
01237
01249 virtual void startInputSource(const InputSource& inputSource);
01251
01252
01255
01265 bool getDoValidation() const;
01266
01280 void setDoValidation(const bool newState);
01282
01283
01284 protected :
01285
01286
01287
01288 SAXParser(const SAXParser&);
01289 void operator=(const SAXParser&);
01290
01291
01292
01293
01294
01295
01296
01297
01298
01299
01300
01301
01302
01303
01304
01305
01306
01307
01308
01309
01310
01311
01312
01313
01314
01315
01316
01317
01318
01319
01320
01321
01322
01323
01324
01325
01326
01327
01328
01329
01330
01331
01332
01333
01334
01335
01336
01337
01338
01339
01340
01341
01342
01343
01344 VecAttrListImpl fAttrList;
01345 DocumentHandler* fDocHandler;
01346 DTDHandler* fDTDHandler;
01347 unsigned int fElemDepth;
01348 EntityResolver* fEntityResolver;
01349 ErrorHandler* fErrorHandler;
01350 unsigned int fAdvDHCount;
01351 XMLDocumentHandler** fAdvDHList;
01352 unsigned int fAdvDHListSize;
01353 bool fParseInProgress;
01354 XMLScanner* fScanner;
01355 XMLValidator* fValidator;
01356 };
01357
01358
01359
01360
01361
01362 inline DocumentHandler* SAXParser::getDocumentHandler()
01363 {
01364 return fDocHandler;
01365 }
01366
01367 inline const DocumentHandler* SAXParser::getDocumentHandler() const
01368 {
01369 return fDocHandler;
01370 }
01371
01372 inline EntityResolver* SAXParser::getEntityResolver()
01373 {
01374 return fEntityResolver;
01375 }
01376
01377 inline const EntityResolver* SAXParser::getEntityResolver() const
01378 {
01379 return fEntityResolver;
01380 }
01381
01382 inline ErrorHandler* SAXParser::getErrorHandler()
01383 {
01384 return fErrorHandler;
01385 }
01386
01387 inline const ErrorHandler* SAXParser::getErrorHandler() const
01388 {
01389 return fErrorHandler;
01390 }
01391
01392 inline const XMLScanner& SAXParser::getScanner() const
01393 {
01394 return *fScanner;
01395 }
01396
01397 #endif