5 default => [qw( euro latin science graph )],
6 euro => [qw( windows ukext macos macos-abc weur eurkey msx )],
7 latin => [qw( ipa olpc boyeg drix )],
8 science => [qw( symbolics apl spacecadet )],
9 graph => [qw( unigraph emojiworks )],
10 extra => [qw( msx-graph p8scii zoo )],
13 for my $name (map {@{$_}} values %cat) {
14 my $keys = do "keyboard/altgr/$name.eng.inc.pl" or next;
15 my %row = %{$keys}{qw( title category flag mode image imagealt )};
18 $keys->{mode} //= {'' => undef};
20 if ($keys->{def}{''}{'+a'}) {
21 # move root +meta keys to distinct mode
22 $keys->{mode}{"\e"} = '+';
23 /^\+./ and $keys->{def}{"\e"}{$_} = delete $keys->{def}{''}{$_}
24 for keys %{ $keys->{def}{''} };
27 for my $mode (keys %{ $keys->{mode} }) {
28 $row{def}{''}{$_} = $keys->{def}{''}{$_} for $mode || ();
29 $row{inventory}{$mode}{$_}++ for grep { /^g[2-9]/ } map { s/ (?!ext).*//r } map {$_->[0]}
30 values %{ $keys->{def}{$mode} };