summaryrefslogtreecommitdiff
path: root/sphinx/domains/rst.py
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/domains/rst.py')
-rw-r--r--sphinx/domains/rst.py25
1 files changed, 23 insertions, 2 deletions
diff --git a/sphinx/domains/rst.py b/sphinx/domains/rst.py
index c51c85fe..2c304d0c 100644
--- a/sphinx/domains/rst.py
+++ b/sphinx/domains/rst.py
@@ -11,6 +11,8 @@
import re
+from six import iteritems
+
from sphinx import addnodes
from sphinx.domains import Domain, ObjType
from sphinx.locale import l_, _
@@ -117,10 +119,16 @@ class ReSTDomain(Domain):
}
def clear_doc(self, docname):
- for (typ, name), doc in self.data['objects'].items():
+ for (typ, name), doc in list(self.data['objects'].items()):
if doc == docname:
del self.data['objects'][typ, name]
+ def merge_domaindata(self, docnames, otherdata):
+ # XXX check duplicates
+ for (typ, name), doc in otherdata['objects'].items():
+ if doc in docnames:
+ self.data['objects'][typ, name] = doc
+
def resolve_xref(self, env, fromdocname, builder, typ, target, node,
contnode):
objects = self.data['objects']
@@ -132,6 +140,19 @@ class ReSTDomain(Domain):
objtype + '-' + target,
contnode, target + ' ' + objtype)
+ def resolve_any_xref(self, env, fromdocname, builder, target,
+ node, contnode):
+ objects = self.data['objects']
+ results = []
+ for objtype in self.object_types:
+ if (objtype, target) in self.data['objects']:
+ results.append(('rst:' + self.role_for_objtype(objtype),
+ make_refnode(builder, fromdocname,
+ objects[objtype, target],
+ objtype + '-' + target,
+ contnode, target + ' ' + objtype)))
+ return results
+
def get_objects(self):
- for (typ, name), docname in self.data['objects'].iteritems():
+ for (typ, name), docname in iteritems(self.data['objects']):
yield name, name, typ, docname, typ + '-' + name, 1