diff --git a/src/xercesc/framework/psvi/PSVIAttribute.cpp b/src/xercesc/framework/psvi/PSVIAttribute.cpp index 544f51fd8f021a7b3a508d3f1e981f3ac6d78c43..51fd3b58af31d044955ae43d9b13a4b1a3656191 100644 --- a/src/xercesc/framework/psvi/PSVIAttribute.cpp +++ b/src/xercesc/framework/psvi/PSVIAttribute.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/11/28 20:20:54 neilg + * make use of canonical representation in PSVIAttribute implementation + * * Revision 1.3 2003/11/27 06:10:32 neilg * PSVIAttribute implementation * @@ -86,8 +89,8 @@ void PSVIAttribute::reset( , XSSimpleTypeDefinition * memberType , const XMLCh * const defaultValue , const bool isSpecified - , const XMLCh * const canonicalValue , XSAttributeDeclaration * attrDecl + , DatatypeValidator *dv ) { fValidationContext = valContext; @@ -98,7 +101,11 @@ void PSVIAttribute::reset( fMemberType = memberType; fDefaultValue = defaultValue; fIsSpecified = isSpecified; - fCanonicalValue = canonicalValue; + fMemoryManager->deallocate((void *)fCanonicalValue); + if(normalizedValue && dv) + fCanonicalValue = dv->getCanonicalRepresentation(normalizedValue, fMemoryManager); + else + fCanonicalValue = 0; fAttributeDecl = attrDecl; } diff --git a/src/xercesc/framework/psvi/PSVIAttribute.hpp b/src/xercesc/framework/psvi/PSVIAttribute.hpp index dd1d32bd029e52c06d70df75c4476c348599cc9a..10765146dd36ddf1c86e755d115e1c38161f7f19 100644 --- a/src/xercesc/framework/psvi/PSVIAttribute.hpp +++ b/src/xercesc/framework/psvi/PSVIAttribute.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.5 2003/11/28 20:20:54 neilg + * make use of canonical representation in PSVIAttribute implementation + * * Revision 1.4 2003/11/27 06:10:32 neilg * PSVIAttribute implementation * @@ -75,6 +78,7 @@ #include <xercesc/framework/psvi/PSVIItem.hpp> #include <xercesc/framework/psvi/XSSimpleTypeDefinition.hpp> +#include <xercesc/validators/datatype/DatatypeValidator.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -162,8 +166,8 @@ public: , XSSimpleTypeDefinition * memberType , const XMLCh * const defaultValue , const bool isSpecified - , const XMLCh * const canonicalValue , XSAttributeDeclaration * attrDecl + , DatatypeValidator * dv ); /** @@ -190,7 +194,10 @@ private: // attribute declaration component that validated this attribute XSAttributeDeclaration * fAttributeDecl; }; -inline PSVIAttribute::~PSVIAttribute() {} +inline PSVIAttribute::~PSVIAttribute() +{ + fMemoryManager->deallocate((void *)fCanonicalValue); +} inline XSAttributeDeclaration *PSVIAttribute::getAttributeDeclaration() { diff --git a/src/xercesc/internal/IGXMLScanner2.cpp b/src/xercesc/internal/IGXMLScanner2.cpp index ae8d67e781a5df3e758e14757b93ad79429d21be..adfe6fdf8cf6b0022ae5af673e05baa3790406de 100644 --- a/src/xercesc/internal/IGXMLScanner2.cpp +++ b/src/xercesc/internal/IGXMLScanner2.cpp @@ -580,7 +580,8 @@ IGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs actualAttDef = (SchemaAttDef *)attDefForWildCard; XSAttributeDeclaration *attrDecl = (XSAttributeDeclaration *)fModel->getXSObject(actualAttDef); PSVIAttribute *toFill = fPSVIAttrList->getPSVIAttributeToFill(); - XSSimpleTypeDefinition *validatingType = (XSSimpleTypeDefinition *)fModel->getXSObject(actualAttDef->getDatatypeValidator()); + DatatypeValidator * attrDataType = actualAttDef->getDatatypeValidator(); + XSSimpleTypeDefinition *validatingType = (XSSimpleTypeDefinition *)fModel->getXSObject(attrDataType); if(attrValid != PSVIItem::VALIDITY_VALID) { toFill->reset( @@ -592,8 +593,8 @@ IGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs , 0 , actualAttDef->getValue() , false - , 0 , attrDecl + , 0 ); } else @@ -610,8 +611,8 @@ IGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs , memberType , actualAttDef->getValue() , false - , 0 , attrDecl + , (memberType)?attrValidator:attrDataType ); } } @@ -646,7 +647,7 @@ IGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs , 0 , false , 0 - , 0 + , attrValidator ); } } @@ -821,8 +822,9 @@ IGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs { PSVIAttribute *defAttrToFill = fPSVIAttrList->getPSVIAttributeToFill(); XSAttributeDeclaration *defAttrDecl = (XSAttributeDeclaration *)fModel->getXSObject((void *)curDef); + DatatypeValidator * attrDataType = ((SchemaAttDef *)curDef)->getDatatypeValidator(); XSSimpleTypeDefinition *defAttrType = - (XSSimpleTypeDefinition*)fModel->getXSObject(((SchemaAttDef *)curDef)->getDatatypeValidator()); + (XSSimpleTypeDefinition*)fModel->getXSObject(attrDataType); // would have occurred during validation of default value if(((SchemaValidator *)fValidator)->getErrorOccurred()) { @@ -835,8 +837,8 @@ IGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs , 0 , curDef->getValue() , true - , 0 , defAttrDecl + , 0 ); } else @@ -858,8 +860,8 @@ IGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs , defAttrMemberType , curDef->getValue() , true - , 0 , defAttrDecl + , (defAttrMemberType)?((SchemaValidator *)fValidator)->getMostRecentAttrValidator():attrDataType ); } } diff --git a/src/xercesc/internal/SGXMLScanner.cpp b/src/xercesc/internal/SGXMLScanner.cpp index b57bc78636c888627c938038eaadcd3754ad8792..0ce25c927a3bda43aad9c92408d999b3305d9c83 100644 --- a/src/xercesc/internal/SGXMLScanner.cpp +++ b/src/xercesc/internal/SGXMLScanner.cpp @@ -2586,7 +2586,8 @@ SGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs actualAttDef = (SchemaAttDef *)attDefForWildCard; XSAttributeDeclaration *attrDecl = (XSAttributeDeclaration *)fModel->getXSObject(actualAttDef); PSVIAttribute *toFill = fPSVIAttrList->getPSVIAttributeToFill(); - XSSimpleTypeDefinition *validatingType = (XSSimpleTypeDefinition *)fModel->getXSObject(actualAttDef->getDatatypeValidator()); + DatatypeValidator * attrDataType = actualAttDef->getDatatypeValidator(); + XSSimpleTypeDefinition *validatingType = (XSSimpleTypeDefinition *)fModel->getXSObject(attrDataType); if(attrValid != PSVIItem::VALIDITY_VALID) { toFill->reset( @@ -2598,8 +2599,8 @@ SGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs , 0 , actualAttDef->getValue() , false - , 0 , attrDecl + , 0 ); } else @@ -2616,8 +2617,8 @@ SGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs , memberType , actualAttDef->getValue() , false - , 0 , attrDecl + , (memberType)?attrValidator:attrDataType ); } } @@ -2637,7 +2638,7 @@ SGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs attrValidator = DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_ANYURI); if(getPSVIHandler()) { - PSVIAttribute *toFill = fPSVIAttrList->getPSVIAttributeToFill(); + PSVIAttribute *toFill = fPSVIAttrList->getPSVIAttributeToFill(); XSSimpleTypeDefinition *validatingType = (attrValidator) ? (XSSimpleTypeDefinition *)fModel->getXSObject(attrValidator) : 0; @@ -2652,7 +2653,7 @@ SGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs , 0 , false , 0 - , 0 + , attrValidator ); } } @@ -2789,8 +2790,9 @@ SGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs { PSVIAttribute *defAttrToFill = fPSVIAttrList->getPSVIAttributeToFill(); XSAttributeDeclaration *defAttrDecl = (XSAttributeDeclaration *)fModel->getXSObject((void *)curDef); + DatatypeValidator * attrDataType = ((SchemaAttDef *)curDef)->getDatatypeValidator(); XSSimpleTypeDefinition *defAttrType = - (XSSimpleTypeDefinition*)fModel->getXSObject(((SchemaAttDef *)curDef)->getDatatypeValidator()); + (XSSimpleTypeDefinition*)fModel->getXSObject(attrDataType); // would have occurred during validation of default value if(((SchemaValidator *)fValidator)->getErrorOccurred()) { @@ -2803,8 +2805,8 @@ SGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs , 0 , curDef->getValue() , true - , 0 , defAttrDecl + , 0 ); } else @@ -2826,8 +2828,8 @@ SGXMLScanner::buildAttList(const RefVectorOf<KVStringPair>& providedAttrs , defAttrMemberType , curDef->getValue() , true - , 0 , defAttrDecl + , (defAttrMemberType)?((SchemaValidator *)fValidator)->getMostRecentAttrValidator():attrDataType ); } }