=0.33 ==Bugfixes * the value of an variable can now begin with any character: $var=/usr/local * There was still a bug in continued list handling: if continuing points were restored from cache they contained the \I level hint, so if one inserted points before this one after the cache entry was built, the continuing point was restored at a wrong level. This is fixed. * POD fix: \C option of the \C method works on base of \I, not paragraphs. * If embedded Perl code replied an undefined value this thing was tried to be parsed which caused a perl warning. Now it's completely legal to embed such code, which is especially useful to prepare variables or functions. * Starting an ordered list by a continuing point (using "##") caused a perl warning. Code fixed. ==Features * Installation now explicitly requires \C 1.00. I'm not sure if this was the first version of \C that contained \C but it should certainly be a version providing it. An additional requirement hint was added to \C. * The backend now provides optional process visualization as well as the parser. * There's a new mailing list. Send an empty message to \C to subscribe. ==pp2sdf * adapted to the new backend feature of process visualization; =0.32 ==Bugfixes * README adapted to new pp2sdf installation performed since 0.31; * Lorenz recognized that macro results sometimes differed from plain usage of the replacements, investigation showed that this was the case if a macro was used without body, for reasons of parsing. The result was that the token after the bodyless macro was parsed before the macro replacement, resulting in sometimes confusing output. (As a workaround, one could use a meaningless body like in \C<\\MACRO\<_\>>.) To make a long story short, the error is fixed with 0.32, so the stream should be correct now even when bodyless macros were used as in \C<\\MACRO\\MACRO\\MACRO\\MACRO\\MACRO\\MACRO\\MACRO>. * made Changelog pasing the parser again; ==Features * Jeffrey S. Haemer suggested to extend \C<\\INCLUDE> so that external scripts can be placed into PerlPoint without the need to copy their contents and paste it into the presentation source. To relieve presentation authors this way, \C<\\INCLUDE> now supports a special file type of \B. \\INCLUDE{\B file=script} * The example is included as a verbatim block. Its lines can be indented by the new special option \B: \\INCLUDE{type=example file=script \B} * slightly rearranged \C when adding the example extension; =0.31 ==Bugfixes * fixed POD to be more readable by pod2man (detected by Lorenz); * bugfix: in special constallations it could happen that headlines after file inclusion with \C were detected at wrong levels; * the internal list counter of ordered lists used to find out where a continued list restarts is now reset when a new lists begins (as Lorenz detected, it was not reset correctly before); * Circular inclusion of PerlPoint sources was blocked too strictly: every source was accepted only once. Now there's a better algorithm checking real nesting: you can use a source file as often as necessary, but not nested. ==Features * added a \B syntax highlighting file to the \C directory, provided by Lorenz Domke (lorenz.domke@gmx.de); * Ordered lists now provide the startup level, additionally to the first point which already did this if the list was continued by \C<##>. This makes it easier for translator authors to begin the list by a certain number if necessary. * added a tiny editing hint to the docs (FAQ); * added \B lisp code in the \C directory as an example how the \C module could be extended for PerlPoint; * improved \C structure; * adapted \C documentation slightly; * New option \B<\C> makes the \C<\\INCLUDE> tag working like Perl's \C or \C for nested PerlPoint sources: the file is only read unless it was already seen before. \\INCLUDE{type=pp file="macros.pp" \B} * This feature is \I intended for translated paragraphs but especially useful to make macros available by separate source files included whereever necessary, and to nest source parts which \I load such definitions. ==pp2sdf * pp2sdf: all generated text paragraphs now begin with a backslash to avoid unintended paragraph style interpretation by sdf in case a colon follows the first word like in Remember: think twice. * The only exceptions of this rule are made if the first word is "Note" or "Sign" because the special SDF formattings seem to make sense then. * pp2sdf is now installed automatically by "make install"; =0.30 ==Bugfixes * fixed a bug detected by \I (lorenz.domke@gmx.de): embedded code can now be included into tags; * \I (lorenz.domke@gmx.de) detected unhandled macro modifications when caching was active. I figured out that this really can happen under the following rare circumstances: > * You use a string looking like a tag name not currently known as tag or alias and precede it by a backslash, like \C<\\NOALIAS>. The paragraph does not contain any dynamically changing contents. * Now you proceed the text with active cache. Because the paragraph looks perfectly static it is cached. * You declare a new alias \C<\\NOALIAS>. The paragraph remains unchanged. * Now the next time this text is processed with active cache its checksum matches the paragraph stored before. The stream is restored and the new alias is ignored until eiher the paragraph changes or the cache is cleaned up. < * Well, this is not perfect. Users should know this at least, so I added a suggestion to clean up the cache after introducing new alias definitions. ==Features * variable settings can be propagated into the stream now; * improved syntactical error messages; * According to the PerlPoint language definition tag recognition is now strictly limited to capitals and underscores (previous versions accepted lowercase letters in tag names as well). The restriction makes it easier to use backslashed strings when \I tags are accepted. Formerly, one had to write This is \\\\no_tag, be sure! * Now this can be written This is \\no_tag, be sure! * and only capitalized backslashed strings are still to be guarded: This is \\\\NO_TAG, be sure! * As before, this has only to be taken into account if users prefer to accept everything looking like a tag as a tag (see \C<\\ACCEPT_ALL> for details). * Consequently, lowercased letters in alias/macro definitions are no longer valid. They are accepted but automatically converted into capitals, while the parser displays a warning. ==Internals * internal code cosmetics; ==pp2sdf * "}" characters outside verbatim blocks and embedded HTML are now replaced by SDF escape \C<{{CHAR::rbrace}}> to guard translations of things like \C<\\B\<{key=\>value}\>> =0.29 ==Features * modified the parser module a way that its version can be displayed by CPAN; * New common way to pass basic data to active contents: translator authors can pass a hash of settings which is mirrored in the active contents namespace as \C<\B<%$PerlPoint>>. This makes it easy to pass things like the current target language or call specific user settings. * Two conventions are already introduced: \I and \I (allowing users to control the translation process more detailled by passing simple translator options). * See \B for an example of usage. * Simplified backslash handling in macros. Before 0.29, each macro level (and each tag level in the macro replacement, of course) added a need of yet another backslash before closing angle brackets (and literal backslashes) in the targetted text, making it difficult to nest a number of macros (especially if they were declared by others). * So, until now, one had to write <{key}> \I<\B<$var-\>{key}>> EOE * but <{key}> \MACRO<\I<$var-\\\>{key}>> \MACRO<\MACRO<\I<$var-\\\\\\\>{key}>>> EOE * - not really handable. And inconsistent (nested \I never required aditional backslashes, but macros did). * From now on, only \I backslash is necessary \I: <{key}> \I<\B<$var-\>{key}>> \MACRO<\I<$var-\>{key}>> \MACRO<\MACRO<\I<$var-\>{key}>>> EOE * \B * Accelerated macro handling - earlier versions used to \I a macro body which delayed parsing in case of deep macro nesting. From now on, every token is only parsed \I. As an additional benefit, a significant amount of code could be removed and the backend module needs no longer to be used by the parser which accelerates startup time of translators in general. ==pp2sdf * pp2sdf target code embedding is now restricted to SDF and HTML, but these both \I officially supported now (as well as Perl, of course ;-); =0.28 * removed an old POD headline prefix in README which caused CPAN to run pod2html (and to display the related section only) * made it backwards compatible to perl 5.00503 again; =0.27 * module namespace changed from "PP" into "PerlPoint"; * first CPAN release; =0.26 ==Bugfixes * bugfix in active contents handling: it might happen that lines were ignored; * bugfix in dynamic contents handling: nested dynamic contents (resolved macros, embedded parts, included parts) might not be handled in the correct order; * The cache now considers headline level offsets of nested sources. Before 0.26 it might happen that the headline level offset was modified but an \I offset was restored from cache. * \B still use existing cache files but old data therein will never be referenced. To clean up old caches just remove them or use the parsers cleanup facility.> ==Features * new utilities directory, providing a NoteTab clipbook file initially; * new dynamic FAQ document; * new headline level offset keyword "CURRENT_LEVEL" in PP file imports; * The parser now changes into the directory of a sourcefile when it is processed. This way nested sources can always use relative pathes, so assembling a patchwork document becomes easier. \B * Example: if a source located in \C is processed and includes \\INCLUDE{type=pp file="\Bsubdoc.pp"} * to nest a file in its own directory, \C had to be specified because all pathes were relative to the parsers startup directory. This was not very logical and made it hard to combine nested sources. * Now the parser changes into the source directory, which means that nested source pathes are relative to the path \I, in our example: \\INCLUDE{type=pp file="subdoc.pp"} * the package now explicitly requires perl 5.6; ==pp2sdf * pp2sdf: avoid unintended SDF phrases (\C>) now by generating "<" as "{{CHAR:lt}}" (outside verbatim blocks); =0.25 * completed prerequisites list in Makefile.PL; * added notes about Storable updates to parser documentation; * cache bugfix; * trace code bugfix; * added a new demo application pp2sdf which is a complete translator; * process visualization: bugfix and improvements; * new experimental tag setting "\ACCEPT_ALL" switches to a "anything that looks like a tag is processed as a tag" mode to simplify source translation by tools implementing different tag sets; =0.24 * new checksum based incremental parsing accelerates updates (depending on the document structure); * ordered list can be continued now: simply use \C<##> instead of \C<#> to continue a previously opened list \I (needs translator updates to take visible effect); * new \C option \C<"vispro"> to activate process visualization; =0.23 * several fixes in embedded code handling, tables can now be inserted dynamically; * providing a new basic PerlPoint documentation about active contents; * new trace mode TRACE_ACTIVE (active contents evaluation); * improved README file; =0.22 * the include directive has a new optional headline level offset parameter; * several slight bugfixes in trace modes; * when reading included files, the main file handle is now closed instead of duplicated and reused - perl5.6 run into difficulties in some cases (if several files were included, the file pointer seemed not to reset correctly while switching back to the original handle); * now providing basic PerlPoint documentation in new "doc" directory, may be included into translator docs; * added a first README version; =0.21 * completed table paragraph implementation according to the design paper: first row is now automatically streamed as "table headline" (it is up to the backend to format such table cells as it wishes); * added macro (or alias) feature, call it still experimental because there might still be untested cases; =0.20 * table \I are implemented now; =0.19 * new condition paragraphs which allow to maintain presentation versions in several languages by one source file, for example; * bugfix in table handling: table stream structure was wrong (the bug was discovered by \I); =0.18 * fixed an error in Makefile.PL comment; * embedded Perl code is evaluated now (in a safe, user configurable environment); * Perl code can now be included as well as embedded; * PerlPoint can now be embedded as well as included; * variables are made accessible by included or embedded Perl code; * added a simple visualizer to the demo directory (pp2tree); * new optional source line hints in the stream; * bugfix: backslashes in embedded parts shall not be special (as they were); * new multi level list shifts (e.g. "<2"), level is optional and defaults to 1; =0.17 * Bugfix release: if a paragraph started with a tag, paragraph openers (like "*", "#", "-" and so on), they were handled as special characters until the tag was closed, which made them invalid inside the tag. Thanks to \I for the bug report. * There was also a bug in tag handling which could be fixed by the way. =0.16 * added a tag test which demonstrates the usage (and function) of string parameters ; * the grammar file became part of the distribution; * updated parser documentation; * definition list items were plain strings before, now they are streamed input which means that they can contain tags, for example (thanks to \I for the suggestion); * Added a filter feature to run(). The parser can now suppress included or embedded code of a language different from the target one. Embedded HTML code, for example, makes no sense in a stream passed to a backend which generates LaTeX or PostScript. =0.15 * this is just another attempt to make the package 5.005 clean ... thanks to \I for his tests; * added the Changelog part of 0.14 which was prepared but not delivered with 0.14; =0.14 * improved handling of special characters, as a consequence, only backslashes should have to be guarded by a backslash now if they should stay for itself (except of in the beginning of a new paragraph where a number of special characters have to be recognized); * added new demo script pp2pp in a first version which successfully processes Changelog and TODO file; * bugfixes: stream contained trailing whitespaces for list points and headlines; * bugfix: empty lines in verbatim blocks were not streamed; * bugfix: stream contained leading newline for verbatim blocks; =0.13 * made it backwards compatible with perl 5.00503 again (until more people will have 5.6.1); =0.12 * added demo translator pp2pod; * leading spaces in list points are ignored now; * various bugfixes in parser behaviour (success flags); * made the Changelog file passing the parser ;-) =0.11 * added embedding (enclosed blocks of foreign code); * added including (embedded files); * added a first version of tables; =0.10 * fixed various block bugs detected by \I: verbatim block opener was supplied in stream in 0.09, first indentation in blocks was not supplied; =0.09 * started Changelog; * verbatim blocks now start with a "here document" hint immediately; * new "definition list point" paragraphs; * safer tests; * streamed lists are embedded into list directives now; * modified syntax of verbatim blocks; * added variables; * modified tag syntax: TAG => \\TAG[{parlist}][];