aboutsummaryrefslogtreecommitdiffstats
path: root/writeHTML.py
diff options
context:
space:
mode:
Diffstat (limited to 'writeHTML.py')
-rw-r--r--writeHTML.py125
1 files changed, 99 insertions, 26 deletions
diff --git a/writeHTML.py b/writeHTML.py
index 0d2d41a..8037abd 100644
--- a/writeHTML.py
+++ b/writeHTML.py
@@ -1,40 +1,113 @@
#!/usr/bin/python
+import re
+
import BibTeX
import config
-bib = BibTeX.parseFile("anonbib.bib")
+TEMPLATE_S, TEMPLATE_E = None, None
-f = open("_template_.html")
-template = f.read()
-f.close()
+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
-f = open("z.html", 'w')
+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>"
-template_s, template_e = template.split("%(entries)s")
+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))
-print >>f, template_s
+ fields = { 'command_line' : "",
+ 'sectiontypes' : sectionType,
+ 'choices' : choiceStr,
+ 'field': fieldName,
+ 'sections' : secStr,
+ }
-entries = BibTeX.splitEntriesBy(bib.entries, "www_section")
-sections = entries.keys()
-sections.sort()
-if entries.has_key(None):
- for ent in entries[None]:
- ent['www_section'] = "Miscellaneous"
+ header, footer = getTemplate()
+ print >>f, header%fields
+ writeBody(f, sections)
+ print >>f, footer%fields
+
+bib = BibTeX.parseFile(config.MASTER_BIB)
- entries["Miscellaneous"] = entries[None]
- del entries[None]
- sections.append("Miscellaneous")
- sections = filter(None, sections)
+##### Sorted views:
-for s in sections:
- #XXX print '<h3><a name="', url_untranslate($section), '">';
- print >>f, '<h3>%s</h3>'%s
- print >>f, "<ul class='expand'>"
- for e in entries[s]:
- print >>f, e.to_html()
- print >>f, "</ul>"
-
+## By topic.
-print >>f, template_e
+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