From: Mischa POSLAWSKY Date: Sun, 22 Feb 2015 19:10:59 +0000 (+0100) Subject: digraphs: smart deprecation of xorg alternates X-Git-Tag: v1.7~86 X-Git-Url: http://git.shiar.nl/sheet.git/commitdiff_plain/eb571732118d75658b26ecc68a48682baadca000 digraphs: smart deprecation of xorg alternates --- diff --git a/digraphs.plp b/digraphs.plp index 1522bf4..718915d 100644 --- a/digraphs.plp +++ b/digraphs.plp @@ -1,4 +1,5 @@ <(common.inc.plp)><: +use 5.010; # state Html({ title => 'digraph cheat sheet', @@ -45,9 +46,29 @@ if (exists $get{xorg}) { my $xorg = do 'data/digraphs-xorg.inc.pl' or die "Error loading Xorg data: ", $@ // $!; $_ = [ord $_] for values %{$xorg}; - $xorg->{$_}->[2] = # class = same as rfc | any other spec | xorg only - $di->{$_} ? $di->{$_}->[2] =~ /\bu-di\b/ ? 'l5' : 'l3' : 'l1' + $xorg->{$_}->[2] = # class = compatibility + $di->{$_} ? $di->{$_}->[0] != $xorg->{$_}->[0] ? 'l1' : # conflict + $di->{$_}->[2] =~ /\bu-di\b/ ? 'l5' : 'l3' : 'l2' # rfc|any|none 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; + } + $chars2[0] = [qw( # ^ _ ` ~ )]; @chars = @chars2; $di = $xorg;