Initial import to Tizen
[profile/ivi/python-pyOpenSSL.git] / doc / tools / mkmodindex
1 #! /usr/bin/env python
2 #  -*- Python -*-
3
4 """usage: %(program)s [options] file...
5
6 Supported options:
7
8     --address addr
9     -a addr         Set the address text to include at the end of the generated
10                     HTML; this should be used for contact information.
11     --columns cols
12     -c cols         Set the number of columns each index section should be
13                     displayed in.  The default is 1.
14     --help
15     -h              Display this help message.
16     --letters
17     -l              Split the output into sections by letter.
18     --output file
19     -o file         Write output to 'file' instead of standard out.
20     --iconserver is Use 'is' as the directory containing icons for the
21                     navigation bar.  The default is 'icons'.
22     --title str     Set the page title to 'str'.  The default is 'Global
23                     Module Index'.
24     --uplink url    Set the upward link URL.  The default is './'.
25     --uptitle str   Set the upward link title.  The default is 'Python
26                     Documentation Index'.
27 """
28 import buildindex
29 import os
30 import re
31 import string
32 import support
33 import sys
34
35
36 class IndexOptions(support.Options):
37     def __init__(self):
38         support.Options.__init__(self)
39         self.add_args("l", ["letters"])
40         self.letters = 0
41
42     def handle_option(self, opt, val):
43         if opt in ("-l", "--letters"):
44             self.letters = 1
45
46     def usage(self):
47         program = os.path.basename(sys.argv[0])
48         print __doc__ % {"program": program}
49
50
51 class Node(buildindex.Node):
52     annotation = ""
53
54     def __init__(self, link, str, seqno):
55         parts = string.split(str, None, 1)
56         if parts[0][-5:] == "</tt>":
57             self.modname = parts[0][:-5]
58         else:
59             self.modname = parts[0]
60         if len(parts) == 2:
61             self.annotation = parts[1]
62         buildindex.Node.__init__(self, link, self.modname, seqno)
63
64     def __str__(self):
65         return '<tt class="module">%s</tt> %s' \
66                % (self.modname, self.annotation)
67
68 _rx = re.compile(
69     "<dt><a href='(module-.*\.html)#l2h-\d+'><tt class='module'>"
70     "([a-zA-Z_][a-zA-Z0-9_.]*</tt>(\s*<em>"
71     "\(<span class='platform'>.*</span>\)</em>)?)</a>")
72
73 def main():
74     options = IndexOptions()
75     options.variables["title"] = "Global Module Index"
76     options.parse(sys.argv[1:])
77     args = options.args
78     if not args:
79         args = ["-"]
80     #
81     # Collect the input data:
82     #
83     nodes = []
84     seqno = 0
85     has_plat_flag = 0
86     for ifn in args:
87         if ifn == "-":
88             ifp = sys.stdin
89             dirname = ''
90         else:
91             ifp = open(ifn)
92             dirname = os.path.dirname(ifn)
93         while 1:
94             line = ifp.readline()
95             if not line:
96                 break
97             m = _rx.match(line)
98             if m:
99                 # This line specifies a module!
100                 basename, modname = m.group(1, 2)
101                 has_plat_flag = has_plat_flag or m.group(3)
102                 linkfile = os.path.join(dirname, basename)
103                 nodes.append(Node('<a href="%s">' % linkfile, modname, seqno))
104                 seqno = seqno + 1
105         ifp.close()
106     #
107     # Generate all output:
108     #
109     num_nodes = len(nodes)
110     # Here's the HTML generation:
111     parts = [options.get_header(),
112              buildindex.process_nodes(nodes, options.columns, options.letters),
113              options.get_footer(),
114              ]
115     if has_plat_flag:
116         parts.insert(1, PLAT_DISCUSS)
117     html = string.join(parts, '')
118     program = os.path.basename(sys.argv[0])
119     fp = options.get_output_file()
120     fp.write(string.rstrip(html) + "\n")
121     if options.outputfile == "-":
122         sys.stderr.write("%s: %d index nodes\n" % (program, num_nodes))
123     else:
124         print
125         print "%s: %d index nodes" % (program, num_nodes)
126
127
128 PLAT_DISCUSS = """
129 <p> Some module names are followed by an annotation indicating what
130 platform they are available on.</p>
131
132 """
133
134
135 if __name__ == "__main__":
136     main()