X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/36cc824ce76ec496c1eecfa33d2d3c8957e84951..4f3782455010e83df98953a4fa4f146577b9a888:/termcol.plp diff --git a/termcol.plp b/termcol.plp index affceb9..850ff83 100644 --- a/termcol.plp +++ b/termcol.plp @@ -24,7 +24,7 @@ my %termgroup = ( default => [qw( ansi xkcd ansi88 )], more => [qw( ansi mirc legacy ansi256 )], msx => [qw( msx1 msx2 arnejmp )], - ansi => [qw( cga xterm tango app html )], + ansi => [qw( cga xterm tango app html cgarne )], legacy => [qw( c64 msx2 mac2 risc arnegame cpc )], ); @{$_} = map { $termgroup{$_} ? @{ $termgroup{$_} } : $_ } @{$_} @@ -48,6 +48,7 @@ print 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 $@ || $! || (); @@ -126,26 +127,56 @@ for my $term (@termlist) { print "\n\n"; } - if (my $colours = $info->{list}) { - if (my $reorder = $info->{ansiorder} and $get{v}) { - $colours = [ map { $colours->[$_] =~ s/:|$/:$_/r } @{$reorder} ]; + if (my $table = $info->{table}) { + print ''."\n"; + printf "\n", $caption; + for my $row (@$table) { + print ''; + print colcell(@$_) for @$row; } + print "
%s
\n\n"; + } + + 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 '', "\n"; printf "\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 '', colcell($name, $rgb); + for my $row (0 .. $rows - 1) { + print ''; + 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 '
%s
', img_egapal(\@{$colours}, @{$_}) for @draw; + for (@draw) { + my $imgpal = colorder($palette, + $info->{ansiorder} // $palettes->{ $info->{parent} }->{ansiorder} + ); + print "
", img_egapal($imgpal, @{$_}); + } print "
\n\n"; } } +sub colorder { + my ($palette, $reorder) = @_; + return [ map { $palette->[$_] =~ s/:(?![^:])|$/:$_/r } @{$reorder} ] + if $reorder; + return $palette; +} + sub coltable_hsv { my ($dim, $rgbval, $greyramp) = @_; @@ -171,8 +202,9 @@ sub coltable_hsv { } $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; @@ -189,7 +221,7 @@ sub coltable_hsv { my $huerow = $colmap[0][0]; # first {$_} map { @{$_} } @colmap; for my $h (grep { $huerow->[$_] } 0 .. $#{$huerow}) { $out .= ''; - $out .= colcell(@$_) for map { $_->[$h] } map { @{$_} } @colmap; + $out .= colcell(@$_) for map { $_->[$h] } map { reverse @{$_} } @colmap; } if (@greymap) {