mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
#302: Fix links generated by the `:doc:
` role for LaTeX output.
For that, record the source docname in an xfileref node in node['refdoc']. The LaTeX builder creates one big toctree out of all documents, therefore "fromdocname" in resolve_references refers to the wrong file.
This commit is contained in:
parent
276fc659b0
commit
9d15d3f654
2
CHANGES
2
CHANGES
@ -1,6 +1,8 @@
|
|||||||
Release 0.6.4 (in development)
|
Release 0.6.4 (in development)
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
|
* #302: Fix links generated by the ``:doc:`` role for LaTeX output.
|
||||||
|
|
||||||
* #286: collect todo nodes after the whole document has been read;
|
* #286: collect todo nodes after the whole document has been read;
|
||||||
this allows placing substitution references in todo items.
|
this allows placing substitution references in todo items.
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ default_settings = {
|
|||||||
|
|
||||||
# This is increased every time an environment attribute is added
|
# This is increased every time an environment attribute is added
|
||||||
# or changed to properly invalidate pickle files.
|
# or changed to properly invalidate pickle files.
|
||||||
ENV_VERSION = 30
|
ENV_VERSION = 31
|
||||||
|
|
||||||
|
|
||||||
default_substitutions = set([
|
default_substitutions = set([
|
||||||
@ -1177,7 +1177,7 @@ class BuildEnvironment:
|
|||||||
docname, labelid = self.anonlabels.get(target, ('',''))
|
docname, labelid = self.anonlabels.get(target, ('',''))
|
||||||
sectname = node.astext()
|
sectname = node.astext()
|
||||||
if not docname:
|
if not docname:
|
||||||
self.warn(fromdocname, 'undefined label: %s' %
|
self.warn(node['refdoc'], 'undefined label: %s' %
|
||||||
target, node.line)
|
target, node.line)
|
||||||
else:
|
else:
|
||||||
# reference to the named label; the final node will
|
# reference to the named label; the final node will
|
||||||
@ -1186,7 +1186,7 @@ class BuildEnvironment:
|
|||||||
('','',''))
|
('','',''))
|
||||||
if not docname:
|
if not docname:
|
||||||
self.warn(
|
self.warn(
|
||||||
fromdocname,
|
node['refdoc'],
|
||||||
'undefined label: %s' % target + ' -- if you '
|
'undefined label: %s' % target + ' -- if you '
|
||||||
'don\'t give a link caption the label must '
|
'don\'t give a link caption the label must '
|
||||||
'precede a section header.', node.line)
|
'precede a section header.', node.line)
|
||||||
@ -1212,10 +1212,10 @@ class BuildEnvironment:
|
|||||||
elif typ == 'doc':
|
elif typ == 'doc':
|
||||||
# directly reference to document by source name;
|
# directly reference to document by source name;
|
||||||
# can be absolute or relative
|
# can be absolute or relative
|
||||||
docname = docname_join(fromdocname, target)
|
docname = docname_join(node['refdoc'], target)
|
||||||
if docname not in self.all_docs:
|
if docname not in self.all_docs:
|
||||||
self.warn(fromdocname, 'unknown document: %s' % docname,
|
self.warn(node['refdoc'],
|
||||||
node.line)
|
'unknown document: %s' % docname, node.line)
|
||||||
newnode = contnode
|
newnode = contnode
|
||||||
else:
|
else:
|
||||||
if node['refcaption']:
|
if node['refcaption']:
|
||||||
@ -1232,7 +1232,7 @@ class BuildEnvironment:
|
|||||||
# keywords are referenced by named labels
|
# keywords are referenced by named labels
|
||||||
docname, labelid, _ = self.labels.get(target, ('','',''))
|
docname, labelid, _ = self.labels.get(target, ('','',''))
|
||||||
if not docname:
|
if not docname:
|
||||||
#self.warn(fromdocname, 'unknown keyword: %s' % target)
|
#self.warn(node['refdoc'], 'unknown keyword: %s' % target)
|
||||||
newnode = contnode
|
newnode = contnode
|
||||||
else:
|
else:
|
||||||
newnode = nodes.reference('', '')
|
newnode = nodes.reference('', '')
|
||||||
@ -1261,11 +1261,11 @@ class BuildEnvironment:
|
|||||||
('', ''))
|
('', ''))
|
||||||
if not docname:
|
if not docname:
|
||||||
if typ == 'term':
|
if typ == 'term':
|
||||||
self.warn(fromdocname,
|
self.warn(node['refdoc'],
|
||||||
'term not in glossary: %s' % target,
|
'term not in glossary: %s' % target,
|
||||||
node.line)
|
node.line)
|
||||||
elif typ == 'citation':
|
elif typ == 'citation':
|
||||||
self.warn(fromdocname,
|
self.warn(node['refdoc'],
|
||||||
'citation not found: %s' % target,
|
'citation not found: %s' % target,
|
||||||
node.line)
|
node.line)
|
||||||
newnode = contnode
|
newnode = contnode
|
||||||
|
@ -203,6 +203,7 @@ def xfileref_role(typ, rawtext, text, lineno, inliner, options={}, content=[]):
|
|||||||
else:
|
else:
|
||||||
# remove all whitespace to avoid referencing problems
|
# remove all whitespace to avoid referencing problems
|
||||||
target = ws_re.sub('', target)
|
target = ws_re.sub('', target)
|
||||||
|
pnode['refdoc'] = env.docname
|
||||||
pnode['reftarget'] = target
|
pnode['reftarget'] = target
|
||||||
pnode += innernodetypes.get(typ, nodes.literal)(rawtext, title,
|
pnode += innernodetypes.get(typ, nodes.literal)(rawtext, title,
|
||||||
classes=['xref'])
|
classes=['xref'])
|
||||||
|
Loading…
Reference in New Issue
Block a user