$Id: Changes,v 1.22 2003/08/07 08:09:33 joern Exp $

2.9.23 Thu Aug 07 2003, joern
	Bugfixes:
	- 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).

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

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

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

2.9.19
	Features:
	- 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

2.9.18
	Bugfixes:
	- 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.  

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

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

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

	Bugfixes:
	- 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.

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

2.99.14
	Features:
	- 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>

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

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

2.99.12
	Bugfixes:
	- prod directory path of a module wasn't created
	  automatically

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

2.99.10
	Bugfixes:
	- <?OPTION> tag was broken

2.99.9 Wed Apr 17 2002, joern
	Features:
	- 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
	Features:
	- support for brief error reports in new.spirit cmd line mode

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

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

2.99.5 Wed Jan 31 2002, joern
	Bugfixes:
	- <?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
	Bugfixes:
	- 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>
  - <?TEXTAREA>
- immediate tag closing for emtpy block tags:
  <?SQL SQL="insert into ..." />
- always "use strict"
- <?FETCHUPLOAD>
- <?MODULE NAME="X" ISA="A, B, C">