On Fri, Mar 7, 2025 at 12:46 AM Markus Armbruster <arm...@redhat.com> wrote:
> John Snow <js...@redhat.com> writes: > > > Create a compat module that handles sphinx cross-version compatibility > > issues. For the inaugural function, add a nested_parse() helper that > > handles differences in line number tracking for nested directive body > > parsing. > > > > Spoilers: there are more cross-version hacks to come throughout the > > series. > > > > Signed-off-by: John Snow <js...@redhat.com> > > --- > > docs/sphinx/compat.py | 33 +++++++++++++++++++++++++++++++++ > > 1 file changed, 33 insertions(+) > > create mode 100644 docs/sphinx/compat.py > > > > diff --git a/docs/sphinx/compat.py b/docs/sphinx/compat.py > > new file mode 100644 > > index 00000000000..792aca10e39 > > --- /dev/null > > +++ b/docs/sphinx/compat.py > > @@ -0,0 +1,33 @@ > > +""" > > +Sphinx cross-version compatibility goop > > +""" > > + > > +from docutils.nodes import Element > > + > > +from sphinx.util.docutils import SphinxDirective, switch_source_input > > +from sphinx.util.nodes import nested_parse_with_titles > > + > > + > > +def nested_parse(directive: SphinxDirective, content_node: Element) -> > None: > > + """ > > + This helper preserves error parsing context across sphinx versions. > > + """ > > + > > + # necessary so that the child nodes get the right source/line set > > + content_node.document = directive.state.document > > + > > + try: > > + # Modern sphinx (6.2.0+) supports proper offsetting for > > + # nested parse error context management > > + nested_parse_with_titles( > > + directive.state, > > + directive.content, > > + content_node, > > + content_offset=directive.content_offset, > > + ) > > + except TypeError: > > + # No content_offset argument. Fall back to SSI method. > > + with switch_source_input(directive.state, directive.content): > > + nested_parse_with_titles( > > + directive.state, directive.content, content_node > > + ) > > The function wraps around sphinx.util.nodes.nested_parse_with_titles(). > Would calling it nested_parse_with_titles() reduce readers' cognitive > load at call sites? > > Please do not misinterpret my question as a demand. It's really just a > question :) > Sure, easy change.