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 )