NAME
    PPI - Parse and manipulate Perl code non-destructively, without using
    perl itself

DESCRIPTION
    This is an in-development package for parsing, manipulating and saving
    perl code, without using the perl interpreter, the B modules, or any
    other hacks that use perl's inbuilt grammar.

    Please note that is project it intended as a mechanism for working with
    perl content, NOT to actually compile and run working perl applications.
    Thus, it provides only an approximation of the detail and flexibility
    available to the real perl parser, if a quite close approximation.

    It has been shown many times that it is impossible to FULLY "parse" Perl
    code without also executing it. We do not intend to fully parse it, just
    get enough details to analyse it, alter it, and save it back without
    losing details like whitespace, comments and other stuff lost when using
    the B:: modules.

STATUS
    Tokenizer
        The Tokenizer can be considered complete, but with some remaining
        bugs that will be fixed over time. This should get gradually more
        accurate as special cases are found and handled, and more cruft is
        added. :)

    Lexer
        The basic framework of the lexer has been completely replaced. The
        new lexer should be sufficient, but the lex logic is far from
        complete, and so the parse tree may look kind of odd, but works for
        very basic statements.

        The classes and methods are roughly completed for the basic parse
        tree manipulation, but more advanced filters and such are yet to be
        written. Overall, the lexer is considered about three quarters
        complete.

    Syntax Highlighting
        The syntax highlighter is virtually unchanged, except that instead
        of working from an ( old style ) PPI::Document object, it pulls
        directly from a Tokenizer. This is temporary, and you should expect
        the entire PPI::Format tree to be overhauled and largely replaced
        once the lexer is completed.

    Other Functionality
        Given their current state, I have removed the entire PPI::Transform
        and PPI::Analysis trees from the upload. They are totally out of
        date, and will be replaced as the Lexer gets closer.

        One rewritten module, PPI::Analysis::Compare, is largely done and is
        currently in CPAN on it's own, as it relies on additional modules
        not needed by the core.

    Documentation
        I have started on the very beginning of the manual, which can be
        found at PPI::Manual. It's raw, incomplete, and subject to change.

STRUCTURE
    This section provides a quick overview of all the classes in PPI, and
    their general layout and inheritance. We start with the main data
    classes, and then move on to the functional classes

      PPI::Base
        PPI::Element
          PPI::Node
            PPI::Document
            PPI::Statement
              PPI::Statement::Package
              PPI::Statement::Scheduled
              PPI::Statement::Expression
              PPI::Statement::Include
              PPI::Statement::Sub
              PPI::Statement::Variable
              PPI::Statement::Compound
              PPI::Statement::Break
              PPI::Statement::Null
            PPI::Structure
          
          PPI::Token
      
TO DO
    Tokenizer
        Minor bug fixes and improvements are expected to be done as needed
        over time.

    Lexer
        - Finish the non-if compound statement lexing.

        - Add lex and statement support for labels.

        - Add support for statements that start with a block.

        Also, a rewritten filter/transform framework needs to be created on
        top of the basic lexer, to provide for the ability to add higher
        lever logic and capabilities.

    Other Stuff
        PPI::Format needs to be created properly, based on lex output rather
        than the raw token stream. PPI::Analysis packages will need to be
        rewritten... but they are likely to be largely third party, later.
        However, a base collection of search/find/filter/replace type
        methods probably need to be written centrally.

        Somewhere in there we also need a SAX filter to generate events
        based on perl structures, so various more complex processing tools
        can be written.

        Replacements or equivalents are needed for current methods that do
        POD extraction... some form of auto-doc can probably be written on
        top of that.

    Documentation
        Both user manuals and API documentation needs to get written.

SUPPORT
    None. Don't use this for anything you don't want to have to rewrite. As
    this is changing, you probably need to be in contact with the author if
    you want to be using this.

AUTHOR
    Adam Kennedy (Maintainer), <http://ali.as/>, cpan@ali.as

COPYRIGHT
    Copyright (c) 2002-2004 Adam Kennedy. All rights reserved. This program
    is free software; you can redistribute it and/or modify it under the
    same terms as Perl itself.

    The full text of the license can be found in the LICENSE file included
    with this module.

