summaryrefslogtreecommitdiff
path: root/sphinx/ext/mathbase.py
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/ext/mathbase.py')
-rw-r--r--sphinx/ext/mathbase.py62
1 files changed, 54 insertions, 8 deletions
diff --git a/sphinx/ext/mathbase.py b/sphinx/ext/mathbase.py
index 549ca30cd..f2e15b485 100644
--- a/sphinx/ext/mathbase.py
+++ b/sphinx/ext/mathbase.py
@@ -12,9 +12,11 @@
from docutils import nodes, utils
from docutils.parsers.rst import Directive, directives
+from sphinx.config import string_classes
from sphinx.roles import XRefRole
from sphinx.locale import __
from sphinx.domains import Domain
+from sphinx.util import logging
from sphinx.util.nodes import make_refnode, set_source_info
if False:
@@ -25,6 +27,8 @@ if False:
from sphinx.builders import Builder # NOQA
from sphinx.environment import BuildEnvironment # NOQA
+logger = logging.getLogger(__name__)
+
class math(nodes.Inline, nodes.TextElement):
pass
@@ -80,7 +84,20 @@ class MathDomain(Domain):
newnode['target'] = target
return newnode
else:
- title = nodes.Text("(%d)" % number)
+ if env.config.math_numfig and env.config.numfig:
+ if docname in env.toc_fignumbers:
+ id = 'equation-' + target
+ number = env.toc_fignumbers[docname]['displaymath'].get(id, ())
+ number = '.'.join(map(str, number))
+ else:
+ number = ''
+ try:
+ eqref_format = env.config.math_eqref_format or "({number})"
+ title = nodes.Text(eqref_format.format(number=number))
+ except KeyError as exc:
+ logger.warning('Invalid math_eqref_format: %r', exc,
+ location=node)
+ title = nodes.Text("(%d)" % number)
return make_refnode(builder, fromdocname, docname,
"equation-" + target, title)
else:
@@ -116,6 +133,23 @@ class MathDomain(Domain):
return len(targets) + 1
+def get_node_equation_number(writer, node):
+ if writer.builder.config.math_numfig and writer.builder.config.numfig:
+ figtype = 'displaymath'
+ if writer.builder.name == 'singlehtml':
+ key = u"%s/%s" % (writer.docnames[-1], figtype)
+ else:
+ key = figtype
+
+ id = node['ids'][0]
+ number = writer.builder.fignumbers.get(key, {}).get(id, ())
+ number = '.'.join(map(str, number))
+ else:
+ number = node['number']
+
+ return number
+
+
def wrap_displaymath(math, label, numbering):
# type: (unicode, unicode, bool) -> unicode
def is_equation(part):
@@ -264,7 +298,17 @@ def latex_visit_displaymath(self, node):
def latex_visit_eqref(self, node):
# type: (nodes.NodeVisitor, eqref) -> None
label = "equation:%s:%s" % (node['docname'], node['target'])
- self.body.append('\\eqref{%s}' % label)
+ 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
@@ -320,6 +364,8 @@ def texinfo_depart_displaymath(self, node):
def setup_math(app, htmlinlinevisitors, htmldisplayvisitors):
# type: (Sphinx, Tuple[Callable, Any], Tuple[Callable, Any]) -> None
app.add_config_value('math_number_all', False, 'env')
+ app.add_config_value('math_eqref_format', None, 'env', string_classes)
+ app.add_config_value('math_numfig', True, 'env')
app.add_domain(MathDomain)
app.add_node(math, override=True,
latex=(latex_visit_math, None),
@@ -327,12 +373,12 @@ def setup_math(app, htmlinlinevisitors, htmldisplayvisitors):
man=(man_visit_math, None),
texinfo=(texinfo_visit_math, None),
html=htmlinlinevisitors)
- app.add_node(displaymath,
- latex=(latex_visit_displaymath, None),
- text=(text_visit_displaymath, None),
- man=(man_visit_displaymath, man_depart_displaymath),
- texinfo=(texinfo_visit_displaymath, texinfo_depart_displaymath),
- html=htmldisplayvisitors)
+ app.add_enumerable_node(displaymath, 'displaymath',
+ latex=(latex_visit_displaymath, None),
+ text=(text_visit_displaymath, None),
+ man=(man_visit_displaymath, man_depart_displaymath),
+ texinfo=(texinfo_visit_displaymath, texinfo_depart_displaymath),
+ html=htmldisplayvisitors)
app.add_node(eqref, latex=(latex_visit_eqref, None))
app.add_role('math', math_role)
app.add_role('eq', EqXRefRole(warn_dangling=True))