digraphs: prepare xorg comparison in prebuilt data
[sheet.git] / digraphs.plp
index 6b1a5c21bc05371f6c51971a2003684be250ce44..57d0b0f5e53e6975b117d2ceee591d9b783347d2 100644 (file)
@@ -2,6 +2,7 @@
 
 my $mode = ($Request // '') eq 'xorg' || exists $get{xorg};
 my $modename = $mode ? 'X.Org' : 'RFC-1345';
+my $cmp = exists $get{cmp} ? ($get{cmp} // 1) : !!$Request;
 
 Html({
        title => 'digraph cheat sheet',
@@ -58,36 +59,9 @@ my @columns = !exists $get{split} ? \@chars2 :
        ([@chars2[0, 1, 3, 4, 6]], [@chars2[2, 5, 7]]);
 
 if ($mode) {
-       my $xorg = Data('digraphs-xorg');
-       $_->[3] = undef for values %{$xorg};  # reset alias classes
-       $xorg->{$_}->[2] = # class = compatibility
-               !$di->{key}->{$_} ? 'l2' :  # free
-               $di->{key}->{$_}->[0] != $xorg->{$_}->[0] ? 'l1' :  # conflict
-               $di->{key}->{$_}->[2] eq 'l4' ? 'l5' :  # rfc
-               'l3'  # any
-               for keys %{$xorg};
-
-       for my $cp (map {$_->[0]} values %{$xorg}) {
-               next if (state $seen = {})->{$cp}++;  # List::MoreUtils::uniq
-
-               # find multiple equivalent mnemonics
-               my @equiv = grep {$cp eq $_->[0]}
-                       map {$xorg->{$_}} sort keys %{$xorg}; # values ordered by mnem.
-
-               # search for the most compatible match
-               my ($compat) = sort {
-                       $equiv[$b]->[2] cmp $equiv[$a]->[2]  # highest level
-                       || $b <=> $a  # fallback to last mnemonic
-               } 0 .. $#equiv;
-
-               # reclassify all but one as level 0 (omitted)
-               splice @equiv, $compat // -1, 1, ();
-               $_->[2] = 'l0 ex' for @equiv;
-       }
-
+       $di = Data('digraphs-xorg');
        $chars2[0] = [qw( # ^ _ ` ~ )];
        @chars = @chars2;
-       $di->{key} = $xorg;
 }
 
 for my $colchars (@columns) {
@@ -120,7 +94,7 @@ for my $c1group (@chars) {
                        utf8::upgrade($glyph);  # prevent latin1 output
                        my $desc = $mnem . ($name && " ($name)");
                        my @class = ('X', grep {$_} $script);
-                       push @class, $mode ? $support : "u-$support" if $support;
+                       push @class, $cmp ? $support : "u-$support" if $support;
 
                        $glyph = EscapeHTML($glyph);
                        $glyph = "<span>$glyph</span>" if $script =~ /\bZs\b/;
@@ -135,19 +109,8 @@ say '</table>';
 print '<hr>' if exists $get{split};
 }
 
-if ($mode) {
 :>
-<div class="legend">
-       <table class="glyphs"><tr>
-       <td class="X l5">matching RFC-1345
-       <td class="X l3">matching proposal
-       <td class="X l2">unique to Xorg
-       <td class="X l1">conflict
-       <td class="X l0 ex">duplicate
-       </table>
-</div>
-<: } else { :>
-<div class="legend">
+<div class="legend"><: unless ($cmp) { :>
        <table class="glyphs"><tr>
        <td class="X Cc">control
        <td class="X Zs"><span>space</span>
@@ -168,12 +131,11 @@ if ($mode) {
        <td class="X Hiragana">japanese
        <td class="X Bopomofo">chinese
        </table>
-
+<: } :>
        <table class="glyphs"><tr><:
-       print qq(\n\t<td class="X u-$_">$di->{flag}->{$_})
+       printf qq(\n\t<td class="X %s">%s), (!$cmp && 'u-').$_, $di->{flag}->{$_}
                for sort keys %{ $di->{flag} };
 :>
        </table>
 </div>
 
-<: }