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 #if !defined(SAXPARSER_HPP)
00094 #define SAXPARSER_HPP
00095
00096 #include <sax/Parser.hpp>
00097 #include <internal/VecAttrListImpl.hpp>
00098 #include <framework/XMLDocumentHandler.hpp>
00099 #include <framework/XMLElementDecl.hpp>
00100 #include <framework/XMLEntityHandler.hpp>
00101 #include <framework/XMLErrorReporter.hpp>
00102 #include <validators/DTD/DocTypeHandler.hpp>
00103
00104 class DocumentHandler;
00105 class EntityResolver;
00106 class XMLPScanToken;
00107 class XMLScanner;
00108 class XMLValidator;
00109
00110
00120
00121 class SAXParser :
00122
00123 public Parser
00124 , public XMLDocumentHandler
00125 , public XMLErrorReporter
00126 , public XMLEntityHandler
00127 , public DocTypeHandler
00128 {
00129 public :
00130
00131
00132
00133 enum ValSchemes
00134 {
00135 Val_Never
00136 , Val_Always
00137 , Val_Auto
00138 };
00139
00140
00141
00142
00143
00144
00146
00152 SAXParser(XMLValidator* const valToAdopt = 0);
00153
00157 ~SAXParser();
00158
00159
00160
00162
00169 DocumentHandler* getDocumentHandler();
00170
00177 const DocumentHandler* getDocumentHandler() const;
00178
00185 EntityResolver* getEntityResolver();
00186
00193 const EntityResolver* getEntityResolver() const;
00194
00201 ErrorHandler* getErrorHandler();
00202
00209 const ErrorHandler* getErrorHandler() const;
00210
00217 const XMLScanner& getScanner() const;
00218
00225 const XMLValidator& getValidator() const;
00226
00233 ValSchemes getValidationScheme() const;
00234
00244 bool getDoNamespaces() const;
00245
00255 bool getExitOnFirstFatalError() const;
00256
00257
00258
00259
00260
00261
00262
00264
00282 void setDoNamespaces(const bool newState);
00283
00295 void setValidationScheme(const ValSchemes newScheme);
00296
00312 void setExitOnFirstFatalError(const bool newState);
00313
00314
00315
00316
00317
00318
00319
00321
00335 void installAdvDocHandler(XMLDocumentHandler* const toInstall);
00336
00346 bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
00347
00348
00349
00350
00351
00352
00353
00355
00368 virtual void parse(const InputSource& source, const bool reuseValidator = false);
00369
00382 virtual void parse(const XMLCh* const systemId, const bool reuseValidator = false);
00383
00394 virtual void parse(const char* const systemId, const bool reuseValidator = false);
00395
00406 virtual void setDocumentHandler(DocumentHandler* const handler);
00407
00417 virtual void setDTDHandler(DTDHandler* const handler);
00418
00429 virtual void setErrorHandler(ErrorHandler* const handler);
00430
00442 virtual void setEntityResolver(EntityResolver* const resolver);
00443
00444
00445
00446
00447
00448
00449
00451
00452
00484 bool parseFirst
00485 (
00486 const XMLCh* const systemId
00487 , XMLPScanToken& toFill
00488 , const bool reuseValidator = false
00489 );
00490
00521 bool parseFirst
00522 (
00523 const char* const systemId
00524 , XMLPScanToken& toFill
00525 , const bool reuseValidator = false
00526 );
00527
00558 bool parseFirst
00559 (
00560 const InputSource& source
00561 , XMLPScanToken& toFill
00562 , const bool reuseValidator = false
00563 );
00564
00589 bool parseNext(XMLPScanToken& token);
00590
00612 void parseReset(XMLPScanToken& token);
00613
00614
00615
00616
00617
00618
00619
00620
00621
00623
00638 virtual void attDef
00639 (
00640 const DTDElementDecl& elemDecl
00641 , const DTDAttDef& attDef
00642 , const bool ignoring
00643 );
00644
00654 virtual void doctypeComment
00655 (
00656 const XMLCh* const comment
00657 );
00658
00675 virtual void doctypeDecl
00676 (
00677 const DTDElementDecl& elemDecl
00678 , const XMLCh* const publicId
00679 , const XMLCh* const systemId
00680 , const bool hasIntSubset
00681 );
00682
00696 virtual void doctypePI
00697 (
00698 const XMLCh* const target
00699 , const XMLCh* const data
00700 );
00701
00713 virtual void doctypeWhitespace
00714 (
00715 const XMLCh* const chars
00716 , const unsigned int length
00717 );
00718
00731 virtual void elementDecl
00732 (
00733 const DTDElementDecl& decl
00734 , const bool isIgnored
00735 );
00736
00747 virtual void endAttList
00748 (
00749 const DTDElementDecl& elemDecl
00750 );
00751
00758 virtual void endIntSubset();
00759
00766 virtual void endExtSubset();
00767
00782 virtual void entityDecl
00783 (
00784 const DTDEntityDecl& entityDecl
00785 , const bool isPEDecl
00786 , const bool isIgnored
00787 );
00788
00793 virtual void resetDocType();
00794
00807 virtual void notationDecl
00808 (
00809 const XMLNotationDecl& notDecl
00810 , const bool isIgnored
00811 );
00812
00823 virtual void startAttList
00824 (
00825 const DTDElementDecl& elemDecl
00826 );
00827
00834 virtual void startIntSubset();
00835
00842 virtual void startExtSubset();
00843
00856 virtual void TextDecl
00857 (
00858 const XMLCh* const versionStr
00859 , const XMLCh* const encodingStr
00860 );
00861
00862
00863
00864
00865
00866
00867
00869
00885 virtual void docCharacters
00886 (
00887 const XMLCh* const chars
00888 , const unsigned int length
00889 , const bool cdataSection
00890 );
00891
00901 virtual void docComment
00902 (
00903 const XMLCh* const comment
00904 );
00905
00925 virtual void docPI
00926 (
00927 const XMLCh* const target
00928 , const XMLCh* const data
00929 );
00930
00942 virtual void endDocument();
00943
00960 virtual void endElement
00961 (
00962 const XMLElementDecl& elemDecl
00963 , const unsigned int urlId
00964 , const bool isRoot
00965 );
00966
00977 virtual void endEntityReference
00978 (
00979 const XMLEntityDecl& entDecl
00980 );
00981
01001 virtual void ignorableWhitespace
01002 (
01003 const XMLCh* const chars
01004 , const unsigned int length
01005 , const bool cdataSection
01006 );
01007
01012 virtual void resetDocument();
01013
01024 virtual void startDocument();
01025
01052 virtual void startElement
01053 (
01054 const XMLElementDecl& elemDecl
01055 , const unsigned int urlId
01056 , const XMLCh* const elemPrefix
01057 , const RefVectorOf<XMLAttr>& attrList
01058 , const unsigned int attrCount
01059 , const bool isEmpty
01060 , const bool isRoot
01061 );
01062
01072 virtual void startEntityReference
01073 (
01074 const XMLEntityDecl& entDecl
01075 );
01076
01094 virtual void XMLDecl
01095 (
01096 const XMLCh* const versionStr
01097 , const XMLCh* const encodingStr
01098 , const XMLCh* const standaloneStr
01099 , const XMLCh* const actualEncodingStr
01100 );
01101
01102
01103
01104
01105
01106
01107
01109
01133 virtual void error
01134 (
01135 const unsigned int errCode
01136 , const XMLCh* const msgDomain
01137 , const XMLErrorReporter::ErrTypes errType
01138 , const XMLCh* const errorText
01139 , const XMLCh* const systemId
01140 , const XMLCh* const publicId
01141 , const unsigned int lineNum
01142 , const unsigned int colNum
01143 );
01144
01153 virtual void resetErrors();
01154
01155
01156
01157
01158
01159
01160
01162
01174 virtual void endInputSource(const InputSource& inputSource);
01175
01190 virtual bool expandSystemId
01191 (
01192 const XMLCh* const systemId
01193 , XMLBuffer& toFill
01194 );
01195
01203 virtual void resetEntities();
01204
01219 virtual InputSource* resolveEntity
01220 (
01221 const XMLCh* const publicId
01222 , const XMLCh* const systemId
01223 );
01224
01236 virtual void startInputSource(const InputSource& inputSource);
01237
01238
01239
01241
01252 bool getDoValidation() const;
01253
01267 void setDoValidation(const bool newState);
01268
01269
01270
01271 private :
01272
01273
01274
01275 SAXParser(const SAXParser&);
01276 void operator=(const SAXParser&);
01277
01278
01279
01280
01281
01282
01283
01284
01285
01286
01287
01288
01289
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 VecAttrListImpl fAttrList;
01332 DocumentHandler* fDocHandler;
01333 DTDHandler* fDTDHandler;
01334 unsigned int fElemDepth;
01335 EntityResolver* fEntityResolver;
01336 ErrorHandler* fErrorHandler;
01337 unsigned int fAdvDHCount;
01338 XMLDocumentHandler** fAdvDHList;
01339 unsigned int fAdvDHListSize;
01340 bool fParseInProgress;
01341 XMLScanner* fScanner;
01342 XMLValidator* fValidator;
01343 };
01344
01345
01346
01347
01348
01349 inline DocumentHandler* SAXParser::getDocumentHandler()
01350 {
01351 return fDocHandler;
01352 }
01353
01354 inline const DocumentHandler* SAXParser::getDocumentHandler() const
01355 {
01356 return fDocHandler;
01357 }
01358
01359 inline EntityResolver* SAXParser::getEntityResolver()
01360 {
01361 return fEntityResolver;
01362 }
01363
01364 inline const EntityResolver* SAXParser::getEntityResolver() const
01365 {
01366 return fEntityResolver;
01367 }
01368
01369 inline ErrorHandler* SAXParser::getErrorHandler()
01370 {
01371 return fErrorHandler;
01372 }
01373
01374 inline const ErrorHandler* SAXParser::getErrorHandler() const
01375 {
01376 return fErrorHandler;
01377 }
01378
01379 inline const XMLScanner& SAXParser::getScanner() const
01380 {
01381 return *fScanner;
01382 }
01383
01384 #endif