gravatar
kpeter (Peter Kovacs)
kpeter@inf.elte.hu
Handle url fields in bib2dox.py (#184) and modify the bibtex file using url fields.
0 2 0
default
2 files changed with 17 insertions and 23 deletions:
↑ Collapse diff ↑
Show white space 48 line context
1 1
%%%%% Defining LEMON %%%%%
2 2

	
3 3
@misc{lemon,
4 4
  key =          {LEMON},
5 5
  title =        {{LEMON} -- {L}ibrary for {E}fficient {M}odeling and
6 6
                  {O}ptimization in {N}etworks},
7 7
  howpublished = {\url{http://lemon.cs.elte.hu/}},
8 8
  year =         2009
9 9
}
10 10

	
11 11
@misc{egres,
12 12
  key =          {EGRES},
13 13
  title =        {{EGRES} -- {E}gerv{\'a}ry {R}esearch {G}roup on
14 14
                  {C}ombinatorial {O}ptimization},
15
  howpublished = {\url{http://www.cs.elte.hu/egres/}},
16
  year =         2009
15
  url =          {http://www.cs.elte.hu/egres/}
17 16
}
18 17

	
19 18
@misc{coinor,
20 19
  key =          {COIN-OR},
21 20
  title =        {{COIN-OR} -- {C}omputational {I}nfrastructure for
22 21
                  {O}perations {R}esearch},
23
  howpublished = {\url{http://www.coin-or.org/}},
24
  year =         2009
22
  url =          {http://www.coin-or.org/}
25 23
}
26 24

	
27 25

	
28 26
%%%%% Other libraries %%%%%%
29 27

	
30 28
@misc{boost,
31 29
  key =          {Boost},
32 30
  title =        {{B}oost {C++} {L}ibraries},
33
  howpublished = {\url{http://www.boost.org/}},
34
  year =         2009
31
  url =          {http://www.boost.org/}
35 32
}
36 33

	
37 34
@book{bglbook,
38 35
  author =       {Jeremy G. Siek and Lee-Quan Lee and Andrew
39 36
                  Lumsdaine},
40 37
  title =        {The Boost Graph Library: User Guide and Reference
41 38
                  Manual},
42 39
  publisher =    {Addison-Wesley},
43 40
  year =         2002
44 41
}
45 42

	
46 43
@misc{leda,
47 44
  key =          {LEDA},
48 45
  title =        {{LEDA} -- {L}ibrary of {E}fficient {D}ata {T}ypes and
49 46
                  {A}lgorithms},
50
  howpublished = {\url{http://www.algorithmic-solutions.com/}},
51
  year =         2009
47
  url =          {http://www.algorithmic-solutions.com/}
52 48
}
53 49

	
54 50
@book{ledabook,
55 51
  author =       {Kurt Mehlhorn and Stefan N{\"a}her},
56 52
  title =        {{LEDA}: {A} platform for combinatorial and geometric
57 53
                  computing},
58 54
  isbn =         {0-521-56329-1},
59 55
  publisher =    {Cambridge University Press},
60 56
  address =      {New York, NY, USA},
61 57
  year =         1999
62 58
}
63 59

	
64 60

	
65 61
%%%%% Tools that LEMON depends on %%%%%
66 62

	
67 63
@misc{cmake,
68 64
  key =          {CMake},
69 65
  title =        {{CMake} -- {C}ross {P}latform {M}ake},
70
  howpublished = {\url{http://www.cmake.org/}},
71
  year =         2009
66
  url =          {http://www.cmake.org/}
72 67
}
73 68

	
74 69
@misc{doxygen,
75 70
  key =          {Doxygen},
76 71
  title =        {{Doxygen} -- {S}ource code documentation generator
77 72
                  tool},
78
  howpublished = {\url{http://www.doxygen.org/}},
79
  year =         2009
73
  url =          {http://www.doxygen.org/}
80 74
}
81 75

	
82 76

	
83 77
%%%%% LP/MIP libraries %%%%%
84 78

	
85 79
@misc{glpk,
86 80
  key =          {GLPK},
87 81
  title =        {{GLPK} -- {GNU} {L}inear {P}rogramming {K}it},
88
  howpublished = {\url{http://www.gnu.org/software/glpk/}},
89
  year =         2009
82
  url =          {http://www.gnu.org/software/glpk/}
90 83
}
91 84

	
92 85
@misc{clp,
93 86
  key =          {Clp},
94 87
  title =        {{Clp} -- {Coin-Or} {L}inear {P}rogramming},
95
  howpublished = {\url{http://projects.coin-or.org/Clp/}},
96
  year =         2009
88
  url =          {http://projects.coin-or.org/Clp/}
97 89
}
98 90

	
99 91
@misc{cbc,
100 92
  key =          {Cbc},
101 93
  title =        {{Cbc} -- {Coin-Or} {B}ranch and {C}ut},
102
  howpublished = {\url{http://projects.coin-or.org/Cbc/}},
103
  year =         2009
94
  url =          {http://projects.coin-or.org/Cbc/}
104 95
}
105 96

	
106 97
@misc{cplex,
107 98
  key =          {CPLEX},
108 99
  title =        {{ILOG} {CPLEX}},
109
  howpublished = {\url{http://www.ilog.com/}},
110
  year =         2009
100
  url =          {http://www.ilog.com/}
111 101
}
112 102

	
113 103
@misc{soplex,
114 104
  key =          {SoPlex},
115 105
  title =        {{SoPlex} -- {T}he {S}equential {O}bject-{O}riented
116 106
                  {S}implex},
117
  howpublished = {\url{http://soplex.zib.de/}},
118
  year =         2009
107
  url =          {http://soplex.zib.de/}
119 108
}
120 109

	
121 110

	
122 111
%%%%% General books %%%%%
123 112

	
124 113
@book{amo93networkflows,
125 114
  author =       {Ravindra K. Ahuja and Thomas L. Magnanti and James
126 115
                  B. Orlin},
127 116
  title =        {Network Flows: Theory, Algorithms, and Applications},
128 117
  publisher =    {Prentice-Hall, Inc.},
129 118
  year =         1993,
130 119
  month =        feb,
131 120
  isbn =         {978-0136175490}
132 121
}
133 122

	
134 123
@book{schrijver03combinatorial,
135 124
  author =       {Alexander Schrijver},
136 125
  title =        {Combinatorial Optimization: Polyhedra and Efficiency},
137 126
  publisher =    {Springer-Verlag},
138 127
  year =         2003,
139 128
  isbn =         {978-3540443896}
140 129
}
141 130

	
142 131
@book{clrs01algorithms,
Show white space 48 line context
... ...
@@ -49,49 +49,49 @@
49 49
      E.g., It does not do anything special to an author whose name is
50 50
      in the form LAST_NAME, FIRST_NAME
51 51
      In "author" tag, will show up as
52 52
      <bibxml:author>LAST_NAME, FIRST_NAME</bibxml:author>
53 53
  3.  Does not handle "crossref" fields other than to print
54 54
      <bibxml:crossref>...</bibxml:crossref>
55 55
  4.  Does not inform user of the input's format errors.  You just won't
56 56
      be able to transform the file later with XSL
57 57

	
58 58
  You will have to manually edit the XML output if you need to handle
59 59
  these (and unknown) limitations.
60 60

	
61 61
"""
62 62

	
63 63
import string, re
64 64

	
65 65
# set of valid name characters
66 66
valid_name_chars = '[\w\-:]'
67 67

	
68 68
#
69 69
# define global regular expression variables
70 70
#
71 71
author_rex = re.compile('\s+and\s+')
72 72
rembraces_rex = re.compile('[{}]')
73
capitalize_rex = re.compile('({\w*})')
73
capitalize_rex = re.compile('({[^}]*})')
74 74

	
75 75
# used by bibtexkeywords(data)
76 76
keywords_rex = re.compile('[,;]')
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 89
#
90 90
# styles for html formatting
91 91
#
92 92
divstyle = 'margin-top: -4ex; margin-left: 8em;'
93 93

	
94 94
#
95 95
# return the string parameter without braces
96 96
#
97 97
def transformurls(str):
... ...
@@ -342,96 +342,101 @@
342 342
            if entrycont.has_key('address') and (entrycont['address'] != ''):
343 343
                entry.append(entrycont['address'] + ',')
344 344
            if entrycont.has_key('edition') and (entrycont['edition'] != ''):
345 345
                entry.append(entrycont['edition'] + ' edition,')
346 346
            if entrycont.has_key('howpublished') and (entrycont['howpublished'] != ''):
347 347
                entry.append(entrycont['howpublished'] + ',')
348 348
            if entrycont.has_key('volume') and (entrycont['volume'] != ''):
349 349
                eline = entrycont['volume'];
350 350
                if entrycont.has_key('number') and (entrycont['number'] != ''):
351 351
                    eline += '(' + entrycont['number'] + ')'
352 352
                if entrycont.has_key('pages') and (entrycont['pages'] != ''):
353 353
                    eline += ':' + entrycont['pages']
354 354
                eline += ','
355 355
                entry.append(eline)
356 356
            else:
357 357
                if entrycont.has_key('pages') and (entrycont['pages'] != ''):
358 358
                    entry.append('pages ' + entrycont['pages'] + ',')
359 359
            if entrycont.has_key('year') and (entrycont['year'] != ''):
360 360
                if entrycont.has_key('month') and (entrycont['month'] != ''):
361 361
                    entry.append(entrycont['month'] + ' ' + entrycont['year'] + '.')
362 362
                else:
363 363
                    entry.append(entrycont['year'] + '.')
364 364
            if entrycont.has_key('note') and (entrycont['note'] != ''):
365 365
                entry.append(entrycont['note'] + '.')
366
            if entrycont.has_key('url') and (entrycont['url'] != ''):
367
                entry.append(entrycont['url'] + '.')
366 368

	
367 369
            # generate keys for sorting and for the output
368 370
            sortkey = ''
369 371
            bibkey = ''
370 372
            if entrycont.has_key('author'):
371 373
                for author in entrycont['author']['list']:
372 374
                    sortkey += copychars(author, author.rfind(' ')+1, len(author))
373 375
                bibkey = entrycont['author']['abbrev']
374 376
            else:
375 377
                bibkey = 'x'
376 378
            if entrycont.has_key('year'):
377 379
                sortkey += entrycont['year']
378 380
                bibkey += entrycont['year'][-2:]
379 381
            if entrycont.has_key('title'):
380 382
                sortkey += entrycont['title']
381 383
            if entrycont.has_key('key'):
382 384
                sortkey = entrycont['key'] + sortkey
383 385
                bibkey = entrycont['key']
384 386
            entry.insert(0, sortkey)
385 387
            entry.insert(1, bibkey)
386 388
            entry.insert(2, entryid)
387 389
           
388 390
            # add the entry to the file contents
389 391
            filecont.append(entry)
390 392

	
391 393
        else:
392 394
            # field, publication info
393 395
            field = ''
394 396
            data = ''
395 397
            
396 398
            # field = {data} entries
397 399
            if bracedata_rex.match(line):
398 400
                field = bracefield_rex.sub('\g<1>', line)
399 401
                field = string.lower(field)
400 402
                data =  bracedata_rex.sub('\g<2>', line)
401 403

	
402 404
            # field = "data" entries
403 405
            elif quotedata_rex.match(line):
404 406
                field = quotefield_rex.sub('\g<1>', line)
405 407
                field = string.lower(field)
406 408
                data =  quotedata_rex.sub('\g<2>', line)
407 409

	
408 410
            # field = data entries
409 411
            elif data_rex.match(line):
410 412
                field = field_rex.sub('\g<1>', line)
411 413
                field = string.lower(field)
412 414
                data =  data_rex.sub('\g<2>', line)
413 415
            
416
            if field == 'url':
417
                data = '\\url{' + data.strip() + '}'
418
            
414 419
            if field in ('author', 'editor'):
415 420
                entrycont[field] = bibtexauthor(data)
416 421
                line = ''
417 422
            elif field == 'title':
418 423
                line = bibtextitle(data, entrytype)
419 424
            elif field != '':
420 425
                line = removebraces(transformurls(data.strip()))
421 426

	
422 427
            if line != '':
423 428
                line = latexreplacements(line)
424 429
                entrycont[field] = line
425 430

	
426 431

	
427 432
    # sort entries
428 433
    filecont.sort(entry_cmp)
429 434
    
430 435
    # count the bibtex keys
431 436
    keytable = {}
432 437
    counttable = {}
433 438
    for entry in filecont:
434 439
        bibkey = entry[1]
435 440
        if not keytable.has_key(bibkey):
436 441
            keytable[bibkey] = 1
437 442
        else:
0 comments (0 inline)