--- /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