09-Nov-1998 Brad Appleton <bradapp@enteract.com>
-----------------------------------------------------------------------------
Version 1.061
+ Minor additions to v1.06
* Pod::InteriorSequence::nested was buried inside POD directives.
I had to add the `=cut' between the subroutine docs and its code.
* Removed some of the documentation for things in Pod::Parser and
Pod::Input object that the user probably doesnt need to know.
* Split out "CHANGES" and "TODO" into separate files from the README
22-Oct-1998 Brad Appleton <bradapp@enteract.com>
-----------------------------------------------------------------------------
Version 1.06
+ SIGNIFICANT CHANGES (POSSIBLE BACKWARD INCOMPATIBILITIES)
* Pod::InputObjects::ParseTree object ADDED. This object corresponds
to a parse-tree of parsed pod parapgraph text. Every node in the
parse-tree is either a text-string, or a Pod::InteriorSequence
that has yet to be expanded.
* Pod::Parser::parse_text ADDED!!! This routine parses some pod input
text and returns a parse-tree as the result. This is VERY useful for
people who cant rely on strict bottom-up expansion of interior
sequences. Now they can get the parse-tree and expand sequences
themselves in whatever order they require.
* Pod::Parser::interpolate PARAMETER CHANGE, it *no* *longer* takes a
regexp as its second parameter!!! It used to accept a regular
expression signifying the end of parsing conditions and pass it to
_interpolate_bottom_up. It now takes a line-number as the second
arg.
* Pod::Parser::_interpolate_bottom_up has been *REMOVED*!! Pod::Parser
no longer uses a recursive routine to parse interior sequences.
* The following Pod::Parser subroutines now take the current line-number
as an ADDITIONAL PARAMETER: command, textblock, verbatim, interpolate,
preprocess_line, preprocess_paragraph, parse_paragraph.
* REMOVED the Pod::Parser::total_lines method
* ADDED the nested() method to Pod::InteriorSequence
* REMOVED the following methods from Pod::InputSource: num_lines,
file_line, and ADDED the method filename instead.
* REMOVED the _CMD_SEQUENCES data-field and sequences() method from
Pod::Parser. If you need to know the parent of a nested interior
sequence, then invoke the nested() method of that sequence.
+ OTHER CHANGES
- Added the "-pathlist" options to Pod::Usage and pod2usage
- Made Pod::Usage a tad more portable for DOS and MSWin32
- Got rid of a rogue '#' in podselect that was in front of a needed
"use" statement.
- Fixed a bug in Pod::Parser::_interpolate_bottom_up that made it stop
interpolating interior sequences after the first line of a paragraph.
12-Feb-1998 Brad Appleton <bradapp@enteract.com>
-----------------------------------------------------------------------------
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 <bradapp@enteract.com>
-----------------------------------------------------------------------------
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 <bradapp@enteract.com>
-----------------------------------------------------------------------------
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 <bradapp@enteract.com>
-----------------------------------------------------------------------------
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 <swmcd@world.std.com> 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
<djerius@cfa.harvard.edu> 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 <bradapp@enteract.com>
-----------------------------------------------------------------------------
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 <bradapp@enteract.com>
-----------------------------------------------------------------------------
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 <bradapp@enteract.com>
-----------------------------------------------------------------------------
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).