diff options
Diffstat (limited to 'sphinx/domains/rst.py')
-rw-r--r-- | sphinx/domains/rst.py | 25 |
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 |