import os, sys, getopt, re
+import dateutil.parser
def format_latex(text):
# Get rid of matching dollar signs
text = re.sub(r'\$([^\$]*)\$', r'\1', text)
- return text.replace('\mathcal', '').replace('{', '').replace('}', '').replace('\\', '').replace('~', ' ').replace('--', '–')
+
+ # Replace text
+ subst = {
+ '\\"a': 'ä',
+ '\\"o': 'ö',
+ '\\"u': 'u',
+ '\\mathcal': '',
+ '{': '',
+ '}': '',
+ '\\': '',
+ '~': ' ',
+ '---': '–',
+ '--': '–',
+ }
+
+ for a, b in subst.items():
+ text = text.replace(a, b)
+
+ return text
def format_field_span(type, value):
return "<span class=bibentry_" + type + ">" + format_latex(value) + "</span>"
line = filter(lambda l: l != "", line)
return [where, ", ".join(line)]
+def format_details_incollection(entry):
+ where = format_field(entry, 'booktitle')
+
+ line = []
+ line.append(format_field(entry, 'publisher'))
+ line.append(format_field(entry, 'pages', pre='pp. '))
+ line.append(format_field(entry, 'address'))
+ line.append(format_field(entry, 'month', post=' ') + \
+ format_field(entry, 'year'))
+ line.append(format_field(entry, 'isbn', pre='ISBN '))
+ line.append(format_field(entry, 'note'))
+
+ line = filter(lambda l: l != "", line)
+ return [where, ", ".join(line)]
+
def format_details_thesis(entry):
line = []
line.append(format_field(entry, 'school'))
line = filter(lambda l: l != "", line)
return [", ".join(line)]
+def format_details_patent(entry):
+ line = []
+ line.append(format_field(entry, 'number', pre='Pat. '))
+ line.append(format_field(entry, 'month', post=' ') + \
+ format_field(entry, 'year'))
+ line.append(format_field(entry, 'note'))
+
+ line = filter(lambda l: l != "", line)
+ return [", ".join(line)]
+
def format_links(entry):
doi = format_field(entry, 'doi', pre='<a href="http://dx.doi.org/', post='">[DOI]</a>')
webpdf = format_field(entry, 'webpdf', pre='<a href="', post='">[PDF]</a>')
weblink = format_field(entry, 'weblink', pre='<a href="', post='">[link]</a>')
+ url = format_field(entry, 'url', pre='<a href="', post='">[url]</a>')
webslides = format_field(entry, 'webslides', pre='<a href="', post='">[slides]</a>')
weberrata = format_field(entry, 'weberrata', pre='<a href="',
post='">[errata]</a>')
- return " ".join([doi, webpdf, weblink, webslides, weberrata])
+ return " ".join([doi, webpdf, weblink, url, webslides, weberrata])
def format_entry(entry):
lines = []
lines.extend(format_details_article(entry))
elif entry.type=='inproceedings':
lines.extend(format_details_inproceedings(entry))
+ elif entry.type=='incollection':
+ lines.extend(format_details_incollection(entry))
elif entry.type=='book':
lines.extend(format_details_book(entry))
+ elif entry.type=='patent':
+ lines.extend(format_details_patent(entry))
elif entry.type in ['mastersthesis', 'phdthesis']:
lines.extend(format_details_thesis(entry))
else:
def entryDateSortKey(p):
k, e = p
+ if 'date' in e.fields:
+ return e.fields['date']
+
month2num = { 'jan' : '01', 'feb' : '02', 'mar' : '03', \
'apr' : '04', 'may' : '05', 'jun' : '06', \
'jul' : '07', 'aug' : '08', 'sep' : '09', \
return e.fields['year'] + "-" + month
+def entryGetYear(e):
+ if 'year' in e.fields:
+ return e.fields['year']
+
+ if 'date' in e.fields:
+ dt = dateutil.parser.isoparse(e.fields['date'])
+ return str(dt.year)
+
+ return None
+
+
def usage():
"""Print usage text of this program"""
bib_data = parser.parse_file(bibfile)
entries = bib_data.entries
- years = list(set([ b.fields['year'] for b in entries.values() ]))
+ years = list(set([entryGetYear(e) for e in entries.values()]))
years.sort(reverse=True)
for year in years:
iteritems.sort(key=entryDateSortKey, reverse=True)
for key, entry in iteritems:
- if entry.fields['year'] != year:
+ if entryGetYear(entry) != year:
continue
print("<div class=bibentry>")
- print("<a class=bibentry_key id=" + key + ">[" + key + "]</a><br/>")
-
+ print("<a class=bibentry_key id={}>[{}]</a><br/><span class=bibentry_type>{}</span><br/>".format(key, key, entry.type))
e = format_entry(entry)
print(e)
print("</div>\n")
-