scripts/titlegen.py
author Alpar Juttner <alpar@cs.elte.hu>
Fri, 06 Apr 2012 14:51:32 +0200
changeset 60 202688f8024a
parent 42 6df2bf124af4
permissions -rwxr-xr-x
Fix a type in Secion LP. Thanks for Jacint
alpar@10
     1
#! /usr/bin/env python
alpar@59
     2
#
alpar@59
     3
# This file is a part of LEMON, a generic C++ optimization library.
alpar@59
     4
#
alpar@59
     5
# Copyright (C) 2003-2010
alpar@59
     6
# Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
alpar@59
     7
# (Egervary Research Group on Combinatorial Optimization, EGRES).
alpar@59
     8
#
alpar@59
     9
# Permission to use, modify and distribute this software is granted
alpar@59
    10
# provided that this copyright notice appears in all copies. For
alpar@59
    11
# precise terms see the accompanying LICENSE file.
alpar@59
    12
#
alpar@59
    13
# This software is provided "AS IS" with no warranty of any kind,
alpar@59
    14
# express or implied, and with no claim as to its suitability for any
alpar@59
    15
# purpose.
alpar@59
    16
#
alpar@10
    17
alpar@10
    18
import sys
alpar@10
    19
import os
alpar@10
    20
import copy
alpar@10
    21
import re
alpar@10
    22
kpeter@42
    23
max_sec_number=100
kpeter@42
    24
max_sec_depth=4
kpeter@42
    25
alpar@10
    26
def sec_inc(section, lev):
alpar@10
    27
    while len(section)<lev:
alpar@10
    28
        section.append(0)
alpar@10
    29
    section[lev-1]+=1
alpar@10
    30
    section=section[:lev]
alpar@10
    31
    return section
alpar@10
    32
alpar@10
    33
def format_sec(sec):
alpar@10
    34
    s=""
alpar@10
    35
    for i in sec:
alpar@10
    36
        s+=str(i)+'.'
alpar@15
    37
    s=s[:-1]
alpar@10
    38
    return s
alpar@10
    39
kpeter@42
    40
def compare_sec(id1, id2):
kpeter@42
    41
    id1=id1.split('.')
kpeter@42
    42
    c1=0
kpeter@42
    43
    for s in id1:
kpeter@42
    44
        c1=c1*max_sec_number+int(s)
kpeter@42
    45
    for i in range(len(id1), max_sec_depth+1):
kpeter@42
    46
        c1*=max_sec_number
kpeter@42
    47
    id2=id2.split('.')
kpeter@42
    48
    c2=0
kpeter@42
    49
    for s in id2:
kpeter@42
    50
        c2=c2*max_sec_number+int(s)
kpeter@42
    51
    for i in range(len(id2), max_sec_depth+1):
kpeter@42
    52
        c2*=max_sec_number
kpeter@42
    53
    return c1-c2
kpeter@42
    54
alpar@10
    55
section = [];
alpar@10
    56
toc={}
alpar@10
    57
ind={}
alpar@59
    58
page_files={}
alpar@59
    59
ordered_pages = []
alpar@59
    60
alpar@59
    61
for doxfile in os.listdir('.'):
alpar@59
    62
    if doxfile[-4:]=='.dox':
alpar@59
    63
        for l in open(doxfile).readlines():
alpar@59
    64
            gr = re.match(r"(^[[]PAGE[]].*[[]PAGE[]])?(.*)$", l).groups()
alpar@59
    65
            if gr[0]:
alpar@59
    66
                page=gr[0][6:-6]
alpar@59
    67
                page_files[page]=doxfile
alpar@10
    68
alpar@10
    69
prev_page=''
alpar@10
    70
for l in open("toc.txt").readlines():
alpar@10
    71
    sl = l.split()
alpar@10
    72
    if len(sl)==2 and len(sl[0])>0: 
alpar@10
    73
        lev=len(sl[0])
alpar@10
    74
        section=sec_inc(section,lev)
alpar@10
    75
        t_sec=copy.copy(section)
alpar@10
    76
        t_link=sl[1];
alpar@10
    77
        print format_sec(t_sec),t_link
alpar@10
    78
        ind[t_link]=[t_sec,'','']
alpar@10
    79
        if lev==1:
alpar@10
    80
            ind[t_link][1]=prev_page
alpar@10
    81
            if prev_page:
alpar@10
    82
                ind[prev_page][2]=t_link
alpar@10
    83
            prev_page=t_link
alpar@59
    84
            ordered_pages.append(t_link)
alpar@10
    85
        toc[format_sec(t_sec)]=t_link
alpar@10
    86
alpar@10
    87
for doxfile in os.listdir('.'):
alpar@10
    88
    if doxfile[-4:]=='.dox':
alpar@10
    89
        print 'Generate ',doxfile
alpar@10
    90
        page=''
alpar@10
    91
        fo=open(os.path.join("gen-dox",doxfile),"w")
alpar@10
    92
        for l in open(doxfile).readlines():
alpar@10
    93
            gr = re.match(r"(^[[]PAGE[]].*[[]PAGE[]])?(^[[]SEC[]].*[[]SEC[]])?(^[[]TRAILER[]])?(^[[]TOC[]])?(.*)$", l).groups()
alpar@10
    94
            if gr[0]:
alpar@10
    95
                page=gr[0][6:-6]
alpar@10
    96
                fo.write("\page %s %s%s\n"%(page,
alpar@10
    97
                                            format_sec(ind[page][0]),gr[4]))
alpar@10
    98
            elif gr[1]:
alpar@10
    99
                sec=gr[1][5:-5]
alpar@10
   100
                fo.write("\section %s %s%s\n"%(sec,
alpar@10
   101
                                               format_sec(ind[sec][0]),gr[4]))
alpar@10
   102
            elif gr[2]:
alpar@10
   103
                prev_page=ind[page][1]
alpar@13
   104
                if prev_page:
alpar@14
   105
                    prev_str= ( '<< \\ref '+prev_page+' ')
alpar@13
   106
                else:
alpar@13
   107
                    prev_str=''
alpar@10
   108
                next_page=ind[page][2]
alpar@13
   109
                if next_page:
alpar@14
   110
                    next_str= ( ' \\ref '+next_page+' >>')
alpar@13
   111
                else:
alpar@13
   112
                    next_str=''
kpeter@26
   113
                fo.write('%s| \\ref sec_toc "Home" |%s\n'%\
alpar@10
   114
                             (prev_str,next_str))
alpar@10
   115
            elif gr[3]:
kpeter@42
   116
                secs = [ x for x in toc ]
kpeter@42
   117
                secs.sort(compare_sec)
alpar@10
   118
                for num in secs:
alpar@15
   119
                    fo.write("%s - \\ref %s\n"%('  '*((len(ind[toc[num]][0]))),
alpar@15
   120
                                                toc[num]))
alpar@10
   121
            else:
alpar@10
   122
                fo.write(gr[4]+'\n')
alpar@10
   123
        fo.close()
alpar@59
   124
alpar@59
   125
fpdf=open(os.path.join("gen-pdf-dox","full.dox"),"w")
alpar@59
   126
for doxfile in [page_files[p] for p in ordered_pages]:
alpar@59
   127
    page=''
alpar@59
   128
    for l in open(doxfile).readlines():
alpar@59
   129
        gr = re.match(r"(^[[]PAGE[]].*[[]PAGE[]])?(^[[]SEC[]].*[[]SEC[]])?(^[[]TRAILER[]])?(^[[]TOC[]])?(.*)$", l).groups()
alpar@59
   130
        if gr[0]:
alpar@59
   131
            page=gr[0][6:-6]
alpar@59
   132
            fpdf.write("\page %s %s\n"%(page,gr[4]))
alpar@59
   133
        elif gr[1]:
alpar@59
   134
            sec=gr[1][5:-5]
alpar@59
   135
            fpdf.write("\section %s %s\n"%(sec,gr[4]))
alpar@59
   136
        elif gr[2]:
alpar@59
   137
            pass
alpar@59
   138
        elif gr[3]:
alpar@59
   139
            pass
alpar@59
   140
        else:
alpar@59
   141
            fpdf.write(gr[4]+'\n')
alpar@59
   142
fpdf.close()