mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2026-01-05 03:20:08 +01:00
Fixes for inheritance diagrams
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
@@ -3217,6 +3217,28 @@ 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
|
||||
|
||||
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user