WDDX History 1.02 - Mon Dec 1 21:42:29 CST 2003 Taken over by Andy Lester [FIXES] WDDX needed a good update and modernization to let it run under perl 5.8.0 and higher. * Fixed up some dependencies in Makefile.PL * Cleaned up warnings on things like ambiguous calls to keys(). * Added more tests. * Removed automatic version number generation Version 1.01 (7/29/00) Bug fix. * Fixed a bug that wouldn't allow undef values in WDDX::Recordsets; should properly be encoded as a WDDX::Null now. However, this is a kludge. WDDX::Recordset should probably be rewritten to allow a field to have differing data types (WDDX::Null is the only exception currently)... but this will break compatibility. * Perl 5.60 changed how the map function works. Now scalars in numeric form are converted to string form (seems like a bug to me). This broke a few of the make tests, so these have been removed to allow WDDX.pm to build with 5.60. Version 1.00 (1/17/00) Added new methods to WDDX::Array and WDDX::Struct. * Added get(), set(), splice(), length(), push(), pop(), shift(), & unshift() to WDDX::Array. * Added get(), set(), delete(), keys(), and values() to WDDX::Struct. * Decided to up the version to 1.00. I probably should have done this earlier: 0.13 was effectively 1.00 beta 1, and 0.17 probably should have been 1.00. In any case everything seems stable now with nothing left on the to do list. Version 0.18 (1/4/00) Bug fix. * Fixed bugs in array2wddx() and hash2wddx(). (reported by Jon Sala) * Started citing bug-reporters in this file (Nate Weiss, Thomas Hall, and David MacKenzie collectively get credit for reporting much of the bugs previously fixed). Version 0.17 (11/6/99) Mainly bug fixes. * Added support as_javascript() support to binary data objects. * Added $VERSION to all modules to keep CPAN happy. * Added PREREQ_PM to Makefile.PL. * Added code to quiet warnings when using -w flag. * Fixed bug that prevented WDDX.pm from deserializing empty recordsets and this required some minor tweaking to Recordset object (shouldn't affect backwards compatibility). * Fixed bug introduced last version that caused deserialization problems when there is additional whitespace between elements. Version 0.16 (11/1/99) Minor stuff I noticed as I was buidling, but see 0.15 too since it was never released. * Fixed more POD formatting probs; I think it's presentable now. * Fixed a bug that sometimes stripped white space when parsing strings. * Created a couple test files as part of the install. * Allowed binary encoding to wrap to default MIME::Base64 width. * Created an automated build script (yeah, I know you can't see this but it makes my life easier :) Version 0.15 (10/26/99) Internal release; not distributed. * Added as_javascript() methods so you can get the JavaScript code to generate any WDDX data object (except binary objects) * Added scalar2wddx(), array2wddx(), and hash2wddx() utility methods that make it much easier to go from Perl data structures to WDDX data objects * Added $WDDX::INDENT variable (and corresponding code) to allow serialize() to generate human-readable packets * Fixed errors that appear in taint mode and discovered that XML::Parser untaints data as it parses it (!!); patched WDDX::Parser to retaint the data * Edited documentation: fixed typos and formatting problems, documented new methods, etc. * Fixed bug that disallowed the creation of empty WDDX struct objects * Fixed bug that disallowed the creation of recordsets with one field * Added get_element(), set_element() methods to WDDX::Recordset and deprecated get_field(), set_field() methods * Packaged with Makefile.PL (finally); posting to CPAN! Version 0.14 (10/21/99) Bug fixes, API changes, and POD: * Added some checks for undefined values to fix warnings when running under -w * Rewrote documentation. It's in POD now (finally)! * Prefixed internal data object serialize & deserialize subs to with an underscore make them more private * Changed all the to_something subs to as_something subs since it makes more sense with the WDDX data object as an intermediary * Fixed recordset bugs by adding more error checking for funny data * Made object type checks non-dependent on object having WDDX in its name (so the module is more easily subclassed now) * Renamed to_xml() to as_packet() Version 0.13 (10/1/99) Total rewrite: improved parsing and added full support of WDDX 1.00 DTD: * Everything. WDDX.pm is the only file that resembles its old form. I wasn't happy with the parsing code. All the logic was in a couple long, complicated subs, so it's now been broken out. Each data type now has its own corresponding parser object. It's _much_ easier to maintain now, so hopefully it won't take me so long for the next version. :) * Added code to do proper encoding of control characters, and special characters like '<', '&', etc. for strings. * Added support for the 1.00 DTD. New binary and null data types and restrictions on things like allowed characters in recordset field, names, case insensitive struct keys, etc. * Rewrote WDDX::Recordset object and added a slew of methods to for working with it. * Changed most variable object methods. Constructors are much less obfuscated. Got rid of value(). Added to_packet(), and a variety of methods to go to Perl: to_scalar(), to_arrayref(), to_hashref(), to_gmtime(), and to_localtime(). This new structure will support to_javascript() when it's added to the next version. * WDDX.pm methods to create variables changed for the complex types. array(), hash(), and recordset() now take array/hash references. recordset() takes totally different parameters which hopefully will be much easier to work with when using DBI. * Updated the README with all the new info. POD next time, I promise. :) * Moved this history info off the website and into this file. Version 0.12 (7/19/99) The module is now fully usable (albeit rough). It can go both from Perl to WDDX as well as from WDDX to Perl. Lots of changes: * Added serialization support so it's now possible to go from Perl to WDDX. * Fixed a problem due to a misunderstanding of the DTD. I originally believed that multiple variables could be contained within the root level of a WDDX packet, even outside a struct. As a result, I was requiring a tag around everything including top level data. That was incorrect. Deserialization works as documented now. * Stripped out all of the tie interface code. It didn't add a lot of value, especially given the previous change, and it added a lot of complexity to the code. * Fixed a bug that wouldn't parse dateTime packet data properly if the GMT timezone adjustment caused the date to wrap. * Fixed a bug where certain data types (e.g. booleans) weren't parsed correctly within arrays. * Added some basic Usage documentation to the README. * Changed version numbering: version numbers will always have two digits after the decimal. Version 0.3a (6/13/99) First public version. Completed parsing of all WDDX structures. Can now go fully from WDDX to Perl. Current features: * Object oriented. * Only requires XML::Parser (plus Carp, but it's now standard and XML::Parser requires it too) * Full validation of WDDX DTD syntax during parsing. * Supports multiple methods for returning parsed data structures: o may be returned via a hash o may be exported as true variables to any namespace * Supports multiple methods for representing parsed data structures: o structures can be accessed as WDDX variable objects o structures can be accessed as straight perl values o structures can be accessed via tie so that data type checking is maintained while you work with the data; this gives you the benefit of working with the data in as perlish a manner as possible while still making it simple to reserialize the data back into a WDDX packet later; ties for values nested within complex types are generated dynamically only for those variables accessed Version 0.2a (6/1/99) Split parser and variable types into separate packages. Able to parse basic (scalar) WDDX data types. Version 0.1a (5/24/99) Set up CVS tree and began writing module.