⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dtdscanner.hpp

📁 开源xml解析库,非常有名
💻 HPP
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* * $Id: DTDScanner.hpp 568078 2007-08-21 11:43:25Z amassari $ */#if !defined(DTDSCANNER_HPP)#define DTDSCANNER_HPP#include <xercesc/validators/DTD/DTDGrammar.hpp>#include <xercesc/validators/DTD/DTDEntityDecl.hpp>XERCES_CPP_NAMESPACE_BEGINclass XMLScanner;/* * Default implementation of an XML DTD scanner. */class DocTypeHandler;class VALIDATORS_EXPORT DTDScanner : public XMemory{public:    // -----------------------------------------------------------------------    //  Class specific types    //    //  EntityExpRes    //      Returned from scanEntityRef() to indicate how the expanded text    //      was treated.    //    //  IDTypes    //      Type of the ID    // -----------------------------------------------------------------------    enum EntityExpRes    {        EntityExp_Failed        , EntityExp_Pushed        , EntityExp_Returned    };    enum IDTypes    {        IDType_Public        , IDType_External        , IDType_Either    };    // -----------------------------------------------------------------------    //  Constructors and Destructor    // -----------------------------------------------------------------------    DTDScanner    (          DTDGrammar*           dtdGrammar        , DocTypeHandler* const docTypeHandler        , MemoryManager* const  grammarPoolMemoryManager        , MemoryManager* const  manager = XMLPlatformUtils::fgMemoryManager    );    virtual ~DTDScanner();    // -----------------------------------------------------------------------    //  Getter methods    // -----------------------------------------------------------------------    DocTypeHandler* getDocTypeHandler();    const DocTypeHandler* getDocTypeHandler() const;    // -----------------------------------------------------------------------    //  Setter methods    //    //  setScannerInfo() is called by the scanner to tell the DTDScanner    //  about the stuff it needs to have access to.    // -----------------------------------------------------------------------    void setScannerInfo    (        XMLScanner* const           owningScanner        , ReaderMgr* const          readerMgr        , XMLBufferMgr* const       bufMgr    );    void setDocTypeHandler    (            DocTypeHandler* const handlerToSet    );    void scanExtSubsetDecl(const bool inIncludeSect, const bool isDTD);    bool scanInternalSubset();    bool scanId    (                XMLBuffer&  pubIdToFill        ,       XMLBuffer&  sysIdToFill        , const IDTypes     whatKind    );private:    // -----------------------------------------------------------------------    // Unimplemented constructors and operators    // -----------------------------------------------------------------------    DTDScanner(const DTDScanner &);    DTDScanner& operator = (const  DTDScanner&);    // -----------------------------------------------------------------------    //  Private DTD scanning methods. These are all in XMLValidator2.cpp    // -----------------------------------------------------------------------    bool checkForPERef    (          const bool    inLiteral        , const bool    inMarkup    );    bool expandPERef    (        const   bool    scanExternal        , const bool    inLiteral        , const bool    inMarkup        , const bool    throwEndOfExt = false    );    bool getQuotedString(XMLBuffer& toFill);    XMLAttDef* scanAttDef(DTDElementDecl& elemDecl, XMLBuffer& bufToUse);    bool scanAttValue    (        const   XMLCh* const        attrName        ,       XMLBuffer&          toFill        , const XMLAttDef::AttTypes type    );    void scanAttListDecl();    ContentSpecNode* scanChildren    (        const   DTDElementDecl&     elemDecl        ,       XMLBuffer&          bufToUse    );    bool scanCharRef(XMLCh& toFill, XMLCh& second);    void scanComment();    bool scanContentSpec(DTDElementDecl& toFill);    void scanDefaultDecl(DTDAttDef& toFill);    void scanElementDecl();    void scanEntityDecl();    bool scanEntityDef();    bool scanEntityLiteral(XMLBuffer& toFill);    bool scanEntityDef(DTDEntityDecl& decl, const bool isPEDecl);    EntityExpRes scanEntityRef(XMLCh& firstCh, XMLCh& secondCh, bool& escaped);    bool scanEnumeration    (        const   DTDAttDef&  attDef        ,       XMLBuffer&  toFill        , const bool        notation    );    bool scanEq();    void scanIgnoredSection();    void scanMarkupDecl(const bool parseTextDecl);    bool scanMixed(DTDElementDecl& toFill);    void scanNotationDecl();    void scanPI();    bool scanPublicLiteral(XMLBuffer& toFill);    bool scanSystemLiteral(XMLBuffer& toFill);    void scanTextDecl();    bool isReadingExternalEntity();    // -----------------------------------------------------------------------    //  Private data members    //    //  fDocTypeHandler    //      This holds the optional doc type handler that can be installed    //      and used to call back for all markup events. It is DTD specific.    //    //  fDumAttDef    //  fDumElemDecl    //  fDumEntityDecl    //      These are dummy objects into which mark decls are parsed when    //      they are just overrides of previously declared markup decls. In    //      such situations, the first one wins but we need to have somewhere    //      to parse them into. So these are lazily created and used as needed    //      when such markup decls are seen.    //    //  fInternalSubset    //      This is used to track whether we are in the internal subset or not,    //      in which case we are in the external subset.    //    //  fNextAttrId    //      Since att defs are per-element, we don't have a validator wide    //      attribute def pool. So we use a simpler data structure in each    //      element decl to store its att defs, and we use this simple counter    //      to apply a unique id to each new attribute.    //    //  fDTDGrammar    //      The DTD information we scanned like element decl, attribute decl    //      are stored in this Grammar.    //    //  fBufMgr    //      This is the buffer manager of the scanner. This is provided as a    //      convenience so that the DTDScanner doesn't have to create its own    //      buffer manager during the parse process.    //    //  fReaderMgr    //      This is a pointer to the reader manager that is being used by the scanner.    //    //  fScanner    //      The pointer to the scanner to which this DTDScanner belongs    //    //  fPEntityDeclPool    //      This is a pool of EntityDecl objects, which contains all of the    //      parameter entities that are declared in the DTD subsets.    //    //  fEmptyNamespaceId    //      The uri for all DTD decls    //    //  fDocTypeReaderId    //      The original reader in the fReaderMgr - to be compared against the    //      current reader to decide whether we are processing an external/internal    //      declaration    // -----------------------------------------------------------------------    MemoryManager*                  fMemoryManager;    MemoryManager*                  fGrammarPoolMemoryManager;    DocTypeHandler*                 fDocTypeHandler;    DTDAttDef*                      fDumAttDef;    DTDElementDecl*                 fDumElemDecl;    DTDEntityDecl*                  fDumEntityDecl;    bool                            fInternalSubset;    unsigned int                    fNextAttrId;    DTDGrammar*                     fDTDGrammar;    XMLBufferMgr*                   fBufMgr;    ReaderMgr*                      fReaderMgr;    XMLScanner*                     fScanner;    NameIdPool<DTDEntityDecl>*      fPEntityDeclPool;    unsigned int                    fEmptyNamespaceId;    unsigned int                    fDocTypeReaderId;};// ---------------------------------------------------------------------------//  DTDScanner: Getter methods// ---------------------------------------------------------------------------inline DocTypeHandler* DTDScanner::getDocTypeHandler(){    return fDocTypeHandler;}inline const DocTypeHandler* DTDScanner::getDocTypeHandler() const{    return fDocTypeHandler;}// ---------------------------------------------------------------------------//  DTDScanner: Setter methods// ---------------------------------------------------------------------------inline void DTDScanner::setDocTypeHandler(DocTypeHandler* const handlerToSet){    fDocTypeHandler = handlerToSet;}// -----------------------------------------------------------------------//  Helper methods// -----------------------------------------------------------------------inline bool DTDScanner::isReadingExternalEntity() {    return (fDocTypeReaderId != fReaderMgr->getCurrentReaderNum());}XERCES_CPP_NAMESPACE_END#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -