mirror of https://github.com/python/cpython
gh-97607: Fix content parsing in the impl-detail reST directive (#97652)
* 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
This commit is contained in:
parent
dcc82331c8
commit
e8165d47b8
|
@ -100,33 +100,24 @@ def source_role(typ, rawtext, text, lineno, inliner, options={}, content=[]):
|
||||||
class ImplementationDetail(Directive):
|
class ImplementationDetail(Directive):
|
||||||
|
|
||||||
has_content = True
|
has_content = True
|
||||||
required_arguments = 0
|
|
||||||
optional_arguments = 1
|
|
||||||
final_argument_whitespace = True
|
final_argument_whitespace = True
|
||||||
|
|
||||||
# This text is copied to templates/dummy.html
|
# This text is copied to templates/dummy.html
|
||||||
label_text = 'CPython implementation detail:'
|
label_text = 'CPython implementation detail:'
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
self.assert_has_content()
|
||||||
pnode = nodes.compound(classes=['impl-detail'])
|
pnode = nodes.compound(classes=['impl-detail'])
|
||||||
label = translators['sphinx'].gettext(self.label_text)
|
label = translators['sphinx'].gettext(self.label_text)
|
||||||
content = self.content
|
content = self.content
|
||||||
add_text = nodes.strong(label, label)
|
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)
|
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 = nodes.inline(pnode[0].rawsource, translatable=True)
|
content.source = pnode[0].source
|
||||||
content.source = pnode[0].source
|
content.line = pnode[0].line
|
||||||
content.line = pnode[0].line
|
content += pnode[0].children
|
||||||
content += pnode[0].children
|
pnode[0].replace_self(nodes.paragraph(
|
||||||
pnode[0].replace_self(nodes.paragraph('', '', content,
|
'', '', add_text, nodes.Text(' '), content, translatable=False))
|
||||||
translatable=False))
|
|
||||||
pnode[0].insert(0, add_text)
|
|
||||||
pnode[0].insert(1, nodes.Text(' '))
|
|
||||||
else:
|
|
||||||
pnode.insert(0, nodes.paragraph('', '', add_text))
|
|
||||||
return [pnode]
|
return [pnode]
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue