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 | 002ba5e4de60eaec1ecd5951f644aa9c32e919b6 (patch) | |
| tree | e5715df53a7333a99ca6e5c0d9794a84121271b9 | |
| parent | 6c798fd5f0661f7d49d75d63be3f1d7896a16ce0 (diff) | |
| download | sphinx-git-002ba5e4de60eaec1ecd5951f644aa9c32e919b6.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 9d8c46901..362abd5a4 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 c2290f910..93210618d 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 82c228bdc..f90f8f6c2 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 ea79761fe..2687fc7cc 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): |
