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.717 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )