termcol: path argument to request custom palettes, groups
[sheet.git] / termcol.plp
index a040eed1aa161c9661052319977c687889eb01bb..32a73560285a0fb4a9f096b859b3ee1404536972 100644 (file)
@@ -14,6 +14,19 @@ Html({
        stylesheet => [qw'light dark'],
 });
 
+my @termlist;
+push @termlist, split /\W+/, $ENV{PATH_INFO} || 'default';
+
+my %termgroup = (
+       default => [qw( ansi xkcd ansi88 )],
+       more    => [qw( ansi legacy ansi256 )],
+       msx     => [qw( msx1 msx2 arnejmp )],
+       ansi    => [qw( cga xterm tango app html )],
+       legacy  => [qw( c64 msx2 mac2 risc arnegame cpc )],
+);
+@{$_} = map { $termgroup{$_} ? @{ $termgroup{$_} } : $_ } @{$_}
+       for values %termgroup, \@termlist;
+
 :>
 <h1>Terminal colours</h1>
 
@@ -22,8 +35,8 @@ Html({
 as implemented by various systems and programs.
 <:
 print
-       !exists $get{v} ? 'Also see <a href="?v">8-bit legacy hardware</a> palettes.' :
-       'Also included are 8-bit legacy hardware palettes.';
+       "@termlist" ne "@{ $termgroup{default} }" ? 'Additional palettes are included as specified.' :
+       'Also see <a href="/termcol/more">8-bit legacy hardware</a> palettes.';
 :>
 </p>
 
@@ -55,28 +68,6 @@ sub colcell {
        return "$out\n";
 }
 
-if ($get{v}) {
-       my %reorder = (
-               arnegame => [ 0,5,9,12 , 3,6,10,13,1 , 4,7,8,11,14,15,2 ],
-               arnegame => [ 0,3,10,6,12,9,13,1 , 5,7,11,8,14,4,15,2 ],
-               c64 => [ 0,2,5,9,6,4,3,15 , 11,10,13,7,14,8,12,1 ],
-               msx2 => [ 0,6,2,10,4,13,7,14 , 1,8,3,11,5,9,12,15 ],
-               risc => [ 7,11,13,14,8,12,15,1, 6,5,10,9,4,3,2,0],
-               mac2 => [ 15,3,9,11,6,5,7,12 , 14,2,8,1,13,4,10,0 ],
-       );
-       $reorder{$_} = $reorder{msx2} for qw( msx1 arnejmp );
-       while (my ($name, $order) = each %reorder) {
-               for my $pal ( $palettes->{$name}) {
-                       $pal = [ map { $pal->[$_ + 1] =~ s/:|$/:$_/r } -1, @{$order} ];
-               }
-       }
-}
-
-my @termlist = qw( cga xterm tango app html xkcd );
-push @termlist, qw( c64 msx2 mac2 risc arnegame cpc ) if exists $get{v};
-push @termlist, qw( ansi88 );
-push @termlist, qw( ansi256 ) if $ENV{PATH_INFO} =~ /256/;
-
 for my $term (@termlist) {
        my $info = $palettes->{$term};
        ref $info eq 'HASH' or next;
@@ -99,11 +90,16 @@ for my $term (@termlist) {
        }
 
        if (my $colours = $info->{list}) {
+               if (my $reorder = $info->{ansiorder} and $get{v}) {
+                       $colours = [ map { $colours->[$_] =~ s/:|$/:$_/r } @{$reorder} ];
+               }
+
                print '<table>', "\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);
                }