font: strip ascii chars from default ipa selection
[sheet.git] / font.plp
index ddc35b4d5a8153770493ad535fc5af8fadd151f2..b081ac2749567468c920a663f81b52ffafed1372 100644 (file)
--- a/font.plp
+++ b/font.plp
@@ -52,12 +52,14 @@ for my $os (@ossel) {
 # parse input
 
 my @chars;
+my @querydesc;
 
 my $query = $ENV{PATH_INFO} || $get{q} || 'ipa';
 for ($query) {
        s{^/}{};
        when (qr{^[a-z]+(?:/|\z)}) {
                for (split / /) {
+                       push @querydesc, "preset group $_";
                        my ($tablegroup, $tablename) = split m{/}, $_, 2;
                        my @tables = $tablename ? $tables->{$tablegroup}->{$tablename}
                                   : sort values %{ $tables->{$tablegroup} };
@@ -71,14 +73,19 @@ for ($query) {
                                }
                        }
                }
+               when ('ipa') {
+                       @chars = grep { !m/[a-zA-Z]/ } @chars;
+               }
        }
        when (qr{[\d,;\s+-]+}) {
+               push @querydesc, "character codepoints $_";
                for (map { split /[^\d-]/ } $_) {
                        my ($charnum, $range) = split /-/, $_;
                        push @chars, chr $_ for $charnum .. ($range // $charnum);
                }
        }
        when (qr{[A-Z]}) {
+               push @querydesc, "unicode match $_";
                eval {
                        my $match = qr/\A\p{$_}\z/;
                        push @chars, grep { m/$match/ } map { chr $_ }
@@ -90,12 +97,15 @@ for ($query) {
        }
 }
 
-@chars <= 1500
-       or die sprintf 'too many matches (%d)'."\n", scalar @chars;
+@chars <= 1500 or die sprintf(
+       'too many matches (%d) for %s'."\n",
+       scalar @chars, join(', ', @querydesc),
+);
 
 # output character list
 
 print '<table class=mapped>';
+say '<caption>'.EscapeHTML(join ', ', @querydesc).'</caption>';
 print '<col>' x 3;
 print "<colgroup span=$_>" for 2, map { scalar @{$oslist{$_}} } @ossel;
 
@@ -122,7 +132,7 @@ for my $chr (@chars) {
        my ($class, $name, $mnem, $html, $string) = @$info;
        print "<td>$_" for sprintf('%X', $codepoint), EscapeHTML($name || '?');
        printf '<td class="%s">%s', @$_ for (
-               [$ascii ? 'l0' : defined $mnem ? 'l4' : 'l1', $mnem // ''],
+               [$ascii ? 'l0' : defined $mnem ? $class =~ /\bu-di\b/ ? 'l4' : 'l3' : 'l1', $mnem // ''],
                [$ascii ? 'l0' : defined $html ? 'l4' : 'l1', $html // ''],
                (map {
                        !$font{$_}->{-id} ? [l0 => '?'] :