Skip to content

Commit 7784867

Browse files
committed
issue #8790 doxyrest command returns "duplicate member id group..."
Based on the xmlxsd tests
1 parent d460544 commit 7784867

File tree

2 files changed

+54
-3
lines changed

2 files changed

+54
-3
lines changed

addon/doxmlparser/doxmlparser/compound.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3393,7 +3393,7 @@ class sectiondefType(GeneratedsSuper):
33933393
__hash__ = GeneratedsSuper.__hash__
33943394
subclass = None
33953395
superclass = None
3396-
def __init__(self, kind=None, header=None, description=None, memberdef=None, gds_collector_=None, **kwargs_):
3396+
def __init__(self, kind=None, header=None, description=None, memberdef=None, member=None, gds_collector_=None, **kwargs_):
33973397
self.gds_collector_ = gds_collector_
33983398
self.gds_elementtree_node_ = None
33993399
self.original_tagname_ = None
@@ -3410,6 +3410,11 @@ def __init__(self, kind=None, header=None, description=None, memberdef=None, gds
34103410
else:
34113411
self.memberdef = memberdef
34123412
self.memberdef_nsprefix_ = None
3413+
if member is None:
3414+
self.member = []
3415+
else:
3416+
self.member = member
3417+
self.member_nsprefix_ = None
34133418
def factory(*args_, **kwargs_):
34143419
if CurrentSubclassModule_ is not None:
34153420
subclass = getSubclassFromModule_(
@@ -3443,6 +3448,16 @@ def insert_memberdef_at(self, index, value):
34433448
self.memberdef.insert(index, value)
34443449
def replace_memberdef_at(self, index, value):
34453450
self.memberdef[index] = value
3451+
def get_member(self):
3452+
return self.member
3453+
def set_member(self, member):
3454+
self.member = member
3455+
def add_member(self, value):
3456+
self.member.append(value)
3457+
def insert_member_at(self, index, value):
3458+
self.member.insert(index, value)
3459+
def replace_member_at(self, index, value):
3460+
self.member[index] = value
34463461
def get_kind(self):
34473462
return self.kind
34483463
def set_kind(self, kind):
@@ -3464,7 +3479,8 @@ def hasContent_(self):
34643479
if (
34653480
self.header is not None or
34663481
self.description is not None or
3467-
self.memberdef
3482+
self.memberdef or
3483+
self.member
34683484
):
34693485
return True
34703486
else:
@@ -3511,6 +3527,9 @@ def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='',
35113527
for memberdef_ in self.memberdef:
35123528
namespaceprefix_ = self.memberdef_nsprefix_ + ':' if (UseCapturedNS_ and self.memberdef_nsprefix_) else ''
35133529
memberdef_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='memberdef', pretty_print=pretty_print)
3530+
for member_ in self.member:
3531+
namespaceprefix_ = self.member_nsprefix_ + ':' if (UseCapturedNS_ and self.member_nsprefix_) else ''
3532+
member_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='member', pretty_print=pretty_print)
35143533
def build(self, node, gds_collector_=None):
35153534
self.gds_collector_ = gds_collector_
35163535
if SaveElementTreeNode:
@@ -3545,6 +3564,11 @@ def buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collec
35453564
obj_.build(child_, gds_collector_=gds_collector_)
35463565
self.memberdef.append(obj_)
35473566
obj_.original_tagname_ = 'memberdef'
3567+
elif nodeName_ == 'member':
3568+
obj_ = memberRefType.factory(parent_object_=self)
3569+
obj_.build(child_, gds_collector_=gds_collector_)
3570+
self.member.append(obj_)
3571+
obj_.original_tagname_ = 'member'
35483572
# end class sectiondefType
35493573

35503574

templates/xml/compound.xsd

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,11 +128,38 @@
128128
</xsd:simpleContent>
129129
</xsd:complexType>
130130

131+
<xsd:simpleType name="MemberKind">
132+
<xsd:restriction base="xsd:string">
133+
<xsd:enumeration value="define"/>
134+
<xsd:enumeration value="property"/>
135+
<xsd:enumeration value="event"/>
136+
<xsd:enumeration value="variable"/>
137+
<xsd:enumeration value="typedef"/>
138+
<xsd:enumeration value="enum"/>
139+
<xsd:enumeration value="enumvalue"/>
140+
<xsd:enumeration value="function"/>
141+
<xsd:enumeration value="signal"/>
142+
<xsd:enumeration value="prototype"/>
143+
<xsd:enumeration value="friend"/>
144+
<xsd:enumeration value="dcop"/>
145+
<xsd:enumeration value="slot"/>
146+
</xsd:restriction>
147+
</xsd:simpleType>
148+
149+
<xsd:complexType name="MemberType">
150+
<xsd:sequence>
151+
<xsd:element name="name" type="xsd:string"/>
152+
</xsd:sequence>
153+
<xsd:attribute name="refid" type="xsd:string" use="required"/>
154+
<xsd:attribute name="kind" type="MemberKind" use="required"/>
155+
</xsd:complexType>
156+
131157
<xsd:complexType name="sectiondefType">
132158
<xsd:sequence>
133159
<xsd:element name="header" type="xsd:string" minOccurs="0" />
134160
<xsd:element name="description" type="descriptionType" minOccurs="0" />
135-
<xsd:element name="memberdef" type="memberdefType" maxOccurs="unbounded" />
161+
<xsd:element name="memberdef" type="memberdefType" minOccurs="0" maxOccurs="unbounded" />
162+
<xsd:element name="member" type="MemberType" minOccurs="0" maxOccurs="unbounded" />
136163
</xsd:sequence>
137164
<xsd:attribute name="kind" type="DoxSectionKind" />
138165
</xsd:complexType>

0 commit comments

Comments
 (0)