$Id: Changes,v 1.47 2006/05/29 11:25:09 joern Exp $

3.0.8 Mon May 29, 2006, joern
    - set locale for LC_TIME as well

3.0.7 Tue May 16, 2006, joern
    - Real implementation of the new gettext based l10n 
      framework. Set the actual LC_MESSAGES language
      with the new tag <?lang><?/lang>.
    - new command line tool cipp-l10n handles all tasks
      around .pot file generation, .po merging and .mo

3.0.6 Thu Nov 17, 2005, joern
    - Omit CIPP version header when XHTML conformity
      is enabled.

3.0.5 Mon Oct 31, 2005, joern
    - 'Initial Perl Statement' for database handles.
      This affects the runtime API!

3.0.4 Fri Oct 28, 2005, joern
    - All database commands now support getting a variable 
      passed in the DB option for runtime evaluation.

3.0.3 Thu Sep 22, 2005, joern
    - HTTP Header Content-type: default to windows-1252
      instead of iso-8859-1.

3.0.2 Wed Sep 21, 2005, joern
    - optionally truncate whitespace around CIPP tags
    - optionally generate XHTML conform HTML code

3.0.1 Fri Sep 16, 2005, joern
    - Runtime: Determiniation of full prod path didn't
      work with Apache2

3.0.0 Mon Sep 12, 2005, joern
    - <?GETPARAM MY VAR="@list" NAME="foo"> returned only
      the first value of the foo list parameter when
      utf8 was enabled.

2.99.38 Thu Aug 11, 2005, joern
    - <?l> tag changed incompatibly! The 'MY' and 'VAR'
      options were dropped and in PERL context the text
      is not printed to STDOUT anymore but returned
      in expression context.

    - <?l> command now works as a expression in PERL and
      VAR context and inside <?OPTION> and other
      VAR_QUOTE context tags as well.

2.99.37 Wed May 25 2005, joern
    - l10n: <?l MY VAR="$foo">...<?/l> stores translated message
      in a variable instead of printing it.
    - l10n: Runtime API officially documented, for direct access
      from your Perl code: CIPP->request->print_gettext and
      CIPP->request->gettext. Refer to the CIPP::Runtime::Request 
      manpage for details.

2.99.36 Fri May 20 2005, joern
    - New command <?l> for l10n, as a future frontend to the
      Locale::TextDomain module. Currently a dummy implementation
      translating nothing, but printing the text as is.
      For details refer to CIPP::Manual.

2.99.35 Tue Mar 15 2005, joern
    - Changes to Runtime library only: print more/better
      information about runtime exceptions. Switched on
      include backtracing again, although it's *just* what it
      is: a backtrace of include calls. Method calls are *not*
      listed here (only if an include was called *by* a method),
      so aware: this may be confusing.

2.99.34 Fri Feb 25 2005, joern
    - CIPP::Runtime::Request 0.92: print_http_equiv_content_type()
      prints iso-8859-1 charset mime type by default, not only
      a utf-8 mime type if request is utf8 enabled.

2.99.33 Tue Nov 30 2004, joern
    - Under special circumstances changes of includes where
      ignored at runtime in a persistant einvironment.

2.99.32 Mon Nov 29 2004, joern
    - CGI programs loading modules with "use" didn't work, if
      the module is located in a directory which is configured
      in the base configuration. This was a side effect from
      the SpeedyCGI bugfix of 2.99.30.
    - @INC growed on each call in Speedy/mod_perl context.

2.99.31 Thu Nov 4 2004, joern
    - new.spirit project installation: HTML files were generated
      in the wrong context (config files of the development system
      instead of production system)

2.99.30 Mon Oct 11 2004, joern
    - This release requires installation on production systems,
      since bugs in the runtime environment were fixed.

    - new.spirit CGI's didn't work with CGI::SpeedyCGI
    - Perl errors from Includes were not reported anymore.

2.99.29 Tue Sep 14 2004, joern
    - Perl syntax check sometimes hung due to BEGIN/END blocks
      in the code, which were not nuked under all circumstances
    - Generation of static HTML documents was broken since 2.99.28.

2.99.28 Fri Sep 10 2004, joern
    - <?TEXTAREA> always produced an empty <textarea>
    - write CIPP error log entry, even if error output to browser
      is disabled
    - <?INPUT TYPE="CHECKBOX" STICKY> was broken
    - Switched off exception stack backtrace, because CIPP
      can't trace method calls, which is confusing. Better
      no backtrace than a wrong one. According information could
      be gathered at runtime, but with high cost of performance.
    - Lexical variable check for non declared <?SUB> variable
      didn't work.
    - Complain about <?INCINTERFACE> parameters declared
      INPUT and OPTIONAL at the same time.
    - Several documentation fixes.

    - improved CIPP exception logging layout
    - a Unique Exception Identifier (=> UEI) is generated and
      printed to the log and to the browser - makes detailed
      bug reporting and hunting easier
    - Anchors for forms: <?FORM NAME="x.foo#anchor">
    - <?IMG NOSIZE> omits automatic WIDTH/HEIGHT determination
    - <?>$x->foo();<?/> now throws an CIPP error message, because
      the trailing ; resulted in unusable Perl compiler errors
    - <?DUMP LOG STDERR> prints dumps to CIPP log and/or
      STDERR resp. webserver error log. Format slightly changed,
      better mapping of name/value.

2.99.27 Fri Jul 02 2004, joern
    - fixed logical error with utf8 tagging of input parameters
      when utf8 is switched on at runtime
    - NewSpirit mode: additional library path's were missing
      when compiling an Include at secondary level

2.99.26 Fri Jun 25 2004, joern
    - switch on utf8 mode at runtime with
    - new Method CIPP->request->print_http_equiv_content_type
      prints appropriate <meta http-equiv> line for
      current mime type and charset setting

2.99.25 Tue May 11 2004, joern
    - imported CIPP::Runtime version 0.42

2.99.24 Tue Dec 02 2003, joern
    - imported CIPP::Runtime version 0.41

2.99.23 Thu Aug 07 2003, joern
    - Recursive usage of Includes resulted in endless loop.
      Now the compiler detects a recursion and throws an
      error message (probably future releases may support
      recursive Includes).
    - This was parsed without error: <?GETURL ... <br> >
    - <?SQL>: some special handling to PARAMS of non-SELECT
      statements applied. Empty variables will be converted
      to undef (NULL) before they're passed to DBI. This
      harmonizes the handling of empty strings with different
      database systems (e.g. Oracle converts empty strings
      to NULL always, while MySQL handles them as-is).

    - new command <?SWITCHDB>...<?/SWITCHDB> which switches
      the default database inside the correspoding block.
      Nesting is possible, also this switiching exception
    - new project configuration parameter: add_prod_dir.
      Enables searching for includes, libs and configs in
      external CIPP3 projects. Needs new.spirit 2.1.17.

    - added a timeout the Perl syntax checker to prevent
      hanging processes.

    - missed utf8 output stream initialization for subsequent
      requests in mod_perl/SpeedyCGI context.

    - New project attribute 'utf8', which makes a project
      Unicode aware. Default mime-type/charset is utf-8,
      all CGI parameters are expected to be utf8 encoded.
      All values in the database are expected to be
      utf8 encoded. utf8 upgrading / _utf8_on is done
      on all I/O variables (for CGI and SQL).
      Requires Perl 5.8.0

    - finally fixed whitespace generation problems. Now
      CIPP3 behaves exactly like CIPP2
    - sometimes the Perl checker process hangs - this
      is prevented by a 5 seconds timeout.  

    - Whitespace between CIPP tags was removed entirely,
      what could mess up HTML formatting. Now whitespace
      appears as is.

    !!! Note: you must recompile your project after
              upgrading to this version  !!!

    - updated CIPP::Manual
    - the script doc/create_pdf.sh creates a nice looking
      PDF version of CIPP::Manual. It requires pod2html
      and ps2pdf.

    - SpeedyCGI context: internal request object wasn't
      destroyed at the end of a request if a DBI database
      handle was stored in a global variable, because the
      request object was referenced by the database handle
      through a closure. This out of sync request destruction
      could lead to memory leaks or other problems.
    - internal CIPP::Request object was passed unnecessarily
      to Include subroutines.
    - newlines were always generated, even for such constructs:
      no<?IF COND="1">newline<?/IF>here.

    - <?SQL MY RESULT> didn't work
    - internal exception if an include file wasn't readable

    - revised internal API naming convention
    - documented CIPP::Request interface for public access
      (not stable yet, interface may change)
    - local Perl syntax check for subroutines defined with
      <?SUB>. This reports illegal usage of global lexical
      variables inside the subroutine. The new option
      <?SUB ... IMPORT="$foo"> tells the syntax checker,
      that access to $foo is explicitely allowed (e.g. if
      you need access to lexically defined class variables)
      Note: the IMPORT option was also added to CIPP2 2.47,
            as a no-op, so you can use this in CIPP3 programs,
            which must compile under CIPP2 as well.
    - new command: <?FRAME SRC>

    - processing cipp-html objects left files in /tmp
    - internal exception handling fixed: error messages
      of exceptions caught with <?TRY> were printed out.

    - new option <?GETURL PATHINFO="">
    - new option <?SQL COND>:
      With <?SQL COND="$foo < $bar"> data will only be fetched
      as long as the condition $foo < $bar is true.
    - <?AUTOCOMMIT ON/OFF> throws an exception, if AutoCommit
      is already on (resp. off)
    - <?COMMIT> and <?ROLLBACK> throw an exception, if
      AutoCommit is enabled.
    - new parser internal attribute url_par_delimiter, which
      defines the delimiter for URL parameters (& or ;). The
      ; delimiter prevents problems with entity interpolation
      in URL's (e.g. &not)
    - error message reporting enhanced. Stack backtrace with
      CIPP and Perl line numbers where possible.
    - if a CGI program is started only a ASCII formatted
      error message is shown, instead of the sophisticated
      HTML version.
    - <?IMG> tag determines image geometry at runtime and set
      WIDTH/HEIGHT attributes accordingly, if not explicetly
      set by the author. Needs Image::Size on the development
      system, which is autodetected. If not available this 
      feature is silently disabled.

    - <?SQL RESULT> gives 0 instead of 0E0, if no rows were
    - newlines at the end of parameter lists (e.g. <?INCINTERFACE
      OPTIONAL="... <nl>") weren't removed, which results
      in Perl syntax errors sometimes.

    - prod directory path of a module wasn't created

    - <?IMG> command produced linefeed after <img> tag.

    - <?OPTION> tag was broken

2.99.9 Wed Apr 17 2002, joern
    - strip whitespace from SQL commands before passing them
      to DBI. MSSQL *hangs* if a SQL statement begins with
      a TAB or NL character... *sigh*
    - CIPP::Runtime Version 0.40 copied from CIPP2 Distribution.
      This way mixing CIPP2 and CIPP3 projects on production
      systems should be possible (untested yet)

2.99.8 Tue Apr 08 2002, joern
    - support for brief error reports in new.spirit cmd line mode

2.99.7 Fri Apr 05 2002, joern
    - <?GETPARAM>, <?GETPARAMLIST> didn't work

2.99.6 Fri Mar 22 2002, joern
    - fixed bug in cached error mechanism

2.99.5 Wed Jan 31 2002, joern
    - <?GETURL> did not work on jar files
    - <?SUB> subroutine not found in main package
    - <?SQL> no trim of trailing semicolon
    - CIPP module initilization failed on inherited classes
    - <?GETURL RUNTIME> did not work

2.99.4 Wed Jan 30 2002, joern
    - many CIPP object types couldn't be resolved in new.spirit mode
    - variable list parsing was too sensitive, e.g. hash derefences
      and stuff were rejected by the parser
    - static text objects had no URL

Major / Incompatible Changes to CIPP 2.x

- <?INTERFACE>, <?INCINTERFACE> may only be used one time per program,
and only in CGIs resp. Includes
- no defaulting to scalar variables when no $@% is given
- <?VAR>: DEFAULT did not work with NOQUOTE
- <?LOG>: throws an exception if something gets wrong
- variable name / option case is preserved for these statements now:
- <?MY>
- <?DUMP>
- immediate tag closing for emtpy block tags:
<?SQL SQL="insert into ..." />
- always "use strict"
- <?MODULE NAME="X" ISA="A, B, C">