summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES1
-rw-r--r--doc/extdev/index.rst5
-rw-r--r--sphinx/addnodes.py5
-rw-r--r--sphinx/config.py2
-rw-r--r--sphinx/domains/math.py14
-rw-r--r--sphinx/ext/mathbase.py40
-rw-r--r--sphinx/writers/latex.py19
7 files changed, 45 insertions, 41 deletions
diff --git a/CHANGES b/CHANGES
index cd00e52d6..a26226e85 100644
--- a/CHANGES
+++ b/CHANGES
@@ -74,6 +74,7 @@ Deprecated
* ``BuildEnvironment.topickle()`` is deprecated
* ``sphinx.ext.mathbase.math`` node is deprecated
* ``sphinx.ext.mathbase.displaymath`` node is deprecated
+* ``sphinx.ext.mathbase.eqref`` node is deprecated
* ``sphinx.ext.mathbase.is_in_section_title()`` is deprecated
* ``sphinx.ext.mathbase.MathDomain`` is deprecated
diff --git a/doc/extdev/index.rst b/doc/extdev/index.rst
index c48f93012..5b9838244 100644
--- a/doc/extdev/index.rst
+++ b/doc/extdev/index.rst
@@ -146,6 +146,11 @@ The following is a list of deprecated interface.
- 3.0
- ``docutils.nodes.math_block``
+ * - ``sphinx.ext.mathbase.eqref`` (node)
+ - 1.8
+ - 3.0
+ - ``sphinx.addnodes.math_reference``
+
* - ``viewcode_import`` (config value)
- 1.8
- 3.0
diff --git a/sphinx/addnodes.py b/sphinx/addnodes.py
index 37e54cfc7..40390f346 100644
--- a/sphinx/addnodes.py
+++ b/sphinx/addnodes.py
@@ -231,6 +231,11 @@ class displaymath(math_block):
"""
+class math_reference(nodes.Inline, nodes.Referential, nodes.TextElement):
+ """Node for a reference for equation."""
+ pass
+
+
# other directive-level nodes
class index(nodes.Invisible, nodes.Inline, nodes.TextElement):
diff --git a/sphinx/config.py b/sphinx/config.py
index 74b97cbeb..4ad09c08b 100644
--- a/sphinx/config.py
+++ b/sphinx/config.py
@@ -140,6 +140,8 @@ class Config(object):
numfig_format = ({}, 'env', []), # will be initialized in init_numfig_format()
math_number_all = (False, 'env', []),
+ math_eqref_format = (None, 'env', string_classes),
+ math_numfig = (True, 'env', []),
tls_verify = (True, 'env', []),
tls_cacerts = (None, 'env', []),
smartquotes = (True, 'env', []),
diff --git a/sphinx/domains/math.py b/sphinx/domains/math.py
index 4230eb7a9..a5de8a892 100644
--- a/sphinx/domains/math.py
+++ b/sphinx/domains/math.py
@@ -12,10 +12,10 @@
from docutils import nodes
from docutils.nodes import make_id
-from sphinx.addnodes import math_block as displaymath
+from sphinx.addnodes import math_block as displaymath, math_reference
from sphinx.domains import Domain
-from sphinx.ext.mathbase import eqref
from sphinx.locale import __
+from sphinx.roles import XRefRole
from sphinx.util import logging
from sphinx.util.nodes import make_refnode
@@ -29,6 +29,13 @@ if False:
logger = logging.getLogger(__name__)
+class MathReferenceRole(XRefRole):
+ def result_nodes(self, document, env, node, is_ref):
+ # type: (nodes.Node, BuildEnvironment, nodes.Node, bool) -> Tuple[List[nodes.Node], List[nodes.Node]] # NOQA
+ node['refdomain'] = 'math'
+ return [node], []
+
+
class MathDomain(Domain):
"""Mathematics domain."""
name = 'math'
@@ -63,7 +70,7 @@ class MathDomain(Domain):
docname, number = self.data['objects'].get(target, (None, None))
if docname:
if builder.name == 'latex':
- newnode = eqref('', **node.attributes)
+ newnode = math_reference('', **node.attributes)
newnode['docname'] = docname
newnode['target'] = target
return newnode
@@ -121,6 +128,7 @@ class MathDomain(Domain):
def setup(app):
# type: (Sphinx) -> Dict[unicode, Any]
app.add_domain(MathDomain)
+ app.add_role('eq', MathReferenceRole(warn_dangling=True))
return {
'version': 'builtin',
diff --git a/sphinx/ext/mathbase.py b/sphinx/ext/mathbase.py
index 86c810341..448f329b2 100644
--- a/sphinx/ext/mathbase.py
+++ b/sphinx/ext/mathbase.py
@@ -14,12 +14,10 @@ import warnings
from docutils import nodes
from sphinx.addnodes import math, math_block as displaymath
-from sphinx.config import string_classes
+from sphinx.addnodes import math_reference as eqref # NOQA # to keep compatibility
from sphinx.deprecation import RemovedInSphinx30Warning
from sphinx.domains.math import MathDomain # NOQA # to keep compatibility
-from sphinx.locale import __
-from sphinx.roles import XRefRole
-from sphinx.util import logging
+from sphinx.domains.math import MathReferenceRole as EqXRefRole # NOQA # to keep compatibility
if False:
# For type annotation
@@ -27,19 +25,6 @@ if False:
from docutils.writers.html4css1 import Writer # NOQA
from sphinx.application import Sphinx # NOQA
-logger = logging.getLogger(__name__)
-
-
-class eqref(nodes.Inline, nodes.TextElement):
- pass
-
-
-class EqXRefRole(XRefRole):
- def result_nodes(self, document, env, node, is_ref):
- # type: (nodes.Node, BuildEnvironment, nodes.Node, bool) -> Tuple[List[nodes.Node], List[nodes.Node]] # NOQA
- node['refdomain'] = 'math'
- return [node], []
-
def get_node_equation_number(writer, node):
# type: (Writer, nodes.Node) -> unicode
@@ -111,30 +96,9 @@ def is_in_section_title(node):
return False
-def latex_visit_eqref(self, node):
- # type: (nodes.NodeVisitor, eqref) -> None
- label = "equation:%s:%s" % (node['docname'], node['target'])
- eqref_format = self.builder.config.math_eqref_format
- if eqref_format:
- try:
- ref = '\\ref{%s}' % label
- self.body.append(eqref_format.format(number=ref))
- except KeyError as exc:
- logger.warning(__('Invalid math_eqref_format: %r'), exc,
- location=node)
- self.body.append('\\eqref{%s}' % label)
- else:
- self.body.append('\\eqref{%s}' % label)
- raise nodes.SkipNode
-
-
def setup_math(app, htmlinlinevisitors, htmldisplayvisitors):
# type: (Sphinx, Tuple[Callable, Any], Tuple[Callable, Any]) -> None
- app.add_config_value('math_eqref_format', None, 'env', string_classes)
- app.add_config_value('math_numfig', True, 'env')
app.add_node(math, override=True,
html=htmlinlinevisitors)
app.add_node(displaymath, override=True,
html=htmldisplayvisitors)
- app.add_node(eqref, latex=(latex_visit_eqref, None))
- app.add_role('eq', EqXRefRole(warn_dangling=True))
diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py
index d4abacd38..f0a5b1195 100644
--- a/sphinx/writers/latex.py
+++ b/sphinx/writers/latex.py
@@ -2568,6 +2568,25 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.builder.config.math_number_all))
raise nodes.SkipNode
+ def visit_math_reference(self, node):
+ # type: (nodes.Node) -> None
+ label = "equation:%s:%s" % (node['docname'], node['target'])
+ eqref_format = self.builder.config.math_eqref_format
+ if eqref_format:
+ try:
+ ref = r'\ref{%s}' % label
+ self.body.append(eqref_format.format(number=ref))
+ except KeyError as exc:
+ logger.warning(__('Invalid math_eqref_format: %r'), exc,
+ location=node)
+ self.body.append(r'\eqref{%s}' % label)
+ else:
+ self.body.append(r'\eqref{%s}' % label)
+
+ def depart_math_reference(self, node):
+ # type: (nodes.Node) -> None
+ pass
+
def unknown_visit(self, node):
# type: (nodes.Node) -> None
raise NotImplementedError('Unknown node: ' + node.__class__.__name__)