use 5.014;
use warnings;
use utf8;
-use re '/msx';
+use re '/mnsx';
use JSON;
-our $VERSION = '1.00';
+our $VERSION = '1.01';
-my %keysym;
+my (%keysym, %keyval);
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})
+ ( \h* [/][*] [\h(] U[+] (?<unicode>[0-9A-F]{4,6}) )?
} or next;
- $keysym{ $+{name} } = chr hex $+{unicode};
+ my $cp = $+{unicode} // $keyval{ $+{value} } or next;
+ $keysym{ $+{name} } = chr hex $cp;
+ $keyval{ $+{value} } = $cp;
}
print JSON->new->ascii->canonical->indent->encode(\%keysym);