diff options
Diffstat (limited to 'sphinx/writers/texinfo.py')
-rw-r--r-- | sphinx/writers/texinfo.py | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/sphinx/writers/texinfo.py b/sphinx/writers/texinfo.py index fcfce03e..93d4d6aa 100644 --- a/sphinx/writers/texinfo.py +++ b/sphinx/writers/texinfo.py @@ -10,10 +10,11 @@ """ import re -import string import textwrap from os import path +from six import itervalues +from six.moves import range from docutils import nodes, writers from sphinx import addnodes, __version__ @@ -119,9 +120,12 @@ class TexinfoWriter(writers.Writer): def __init__(self, builder): writers.Writer.__init__(self) self.builder = builder + self.translator_class = ( + self.builder.translator_class or TexinfoTranslator) def translate(self): - self.visitor = visitor = TexinfoTranslator(self.document, self.builder) + self.visitor = visitor = self.translator_class( + self.document, self.builder) self.document.walkabout(visitor) visitor.finish() for attr in self.visitor_attributes: @@ -457,7 +461,7 @@ class TexinfoTranslator(nodes.NodeVisitor): indices_config = self.builder.config.texinfo_domain_indices if indices_config: - for domain in self.builder.env.domains.itervalues(): + for domain in itervalues(self.builder.env.domains): for indexcls in domain.indices: indexname = '%s-%s' % (domain.name, indexcls.name) if isinstance(indices_config, list): @@ -655,7 +659,7 @@ class TexinfoTranslator(nodes.NodeVisitor): def visit_reference(self, node): # an xref's target is displayed in Info so we ignore a few # cases for the sake of appearance - if isinstance(node.parent, (nodes.title, addnodes.desc_type,)): + if isinstance(node.parent, (nodes.title, addnodes.desc_type)): return if isinstance(node[0], nodes.image): return @@ -718,6 +722,11 @@ class TexinfoTranslator(nodes.NodeVisitor): def depart_reference(self, node): pass + def visit_number_reference(self, node): + text = nodes.Text(node.get('title', '#')) + self.visit_Text(text) + raise nodes.SkipNode + def visit_title_reference(self, node): text = node.astext() self.body.append('@cite{%s}' % self.escape_arg(text)) @@ -974,7 +983,7 @@ class TexinfoTranslator(nodes.NodeVisitor): self.body.append('\n%s\n' % self.entry_sep) self.entry_sep = '@tab' def depart_entry(self, node): - for i in xrange(node.get('morecols', 0)): + for i in range(node.get('morecols', 0)): self.body.append('\n@tab\n') ## Field Lists @@ -1050,9 +1059,11 @@ class TexinfoTranslator(nodes.NodeVisitor): raise nodes.SkipNode def visit_container(self, node): - pass + if node.get('literal_block'): + self.body.append('\n\n@float LiteralBlock\n') def depart_container(self, node): - pass + if node.get('literal_block'): + self.body.append('\n@end float\n\n') def visit_decoration(self, node): pass @@ -1091,13 +1102,15 @@ class TexinfoTranslator(nodes.NodeVisitor): self.body.append('\n@end float\n\n') def visit_caption(self, node): - if not isinstance(node.parent, nodes.figure): + if (isinstance(node.parent, nodes.figure) or + (isinstance(node.parent, nodes.container) and node.parent.get('literal_block'))): + self.body.append('\n@caption{') + else: self.builder.warn('caption not inside a figure.', (self.curfilestack[-1], node.line)) - return - self.body.append('\n@caption{') def depart_caption(self, node): - if isinstance(node.parent, nodes.figure): + if (isinstance(node.parent, nodes.figure) or + (isinstance(node.parent, nodes.container) and node.parent.get('literal_block'))): self.body.append('}\n') def visit_image(self, node): @@ -1207,6 +1220,11 @@ class TexinfoTranslator(nodes.NodeVisitor): def depart_literal_emphasis(self, node): self.body.append('}') + def visit_literal_strong(self, node): + self.body.append('@code{') + def depart_literal_strong(self, node): + self.body.append('}') + def visit_index(self, node): # terminate the line but don't prevent paragraph breaks if isinstance(node.parent, nodes.paragraph): |