From 1227799abf0d0e3dafa0d61461cf613468e894df Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Wed, 30 Jun 2021 12:40:12 +0200 Subject: [PATCH] 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