From 7a3ac740dadcd9eec3d9be2b3ff251280bf74996 Mon Sep 17 00:00:00 2001 From: Leontius Adhika Pradhana Date: Fri, 16 Apr 2010 17:51:19 +0800 Subject: [PATCH] Refactored ReSTDirective.handle_signature() and added the first tests for rst domain. --- sphinx/domains/rst.py | 27 +++++++++++++++++---------- tests/test_rst_domain.py | 26 ++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 10 deletions(-) create mode 100644 tests/test_rst_domain.py diff --git a/sphinx/domains/rst.py b/sphinx/domains/rst.py index 18b9e84b8..613db929f 100644 --- a/sphinx/domains/rst.py +++ b/sphinx/domains/rst.py @@ -53,24 +53,31 @@ class ReSTMarkup(ObjectDescription): return _('%s (role)') % name 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): """ Description of reST directive. """ def handle_signature(self, sig, signode): - if not sig.startswith('.'): - 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() + name, args = parse_directive(sig) dec_name = '.. %s::' % 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 class ReSTRole(ReSTMarkup): diff --git a/tests/test_rst_domain.py b/tests/test_rst_domain.py new file mode 100644 index 000000000..eb7dec2f4 --- /dev/null +++ b/tests/test_rst_domain.py @@ -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', '')