mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Merged in jonwaltman/sphinx-info (pull request #5)
This commit is contained in:
commit
96749c5749
@ -308,7 +308,8 @@ def render_dot_texinfo(self, node, code, options, prefix='graphviz'):
|
||||
raise nodes.SkipNode
|
||||
if fname is not None:
|
||||
self.body.append('\n\n@float\n')
|
||||
if node.get('caption'):
|
||||
caption = node.get('caption')
|
||||
if caption:
|
||||
self.body.append('@caption{%s}\n' % self.escape_arg(caption))
|
||||
self.body.append('@image{%s,,,[graphviz],png}\n'
|
||||
'@end float\n\n' % fname[:-4])
|
||||
|
@ -10,8 +10,9 @@
|
||||
"""
|
||||
|
||||
import re
|
||||
from os import path
|
||||
import string
|
||||
import textwrap
|
||||
from os import path
|
||||
|
||||
from docutils import nodes, writers
|
||||
|
||||
@ -319,6 +320,9 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
s = s.replace('@', '@@')
|
||||
s = s.replace('{', '@{')
|
||||
s = s.replace('}', '@}')
|
||||
# prevent `` and '' quote conversion
|
||||
s = s.replace('``', "`@w{`}")
|
||||
s = s.replace("''", "'@w{'}")
|
||||
# prevent "--" from being converted to an "em dash"
|
||||
# s = s.replace('-', '@w{-}')
|
||||
return s
|
||||
@ -348,6 +352,11 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
s = ' '.join(s.split()).strip()
|
||||
return s
|
||||
|
||||
def ensure_eol(self):
|
||||
"""Ensure the last line in body is terminated by new line."""
|
||||
if self.body and self.body[-1][-1:] != '\n':
|
||||
self.body.append('\n')
|
||||
|
||||
def format_menu_entry(self, name, node_name, desc):
|
||||
if name == node_name:
|
||||
s = '* %s:: ' % (name,)
|
||||
@ -703,7 +712,8 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
def visit_block_quote(self, node):
|
||||
self.body.append('\n@quotation\n')
|
||||
def depart_block_quote(self, node):
|
||||
self.body.append('\n@end quotation\n\n')
|
||||
self.ensure_eol()
|
||||
self.body.append('@end quotation\n')
|
||||
|
||||
def visit_literal_block(self, node):
|
||||
self.body.append('\n@example\n')
|
||||
@ -795,7 +805,8 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
bullet = node.get('bullet', '*')
|
||||
self.body.append('\n\n@itemize %s\n' % bullet)
|
||||
def depart_bullet_list(self, node):
|
||||
self.body.append('\n@end itemize\n\n')
|
||||
self.ensure_eol()
|
||||
self.body.append('@end itemize\n')
|
||||
|
||||
def visit_enumerated_list(self, node):
|
||||
# doesn't support Roman numerals
|
||||
@ -806,10 +817,11 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
start = node.get('start', starters.get(enum, ''))
|
||||
self.body.append('\n\n@enumerate %s\n' % start)
|
||||
def depart_enumerated_list(self, node):
|
||||
self.body.append('\n@end enumerate\n\n')
|
||||
self.ensure_eol()
|
||||
self.body.append('@end enumerate\n')
|
||||
|
||||
def visit_list_item(self, node):
|
||||
self.body.append('\n@item\n')
|
||||
self.body.append('\n@item ')
|
||||
def depart_list_item(self, node):
|
||||
pass
|
||||
|
||||
@ -818,7 +830,8 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
def visit_option_list(self, node):
|
||||
self.body.append('\n\n@table @option\n')
|
||||
def depart_option_list(self, node):
|
||||
self.body.append('\n@end table\n\n')
|
||||
self.ensure_eol()
|
||||
self.body.append('@end table\n')
|
||||
|
||||
def visit_option_list_item(self, node):
|
||||
pass
|
||||
@ -856,7 +869,8 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
def visit_definition_list(self, node):
|
||||
self.body.append('\n\n@table @asis\n')
|
||||
def depart_definition_list(self, node):
|
||||
self.body.append('\n@end table\n\n')
|
||||
self.ensure_eol()
|
||||
self.body.append('@end table\n')
|
||||
|
||||
def visit_definition_list_item(self, node):
|
||||
self.at_item_x = '@item'
|
||||
@ -946,7 +960,8 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
def visit_field_list(self, node):
|
||||
self.body.append('\n\n@itemize @w\n')
|
||||
def depart_field_list(self, node):
|
||||
self.body.append('\n@end itemize\n\n')
|
||||
self.ensure_eol()
|
||||
self.body.append('@end itemize\n')
|
||||
|
||||
def visit_field(self, node):
|
||||
if not isinstance(node.parent, nodes.field_list):
|
||||
@ -971,15 +986,15 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
if not name:
|
||||
name = self.escape(node[0].astext())
|
||||
self.body.append('\n@cartouche\n'
|
||||
'@quotation %s\n' % name)
|
||||
'@quotation %s ' % name)
|
||||
def depart_admonition(self, node):
|
||||
self.body.append('\n@end quotation\n'
|
||||
'@end cartouche\n\n')
|
||||
self.ensure_eol()
|
||||
self.body.append('@end quotation\n'
|
||||
'@end cartouche\n')
|
||||
|
||||
def _make_visit_admonition(typ):
|
||||
def visit(self, node):
|
||||
self.body.append('\n@cartouche\n'
|
||||
'@quotation %s\n' % self.escape(_(typ)))
|
||||
self.visit_admonition(node, self.escape(_(typ)))
|
||||
return visit
|
||||
|
||||
visit_attention = _make_visit_admonition('Attention')
|
||||
@ -1083,7 +1098,7 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
width = self.tex_image_length(attrs.get('width', ''))
|
||||
height = self.tex_image_length(attrs.get('height', ''))
|
||||
alt = self.escape_arg(attrs.get('alt', ''))
|
||||
self.body.append('\n\n@image{%s,%s,%s,%s,%s}\n\n' %
|
||||
self.body.append('\n@image{%s,%s,%s,%s,%s}\n' %
|
||||
(name, width, height, alt, ext[1:]))
|
||||
def depart_image(self, node):
|
||||
pass
|
||||
@ -1127,8 +1142,9 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
pass
|
||||
|
||||
def visit_comment(self, node):
|
||||
self.body.append('\n')
|
||||
for line in node.astext().splitlines():
|
||||
self.body.append('\n@c %s\n' % line)
|
||||
self.body.append('@c %s\n' % line)
|
||||
raise nodes.SkipNode
|
||||
|
||||
def visit_problematic(self, node):
|
||||
@ -1178,6 +1194,11 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
self.body.append('}')
|
||||
|
||||
def visit_index(self, node):
|
||||
# terminate the line but don't prevent paragraph breaks
|
||||
if isinstance(node.parent, nodes.paragraph):
|
||||
self.ensure_eol()
|
||||
else:
|
||||
self.body.append('\n')
|
||||
for entry in node['entries']:
|
||||
typ, text, tid, text2 = entry
|
||||
text = self.escape_menu(text)
|
||||
@ -1186,7 +1207,7 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
def visit_refcount(self, node):
|
||||
self.body.append('\n')
|
||||
def depart_refcount(self, node):
|
||||
self.body.append('\n\n')
|
||||
self.body.append('\n')
|
||||
|
||||
def visit_versionmodified(self, node):
|
||||
intro = versionlabels[node['type']] % node['version']
|
||||
@ -1194,9 +1215,9 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
intro += ': '
|
||||
else:
|
||||
intro += '.'
|
||||
self.body.append('\n\n%s' % self.escape(intro))
|
||||
self.body.append('\n%s' % self.escape(intro))
|
||||
def depart_versionmodified(self, node):
|
||||
self.body.append('\n\n')
|
||||
self.body.append('\n')
|
||||
|
||||
def visit_start_of_file(self, node):
|
||||
# add a document target
|
||||
@ -1239,33 +1260,27 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
|
||||
## Desc
|
||||
|
||||
desc_map = {
|
||||
'cfunction': 'C Function',
|
||||
'classmethod': 'Class Method',
|
||||
'cmacro': 'C Macro',
|
||||
'cmdoption': 'Command Option',
|
||||
'cmember': 'C Member',
|
||||
'confval': 'Configuration Value',
|
||||
'ctype': 'C Type',
|
||||
'cvar': 'C Variable',
|
||||
'describe': 'Description',
|
||||
'envvar': 'Environment Variable',
|
||||
'staticmethod': 'Static Method',
|
||||
'var': 'Variable',
|
||||
}
|
||||
|
||||
def visit_desc(self, node):
|
||||
self.at_deffnx = '@deffn'
|
||||
def depart_desc(self, node):
|
||||
self.body.append('\n@end deffn\n\n')
|
||||
self.ensure_eol()
|
||||
self.body.append('@end deffn\n')
|
||||
|
||||
def visit_desc_signature(self, node):
|
||||
self.desctype = node.parent['desctype'].strip()
|
||||
if self.desctype != 'describe':
|
||||
objtype = node.parent['objtype']
|
||||
if objtype != 'describe':
|
||||
for id in node.get('ids'):
|
||||
self.add_anchor(id, node)
|
||||
typ = _(self.desc_map.get(self.desctype,
|
||||
self.desctype.capitalize()))
|
||||
self.body.append('\n%s {%s} ' % (self.at_deffnx, self.escape_arg(typ)))
|
||||
# use the full name of the objtype for the category
|
||||
try:
|
||||
domain = self.builder.env.domains[node.parent['domain']]
|
||||
primary = self.builder.config.primary_domain
|
||||
name = domain.get_type_name(domain.object_types[objtype],
|
||||
primary == domain.name)
|
||||
except KeyError:
|
||||
name = objtype
|
||||
category = self.escape_arg(string.capwords(name))
|
||||
self.body.append('\n%s {%s} ' % (self.at_deffnx, category))
|
||||
self.at_deffnx = '@deffnx'
|
||||
def depart_desc_signature(self, node):
|
||||
self.body.append("\n")
|
||||
@ -1301,7 +1316,10 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
self.body.append(', ')
|
||||
else:
|
||||
self.first_param = 0
|
||||
self.body.append(self.escape(node.astext()))
|
||||
text = self.escape(node.astext())
|
||||
# replace no-break spaces with normal ones
|
||||
text = text.replace(u' ', '@w{ }')
|
||||
self.body.append(text)
|
||||
raise nodes.SkipNode
|
||||
|
||||
def visit_desc_optional(self, node):
|
||||
@ -1313,7 +1331,7 @@ class TexinfoTranslator(nodes.NodeVisitor):
|
||||
raise nodes.SkipNode
|
||||
|
||||
def visit_desc_content(self, node):
|
||||
self.body.append("\n")
|
||||
pass
|
||||
def depart_desc_content(self, node):
|
||||
pass
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user