termcol: iterm pastel palette
[sheet.git] / termcol.inc.pl
1 use strict;
2 use 5.010;
3 use Shiar_Sheet::Colour '1.02';
4
5 my @msxorder = ( 0,6,12,10,4,13,7,14 , 1,8,2,11,5,9,3,15 );
6
7 +{
8         html => {
9                 title => 'HTML keywords (inherited by CSS≥2.1 and SVG), mostly identical to X11',
10                 href => 'http://www.w3.org/TR/css3-color/#html4',
11                 list => [qw(
12                         000000:black 800000:maroon  008000:green 808000:olive
13                         000080:navy  800080:purple  008080:cyan  C0C0C0:silver
14                         808080:gray  FF0000:red     00FF00:lime  FFFF00:yellow
15                         0000FF:blue  FF00FF:fuchsia 00FFFF:aqua  FFFFFF:white
16                 )],
17         },
18         cga => {
19                 # linux console, kde?
20                 list => [qw(
21                         000000 AA0000 00AA00 AA5500 0000AA AA00AA 00AAAA AAAAAA
22                         555555 FF5555 55FF55 FFFF55 5555FF FF55FF 55FFFF FFFFFF
23                 )],
24                 # reset bold dim italic underline blink fastblink reverse hidden
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         },
33         tango => {
34                 # default Gnome theme
35                 list => [qw(
36                         2E3436 CC0000 4E9A06 C4A000 3465A4 75507B 06989A D3D7CF
37                         555753 EF2929 8AE234 FCE94F 729FCF AD7FA8 34E2E2 EEEEEC
38                 )],
39         },
40         xkcd => {
41                 title => 'human averages in xkcd survey results',
42                 href => 'http://blog.xkcd.com/2010/05/03/color-survey-results/',
43                 list => [qw(
44                         000000:black 650021:maroon  15b01a:green 6e750e:olive
45                         01153e:navy  7e1e9c:purple  029386:teal  c5c9c7:silver
46                         929591:grey  e50000:red     aaff32:lime  ffff14:yellow
47                         0343df:blue  ed0dd9:fuchsia 00ffff:cyan  ffffff:white
48                 )],
49         },
50         android => {
51                 href => 'http://developer.android.com/guide/practices/ui_guidelines/icon_design.html',
52                 title => 'recommended colour palette for Android icons',
53                 list => [qw(
54                         FFFFFF:white   BFBFBF:light   808080:medium  404040:dark
55                         000000:black   6699FF:blue1   3366CC:blue2   003399:blue3
56                         99CC33:green1  00CC00:green2  669933:green3  FFCC00:orange1
57                         FF9900:orange2 FF6600:orange3 CC0000:red
58                 )],
59         },
60         app => {
61                 name => 'Term.app',
62                 list => [qw(
63                         000000 C23621 25BC24 ADAD27 492EE1 D338D3 33BBC8 CBCCCD
64                         818383 FC391F 31E722 EAEC23 5833FF F935F8 14F0F0 E9EBEB
65                 )],
66         },
67         iterm => {
68                 name => 'iTerm',
69                 title => 'iTerm v2.2.1',
70                 list => [qw(
71                         000000 BB0000 00BB00 BBBB00 0000BB BB00BB 00BBBB BBBBBB
72                         555555 FF5555 55FF55 FFFF55 5555FF FF55FF 55FFFF FFFFFF
73                 )],
74         },
75         pastel => {
76                 name => 'iTerm Pastel',
77                 list => [qw(
78                         4F4F4F FF6C60 A8FF60 FFFFB6 96CBFE FF73FD C6C5FE EEEEEE
79                         7C7C7C FFB6B0 CEFFAC FFFFCC B5DCFF FF9CFE DFDFFE FFFFFF
80                 )],
81         },
82         putty => {
83                 name => 'PuTTY',
84                 list => [qw(
85                         000000 BB0000 00BB00 BBBB00 0000BB BB00BB 00BBBB BBBBBB
86                         555555 FF5555 55FF55 FFFF55 5555FF FF55FF 55FFFF FFFFFF
87                 )],
88         },
89         slutty => {
90                 name => 'SluTTY',
91                 href => 'http://www.npjh.com/slutty.html',
92                 title => 'PuTTY fork with light colour scheme',
93                 list => [qw(
94                         000000 9C1D1D 6C9446 AC9A47 335786 8F6496 486768 E0DCDC
95                         2F2F2F CD5757 8FC35B D1C45E 5C81A9 BC95B7 76CBCB EEEEEC
96                 )],
97         },
98         mirc => {
99                 name => 'mIRC',
100                 href => 'http://www.mirc.com/colors.html',
101                 list => [qw(
102                         FFFFFF 000000 00007F 009300 FF0000 7F0000 9C009C FC7F00
103                         FFFF00 00FC00 009393 00FFFF 0000FC FF00FF 7F7F7F D2D2D2
104                 )],
105                 ansiorder => [ 1,5,3,7,2,6,10,15 , 14,4,9,8,12,13,11,0  ],
106         },
107         mac2 => {
108                 name => 'MacII',
109                 list => [qw(
110                         FFFFFF FBF305 FF6403 DD0907 F20884 4700A5 0000D3 02ABEA
111                         1FB714 006412 562C05 90713A C0C0C0 808080 404040 000000
112                 )],
113                 ansiorder => [ 15,3,9,11,6,5,7,12 , 14,2,8,1,10,4,13,0 ],
114         },
115         risc => {
116                 name => 'RISC',  # v2/3
117                 list => [qw(
118                         FFFFFF DDDDDD BBBBBB 999999 777777 555555 333333 000000
119                         004499 EEEE00 00CC00 DD0000 EEEEBB 558800 FFBB00 00BBFF
120                 )],
121                 ansiorder => [ 7,5,13,14,4,3,2,1 , 6,11,10,9,8,12,15,0 ],
122         },
123         c64 => {
124                 name => 'C=64',  # commodore 64/128
125                 list => [ map {
126                         # 5-bit luma ± 2-bit colour angle
127                         my ($y, $neg, $hue) = split /(-)|\+/;
128
129                         # convert to yuv
130                         my ($u, $v) = (0, 0);
131                         if (defined $hue) {
132                                 my $RAD = 3.14159;
133                                 $hue *= $RAD / 8;
134                                 $hue += $RAD if $neg;
135                                 $u = cos $hue;
136                                 $v = sin $hue;
137                         }
138
139                         # convert to rgb
140                         $y *= 255 / 32;
141                         $_ = $_ * 127.5 + 128 for $u, $v;
142                         Shiar_Sheet::Colour->newyuv($y, $u, $v)->rgb48;
143                 } qw(
144                         0    32  10+5 20-5 12+2 16-2 8+0  24-0
145                         12+6 8+7 16+5 10   15   24-2 15+0 20
146                 )],
147                 ansiorder => [ 0,2,5,9,6,4,3,15 , 11,10,13,7,14,8,12,1 ],
148         },
149         msx1 => {
150                 name => 'MSX',
151                 list => [ map {
152                         my ($y, @c) = split /;/;
153                         $y *= 255;
154                         $_ = ($_ - .47) / .53 * 127.5 + 128 for @c;
155                         Shiar_Sheet::Colour->newyuv($y, @c)->rgb48;
156                 } qw(
157                         0.00;0.47;0.47 0.00;0.47;0.47 0.53;0.20;0.07 0.67;0.27;0.17
158                         0.40;1.00;0.40 0.53;0.93;0.43 0.47;0.30;0.83 0.73;0.70;0.00
159                         0.53;0.27;0.93 0.67;0.27;0.93 0.73;0.07;0.57 0.80;0.17;0.57
160                         0.47;0.23;0.13 0.53;0.67;0.73 0.80;0.47;0.47 1.00;0.47;0.47
161                 )],
162                 ansiorder => \@msxorder,
163         },
164         msx2 => {
165                 name => 'MSX2',
166                 list => [
167                         map { s{([0-7])}{sprintf '%02X', $1 / 7 * 255}egr } qw(
168                         000 000 161 373 117 237 511 267
169                         711 733 661 663 141 625 555 777
170                 )],
171                 ansiorder => \@msxorder,
172         },
173         arnejmp => {
174                 href => 'http://androidarts.com/palette/16pal.htm',
175                 title => "Arne's Japanese Machine Palette v3 (MSX)",
176                 name => 'A:JMP',
177                 list => [qw(
178                         000000 191028 46AF45 A1D685 453E78 7664FE 833129 9EC2E8
179                         DC534B E18D79 D6B97B E9D8A1 216C4B D365C8 AFAAB9 F5F4EB
180                 )],
181                 ansiorder => \@msxorder,
182         },
183         arnegame => {
184                 href => 'http://androidarts.com/palette/16pal.htm',
185                 title => 'Generic 16 color game palette v20 by Arne Niklas Jansson',
186                 name => 'Arne',
187                 list => [qw(
188                         000000::void     9D9D9D::ash     FFFFFF::blind   BE2633::bloodred
189                         E06F8B::pigmeat  493C2B::oldpoop A46422::newpoop EB8931::blaze
190                         F7E26B::zornskin 2F484E::shade   44891A::leaf    A3CE27::slime
191                         1B2632::night    005784::sea     31A2F2::sky     B2DCEF::cloud
192                 )],
193                 order => [ 0,5,9,12 , 3,6,10,13,1 , 4,7,8,11,14,15,2 ], # by brightness
194                 ansiorder => [ 0,3,10,6,13,12,9,1 , 5,7,11,8,14,4,15,2 ],
195         },
196
197         cpc => {
198                 name => 'Amstrad CPC',
199                 rgbmap => [
200                         3 => sub {
201                                 $_[2] + 3 * ($_[0] + 3 * $_[1]),
202                                 map { $_ && $_ * 127 + 1 } @_
203                         },
204                 ],
205         },
206         cpcboy => {
207                 name => 'Arne CPC Boy v3',
208                 href => 'http://androidarts.com/palette/16pal.htm',
209                 rgbmap => [
210                         3 => sub {
211                                 my $index = $_[2] + 3 * ($_[0] + 3 * $_[1]);
212                                 $index,
213                                 map { map { hex } /(..)/g } [qw(
214                                         000000 1B1B76 3636D8  761F28 623870 953EA7  CC3636 CE4B7A E3669A
215                                         1B761B 197F96 1986F2  8C6E1A 8E8E8E 9C9EE7  E48E2A EAA597 FE80FE
216                                         8DD836 B8D1B5 97E9D1  54BF47 37C79F 35CFE4  EDD446 EBE4A4 FFFFFF
217                                 )]->[$index]
218                         },
219                         [ # gameboy ramp
220                                 map { [ 27 + (state $index)++, map { hex } /(..)/g ] }
221                                 qw( F2EFE7 BAC375 859550 485D48 293941 )
222                         ],
223                 ],
224         },
225         ansi88 => {
226                 name => 'rxvt 88 colour extension',
227                 rgbmap => [
228                         4 => sub {
229                                 $_[2] + 4 * ($_[1] + 4 * $_[0]) + 16,
230                                 map { (0, 139, 205, 255)[$_] } @_
231                         },
232                         [ map { [80 + $_, (($_ + 2 + ($_>0)) * 255/11) x 3] } 0 .. 7 ],
233                 ],
234         },
235         ansi256 => {
236                 name => 'xterm 256 colour extension',
237                 href => 'http://web.archive.org/web/20130125000058/http://www.frexx.de/xterm-256-notes/',
238                 # \033[38;5;${FG}m
239                 rgbmap => [
240                         6 => sub {
241                                 $_[2] + 6 * ($_[1] + 6 * $_[0]) + 16,
242                                 map { $_ && $_*40 + 55 } @_
243                         },
244                         [ map { [232 + $_, ($_ * 10 + 8) x 3] } 0 .. 23 ],
245                 ],
246         },
247         512 => {
248                 name => '9-bit RGB map',
249                 # atari st, msx2, sega genesis/nomad, turbografx16
250                 rgbmap => [8],
251         },
252         '4k' => {
253                 name => '12-bit RGB map',
254                 # amiga, apple IIgs, game gear, neo geo, lynx, cpc+, nextstation
255                 rgbmap => [
256                         12 => sub {
257                                 join('', map { sprintf '%X', $_ } @_),
258                                 map { int $_ * 255 / 11 } @_
259                         },
260                 ],
261         },
262 }