2624.1.1
by Adeodato Simó
Loose python2.4-specific shebangs; use generic python instead. |
1 |
#!/usr/bin/env python
|
2054.2.16
by Aaron Bentley
More updates from review comments |
2 |
|
2054.2.1
by Aaron Bentley
Start work on pretty rest conversion |
3 |
import errno |
4 |
import os |
|
5 |
from StringIO import StringIO |
|
6 |
import sys |
|
7 |
||
2054.2.16
by Aaron Bentley
More updates from review comments |
8 |
try: |
9 |
from docutils.core import publish_file |
|
10 |
from docutils.parsers import rst |
|
11 |
except ImportError: |
|
12 |
print "Missing dependency. Please install docutils." |
|
13 |
sys.exit(1) |
|
14 |
try: |
|
15 |
from elementtree.ElementTree import XML |
|
16 |
from elementtree import HTMLTreeBuilder |
|
17 |
except ImportError: |
|
18 |
print "Missing dependency. Please install ElementTree." |
|
19 |
sys.exit(1) |
|
20 |
try: |
|
21 |
import kid |
|
22 |
except ImportError: |
|
23 |
print "Missing dependency. Please install Kid." |
|
24 |
sys.exit(1) |
|
25 |
||
2054.2.1
by Aaron Bentley
Start work on pretty rest conversion |
26 |
|
27 |
def kidified_rest(rest_file, template_name): |
|
2054.2.12
by Aaron Bentley
Switch to HTMLTreeBuilder, so that HTML entity references are handled. |
28 |
xhtml_file = StringIO() |
29 |
# prevent docutils from autoclosing the StringIO
|
|
30 |
xhtml_file.close = lambda: None |
|
31 |
xhtml = publish_file(rest_file, writer_name='html', destination=xhtml_file, |
|
2054.2.5
by Aaron Bentley
Make subheadings appear correctly, hide inappropriate menu, fix search |
32 |
settings_overrides={"doctitle_xform": 0} |
33 |
||
34 |
)
|
|
2054.2.12
by Aaron Bentley
Switch to HTMLTreeBuilder, so that HTML entity references are handled. |
35 |
xhtml_file.seek(0) |
36 |
xml = HTMLTreeBuilder.parse(xhtml_file) |
|
37 |
head = xml.find('head') |
|
38 |
body = xml.find('body') |
|
2054.2.1
by Aaron Bentley
Start work on pretty rest conversion |
39 |
assert head is not None |
40 |
assert body is not None |
|
41 |
template=kid.Template(file=template_name, |
|
42 |
head=head, body=body) |
|
2054.2.3
by Aaron Bentley
Get page generation working |
43 |
return (template.serialize(output="html")) |
2054.2.1
by Aaron Bentley
Start work on pretty rest conversion |
44 |
|
2054.2.16
by Aaron Bentley
More updates from review comments |
45 |
|
2054.2.1
by Aaron Bentley
Start work on pretty rest conversion |
46 |
def safe_open(filename, mode): |
47 |
try: |
|
48 |
return open(filename, mode + 'b') |
|
49 |
except IOError, e: |
|
50 |
if e.errno != errno.ENOENT: |
|
51 |
raise
|
|
52 |
sys.stderr.write('file not found: %s\n' % sys.argv[2]) |
|
53 |
sys.exit(3) |
|
2054.2.16
by Aaron Bentley
More updates from review comments |
54 |
|
55 |
||
56 |
def main(template, source=None, target=None): |
|
57 |
if source is not None: |
|
58 |
rest_file = safe_open(source, 'r') |
|
59 |
else: |
|
60 |
rest_file = sys.stdin |
|
61 |
if target is not None: |
|
62 |
out_file = safe_open(target, 'w') |
|
63 |
else: |
|
64 |
out_file = sys.stdout |
|
65 |
out_file.write(kidified_rest(rest_file, template)) |
|
66 |
||
67 |
assert len(sys.argv) > 1 |
|
68 |
||
2691.1.17
by Ian Clatworthy
Fix pretty doc generation so works for all html docs |
69 |
# Strip options so only the arguments are passed
|
70 |
args = [x for x in sys.argv[1:] if not x.startswith('-')] |
|
71 |
main(*args) |