Refactored ReSTDirective.handle_signature() and added the first tests for rst domain.

This commit is contained in:
Leontius Adhika Pradhana 2010-04-16 17:51:19 +08:00
parent 24cc2fd09c
commit 7a3ac740da
2 changed files with 43 additions and 10 deletions

View File

@ -53,24 +53,31 @@ class ReSTMarkup(ObjectDescription):
return _('%s (role)') % name return _('%s (role)') % name
return '' return ''
def parse_directive(d):
"""
Parses a directive. Returns (directive, arguments) string tuple.
if no arguments are given, returns (directive, '').
"""
dir = d.strip()
if not dir.startswith('.'):
# Assume it is a directive without syntax
return (dir, '')
m = dir_sig_re.match(dir)
if not m:
return (dir, '')
parsed_dir, parsed_args = m.groups()
return (parsed_dir.strip(), parsed_args.strip())
class ReSTDirective(ReSTMarkup): class ReSTDirective(ReSTMarkup):
""" """
Description of reST directive. Description of reST directive.
""" """
def handle_signature(self, sig, signode): def handle_signature(self, sig, signode):
if not sig.startswith('.'): name, args = parse_directive(sig)
dec_sig = '.. %s::' % sig
signode += addnodes.desc_name(dec_sig, dec_sig)
return sig
m = dir_sig_re.match(sig)
if not m:
signode += addnodes.desc_name(sig, sig)
return sig
name, args = m.groups()
dec_name = '.. %s::' % name dec_name = '.. %s::' % name
signode += addnodes.desc_name(dec_name, dec_name) signode += addnodes.desc_name(dec_name, dec_name)
signode += addnodes.desc_addname(args, args) if len(args) > 0:
signode += addnodes.desc_addname(args, args)
return name return name
class ReSTRole(ReSTMarkup): class ReSTRole(ReSTMarkup):

26
tests/test_rst_domain.py Normal file
View File

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
"""
test_rst_domain
~~~~~~~~~~~~~~~
Tests the reStructuredText domain.
:copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
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', '')