WHAT IS THIS?
=============
This software distribution contains the following packages for using
Perl5 "pod" (Plain Old Documentation).  See the "perlpod" and "perlsyn"
manual pages from your Perl5 distribution for more information about pod.

Pod::Parser
-----------
  The Perl5 module "Pod::Parser", which provides a base class for
  parsing and selecting sections of POD documentation from an input
  stream.  Please see the POD documentation for this module (embedded
  in the file "Parser.pm") for more details.

Pod::Select
-----------
  The Perl5 module "Pod::Select", which provides a subclass of
  Pod::Parser and an exported function named "podselect()" to dump
  selected sections of raw pod documentation from an input stream.
  Please see the POD documentation for this module (embedded in the
  file "Select.pm") and Pod::Parser for more details.

Pod::Usage
----------
  The Perl5 module "Pod::Usage" which provides the function "pod2usage()"
  to print usage messages for a Perl script based on its embedded pod
  documentation. Pod::Usage is a subclass of Pod::PlainText. Please see
  the POD documentation for this module (embedded in the file "Usage.pm")
  for more details. The pod2usage() function is probably the most
  generally useful function in this entire distribution since it is
  useful to just about any Perl5 script that is invoked from the
  command-line.

Pod::PlainText
--------------
  A replacement for the Perl5 module "Pod::Text" and the corresponding
  "pod2text()" function. It is derived from the Pod::Parser class.
  Please see the POD documentation for this module and Pod::Parser for
  more details (embedded in the file "PlainText.pm").

  Pod::PlainText and pod2plaintext *can* peacefully co-exist with the
  the current Pod::Text and pod2text of your perl distribution. However,
  IF YOU WANT TO PHYSICALLY REPLACE Pod::Text on your system you can do
  this by making the following changes:

     - Replace 'PlainText' with 'Text' and 'plaintext' with 'text'
       in all *.pm and *.PL files in the PodParser package.

     - Rename 'PlainText.pm' to 'Text.pm' and 'pod2plaintext.PL' to
       'pod2text.PL'.

     - You should probably copy the existing Pod::Text and pod2text files
       in your perl distribution to a new name and/or location before
       overwriting them when you perform 'make install'

  YOU PROBABLY DO NOT WANT TO DO THIS!!!! Pod::PlainText is not yet
  verified to produce equivalent output to Pod::text.

Pod::InputObjects
-----------------
  Some input objects needed by Pod::Parser, and for advanced users of
  Pod::Parser that need more about a command besides its name and text.

AUTHORS/CONTRIBUTORS
====================
Brad Appleton  <[email protected]>  http://www.enteract.com/~bradapp/
(derived from Pod::Text by Tom Christiansen <[email protected]>)


ACKNOWLEDGEMENTS
================
* Kenneth Albanowski ([email protected], CIS: 70705,126) for his
  extensive assistance with the design and interface of Pod::Parser.

    Kenneth is currently working on a "Pod::Simplify" module (among
    other things) which is presently available on CPAN although it is
    not yet completed.  Pod::Simplify (formerly "Pod::Parse") is loaded
    with *lots* of goodies for formatting and translation heuristics for
    converting POD docs into other documentation formats.  If it seems
    feasible, Kenneth and Brad will try to have Pod::Simplify work and
    play nicely with Pod::Parser when it is completed.

* Steven McDougall <[email protected]> for his help and patience with
  re-writing the manpage for Pod::Usage and Pod::Parser.


COPY/REUSE POLICY
=================
Copyright (C) 1996-1998 by Tom Christiansen. All rights reserved.

PodParser is free software; you can redistribute it and/or modify it
under the terms of the Artistic License distributed with Perl version
5.000 or (at your option) any later version. Please refer to the
Artistic License that came with your Perl distribution for more
details.

The Artistic License should have been included in your distribution of
Perl. It resides in the file named "Artistic" at the top-level of the
Perl source tree (where Perl was downloaded/unpacked -- ask your
system administrator if you dont know where this is).  Alternatively,
the current version of the Artistic License distributed with Perl can
be viewed on-line on the World-Wide Web (WWW) from the following URL:

     http://www.perl.com/perl/misc/Artistic.html

The latest version of Perl can be obtained on the World-Wide web (WWW)
from the following URL:

     http://www.perl.com/CPAN/src/latest.tar.gz


DISCLAIMER
===========
This software is distributed in the hope that it will be useful, but
is provided "AS IS" WITHOUT WARRANTY OF ANY KIND, either expressed or
implied, INCLUDING, without limitation, the implied warranties of
MERCHANTABILITY and FITNESS FOR A PARTICULAR PURPOSE.

The ENTIRE RISK as to the quality and performance of the software
IS WITH YOU (the holder of the software).  Should the software prove
defective, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.

IN NO EVENT WILL ANY COPYRIGHT HOLDER OR ANY OTHER PARTY WHO MAY CREATE,
MODIFY, OR DISTRIBUTE THE SOFTWARE BE LIABLE OR RESPONSIBLE TO YOU OR TO
ANY OTHER ENTITY FOR ANY KIND OF DAMAGES (no matter how awful - not even
if they arise from known or unknown flaws in the software).

Please refer to the Artistic License that came with your Perl
distribution for more details.


CONTENTS
========
Please see the file named "MANIFEST" which should have been included
in the PodParser distribution.


REQUIREMENTS
============
* Perl version 5.003 or later

* Getopt::Long version 2.13 or later (podselect.PL and pod2usage.PL only)


BUILDING & INSTALLING
=====================
Please see the perl "ExtUtils::MakeMaker" manpage for how to build and
install using the Makefile.PL template.  In a nutshell, simply typing:

     perl Makefile.PL

should build a Makefile with the usual targets like "all", "clean",
"test", and "install".


BUGS
====
Please send all bug reports to Brad Appleton
<[email protected]>.


TO DO
=====

SHORT TERM
----------
* Add the ability to use callbacks _instead_ _of_ inheritance if so
  desired (or mix+match 'em as you wish). This means that there should
  be a way to use callbacks instead of inheritance for the equivalent
  of each of the abstract base class methods that do text processing
  (like preprocess_xxxxx and {begin,end}_xxxx and others). This will go
  into a module named Pod::Callbacks.

* Do the Makefile.PL right using xsubpp!

LONG TERM
---------
* Try and get pod2html and pod2man and the other pod2xxx translators to
  use Pod::Parser (so they will all use the same uniform and consistent
  POD parsing engine).

* Make changes necessary to accommodate Kenneth Albanowski's Pod::Simplify
  module so that it may use Pod::Parser.

* See about providing the ability (perhaps via constructor options) to turn
  off certain unwanted Pod::Parser features in order to improve performance
  (things like calling preprocess_xxx() methods and/or some other "virtual"
  member function calls that a subclass might not want to make use of).

* Try to allow the user to provide a callback function/method which could
  be used in place of the parse_paragraph() method and/or the command(),
  verbatim(), and textblock() methods.  Such a callback might be provided
  as a constructor argument to Pod::Parser.  Perhaps it might be possible
  to pass the callback method an array of lines or of paragraphs (rather
  than one input block at a time) if certain options are specified.


HISTORY
=======
12-Feb-1998           Brad Appleton                   <[email protected]>
-----------------------------------------------------------------------------
Version 1.05
- Fixed a bug in Pod::Usage (it was using an obsolete name to access an
  attribute instead of using the new access method).
- Removed the use of $`, $&, and $' throughout all modules in this package.

Version 1.04
22-Dec-1997           Brad Appleton                   <[email protected]>
-----------------------------------------------------------------------------
Version 1.04
- SIGNIFICANT CHANGES
  * Created a Pod/InputObjects.pm and moved the details of input streams
    and interior sequences into appropriately named objects defined
    in this file.
  * Pod::PlainText now handles =for and =begin/=end
  * Added the curr_headings() method to Pod::Select
  * Fixed a few very simple but very stupid errors with improper version
    numbers in the .pm files.
  * Pod::PlainText now inherits from Pod::Select (instead of Pod::Parser)
    because it needs to use the curr_headings() method.


24-Sep-1997           Brad Appleton                   <[email protected]>
-----------------------------------------------------------------------------
Version 1.03 (major revision)
- SIGNIFICANT CHANGES
  * If a POD directive begins with '==' instead of '=', then that line
    is considered a paragraph by itself (you dont need a blank line
    before you begin the next paragraph). NOTE that this only works
    for the *beginning* of a paragraph!! If the '==' begins a line
    in the *middle* of a paragraph, then it receives no special treatment
    and is not considered to be the beginning of a new POD directive.
    If this added convenience seems confusing at first, just remember the
    following phrases:
       "LESS IS MORE" -- LESS equals signs need MORE newlines!
       "MORE IS LESS" -- MORE equals signs need LESS newlines!
    As long as you dont forget that the '=' on a POD directive always
    comes *before* the newline that ends the paragraph (so the '=' is
    associated with the first word of each phrase) you should be fine.

  * The '=pod' command *IS* *NOW* *PASSED* TO Pod::Parser::command()!

  * ALL INSTANCE DATA FIELDS HAVE BEEN RENAMED! Rather than using the new
    field names, you should use the newly provided field access methods to
    get/set private instance data. These are as follows:

        Accessor Method           Old Field Name
      -------------------      -------------------
        cutting()                   CUTTING
        output_file()               OUTFILE
        output_handle()             OUTPUT
        input_file()                INFILE
        input_handle()              INPUT
        total_lines()               LINE
        total_paragraphs()          PARAGRAPH
        input_streams()             INPUT_STACK
        top_stream()                INPUT_TOP
        sequence_commands()         SEQUENCES

  * The last parameter passed to the command() and interior_sequence()
    methods has changed. Please see the documentation!

  * The stack of interior sequences being processed is NO LONGER an
    array of text-strings. It is now an array of hash-refs!

  * Renamed my version of Pod::Text to Pod::PlainText to avoid some nasty
    problems it caused for CPAN.

  * The method Pod::Parser::interpolate() NO LONGER MODIFIES its first
    argument (which means the argument doesnt have to be an l-value)!
    This method is now a wrapper which invokes the new method named
    _interpolate_bottom_up(). This new method *is* recursive and *does*
    modify its first argument.

  * _interpolate_bottom_up() contains a small but ugly *hack* to allow
    '->' and '=>' to remain untouched inside of C<...> (without having
    to use the E<gt> escape sequence) PROVIDED THAT there is something
    to the left of it OTHER THAN another '-' or '='.

  * The 'select()' and 'want_section()' methods have moved from Pod::Parser
    into Pod::Select.

  * All callback and callback-related methods have moved into the new
    module Pod:::Callbacks (which is NOT YET FINISHED for this release).

22-May-1997           Brad Appleton                   <[email protected]>
-----------------------------------------------------------------------------
Version 1.02
- Added the ability to register callbacks for =xxxx paragraphs and other
  paragraphs. This means that one could (for example) register a temporary
  callback after =item is seen to handle the very next paragraph and then
  unregister itself. The methods added were add_callbacks and rm_callbacks.
  Also, a private method invoke_callbacks was added to go about the business
  of invoking callbacks. The callback mechanism Ive implemented is extremely
  flexible and also way more complex than Id like (and hence requires lots
  more documentation than I would like). Also, the interfaces to add_callbacks
  and rm_callbacks tries to be very flexible in the number and type of
  arguments you can give it. This is probably too flexible to the point
  of being too difficult to figure out how to use. My callback mechanism
  is very powerful but I think the interface to it is lousy and far too
  complex. I am desperately in search of a way to make it smaller and
  simpler without removing too much functionality. If you have any ideas
  about how to do this PLEASE SHARE THEM WITH ME!

- Got rid of =pod pragmas. P5P has decided to use =for, and =begin/=end
  instead and Ill just handle those like regular commands. NOTE THAT THIS
  MEANS THE command() METHOD SHOULD NOW EXPECT TO BE PASSED =pod COMMANDS.

- Expanded the documentation for Pod::Usage to be (hopefully) a little less
  confusing regarding the various different invocation styles. Many thanks
  to Steven McDougall <[email protected]> for spending many hours of
  assistance toward this goal.

- Fixed Pod::Text to use the proper indentation for nested '=item' lists
  and to handle consecutive =item paragraphs. (Thank you to Diab Jerious
  <[email protected]> for helping me with this one.)

- Fixed a bug in Pod::Parser that was causing the argument to =over to be
  a newline instead of the empty string when no "over count" was given.

05-Sep-1996           Brad Appleton                   <[email protected]>
-----------------------------------------------------------------------------
Version 1.01
- Commented out "use diagnostics" in all modules
- Made use of "use vars"
- Added the instance variables $self->{INPUT_STACK} and $self->{INPUT_TOP}
  to Pod::Parser and made it possible to use the parse_from_file() and
  parse_from_filehandle methods() to process "included" files (in addition
  to normal pods that dont "include" other files).
- Added MSG option/key to pod2usage().

19-Aug-1996           Brad Appleton                   <[email protected]>
-----------------------------------------------------------------------------
Version 1.00 (first "official" release):
 - Renamed Pod::Filter to Pod::Parser at Kenneth Albanowski's recommendation.
 - Moved podselect() into its own separate module Pod::Select to avoid
   unnecessary namespace pollution in Pod::Parser.
 - Renamed several methods and added another preprocessing method in
   Parser.pm.
 - Pod::Parser now keeps track of the current line and paragraph number
   and the current input and output file names.
 - Fixed parse_from_filehandle() to recognize a line matching /^\s+$/ as a
   paragraph terminator.
 - Included Pod::Usage and Pod::Text as part of the PodParser distribution
   rather then packing and releasing each module separately.
 - Removed pod2text.PL and added pod2usage.PL


07-Aug-1996           Brad Appleton                   <[email protected]>
-----------------------------------------------------------------------------
Initial release of version 0.01 to garner some feedback. This release was
actually three separate "initial" releases of Pod::Parser, Pod::Text, and
Pod::Usage which were originally named Pod::Filter, Pod::PlainText, and
Pod::Usage (respectively).