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 #if !defined(SAXPARSER_HPP)
00141 #define SAXPARSER_HPP
00142
00143 #include <sax/Parser.hpp>
00144 #include <internal/VecAttrListImpl.hpp>
00145 #include <framework/XMLDocumentHandler.hpp>
00146 #include <framework/XMLElementDecl.hpp>
00147 #include <framework/XMLEntityHandler.hpp>
00148 #include <framework/XMLErrorReporter.hpp>
00149 #include <validators/DTD/DocTypeHandler.hpp>
00150
00151 class DocumentHandler;
00152 class EntityResolver;
00153 class XMLPScanToken;
00154 class XMLScanner;
00155 class XMLValidator;
00156
00157
00167
00168 class SAXParser :
00169
00170 public Parser
00171 , public XMLDocumentHandler
00172 , public XMLErrorReporter
00173 , public XMLEntityHandler
00174 , public DocTypeHandler
00175 {
00176 public :
00177
00178
00179
00180 enum ValSchemes
00181 {
00182 Val_Never
00183 , Val_Always
00184 , Val_Auto
00185 };
00186
00187
00188
00189
00190
00191
00194
00199 SAXParser(XMLValidator* const valToAdopt = 0);
00200
00204 ~SAXParser();
00206
00207
00210
00216 DocumentHandler* getDocumentHandler();
00217
00224 const DocumentHandler* getDocumentHandler() const;
00225
00232 EntityResolver* getEntityResolver();
00233
00240 const EntityResolver* getEntityResolver() const;
00241
00248 ErrorHandler* getErrorHandler();
00249
00256 const ErrorHandler* getErrorHandler() const;
00257
00264 const XMLScanner& getScanner() const;
00265
00272 const XMLValidator& getValidator() const;
00273
00281 ValSchemes getValidationScheme() const;
00282
00293 bool getDoSchema() const;
00294
00305 bool getValidationSchemaFullChecking() const;
00306
00317 int getErrorCount() const;
00318
00328 bool getDoNamespaces() const;
00329
00339 bool getExitOnFirstFatalError() const;
00340
00351 bool getValidationConstraintFatal() const;
00352
00372 XMLCh* getExternalSchemaLocation() const;
00373
00393 XMLCh* getExternalNoNamespaceSchemaLocation() const;
00394
00396
00397
00398
00399
00400
00401
00404
00421 void setDoNamespaces(const bool newState);
00422
00439 void setValidationScheme(const ValSchemes newScheme);
00440
00454 void setDoSchema(const bool newState);
00455
00472 void setValidationSchemaFullChecking(const bool schemaFullChecking);
00473
00489 void setExitOnFirstFatalError(const bool newState);
00490
00506 void setValidationConstraintFatal(const bool newState);
00507
00527
00528 void setExternalSchemaLocation(const XMLCh* const schemaLocation);
00529
00538 void setExternalSchemaLocation(const char* const schemaLocation);
00539
00554 void setExternalNoNamespaceSchemaLocation(const XMLCh* const noNamespaceSchemaLocation);
00555
00564 void setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation);
00565
00567
00568
00569
00570
00571
00572
00575
00588 void installAdvDocHandler(XMLDocumentHandler* const toInstall);
00589
00599 bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
00601
00602
00603
00604
00605
00606
00609
00621 virtual void parse(const InputSource& source, const bool reuseGrammar = false);
00622
00635 virtual void parse(const XMLCh* const systemId, const bool reuseGrammar = false);
00636
00647 virtual void parse(const char* const systemId, const bool reuseGrammar = false);
00648
00659 virtual void setDocumentHandler(DocumentHandler* const handler);
00660
00670 virtual void setDTDHandler(DTDHandler* const handler);
00671
00682 virtual void setErrorHandler(ErrorHandler* const handler);
00683
00695 virtual void setEntityResolver(EntityResolver* const resolver);
00697
00698
00699
00700
00701
00702
00705
00736 bool parseFirst
00737 (
00738 const XMLCh* const systemId
00739 , XMLPScanToken& toFill
00740 , const bool reuseGrammar = false
00741 );
00742
00773 bool parseFirst
00774 (
00775 const char* const systemId
00776 , XMLPScanToken& toFill
00777 , const bool reuseGrammar = false
00778 );
00779
00810 bool parseFirst
00811 (
00812 const InputSource& source
00813 , XMLPScanToken& toFill
00814 , const bool reuseGrammar = false
00815 );
00816
00841 bool parseNext(XMLPScanToken& token);
00842
00864 void parseReset(XMLPScanToken& token);
00865
00867
00868
00869
00870
00871
00872
00873
00876
00890 virtual void attDef
00891 (
00892 const DTDElementDecl& elemDecl
00893 , const DTDAttDef& attDef
00894 , const bool ignoring
00895 );
00896
00906 virtual void doctypeComment
00907 (
00908 const XMLCh* const comment
00909 );
00910
00927 virtual void doctypeDecl
00928 (
00929 const DTDElementDecl& elemDecl
00930 , const XMLCh* const publicId
00931 , const XMLCh* const systemId
00932 , const bool hasIntSubset
00933 );
00934
00948 virtual void doctypePI
00949 (
00950 const XMLCh* const target
00951 , const XMLCh* const data
00952 );
00953
00965 virtual void doctypeWhitespace
00966 (
00967 const XMLCh* const chars
00968 , const unsigned int length
00969 );
00970
00983 virtual void elementDecl
00984 (
00985 const DTDElementDecl& decl
00986 , const bool isIgnored
00987 );
00988
00999 virtual void endAttList
01000 (
01001 const DTDElementDecl& elemDecl
01002 );
01003
01010 virtual void endIntSubset();
01011
01018 virtual void endExtSubset();
01019
01034 virtual void entityDecl
01035 (
01036 const DTDEntityDecl& entityDecl
01037 , const bool isPEDecl
01038 , const bool isIgnored
01039 );
01040
01045 virtual void resetDocType();
01046
01059 virtual void notationDecl
01060 (
01061 const XMLNotationDecl& notDecl
01062 , const bool isIgnored
01063 );
01064
01075 virtual void startAttList
01076 (
01077 const DTDElementDecl& elemDecl
01078 );
01079
01086 virtual void startIntSubset();
01087
01094 virtual void startExtSubset();
01095
01108 virtual void TextDecl
01109 (
01110 const XMLCh* const versionStr
01111 , const XMLCh* const encodingStr
01112 );
01114
01115
01116
01117
01118
01119
01122
01137 virtual void docCharacters
01138 (
01139 const XMLCh* const chars
01140 , const unsigned int length
01141 , const bool cdataSection
01142 );
01143
01153 virtual void docComment
01154 (
01155 const XMLCh* const comment
01156 );
01157
01177 virtual void docPI
01178 (
01179 const XMLCh* const target
01180 , const XMLCh* const data
01181 );
01182
01194 virtual void endDocument();
01195
01212 virtual void endElement
01213 (
01214 const XMLElementDecl& elemDecl
01215 , const unsigned int urlId
01216 , const bool isRoot
01217 );
01218
01229 virtual void endEntityReference
01230 (
01231 const XMLEntityDecl& entDecl
01232 );
01233
01253 virtual void ignorableWhitespace
01254 (
01255 const XMLCh* const chars
01256 , const unsigned int length
01257 , const bool cdataSection
01258 );
01259
01264 virtual void resetDocument();
01265
01276 virtual void startDocument();
01277
01304 virtual void startElement
01305 (
01306 const XMLElementDecl& elemDecl
01307 , const unsigned int urlId
01308 , const XMLCh* const elemPrefix
01309 , const RefVectorOf<XMLAttr>& attrList
01310 , const unsigned int attrCount
01311 , const bool isEmpty
01312 , const bool isRoot
01313 );
01314
01324 virtual void startEntityReference
01325 (
01326 const XMLEntityDecl& entDecl
01327 );
01328
01346 virtual void XMLDecl
01347 (
01348 const XMLCh* const versionStr
01349 , const XMLCh* const encodingStr
01350 , const XMLCh* const standaloneStr
01351 , const XMLCh* const actualEncodingStr
01352 );
01354
01355
01356
01357
01358
01359
01362
01385 virtual void error
01386 (
01387 const unsigned int errCode
01388 , const XMLCh* const msgDomain
01389 , const XMLErrorReporter::ErrTypes errType
01390 , const XMLCh* const errorText
01391 , const XMLCh* const systemId
01392 , const XMLCh* const publicId
01393 , const unsigned int lineNum
01394 , const unsigned int colNum
01395 );
01396
01405 virtual void resetErrors();
01407
01408
01409
01410
01411
01412
01415
01426 virtual void endInputSource(const InputSource& inputSource);
01427
01442 virtual bool expandSystemId
01443 (
01444 const XMLCh* const systemId
01445 , XMLBuffer& toFill
01446 );
01447
01455 virtual void resetEntities();
01456
01471 virtual InputSource* resolveEntity
01472 (
01473 const XMLCh* const publicId
01474 , const XMLCh* const systemId
01475 );
01476
01488 virtual void startInputSource(const InputSource& inputSource);
01490
01491
01494
01504 bool getDoValidation() const;
01505
01519 void setDoValidation(const bool newState);
01521
01522
01523 protected :
01524
01525
01526
01527 SAXParser(const SAXParser&);
01528 void operator=(const SAXParser&);
01529
01530
01531
01532
01533
01534
01535
01536
01537
01538
01539
01540
01541
01542
01543
01544
01545
01546
01547
01548
01549
01550
01551
01552
01553
01554
01555
01556
01557
01558
01559
01560
01561
01562
01563
01564
01565
01566
01567
01568
01569
01570
01571
01572
01573
01574
01575
01576
01577
01578 VecAttrListImpl fAttrList;
01579 DocumentHandler* fDocHandler;
01580 DTDHandler* fDTDHandler;
01581 unsigned int fElemDepth;
01582 EntityResolver* fEntityResolver;
01583 ErrorHandler* fErrorHandler;
01584 unsigned int fAdvDHCount;
01585 XMLDocumentHandler** fAdvDHList;
01586 unsigned int fAdvDHListSize;
01587 bool fParseInProgress;
01588 XMLScanner* fScanner;
01589 };
01590
01591
01592
01593
01594
01595 inline DocumentHandler* SAXParser::getDocumentHandler()
01596 {
01597 return fDocHandler;
01598 }
01599
01600 inline const DocumentHandler* SAXParser::getDocumentHandler() const
01601 {
01602 return fDocHandler;
01603 }
01604
01605 inline EntityResolver* SAXParser::getEntityResolver()
01606 {
01607 return fEntityResolver;
01608 }
01609
01610 inline const EntityResolver* SAXParser::getEntityResolver() const
01611 {
01612 return fEntityResolver;
01613 }
01614
01615 inline ErrorHandler* SAXParser::getErrorHandler()
01616 {
01617 return fErrorHandler;
01618 }
01619
01620 inline const ErrorHandler* SAXParser::getErrorHandler() const
01621 {
01622 return fErrorHandler;
01623 }
01624
01625 inline const XMLScanner& SAXParser::getScanner() const
01626 {
01627 return *fScanner;
01628 }
01629
01630 #endif