titlegen.py
author Alpar Juttner <alpar@cs.elte.hu>
Fri, 31 Oct 2008 21:00:25 +0000
changeset 12 d64ffbd7d8c6
child 13 98a495a50e49
permissions -rwxr-xr-x
Merge
alpar@10
     1
#! /usr/bin/env python
alpar@10
     2
alpar@10
     3
import sys
alpar@10
     4
import os
alpar@10
     5
import copy
alpar@10
     6
import re
alpar@10
     7
alpar@10
     8
def sec_inc(section, lev):
alpar@10
     9
    while len(section)<lev:
alpar@10
    10
        section.append(0)
alpar@10
    11
    section[lev-1]+=1
alpar@10
    12
    section=section[:lev]
alpar@10
    13
    return section
alpar@10
    14
alpar@10
    15
def format_sec(sec):
alpar@10
    16
    s=""
alpar@10
    17
    for i in sec:
alpar@10
    18
        s+=str(i)+'.'
alpar@10
    19
    return s
alpar@10
    20
alpar@10
    21
section = [];
alpar@10
    22
toc={}
alpar@10
    23
ind={}
alpar@10
    24
alpar@10
    25
prev_page=''
alpar@10
    26
for l in open("toc.txt").readlines():
alpar@10
    27
    sl = l.split()
alpar@10
    28
    if len(sl)==2 and len(sl[0])>0: 
alpar@10
    29
        lev=len(sl[0])
alpar@10
    30
        section=sec_inc(section,lev)
alpar@10
    31
        t_sec=copy.copy(section)
alpar@10
    32
        t_link=sl[1];
alpar@10
    33
        print format_sec(t_sec),t_link
alpar@10
    34
        ind[t_link]=[t_sec,'','']
alpar@10
    35
        if lev==1:
alpar@10
    36
            ind[t_link][1]=prev_page
alpar@10
    37
            if prev_page:
alpar@10
    38
                ind[prev_page][2]=t_link
alpar@10
    39
            prev_page=t_link
alpar@10
    40
        toc[format_sec(t_sec)]=t_link
alpar@10
    41
alpar@10
    42
for doxfile in os.listdir('.'):
alpar@10
    43
    if doxfile[-4:]=='.dox':
alpar@10
    44
        print 'Generate ',doxfile
alpar@10
    45
        page=''
alpar@10
    46
        fo=open(os.path.join("gen-dox",doxfile),"w")
alpar@10
    47
        for l in open(doxfile).readlines():
alpar@10
    48
            gr = re.match(r"(^[[]PAGE[]].*[[]PAGE[]])?(^[[]SEC[]].*[[]SEC[]])?(^[[]TRAILER[]])?(^[[]TOC[]])?(.*)$", l).groups()
alpar@10
    49
            if gr[0]:
alpar@10
    50
                page=gr[0][6:-6]
alpar@10
    51
                fo.write("\page %s %s%s\n"%(page,
alpar@10
    52
                                            format_sec(ind[page][0]),gr[4]))
alpar@10
    53
            elif gr[1]:
alpar@10
    54
                sec=gr[1][5:-5]
alpar@10
    55
                fo.write("\section %s %s%s\n"%(sec,
alpar@10
    56
                                               format_sec(ind[sec][0]),gr[4]))
alpar@10
    57
            elif gr[2]:
alpar@10
    58
                prev_page=ind[page][1]
alpar@10
    59
                prev_str= ( '\\ref '+prev_page ) if prev_page else ''
alpar@10
    60
                next_page=ind[page][2]
alpar@10
    61
                next_str= ( '\\ref '+next_page ) if next_page else ''
alpar@10
    62
                fo.write('<< %s | \\ref toc "Home" | %s >>\n'%\
alpar@10
    63
                             (prev_str,next_str))
alpar@10
    64
            elif gr[3]:
alpar@10
    65
                secs = [ x for x in toc]
alpar@10
    66
                secs.sort()
alpar@10
    67
                for num in secs:
alpar@10
    68
                    fo.write("%s - \\ref %s\n"%(' '*(len(num)-2),toc[num]))
alpar@10
    69
            else:
alpar@10
    70
                fo.write(gr[4]+'\n')
alpar@10
    71
        fo.close()