2
# A pair of directives for inserting content that will only appear in
3
# either html or latex.
6
from docutils.nodes import Body, Element
7
from docutils.writers.html4css1 import HTMLTranslator
8
from sphinx.latexwriter import LaTeXTranslator
9
from docutils.parsers.rst import directives
11
class html_only(Body, Element):
14
class latex_only(Body, Element):
17
def run(content, node_class, state, content_offset):
18
text = '\n'.join(content)
19
node = node_class(text)
20
state.nested_parse(content, content_offset, node)
24
from docutils.parsers.rst import Directive
26
from docutils.parsers.rst.directives import _directives
28
def html_only_directive(name, arguments, options, content, lineno,
29
content_offset, block_text, state, state_machine):
30
return run(content, html_only, state, content_offset)
32
def latex_only_directive(name, arguments, options, content, lineno,
33
content_offset, block_text, state, state_machine):
34
return run(content, latex_only, state, content_offset)
36
for func in (html_only_directive, latex_only_directive):
41
_directives['htmlonly'] = html_only_directive
42
_directives['latexonly'] = latex_only_directive
44
class OnlyDirective(Directive):
46
required_arguments = 0
47
optional_arguments = 0
48
final_argument_whitespace = True
52
self.assert_has_content()
53
return run(self.content, self.node_class,
54
self.state, self.content_offset)
56
class HtmlOnlyDirective(OnlyDirective):
57
node_class = html_only
59
class LatexOnlyDirective(OnlyDirective):
60
node_class = latex_only
62
directives.register_directive('htmlonly', HtmlOnlyDirective)
63
directives.register_directive('latexonly', LatexOnlyDirective)
66
app.add_node(html_only)
67
app.add_node(latex_only)
69
# Add visit/depart methods to HTML-Translator:
70
def visit_perform(self, node):
72
def depart_perform(self, node):
74
def visit_ignore(self, node):
76
def depart_ignore(self, node):
79
HTMLTranslator.visit_html_only = visit_perform
80
HTMLTranslator.depart_html_only = depart_perform
81
HTMLTranslator.visit_latex_only = visit_ignore
82
HTMLTranslator.depart_latex_only = depart_ignore
84
LaTeXTranslator.visit_html_only = visit_ignore
85
LaTeXTranslator.depart_html_only = depart_ignore
86
LaTeXTranslator.visit_latex_only = visit_perform
87
LaTeXTranslator.depart_latex_only = depart_perform