ref: 2c9e3861a54e22498fb2e3226defe4393b20b202
dir: /sys/src/cmd/python/Doc/tools/support.py/
"""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: 37764 $' import getopt import os.path import sys class Options: __short_args = "a:c:ho:" __long_args = [ # script controls "columns=", "help", "output=", # content components "address=", "iconserver=", "favicon=", "title=", "uplink=", "uptitle=", "image-type=", ] outputfile = "-" columns = 1 letters = 0 uplink = "index.html" uptitle = "Python Documentation Index" favicon = None # The "Aesop Meta Tag" is poorly described, and may only be used # by the Aesop search engine (www.aesop.com), but doesn't hurt. # # There are a number of values this may take to roughly categorize # a page. A page should be marked according to its primary # category. Known values are: # 'personal' -- personal-info # 'information' -- information # 'interactive' -- interactive media # 'multimedia' -- multimedia presenetation (non-sales) # 'sales' -- sales material # 'links' -- links to other information pages # # Setting the aesop_type value to one of these strings will cause # get_header() to add the appropriate <meta> tag to the <head>. # aesop_type = None def __init__(self): self.args = [] self.variables = {"address": "", "iconserver": "icons", "imgtype": "png", "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 = val.strip() 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 "." elif opt == "--favicon": self.favicon = val.strip() elif opt == "--image-type": self.variables["imgtype"] = val.strip() 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">\n ' '<link rel="start" href="%s" title="%s">' % (self.uplink, self.uptitle, self.uplink, self.uptitle)) else: link = ('<link rel="up" href="%s">\n ' '<link rel="start" href="%s">' % (self.uplink, self.uplink)) repl = " %s\n</head>" % link s = s.replace("</head>", repl, 1) if self.aesop_type: meta = '<meta name="aesop" content="%s">\n ' % self.aesop_type # Insert this in the middle of the head that's been # generated so far, keeping <meta> and <link> elements in # neat groups: s = s.replace("<link ", meta + "<link ", 1) if self.favicon: ext = os.path.splitext(self.favicon)[1] if ext in (".gif", ".png"): type = ' type="image/%s"' % ext[1:] else: type = '' link = ('<link rel="SHORTCUT ICON" href="%s"%s>\n ' % (self.favicon, type)) s = s.replace("<link ", link + "<link ", 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> '''