From 5daabd23cfd13662e74ce8d069204882eb1fbad9 Mon Sep 17 00:00:00 2001 From: Amar Takhar Date: Fri, 15 Jan 2016 23:41:06 -0500 Subject: Initial reST documentation using Sphinx. --- common/rtemsext.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 common/rtemsext.py (limited to 'common/rtemsext.py') diff --git a/common/rtemsext.py b/common/rtemsext.py new file mode 100644 index 0000000..85b989e --- /dev/null +++ b/common/rtemsext.py @@ -0,0 +1,57 @@ +from docutils import nodes +import sphinx.domains.std + +# Borrowed from: http://stackoverflow.com/questions/13848328/sphinx-references-to-other-sections-containing-section-number-and-section-title +class CustomStandardDomain(sphinx.domains.std.StandardDomain): + + def __init__(self, env): + env.settings['footnote_references'] = 'superscript' + sphinx.domains.std.StandardDomain.__init__(self, env) + + def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode): + res = super(CustomStandardDomain, self).resolve_xref(env, fromdocname, builder, typ, target, node, contnode) + + if res is None: + return res + + if typ == 'ref' and not node['refexplicit']: + docname, labelid, sectname = self.data['labels'].get(target, ('','','')) + res['refdocname'] = docname + + return res + +def doctree_resolved(app, doctree, docname): + secnums = app.builder.env.toc_secnumbers + for node in doctree.traverse(nodes.reference): + if 'refdocname' in node: + refdocname = node['refdocname'] + if refdocname in secnums: + secnum = secnums[refdocname] + emphnode = node.children[0] + textnode = emphnode.children[0] + + toclist = app.builder.env.tocs[refdocname] + anchorname = None + for refnode in toclist.traverse(nodes.reference): + if refnode.astext() == textnode.astext(): + anchorname = refnode['anchorname'] + if anchorname is None: + continue + sec_number = secnum[anchorname] + chapter = sec_number[0] + section = None + + if len(sec_number) > 1: + section = ".".join(map(str, sec_number[1:])) + + if section: + node.replace(emphnode, nodes.Text("Chapter %s Section %s - %s" % (chapter, section, textnode))) + else: + node.replace(emphnode, nodes.Text("Chapter %s - %s" % (chapter, textnode))) + +def setup(app): + app.override_domain(CustomStandardDomain) + app.connect('doctree-resolved', doctree_resolved) + + return {'version': "1.0", 'parallel_read_safe': True} + -- cgit v1.2.3