2010-12-21 18:05:42 +00:00
|
|
|
'''
|
|
|
|
Extension for enhancing sphinx documentation generation for cython module
|
|
|
|
'''
|
2010-12-21 14:57:47 +00:00
|
|
|
|
2010-12-21 18:05:42 +00:00
|
|
|
def is_cython_extension(what, obj):
|
|
|
|
# try to check if the first line of the doc is a signature
|
|
|
|
doc = obj.__doc__
|
|
|
|
if not doc:
|
|
|
|
return False
|
|
|
|
doc = doc.split('\n')
|
|
|
|
if not len(doc):
|
|
|
|
return False
|
|
|
|
doc = doc[0]
|
|
|
|
if not '(' in doc or doc[-1] != ')':
|
|
|
|
return False
|
|
|
|
|
|
|
|
# check more if it's an extension
|
|
|
|
if what == 'attribute' and hasattr(obj, '__objclass__') and \
|
|
|
|
hasattr(obj.__objclass__, '__pyx_vtable__'):
|
|
|
|
return True
|
|
|
|
if what == 'class' and hasattr(obj, '__pyx_vtable__'):
|
|
|
|
return True
|
|
|
|
|
|
|
|
def callback_docstring(app, what, name, obj, options, lines):
|
2010-12-21 14:57:47 +00:00
|
|
|
if what == 'module':
|
|
|
|
# remove empty lines
|
|
|
|
while len(lines) and lines[0].strip() == '':
|
|
|
|
lines.pop(0)
|
|
|
|
|
|
|
|
# if we still have lines, remove the title
|
|
|
|
if len(lines):
|
|
|
|
lines.pop(0)
|
|
|
|
|
|
|
|
# if the title is followed by a separator, remove it.
|
|
|
|
if len(lines) and lines[0].startswith('=='):
|
|
|
|
lines.pop(0)
|
|
|
|
|
2010-12-21 18:05:42 +00:00
|
|
|
elif is_cython_extension(what, obj):
|
|
|
|
lines.pop(0)
|
|
|
|
for idx in xrange(len(lines)):
|
|
|
|
line = lines[idx]
|
|
|
|
if line.startswith(' '):
|
|
|
|
lines[idx] = line[4:]
|
|
|
|
|
|
|
|
def callback_signature(app, what, name, obj, options, signature,
|
|
|
|
return_annotation):
|
|
|
|
if is_cython_extension(what, obj):
|
|
|
|
try:
|
|
|
|
doc = obj.__doc__.split('\n').pop(0)
|
|
|
|
doc = '(%s' % doc.split('(')[1]
|
|
|
|
doc = doc.replace('(self, ', '(')
|
|
|
|
doc = doc.replace('(self)', '( )')
|
|
|
|
return (doc, None)
|
|
|
|
except IndexError:
|
|
|
|
pass
|
|
|
|
|
2010-12-21 14:57:47 +00:00
|
|
|
def setup(app):
|
2010-12-21 18:05:42 +00:00
|
|
|
app.connect('autodoc-process-docstring', callback_docstring)
|
|
|
|
app.connect('autodoc-process-signature', callback_signature)
|
2010-12-21 14:57:47 +00:00
|
|
|
|