12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- # -*- coding: utf-8 -*-
- """
- :copyright: (c) 2010-2012 Fabien Potencier
- :license: MIT, see LICENSE for more details.
- """
- from docutils.parsers.rst import Directive, directives
- from docutils import nodes
- class refinclude(nodes.General, nodes.Element):
- pass
- class RefInclude(Directive):
- has_content = False
- required_arguments = 1
- optional_arguments = 0
- final_argument_whitespace = False
- option_spec = {}
- def run(self):
- document = self.state.document
- if not document.settings.file_insertion_enabled:
- return [document.reporter.warning('File insertion disabled',
- line=self.lineno)]
- env = self.state.document.settings.env
- target = self.arguments[0]
- node = refinclude()
- node['target'] = target
- return [node]
- def process_refinclude_nodes(app, doctree, docname):
- env = app.env
- for node in doctree.traverse(refinclude):
- docname, labelid, sectname = env.domaindata['std']['labels'].get(node['target'],
- ('','',''))
- if not docname:
- return [document.reporter.error('Unknown target name: "%s"' % node['target'],
- line=self.lineno)]
- resultnode = None
- dt = env.get_doctree(docname)
- for n in dt.traverse(nodes.section):
- if labelid in n['ids']:
- node.replace_self([n])
- break
- def setup(app):
- app.add_node(refinclude)
- app.add_directive('include-ref', RefInclude)
- app.connect('doctree-resolved', process_refinclude_nodes)
|