use 5.010;
use Shiar_Sheet::Colour '1.04';
use List::Util qw( min max );
+use POSIX qw( ceil );
my $palettes = do 'termcol.inc.pl';
die "Cannot open palette data: $_\n" for $@ || $! || ();
print "</table>\n\n";
}
- if (my $colours = $info->{list}) {
- if (my $reorder = $info->{ansiorder} and $get{v}) {
- $colours = [ map { $colours->[$_] =~ s/:|$/:$_/r } @{$reorder} ];
- }
+ if (my $palette = $info->{list}) {
+ my $order = $get{order} && $get{order}.'order';
+ my $colours = colorder($palette,
+ $info->{$order} // $palettes->{ $info->{parent} }->{$order}
+ );
+
+ my $rows = 8;
+ my $columns = ceil(@{$palette} / $rows);
print '<table class=color>', "\n";
printf "<caption>%s</caption>\n", $caption;
- for my $num (0 .. $#{$colours}) {
- my ($rgb, $name) = split /:/, $colours->[$num], 3;
- $name ||= $num;
- $name = [ $name, [] ] if $term =~ /^msx/ and !$num;
- $name = [ $name, ['#333'] ] if $term eq 'xkcd';
- print '<tr>', colcell($name, $rgb);
+ for my $row (0 .. $rows - 1) {
+ print '<tr>';
+ for my $col (0 .. $columns - 1) {
+ my $num = $row + $col * $rows;
+ my ($rgb, $name) = split /:/, $colours->[$num], 3;
+ $name //= $rgb && $num;
+ $name = [ $name, [] ] if $term =~ /^msx/ and !$num;
+ $name = [ $name, ['#333'] ] if $term eq 'xkcd';
+ print colcell($name, $rgb);
+ }
}
- print '<tr><td>', img_egapal(\@{$colours}, @{$_}) for @draw;
+ for (@draw) {
+ my $imgpal = colorder($palette,
+ $info->{ansiorder} // $palettes->{ $info->{parent} }->{ansiorder}
+ );
+ print "<tr><td colspan=$columns>", img_egapal($imgpal, @{$_});
+ }
print "</table>\n\n";
}
}
+sub colorder {
+ my ($palette, $reorder) = @_;
+ return [ map { $palette->[$_] =~ s/:|$/:$_/r } @{$reorder} ];
+ if $reorder;
+ return $palette;
+}
+
sub coltable_hsv {
my ($dim, $rgbval, $greyramp) = @_;
}
$h = 1; # greyscale hue
- $s = 1; # lowest saturation for other hues
- $v = $s = $vmax if !$v; # black at full saturation
+ $s = $smax - $v + 1; # spread brightness over saturation groups
+ $v &&= $smax # highest saturation
+ or $v = $s = 1; # black at initial column
}
$h *= $hmax;
my $huerow = $colmap[0][0]; # first {$_} map { @{$_} } @colmap;
for my $h (grep { $huerow->[$_] } 0 .. $#{$huerow}) {
$out .= '<tr>';
- $out .= colcell(@$_) for map { $_->[$h] } map { @{$_} } @colmap;
+ $out .= colcell(@$_) for map { $_->[$h] } map { reverse @{$_} } @colmap;
}
if (@greymap) {