Revision history for Perl extension PApp

TODO: more xs for _obj_member_add

2.3  Thu 03 Aug 2023 00:27:34 CEST
	- Agni::agni_exec would local'ize $PApp::NOW, which would incorrectly
          disassociate from any imported versions.
	- use sessionid to strengthen crypto check for state keys.
        - PApp::SCGI::Worker destroys and recreates the EV default loop. That's
          a bit dirty, but there is no way to save and restore a signal handler in
          pure perl, so the alternatives seem all worse.
	- PApp::SCGI: run PApp handler in a Coro thread instead
          of in an event handler, to allow handlers to block.
        - PApp::SCGI: allow exit code to be provided by overwriting
          $PApp::SCGI::Worker::WORKER_EXIT.
	- PApp::SCGI: slight performance optimisations for papp-scgid.
        - PApp::CGI warns did not print a trailing newline.
        - add HTTP_AUTHORIZATION header suppoort to PApp::CGI.
        - PApp::XSQL::Sablotron marked as deprecated.
        - PApp::XSQL::Sablotron now increases Coro's cctx stack because
          sablotron uses a lot of stack space.
        - setting environment variable PAPP_INSTALL_SKIP_CONFIG=1 will skip
          config installation and questions during make install.

2.2  Mon Feb 17 11:20:25 CET 2020
	- greatly improved papp-scgid implementation and worker management.
	- rewrite PApp::SCGI implementation.
	- support stdin/stdout members for PApp::CGI objects.
        - remove the eval workaround for older perls.
        - PApp::CGI will now generate relative redirects, as per RFC 7231.
        - implement Agni::obj_by_name and use it to allow names in more places.
        - allow obj_by_name specs in PApp application specs.

2.1  Thu Feb 11 08:18:30 CET 2016
	- $PApp::SQL::DBH and ::Database are now set during all of the
          request execution, not just during run or exceptions.
	- work around incompatible tiehandle changes in perl 5.16.
        - work around incompatibilities between mariadb and mysql.
        - use env variable PAPP_CREATE_TBALE_OPTIONS to specify create table
          options in make init and make update.
        - close the data handle in PApp::I18n to conserve file descriptors.
        - dropped support for switching papp apps (pappid) via state.
        - require perl 5.010 and enable its features by default in Agni.
        - use more memory-efficient and faster object lookup in compiled
          methods.

2.0  Tue Mar 19 13:23:25 CET 2013
	- escape_html now converts windows-unicode (with windows-1252 garbage)
          into numeric entitity escapes. escape_html is now ~20% faster as well.
	- most of the changes below are due to the brutal removal of traditional
          .papp application support in favour of pure agni.
        - PApp::EditForm::ef_selectbox didn't interpret arrayrefs as data
          values as per documentation.
        - default charset for output is now always utf-8.
        - work around further api breakage in 5.14.
	- remove %S, %A, reference_url, current_locals, suburl, sublink,
          retlink_p, retlink, returl, preferences_url, preferences_link.
        - replace macro/xpcse.papp by PApp/XPCSE.pm.
        - replace macro/editform.papp by PApp/EditForm.pm.
        - remove macro/*.papp, apps/*, widget/*.papp, demo/, simpe-edit/,
          xmcs/, xpcse/xpcse-demo.papp.
        - remove PApp/Parser.pm, PApp/Package.pm.
        - remove support for PApp::Application::PApp.
        - remove $PApp::module, modules, curprfx, curpath, curmod,
          ppkg and all references to them, i.e. all PApp "module
          tree" support.
        - no longer use or create the pkg table.
        - new bin/agni option: --import-ignore-type.
        - fix reference to Storable from PApp::Storable.

last_1x_version Sun May 20 02:08:56 CEST 2012
	- move config from PApp::Config to /etc/papp/config.
        - move LIBDIR/config.pl to /etc/papp/secure.
	- remove most of the DEVELxxxx utf8 workarounds in the i18n scanning
          code, fixing at least one bug introduced by a fix in perl :)
	- use optimised bit arithmetic on perls with 64 bit-integers.
        - work around a performance bnottleneck in expat's character
          parsing, for a major agni --import speedup with large objects.
        - implement a horrid workaround for PApp::CGI to support PApp's
          way to set cookie headers (in itself a horrid workaround
          for broken set-cookie parsing in most browsers).

1.45 Sun Nov 21 08:20:50 CET 2010
	- port to perl 5.12.
	- die if objects belonging to callbacks cannot be loaded.
        - make sure gid is always quoted when creating callbacks.

1.44 Sat Jan 30 04:06:14 CET 2010
	- ef_submit and ef_form surlargs are now interpreted before ef_cb_end
          callbacks.
	- this release breaks PApp::CGI due to changed cookie handling.
	- disable autoloading for PApp::Storable.
        - new functions PApp::add_cookie, PApp::cookie.
        - new functions PApp::Util::{nonce,asciibits}.
        - use Guard module to implement guards.
        - use common::sense, convert PApp to strict mode.
        - fix a bug in multipart form handling of unknown impact.
        - fix a bug in PApp/HTML selectbox of unknown impact.
        - speed up agni store operations by removing dead code
          fetching _cache.
        - speed up data::papp_special agni types considerably.
        - work around corrupted Cookie:-headers sent by firefox.
        - work around perl 5.10 setting readonly on lots of things.

1.43 Tue Dec  9 18:21:06 CET 2008
	- implement $PApp::Storable::force_path and make use of it in retrieve.

1.42 Wed Nov 26 08:16:49 CET 2008
	- PApp sometimes didn't refresh the stack pointer when necessary,
          leading to crashes and data corruption on stack resizes (most
          notably when running on secondary perl stacks).
	- add storable serialisation protection to agni objects.
        - add PApp::I18n::iso{639,3166} functions.
        - replace "use strict" in agni by "use strict 'vars'" by default.
        - speed up by not executing the use strict pragma on every
          method compile.
        - lowercase form method names to improve xhtml compatibility
          (reported by Muttley).
        - use net_mstore instead of store as default serialiser.
        - fix a bug where surl would access unallocated memory
          (which likely was harmless).

1.41 Mon Jan 28 21:06:10 CET 2008
	- fix long-standing (harmless) bug where agni objects would become
          blessed twice or more.
	- really move lzf::set_serializer call into PApp::Config :(.

1.4  Sun Jan 20 13:33:53 CET 2008
	- move lzf::set_serializer call into PApp::Config.
        - avoid an sql access in PApp::Event when there are no new events.
	- update to perl 5.10.
        - upgrade storable to 5.10 version.
        - remove some unicode bug workarounds that clash with perl 5.10.

1.3  Tue Oct 23 10:36:53 CEST 2007
	- allow coderefs in fixup markers.
        - PApp::HTML::alink now uses tag so supports %attrs prefix hash.
        - use net_mstore for Compress::LZF, not mstore.
        - fix papp-admin's --reorganize option.
        - add --export-dpo option to papp-admin.
        - PApp::Util now exports dumpval and uniq by default
          (oesi can orgasm now).
        - include sysid in commitinfo.
        - switch from JSON::Syck to JSON::XS.
        - do not export empty msgids anymore, as this confuses the po
          file reader into using the wrong target language.
        - added PApp::guard.
        - added clear-database option to bin/agni.
        - fixed ef_form_name to return page-unique values.
        - fixed ef_custom to simply return a new key.
        - only install a warn handler during requests.

1.2  Sat Jan  6 20:27:32 CET 2007
	- editform/checkbox now uses Agni::*64 functions.
        - textarea now removes the leading newline when the content type
          is "application/xhtml+xml" (this is a hack, it's impossible to
          detect how the browser interprets the page, so one cannot work
          around this incompatibility between html<=4 and xhtml).
	- other callbacks were errornously executed at the next request
          when one callback called any abort_ function.
        - ef_submit surlargs get interpreted after form processing and
          after ef_cb_end callbacks have been executed.
        - small memory optimization: _type and _attr get shared between
          similar agni objects.
        - abstracted _type and _cache management.
        - fixed error reporting for non-Agni applications.
        - on full-image import, bin/agni now resets the mysql insertid
          to 1.
        - mass_delete_objects did errornously keep some attributes
          (still does, much less often, though).
        - further optimized agni_fetch by avoiding sv_mortalcopy.
        - implement papp-admin --upgrade-apps.
        - added SURL_START_SESSION.
        - add from_json/to_json to PApp::Util.

1.1  Sun Sep  4 16:19:14 CEST 2005
        - don't update the _cache entry on STORE, this is the job
          of the store method.
	- bin/agni: fix --force option.
        - xpcse now uses the Host: header, if available, to generate
          its URL.
	- switched to real I18n instead of stubs in Agni namespaces.
        - agni statementhandles weren't properly initialized on first
          database connect.
        - accept PR-xinclude-20040930 in addition to the 1999 version
          in PApp::XML::xml_include.
        - handle #default-namespace used in newer expats in xml_include.
        - upgraded to Storable-2.15.
        - new function: PApp::Util::mime_header.
        - PApp::HTML::mailto_url now uses the above function to encode
          headers.
        - blindly accept anything when neither encoding is given, or
          encoding is ascii|us-ascii|iso-8859-1, when processing
          form data.
        - abort_with_file no longer sends the file when $request->header_only
          is true.
        - session variables are no longer PApp-path-specific, PApp::Session
          uses function interface instead of method interface.

1.01 Sun Feb 27 18:43:42 CET 2005
        - improved speed of Agni fetch and store.
	- PApp::ECMAScript::escape_string_* now also escape "<"
          characters, to avoid common de-quoting bugs in browsers.
        - implement --force option in bin/agni.
        - PApp::ECMAScript string quoting functions will also quote &.

1.0  Tue Nov 23 18:08:14 CET 2004
	- check obj_gidseq validity after every import.
	- various exceptions could cause an agni object to become
          highly unmagical.
	- initial speed-up patch for Agni by dynamically patching
          helem opcodes.
        - {{..}}-references will do a hash lookup before calling "obj",
          increasing speed by avoiding a function call.
        - new function: PApp::insert_fixup.

0.95 Sat Apr 24 09:14:54 CEST 2004
	- "use strict" by default in Agni methods.
	- improved ef_password.
	- new function: set_output.
	- give priority to "en" when no language is requested.
        - call PApp::Application->callback_exception when
          papp execone handlers cause one.
        - PApp::Application::Agni->callback_exception will call the method
          of the same name in the mounted application.
        - Apache-2.0 hack by oesi. Stable.
        - mark functions in Storable.xs as static, as starting with
          5.8.1 or 5.8.2 they were colliding with the functions in perls
          Storable. Probable cause: Storable is built-in in my perl thus
          it's symbols are found first (damn).

0.22 Sat Nov  1 14:26:10 CET 2003
	- editform is now transactional, i.e. first phase check,
          second phase cb_begin/assignments/cb_end.
        - editform now supplies a guard value, but doesn't check it
          (yet).
	- database upgrade (replace obj_attr).
        - calling PApp::Event::broadcast caused papp to ignore
          the next two rounds of events.
        - papp-env supports multiline-assignments.
        - xpcse now asks for username/password, using a horrible
          but low-dependency method.
	- fix endless-loop bug in PApp::FormBuffer.

0.21 Mon Apr 21 17:15:30 CEST 2003
	- database upgrade (nuke obj_isa), no release.
	- xpcse now actually exits correctly and doesn't stay in memory.
        - zaphod inspired some utf8_upgrade on readonly scalars fixes.
        - ef_password no longer displays the previous contents,
          and only stores non-empty inputs.

0.2 Fri Nov 15 20:04:32 CET 2002
	- new function PApp::fixup_marker which lets you embed fixup markers
          in the output stream and replace them at page output time.
	- macro/editform's can now be nested. embedding ef_mbegin &c
          automatically upgrades the form.
        - fixed a serializing bug in PApp::Storable, reduced size, too.
        - fixed a DBH race after ChildInit (fetch without execute...).
        - new %PApp::temporary hash.
        - Agni applications can be directly mounted now.
        - $papp_ppkg_table is now a function (i.e. change occurrences to papp_ppkg_table).
        - PApp::CGI fixed with respect to xpcse.
        - updated LICENSE, alternative GPL version available on request (only).

0.143  Fri Sep 27 08:04:19 CEST 2002
	- ef_selectbox now keeps key values on the server: improved security,
          complex types for key values possible.
        - $state{papp_lcs} no longer deleted, because parse_multipart_form can
          be called very late.
        - new module: PApp::MimeType.
        - added PApp::Storable, which will, in the future, used to work round
          limitations in the original Storable module.
        - XML-ified PApp::Exception. Doh.
        - new papp runtime events "prefork" and "postfork".
        - event will now integrity now checked (but not fixed automatically).
        - new PApp::XML::xml_errorparser.
        - PApp::DataRef::Scalar now supports specialization.
        - SURL_EXEC_IMMED.
        - new function PApp::postpone.

0.142  <elmex-special>
	- PApp::Event::broadcast accepts multiple scalars now.
	- callbacks now save and restore the $PApp::SQL::Database at refer.
	- callbacks can now be defined using {::} syntax, see PApp::PCode.
          this is an EXPERIMENTAL feature.
	- SURL_EXEC is now optional and deprecated, do no longer use (just
          pass the PApp::Callback::Function object directly).
	- better error messages on missing files when parsing .papp files.
        - <include> now works relative to the file containing it.
        - work around scoping probles in PApp/Config.PL, so the old
          config will be read.
        - ./papp-install should no longer be called directly.
        - added PApp::Preprocessor.
        - make test runs without lots of warnings.
        - PApp::Util doesn't require PApp.pm anymore.
        - added PApp::XBox (not working).
        - added PApp::Session.
        - PApp::Event now saves/restores the DBH.

0.142 Tue Apr 16 19:17:14 CEST 2002
        - removed first sublink and suburl argument
	- WARNING: You need to either re-run papp-install, or
          run "alter table papp.grp add unique key (name)" before using this
          version.
        - WARNING: DataRef now requires an explicit insertid => 1 when
          sql_insertid behaviour on zero or undef keys is intended.
        - WARNING: renamed PApp::User to PApp::UserObs to allow for API
          needed API changes. Do so in your own programs.
        - optimized surl to only generate the destination module name
          when expliticly given and generate alternatives only when necessary.
          saves time & disk space.
        - editform now checks wether form data is submitted and dies otherwise.
        - correctly re-set the cookie when a user logs in.
        - PApp::User(Obs)? now has immediate grant/revoke_access, i.e. access
          right changes become effective immediately in all sessions.
        - simple-edit/x-papp-edit now correctly uses any proxies specified
          in the environment.
        - I18n-tables are flushed automatically when poedit writes them,
          no server-restarts neccessary.
        - updated (some) iso translations.
        - <noession> no longer eats package bodies.
        - HACK: package names containing "::" are unshared and keep their
          name when compiled to perl.
        - handle_error now sets the status to 500 (internal server error).

0.141 <no formal release>
	- bump version for database changes.
	- state id's are now handled by sequences.
	- fix userid NULL issues with newer(?) userhandling.
        - rewrote bin/papp-env using Getopt::Long, now supports --help.
        - fix PApp::DataRef::delete.
        - PApp::DataRef didn't support preload => 1 and cache => 0 (cache
          => 1 is now being forced on preload).
        - streamlined state-handling a bit.
        - PApp::DataRef now supports creating rows when caching is off.
        - PApp::DataRef::Scalar supports generic fetch/store methods.
        - implemented getpref/setpref function that somehow replace the
          planned %T functionality. convert user-preferences into the new
          format.

0.14  <no formal release>
        - new module PApp::Event.
        - new function PApp::XML::expand_pi.
        - editform's ef_checkbox can now modify bitfields.
        - correct implicit DBH is now set when applications/packages are
          being compiled.
        - fixed insert/replace optimization and insertid in DataRef.
        - surl could coredump when passed funny objects.
        - $papp_ppkg now package variable in evere <package>.
        - ef_relation, enum and set now honor html-attributes.
        - fix the self-ref-circle in PApp::DataRef.
        - better error messages for config_eval.
        - updated PApp::DataRef to do REPLACE or INSERT/UPDATE dynamically
          and documented what is being done;
        - added a PApp::DataRef::new_locked method.
        - allow preload => 1 to fail in PApp::DataRef.
        - fixed the case when utf8 was set to an array.
	- converted the FAQ to xml and put it online using schmorp's
          hilarious instant-faq xslt.
        - implemented app-name-specific access rights in PApp::User.
        - added eventcount table && checks to enable event processing.
        - added even more %T hooks (%T was already there and handled,
          so there is no speed hit yet).
        - removed %T completely, will be done using a functional interface.
        - PApp::User::newgrp behaves better when the group already exists now.
        - bin/papp-admin can now edit users properly.
        - new, experimental update-policy for PApp::DataRef. mysql users
          should use mysql_client_found_rows where possible.
        - ?> now has the same semantics as :> (it was deprecated before)
        - --"" in :>-sections now doesn't interpolate anymore. might one day
          be working, but now now.
        - removed an illegal optimization in PApp::PCode.
        - utf8-ified PApp::User.
        - updated PApp::DataRef to support multiple keys. Also warns about
          lots of deprecated uses that will be removed.
        - DataRef now supports specialization (template objects).
        - macro/editform now sets checkboxes to 0 instead of undef (an
          implementation detail).

0.122 Mon Dec  3 19:32:50 CET 2001
	- fixed hashing of long strings in PApp::I18n. This invalidates
          all translation tables.
        - fixed i18n tables. wrote 4 perlbug reports. flamed with jhi, who
          is such a nice person...
        - "fixed" import/export i18n tables with respect to various perl versions.
        - PApp::Lock always timed out if the lock was down.

0.121 Fri Nov 30 10:53:24 CET 2001
	- fixed apps/poedit.papp.

0.12  Sat Oct 27 16:55:26 CEST 2001
	- INCOMPATIBLE CHANGE: $ppkg->insert and embed no longer do the
          dereferencing for you, i.e. change
          $ppkg->embed('name') to $ppkg->{pkg}{name}->embed.
	- INCOMPATIBLE CHANGE: changed the syntax of all SURL_-cookies
          into functions. This is more natural and gives me more freedom.
	- added DataRef::invalidate.
	- changed to using new Compress::LZF::sfreeze functionality.
	- fixed user/group entry for reconfig AGAIN. how many times did
          I tell Paul this until I did it myself??
	- added papp-httpd, a simplistic httpd that mounts an app and
          starts a webbroser on it.
	- surl and find_keysv now check wether the ref => xxx assignment
          really is valid, i.e. ref really is a scalar reference.
	- PApp::DataRef read in the whole table with mysql + preload=1.
	- macro/editform: no longer truncate the last two bytes of files.
	- SIGQUIT can now be used to kill a papp process and get
          a usable calltrace.
	- dependencies for stylesheets work again. dumb bug, uh.
	- ssl.papp now needs "SSLOptions +StdEnvVars +ExportCertData"
          Table ssluser changed, completely broken.
	- dbedit now forces utf8 on all fields. have fun.
        - ef_ functions now return the html instead of outputting it. use
          something like the following command to convert most uses:

          perl -pi -0777 -e 's%<:(\s*ef_)%<?$1%g' */*.papp

	- fix obscure security glitch with nosession. If your
          module was secure before it still is ;)
	- some renames in macro/ssl.papp.
	- fixed I18n's scan support :( nobody noticed :(:(:(
	- use Location ~ instead of LocationMatch since mod_perl
          forgets the "Match" after handling the first entry :(
	- diehandler no longer tocuhes non-scalar exceptions.
	- PApp::DataRef now tests autoincrement ids with !! instead of with
          defined().
        - apps are now (by default) matched with LocationMatch ^/appname(/|$)
          which gives them a more directory-like appearance.
	- exists now works on DataRef::DB_row objects, given they were created
          using "preload => 1".
	- translation domain is now inherited by subpackages, fixes the
          "embedded packages don't get translated"-bug.
	- PApp::Exception now "optimizes" some exception cases that often lead
          to perl instability problems.
	- URI 1.12 is required form now on. 1.09 cost JanMan a day debugging
          (or fucking, or...).
	- default module can be set in insert/embed, module might be empty.
        - implemented http://www.w3.org/TR/xinclude/ in form of
          PApp::XML::xml_include() that will soon be used throughout papp.
	- ported PApp/Recode.xs to DEVEL9916, hopefully older versions are
          still also supported.
	- PApp.pm: new function setlocale.
	- SURL_SET_LANG is now SURL_SET_LOCALE.
	- renamed keys: papp_charset => papp_lcs, papp_lang => papp_locale.
	- added (parts of) http://iso.plan9.de locale table to I18n/I18n.pm.
        - removed unnecessary columns from I18n/I18n.pm data section. This
          saved a lot of space and made it faster.
	- the module named "*" is called when no other module name matches
          (wildcard/default module).
	- allow ".encoding" in language id's.
	- fix generation bug, some races and unnecessary recompile problem.
	- PApp::DataRef now dumps destruction errors to stderr (but does not
          touch $@ in any way).
	- renamed PApp::DataRef parameter force_utf8 to utf8.
	- the xs part (surl & friends) did not always honour magic.
	- ef_submit did not like the value argument.
	- bugworkaround in escape_uri actually had a neccessary side-effect.
	- poedit now allows editing of the current display charset.
	- ef_checkbox now sets the ref correctly to undef or 1.
	- SURL_POP etc. now work on references again.
	- implemented ef_radio.
	- updated PApp::User for the new lazy-uid-allocation scheme.
	- renamed PApp::userid to getuid, exported PApp::User::userid.
	- PApp::Application::run did not properly call load_prefs.
	- properly downgrade to (fake) "iso-8859-1" when sending binary data.
	- some modifications to allow for lazy allocation of userid
          and sessionid, as well as hashed stateid allocation.
	- minor cleanups in PApp/HTML, implemented selectbox, documented tag.
	- fixed nosession handling (& more), removed some dead cows.
	- fixing Config.pm.PL for users who use gid 0 with papp.
	- removing prefix.psql from kis.papp.
	- <language> now deprecated.
	- renamed grp.longdesc to grp.comment.
	- implemented <nosession> element. should be rewritten using namespaces
	  and xslt ;).
	- multiline MIME headers in mutlipart/form-data are now supported,
	  although I've not yet seen a browser use it.
	- one of the countless bugs in opera actually was useful in finding
	  a bug in PApp's form-data handling.
	- marked & moved Pconv && Recode into it's own subdir.
	- fixed buggy flush logic AGAIN.
	- enhanced make test a bit. should now do basic sanity checks.
	- vastly improved PApp::Pconv (therefore renamed from iconv).
          should be outsourced.
	- allowed both #elsif and #elif.
	- documented and maybe fixed sub/ret functionality.
	- fix escape_uri description and code.
	- new functions for group management in PApp::User.
	- mime headers that contain the letter "r" are not longer ignored.
	- deuglified macro/admin/loginbox.
	- moved papp statedb management into PApp::Config.
	- papp-env can now evaluate perl expressions when setting vars.
	- renamed $sessid to sessionid, sessionid is now part of
          the surl (which is redundant and could be used for
          additional sanity-checks).
	- new module: PApp::User, use it instead of macro/admin.
	- <import> can now import perl modules (experimental feature).
	- adedd PApp::abort_with_file (and PApp::CGI::send_fd).
	- added abort_with, design inspred by oesi, implemented against
          his wishes ;)
	- added sessid to state db. The session id will be available in
          $sessid.

0.11 <no release>
	- reserved %T for transaction variables.
	- I18n no longer opens translation tables RDWR or in other
          invalid modes.
	- new configure option: errorlog.
	- totally redid the PApp::CGI interface. See eg/admin.cgi for
          changes.
        - did you know that you need to localize $@ at the right place
          when you overload exceptions? uh-hu.
	- elmex found & fixed a DoS in macro/tinychat.papp.
	- fixed papp-admin --user.
	- more ssl-stuff from oesiman.
	- added eg/ directory with example stuff.
	- finalized PApp::CGI. Works surprisingly fast. With SpeedyCGI
          it rocks.
	- tweaked error handling. perl is just too unstable.
	- i18n dpo tables are now written by papp-install.
        - the uid/gid settings now don't get lost on reconfig.
        - increased the default size of msgid/msgstr/env AND state. For
          env/msgstr etc.. it's not speed-relevant in the general case.
          for state it might be a small problem, but I just hit the page
          where 64k wasn't enough (sablotron generation time: 2min,
          netscape rendering time >>30min and then out of memory).
	- greatly enhanced and fixed macro/admin.papp.
        - added completely transparent sslauth->user mapping.
	- implemented and use macro/tinychat ;) If our oesi finds it cool
          it *must* be cool.
	- PApp::Env now uses mysql-shared-locks instead of lock tables.
	- rename SURL_FILENAME to SURL_SUFFIX; SURL_STYLE_EMPTY to
          SURL_STYLE_STATIC.
	- changed serialized modpath representation, chop off '-' signs
          at the end since we can syntehsize them if we know the length.
	- seperated PApp::SQL from the main sources, renamed ::database to
          ::Database.
	- fixed selectbox to be conform with the other functions.
        - streamlined editform.
	- fixed important security bug (testing for nonexistant access rights
          always returned true).
	- added PApp::Admin.
	- additional language translation now get auto-detected.
        - papp-install is now less disturbing.
        - lots of i18n fixes, language ids get normalized now
          (you must run i18n-normalize after upgrade!).
        - first try on an generalized top-level exception mechanism.
	- implemented surl-styles (see PApp::surlstyle, surl and the
          new surlstyle attribute for the package element).
	- --export-po and --import-po for papp-admin.
	- elaborate microsoft-can't-mime workaround for msie ;(
	- fixed a bug that kept surl from accepting references
          as destination "path".
	- work around bug in mod_perl's $r->args && $r->content. As a side
          effect, query string with ";" as separator are now supported.
        - added flush function for outputing partial
          pages. As a side effect, data is no longer being copied on output
          (unless a conversion is necssary, of course).
	- multiple field submits are now supported (see desc. of %P).
          macro/editform transparently supports this.
	- ef_button hinzugefĆ¼gt (== marco is too dumb to write english).
        - objectbox in selectbox umbenannt.
	- fixed method discard, new method dirty for PApp::DataRef.
	- added bin/papp-admin.
	- apps/admin improved.
        - app.config is now used directly in the new PApp::Application call,
          so things like database can be set via the config mechanism.
	- %state is now no longer destroyed but rather freed, so
          DESTROY will not be called for objects in %state, if they
          are saved into the satet database. This is expected, I think.
	- PApp::XSLT now supports dynamic scheme handlers.
	- moved from Compress::LZV1 to Compress::LZF, please do:
          update user set prefs=""; delete from state;
          or edit PApp.pm and replace LZF by LZV1.
	- fixed PApp::HTML::radio/checkbox.
	- fixed ef_relation to support where arguments again.
	- 5.5-ified SQL/SQL.xs.
	- argl, form-headers are now treated as bytes.
	- greatly improved (and fixed) ef_file [untested ;-].
	- charset conversion done for ef_sbegin/ef_cbegin.
        - some utf8-support for DataRef::DB_row, for dumb databases.
	- PApp::HTML::textarea now outputs additional \n before and
          after the text (for normalization).
	- macro/editform normalizes text data now (\r\n => \n!)
	- move from georgian-char-hack to corporate use zone.
	- documentation enhancements.
        - new function macro/editform/ef_field.
        - module name "." == current module in surl.
	- enhanced macro/editform to parse "normal" GET and POST requests,
          ef_hidden, better ef_submit.
        - surl now supports multiple module targets.

0.10 <Unreleased: missing license. Write to marco@toytest.com for complaints>
	- input/output charset conversion is automatically done for %P and
          all text/plain fields in macro/editform.
	- papp now stores the character set the last page was submitted in.
	- added PApp::Recode, which in turn uses PApp::Iconv (which in turn
          uses iconv*) to add character-set-conversion.
	- added macro/ssl.
        - rewrite of PApp::HTML and extended functionality for
          macro/editform, for the benefit of ecmascriptloosers.
	- modulepath from url parsing enabled again.
	- fixed import state key processing.
	- fix PApp::Apache to supprot mount_config.
	- replaced <module src> by <include src>.
	- <pxml> now supported on a basic level.
	- String::Similarity 0.02 required (who would have thought...).
	- added PApp::Lock.
	- capture {} works again, stderr is no longer redirected
	- implemeted catch/try (experimental).
	- reload_p fixed to work correctly.
	- more robust && correct sql_*-functions.
	- added PApp::Application, the base class for each
          application.
        - removed the concept of nested modules (use nested packages). NYI.
        - added PApp::Util and PApp::Parser, moving lots of
          functions from PApp::Parser there.
        - changed config&mount-mechanism substantially. mounting
          is now done dynamically.
	- improved XHTML compliance.
	- xslt stylesheets can be specified using perl expressions.
        - more utf8-fixes (translation database + poedit is now in utf8, use
          i18n-upgradeutf8 to update your translation tables).
	- mount now properly anchors the url at the serverroot.
	- reloading works again.
	- workaround a perl bug with respect to weakrefs in PApp::I18n.
	- added PApp::XSLT.
	- Storable-0.7.2 is finally sufficient for PApp without any patches.
	- first round of stylesheet support inside papp.
	- renamed pappxml: namespace to simply papp:.
        - replaced phtml2perl by a more versatile function family (PApp::PCode).
        - simplified internal rep. of PApp::Callback::Function::'s.
	- new surl modifiers: SURL_PUSH/UNSHIFT/EXEC/SAVE_PREFS.
	- PApp::DataRef now fetches and stores the value, not a reference.
        - new PApp::DataRef::Scalar.
        - new functions if macro/editform (+ better docs).
        - MAJOR REWRITE OF THE INNER ENGINE:
          - nested submodules
          - embeddable applications
	- added editable comment and type forms to apps/dbedit.
        - PApp::Exception->as_string now wraps text better.
        - %S is now available within newuser and newsession callbacks.
        - added first try at an PApp::Log module.
        - papp now caches config information (and the app itself!)
          in the database (whew, room to improvement).
        - nfreeze is used everywhere except in the state database.
        - changed internal %state format, old states are no longer
          compatible.
        - nested modules are no longer allowed (to allow for further
          enhancements!)
        - fixed PApp::weaken.
        - backtrace now contains arguments.
        - wrote, uploaded and required Convert::Scalar module.
        - improved and fixed a lot of things in PApp::Exception.
        - PApp::SQL now tries to reconnect two times.

0.08  Sun Jun 18 23:53:50 CEST 2000
	- PApp now overwrites $SIG{__DIE__}, be careful!
	- PApp::Exception has a compatibility mode now.
        - fixed the preferences system to actually make *sense*.
        - fixed memory corruption bug in SQL.xs that happens
          because mod_perl BOOT:'s the same object twice :(
        - fixed documentation of PApp::I18n, PApp::FormBuffer.
        - PApp::Env and PApp::SQL should be more resistent to restarts.
        - removed gen-db.sql.
        - added PApp::DataRef.
        - added <description> tag to papp, maybe soon followed
          by <copyright> and <version>.
        - workaround for mod_perl or perl bug that causes the 'bool'ean
          value of error messages to be shown instead of their string
          value. Funny, might be the same bug as with Storable, but
          for totally different reasons ;)
        - DataRef'ied macro/editform and the apps that were using it.
        - PApp::SQL::*fetch methods call finish on the statement handle,
          as does sql_exec in void context.
        - load_prefs allows empty prefs settings and doesn't log you
          out if the preferences field is empty.
        - fixed PApp::Callback::create_callback.
        - added experimental preferences field for acedit.
        - surl now uses "use bytes" because otherwise.. strange things happen.
        - implemented ref-to-coderef special in PApp::XML.
        - _really_ commented out #?? in PApp/Parser.
        - added more compliation facilities to PApp::XML.
        - implemented "delayed" option which is handy for debugging
          (improves server restart speed at the expense of more memory).
        - DataRef/use base: worked around an overload bug in perl.
        - now flushing translation cache on childinit.
        - apps/poedit now allows finer-grained access rights "poedit_*" = all
          apps, "poedit_<app>" = application app etc...
        - various other small enhancements to apps/poedit, and i18n in general,
          much more to come!
        - added life-saving(!!!) index on papp.msgid.id, better execute
          "alter table papp.msgid add index (id(64))" on your existing
          installation(s).
        - fixed apps/dbedit error-reporting (what was it supposed to do?).
        - improved apps/acedit to also work on groups.

0.07  Fri Jun  9 22:14:36 CEST 2000
	- fixed dumb typoe in macro/util.papp :(
        - added PApp::Env module.
        - dbedit now assumes primary keys are strings that
          do not need quoting.
        - added PApp::Callback module.

0.06  Wed Jun  7 21:52:15 CEST 2000
	- poedit now uses the statedb.
        - admin now included poedit access right by default.
        - document PApp::Config rudimentarily.
        - PApp.pm makes use of PApp::Config now.
        - PApp::Config now by default uses a 256 bit key.
        - new env table for future "papp global environment".
        - added a LONG WIZARD EXAMPLE to PApp::XML's manpage.

0.05  Sat May 27 22:25:51 CEST 2000
	- added PApp::XML. Boring, but together with XML::XSLT it rocks!
	- implemented N_($).
        - addedd attrs to papp's macro element (specify subroutine
          attributes).
        - #endif and #else now allow whitespace on the same line
        - translate styel can be specified "plain" - full text,
          "code" - scan for __ substrings or "auto" for autodetect.

0.04  Thu May 11 03:24:07 CEST 2000
	- too many things to remember.
        - a first try at an installation script and a config mechanism.
        - PApp::I18n now uses it's own format. With the
          (not-yet-implemented) pre-sorting it should require less random
          accesses then gettext. Also supports binary formats (i.e. you
          could gettextize images) and allows tagging info to be added to
          the string.

0.03  ???

0.02  ???
	- added multipart-parsing functions.
        - added %arg hash, and "one-shot arguments" (see surl).
        - modularization: many modules were split off into their
          own packages, this package was divided into many modules.
          The goal is still far away.

0.01  Thu Jan 13 06:02:04 CET 2000
	- original version; created by cp -rp