diff options
author | tk0miya <i.tkomiya@gmail.com> | 2014-10-01 11:38:41 +0900 |
---|---|---|
committer | tk0miya <i.tkomiya@gmail.com> | 2014-10-01 11:38:41 +0900 |
commit | 5a28480439a6b83094e1c5330649c6db0e4e40bd (patch) | |
tree | e5715df53a7333a99ca6e5c0d9794a84121271b9 | |
parent | b455264f6c8b5c1a15d4cc78fffcd65b4cbe3f9f (diff) | |
download | sphinx-5a28480439a6b83094e1c5330649c6db0e4e40bd.tar.gz |
Support :numref: in LaTeX writer
-rw-r--r-- | sphinx/addnodes.py | 4 | ||||
-rw-r--r-- | sphinx/domains/std.py | 15 | ||||
-rw-r--r-- | sphinx/writers/html.py | 6 | ||||
-rw-r--r-- | sphinx/writers/latex.py | 12 |
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): |