From be39f48a13e14d291c7e92715ad0aa73394c4411 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Wed, 30 Jun 2021 15:25:25 +0200 Subject: [PATCH] texinfo: simplify variable in :samp: directivers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The following snippet: Show :samp:`Samp with a {variable}.` Ends in .info as: Show ‘Samp with a `variable'.’ Which is suboptimal and @var{variable} should be rather used. That results in ‘Samp with a VARIABLE.’. --- sphinx/writers/texinfo.py | 10 +++++++++- tests/test_build_texinfo.py | 11 +++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/sphinx/writers/texinfo.py b/sphinx/writers/texinfo.py index 6df558323f9..b72a477b978 100644 --- a/sphinx/writers/texinfo.py +++ b/sphinx/writers/texinfo.py @@ -194,6 +194,7 @@ def __init__(self, document: nodes.document, builder: "TexinfoBuilder") -> None: self.curfilestack: List[str] = [] self.footnotestack: List[Dict[str, List[Union[collected_footnote, bool]]]] = [] # NOQA self.in_footnote = 0 + self.in_code = 0 self.handled_abbrs: Set[str] = set() self.colwidths: List[int] = None @@ -809,15 +810,18 @@ def depart_strong(self, node: Element) -> None: self.body.append('}') def visit_emphasis(self, node: Element) -> None: - self.body.append('@emph{') + element = 'emph' if not self.in_code else 'var' + self.body.append('@%s{' % element) def depart_emphasis(self, node: Element) -> None: self.body.append('}') def visit_literal(self, node: Element) -> None: + self.in_code += 1 self.body.append('@code{') def depart_literal(self, node: Element) -> None: + self.in_code -= 1 self.body.append('}') def visit_superscript(self, node: Element) -> None: @@ -1300,15 +1304,19 @@ def depart_production(self, node: Element) -> None: pass def visit_literal_emphasis(self, node: Element) -> None: + self.in_code += 1 self.body.append('@code{') def depart_literal_emphasis(self, node: Element) -> None: + self.in_code -= 1 self.body.append('}') def visit_literal_strong(self, node: Element) -> None: + self.in_code += 1 self.body.append('@code{') def depart_literal_strong(self, node: Element) -> None: + self.in_code -= 1 self.body.append('}') def visit_index(self, node: Element) -> None: diff --git a/tests/test_build_texinfo.py b/tests/test_build_texinfo.py index 546ccaabf4b..f59b546e8c5 100644 --- a/tests/test_build_texinfo.py +++ b/tests/test_build_texinfo.py @@ -112,3 +112,14 @@ 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='root') +def test_texinfo_samp_with_variable(app, status, warning): + app.build() + + output = (app.outdir / 'sphinxtests.texi').read_text() + + assert '@code{@var{variable_only}}' in output + assert '@code{@var{variable} and text}' in output + assert '@code{Show @var{variable} in the middle}' in output