Merge from Trevor.
[be.git] / doc / generate-libbe-txt.py
1 #!/usr/bin/python
2 #
3 # Copyright
4
5 """Auto-generate reStructuredText of the libbe module tree for Sphinx.
6 """
7
8 import sys
9 import os, os.path
10
11 sys.path.insert(0, os.path.abspath('..'))
12 from test import python_tree
13
14 def title(modname):
15     t = ':mod:`%s`' % modname
16     delim = '*'*len(t)
17     return '\n'.join([delim, t, delim, '', ''])
18
19 def automodule(modname):
20     return '\n'.join([
21             '.. automodule:: %s' % modname,
22             '   :members:',
23             '   :undoc-members:',
24             '', ''])
25
26 def toctree(children):
27     if len(children) == 0:
28         return ''
29     return '\n'.join([
30             '.. toctree::',
31             '   :maxdepth: 2',
32             '',
33             ] + [
34             '   %s.txt' % c for c in sorted(children)
35             ] + ['', ''])
36
37 def make_module_txt(modname, children, subdir='libbe'):
38     filename = os.path.join(subdir, '%s.txt' % modname)
39     if not os.path.exists(subdir):
40         os.mkdir(subdir)
41     if os.path.exists(filename):
42         return None # don't overwrite potentially hand-written files.
43     f = file(filename, 'w')
44     f.write(title(modname))
45     f.write(automodule(modname))
46     f.write(toctree(children))
47     f.close()
48
49 if __name__ == '__main__':
50     pt = python_tree(root_path='../libbe', root_modname='libbe')
51     for node in pt.traverse():
52         make_module_txt(node.modname, [c.modname for c in node])