Split auto-generated layouts into dedicated file

This commit is contained in:
Johannes Marbach 2021-09-09 14:07:50 +02:00
parent 809c8af73b
commit 8b1c76d920
8 changed files with 489 additions and 369 deletions

View file

@ -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

View file

@ -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

5
generate-keymaps.sh Executable file
View file

@ -0,0 +1,5 @@
#!/bin/bash
cd unsqu33kr
pipenv install
pipenv run python unsqu33kr.py --output ..

327
layouts.c
View file

@ -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) {

View file

@ -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 */

View file

@ -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)

319
uskr_layouts.c Normal file
View file

@ -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
};

33
uskr_layouts.h Normal file
View file

@ -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 */