knoaman 2003/11/23 08:21:40 Modified: c/src/xercesc/internal XSObjectFactory.hpp XSObjectFactory.cpp Log: PSVI: create local elements of complex types Revision Changes Path 1.2 +5 -1 xml-xerces/c/src/xercesc/internal/XSObjectFactory.hpp Index: XSObjectFactory.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XSObjectFactory.hpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- XSObjectFactory.hpp 21 Nov 2003 17:11:24 -0000 1.1 +++ XSObjectFactory.hpp 23 Nov 2003 16:21:40 -0000 1.2 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.2 2003/11/23 16:21:40 knoaman + * PSVI: create local elements of complex types + * * Revision 1.1 2003/11/21 17:11:24 knoaman * Initial revision * @@ -139,6 +142,7 @@ ( SchemaElementDecl* const elemDecl , XSModel* const xsModel + , XSComplexTypeDefinition* const enclosingTypeDef = 0 ); XSComplexTypeDefinition* addOrFind 1.3 +25 -3 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.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- XSObjectFactory.cpp 21 Nov 2003 22:34:46 -0000 1.2 +++ XSObjectFactory.cpp 23 Nov 2003 16:21:40 -0000 1.3 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/11/23 16:21:40 knoaman + * PSVI: create local elements of complex types + * * Revision 1.2 2003/11/21 22:34:46 neilg * More schema component model implementation, thanks to David Cargill. * In particular, this cleans up and completes the XSModel, XSNamespaceItem, @@ -342,7 +345,8 @@ XSElementDeclaration* XSObjectFactory::addOrFind(SchemaElementDecl* const elemDecl, - XSModel* const xsModel) + XSModel* const xsModel, + XSComplexTypeDefinition* enclosingTypeDef) { XSElementDeclaration* xsObj = (XSElementDeclaration*) getObjectFromMap(elemDecl, xsModel); if (!xsObj) @@ -391,6 +395,13 @@ } } + XSConstants::SCOPE elemScope = XSConstants::SCOPE_ABSENT; + + if (enclosingTypeDef) + elemScope = XSConstants::SCOPE_LOCAL; + else if (elemDecl->getEnclosingScope() == Grammar::TOP_LEVEL_SCOPE) + elemScope = XSConstants::SCOPE_GLOBAL; + xsObj = new (fMemoryManager) XSElementDeclaration ( elemDecl @@ -399,6 +410,8 @@ , getAnnotationFromModel(xsModel, elemDecl) , icMap , xsModel + , elemScope + , enclosingTypeDef , fMemoryManager ); putObjectInMap(elemDecl, xsObj, xsModel); @@ -467,8 +480,15 @@ ); putObjectInMap(typeInfo, xsObj, xsModel); - // REVISIT - // process elements + // process local elements + unsigned int elemCount = typeInfo->elementCount(); + for (unsigned int j=0; j<elemCount; j++) + { + SchemaElementDecl* elemDecl = typeInfo->elementAt(j); + + if (elemDecl->getEnclosingScope() == typeInfo->getScopeDefined()) + addOrFind(elemDecl, xsModel, xsObj); + } } return xsObj;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]