4 BEGIN { push @INC, '.'; }
5 use Shiar_Sheet::Colour 1.05;
7 say "# automatically generated by $0";
13 for my $path (@ARGV) {
14 open my $theme, '<', $path or do {
15 warn "could not open $path: $!\n";
18 (my $name = $path) =~ s{.*/}{}; # basename
21 while (readline $theme) {
23 (?: (foreground | background) | color(\d+) ) \h* : \h*
24 (?: \#(\S+) | rgb:(\S+) )
26 my ($name, $idx, $val) = ($1, $2, uc $+);
27 $name or $idx < 16 or next;
28 $val =~ s/[^0-9A-F]//g;
29 ($name ? $pal{$name} : $pal[$idx]) = $val;
35 grep { ($_->hsv)[1] > 32 } # ignore unsaturated
36 map { Shiar_Sheet::Colour->new($_) }
40 $huesum += abs($lasthue - $hue) > .02 if defined $lasthue;
43 $huesum > 3 or next; # require number of significant hue changes
44 #TODO tweak to include good-pants, exclude cheesecake-*
46 if ($seen{"@pal"}++) {
47 warn "ignore duplicate palette $name\n";
51 splice @pal, 8 if "@pal[0..7]" eq "@pal[8..15]";
54 say qq(\ttitle => '$name',);
55 say qq(\tparent => 'cga',);
56 say qq(\tlist => [qw(@pal)],);
57 say qq(\t$_ => '$pal{$_}',) for keys %pal;
62 say 'xcolor => [', join(', ', map {"'$_'"} @names), '],';