79 lines
2.1 KiB
Python
79 lines
2.1 KiB
Python
# Generate custlib.tex, which is a site-specific library document.
|
|
|
|
# Phase I: list all the things that can be imported
|
|
|
|
import glob
|
|
import os.path
|
|
import sys
|
|
|
|
modules = {}
|
|
|
|
for modname in sys.builtin_module_names:
|
|
modules[modname] = modname
|
|
|
|
for dir in sys.path:
|
|
# Look for *.py files
|
|
filelist = glob.glob(os.path.join(dir, '*.py'))
|
|
for file in filelist:
|
|
path, file = os.path.split(file)
|
|
base, ext = os.path.splitext(file)
|
|
modules[base.lower()] = base
|
|
|
|
# Look for shared library files
|
|
filelist = (glob.glob(os.path.join(dir, '*.so')) +
|
|
glob.glob(os.path.join(dir, '*.sl')) +
|
|
glob.glob(os.path.join(dir, '*.o')) )
|
|
for file in filelist:
|
|
path, file = os.path.split(file)
|
|
base, ext = os.path.splitext(file)
|
|
if base[-6:] == 'module':
|
|
base = base[:-6]
|
|
modules[base.lower()] = base
|
|
|
|
# Minor oddity: the types module is documented in libtypes2.tex
|
|
if 'types' in modules:
|
|
del modules['types']
|
|
modules['types2'] = None
|
|
|
|
# Phase II: find all documentation files (lib*.tex)
|
|
# and eliminate modules that don't have one.
|
|
|
|
docs = {}
|
|
filelist = glob.glob('lib*.tex')
|
|
for file in filelist:
|
|
modname = file[3:-4]
|
|
docs[modname] = modname
|
|
|
|
mlist = list(modules.keys())
|
|
mlist = filter(lambda x, docs=docs: x in docs, mlist)
|
|
mlist.sort()
|
|
mlist = map(lambda x, docs=docs: docs[x], mlist)
|
|
|
|
modules = mlist
|
|
|
|
# Phase III: write custlib.tex
|
|
|
|
# Write the boilerplate
|
|
# XXX should be fancied up.
|
|
print("""\documentstyle[twoside,11pt,myformat]{report}
|
|
\\title{Python Library Reference}
|
|
\\input{boilerplate}
|
|
\\makeindex % tell \\index to actually write the .idx file
|
|
\\begin{document}
|
|
\\pagenumbering{roman}
|
|
\\maketitle
|
|
\\input{copyright}
|
|
\\begin{abstract}
|
|
\\noindent This is a customized version of the Python Library Reference.
|
|
\\end{abstract}
|
|
\\pagebreak
|
|
{\\parskip = 0mm \\tableofcontents}
|
|
\\pagebreak\\pagenumbering{arabic}""")
|
|
|
|
for modname in mlist:
|
|
print("\\input{lib%s}" % (modname,))
|
|
|
|
# Write the end
|
|
print("""\\input{custlib.ind} % Index
|
|
\\end{document}""")
|