Commit | Line | Data |
---|---|---|
6a1aa64f DV |
1 | #!/usr/bin/env python |
2 | import os | |
3 | import sys | |
4 | try: | |
5 | from pkg_resources import require | |
6 | require("docutils>0.3.9") | |
7 | except ImportError: | |
8 | pass | |
9 | from docutils import nodes, utils | |
10 | from docutils.core import publish_parts | |
11 | from docutils.parsers.rst import roles | |
12 | ||
13 | TEMPLATE = u"""%(html_prolog)s | |
14 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | |
15 | <head> | |
16 | %(html_head)s | |
17 | <link rel="stylesheet" href="../../../include/css/documentation.css" type="text/css" /> | |
18 | <script type="text/javascript" src="../../../packed/MochiKit/MochiKit.js"></script> | |
19 | <script type="text/javascript" src="../../js/toc.js"></script> | |
20 | </head> | |
21 | <body> | |
22 | %(html_body)s | |
23 | </body> | |
24 | </html> | |
25 | """ | |
26 | def mochi_name(text): | |
27 | name = text.split('(', 1)[0].split()[0] | |
28 | base = '' | |
29 | if name.startswith('MochiKit.'): | |
30 | # cross-reference | |
31 | parts = name.split('.') | |
32 | base = parts[1] + '.html' | |
33 | if parts[-1] in ("call", "apply"): | |
34 | parts.pop() | |
35 | name = '.'.join(parts[2:]) | |
36 | return base, name | |
37 | ||
38 | def role_mochiref(role, rawtext, text, lineno, inliner, options=None, content=[]): | |
39 | if options is None: | |
40 | options = {} | |
41 | base, name = mochi_name(text) | |
42 | ref = base | |
43 | if name: | |
44 | ref += '#fn-' + name.lower() | |
45 | roles.set_classes(options) | |
46 | options.setdefault('classes', []).append('mochiref') | |
47 | node = nodes.reference( | |
48 | text, utils.unescape(text), refuri=ref, **options) | |
49 | return [node], [] | |
50 | ||
51 | roles.register_canonical_role('mochiref', role_mochiref) | |
52 | ||
53 | def role_mochidef(role, rawtext, text, lineno, inliner, options=None, content=[]): | |
54 | if options is None: | |
55 | options = {} | |
56 | base, name = mochi_name(text) | |
57 | assert base == '' | |
58 | ref = 'fn-' + utils.unescape(name.lower()) | |
59 | anchor = nodes.raw('', '\n<a name="%s"></a>\n' % (ref,), format='html') | |
60 | roles.set_classes(options) | |
61 | options.setdefault('classes', []).append('mochidef') | |
62 | node = nodes.reference( | |
63 | text, utils.unescape(text), refuri='#' + ref, **options) | |
64 | return [anchor, node], [] | |
65 | ||
66 | roles.register_canonical_role('mochidef', role_mochidef) | |
67 | ||
68 | ||
69 | ||
70 | def main(): | |
71 | basepath = os.path.join('doc/rst', '') | |
72 | destpath = os.path.join('doc/html', '') | |
73 | for root, dirs, files in os.walk(basepath): | |
74 | if '.svn' in dirs: | |
75 | dirs.remove('.svn') | |
76 | destroot = destpath + root[len(basepath):] | |
77 | if not os.path.exists(destroot): | |
78 | os.makedirs(destroot) | |
79 | for fn in files: | |
80 | basefn, ext = os.path.splitext(fn) | |
81 | if ext == '.rst': | |
82 | srcfn = os.path.join(root, fn) | |
83 | dest = os.path.join(destroot, basefn + '.html') | |
84 | if basefn != "index": | |
85 | try: | |
86 | if os.path.getmtime(dest) >= os.path.getmtime(srcfn): | |
87 | print srcfn, "not changed" | |
88 | continue | |
89 | except OSError: | |
90 | pass | |
91 | print srcfn | |
92 | parts = publish_parts( | |
93 | source_path=srcfn, | |
94 | source=file(srcfn, 'rb').read().decode('utf8'), | |
95 | destination_path=dest, | |
96 | writer_name='html', | |
97 | settings_overrides=dict( | |
98 | embed_stylesheet=False, | |
99 | stylesheet_path='include/css/documentation.css', | |
100 | ), | |
101 | ) | |
102 | parts['html_head'] = parts['html_head'] % ('utf-8',) | |
103 | parts['html_prolog'] = parts['html_prolog'] % ('utf-8',) | |
104 | doc = (TEMPLATE % parts).encode("utf8") | |
105 | out = file(dest, 'wb') | |
106 | out.write(doc) | |
107 | out.close() | |
108 | ||
109 | if __name__ == '__main__': | |
110 | main() |