summaryrefslogtreecommitdiffstats
path: root/Doc/tools/indfix.py
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>1998-02-09 22:17:52 (GMT)
committerFred Drake <fdrake@acm.org>1998-02-09 22:17:52 (GMT)
commitdd244a0b9eeef2d0d8f6a3375eee4b5f88067ac4 (patch)
tree574cb95acb34cb2318f4cfc6a0c2f4a674baf824 /Doc/tools/indfix.py
parent1624a507e6ebd2146272c116f2a66549b9105a6e (diff)
downloadcpython-dd244a0b9eeef2d0d8f6a3375eee4b5f88067ac4.zip
cpython-dd244a0b9eeef2d0d8f6a3375eee4b5f88067ac4.tar.gz
cpython-dd244a0b9eeef2d0d8f6a3375eee4b5f88067ac4.tar.bz2
Script to fix up the Library Reference index so it's less ugly. The docstring:
"""Combine similar index entries into an entry and subentries. For example: \item {foobar} (in module flotz), 23 \item {foobar} (in module whackit), 4323 becomes \item {foobar} \subitem in module flotz, 23 \subitem in module whackit, 4323 Note that an item which matches the format of a collapsable item but which isn't part of a group of similar items is not modified. """ This results in a much more readable index, with less repitition of text; especially for common method names.
Diffstat (limited to 'Doc/tools/indfix.py')
-rwxr-xr-xDoc/tools/indfix.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/Doc/tools/indfix.py b/Doc/tools/indfix.py
new file mode 100755
index 0000000..3435212
--- /dev/null
+++ b/Doc/tools/indfix.py
@@ -0,0 +1,89 @@
+#! /usr/bin/env python
+
+"""Combine similar index entries into an entry and subentries.
+
+For example:
+
+ \item {foobar} (in module flotz), 23
+ \item {foobar} (in module whackit), 4323
+
+becomes
+
+ \item {foobar}
+ \subitem in module flotz, 23
+ \subitem in module whackit, 4323
+
+Note that an item which matches the format of a collapsable item but which
+isn't part of a group of similar items is not modified.
+"""
+__version__ = '$Revision$'
+
+import re
+import string
+import StringIO
+import sys
+
+
+def strcasecmp(e1, e2, lower=string.lower):
+ return cmp(lower(e1[1]), lower(e2[1])) or cmp(e1, e2)
+
+
+def dump_entries(ofp, entries):
+ if len(entries) == 1:
+ ofp.write(" \\item %s (%s)%s\n" % entries[0])
+ return
+ ofp.write(" \item %s\n" % entries[0][0])
+ # now sort these in a case insensitive manner:
+ entries.sort(strcasecmp)
+ for xxx, subitem, pages in entries:
+ ofp.write(" \subitem %s%s\n" % (subitem, pages))
+
+
+breakable_re = re.compile(r" \\item (.*) [(](.*)[)]((?:, \d+)+)")
+
+def main():
+ import getopt
+ outfile = None
+ opts, args = getopt.getopt(sys.argv[1:], "o:")
+ for opt, val in opts:
+ if opt in ("-o", "--output"):
+ outfile = val
+ filename = args[0]
+ outfile = outfile or filename
+ if filename == "-":
+ fp = sys.stdin
+ else:
+ fp = open(filename)
+ ofp = StringIO.StringIO()
+ item, subitem = None, None
+ entries = []
+ while 1:
+ line = fp.readline()
+ if not line:
+ break
+ m = breakable_re.match(line)
+ if m:
+ entry = m.group(1, 2, 3)
+ if entries:
+ if entries[-1][0] != entry[0]:
+ dump_entries(ofp, entries)
+ entries = []
+ entries.append(entry)
+ elif entries:
+ dump_entries(ofp, entries)
+ entries = []
+ ofp.write(line)
+ else:
+ pass
+ ofp.write(line)
+ fp.close()
+ if outfile == "-":
+ fp = sys.stdout
+ else:
+ fp = open(outfile, "w")
+ fp.write(ofp.getvalue())
+ fp.close()
+
+
+if __name__ == "__main__":
+ main()