termcol: exclude monochromatic xcolors palettes
[sheet.git] / tools / mktermcol-xcolor
1 #!/usr/bin/env perl
2 use 5.010;
3
4 use Shiar_Sheet::Colour '1.05';
5
6 say 'use strict;';
7 say '+{';
8 my @names;
9
10 for my $path (glob 'data/xcolors/themes/*') {
11         open my $theme, '<', $path;
12         (my $name = $path) =~ s{.*/}{};  # basename
13
14         my @pal;
15         while (readline $theme) {
16                 m{ color(\d+) \h* : \h* ( \#(\S+) | rgb:(\S+) ) }x or next;
17                 my ($idx, $val) = ($1, uc $+);
18                 $idx < 16 or next;
19                 $val =~ s/[^0-9A-F]//g;
20                 $pal[$idx] = $val;
21         }
22
23         my $huesum = 0;
24         for my $hue (
25                 sort map { $_->hue }
26                 grep { ($_->hsv)[1] > 32 }  # ignore unsaturated
27                 map { Shiar_Sheet::Colour->new($_) }
28                 @pal
29         ) {
30                 state $lasthue;
31                 $huesum += abs($lasthue - $hue) > .02 if defined $lasthue;
32                 $lasthue = $hue;
33         }
34         $huesum > 3 or next;  # require number of significant hue changes
35         #TODO tweak to include good-pants, exclude cheesecake-*
36
37         say qq("$name" => {);
38         say qq(\ttitle => '$name',);
39         say qq(\tparent => 'cga',);
40         say qq(\tlist => [qw(@pal)],);
41         say qq(},);
42         push @names, $name;
43 }
44
45 say 'xcolor => [', join(', ', map {"'$_'"} @names), '],';
46 say '}';