diff --git a/etgtools/extractors.py b/etgtools/extractors.py index 3a59f172..9e86b31e 100644 --- a/etgtools/extractors.py +++ b/etgtools/extractors.py @@ -657,10 +657,10 @@ class ClassDef(BaseDef): from etgtools import XMLSRC if not read: - nodename = fullname = self.name - specials = [nodename] + fullname = self.name + specials = [fullname] else: - nodename = fullname = element.text + fullname = element.text baselist = [] @@ -678,7 +678,7 @@ class ClassDef(BaseDef): for c in compounds: baselist.append(c.text) - all_classes[nodename] = (nodename, fullname, baselist) + all_classes[fullname] = (fullname, baselist) for c in compounds: all_classes, specials = self.findHierarchy(c, all_classes, specials, True) @@ -1276,14 +1276,14 @@ class PyClassDef(BaseDef): def findHierarchy(self): all_classes = {} - nodename = fullname = self.name - specials = [nodename] + fullname = self.name + specials = [fullname] baselist = [base for base in self.bases if base != 'object'] - all_classes[nodename] = (nodename, fullname, baselist) + all_classes[fullname] = (fullname, baselist) for base in baselist: - all_classes[base] = (base, base, []) + all_classes[base] = (base, []) return all_classes, specials diff --git a/etgtools/sphinx_generator.py b/etgtools/sphinx_generator.py index 25e44d3c..47e16c89 100644 --- a/etgtools/sphinx_generator.py +++ b/etgtools/sphinx_generator.py @@ -2359,9 +2359,6 @@ class XMLDocString(object): self.Reformat(stream) - if not klass.nodeBases: - klass.nodeBases = ({name: (name, name, [])}, [name]) - inheritance_diagram = InheritanceDiagram(klass.nodeBases) png, map = inheritance_diagram.makeInheritanceDiagram() @@ -3045,6 +3042,8 @@ class SphinxGenerator(generators.DocsGeneratorBase): def generatePyClass(self, klass): + self.fixNodeBaseNames(klass, ItemModuleMap()) + klass.module = self.current_module self.current_class = klass @@ -3120,7 +3119,6 @@ class SphinxGenerator(generators.DocsGeneratorBase): writeSphinxOutput(stream, filename, append=True) # ----------------------------------------------------------------------- - def generateClass(self, klass): assert isinstance(klass, extractors.ClassDef) @@ -3130,6 +3128,8 @@ class SphinxGenerator(generators.DocsGeneratorBase): imm = ItemModuleMap() + self.fixNodeBaseNames(klass, imm) + # generate nested classes for item in klass.innerclasses: self.generateClass(item) @@ -3216,7 +3216,29 @@ class SphinxGenerator(generators.DocsGeneratorBase): # ----------------------------------------------------------------------- - + + def fixNodeBaseNames(self, klass, imm): + # convert the names in nodeBases to fullnames + def _fix(name): + return imm.get_fullname(removeWxPrefix(name)) + + if not klass.nodeBases: + name = klass.pyName if klass.pyName else klass.name + name = _fix(name) + klass.nodeBases = ([(name, [])], [name]) + return + + bases, specials = klass.nodeBases + bases = list(bases.values()) + specials = [_fix(s) for s in specials] + for idx, (name, baselist) in enumerate(bases): + name = _fix(name) + baselist = [_fix(b) for b in baselist] + bases[idx] = (name, baselist) + klass.nodeBases = (bases, specials) + + # ----------------------------------------------------------------------- + def generateMethod(self, method, name=None, docstring=None): if method.ignored: @@ -3392,18 +3414,19 @@ class SphinxGenerator(generators.DocsGeneratorBase): typedef.module = self.current_module all_classes = {} - nodename = fullname = name - specials = [nodename] + fullname = name + specials = [fullname] baselist = [base for base in typedef.bases if base != 'object'] - all_classes[nodename] = (nodename, fullname, baselist) + all_classes[fullname] = (fullname, baselist) for base in baselist: - all_classes[base] = (base, base, []) + all_classes[base] = (base, []) self.unIndent(typedef) typedef.nodeBases = all_classes, specials + self.fixNodeBaseNames(typedef, ItemModuleMap()) typedef.subClasses = [] typedef.method_list = typedef.property_list = [] typedef.pyDocstring = typedef.briefDoc diff --git a/sphinxtools/inheritance.py b/sphinxtools/inheritance.py index 73a314e4..67637d8e 100644 --- a/sphinxtools/inheritance.py +++ b/sphinxtools/inheritance.py @@ -41,7 +41,6 @@ class InheritanceDiagram(object): if main_class is None: self.class_info, self.specials = classes - self.class_info = list(self.class_info.values()) else: self.class_info, self.specials = self._class_info(classes) @@ -65,7 +64,7 @@ class InheritanceDiagram(object): return baselist = [] - all_classes[cls] = (fullname, fullname, baselist) + all_classes[cls] = (fullname, baselist) for base in cls.__bases__: name = self.class_name(base) @@ -163,7 +162,7 @@ class InheritanceDiagram(object): res.append('digraph %s {\n' % name) res.append(self._format_graph_attrs(g_attrs)) - for _, fullname, bases in self.class_info: + for fullname, bases in self.class_info: # Write the node this_node_attrs = n_attrs.copy() @@ -192,9 +191,6 @@ class InheritanceDiagram(object): if fullname in self.specials: this_edge_attrs['color'] = 'red' - if self.main_class is None: - _, base_name = wx2Sphinx(base_name) - res.append(' "%s" -> "%s" [%s];\n' % (base_name, fullname, self._format_node_attrs(this_edge_attrs))) @@ -230,7 +226,7 @@ class InheritanceDiagram(object): if self.main_class is not None: filename = self.main_class.name else: - _, filename = wx2Sphinx(self.specials[0]) + filename = self.specials[0] outfn = os.path.join(static_root, filename + '_inheritance.png') mapfile = outfn + '.map'