if ($opt{markers} and $size > 0) {
for my $markspec (split /\h/, $opt{markers}) {
my ($char, $func) = split //, $markspec, 2;
+ my $increment = $func =~ s/[+]\z//;
my @pos = eval {
if ($func eq 'avg') {
return sum(@order) / @order;
$pos -= $minval;
$pos &&= log $pos if $opt{log};
$pos >= 0 or next;
- color(36) for $barmark[$pos / $range * $size] = $char;
+ $increment ||= $minval && !$pos;
+ color(36) for $barmark[$pos / $range * $size + $increment] = $char;
}
}
-barcat --markers=')0v (100v' input/ascii.txt # TODO position before marker character
+barcat --markers=')0v (100v' input/ascii.txt
123e-6 micro (---------------------
.1 long line (---------------------)
-1 (--------------
-barcat --graph-format=─ --markers='550v 00v 11v 999v ^100v' input/ascii.txt
-123e-6 micro ──9──────────5────────
- .1 long line ──9──────────5────────1
- -1 ──9──────────5─
- -2 ──9────
+barcat --graph-format=─ --markers='550v 11v 00v 999v 0100v' input/ascii.txt
+123e-6 micro 0─9──────────5────────
+ .1 long line 0─9──────────5────────0
+ -1 0─9──────────5─
+ -2 0─9────
-3