]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-97607: Fix content parsing in the impl-detail reST directive (GH-97652)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sun, 2 Oct 2022 05:27:56 +0000 (22:27 -0700)
committerGitHub <noreply@github.com>
Sun, 2 Oct 2022 05:27:56 +0000 (22:27 -0700)
* Don't parse content as arg in the impl-detail directive

This does not change the (untranslated) output,
but ensures that the doctree node metadata is correct.
which fixes gh-97607 with the text not being translated.
It also simplifies the code and logic
and makes it consistant with the docutils built-in directives.

* Remove unused branch from impl-detail directive handling no-content case

This is not used anywhere in the docs and lacks a clear use case,
and is more likely a mistake which is now flagged at build time.
This simplifies the logic from two code paths to one,
and makes the behavior consistant with similar built-in directives
(e.g. the various admonition types).

* Further simplify impl-detail reST directive code
(cherry picked from commit e8165d47b852e933c176209ddc0b5836a9b0d5f4)

Co-authored-by: C.A.M. Gerlach <CAM.Gerlach@Gerlach.CAM>
Doc/tools/extensions/pyspecific.py

index 915b28a561a760fb2fd0295cd7a3ff98bc041dce..9abdde0dc3b1a56c5642e65ccbbd16881f95d984 100644 (file)
@@ -101,33 +101,24 @@ def source_role(typ, rawtext, text, lineno, inliner, options={}, content=[]):
 class ImplementationDetail(Directive):
 
     has_content = True
-    required_arguments = 0
-    optional_arguments = 1
     final_argument_whitespace = True
 
     # This text is copied to templates/dummy.html
     label_text = 'CPython implementation detail:'
 
     def run(self):
+        self.assert_has_content()
         pnode = nodes.compound(classes=['impl-detail'])
         label = translators['sphinx'].gettext(self.label_text)
         content = self.content
         add_text = nodes.strong(label, label)
-        if self.arguments:
-            n, m = self.state.inline_text(self.arguments[0], self.lineno)
-            pnode.append(nodes.paragraph('', '', *(n + m)))
         self.state.nested_parse(content, self.content_offset, pnode)
-        if pnode.children and isinstance(pnode[0], nodes.paragraph):
-            content = nodes.inline(pnode[0].rawsource, translatable=True)
-            content.source = pnode[0].source
-            content.line = pnode[0].line
-            content += pnode[0].children
-            pnode[0].replace_self(nodes.paragraph('', '', content,
-                                                  translatable=False))
-            pnode[0].insert(0, add_text)
-            pnode[0].insert(1, nodes.Text(' '))
-        else:
-            pnode.insert(0, nodes.paragraph('', '', add_text))
+        content = nodes.inline(pnode[0].rawsource, translatable=True)
+        content.source = pnode[0].source
+        content.line = pnode[0].line
+        content += pnode[0].children
+        pnode[0].replace_self(nodes.paragraph(
+            '', '', add_text, nodes.Text(' '), content, translatable=False))
         return [pnode]