From 6fa92ffb1d683bdf5233f81b1df62e41108106f9 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sun, 10 Mar 2019 02:03:11 +0900 Subject: [PATCH] Fix #3859: manpage: code-block captions are not displayed correctly --- CHANGES | 1 + sphinx/writers/manpage.py | 15 +++++++++++++++ tests/test_build_manpage.py | 21 +++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/CHANGES b/CHANGES index 0b2c97c7ba1..f4bddaf25b9 100644 --- a/CHANGES +++ b/CHANGES @@ -30,6 +30,7 @@ Bugs fixed * #6136: ``:name:`` option for ``math`` directive causes a crash * #6139: intersphinx: ValueError on failure reporting * #6135: changes: Fix UnboundLocalError when any module found +* #3859: manpage: code-block captions are not displayed correctly Testing -------- diff --git a/sphinx/writers/manpage.py b/sphinx/writers/manpage.py index 9ce9f729389..0a382af05e1 100644 --- a/sphinx/writers/manpage.py +++ b/sphinx/writers/manpage.py @@ -462,6 +462,21 @@ def depart_manpage(self, node): # type: (nodes.Node) -> None return self.depart_strong(node) + # overwritten: handle section titles better than in 0.6 release + def visit_caption(self, node): + # type: (nodes.Element) -> None + if isinstance(node.parent, nodes.container) and node.parent.get('literal_block'): + self.body.append('.sp\n') + else: + super(ManualPageTranslator, self).visit_caption(node) + + def depart_caption(self, node): + # type: (nodes.Element) -> None + if isinstance(node.parent, nodes.container) and node.parent.get('literal_block'): + self.body.append('\n') + else: + super(ManualPageTranslator, self).depart_caption(node) + # overwritten: handle section titles better than in 0.6 release def visit_title(self, node): # type: (nodes.Node) -> None diff --git a/tests/test_build_manpage.py b/tests/test_build_manpage.py index 0a22d3ab666..6596e83b6e8 100644 --- a/tests/test_build_manpage.py +++ b/tests/test_build_manpage.py @@ -25,3 +25,24 @@ def test_all(app, status, warning): # term of definition list including nodes.strong assert '\n.B term1\n' in content assert '\nterm2 (\\fBstronged partially\\fP)\n' in content + + +@pytest.mark.sphinx('man', testroot='directive-code') +def test_captioned_code_block(app, status, warning): + app.builder.build_all() + content = (app.outdir / 'python.1').text() + + assert ('.sp\n' + 'caption \\fItest\\fP rb\n' + '.INDENT 0.0\n' + '.INDENT 3.5\n' + '.sp\n' + '.nf\n' + '.ft C\n' + 'def ruby?\n' + ' false\n' + 'end\n' + '.ft P\n' + '.fi\n' + '.UNINDENT\n' + '.UNINDENT\n' in content)