5fbd402ebac90ef5387705d193954683be9af698
[tiramisu.git] / doc / code2html
1 #!/usr/bin/env python
2 import types
3 from os.path import join
4 from inspect import getsource, getmembers, isclass, isfunction, ismethod, ismodule
5 from importlib import import_module
6
7 root="./build/api"
8
9 # autopath
10
11 from os.path import dirname, abspath, join, normpath
12 import sys
13
14 HERE = dirname(abspath(__file__))
15 PATH = normpath(join(HERE, '..', '..'))
16 if PATH not in sys.path:
17     sys.path.insert(1, PATH)
18
19 htmltmpl = """
20 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
21 <html>
22 <head>
23 <title>{title}</title>
24 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
25 <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8">
26 <meta http-equiv="content-style-type" content="text/css">
27 <meta http-equiv="expires" content="0">
28 </head>
29 <body>
30 <pre>
31 {content}
32 </pre>
33 </body>
34 </html>
35 """
36
37 def write_source(name, content):
38     fh = file(join(root, name)+'.html', 'w')
39     fh.write(format_html(name, content))
40     fh.close()
41
42 def format_html(title, content):
43     return htmltmpl.format(title=title, content=content)
44
45 def parse_module(module):
46     module = import_module(module)
47     write_source(module.__name__, getsource(module))
48 #    classes = [(cls, value) for cls, value in getattr(module, '__dict__').items() if value == types.ClassType]
49     classes = getmembers(module, isclass)
50     for name, obj in classes:
51         write_source(module.__name__ + '.' + name, getsource(obj))
52 #        methods = [(meth, value) for meth, value in getattr(obj, '__dict__').items() if type(value) == types.MethodType]
53         methods = getmembers(obj, ismethod)
54         for meth, value in methods:
55             write_source(module.__name__ + '.' + name + '.' + meth, getsource(value))
56
57     #functions = [(func, value) for func, value in getattr(module, '__dict__').items() if type(value) == types.FunctionType]
58     functions =  getmembers(module, isfunction)
59     for name, obj in functions:
60         write_source(module.__name__ + '.' + name, getsource(obj))
61
62 def process_modules():
63     from glob import glob
64     from os.path import abspath, dirname, normpath, splitext, basename
65     here = abspath(__file__)
66     directory = dirname(here)
67     pyfiles = glob(normpath(join(directory, '..', '*.py')))
68     for pyf in pyfiles:
69         pyf = splitext(basename(pyf))[0]
70         modname = 'tiramisu.' + pyf
71         if not '__init__' in modname:
72             parse_module(modname)        
73
74     pyfiles = glob(normpath(join(directory, '..', 'test', '*.py')))
75     for pyf in pyfiles:
76         pyf = splitext(basename(pyf))[0]
77         modname = 'tiramisu.test.' + pyf
78         if not '__init__' in modname:
79             parse_module(modname)        
80
81 process_modules()
82