Cleanup trailing whitespace and fix a few nits with the rst domain.

This commit is contained in:
Georg Brandl
2010-04-17 10:29:14 +02:00
parent 7a3ac740da
commit 541e30b36e
3 changed files with 52 additions and 36 deletions

View File

@@ -599,38 +599,50 @@ These roles are provided to refer to the described objects:
js:data
js:attr
The reStructuredText domain
---------------------------
The reStructuredText domain (**rst**) provides the following directives:
The reStructuredText domain (name **rst**) provides the following directives:
.. directive:: .. rst:directive:: name
Describes a reST directive. The directive syntax (`..` prefix and
`::` suffix) is optional and will be automatically added if not
present. For example::
Describes a reST directive. The *name* can be a single directive name or
actual directive syntax (`..` prefix and `::` suffix) with arguments that
will be rendered differently. For example::
.. rst:directive:: foo
Foo description.
.. rst:directive:: .. bar:: baz
Bar description.
will be rendered as:
.. rst:directive:: foo
Foo description.
.. rst:directive:: .. bar:: baz
Bar description.
.. directive:: .. rst:role:: name
Describes a reST role. For example::
Describes a reST role. For example::
.. rst:role:: foo
Foo description.
will be rendered as:
.. rst:role:: foo
Foo description.
These roles are provided to refer to the described objects:
.. rst:role:: rst:dir

View File

@@ -18,20 +18,22 @@ from sphinx.directives import ObjectDescription
from sphinx.roles import XRefRole
from sphinx.util.nodes import make_refnode
dir_sig_re = re.compile(r'\.\. (.+?)::(.*)$')
class ReSTMarkup(ObjectDescription):
"""
Description of generic reST markup.
"""
def add_target_and_index(self, name, sig, signode):
if name not in self.state.document.ids:
signode['names'].append(name)
signode['ids'].append(name)
signode['first'] = (not self.names)
self.state.document.note_explicit_target(signode)
objects = self.env.domaindata['rst']['objects']
if name in objects:
self.env.warn(
@@ -45,7 +47,7 @@ class ReSTMarkup(ObjectDescription):
if indextext:
self.indexnode['entries'].append(('single', indextext,
name, name))
def get_index_text(self, objectname, name):
if self.objtype == 'directive':
return _('%s (directive)') % name
@@ -53,9 +55,10 @@ class ReSTMarkup(ObjectDescription):
return _('%s (role)') % name
return ''
def parse_directive(d):
"""
Parses a directive. Returns (directive, arguments) string tuple.
Parses a directive signature. Returns (directive, arguments) string tuple.
if no arguments are given, returns (directive, '').
"""
dir = d.strip()
@@ -66,33 +69,36 @@ def parse_directive(d):
if not m:
return (dir, '')
parsed_dir, parsed_args = m.groups()
return (parsed_dir.strip(), parsed_args.strip())
return (parsed_dir.strip(), ' ' + parsed_args.strip())
class ReSTDirective(ReSTMarkup):
"""
Description of reST directive.
Description of a reST directive.
"""
def handle_signature(self, sig, signode):
name, args = parse_directive(sig)
dec_name = '.. %s::' % name
signode += addnodes.desc_name(dec_name, dec_name)
desc_name = '.. %s::' % name
signode += addnodes.desc_name(desc_name, desc_name)
if len(args) > 0:
signode += addnodes.desc_addname(args, args)
return name
class ReSTRole(ReSTMarkup):
"""
Description of reST role.
Description of a reST role.
"""
def handle_signature(self, sig, signode):
signode += addnodes.desc_name(':%s:' % sig, ':%s:' % sig)
return sig
class ReSTDomain(Domain):
"""ReStructuredText domain."""
name = 'rst'
label = 'reStructuredText'
object_types = {
'directive': ObjType(l_('reStructuredText directive'), 'dir'),
'role': ObjType(l_('reStructuredText role'), 'role'),
@@ -108,23 +114,21 @@ class ReSTDomain(Domain):
initial_data = {
'objects': {}, # fullname -> docname, objtype
}
def clear_doc(self, docname):
for name, (doc, _) in self.data['objects'].items():
if doc == docname:
del self.data['objects'][name]
def resolve_xref(self, env, fromdocname, builder, typ, target, node,
contnode):
objects = self.data['objects']
if not target in objects:
return None
return make_refnode(builder, fromdocname, objects[target][0], target,
contnode, target)
def get_objects(self):
for name, (docname, type) in self.data['objects'].iteritems():
yield name, type, docname, name, 1

View File

@@ -12,15 +12,15 @@
from sphinx.domains.rst import parse_directive
def test_parse_directive():
s = parse_directive(' foö ')
assert s == ('foö', '')
s = parse_directive(' .. foö :: ')
assert s == ('foö', '')
s = parse_directive('.. foö:: args1 args2')
assert s == ('foö', 'args1 args2')
s = parse_directive('.. :: bar')
assert s == ('.. :: bar', '')