cinap_lenrekadd hg and python4bb9e2215 years agoHistory
202 lines · 6.7 KB · Python
RawDownload
"""Miscellaneous support code shared by some of the tool scripts. This includes option parsing code, HTML formatting code, and a couple ofuseful helpers. """__version__ = '$Revision: 37764 $'  import getoptimport os.pathimport 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>'''