diff --git a/CHANGES b/CHANGES index 00e84847ba7..c08803c6356 100644 --- a/CHANGES +++ b/CHANGES @@ -38,6 +38,8 @@ Bugs fixed crashed * #5561: make all-pdf fails with old xindy version * #5557: quickstart: --no-batchfile isn't honored +* #3080: texinfo: multiline rubrics are broken +* #3080: texinfo: multiline citations are broken Testing -------- diff --git a/sphinx/writers/texinfo.py b/sphinx/writers/texinfo.py index 701880a6194..3343a9ec142 100644 --- a/sphinx/writers/texinfo.py +++ b/sphinx/writers/texinfo.py @@ -673,9 +673,11 @@ def visit_rubric(self, node): except IndexError: rubric = self.rubrics[-1] self.body.append('\n%s ' % rubric) + self.escape_newlines += 1 def depart_rubric(self, node): # type: (nodes.Node) -> None + self.escape_newlines -= 1 self.body.append('\n\n') def visit_subtitle(self, node): @@ -920,12 +922,14 @@ def visit_footnote_reference(self, node): def visit_citation(self, node): # type: (nodes.Node) -> None + self.body.append('\n') for id in node.get('ids'): self.add_anchor(id, node) + self.escape_newlines += 1 def depart_citation(self, node): # type: (nodes.Node) -> None - pass + self.escape_newlines -= 1 def visit_citation_reference(self, node): # type: (nodes.Node) -> None diff --git a/tests/roots/test-markup-citation/conf.py b/tests/roots/test-markup-citation/conf.py new file mode 100644 index 00000000000..31e7a6ed4ad --- /dev/null +++ b/tests/roots/test-markup-citation/conf.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +master_doc = 'index' + +latex_documents = [ + (master_doc, 'test.tex', 'The basic Sphinx documentation for testing', 'Sphinx', 'report') +] diff --git a/tests/roots/test-markup-citation/index.rst b/tests/roots/test-markup-citation/index.rst new file mode 100644 index 00000000000..238f0932b3b --- /dev/null +++ b/tests/roots/test-markup-citation/index.rst @@ -0,0 +1,9 @@ +test-markup-citation +===================== + +This is a citation ref; [CITE1]_ and [CITE2]_. + +.. [CITE1] This is a citation + +.. [CITE2] This is + a multiline citation diff --git a/tests/roots/test-markup-rubric/conf.py b/tests/roots/test-markup-rubric/conf.py new file mode 100644 index 00000000000..31e7a6ed4ad --- /dev/null +++ b/tests/roots/test-markup-rubric/conf.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +master_doc = 'index' + +latex_documents = [ + (master_doc, 'test.tex', 'The basic Sphinx documentation for testing', 'Sphinx', 'report') +] diff --git a/tests/roots/test-markup-rubric/index.rst b/tests/roots/test-markup-rubric/index.rst new file mode 100644 index 00000000000..c2ae68a86ea --- /dev/null +++ b/tests/roots/test-markup-rubric/index.rst @@ -0,0 +1,7 @@ +test-markup-rubric +=================== + +.. rubric:: This is a rubric + +.. rubric:: This is + a multiline rubric diff --git a/tests/test_build_texinfo.py b/tests/test_build_texinfo.py index b1fd8c2a97e..3b7e0c3dee0 100644 --- a/tests/test_build_texinfo.py +++ b/tests/test_build_texinfo.py @@ -72,3 +72,24 @@ def test_texinfo(app, status, warning): assert False, 'makeinfo exited with return code %s' % retcode finally: os.chdir(cwd) + + +@pytest.mark.sphinx('texinfo', testroot='markup-rubric') +def test_texinfo_rubric(app, status, warning): + app.build() + + output = (app.outdir / 'python.texi').text() + assert '@heading This is a rubric' in output + assert '@heading This is a multiline rubric' in output + + +@pytest.mark.sphinx('texinfo', testroot='markup-citation') +def test_texinfo_citation(app, status, warning): + app.builder.build_all() + + output = (app.outdir / 'python.texi').text() + assert 'This is a citation ref; @ref{1,,[CITE1]} and @ref{2,,[CITE2]}.' in output + assert ('@anchor{index cite1}@anchor{1}@w{(CITE1)} \n' + 'This is a citation\n') in output + assert ('@anchor{index cite2}@anchor{2}@w{(CITE2)} \n' + 'This is a multiline citation\n') in output