summaryrefslogtreecommitdiff
path: root/sphinx/util/docfields.py
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/util/docfields.py')
-rw-r--r--sphinx/util/docfields.py23
1 files changed, 17 insertions, 6 deletions
diff --git a/sphinx/util/docfields.py b/sphinx/util/docfields.py
index abb73288..46f89430 100644
--- a/sphinx/util/docfields.py
+++ b/sphinx/util/docfields.py
@@ -29,11 +29,13 @@ def _is_single_paragraph(node):
class Field(object):
- """
- A doc field that is never grouped. It can have an argument or not, the
+ """A doc field that is never grouped. It can have an argument or not, the
argument can be linked using a specified *rolename*. Field should be used
for doc fields that usually don't occur more than once.
+ The body can be linked using a specified *bodyrolename* if the content is
+ just a single inline or text node.
+
Example::
:returns: description of the return value
@@ -42,19 +44,22 @@ class Field(object):
is_grouped = False
is_typed = False
- def __init__(self, name, names=(), label=None, has_arg=True, rolename=None):
+ def __init__(self, name, names=(), label=None, has_arg=True, rolename=None,
+ bodyrolename=None):
self.name = name
self.names = names
self.label = label
self.has_arg = has_arg
self.rolename = rolename
+ self.bodyrolename = bodyrolename
- def make_xref(self, rolename, domain, target, innernode=nodes.emphasis):
+ def make_xref(self, rolename, domain, target, innernode=nodes.emphasis,
+ contnode=None):
if not rolename:
- return innernode(target, target)
+ return contnode or innernode(target, target)
refnode = addnodes.pending_xref('', refdomain=domain, refexplicit=False,
reftype=rolename, reftarget=target)
- refnode += innernode(target, target)
+ refnode += contnode or innernode(target, target)
return refnode
def make_entry(self, fieldarg, content):
@@ -67,6 +72,12 @@ class Field(object):
fieldname += nodes.Text(' ')
fieldname += self.make_xref(self.rolename, domain,
fieldarg, nodes.Text)
+ if len(content) == 1 and (
+ isinstance(content[0], nodes.Text) or
+ (isinstance(content[0], nodes.inline) and len(content[0]) == 1
+ and isinstance(content[0][0], nodes.Text))):
+ content = [self.make_xref(self.bodyrolename, domain,
+ content[0].astext(), contnode=content[0])]
fieldbody = nodes.field_body('', nodes.paragraph('', '', *content))
return nodes.field('', fieldname, fieldbody)