| """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, |
| } |