X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=lib%2FApp%2FCodeowners.pm;h=c3d01d30ba4151be5ab30e6249bdf7aeb7864d99;hb=fdaa0928fed110d4867b2e08df9497c66ef7718b;hp=eebe058be5e9e61a1d6ecb29e0f8f8a4f406b698;hpb=67e86f990f2556f12465052911eb7b96a03b8dcc;p=chaz%2Fgit-codeowners diff --git a/lib/App/Codeowners.pm b/lib/App/Codeowners.pm index eebe058..c3d01d3 100644 --- a/lib/App/Codeowners.pm +++ b/lib/App/Codeowners.pm @@ -8,7 +8,7 @@ use strict; use App::Codeowners::Options; use App::Codeowners::Util qw(find_codeowners_in_directory run_git git_ls_files git_toplevel stringf); -use Color::ANSI::Util qw(ansifg ansi_reset); +use Color::ANSI::Util 0.03 qw(ansifg); use Encode qw(encode); use File::Codeowners; use Path::Tiny; @@ -174,11 +174,14 @@ sub _format { my $rows = $args{rows} || []; if ($format eq 'table') { - eval { require Text::Table } or die "Missing dependency: Text::Table\n"; + eval { require Text::Table::Any } or die "Missing dependency: Text::Table::Any\n"; - my $table = Text::Table->new(@$headers); - $table->load(map { [map { _stringify($_) } @$_] } @$rows); - print { $fh } encode('UTF-8', "$table"); + my $table = Text::Table::Any::table( + header_row => 1, + rows => [$headers, map { [map { _stringify($_) } @$_] } @$rows], + backend => $ENV{PERL_TEXT_TABLE}, + ); + print { $fh } encode('UTF-8', $table); } elsif ($format =~ /^json(:pretty)?$/) { my $pretty = !!$1; @@ -275,7 +278,7 @@ sub _expand_filter_args { for (my $i = 0; $i < @filters; ++$i) { my $filter = $filters[$i] or next; - if ($filter =~ /^(?:nocolor|color:([0-9a-fA-F]{6}))$/) { + if ($filter =~ /^(?:nocolor|color:([0-9a-fA-F]{3,6}))$/) { $color_override = $1 || ''; splice(@filters, $i, 1); redo; @@ -285,14 +288,21 @@ sub _expand_filter_args { return (\@filters, $color_override); } +sub _ansi_reset { "\033[0m" } + sub _colored { my $text = shift; my $rgb = shift or return $text; - # ansifg honors NO_COLOR already, but ansi_reset does not. return $text if $ENV{NO_COLOR}; - my ($begin, $end) = (ansifg($rgb), ansi_reset); + $rgb =~ s/^(.)(.)(.)$/$1$1$2$2$3$3/; + if ($rgb !~ m/^[0-9a-fA-F]{6}$/) { + warn "Color value must be in 'ffffff' or 'fff' form.\n"; + return $text; + } + + my ($begin, $end) = (ansifg($rgb), _ansi_reset); return "${begin}${text}${end}"; }