/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
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
6791.2.3 by Jelmer Vernooij
Fix more imports.
5
from breezy.sixish 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,
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')
6619.3.2 by Jelmer Vernooij
Apply 2to3 except fix.
49
    except IOError as e:
2054.2.1 by Aaron Bentley
Start work on pretty rest conversion
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)