termcol: include and mark duplicate colours in ppu
[sheet.git] / termcol.plp
index 3aece81cf64f052ba6fa37283e854d34788e2891..26a5c70e4343d71a343484ee7a91f3a1e6c30624 100644 (file)
@@ -1,14 +1,15 @@
 <(common.inc.plp)><:
 
 Html({
-       title => 'terminal colour cheat sheet',
+       title => ($Request ? 'terminal colour' : 'colour palettes') . ' cheat sheet',
        version => '1.1',
-       description => [
+       description => [!$Request ? "Comparison of various colour palettes." : (
                "Index of all terminal/console colour codes,",
                "with an example result of various environments.",
-       ],
+       )],
        keywords => [qw'
-               color code terminal console escape table xterm rxvt
+               color colour code terminal console escape table xterm rxvt
+               ansi vt100 8bit 4bit cga ega vga rgb hsv game emulator display
        '],
        data => ['termcol.inc.pl'],
        stylesheet => [qw'light dark'],
@@ -20,18 +21,22 @@ my @draw = map { [$_, s/\W+\z//] } grep { $_ } split m(/),
 my @termlist;
 push @termlist, split /\W+/, $Request || 'default';
 
-:>
-<h1>Terminal colours</h1>
+say "<h1>$_</h1>\n" for $Request ? 'Colour palettes' : 'Terminal colours';
 
-<p>
-<span title="ECMA-48">ANSI</span> (VT100, ISO-6429) 16-colour text palette
-as implemented by various systems and programs.
-<:
-print
-       "@termlist" ne 'default' ? 'Additional palettes are included as specified.' :
-       'Also see <a href="/termcol/more">8-bit legacy hardware</a> palettes.';
+say '<p>';
+if ("@termlist" eq 'default') {
+       say '<span title="ECMA-48">ANSI</span> (VT100, ISO-6429) 16-colour text palette';
+       say 'as implemented by various systems and programs.';
+       say 'Also see <a href="/termcol/legacy">8-bit legacy hardware</a> palettes.';
+}
+elsif ("@termlist" eq 'legacy') {
+       say 'Colour palettes of various 8-bit legacy systems and retro games.';
+       say 'Also see <a href="/termcol">ANSI console</a> palettes.';
+}
+else {
+       say 'Comparison of requested colour palettes.';
+}
 :>
-</p>
 
 <div class="section">
 <:
@@ -41,8 +46,6 @@ use POSIX qw( ceil );
 
 my $palettes = do 'termcol.inc.pl';
 die "Cannot open palette data: $_\n" for $@ || $! || ();
-my $more = do 'termcol-xcolor.inc.pl' || {};
-$palettes = {%$palettes, %$more};
 
 sub colcell {
        my $name = shift // return "<td>\n";
@@ -103,9 +106,15 @@ sub coltable {
 
        if (ref $info eq 'ARRAY') {
                coltable($_) for @{$info};
+               return;
+       }
+
+       if (ref $info eq 'CODE') {
+               coltable($_) for $info->($palettes);
+               return;
        }
 
-       ref $info eq 'HASH' or next;
+       ref $info eq 'HASH' or return;
 
        my $caption = $info->{name} // $term;
        $caption = sprintf('<%s %s>%s</%1$s>',
@@ -129,6 +138,10 @@ sub coltable {
                say '<table class="color mapped">';
                say sprintf '<caption>%s</caption>', $caption;
                for my $row (@$table) {
+                       if (!$row) {
+                               say '<tbody>';
+                               next;
+                       }
                        print '<tr>';
                        print colcell(ref $_ ? @$_ : $_ ? reverse split /:/ : undef) for @$row;
                }