~tobias-oberstein/pyopenssl/pyopenssl

« back to all changes in this revision

Viewing changes to doc/tools/indfix.py

  • Committer: Jean-Paul Calderone
  • Date: 2011-09-11 19:49:43 UTC
  • mfrom: (156.3.22 sphinx-doc)
  • Revision ID: exarkun@divmod.com-20110911194943-ucaan2tzidk7ek5l
Convert the documentation from LaTeX/epytext to Sphinx/ReST

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#! /usr/bin/env python
2
 
 
3
 
"""Combine similar index entries into an entry and subentries.
4
 
 
5
 
For example:
6
 
 
7
 
    \item {foobar} (in module flotz), 23
8
 
    \item {foobar} (in module whackit), 4323
9
 
 
10
 
becomes
11
 
 
12
 
    \item {foobar}
13
 
      \subitem in module flotz, 23
14
 
      \subitem in module whackit, 4323
15
 
 
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.
18
 
"""
19
 
__version__ = '$Revision: 1.1.1.1 $'
20
 
 
21
 
import re
22
 
import string
23
 
import StringIO
24
 
import sys
25
 
 
26
 
 
27
 
def cmp_entries(e1, e2, lower=string.lower):
28
 
    return cmp(lower(e1[1]), lower(e2[1])) or cmp(e1, e2)
29
 
 
30
 
 
31
 
def dump_entries(write, entries):
32
 
    if len(entries) == 1:
33
 
        write("  \\item %s (%s)%s\n" % entries[0])
34
 
        return
35
 
    write("  \item %s\n" % entries[0][0])
36
 
    # now sort these in a case insensitive manner:
37
 
    if len(entries) > 0:
38
 
        entries.sort(cmp_entries)
39
 
    for xxx, subitem, pages in entries:
40
 
        write("    \subitem %s%s\n" % (subitem, pages))
41
 
 
42
 
 
43
 
breakable_re = re.compile(
44
 
    r"  \\item (.*) [(](.*)[)]((?:(?:, \d+)|(?:, \\[a-z]*\{\d+\}))+)")
45
 
 
46
 
 
47
 
def process(ifn, ofn=None):
48
 
    if ifn == "-":
49
 
        ifp = sys.stdin
50
 
    else:
51
 
        ifp = open(ifn)
52
 
    if ofn is None:
53
 
        ofn = ifn
54
 
    ofp = StringIO.StringIO()
55
 
    entries = []
56
 
    match = breakable_re.match
57
 
    write = ofp.write
58
 
    while 1:
59
 
        line = ifp.readline()
60
 
        if not line:
61
 
            break
62
 
        m = match(line)
63
 
        if m:
64
 
            entry = m.group(1, 2, 3)
65
 
            if entries and entries[-1][0] != entry[0]:
66
 
                dump_entries(write, entries)
67
 
                entries = []
68
 
            entries.append(entry)
69
 
        elif entries:
70
 
            dump_entries(write, entries)
71
 
            entries = []
72
 
            write(line)
73
 
        else:
74
 
            write(line)
75
 
    del write
76
 
    del match
77
 
    ifp.close()
78
 
    data = ofp.getvalue()
79
 
    ofp.close()
80
 
    if ofn == "-":
81
 
        ofp = sys.stdout
82
 
    else:
83
 
        ofp = open(ofn, "w")
84
 
    ofp.write(data)
85
 
    ofp.close()
86
 
 
87
 
 
88
 
def main():
89
 
    import getopt
90
 
    outfile = None
91
 
    opts, args = getopt.getopt(sys.argv[1:], "o:")
92
 
    for opt, val in opts:
93
 
        if opt in ("-o", "--output"):
94
 
            outfile = val
95
 
    filename = args[0]
96
 
    outfile = outfile or filename
97
 
    process(filename, outfile)
98
 
 
99
 
 
100
 
if __name__ == "__main__":
101
 
    main()