3 """Combine similar index entries into an entry and subentries.
7 \item {foobar} (in module flotz), 23
8 \item {foobar} (in module whackit), 4323
13 \subitem in module flotz, 23
14 \subitem in module whackit, 4323
16 Note that an item which matches the format of a collapsable item but which
17 isn't part of a group of similar items is not modified.
19 __version__
= '$Revision$'
26 def cmp_entries(e1
, e2
):
27 return cmp(e1
[1].lower(), e2
[1].lower()) or cmp(e1
, e2
)
30 def dump_entries(write
, entries
):
32 write(" \\item %s (%s)%s\n" % entries
[0])
34 write(" \item %s\n" % entries
[0][0])
35 # now sort these in a case insensitive manner:
37 entries
.sort(cmp_entries
)
38 for xxx
, subitem
, pages
in entries
:
39 write(" \subitem %s%s\n" % (subitem
, pages
))
42 breakable_re
= re
.compile(
43 r
" \\item (.*) [(](.*)[)]((?:(?:, \d+)|(?:, \\[a-z]*\{\d+\}))+)")
46 def process(ifn
, ofn
=None):
53 ofp
= StringIO
.StringIO()
55 match
= breakable_re
.match
63 entry
= m
.group(1, 2, 3)
64 if entries
and entries
[-1][0] != entry
[0]:
65 dump_entries(write
, entries
)
69 dump_entries(write
, entries
)
90 opts
, args
= getopt
.getopt(sys
.argv
[1:], "o:")
92 if opt
in ("-o", "--output"):
95 outfile
= outfile
or filename
96 process(filename
, outfile
)
99 if __name__
== "__main__":