From cd6c9e4d8c6a49eb91091c00b55e0f879c9220bf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C5=99emysl=20Janouch?=
Date: Wed, 12 Sep 2018 13:38:33 +0200
Subject: ht: add generated X11 keysym maps
Now we can make sense of keysyms and translate them to text.
---
ht/gen-unicode-map.sh | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
create mode 100755 ht/gen-unicode-map.sh
(limited to 'ht/gen-unicode-map.sh')
diff --git a/ht/gen-unicode-map.sh b/ht/gen-unicode-map.sh
new file mode 100755
index 0000000..7e94880
--- /dev/null
+++ b/ht/gen-unicode-map.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+gofmt <= 0x20 && ks <= 0x7e) || (ks >= 0xa0 && ks <= 0xff) {
+ return rune(ks)
+ }
+ // Directly encoded 24-bit Unicode (going even above plane 16)
+ if (ks & 0xff000000) == 0x01000000 {
+ return rune(ks & 0x00ffffff)
+ }
+
+ min, max := 0, len(keysymToRuneTable)-1
+ for max >= min {
+ mid := (min + max) / 2
+ if keysymToRuneTable[mid].keysym < ks {
+ min = mid + 1
+ } else if keysymToRuneTable[mid].keysym > ks {
+ max = mid - 1
+ } else {
+ return keysymToRuneTable[mid].unicode
+ }
+ }
+ return -1
+}
+
+var keysymToRuneTable = []struct{
+ keysym xproto.Keysym
+ unicode rune
+}{
+$(curl --silent --show-error --location \
+ https://invisible-island.net/datafiles/release/xterm.tar.gz | \
+tar --wildcards -xzOf - 'xterm-*/unicode/keysym.map' | \
+sort | perl -lne '
+ next unless /^(0x([0-9a-f]{4}))\s+U([0-9a-f]{4})\s*(?:\#\s*(.*))?$/;
+ my ($keysym, $ks, $unicode, $comment) = ($1, hex($2), $3, ($4 // ""));
+ print "{$keysym, 0x$unicode}, // $comment"
+ if $ks >= 0x100 && $unicode ne "0000";
+')
+}
+EOF
--
cgit v1.2.3