X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FPod%2FText%2FColor.pm;h=52b96c36373442f5e8f6d21c90ce725f0670596f;hb=55595e835ecd270061d73c45c43db17eca4eee1f;hp=5eac57ca9ff75a4343711e20edf923bad874da0d;hpb=6055f9d42166344699550b8045e96c47c97d767c;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/Pod/Text/Color.pm b/lib/Pod/Text/Color.pm index 5eac57c..52b96c3 100644 --- a/lib/Pod/Text/Color.pm +++ b/lib/Pod/Text/Color.pm @@ -1,18 +1,17 @@ # Pod::Text::Color -- Convert POD data to formatted color ASCII text -# $Id: Color.pm,v 0.1 1999/06/13 02:41:06 eagle Exp $ # -# Copyright 1999 by Russ Allbery +# Copyright 1999, 2001, 2004, 2006 by Russ Allbery # -# This program is free software; you can redistribute it and/or modify it +# This program is free software; you may redistribute it and/or modify it # under the same terms as Perl itself. # -# This is just a basic proof of concept. It should later be modified to -# make better use of color, take options changing what colors are used for -# what text, and the like. +# This is just a basic proof of concept. It should later be modified to make +# better use of color, take options changing what colors are used for what +# text, and the like. -############################################################################ +############################################################################## # Modules and declarations -############################################################################ +############################################################################## package Pod::Text::Color; @@ -26,34 +25,40 @@ use vars qw(@ISA $VERSION); @ISA = qw(Pod::Text); -# Use the CVS revision of this file as its version number. -($VERSION = (split (' ', q$Revision: 0.1 $ ))[1]) =~ s/\.(\d)$/.0$1/; +# Don't use the CVS revision as the version, since this module is also in Perl +# core and too many things could munge CVS magic revision strings. This +# number should ideally be the same as the CVS revision in podlators, however. +$VERSION = 2.03; - -############################################################################ +############################################################################## # Overrides -############################################################################ +############################################################################## # Make level one headings bold. sub cmd_head1 { - my $self = shift; - local $_ = shift; - s/\s+$//; - $self->SUPER::cmd_head1 (colored ($_, 'bold')); + my ($self, $attrs, $text) = @_; + $text =~ s/\s+$//; + $self->SUPER::cmd_head1 ($attrs, colored ($text, 'bold')); } # Make level two headings bold. sub cmd_head2 { - my $self = shift; - local $_ = shift; - s/\s+$//; - $self->SUPER::cmd_head2 (colored ($_, 'bold')); + my ($self, $attrs, $text) = @_; + $text =~ s/\s+$//; + $self->SUPER::cmd_head2 ($attrs, colored ($text, 'bold')); } -# Fix the various interior sequences. -sub seq_b { return colored ($_[1], 'bold') } -sub seq_f { return colored ($_[1], 'cyan') } -sub seq_i { return colored ($_[1], 'yellow') } +# Fix the various formatting codes. +sub cmd_b { return colored ($_[2], 'bold') } +sub cmd_f { return colored ($_[2], 'cyan') } +sub cmd_i { return colored ($_[2], 'yellow') } + +# Output any included code in green. +sub output_code { + my ($self, $code) = @_; + $code = colored ($code, 'green'); + $self->output ($code); +} # We unfortunately have to override the wrapping code here, since the normal # wrapping code gets really confused by all the escape sequences. @@ -62,10 +67,15 @@ sub wrap { local $_ = shift; my $output = ''; my $spaces = ' ' x $$self{MARGIN}; - my $width = $$self{width} - $$self{MARGIN}; + my $width = $$self{opt_width} - $$self{MARGIN}; + + # We have to do $shortchar and $longchar in variables because the + # construct ${char}{0,$width} didn't do the right thing until Perl 5.8.x. + my $char = '(?:(?:\e\[[\d;]+m)*[^\n])'; + my $shortchar = $char . "{0,$width}"; + my $longchar = $char . "{$width}"; while (length > $width) { - if (s/^((?:(?:\e\[[\d;]+m)?[^\n]){0,$width})\s+// - || s/^((?:(?:\e\[[\d;]+m)?[^\n]){$width})//) { + if (s/^($shortchar)\s+// || s/^($longchar)//) { $output .= $spaces . $1 . "\n"; } else { last; @@ -76,9 +86,9 @@ sub wrap { $output; } -############################################################################ +############################################################################## # Module return value and documentation -############################################################################ +############################################################################## 1; __END__ @@ -100,17 +110,37 @@ Pod::Text::Color - Convert POD data to formatted color ASCII text =head1 DESCRIPTION -Pod::Text::Color is a simple subclass of Pod::Text that highlights -output text using ANSI color escape sequences. Apart from the color, it in -all ways functions like Pod::Text. See L for details -and available options. +Pod::Text::Color is a simple subclass of Pod::Text that highlights output +text using ANSI color escape sequences. Apart from the color, it in all +ways functions like Pod::Text. See L for details and available +options. + +Term::ANSIColor is used to get colors and therefore must be installed to use +this module. + +=head1 BUGS + +This is just a basic proof of concept. It should be seriously expanded to +support configurable coloration via options passed to the constructor, and +B should be taught about those. =head1 SEE ALSO -L, L +L, L + +The current version of this module is always available from its web site at +L. It is also part of the +Perl core distribution as of 5.6.0. =head1 AUTHOR -Russ Allbery Erra@stanford.eduE. +Russ Allbery . + +=head1 COPYRIGHT AND LICENSE + +Copyright 1999, 2001, 2004, 2006 by Russ Allbery . + +This program is free software; you may redistribute it and/or modify it +under the same terms as Perl itself. =cut