This is the list of known bugs and other problems that are not fixed (yet...):
Aliasing problems with writable sequences and hashes. Writable sequences and hashes are an FMPP specific extension to FreeMarker, as FreeMarker does not support the modification of sequences and hashes. (This has good reasons in the on-the-fly dynamic page generation segment that FreeMarker mostly targets, but it is plain unacceptable in extreme FreeMarker applications as FMPP.) To read the variables of these sequences and hashes, you can use the same expressions as with plain sequences and hashes. But, to modify the contents of them, you have to use
pp directives, since predefined directives as
<#assign ...> can't modify subvariables. Unfortunately, sub-sequence operator and
?reverse does not copy the original sequence, just wrap it, so the sub-sequence and the reversed sequence will change as the original sequence changes... well, this is a problem. I have no idea how to solve these in general. As a work-around, if you want reverse or slice a writable sequence, create a copy with
pp.copyWritable that you will not modify later, and apply the operators on that.
FreeMarker template syntax looks as SGML (HTML, XML, etc.) at the first glance, but then it turns out to by anti-intuitive, especially regarding the directive parameter syntax. Well, I didn't find better Java template engine (not even something that is nearly as good as FreeMarker)... If I ever will have energy to do that, I will write a better.
FreeMarker error messages are in this-and-that situation bad, or very confusing. These are quality issues or bugs in FreeMarker, not in FMPP.
In some rare cases, log file tells that the processing session has finished successfully, but FMPP still terminates with error. (Note that in these cases, the output files are OK, just some tricky problem occurred later.) Or, FMPP terminates with error in an early stage, and there is nothing in the log file. The reason of these problems is that FMPP has no real logging, but it uses the processing event listener feature to implement log file creation, which is inadequate for this purpose. Adding real logging is on the TODO list...
The boundary of output file changes (when you switch to another output file while still executing the same template file, for example with
pp.changeOutputFile) can be inaccurate if the FreeMarker transform (filter) in use doesn't always obey flush instruction. Note that I have never actually run into this problem, but it theoretically exists. Workaround: Don't use highly antisocial transforms, try to change output file on places where the transform can flush, or close the transform block before invoking the
pp directive that changes output file.