X-Git-Url: http://git.shiar.net/sheet.git/blobdiff_plain/9830d2491e85baa0f42cb0898f2c19974e21e96a..0eb0af3c6f7b6dda01f5de21de11732ab9cb0cc8:/tools/mkdigraphs-xorg diff --git a/tools/mkdigraphs-xorg b/tools/mkdigraphs-xorg index c2dd441..b34bef5 100755 --- a/tools/mkdigraphs-xorg +++ b/tools/mkdigraphs-xorg @@ -4,24 +4,16 @@ use warnings; use utf8; use open IO => ':encoding(utf-8)', ':std'; use re '/msx'; +use JSON 'decode_json'; use Data::Dump 'pp'; our $VERSION = '1.01'; -my $keysymh; -open $keysymh, '<', 'data/keysymdef.h' - or open $keysymh, '<', '/usr/include/X11/keysymdef.h' - or die "Could not find keysym definitions: $!\n"; - -my %keysym; -while (readline $keysymh) { - m{ - \A [#]define[ ]XK_ (?[a-zA-Z_0-9]+) - \h+ 0x(?[0-9a-f]+) - \h* [/][*] [\h(] U[+] (?[0-9A-F]{4,6}) - } or next; - $keysym{ $+{name} } = chr hex $+{unicode}; -} +my $symname = eval { + open my $keysymh, '<', 'data/keysymdef.json' or die $!; + local $/; + return decode_json(readline $keysymh); +} or die "Could not read keysym definitions: $@\n"; say "# automatically generated by $0"; say '+{'; @@ -31,7 +23,7 @@ while ($_ = readline) { or next; $chr =~ s/\\(.)/$1/g; $mnem !~ m/]+)> \h?}{$keysym{$1} // die "reference to unknown keysym $1\n"}eg; + $mnem =~ s{<([^>]+)> \h?}{$symname->{$1} // die "reference to unknown keysym $1\n"}eg; $mnem !~ m/[^\x20-\x7F]/ or next; # skip unicode # (state $seen = {})->{$chr}++ and next; printf "%s => %s,\n", pp($mnem), pp($chr);