50 lines
1.4 KiB
Bash
50 lines
1.4 KiB
Bash
|
#!/bin/sh
|
||
|
gofmt <<EOF | sed 's, *//$,,'
|
||
|
// Code generated by running "go generate" in janouch.name/haven. DO NOT EDIT.
|
||
|
|
||
|
package $GOPACKAGE
|
||
|
|
||
|
import "janouch.name/haven/nexgb/xproto"
|
||
|
|
||
|
$(curl --silent --show-error \
|
||
|
https://cgit.freedesktop.org/xorg/proto/x11proto/plain/keysymdef.h \
|
||
|
https://cgit.freedesktop.org/xorg/proto/x11proto/plain/XF86keysym.h \
|
||
|
| perl -lne '
|
||
|
next unless /^\#define\s+
|
||
|
(XF86)?(XK_)([a-zA-Z_0-9]+)\s+
|
||
|
0x([0-9a-fA-F]+)\s*
|
||
|
(?:\/\*\s*(.*?)\s*\*\/)?\s*
|
||
|
$/x;
|
||
|
|
||
|
my ($name, $ident, $hex, $comment) =
|
||
|
(($1 // "") . $3, ($1 // "") . $2 . $3, lc $4, ($5 // ""));
|
||
|
|
||
|
# They are already somewhat sorted in the source file.
|
||
|
push @a, { hex => $hex, ident => $ident, comment => $comment };
|
||
|
|
||
|
$nametokeysym{$name} = $ident;
|
||
|
|
||
|
# All but the first name listed should be considered deprecated.
|
||
|
$keysymtoname{$ident} = $name unless exists $seen{$hex};
|
||
|
$seen{$hex}++;
|
||
|
|
||
|
END {
|
||
|
print "const (";
|
||
|
print "$_->{ident} = 0x$_->{hex} // $_->{comment}" for @a;
|
||
|
print ")";
|
||
|
|
||
|
# Very large tables, should be an on-demand package :(
|
||
|
|
||
|
print "// KeysymToName maps X11 keysym constants to their names";
|
||
|
print "var KeysymToName = map[xproto.Keysym]string{";
|
||
|
print "$_: \"$keysymtoname{$_}\"," for sort keys %keysymtoname;
|
||
|
print "}";
|
||
|
|
||
|
print "// NameToKeysym maps X11 keysym names to their constants";
|
||
|
print "var NameToKeysym = map[string]xproto.Keysym{";
|
||
|
print "\"$_\": $nametokeysym{$_}," for sort keys %nametokeysym;
|
||
|
print "}";
|
||
|
}
|
||
|
')
|
||
|
EOF
|