COIN-OR::LEMON - Graph Library

source: lemon-tutorial/scripts/titlegen.py @ 42:6df2bf124af4

Last change on this file since 42:6df2bf124af4 was 42:6df2bf124af4, checked in by Peter Kovacs <kpeter@…>, 14 years ago

Imporve the titlegen script
to correctly handle section numbers that are greater than ten

  • Property exe set to *
File size: 2.7 KB
Line 
1#! /usr/bin/env python
2
3import sys
4import os
5import copy
6import re
7
8max_sec_number=100
9max_sec_depth=4
10
11def sec_inc(section, lev):
12    while len(section)<lev:
13        section.append(0)
14    section[lev-1]+=1
15    section=section[:lev]
16    return section
17
18def format_sec(sec):
19    s=""
20    for i in sec:
21        s+=str(i)+'.'
22    s=s[:-1]
23    return s
24
25def compare_sec(id1, id2):
26    id1=id1.split('.')
27    c1=0
28    for s in id1:
29        c1=c1*max_sec_number+int(s)
30    for i in range(len(id1), max_sec_depth+1):
31        c1*=max_sec_number
32    id2=id2.split('.')
33    c2=0
34    for s in id2:
35        c2=c2*max_sec_number+int(s)
36    for i in range(len(id2), max_sec_depth+1):
37        c2*=max_sec_number
38    return c1-c2
39
40section = [];
41toc={}
42ind={}
43
44prev_page=''
45for l in open("toc.txt").readlines():
46    sl = l.split()
47    if len(sl)==2 and len(sl[0])>0:
48        lev=len(sl[0])
49        section=sec_inc(section,lev)
50        t_sec=copy.copy(section)
51        t_link=sl[1];
52        print format_sec(t_sec),t_link
53        ind[t_link]=[t_sec,'','']
54        if lev==1:
55            ind[t_link][1]=prev_page
56            if prev_page:
57                ind[prev_page][2]=t_link
58            prev_page=t_link
59        toc[format_sec(t_sec)]=t_link
60
61for doxfile in os.listdir('.'):
62    if doxfile[-4:]=='.dox':
63        print 'Generate ',doxfile
64        page=''
65        fo=open(os.path.join("gen-dox",doxfile),"w")
66        for l in open(doxfile).readlines():
67            gr = re.match(r"(^[[]PAGE[]].*[[]PAGE[]])?(^[[]SEC[]].*[[]SEC[]])?(^[[]TRAILER[]])?(^[[]TOC[]])?(.*)$", l).groups()
68            if gr[0]:
69                page=gr[0][6:-6]
70                fo.write("\page %s %s%s\n"%(page,
71                                            format_sec(ind[page][0]),gr[4]))
72            elif gr[1]:
73                sec=gr[1][5:-5]
74                fo.write("\section %s %s%s\n"%(sec,
75                                               format_sec(ind[sec][0]),gr[4]))
76            elif gr[2]:
77                prev_page=ind[page][1]
78                if prev_page:
79                    prev_str= ( '<< \\ref '+prev_page+' ')
80                else:
81                    prev_str=''
82                next_page=ind[page][2]
83                if next_page:
84                    next_str= ( ' \\ref '+next_page+' >>')
85                else:
86                    next_str=''
87                fo.write('%s| \\ref sec_toc "Home" |%s\n'%\
88                             (prev_str,next_str))
89            elif gr[3]:
90                secs = [ x for x in toc ]
91                secs.sort(compare_sec)
92                for num in secs:
93                    fo.write("%s - \\ref %s\n"%('  '*((len(ind[toc[num]][0]))),
94                                                toc[num]))
95            else:
96                fo.write(gr[4]+'\n')
97        fo.close()
Note: See TracBrowser for help on using the repository browser.