keyboard/altgr: label keys in each row with big class
[sheet.git] / tools / mkxkbsymbols
index 0a24a7fa0f561fc21fd9f806607d6a476d138a71..52aa8a9f47cb56de4c2738f25b0410bf335da21b 100755 (executable)
@@ -5,7 +5,9 @@ use utf8;
 
 use JSON ();
 
-our $VERSION = '1.00';
+our $VERSION = '1.01';
+
+my $map = shift if @ARGV and $ARGV[0] =~ /^-+m/;
 
 my $info = eval {
        local $/;
@@ -18,18 +20,28 @@ my $geochar = do './keyspos.inc.pl'
 if (($info->{moderows} // '') =~ /4/) {
        push @{$_}, map {"+$_"} @{$_} for values %{$geochar};
 }
+if ($map) {
+       unshift @{$_}, '', '' for values %{$geochar};
+}
 
 my ($name) = $ARGV =~ m{.*/([^.]+)};
-say "// setxkbmap -print $name | xkbcomp -w0 -I.. - \$DISPLAY";
-say '';
+my $len = (grep { defined $_->[4] } values %{$geochar}) ?
+       'EIGHT' : 'FOUR';
+
+printf <<".";
+default partial alphanumeric_keys
+xkb_symbols "$name" {
+       name[Group1] = "$info->{title}";
+       key.type[Group1] = "${len}_LEVEL_SEMIALPHABETIC";
+.
 
-say sprintf 'xkb_symbols "%s" {', $info->{title};
 for my $k (sort keys %{$geochar}) {
        printf "\tkey <%s> {[%s]};\n", $k, join(', ',
                map { !$_ ? 'NoSymbol' : sprintf 'U%04X', ord }
                map { $info->{key}->{$_} } @{ $geochar->{$k} }
        );
 }
+
 say '};';
 
 =head1 NAME