diff --git a/Doc/tools/extensions/availability.py b/Doc/tools/extensions/availability.py index 1a2c7b02b44439..dfafaf2da245ba 100644 --- a/Doc/tools/extensions/availability.py +++ b/Doc/tools/extensions/availability.py @@ -2,8 +2,10 @@ from __future__ import annotations +from itertools import starmap from typing import TYPE_CHECKING +from babel.lists import format_list from docutils import nodes from sphinx import addnodes from sphinx.locale import _ as sphinx_gettext @@ -68,14 +70,15 @@ def run(self) -> list[nodes.container]: refwarn=True, ) sep = nodes.Text(": ") - parsed, msgs = self.state.inline_text(self.arguments[0], self.lineno) + platforms = self.parse_platforms() + platforms_text = f"{format_list(list(starmap(_format_platform, platforms.items())), locale=self.config.language)}." + parsed, msgs = self.state.inline_text(platforms_text, self.lineno) pnode = nodes.paragraph(title, "", refnode, sep, *parsed, *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, cnode) - self.parse_platforms() return [cnode] @@ -116,6 +119,14 @@ def parse_platforms(self) -> dict[str, str | bool]: return platforms +def _format_platform(platform: str, version: str | bool) -> str: + if version is True: + return platform + if not version: + return sphinx_gettext("not {platform}").format(platform=platform) + return f"{platform} ≥ {version}" + + def setup(app: Sphinx) -> ExtensionMetadata: app.add_directive("availability", Availability) diff --git a/Doc/tools/templates/dummy.html b/Doc/tools/templates/dummy.html index 4f0f6f91436a87..c1079ebf9d3a74 100644 --- a/Doc/tools/templates/dummy.html +++ b/Doc/tools/templates/dummy.html @@ -10,6 +10,7 @@ In extensions/availability.py: {% trans %}Availability{% endtrans %} +{% trans %}not {platform}{% endtrans %} In extensions/c_annotations.py: