5
 
from StringIO import StringIO
 
9
 
    from docutils.core import publish_file
 
10
 
    from docutils.parsers import rst
 
12
 
    print "Missing dependency.  Please install docutils."
 
15
 
    from elementtree.ElementTree import XML
 
16
 
    from elementtree import HTMLTreeBuilder
 
18
 
    print "Missing dependency.  Please install ElementTree."
 
23
 
    print "Missing dependency.  Please install Kid."
 
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} 
 
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, 
 
43
 
    return (template.serialize(output="html"))
 
46
 
def safe_open(filename, mode):
 
48
 
        return open(filename, mode + 'b')
 
50
 
        if e.errno != errno.ENOENT:
 
52
 
        sys.stderr.write('file not found: %s\n' % sys.argv[2])
 
56
 
def main(template, source=None, target=None):
 
57
 
    if source is not None:
 
58
 
        rest_file = safe_open(source, 'r')
 
61
 
    if target is not None:
 
62
 
        out_file = safe_open(target, 'w')
 
65
 
    out_file.write(kidified_rest(rest_file, template))
 
67
 
assert len(sys.argv) > 1
 
69
 
# Strip options so only the arguments are passed
 
70
 
args = [x for x in sys.argv[1:] if not x.startswith('-')]