Here is the overall flow of the program:
Survey the current working directory for subdirectories
with year names in the range 1000-2999, and build a
list of YearRow instances.
For each year, look in that subdirectory for monthly
files with names like . If the file is
unreadable or invalid, spew appropriate error messages.
Otherwise, convert the file into a yyyy-mm.xmlbirdnotes.BirdNoteSet instance and store it
inside the year's YearRow instance.
Sort the list of YearRow instances into
reverse chronological order.
Work through the list of YearRow
instances. For each contained month, render the
BirdNoteSet instance into XHTML.
Once all the monthly pages are built, write the completed index page.