I use GNU m4 1.4 to generate the HTML for these pages. The pages themselves are written in a macro language which is easy to use, and saves all the annoying layout issues with HTML in the set of m4 macros which I use.

m4 is a generic macroprocessing language, more powerful and versatile than C's preprocessor, cpp.

The process.

The process for creating these pages is quite simple.

First, a small cataloguing program (written in Perl) runs through all the m4 to-be-processed images and culls out important information that all pages need to know (such as, for any given document, its title, summary, keywords, copyright notice, etc.). This information is needed globally since the links to other pages are only referenced by local (relative) filename, and all the other information in a link (the information about a file that is displayed in a link, such as the cross-reference links displayed below).

Also, the cataloguer needs to know the order in which the pages appear in indexes. This is done as it is processing each m4 file that it knows is an index. It determines the order that the files are listed in, and this is used to determine the "atomic weight" (the number, if any, which appears in the upper right of its symbol), as well as which documents precede and follow it (if any), and -- if it's an index -- which contained document is the first. This way, none of these numbers or navigation links need to be specified in any given file (and thus changed if a lot of pages are reworked); it is all done dynamically.

Finally, all this information is collected and written out to an m4 file which contains all these definitions, indexed by the document name, which is used in processing all the documents.

Then each document in turn is processed. m4 is used to process the main macro file, the output of the cataloguer (which defines all the relationships between all the different files), and some generic macros for HTML processing and such that are convenient.

The final result is a fully-formatted output of each page. This is extremely powerful; if I want to change the layout of my pages, all I need to do is change the m4 macros -- the individual files (there are hundreds!) need not change at all.

The entire process is administrated by GNU make, which knows what order to build things in, knows what depends on what, knows how to install the Web content once it's all compiled and completed.