Change history for demjson python module.

Version 1.4 released 2008-12-17

 * Changed license to LGPL 3 (GNU Lesser General Public License) or
   later.  Older versions still retain their original licenses.

 * No changes other than relicensing were made.

Version 1.3 released 2008-03-19

 * Change the default value of escape_unicode to False rather than
   True.

 * Parsing JSON strings was not strict enough.  Prohibit multi-line
   string literals in strict mode.  Also prohibit control characters
   U+0000 through U+001F inside string literals unless they are
   \u-escaped.

 * When in non-strict mode where object keys may be JavaScript
   identifiers, allow those identifiers to contain '$' and '_'.  Also
   introduce a method, decode_javascript_identifier(), which converts
   a JavaScript identifier into a Python string type, or can be
   overridden by a subclass to do something different.

 * Use the Python decimal module if available for representing
   numbers that can not fit into a float without loosing precision.
   Also encode decimal numbers into JSON and use them as a source
   for NaN and Infinity values if necessary.

 * Allow Python complex types to be encoded into JSON if their
   imaginary part is zero.

 * When parsing JSON numbers try to keep whole numbers as integers
   rather than floats; e.g., '1e+3' will be 1000 rather than 1000.0.
   Also make sure that overflows and underflows (even for the larger
   Decimal type) always result in Infinity or -Infinity values.

 * Handle more Python collection types when creating JSON; such as
   deque, set, array, and defaultdict.  Also fix a bug where UserDict
   was not properly handled because of it's unusual iter() behavior.


Version 1.2 released 2007-11-08

 * Changed license to GPL 3 or later.  Older versions still retain
   their original licenses.

 * Lint Validator: Added a "jsonlint" command-line utility for
   validating JSON data files, and/or reformatting them.

 * Major performance enhancements.  The most signifant of the many
   changes was to use a new strategy during encoding to use lists and
   fast list operations rather than slow string concatenation.

 * Floating-Point Precision: Fixed a bug which could cause loss of
   precision (e.g., number of significant digits) when encoding
   floating-point numbers into their JSON representation.  Also, the
   bundled test suite now properly tests floating-point encoding
   allowing for slight rounding errors which may naturally occur on
   some platforms.

 * Very Large Hex Numbers: Fixed a bug when decoding very large
   hexadecimal integers which could result in the wrong value for
   numbers larger than 0xffffffff.  Note that the language syntax
   allows such huge numbers, and since Python supports them too this
   module will decode such numbers.  However in practice very few
   other JSON or Javascript implementations support arbitrary-size
   integers.  Also hex numbers are not valid when in strict mode.

 * According to the JSON specification a document must start with
   either an object or an array type.  When in strict mode if the
   first non-whitespace object is any other type it should be
   considered to be an invalid document.  The previous version
   erroneously decoded any JSON value (e.g., it considered the
   document "1" to be valid when it should not have done so.
   Non-strict mode still allows any type, as well as by setting
   the new behavior flag 'allow_any_type_at_start'.

 * Exception Handling: Minor improvements in exception handling by
   removing most cases where unbounded catching was performed (i.e.,
   an "except:" with no specified exception types), excluding during
   module initialization.  This will make the module more
   caller-friendly, for instance by not catching and "hiding"
   KeyboardInterrupt or other asyncrhonous exceptions.

 * Identifier Parsing: The parser allows a more expanded syntax for
   Javascript identifiers which is more compliant with the ECMAscript
   standard.  This will allow, for example, underscores and dollar
   signs to appear in identifiers.  Also, to provide further
   information to the caller, rather than converting identifiers into
   Python strings they are converted to a special string-subclass.
   Thus they will look just like strings (and pass the
   "isinstance(x,basestring)" test), but the caller can do a type test
   to see if the value originated from Javascript identifiers or string literals.
   Note this only affects the non-strict (non-JSON) mode.

 * Fixed a liberal parsing bug which would successfully decode JSON
   ["a" "b"] into Python ['a', 'b'], rather than raising a syntax
   error for the missing comma.

 * Fixed a bug in the encode_default() method which raised the
   wrong kind of error.  Thanks to Nicolas Bonardelle.

 * Added more test cases to the bundled self-test program (see
   test/test_demjson.py).  There are now over 180 individual
   test cases being checked.


Version 1.1 released 2006-11-06

 * Extensive self testing code is now included, conforming to the
   standard Python unittest framework.  See the INSTALL.txt file for
   instructions.

 * Corrected character encoding sanity check which would erroneously
   complain if the input contained a newline or tab character within
   the first two characters.

 * The decode() and encode() top-level functions now allow additional
   keyword arguments to turn specific behaviors on or off that
   previously could only be done using the JSON class directly.  The
   keyword arguments look like 'allow_comments=True'.  Read the
   function docstrings for more information on this enhancement.

 * The decoding of supplementary Unicode character escape sequences
   (such as "\ud801\udc02") was broken on some versions of Python.
   These are now decoded explicitly without relying on Python so they
   always work.

 * Some Unicode encoding and decoding with UCS-4 or UTF-32 were not
   handled correctly.

 * Encoding of pseudo-string types from the UserString module are
   now correctly encoded as if real strings.

 * Improved simulation of nan, inf, and neginf classes used if the
   Python interpreter doesn't support IEEE 754 floating point math.

 * Updated the documentation to describe why this module does not
   permit multi-line string literals.


Version 1.0 released 2006-08-10

 * Initial public release
