| [10] | 1 | #! /usr/bin/env python | 
|---|
 | 2 |  | 
|---|
 | 3 | import sys | 
|---|
 | 4 | import os | 
|---|
 | 5 | import copy | 
|---|
 | 6 | import re | 
|---|
 | 7 |  | 
|---|
| [42] | 8 | max_sec_number=100 | 
|---|
 | 9 | max_sec_depth=4 | 
|---|
 | 10 |  | 
|---|
| [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)+'.' | 
|---|
| [15] | 22 |     s=s[:-1] | 
|---|
| [10] | 23 |     return s | 
|---|
 | 24 |  | 
|---|
| [42] | 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 |  | 
|---|
| [10] | 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] | 
|---|
| [13] | 78 |                 if prev_page: | 
|---|
| [14] | 79 |                     prev_str= ( '<< \\ref '+prev_page+' ') | 
|---|
| [13] | 80 |                 else: | 
|---|
 | 81 |                     prev_str='' | 
|---|
| [10] | 82 |                 next_page=ind[page][2] | 
|---|
| [13] | 83 |                 if next_page: | 
|---|
| [14] | 84 |                     next_str= ( ' \\ref '+next_page+' >>') | 
|---|
| [13] | 85 |                 else: | 
|---|
 | 86 |                     next_str='' | 
|---|
| [26] | 87 |                 fo.write('%s| \\ref sec_toc "Home" |%s\n'%\ | 
|---|
| [10] | 88 |                              (prev_str,next_str)) | 
|---|
 | 89 |             elif gr[3]: | 
|---|
| [42] | 90 |                 secs = [ x for x in toc ] | 
|---|
 | 91 |                 secs.sort(compare_sec) | 
|---|
| [10] | 92 |                 for num in secs: | 
|---|
| [15] | 93 |                     fo.write("%s - \\ref %s\n"%('  '*((len(ind[toc[num]][0]))), | 
|---|
 | 94 |                                                 toc[num])) | 
|---|
| [10] | 95 |             else: | 
|---|
 | 96 |                 fo.write(gr[4]+'\n') | 
|---|
 | 97 |         fo.close() | 
|---|