summaryrefslogtreecommitdiffstats
path: root/Doc/tools
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>1998-01-02 03:00:27 (GMT)
committerFred Drake <fdrake@acm.org>1998-01-02 03:00:27 (GMT)
commitc1ce320a4f6603b7e2b4994fef2f5db90654dc5a (patch)
tree11c5356642823818fd7c947affef6ce8af0be796 /Doc/tools
parent0b1337d6742a3d83526e843c08c24ba62342615e (diff)
downloadcpython-c1ce320a4f6603b7e2b4994fef2f5db90654dc5a.zip
cpython-c1ce320a4f6603b7e2b4994fef2f5db90654dc5a.tar.gz
cpython-c1ce320a4f6603b7e2b4994fef2f5db90654dc5a.tar.bz2
Script to convert module index data to module index.
Diffstat (limited to 'Doc/tools')
-rwxr-xr-xDoc/tools/modindex.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/Doc/tools/modindex.py b/Doc/tools/modindex.py
new file mode 100755
index 0000000..f85b909
--- /dev/null
+++ b/Doc/tools/modindex.py
@@ -0,0 +1,62 @@
+#! /usr/bin/env python
+
+"""Script to convert raw module index data to module index."""
+
+import os
+import string
+import sys
+
+
+def parse_line(input):
+ lineno = string.split(input)[-1]
+ module = input[:len(input)-(len(lineno)+1)]
+ return module, lineno
+ return
+
+
+def cmp_items((s1, line1), (s2, line2)):
+ rc = cmp(string.lower(s1), string.lower(s2))
+ if rc == 0:
+ # Make the lower-case version come first since the upper-case
+ # version is usually a helper module for constants and such.
+ rc = cmp(s2, s1)
+ return rc
+
+
+def main():
+ if sys.argv[1:]:
+ infile = sys.argv[1]
+ else:
+ infile = "-"
+ if infile == "-":
+ ifp = sys.stdin
+ ofp = sys.stdout
+ sys.stdout = sys.stderr
+ else:
+ ifp = open(infile)
+ base, ext = os.path.splitext(infile)
+ outfile = base + ".ind"
+ ofp = open(outfile, "w")
+ ofp.write("\\begin{theindex}\n\n")
+ lines = ifp.readlines()
+ for i in range(len(lines)):
+ if lines[i][0] == '\\':
+ lines[i] = '\1' + lines[i]
+ lines = map(parse_line, lines)
+ lines.sort(cmp_items)
+ prev_letter = lines[0][0][0]
+ if prev_letter == '\1':
+ prev_letter = lines[0][0][1]
+ prev_letter = string.lower(prev_letter)
+ for module, lineno in lines:
+ if module[0] == '\1':
+ module = module[1:]
+ if string.lower(module[0]) != prev_letter:
+ ofp.write("\n \\indexspace\n\n")
+ prev_letter = string.lower(module[0])
+ ofp.write(" \\item {\\tt %s} %s\n" % (module, lineno))
+ ofp.write("\n\\end{theindex}\n")
+
+
+if __name__ == "__main__":
+ main()