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
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
birdnotes.BirdNoteSet instance and store it
inside the year's
Sort the list of
YearRow instances into
reverse chronological order.
Work through the list of
instances. For each contained month, render the
BirdNoteSet instance into XHTML.
Once all the monthly pages are built, write the completed index page.