]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-101845: pyspecific: Fix i18n for availability directive (GH-101846)
authorJean Abou-Samra <jean@abou-samra.fr>
Sun, 12 Feb 2023 14:20:11 +0000 (15:20 +0100)
committerGitHub <noreply@github.com>
Sun, 12 Feb 2023 14:20:11 +0000 (15:20 +0100)
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.

Doc/tools/extensions/pyspecific.py

index db7bb3b44219d24059aa0f0ab23a709c8abfeb93..d659a4a54b9d118685c618da6fab597226662e3b 100644 (file)
@@ -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