Source of termcol.plp

<(common.inc.plp)><:

Html({
	title => 'terminal colour cheat sheet',
	version => 'v1.0',
	description => [
		"Index of all terminal/console colour codes,",
		"with an example result of various environments.",
	],
	keywords => [qw'
		color code terminal console escape table xterm rxvt
	'],
	stylesheet => [qw'light dark'],
});

:>
<h1>Terminal colours</h1>

<div class="section">
<:
use Shiar_Sheet::Colour;

sub colcell {
	my $name = shift;
	my $col = Shiar_Sheet::Colour->new(@_);
	my $minhex = $col->rgb24;
	my $css     = '#' . $col->rgb48;
	my $inverse = '#' . sprintf('%X', $col->luminance/255 < .3 ? 12 : 0) x 3;

	my $sample = [ qw(#000 #FFF) ];
	($name, $sample) = @$name if ref $name eq 'ARRAY';

	my $out = sprintf('<td title="%s" style="%s">%s',
		join(',', map { int } @$col),
		"background:$css; color:$inverse; padding:0 1ex",
		$name,
	);
	$out .= sprintf '<td style="%s"><code>%s</code>', "background:$_; color:$css", $minhex
		for @$sample;
	return "$out\n";
}

my %col = (
	-html => [
		sprintf('<a title="%s" href="%s">html</a>',
			'HTML keywords (inherited by CSS≥2.1 and SVG), mostly identical to X11',
			'http://www.w3.org/TR/css3-color/#html4',
		),
		qw/black maroon green olive  navy purple  cyan silver
		   gray  red    lime  yellow blue fuchsia aqua white/,
		qw/reset bold dim italic underline blink fastblink
		   reverse hidden/,
	],
	html => [
		qw/000000 800000 008000 808000 000080 800080 008080 C0C0C0
		   808080 FF0000 00FF00 FFFF00 0000FF FF00FF 00FFFF FFFFFF/,
	],
#	-cga => linux console, kde?
	cga => [
		qw/000000 AA0000 00AA00 AA5500 0000AA AA00AA 00AAAA AAAAAA
		   555555 FF5555 55FF55 FFFF55 5555FF FF55FF 55FFFF FFFFFF/,
	],
#	-xterm => rxvt except for blues
	xterm => [
		qw/000000 CC0000 00CC00 CCCC00 4682B4 CC00CC 00CCCC E5E5E5
		   4C4C4C FF0000 00FF00 FFFF00 1E90FF FF00FF 00FFFF FFFFFF/,
	],
#	-tango => default Gnome theme
	tango => [
		qw/2E3436 CC0000 4E9A06 C4A000 3465A4 75507B 06989A D3D7CF
		   555753 EF2929 8AE234 FCE94F 729FCF AD7FA8 34E2E2 EEEEEC/,
	],
	-xkcd => [
		sprintf('<a title="%s" href="%s">xkcd</a>',
			'human averages in xkcd survey results',
			'http://blog.xkcd.com/2010/05/03/color-survey-results/',
		),
		qw/black  maroon green  olive  navy   purple teal   silver
		   grey   red    lime   yellow blue  fuchsia cyan   white/,
	],
	xkcd => [
		qw/000000 650021 15b01a 6e750e 01153e 7e1e9c 029386 c5c9c7
		   929591 e50000 aaff32 ffff14 0343df ed0dd9 00ffff ffffff/,
	],
	-android => [
		sprintf('<a href="%s" title="%s">android</a>',
			'http://developer.android.com/guide/practices/ui_guidelines/icon_design.html',
			'recommended colour palette for Android icons',
		),
		qw/white  light  medium dark   black  blue1  blue2  blue3
		   green1 green2 green3 orange1 orange2 orange3 red /,
	],
	android => [
		qw/FFFFFF BFBFBF 808080 404040 000000 6699FF 3366CC 003399
		   99CC33 00CC00 669933 FFCC00 FF9900 FF6600 CC0000 /,
	],
);

for my $term (qw/cga xterm tango html xkcd/) {
	print '<table>', "\n";
	printf "<caption>%s</caption>\n", $col{"-$term"}[0] || $term;
	for my $num (0 .. $#{ $col{$term} }) {
		my $rgb = $col{$term}[$num];
		my $name = $col{"-$term"}[$num + 1] || $num;
		$name = [ $name, ['#333'] ] if $term eq 'xkcd';
		print '<tr>', colcell($name, $rgb);
	}
	print "</table>\n\n";
}
:></div>

<hr>

<div class="section">
<h2>88-colour space</h2>
<:
for my $r (0 .. 3) {
	print '<table>';
	for my $g (0 .. 3) {
		print '<tr>';
		for my $b (0 .. 3) {
			my $index = $r*4*4 + $g*4 + $b + 16;
			print colcell($index, map {(0, 139, 205, 255)[$_]} $r, $g, $b);
		}
	}
	print "</table>\n";
}
print "\n";

print '<table><tr>';
print colcell(80+$_, (($_ + 2 + ($_>0)) * 255/11) x 3) for 0 .. 7;
print "</table>\n\n";

:></div>
<: if ($ENV{PATH_INFO} =~ /256/) { :>
<hr>

<div class="section">
<h2>256-colour space</h2>
<:
for my $r (0 .. 5) {
	print '<table>';
	for my $g (0 .. 5) {
		print '<tr>';
		for my $b (0 .. 5) {
			my $index = $r*6*6 + $g*6 + $b + 16;
			print colcell($index, map { $_ && $_*40 + 55 } $r, $g, $b);
		}
	}
	print "</table>\n";
}
print "\n";

	print '<table>';
for my $row (0, 12) {
	print '<tr>';
	print colcell(232+$_, ($_*10 + 8) x 3) for $row .. $row+11;
}
	print "</table>\n";
print "\n";

:></div>
<: } :>
<hr>