diff options
author | Chris Johns <chrisj@rtems.org> | 2017-08-07 21:58:52 +1000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2017-08-07 21:58:52 +1000 |
commit | aa4f8e2e436d6c49e1524a4a3fb164b28632d894 (patch) | |
tree | 5b7d3e70c2d5640495281b2665212f07bb41b251 /common/sphinxcontrib/bibtex/roles.py | |
parent | bsp: Optional clock driver shutdown (diff) | |
download | rtems-docs-aa4f8e2e436d6c49e1524a4a3fb164b28632d894.tar.bz2 |
Add the sphinxcontrib.bibtex extension to the repo.
Diffstat (limited to 'common/sphinxcontrib/bibtex/roles.py')
-rw-r--r-- | common/sphinxcontrib/bibtex/roles.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/common/sphinxcontrib/bibtex/roles.py b/common/sphinxcontrib/bibtex/roles.py new file mode 100644 index 0000000..bbbd1f0 --- /dev/null +++ b/common/sphinxcontrib/bibtex/roles.py @@ -0,0 +1,43 @@ +""" + New Doctree Roles + ~~~~~~~~~~~~~~~~~ + + .. autoclass:: CiteRole + :show-inheritance: + + .. automethod:: result_nodes +""" + +from pybtex.plugin import find_plugin +import pybtex.database +from sphinx.roles import XRefRole # for :cite: + + +class CiteRole(XRefRole): + + """Class for processing the :rst:role:`cite` role.""" + backend = find_plugin('pybtex.backends', 'docutils')() + + def result_nodes(self, document, env, node, is_ref): + """Transform reference node into a citation reference, + and note that the reference was cited. + """ + keys = node['reftarget'].split(',') + # Note that at this point, usually, env.bibtex_cache.bibfiles + # is still empty because the bibliography directive may not + # have been processed yet, so we cannot get the actual entry. + # Instead, we simply fake an entry with the desired key, and + # fix the label at doctree-resolved time. This happens in + # process_citation_references. + refnodes = [ + self.backend.citation_reference(_fake_entry(key), document) + for key in keys] + for key in keys: + env.bibtex_cache.add_cited(key, env.docname) + return refnodes, [] + + +def _fake_entry(key): + entry = pybtex.database.Entry(type_="") + entry.key = key + return entry |