App-ANSIColorUtils
view release on metacpan or search on metacpan
lib/App/ANSIColorUtils.pm view on Meta::CPAN
code => $_,
color=>
$_ < 8 ? sprintf("\e[%dm%s\e[0m", 30+$_, "This is ANSI color #$_") :
$_ < 16 ? sprintf("\e[1;%dm%s\e[0m", 30+$_-8, "This is ANSI color #$_") :
sprintf("\e[38;5;%dm%s\e[0m", $_, "This is ANSI color #$_"),
};
}
[200, "OK", \@rows];
}
$SPEC{show_colors} = {
v => 1.1,
summary => 'Show colors specified in argument as text with ANSI colors',
args => {
colors => {
'x.name.is_plural' => 1,
'x.name.singular' => 'color',
schema => ['array*', of=>'str*'],
req => 1,
pos => 0,
slurpy => 1,
},
},
};
sub show_colors {
require Color::ANSI::Util;
require Graphics::ColorNamesLite::All;
#require String::Escape; # ugly: \x1b...
require Data::Dmp;
my $codes = $Graphics::ColorNamesLite::All::NAMES_RGB_TABLE;
my %args = @_;
my @colornames;
my @colorcodes;
if ($args{_colors_hash}) {
@colornames = sort keys %{ $args{_colors_hash} };
@colorcodes = map { $args{_colors_hash}{$_} } @colornames;
} else {
@colornames = @colorcodes = @{ $args{colors} };
}
my @rows;
for my $j (0 .. $#colornames) {
my $colorname = $colornames[$j];
my $colorcode = $colorcodes[$j];
unless ($colorcode =~ /\A[0-9A-fa-f]{6}\z/) {
$colorcode = $codes->{$colorcode}; defined $colorcode or die "Unknown color name '$colorcode'";
}
my $ansifg = Color::ANSI::Util::ansifg($colorcode);
my $ansibg = Color::ANSI::Util::ansibg($colorcode);
push @rows, {
name => $colorname,
rgb_code => $colorcode,
ansi_fg_code => Data::Dmp::dmp($ansifg),
ansi_bg_code => Data::Dmp::dmp($ansibg),
fg =>
$ansifg . "This is text with foreground color $colorname (#$colorcode)" . Color::ANSI::Util::ansi_reset(1) . "\n" .
$ansifg . "\e[1m" . "This is text with foreground color $colorname (#$colorcode) + BOLD" . Color::ANSI::Util::ansi_reset(1) . "\n",
bg => $ansibg . Color::ANSI::Util::ansifg(Color::RGB::Util::rgb_is_light($colorcode) ? "000000":"ffffff") . "This is text with background color $colorname (#$colorcode)" . Color::ANSI::Util::ansi_reset(1),
};
}
[200, "OK", \@rows];
}
$SPEC{show_colors_from_scheme} = {
v => 1.1,
summary => 'Show colors from a Graphics::ColorNames scheme',
args => {
scheme => {
schema => 'perl::colorscheme::modname*',
req => 1,
pos => 0,
},
},
};
sub show_colors_from_scheme {
my %args = @_;
my $mod = "Graphics::ColorNames::$args{scheme}";
(my $modpm = "$mod.pm") =~ s!::!/!g;
require $modpm;
my $table = $mod->NamesRgbTable;
show_colors(colors => [sort keys %$table]);
}
$SPEC{show_colors_from_theme} = {
v => 1.1,
summary => 'Show colors from a ColorTheme scheme',
args => {
theme => {
schema => 'perl::colortheme::modname_with_optional_args*',
req => 1,
pos => 0,
},
},
links => [
{url=>'prog:show-color-theme-swatch'},
],
};
sub show_colors_from_theme {
require Module::Load::Util;
my %args = @_;
my $mod = $args{theme}; $mod = "ColorTheme::$mod" unless $mod =~ /^ColorTheme::/;
my $theme = Module::Load::Util::instantiate_class_with_optional_args($mod);
my @item_names = $theme->list_items;
my %colors;
for my $item ($theme->list_items) {
my $k = $item;
my $v = $theme->get_item_color($item);
if (ref $v) {
$k = "$k (hash or coderef)";
$v = "ffffff";
}
$colors{$k} = $v;
}
show_colors(_colors_hash =>\%colors);
}
( run in 1.728 second using v1.01-cache-2.11-cpan-d8267643d1d )