use JSON ();
-our $VERSION = '1.00';
+our $VERSION = '1.01';
+
+my $map = shift if @ARGV and $ARGV[0] =~ /^-+m/;
my $info = eval {
local $/;
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