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