X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/ed1c096fecf0abce1d1d061f5b9f7cb5fbef7645..HEAD:/Shiar_Sheet/KeyboardChars.pm diff --git a/Shiar_Sheet/KeyboardChars.pm b/Shiar_Sheet/KeyboardChars.pm index b2ee11d..7077d3c 100644 --- a/Shiar_Sheet/KeyboardChars.pm +++ b/Shiar_Sheet/KeyboardChars.pm @@ -9,14 +9,14 @@ use Unicode::Normalize qw( NFKD ); use Text::Unidecode (); use Shiar_Sheet::FormatChar; -our $VERSION = '1.04'; +our $VERSION = '1.05'; our @EXPORT = qw( kbchars kbmodes ); my $uc = Shiar_Sheet::FormatChar->new; our %unaccent = qw( ⍺ a ⍵ w ∊ E ⍷ E ⍴ r ⍳ i ⍸ i ○ O ⍥ O ⌿ / ⍟ (*) ⊕ (+) - Ʊ U ǝ e Ǝ E ʌ v ɥ h ʘ O ɰ mw ɯ mw Ɯ MW ə @ae Ə @AE + Ʊ U ǝ e Ǝ E ʌ vA Ʌ VA ɥ h ʘ O ɰ mw ɯ mw Ɯ MW ə @ae Ə @AE ɸ PF ʎ yl ɔ co Ɔ CO ɛ 3E ƣ q Ƣ Q ∀ A ∃ E ∪ u ∩ n ≠ != ≈ =~ ∅ /0 ∘ o ⋅ . ∫ s ≝ =d ″ " ≤ < ≥ > √ rV ∛ 3V ∜ 4V Α A Β B Γ G Δ D Ε E Ζ Z Η H Θ CQ Ι I Κ K Λ L Μ M @@ -42,28 +42,34 @@ sub kbmodes ($modes) { ); for my $lead (keys %{$modes}) { if ($lead ne '') { - $info{def}->{''}->{$lead} = "g1 mode$lead"; + $info{def}->{''}->{$lead}[0] = "g1 mode$lead"; $g{g1} = 1; $info{mode}->{$lead} //= "mode $lead"; - $info{def}->{$lead}{$lead} = 'g1 mode'; # back + $info{def}->{$lead}{$lead} = ['g1 mode']; # back } while (my ($k, $v) = each %{ $modes->{$lead} }) { + my @class; + if (ref $v eq 'SCALAR') { + my ($reflead, $ref) = split /(.)$/, ${$v}; + $v = $modes->{$reflead}->{$ref}; + @class = 'ext'; + } my ($glyph, $title) = $uc->glyph_html($v); - $info{key}{$lead.$k} = join "\n", $glyph, $title; my $c = $k =~ s/\A[+^](?=.)//r; # trim modifier indicator - my $class = ( + unshift @class, ( !defined $v || $c eq $v ? 'no' # identical : $v =~ /\A\p{Mn}+\z/ ? 'g9' # combining accent - : NFKD($v) =~ /\Q$c/ ? 'g2' # decomposed equivalent + : NFKD($v) =~ /\A\Q$c\E\p{Mn}*\z/ ? 'g2' # decomposed equivalent : unidecode($v) =~ /\Q$c\E+/i ? 'g4' # transliterated : $v =~ /\A[\p{Sk}\p{Lm}]+\z/ ? 'g8' # modifier symbol : $v =~ /\A[\pM\pP]+\z/ ? 'g7' # mark : $v =~ /^\p{Latin}/ ? 'g5' # latin script : 'g6' ); - $g{$class} = 1 unless $class eq 'no'; - $info{def}{$lead}{$k} //= $class; + $g{$_} = 1 for grep { $_ ne 'no' } @class; + $info{def}{$lead}{$k} //= [join ' ', @class]; + $info{def}{$lead}{$k}[1] = join "\n", $glyph, $title; } } $info{flag} = {%{{ @@ -75,6 +81,7 @@ sub kbmodes ($modes) { g7 => ['punctuation', "(punctuation) mark"], g8 => ['mark', "modifier letter or mark (spacing diacritic)"], g9 => ['combining', "diacritical mark to be combined with a following character"], + ext => ['alias', 'alternative with identical results as something else'], }}{keys %g}}; return \%info; }