df82c0784c8ef068f7bb6cfb6818983df4220e2a
[perl.git] / ext / Pod-Simple / lib / Pod / Simple / Text.pm
1
2 require 5;
3 package Pod::Simple::Text;
4 use strict;
5 use Carp ();
6 use Pod::Simple::Methody ();
7 use Pod::Simple ();
8 use vars qw( @ISA $VERSION $FREAKYMODE);
9 $VERSION = '2.02';
10 @ISA = ('Pod::Simple::Methody');
11 BEGIN { *DEBUG = defined(&Pod::Simple::DEBUG)
12           ? \&Pod::Simple::DEBUG
13           : sub() {0}
14       }
15
16 use Text::Wrap 98.112902 ();
17 $Text::Wrap::wrap = 'overflow';
18 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
19
20 sub new {
21   my $self = shift;
22   my $new = $self->SUPER::new(@_);
23   $new->{'output_fh'} ||= *STDOUT{IO};
24   $new->accept_target_as_text(qw( text plaintext plain ));
25   $new->nix_X_codes(1);
26   $new->nbsp_for_S(1);
27   $new->{'Thispara'} = '';
28   $new->{'Indent'} = 0;
29   $new->{'Indentstring'} = '   ';
30   return $new;
31 }
32
33 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
34
35 sub handle_text {  $_[0]{'Thispara'} .= $_[1] }
36
37 sub start_Para  {  $_[0]{'Thispara'} = '' }
38 sub start_head1 {  $_[0]{'Thispara'} = '' }
39 sub start_head2 {  $_[0]{'Thispara'} = '' }
40 sub start_head3 {  $_[0]{'Thispara'} = '' }
41 sub start_head4 {  $_[0]{'Thispara'} = '' }
42
43 sub start_Verbatim    { $_[0]{'Thispara'} = ''   }
44 sub start_item_bullet { $_[0]{'Thispara'} = $FREAKYMODE ? '' : '* ' }
45 sub start_item_number { $_[0]{'Thispara'} = $FREAKYMODE ? '' : "$_[1]{'number'}. "  }
46 sub start_item_text   { $_[0]{'Thispara'} = ''   }
47
48 sub start_over_bullet  { ++$_[0]{'Indent'} }
49 sub start_over_number  { ++$_[0]{'Indent'} }
50 sub start_over_text    { ++$_[0]{'Indent'} }
51 sub start_over_block   { ++$_[0]{'Indent'} }
52
53 sub   end_over_bullet  { --$_[0]{'Indent'} }
54 sub   end_over_number  { --$_[0]{'Indent'} }
55 sub   end_over_text    { --$_[0]{'Indent'} }
56 sub   end_over_block   { --$_[0]{'Indent'} }
57
58
59 # . . . . . Now the actual formatters:
60
61 sub end_head1       { $_[0]->emit_par(-4) }
62 sub end_head2       { $_[0]->emit_par(-3) }
63 sub end_head3       { $_[0]->emit_par(-2) }
64 sub end_head4       { $_[0]->emit_par(-1) }
65 sub end_Para        { $_[0]->emit_par( 0) }
66 sub end_item_bullet { $_[0]->emit_par( 0) }
67 sub end_item_number { $_[0]->emit_par( 0) }
68 sub end_item_text   { $_[0]->emit_par(-2) }
69
70 sub emit_par {
71   my($self, $tweak_indent) = splice(@_,0,2);
72   my $indent = ' ' x ( 2 * $self->{'Indent'} + 4 + ($tweak_indent||0) );
73    # Yes, 'STRING' x NEGATIVE gives '', same as 'STRING' x 0
74
75   $self->{'Thispara'} =~ tr{\xAD}{}d if Pod::Simple::ASCII;
76   my $out = Text::Wrap::wrap($indent, $indent, $self->{'Thispara'} .= "\n");
77   $out =~ tr{\xA0}{ } if Pod::Simple::ASCII;
78   print {$self->{'output_fh'}} $out, "\n";
79   $self->{'Thispara'} = '';
80   
81   return;
82 }
83
84 # . . . . . . . . . . And then off by its lonesome:
85
86 sub end_Verbatim  {
87   my $self = shift;
88   if(Pod::Simple::ASCII) {
89     $self->{'Thispara'} =~ tr{\xA0}{ };
90     $self->{'Thispara'} =~ tr{\xAD}{}d;
91   }
92
93   my $i = ' ' x ( 2 * $self->{'Indent'} + 4);
94   #my $i = ' ' x (4 + $self->{'Indent'});
95   
96   $self->{'Thispara'} =~ s/^/$i/mg;
97   
98   print { $self->{'output_fh'} }   '', 
99     $self->{'Thispara'},
100     "\n\n"
101   ;
102   $self->{'Thispara'} = '';
103   return;
104 }
105
106 #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
107 1;
108
109
110 __END__
111
112 =head1 NAME
113
114 Pod::Simple::Text -- format Pod as plaintext
115
116 =head1 SYNOPSIS
117
118   perl -MPod::Simple::Text -e \
119    "exit Pod::Simple::Text->filter(shift)->any_errata_seen" \
120    thingy.pod
121
122 =head1 DESCRIPTION
123
124 This class is a formatter that takes Pod and renders it as
125 wrapped plaintext.
126
127 Its wrapping is done by L<Text::Wrap>, so you can change
128 C<$Text::Wrap::columns> as you like.
129
130 This is a subclass of L<Pod::Simple> and inherits all its methods.
131
132 =head1 SEE ALSO
133
134 L<Pod::Simple>, L<Pod::Simple::TextContent>, L<Pod::Text>
135
136 =head1 COPYRIGHT AND DISCLAIMERS
137
138 Copyright (c) 2002 Sean M. Burke.  All rights reserved.
139
140 This library is free software; you can redistribute it and/or modify it
141 under the same terms as Perl itself.
142
143 This program is distributed in the hope that it will be useful, but
144 without any warranty; without even the implied warranty of
145 merchantability or fitness for a particular purpose.
146
147 =head1 AUTHOR
148
149 Sean M. Burke C<sburke@cpan.org>
150
151 =cut
152