browser: define known 0% score markers
[sheet.git] / termcol.inc.pl
1 use strict;
2 use 5.010;
3 use Shiar_Sheet::Colour '1.02';
4
5 +{
6         html => {
7                 title => 'HTML keywords (inherited by CSS≥2.1 and SVG), mostly identical to X11',
8                 href => 'http://www.w3.org/TR/css3-color/#html4',
9                 list => [qw(
10                         000000:black 800000:maroon  008000:green 808000:olive
11                         000080:navy  800080:purple  008080:cyan  C0C0C0:silver
12                         808080:gray  FF0000:red     00FF00:lime  FFFF00:yellow
13                         0000FF:blue  FF00FF:fuchsia 00FFFF:aqua  FFFFFF:white
14                 )],
15                 parent => 'cga',
16         },
17         cga => {
18                 # linux console, kde?
19                 list => [qw(
20                         000000 AA0000 00AA00 AA5500 0000AA AA00AA 00AAAA AAAAAA
21                         555555 FF5555 55FF55 FFFF55 5555FF FF55FF 55FFFF FFFFFF
22                 )],
23                 # reset bold dim italic underline blink fastblink reverse hidden
24                 hueorder => [ 1,3,2,6,4,5, 0,7 , 9,11,10,14,12,13, 8,15 ],
25         },
26         xterm => {
27                 # rxvt except for blues
28                 list => [qw(
29                         000000 CC0000 00CC00 CCCC00 4682B4 CC00CC 00CCCC E5E5E5
30                         4C4C4C FF0000 00FF00 FFFF00 1E90FF FF00FF 00FFFF FFFFFF
31                 )],
32                 parent => 'cga',
33         },
34         tango => {
35                 # default Gnome theme
36                 list => [qw(
37                         2E3436 CC0000 4E9A06 C4A000 3465A4 75507B 06989A D3D7CF
38                         555753 EF2929 8AE234 FCE94F 729FCF AD7FA8 34E2E2 EEEEEC
39                 )],
40                 parent => 'cga',
41         },
42         xkcd => {
43                 title => 'human averages in xkcd survey results',
44                 href => 'http://blog.xkcd.com/2010/05/03/color-survey-results/',
45                 list => [qw(
46                         000000:black 650021:maroon  15b01a:green 6e750e:olive
47                         01153e:navy  7e1e9c:purple  029386:teal  c5c9c7:silver
48                         929591:grey  e50000:red     aaff32:lime  ffff14:yellow
49                         0343df:blue  ed0dd9:fuchsia 00ffff:cyan  ffffff:white
50                 )],
51                 parent => 'cga',
52         },
53         android => {
54                 href => 'http://developer.android.com/guide/practices/ui_guidelines/icon_design.html',
55                 title => 'recommended colour palette for Android icons',
56                 list => [qw(
57                         FFFFFF:white   BFBFBF:light   808080:medium  404040:dark
58                         000000:black   6699FF:blue1   3366CC:blue2   003399:blue3
59                         99CC33:green1  00CC00:green2  669933:green3  FFCC00:orange1
60                         FF9900:orange2 FF6600:orange3 CC0000:red
61                 )],
62         },
63         app => {
64                 name => 'Term.app',
65                 title => 'Mac OSX Yosemite Terminal app',
66                 list => [qw(
67                         000000 990B00 35A600 999900 0000B3 B304B2 31A6B3 BFBFBF
68                         666666 E51600 48D901 E5E600 0100FF E607E5 48E6E6 E6E5E6
69                 )],
70                 parent => 'cga',
71         },
72         iterm => {
73                 name => 'iTerm',
74                 title => 'iTerm v2.2.1',
75                 list => [qw(
76                         000000 BB0000 00BB00 BBBB00 0000BB BB00BB 00BBBB BBBBBB
77                         555555 FF5555 55FF55 FFFF55 5555FF FF55FF 55FFFF FFFFFF
78                 )],
79                 parent => 'cga',
80         },
81         pastel => {
82                 name => 'iTerm Pastel',
83                 list => [qw(
84                         4F4F4F FF6C60 A8FF60 FFFFB6 96CBFE FF73FD C6C5FE EEEEEE
85                         7C7C7C FFB6B0 CEFFAC FFFFCC B5DCFF FF9CFE DFDFFE FFFFFF
86                 )],
87                 parent => 'cga',
88         },
89         putty => {
90                 name => 'PuTTY',
91                 list => [qw(
92                         000000 BB0000 00BB00 BBBB00 0000BB BB00BB 00BBBB BBBBBB
93                         555555 FF5555 55FF55 FFFF55 5555FF FF55FF 55FFFF FFFFFF
94                 )],
95                 parent => 'cga',
96         },
97         slutty => {
98                 name => 'SluTTY',
99                 href => 'http://www.npjh.com/slutty.html',
100                 title => 'PuTTY fork with light colour scheme',
101                 list => [qw(
102                         000000 9C1D1D 6C9446 AC9A47 335786 8F6496 486768 E0DCDC
103                         2F2F2F CD5757 8FC35B D1C45E 5C81A9 BC95B7 76CBCB EEEEEC
104                 )],
105                 parent => 'cga',
106         },
107         mirc => {
108                 name => 'mIRC',
109                 href => 'http://www.mirc.com/colors.html',
110                 list => [qw(
111                         FFFFFF 000000 00007F 009300 FF0000 7F0000 9C009C FC7F00
112                         FFFF00 00FC00 009393 00FFFF 0000FC FF00FF 7F7F7F D2D2D2
113                 )],
114                 ansiorder => [ 1,5,3,7,2,6,10,15 , 14,4,9,8,12,13,11,0  ],
115                 hueorder => [ 5,7,3,10,2,6, 1,15 , 4,8,9,11,12,13, 14,0 ],
116         },
117         mac2 => {
118                 name => 'MacII',
119                 list => [qw(
120                         FFFFFF FBF305 FF6403 DD0907 F20884 4700A5 0000D3 02ABEA
121                         1FB714 006412 562C05 90713A C0C0C0 808080 404040 000000
122                 )],
123                 ansiorder => [ 15,3,9,11,6,5,7,12 , 14,2,8,1,10,4,13,0 ],
124                 hueorder => [ 3,2,1,8,7,6,5,4 , 10,11,9 , 15,14,13,12,0 ],
125         },
126         risc => {
127                 name => 'RISC',  # v2/3
128                 list => [qw(
129                         FFFFFF DDDDDD BBBBBB 999999 777777 555555 333333 000000
130                         004499 EEEE00 00CC00 DD0000 EEEEBB 558800 FFBB00 00BBFF
131                 )],
132                 ansiorder => [ 7,5,13,14,4,3,2,1 , 6,11,10,9,8,12,15,0 ],
133                 hueorder => [ 11,14,9,12,13,10,15,8 , reverse 0..7 ],
134         },
135         c64 => {
136                 name => 'C=64',  # commodore 64/128
137                 list => [ map {
138                         # 5-bit luma ± 2-bit colour angle
139                         my ($y, $neg, $hue) = split /(-)|\+/;
140
141                         # convert to yuv
142                         my ($u, $v) = (0, 0);
143                         if (defined $hue) {
144                                 my $RAD = 3.14159;
145                                 $hue *= $RAD / 8;
146                                 $hue += $RAD if $neg;
147                                 $u = cos $hue;
148                                 $v = sin $hue;
149                         }
150
151                         # convert to rgb
152                         $y *= 255 / 32;
153                         $_ = $_ * 127.5 + 128 for $u, $v;
154                         Shiar_Sheet::Colour->newyuv($y, $u, $v)->rgb48;
155                 } qw(
156                         0    32  10+5 20-5 12+2 16-2 8+0  24-0
157                         12+6 8+7 16+5 10   15   24-2 15+0 20
158                 )],
159                 ansiorder => [ 0,2,5,9,6,4,3,15 , 11,10,13,7,14,8,12,1 ],
160                 hueorder => [ 2,8,7,5,3,6,4,9 , 10,13,14,0,11,12,15,1 ],
161         },
162         msx1 => {
163                 name => 'MSX',
164                 list => [ map {
165                         my ($y, @c) = split /;/;
166                         $y *= 255;
167                         $_ = ($_ - .47) / .53 * 127.5 + 128 for @c;
168                         Shiar_Sheet::Colour->newyuv($y, @c)->rgb48;
169                 } qw(
170                         0.00;0.47;0.47 0.00;0.47;0.47 0.53;0.20;0.07 0.67;0.27;0.17
171                         0.40;1.00;0.40 0.53;0.93;0.43 0.47;0.30;0.83 0.73;0.70;0.00
172                         0.53;0.27;0.93 0.67;0.27;0.93 0.73;0.07;0.57 0.80;0.17;0.57
173                         0.47;0.23;0.13 0.53;0.67;0.73 0.80;0.47;0.47 1.00;0.47;0.47
174                 )],
175                 ansiorder => [ 0,6,12,10,4,13,7,14 , 1,8,2,11,5,9,3,15 ],
176                 hueorder => [ 8,10,2,12,4,6, 1,0 , 9,11,3,7,5,13, 14,15 ],
177         },
178         msx2 => {
179                 name => 'MSX2',
180                 list => [
181                         map { s{([0-7])}{sprintf '%02X', $1 / 7 * 255}egr } qw(
182                         000 000 161 373 117 237 511 267
183                         711 733 661 663 141 625 555 777
184                 )],
185                 parent => 'msx1',
186         },
187         arnejmp => {
188                 href => 'http://androidarts.com/palette/16pal.htm',
189                 title => "Arne's Japanese Machine Palette v3 (MSX)",
190                 name => 'A:JMP',
191                 list => [qw(
192                         000000 191028 46AF45 A1D685 453E78 7664FE 833129 9EC2E8
193                         DC534B E18D79 D6B97B E9D8A1 216C4B D365C8 AFAAB9 F5F4EB
194                 )],
195                 parent => 'msx1',
196         },
197         arnegame => {
198                 href => 'http://androidarts.com/palette/16pal.htm',
199                 title => 'Generic 16 color game palette v20 by Arne Niklas Jansson',
200                 name => 'Arne',
201                 list => [qw(
202                         000000::void     9D9D9D::ash     FFFFFF::blind   BE2633::bloodred
203                         E06F8B::pigmeat  493C2B::oldpoop A46422::newpoop EB8931::blaze
204                         F7E26B::zornskin 2F484E::shade   44891A::leaf    A3CE27::slime
205                         1B2632::night    005784::sea     31A2F2::sky     B2DCEF::cloud
206                 )],
207                 hueorder => [ 3,7,8,11,10,9,13,14 , 4,6,5,15,12,0,1,2 ],
208                 ansiorder => [ 0,3,10,6,13,12,9,1 , 5,7,11,8,14,4,15,2 ],
209                 lumorder => [ 0,5,9,12 , 3,6,10,13,1 , 4,7,8,11,14,15,2 ], # by brightness
210         },
211         dawnbringer => {
212                 href => 'http://pixeljoint.com/forum/forum_posts.asp?TID=12795',
213                 title => "Dawnbringer's 16 color palette v1.0",
214                 name => 'Dawnbringer',
215                 list => [qw(
216                         140C1C 442434 30346D 4E4A4E 854C30 346524 D04648 757161
217                         597DCE D27D2C 8595A1 6DAA2C D2AA99 6DC2CA DAD45E DEEED6
218                 )],
219                 ansiorder => [ 0,1,5,4,2,12,10,7 , 3,6,11,14,8,9,13,15 ],
220                 hueorder => [ 6,9,14,11,13,8,2,1 , 12,4,7,5,15,10,3,0 ],
221         },
222
223         cpc => {
224                 name => 'Amstrad CPC',
225                 rgbmap => [
226                         3 => sub {
227                                 $_[2] + 3 * ($_[0] + 3 * $_[1]),
228                                 map { $_ && $_ * 127 + 1 } @_
229                         },
230                 ],
231         },
232         cpcboy => {
233                 name => 'Arne CPC Boy v3',
234                 href => 'http://androidarts.com/palette/16pal.htm',
235                 rgbmap => [
236                         3 => sub {
237                                 my $index = $_[2] + 3 * ($_[0] + 3 * $_[1]);
238                                 $index,
239                                 map { map { hex } /(..)/g } [qw(
240                                         000000 1B1B76 3636D8  761F28 623870 953EA7  CC3636 CE4B7A E3669A
241                                         1B761B 197F96 1986F2  8C6E1A 8E8E8E 9C9EE7  E48E2A EAA597 FE80FE
242                                         8DD836 B8D1B5 97E9D1  54BF47 37C79F 35CFE4  EDD446 EBE4A4 FFFFFF
243                                 )]->[$index]
244                         },
245                         [ # gameboy ramp
246                                 map { [ 27 + (state $index)++, map { hex } /(..)/g ] }
247                                 qw( F2EFE7 BAC375 859550 485D48 293941 )
248                         ],
249                 ],
250                 parent => 'cpc',
251         },
252         ppu => {
253                 name => '<abbr title="Picture Processing Unit">PPU</abbr> (Famicom/NES)',
254                 table => [
255                         do {
256                                 my @rgb = qw(
257                                         333 555 777 777
258                                         014 036 357 567
259                                         006 027 447 657
260                                         326 407 637 757
261                                         403 507 707 747
262                                         503 704 737 755
263                                         510 700 740 764
264                                         420 630 750 770
265                                         320 430 660 773
266                                         120 140 360 572
267                                         031 040 070 473
268                                         000 053 000 276
269                                         022 044 077 467
270                                         111 222 444 666
271                                 );
272                                 map { [
273                                         map { [ $_, map { $_ * 255 / 7 } split // ] }
274                                         map { $rgb[$_] }
275                                         $_*4 .. $_*4+3
276                                 ] } 0..13
277                         }
278                 ],
279         },
280         ansi88 => {
281                 name => 'rxvt 88 colour extension',
282                 rgbmap => [
283                         4 => sub {
284                                 $_[2] + 4 * ($_[1] + 4 * $_[0]) + 16,
285                                 map { (0, 139, 205, 255)[$_] } @_
286                         },
287                         [ map { [80 + $_, (($_ + 2 + ($_>0)) * 255/11) x 3] } 0 .. 7 ],
288                 ],
289         },
290         ansi256 => {
291                 name => 'xterm 256 colour extension',
292                 # \033[38;5;${FG}m
293                 rgbmap => [
294                         6 => sub {
295                                 $_[2] + 6 * ($_[1] + 6 * $_[0]) + 16,
296                                 map { $_ && $_*40 + 55 } @_
297                         },
298                         [ map { [232 + $_, ($_ * 10 + 8) x 3] } 0 .. 23 ],
299                 ],
300         },
301         512 => {
302                 name => '9-bit RGB map',
303                 # atari st, msx2, sega genesis/nomad, turbografx16
304                 rgbmap => [8],
305         },
306         '4k' => {
307                 name => '12-bit RGB map',
308                 # amiga, apple IIgs, game gear, neo geo, lynx, cpc+, nextstation
309                 rgbmap => [
310                         12 => sub {
311                                 join('', map { sprintf '%X', $_ } @_),
312                                 map { int $_ * 255 / 11 } @_
313                         },
314                 ],
315         },
316 }