0
0
mirror of https://github.com/python/cpython.git synced 2024-12-01 11:15:56 +01:00
cpython/Doc/tools/support.py
Fred Drake f10584cb11 Do a little bit more to try and add <link> elements to the header, not that
Mozilla 0.9.5 can make intelligent use of them.  Specifically, this causes
the "Acknowledgements" and "Global Module Index" pages to acquire "up"
links in the Mozilla "Site Navigation Bar".
This partially responds to SF bug #469772.
2001-10-22 15:07:16 +00:00

159 lines
4.8 KiB
Python

"""Miscellaneous support code shared by some of the tool scripts.
This includes option parsing code, HTML formatting code, and a couple of
useful helpers.
"""
__version__ = '$Revision$'
import getopt
import string
import sys
class Options:
__short_args = "a:c:ho:"
__long_args = [
# script controls
"columns=", "help", "output=",
# content components
"address=", "iconserver=",
"title=", "uplink=", "uptitle="]
outputfile = "-"
columns = 1
letters = 0
uplink = "./"
uptitle = "Python Documentation Index"
def __init__(self):
self.args = []
self.variables = {"address": "",
"iconserver": "icons",
"imgtype": "gif",
"title": "Global Module Index",
}
def add_args(self, short=None, long=None):
if short:
self.__short_args = self.__short_args + short
if long:
self.__long_args = self.__long_args + long
def parse(self, args):
try:
opts, args = getopt.getopt(args, self.__short_args,
self.__long_args)
except getopt.error:
sys.stdout = sys.stderr
self.usage()
sys.exit(2)
self.args = self.args + args
for opt, val in opts:
if opt in ("-a", "--address"):
val = string.strip(val)
if val:
val = "<address>\n%s\n</address>\n" % val
self.variables["address"] = val
elif opt in ("-h", "--help"):
self.usage()
sys.exit()
elif opt in ("-o", "--output"):
self.outputfile = val
elif opt in ("-c", "--columns"):
self.columns = int(val)
elif opt == "--title":
self.variables["title"] = val.strip()
elif opt == "--uplink":
self.uplink = val.strip()
elif opt == "--uptitle":
self.uptitle = val.strip()
elif opt == "--iconserver":
self.variables["iconserver"] = val.strip() or "."
else:
self.handle_option(opt, val)
if self.uplink and self.uptitle:
self.variables["uplinkalt"] = "up"
self.variables["uplinkicon"] = "up"
else:
self.variables["uplinkalt"] = ""
self.variables["uplinkicon"] = "blank"
self.variables["uplink"] = self.uplink
self.variables["uptitle"] = self.uptitle
def handle_option(self, opt, val):
raise getopt.error("option %s not recognized" % opt)
def get_header(self):
s = HEAD % self.variables
if self.uplink:
if self.uptitle:
link = ('<link rel="up" href="%s" title="%s">'
% (self.uplink, self.uptitle))
else:
link = '<link rel="up" href="%s">' % self.uplink
repl = " %s\n</head>" % link
s = s.replace("</head>", repl, 1)
return s
def get_footer(self):
return TAIL % self.variables
def get_output_file(self, filename=None):
if filename is None:
filename = self.outputfile
if filename == "-":
return sys.stdout
else:
return open(filename, "w")
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" width="100%%">%(title)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>
<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>%(title)s</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>
''' + NAVIGATION + '''\
<hr>
<h2>%(title)s</h2>
'''
TAIL = "<hr>\n" + NAVIGATION + '''\
%(address)s</body>
</html>
'''