titlegen.py
changeset 10 55e2f7712e87
child 13 98a495a50e49
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/titlegen.py	Thu Oct 30 17:13:33 2008 +0000
     1.3 @@ -0,0 +1,71 @@
     1.4 +#! /usr/bin/env python
     1.5 +
     1.6 +import sys
     1.7 +import os
     1.8 +import copy
     1.9 +import re
    1.10 +
    1.11 +def sec_inc(section, lev):
    1.12 +    while len(section)<lev:
    1.13 +        section.append(0)
    1.14 +    section[lev-1]+=1
    1.15 +    section=section[:lev]
    1.16 +    return section
    1.17 +
    1.18 +def format_sec(sec):
    1.19 +    s=""
    1.20 +    for i in sec:
    1.21 +        s+=str(i)+'.'
    1.22 +    return s
    1.23 +
    1.24 +section = [];
    1.25 +toc={}
    1.26 +ind={}
    1.27 +
    1.28 +prev_page=''
    1.29 +for l in open("toc.txt").readlines():
    1.30 +    sl = l.split()
    1.31 +    if len(sl)==2 and len(sl[0])>0: 
    1.32 +        lev=len(sl[0])
    1.33 +        section=sec_inc(section,lev)
    1.34 +        t_sec=copy.copy(section)
    1.35 +        t_link=sl[1];
    1.36 +        print format_sec(t_sec),t_link
    1.37 +        ind[t_link]=[t_sec,'','']
    1.38 +        if lev==1:
    1.39 +            ind[t_link][1]=prev_page
    1.40 +            if prev_page:
    1.41 +                ind[prev_page][2]=t_link
    1.42 +            prev_page=t_link
    1.43 +        toc[format_sec(t_sec)]=t_link
    1.44 +
    1.45 +for doxfile in os.listdir('.'):
    1.46 +    if doxfile[-4:]=='.dox':
    1.47 +        print 'Generate ',doxfile
    1.48 +        page=''
    1.49 +        fo=open(os.path.join("gen-dox",doxfile),"w")
    1.50 +        for l in open(doxfile).readlines():
    1.51 +            gr = re.match(r"(^[[]PAGE[]].*[[]PAGE[]])?(^[[]SEC[]].*[[]SEC[]])?(^[[]TRAILER[]])?(^[[]TOC[]])?(.*)$", l).groups()
    1.52 +            if gr[0]:
    1.53 +                page=gr[0][6:-6]
    1.54 +                fo.write("\page %s %s%s\n"%(page,
    1.55 +                                            format_sec(ind[page][0]),gr[4]))
    1.56 +            elif gr[1]:
    1.57 +                sec=gr[1][5:-5]
    1.58 +                fo.write("\section %s %s%s\n"%(sec,
    1.59 +                                               format_sec(ind[sec][0]),gr[4]))
    1.60 +            elif gr[2]:
    1.61 +                prev_page=ind[page][1]
    1.62 +                prev_str= ( '\\ref '+prev_page ) if prev_page else ''
    1.63 +                next_page=ind[page][2]
    1.64 +                next_str= ( '\\ref '+next_page ) if next_page else ''
    1.65 +                fo.write('<< %s | \\ref toc "Home" | %s >>\n'%\
    1.66 +                             (prev_str,next_str))
    1.67 +            elif gr[3]:
    1.68 +                secs = [ x for x in toc]
    1.69 +                secs.sort()
    1.70 +                for num in secs:
    1.71 +                    fo.write("%s - \\ref %s\n"%(' '*(len(num)-2),toc[num]))
    1.72 +            else:
    1.73 +                fo.write(gr[4]+'\n')
    1.74 +        fo.close()