mirror of
https://github.com/Kitware/CMake.git
synced 2026-06-24 08:47:59 +00:00
Help: Restore sphinx pre-5.0 compatibility
Revise commit 97d13c3053 (Help: Improve diagnostics documentation,
2026-04-30, v4.4.0-rc1~227^2~2) to switch `cmake.py`'s sphinx api usage
from 7.4+ features to 4.0+ features.
Replace `parse_text_to_nodes` and `parse_content_to_nodes` with
equivalent, backwards compatible sphinx code using existing api calls.
Signed-off-by: John Parent <john.parent@kitware.com>
This commit is contained in:
@@ -13,6 +13,7 @@ import sphinx
|
||||
# The following imports may fail if we don't have Sphinx 2.x or later.
|
||||
if sphinx.version_info >= (2,):
|
||||
from docutils import io, nodes
|
||||
from docutils.statemachine import ViewList
|
||||
from docutils.nodes import Element, Node, TextElement, system_message
|
||||
from docutils.parsers.rst import Directive, directives
|
||||
from docutils.transforms import Transform
|
||||
@@ -145,6 +146,12 @@ logger = logging.getLogger(__name__)
|
||||
sig_end_re = re.compile(r'(?<=[)])\n')
|
||||
|
||||
|
||||
def _parse_rst(state, text: str) -> list[Node]:
|
||||
node = nodes.Element()
|
||||
state.nested_parse(ViewList([text], source=''), 0, node)
|
||||
return node.children
|
||||
|
||||
|
||||
@dataclass
|
||||
class ObjectEntry:
|
||||
docname: str
|
||||
@@ -559,7 +566,7 @@ class CMakeDiagnosticObject(CMakeObject):
|
||||
|
||||
def _build_field(self, name: str, content: str | list[Node]) -> Node:
|
||||
if type(content) is not list:
|
||||
content = self.parse_text_to_nodes(content)
|
||||
content = _parse_rst(self.state,content)
|
||||
|
||||
name_node = nodes.field_name(text=name)
|
||||
body_node = nodes.field_body('', *content)
|
||||
@@ -568,13 +575,13 @@ class CMakeDiagnosticObject(CMakeObject):
|
||||
def _build_cli(self) -> list[Node]:
|
||||
cname = self.targetname[4:].lower().replace('_', '-')
|
||||
ctext = f'-W[no-][error=]{cname}'
|
||||
return self.parse_text_to_nodes(f':option:`{ctext} <cmake -W>`')
|
||||
return _parse_rst(self.state,f':option:`{ctext} <cmake -W>`')
|
||||
|
||||
def _build_preset_refs(self) -> list[Node]:
|
||||
p = self._preset_name()
|
||||
w = f':preset:`warnings.{p} <configurePresets.warnings.{p}>`'
|
||||
e = f':preset:`errors.{p} <configurePresets.errors.{p}>`'
|
||||
return self.parse_text_to_nodes(f'{w}, {e}')
|
||||
return _parse_rst(self.state,f'{w}, {e}')
|
||||
|
||||
def run(self) -> list[Node]:
|
||||
self.domain, self.objtype = self.name.split(':', 1)
|
||||
@@ -590,11 +597,12 @@ class CMakeDiagnosticObject(CMakeObject):
|
||||
headers += self._build_field('Default', default)
|
||||
|
||||
if parent:
|
||||
parentRef = self.parse_text_to_nodes(f':diagnostic:`{parent}`')
|
||||
parentRef = _parse_rst(self.state,f':diagnostic:`{parent}`')
|
||||
headers += self._build_field('Parent', parentRef)
|
||||
|
||||
content = self.parse_content_to_nodes()
|
||||
return [headers] + content
|
||||
node = nodes.Element()
|
||||
self.state.nested_parse(self.content, self.content_offset, node)
|
||||
return [headers] + node.children
|
||||
|
||||
|
||||
class CMakeReferenceRole:
|
||||
|
||||
Reference in New Issue
Block a user