diff options
Diffstat (limited to 'sphinx/transforms/post_transforms/compat.py')
| -rw-r--r-- | sphinx/transforms/post_transforms/compat.py | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/sphinx/transforms/post_transforms/compat.py b/sphinx/transforms/post_transforms/compat.py index 0f0b2367d..94360f038 100644 --- a/sphinx/transforms/post_transforms/compat.py +++ b/sphinx/transforms/post_transforms/compat.py @@ -13,7 +13,9 @@ import warnings from typing import TYPE_CHECKING from docutils import nodes +from docutils.writers.docutils_xml import XMLTranslator +from sphinx.addnodes import math_block, displaymath from sphinx.deprecation import RemovedInSphinx30Warning from sphinx.transforms import SphinxTransform from sphinx.util import logging @@ -41,14 +43,44 @@ class MathNodeMigrator(SphinxTransform): def apply(self): # type: () -> None for node in self.document.traverse(nodes.math): + # case: old styled ``math`` node generated by old extensions if len(node) == 0: - # convert an old styled node to new one warnings.warn("math node for Sphinx was replaced by docutils'. " "Please use ``docutils.nodes.math`` instead.", RemovedInSphinx30Warning) equation = node['latex'] node += nodes.Text(equation, equation) + translator = self.app.builder.get_translator_class() + if hasattr(translator, 'visit_displaymath') and translator != XMLTranslator: + # case: old translators which does not support ``math_block`` node + warnings.warn("Translator for %s does not support math_block node'. " + "Please update your extension." % translator, + RemovedInSphinx30Warning) + for node in self.document.traverse(math_block): + alt = displaymath(latex=node.astext(), + number=node.get('number'), + label=node.get('label'), + nowrap=node.get('nowrap'), + docname=node.get('docname')) + node.replace(alt) + else: + # case: old styled ``displaymath`` node generated by old extensions + for node in self.document.traverse(math_block): + if len(node) == 0: + warnings.warn("math node for Sphinx was replaced by docutils'. " + "Please use ``docutils.nodes.math_block`` instead.", + RemovedInSphinx30Warning) + latex = node['latex'] + node += nodes.Text(latex, latex) + def setup(app): + # type: (Sphinx) -> Dict[unicode, Any] app.add_post_transform(MathNodeMigrator) + + return { + 'version': 'builtin', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + } |
