Initial check-in
[dygraphs.git] / mochikit_v14 / scripts / make_docs.py
CommitLineData
6a1aa64f
DV
1#!/usr/bin/env python
2import os
3import sys
4try:
5 from pkg_resources import require
6 require("docutils>0.3.9")
7except ImportError:
8 pass
9from docutils import nodes, utils
10from docutils.core import publish_parts
11from docutils.parsers.rst import roles
12
13TEMPLATE = 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"""
26def 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
38def 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
51roles.register_canonical_role('mochiref', role_mochiref)
52
53def 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
66roles.register_canonical_role('mochidef', role_mochidef)
67
68
69
70def 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
109if __name__ == '__main__':
110 main()