tng 2002/11/26 13:20:09 Modified: c/src/xercesc/validators/schema SchemaValidator.cpp Log: Schema Fix: List can have Union, and Union can have List. So need to check its items for ID/IDREF/Entity. Revision Changes Path 1.19 +33 -0 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.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- SchemaValidator.cpp 7 Nov 2002 21:57:37 -0000 1.18 +++ SchemaValidator.cpp 26 Nov 2002 21:20:09 -0000 1.19 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.19 2002/11/26 21:20:09 tng + * Schema Fix: List can have Union, and Union can have List. So need to check its items for ID/IDREF/Entity. + * * Revision 1.18 2002/11/07 21:57:37 tng * Fix the following Schema Test Failures: * 1. Typo when comparing miscFlags with FIXED @@ -351,6 +354,21 @@ else if (itemDTVType == DatatypeValidator::IDREF) { ((IDREFDatatypeValidator*)itemDTV)->setIDRefList(getScanner()->getIDRefList()); } + else if (itemDTVType == DatatypeValidator::Union) { + RefVectorOf<DatatypeValidator>* memberDTV = ((UnionDatatypeValidator*)itemDTV)->getMemberTypeValidators(); + unsigned int memberTypeNumber = memberDTV->size(); + for ( unsigned int memberIndex = 0; memberIndex < memberTypeNumber; ++memberIndex) + { + DatatypeValidator::ValidatorType memberDTVType = memberDTV->elementAt(memberIndex)->getType(); + if (memberDTVType == DatatypeValidator::ENTITY) + ((ENTITYDatatypeValidator*)memberDTV->elementAt(memberIndex))->setEntityDeclPool(getScanner()->getEntityDeclPool()); + else if (memberDTVType == DatatypeValidator::ID) + ((IDDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList()); + else if (memberDTVType == DatatypeValidator::IDREF) { + ((IDREFDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList()); + } + } + } } else if (eleDefDVType == DatatypeValidator::Union) { RefVectorOf<DatatypeValidator>* memberDTV = ((UnionDatatypeValidator*)fCurrentDV)->getMemberTypeValidators(); @@ -364,6 +382,17 @@ ((IDDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList()); else if (memberDTVType == DatatypeValidator::IDREF) { ((IDREFDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList()); + } + else if (memberDTVType == DatatypeValidator::List) { + DatatypeValidator* itemDTV = ((ListDatatypeValidator*)memberDTV->elementAt(memberIndex))->getItemTypeDTV(); + DatatypeValidator::ValidatorType itemDTVType = itemDTV->getType(); + if (itemDTVType == DatatypeValidator::ENTITY) + ((ENTITYDatatypeValidator*)itemDTV)->setEntityDeclPool(getScanner()->getEntityDeclPool()); + else if (itemDTVType == DatatypeValidator::ID) + ((IDDatatypeValidator*)itemDTV)->setIDRefList(getScanner()->getIDRefList()); + else if (itemDTVType == DatatypeValidator::IDREF) { + ((IDREFDatatypeValidator*)itemDTV)->setIDRefList(getScanner()->getIDRefList()); + } } } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]