'usage|h' => sub {
local $/;
my $pod = readline *DATA;
- $pod =~ s/^=over\K/ 22/m; # indent options list
+ $pod =~ s/^=over\K/ 25/m; # indent options list
$pod =~ s/^=item \N*\n\n\N*\n\K(?:(?:^=over.*?^=back\n)?(?!=)\N*\n)*/\n/msg;
+ $pod =~ s/[.,](?=\n)//g; # trailing punctuation
+ $pod =~ s/^=item \K(?=--)/____/gm; # align long options
+ # abbreviate <variable> indicators
+ $pod =~ s/\Q>.../s>/g;
+ $pod =~ s/<(?:number|count|seconds)>/N/g;
+ $pod =~ s/<character(s?)>/\Uchar$1/g;
+ $pod =~ s/\Q | /|/g;
+ $pod =~ s/(?<!\w)<([a-z]+)>/\U$1/g; # uppercase
require Pod::Usage;
- my $parser = Pod::Usage->new;
+ my $parser = Pod::Usage->new(USAGE_OPTIONS => {
+ -indent => 2, -width => 78,
+ });
$parser->select('SYNOPSIS', 'OPTIONS');
$parser->output_string(\my $contents);
$parser->parse_string_document($pod);
$contents =~ s/\n(?=\n\h)//msg; # strip space between items
+ $contents =~ s/^ \K____/ /gm; # nbsp substitute
print $contents;
exit;
},
$order[0]
) // 0;
my $minval = $opt{minval} // min $order[-1] // (), 0;
+my $range = $maxval - $minval;
my $lenval = $opt{'value-length'} // max map { length } @order;
my $len = defined $opt{trim} && $opt{trim} <= 0 ? -$opt{trim} + 1 :
max map { length $values[$_] && length $lines[$_] }
0 .. min $#lines, $opt{hidemax} || (); # left padding
-my $size = ($maxval - $minval) &&
- ($opt{width} - $lenval - $len) / ($maxval - $minval); # bar multiplication
+my $size = $range &&
+ ($opt{width} - $lenval - $len) / $range; # bar multiplication
my @barmark;
if ($opt{markers} and $size > 0) {
($lastmax - $minval) * $size + .5,
'-' x (($values[$nr - 1] - $minval) * $size);
print color(92);
- say '+' x (($maxval - $lastmax - $minval) * $size + .5);
+ say '+' x (($range - $lastmax) * $size + .5);
print color(0);
$lastmax = $maxval;
}
say(
color(31), sprintf('%*s', $lenval, $minval),
color(90), '-', color(36), '+',
- color(32), sprintf('%*s', $size * ($maxval - $minval) - 3, $maxval),
+ color(32), sprintf('%*s', $size * $range - 3, $maxval),
color(90), '-', color(36), '+',
color(0),
) if $opt{header};
while ($nr <= $#lines) {
$nr >= $opt{hidemax} and last if defined $opt{hidemax};
my $val = $values[$nr];
- my $rel = length $val && ($val - $minval) / ($maxval - $minval);
+ my $rel = length $val && $range && ($val - $minval) / $range;
my $color = !length $val || !$opt{palette} ? undef :
$val == $order[0] ? $opt{palette}->[-1] : # max
$val == $order[-1] ? $opt{palette}->[0] : # min
Defaults on if output is a tty,
disabled otherwise such as when piped or redirected.
-=item -f, --field=(<number>|<regexp>)
+=item -f, --field=(<number> | <regexp>)
Compare values after a given number of whitespace separators,
or matching a regular expression.
Also changes an exponent I<1.602176634e-19> to I<160.2z>.
Short integers are aligned but kept without decimal point.
-=item -t, --interval[=(<seconds>|-<lines>)]
+=item -t, --interval[=(<seconds> | -<lines>)]
Output partial progress every given number of seconds or input lines.
An update can also be forced by sending a I<SIGALRM> alarm signal.
the last is used for values equal to the maximum, the first for minima.
If unspecified, these are green and red respectively (I<31 90 32>).
-=item --spark[=<glyphs>]
+=item --spark[=<characters>]
Replace lines by I<sparklines>,
single characters corresponding to input values.