diff --git a/sphinx_immaterial/__init__.py b/sphinx_immaterial/__init__.py index 7e7536f60..e80e17b4f 100644 --- a/sphinx_immaterial/__init__.py +++ b/sphinx_immaterial/__init__.py @@ -16,6 +16,7 @@ from . import html_translator_mixin from .apidoc import apidoc_formatting +from .apidoc import fix_sphinx_issue_11147 # pylint: disable=unused-import from . import nav_adapt from . import sections diff --git a/sphinx_immaterial/apidoc/fix_sphinx_issue_11147.py b/sphinx_immaterial/apidoc/fix_sphinx_issue_11147.py new file mode 100644 index 000000000..9668a3309 --- /dev/null +++ b/sphinx_immaterial/apidoc/fix_sphinx_issue_11147.py @@ -0,0 +1,29 @@ +"""Monkey patches a fix for https://github.com/sphinx-doc/sphinx/pull/11147.""" + +import inspect + +import sphinx.util.nodes +import sphinx.util.docutils + + +def _monkey_patch_nested_parse_with_titles(): + orig_nested_parse_with_titles = sphinx.util.nodes.nested_parse_with_titles + + if list(inspect.signature(orig_nested_parse_with_titles).parameters.keys()) != [ + "state", + "content", + "node", + ]: + # Assume https://github.com/sphinx-doc/sphinx/pull/11147 has been merged. + return + + # Note that this is different from the fix in + # https://github.com/sphinx-doc/sphinx/pull/11147, since it is not practical + # to monkey patch all callers to pass in the `content_offset`. Instead, we + # use `switch_source_input`, which makes it unnecessary to pass in + # `content_offset`. + def nested_parse_with_titles(state, content, node): + with sphinx.util.docutils.switch_source_input(state, content): + return orig_nested_parse_with_titles(state, content, node) + + sphinx.util.nodes.nested_parse_with_titles = nested_parse_with_titles