summaryrefslogtreecommitdiff
path: root/sphinx/writers/texinfo.py
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/writers/texinfo.py')
-rw-r--r--sphinx/writers/texinfo.py40
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):