summaryrefslogtreecommitdiff
path: root/sphinx/transforms/post_transforms/compat.py
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/transforms/post_transforms/compat.py')
-rw-r--r--sphinx/transforms/post_transforms/compat.py34
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,
+ }