00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #if !defined(ABSTRACTDOMPARSER_HPP)
00023 #define ABSTRACTDOMPARSER_HPP
00024
00025 #include <xercesc/dom/DOMDocument.hpp>
00026 #include <xercesc/framework/XMLDocumentHandler.hpp>
00027 #include <xercesc/framework/XMLErrorReporter.hpp>
00028 #include <xercesc/framework/XMLEntityHandler.hpp>
00029 #include <xercesc/util/SecurityManager.hpp>
00030 #include <xercesc/util/ValueStackOf.hpp>
00031 #include <xercesc/validators/DTD/DocTypeHandler.hpp>
00032 #include <xercesc/dom/DOMDocumentType.hpp>
00033 #include <xercesc/validators/DTD/DTDElementDecl.hpp>
00034 #include <xercesc/framework/XMLBufferMgr.hpp>
00035 #include <xercesc/framework/psvi/PSVIHandler.hpp>
00036
00037 XERCES_CPP_NAMESPACE_BEGIN
00038
00039 class XMLPScanToken;
00040 class XMLScanner;
00041 class XMLValidator;
00042 class DOMDocumentImpl;
00043 class DOMDocumentTypeImpl;
00044 class DOMElement;
00045 class GrammarResolver;
00046 class XMLGrammarPool;
00047 class PSVIHandler;
00048
00053 class AbstractDOMParser :
00054
00055 public XMemory
00056 , public XMLDocumentHandler
00057 , public XMLErrorReporter
00058 , public XMLEntityHandler
00059 , public DocTypeHandler
00060 , public PSVIHandler
00061 {
00062 public :
00063
00064
00065
00068
00076 enum ValSchemes
00077 {
00078 Val_Never
00079 , Val_Always
00080 , Val_Auto
00081 };
00082
00084
00085
00086
00087
00088
00091
00095 virtual ~AbstractDOMParser();
00096
00098
00099
00100
00101
00102
00110 void reset();
00111
00125 DOMDocument* adoptDocument();
00126
00128
00129
00130
00131
00132
00133
00136
00148 DOMDocument* getDocument();
00149
00157 const XMLValidator& getValidator() const;
00158
00166 ValSchemes getValidationScheme() const;
00167
00178 bool getDoSchema() const;
00179
00190 bool getValidationSchemaFullChecking() const;
00191
00202 bool getIdentityConstraintChecking() const;
00203
00215 int getErrorCount() const;
00216
00227 bool getDoNamespaces() const;
00228
00241 bool getExitOnFirstFatalError() const;
00242
00253 bool getValidationConstraintFatal() const;
00254
00264 bool getCreateEntityReferenceNodes()const;
00265
00276 bool getIncludeIgnorableWhitespace() const;
00277
00297 XMLCh* getExternalSchemaLocation() const;
00298
00318 XMLCh* getExternalNoNamespaceSchemaLocation() const;
00319
00335 SecurityManager* getSecurityManager() const;
00336
00348 bool getLoadExternalDTD() const;
00349
00358 bool getCreateCommentNodes()const;
00359
00371 bool getCalculateSrcOfs() const;
00372
00383 bool getStandardUriConformant() const;
00384
00391 PSVIHandler* getPSVIHandler();
00392
00399 const PSVIHandler* getPSVIHandler() const;
00400
00410 bool getCreateSchemaInfo() const;
00411
00423 bool getGenerateSyntheticAnnotations() const;
00424
00432 bool getValidateAnnotations() const;
00433
00441 bool getIgnoreAnnotations() const;
00442
00450 bool getDisableDefaultEntityResolution() const;
00451
00459 bool getSkipDTDValidation() const;
00460
00462
00463
00464
00465
00466
00467
00481 void setGenerateSyntheticAnnotations(const bool newValue);
00482
00490 void setValidateAnnotations(const bool newValue);
00491
00506 void setDoNamespaces(const bool newState);
00507
00524 void setExitOnFirstFatalError(const bool newState);
00525
00545 void setValidationConstraintFatal(const bool newState);
00546
00565 void setCreateEntityReferenceNodes(const bool create);
00566
00588 void setIncludeIgnorableWhitespace(const bool include);
00589
00606 void setValidationScheme(const ValSchemes newScheme);
00607
00623 void setDoSchema(const bool newState);
00624
00641 void setValidationSchemaFullChecking(const bool schemaFullChecking);
00642
00656 void setIdentityConstraintChecking(const bool newState);
00657
00678 void setExternalSchemaLocation(const XMLCh* const schemaLocation);
00679
00688 void setExternalSchemaLocation(const char* const schemaLocation);
00689
00704 void setExternalNoNamespaceSchemaLocation(const XMLCh* const noNamespaceSchemaLocation);
00705
00714 void setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation);
00715
00731 void setSecurityManager(SecurityManager* const securityManager);
00732
00749 void setLoadExternalDTD(const bool newState);
00750
00761 void setCreateCommentNodes(const bool create);
00762
00775 void setCalculateSrcOfs(const bool newState);
00776
00787 void setStandardUriConformant(const bool newState);
00788
00796 void useScanner(const XMLCh* const scannerName);
00797
00805 void useImplementation(const XMLCh* const implementationFeatures);
00806
00815 virtual void setPSVIHandler(PSVIHandler* const handler);
00816
00826 void setCreateSchemaInfo(const bool newState);
00827
00837 void setIgnoreAnnotations(const bool newValue);
00838
00853 void setDisableDefaultEntityResolution(const bool newValue);
00854
00867 void setSkipDTDValidation(const bool newValue);
00869
00870
00871
00872
00873
00874
00877
00893 void parse(const InputSource& source);
00894
00911 void parse(const XMLCh* const systemId);
00912
00928 void parse(const char* const systemId);
00929
00956 bool parseFirst
00957 (
00958 const XMLCh* const systemId
00959 , XMLPScanToken& toFill
00960 );
00961
00989 bool parseFirst
00990 (
00991 const char* const systemId
00992 , XMLPScanToken& toFill
00993 );
00994
01022 bool parseFirst
01023 (
01024 const InputSource& source
01025 , XMLPScanToken& toFill
01026 );
01027
01050 bool parseNext(XMLPScanToken& token);
01051
01077 void parseReset(XMLPScanToken& token);
01078
01080
01081
01082
01083
01084
01087
01098 virtual void handleElementPSVI
01099 (
01100 const XMLCh* const localName
01101 , const XMLCh* const uri
01102 , PSVIElement * elementInfo
01103 );
01104
01105 virtual void handlePartialElementPSVI
01106 (
01107 const XMLCh* const localName
01108 , const XMLCh* const uri
01109 , PSVIElement * elementInfo
01110 );
01122 virtual void handleAttributesPSVI
01123 (
01124 const XMLCh* const localName
01125 , const XMLCh* const uri
01126 , PSVIAttributeList * psviAttributes
01127 );
01129
01130
01131
01132
01133
01136
01149 virtual void docCharacters
01150 (
01151 const XMLCh* const chars
01152 , const unsigned int length
01153 , const bool cdataSection
01154 );
01155
01164 virtual void docComment
01165 (
01166 const XMLCh* const comment
01167 );
01168
01181 virtual void docPI
01182 (
01183 const XMLCh* const target
01184 , const XMLCh* const data
01185 );
01186
01191 virtual void endDocument();
01192
01209 virtual void endElement
01210 (
01211 const XMLElementDecl& elemDecl
01212 , const unsigned int urlId
01213 , const bool isRoot
01214 , const XMLCh* const elemPrefix
01215 );
01216
01225 virtual void endEntityReference
01226 (
01227 const XMLEntityDecl& entDecl
01228 );
01229
01248 virtual void ignorableWhitespace
01249 (
01250 const XMLCh* const chars
01251 , const unsigned int length
01252 , const bool cdataSection
01253 );
01254
01261 virtual void resetDocument();
01262
01267 virtual void startDocument();
01268
01296 virtual void startElement
01297 (
01298 const XMLElementDecl& elemDecl
01299 , const unsigned int urlId
01300 , const XMLCh* const elemPrefix
01301 , const RefVectorOf<XMLAttr>& attrList
01302 , const unsigned int attrCount
01303 , const bool isEmpty
01304 , const bool isRoot
01305 );
01306
01316 virtual void startEntityReference
01317 (
01318 const XMLEntityDecl& entDecl
01319 );
01320
01339 virtual void XMLDecl
01340 (
01341 const XMLCh* const versionStr
01342 , const XMLCh* const encodingStr
01343 , const XMLCh* const standaloneStr
01344 , const XMLCh* const actualEncStr
01345 );
01346
01366 virtual void elementTypeInfo
01367 (
01368 const XMLCh* const typeName
01369 , const XMLCh* const typeURI
01370 );
01372
01373
01374
01375
01376
01379 virtual void attDef
01380 (
01381 const DTDElementDecl& elemDecl
01382 , const DTDAttDef& attDef
01383 , const bool ignoring
01384 );
01385
01386 virtual void doctypeComment
01387 (
01388 const XMLCh* const comment
01389 );
01390
01391 virtual void doctypeDecl
01392 (
01393 const DTDElementDecl& elemDecl
01394 , const XMLCh* const publicId
01395 , const XMLCh* const systemId
01396 , const bool hasIntSubset
01397 , const bool hasExtSubset = false
01398 );
01399
01400 virtual void doctypePI
01401 (
01402 const XMLCh* const target
01403 , const XMLCh* const data
01404 );
01405
01406 virtual void doctypeWhitespace
01407 (
01408 const XMLCh* const chars
01409 , const unsigned int length
01410 );
01411
01412 virtual void elementDecl
01413 (
01414 const DTDElementDecl& decl
01415 , const bool isIgnored
01416 );
01417
01418 virtual void endAttList
01419 (
01420 const DTDElementDecl& elemDecl
01421 );
01422
01423 virtual void endIntSubset();
01424
01425 virtual void endExtSubset();
01426
01427 virtual void entityDecl
01428 (
01429 const DTDEntityDecl& entityDecl
01430 , const bool isPEDecl
01431 , const bool isIgnored
01432 );
01433
01434 virtual void resetDocType();
01435
01436 virtual void notationDecl
01437 (
01438 const XMLNotationDecl& notDecl
01439 , const bool isIgnored
01440 );
01441
01442 virtual void startAttList
01443 (
01444 const DTDElementDecl& elemDecl
01445 );
01446
01447 virtual void startIntSubset();
01448
01449 virtual void startExtSubset();
01450
01451 virtual void TextDecl
01452 (
01453 const XMLCh* const versionStr
01454 , const XMLCh* const encodingStr
01455 );
01456
01457
01459
01460
01461
01462
01463
01476 bool getDoValidation() const;
01477
01491 void setDoValidation(const bool newState);
01492
01506 bool getExpandEntityReferences() const;
01507
01524 void setExpandEntityReferences(const bool expand);
01525
01527
01528 protected :
01529
01530
01531
01550 AbstractDOMParser
01551 (
01552 XMLValidator* const valToAdopt = 0
01553 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
01554 , XMLGrammarPool* const gramPool = 0
01555 );
01556
01558
01559
01560
01561
01569 DOMNode* getCurrentNode();
01570
01575 XMLScanner* getScanner() const;
01576
01581 GrammarResolver* getGrammarResolver() const;
01582
01588 bool getParseInProgress() const;
01589
01590 MemoryManager* getMemoryManager() const;
01591
01593
01594
01595
01596
01597
01598
01601
01609 void setCurrentNode(DOMNode* toSet);
01610
01617 void setDocument(DOMDocument* toSet);
01618
01625 void setParseInProgress(const bool toSet);
01627
01628
01629
01630
01633 virtual DOMElement* createElementNSNode(const XMLCh *fNamespaceURI,
01634 const XMLCh *qualifiedName);
01635
01636 void resetPool();
01637
01641 bool isDocumentAdopted() const;
01642
01644
01645
01646 private :
01647
01648
01649
01650 void initialize();
01651 void cleanUp();
01652 void resetInProgress();
01653
01654
01655
01656
01657 AbstractDOMParser(const AbstractDOMParser&);
01658 AbstractDOMParser& operator=(const AbstractDOMParser&);
01659
01660 protected:
01661
01662
01663
01664
01665
01666
01667
01668
01669
01670
01671
01672
01673
01674
01675
01676
01677
01678
01679
01680
01681
01682
01683
01684
01685
01686
01687
01688
01689
01690
01691
01692
01693
01694
01695
01696
01697
01698
01699
01700
01701
01702
01703
01704
01705
01706
01707
01708
01709
01710
01711
01712
01713
01714
01715
01716
01717
01718
01719
01720
01721
01722
01723
01724
01725
01726
01727
01728
01729
01730
01731
01732
01733 bool fCreateEntityReferenceNodes;
01734 bool fIncludeIgnorableWhitespace;
01735 bool fWithinElement;
01736 bool fParseInProgress;
01737 bool fCreateCommentNodes;
01738 bool fDocumentAdoptedByUser;
01739 bool fCreateSchemaInfo;
01740 XMLScanner* fScanner;
01741 XMLCh* fImplementationFeatures;
01742 DOMNode* fCurrentParent;
01743 DOMNode* fCurrentNode;
01744 DOMEntity* fCurrentEntity;
01745 DOMDocumentImpl* fDocument;
01746 ValueStackOf<DOMNode*>* fNodeStack;
01747 DOMDocumentTypeImpl* fDocumentType;
01748 RefVectorOf<DOMDocumentImpl>* fDocumentVector;
01749 GrammarResolver* fGrammarResolver;
01750 XMLStringPool* fURIStringPool;
01751 XMLValidator* fValidator;
01752 MemoryManager* fMemoryManager;
01753 XMLGrammarPool* fGrammarPool;
01754 XMLBufferMgr fBufMgr;
01755 XMLBuffer& fInternalSubset;
01756 PSVIHandler* fPSVIHandler;
01757 };
01758
01759
01760
01761
01762
01763
01764 inline bool AbstractDOMParser::getExpandEntityReferences() const
01765 {
01766 return !fCreateEntityReferenceNodes;
01767 }
01768 inline bool AbstractDOMParser::getCreateEntityReferenceNodes() const
01769 {
01770 return fCreateEntityReferenceNodes;
01771 }
01772
01773 inline bool AbstractDOMParser::getIncludeIgnorableWhitespace() const
01774 {
01775 return fIncludeIgnorableWhitespace;
01776 }
01777
01778 inline bool AbstractDOMParser::getParseInProgress() const
01779 {
01780 return fParseInProgress;
01781 }
01782
01783 inline XMLScanner* AbstractDOMParser::getScanner() const
01784 {
01785 return fScanner;
01786 }
01787
01788 inline GrammarResolver* AbstractDOMParser::getGrammarResolver() const
01789 {
01790 return fGrammarResolver;
01791 }
01792
01793 inline bool AbstractDOMParser::getCreateCommentNodes() const
01794 {
01795 return fCreateCommentNodes;
01796 }
01797
01798 inline PSVIHandler* AbstractDOMParser::getPSVIHandler()
01799 {
01800 return fPSVIHandler;
01801 }
01802
01803 inline const PSVIHandler* AbstractDOMParser::getPSVIHandler() const
01804 {
01805 return fPSVIHandler;
01806 }
01807
01808 inline bool AbstractDOMParser::getCreateSchemaInfo() const
01809 {
01810 return fCreateSchemaInfo;
01811 }
01812
01813
01814
01815 inline void AbstractDOMParser::setExpandEntityReferences(const bool expand)
01816 {
01817 fCreateEntityReferenceNodes = !expand;
01818 }
01819
01820 inline void AbstractDOMParser::setCreateEntityReferenceNodes(const bool create)
01821 {
01822 fCreateEntityReferenceNodes = create;
01823 }
01824
01825 inline void AbstractDOMParser::setIncludeIgnorableWhitespace(const bool include)
01826 {
01827 fIncludeIgnorableWhitespace = include;
01828 }
01829
01830 inline void AbstractDOMParser::setCreateCommentNodes(const bool create)
01831 {
01832 fCreateCommentNodes = create;
01833 }
01834
01835 inline void AbstractDOMParser::useImplementation(const XMLCh* const implementationFeatures)
01836 {
01837 fMemoryManager->deallocate(fImplementationFeatures);
01838 fImplementationFeatures = XMLString::replicate(implementationFeatures, fMemoryManager);
01839 }
01840
01841
01842
01843
01844 inline DOMNode* AbstractDOMParser::getCurrentNode()
01845 {
01846 return fCurrentNode;
01847 }
01848
01849 inline MemoryManager* AbstractDOMParser::getMemoryManager() const
01850 {
01851 return fMemoryManager;
01852 }
01853
01854
01855
01856
01857 inline void AbstractDOMParser::setCurrentNode(DOMNode* toSet)
01858 {
01859 fCurrentNode = toSet;
01860 }
01861
01862 inline void AbstractDOMParser::setParseInProgress(const bool toSet)
01863 {
01864 fParseInProgress = toSet;
01865 }
01866
01867 XERCES_CPP_NAMESPACE_END
01868
01869 #endif
01870
01871
01872