App-ansicolumn
view release on metacpan or search on metacpan
lib/App/ansicolumn.pm view on Meta::CPAN
$result{lc $key} = [ $offset, $s ];
}
%result ? \%result : 0;
}
# Overlay labels onto a border line string.
# $fs/$fe: fill region start/end.
# $ml/$mr: border margin accessible via @0.
# $n/$p: pane number / page number for sprintf expansion.
# $file: filename (path as given) - used as %3$s (basename) and %4$s (path as given).
sub _overlay_labels {
my($obj, $str, $fs, $fe, $ml, $mr, $n, $p, $file, $left, $center, $right) = @_;
use File::Basename qw(basename);
use Text::ANSI::Fold::Util qw(ansi_substr);
my $base = defined $file ? basename($file) : '';
for my $item (
[ $left, sub { $fs - $ml + ($_[0] // $ml) } ],
[ $right, sub { $fe + $mr - ($_[0] // $mr) - $_[1] } ],
[ $center, sub { $fs + int(($fe - $fs - $_[1]) / 2) } ],
) {
my($spec, $pos_fn) = @$item;
lib/App/ansicolumn.pm view on Meta::CPAN
for my $set ([ \@pane_top, \@page_top, qw(nw n ne) ],
[ \@pane_bottom, \@page_bottom, qw(sw s se) ]) {
my($pane_list, $page_list, @keys) = @$set;
if ($bl) {
my @g = map { $bl->{$_} } @keys;
if (grep { $_ } @g) {
my $fp = $bw_l;
for my $i (0 .. $obj->panes - 1) {
my($fs, $fe) = ($fp, $fp + $span);
push @$pane_list, sub {
$obj->_overlay_labels($_[0], $fs, $fe, $bw_l, $bw_r,
$_[1] + $i + 1, $_[2], $_[3], @g);
};
$fp += $span + $bw_c;
}
}
}
if ($pbl) {
my @g = map { $pbl->{$_} } @keys;
if (grep { $_ } @g) {
push @$page_list, sub {
my $w = ansi_width($_[0]);
$obj->_overlay_labels($_[0], 1, $w - 1, 1, 1,
$_[1] + 1, $_[2], $_[3], @g);
};
}
}
}
}
my $has_labels = @pane_top || @pane_bottom || @page_top || @page_bottom;
# pre-build border strings for 3 positions (top=0, middle=1, bottom=2)
( run in 0.905 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )