Upgrade to podlators 2.1.2
[p5sagit/p5-mst-13.2.git] / lib / Pod / Text / Color.pm
CommitLineData
6055f9d4 1# Pod::Text::Color -- Convert POD data to formatted color ASCII text
6055f9d4 2#
0e4e3f6e 3# Copyright 1999, 2001, 2004, 2006, 2008 Russ Allbery <rra@stanford.edu>
6055f9d4 4#
3c014959 5# This program is free software; you may redistribute it and/or modify it
6055f9d4 6# under the same terms as Perl itself.
7#
3c014959 8# This is just a basic proof of concept. It should later be modified to make
9# better use of color, take options changing what colors are used for what
10# text, and the like.
6055f9d4 11
3c014959 12##############################################################################
6055f9d4 13# Modules and declarations
3c014959 14##############################################################################
6055f9d4 15
16package Pod::Text::Color;
17
18require 5.004;
19
20use Pod::Text ();
21use Term::ANSIColor qw(colored);
22
23use strict;
24use vars qw(@ISA $VERSION);
25
26@ISA = qw(Pod::Text);
27
0e4e3f6e 28$VERSION = 2.04;
6055f9d4 29
3c014959 30##############################################################################
6055f9d4 31# Overrides
3c014959 32##############################################################################
6055f9d4 33
34# Make level one headings bold.
35sub cmd_head1 {
b7ae008f 36 my ($self, $attrs, $text) = @_;
37 $text =~ s/\s+$//;
38 $self->SUPER::cmd_head1 ($attrs, colored ($text, 'bold'));
6055f9d4 39}
40
41# Make level two headings bold.
42sub cmd_head2 {
b7ae008f 43 my ($self, $attrs, $text) = @_;
44 $text =~ s/\s+$//;
45 $self->SUPER::cmd_head2 ($attrs, colored ($text, 'bold'));
6055f9d4 46}
47
b84d8b9e 48# Fix the various formatting codes.
b7ae008f 49sub cmd_b { return colored ($_[2], 'bold') }
50sub cmd_f { return colored ($_[2], 'cyan') }
51sub cmd_i { return colored ($_[2], 'yellow') }
6055f9d4 52
59548eca 53# Output any included code in green.
54sub output_code {
55 my ($self, $code) = @_;
56 $code = colored ($code, 'green');
57 $self->output ($code);
58}
59
6055f9d4 60# We unfortunately have to override the wrapping code here, since the normal
61# wrapping code gets really confused by all the escape sequences.
62sub wrap {
63 my $self = shift;
64 local $_ = shift;
65 my $output = '';
66 my $spaces = ' ' x $$self{MARGIN};
b7ae008f 67 my $width = $$self{opt_width} - $$self{MARGIN};
8f202758 68
69 # We have to do $shortchar and $longchar in variables because the
70 # construct ${char}{0,$width} didn't do the right thing until Perl 5.8.x.
b7ae008f 71 my $char = '(?:(?:\e\[[\d;]+m)*[^\n])';
8f202758 72 my $shortchar = $char . "{0,$width}";
73 my $longchar = $char . "{$width}";
6055f9d4 74 while (length > $width) {
8f202758 75 if (s/^($shortchar)\s+// || s/^($longchar)//) {
6055f9d4 76 $output .= $spaces . $1 . "\n";
77 } else {
78 last;
79 }
80 }
81 $output .= $spaces . $_;
82 $output =~ s/\s+$/\n\n/;
83 $output;
84}
85
3c014959 86##############################################################################
6055f9d4 87# Module return value and documentation
3c014959 88##############################################################################
6055f9d4 89
901;
91__END__
92
93=head1 NAME
94
95Pod::Text::Color - Convert POD data to formatted color ASCII text
96
0e4e3f6e 97=for stopwords
98Allbery
99
6055f9d4 100=head1 SYNOPSIS
101
102 use Pod::Text::Color;
103 my $parser = Pod::Text::Color->new (sentence => 0, width => 78);
104
105 # Read POD from STDIN and write to STDOUT.
106 $parser->parse_from_filehandle;
107
108 # Read POD from file.pod and write to file.txt.
109 $parser->parse_from_file ('file.pod', 'file.txt');
110
111=head1 DESCRIPTION
112
9741dab0 113Pod::Text::Color is a simple subclass of Pod::Text that highlights output
114text using ANSI color escape sequences. Apart from the color, it in all
115ways functions like Pod::Text. See L<Pod::Text> for details and available
116options.
117
118Term::ANSIColor is used to get colors and therefore must be installed to use
119this module.
120
121=head1 BUGS
122
123This is just a basic proof of concept. It should be seriously expanded to
124support configurable coloration via options passed to the constructor, and
125B<pod2text> should be taught about those.
6055f9d4 126
127=head1 SEE ALSO
128
b7ae008f 129L<Pod::Text>, L<Pod::Simple>
6055f9d4 130
fd20da51 131The current version of this module is always available from its web site at
132L<http://www.eyrie.org/~eagle/software/podlators/>. It is also part of the
133Perl core distribution as of 5.6.0.
134
6055f9d4 135=head1 AUTHOR
136
3c014959 137Russ Allbery <rra@stanford.edu>.
138
139=head1 COPYRIGHT AND LICENSE
140
0e4e3f6e 141Copyright 1999, 2001, 2004, 2006, 2008 Russ Allbery <rra@stanford.edu>.
3c014959 142
143This program is free software; you may redistribute it and/or modify it
144under the same terms as Perl itself.
6055f9d4 145
146=cut