| """Support for marking up implementation details.""" | |
| from __future__ import annotations | |
| from typing import TYPE_CHECKING | |
| from docutils import nodes | |
| from sphinx.locale import _ as sphinx_gettext | |
| from sphinx.util.docutils import SphinxDirective | |
| if TYPE_CHECKING: | |
| from sphinx.application import Sphinx | |
| from sphinx.util.typing import ExtensionMetadata | |
| class ImplementationDetail(SphinxDirective): | |
| has_content = True | |
| final_argument_whitespace = True | |
| # This text is copied to templates/dummy.html | |
| label_text = sphinx_gettext("CPython implementation detail:") | |
| def run(self): | |
| self.assert_has_content() | |
| content_nodes = self.parse_content_to_nodes() | |
| # insert our prefix at the start of the first paragraph | |
| first_node = content_nodes[0] | |
| first_node[:0] = [ | |
| nodes.strong(self.label_text, self.label_text), | |
| nodes.Text(" "), | |
| ] | |
| # create a new compound container node | |
| cnode = nodes.compound("", *content_nodes, classes=["impl-detail"]) | |
| self.set_source_info(cnode) | |
| return [cnode] | |
| def setup(app: Sphinx) -> ExtensionMetadata: | |
| app.add_directive("impl-detail", ImplementationDetail) | |
| return { | |
| "version": "1.0", | |
| "parallel_read_safe": True, | |
| "parallel_write_safe": True, | |
| } |