source: rtems-docs/common/rtemsext.py @ 3a71759

4.115am
Last change on this file since 3a71759 was 5daabd2, checked in by Amar Takhar <amar@…>, on Jan 16, 2016 at 4:41:06 AM

Initial reST documentation using Sphinx.

  • Property mode set to 100644
File size: 1.9 KB
Line 
1from docutils import nodes
2import sphinx.domains.std
3
4# Borrowed from: http://stackoverflow.com/questions/13848328/sphinx-references-to-other-sections-containing-section-number-and-section-title
5class CustomStandardDomain(sphinx.domains.std.StandardDomain):
6
7        def __init__(self, env):
8                env.settings['footnote_references'] = 'superscript'
9                sphinx.domains.std.StandardDomain.__init__(self, env)
10
11        def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode):
12                res = super(CustomStandardDomain, self).resolve_xref(env, fromdocname, builder, typ, target, node, contnode)
13       
14                if res is None:
15                        return res
16               
17                if typ == 'ref' and not node['refexplicit']:
18                        docname, labelid, sectname = self.data['labels'].get(target, ('','',''))
19                        res['refdocname'] = docname
20               
21                return res
22
23def doctree_resolved(app, doctree, docname):
24        secnums = app.builder.env.toc_secnumbers
25        for node in doctree.traverse(nodes.reference):
26                if 'refdocname' in node:
27                        refdocname = node['refdocname']
28                        if refdocname in secnums:
29                                secnum = secnums[refdocname]
30                                emphnode = node.children[0]
31                                textnode = emphnode.children[0]
32
33                                toclist = app.builder.env.tocs[refdocname]
34                                anchorname = None
35                                for refnode in toclist.traverse(nodes.reference):
36                                        if refnode.astext() == textnode.astext():
37                                                anchorname = refnode['anchorname']
38                                if anchorname is None:
39                                        continue
40                                sec_number = secnum[anchorname]
41                                chapter = sec_number[0]
42                                section = None
43
44                                if len(sec_number) > 1:
45                                        section = ".".join(map(str, sec_number[1:]))
46
47                                if section:
48                                        node.replace(emphnode, nodes.Text("Chapter %s Section %s - %s" % (chapter, section, textnode)))
49                                else:
50                                        node.replace(emphnode, nodes.Text("Chapter %s - %s" % (chapter, textnode)))
51
52def setup(app):
53        app.override_domain(CustomStandardDomain)
54        app.connect('doctree-resolved', doctree_resolved)
55
56        return {'version': "1.0", 'parallel_read_safe': True}
57
Note: See TracBrowser for help on using the repository browser.