f731e5a7048a248eea697134402e7fb0d9ff3036
[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, @pal);
15         while (readline $theme) {
16                 m{
17                         (?: (foreground | background) | color(\d+) ) \h* : \h*
18                         (?: \#(\S+) | rgb:(\S+) )
19                 }x or next;
20                 my ($name, $idx, $val) = ($1, $2, uc $+);
21                 $name or $idx < 16 or next;
22                 $val =~ s/[^0-9A-F]//g;
23                 ($name ? $pal{$name} : $pal[$idx]) = $val;
24         }
25
26         my $huesum = 0;
27         for my $hue (
28                 sort map { $_->hue }
29                 grep { ($_->hsv)[1] > 32 }  # ignore unsaturated
30                 map { Shiar_Sheet::Colour->new($_) }
31                 @pal
32         ) {
33                 state $lasthue;
34                 $huesum += abs($lasthue - $hue) > .02 if defined $lasthue;
35                 $lasthue = $hue;
36         }
37         $huesum > 3 or next;  # require number of significant hue changes
38         #TODO tweak to include good-pants, exclude cheesecake-*
39
40         say qq("$name" => {);
41         say qq(\ttitle => '$name',);
42         say qq(\tparent => 'cga',);
43         say qq(\tlist => [qw(@pal)],);
44         say qq(\t$_ => '$pal{$_}',) for keys %pal;
45         say qq(},);
46         push @names, $name;
47 }
48
49 say 'xcolor => [', join(', ', map {"'$_'"} @names), '],';
50 say '}';