mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			212 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #! /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 getopt
 | |
| import os
 | |
| import re
 | |
| import string
 | |
| import sys
 | |
| 
 | |
| 
 | |
| def usage():
 | |
|     program = os.path.basename(sys.argv[0])
 | |
|     print __doc__ % {"program": program}
 | |
| 
 | |
| 
 | |
| def error(msg, rc=2):
 | |
|     sys.stdout = sys.stderr
 | |
|     print msg
 | |
|     print
 | |
|     usage()
 | |
|     sys.exit(rc)
 | |
| 
 | |
| 
 | |
| _rx = re.compile(
 | |
|     '<dt><a href="(module-.*\.html)">'
 | |
|     '([a-zA-Z_][a-zA-Z0-9_.]*(\s*<em>\(.*\)</em>)?)</a>')
 | |
| 
 | |
| def main():
 | |
|     outputfile = "-"
 | |
|     columns = 1
 | |
|     letters = 0
 | |
|     uplink = "./"
 | |
|     uptitle = "Python Documentation Index"
 | |
|     variables = {"address": "",
 | |
|                  "iconserver": "icons",
 | |
|                  "imgtype": "gif",
 | |
|                  "title": "Global Module Index",
 | |
|                  "uplinkalt": "up",
 | |
|                  "uplinkicon": "up",
 | |
|                  }
 | |
|     try:
 | |
|         opts, args = getopt.getopt(sys.argv[1:], "a:c:hlo:",
 | |
|                                    [# script controls:
 | |
|                                     "columns=", "help", "letters", "output=",
 | |
|                                     # content components:
 | |
|                                     "address=", "iconserver=",
 | |
|                                     "title=", "uplink=", "uptitle="])
 | |
|     except getopt.error, msg:
 | |
|         error(msg)
 | |
|     for opt, val in opts:
 | |
|         if opt in ("-a", "--address"):
 | |
|             val = string.strip(val)
 | |
|             variables["address"] = val and "<address>\n%s\n</address>\n" % val
 | |
|         elif opt in ("-h", "--help"):
 | |
|             usage()
 | |
|             sys.exit()
 | |
|         elif opt in ("-o", "--output"):
 | |
|             outputfile = val
 | |
|         elif opt in ("-c", "--columns"):
 | |
|             columns = string.atoi(val)
 | |
|         elif opt in ("-l", "--letters"):
 | |
|             letters = 1
 | |
|         elif opt == "--title":
 | |
|             variables["title"] = string.strip(val)
 | |
|         elif opt == "--uplink":
 | |
|             uplink = string.strip(val)
 | |
|         elif opt == "--uptitle":
 | |
|             uptitle = string.strip(val)
 | |
|         elif opt == "--iconserver":
 | |
|             variables["iconserver"] = string.strip(val) or "."
 | |
|     if uplink and uptitle:
 | |
|         variables["uplinkalt"] = "up"
 | |
|         variables["uplinkicon"] = "up"
 | |
|     else:
 | |
|         variables["uplinkalt"] = ""
 | |
|         variables["uplinkicon"] = "blank"
 | |
|     variables["uplink"] = uplink
 | |
|     variables["uptitle"] = uptitle
 | |
|     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(buildindex.Node(
 | |
|                     '<a href="%s">' % linkfile,
 | |
|                     "<tt class=module>%s</tt>" % modname,
 | |
|                     seqno))
 | |
|                 seqno = seqno + 1
 | |
|         ifp.close()
 | |
|     #
 | |
|     # Generate all output:
 | |
|     #
 | |
|     num_nodes = len(nodes)
 | |
|     # Here's the HTML generation:
 | |
|     parts = [HEAD % variables,
 | |
|              buildindex.process_nodes(nodes, columns, letters),
 | |
|              TAIL % variables,
 | |
|              ]
 | |
|     if has_plat_flag:
 | |
|         parts.insert(1, PLAT_DISCUSS)
 | |
|     html = string.join(parts, '')
 | |
|     program = os.path.basename(sys.argv[0])
 | |
|     if outputfile == "-":
 | |
|         sys.stdout.write(html)
 | |
|         sys.stderr.write("%s: %d index nodes\n" % (program, num_nodes))
 | |
|     else:
 | |
|         open(outputfile, "w").write(html)
 | |
|         print
 | |
|         print "%s: %d index nodes" % (program, num_nodes)
 | |
| 
 | |
| 
 | |
| PLAT_DISCUSS = """
 | |
| <p> Some module names are followed by an annotation indicating what
 | |
| platform they are available on.</p>
 | |
| 
 | |
| """
 | |
| 
 | |
| NAVIGATION = """\
 | |
| <div class=navigation>
 | |
| <table width="100%%" cellpadding=0 cellspacing=2>
 | |
| <tr>
 | |
| <td><img width=32 height=32 align=bottom border=0 alt=""
 | |
|  src="%(iconserver)s/blank.%(imgtype)s"></td>
 | |
| <td><a href="%(uplink)s"
 | |
|  title="%(uptitle)s"><img width=32 height=32 align=bottom border=0
 | |
|  alt="%(uplinkalt)s"
 | |
|  src="%(iconserver)s/%(uplinkicon)s.%(imgtype)s"></a></td>
 | |
| <td><img width=32 height=32 align=bottom border=0 alt=""
 | |
|  src="%(iconserver)s/blank.%(imgtype)s"></td>
 | |
| <td align=center bgcolor="#99CCFF" width="100%%">
 | |
|  <b class=title>%(title)s</b></td>
 | |
| <td><img width=32 height=32 align=bottom border=0 alt=""
 | |
|  src="%(iconserver)s/blank.%(imgtype)s"></td>
 | |
| <td><img width=32 height=32 align=bottom border=0 alt=""
 | |
|  src="%(iconserver)s/blank.%(imgtype)s"></td>
 | |
| <td><img width=32 height=32 align=bottom border=0 alt=""
 | |
|  src="%(iconserver)s/blank.%(imgtype)s"></td>
 | |
| </tr></table>
 | |
| <b class=navlabel>Up:</b> <span class=sectref><a href="%(uplink)s"
 | |
|  title="%(uptitle)s">%(uptitle)s</A></span>
 | |
| <br></div>
 | |
| """
 | |
| 
 | |
| HEAD = """\
 | |
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 | |
| <html>
 | |
| <head>
 | |
| <title>Global Module Index</title>
 | |
| <meta name="description" content="%(title)s">
 | |
| <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 | |
| <link rel="STYLESHEET" href="lib/lib.css">
 | |
| </head>
 | |
| <body bgcolor=white>
 | |
| """ + NAVIGATION + """\
 | |
| <hr>
 | |
| 
 | |
| <h2>%(title)s</h2>
 | |
| 
 | |
| """
 | |
| 
 | |
| TAIL = "<hr>\n" + NAVIGATION + """\
 | |
| %(address)s</body>
 | |
| </html>
 | |
| """
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 | 
