knoaman     2004/03/01 13:06:38

  Modified:    c/src/xercesc/validators/schema SchemaValidator.hpp
                        SchemaValidator.cpp
  Log:
  Fix for UPA checking
  
  Revision  Changes    Path
  1.26      +4 -0      xml-xerces/c/src/xercesc/validators/schema/SchemaValidator.hpp
  
  Index: SchemaValidator.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaValidator.hpp,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- SchemaValidator.hpp       29 Jan 2004 11:52:31 -0000      1.25
  +++ SchemaValidator.hpp       1 Mar 2004 21:06:38 -0000       1.26
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.26  2004/03/01 21:06:38  knoaman
  + * Fix for UPA checking
  + *
    * Revision 1.25  2004/01/29 11:52:31  cargilld
    * Code cleanup changes to get rid of various compiler diagnostic messages.
    *
  @@ -382,6 +385,7 @@
                           ValueVectorOf<ContentSpecNode*>* const baseNodes,
                           const int baseScope,
                           const ComplexTypeInfo* const baseInfo);
  +    ContentSpecNode* getNonUnaryGroup(ContentSpecNode* const pNode);
   
       // -----------------------------------------------------------------------
       //  Private data members
  
  
  
  1.53      +21 -2     xml-xerces/c/src/xercesc/validators/schema/SchemaValidator.cpp
  
  Index: SchemaValidator.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaValidator.cpp,v
  retrieving revision 1.52
  retrieving revision 1.53
  diff -u -r1.52 -r1.53
  --- SchemaValidator.cpp       29 Jan 2004 11:52:31 -0000      1.52
  +++ SchemaValidator.cpp       1 Mar 2004 21:06:38 -0000       1.53
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.53  2004/03/01 21:06:38  knoaman
  + * Fix for UPA checking
  + *
    * Revision 1.52  2004/01/29 11:52:31  cargilld
    * Code cleanup changes to get rid of various compiler diagnostic messages.
    *
  @@ -1377,6 +1380,22 @@
       }
   }
   
  +ContentSpecNode* SchemaValidator::getNonUnaryGroup(ContentSpecNode* const pNode) {
  +
  +    int pNodeType = (pNode->getType() & 0x0f);
  +    if (pNodeType == ContentSpecNode::Leaf
  +        || pNodeType == ContentSpecNode::Any
  +        || pNodeType == ContentSpecNode::Any_Other
  +        || pNodeType == ContentSpecNode::Any_NS)
  +        return pNode;
  +
  +    if (pNode->getMinOccurs() == 1 && pNode->getMaxOccurs() == 1
  +        && pNode->getFirst() && !pNode->getSecond())
  +        return getNonUnaryGroup(pNode->getFirst());
  +
  +    return pNode;
  +}
  +
   void SchemaValidator::checkParticleDerivationOk(SchemaGrammar* const aGrammar,
                                                   ContentSpecNode* const curNode,
                                                   const int derivedScope,
  @@ -1394,8 +1413,8 @@
       if (!curNode)
           return;
   
  -    ContentSpecNode* curSpecNode = curNode;
  -    ContentSpecNode* baseSpecNode = baseNode;
  +    ContentSpecNode* curSpecNode = getNonUnaryGroup(curNode);
  +    ContentSpecNode* baseSpecNode = getNonUnaryGroup(baseNode);
       ValueVectorOf<ContentSpecNode*> curVector(8, fMemoryManager);
       ValueVectorOf<ContentSpecNode*> baseVector(8, fMemoryManager);
       ContentSpecNode::NodeTypes curNodeType = curSpecNode->getType();
  
  
  

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

Reply via email to