From 8b1c76d920b5143df727dcb4d06f54934e2c7e9e Mon Sep 17 00:00:00 2001 From: Johannes Marbach Date: Thu, 9 Sep 2021 14:07:50 +0200 Subject: [PATCH] Split auto-generated layouts into dedicated file --- Makefile | 2 +- README.md | 11 +- generate-keymaps.sh | 5 + layouts.c | 327 +---------------------------------------- layouts.h | 15 +- unsqu33kr/unsqu33kr.py | 146 ++++++++++++++---- uskr_layouts.c | 319 ++++++++++++++++++++++++++++++++++++++++ uskr_layouts.h | 33 +++++ 8 files changed, 489 insertions(+), 369 deletions(-) create mode 100755 generate-keymaps.sh create mode 100644 uskr_layouts.c create mode 100644 uskr_layouts.h diff --git a/Makefile b/Makefile index a4bf13d..44a51ec 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ BIN = unl0kr #Collect the files to compile -MAINSRC = ./main.c ./libinput_device_discovery.c ./libinput_multi.c ./libinput_xkb.c ./layouts.c ./montserrat_extended_32.c +MAINSRC = ./main.c ./libinput_device_discovery.c ./libinput_multi.c ./libinput_xkb.c ./layouts.c ./montserrat_extended_32.c ./uskr_layouts.c include $(LVGL_DIR)/lvgl/lvgl.mk include $(LVGL_DIR)/lv_drivers/lv_drivers.mk diff --git a/README.md b/README.md index 9e0a27f..99c435a 100644 --- a/README.md +++ b/README.md @@ -97,16 +97,12 @@ $ npx lv_font_conv --bpp 4 --size 32 --no-compress -o montserrat_extended_32.c - ## Changing layouts -The layouts in [layouts.c] are generated from [squeekboard layouts] using the [unsqu33kr/unsqu33kr.py] script. To run the script use the following commands +The layouts in [uskr_layouts.h] and [uskr_layouts.c] are generated from [squeekboard layouts] using the [unsqu33kr/unsqu33kr.py] script. To regenerate the files, run ``` -$ cd unsqu33kr -$ pipenv install -$ pipenv run python unsqu33kr.py +$ ./generate-keymaps.sh ``` -Then copy the output into [layouts.c]. - ## Screen recording For demonstration purposes you can record the framebuffer device, e.g. with ffmpeg: @@ -136,7 +132,8 @@ The Font Awesome font is licensed under the Open Font License version 1.1. [online font converter]: https://lvgl.io/tools/fontconverter [Font Awesome]: https://lvgl.io/assets/others/FontAwesome5-Solid+Brands+Regular.woff [adjust]: https://fontawesome.com/v5.15/icons/adjust?style=solid -[layouts.c]: layouts.c +[uskr_layouts.h]: uskr_layouts.h +[uskr_layouts.c]: uskr_layouts.c [unsqu33kr/unsqu33kr.py]: unsqu33kr/unsqu33kr.py [squeekboard layouts]: https://gitlab.gnome.org/World/Phosh/squeekboard/-/tree/master/data/keyboards [fix(examples) don't compile assets unless needed]: https://github.com/lvgl/lvgl/pull/2523 diff --git a/generate-keymaps.sh b/generate-keymaps.sh new file mode 100755 index 0000000..63176fd --- /dev/null +++ b/generate-keymaps.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +cd unsqu33kr +pipenv install +pipenv run python unsqu33kr.py --output .. diff --git a/layouts.c b/layouts.c index 0684bd1..16d084a 100644 --- a/layouts.c +++ b/layouts.c @@ -1,336 +1,19 @@ #include "layouts.h" - -/** - * English (US) - **/ - -#define NAME_US "us" - -/* Lowercase layer */ -#define KEYS_LOWER_US { \ - "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "\n", \ - "a", "s", "d", "f", "g", "h", "j", "k", "l", "\n", \ - "ABC", "z", "x", "c", "v", "b", "n", "m", LV_SYMBOL_BACKSPACE, "\n", \ - "1#", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, ".", LV_SYMBOL_OK, "" \ -} -#define ATTRIBUTES_LOWER_US { \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ -} - -/* Uppercase layer */ -#define KEYS_UPPER_US { \ - "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "\n", \ - "A", "S", "D", "F", "G", "H", "J", "K", "L", "\n", \ - "abc", "Z", "X", "C", "V", "B", "N", "M", LV_SYMBOL_BACKSPACE, "\n", \ - "1#", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, ".", LV_SYMBOL_OK, "" \ -} -#define ATTRIBUTES_UPPER_US { \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ -} - -/* Number / symbol layer */ -#define KEYS_NUMBERS_US { \ - "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "\n", \ - "@", "#", "$", "%", "&", "-", "_", "+", "(", ")", "\n", \ - ",", "\"", "'", ":", ";", "!", "?", LV_SYMBOL_BACKSPACE, "\n", \ - "abc", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, ".", LV_SYMBOL_OK, "" \ -} -#define ATTRIBUTES_NUMBERS_US { \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ -} - -/* Special characters */ -#define TRIGGER_SPECIAL_US "" -#define KEYS_SPECIAL_US { NULL } -#define ATTRIBUTES_SPECIAL_US { 0 } - -/** - * French - **/ - -#define NAME_FR "fr" - -/* Lowercase layer */ -#define KEYS_LOWER_FR { \ - "a", "z", "e", "r", "t", "y", "u", "i", "o", "p", "\n", \ - "q", "s", "d", "f", "g", "h", "j", "k", "l", "m", "\n", \ - "ABC", "w", "x", "c", "v", "b", "n", ".", LV_SYMBOL_BACKSPACE, "\n", \ - "1#", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "àéô", LV_SYMBOL_OK, "" \ -} -#define ATTRIBUTES_LOWER_FR { \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ -} - -/* Uppercase layer */ -#define KEYS_UPPER_FR { \ - "A", "Z", "E", "R", "T", "Y", "U", "I", "O", "P", "\n", \ - "Q", "S", "D", "F", "G", "H", "J", "K", "L", "M", "\n", \ - "abc", "W", "X", "C", "V", "B", "N", ",", LV_SYMBOL_BACKSPACE, "\n", \ - "1#", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "àéô", LV_SYMBOL_OK, "" \ -} -#define ATTRIBUTES_UPPER_FR { \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ -} - -/* Number / symbol layer */ -#define KEYS_NUMBERS_FR { \ - "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "\n", \ - "@", "#", "€", "%", "&", "-", "_", "+", "(", ")", "\n", \ - ",", "\"", "'", ":", ";", "!", "?", LV_SYMBOL_BACKSPACE, "\n", \ - "abc", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "àéô", LV_SYMBOL_OK, "" \ -} -#define ATTRIBUTES_NUMBERS_FR { \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ -} - -/* Special characters */ -#define TRIGGER_SPECIAL_FR "àéô" -#define KEYS_SPECIAL_FR { \ - "à", "â", "ç", "é", "è", "ê", "î", "ô", "ù", "û", "\n", \ - "À", "Â", "Ç", "É", "È", "Ê", "Î", "Ô", "Ù", "Û", "\n", \ - "1#", "æ", "œ", "ä", "ë", "ï", "ö", "ü", LV_SYMBOL_BACKSPACE, "\n", \ - "abc", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "àéô", LV_SYMBOL_OK, "" \ -} -#define ATTRIBUTES_SPECIAL_FR { \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ -} - -/** - * Spanish - **/ - -#define NAME_ES "es" - -/* Lowercase layer */ -#define KEYS_LOWER_ES { \ - "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "\n", \ - "a", "s", "d", "f", "g", "h", "j", "k", "l", "ñ", "\n", \ - "ABC", "z", "x", "c", "v", "b", "n", "m", LV_SYMBOL_BACKSPACE, "\n", \ - "1#", "áéí", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "?", ".", LV_SYMBOL_OK, "" \ -} -#define ATTRIBUTES_LOWER_ES { \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ -} - -/* Uppercase layer */ -#define KEYS_UPPER_ES { \ - "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "\n", \ - "A", "S", "D", "F", "G", "H", "J", "K", "L", "Ñ", "\n", \ - "abc", "Z", "X", "C", "V", "B", "N", "M", LV_SYMBOL_BACKSPACE, "\n", \ - "1#", "áéí", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "¿", ".", LV_SYMBOL_OK, "" \ -} -#define ATTRIBUTES_UPPER_ES { \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ -} - -/* Number / symbol layer */ -#define KEYS_NUMBERS_ES { \ - "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "\n", \ - "@", "#", "€", "%", "&", "-", "_", "+", "(", ")", "\n", \ - ",", "\"", "'", ":", ";", "!", "=", LV_SYMBOL_BACKSPACE, "\n", \ - "abc", "áéí", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "?", ".", LV_SYMBOL_OK, "" \ -} -#define ATTRIBUTES_NUMBERS_ES { \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ -} - -/* Special characters */ -#define TRIGGER_SPECIAL_ES "áéí" -#define KEYS_SPECIAL_ES { \ - "á", "é", "í", "ó", "ú", "Á", "É", "Í", "Ó", "Ú", "\n", \ - "à", "è", "ì", "ò", "ù", "À", "È", "Ì", "Ò", "Ù", "\n", \ - "1#", "ü", "ç", "ï", "Ü", "Ç", "Ï", "¡", LV_SYMBOL_BACKSPACE, "\n", \ - "abc", "áéí", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "«", "»", LV_SYMBOL_OK, "" \ -} -#define ATTRIBUTES_SPECIAL_ES { \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ -} - -/** - * German - **/ - -#define NAME_DE "de" - -/* Lowercase layer */ -#define KEYS_LOWER_DE { \ - "q", "w", "e", "r", "t", "z", "u", "i", "o", "p", "\n", \ - "a", "s", "d", "f", "g", "h", "j", "k", "l", "\n", \ - "ABC", "y", "x", "c", "v", "b", "n", "m", LV_SYMBOL_BACKSPACE, "\n", \ - "1#", "äöü", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, ",", ".", LV_SYMBOL_OK, "" \ -} -#define ATTRIBUTES_LOWER_DE { \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ -} - -/* Uppercase layer */ -#define KEYS_UPPER_DE { \ - "Q", "W", "E", "R", "T", "Z", "U", "I", "O", "P", "\n", \ - "A", "S", "D", "F", "G", "H", "J", "K", "L", "\n", \ - "abc", "Y", "X", "C", "V", "B", "N", "M", LV_SYMBOL_BACKSPACE, "\n", \ - "1#", "äöü", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "!", "?", LV_SYMBOL_OK, "" \ -} -#define ATTRIBUTES_UPPER_DE { \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ -} - -/* Number / symbol layer */ -#define KEYS_NUMBERS_DE { \ - "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "\n", \ - "@", "#", "€", "%", "&", "-", "_", "+", "(", ")", "\n", \ - ";", "\"", "'", ":", "=", "<", ">", LV_SYMBOL_BACKSPACE, "\n", \ - "abc", "äöü", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, ",", ".", LV_SYMBOL_OK, "" \ -} -#define ATTRIBUTES_NUMBERS_DE { \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ -} - -/* Special characters */ -#define TRIGGER_SPECIAL_DE "äöü" -#define KEYS_SPECIAL_DE { \ - "ä", "è", "é", "ö", "ü", "Ä", "È", "É", "Ö", "Ü", "\n", \ - "à", "â", "ê", "î", "ô", "À", "Â", "È", "Î", "Ô", "\n", \ - "1#", "«", "»", "ç", "Ç", "æ", "œ", "ß", LV_SYMBOL_BACKSPACE, "\n", \ - "abc", "äöü", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "„", "“", LV_SYMBOL_OK, "" \ -} -#define ATTRIBUTES_SPECIAL_DE { \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ -} - -/** - * All layouts - **/ - -static const char * const names = - LV_SYMBOL_KEYBOARD " " NAME_US "\n" - LV_SYMBOL_KEYBOARD " " NAME_FR "\n" - LV_SYMBOL_KEYBOARD " " NAME_ES "\n" - LV_SYMBOL_KEYBOARD " " NAME_DE; - -static const char ** const keys_lower[] = { - (const char * const [])KEYS_LOWER_US, - (const char * const [])KEYS_LOWER_FR, - (const char * const [])KEYS_LOWER_ES, - (const char * const [])KEYS_LOWER_DE -}; - -static const lv_btnmatrix_ctrl_t * const attributes_lower[] = { - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_LOWER_US, - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_LOWER_FR, - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_LOWER_ES, - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_LOWER_DE -}; - -static const char ** const keys_upper[] = { - (const char * const [])KEYS_UPPER_US, - (const char * const [])KEYS_UPPER_FR, - (const char * const [])KEYS_UPPER_ES, - (const char * const [])KEYS_UPPER_DE -}; - -static const lv_btnmatrix_ctrl_t * const attributes_upper[] = { - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_UPPER_US, - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_UPPER_FR, - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_UPPER_ES, - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_UPPER_DE -}; - -static const char ** const keys_numbers[] = { - (const char * const [])KEYS_NUMBERS_US, - (const char * const [])KEYS_NUMBERS_FR, - (const char * const [])KEYS_NUMBERS_ES, - (const char * const [])KEYS_NUMBERS_DE -}; - -static const lv_btnmatrix_ctrl_t * const attributes_numbers[] = { - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_NUMBERS_US, - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_NUMBERS_FR, - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_NUMBERS_ES, - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_NUMBERS_DE -}; - -static const char * const triggers_special[] = { - (const char * const)TRIGGER_SPECIAL_US, - (const char * const)TRIGGER_SPECIAL_FR, - (const char * const)TRIGGER_SPECIAL_ES, - (const char * const)TRIGGER_SPECIAL_DE -}; -static const char ** const keys_special[] = { - (const char * const [])KEYS_SPECIAL_US, - (const char * const [])KEYS_SPECIAL_FR, - (const char * const [])KEYS_SPECIAL_ES, - (const char * const [])KEYS_SPECIAL_DE -}; - -static const lv_btnmatrix_ctrl_t * const attributes_special[] = { - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_SPECIAL_US, - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_SPECIAL_FR, - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_SPECIAL_ES, - (lv_btnmatrix_ctrl_t[])ATTRIBUTES_SPECIAL_DE -}; - -/** - * Functions - **/ +#include "uskr_layouts.h" char *get_layout_names(void) { return names; } -char *get_special_layer_trigger(layout_t layout) { - if (layout < 0 || layout >= NUM_LAYOUTS) { +char *get_special_layer_trigger(uskr_layout_t layout) { + if (layout < 0 || layout >= USKR_NUM_LAYOUTS) { return NULL; } return triggers_special[layout]; } -void apply_layout(lv_obj_t *keyboard, layout_t layout) { - if (layout < 0 || layout >= NUM_LAYOUTS) { +void apply_layout(lv_obj_t *keyboard, uskr_layout_t layout) { + if (layout < 0 || layout >= USKR_NUM_LAYOUTS) { return; } if (keys_lower[layout][0] != NULL) { diff --git a/layouts.h b/layouts.h index 90ae6b9..165bf65 100644 --- a/layouts.h +++ b/layouts.h @@ -1,19 +1,10 @@ #ifndef LAYOUTS_H #define LAYOUTS_H -#include "lvgl/lvgl.h" - -typedef enum { - LAYOUT_ENGLISH_US = 0, - LAYOUT_FRENCH = 1, - LAYOUT_SPANISH = 2, - LAYOUT_GERMAN = 3 -} layout_t; - -#define NUM_LAYOUTS 4 +#include "uskr_layouts.h" char *get_layout_names(void); -char *get_special_layer_trigger(layout_t layout); -void apply_layout(lv_obj_t *keyboard, layout_t layout); +char *get_special_layer_trigger(uskr_layout_t layout); +void apply_layout(lv_obj_t *keyboard, uskr_layout_t layout); #endif /* LAYOUTS_H */ \ No newline at end of file diff --git a/unsqu33kr/unsqu33kr.py b/unsqu33kr/unsqu33kr.py index 59761d1..25e11f6 100644 --- a/unsqu33kr/unsqu33kr.py +++ b/unsqu33kr/unsqu33kr.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 +import argparse import git import os import sys @@ -7,6 +8,9 @@ import tempfile import yaml +outfile_c = 'uskr_layouts.c' +outfile_h = 'uskr_layouts.h' + repository_url = 'https://gitlab.gnome.org/World/Phosh/squeekboard.git' rel_layouts_dir = 'data/keyboards' layout_whitelist = ['de', 'es', 'fr', 'us'] @@ -56,6 +60,18 @@ name_map = { } +def parse_arguments(): + parser = argparse.ArgumentParser(description='Convert squeekboard layouts to LVGL-compatible C code.') + parser.add_argument('--output', dest='output', type=str, help='output directory for generated files') + args = parser.parse_args() + + if not args.output or not os.path.isdir(args.output): + sys.stderr.write('Error: no valid output directory specified') + sys.exit(1) + + return args + + def clone_squeekboard_repo(destination): git.Repo.clone_from(repository_url, destination, depth=1) @@ -88,7 +104,65 @@ def map_layer(layer): return layer_map[layer] if layer in layer_map else layer +def add_header(lines): + """Add header comment to a list of lines. + + lines -- list of lines to append to + """ + lines += ['/**', ' * Auto-generated with unsqu33kr', ' **/', ''] + + +def add_uskr_include(lines): + """Add an include statement for the generated header to a list of lines. + + lines -- list of lines to append to + """ + lines += [f'#include "{outfile_h}"', ''] + + +def add_lvgl_include(lines): + """Add an LVGL include statement to a list of lines. + + lines -- list of lines to append to + """ + lines += ['#include "lvgl/lvgl.h"', ''] + + +def wrap_header(lines): + """Wrap header lines to prevent recursive inclusion. + + lines -- list of lines to wrap + """ + + lines.insert(0, '#ifndef USKR_LAYOUTS_H') + lines.insert(1, '#define USKR_LAYOUTS_H') + lines.insert(2, '') + lines += ['#endif /* USKR_LAYOUTS_H */', ''] + + +def write_files(lines_c, lines_h): + """Write accumulated output to C and header file, respectively. + + lines_c -- sequence of lines to write to C file + lines_h -- sequence of lines to write to header + """ + with open(os.path.join(args.output, outfile_c), 'w') as fp: + fp.write('\n'.join(lines_c)) + with open(os.path.join(args.output, outfile_h), 'w') as fp: + fp.write('\n'.join(lines_h)) + + if __name__ == '__main__': + args = parse_arguments() + + lines_c = [] + lines_h = [] + + add_header(lines_c) + add_uskr_include(lines_c) + add_header(lines_h) + add_lvgl_include(lines_h) + layouts = [] with tempfile.TemporaryDirectory() as tmp: @@ -115,20 +189,20 @@ if __name__ == '__main__': buttons = data['buttons'] if 'buttons' in data else {} - print(f'/**\n * {name_map[name]}\n **/\n') - print(f'#define NAME_{name.upper()} "{name}"\n') + lines_c.append(f'/**\n * {name_map[name]}\n **/\n') + lines_c.append(f'#define NAME_{name.upper()} "{name}"\n') for layer in layer_whitelist: - print(f'/* {layer_to_description[layer]} */') + lines_c.append(f'/* {layer_to_description[layer]} */') if layer not in data['views']: - print(f'#define TRIGGER_{map_layer(layer).upper()}_{name.upper()} ""') - print(f'#define KEYS_{map_layer(layer).upper()}_{name.upper()} ' + '{ NULL }') - print(f'#define ATTRIBUTES_{map_layer(layer).upper()}_{name.upper()} ' + '{ 0 }\n') + lines_c.append(f'#define TRIGGER_{map_layer(layer).upper()}_{name.upper()} ""') + lines_c.append(f'#define KEYS_{map_layer(layer).upper()}_{name.upper()} ' + '{ NULL }') + lines_c.append(f'#define ATTRIBUTES_{map_layer(layer).upper()}_{name.upper()} ' + '{ 0 }\n') continue if layer == 'eschars': key = map_key('show_eschars', layer, name)[0] - print(f'#define TRIGGER_{map_layer(layer).upper()}_{name.upper()} "{key}"') + lines_c.append(f'#define TRIGGER_{map_layer(layer).upper()}_{name.upper()} "{key}"') rows = data['views'][layer] keys_by_row = [] @@ -147,45 +221,63 @@ if __name__ == '__main__': keys_by_row.append(keys) attrs_by_row.append(attrs) - print(f'#define KEYS_{map_layer(layer).upper()}_{name.upper()} ' + '{ \\') + lines_c.append(f'#define KEYS_{map_layer(layer).upper()}_{name.upper()} ' + '{ \\') for i, keys in enumerate(keys_by_row): joined = ', '.join(keys) suffix = '"\\n", \\' if i < len(rows) - 1 else '"" \\' - print(f' {joined}, {suffix}') - print('}') - print(f'#define ATTRIBUTES_{map_layer(layer).upper()}_{name.upper()} ' + '{ \\') + lines_c.append(f' {joined}, {suffix}') + lines_c.append('}') + lines_c.append(f'#define ATTRIBUTES_{map_layer(layer).upper()}_{name.upper()} ' + '{ \\') for i, attrs in enumerate(attrs_by_row): joined = ', '.join(attrs) suffix = ', \\' if i < len(rows) - 1 else ' \\' - print(f' {joined}{suffix}') - print('}\n') + lines_c.append(f' {joined}{suffix}') + lines_c.append('}\n') layouts.append(name) - print('/**\n * All layouts\n **/\n') + lines_c.append('/**\n * All layouts\n **/\n') - print('static const char * const names =') + lines_h.append('typedef enum {') + for i, name in enumerate(layouts): + suffix = ',' if i < len(layouts) - 1 else '' + lines_h.append(f' USKR_LAYOUT_{name.upper()} = {i}{suffix}') + lines_h.append('} uskr_layout_t;') + lines_h.append ('') + lines_h.append(f'#define USKR_NUM_LAYOUTS {len(layouts)}') + lines_h.append ('') + + lines_h.append('extern const char * const names;') + lines_c.append('const char * const names =') for i, name in enumerate(layouts): suffix = ' "\\n"' if i < len(layouts) - 1 else ';\n' - print(f' LV_SYMBOL_KEYBOARD " " NAME_{name.upper()}{suffix}') + lines_c.append(f' LV_SYMBOL_KEYBOARD " " NAME_{name.upper()}{suffix}') for layer in layer_whitelist: if layer == 'eschars': - print(f'static const char * const triggers_{map_layer(layer)}[] = ' + '{') + lines_h.append(f'extern const char * const triggers_{map_layer(layer)}[];') + lines_c.append(f'const char * const triggers_{map_layer(layer)}[] = ' + '{') for i, name in enumerate(layouts): suffix = ',' if i < len(layouts) - 1 else '' - print(f' (const char * const)TRIGGER_{map_layer(layer).upper()}_{name.upper()}{suffix}') - print('};') + lines_c.append(f' (const char * const)TRIGGER_{map_layer(layer).upper()}_{name.upper()}{suffix}') + lines_c.append('};') - print(f'static const char ** const keys_{map_layer(layer)}[] = ' + '{') + lines_h.append(f'extern const char ** const keys_{map_layer(layer)}[];') + lines_c.append(f'const char ** const keys_{map_layer(layer)}[] = ' + '{') for i, name in enumerate(layouts): suffix = ',' if i < len(layouts) - 1 else '' - print(f' (const char * const [])KEYS_{map_layer(layer).upper()}_{name.upper()}{suffix}') - print('};') - print() - print(f'static const lv_btnmatrix_ctrl_t * const attributes_{map_layer(layer)}[] = ' + '{') + lines_c.append(f' (const char * const [])KEYS_{map_layer(layer).upper()}_{name.upper()}{suffix}') + lines_c.append('};') + lines_c.append('') + lines_h.append(f'extern const lv_btnmatrix_ctrl_t * const attributes_{map_layer(layer)}[];') + lines_c.append(f'const lv_btnmatrix_ctrl_t * const attributes_{map_layer(layer)}[] = ' + '{') for i, name in enumerate(layouts): suffix = ',' if i < len(layouts) - 1 else '' - print(f' (lv_btnmatrix_ctrl_t[])ATTRIBUTES_{map_layer(layer).upper()}_{name.upper()}{suffix}') - print('};') - print() + lines_c.append(f' (lv_btnmatrix_ctrl_t[])ATTRIBUTES_{map_layer(layer).upper()}_{name.upper()}{suffix}') + lines_c.append('};') + + lines_h.append('') + lines_c.append('') + + wrap_header(lines_h) + write_files(lines_c, lines_h) \ No newline at end of file diff --git a/uskr_layouts.c b/uskr_layouts.c new file mode 100644 index 0000000..bc9cdc9 --- /dev/null +++ b/uskr_layouts.c @@ -0,0 +1,319 @@ +/** + * Auto-generated with unsqu33kr + **/ + +#include "uskr_layouts.h" + +/** + * English (US) + **/ + +#define NAME_US "us" + +/* Lowercase layer */ +#define KEYS_LOWER_US { \ + "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "\n", \ + "a", "s", "d", "f", "g", "h", "j", "k", "l", "\n", \ + "ABC", "z", "x", "c", "v", "b", "n", "m", LV_SYMBOL_BACKSPACE, "\n", \ + "1#", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, ".", LV_SYMBOL_OK, "" \ +} +#define ATTRIBUTES_LOWER_US { \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ +} + +/* Uppercase layer */ +#define KEYS_UPPER_US { \ + "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "\n", \ + "A", "S", "D", "F", "G", "H", "J", "K", "L", "\n", \ + "abc", "Z", "X", "C", "V", "B", "N", "M", LV_SYMBOL_BACKSPACE, "\n", \ + "1#", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, ".", LV_SYMBOL_OK, "" \ +} +#define ATTRIBUTES_UPPER_US { \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ +} + +/* Number / symbol layer */ +#define KEYS_NUMBERS_US { \ + "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "\n", \ + "@", "#", "$", "%", "&", "-", "_", "+", "(", ")", "\n", \ + ",", "\"", "'", ":", ";", "!", "?", LV_SYMBOL_BACKSPACE, "\n", \ + "abc", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, ".", LV_SYMBOL_OK, "" \ +} +#define ATTRIBUTES_NUMBERS_US { \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ +} + +/* Special characters */ +#define TRIGGER_SPECIAL_US "" +#define KEYS_SPECIAL_US { NULL } +#define ATTRIBUTES_SPECIAL_US { 0 } + +/** + * French + **/ + +#define NAME_FR "fr" + +/* Lowercase layer */ +#define KEYS_LOWER_FR { \ + "a", "z", "e", "r", "t", "y", "u", "i", "o", "p", "\n", \ + "q", "s", "d", "f", "g", "h", "j", "k", "l", "m", "\n", \ + "ABC", "w", "x", "c", "v", "b", "n", ".", LV_SYMBOL_BACKSPACE, "\n", \ + "1#", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "àéô", LV_SYMBOL_OK, "" \ +} +#define ATTRIBUTES_LOWER_FR { \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ +} + +/* Uppercase layer */ +#define KEYS_UPPER_FR { \ + "A", "Z", "E", "R", "T", "Y", "U", "I", "O", "P", "\n", \ + "Q", "S", "D", "F", "G", "H", "J", "K", "L", "M", "\n", \ + "abc", "W", "X", "C", "V", "B", "N", ",", LV_SYMBOL_BACKSPACE, "\n", \ + "1#", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "àéô", LV_SYMBOL_OK, "" \ +} +#define ATTRIBUTES_UPPER_FR { \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ +} + +/* Number / symbol layer */ +#define KEYS_NUMBERS_FR { \ + "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "\n", \ + "@", "#", "€", "%", "&", "-", "_", "+", "(", ")", "\n", \ + ",", "\"", "'", ":", ";", "!", "?", LV_SYMBOL_BACKSPACE, "\n", \ + "abc", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "àéô", LV_SYMBOL_OK, "" \ +} +#define ATTRIBUTES_NUMBERS_FR { \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ +} + +/* Special characters */ +#define TRIGGER_SPECIAL_FR "àéô" +#define KEYS_SPECIAL_FR { \ + "à", "â", "ç", "é", "è", "ê", "î", "ô", "ù", "û", "\n", \ + "À", "Â", "Ç", "É", "È", "Ê", "Î", "Ô", "Ù", "Û", "\n", \ + "1#", "æ", "œ", "ä", "ë", "ï", "ö", "ü", LV_SYMBOL_BACKSPACE, "\n", \ + "abc", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "àéô", LV_SYMBOL_OK, "" \ +} +#define ATTRIBUTES_SPECIAL_FR { \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ +} + +/** + * Spanish + **/ + +#define NAME_ES "es" + +/* Lowercase layer */ +#define KEYS_LOWER_ES { \ + "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "\n", \ + "a", "s", "d", "f", "g", "h", "j", "k", "l", "ñ", "\n", \ + "ABC", "z", "x", "c", "v", "b", "n", "m", LV_SYMBOL_BACKSPACE, "\n", \ + "1#", "áéí", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "?", ".", LV_SYMBOL_OK, "" \ +} +#define ATTRIBUTES_LOWER_ES { \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ +} + +/* Uppercase layer */ +#define KEYS_UPPER_ES { \ + "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "\n", \ + "A", "S", "D", "F", "G", "H", "J", "K", "L", "Ñ", "\n", \ + "abc", "Z", "X", "C", "V", "B", "N", "M", LV_SYMBOL_BACKSPACE, "\n", \ + "1#", "áéí", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "¿", ".", LV_SYMBOL_OK, "" \ +} +#define ATTRIBUTES_UPPER_ES { \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ +} + +/* Number / symbol layer */ +#define KEYS_NUMBERS_ES { \ + "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "\n", \ + "@", "#", "€", "%", "&", "-", "_", "+", "(", ")", "\n", \ + ",", "\"", "'", ":", ";", "!", "=", LV_SYMBOL_BACKSPACE, "\n", \ + "abc", "áéí", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "?", ".", LV_SYMBOL_OK, "" \ +} +#define ATTRIBUTES_NUMBERS_ES { \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ +} + +/* Special characters */ +#define TRIGGER_SPECIAL_ES "áéí" +#define KEYS_SPECIAL_ES { \ + "á", "é", "í", "ó", "ú", "Á", "É", "Í", "Ó", "Ú", "\n", \ + "à", "è", "ì", "ò", "ù", "À", "È", "Ì", "Ò", "Ù", "\n", \ + "1#", "ü", "ç", "ï", "Ü", "Ç", "Ï", "¡", LV_SYMBOL_BACKSPACE, "\n", \ + "abc", "áéí", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "«", "»", LV_SYMBOL_OK, "" \ +} +#define ATTRIBUTES_SPECIAL_ES { \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ +} + +/** + * German + **/ + +#define NAME_DE "de" + +/* Lowercase layer */ +#define KEYS_LOWER_DE { \ + "q", "w", "e", "r", "t", "z", "u", "i", "o", "p", "\n", \ + "a", "s", "d", "f", "g", "h", "j", "k", "l", "\n", \ + "ABC", "y", "x", "c", "v", "b", "n", "m", LV_SYMBOL_BACKSPACE, "\n", \ + "1#", "äöü", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, ",", ".", LV_SYMBOL_OK, "" \ +} +#define ATTRIBUTES_LOWER_DE { \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ +} + +/* Uppercase layer */ +#define KEYS_UPPER_DE { \ + "Q", "W", "E", "R", "T", "Z", "U", "I", "O", "P", "\n", \ + "A", "S", "D", "F", "G", "H", "J", "K", "L", "\n", \ + "abc", "Y", "X", "C", "V", "B", "N", "M", LV_SYMBOL_BACKSPACE, "\n", \ + "1#", "äöü", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "!", "?", LV_SYMBOL_OK, "" \ +} +#define ATTRIBUTES_UPPER_DE { \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ +} + +/* Number / symbol layer */ +#define KEYS_NUMBERS_DE { \ + "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "\n", \ + "@", "#", "€", "%", "&", "-", "_", "+", "(", ")", "\n", \ + ";", "\"", "'", ":", "=", "<", ">", LV_SYMBOL_BACKSPACE, "\n", \ + "abc", "äöü", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, ",", ".", LV_SYMBOL_OK, "" \ +} +#define ATTRIBUTES_NUMBERS_DE { \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ +} + +/* Special characters */ +#define TRIGGER_SPECIAL_DE "äöü" +#define KEYS_SPECIAL_DE { \ + "ä", "è", "é", "ö", "ü", "Ä", "È", "É", "Ö", "Ü", "\n", \ + "à", "â", "ê", "î", "ô", "À", "Â", "È", "Î", "Ô", "\n", \ + "1#", "«", "»", "ç", "Ç", "æ", "œ", "ß", LV_SYMBOL_BACKSPACE, "\n", \ + "abc", "äöü", LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, "„", "“", LV_SYMBOL_OK, "" \ +} +#define ATTRIBUTES_SPECIAL_DE { \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ +} + +/** + * All layouts + **/ + +const char * const names = + LV_SYMBOL_KEYBOARD " " NAME_US "\n" + LV_SYMBOL_KEYBOARD " " NAME_FR "\n" + LV_SYMBOL_KEYBOARD " " NAME_ES "\n" + LV_SYMBOL_KEYBOARD " " NAME_DE; + +const char ** const keys_lower[] = { + (const char * const [])KEYS_LOWER_US, + (const char * const [])KEYS_LOWER_FR, + (const char * const [])KEYS_LOWER_ES, + (const char * const [])KEYS_LOWER_DE +}; + +const lv_btnmatrix_ctrl_t * const attributes_lower[] = { + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_LOWER_US, + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_LOWER_FR, + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_LOWER_ES, + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_LOWER_DE +}; + +const char ** const keys_upper[] = { + (const char * const [])KEYS_UPPER_US, + (const char * const [])KEYS_UPPER_FR, + (const char * const [])KEYS_UPPER_ES, + (const char * const [])KEYS_UPPER_DE +}; + +const lv_btnmatrix_ctrl_t * const attributes_upper[] = { + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_UPPER_US, + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_UPPER_FR, + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_UPPER_ES, + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_UPPER_DE +}; + +const char ** const keys_numbers[] = { + (const char * const [])KEYS_NUMBERS_US, + (const char * const [])KEYS_NUMBERS_FR, + (const char * const [])KEYS_NUMBERS_ES, + (const char * const [])KEYS_NUMBERS_DE +}; + +const lv_btnmatrix_ctrl_t * const attributes_numbers[] = { + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_NUMBERS_US, + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_NUMBERS_FR, + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_NUMBERS_ES, + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_NUMBERS_DE +}; + +const char * const triggers_special[] = { + (const char * const)TRIGGER_SPECIAL_US, + (const char * const)TRIGGER_SPECIAL_FR, + (const char * const)TRIGGER_SPECIAL_ES, + (const char * const)TRIGGER_SPECIAL_DE +}; +const char ** const keys_special[] = { + (const char * const [])KEYS_SPECIAL_US, + (const char * const [])KEYS_SPECIAL_FR, + (const char * const [])KEYS_SPECIAL_ES, + (const char * const [])KEYS_SPECIAL_DE +}; + +const lv_btnmatrix_ctrl_t * const attributes_special[] = { + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_SPECIAL_US, + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_SPECIAL_FR, + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_SPECIAL_ES, + (lv_btnmatrix_ctrl_t[])ATTRIBUTES_SPECIAL_DE +}; diff --git a/uskr_layouts.h b/uskr_layouts.h new file mode 100644 index 0000000..b75e202 --- /dev/null +++ b/uskr_layouts.h @@ -0,0 +1,33 @@ +#ifndef USKR_LAYOUTS_H +#define USKR_LAYOUTS_H + +/** + * Auto-generated with unsqu33kr + **/ + +#include "lvgl/lvgl.h" + +typedef enum { + USKR_LAYOUT_US = 0, + USKR_LAYOUT_FR = 1, + USKR_LAYOUT_ES = 2, + USKR_LAYOUT_DE = 3 +} uskr_layout_t; + +#define USKR_NUM_LAYOUTS 4 + +extern const char * const names; +extern const char ** const keys_lower[]; +extern const lv_btnmatrix_ctrl_t * const attributes_lower[]; + +extern const char ** const keys_upper[]; +extern const lv_btnmatrix_ctrl_t * const attributes_upper[]; + +extern const char ** const keys_numbers[]; +extern const lv_btnmatrix_ctrl_t * const attributes_numbers[]; + +extern const char * const triggers_special[]; +extern const char ** const keys_special[]; +extern const lv_btnmatrix_ctrl_t * const attributes_special[]; + +#endif /* USKR_LAYOUTS_H */