void CTypeCollector::Collect( XmlSchemaSubitemGroup* group, Xsd2CppContext& ctx) { if(group->Category() != EnumSubitemCategory::sequence) { throw std::exception("when as a schema for config, only sequence support!"); } IEnumerator<XmlSchemaSubitem*>* pEnumItem = group->Subitems.Enum(); if(pEnumItem) { while(pEnumItem->MoveNext()) { if(pEnumItem->Current()->Category() == EnumSubitemCategory::element) { Collect(static_cast<XmlSchemaElement*>(pEnumItem->Current()), ctx); } else if(pEnumItem->Current()->Category() == EnumSubitemCategory::sequence) { Collect(static_cast<XmlSchemaSubitemGroup*>(pEnumItem->Current()), ctx); } else { throw std::exception("when as a schema for config, only sequence and element support!"); } } } }
tstring StringSplice(IEnumerator<tstring>& source, tstring connecter) { tstring result; if(source.MoveNext()) { result = source.Current(); while(source.MoveNext()) { result += connecter; result += source.Current(); } } return result; }
void CTypeCollector::Collect( CXmlSchema* schema, Xsd2CppContext& ctx) { IEnumerator<XmlSchemaElement>* pEnumEle = schema->EnumGlobalElement(); if(pEnumEle) { while(pEnumEle->MoveNext()) { Collect(schema->GetElement(pEnumEle->Current().Name), ctx); } } }
void CCppConfigGenerator::TypeCollect( XmlSchema* schema, TypeCollectContext& ctx) { IEnumerator<XmlSchemaElement>* pEnumEle = schema->EnumGlobalElement(); if(pEnumEle) { while(pEnumEle->MoveNext()) { TypeCollect(pEnumEle->Current(), types); } } }
void CTypeCollector::Collect( XmlSchemaComplexType* complexType, Xsd2CppContext& ctx) { if(!ctx.TypeMask[complexType->SerialNO]) { ctx.TypeMask[complexType->SerialNO] = true; if(complexType->BaseType != INVALIDXMLSCHEMATYPESN) { throw std::exception("when as a schema for config, type definition don't support inherit!"); } Collect(&complexType->Subitems, ctx); ctx.SortedComplexTypes.push_back(complexType); IEnumerator<XmlSchemaAttribute>* pEnumAttr = new_iterator_enumerator(complexType->Attributes.begin(), complexType->Attributes.end()); if(pEnumAttr) { while(pEnumAttr->MoveNext()) { Collect(const_cast<XmlSchemaAttribute*>(&pEnumAttr->Current()), ctx); } } } }
void CCppConfigGenerator::TypeCollect( XmlSchemaComplexType* complexType, TypeCollectContext& ctx) { if(!ctx.TypeMask[complexType->SerialNO]) { ctx.TypeMask[complexType->SerialNO] = true; if(complexType->BaseType != INVALIDXMLSCHEMATYPESN) { throw std::exception("when as a schema for config, type definition don't support inherit!") } TypeCollect(&complexType->Subitems, ctx); ctx.SortedTypes.push_front(complexType); IEnumerator<XmlSchemaAttribute>* pEnumAttr = new_iterator_enumerator(complexType->Attributes.begin(), complexType->Attributes.end()); if(pEnumAttr) { while(pEnumAttr->MoveNext()) { XmlSchemaSimpleType* simpleType = static_cast<XmlSchemaSimpleType*>(ctx.Schema->GetType(pEnumAttr->Current().Type)); TypeCollect(simpleType); } } }