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('-')]