summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortk0miya <i.tkomiya@gmail.com>2014-10-01 11:38:41 +0900
committertk0miya <i.tkomiya@gmail.com>2014-10-01 11:38:41 +0900
commit5a28480439a6b83094e1c5330649c6db0e4e40bd (patch)
treee5715df53a7333a99ca6e5c0d9794a84121271b9
parentb455264f6c8b5c1a15d4cc78fffcd65b4cbe3f9f (diff)
downloadsphinx-5a28480439a6b83094e1c5330649c6db0e4e40bd.tar.gz
Support :numref: in LaTeX writer
-rw-r--r--sphinx/addnodes.py4
-rw-r--r--sphinx/domains/std.py15
-rw-r--r--sphinx/writers/html.py6
-rw-r--r--sphinx/writers/latex.py12
4 files changed, 32 insertions, 5 deletions
diff --git a/sphinx/addnodes.py b/sphinx/addnodes.py
index 9d8c4690..362abd5a 100644
--- a/sphinx/addnodes.py
+++ b/sphinx/addnodes.py
@@ -184,6 +184,10 @@ class pending_xref(nodes.Inline, nodes.Element):
"""
+class number_reference(nodes.reference):
+ """Node for number references, similar to pending_xref."""
+
+
class download_reference(nodes.reference):
"""Node for download references, similar to pending_xref."""
diff --git a/sphinx/domains/std.py b/sphinx/domains/std.py
index c2290f91..93210618 100644
--- a/sphinx/domains/std.py
+++ b/sphinx/domains/std.py
@@ -579,8 +579,10 @@ class StandardDomain(Domain):
labels[name] = docname, labelid, sectname
def build_reference_node(self, fromdocname, builder,
- docname, labelid, sectname):
- newnode = nodes.reference('', '', internal=True)
+ docname, labelid, sectname,
+ **options):
+ nodeclass = options.pop('nodeclass', nodes.reference)
+ newnode = nodeclass('', '', internal=True, **options)
innernode = nodes.emphasis(sectname, sectname)
if docname == fromdocname:
newnode['refid'] = labelid
@@ -636,12 +638,15 @@ class StandardDomain(Domain):
title = contnode.astext()
if labelid == title:
prefix = env.config.numfig_prefix.get(figtype, '')
- title = prefix + '.'.join(map(str, fignumber))
+ title = "%s#" % prefix
+ newtitle = prefix + '.'.join(map(str, fignumber))
else:
- title = title.replace('#', '.'.join(map(str, fignumber)))
+ newtitle = title.replace('#', '.'.join(map(str, fignumber)))
return self.build_reference_node(fromdocname, builder,
- docname, labelid, title)
+ docname, labelid, newtitle,
+ nodeclass=addnodes.number_reference,
+ title=title)
elif typ == 'keyword':
# keywords are oddballs: they are referenced by named labels
docname, labelid, _ = self.data['labels'].get(target, ('', '', ''))
diff --git a/sphinx/writers/html.py b/sphinx/writers/html.py
index 82c228bd..f90f8f6c 100644
--- a/sphinx/writers/html.py
+++ b/sphinx/writers/html.py
@@ -212,6 +212,12 @@ class HTMLTranslator(BaseTranslator):
self.body.append(('%s' + self.secnumber_suffix) %
'.'.join(map(str, node['secnumber'])))
+ def visit_number_reference(self, node):
+ self.visit_reference(node)
+
+ def depart_number_reference(self, node):
+ self.depart_reference(node)
+
# overwritten -- we don't want source comments to show up in the HTML
def visit_comment(self, node):
raise nodes.SkipNode
diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py
index ea79761f..2687fc7c 100644
--- a/sphinx/writers/latex.py
+++ b/sphinx/writers/latex.py
@@ -1244,6 +1244,18 @@ class LaTeXTranslator(nodes.NodeVisitor):
def depart_reference(self, node):
self.body.append(self.context.pop())
+ def visit_number_reference(self, node):
+ if node.get('refid'):
+ id = self.curfilestack[-1] + ':' + node['refid']
+ else:
+ id = node.get('refuri', '')[1:].replace('#', ':')
+
+ ref = '\\ref{%s}' % self.idescape(id)
+ title = node.get('title', '#')
+ self.body.append(title.replace('#', ref))
+
+ raise nodes.SkipNode
+
def visit_download_reference(self, node):
pass
def depart_download_reference(self, node):