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