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