secureswitools/swisistools/source/xmlparser/xerces/include/xercesc/internal/SGXMLScanner.hpp
changeset 3 127731b7107d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/xmlparser/xerces/include/xercesc/internal/SGXMLScanner.hpp	Fri Jan 22 09:56:12 2010 +0200
@@ -0,0 +1,321 @@
+/*
+ * 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: SGXMLScanner.hpp 568078 2007-08-21 11:43:25Z amassari $
+ */
+
+
+#if !defined(SGXMLSCANNER_HPP)
+#define SGXMLSCANNER_HPP
+
+#include <xercesc/internal/XMLScanner.hpp>
+#include <xercesc/util/KVStringPair.hpp>
+#include <xercesc/util/ValueHashTableOf.hpp>
+#include <xercesc/util/RefHash3KeysIdPool.hpp>
+#include <xercesc/validators/common/Grammar.hpp>
+#include <xercesc/validators/schema/SchemaElementDecl.hpp>
+
+
+XERCES_CPP_NAMESPACE_BEGIN
+
+class SchemaGrammar;
+class SchemaValidator;
+class IdentityConstraintHandler;
+class IdentityConstraint;
+class ContentLeafNameTypeVector;
+class SchemaAttDef;
+class XMLContentModel;
+class XSModel;
+class PSVIAttributeList;
+class PSVIElement;
+
+//  This is a scanner class, which process XML Schema grammar.
+class XMLPARSER_EXPORT SGXMLScanner : public XMLScanner
+{
+public :
+    // -----------------------------------------------------------------------
+    //  Constructors and Destructor
+    // -----------------------------------------------------------------------
+    SGXMLScanner
+    (
+        XMLValidator* const       valToAdopt
+        , GrammarResolver* const grammarResolver
+        , MemoryManager* const    manager = XMLPlatformUtils::fgMemoryManager
+    );
+    SGXMLScanner
+    (
+        XMLDocumentHandler* const docHandler
+        , DocTypeHandler* const   docTypeHandler
+        , XMLEntityHandler* const entityHandler
+        , XMLErrorReporter* const errReporter
+        , XMLValidator* const     valToAdopt
+        , GrammarResolver* const  grammarResolver
+        , MemoryManager* const    manager = XMLPlatformUtils::fgMemoryManager
+    );
+    virtual ~SGXMLScanner();
+
+    // -----------------------------------------------------------------------
+    //  XMLScanner public virtual methods
+    // -----------------------------------------------------------------------
+    virtual const XMLCh* getName() const;
+    virtual NameIdPool<DTDEntityDecl>* getEntityDeclPool();
+    virtual const NameIdPool<DTDEntityDecl>* getEntityDeclPool() const;
+    virtual unsigned int resolveQName
+    (
+        const   XMLCh* const        qName
+        ,       XMLBuffer&          prefixBufToFill
+        , const short               mode
+        ,       int&                prefixColonPos
+    );
+    virtual void scanDocument
+    (
+        const   InputSource&    src
+    );
+    virtual bool scanNext(XMLPScanToken& toFill);
+    virtual Grammar* loadGrammar
+    (
+        const   InputSource&    src
+        , const short           grammarType
+        , const bool            toCache = false
+    );
+    virtual Grammar::GrammarType getCurrentGrammarType() const;
+
+protected:
+    // -----------------------------------------------------------------------
+    //  XMLScanner virtual methods
+    // -----------------------------------------------------------------------
+    virtual void scanReset(const InputSource& src);
+
+    // -----------------------------------------------------------------------
+    //  SGXMLScanner virtual methods
+    // -----------------------------------------------------------------------
+    virtual bool scanStartTag(bool& gotData);
+    virtual void scanEndTag(bool& gotData);
+
+    // -----------------------------------------------------------------------
+    //  Helper methods
+    // -----------------------------------------------------------------------
+    unsigned int buildAttList
+    (
+        const   RefVectorOf<KVStringPair>&  providedAttrs
+        , const unsigned int                attCount
+        ,       XMLElementDecl*             elemDecl
+        ,       RefVectorOf<XMLAttr>&       toFill
+    );
+    bool laxElementValidation(QName* element, ContentLeafNameTypeVector* cv,
+                              const XMLContentModel* const cm,
+                              const unsigned int parentElemDepth);
+    unsigned int rawAttrScan
+    (
+        const   XMLCh* const                elemName
+        ,       RefVectorOf<KVStringPair>&  toFill
+        ,       bool&                       isEmpty
+    );
+    void updateNSMap
+    (
+        const   XMLCh* const    attrName
+        , const XMLCh* const    attrValue
+    );
+    unsigned int resolvePrefix
+    (
+        const   XMLCh* const        prefix
+        , const ElemStack::MapModes mode
+    );
+    void resizeElemState();
+
+    void updateNSMap
+    (
+        const   XMLCh* const    attrName
+        , const XMLCh* const    attrValue
+        , const int             colonPosition
+    );
+    void resizeRawAttrColonList();
+    unsigned int resolveQNameWithColon
+    (
+        const   XMLCh* const        qName
+        ,       XMLBuffer&          prefixBufToFill
+        , const short               mode
+        , const int                 prefixColonPos
+    );
+    // -----------------------------------------------------------------------
+    //  Data members
+    //
+    //  fRawAttrList
+    //      During the initial scan of the attributes we can only do a raw
+    //      scan for key/value pairs. So this vector is used to store them
+    //      until they can be processed (and put into fAttrList.)
+    //
+    //  fSchemaValidator
+    //      The Schema validator instance.
+    //
+    //  fSeeXsi
+    //      This flag indicates a schema has been seen.
+    //
+    //  fElemState
+    //  fElemStateSize
+    //      Stores an element next state from DFA content model - used for
+    //      wildcard validation
+    //
+    // fElemNonDeclPool
+    //      registry for elements without decls in the grammar
+    // fElemCount
+    //      count of the number of start tags seen so far (starts at 1).
+    //      Used for duplicate attribute detection/processing of required/defaulted attributes
+    // fAttDefRegistry
+    //      mapping from XMLAttDef instances to the count of the last
+    //      start tag where they were utilized.
+    // fUndeclaredAttrRegistryNS
+    //      mapping of namespaceId/localName pairs to the count of the last
+    //      start tag in which they occurred.
+    //  fPSVIAttrList
+    //      PSVI attribute list implementation that needs to be
+    //      filled when a PSVIHandler is registered
+    //
+    // -----------------------------------------------------------------------
+    bool                                    fSeeXsi;
+    Grammar::GrammarType                    fGrammarType;
+    unsigned int                            fElemStateSize;
+    unsigned int*                           fElemState;
+    XMLBuffer                               fContent;
+    ValueHashTableOf<XMLCh>*                fEntityTable;
+    RefVectorOf<KVStringPair>*              fRawAttrList;
+    unsigned int                            fRawAttrColonListSize;
+    int*                                    fRawAttrColonList;
+    SchemaGrammar*                          fSchemaGrammar;
+    SchemaValidator*                        fSchemaValidator;
+    IdentityConstraintHandler*              fICHandler;
+    RefHash3KeysIdPool<SchemaElementDecl>*  fElemNonDeclPool;
+    unsigned int                            fElemCount;
+    RefHashTableOf<unsigned int>*           fAttDefRegistry;
+    RefHash2KeysTableOf<unsigned int>*      fUndeclaredAttrRegistryNS;
+    PSVIAttributeList *                     fPSVIAttrList;
+    XSModel*                                fModel;
+    PSVIElement*                            fPSVIElement;
+    ValueStackOf<bool>*                     fErrorStack;
+    PSVIElemContext                         fPSVIElemContext;
+
+private :
+    // -----------------------------------------------------------------------
+    //  Unimplemented constructors and operators
+    // -----------------------------------------------------------------------
+    SGXMLScanner();
+    SGXMLScanner(const SGXMLScanner&);
+    SGXMLScanner& operator=(const SGXMLScanner&);
+
+    // -----------------------------------------------------------------------
+    //  XMLScanner virtual methods
+    // -----------------------------------------------------------------------
+    virtual void scanCDSection();
+    virtual void scanCharData(XMLBuffer& toToUse);
+    virtual EntityExpRes scanEntityRef
+    (
+        const   bool    inAttVal
+        ,       XMLCh&  firstCh
+        ,       XMLCh&  secondCh
+        ,       bool&   escaped
+    );
+    virtual void scanDocTypeDecl();
+    virtual void sendCharData(XMLBuffer& toSend);
+    virtual InputSource* resolveSystemId(const XMLCh* const sysId
+                                        ,const XMLCh* const pubId);
+
+    // -----------------------------------------------------------------------
+    //  Private helper methods
+    // -----------------------------------------------------------------------
+    void commonInit();
+    void cleanUp();
+
+    bool normalizeAttValue
+    (
+        const   XMLAttDef* const    attDef
+        , const XMLCh* const        attrName 
+        , const XMLCh* const        value
+        ,       XMLBuffer&          toFill
+    );
+    bool normalizeAttRawValue
+    (
+        const   XMLCh* const        attrName
+        , const XMLCh* const        value
+        ,       XMLBuffer&          toFill
+    );
+    unsigned int resolvePrefix
+    (
+        const   XMLCh* const        prefix
+        ,       XMLBuffer&          uriBufToFill
+        , const ElemStack::MapModes mode
+    );
+    void scanRawAttrListforNameSpaces(int attCount);
+    void parseSchemaLocation(const XMLCh* const schemaLocationStr);
+    void resolveSchemaGrammar(const XMLCh* const loc, const XMLCh* const uri);
+    bool switchGrammar(const XMLCh* const newGrammarNameSpace);
+    bool anyAttributeValidation(SchemaAttDef* attWildCard,
+                                unsigned int uriId,
+                                bool& skipThisOne,
+                                bool& laxThisOne);
+
+    // -----------------------------------------------------------------------
+    //  Private scanning methods
+    // -----------------------------------------------------------------------
+    bool basicAttrValueScan
+    (
+        const   XMLCh* const    attrName
+        ,       XMLBuffer&      toFill
+    );
+    bool scanAttValue
+    (
+        const   XMLAttDef* const    attDef
+        ,       XMLBuffer&          toFill
+    );
+    bool scanContent();
+
+    // -----------------------------------------------------------------------
+    //  IdentityConstraints Activation methods
+    // -----------------------------------------------------------------------
+    inline bool toCheckIdentityConstraint()  const;
+
+    // -----------------------------------------------------------------------
+    //  Grammar preparsing methods
+    // -----------------------------------------------------------------------
+    Grammar* loadXMLSchemaGrammar(const InputSource& src, const bool toCache = false);
+
+    // -----------------------------------------------------------------------
+    //  PSVI handling methods
+    // -----------------------------------------------------------------------
+    void endElementPSVI(SchemaElementDecl* const elemDecl,
+                        DatatypeValidator* const memberDV);
+    void resetPSVIElemContext();
+};
+
+inline const XMLCh* SGXMLScanner::getName() const
+{
+    return XMLUni::fgSGXMLScanner;
+}
+
+inline bool SGXMLScanner::toCheckIdentityConstraint()  const
+{
+    return fValidate && fIdentityConstraintChecking && fICHandler;
+}
+
+inline Grammar::GrammarType SGXMLScanner::getCurrentGrammarType() const
+{
+    return fGrammarType;
+}
+
+XERCES_CPP_NAMESPACE_END
+
+#endif