source: icXML/icXML-devel/src/icxercesc/internal/DGXMLScanner.hpp @ 2720

Last change on this file since 2720 was 2720, checked in by cameron, 7 years ago

Initial check-in of icXML 0.8 source files

File size: 6.9 KB
Line 
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements.  See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License.  You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18/*
19 * $Id: DGXMLScanner.hpp 810580 2009-09-02 15:52:22Z amassari $
20 */
21
22#if !defined(XERCESC_INCLUDE_GUARD_DGXMLSCANNER_HPP)
23#define XERCESC_INCLUDE_GUARD_DGXMLSCANNER_HPP
24
25#include <xercesc/internal/XMLScanner.hpp>
26#include <xercesc/util/ValueVectorOf.hpp>
27#include <xercesc/util/NameIdPool.hpp>
28#include <xercesc/util/Hash2KeysSetOf.hpp>
29#include <xercesc/validators/common/Grammar.hpp>
30#include <icxmlc/XMLConfig.hpp>
31
32#define DGXML_SCANNER_DEPRECATED
33
34XERCES_CPP_NAMESPACE_BEGIN
35
36class DTDElementDecl;
37class DTDGrammar;
38class DTDValidator;
39
40//  This is an integrated scanner class, which does DTD/XML Schema grammar
41//  processing.
42class XMLPARSER_EXPORT DGXMLScanner : public XMLScanner
43{
44public :
45        // -----------------------------------------------------------------------
46        //  Constructors and Destructor
47        // -----------------------------------------------------------------------
48        DGXMLScanner
49        (
50                  XMLValidator* const  valToAdopt
51                , GrammarResolver* const grammarResolver
52                , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
53        );
54        DGXMLScanner
55        (
56                  XMLDocumentHandler* const docHandler
57                , DocTypeHandler* const     docTypeHandler
58                , XMLEntityHandler* const   entityHandler
59                , XMLErrorReporter* const   errReporter
60                , XMLValidator* const       valToAdopt
61                , GrammarResolver* const    grammarResolver
62                , MemoryManager* const      manager = XMLPlatformUtils::fgMemoryManager
63        );
64        virtual ~DGXMLScanner();
65
66        // -----------------------------------------------------------------------
67        //  XMLScanner public virtual methods
68        // -----------------------------------------------------------------------
69        virtual const XMLCh* getName() const;
70        virtual NameIdPool<DTDEntityDecl>* getEntityDeclPool();
71        virtual const NameIdPool<DTDEntityDecl>* getEntityDeclPool() const;
72        virtual void scanDocument
73        (
74                const   InputSource&    src
75        );
76        virtual bool scanNext(XMLPScanToken& toFill);
77        virtual Grammar* loadGrammar
78        (
79                const   InputSource&    src
80                , const short           grammarType
81                , const bool            toCache = false
82        );
83
84        virtual Grammar::GrammarType getCurrentGrammarType() const;
85
86private :
87        // -----------------------------------------------------------------------
88        //  Unimplemented constructors and operators
89        // -----------------------------------------------------------------------
90        DGXMLScanner();
91        DGXMLScanner(const DGXMLScanner&);
92        DGXMLScanner& operator=(const DGXMLScanner&);
93
94        // -----------------------------------------------------------------------
95        //  XMLScanner virtual methods
96        // -----------------------------------------------------------------------
97        virtual void scanCDSection();
98        virtual void scanCharData(XMLBuffer& toToUse);
99        virtual EntityExpRes scanEntityRef
100        (
101                const   bool    inAttVal
102                ,       XMLCh&  firstCh
103                ,       XMLCh&  secondCh
104                ,       bool&   escaped
105        );
106        virtual void scanDocTypeDecl();
107        virtual void scanReset(const InputSource& src);
108        virtual void sendCharData(XMLBuffer& toSend);
109        virtual InputSource* resolveSystemId(const XMLCh* const sysId
110                                                                                ,const XMLCh* const pubId);
111
112        // -----------------------------------------------------------------------
113        //  Private helper methods
114        // -----------------------------------------------------------------------
115        void commonInit();
116        void cleanUp();
117
118        XMLSize_t buildAttList
119        (
120                const XMLSize_t                     attCount
121                ,       XMLElementDecl*             elemDecl
122                ,       RefVectorOf<XMLAttr>&       toFill
123        );
124        void updateNSMap
125        (
126                const   XMLCh* const attrPrefix
127                , const XMLCh* const attrLocalName
128                , const XMLCh* const attrValue
129        );
130        void scanAttrListforNameSpaces(RefVectorOf<XMLAttr>* theAttrList, XMLSize_t attCount, XMLElementDecl* elemDecl);
131
132        // -----------------------------------------------------------------------
133        //  Private scanning methods
134        // -----------------------------------------------------------------------
135        bool scanAttValue
136        (
137                const   XMLAttDef* const    attDef
138                , const XMLCh *const        attrName
139                ,       XMLBuffer&          toFill
140        );
141        bool scanContent();
142        void scanEndTag(bool& gotData);
143        bool scanStartTag(bool& gotData);
144        bool scanStartTagNS(bool& gotData);
145
146        // -----------------------------------------------------------------------
147        //  Grammar preparsing methods
148        // -----------------------------------------------------------------------
149        Grammar* loadDTDGrammar(const InputSource& src, const bool toCache = false);
150
151        // -----------------------------------------------------------------------
152        //  Data members
153        //
154        //  fRawAttrList
155        //      During the initial scan of the attributes we can only do a raw
156        //      scan for key/value pairs. So this vector is used to store them
157        //      until they can be processed (and put into fAttrList.)
158        //
159        //  fDTDValidator
160        //      The DTD validator instance.
161        //
162        // fDTDElemNonDeclPool
163        //     registry of "faulted-in" DTD element decls
164        // fElemCount
165        //      count of the number of start tags seen so far (starts at 1).
166        //      Used for duplicate attribute detection/processing of required/defaulted attributes
167        // fAttDefRegistry
168        //      mapping from XMLAttDef instances to the count of the last
169        //      start tag where they were utilized.
170        // fUndeclaredAttrRegistry
171        //      mapping of attr QNames to detect duplicates
172        //
173        // -----------------------------------------------------------------------
174        ValueVectorOf<XMLAttr*>*    fAttrNSList;
175        DTDValidator*               fDTDValidator;
176        DTDGrammar*                 fDTDGrammar;
177        NameIdPool<DTDElementDecl>* fDTDElemNonDeclPool;
178        unsigned int                fElemCount;
179        RefHashTableOf<unsigned int, PtrHasher>* fAttDefRegistry;
180        Hash2KeysSetOf<StringHasher>*            fUndeclaredAttrRegistry;
181
182#ifdef MOVE_BUFFERS_OUT_OF_XMLSCANNER
183        XMLBuffer                   fAttNameBuf;
184        XMLBuffer                   fAttValueBuf;
185        XMLBuffer                   fCDataBuf;
186        XMLBuffer                   fQNameBuf;
187        XMLBuffer                   fPrefixBuf;
188        XMLBuffer                   fURIBuf;
189        XMLBuffer                   fWSNormalizeBuf;
190#endif
191};
192
193inline const XMLCh* DGXMLScanner::getName() const
194{
195        return XMLUni::fgDGXMLScanner;
196}
197
198inline Grammar::GrammarType DGXMLScanner::getCurrentGrammarType() const
199{
200        return Grammar::DTDGrammarType;
201}
202
203XERCES_CPP_NAMESPACE_END
204
205#endif
Note: See TracBrowser for help on using the repository browser.