digraphs: separate rfc parser from include generator
[sheet.git] / tools / mkfontinfo
index 0f0857d73f06a27bdec2d5f937d916121021da9e..deada09937691bd4e94aa7676e86ddb5b7a1153e 100755 (executable)
@@ -23,9 +23,6 @@ for my $fontfile (glob 'ttfsupport/*'.$incsuffix) {
        };
 }
 
-       when (qr{^[a-z]+(?:/|\z)}) {
-       }
-
 my %charlist;
 
 my $chartables = do 'unicode-table.inc.pl' or warn $@ || $!;
@@ -38,6 +35,7 @@ if ($chartables) {
                                $includerows ||= m/^[.]/ or next;
                                next if /^[.-]/;
                                next if $_ eq '>' or $_ eq '=';
+                               s/^\\//;  # escape
                                push @{ $charlist{table}->{"$tablegroup/$tablename"} }, $_;
                                push @{ $charlist{table}->{$tablegroup} }, $_;
                        }
@@ -48,6 +46,17 @@ if ($chartables) {
        }
 }
 
+eval {
+       require HTML::Entities;
+       our %char2entity;
+       HTML::Entities->import('%char2entity');
+       while (my ($char, $entity) = each %char2entity) {
+               $entity =~ /[a-zA-Z]/ or next;  # only actual aliases
+               push @{ $charlist{table}->{html} }, $char;
+       }
+       1;
+} or warn "Could not include count for html entities: $@";
+
 use Unicode::UCD 'charinfo';
 for my $code (0 .. 256**2) {
        my $charinfo = charinfo($code) or next;
@@ -63,12 +72,31 @@ for my $chars (values %{$_}) {
                ($_ => scalar grep { $fontcover->{$_} } @{$chars});
        } keys %font;
        $row{-count} = scalar @{$chars};
-#      $row{-chars} = [ map { ord } sort @{$chars} ];
+
+       $row{-query} = eval {
+               my @query = map { ord } sort @{$chars};
+               my $i = 0;
+               while ($i < @query) {
+                       my $j = $i + 1;
+                       my $v = $query[$i];
+                       while ($j < @query) {
+                               $v++;
+                               last if $query[$j] != $v;
+                               $j++;
+                       }
+                       if ($j - $i > 2) {
+                               splice(@query, $i, $j - $i, "$query[$i]-$query[$j-1]");
+                       }
+                       $i++;
+               }
+               return join '+', @query;
+       };
 
        $chars = \%row;
 }
 }
 
+say "# automatically generated by $0";
 say 'use utf8;';
 say '+'.pp(\%charlist);