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]