bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
7476.2.1
by Jelmer Vernooij
Default to running Python 3. |
1 |
#!/usr/bin/env python3
|
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 |
|
7479.2.1
by Jelmer Vernooij
Drop python2 support. |
5 |
from io import StringIO |
2054.2.1
by Aaron Bentley
Start work on pretty rest conversion |
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: |
|
6619.3.3
by Jelmer Vernooij
Apply 2to3 print fix. |
12 |
print("Missing dependency. Please install docutils.") |
2054.2.16
by Aaron Bentley
More updates from review comments |
13 |
sys.exit(1) |
14 |
try: |
|
15 |
from elementtree.ElementTree import XML |
|
16 |
from elementtree import HTMLTreeBuilder |
|
17 |
except ImportError: |
|
6619.3.3
by Jelmer Vernooij
Apply 2to3 print fix. |
18 |
print("Missing dependency. Please install ElementTree.") |
2054.2.16
by Aaron Bentley
More updates from review comments |
19 |
sys.exit(1) |
20 |
try: |
|
21 |
import kid |
|
22 |
except ImportError: |
|
6619.3.3
by Jelmer Vernooij
Apply 2to3 print fix. |
23 |
print("Missing dependency. Please install Kid.") |
2054.2.16
by Aaron Bentley
More updates from review comments |
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, |
|
7143.16.6
by Jelmer Vernooij
Fix E124. |
32 |
settings_overrides={"doctitle_xform": 0}) |
2054.2.12
by Aaron Bentley
Switch to HTMLTreeBuilder, so that HTML entity references are handled. |
33 |
xhtml_file.seek(0) |
34 |
xml = HTMLTreeBuilder.parse(xhtml_file) |
|
35 |
head = xml.find('head') |
|
36 |
body = xml.find('body') |
|
2054.2.1
by Aaron Bentley
Start work on pretty rest conversion |
37 |
assert head is not None |
38 |
assert body is not None |
|
7143.16.17
by Jelmer Vernooij
Fix E225. |
39 |
template = kid.Template(file=template_name, head=head, body=body) |
2054.2.3
by Aaron Bentley
Get page generation working |
40 |
return (template.serialize(output="html")) |
2054.2.1
by Aaron Bentley
Start work on pretty rest conversion |
41 |
|
2054.2.16
by Aaron Bentley
More updates from review comments |
42 |
|
2054.2.1
by Aaron Bentley
Start work on pretty rest conversion |
43 |
def safe_open(filename, mode): |
44 |
try: |
|
45 |
return open(filename, mode + 'b') |
|
6619.3.2
by Jelmer Vernooij
Apply 2to3 except fix. |
46 |
except IOError as e: |
2054.2.1
by Aaron Bentley
Start work on pretty rest conversion |
47 |
if e.errno != errno.ENOENT: |
48 |
raise
|
|
49 |
sys.stderr.write('file not found: %s\n' % sys.argv[2]) |
|
50 |
sys.exit(3) |
|
2054.2.16
by Aaron Bentley
More updates from review comments |
51 |
|
52 |
||
53 |
def main(template, source=None, target=None): |
|
54 |
if source is not None: |
|
55 |
rest_file = safe_open(source, 'r') |
|
56 |
else: |
|
57 |
rest_file = sys.stdin |
|
58 |
if target is not None: |
|
59 |
out_file = safe_open(target, 'w') |
|
60 |
else: |
|
61 |
out_file = sys.stdout |
|
62 |
out_file.write(kidified_rest(rest_file, template)) |
|
63 |
||
64 |
assert len(sys.argv) > 1 |
|
65 |
||
2691.1.17
by Ian Clatworthy
Fix pretty doc generation so works for all html docs |
66 |
# Strip options so only the arguments are passed
|
67 |
args = [x for x in sys.argv[1:] if not x.startswith('-')] |
|
68 |
main(*args) |