knoaman     2003/11/28 11:54:32

  Modified:    c/src/xercesc/internal XMLScanner.hpp SGXMLScanner.hpp
                        SGXMLScanner.cpp IGXMLScanner2.cpp IGXMLScanner.hpp
                        IGXMLScanner.cpp
  Log:
  PSVIElement update
  
  Revision  Changes    Path
  1.30      +3 -4      xml-xerces/c/src/xercesc/internal/XMLScanner.hpp
  
  Index: XMLScanner.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XMLScanner.hpp,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- XMLScanner.hpp    27 Nov 2003 22:52:37 -0000      1.29
  +++ XMLScanner.hpp    28 Nov 2003 19:54:31 -0000      1.30
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.30  2003/11/28 19:54:31  knoaman
  + * PSVIElement update
  + *
    * Revision 1.29  2003/11/27 22:52:37  knoaman
    * PSVIElement implementation
    *
  @@ -328,15 +331,11 @@
   {
       bool               fIsSpecified;
       bool               fErrorOccurred;
  -    bool               fPreviousError;
       int                fElemDepth;
       int                fFullValidationDepth;
       int                fNoneValidationDepth;
  -    const XMLCh*       fValidationRoot;
       DatatypeValidator* fCurrentDV;
  -    DatatypeValidator* fPreviousDV;
       ComplexTypeInfo*   fCurrentTypeInfo;
  -    ComplexTypeInfo*   fPreviousTypeInfo;
   };
   
   //  This is the mondo scanner class, which does the vast majority of the
  
  
  
  1.15      +4 -0      xml-xerces/c/src/xercesc/internal/SGXMLScanner.hpp
  
  Index: SGXMLScanner.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/SGXMLScanner.hpp,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- SGXMLScanner.hpp  27 Nov 2003 22:52:37 -0000      1.14
  +++ SGXMLScanner.hpp  28 Nov 2003 19:54:31 -0000      1.15
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.15  2003/11/28 19:54:31  knoaman
  + * PSVIElement update
  + *
    * Revision 1.14  2003/11/27 22:52:37  knoaman
    * PSVIElement implementation
    *
  @@ -367,6 +370,7 @@
       PSVIAttributeList *                     fPSVIAttrList;
       XSModel*                                fModel;
       PSVIElement*                            fPSVIElement;
  +    ValueStackOf<bool>*                     fErrorStack;
       PSVIElemContext                         fPSVIElemContext;
   };
   
  
  
  
  1.57      +65 -44    xml-xerces/c/src/xercesc/internal/SGXMLScanner.cpp
  
  Index: SGXMLScanner.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/SGXMLScanner.cpp,v
  retrieving revision 1.56
  retrieving revision 1.57
  diff -u -r1.56 -r1.57
  --- SGXMLScanner.cpp  28 Nov 2003 15:54:30 -0000      1.56
  +++ SGXMLScanner.cpp  28 Nov 2003 19:54:31 -0000      1.57
  @@ -119,6 +119,7 @@
       , fPSVIAttrList(0)
       , fModel(0)
       , fPSVIElement(0)
  +    , fErrorStack(0)
   {
       try
       {
  @@ -171,6 +172,7 @@
       , fPSVIAttrList(0)
       , fModel(0)
       , fPSVIElement(0)
  +    , fErrorStack(0)
   {
       try
       {        
  @@ -966,6 +968,20 @@
           );
       }
   
  +    if (fPSVIHandler)
  +    {
  +        if (fValidate && topElem->fThisElement->isDeclared())
  +        {
  +            fPSVIElemContext.fCurrentDV = ((SchemaValidator*) 
fValidator)->getCurrentDatatypeValidator();
  +            fPSVIElemContext.fCurrentTypeInfo = ((SchemaValidator*) 
fValidator)->getCurrentTypeInfo();
  +        }
  +        else
  +        {
  +            fPSVIElemContext.fCurrentDV = 0;
  +            fPSVIElemContext.fCurrentTypeInfo = 0;
  +        }
  +    }
  +
       //  If validation is enabled, then lets pass him the list of children and
       //  this element and let him validate it.
       DatatypeValidator* psviMemberType = 0;
  @@ -1183,12 +1199,26 @@
       XMLContentModel* cm = 0;
       int currentScope = Grammar::TOP_LEVEL_SCOPE;
       bool laxThisOne = false;
  -    if (!isRoot) {
  -        // schema validator will have correct type
  -        ComplexTypeInfo *currType = 
((SchemaValidator*)fValidator)->getCurrentTypeInfo();
  -        SchemaElementDecl::ModelTypes modelType = (currType)
  -                ? ((SchemaElementDecl::ModelTypes)currType->getContentType())
  -                : ((SchemaElementDecl*) 
fElemStack.topElement()->fThisElement)->getModelType();
  +    if (!isRoot)
  +    {
  +        // schema validator will have correct type if validating
  +        SchemaElementDecl* tempElement = (SchemaElementDecl*)
  +            fElemStack.topElement()->fThisElement;
  +        SchemaElementDecl::ModelTypes modelType = tempElement->getModelType();
  +        ComplexTypeInfo *currType = 0;
  +
  +        if (fValidate)
  +        {
  +            currType = ((SchemaValidator*)fValidator)->getCurrentTypeInfo();
  +            if (currType)
  +                modelType = 
(SchemaElementDecl::ModelTypes)currType->getContentType();
  +            else // something must have gone wrong
  +                modelType = SchemaElementDecl::Any;
  +        }
  +        else
  +        {
  +            currType = tempElement->getComplexTypeInfo();
  +        }
   
           if ((modelType == SchemaElementDecl::Mixed_Simple)
             ||  (modelType == SchemaElementDecl::Mixed_Complex)
  @@ -1550,31 +1580,18 @@
   
       if (fPSVIHandler)
       {
  -        fPSVIElemContext.fPreviousError = fPSVIElemContext.fErrorOccurred;
  +        fErrorStack->push(fPSVIElemContext.fErrorOccurred);
           fPSVIElemContext.fErrorOccurred = false;
           fPSVIElemContext.fElemDepth++;
  -        fPSVIElemContext.fValidationRoot = fRootElemName;
  -
  -        // store current type info so we can restore it later
  -        fPSVIElemContext.fPreviousDV = fPSVIElemContext.fCurrentDV;
  -        fPSVIElemContext.fPreviousTypeInfo = fPSVIElemContext.fCurrentTypeInfo;
   
           if (elemDecl->isDeclared())
           {
               fPSVIElemContext.fNoneValidationDepth = fPSVIElemContext.fElemDepth;
  -
  -            // update current type info
  -            fPSVIElemContext.fCurrentDV = ((SchemaElementDecl*) 
elemDecl)->getDatatypeValidator();
  -            fPSVIElemContext.fCurrentTypeInfo = ((SchemaElementDecl*) 
elemDecl)->getComplexTypeInfo();
           }
           else
           {
               fPSVIElemContext.fFullValidationDepth = fPSVIElemContext.fElemDepth;
   
  -            // update current type info
  -            fPSVIElemContext.fCurrentDV = 0;
  -            fPSVIElemContext.fCurrentTypeInfo = 0;
  -
               if (isRoot && fValidate)
                   fPSVIElemContext.fErrorOccurred = true;
           }
  @@ -1588,25 +1605,13 @@
           {
               if (((SchemaValidator*) fValidator)->getErrorOccurred())
                   fPSVIElemContext.fErrorOccurred = true;
  -
  -            // store current type info so we can restore it later
  -            fPSVIElemContext.fPreviousDV = fPSVIElemContext.fCurrentDV;
  -            fPSVIElemContext.fPreviousTypeInfo = fPSVIElemContext.fCurrentTypeInfo;
  -
  -            if (elemDecl->isDeclared())
  -            {
  -                fPSVIElemContext.fCurrentDV = ((SchemaValidator*) 
fValidator)->getCurrentDatatypeValidator();
  -                fPSVIElemContext.fCurrentTypeInfo = ((SchemaValidator*) 
fValidator)->getCurrentTypeInfo();
  -            }
  -            else
  -            {
  -                fPSVIElemContext.fCurrentDV = 0;
  -                fPSVIElemContext.fCurrentTypeInfo = 0;
  -            }
           }
       }
   
  -    ComplexTypeInfo* typeinfo = 
((SchemaValidator*)fValidator)->getCurrentTypeInfo();
  +    ComplexTypeInfo* typeinfo = (fValidate)
  +        ? ((SchemaValidator*)fValidator)->getCurrentTypeInfo()
  +        : ((SchemaElementDecl*) elemDecl)->getComplexTypeInfo();
  +
       if (typeinfo) {
           currentScope = typeinfo->getScopeDefined();
   
  @@ -1742,6 +1747,21 @@
           // Pop the element stack back off since it'll never be used now
           fElemStack.popTop();
   
  +        // reset current type info
  +        if (fPSVIHandler && fGrammarType == Grammar::SchemaGrammarType)
  +        {
  +            if (fValidate && elemDecl->isDeclared())
  +            {
  +                fPSVIElemContext.fCurrentDV = ((SchemaValidator*) 
fValidator)->getCurrentDatatypeValidator();
  +                fPSVIElemContext.fCurrentTypeInfo = ((SchemaValidator*) 
fValidator)->getCurrentTypeInfo();
  +            }
  +            else
  +            {
  +                fPSVIElemContext.fCurrentDV = 0;
  +                fPSVIElemContext.fCurrentTypeInfo = 0;
  +            }
  +        }
  +
           // If validating, then insure that its legal to have no content
           DatatypeValidator* psviMemberType = 0;
           if (fValidate)
  @@ -2112,6 +2132,7 @@
       delete fUndeclaredAttrRegistryNS;
       delete fPSVIAttrList;
       delete fPSVIElement;
  +    delete fErrorStack;
   }
   
   void SGXMLScanner::resizeElemState() {
  @@ -3173,6 +3194,9 @@
           if (!fPSVIElement)
               fPSVIElement = new (fMemoryManager) PSVIElement(fMemoryManager);
   
  +        if (!fErrorStack)
  +            fErrorStack = new (fMemoryManager) ValueStackOf<bool>(8, 
fMemoryManager);
  +
           resetPSVIElemContext();
       }
   
  @@ -4758,7 +4782,7 @@
       (
           validity
           , validationAttempted
  -        , fPSVIElemContext.fValidationRoot
  +        , fRootElemName
           , fPSVIElemContext.fIsSpecified
           , (elemDecl->isDeclared()) 
               ? (XSElementDeclaration*) fModel->getXSObject(elemDecl) : 0
  @@ -4766,6 +4790,8 @@
           , (memberDV) ? (XSSimpleTypeDefinition*) fModel->getXSObject(memberDV) : 0
           , fModel
           , elemDecl->getDefaultValue()
  +        , 0
  +        , (fPSVIElemContext.fCurrentDV) ? 
fPSVIElemContext.fCurrentDV->getCanonicalRepresentation() : 0
       );
   
       fPSVIHandler->handleElementPSVI
  @@ -4778,13 +4804,9 @@
       // decrease element depth
       fPSVIElemContext.fElemDepth--;
   
  -    // restore type info
  -    fPSVIElemContext.fCurrentDV = fPSVIElemContext.fPreviousDV;
  -    fPSVIElemContext.fCurrentTypeInfo = fPSVIElemContext.fPreviousTypeInfo;
  -
       // reset error occurred
       fPSVIElemContext.fErrorOccurred = 
  -        fPSVIElemContext.fErrorOccurred && fPSVIElemContext.fPreviousError;
  +        fPSVIElemContext.fErrorOccurred && fErrorStack->pop();
   }
   
   void SGXMLScanner::resetPSVIElemContext()
  @@ -4794,7 +4816,6 @@
       fPSVIElemContext.fElemDepth = -1;
       fPSVIElemContext.fFullValidationDepth = -1;
       fPSVIElemContext.fNoneValidationDepth = -1;
  -    fPSVIElemContext.fValidationRoot = 0;
       fPSVIElemContext.fCurrentDV = 0;
       fPSVIElemContext.fCurrentTypeInfo = 0;
   }
  
  
  
  1.48      +4 -1      xml-xerces/c/src/xercesc/internal/IGXMLScanner2.cpp
  
  Index: IGXMLScanner2.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/IGXMLScanner2.cpp,v
  retrieving revision 1.47
  retrieving revision 1.48
  diff -u -r1.47 -r1.48
  --- IGXMLScanner2.cpp 28 Nov 2003 18:33:15 -0000      1.47
  +++ IGXMLScanner2.cpp 28 Nov 2003 19:54:31 -0000      1.48
  @@ -1248,6 +1248,9 @@
           if (!fPSVIElement)
               fPSVIElement = new (fMemoryManager) PSVIElement(fMemoryManager);
   
  +        if (!fErrorStack)
  +            fErrorStack = new (fMemoryManager) ValueStackOf<bool>(8, 
fMemoryManager);
  +
           resetPSVIElemContext();
       }
   
  
  
  
  1.17      +7 -1      xml-xerces/c/src/xercesc/internal/IGXMLScanner.hpp
  
  Index: IGXMLScanner.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/IGXMLScanner.hpp,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- IGXMLScanner.hpp  28 Nov 2003 05:13:29 -0000      1.16
  +++ IGXMLScanner.hpp  28 Nov 2003 19:54:31 -0000      1.17
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.17  2003/11/28 19:54:31  knoaman
  + * PSVIElement update
  + *
    * Revision 1.16  2003/11/28 05:13:29  neilg
    * Fix state-ful duplicate attribute detection when the integrated
    * scanner is in use and namespaces are off.  Also, implement
  @@ -391,6 +394,7 @@
       PSVIAttributeList *                     fPSVIAttrList;
       XSModel*                                fModel;
       PSVIElement*                            fPSVIElement;
  +    ValueStackOf<bool>*                     fErrorStack;
       PSVIElemContext                         fPSVIElemContext;
   };
   
  
  
  
  1.39      +62 -44    xml-xerces/c/src/xercesc/internal/IGXMLScanner.cpp
  
  Index: IGXMLScanner.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/IGXMLScanner.cpp,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- IGXMLScanner.cpp  28 Nov 2003 15:48:15 -0000      1.38
  +++ IGXMLScanner.cpp  28 Nov 2003 19:54:31 -0000      1.39
  @@ -118,6 +118,7 @@
       , fPSVIAttrList(0)
       , fModel(0)
       , fPSVIElement(0)
  +    , fErrorStack(0)
   {
       try
       {
  @@ -167,6 +168,7 @@
       , fPSVIAttrList(0)
       , fModel(0)
       , fPSVIElement(0)
  +    , fErrorStack(0)
   {
       try
       {        
  @@ -604,6 +606,7 @@
       delete fUndeclaredAttrRegistryNS;
       delete fPSVIAttrList;
       delete fPSVIElement;
  +    delete fErrorStack;
   }
   
   // ---------------------------------------------------------------------------
  @@ -1055,6 +1058,20 @@
           );
       }
   
  +    if (fPSVIHandler && fGrammarType == Grammar::SchemaGrammarType)
  +    {
  +        if (fValidate && topElem->fThisElement->isDeclared())
  +        {
  +            fPSVIElemContext.fCurrentDV = ((SchemaValidator*) 
fValidator)->getCurrentDatatypeValidator();
  +            fPSVIElemContext.fCurrentTypeInfo = ((SchemaValidator*) 
fValidator)->getCurrentTypeInfo();
  +        }
  +        else
  +        {
  +            fPSVIElemContext.fCurrentDV = 0;
  +            fPSVIElemContext.fCurrentTypeInfo = 0;
  +        }
  +    }
  +
       //  If validation is enabled, then lets pass him the list of children and
       //  this element and let him validate it.
       DatatypeValidator* psviMemberType = 0;
  @@ -2125,12 +2142,26 @@
       int currentScope = Grammar::TOP_LEVEL_SCOPE;
       bool laxThisOne = false;
   
  -    if (!isRoot && fGrammarType == Grammar::SchemaGrammarType) {
  -        // schema validator will have correct type
  -        ComplexTypeInfo *currType = 
((SchemaValidator*)fValidator)->getCurrentTypeInfo();
  -        SchemaElementDecl::ModelTypes modelType = (currType)
  -                ? ((SchemaElementDecl::ModelTypes)currType->getContentType())
  -                : ((SchemaElementDecl*) 
fElemStack.topElement()->fThisElement)->getModelType();
  +    if (!isRoot && fGrammarType == Grammar::SchemaGrammarType)
  +    {
  +        // schema validator will have correct type if validating
  +        SchemaElementDecl* tempElement = (SchemaElementDecl*)
  +            fElemStack.topElement()->fThisElement;
  +        SchemaElementDecl::ModelTypes modelType = tempElement->getModelType();
  +        ComplexTypeInfo *currType = 0;
  +
  +        if (fValidate)
  +        {
  +            currType = ((SchemaValidator*)fValidator)->getCurrentTypeInfo();
  +            if (currType)
  +                modelType = 
(SchemaElementDecl::ModelTypes)currType->getContentType();
  +            else // something must have gone wrong
  +                modelType = SchemaElementDecl::Any;
  +        }
  +        else
  +        {
  +            currType = tempElement->getComplexTypeInfo();
  +        }
   
           if ((modelType == SchemaElementDecl::Mixed_Simple)
             ||  (modelType == SchemaElementDecl::Mixed_Complex)
  @@ -2582,31 +2613,18 @@
   
       if (fGrammarType == Grammar::SchemaGrammarType && fPSVIHandler)
       {
  -        fPSVIElemContext.fPreviousError = fPSVIElemContext.fErrorOccurred;
  +        fErrorStack->push(fPSVIElemContext.fErrorOccurred);
           fPSVIElemContext.fErrorOccurred = false;
           fPSVIElemContext.fElemDepth++;
  -        fPSVIElemContext.fValidationRoot = fRootElemName;
  -
  -        // store current type info so we can restore it later
  -        fPSVIElemContext.fPreviousDV = fPSVIElemContext.fCurrentDV;
  -        fPSVIElemContext.fPreviousTypeInfo = fPSVIElemContext.fCurrentTypeInfo;
   
           if (elemDecl->isDeclared())
           {
               fPSVIElemContext.fNoneValidationDepth = fPSVIElemContext.fElemDepth;
  -
  -            // update current type info
  -            fPSVIElemContext.fCurrentDV = ((SchemaElementDecl*) 
elemDecl)->getDatatypeValidator();
  -            fPSVIElemContext.fCurrentTypeInfo = ((SchemaElementDecl*) 
elemDecl)->getComplexTypeInfo();
           }
           else
           {
               fPSVIElemContext.fFullValidationDepth = fPSVIElemContext.fElemDepth;
   
  -            // update current type info
  -            fPSVIElemContext.fCurrentDV = 0;
  -            fPSVIElemContext.fCurrentTypeInfo = 0;
  -
               if (isRoot && fValidate)
                   fPSVIElemContext.fErrorOccurred = true;
           }
  @@ -2620,27 +2638,15 @@
           {
               if (((SchemaValidator*) fValidator)->getErrorOccurred())
                   fPSVIElemContext.fErrorOccurred = true;
  -
  -            // store current type info so we can restore it later
  -            fPSVIElemContext.fPreviousDV = fPSVIElemContext.fCurrentDV;
  -            fPSVIElemContext.fPreviousTypeInfo = fPSVIElemContext.fCurrentTypeInfo;
  -
  -            if (elemDecl->isDeclared())
  -            {
  -                fPSVIElemContext.fCurrentDV = ((SchemaValidator*) 
fValidator)->getCurrentDatatypeValidator();
  -                fPSVIElemContext.fCurrentTypeInfo = ((SchemaValidator*) 
fValidator)->getCurrentTypeInfo();
  -            }
  -            else
  -            {
  -                fPSVIElemContext.fCurrentDV = 0;
  -                fPSVIElemContext.fCurrentTypeInfo = 0;
  -            }
           }
       }
   
       if (fGrammarType == Grammar::SchemaGrammarType) {
   
  -        ComplexTypeInfo* typeinfo = 
((SchemaValidator*)fValidator)->getCurrentTypeInfo();
  +        ComplexTypeInfo* typeinfo = (fValidate)
  +            ? ((SchemaValidator*)fValidator)->getCurrentTypeInfo()
  +            : ((SchemaElementDecl*) elemDecl)->getComplexTypeInfo();
  +
           if (typeinfo) {
               currentScope = typeinfo->getScopeDefined();
   
  @@ -2788,6 +2794,21 @@
           // Pop the element stack back off since it'll never be used now
           fElemStack.popTop();
   
  +        // reset current type info
  +        if (fPSVIHandler && fGrammarType == Grammar::SchemaGrammarType)
  +        {
  +            if (fValidate && elemDecl->isDeclared())
  +            {
  +                fPSVIElemContext.fCurrentDV = ((SchemaValidator*) 
fValidator)->getCurrentDatatypeValidator();
  +                fPSVIElemContext.fCurrentTypeInfo = ((SchemaValidator*) 
fValidator)->getCurrentTypeInfo();
  +            }
  +            else
  +            {
  +                fPSVIElemContext.fCurrentDV = 0;
  +                fPSVIElemContext.fCurrentTypeInfo = 0;
  +            }
  +        }
  +
           DatatypeValidator* psviMemberType = 0;
           // If validating, then insure that its legal to have no content
           if (fValidate)
  @@ -3332,7 +3353,7 @@
       (
           validity
           , validationAttempted
  -        , fPSVIElemContext.fValidationRoot
  +        , fRootElemName
           , fPSVIElemContext.fIsSpecified
           , (elemDecl->isDeclared()) 
               ? (XSElementDeclaration*) fModel->getXSObject(elemDecl) : 0
  @@ -3340,6 +3361,8 @@
           , (memberDV) ? (XSSimpleTypeDefinition*) fModel->getXSObject(memberDV) : 0
           , fModel
           , elemDecl->getDefaultValue()
  +        , 0
  +        , (fPSVIElemContext.fCurrentDV) ? 
fPSVIElemContext.fCurrentDV->getCanonicalRepresentation() : 0
       );
   
       fPSVIHandler->handleElementPSVI
  @@ -3352,13 +3375,9 @@
       // decrease element depth
       fPSVIElemContext.fElemDepth--;
   
  -    // restore type info
  -    fPSVIElemContext.fCurrentDV = fPSVIElemContext.fPreviousDV;
  -    fPSVIElemContext.fCurrentTypeInfo = fPSVIElemContext.fPreviousTypeInfo;
  -
       // reset error occurred
       fPSVIElemContext.fErrorOccurred = 
  -        fPSVIElemContext.fErrorOccurred && fPSVIElemContext.fPreviousError;
  +        fPSVIElemContext.fErrorOccurred && fErrorStack->pop();
   }
   
   void IGXMLScanner::resetPSVIElemContext()
  @@ -3368,7 +3387,6 @@
       fPSVIElemContext.fElemDepth = -1;
       fPSVIElemContext.fFullValidationDepth = -1;
       fPSVIElemContext.fNoneValidationDepth = -1;
  -    fPSVIElemContext.fValidationRoot = 0;
       fPSVIElemContext.fCurrentDV = 0;
       fPSVIElemContext.fCurrentTypeInfo = 0;
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to