1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
#!/usr/bin/python
import re
import BibTeX
import config
TEMPLATE_S, TEMPLATE_E = None, None
def getTemplate():
global TEMPLATE_S
global TEMPLATE_E
if not TEMPLATE_S:
f = open("_template_.html")
template = f.read()
f.close()
TEMPLATE_S, TEMPLATE_E = template.split("%(entries)s")
return TEMPLATE_S, TEMPLATE_E
def url_untranslate(s):
s = s.replace(" ", "+")
s = re.sub(r'([%<>])',
lambda m: "%%%02x"%ord(m.group(1)),
s)
return s
def writeBody(f, sections):
'''f: an open file
sections: list of (sectionname, [list of BibTeXEntry])'''
for s, entries in sections:
print >>f, ('<h2><a name="%s">%s</a></h2>'%(url_untranslate(s),s))
print >>f, "<ul class='expand'>"
for e in entries:
print >>f, e.to_html()
print >>f, "</ul>"
def writeHTML(f, sections, sectionType, fieldName, choices):
"""sections: list of (sectionname, [list of BibTeXEntry])'''
sectionType: str
fieldName: str
choices: list of (choice, url)"""
#
secStr = []
for s, _ in sections:
secStr.append("<p class='l2'><a href='#%s'>%s</a></p>\n"%
((url_untranslate(s),s)))
secStr = "".join(secStr)
#
choiceStr = []
for choice, url in choices:
if url:
choiceStr.append("<a href='%s'>%s</a>"%(url, choice))
else:
choiceStr.append(choice)
choiceStr = "<p align='center'>%s</p>" % (" | ".join(choiceStr))
fields = { 'command_line' : "",
'sectiontypes' : sectionType,
'choices' : choiceStr,
'field': fieldName,
'sections' : secStr,
}
header, footer = getTemplate()
print >>f, header%fields
writeBody(f, sections)
print >>f, footer%fields
bib = BibTeX.parseFile(config.MASTER_BIB)
##### Sorted views:
## By topic.
entries = BibTeX.sortEntriesBy(bib.entries, "www_section", "ZZZZZZZZZZZZZZZZZ")
entries = BibTeX.splitSortedEntriesBy(entries, "www_section")
if entries[-1][0] is None:
entries[-1] = ("Miscellaneous", entries[-1][1])
entries = [ (s, BibTeX.sortEntriesByAuthor(ents))
for s, ents in entries
]
f = open("topic.html", 'w')
writeHTML(f, entries, "Topics", "topic",
(("By topic", None),
("By date", "./date.html")))
f.close()
## By date.
entries = BibTeX.sortEntriesByDate(bib.entries)
entries = BibTeX.splitSortedEntriesBy(entries, 'year')
if entries[-1][0] == None:
entries[-1] = ("Unknown", entries[-1][1])
sections = [ ent[0] for ent in entries ]
first_year = int(entries[0][1][0]['year'])
last_year = int(entries[-1][1][0].get('year',
entries[-2][1][0]['year']))
years = map(str, range(first_year, last_year+1))
if entries[-1][0] == 'Unknown':
years.append("Unknown")
f = open("date.html", 'w')
writeHTML(f, entries, "Years", "date",
(("By topic", "./topic.html"),
("By date", None)))
f.close()
## The big BibTeX
|