digraphs/xorg: intermediate map of keysymdef.h names
[sheet.git] / tools / mkxkeysymdef
diff --git a/tools/mkxkeysymdef b/tools/mkxkeysymdef
new file mode 100755 (executable)
index 0000000..e7d7690
--- /dev/null
@@ -0,0 +1,39 @@
+#!/usr/bin/env perl
+use 5.014;
+use warnings;
+use utf8;
+use re '/msx';
+use JSON;
+
+our $VERSION = '1.00';
+
+my %keysym;
+while (readline) {
+       m{
+               \A  [#]define[ ]XK_ (?<name>[a-zA-Z_0-9]+)
+               \h+ 0x(?<value>[0-9a-fA-F]+)
+               \h* [/][*] [\h(] U[+] (?<unicode>[0-9A-F]{4,6})
+       } or next;
+       $keysym{ $+{name} } = chr hex $+{unicode};
+}
+
+print JSON->new->ascii->canonical->indent->encode(\%keysym);
+
+__END__
+
+=head1 NAME
+
+mkxkeysymdef - Map Xorg key symbol names to Unicode characters
+
+=head1 SYNOPSIS
+
+    mkxkeysymdef /usr/incnlude/X11/keysymdef.h >keysymdef.json
+
+=head1 AUTHOR
+
+Mischa POSLAWSKY <perl@shiar.org>
+
+=head1 LICENSE
+
+Licensed under the GNU Affero General Public License version 3.
+