1 | #! /usr/bin/env python |
---|
2 | |
---|
3 | import sys |
---|
4 | import os |
---|
5 | import copy |
---|
6 | import re |
---|
7 | |
---|
8 | max_sec_number=100 |
---|
9 | max_sec_depth=4 |
---|
10 | |
---|
11 | def 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 | |
---|
18 | def format_sec(sec): |
---|
19 | s="" |
---|
20 | for i in sec: |
---|
21 | s+=str(i)+'.' |
---|
22 | s=s[:-1] |
---|
23 | return s |
---|
24 | |
---|
25 | def 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 | |
---|
40 | section = []; |
---|
41 | toc={} |
---|
42 | ind={} |
---|
43 | |
---|
44 | prev_page='' |
---|
45 | for 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 | |
---|
61 | for 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() |
---|