diff options
| -rw-r--r-- | CHANGES | 1 | ||||
| -rw-r--r-- | doc/extdev/index.rst | 5 | ||||
| -rw-r--r-- | sphinx/addnodes.py | 5 | ||||
| -rw-r--r-- | sphinx/config.py | 2 | ||||
| -rw-r--r-- | sphinx/domains/math.py | 14 | ||||
| -rw-r--r-- | sphinx/ext/mathbase.py | 40 | ||||
| -rw-r--r-- | sphinx/writers/latex.py | 19 |
7 files changed, 45 insertions, 41 deletions
@@ -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__) |
