The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Pod::Outline;

use strict;
use Pod::Simple::Text ();
use Text::Wrap;
our @ISA = qw( Pod::Simple::Text );

=head1 NAME

Pod::Outline - For generating outlines of POD files

=cut

use warnings;
use strict;

=head1 VERSION

Version 0.10

=cut

our $VERSION = '0.10';

=head1 SYNOPSIS

Subclass of L<Pod::Simple::Text> designed for outlines.

=cut

our $INDENT = 4;

sub handle_text {  $_[0]{'Thispara'} .= $_[1] }

sub start_Para  {  $_[0]{'Thispara'} = '' }
sub start_head1 { _start_head(1,@_) }
sub start_head2 { _start_head(2,@_) }
sub start_head3 { _start_head(3,@_) }
sub start_head4 { _start_head(4,@_) }
sub _start_head {
    my $depth = shift;
    my $self = shift;
    $self->{Depth} = $depth;
    $self->{Thispara} = " " x ($INDENT * ($depth-1));
}

sub start_Verbatim    { $_[0]{'Thispara'} = ''   }
sub start_item_bullet { $_[0]{'Thispara'} = '* ' }
sub start_item_number { $_[0]{'Thispara'} = "$_[1]{'number'}. "  }
sub start_item_text   { $_[0]{'Thispara'} = ''   }

# . . . . . Now the actual formatters:

sub end_head1       { $_[0]->emit_par(-1 * $INDENT) }
sub end_head2       { $_[0]->emit_par(-2 * $INDENT) }
sub end_head3       { $_[0]->emit_par(-3 * $INDENT) }
sub end_head4       { $_[0]->emit_par(-4 * $INDENT) }
sub end_Para        { $_[0]->emit_par() }
sub end_item_bullet { $_[0]->emit_par() }
sub end_item_number { $_[0]->emit_par() }
sub end_item_text   { $_[0]->emit_par(int(.5*$INDENT))}

sub emit_par {
    my $self = shift;
    my $tweak_indent = shift;

    my $nspaces = ($INDENT * $self->{'Depth'}) + ($tweak_indent||0);

    my $indent = ' ' x $nspaces; # Yes, 'STRING' x NEGATIVE gives '', same as 'STRING' x 0

    $self->{'Thispara'} =~ tr{\xAD}{}d if Pod::Simple::ASCII;
    my $out = Text::Wrap::wrap($indent, $indent, $self->{'Thispara'} .= "\n");
    $out =~ tr{\xA0}{ } if Pod::Simple::ASCII;
    print {$self->{'output_fh'}} $out, "\n";
    $self->{'Thispara'} = '';

    return;
} # emit_par

=head1 AUTHOR

Andy Lester, C<< <andy@petdance.com> >>

=head1 BUGS

Please report any bugs or feature requests to
C<bug-pod-outline@rt.cpan.org>, or through the web interface at
L<http://rt.cpan.org>.  I will be notified, and then you'll automatically
be notified of progress on your bug as I make changes.

=head1 COPYRIGHT & LICENSE

Copyright 2004 Andy Lester, All Rights Reserved.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

=cut

1; # End of Pod::Outline