~ubuntu-branches/ubuntu/lucid/bzr/lucid-proposed

1.1.29 by Adeodato Simó
Import upstream version 0.90
1
#!/usr/bin/env python
1.1.16 by Etienne Goyer
Import upstream version 0.13
2
3
import errno
4
import os
5
from StringIO import StringIO
6
import sys
7
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
26
27
def kidified_rest(rest_file, template_name):
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,
32
                         settings_overrides={"doctitle_xform": 0} 
33
    
34
    )
35
    xhtml_file.seek(0)
36
    xml = HTMLTreeBuilder.parse(xhtml_file)
37
    head = xml.find('head')
38
    body = xml.find('body')
39
    assert head is not None
40
    assert body is not None
41
    template=kid.Template(file=template_name, 
42
                          head=head, body=body)
43
    return (template.serialize(output="html"))
44
45
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)
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
1.1.29 by Adeodato Simó
Import upstream version 0.90
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)