gravatar
kpeter (Peter Kovacs)
kpeter@inf.elte.hu
Improve bib2dox.py using \section for entiries (#184)
0 1 0
default
1 file changed with 11 insertions and 11 deletions:
↑ Collapse diff ↑
Show white space 24 line context
... ...
@@ -77,24 +77,28 @@
77 77

	
78 78
# used by concat_line(line)
79 79
concatsplit_rex = re.compile('\s*#\s*')
80 80

	
81 81
# split on {, }, or " in verify_out_of_braces
82 82
delimiter_rex = re.compile('([{}"])',re.I)
83 83

	
84 84
field_rex = re.compile('\s*(\w*)\s*=\s*(.*)')
85 85
data_rex = re.compile('\s*(\w*)\s*=\s*([^,]*),?')
86 86

	
87 87
url_rex = re.compile('\\\url\{([^}]*)\}')
88 88

	
89
#
90
# styles for html formatting
91
#
92
divstyle = 'margin-top: -4ex; margin-left: 8em;'
89 93

	
90 94
#
91 95
# return the string parameter without braces
92 96
#
93 97
def transformurls(str):
94 98
    return url_rex.sub(r'<a href="\1">\1</a>', str)
95 99

	
96 100
#
97 101
# return the string parameter without braces
98 102
#
99 103
def removebraces(str):
100 104
    return rembraces_rex.sub('', str)
... ...
@@ -275,25 +279,25 @@
275 279
        # encode character entities
276 280
        line = string.replace(line, '&', '&amp;')
277 281
        line = string.replace(line, '<', '&lt;')
278 282
        line = string.replace(line, '>', '&gt;')
279 283

	
280 284
        # start entry: publication type (store for later use)
281 285
        if pubtype_rex.match(line):
282 286
        # want @<alphanumeric chars><spaces>{<spaces><any chars>,
283 287
            entrycont = {}
284 288
            entry = []
285 289
            entrytype = pubtype_rex.sub('\g<1>',line)
286 290
            entrytype = string.lower(entrytype)
287
            # entryid   = pubtype_rex.sub('\g<2>', line)
291
            entryid   = pubtype_rex.sub('\g<2>', line)
288 292

	
289 293
        # end entry if just a }
290 294
        elif endtype_rex.match(line):
291 295
            # generate doxygen code for the entry
292 296

	
293 297
            # enty type related formattings
294 298
            if entrytype in ('book', 'inbook'):
295 299
                entrycont['title'] = '<em>' + entrycont['title'] + '</em>'
296 300
                if not entrycont.has_key('author'):
297 301
                    entrycont['author'] = entrycont['editor']
298 302
                    entrycont['author']['text'] += ', editors'
299 303
            elif entrytype == 'article':
... ...
@@ -370,24 +374,25 @@
370 374
            else:
371 375
                bibkey = 'x'
372 376
            if entrycont.has_key('year'):
373 377
                sortkey += entrycont['year']
374 378
                bibkey += entrycont['year'][-2:]
375 379
            if entrycont.has_key('title'):
376 380
                sortkey += entrycont['title']
377 381
            if entrycont.has_key('key'):
378 382
                sortkey = entrycont['key'] + sortkey
379 383
                bibkey = entrycont['key']
380 384
            entry.insert(0, sortkey)
381 385
            entry.insert(1, bibkey)
386
            entry.insert(2, entryid)
382 387
           
383 388
            # add the entry to the file contents
384 389
            filecont.append(entry)
385 390

	
386 391
        else:
387 392
            # field, publication info
388 393
            field = ''
389 394
            data = ''
390 395
            
391 396
            # field = {data} entries
392 397
            if bracedata_rex.match(line):
393 398
                field = bracefield_rex.sub('\g<1>', line)
... ...
@@ -430,38 +435,37 @@
430 435
        if not keytable.has_key(bibkey):
431 436
            keytable[bibkey] = 1
432 437
        else:
433 438
            keytable[bibkey] += 1
434 439

	
435 440
    for bibkey in keytable.keys():
436 441
        counttable[bibkey] = 0
437 442
    
438 443
    # generate output
439 444
    for entry in filecont:
440 445
        # generate output key form the bibtex key
441 446
        bibkey = entry[1]
447
        entryid = entry[2]
442 448
        if keytable[bibkey] == 1:
443 449
            outkey = bibkey
444 450
        else:
445 451
            outkey = bibkey + chr(97 + counttable[bibkey])
446 452
        counttable[bibkey] += 1
447 453
        
448 454
        # append the entry code to the output
449
        file.append('<tr valign="top">\n' + \
450
                    '<td>[' + outkey + ']</td>')
451
        file.append('<td>')
452
        file.append('\\anchor ' + outkey)
453
        for line in entry[2:]:
455
        file.append('\\section ' + entryid + ' [' + outkey + ']')
456
        file.append('<div style="' + divstyle + '">')
457
        for line in entry[3:]:
454 458
            file.append(line)
455
        file.append('</td>\n</tr>')
459
        file.append('</div>')
456 460
        file.append('')
457 461

	
458 462
    return file
459 463

	
460 464

	
461 465
#
462 466
# return 1 iff abbr is in line but not inside braces or quotes
463 467
# assumes that abbr appears only once on the line (out of braces and quotes)
464 468
#
465 469
def verify_out_of_braces(line, abbr):
466 470

	
467 471
    phrase_split = delimiter_rex.split(line)
... ...
@@ -771,30 +775,26 @@
771 775
def filehandler(filepath):
772 776
    try:
773 777
        fd = open(filepath, 'r')
774 778
        filecont_source = fd.readlines()
775 779
        fd.close()
776 780
    except:
777 781
        print 'Could not open file:', filepath
778 782
    washeddata = bibtexwasher(filecont_source)
779 783
    outdata = bibtexdecoder(washeddata)
780 784
    print '/**'
781 785
    print '\page references References'
782 786
    print
783
    print '<table border="0" cellspacing="5px" width="100%">'
784
    print
785 787
    for line in outdata:
786 788
        print line
787
    print '</table>'
788
    print
789 789
    print '*/'
790 790

	
791 791

	
792 792
# main program
793 793

	
794 794
def main():
795 795
    import sys
796 796
    if sys.argv[1:]:
797 797
        filepath = sys.argv[1]
798 798
    else:
799 799
        print "No input file"
800 800
        sys.exit()
0 comments (0 inline)