Copied parse_role and parse_directive from doc/conf.py, which provides parsing of directives and roles used in Sphinx documentation.

This commit is contained in:
Leontius Adhika Pradhana 2010-04-16 03:10:40 +08:00
parent 84a65f257b
commit 51ac251a95

View File

@ -20,11 +20,9 @@ from sphinx.roles import XRefRole
from sphinx.util.nodes import make_refnode from sphinx.util.nodes import make_refnode
from sphinx.util.docfields import Field, GroupedField, TypedField from sphinx.util.docfields import Field, GroupedField, TypedField
dir_sig_re = re.compile(r'\.\. (.+?)::(.*)$')
class ReSTMarkup(ObjectDescription): class ReSTMarkup(ObjectDescription):
def handle_signature(self, sig, signode):
signode.clear()
signode += addnodes.desc_name(sig, sig)
return sig
def add_target_and_index(self, name, sig, signode): def add_target_and_index(self, name, sig, signode):
if name not in self.state.document.ids: if name not in self.state.document.ids:
@ -51,10 +49,25 @@ class ReSTMarkup(ObjectDescription):
class ReSTDirective(ReSTMarkup): class ReSTDirective(ReSTMarkup):
pass 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()
dec_name = '.. %s::' % name
signode += addnodes.desc_name(dec_name, dec_name)
signode += addnodes.desc_addname(args, args)
return name
class ReSTRole(ReSTMarkup): class ReSTRole(ReSTMarkup):
pass def handle_signature(self, sig, signode):
signode += addnodes.desc_name(':%s:' % sig, ':%s:' % sig)
return sig
class ReSTXRefRole(XRefRole): class ReSTXRefRole(XRefRole):
pass pass