From 0d857282fe8df38f1cddffda78487cefbf21f3a2 Mon Sep 17 00:00:00 2001 From: Devaev Maxim Date: Wed, 15 Jul 2020 17:05:04 +0300 Subject: [PATCH] csv --- Makefile | 4 +- genmap.py | 59 +++++++++++++---------- keymap.csv | 105 +++++++++++++++++++++++++++++++++++++++++ keymap.in | 136 ----------------------------------------------------- 4 files changed, 142 insertions(+), 162 deletions(-) create mode 100644 keymap.csv delete mode 100644 keymap.in diff --git a/Makefile b/Makefile index 3545a57d..cd56b4f8 100644 --- a/Makefile +++ b/Makefile @@ -138,8 +138,8 @@ keymap: testenv docker run --user `id -u`:`id -g` --rm \ --volume `pwd`:/src \ -it $(TESTENV_IMAGE) bash -c "cd src \ - && ./genmap.py keymap.in kvmd/keyboard/mappings.py.mako kvmd/keyboard/mappings.py \ - && ./genmap.py keymap.in hid/src/keymap.h.mako hid/src/keymap.h \ + && ./genmap.py keymap.csv kvmd/keyboard/mappings.py.mako kvmd/keyboard/mappings.py \ + && ./genmap.py keymap.csv hid/src/keymap.h.mako hid/src/keymap.h \ " diff --git a/genmap.py b/genmap.py index 0de7b503..8457393b 100755 --- a/genmap.py +++ b/genmap.py @@ -22,6 +22,7 @@ import sys +import csv import textwrap import dataclasses @@ -66,32 +67,29 @@ def _resolve_keysym(name: str) -> int: return code -def _read_keymap_in(path: str) -> List[_KeyMapping]: +def _read_keymap_csv(path: str) -> List[_KeyMapping]: keymap: List[_KeyMapping] = [] with open(path) as keymap_file: - for line in keymap_file: - line = line.strip() - if len(line) > 0 and not line.startswith("#"): - parts = list(map(str.strip, line.split())) - if len(parts) >= 6: - otg_is_modifier = parts[3].startswith("^") - otg_code = int((parts[3][1:] if otg_is_modifier else parts[3]), 16) + for row in csv.DictReader(keymap_file): + if len(row) >= 6: + otg_is_modifier = row["otg_key"].startswith("^") + otg_code = int((row["otg_key"][1:] if otg_is_modifier else row["otg_key"]), 16) - x11_keys: Set[_X11Key] = set() - for x11_name in parts[5].split(","): - x11_shift = x11_name.startswith("^") - x11_name = (x11_name[1:] if x11_shift else x11_name) - x11_code = _resolve_keysym(x11_name) - x11_keys.add(_X11Key(x11_name, x11_code, x11_shift)) + x11_keys: Set[_X11Key] = set() + for x11_name in row["x11_names"].split(","): + x11_shift = x11_name.startswith("^") + x11_name = (x11_name[1:] if x11_shift else x11_name) + x11_code = _resolve_keysym(x11_name) + x11_keys.add(_X11Key(x11_name, x11_code, x11_shift)) - keymap.append(_KeyMapping( - web_name=parts[0], - serial_code=int(parts[1]), - arduino_name=parts[2], - otg_key=_OtgKey(otg_code, otg_is_modifier), - at1_code=int(parts[4], 16), - x11_keys=x11_keys, - )) + keymap.append(_KeyMapping( + web_name=row["web_name"], + serial_code=int(row["serial_code"]), + arduino_name=row["arduino_name"], + otg_key=_OtgKey(otg_code, otg_is_modifier), + at1_code=int(row["at1_code"], 16), + x11_keys=x11_keys, + )) return keymap @@ -105,9 +103,22 @@ def _render_keymap(keymap: List[_KeyMapping], template_path: str, out_path: str) # ===== def main() -> None: - assert len(sys.argv) == 4, f"{sys.argv[0]}