commit:44e4115d66384c7ed2665ed7fb680d3c78abcf66
author:Chip Black
committer:Chip Black
date:Mon Oct 19 02:34:55 2015 -0500
parents:5aa67644c008d66d3f7ada709b0d1be20e59304a
Add palette generator
diff --git a/palette/generate.pl b/palette/generate.pl
line changes: +108/-0
index 0000000..f690786
--- /dev/null
+++ b/palette/generate.pl
@@ -0,0 +1,108 @@
+#!/usr/bin/perl
+use Convert::Color::HUSL;
+use strict;
+use v5.10;
+
+my $white  = Convert::Color::HUSL->new(0, 0, 100);
+my $red    = Convert::Color::HUSL->new(12.17, 100, 50);
+my $green  = Convert::Color::HUSL->new(127.7, 100, 50);
+my $blue   = Convert::Color::HUSL->new(258.9, 100, 50);
+my $yellow = Convert::Color::HUSL->new(86, 100, 92);
+my $orange = Convert::Color::HUSL->new(47.6, 100, 71.2);
+my $purple = Convert::Color::HUSL->new(316, 100, 50);
+
+my @palette = (
+    [   # 0 - EGA 16-color
+        [0x00, 0x00, 0x00], # black
+        [0x00, 0x00, 0xAA], # blue
+        [0x00, 0xAA, 0x00], # green
+        [0x00, 0xAA, 0xAA], # cyan
+        [0xAA, 0x00, 0x00], # red
+        [0xAA, 0x00, 0xAA], # magenta
+        [0xAA, 0x55, 0x00], # brown
+        [0xAA, 0xAA, 0xAA], # light gray
+        [0x55, 0x55, 0x55], # dark gray
+        [0x55, 0x55, 0xFF], # bright blue
+        [0x55, 0xFF, 0x55], # bright green
+        [0x55, 0xFF, 0xFF], # bright cyan
+        [0xFF, 0x55, 0x55], # bright red
+        [0xFF, 0x55, 0xFF], # bright magenta
+        [0xFF, 0xFF, 0x55], # bright yellow
+        [0xFF, 0xFF, 0xFF], # white
+    ],
+    [   # 1 - Gray/R/G/B
+        lightness_progression($white, 0.0, 0.25, 0.5, 0.75),
+        map {
+            lightness_progression($_, 0.4, 0.65, 0.9, 1.15)
+        } ($red, $green, $blue),
+    ],
+    [   # 2 - Red/Blue/Yellow
+        [0x00, 0x00, 0x00],
+        map {
+            lightness_progression($_, 0.3, 0.5, 0.7, 0.9, 1.1)
+        } ($red, $blue, $yellow),
+    ],
+    [   # 3 - Purple/Orange/Green
+        [0x00, 0x00, 0x00],
+        map {
+            lightness_progression($_, 0.3, 0.5, 0.7, 0.9, 1.1)
+        } ($purple, $orange, $green),
+    ],
+    [   # 4 - Red/Green
+        map {
+            lightness_progression($_, 0.2, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0)
+        } ($red, $green),
+    ],
+    [   # 5 - Orange/Blue
+        map {
+            lightness_progression($_, 0.2, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0)
+        } ($orange, $blue),
+        # ILL!
+        # INI!
+    ],
+    [   # 6 - Yellow/Purple
+        map {
+            lightness_progression($_, 0.2, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0)
+        } ($yellow, $purple),
+    ],
+    [   # 7 - Red
+        lightness_progression($red, map { $_ / 16 } 1..16),
+    ],
+    [   # 8 - Green
+        lightness_progression($green, map { $_ / 16 } 1..16),
+    ],
+    [   # 9 - Blue
+        lightness_progression($blue, map { $_ / 16 } 1..16),
+    ],
+);
+
+sub lightness_progression {
+    my $c = shift;
+    map {
+        [Convert::Color::HUSL->new($c->H, $c->S, $c->L * $_)->convert_to('rgb8')->rgb8];
+    } @_;
+}
+
+sub print_color_js {
+    my $c = shift;
+    say "    [", join(', ', map { sprintf("0x%02X", $_) } @$c), "],";
+}
+
+sub print_palette {
+    my $p = shift;
+    say "[";
+    for my $c (@{$palette[$p]}) {
+        print_color_js($c);
+    }
+    say "],";
+}
+
+if (@ARGV) {
+    for my $p (@ARGV) {
+        print_palette($p);
+    }
+} else {
+    for my $p (0..$#palette) {
+        print_palette($p);
+    }
+}