/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to tools/rst2prettyhtml.py

  • Committer: John Arbash Meinel
  • Date: 2006-04-25 15:05:42 UTC
  • mfrom: (1185.85.85 bzr-encoding)
  • mto: This revision was merged to the branch mainline in revision 1752.
  • Revision ID: john@arbash-meinel.com-20060425150542-c7b518dca9928691
[merge] the old bzr-encoding changes, reparenting them on bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env python3
2
 
 
3
 
import errno
4
 
import os
5
 
from breezy.sixish 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
 
    xhtml_file.seek(0)
34
 
    xml = HTMLTreeBuilder.parse(xhtml_file)
35
 
    head = xml.find('head')
36
 
    body = xml.find('body')
37
 
    assert head is not None
38
 
    assert body is not None
39
 
    template = kid.Template(file=template_name, head=head, body=body)
40
 
    return (template.serialize(output="html"))
41
 
 
42
 
 
43
 
def safe_open(filename, mode):
44
 
    try:
45
 
        return open(filename, mode + 'b')
46
 
    except IOError as e:
47
 
        if e.errno != errno.ENOENT:
48
 
            raise
49
 
        sys.stderr.write('file not found: %s\n' % sys.argv[2])
50
 
        sys.exit(3)
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
 
 
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)