Initial import to Tizen
[profile/ivi/python-twisted.git] / twisted / scripts / htmlizer.py
1 # Copyright (c) Twisted Matrix Laboratories.
2 # See LICENSE for details.
3
4 #
5
6 """HTML pretty-printing for Python source code."""
7
8 __version__ = '$Revision: 1.8 $'[11:-2]
9
10 from twisted.python import htmlizer, usage
11 from twisted import copyright
12
13 import os, sys
14
15 header = '''<html><head>
16 <title>%(title)s</title>
17 <meta name=\"Generator\" content="%(generator)s" />
18 %(alternate)s
19 %(stylesheet)s
20 </head>
21 <body>
22 '''
23 footer = """</body>"""
24
25 styleLink = '<link rel="stylesheet" href="%s" type="text/css" />'
26 alternateLink = '<link rel="alternate" href="%(source)s" type="text/x-python" />'
27
28 class Options(usage.Options):
29     synopsis = """%s [options] source.py
30     """ % (
31         os.path.basename(sys.argv[0]),)
32
33     optParameters = [
34         ('stylesheet', 's', None, "URL of stylesheet to link to."),
35         ]
36
37     compData = usage.Completions(
38         extraActions=[usage.CompleteFiles('*.py', descr='source python file')]
39         )
40
41     def parseArgs(self, filename):
42         self['filename'] = filename
43
44 def run():
45     options = Options()
46     try:
47         options.parseOptions()
48     except usage.UsageError, e:
49         print str(e)
50         sys.exit(1)
51     filename = options['filename']
52     if options.get('stylesheet') is not None:
53         stylesheet = styleLink % (options['stylesheet'],)
54     else:
55         stylesheet = ''
56
57     output = open(filename + '.html', 'w')
58     try:
59         output.write(header % {
60             'title': filename,
61             'generator': 'htmlizer/%s' % (copyright.longversion,),
62             'alternate': alternateLink % {'source': filename},
63             'stylesheet': stylesheet
64             })
65         htmlizer.filter(open(filename), output,
66                         htmlizer.SmallerHTMLWriter)
67         output.write(footer)
68     finally:
69         output.close()