#! /usr/bin/env python # -*- Python -*- """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'. """ import buildindex import os import re import string import support import sys class IndexOptions(support.Options): def __init__(self): support.Options.__init__(self) self.add_args("l", ["letters"]) self.letters = 0 def handle_option(self, opt, val): if opt in ("-l", "--letters"): self.letters = 1 def usage(self): program = os.path.basename(sys.argv[0]) print __doc__ % {"program": program} class Node(buildindex.Node): annotation = "" def __init__(self, link, str, seqno): parts = string.split(str, None, 1) if parts[0][-5:] == "": 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 '%s %s' \ % (self.modname, self.annotation) _rx = re.compile( "
" "([a-zA-Z_][a-zA-Z0-9_.]*(\s*" "\(.*\))?)") def main(): options = IndexOptions() options.variables["title"] = "Global Module Index" options.parse(sys.argv[1:]) args = options.args if not args: args = ["-"] # # Collect the input data: # nodes = [] seqno = 0 has_plat_flag = 0 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) has_plat_flag = has_plat_flag or m.group(3) linkfile = os.path.join(dirname, basename) nodes.append(Node('' % linkfile, modname, seqno)) seqno = seqno + 1 ifp.close() # # Generate all output: # num_nodes = len(nodes) # Here's the HTML generation: parts = [options.get_header(), buildindex.process_nodes(nodes, options.columns, options.letters), options.get_footer(), ] if has_plat_flag: parts.insert(1, PLAT_DISCUSS) html = string.join(parts, '') program = os.path.basename(sys.argv[0]) fp = options.get_output_file() fp.write(string.rstrip(html) + "\n") if options.outputfile == "-": sys.stderr.write("%s: %d index nodes\n" % (program, num_nodes)) else: print print "%s: %d index nodes" % (program, num_nodes) PLAT_DISCUSS = """

Some module names are followed by an annotation indicating what platform they are available on.

""" if __name__ == "__main__": main()