2424import sys
2525
2626
27- def strcasecmp (e1 , e2 , lower = string .lower ):
27+ def cmp_entries (e1 , e2 , lower = string .lower ):
2828 return cmp (lower (e1 [1 ]), lower (e2 [1 ])) or cmp (e1 , e2 )
2929
3030
31- def dump_entries (ofp , entries ):
31+ def dump_entries (write , entries ):
3232 if len (entries ) == 1 :
33- ofp . write (" \\ item %s (%s)%s\n " % entries [0 ])
33+ write (" \\ item %s (%s)%s\n " % entries [0 ])
3434 return
35- ofp . write (" \item %s\n " % entries [0 ][0 ])
35+ write (" \item %s\n " % entries [0 ][0 ])
3636 # now sort these in a case insensitive manner:
37- entries .sort (strcasecmp )
37+ if len (entries ) > 0 :
38+ entries .sort (cmp_entries )
3839 for xxx , subitem , pages in entries :
39- ofp . write (" \subitem %s%s\n " % (subitem , pages ))
40+ write (" \subitem %s%s\n " % (subitem , pages ))
4041
4142
4243breakable_re = re .compile (r" \\item (.*) [(](.*)[)]((?:, \d+)+)" )
@@ -55,27 +56,28 @@ def main():
5556 else :
5657 fp = open (filename )
5758 ofp = StringIO .StringIO ()
58- item , subitem = None , None
5959 entries = []
60+ match = breakable_re .match
61+ write = ofp .write
6062 while 1 :
6163 line = fp .readline ()
6264 if not line :
6365 break
64- m = breakable_re . match (line )
66+ m = match (line )
6567 if m :
6668 entry = m .group (1 , 2 , 3 )
67- if entries :
68- if entries [- 1 ][0 ] != entry [0 ]:
69- dump_entries (ofp , entries )
70- entries = []
69+ if entries and entries [- 1 ][0 ] != entry [0 ]:
70+ dump_entries (write , entries )
71+ entries = []
7172 entries .append (entry )
7273 elif entries :
73- dump_entries (ofp , entries )
74+ dump_entries (write , entries )
7475 entries = []
75- ofp . write (line )
76+ write (line )
7677 else :
77- pass
78- ofp .write (line )
78+ write (line )
79+ del write
80+ del match
7981 fp .close ()
8082 if outfile == "-" :
8183 fp = sys .stdout
0 commit comments