#! /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 osimport reimport sysfrom xml.sax.saxutils import quoteattrimport buildindeximport supportclass IndexOptions(support.Options): aesop_type = "links" 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} links = [ ('author', 'acks.html', 'Acknowledgements'), ('help', 'about.html', 'About the Python Documentation'), ] def get_header(self): header = support.Options.get_header(self) s = '' for rel, href, title in self.links: s += '<link rel="%s" href="%s"' % (rel, href) if title: s += ' title=' + quoteattr(title) s += '>\n ' return header.replace("<link ", s + "<link ", 1)class Node(buildindex.Node): def __init__(self, link, str, seqno, platinfo): self.annotation = platinfo or None if str[0][-5:] == "</tt>": str = str[:-5] self.modname = str buildindex.Node.__init__(self, link, self.modname, seqno) if platinfo: s = '<tt class="module">%s</tt> %s' \ % (self.modname, self.annotation) else: s = '<tt class="module">%s</tt>' % str self.text = [s] def __str__(self): if self.annotation: return '<tt class="module">%s</tt> %s' \ % (self.modname, self.annotation) else: return '<tt class="module">%s</tt>' % self.modname_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(): 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 = [] 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, platinfo = m.group(1, 2, 3) has_plat_flag = has_plat_flag or platinfo linkfile = os.path.join(dirname, basename) nodes.append(Node('<a href="%s">' % linkfile, modname, len(nodes), platinfo)) 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 = ''.join(parts) program = os.path.basename(sys.argv[0]) fp = options.get_output_file() fp.write(html.rstrip() + "\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 = """<p> Some module names are followed by an annotation indicating whatplatform they are available on.</p>"""if __name__ == "__main__": main()
#! /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 os
import re
import sys
from xml.sax.saxutils import quoteattr
import buildindex
import support
class IndexOptions(support.Options):
aesop_type = "links"
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}
links = [
('author', 'acks.html', 'Acknowledgements'),
('help', 'about.html', 'About the Python Documentation'),
]
def get_header(self):
header = support.Options.get_header(self)
s = ''
for rel, href, title in self.links:
s += '<link rel="%s" href="%s"' % (rel, href)
if title:
s += ' title=' + quoteattr(title)
s += '>\n '
return header.replace("<link ", s + "<link ", 1)
class Node(buildindex.Node):
def __init__(self, link, str, seqno, platinfo):
self.annotation = platinfo or None
if str[0][-5:] == "</tt>":
str = str[:-5]
self.modname = str
buildindex.Node.__init__(self, link, self.modname, seqno)
if platinfo:
s = '<tt class="module">%s</tt> %s' \
% (self.modname, self.annotation)
else:
s = '<tt class="module">%s</tt>' % str
self.text = [s]
def __str__(self):
if self.annotation:
return '<tt class="module">%s</tt> %s' \
% (self.modname, self.annotation)
else:
return '<tt class="module">%s</tt>' % self.modname
_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():
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 = []
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, platinfo = m.group(1, 2, 3)
has_plat_flag = has_plat_flag or platinfo
linkfile = os.path.join(dirname, basename)
nodes.append(Node('<a href="%s">' % linkfile, modname,
len(nodes), platinfo))
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 = ''.join(parts)
program = os.path.basename(sys.argv[0])
fp = options.get_output_file()
fp.write(html.rstrip() + "\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 = """
<p> Some module names are followed by an annotation indicating what
platform they are available on.</p>
"""
if __name__ == "__main__":
main()