summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Duponchelle <mathieu.duponchelle@opencreed.com>2015-03-10 15:58:19 +0100
committerrockon999 <rockon999@users.noreply.github.com>2018-08-06 02:52:14 -0500
commitc66bc4042cc72e7b65b4126e44bff5f174b054b8 (patch)
tree8efe64d36c91a2b147ec7cc52a492b0b19c46327
parentaad9d83e58c7ca3e6a4df983c7124664b1985b03 (diff)
downloadgobject-introspection-c66bc4042cc72e7b65b4126e44bff5f174b054b8.tar.gz
docwriter: Add support for plural type references.
-rw-r--r--giscanner/docwriter.py36
1 files changed, 25 insertions, 11 deletions
diff --git a/giscanner/docwriter.py b/giscanner/docwriter.py
index a59cc7f2..7f8c5485 100644
--- a/giscanner/docwriter.py
+++ b/giscanner/docwriter.py
@@ -266,11 +266,17 @@ class DocFormatter(object):
return self.format_xref(signal)
def _process_type_name(self, node, match, props):
- type_ = self._resolve_type(props['type_name'])
+ ident = props['type_name']
+ type_ = self._resolve_type(ident)
+ plural = False
if type_ is None:
- return match
+ singularized = ident.rstrip("s") # Try to remove plural
+ type_ = self._resolve_type(singularized)
+ plural = True
+ if type_ is None:
+ return match
- return self.format_xref(type_)
+ return self.format_xref(type_, pluralize=plural)
def _process_enum_value(self, node, match, props):
member_name = props['member_name']
@@ -352,28 +358,36 @@ class DocFormatter(object):
else:
return make_page_id(node)
- def format_xref(self, node, **attrdict):
+ def format_xref(self, node, pluralize=False, **attrdict):
if node is None or not hasattr(node, 'namespace'):
attrs = [('xref', 'index')] + list(sorted(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
+ return self.format_xref(node.parent, pluralize=pluralize, **attrdict) + '.' + node.name
elif node.namespace is self._transformer.namespace:
- return self.format_internal_xref(node, attrdict)
+ return self.format_internal_xref(node, attrdict, pluralize=pluralize)
else:
- return self.format_external_xref(node, attrdict)
+ return self.format_external_xref(node, attrdict, pluralize=pluralize)
- def format_internal_xref(self, node, attrdict):
+ def format_internal_xref(self, node, attrdict, pluralize=False):
attrs = [('xref', make_page_id(node))] + list(sorted(attrdict.items()))
- return xmlwriter.build_xml_tag('link', attrs)
+ if not pluralize:
+ return xmlwriter.build_xml_tag('link', attrs)
+ else:
+ return xmlwriter.build_xml_tag('link', attrs, make_page_id(node) +
+ "s")
- def format_external_xref(self, node, attrdict):
+ def format_external_xref(self, node, attrdict, pluralize=False):
ns = node.namespace
attrs = [('href', '../%s-%s/%s.html' % (ns.name, str(ns.version),
make_page_id(node)))]
attrs += list(sorted(attrdict.items()))
- return xmlwriter.build_xml_tag('link', attrs, self.format_page_name(node))
+ if not pluralize:
+ return xmlwriter.build_xml_tag('link', attrs, self.format_page_name(node))
+ else:
+ return xmlwriter.build_xml_tag('link', attrs,
+ self.format_page_name(node) + "s")
def field_is_writable(self, field):
return True