1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
# ============================================================================
package MooseX::App::Message::BlockColor;
# ============================================================================
use 5.010;
use utf8;
use namespace::autoclean;
use Moose;
extends qw(MooseX::App::Message::Block);
use Term::ANSIColor qw();
use IO::Interactive qw(is_interactive);
BEGIN {
if ($^O eq 'MSWin32') {
Class::Load::try_load_class('Win32::Console::ANSI');
}
};
sub stringify {
my ($self) = @_;
my $header_color;
my $body_color;
my $type = $self->type;
if($type eq 'error') {
$header_color = 'bright_red bold';
$body_color = 'bright_red';
}
elsif($type eq 'default') {
$header_color = 'bold';
}
else {
$header_color = $type;
}
my $message = '';
if ($self->has_header) {
$message .= $self->_wrap_color($header_color,$self->header)."\n";
}
if ($self->has_body) {
$message .= $self->_wrap_color($body_color,$self->body)."\n\n";
}
return $message;
}
sub _wrap_color {
my ($self,$color,$string) = @_;
return $string
unless is_interactive()
&& defined $color;
return Term::ANSIColor::color($color)
.$string
.Term::ANSIColor::color('reset');
}
__PACKAGE__->meta->make_immutable;
1;
|