0
2
0
11
22
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, |
... | ... |
@@ -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('({ |
|
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,95 +342,100 @@ |
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) |
415 |
|
|
416 |
if field == 'url': |
|
417 |
data = '\\url{' + data.strip() + '}' |
|
413 | 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 |
0 comments (0 inline)