[gobject-introspection/mallard-templates] g-ir-doc-tool: Display the hierarchy tree for classes



commit 5cb2864c612e06c430e81037a9ff58b30409bebe
Author: Tomeu Vizoso <tomeu vizoso collabora com>
Date:   Mon Feb 20 16:57:14 2012 +0100

    g-ir-doc-tool: Display the hierarchy tree for classes

 giscanner/mallard-Python-class.tmpl                |    8 ++-
 giscanner/mallardwriter.py                         |   59 ++++++++++----------
 .../GIRepository.Repository.page                   |    2 +-
 3 files changed, 36 insertions(+), 33 deletions(-)
---
diff --git a/giscanner/mallard-Python-class.tmpl b/giscanner/mallard-Python-class.tmpl
index 489a429..62feb9a 100644
--- a/giscanner/mallard-Python-class.tmpl
+++ b/giscanner/mallard-Python-class.tmpl
@@ -29,12 +29,16 @@ ${formatter.to_underscores(node.name).lower()} = ${namespace.name}.${node.name}(
 % if node.version:
 <p>Since ${node.version}</p>
 % endif
-  <synopsis ui:expanded="no">
+  <synopsis>
     <title>Hierarchy</title>
     <tree>
+% for class_ in formatter.get_class_hierarchy(node):
       <item>
-        <code>GObject.Object</code>
+        <code>${class_.namespace.name}.${class_.name}</code>
+% endfor
+% for class_ in formatter.get_class_hierarchy(node):
       </item>
+% endfor
     </tree>
   </synopsis>
   <links type="topic" ui:expanded="yes"
diff --git a/giscanner/mallardwriter.py b/giscanner/mallardwriter.py
index 327ccc9..87b6f55 100644
--- a/giscanner/mallardwriter.py
+++ b/giscanner/mallardwriter.py
@@ -32,9 +32,12 @@ from mako.runtime import supports_caller
 from . import ast
 from .utils import to_underscores
 
+def _space(num):
+    return " " * num
+
 class MallardFormatter(object):
-    def __init__(self, namespace):
-        self._namespace = namespace
+    def __init__(self, transformer):
+        self._transformer = transformer
 
     def escape(self, text):
         return saxutils.escape(text.encode('utf-8')).decode('utf-8')
@@ -66,27 +69,28 @@ class MallardFormatter(object):
             link = re.split('[^a-zA-Z_:-]', rest, maxsplit=1)[0]
             if link.endswith(':'):
                 link = link[:-1]
+            namespace = self._transformer.namespace
             if '::' in link:
                 type_name, signal_name = link.split('::')
-                if type_name in self._namespace.ctypes:
-                    type_ = self._namespace.get_by_ctype(type_name)
-                    xref = '%s.%s-%s' % (self._namespace.name, type_.name, signal_name)
-                    xref_name = '%s.%s::%s' % (self._namespace.name, type_.name, signal_name)
+                if type_name in namespace.ctypes:
+                    type_ = namespace.get_by_ctype(type_name)
+                    xref = '%s.%s-%s' % (namespace.name, type_.name, signal_name)
+                    xref_name = '%s.%s::%s' % (namespace.name, type_.name, signal_name)
                 else:
                     xref = link
                     xref_name = link
             elif ':' in link:
                 type_name, property_name = link.split(':')
-                if type_name in self._namespace.ctypes:
-                    type_ = self._namespace.get_by_ctype(type_name)
-                    xref = '%s.%s-%s' % (self._namespace.name, type_.name, property_name)
-                    xref_name = '%s.%s:%s' % (self._namespace.name, type_.name, property_name)
+                if type_name in namespace.ctypes:
+                    type_ = namespace.get_by_ctype(type_name)
+                    xref = '%s.%s-%s' % (namespace.name, type_.name, property_name)
+                    xref_name = '%s.%s:%s' % (namespace.name, type_.name, property_name)
                 else:
                     xref = link
                     xref_name = link
-            elif link in self._namespace.ctypes:
-                type_ = self._namespace.get_by_ctype(link)
-                xref = '%s.%s' % (self._namespace.name, type_.name)
+            elif link in namespace.ctypes:
+                type_ = namespace.get_by_ctype(link)
+                xref = '%s.%s' % (namespace.name, type_.name)
                 xref_name = xref
             else:
                 xref = link
@@ -116,6 +120,16 @@ class MallardFormatter(object):
     def to_underscores(self, string):
         return to_underscores(string)
 
+    def get_class_hierarchy(self, node):
+        parent_chain = []
+
+        while node.parent:
+            node = self._transformer.lookup_giname(str(node.parent))
+            parent_chain.append(node)
+
+        parent_chain.reverse()
+        return parent_chain
+
 class MallardFormatterC(MallardFormatter):
 
     def format_type(self, type_):
@@ -155,9 +169,9 @@ class MallardWriter(object):
         self._language = language
 
         if self._language == 'C':
-            self._formatter = MallardFormatterC(self._transformer.namespace)
+            self._formatter = MallardFormatterC(self._transformer)
         elif self._language == 'Python':
-            self._formatter = MallardFormatterPython(self._transformer.namespace)
+            self._formatter = MallardFormatterPython(self._transformer)
         else:
             raise SystemExit("Unsupported language: %s" % language)
 
@@ -226,18 +240,3 @@ class MallardWriter(object):
         fp = open(output_file_name, 'w')
         fp.write(result)
         fp.close()
-
-    def _render_page_object_hierarchy(self, page_node):
-        parent_chain = self._get_parent_chain(page_node)
-        parent_chain.append(page_node)
-        lines = []
-
-        for level, parent in enumerate(parent_chain):
-            prepend = ""
-            if level > 0:
-                prepend = _space((level - 1)* 6) + " +----"
-            lines.append(_space(2) + prepend + self._formatter.get_class_name(parent))
-
-        self._writer.disable_whitespace()
-        self._writer.write_line("\n".join(lines))
-        self._writer.enable_whitespace()
diff --git a/tests/doctool/GIRepository-2.0-Python-expected/GIRepository.Repository.page b/tests/doctool/GIRepository-2.0-Python-expected/GIRepository.Repository.page
index bf38345..4a6216c 100644
--- a/tests/doctool/GIRepository-2.0-Python-expected/GIRepository.Repository.page
+++ b/tests/doctool/GIRepository-2.0-Python-expected/GIRepository.Repository.page
@@ -16,7 +16,7 @@ from gi.repository import GIRepository
 
 repository = GIRepository.Repository()  </code></synopsis>
 
-  <synopsis ui:expanded="no">
+  <synopsis>
     <title>Hierarchy</title>
     <tree>
       <item>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]