214 lines
6.4 KiB
Python
Executable File
214 lines
6.4 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)#l2h-\d+'><tt class='module'>"
|
|
"([a-zA-Z_][a-zA-Z0-9_.]*</tt>(\s*<em>"
|
|
"\(<span class='platform'>.*</span>\)</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()
|