Revision history for Perl extension PPI

1.215 Sat 26 Feb 2011
	Summary:
	- No changes

	Details:
	- Confirmed new Perl::Critic works with 1.214_02, so we
	  can release a new PPI now.

1.214_02 Mon 31 Jan 2011
	Summary:
	- More minor fixes, preparing for production release

	Details:
	- Updated copyright year to 2011 (ADAMK)
	- Fixed RT #64247 bless {} probably contains a hash constructor (WYANT)
	- Backed out glob fix (WYANT)
	- Fixed RT #65199 Cast can trump braces in
	  PPI::Token::Symbol->symbol (WYANT)

1.214_01 Thu 16 Dec 2010
	Summary:
	- General fix release

	Details:
	- index_locations on an empty document no longer warns (WYANT)
	- Corrected a bug in line-spanning attribute support (WYANT)
	- Regression test for line-spanning attribute support (ADAMK)
	- Fixed #61305 return { foo => 1 } should parse curlys as hash
	  constructor, not block (WYANT)
	- Fixed #63943 map and regexp confuse PPI? (ADAMK)

1.213 Tue  6 Jul 2010
	Summary:
	- Targetted bug fix, no changes to parsing or normal usage

	Details:
	- Updated to Module::Install 1.00
	- Updated module depednencies in xt author tests
	- Fixed extremely broken PPI::Token::Pod::merge and added test case

1.212 Sun  9 May 2010
	Summary:
	- Minor bug fixes and development support

	Details:
	- Fixed #48819: Bug in ForLoop back-compatilbilty warning
	- Added support for $ENV{X_TOKENIZER} --> $PPI::Lexer::X_TOKENIZER

1.211_01 Sun 21 Feb 2010
	Summary:
	- Experimentation support and bug fixes

	Details:
	- Upgraded to Module::Install 0.93
	- Added support for $PPI::Lexer::X_TOKENIZER, so that alternate
	  experimentatal tokenizers can be swapped in for testing.
	- Added an extra 14_charsets.t case to validate we handle byte
	  order marks properly.
	- Moved author tests from t to xt to reduce spurious test failures
	  in CPAN Testers, when the testing modules change across versions
	- Fixed #26082: scalar { %x } is misparsed
	- Fixed #26591: VMS patch for PPI 1.118
	- Fixed #44862: PPI cannot parse "package Foo::100;" correctly
	- Fixed #54208: PPI::Token::Quote::Literal::literal is missing due
	  to case-sensitivity error

1.210 Mon 15 Feb 2010
	Summary:
	- Packaging fixes

	Details:
	- No functional changes
	- Upgrading to Module::Install 0.93
	- Added missing test_requires dependency for Class::Inspector

1.209 Sat  6 Feb 2010
	Summary:
	- Small optimisation release

	Details:
	- No functional changes
	- Upgrading to Module::Install 0.92
	- Moved the Test::ClassAPI test to only run during RELEASE_TESTING
	  to reduce the dependency load (and occasionally Test::ClassAPI seems
	  to FAIL on CPAN Testers.

1.208 Thu 14 Jan 2010
	Summary:
	- THIS IS THE 100TH RELEASE OF PPI!
	- Fixes some tiny issues, otherwise unchanged from 1.207_01

	Details:
	- Don't assign '' to $^W, it generates a warning on Gentoo
	- Added missing PPI::Token::Regexp fix to Changes file
	- Updating Copyright to the new year (yet again)

1.207_01 Thu 10 Dec 2009
	Summary:
	- This is a general bug fix and accuracy release

	Details:
	- Fixed #50309: literal() wrong result on "qw (a b c)"
	- PPI::Dumper no longer causes Elements to flush location data.
	  Also it no longer disables location information for non-Documents.
	- +{ package => 1 } doesn't create a PPI::Statement::Package
	- PPI::Token::Regexp and PPI::Token::QuoteLike::Regexp how have methods
	  for getting at the various components (delimiters, modifiers, match &
	  substitution strings).

1.206 Sun  9 Aug 2009
	Summary:
	- This is an optimisation release (1-2% speed up)
	  (Using information uncovered by a Devel::NYTProf 3 alpha)

	Details:
	- Removing som superfluous 1; returns
	- Using defined and ref to avoid highly excessive calls
	  to PPI::Util::TRUE

1.205 Mon  3 Aug 2009
	Summary:
	- This is a production release

	Details:
	- No changes from 1.204_07

1.204_07 Fri 31 Jul 2009
	Summary:
	- Minor tweaks

	Details:
	- Allow ::For and ::List to return true to ->isa(::ForLoop)
	  and do a once-per-process warning when we do.
	- Fixed a bug in Class::XSAccessor prototype.

1.204_06 Wed 22 Jul 2009
	Summary:
	- API Change

	Details:
	- Changing PPI::Structure::ForLoop to PPI::Structure::For

1.204_05 Tue 21 Jul 2009
	Summary:
	- Bug fixes in preparation for production release

	Details:
	- There is no longer any real reason to bundle the testing modules
	  except as a potential source of more bugs.
	- Removed quantifier ? on zero-length ^ in /^?for(?:each)?\z/
	- Run-time load PPI::Document instal of compile-time loading it
	- Tweak a few load orders to get PPI::Util loaded earlier.
	- Fixed location access methods on PPI::Element
	- New PPI::Statement::Include::version_literal() method.

1.204_04 Thu 16 Jul 2009
	Summary:
	- Dependency tweaks

	Details:
	- Because we bundle Test::ClassAPI, we need to explicitly match its
	  dependencies. Bumped Params::Util to 1.00.
	- Bumped a couple of deps a couple of revisions to get better XS.

1.204_03 Tue 14 Jul 2009
	Summary:
	- More bug fixing, clean up, and optimisation
	- Cleaning up contributed APIs
	- Adding some demonstration classes

	Details:
	- Implemented PPI::Transform::UpdateCopyright
	- Removed the use of 'use base'
	- Various minor simplifications
	- Renamed PPI::Statement::Switch to ::Given
	- Renamed PPI::Structure::WhenMatch to ::When
	- Converted the Lexer internals to use exception-based error
	  handling.
	- Take advantage of the removal of all those "or return undef"
	  to simplify the Lexer code, remove variable declarations, and
	  inline calls to several hot-code-path functions. The Lexer
	  should be significantly faster (FSDO "significant").
	- The v6 key on Tokenizer broke support for Perl 5.6
	  (perl thought it was a numeric v-string)

1.204_02 Sun 10 May 2009
	Summary:
	- Various bug fixing and stabilisation work
	- It's a perl 5.10 extravaganza!

	Details:
	- Updated Module::Install to 0.87
	- Added Test::NoWarnings to the test suite
	- Added support for qw{foo} in addition to for ('foo')
	- Added support for vstrings again
	- Now supports the 5.10 "state" keyword.
	  (As far as PPI is concerned it's a synonym for "my")
	- Now supports switch statements.
	- Now supports the smart match operator (~~).
	- Now supports keeping track of line numbers and file names as
	  affected by the #line directive.
	- Now supports UNITCHECK blocks.
	- Statement::Include::module_version() implemented.
	- Statement::Include::arguments() implemented.
	- Statement::Variable::symbols() implemented.
	- Token::QuoteLike::Words::literal() implemented.
	- Token::Quote::Double::simplify() fixed.
	- Element line_number(), column_number(), visual_column_number(),
	  logical_line_number(), and logical_filename() implemented.
	- Support for Unicode byte order marks (PPI::Token::BOM) added.
	- Token::Word::method_call() implemented.
	- Element::descendant_of() and Element::ancestor_of() implemented.
	- Statement::specialized() implemented.
	- Now can handle files named "0".
	  (Perl::Critic got a complaint about this)
	- foreach loop variables can be declared using "our".
	- Much more comprehensive testing of compound statement detection.

1.204_01 Sun 18 May 2008
        Summary:
        - Unicode cleanup and bug fixing
	- Taking the opportunity to do some house cleaning while the
	  code base is relatively stable, before things get crazy again.

	Details:
        - For completeness sake, add support for empty documents
        - Moved capability detection into PPI::Util
	- POD test script now skips on install properly
	- Removed 200 lines of old dead "rawinput" code from PPI::Tokenizer
	- 100% of PPI::Tokenizer is now exception-driven
	- Workaround for "RT#35917 - charsets.t eats all available VM"
	  (unicode bug in 5.8.6, works in 5.8.8)
	- Temporarily disable round-trip testing of 14_charset.t


1.203    Wed 14 May 2008
	Summary:
	- No change, switching to production version

1.202_03 Wed 14 May 2008
	Summary:
	- Initial Perl 6 support
	- Bug fixes and final 1.203 release candidate
	- I finally catch up with all the failing test cases
	  that Chris Dolan keeps commiting :)

	Details:
	- Adding initial support for "use v6-alpha;"
	- Adding new class Perl::Statement::Include::Perl6
	- Adding a test on the KindaPerl6::Grammar,
	  which triggered a bug in the tokenizer during
	  CPAN::Metrics tinderboxing.
	- All open() calls now use three-argument form
	- Upgrading explicit Perl dependency to 5.006,
	  because of the previous item.
	- Better support for labels, including tricky ones like "BEGIN : { ... }"

1.202_02 Wed  2 Jan 2008
	Summary:
	- Back-compatibility and 1.203 release candidate

	Details:
	- Removing the use of use base 'Exporter';
	- Updating Test::SubCalls dep to 1.07 to get
	  the use base 'Exporter' fix for that too.

1.202_01 Tue 20 Nov 2007
	Summary:
	- Minor bug fix release

	Details:
	- RT #30469: calling length() on PPI::Token gives error
	- 14_charsets.t was incorrectly skipping in situations
	  that it should have been running.

1.201    Mon 22 Oct 2007
	Summary:
	- Minor bug fix release

	Details:
	- The internal exception class PPI::Exception::ParserTimeout was
	  inheriting from itself.

1.200    Mon 15 Oct 2007
	Summary:
	- Production Release

	Details:
	- Zero changes from 1.199_07
	- Updated version from 1.199_07 to 1.200

1.199_07 Fri 12 Oct 2007
	Summary:
	- This is the third release candidate for 1.200
	- Minor tweak

	Details:
	- Changed the way to detect Perl 5.6 to ignore the 1_0e1_0 failure

1.199_06 Wed 10 Oct 2007
	Summary:
	- This is the second release candidate for 1.200
	- Some small bug fixes

	Details:
	- Remove -w from test scripts to allow taint'enabled testing
	- Skip the failing 1_0e1_0 test on Perl 5.6.2

1.199_05 Tue  9 Oct 2007
	Summary:
	- This is the first release candidate for 1.200
	- Fix some parser corner cases

	Details:
	- Fixed parsing of %!, $^\w, and %^H
	- Fixed parsing of @{$foo}-1
	- Fixed parsing of <$fh1>, <$fh2>

1.199_04 
	Summary:
	- Build tweaks
	- More regression changes

	Details:
	- Increasing List::Util dependency to 1.19
	  (Removes a memory leak on Win32)

1.199_03 Thu 12 Jul 2007
	Summary:
	- Support for a few more rare/legacy Perl syntax
	- Tokenizer simplification, optimization and exception'ification

	Details:
	- Added support for the <<\EOF heredoc style
	- Always create ->{type} in full-quote sections
	- Converted more of the Tokenizer to use exceptions
	- Optimized away a bunch of now-unneeded "or return undef"
	- Optimized _set_token_class down to a single statement
	- Inlined _set_token_class out of existance
	- Cache and fast-clone PPI::Token::Whitespace->null
	- Removed some superfluous parameter checks on private methods,
	  for conditions that would cause explosions and be noticed anyway.
	- Removed the fancy options from PPI::Token::new
        - More consistent structure of incomplete quotes

1.199_02 Mon  5 Mar 2007
	Summary:
	- Added parser timeout support
	- Fixing various regression cases
	- Adding some housekeeping tweaks

	Details:
	- Created PPI::Exception with an eye to moving towards
	  using exceptions more for error handling (for speed).
	  The goal is to get rid of the "or return undef"s.
	- Added the timeout param to the PPI::Document constructor
	  which uses alarm to implement basic timeout support.
          This should help when parsing a large corpus on Unix.
	  (Not available on Win32)
	- Fixed incorrect location() for PPI::Structure instances.
	- Adding better parsing of hash constructors.
	- Pushing Clone dependency to 0.22 to get closer to taint support)
	- Pushing deps on bundled test modules to prevent accidentally
	  bundling old versions.

1.199_01 Tue 31 Oct 2006
	Summary:
	- Improved lexing correctness
	- Partial implementation of literal
	- Initial implementation of Number classes (Chris Dolan)

	Details:
	- Split out PPI::Token::Number subclasses
	- Implement numbers with exponential notation
        - Implement literal() for ::Number classes (except ::Version)
	- Implement literal() for ::Token::Quote::Single
	- Added -T for inline tests
	- Add tests for nested statements and nested structures
	- Fixed some bugs as a result
	- Improved detection of the correct curly brace structure types

1.118   Fri 22 Sep 2006
	Summary:
	- Better 5.10 support
	- Fixing various (mostly parsing) bugs

	Details:
	- Upgraded to Module::Install 0.64
	- Improving support for dor and added //= operators
        - Fixed parsing of binary, octal and hex numbers
        - Fixed parsing of /= and *=
	- Fixed #21571 symbol() returns just sigil with adjacent braces
	- Fixed #21575 variables() chokes on list with whitespace
	- Fixed #20480 (Misparse of some floating-point numbers.)
	- Fixed #19999: Make test fails (undeclared global variable $document) under Perl 5.6.2
	  (or at least, I think I have. This needs double-checking on Perl 5.6.2)
	- Partially Fixed #16952: [PATCH] Speed up tokenizer char-by-char
	  (Did not apply the patch, but fixed a bug noted as an aside in the report)
	- PPI::Document::File was returning a plain PPI::Document object, fixed.
	- FINALLY added some basic POD for PPI::Structure, the one class I somehow
	  keep forgetting to do.

1.117   Sat 02 Sep 2006
	Summary:
	- Fixing bugs introduced in 1.116

	Details:
	- Simple compound statements "{ 1 }" were not end-detecting properly
	- The new handling for the "-" character was shortcutting naively
	- Labelled compound statements were not end-detecting properly
	- { package => 1 } was treating package incorrectly
	- Fixed bugs in test cases submitted by the Perl::Critic team
	- Added a number of extra test cases, and introduced Test::Object
          based testing for PPI::Document objects.

1.116   Thu 31 Aug 2006
	Summary:
        - PPI::Document::File first release
	- Adding readonly attribute
	- Fixed various accumulated bugs

	Details:
	- Upgraded to Module::Install 0.63
        - Add a new file-only subclass of PPI::Document
	- Added the readonly attribute to the PPI::Document->new constructor
	- Added method PPI::Document->readonly method
        - 'goto' is a PPI::Statement::Break
	- Re-fixed #19629: End of list mistakenly seen as end of statement
	- Applied #16892: [PATCH] docs and comments
	- Fixed #16815 (location of Structure::List is not defined.)
	- Fixed misparsing of C< 1-1 >
	- Fixed #18413: PPI::Node prune() implementation broken
	- Fixed #20428 (minor doc bug in PPI::Token::Symbol)
	- Resolved NOTABUG #20031 (PPI installation)
	- Resolved NOTABUG #20038 (PPI installation)
	- Fixed #19883: 'package' bareword used as hash key is detected as package statement
	- Fixed #19629: End of list mistakenly seen as end of statement
	- Fixed #15043: (no description)  # He wanted PPI::Document::File

1.115   Sat 03 Jun 2006
	Summary:
	- Fixing rt.cpan.org bugs

	Details:
	- Fixed #19614: Suspicious code in PPI::Structure
	- Fixed #16831: until () { } not parsed as compound statement
	- NOTABUG #16834: "$a = 1 if ($a == 2)" vs "$a = 1 if $a == 2"
	- Fixed #19629: End of list mistakenly seen as end of statement
	- Fixed #18413: PPI::Node prune() implementation broken

1.114   Thu 25 May 2006
	Summary:
	- This release addresses only dependency issues

	Details:
	- Changed over from IO::Scalar to IO::String
	- Added a dependency on Task::Weaken so that we can make
	  various not-so-clueful downstream packagers play nicely.

1.113   Wed 10 May 2006
	Summary:
	- This release contains only build-time changes

	Details:
	- Upgraded to Module::Install 0.62
	- No features() used in this dist, so removing auto_install

1.112   Mon 24 Apr 2006
	Summary:
	- Emergency release to fix a bug that prevents install on perl > 5.8.4

	Details:
	- Small typo in the unicode-specific section of 14_charsets.t
	  prevents tests passing for anyone with a unicode-sane Perl version.
	- Added a test for strange locales that can't handle unicode,
	  and skip the unicode tests.

1.111   Sat 22 Apr 2006
	General
	- Moved from SourceForge CVS to new collaborative SVN repository
	- Fixed regressions other people had added since 1.110
	- Upgraded to Module::Install 0.62

	Details:
	- SourceForge was too hard to get into, so moved to specially designed
	  new SVN repository to make it easy for others to help out.
	- Moved t.data to t/data in line with current style and to reduce complexity.
	- Fixed t/data/08_regression/11_multiply_vs_glob_cast (added by unknown)
	- Fixed t/data/08_regression/12_pow (added by unknown)
	- Removed every use of UNIVERSAL::isa in the tests
	- Upgraded to Module::Install 0.62 (my private prerelease)

1.110   Fri Jan 27 2005
	General
	- Added test support for the third location component (Arjen Laarhoven)
	- Various bug fixes
	  (Releasing early with only small changes at the request of Perl::Critic)

	Details:
	- Fixed CPAN #16924: PPI::Statement::Sub.pm fix to use Params::Util line to resolve _INSTANCE error
	- Fixed CPAN #16837: typo in PPI::Statement::Expression POD
	- Fixed CPAN #16973: PPI 1.109 shouldn't require List::Util 1.18
	  (We do need 1.18 to avoid a leak, but it doesn't work everywhere)
	- Fixed CPAN #16814: _INSTANCE method not defined in PPI::Statement::Sub (dupe)
	- Arjen Laarhoven added to CVS committers
	- Added a third element to ->location return arrayref that contains the visual
	  starting column of the token, taking into account tabbing.

1.109   Fri Dec 30 2005
	Summary:
	- Various bug fixes
	- Minor structural cleanup

	Details:
	- Removed every single use of UNIVERSAL::isa
	- PPI::Normal was quite broken, cleaned it up
	- Fixed PPI::Normal::Standard::remove_statement_seperator
	- Fixed CPAN #16674 PPI::Token::Quote::Double->interpolations
	  (awigley)
	- Fixed CPAN #15131 PPI::Node->find() behavior not completely
	  documented (Jeffrey Thalhammer)
	- Fixed CPAN 13743 PPI::Statement::Scheduled api (johanl)
	- PPI::Statement::Scheduled is now a subclass of PPI::Statement::Sub
	- Removed breaking circular include in PPI::Util
	- Removed an 'our' variable in t/04_element.t that created a 5.6.0 dependency
	- Only do the PPI::Cache tests that use Test::SubCalls if >= 5.006
	- (Except for File::Remove, we should ACTUALLY depend on 5.005 now)
	- Fixed CPAN #16671 $_ is not localized (JPIERCE)
	  (I missed an unlocaled $_ hiding in the Node object destructor)

1.108   Thu Dec 15 2005
	Summary:
	- Fixing of some very minor bugs

	Details:
	- 8 wasn't an illegal character in an octal number (fixed)
	- Two <<heredocs with no content on the final line didn't round-trip (fixed)

1.107   Wed Dec 14 2005
	Summary:
	- PPI is now Editor-compatible.
	- You can create a PPI::Document from random ASCII line noise!

	Details:
	- Added a dozen various patches to complete round-trip Tokenizer
	  and Lexer support for absolutely anything (i.e. line noise)
	  inside the normal set of ASCII characters used in Perl programs.
	- Does not include Latin-1 and Unicode line noise (yet).
	- Completely the 21_exhaustive.t test script.
	- Tested 21_exhaustive.t against 500,000 x 120-character
	  completely random line noise Perl programs.
	  (Apparently I'm still leaking 1k per document somewhere)

1.106   Sun Dec 11 2005
	Summary:
	- More changes to support all possible 4-character programs

	Details:
	- Various fixes to weird things like *::'

1.105   Sat Dec 10 2005
	Summary:
	- Improvements driven by Audrey Tang's pugs wishlist.
	  (So pugs can parse Perl 5, eep)
	- Latin-1/Unicode improvements (but now requires perl >= 5.8.5)
	  (not pre-checked and enforced yet, but will be)
	- Starting new generation of "exhaustive" testing

	Details:
	- Added 20_tokenizer_regressions, which tests all
	  detectably-failing 3-or-less character long Perl programs
	  (not inclusive of latin-1 or Unicode). (Audrey Tang)
	- Fixed bug for incomplete <READLINE> quotes at EOF
	  (there may be a few more similar cases)
	- Fixed bug with $'0 (where 0 is only legal after ::)
	- No longer die for illegal chars in hex/bin number types
	  (Attach the error to $token->{_warning} instead)
	- Caught a number of cases with trailing colons for $things
	  (Both at EOF and end of token)
	- Convert [^\W\d]\w* to (?!\d)\w+ to improve unicode support
	  in symbols etc (Audrey Tang)
	- Miscellaneous doc bugs in the SYNOPSIS (Audrey Tang)

1.104    Thu Nov 10 2005
	General
	- No change to code
	- Both List::Util and List::MoreUtil contain memory leaks,
	  and we use them extensively. Pushed the dependencies up
	  to versions with the memory leaks fixed.

1.103    Thu Oct  6 2005
	General
	- Small bug fix that shouldn't have escaped

	Details:
	- Changed md5hex_file to act more like the PPI::Documeny way.
	  That is, localise and THEN convert to \015

1.102    Wed Oct  5 2005
	General
	- Small things to support Perl::Metrics

	Details:
	- Added undocumented PPI::Util::md5hex_file function

1.101    Thu Sep 29 2005
	General
	- Bug fix release

	Details:
	- Fixed CPAN bug #14436 and #14440, misparse for my ($foo) ...
	- Added an self-analysis test script for PPI-testable problems
	- Fixed some minor bugs it threw up.

1.100_03
	General
	- Major bug fixing
	- Some additions to help simplify Perl::Metrics

	Details:
	- A whole bunch (practically all) of the sibling code was breaking
	  under non-trivial use. Fixed, with a number of new tests added.
	- Added function PPI::Util::md5hex
	- Added method PPI::Document::hex_id

1.100_02
	General
	- Various bug fixes
	- Completed the first version of PPI::Cache

	Details:
	- Expanded round-trip testing coverage to all the lexer and
	  regression test files
	- 06_round_trip.t wasn't doing the round-trip test properly.
	  Fortunately, this only resulted in false failures, so no
	  actual damage was done as a result of this.

1.100_01 Sat Sep 03 2005
	Summary:
	- Added integrated cache support

	Details:
	- Added PPI::Cache class
	- Removed warning in 99_pod.t
	- Added a common PPI::Util::_slurp function
	- PPI::Document can be given a cache to use

1.003 Tue Aug 18 2005
	Summary:
	- Bug fix release

	Details:
	- Add support for 'for $foo () {}'
	- Add support for 'for my $foo () {}'
	- Fixed bug where "'Hello..." crashed the Tokenizer
	- Fixed bug where '"Hello...' crashed the Tokenizer
	- Fixed bug where 's' crashed the Tokenizer

1.002 Thu Jul 14 2005
	Summary:
	- Bug fix release

	Details:
	- Fixed CPAN #13655 - insert_before and insert_after broken.

1.001 Tue Jul 12 2005
	Summary:
	- Turning on Test::Inline scripts

	Details:
	- Bug fix: ->string returns wrong for qq <foo> and all braced quotes
	- Added Test::Inline 2.100-type inline2test.conf and inline2test.tpl files
	- Added t/ppi_token__quoteengine_full.t
	- Added t/ppi_token_quote_single.t
	- Added t/ppi_token_quote_double.t
	- Added t/ppi_token_quote_literal.t
	- Added t/ppi_token_quote_interpolate.t

1.000 Sat Jul  9 2005
	Summary:
	- FIRST PRODUCTION RELEASE
	- Finalising POD, corrected the Copyright dates
	- Rewrote much of the main PPI.pm docs
	- Removing more unneeded dependencies
	- Added native Storable support

	Details:
	- Removed dependency on Class::Inspector
	- Added build dependency on Class::Inspector and include() it
	  (although it's still needed at build time, this still does manage to
	  reduce the number of files to download by one more)
	- Added PPI::Document::STORABLE_freeze and PPI::Document::STORABLE_thaw

0.996 Fri Jul  8 2005
	Summary:
	- RELEASE CANDIDATE 2
	- Clearing all remaining RT bugs
	- Removing and inlining dependencies

	Details:
	- Resolved PDOM bug CPAN #13454 ( while ( $s = $s->sprevious_sibling ) infinite loops )
	  Mental Note: Doing an auto-decrement in an array subscript is BAD
	- Resolved Lexer bug CPAN #13425 ( $p{package} creates a PPI::Statement::Package )
	  Added smarts to resolve word-started statements as ::Expression in subscripts
	- Resolved PDOM bug CPAN #13326 ( problems in index_locations )
	  Patch and comprehensive additional tests provided by johanl[ÄT]DarSerMan.com
	- Removed dependency on Class::Autouse. Just load Tokenizer and Lexer up front.
	- Removed dependency on File::Slurp. Only use it 3 times and it's not worth it
	  when almost all the files we will read are under 50k.

0.995 Sun Jul  3 2005
	Summary:
	- RELEASE CANDIDATE 1
	- Added some internals to help with XML compatibility
	- Completed primary POD docs
	- Completed first versions of insert_before and insert_after
	- Removed last uses of _isa
	- Added final missing POD docs

	Details:
	- Added convenience method PPI::Element::class
	- Added docs for all PPI::Structure classes
	- Added additional tests to check for ::Unknown classes
	- Added PPI::Document::insert_before to return an error
	- Added PPI::Document::insert_after to return an error
	- Added PPI::Document::replace to return an error
	- Removed a number of unneeded UNIVERSAL::isa imports
	- Removed PPI::Token::_isa before anyone starts using it.
	  It was hacky and unsuitable to a production release

0.994 skipped

0.993 Tue Jun 21 2005
	Summary:
	- Various minor code, packaging and POD cleanups

	Details:
	- Corrected a POD bug in PPI::Dumper
	- Upgraded PPI::Dumper param checking to Params::Util
	- Restored PPI::Element->clone to using Clone::clone ( 0.17+ )
	- Removed dependency on Storable
	- Until it fixes the problem, explicitly include ExtUtils::AutoInstall

0.992 Sun Jun 12 2005
	Summary:
	- Added the PPI::Transform API

0.991 Fri Jun 10 2005
	- Typo. I wasn't dieing on newlines to PPI::Document->new( string )
	  correctly, and thus dieing without the API CHANGE message.
	  This was confusing people as to why.

0.990 Wed Jun  8 2005
	Summary:
	- Last version (hopefully) to make API changes
	- Slight API shuffle in the constructors
	- Completed all PPI::Statement::* API documentation
	- Enabled latin-1 support in the appropriate places

0.906 Thu Apr 28 2005
	Summary:
	- Completed location support and added related unit tests
	- Added API for future support of tab widths

	Details:
	- Removed PPI::Element::_line
	- Removed PPI::Element::_col
	- Fixed bugs in PPI::Document::index_location
	- Fixed bugs in PPI::Element::location
	- Added 12_location.t unit test
	- Added PPI::Document::tab_width method
	- Added PPI::Normal::Standard::remove_useless_attributes
	  (to remove the ->{tab_width} attributes and later other things)

0.905 Wed Apr 20 2005
	Summary:
	- Completely forgot to write unit tests for PPI::Util,
	  and a bug slipped in. Fixed and added tests

	Details:
	- Fixed bug in PPI::Util::_Document
	- Added 11_util.t

0.904 Wed Apr 20 2005
	Summary:
	- Improvements to PPI::Normal
	- Method renaming to parse-time PDOM private methods
	- Various bug fixes and POD tweaks
	- Added PPI::Util

	Details:
	- Partly added Layer 2 to PPI::Normal
	- Added function PPI::Normal::Standard::remove_useless_pragma
	- Added function PPI::Normal::Standard::remove_statement_seperator
	- Added function PPI::Normal::Standard::remove_useless_return
	- Renamed _on_line_start to __TOKENIZER__on_line_start
	- Renamed _on_line_end to __TOKENIZER__on_line_end
	- Renamed _on_char to __TOKENIZER__on_char
	- Renamed _scan_for_end to __TOKENIZER__scan_for_end
	- Renamed _commit to __TOKENIZER__commit
	- Renamed _is_an_attribute to __TOKENIZER__is_an_attribute
	- Renamed _literal to __TOKENIZER__literal
	- Renamed _opposite to __LEXER__opposite
	- Fixed bug in PPI::Statement::Package::namespace
	- Added unit tests for PPI::Statement::Package
	- Added (currently mostly internal) PPI::Util
	- Added exportable function PPI::Util::_Document

0.903 Fri Mar 25 2005
	Summary:
	- PPI::Document and other PPI::Node-subclasses will now implicitly
	  DESTROY correctly.
	- Now that PPI.pm is just a module loader, merge the main
	  documentation from PPI::Manual back into it again.

	Details:
	- Added use of Scalar::Util::weaken for all %_PARENT writes
	- Uncovered critical bug in Clone, so we use Storable::dclone
	  for now, until Clone is fixed.
	  This resolves rt.cpan.org #11552
	- Added dependency on Storable 1.13
	- Moved all PPI::Manual content to PPI and relinked
	  This resolves rt.cpan.org #11803
	- Removed lib/PPI/Manual.pod
	- Added the standard 99_pod.t to check POD
	- Fixed a POD bug in Element.pm

0.902 Sun Feb  6 2005
	Summary:
	- Added Document Normalization functions from old Perl::Compare
	  (although it is very very limited in function at this point)

	Details:
	- Added class PPI::Normal
	- Added class PPI::Normal::Standard
	- Added class PPI::Document::Normalized
	- Added method PPI::Document->normalize
	- Bug: ->clone was going to all the trouble to build a clone,
	       but then returning the original :( Fixed

0.901 Sat Jan 29 2005
	Summary:
	- Moved all up-to-date code over to SourceForge
	- Various fixes to allow the release of File::Find::Rule::PPI

	Details:
	- Got all modules synchronising their versions correctly
	- Moved to SourceForge CVS repository
	- Changed all files over to the new CVS directory layout
	- Fixed bug in PPI::Node::find_first
	- Added unit tests for PPI::Node::find_first
	- Added unit tests for PPI::Node::find_any
	- Added a stub and docs for PPI::Statement::stable

0.900 Mon Jan 17 2005
	Summary:
	- Final removal of PPI::Base
	- Completed majority of crash bugs in the Tokenizer

	Details:
	- Fixed Tokenizer Bug C< @foo = <<EOF; > seen as ::Readline
	- Fixed Tokenizer Bug C< (<<EOF) > seen as ::Readline
	- Fixed Tokenizer Bug C< q'foo bar' > parsed incorrectly
	- Fixed bug in PPI::Token::_QuoteEngine::_scan_quote_like_operator_gap
	- Fixed Tokenizer Bug C< $foo:'<undef>' > sees symbol $foo:'
	- Fixed Tokenizer Bug C< $#arrayindex > was seen as a Symbol
	- Fixed Tokenizer Bug C< %2 > was seen as a Symbol
	- Fixed Tokenizer Bug C< &64 > was seen as a Symbol
	- Fixed Tokenizer Bug C< $::| > is actually a Magic
	- Fixed Tokenizer Bug C< @0 > is a Magic
	- Deleted PPI::Base
	- Added $PPI::Element::errstr
	- Added basic private error methods to PPI::Element
	- PPI::Element::significant now returns '' as false
	- PPI::XS - Added all C<significant> methods

0.846 Mon Jan 17 2005
	Summary:
	- Added proper support for <FILE>
	- Last release before beta 1 if all looks good

	Details:
	- Added class PPI::Token::QuoteLike::Readline
	- Added t.data/05_lexer_practical/10_readline.code/dump
	- Added support for <>
	- A few other minor bug fixes

0.845 Sat Jan 15 2005
	Summary:
	- Adding integration with PPI::XS, autoloading if installed

	Details:
	- Added $PPI::XS_COMPATIBLE and $PPI::XS_EXCLUDE variables to guide integration
	- Don't autoload PPI::Document, always load
	- Load in PPI::XS whenever it is installed
	- Loading and depending on Class::Inspector
	- PPI::Element::significant implemented in XS (as a trial)

0.844 Fri Jan 14 2005
	Summary:
	- Found a massive performance bug when parsing large perl constructs
	- Fixed some install problems

	Details:
	- PPI::Node::schild was copying the entire of it's child array each call.
	  This was causing massive slowdowns when ->{children} got large. Fixed.
	- The core tests still expect Transform to be in the core. Fixed.

0.843 Tue Jan 12 2005
	Summary:
	- Starting the process of removing PPI::Base.
	  It only does does error handling now, which will be split up.
	- Fixing some packaging and "play well with others" issues

	Details:
	- Randal Schwartz pointed out t/06... wouldn't working for him.
	  It appears when Test::More bug CPAN #8385 was fixed, we broke.
	- We now include build-time-only dependencies in the installer
	- Although unusable, PPI::Document::Normalized's version fell out
	  of sync with the rest of the distribution. Fixed.
	- PPI::Tokenizer no longer inherits from PPI::Base
	- Added class variable $PPI::Tokenizer::errstr
	- Added class method PPI::Tokenizer->errstr
	- Fixed Tokenizer Bug: C< y => 1 > was being seen as a regex
	- Fixed Tokenizer Bug: C< <<''; > was dying because I expected at
	  least one character
	- Fixed Tokenizer Bug: C< $foo->{s} > was being seen as a regex

0.842 Tue Jan 11 2005
	Summary:
	- Lots of debugging based on Tinderbox results

	Details:
	- Fixed MANIFEST.SKIP to removed PPI::Transform and PPI::Tinderbox
	  from the core PPI distribution (like they should be)
	- Optimised the previous #9582 to not have to run for EVERY word,
	  only those where it might be needed.
	- Corrected a use of QuoteLike::Execute to QuoteLike::Backtick
	- Fixed CPAN #9598 Tokenizer Bug: C< qx( $command ) >
	- Fixed CPAN #9614 Tokenizer Bug: C< $foo << 16 >
	- Set the properly includive regex for << '...' here-doc
	- Added an very early filter to prevent non-basic chars going in

0.841 Mon Jan 10 2005
	Summary:
	- Completed much more documentation on the core classes
	- PPI::Tester back in sync again (seperate distribution)
	- PPI::Processor and PPI::Tinderbox completed (seperate distribution)

	Details:
	- Documented PPI::Tokenizer
	- PPI::Document->new( $source ) added as a convenience
	- PPI::Lexer::lex_file can now be called statically
	- PPI::Lexer::lex_source can now be called statically
	- PPI::Lexer::lex_tokenizer can now be called statically
	- Fixed a small bug in PPI::Dumper::print
	- Fixed CPAN #9582 Tokenizer Bug: C< sub y { } # Comment >
	- Fixed similar case with C< foo->y() >

0.840 Thu Dec 21 2004
	Summary:
	- Changed the PPI summary to no longer use the devisive word "parse"
	  Now: "PPI - Analyze and manipulate Perl code without using perl itself"
	- Total rewrite of all the ->location code
	- Upgrading MakeFile.PL to Module::Install
	- Fixed #CPAN 8752 (a round-trip edge case bug)
	- Added 08_regression.t to do code/dump regression testing for lexer bugs
	- Completed (hopefully) HereDocs conversion to a single complex token
	- PPI is now compatible with prefork.pm (although not dependant)

	Details:
	- Added PPI::Node::find_first object method
	- Changed PPI::Node::find_any to just call PPI::Node::find_first
	- Added PPI::Element::first_token object method
	- Added PPI::Element::last_token object method
	- Made a partial-removal-capable PPI::Element::_flush_locations
	- PPI::Document::flush_locations uses PPI::Element::_flush_locations
	- PPI::Document::index_locations is here-doc sane
	- Added PPI::Token::HereDoc::heredoc object method
	- Added PPI::Token::HereDoc::terminator object method
	- Documented PPI::Token::HereDoc
	- Added a HereDoc code/dump test to 05_lexer_practical.t
	- Added PPI::Document::serialize, which replaces the use of
	  ->content for generating the actual string to write out to
	  files when saving Documents.
	- File::Spec reduced from dependency to build dependency
	- Updated Test::ClassAPI dependency to newest version
	- Enabled API collision detection in 02_api.t
	- Updated Class::Autouse dependency to newest version

0.840_01 Tue Dec 21 2004
	Summary:
	- Perl Foundation Funding Commences
	- Changes separated into General and Details from here on
	- Complete re-organisation of the quote-like token classes.
	  Any and all code that works with quotes will be broken.
	- Gave up on the old PPI::Query code and wrote a complete new and
	  much thinner implementation based roughly on the API of
	  File::Find::Rule.
	  PPI::Find uses the &wanted function (which also has a slightly
	  different API to the old one) but has the ->in style search methods.
	  It should be relatively easy for someone to write PPI::Find::Rule
	  on top of it.
	- PPI::Transform is thus temporarily stale

	Details:
	- Introduced a bug for C< foreach $foo () > and caught/fixed it
	  during the changeover.
	- Changed PPI::Lexer::Dump to PPI::Dumper
	- API Freeze PPI::Find
	- API Freeze PPI::Dumper
	- Documented PPI::Find
	- Documented PPI::Dumper

0.831 Fri Nov  5 2004
	- Overloaded PPI::Document bool => true
	- Overloaded PPI::Document ""   => content
	  (That is, ::Documents stringify to their content)
	- Fixed PPI::Document::save
	- Merged Leon Brocard's docs patch
	- Cleaned up PPI::Node::_condition and documented conditions better (fixed #7799)
	- Allow dropping of the initial PPI:: in class search conditions
	- Fixed two instances of File::Slurp::read_file being called as a method

0.830 Mon Sep 27 2004
	- Added PPI::Statement::Package::file_scoped object method
	- Handle potentially dangerous C< sub foo ($$ > safer
	- Resolve C< sub BEGIN { } > to PPI::Statement::Scheduled correctly
	- Resolve C< sub () { 1 }; > to PPI::Statement correctly
	- API Freeze PPI::Statement::Package
	- API Freeze PPI::Statement::Scheduled
	- API Freeze PPI::Statement::Sub
	- Documented PPI::Statement
	- Documented PPI::Statement::Package
	- Documented PPI::Statement::Scheduled
	- Documented PPI::Statement::Sub
	- Documented PPI::Document::Fragment

0.829 Sat Sep 25 2004
	- BREAKS API COMPATIBILITY
	- Changed PPI::Token::SubPrototype to PPI::Token::Prototype
	- Added PPI::Token::Prototype::prototype object method
	- Added PPI::Statement::Sub::prototype object method
	- Added PPI::Statement::Sub::block object method
	- Fixed PPI::Statement::Include::version

0.828 Sun Aug  8 2004
	- BREAKS API COMPATIBILITY
	- Changed PPI::Token::DashedBareword to PPI::Token::Quote::Dashed
	- Changed PPI::Token::Bareword to PPI::Token::Word
	- Vastly improved PPI::Manual

0.827 Thu Aug  5 2004
	- Added PPI::Token::Seperator class ( for __DATA__ and __END__ )
	- Added better Tokenizer handling of __DATA__ and __END__
	- Added better Lexer handling of __DATA__ and __END__
	- Fixed some version inconsistencies

0.826 Sat Jul 31 2004
	- Added PPI::Element::statement object method
	- Added PPI::Transform abstract class
	- Sped up the 'bool' overload for PPI::Element
	- Added PPI::Element::snext_sibling object method
	- Added PPI::Element::sprevious_sibling object method
	- Added PPI::Element::insert_before object method placeholder
	- Added PPI::Element::insert_after object method placeholder
	- Changed {elements} to {children} to match PPI::Node definitions
	- Added PPI::Node::first_element object method
	- Added PPI::Node::last_element object method
	- Added PPI::Element::next_token object method
	- Added PPI::Element::previous_token object method
	- Added PPI::Token::Symbol::symbol object method

0.825 Mon Jul 26 2004
	- Added PPI::Statement::Include::type object method
	- Added PPI::Statement::Include::module object method
	- Added PPI::Statement::Include::pragma object method
	- Added PPI::Statement::Include::version object method
	- Overloaded == as "the same object" for PPI::Element
	- Overloaded eq as "->content is the same" for PPI::Element
	- Overloaded bool as always true, to prevent an error
	- Added PPI::Statement::Package::namespace object method
	- 100% round-trip safe. What goes in, will come out.
	- Reduced leaks by 95%. Process size 30meg after 5000 files.
	  Still some leaks remaining when Lexing errors out.
	- Seperated largest Tokens into their own files.
	  This aligns token class structure with that of ::Statement and ::Structure
	- Rewrote PPI::Node::DESTROY several times while hunting down more leaks
	- Fixed Tokenizer crash on empty subroutine prototypes such as C< sub foo() {} >
	- Treat unexpected braces as an implicit close, to make the lexer more resilient
	- Added PPI::Statement::UnmatchedBrace (name suggested by Abhijit Menon-Sen)
	  to handle closing braces found at the base of a Document.
	- Enabled foo'bar package notation again.
	- Getting close to the first 0.900 series beta release

0.824 Wed Jul 21 2004
	- Removed a 6 meg tmon.out file I accidentally bundled

0.823 Wed Jul 21 2004
	- Added PPI::Document::Fragment class
	- Added PPI::Node::schildren object method
	- Completed compound statement parsing
	- Lexer is now officially feature complete

0.822 Wed Jul 21 2004
	- Filling out the API test as much as possible
	- Added PPI::Statement::label object method
	- Moved PPI::Structure::elements object method to PPI::Node::elements
	- Re-organised statement parsing to better implement ::Compound statements
	- Added PPI::Statement::Data class
	- Added PPI::Statement::End class
	- Re-organised the _lex_statement, _statement_continues stuff, ready for while
	- Added PPI::Lexer::_lex_statement_end to handle PPI::Statement::End properly
	- Organising 02_api.t was getting hard, so added implicit Module=class to Test::ClassAPI

0.821 Mon Jul 19 2004
	- Cleaned up test data files directories
	- Added PPI::Statement::Variable::type object method
	- Added PPI::Statement::Variable::variables object method
	- Added some more classes to the API testing
	- Started 07_tokens.t for testing particular token classes
	- Added PPI::Token::Symbol::canonical object method (and tests)
	- PPI::Token::Magic now ISA PPI::Token::Symbol
	- PPI::Element::clone now fixes _PARENT links for Nodes

0.820 Mon Jul 19 2004
	- Added Round-Trip-Safe testing for all PPI files
	- Added PPI::Node::find_any object method
	- Added PPI::Node::contains object method
	- Continuing the never ending addition of tests
	- Structure open and close brace tokens now see the Structure as their parent
	- Removed the sample application, to streamline the core install
	- Removed dependencies for the sample application
	- Removed custom META.yml, as now no longer needed

0.819 Mon Jul 14 2004
	- Many parts of PPI are VASTLY changed in this revision
	- Breaks API compatibility heavily
	- Adds dependency on List::MoreUtils
	- Added PPI::Lexer support for CHECK blocks
	- Added PPI::Document::load method
	- Added PPI::Document::save method
	- Added PPI::Document::index_locations method
	- Added PPI::Document::flush_locations method
	- Added PPI::Element::top method
	- Added PPI::Element::document method
	- Renamed PPI::Element::extract -> PPI::Element::remove
	- Added test script for element-y stuff
	- Optimisation across the board using List::Any
	- Added PPI::Node::first_child method
	- Added PPI::Node::last_child method
	- Added PPI::Element::clone method
	- Removed Filehandle support from PPI::Tokenizer, to allow the
	  ability to rollback source lines into the buffer if needed.
	- Added POD documentation for PPI::Element
	- Added POD documentation for PPI::Node
	- Added POD documentation for PPI::Document

0.818 Mon Jul  5 2004
	- Changed lib/PPI/Manual.pm to lib/PPI/Manual.pod
	- Added documentation for PPI::Lexer
	- Fixed the misparsing of s{//}{\}
	- More clues added for deciding "slash or regex"
	- Removed PPI::Batch from the default distribution
	- Replaced File::Flat with File::Slurp to reduce dependencies

0.817 Thu Jul  1 2004
 	- Fixed the misparsing of $#{ }
 	- Changed PPI::ParentElement to PPI::Node and moved it to it's own file
	- Changed PPI::Common to PPI::Base
	- Fixed PPI::Node::find
	- Added PPI::Node::prune
	- Started to add a little more class structure documentation
	- Tried to make the DESTROY sequence of events work better

0.816 Tue Jun 29 2004
	- Solved the "last token in file parses wrong" bug

0.815 Sun Jun 27 2004
	- Fixed a bug with the detection of @- and @+
	- Added support for @*
	- Added missing classmap entry for ^ to ::Token::WhiteSpace
	- Added support for arcane "foo"x10 idiosyncracy

0.814 Sat Jun 26 2004
	- Added the PPI tester, a desktop-based interactive debugger, which
	  should greatly accelerate finding and fixing both ::Tokenizer
	  and ::Lexer bugs. This will probably end up as a seperate
	  distribution though, as it has a dependency on wxPerl.

	- Fixed the misparsing of Foo::Bar::Baz
	- Fixed the misparsing of *100
	- Fixed the misparsing of Class::->method properly, or rather Foo::
	- Tokenizer correctly identifies labels
	- Changed PPI::Statement::Flow to PPI::Statement::Compound
	- Removed the extra null whitespace token appearing after a bareword
	  at the end of a file.
	- -X operator are recognised correctly, although not at end of file
	- Lexer detects subroutine and if () statement ends correctly

0.813 Sat Jun 26 2004
	- PPI::Lexer is now structurally complete

0.812 Tue Jun 22 2004
	- No changes to PPI itself.
	- With the addition of Test::ClassAPI 'complete' support,
	  upgraded 02_api.t to use it. Fixed a few small house-keeping bugs.

0.811 Mon Jun 21 2004
	- Added support for subroutine attributes
	- Fixed some problems with anonymous subroutines and prototypes
	- $#$foo parses as (Cast,Symbol) now, not (Magic,Symbol)

0.810 Mon Jun 14 2004
	- Recognise the _ magic filehandle

0.809 Sat Apr 17 2004
	- No changes to PPI itself.
	  Set the correct number of tests to match changes to Test::ClassAPI

0.808 Sat Apr 17 2004
	- No changes to PPI itself.
	  Upgraded 02_api.t to match changes to Test::ClassAPI

0.807 Sat Apr  3 2004
	- Added a manual META.yml file to stop the bundled private AppLib
	  library from being indexed by CPAN

0.806 Mon Mar 22 2004
	- The $} magic variable is now supported
	- Fixed a "tight sub property" bug ( sub foo:lvalue )

0.805 Sun Sep 28 2003
	- The maximum line length regressed, reseting it to 5000.
	- In PPI::Format::HTML, not any parsing error causing a
	  premature end of tokenizer by adding it in a comment at
	  the end of the file.

0.804 Sat Sep 06 2003
	- Statement and Structure resolution preliminarily work.
	  Some basic types of statements and structures are identified.
	- PPI::Format::Apache has been seperated into a different module

0.803 Sat Sep 06 2003
	- Added very long line protection support.
	  Maximum line length is now 5000.
	- Added bug fixes to the Lexer so that block tree building works
	  mostly OK again, without adding broken duplicate tokens.
	- Added the PPI::Lexer::Dump module, to do Lexer object dumps.

0.802 Sat Aug 23 2003
	- PPI::Format::HTML sends the correct content headers

0.801 Fri Aug 22 2003
	- Moved to a new numbering scheme to get more room before 1.0
	- Always fully load when called under mod_perl
	- Add mod_perl hook to PPI::Format::HTML

0.8 Fixes to the quote parsing engine

0.7 Fixed some minor bugs

0.6 Fixed POD, fixed version number, included $'a as a symbol

0.5  Missing

0.4  Mon Dec 23 10:24:21
        - Some more minor parsing fixes in Tokenizer
        - Completely changed the API from doThis to do_this style
        - Changed API to indicate private methods properly

0.3  Tue Dec 17 10:29:27
	- Restructured a little bit
	- Fixed some mis-parsing cases

0.2  Unknown
	- Added test script

0.1  Thu Dec 06 16:50:23 2002
	- original version