termcol: hover title with decimal r,g,b values
[sheet.git] / termcol.plp
1 <(common.inc.plp)><:
2         our $VERSION = 'v1.0';
3
4         use List::Util 'min';
5
6 :><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
7  "http://www.w3.org/TR/html4/loose.dtd">
8 <html lang="en">
9
10 <head>
11 <meta http-equiv="content-type" content="utf-8">
12 <title>terminal colour cheat sheet</title>
13 <meta name="description" content="Index of all terminal/console colour codes, with an example result of various environments.">
14 <meta name="keywords" content="color, code, terminal, console, escape, table, xterm, rxvt">
15 <:= stylesheet(qw'light dark') :>
16 <link rel="icon" type="image/png" href="/clip.png">
17 </head>
18
19 <body id="colour">
20 <h1>Terminal colours</h1>
21
22 <div class="section">
23 <:
24 sub luminance {
25         # perceived brightness (using ITU-R recommendation 601 luma co-efficients)
26         my ($r, $g, $b) = @_;
27         return $r*.299 + $g*.587 + $b*.114;
28 }
29
30 sub colcell {
31         my $id = shift;
32         my @rgb = @_ >= 3 ? @_ : (map {hex} $_[0] =~ /(..)/g);
33         my $rgb24 = '';
34         $rgb24 .= sprintf '%X', min($_ / 17 + .5, 15) for @rgb[0..2];
35         my $rgb48 = '';
36         $rgb48 .= sprintf '%02X', $_ for @rgb[0..2];
37         my $inverse = sprintf('%X', luminance(@rgb)/255 < .3 ? 12 : 0) x 3;
38         return sprintf '<td title="%s" style="%s">%s<td style="%s">%s<td style="%s">%s'."\n",
39                 join(',', map { int } @rgb[0..2]),
40                 "background:#$rgb48; color:#$inverse; padding:0 1ex",
41                 $id,
42                 "background:#000; color:#$rgb48",
43                 $rgb24,
44                 "background:#FFF; color:#$rgb48",
45                 $rgb24,
46 }
47
48 my %col = (
49         -html => [
50                 qw/black maroon green olive  navy purple  cyan silver
51                    gray  red    lime  yellow blue fuchsia aqua white/,
52                 qw/reset bold dim italic underline blink fastblink
53                    reverse hidden/,
54         ],
55         html => [
56                 qw/000000 CCCCCC/,
57                 qw/000000 800000 008000 808000 000080 800080 008080 C0C0C0
58                    808080 FF0000 00FF00 FFFF00 0000FF FF00FF 00FFFF FFFFFF/,
59         ],
60         cga => [
61                 qw/000000 CCCCCC/,
62                 qw/000000 AA0000 00AA00 AA5500 0000AA AA00AA 00AAAA AAAAAA
63                    555555 FF5555 55FF55 FFFF55 5555FF FF55FF 55FFFF FFFFFF/,
64         ],
65         xterm => [
66                 qw/000000 CCCCCC/,
67                 qw/000000 CC0000 00CC00 CCCC00 4682B4 CC00CC 00CCCC E5E5E5
68                    4C4C4C FF0000 00FF00 FFFF00 1E90FF FF00FF 00FFFF FFFFFF/,
69         ],
70         tango => [
71                 qw/000000 CCCCCC/,
72                 qw/2E3436 CC0000 4E9A06 C4A000 3465A4 75507B 06989A D3D7CF
73                    555753 EF2929 8AE234 FCE94F 729FCF AD7FA8 34E2E2 EEEEEC/,
74         ],
75 );
76
77 for my $term (qw/html cga xterm tango/) {
78         print '<table>', "\n";
79         print "<caption>$term</caption>\n";
80         for my $num (0 .. 15) {
81                 my $rgb = $col{$term}[$num + 2];
82                 print '<tr>',
83                         colcell($col{"-$term"}[$num] || $num, $rgb, $col{$term}[0]);
84         }
85         print "</table>\n\n";
86 }
87 :></div>
88
89 <hr>
90
91 <div class="section">
92 <h2>88-colour space</h2>
93 <:
94 for my $r (0 .. 3) {
95         print '<table>';
96         for my $g (0 .. 3) {
97                 print '<tr>';
98                 for my $b (0 .. 3) {
99                         my $index = $r*4*4 + $g*4 + $b + 16;
100                         print colcell($index, map {(0, 139, 205, 255)[$_]} $r, $g, $b);
101                 }
102         }
103         print "</table>\n";
104 }
105 print "\n";
106
107 print '<table><tr>';
108 print colcell(80+$_, (($_ + 2 + ($_>0)) * 255/11) x 3) for 0 .. 7;
109 print "</table>\n\n";
110
111 :></div>
112 <: if ($ENV{PATH_INFO} =~ /256/) { :>
113 <hr>
114
115 <div class="section">
116 <h2>256-colour space</h2>
117 <:
118 for my $r (0 .. 5) {
119         print '<table>';
120         for my $g (0 .. 5) {
121                 print '<tr>';
122                 for my $b (0 .. 5) {
123                         my $index = $r*6*6 + $g*6 + $b + 16;
124                         print colcell($index, map { $_ && $_*40 + 55 } $r, $g, $b);
125                 }
126         }
127         print "</table>\n";
128 }
129 print "\n";
130
131 for my $row (0, 12) {
132         print '<table><tr>';
133         print colcell(232+$_, ($_*10 + 8) x 3) for $row .. $row+11;
134         print "</table>\n";
135 }
136 print "\n";
137
138 :></div>
139 <: } :>
140 <hr>
141
142 <p class="footer">
143         <a href="/" rel="home">sheet.shiar.nl</a>/termcol.<a href="/source/termcol.plp"
144          rel="code" title="Written in Perl">plp</a>
145         <a href="http://git.shiar.nl/sheet.git/history/HEAD:/termcol.plp"
146          rel="vcs-git" title="Git repository"><:= $VERSION :></a>
147         created by <a href="http://shiar.nl/" rel="author">Shiar</a> •
148         <a href="http://www.fsf.org/licensing/licenses/agpl-3.0.html" rel="copyright"
149          title="Licensed under the GNU Affero General Public License, version 3">AGPLv3</a>
150 </p>
151
152 </html>