v0.1: First working version. Parses an HTML file from STDIN and prints the parsed output in colors (for debugging) to STDOUT. Handles HTML tags, entities and strings in quotes. v0.2: Now imports template.pl and variables.pl, which parse the template and variable dictionary, given the right arguments (filename, pointer(s) to storage). v0.3: Files are actually parsed now. Variables and tag/entity redefinitions are handled correctly, even tags with options. v0.4: First major restructuring. The replacement of text is now handled by an external module, which offers this functionality also to the template and variable parser, allowing definitions that refer back to previous definitions. A few other details have also been improved. v0.5: Parser now replaces HTML tags first, while ignoring all the options, and then the values of the options in double quotes. It is therefore not possible to redefine the name of an option (but this would not be needed anyway). E. g. font and myfont can be changed but not 'face' (why should anyone change this?) v0.5.1: The options for HTML tags are internally no longer separated by space, but by the 0x80 character for easier parsing. However, this change cannot cope with several requirements; eventually, the replaced tags will have to be stored in a more complex data structure: The format will be => = (index, ) (length 1 unless several tags are specified); the index is the number of the list element with the same tag name as the definition. It does not always have to exist (and is 0 in that case). This helps to speed up option overriding. = list: tagname, [option, value] v0.6: Implementation with that data structure. Unfortunately, the access over this data structure is rather awkward and annihilates any performance gain by less frequent parsing. v0.7: Back to the simple line based data storage, with improved parsing routines v0.8: Filenames etc. work now (if the file table is up to date), but there are no substitutions being made yet for "blank" names (without the surrounding tags). Also, the path has to be adjusted, otherwise the links will be broken. v0.8.1: Links using symbolic names are now correct relative links. A bug in the option replacement has been fixed, so all redundant options should be erased. v0.8.2: Strings between quotes that represent either links or images are now correctly replaced by the HTML code for a link or images. v0.8.3: Options from config.pl are now used for getting the list of all files (via the filetable) and the output path. Redirection of input and output is no longer required, usage is now simply 'parser.pl'. v0.8.4: Start of implementation of the header and footer. The problem of interweaving lines of the header/footer with the document (in case the options of the template header are overwritten in the document) are not yet solved. v0.8.5: URLs and e-mail addresses in plain text are now "URLified", i. e. linked to with proper HTML. v0.8.6: Overriding options is now properly done in the case of multiple HTML tags. Basic macro support is done, so far only for built-in Perl commands and bits of Perl code. v0.9: Finally, the header and footer merging with the document is implemented. All that is left is now to write access functions for macros and also write the most important macros, too. v0.9.1: Lots of small bugfixes, one major bug being the inability to cope with subdirectories (fixed). The header and footer insertion is still a bit buggy. v0.9.2: A macro for header or footer links is implemented, along with a first incarnation of the IMP (Interface for Macro Programming). v1.0beta1: The IMP has been enhanced, and the insertion of header and footer links is now much more reliable. Also lots of small changes and bugfixes. A notable change is that the program now runs from /usr/bin/local, using the configuration under $HOME/.htmlplain/. v1.0beta2: A few minor bugfixes. Dependency checking has been added among a few minor tweaks. Another important new feature is that local configuration files are used, if they exist, instead of the ones in $HOME/.htmlplain/. The documentation has also been improved and is nearly complete. v1.0: Command line arguments are parsed. The option to skip document parsing has been added, and also the 'foreach' operator that allows html documents to be used with a set of different variable files. v1.0.1: It is now possible to include a pattern for input files in the command line. Also fixed a couple of bugs. v1.0.2: A small new macro has been added: DataLinks. It is for use within documents to link to all other documents using the same data files. v1.0.3: A couple of minor bugfixes, and hopefully better Windows compatibility. v1.0.4: Some minor bugfixes. An 'if/else/endif' preprocessor directive has been added. v1.0.5: An 'include' statement has been added - this may be preferable compared to redefining tags, if the redefinition is very large. Also, the header/footer merging part has been thoroughly revised, and less faults should occur now in that area - ideally, none :) v1.0.6: A bugfix in the header/footer inclusion. Another bugfix for macros. v1.0.7: Another minor bugfix in the header/footer inclusion. Empty variable names (two double quotes, "") are no longer replaced by one double quote; use a backslash instead, \", or " v1.0.8: A few minor bugfixes, particularly in the template parsing part. v1.1: Some internal data structures have been reorganized. Links with # signs should work correctly now. Two new features have been added: 1) Overriding the default sorting; 2) the possibility to have template tags always override the document tags. Two new macros have been added (Prev and Next). v1.1.1: (Not published): Christian Simming's patches applied; fixed a few small bugs, namely recursion in templates. One bug still remains, therefore the patch is not released yet. The fixes were: * Minor regexp fix to get the "magic tag" and "kill tag" working as they are supposed to. * Tags in template.html can be nested again, i.e., newly defined tags can be used in the same template-file after they are defined. v1.1.2: Fixed nesting for closing tags (in parsing.pl).