From f4377fa7ab32ce088460551744de22bab93515dc Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Fri, 15 Mar 2024 00:15:05 +0100 Subject: [PATCH] keyboard/altgr: scalar references indicate aliases Common support in Shiar_Sheet::FormatChar::kbchars() replaces some manual definition manipulation; adding a couple in eurkey previously not worth the effort. --- Shiar_Sheet/KeyboardChars.pm | 15 +++++++++++---- keyboard/altgr/drix.eng.inc.pl | 11 ++++------- keyboard/altgr/eurkey.eng.inc.pl | 8 ++++++-- keyboard/altgr/olpc.eng.inc.pl | 3 +-- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/Shiar_Sheet/KeyboardChars.pm b/Shiar_Sheet/KeyboardChars.pm index d0e84c8..5301185 100644 --- a/Shiar_Sheet/KeyboardChars.pm +++ b/Shiar_Sheet/KeyboardChars.pm @@ -9,7 +9,7 @@ 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; @@ -48,11 +48,17 @@ sub kbmodes ($modes) { $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) =~ /\A\Q$c\E\p{Mn}*\z/ ? 'g2' # decomposed equivalent @@ -62,8 +68,8 @@ sub kbmodes ($modes) { : $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{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; } diff --git a/keyboard/altgr/drix.eng.inc.pl b/keyboard/altgr/drix.eng.inc.pl index c36f53b..a63a5a0 100644 --- a/keyboard/altgr/drix.eng.inc.pl +++ b/keyboard/altgr/drix.eng.inc.pl @@ -31,7 +31,7 @@ my %rows = ( ']' => "}", '^' => "\N{COMBINING MACRON}", '_' => "\xB1", - '`' => "\xA3", + '`' => \'l', 'A' => "\x{2190}", 'a' => "\xE6", 'B' => "\x{20bf}", @@ -41,7 +41,7 @@ my %rows = ( 'd' => "\x{394}", 'D' => "\x{2192}", 'e' => "\x{20AC}", - 'E' => "\x{20AC}", + 'E' => \'e', 'f' => "\x{192}", 'F' => "\x{191}", #'g' => "g", @@ -81,7 +81,7 @@ my %rows = ( 'x' => "\xD7", 'X' => "\xF7", 'y' => "\xA5", - 'Y' => "\xA5", + 'Y' => \'y', 'z' => "\xA7", 'Z' => "\xB6", '{' => "\xAB", @@ -103,11 +103,8 @@ my %rows = ( ';' => "\xA1", # unshifted ! at m ); -my $groups = kbchars(\%rows); -$groups->{def}{''}{$_} .= ' ext' for qw( ` E Y ); - +{ - %{$groups}, + %{ kbchars(\%rows) }, version => '1.0', title => 'Drix', category => 'latin/xorg', diff --git a/keyboard/altgr/eurkey.eng.inc.pl b/keyboard/altgr/eurkey.eng.inc.pl index d628ac1..ac79027 100644 --- a/keyboard/altgr/eurkey.eng.inc.pl +++ b/keyboard/altgr/eurkey.eng.inc.pl @@ -109,7 +109,7 @@ my %rows = ( # greek 'm' => { 'a' => 'α', - 'b' => 'β', # v + 'b' => 'β', 'g' => 'γ', 'd' => 'δ', 'e' => 'ε', @@ -131,7 +131,11 @@ my %rows = ( 'f' => 'φ', 'c' => 'χ', 'w' => 'ψ', - 'q' => 'ω', # u + 'q' => 'ω', + + # aliases + 'v' => \'mb', + 'u' => \'mq', # suþscript '1' => '¹', diff --git a/keyboard/altgr/olpc.eng.inc.pl b/keyboard/altgr/olpc.eng.inc.pl index 3d72e36..e67d8e7 100644 --- a/keyboard/altgr/olpc.eng.inc.pl +++ b/keyboard/altgr/olpc.eng.inc.pl @@ -64,11 +64,10 @@ my %shift = ( qw( { [ } ] " ' | \ < , > . ? / ` 3 ~ = ), (map {uc, lc} qw[ r t y u i o p h j m ]), ); -$rows{$_} = $rows{ $shift{$_} } for keys %shift; # alias shifted +$rows{$_} = \$shift{$_} for keys %shift; # alias shifted my $groups = kbchars(\%rows); $groups->{flag}{ext} = ['alias', 'identical results from unshifted key']; -$groups->{def}{''}{$_} .= ' ext' for keys %shift; # mark aliases +{ %{ $groups }, -- 2.30.0