Guido van Rossum | 6cb2ac2 | 1997-06-02 17:57:10 +0000 | [diff] [blame] | 1 | # Generate custlib.tex, which is a site-specific library document. |
| 2 | |
| 3 | # Phase I: list all the things that can be imported |
| 4 | |
Fred Drake | 4fe904d | 2002-10-16 14:59:02 +0000 | [diff] [blame] | 5 | import glob |
| 6 | import os.path |
| 7 | import sys |
| 8 | |
| 9 | modules = {} |
Guido van Rossum | 6cb2ac2 | 1997-06-02 17:57:10 +0000 | [diff] [blame] | 10 | |
| 11 | for modname in sys.builtin_module_names: |
Fred Drake | 4fe904d | 2002-10-16 14:59:02 +0000 | [diff] [blame] | 12 | modules[modname] = modname |
Tim Peters | 3d7d372 | 2004-07-18 06:25:50 +0000 | [diff] [blame] | 13 | |
Guido van Rossum | 6cb2ac2 | 1997-06-02 17:57:10 +0000 | [diff] [blame] | 14 | for dir in sys.path: |
| 15 | # Look for *.py files |
Fred Drake | 4fe904d | 2002-10-16 14:59:02 +0000 | [diff] [blame] | 16 | filelist = glob.glob(os.path.join(dir, '*.py')) |
Tim Peters | 3d7d372 | 2004-07-18 06:25:50 +0000 | [diff] [blame] | 17 | for file in filelist: |
Fred Drake | 7787841 | 2000-10-07 12:50:05 +0000 | [diff] [blame] | 18 | path, file = os.path.split(file) |
Fred Drake | 4fe904d | 2002-10-16 14:59:02 +0000 | [diff] [blame] | 19 | base, ext = os.path.splitext(file) |
| 20 | modules[base.lower()] = base |
Guido van Rossum | 6cb2ac2 | 1997-06-02 17:57:10 +0000 | [diff] [blame] | 21 | |
| 22 | # Look for shared library files |
Tim Peters | 3d7d372 | 2004-07-18 06:25:50 +0000 | [diff] [blame] | 23 | filelist = (glob.glob(os.path.join(dir, '*.so')) + |
Fred Drake | 4fe904d | 2002-10-16 14:59:02 +0000 | [diff] [blame] | 24 | glob.glob(os.path.join(dir, '*.sl')) + |
| 25 | glob.glob(os.path.join(dir, '*.o')) ) |
Tim Peters | 3d7d372 | 2004-07-18 06:25:50 +0000 | [diff] [blame] | 26 | for file in filelist: |
Fred Drake | 7787841 | 2000-10-07 12:50:05 +0000 | [diff] [blame] | 27 | path, file = os.path.split(file) |
Fred Drake | 4fe904d | 2002-10-16 14:59:02 +0000 | [diff] [blame] | 28 | base, ext = os.path.splitext(file) |
| 29 | if base[-6:] == 'module': |
| 30 | base = base[:-6] |
| 31 | modules[base.lower()] = base |
Guido van Rossum | 6cb2ac2 | 1997-06-02 17:57:10 +0000 | [diff] [blame] | 32 | |
| 33 | # Minor oddity: the types module is documented in libtypes2.tex |
Collin Winter | 65d09d4 | 2007-03-21 02:11:39 +0000 | [diff] [blame] | 34 | if 'types' in modules: |
Fred Drake | 4fe904d | 2002-10-16 14:59:02 +0000 | [diff] [blame] | 35 | del modules['types'] |
| 36 | modules['types2'] = None |
Guido van Rossum | 6cb2ac2 | 1997-06-02 17:57:10 +0000 | [diff] [blame] | 37 | |
| 38 | # Phase II: find all documentation files (lib*.tex) |
| 39 | # and eliminate modules that don't have one. |
| 40 | |
Fred Drake | 4fe904d | 2002-10-16 14:59:02 +0000 | [diff] [blame] | 41 | docs = {} |
| 42 | filelist = glob.glob('lib*.tex') |
Guido van Rossum | 6cb2ac2 | 1997-06-02 17:57:10 +0000 | [diff] [blame] | 43 | for file in filelist: |
Fred Drake | 4fe904d | 2002-10-16 14:59:02 +0000 | [diff] [blame] | 44 | modname = file[3:-4] |
| 45 | docs[modname] = modname |
Guido van Rossum | 6cb2ac2 | 1997-06-02 17:57:10 +0000 | [diff] [blame] | 46 | |
Collin Winter | 65d09d4 | 2007-03-21 02:11:39 +0000 | [diff] [blame] | 47 | mlist = list(modules.keys()) |
| 48 | mlist = filter(lambda x, docs=docs: x in docs, mlist) |
Guido van Rossum | 6cb2ac2 | 1997-06-02 17:57:10 +0000 | [diff] [blame] | 49 | mlist.sort() |
Fred Drake | 4fe904d | 2002-10-16 14:59:02 +0000 | [diff] [blame] | 50 | mlist = map(lambda x, docs=docs: docs[x], mlist) |
Guido van Rossum | 6cb2ac2 | 1997-06-02 17:57:10 +0000 | [diff] [blame] | 51 | |
Fred Drake | 4fe904d | 2002-10-16 14:59:02 +0000 | [diff] [blame] | 52 | modules = mlist |
Guido van Rossum | 6cb2ac2 | 1997-06-02 17:57:10 +0000 | [diff] [blame] | 53 | |
| 54 | # Phase III: write custlib.tex |
| 55 | |
| 56 | # Write the boilerplate |
Tim Peters | 3d7d372 | 2004-07-18 06:25:50 +0000 | [diff] [blame] | 57 | # XXX should be fancied up. |
Collin Winter | 65d09d4 | 2007-03-21 02:11:39 +0000 | [diff] [blame] | 58 | print("""\documentstyle[twoside,11pt,myformat]{report} |
Guido van Rossum | 6cb2ac2 | 1997-06-02 17:57:10 +0000 | [diff] [blame] | 59 | \\title{Python Library Reference} |
| 60 | \\input{boilerplate} |
Fred Drake | 7787841 | 2000-10-07 12:50:05 +0000 | [diff] [blame] | 61 | \\makeindex % tell \\index to actually write the .idx file |
Guido van Rossum | 6cb2ac2 | 1997-06-02 17:57:10 +0000 | [diff] [blame] | 62 | \\begin{document} |
| 63 | \\pagenumbering{roman} |
| 64 | \\maketitle |
| 65 | \\input{copyright} |
| 66 | \\begin{abstract} |
| 67 | \\noindent This is a customized version of the Python Library Reference. |
| 68 | \\end{abstract} |
| 69 | \\pagebreak |
| 70 | {\\parskip = 0mm \\tableofcontents} |
Collin Winter | 65d09d4 | 2007-03-21 02:11:39 +0000 | [diff] [blame] | 71 | \\pagebreak\\pagenumbering{arabic}""") |
Tim Peters | 3d7d372 | 2004-07-18 06:25:50 +0000 | [diff] [blame] | 72 | |
| 73 | for modname in mlist: |
Collin Winter | 65d09d4 | 2007-03-21 02:11:39 +0000 | [diff] [blame] | 74 | print("\\input{lib%s}" % (modname,)) |
Tim Peters | 3d7d372 | 2004-07-18 06:25:50 +0000 | [diff] [blame] | 75 | |
Guido van Rossum | 6cb2ac2 | 1997-06-02 17:57:10 +0000 | [diff] [blame] | 76 | # Write the end |
Collin Winter | 65d09d4 | 2007-03-21 02:11:39 +0000 | [diff] [blame] | 77 | print("""\\input{custlib.ind} % Index |
| 78 | \\end{document}""") |