The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Revision history for Perl extension PPI

1.222 Sun 14 May 2017
	Summary:
	- unit tests for many parts, both passing and TODO
	- many documentation fixes
	- add ->version method to PPI::Statement::Package (WOLFSAGE)
	- remove unused PPI::Document->new timeout feature
	- do not expect '.' in @INC (PLICEASE)
	- many parsing fixes
	- various fixes to the behaviors of methods
	- removal of problematic dependencies

	Details:
	- Remove undocumented, non-working 'timeout' attribute to
	  Document->new, including HAVE_ALARM and
	  PPI::Exception::ParserTimeout.  (GitHub #140) (MOREGAN)
	- first cut of a travis configuration
	- do hex number matching with [[:xdigit:]]
	- some readability improvements on the code of HereDoc.pm
	- recognize heredoc even if they have no newline at the end (AUBERTG)
	- parse left side of => as bareword even if it looks like a keyword or
	  op (MOREGAN)
	- remove source code escapes in the output of QuoteLike::Words->literal
	  (MOREGAN)
	- removal of Test::NoWarnings
	- less uses of List::MoreUtils in favor of List::Util
	- expand $'x to $::main::x in Symbol->canonical as with $::x
	  (MOREGAN)
	- fixed parsing of large numbers in Number::Exp on Solaris 80 (JMASLAK)
	- make remove_child actually return undef on failure to find child to
	  remove
	- higher accuracy when deciding whether certain characters are operators
	  or variable type casts (*&% etc.) (MOREGAN)
	- parse x as the first element of code as a word, not an operator
	  (MOREGAN)
	- recognize the implied end of a package statement that includes a block
	  (MOREGAN)
	- parse package names that look like operators as strings, not ops
	  (MOREGAN)
	- parse package names that look like v10 as strings, not versions
	  (MOREGAN)
	- parse things like v49use as a single bareword, not v-string + keyword
	  (MOREGAN)
	- parse x64 as a word, not x operator + number (MOREGAN)
	- parse 1.eq 1 as float + op, not concatenation
	- parse subroutine attributes correctly (MOREGAN)

1.220 Tue 11 Nov 2014
	Summary:
	- incompatible behavior fixes on PPI::Statement::Sub->prototype
	- improved parsing of various syntax elements
	- code quality improvements
	- various small documentation fixes

	Details:
	- {} is now recognized as anonymous hash constructor instead of a code
	  block after these operators: &&= //= || && // ? :
	  (GitHub #36) (MOREGAN)
	- regex capture variables greater than $9 are now parsed completely,
	  instead of being parsed as single digit captures with numbers after
	  them (GitHub #38) (MOREGAN)
	- DESTROY and AUTOLOAD subs are now parsed even without the sub
	  keyword (GitHub #39) (MOREGAN)
	- PPI::Statement::Sub->prototype behavior now matches its
	  documentation, instead of returning the prototype string
	  unchanged and still including the parens (GitHub #56) (MOREGAN)
	- PPI::Statement::Sub->prototype now returns undef on subs without a
	  prototype, instead of returning an empty string
	  (GitHub #56) (MOREGAN)
	- list of keywords which are not parsed as packages when followed by
	  the Perl4 package separator ' has been increased
	  (GitHub #77) (MOREGAN)
	- application of a number of Perl::Critic policies and documentation
	  fixes (GitHub #53) (MOREGAN, MITHALDU)
	- automation of README.md generation for git (GitHub #86) (COWENS)
	- various small documentation fixes (Github #96) (MOREGAN)

1.218 Sat 16 Aug 2014
	Summary:
	- Fixes for various parsing and documentation bugs
	- 1MB limit on input document size removed
	- Moved repository to GitHub: https://github.com/adamkennedy/PPI

	Details:
	- Stop directing bugs to rt.cpan.org (GitHub #40) (MOREGAN)
	- Fix documentation reference to List::Util (RT #75308) (RWSTAUNER)
	- Improve scalability of parsing long lines, and remove the size
	  limit on documents PPI will parse (GitHub #5) (MITHALDU)
	- Speed up adding an element to an unlabeled statement.
	  Allow inlining of some methods. (WOLFSAGE)
	- Expanded test coverage (DOLMEN, MOREGAN)
	- Convert inline tests to standalone tests (GitHub #12) (MOREGAN)
	- Fix for '1=>x' being parsed as x operator (GitHub #46) (MOREGAN)
	- Recognize that '1 x3' is the x operator followed by a 3
	  (RT #37892, GitHub #27) (MOREGAN)
	- Support all augmented assignment operators (<<=, ||=, etc.)
	  (RT #68176, 71705) (MOREGAN)
	- Stop upper-case "=CUT" from terminating POD (RT #75039) (JAE)
	- Support upper-case digits in hex and binary numbers, including
	  in the leading '0X' and '0B'. (RT #36540) (KRYDE, MOREGAN)
	- Fix float argument to range operator misparsed as version
	  string (RT #45014) (MOREGAN)
	- Fix POD markup in PPI::Find (RT #51693) (FWIE)
	- Fix spelling of "Tom Christiansen" (RT #67264) (TADMC)
	- Fix a large raft of spelling and grammar errors (RT #85049) (David
	  Steinbrunner, DOLMEN, MOREGAN)
	- Fix errors in documentation of the PPI::Element class hierarchy
	  (RT #30863, 69026) (SJQUINNEY)
	- Prevent PPI::XSAccessor packages from hiding corresponding PPI
	  packages in CPAN (RT #90792) (MITHALDU)
	- Recognize the formfeed character as whitespace (RT #67517) (WYANT)
	- Recognize regex match following 'return' (RT #27475) (ADAMK)
	- Fix missing dereference, length called on reference (RT #40103)
	  (ADAMK)

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 existence
	- 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_separator
	- 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_separator
	- 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 (separate distribution)
	- PPI::Processor and PPI::Tinderbox completed (separate 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::Separator 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.
	- Separated 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 separate
	  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 separated 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