summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiovanni Campagna <gcampagna@src.gnome.org>2014-02-25 19:00:02 +0100
committerGiovanni Campagna <gcampagna@src.gnome.org>2014-02-26 17:27:08 +0100
commit66350483492ed921c8a1c7b6fcd4efcbb0b8c19d (patch)
tree5a6bb802f15a15e2cff3c22814779ce3a86a9f39
parentb7631ccface25faeb096357ab094d3193fc3f116 (diff)
downloadgobject-introspection-66350483492ed921c8a1c7b6fcd4efcbb0b8c19d.tar.gz
docwriter: improve xrefs
If a xref points to a node that was not visited, because it was not introspectable, don't assume it has no parent. Instead, try to fetch the parent from the node directly. This is still wrong (the xref points nowhere because no page is generated), but it looks less wrong. If OTOH a xref points to a different namespace, generate the link directly, because yelp-build is not capable of translating it.
-rw-r--r--giscanner/docwriter.py24
1 files changed, 17 insertions, 7 deletions
diff --git a/giscanner/docwriter.py b/giscanner/docwriter.py
index ec998f5a..4e994779 100644
--- a/giscanner/docwriter.py
+++ b/giscanner/docwriter.py
@@ -42,7 +42,7 @@ def make_page_id(node, recursive=False):
if hasattr(node, '_chain') and node._chain:
parent = node._chain[-1]
else:
- parent = None
+ parent = getattr(node, 'parent', None)
if parent is None:
if isinstance(node, ast.Function) and node.shadows:
@@ -348,15 +348,27 @@ class DocFormatter(object):
return make_page_id(node)
def format_xref(self, node, **attrdict):
- if node is None:
+ if node is None or not hasattr(node, 'namespace'):
attrs = [('xref', 'index')] + attrdict.items()
return xmlwriter.build_xml_tag('link', attrs)
elif isinstance(node, ast.Member):
# Enum/BitField members are linked to the main enum page.
return self.format_xref(node.parent, **attrdict) + '.' + node.name
+ elif node.namespace is self._transformer.namespace:
+ return self.format_internal_xref(node, attrdict)
else:
- attrs = [('xref', make_page_id(node))] + attrdict.items()
- return xmlwriter.build_xml_tag('link', attrs)
+ return self.format_external_xref(node, attrdict)
+
+ def format_internal_xref(self, node, attrdict):
+ attrs = [('xref', make_page_id(node))] + attrdict.items()
+ return xmlwriter.build_xml_tag('link', attrs)
+
+ def format_external_xref(self, node, attrdict):
+ ns = node.namespace
+ attrs = [('href', '../%s-%s/%s.html' % (ns.name, str(ns.version),
+ make_page_id(node)))]
+ attrs += attrdict.items()
+ return xmlwriter.build_xml_tag('link', attrs, self.format_page_name(node))
def field_is_writable(self, field):
return True
@@ -701,9 +713,7 @@ class DocFormatterGjs(DocFormatterIntrospectableBase):
else:
resolved = self._transformer.lookup_typenode(type_)
if resolved:
- ns = resolved.namespace
- return '<link href="../%s-%s/%s.page">%s</link>' % \
- (ns.name, str(ns.version), giname, giname)
+ return self.format_xref(resolved)
return giname
else:
return self.format_fundamental_type(type_.target_fundamental)