diff options
Diffstat (limited to 'sphinx/writers/manpage.py')
-rw-r--r-- | sphinx/writers/manpage.py | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/sphinx/writers/manpage.py b/sphinx/writers/manpage.py index 4343f6a33..7454a0f20 100644 --- a/sphinx/writers/manpage.py +++ b/sphinx/writers/manpage.py @@ -5,10 +5,12 @@ Manual page writer, extended for Sphinx custom nodes. - :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ +import warnings + from docutils import nodes from docutils.writers.manpage import ( MACRO_DEF, @@ -18,8 +20,8 @@ from docutils.writers.manpage import ( from sphinx import addnodes from sphinx.locale import admonitionlabels, _ -from sphinx.util.osutil import ustrftime from sphinx.util.compat import docutils_version +from sphinx.util.i18n import format_date class ManualPageWriter(Writer): @@ -30,12 +32,44 @@ class ManualPageWriter(Writer): self.builder.translator_class or ManualPageTranslator) def translate(self): + transform = NestedInlineTransform(self.document) + transform.apply() visitor = self.translator_class(self.builder, self.document) self.visitor = visitor self.document.walkabout(visitor) self.output = visitor.astext() +class NestedInlineTransform(object): + """ + Flatten nested inline nodes: + + Before: + <strong>foo=<emphasis>1</emphasis> + &bar=<emphasis>2</emphasis></strong> + After: + <strong>foo=</strong><emphasis>var</emphasis> + <strong>&bar=</strong><emphasis>2</emphasis> + """ + def __init__(self, document): + self.document = document + + def apply(self): + def is_inline(node): + return isinstance(node, (nodes.literal, nodes.emphasis, nodes.strong)) + + for node in self.document.traverse(is_inline): + if any(is_inline(subnode) for subnode in node): + pos = node.parent.index(node) + for subnode in reversed(node[1:]): + node.remove(subnode) + if is_inline(subnode): + node.parent.insert(pos + 1, subnode) + else: + newnode = node.__class__('', subnode, **node.attributes) + node.parent.insert(pos + 1, newnode) + + class ManualPageTranslator(BaseTranslator): """ Custom translator. @@ -63,8 +97,9 @@ class ManualPageTranslator(BaseTranslator): if builder.config.today: self._docinfo['date'] = builder.config.today else: - self._docinfo['date'] = ustrftime(builder.config.today_fmt or - _('%B %d, %Y')) + self._docinfo['date'] = format_date(builder.config.today_fmt or + _('MMMM dd, YYYY'), + language=builder.config.language) self._docinfo['copyright'] = builder.config.copyright self._docinfo['version'] = builder.config.version self._docinfo['manual_group'] = builder.config.project @@ -169,6 +204,8 @@ class ManualPageTranslator(BaseTranslator): self.depart_paragraph(node) def visit_termsep(self, node): + warnings.warn('sphinx.addnodes.termsep will be removed at Sphinx-1.5', + DeprecationWarning) self.body.append(', ') raise nodes.SkipNode @@ -343,6 +380,12 @@ class ManualPageTranslator(BaseTranslator): def depart_abbreviation(self, node): pass + def visit_manpage(self, node): + return self.visit_strong(node) + + def depart_manpage(self, node): + return self.depart_strong(node) + # overwritten: handle section titles better than in 0.6 release def visit_title(self, node): if isinstance(node.parent, addnodes.seealso): |