package Acme::MilkyHolmes::Role::HasPersonalColor;
use Mouse::Role;
use Encode;
requires 'color';
requires 'color_enable';
my $ansi_colors = {
pink => '1;35', # Light Purple
yellow => '1;33',
green => '0;32',
blue => '0;34',
black => '0;30;47', #background is white
white => '1;37;40', #background is black
cyan => '0;36',
red => '0;31',
purple => '0;35',
brown => '0;33',
lightgray => '0;37',
darkgray => '1;30',
lightblue => '1;34',
lightgreen => '1;32',
lightcyan => '1;36',
lightred => '1;31',
lightpurple => '1;35',
};
sub color_enable {
my ($self) = shift;
return 1;
}
sub color {
my ($self) = @_;
return $self->common->[0]->{color};
}
sub say {
my ($self, $comment) = @_;
my $message = encode_utf8($self->nickname . ': ' . $comment);
if ( defined $self->color && $self->color_enable ) {
$message = $self->_escaped_message($self->color, $message);
}
print "$message\n";
}
sub _escaped_color_begin {
my ($self, $color_name) = @_;
return "\e[" . $ansi_colors->{$color_name} . "m"
}
sub _escape_end {
my ($self) = @_;
return "\e[m";
}
sub _escaped_message {
my ($self, $color_name, $message) = @_;
return $self->_escaped_color_begin($color_name) . $message . $self->_escape_end();
}
1;