latin: palm graffiti font placeholder
[sheet.git] / termcol.inc.pl
1 use 5.014;
2 use utf8;
3 use Shiar_Sheet::Colour 1.05;
4
5 +{
6         default => [qw( ansi ansi256 )],
7         more    => [qw( ansi zxarne mirc pastel slutty solarized ansi88 ansi256 )],
8         ansi    => [qw( cga putty xterm ubuntu tango app campbell html cgarne )],
9         legacy  => [qw( c64 msx mac2 risc arnegame db16 cpc cpcboy shiar32 ppu 2c03 shovel 64 ansi88 )],
10
11         xcolors => sub {
12                 my $pals = do 'data/termcol-xcolor.inc.pl' or die $! || $@;
13                 $_[0]->{$_} = $pals->{$_} for keys %{$pals};
14                 return 'xcolor';
15         },
16
17         html => {
18                 title => 'HTML keywords (inherited by CSS≥2.1 and SVG), mostly identical to X11',
19                 href => 'http://www.w3.org/TR/css3-color/#html4',
20                 list => [qw(
21                         000000:black 800000:maroon  008000:green 808000:olive
22                         000080:navy  800080:purple  008080:cyan  C0C0C0:silver
23                         808080:gray  FF0000:red     00FF00:lime  FFFF00:yellow
24                         0000FF:blue  FF00FF:fuchsia 00FFFF:aqua  FFFFFF:white
25                 )],
26                 parent => 'cga',
27         },
28         cga => {
29                 # linux console, kde?
30                 list => [qw(
31                         000000 AA0000 00AA00 AA5500 0000AA AA00AA 00AAAA AAAAAA
32                         555555 FF5555 55FF55 FFFF55 5555FF FF55FF 55FFFF FFFFFF
33                 )],
34                 # reset bold dim italic underline blink fastblink reverse hidden
35                 hueorder => [ 1,3,2,6,4,5, 0,7 , 9,11,10,14,12,13, 8,15 ],
36         },
37         ubuntu => {
38                 title => 'setvtrgb defaults for Ubuntu kbd',
39                 list => [qw(
40                         010101 DE382B 39B54A FFC706 006FB8 762671 2CB5E9 CCCCCC
41                         808080 FF0000 00FF00 FFFF00 0000FF FF00FF 00FFFF FFFFFF
42                 )],
43                 parent => 'cga',
44         },
45         xterm => {
46                 # rxvt except for blues
47                 list => [qw(
48                         000000 CC0000 00CC00 CCCC00 4682B4 CC00CC 00CCCC E5E5E5
49                         4C4C4C FF0000 00FF00 FFFF00 1E90FF FF00FF 00FFFF FFFFFF
50                 )],
51                 parent => 'cga',
52         },
53         tango => {
54                 # default Gnome theme
55                 list => [qw(
56                         2E3436 CC0000 4E9A06 C4A000 3465A4 75507B 06989A D3D7CF
57                         555753 EF2929 8AE234 FCE94F 729FCF AD7FA8 34E2E2 EEEEEC
58                 )],
59                 parent => 'cga',
60         },
61         xkcd => {
62                 title => 'human averages in xkcd survey results',
63                 href => 'http://blog.xkcd.com/2010/05/03/color-survey-results/',
64                 list => [qw(
65                         000000:black 650021:maroon  15b01a:green 6e750e:olive
66                         01153e:navy  7e1e9c:purple  029386:teal  c5c9c7:silver
67                         929591:grey  e50000:red     aaff32:lime  ffff14:yellow
68                         0343df:blue  ed0dd9:fuchsia 00ffff:cyan  ffffff:white
69                 )],
70                 parent => 'cga',
71         },
72         android => {
73                 href => 'http://developer.android.com/guide/practices/ui_guidelines/icon_design.html',
74                 title => 'recommended colour palette for Android icons',
75                 list => [qw(
76                         FFFFFF:white   BFBFBF:light   808080:medium  404040:dark
77                         000000:black   6699FF:blue1   3366CC:blue2   003399:blue3
78                         99CC33:green1  00CC00:green2  669933:green3  FFCC00:orange1
79                         FF9900:orange2 FF6600:orange3 CC0000:red
80                 )],
81         },
82         app => {
83                 name => 'Term.app',
84                 title => 'Mac OSX Yosemite Terminal app',
85                 list => [qw(
86                         000000 990B00 35A600 999900 0000B3 B304B2 31A6B3 BFBFBF
87                         666666 E51600 48D901 E5E600 0100FF E607E5 48E6E6 E6E5E6
88                 )],
89                 parent => 'cga',
90         },
91         iterm => ['putty'], # identical in v2.2.1
92         pastel => {
93                 name => 'iTerm Pastel',
94                 list => [qw(
95                         4F4F4F FF6C60 A8FF60 FFFFB6 96CBFE FF73FD C6C5FE EEEEEE
96                         7C7C7C FFB6B0 CEFFAC FFFFCC B5DCFF FF9CFE DFDFFE FFFFFF
97                 )],
98                 parent => 'cga',
99         },
100         campbell => {
101                 name => 'Campbell',
102                 title => 'Windows 10 Console', # as of v1709
103                 list => [qw(
104                         0C0C0C C50F1F 13A10E C19C00 0037DA 881798 3A96DD CCCCCC
105                         767676 E74856 16C60C F9F1A5 3B78FF B4009E 61D6D6 F2F2F2
106                 )],
107                 parent => 'cga',
108         },
109         putty => {
110                 name => 'PuTTY',
111                 list => [qw(
112                         000000 BB0000 00BB00 BBBB00 0000BB BB00BB 00BBBB BBBBBB
113                         555555 FF5555 55FF55 FFFF55 5555FF FF55FF 55FFFF FFFFFF
114                 )],
115                 parent => 'cga',
116         },
117         slutty => {
118                 name => 'SluTTY',
119                 href => 'http://www.npjh.com/slutty.html',
120                 title => 'PuTTY fork with light colour scheme',
121                 list => [qw(
122                         000000 9C1D1D 6C9446 AC9A47 335786 8F6496 486768 E0DCDC
123                         2F2F2F CD5757 8FC35B D1C45E 5C81A9 BC95B7 76CBCB EEEEEC
124                 )],
125                 parent => 'cga',
126         },
127         falcon => {
128                 name => 'Falcon',  # v2.0
129                 href => 'https://github.com/fenetikm/falcon',
130                 list => [qw(
131                         000004 FF3600 718E3F FFC552 635196 FF761A 34BFA4 B4B4B9
132                         020221 FF8E78 B1BF75 FFD392 99A4BC FFB07B 85CCBF F8F8FF
133                 )],
134                 parent => 'cga',
135         },
136         mirc => {
137                 name => 'mIRC',
138                 href => 'http://www.mirc.com/colors.html',
139                 list => [qw(
140                         FFFFFF 000000 00007F 009300 FF0000 7F0000 9C009C FC7F00
141                         FFFF00 00FC00 009393 00FFFF 0000FC FF00FF 7F7F7F D2D2D2
142                 )],
143                 ansiorder => [ 1,5,3,7,2,6,10,15 , 14,4,9,8,12,13,11,0  ],
144                 hueorder => [ 5,7,3,10,2,6, 1,15 , 4,8,9,11,12,13, 14,0 ],
145         },
146         mac2 => {
147                 name => 'MacII',
148                 list => [qw(
149                         FFFFFF FBF305 FF6403 DD0907 F20884 4700A5 0000D3 02ABEA
150                         1FB714 006412 562C05 90713A C0C0C0 808080 404040 000000
151                 )],
152                 ansiorder => [ 15,3,9,11,6,5,7,12 , 14,2,8,1,10,4,13,0 ],
153                 hueorder => [ 3,2,1,8,7,6,5,4 , 10,11,9 , 15,14,13,12,0 ],
154         },
155         risc => {
156                 name => 'RISC',  # v2/3
157                 list => [qw(
158                         FFFFFF DDDDDD BBBBBB 999999 777777 555555 333333 000000
159                         004499 EEEE00 00CC00 DD0000 EEEEBB 558800 FFBB00 00BBFF
160                 )],
161                 ansiorder => [ 7,5,13,14,4,3,2,1 , 6,11,10,9,8,12,15,0 ],
162                 hueorder => [ 11,14,9,12,13,10,15,8 , reverse 0..7 ],
163         },
164         c64 => {
165                 name => 'C=64',  # commodore 64/128
166                 list => [ map {
167                         # 5-bit luma ± 2-bit colour angle
168                         my ($y, $neg, $hue) = split /(-)|\+/;
169
170                         # convert to yuv
171                         my ($u, $v) = (0, 0);
172                         if (defined $hue) {
173                                 my $RAD = 3.14159;
174                                 $hue *= $RAD / 8;
175                                 $hue += $RAD if $neg;
176                                 $u = cos $hue;
177                                 $v = sin $hue;
178                         }
179
180                         # convert to rgb
181                         $y /= 32;
182                         $_ /= 2 for $u, $v;
183                         Shiar_Sheet::Colour->newyuv($y, $u, $v)->rgb48;
184                 } qw(
185                         0    32  10+5 20-5 12+2 16-2 8+0  24-0
186                         12+6 8+7 16+5 10   15   24-2 15+0 20
187                 )],
188                 ansiorder => [ 0,2,5,9,6,4,3,15 , 11,10,13,7,14,8,12,1 ],
189                 hueorder => [ 2,8,7,5,3,6,4,9 , 10,13,14,0,11,12,15,1 ],
190         },
191         jw64 => {
192                 name => 'JW-64',
193                 url => 'https://lospec.com/palette-list/jw-64',
194                 list => [qw(
195                         000000 ffffff a82f2f 63d4f0 b437b4 54c048 403fc0 e0e040
196                         b46429 644020 e0806c 404040 8c8c8c a0f66e 6496f4 c8c8c8
197                 )],
198 #                       000000 404040 8c8c8c c8c8c8 644020 a82f2f b46429 e0806c
199 #                       403fc0 6496f4 63d4f0 e0e040 b437b4 54c048 a0f66e ffffff
200                 parent => 'c64',
201         },
202
203         msx => [qw( msx1 msx2 arnejmp simplejpc )],
204         msx1 => {
205                 name => 'MSX',
206                 list => [ map {
207                         my ($y, @c) = split /;/;
208                         $_ = ($_ - .47) / .53 / 2 for @c;
209                         Shiar_Sheet::Colour->newyuv($y, @c)->rgb48;
210                 } qw(
211                         0.00;0.47;0.47 0.00;0.47;0.47 0.53;0.20;0.07 0.67;0.27;0.17
212                         0.40;1.00;0.40 0.53;0.93;0.43 0.47;0.30;0.83 0.73;0.70;0.00
213                         0.53;0.27;0.93 0.67;0.27;0.93 0.73;0.07;0.57 0.80;0.17;0.57
214                         0.47;0.23;0.13 0.53;0.67;0.73 0.80;0.47;0.47 1.00;0.47;0.47
215                 )],
216                 ansiorder => [ 0,6,12,10,4,13,7,14 , 1,8,2,11,5,9,3,15 ],
217                 hueorder => [ 8,10,2,12,4,6, 1,0 , 9,11,3,7,5,13, 14,15 ],
218         },
219         msx2 => {
220                 name => 'MSX2',
221                 list => [
222                         map { s{([0-7])}{sprintf '%02X', $1 / 7 * 255}egr } qw(
223                         000 000 161 373 117 237 511 267
224                         711 733 661 663 141 625 555 777
225                 )],
226                 parent => 'msx1',
227         },
228         arnejmp => {
229                 href => 'http://androidarts.com/palette/16pal.htm',
230                 title => "Arne's Japanese Machine Palette v3 (MSX)",
231                 name => 'A:JMP',
232                 list => [qw(
233                         000000 191028 46AF45 A1D685 453E78 7664FE 833129 9EC2E8
234                         DC534B E18D79 D6B97B E9D8A1 216C4B D365C8 AFAAB9 F5F4EB
235                 )],
236                 parent => 'msx1',
237         },
238         simplejpc => {
239                 href => 'http://pixeljoint.com/pixelart/119844.htm',
240                 title => 'SimpleJPC-16 by Adigun Polack',
241                 name => 'SimpleJPC',
242                 parent => 'msx1',
243                 list => [qw(
244                         050403 221F31 316F23 7CC264 404A68 678FCB 543516 8BE1E0
245                         A14D3F EA9182 E1B047 F5EE9B 9B6E2D A568D4 9A93B7 FEFEFE
246                 )],
247         },
248
249         arnegame => {
250                 href => 'http://androidarts.com/palette/16pal.htm',
251                 title => 'Generic 16 color game palette v20 by Arne Niklas Jansson',
252                 name => 'Arne',
253                 list => [qw(
254                         000000:void     9D9D9D:ash     FFFFFF:blind   BE2633:bloodred
255                         E06F8B:pigmeat  493C2B:oldpoop A46422:newpoop EB8931:blaze
256                         F7E26B:zornskin 2F484E:shade   44891A:leaf    A3CE27:slime
257                         1B2632:night    005784:sea     31A2F2:sky     B2DCEF:cloud
258                 )],
259                 hueorder => [ 3,7,8,11,10,9,13,14 , 4,6,5,15,12,0,1,2 ],
260                 ansiorder => [ 0,3,10,6,13,12,9,1 , 5,7,11,8,14,4,15,2 ],
261                 lumorder => [ 0,5,9,12 , 3,6,10,13,1 , 4,7,8,11,14,15,2 ], # by brightness
262         },
263         cgarne => {
264                 href => 'http://androidarts.com/palette/16pal.htm',
265                 title => "version E",
266                 name => 'CGArne',
267                 list => [qw(
268                         000000 8A3622 0C7E45 AA5C3D 2234D1 5C2E78 44AACC B5B5B5
269                         5E606E EB8A60 6CD947 FFD93F 4C81FB E23D69 7BE2F9 FFFFFF
270                 )],
271                 parent => 'cga',
272         },
273         zxarne => {
274                 href => 'http://androidarts.com/Amiga/ZX.htm',
275                 title => "version 5.2",
276                 name => 'ZXArne',
277                 list => [qw(
278                         000000 A73211 629A31 E8BC50 313390 A15589 28A4CB BFBFBD
279                         3C351F D85525 9CD33C F1E782 1559DB CD7A50 65DCD6 F2F1ED
280                 )],
281                 parent => 'cga',
282         },
283         db16 => {
284                 href => 'http://pixeljoint.com/forum/forum_posts.asp?TID=12795',
285                 title => "DawnBringer's 16 color palette v1.0",
286                 name => 'DawnBringer16',
287                 list => [qw(
288                         140C1C 442434 30346D 4E4A4E 854C30 346524 D04648 757161
289                         597DCE D27D2C 8595A1 6DAA2C D2AA99 6DC2CA DAD45E DEEED6
290                 )],
291                 ansiorder => [ 0,1,5,4,2,12,10,7 , 3,6,11,14,8,9,13,15 ],
292                 hueorder => [ 6,9,14,11,13,8,2,1 , 12,4,7,5,15,10,3,0 ],
293         },
294         db32 => {
295                 href => 'http://pixeljoint.com/forum/forum_posts.asp?TID=16247',
296                 title => "DawnBringer's 32 color palette v1.0",
297                 name => 'DawnBringer32',
298                 list => [qw(
299                         000000 222034 45283C 663931 8F563B DF7126 D9A066 EEC39A
300                         FBF236 99E550 6ABE30 37946E 4B692F 524B24 323C39 3F3F74
301                         306082 5B6EE1 639BFF 5FCDE4 CBDBFC FFFFFF 9BADB7 847E87
302                         696A6A 595652 76428A AC3232 D95763 D77BBA 8F974A 8A6F30
303                 )],
304         },
305         solarized => {
306                 href => 'http://ethanschoonover.com/solarized',
307                 list => [qw(
308                         002b36:base03 073642:base02 586e75:base01 657b83:base00
309                         839496:base0  93a1a1:base1  eee8d5:base2  fdf6e3:base3
310                         b58900:yellow cb4b16:orange dc322f:red    d33682:magenta
311                         6c71c4:violet 268bd2:blue   2aa198:cyan   859900:green
312                 )],
313                 ansiorder => [ 1,10,15,8,13,11,14,6 , 0,9,2,3,4,12,5,7 ],
314         },
315
316         cpc => {
317                 name => 'Amstrad CPC',
318                 rgbmap => [
319                         3 => sub {
320                                 $_[2] + 3 * ($_[0] + 3 * $_[1]),
321                                 map { $_ && $_ * 127 + 1 } @_
322                         },
323                 ],
324         },
325         cpcboy => {
326                 name => 'Arne CPC Boy v3',
327                 href => 'http://androidarts.com/palette/16pal.htm',
328                 rgbmap => [
329                         3 => sub {
330                                 my $index = $_[2] + 3 * ($_[0] + 3 * $_[1]);
331                                 $index,
332                                 map { map { hex } /(..)/g } [qw(
333                                         000000 1B1B76 3636D8  761F28 623870 953EA7  CC3636 CE4B7A E3669A
334                                         1B761B 197F96 1986F2  8C6E1A 8E8E8E 9C9EE7  E48E2A EAA597 FE80FE
335                                         54BF47 37C79F 35CFE4  8DD836 B8D1B5 97E9D1  EDD446 EBE4A4 FFFFFF
336                                 )]->[$index]
337                         },
338                 ],
339                 table => [
340                         # gameboy ramp
341                         [qw( 293941:31       :   F2EFE7:27 )],
342                         [qw( 485D48:30 859550:29 BAC375:28 )],
343                 ],
344                 parent => 'cpc',
345         },
346         shiar32 => {
347                 name => 'Shiar32',
348                 table => [
349                         [qw( 761F28:2A CC2222:3A CC8B7B:4A )],
350                         [qw( 4C3C2B:1B CB4B16:3B EB8931:5B )],
351                         [qw( 5E581A:2C B58900:3C C0C070:4C )],
352                         [qw(         0 859900:3D         0 )],
353                         [qw( 1B661B:2E 4E9A06:3E 8BBB7B:4E )],
354                         [qw(         0 37A76F:3F         0 )],
355                         [qw( 2F484E:1G 06989A:3G 31E2C2:5G )],
356                         [qw(         0 0088CC:3H         0 )],
357                         [qw( 00337C:2I 3465A4:3I 6899AA:4I )],
358                         [qw(         0 6C71C4:3J         0 )],
359                         [qw( 362747:1K 75507B:3K F06FCB:5K )],
360                         [qw(         0 D33662:3L         0 )],
361                         [qw( 000000:0  686868:2  CCCCCC:4  )],
362                         [qw( 444444:1  B0B0B0:3  FFFFFF:5  )],
363                 ],
364                 parent => 'cpc',
365         },
366
367         ppu => {
368                 name => '<abbr title="Picture Processing Unit">PPU</abbr> (Famicom/NES)',
369                 table => [
370                         [qw( 717171:00 BABABA:10 FFFFFF:20 FFFFFF:<s>30</s> )],
371                         [qw( 012FB3:01 235CFF:11 5380FF:21 ACC1FF:31 )],
372                         [qw( 2B17C2:02 5139FF:12 7562FF:22 BAB1FF:32 )],
373                         [qw( 5705AA:03 932AFF:13 AC5AFF:23 D7B1FF:33 )],
374                         [qw( 780071:04 C222BA:14 FE69F6:24 FEC0FB:34 )],
375                         [qw( 860627:05 D52C57:15 FE6A90:25 FEBECF:35 )],
376                         [qw( 7C1800:06 C84300:16 FE853F:26 FECBAD:36 )],
377                         [qw( 5F3100:07 A16400:17 F2B403:27 FEE59D:37 )],
378                         [qw( 344900:08 698400:18 B9D500:28 E9F596:38 )],
379                         [qw( 095B00:09 2F9B00:19 7FEC0F:29 D1FFA3:39 )],
380                         [qw( 006100:0A 04A40D:1A 52F55B:2A BCFFC0:3A )],
381                         [qw( 005A39:0B 009B6F:1B 40EBBF:2B B7FEEC:3B )],
382                         [qw( 004881:0C 0083CE:1C 43BBFF:2C AEE1FF:3C )],
383                         [qw( 000000:0D 0C0C0C:1D 5B5B5B:2D C3C3C3:3D )],
384                 ],
385                 hueorder => [6..12, 1..5, 13, 0],
386         },
387         '2c03' => {
388                 name => '2C03–5 PPU (PlayChoice/Famicom)',
389                 table => [
390                         do {
391                                 my @rgb = qw(
392                                         333 555 777 777
393                                         014 036 357 567
394                                         006 027 447 657
395                                         326 407 637 757
396                                         403 507 707 747
397                                         503 704 737 755
398                                         510 700 740 764
399                                         420 630 750 770
400                                         320 430 660 773
401                                         120 140 360 572
402                                         031 040 070 473
403                                         040 053 276 276
404                                         022 044 077 467
405                                         111 222 444 666
406                                 );
407                                 my %dup;
408                                 map { [
409                                         map { [ $dup{$_}++ ? "<s>$_</s>" : $_, map { $_ * 255 / 7 } split // ] }
410                                         map { $rgb[$_] }
411                                         $_*4 .. $_*4+3
412                                 ] } 0..13
413                         }
414                 ],
415                 parent => 'ppu',
416         },
417         neslike => {
418                 name => '0xDB NESLike',
419                 table => [
420                         [qw( 3F3F3F:00 7F7F7F:10 F9F9F9:20 FFFFFF:30 )],
421                         [qw( 2B34AD:01 6B74ED:11 ABB4FF:21 EAF3FF:31 )],
422                         [qw( 591DAB:02 995DEB:12 D99CFF:22 FFDCFF:32 )],
423                         [qw( 810F8C:03 C04FCC:13 FF8EFF:23 FFCEFF:33 )],
424                         [qw( 960E59:04 D64E98:14 FF8DD8:24 FFCDFF:34 )],
425                         [qw( 951A1E:05 D45A5E:15 FF9A9E:25 FFD9DD:35 )],
426                         [qw( 7C3000:06 BC702C:16 FCB06C:26 FFEFAC:36 )],
427                         [qw( 534A00:07 938A11:17 D3CA51:27 FFFF90:37 )],
428                         [qw( 256200:08 65A113:18 A5E153:28 E4FF92:38 )],
429                         [qw( 096C00:09 49AC25:19 89EC65:29 C9FFA4:39 )],
430                         [qw( 007213:0A 2DB153:1A 6CF193:2A ACFFD2:3A )],
431                         [qw( 006A4D:0B 26AA8D:1B 66E9CD:2B A6FFFF:3B )],
432                         [qw( 005683:0C 3896C3:1C 77D6FF:2C B7FFFF:3C )],
433                         [qw( 000000:<s>0D</s> 000000:1D 333333:2D 8C8C8C:3D )],
434                 ],
435                 parent => 'ppu',
436                 hueorder => [6..12, 1..5, 13, 0],
437         },
438         shovel => {
439                 name => 'Shovel Knight PPU',
440                 table => [
441                         [qw( 7C7C7C:00 BCBCBC:10 F8F8F8:20 FCFCFC:30 )],
442                         [qw( 0000FC:01 0078F8:11 3CBCFC:21 A4E4FC:31 )],
443                         [qw( 0000BC:02 0058F8:12 6888FC:22 B8B8F8:32 )],
444                         [qw( 4428BC:03 6844FC:13 9878F8:23 D8B8F8:33 )],
445                         [qw( 940084:04 D800CC:14 F878F8:24 F8B8F8:34 )],
446                         [qw( A80020:05 E40058:15 F85898:25 F8A4C0:35 )],
447                         [qw( A81000:06 F83800:16 F87858:26 F0D0B0:36 )],
448                         [qw( 881400:07 E45C10:17 FCA044:27 FCE0A8:37 )],
449                         [qw( 503000:08 AC7C00:18 F8B800:28 F8D878:38 )],
450                         [qw( 007800:09 00B800:19 B8F818:29 D8F878:39 )],
451                         [qw( 006800:0A 00A800:1A 58D854:2A B8F8B8:3A )],
452                         [qw( 005800:0B 00A844:1B 58F898:2B B8F8D8:3B )],
453                         [qw( 004058:0C 008888:1C 00E8D8:2C 00FCFC:3C )],
454                         [qw( 000000:0D 080808:1D 787878:2D D8D8D8:3D )],
455                         [qw( 22123B:0S 360900:1S 824E00:2S 9E9E5C:3S )],
456                 ],
457                 parent => 'ppu',
458                 hueorder => [6..12, 1..5, 13, 0, 14],
459         },
460
461         64 => {
462                 name => '6-bit (Sega Master System, EGA, FAP80)',
463                 rgbmap => [4],
464         },
465         ansi88 => {
466                 name => 'rxvt 88 colour extension',
467                 rgbmap => [
468                         4 => sub {
469                                 $_[2] + 4 * ($_[1] + 4 * $_[0]) + 16,
470                                 map { (0, 139, 205, 255)[$_] } @_
471                         },
472                         [ map { [80 + $_, (($_ + 2 + ($_>0)) * 255/11) x 3] } 0 .. 7 ],
473                 ],
474         },
475         ansi256 => {
476                 name => 'xterm 256 colour extension',
477                 # \033[38;5;${FG}m
478                 rgbmap => [
479                         6 => sub {
480                                 $_[2] + 6 * ($_[1] + 6 * $_[0]) + 16,
481                                 map { $_ && $_*40 + 55 } @_
482                         },
483                         [ map { [232 + $_, ($_ * 10 + 8) x 3] } 0 .. 23 ],
484                 ],
485         },
486         512 => {
487                 name => '9-bit RGB map',
488                 # atari st, msx2, sega genesis/nomad, turbografx16
489                 rgbmap => [8],
490         },
491         '4k' => {
492                 name => '12-bit RGB map',
493                 # amiga, apple IIgs, game gear, neo geo, lynx, cpc+, nextstation
494                 rgbmap => [
495                         12 => sub {
496                                 join('', map { sprintf '%X', $_ } @_),
497                                 map { int $_ * 255 / 11 } @_
498                         },
499                 ],
500         },
501 }