mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	 498cb15306
			
		
	
	
		498cb15306
		
	
	
	
	
		
			
			Make the documentation tools work with Python 1.5.2. [Slightly modified from submitted patch. --FLD] This closes SF bug #132005.
		
			
				
	
	
		
			136 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
	
		
			3.9 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 os
 | |
| import re
 | |
| import string
 | |
| import support
 | |
| import sys
 | |
| 
 | |
| 
 | |
| class IndexOptions(support.Options):
 | |
|     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}
 | |
| 
 | |
| 
 | |
| class Node(buildindex.Node):
 | |
|     annotation = ""
 | |
| 
 | |
|     def __init__(self, link, str, seqno):
 | |
|         parts = string.split(str, None, 1)
 | |
|         if parts[0][-5:] == "</tt>":
 | |
|             self.modname = parts[0][:-5]
 | |
|         else:
 | |
|             self.modname = parts[0]
 | |
|         if len(parts) == 2:
 | |
|             self.annotation = parts[1]
 | |
|         buildindex.Node.__init__(self, link, self.modname, seqno)
 | |
| 
 | |
|     def __str__(self):
 | |
|         return '<tt class="module">%s</tt> %s' \
 | |
|                % (self.modname, self.annotation)
 | |
| 
 | |
| _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 = []
 | |
|     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(Node('<a href="%s">' % linkfile, modname, seqno))
 | |
|                 seqno = seqno + 1
 | |
|         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 = string.join(parts, '')
 | |
|     program = os.path.basename(sys.argv[0])
 | |
|     fp = options.get_output_file()
 | |
|     fp.write(string.rstrip(html) + "\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()
 |