From 61f839c6be907ee79440c2fa9c1f4abc111486eb 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 | 11 ++++++++--- tests/test_build_texinfo.py | 8 ++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/sphinx/writers/texinfo.py b/sphinx/writers/texinfo.py index 6df558323f..7596fca641 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,10 @@ def depart_sidebar(self, node: Element) -> None: self.depart_topic(node) def visit_label(self, node: Element) -> None: - self.body.append('@w{(') + 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..59b4103bc7 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 '@footnote{@w{' not in output + assert 'First footnote: @footnote{First}' in output