| 
									
										
										
										
											1999-02-24 17:33:07 +00:00
										 |  |  | #! /usr/bin/env python | 
					
						
							|  |  |  | #  -*- Python -*- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-04 21:19:57 +00:00
										 |  |  | """usage: %(program)s [options] file... | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Supported options: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     --address addr | 
					
						
							|  |  |  |     -a addr         Set the address text to include at the end of the generated | 
					
						
							|  |  |  |                     HTML; this should be used for contact information. | 
					
						
							|  |  |  |     --columns cols | 
					
						
							|  |  |  |     -c cols         Set the number of columns each index section should be | 
					
						
							|  |  |  |                     displayed in.  The default is 1. | 
					
						
							|  |  |  |     --help | 
					
						
							|  |  |  |     -h              Display this help message. | 
					
						
							|  |  |  |     --letters | 
					
						
							|  |  |  |     -l              Split the output into sections by letter. | 
					
						
							|  |  |  |     --output file | 
					
						
							|  |  |  |     -o file         Write output to 'file' instead of standard out. | 
					
						
							|  |  |  |     --iconserver is Use 'is' as the directory containing icons for the | 
					
						
							|  |  |  |                     navigation bar.  The default is 'icons'. | 
					
						
							|  |  |  |     --title str     Set the page title to 'str'.  The default is 'Global | 
					
						
							|  |  |  |                     Module Index'. | 
					
						
							|  |  |  |     --uplink url    Set the upward link URL.  The default is './'. | 
					
						
							|  |  |  |     --uptitle str   Set the upward link title.  The default is 'Python | 
					
						
							|  |  |  |                     Documentation Index'. | 
					
						
							|  |  |  | """ | 
					
						
							| 
									
										
										
										
											1999-02-24 17:33:07 +00:00
										 |  |  | import buildindex | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | import re | 
					
						
							|  |  |  | import string | 
					
						
							| 
									
										
										
										
											2000-10-05 05:14:26 +00:00
										 |  |  | import support | 
					
						
							| 
									
										
										
										
											1999-02-24 17:33:07 +00:00
										 |  |  | import sys | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-05 05:14:26 +00:00
										 |  |  | class IndexOptions(support.Options): | 
					
						
							|  |  |  |     def __init__(self): | 
					
						
							|  |  |  |         support.Options.__init__(self) | 
					
						
							|  |  |  |         self.add_args("l", ["letters"]) | 
					
						
							|  |  |  |         self.letters = 0 | 
					
						
							| 
									
										
										
										
											1999-03-04 21:19:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-05 05:14:26 +00:00
										 |  |  |     def handle_option(self, opt, val): | 
					
						
							|  |  |  |         if opt in ("-l", "--letters"): | 
					
						
							|  |  |  |             self.letters = 1 | 
					
						
							| 
									
										
										
										
											1999-03-04 21:19:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-05 05:14:26 +00:00
										 |  |  |     def usage(self): | 
					
						
							|  |  |  |         program = os.path.basename(sys.argv[0]) | 
					
						
							|  |  |  |         print __doc__ % {"program": program} | 
					
						
							| 
									
										
										
										
											1999-03-04 21:19:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-11-28 16:20:50 +00:00
										 |  |  | class Node(buildindex.Node): | 
					
						
							|  |  |  |     annotation = "" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __init__(self, link, str, seqno): | 
					
						
							| 
									
										
										
										
											2001-02-12 19:12:55 +00:00
										 |  |  |         parts = string.split(str, None, 1) | 
					
						
							|  |  |  |         if parts[0][-5:] == "</tt>": | 
					
						
							| 
									
										
										
										
											2000-11-28 16:20:50 +00:00
										 |  |  |             self.modname = parts[0][:-5] | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             self.modname = parts[0] | 
					
						
							|  |  |  |         if len(parts) == 2: | 
					
						
							|  |  |  |             self.annotation = parts[1] | 
					
						
							|  |  |  |         buildindex.Node.__init__(self, link, self.modname, seqno) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __str__(self): | 
					
						
							|  |  |  |         return '<tt class="module">%s</tt> %s' \ | 
					
						
							|  |  |  |                % (self.modname, self.annotation) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-02-24 17:33:07 +00:00
										 |  |  | _rx = re.compile( | 
					
						
							| 
									
										
										
										
											2000-04-03 04:19:14 +00:00
										 |  |  |     "<dt><a href='(module-.*\.html)#l2h-\d+'><tt class='module'>" | 
					
						
							|  |  |  |     "([a-zA-Z_][a-zA-Z0-9_.]*</tt>(\s*<em>" | 
					
						
							|  |  |  |     "\(<span class='platform'>.*</span>\)</em>)?)</a>") | 
					
						
							| 
									
										
										
										
											1999-02-24 17:33:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							| 
									
										
										
										
											2000-10-05 05:14:26 +00:00
										 |  |  |     options = IndexOptions() | 
					
						
							|  |  |  |     options.variables["title"] = "Global Module Index" | 
					
						
							|  |  |  |     options.parse(sys.argv[1:]) | 
					
						
							|  |  |  |     args = options.args | 
					
						
							| 
									
										
										
										
											1999-02-24 17:33:07 +00:00
										 |  |  |     if not args: | 
					
						
							|  |  |  |         args = ["-"] | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # Collect the input data: | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     nodes = [] | 
					
						
							|  |  |  |     seqno = 0 | 
					
						
							| 
									
										
										
										
											1999-03-02 16:22:56 +00:00
										 |  |  |     has_plat_flag = 0 | 
					
						
							| 
									
										
										
										
											1999-02-24 17:33:07 +00:00
										 |  |  |     for ifn in args: | 
					
						
							|  |  |  |         if ifn == "-": | 
					
						
							|  |  |  |             ifp = sys.stdin | 
					
						
							|  |  |  |             dirname = '' | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             ifp = open(ifn) | 
					
						
							|  |  |  |             dirname = os.path.dirname(ifn) | 
					
						
							|  |  |  |         while 1: | 
					
						
							|  |  |  |             line = ifp.readline() | 
					
						
							|  |  |  |             if not line: | 
					
						
							|  |  |  |                 break | 
					
						
							|  |  |  |             m = _rx.match(line) | 
					
						
							|  |  |  |             if m: | 
					
						
							|  |  |  |                 # This line specifies a module! | 
					
						
							|  |  |  |                 basename, modname = m.group(1, 2) | 
					
						
							| 
									
										
										
										
											1999-03-02 16:22:56 +00:00
										 |  |  |                 has_plat_flag = has_plat_flag or m.group(3) | 
					
						
							| 
									
										
										
										
											1999-02-24 17:33:07 +00:00
										 |  |  |                 linkfile = os.path.join(dirname, basename) | 
					
						
							| 
									
										
										
										
											2000-11-28 16:20:50 +00:00
										 |  |  |                 nodes.append(Node('<a href="%s">' % linkfile, modname, seqno)) | 
					
						
							| 
									
										
										
										
											1999-02-24 17:33:07 +00:00
										 |  |  |                 seqno = seqno + 1 | 
					
						
							|  |  |  |         ifp.close() | 
					
						
							| 
									
										
										
										
											1999-03-02 16:22:56 +00:00
										 |  |  |     # | 
					
						
							|  |  |  |     # Generate all output: | 
					
						
							|  |  |  |     # | 
					
						
							| 
									
										
										
										
											1999-02-24 17:33:07 +00:00
										 |  |  |     num_nodes = len(nodes) | 
					
						
							| 
									
										
										
										
											1999-03-02 16:22:56 +00:00
										 |  |  |     # Here's the HTML generation: | 
					
						
							| 
									
										
										
										
											2000-10-05 05:14:26 +00:00
										 |  |  |     parts = [options.get_header(), | 
					
						
							|  |  |  |              buildindex.process_nodes(nodes, options.columns, options.letters), | 
					
						
							|  |  |  |              options.get_footer(), | 
					
						
							| 
									
										
										
										
											1999-03-04 21:19:57 +00:00
										 |  |  |              ] | 
					
						
							| 
									
										
										
										
											1999-03-02 16:22:56 +00:00
										 |  |  |     if has_plat_flag: | 
					
						
							|  |  |  |         parts.insert(1, PLAT_DISCUSS) | 
					
						
							|  |  |  |     html = string.join(parts, '') | 
					
						
							| 
									
										
										
										
											1999-02-24 17:33:07 +00:00
										 |  |  |     program = os.path.basename(sys.argv[0]) | 
					
						
							| 
									
										
										
										
											2000-10-05 05:14:26 +00:00
										 |  |  |     fp = options.get_output_file() | 
					
						
							| 
									
										
										
										
											2001-02-12 15:30:22 +00:00
										 |  |  |     fp.write(string.rstrip(html) + "\n") | 
					
						
							| 
									
										
										
										
											2000-10-05 05:14:26 +00:00
										 |  |  |     if options.outputfile == "-": | 
					
						
							| 
									
										
										
										
											2001-02-12 15:30:22 +00:00
										 |  |  |         sys.stderr.write("%s: %d index nodes\n" % (program, num_nodes)) | 
					
						
							| 
									
										
										
										
											1999-02-24 17:33:07 +00:00
										 |  |  |     else: | 
					
						
							|  |  |  |         print | 
					
						
							|  |  |  |         print "%s: %d index nodes" % (program, num_nodes) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-02 16:22:56 +00:00
										 |  |  | PLAT_DISCUSS = """ | 
					
						
							|  |  |  | <p> Some module names are followed by an annotation indicating what | 
					
						
							|  |  |  | platform they are available on.</p> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-02-24 17:33:07 +00:00
										 |  |  | """ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     main() |