From 1227799abf0d0e3dafa0d61461cf613468e894df Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Wed, 30 Jun 2021 12:40:12 +0200 Subject: [PATCH 1/2] texinfo: fix emission of @footnote directives. Right now, labels are emitted as part of a @footnote directive. That results in e.g. Note1: (@footnote{@w{(1)} Future versions of GCC may zero-extend... }) which is incorrect and should be rather: Note1: (@footnote{Future versions of GCC may zero-extend...}) --- sphinx/writers/texinfo.py | 12 +++++++++--- tests/test_build_texinfo.py | 8 ++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/sphinx/writers/texinfo.py b/sphinx/writers/texinfo.py index 6df558323f..ebb05d9abf 100644 --- a/sphinx/writers/texinfo.py +++ b/sphinx/writers/texinfo.py @@ -761,10 +761,12 @@ def visit_title_reference(self, node: Element) -> None: # -- Blocks def visit_paragraph(self, node: Element) -> None: - self.body.append('\n') + if not self.in_footnote: + self.body.append('\n') def depart_paragraph(self, node: Element) -> None: - self.body.append('\n') + if not self.in_footnote: + self.body.append('\n') def visit_block_quote(self, node: Element) -> None: self.body.append('\n@quotation\n') @@ -1223,7 +1225,11 @@ def depart_sidebar(self, node: Element) -> None: self.depart_topic(node) def visit_label(self, node: Element) -> None: - self.body.append('@w{(') + # label numbering is automatically generated by Texinfo + if self.in_footnote: + raise nodes.SkipNode + else: + self.body.append('@w{(') def depart_label(self, node: Element) -> None: self.body.append(')} ') diff --git a/tests/test_build_texinfo.py b/tests/test_build_texinfo.py index 546ccaabf4..807b6b4f75 100644 --- a/tests/test_build_texinfo.py +++ b/tests/test_build_texinfo.py @@ -112,3 +112,11 @@ def test_texinfo_escape_id(app, status, warning): assert translator.escape_id('Hello(world)') == 'Hello world' assert translator.escape_id('Hello world.') == 'Hello world' assert translator.escape_id('.') == '.' + + +@pytest.mark.sphinx('texinfo', testroot='footnotes') +def test_texinfo_footnote(app, status, warning): + app.builder.build_all() + + output = (app.outdir / 'python.texi').read_text() + assert 'First footnote: @footnote{First}' in output From 8e23b03263ce731a70bd3ddee99eead73a47663d Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sat, 11 Dec 2021 23:05:33 +0900 Subject: [PATCH 2/2] refactor: texinfo: Remove CR char from output The CR character was added for readability of output. But it makes the texinfo writer a bit complicated. This removes it from output to keep our code simple (reducing conditions). --- sphinx/writers/texinfo.py | 6 ++---- tests/test_build_texinfo.py | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/sphinx/writers/texinfo.py b/sphinx/writers/texinfo.py index 44842f7541..9a281dc9a9 100644 --- a/sphinx/writers/texinfo.py +++ b/sphinx/writers/texinfo.py @@ -765,12 +765,10 @@ def visit_title_reference(self, node: Element) -> None: # -- Blocks def visit_paragraph(self, node: Element) -> None: - if not self.in_footnote: - self.body.append('\n') + self.body.append('\n') def depart_paragraph(self, node: Element) -> None: - if not self.in_footnote: - self.body.append('\n') + self.body.append('\n') def visit_block_quote(self, node: Element) -> None: self.body.append('\n@quotation\n') diff --git a/tests/test_build_texinfo.py b/tests/test_build_texinfo.py index 249587ccf1..bece3a558d 100644 --- a/tests/test_build_texinfo.py +++ b/tests/test_build_texinfo.py @@ -119,7 +119,7 @@ def test_texinfo_footnote(app, status, warning): app.builder.build_all() output = (app.outdir / 'python.texi').read_text() - assert 'First footnote: @footnote{First}' in output + assert 'First footnote: @footnote{\nFirst\n}' in output @pytest.mark.sphinx('texinfo')