knoaman     2004/01/05 19:55:26

  Modified:    c/src/xercesc/internal XSObjectFactory.cpp
               c/src/xercesc/framework/psvi XSAttributeDeclaration.cpp
               c/src/xercesc/validators/schema TraverseSchema.cpp
  Log:
  Various PSVI fixes.
  
  Revision  Changes    Path
  1.17      +4 -1      xml-xerces/c/src/xercesc/internal/XSObjectFactory.cpp
  
  Index: XSObjectFactory.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XSObjectFactory.cpp,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- XSObjectFactory.cpp       30 Dec 2003 19:46:15 -0000      1.16
  +++ XSObjectFactory.cpp       6 Jan 2004 03:55:26 -0000       1.17
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.17  2004/01/06 03:55:26  knoaman
  + * Various PSVI fixes.
  + *
    * Revision 1.16  2003/12/30 19:46:15  neilg
    * use a null-terminated string when tokenizing pattern facets
    *
  @@ -1055,7 +1058,7 @@
       bool isRequired = false;
       XSConstants::VALUE_CONSTRAINT constraintType = XSConstants::VC_NONE;
       
  -    if (attDef->getDefaultType() & XMLAttDef::Default)
  +    if (attDef->getDefaultType() == XMLAttDef::Default)
       {
           constraintType = XSConstants::VC_DEFAULT;
       }
  
  
  
  1.11      +6 -2      
xml-xerces/c/src/xercesc/framework/psvi/XSAttributeDeclaration.cpp
  
  Index: XSAttributeDeclaration.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSAttributeDeclaration.cpp,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- XSAttributeDeclaration.cpp        30 Dec 2003 20:41:06 -0000      1.10
  +++ XSAttributeDeclaration.cpp        6 Jan 2004 03:55:26 -0000       1.11
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.11  2004/01/06 03:55:26  knoaman
  + * Various PSVI fixes.
  + *
    * Revision 1.10  2003/12/30 20:41:06  neilg
    * do not report anything about default/fixed values for non-global attribute 
declarations
    *
  @@ -157,7 +160,8 @@
   {
       if (fScope != XSConstants::SCOPE_GLOBAL)
           return XSConstants::VC_NONE;
  -    if (fAttDef->getDefaultType() & XMLAttDef::Default)
  +
  +    if (fAttDef->getDefaultType() == XMLAttDef::Default)
           return XSConstants::VC_DEFAULT;
   
       if ((fAttDef->getDefaultType() == XMLAttDef::Fixed) ||
  
  
  
  1.106     +81 -85    xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp
  
  Index: TraverseSchema.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp,v
  retrieving revision 1.105
  retrieving revision 1.106
  diff -u -r1.105 -r1.106
  --- TraverseSchema.cpp        29 Dec 2003 16:15:42 -0000      1.105
  +++ TraverseSchema.cpp        6 Jan 2004 03:55:26 -0000       1.106
  @@ -570,7 +570,7 @@
           reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::OnlyAnnotationExpected);
   
       if (fAnnotation)
  -        delete fAnnotation;//fSchemaGrammar->addAnnotation(fAnnotation);
  +        fSchemaGrammar->addAnnotation(fAnnotation);
   
       // -----------------------------------------------------------------------
       // Get 'schemaLocation' attribute
  @@ -718,7 +718,7 @@
           reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::OnlyAnnotationExpected);
   
       if (fAnnotation)
  -        delete fAnnotation;//fSchemaGrammar->addAnnotation(fAnnotation);
  +        fSchemaGrammar->addAnnotation(fAnnotation);
   
       // -----------------------------------------------------------------------
       // Handle 'namespace' attribute
  @@ -1646,107 +1646,112 @@
       // ------------------------------------------------------------------
       // Handle "ref="
       // ------------------------------------------------------------------
  +    XercesAttGroupInfo* attGroupInfo = 0;
       if (!topLevel) {
   
           if (refEmpty) {
               return 0;
           }
   
  -        return processAttributeGroupRef(elem, ref, typeInfo);
  -    }
  -
  -    // ------------------------------------------------------------------
  -    // Handle "name="
  -    // ------------------------------------------------------------------
  -    // name must be a valid NCName
  -    if (!XMLString::isValidNCName(name)) {
  -        reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::InvalidDeclarationName,
  -                          SchemaSymbols::fgELT_ATTRIBUTEGROUP, name);
  -        return 0;
  +        attGroupInfo = processAttributeGroupRef(elem, ref, typeInfo);
       }
  +    else
  +    {
  +        // name must be a valid NCName
  +        if (!XMLString::isValidNCName(name)) {
  +            reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::InvalidDeclarationName,
  +                              SchemaSymbols::fgELT_ATTRIBUTEGROUP, name);
  +            return 0;
  +        }
   
  -    // ------------------------------------------------------------------
  -    // Check for annotations
  -    // ------------------------------------------------------------------
  -    DOMElement* content = checkContent(elem, XUtil::getFirstChildElement(elem), 
true);
  -    Janitor<XSAnnotation> janAnnot(fAnnotation);
  +        // Check for annotations
  +        DOMElement* content = checkContent(elem, XUtil::getFirstChildElement(elem), 
true);
  +        Janitor<XSAnnotation> janAnnot(fAnnotation);
   
  -    // ------------------------------------------------------------------
  -    // Process contents of global attributeGroups
  -    // ------------------------------------------------------------------
  -    XercesAttGroupInfo* saveAttGroupInfo = fCurrentAttGroupInfo;
  -    XercesAttGroupInfo* attGroupInfo = new (fGrammarPoolMemoryManager) 
XercesAttGroupInfo(
  -        fStringPool->addOrFind(name), fTargetNSURI, fGrammarPoolMemoryManager);
  +        // Process contents of global attributeGroups
  +        XercesAttGroupInfo* saveAttGroupInfo = fCurrentAttGroupInfo;
  +        attGroupInfo = new (fGrammarPoolMemoryManager) XercesAttGroupInfo(
  +            fStringPool->addOrFind(name), fTargetNSURI, fGrammarPoolMemoryManager);
   
  -    fDeclStack->addElement(elem);
  -    fCurrentAttGroupInfo = attGroupInfo;
  +        fDeclStack->addElement(elem);
  +        fCurrentAttGroupInfo = attGroupInfo;
   
  -    for (; content !=0; content = XUtil::getNextSiblingElement(content)) {
  +        for (; content !=0; content = XUtil::getNextSiblingElement(content)) {
   
  -        if (XMLString::equals(content->getLocalName(), 
SchemaSymbols::fgELT_ATTRIBUTE)) {
  -            traverseAttributeDecl(content, typeInfo);
  -        }
  -        else if (XMLString::equals(content->getLocalName(), 
SchemaSymbols::fgELT_ATTRIBUTEGROUP)) {
  -            traverseAttributeGroupDecl(content, typeInfo);
  -        }
  -        else {
  -            break;
  +            if (XMLString::equals(content->getLocalName(), 
SchemaSymbols::fgELT_ATTRIBUTE)) {
  +                traverseAttributeDecl(content, typeInfo);
  +            }
  +            else if (XMLString::equals(content->getLocalName(), 
SchemaSymbols::fgELT_ATTRIBUTEGROUP)) {
  +                traverseAttributeGroupDecl(content, typeInfo);
  +            }
  +            else {
  +                break;
  +            }
           }
  -    }
   
  -    if (content != 0) {
  +        if (content != 0) {
   
  -        if (XMLString::equals(content->getLocalName(), 
SchemaSymbols::fgELT_ANYATTRIBUTE)) {
  +            if (XMLString::equals(content->getLocalName(), 
SchemaSymbols::fgELT_ANYATTRIBUTE)) {
   
  -            SchemaAttDef* anyAtt = traverseAnyAttribute(content);
  +                SchemaAttDef* anyAtt = traverseAnyAttribute(content);
   
  -            if (anyAtt) {
  -                fCurrentAttGroupInfo->addAnyAttDef(anyAtt);
  -            }
  +                if (anyAtt) {
  +                    fCurrentAttGroupInfo->addAnyAttDef(anyAtt);
  +                }
   
  -            if (XUtil::getNextSiblingElement(content) != 0) {
  +                if (XUtil::getNextSiblingElement(content) != 0) {
  +                    reportSchemaError(content, XMLUni::fgXMLErrDomain, 
XMLErrs::AttGroupContentError, name);
  +                }
  +            }
  +            else {
                   reportSchemaError(content, XMLUni::fgXMLErrDomain, 
XMLErrs::AttGroupContentError, name);
               }
           }
  -        else {
  -            reportSchemaError(content, XMLUni::fgXMLErrDomain, 
XMLErrs::AttGroupContentError, name);
  -        }
  -    }
   
  -    // ------------------------------------------------------------------
  -    // Pop declaration
  -    // ------------------------------------------------------------------
  -    fDeclStack->removeElementAt(fDeclStack->size() - 1);
  +        // Pop declaration
  +        fDeclStack->removeElementAt(fDeclStack->size() - 1);
   
  -    // ------------------------------------------------------------------
  -    // Restore old attGroupInfo
  -    // ------------------------------------------------------------------
  -    fAttGroupRegistry->put((void*) 
fStringPool->getValueForId(fStringPool->addOrFind(name)), attGroupInfo);
  -    fCurrentAttGroupInfo = saveAttGroupInfo;
  +        // Restore old attGroupInfo
  +        fAttGroupRegistry->put((void*) 
fStringPool->getValueForId(fStringPool->addOrFind(name)), attGroupInfo);
  +        fCurrentAttGroupInfo = saveAttGroupInfo;
   
  -    // ------------------------------------------------------------------
  -    // Check Attribute Derivation Restriction OK
  -    // ------------------------------------------------------------------
  -    fBuffer.set(fTargetNSURIString);
  -    fBuffer.append(chComma);
  -    fBuffer.append(name);
  +        // Check Attribute Derivation Restriction OK
  +        fBuffer.set(fTargetNSURIString);
  +        fBuffer.append(chComma);
  +        fBuffer.append(name);
   
  -    unsigned int nameIndex = fStringPool->addOrFind(fBuffer.getRawBuffer());
  +        unsigned int nameIndex = fStringPool->addOrFind(fBuffer.getRawBuffer());
   
  -    if (fRedefineComponents && 
fRedefineComponents->get(SchemaSymbols::fgELT_ATTRIBUTEGROUP, nameIndex)) {
  +        if (fRedefineComponents && 
fRedefineComponents->get(SchemaSymbols::fgELT_ATTRIBUTEGROUP, nameIndex)) {
   
  -        fBuffer.set(name);
  -        fBuffer.append(SchemaSymbols::fgRedefIdentifier);
  -        XercesAttGroupInfo* baseAttGroupInfo = 
fAttGroupRegistry->get(fBuffer.getRawBuffer());
  +            fBuffer.set(name);
  +            fBuffer.append(SchemaSymbols::fgRedefIdentifier);
  +            XercesAttGroupInfo* baseAttGroupInfo = 
fAttGroupRegistry->get(fBuffer.getRawBuffer());
   
  -        if (baseAttGroupInfo) {
  -            checkAttDerivationOK(elem, baseAttGroupInfo, attGroupInfo);
  +            if (baseAttGroupInfo)
  +                checkAttDerivationOK(elem, baseAttGroupInfo, attGroupInfo);
           }
  +
  +        // Store annotation
  +        if (!janAnnot.isDataNull())
  +            fSchemaGrammar->putAnnotation(attGroupInfo, janAnnot.release());
       }
   
  -    // Store annotation
  -    if (!janAnnot.isDataNull())
  -        fSchemaGrammar->putAnnotation(attGroupInfo, janAnnot.release());
  +    // calculate complete wildcard if necessary
  +    if (attGroupInfo)
  +    {
  +        unsigned int anyAttCount = attGroupInfo->anyAttributeCount();
  +        if (anyAttCount && !attGroupInfo->getCompleteWildCard())
  +        {
  +            SchemaAttDef* attGroupWildCard =  new (fGrammarPoolMemoryManager)
  +                SchemaAttDef(attGroupInfo->anyAttributeAt(0));
  +
  +            for (unsigned int k= 1; k < anyAttCount; k++)
  +                attWildCardIntersection(attGroupWildCard, 
attGroupInfo->anyAttributeAt(k));
  +
  +            attGroupInfo->setCompleteWildCard(attGroupWildCard);
  +        }
  +    }
   
       return attGroupInfo;
   }
  @@ -6264,18 +6269,6 @@
                   }
   
                   SchemaAttDef* attGroupWildCard = 
attGroupInfo->getCompleteWildCard();
  -
  -                if (!attGroupWildCard) {
  -
  -                    attGroupWildCard = new (fGrammarPoolMemoryManager) 
SchemaAttDef(attGroupInfo->anyAttributeAt(0));
  -
  -                    for (unsigned int i= 1; i < anyAttCount; i++) {
  -                        attWildCardIntersection(attGroupWildCard, 
attGroupInfo->anyAttributeAt(i));
  -                    }
  -
  -                    attGroupInfo->setCompleteWildCard(attGroupWildCard);
  -                }
  -
                   if (completeWildCard) {
                       attWildCardIntersection(completeWildCard, attGroupWildCard);
                   }
  @@ -6540,6 +6533,9 @@
           (XMLString::equals(fixedFacet, SchemaSymbols::fgATTVAL_TRUE)
            || XMLString::equals(fixedFacet, fgValueOne))) {
   
  +        if (XMLString::equals(SchemaSymbols::fgELT_LENGTH, facetName)) {
  +            flags |= DatatypeValidator::FACET_LENGTH;
  +        }
           if (XMLString::equals(SchemaSymbols::fgELT_MINLENGTH, facetName)) {
               flags |= DatatypeValidator::FACET_MINLENGTH;
           }
  
  
  

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

Reply via email to