diff options
author | Jean Abou-Samra <jean@abou-samra.fr> | 2023-02-12 15:20:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-12 15:20:11 +0100 |
commit | 6ef6915d3530e844243893f91bf4bd702dfef570 (patch) | |
tree | e97939b46b72b0473d20fd2887df80fa1523b4e7 | |
parent | dfc2e065a2e71011017077e549cd2f9bf4944c54 (diff) | |
download | cpython-git-6ef6915d3530e844243893f91bf4bd702dfef570.tar.gz |
gh-101845: pyspecific: Fix i18n for availability directive (GH-101846)
pyspecific: Fix i18n for availability directive
If the directive has content, the previous code would nest paragraph
nodes from that content inside a general paragraph node, which confuses
Sphinx and leads it to drop the content when translating. Instead, use a
container node for the body.
Also use set_source_info so that any warnings have location info.
-rw-r--r-- | Doc/tools/extensions/pyspecific.py | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/Doc/tools/extensions/pyspecific.py b/Doc/tools/extensions/pyspecific.py index db7bb3b442..d659a4a54b 100644 --- a/Doc/tools/extensions/pyspecific.py +++ b/Doc/tools/extensions/pyspecific.py @@ -28,6 +28,7 @@ except ImportError: from sphinx.environment import NoUri from sphinx.locale import _ as sphinx_gettext from sphinx.util import status_iterator, logging +from sphinx.util.docutils import SphinxDirective from sphinx.util.nodes import split_explicit_title from sphinx.writers.text import TextWriter, TextTranslator @@ -119,7 +120,7 @@ class ImplementationDetail(Directive): # Support for documenting platform availability -class Availability(Directive): +class Availability(SphinxDirective): has_content = True required_arguments = 1 @@ -139,18 +140,19 @@ class Availability(Directive): def run(self): availability_ref = ':ref:`Availability <availability>`: ' + avail_nodes, avail_msgs = self.state.inline_text( + availability_ref + self.arguments[0], + self.lineno) pnode = nodes.paragraph(availability_ref + self.arguments[0], - classes=["availability"],) - n, m = self.state.inline_text(availability_ref, self.lineno) - pnode.extend(n + m) - n, m = self.state.inline_text(self.arguments[0], self.lineno) - pnode.extend(n + m) + '', *avail_nodes, *avail_msgs) + self.set_source_info(pnode) + cnode = nodes.container("", pnode, classes=["availability"]) + self.set_source_info(cnode) if self.content: - self.state.nested_parse(self.content, self.content_offset, pnode) - + self.state.nested_parse(self.content, self.content_offset, cnode) self.parse_platforms() - return [pnode] + return [cnode] def parse_platforms(self): """Parse platform information from arguments |