From e67d2c2f6fd3a50ac109eabbe93985f4e055963a Mon Sep 17 00:00:00 2001 From: Nebuleon <2391500+Nebuleon@users.noreply.github.com> Date: Tue, 9 Jan 2024 06:11:59 -0500 Subject: [PATCH] Add Canadian French input locale (#21456) Co-authored-by: Ryan --- .../keycodes_canadian_french_0.0.1.hjson | 407 ++++++++++++++++++ docs/reference_keymap_extras.md | 1 + .../keymap_extras/keymap_canadian_french.h | 122 ++++++ .../sendstring_canadian_french.h | 120 ++++++ 4 files changed, 650 insertions(+) create mode 100644 data/constants/keycodes/extras/keycodes_canadian_french_0.0.1.hjson create mode 100644 quantum/keymap_extras/keymap_canadian_french.h create mode 100644 quantum/keymap_extras/sendstring_canadian_french.h diff --git a/data/constants/keycodes/extras/keycodes_canadian_french_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_canadian_french_0.0.1.hjson new file mode 100644 index 0000000000..6fefd11f59 --- /dev/null +++ b/data/constants/keycodes/extras/keycodes_canadian_french_0.0.1.hjson @@ -0,0 +1,407 @@ +{ + "aliases": { +/* + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │ # │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ + * │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ^ │ ¸ │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ + * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ` │ < │ │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ + * │ │ « │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ É │ │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ + * │ │ │ │ │ │ │ │ │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ + */ + "KC_GRV": { + "key": "FR_HASH", + "label": "#", + } + "KC_1": { + "key": "FR_1", + "label": "1", + } + "KC_2": { + "key": "FR_2", + "label": "2", + } + "KC_3": { + "key": "FR_3", + "label": "3", + } + "KC_4": { + "key": "FR_4", + "label": "4", + } + "KC_5": { + "key": "FR_5", + "label": "5", + } + "KC_6": { + "key": "FR_6", + "label": "6", + } + "KC_7": { + "key": "FR_7", + "label": "7", + } + "KC_8": { + "key": "FR_8", + "label": "8", + } + "KC_9": { + "key": "FR_9", + "label": "9", + } + "KC_0": { + "key": "FR_0", + "label": "0", + } + "KC_MINS": { + "key": "FR_MINS", + "label": "-", + } + "KC_EQL": { + "key": "FR_EQL", + "label": "=", + } + "KC_Q": { + "key": "FR_Q", + "label": "Q", + } + "KC_W": { + "key": "FR_W", + "label": "W", + } + "KC_E": { + "key": "FR_E", + "label": "E", + } + "KC_R": { + "key": "FR_R", + "label": "R", + } + "KC_T": { + "key": "FR_T", + "label": "T", + } + "KC_Y": { + "key": "FR_Y", + "label": "Y", + } + "KC_U": { + "key": "FR_U", + "label": "U", + } + "KC_I": { + "key": "FR_I", + "label": "I", + } + "KC_O": { + "key": "FR_O", + "label": "O", + } + "KC_P": { + "key": "FR_P", + "label": "P", + } + "KC_LBRC": { + "key": "FR_DCIR", + "label": "^ (dead)", + } + "KC_RBRC": { + "key": "FR_CEDL", + "label": "¸ (dead)", + } + "KC_A": { + "key": "FR_A", + "label": "A", + } + "KC_S": { + "key": "FR_S", + "label": "S", + } + "KC_D": { + "key": "FR_D", + "label": "D", + } + "KC_F": { + "key": "FR_F", + "label": "F", + } + "KC_G": { + "key": "FR_G", + "label": "G", + } + "KC_H": { + "key": "FR_H", + "label": "H", + } + "KC_J": { + "key": "FR_J", + "label": "J", + } + "KC_K": { + "key": "FR_K", + "label": "K", + } + "KC_L": { + "key": "FR_L", + "label": "L", + } + "KC_SCLN": { + "key": "FR_SCLN", + "label": ";", + } + "KC_QUOT": { + "key": "FR_DGRV", + "label": "` (dead)", + } + "KC_NUHS": { + "key": "FR_LABK", + "label": "<", + } + "KC_NUBS": { + "key": "FR_LDAQ", + "label": "«", + } + "KC_Z": { + "key": "FR_Z", + "label": "Z", + } + "KC_X": { + "key": "FR_X", + "label": "X", + } + "KC_C": { + "key": "FR_C", + "label": "C", + } + "KC_V": { + "key": "FR_V", + "label": "V", + } + "KC_B": { + "key": "FR_B", + "label": "B", + } + "KC_N": { + "key": "FR_N", + "label": "N", + } + "KC_M": { + "key": "FR_M", + "label": "M", + } + "KC_COMM": { + "key": "FR_COMM", + "label": ",", + } + "KC_DOT": { + "key": "FR_DOT", + "label": ".", + } + "KC_SLSH": { + "key": "FR_EACU", + "label": "É", + } +/* Shifted symbols + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │ | │ ! │ " │ / │ $ │ % │ ? │ & │ * │ ( │ ) │ _ │ + │ │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ + * │ │ │ │ │ │ │ │ │ │ │ │ │ ¨ │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ + * │ │ │ │ │ │ │ │ │ │ │ : │ │ > │ │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ + * │ │ » │ │ │ │ │ │ │ │ ' │ │ │ │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ + * │ │ │ │ │ │ │ │ │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ + */ + "S(FR_HASH)": { + "key": "FR_PIPE", + "label": "|", + } + "S(FR_1)": { + "key": "FR_EXLM", + "label": "!", + } + "S(FR_2)": { + "key": "FR_DQUO", + "label": "\"", + } + "S(FR_3)": { + "key": "FR_SLSH", + "label": "/", + } + "S(FR_4)": { + "key": "FR_DLR", + "label": "$", + } + "S(FR_5)": { + "key": "FR_PERC", + "label": "%", + } + "S(FR_6)": { + "key": "FR_QUES", + "label": "?", + } + "S(FR_7)": { + "key": "FR_AMPR", + "label": "&", + } + "S(FR_8)": { + "key": "FR_ASTR", + "label": "*", + } + "S(FR_9)": { + "key": "FR_LPRN", + "label": "(", + } + "S(FR_0)": { + "key": "FR_RPRN", + "label": ")", + } + "S(FR_MINS)": { + "key": "FR_UNDS", + "label": "_", + } + "S(FR_EQL)": { + "key": "FR_PLUS", + "label": "+", + } + "S(FR_CEDL)": { + "key": "FR_DIAE", + "label": "¨ (dead)", + } + "S(FR_SCLN)": { + "key": "FR_COLN", + "label": ":", + } + "S(FR_LABK)": { + "key": "FR_RABK", + "label": ">", + } + "S(FR_LDAQ)": { + "key": "FR_RDAQ", + "label": "»", + } + "S(FR_COMM)": { + "key": "FR_QUOT", + "label": "'", + } +/* AltGr symbols + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │ \ │ ± │ @ │ £ │ ¢ │ ¤ │ ¬ │ ¦ │ ² │ ³ │ ¼ │ ½ │ ¾ │ │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ + * │ │ │ │ │ │ │ │ │ │ § │ ¶ │ [ │ ] │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ + * │ │ │ │ │ │ │ │ │ │ │ ~ │ { │ } │ │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ + * │ │ ° │ │ │ │ │ │ │ µ │ ¯ │ - │ ´ │ │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ + * │ │ │ │ │ │ │ │ │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ + */ + "ALGR(FR_HASH)": { + "key": "FR_BSLS", + "label": "\\", + } + "ALGR(FR_1)": { + "key": "FR_PLMN", + "label": "±", + } + "ALGR(FR_2)": { + "key": "FR_AT", + "label": "@", + } + "ALGR(FR_3)": { + "key": "FR_PND", + "label": "£", + } + "ALGR(FR_4)": { + "key": "FR_CENT", + "label": "¢", + } + "ALGR(FR_5)": { + "key": "FR_CURR", + "label": "¤", + } + "ALGR(FR_6)": { + "key": "FR_NOT", + "label": "¬", + } + "ALGR(FR_7)": { + "key": "FR_BRKP", + "label": "¦", + } + "ALGR(FR_8)": { + "key": "FR_SUP2", + "label": "²", + } + "ALGR(FR_9)": { + "key": "FR_SUP3", + "label": "³", + } + "ALGR(FR_0)": { + "key": "FR_QRTR", + "label": "¼", + } + "ALGR(FR_MINS)": { + "key": "FR_HALF", + "label": "½", + } + "ALGR(FR_EQL)": { + "key": "FR_TQTR", + "label": "¾", + } + "ALGR(FR_O)": { + "key": "FR_SECT", + "label": "§", + } + "ALGR(FR_P)": { + "key": "FR_PARA", + "label": "¶", + } + "ALGR(FR_DCIR)": { + "key": "FR_LBRC", + "label": "[", + } + "ALGR(FR_CEDL)": { + "key": "FR_RBRC", + "label": "]", + } + "ALGR(FR_SCLN)": { + "key": "FR_TILD", + "label": "~", + } + "ALGR(FR_DGRV)": { + "key": "FR_LCBR", + "label": "{", + } + "ALGR(FR_LABK)": { + "key": "FR_RCBR", + "label": "}", + } + "ALGR(FR_LDAQ)": { + "key": "FR_DEG", + "label": "°", + } + "ALGR(FR_M)": { + "key": "FR_MICR", + "label": "µ", + } + "ALGR(FR_COMM)": { + "key": "FR_MACR", + "label": "¯", + } + "ALGR(FR_DOT)": { + "key": "FR_SHYP", + "label": "­ (soft hyphen)", + } + "ALGR(FR_EACU)": { + "key": "FR_ACUT", + "label": "´ (dead)", + } + } +} diff --git a/docs/reference_keymap_extras.md b/docs/reference_keymap_extras.md index 0a51c85853..cf2ab28876 100644 --- a/docs/reference_keymap_extras.md +++ b/docs/reference_keymap_extras.md @@ -36,6 +36,7 @@ These headers are located in [`quantum/keymap_extras/`](https://github.com/qmk/q |French (AFNOR) |`keymap_french_afnor.h` |`sendstring_french_afnor.h` | |French (BÉPO) |`keymap_bepo.h` |`sendstring_bepo.h` | |French (Belgium) |`keymap_belgian.h` |`sendstring_belgian.h` | +|French (Canada) |`keymap_canadian_french.h` |`sendstring_canadian_french.h` | |French (Switzerland) |`keymap_swiss_fr.h` |`sendstring_swiss_fr.h` | |French (macOS, ISO) |`keymap_french_mac_iso.h` |`sendstring_french_mac_iso.h` | |German |`keymap_german.h` |`sendstring_german.h` | diff --git a/quantum/keymap_extras/keymap_canadian_french.h b/quantum/keymap_extras/keymap_canadian_french.h new file mode 100644 index 0000000000..a61d48d3ed --- /dev/null +++ b/quantum/keymap_extras/keymap_canadian_french.h @@ -0,0 +1,122 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +/******************************************************************************* + 88888888888 888 d8b .d888 d8b 888 d8b + 888 888 Y8P d88P" Y8P 888 Y8P + 888 888 888 888 + 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b + 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K + 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b. + 888 888 888 888 X88 888 888 888 Y8b. 888 X88 + 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P' + 888 888 + 888 888 + 888 888 + .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888 + d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888 + 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888 + Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888 + "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888 + 888 + Y8b d88P + "Y88P" +*******************************************************************************/ + +#pragma once +#include "keycodes.h" +// clang-format off + +// Aliases +#define FR_HASH KC_GRV // # +#define FR_1 KC_1 // 1 +#define FR_2 KC_2 // 2 +#define FR_3 KC_3 // 3 +#define FR_4 KC_4 // 4 +#define FR_5 KC_5 // 5 +#define FR_6 KC_6 // 6 +#define FR_7 KC_7 // 7 +#define FR_8 KC_8 // 8 +#define FR_9 KC_9 // 9 +#define FR_0 KC_0 // 0 +#define FR_MINS KC_MINS // - +#define FR_EQL KC_EQL // = +#define FR_Q KC_Q // Q +#define FR_W KC_W // W +#define FR_E KC_E // E +#define FR_R KC_R // R +#define FR_T KC_T // T +#define FR_Y KC_Y // Y +#define FR_U KC_U // U +#define FR_I KC_I // I +#define FR_O KC_O // O +#define FR_P KC_P // P +#define FR_DCIR KC_LBRC // ^ (dead) +#define FR_CEDL KC_RBRC // ¸ (dead) +#define FR_A KC_A // A +#define FR_S KC_S // S +#define FR_D KC_D // D +#define FR_F KC_F // F +#define FR_G KC_G // G +#define FR_H KC_H // H +#define FR_J KC_J // J +#define FR_K KC_K // K +#define FR_L KC_L // L +#define FR_SCLN KC_SCLN // ; +#define FR_DGRV KC_QUOT // ` (dead) +#define FR_LABK KC_NUHS // < +#define FR_LDAQ KC_NUBS // « +#define FR_Z KC_Z // Z +#define FR_X KC_X // X +#define FR_C KC_C // C +#define FR_V KC_V // V +#define FR_B KC_B // B +#define FR_N KC_N // N +#define FR_M KC_M // M +#define FR_COMM KC_COMM // , +#define FR_DOT KC_DOT // . +#define FR_EACU KC_SLSH // É +#define FR_PIPE S(FR_HASH) // | +#define FR_EXLM S(FR_1) // ! +#define FR_DQUO S(FR_2) // " +#define FR_SLSH S(FR_3) // / +#define FR_DLR S(FR_4) // $ +#define FR_PERC S(FR_5) // % +#define FR_QUES S(FR_6) // ? +#define FR_AMPR S(FR_7) // & +#define FR_ASTR S(FR_8) // * +#define FR_LPRN S(FR_9) // ( +#define FR_RPRN S(FR_0) // ) +#define FR_UNDS S(FR_MINS) // _ +#define FR_PLUS S(FR_EQL) // + +#define FR_DIAE S(FR_CEDL) // ¨ (dead) +#define FR_COLN S(FR_SCLN) // : +#define FR_RABK S(FR_LABK) // > +#define FR_RDAQ S(FR_LDAQ) // » +#define FR_QUOT S(FR_COMM) // ' +#define FR_BSLS ALGR(FR_HASH) // (backslash) +#define FR_PLMN ALGR(FR_1) // ± +#define FR_AT ALGR(FR_2) // @ +#define FR_PND ALGR(FR_3) // £ +#define FR_CENT ALGR(FR_4) // ¢ +#define FR_CURR ALGR(FR_5) // ¤ +#define FR_NOT ALGR(FR_6) // ¬ +#define FR_BRKP ALGR(FR_7) // ¦ +#define FR_SUP2 ALGR(FR_8) // ² +#define FR_SUP3 ALGR(FR_9) // ³ +#define FR_QRTR ALGR(FR_0) // ¼ +#define FR_HALF ALGR(FR_MINS) // ½ +#define FR_TQTR ALGR(FR_EQL) // ¾ +#define FR_SECT ALGR(FR_O) // § +#define FR_PARA ALGR(FR_P) // ¶ +#define FR_LBRC ALGR(FR_DCIR) // [ +#define FR_RBRC ALGR(FR_CEDL) // ] +#define FR_TILD ALGR(FR_SCLN) // ~ +#define FR_LCBR ALGR(FR_DGRV) // { +#define FR_RCBR ALGR(FR_LABK) // } +#define FR_DEG ALGR(FR_LDAQ) // ° +#define FR_MICR ALGR(FR_M) // µ +#define FR_MACR ALGR(FR_COMM) // ¯ +#define FR_SHYP ALGR(FR_DOT) // ­ (soft hyphen) +#define FR_ACUT ALGR(FR_EACU) // ´ (dead) + diff --git a/quantum/keymap_extras/sendstring_canadian_french.h b/quantum/keymap_extras/sendstring_canadian_french.h new file mode 100644 index 0000000000..2abba3a9d3 --- /dev/null +++ b/quantum/keymap_extras/sendstring_canadian_french.h @@ -0,0 +1,120 @@ +/* Copyright 2023 Nebuleon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +// Sendstring lookup tables for Canadian French layouts + +#pragma once + +#include "keymap_canadian_french.h" +#include "send_string.h" + +// clang-format off + +const uint8_t ascii_to_shift_lut[16] PROGMEM = { + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + + KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 1), + KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 1), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 1, 0, 0, 0, 1, 1), + KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1), + KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1), + KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1), + KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 1, 0, 0, 0) +}; + +const uint8_t ascii_to_altgr_lut[16] PROGMEM = { + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 1, 0) +}; + +const uint8_t ascii_to_dead_lut[16] PROGMEM = { + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 1, 0), + KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0) +}; + +const uint8_t ascii_to_keycode_lut[128] PROGMEM = { + // NUL SOH STX ETX EOT ENQ ACK BEL + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + // BS TAB LF VT FF CR SO SI + KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + // DLE DC1 DC2 DC3 DC4 NAK SYN ETB + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + // CAN EM SUB ESC FS GS RS US + XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + + // ! " # $ % & ' + KC_SPC, FR_1, FR_2, FR_HASH, FR_4, FR_5, FR_7, FR_COMM, + // ( ) * + , - . / + FR_9, FR_0, FR_8, FR_EQL, FR_COMM, FR_MINS, FR_DOT, FR_3, + // 0 1 2 3 4 5 6 7 + FR_0, FR_1, FR_2, FR_3, FR_4, FR_5, FR_6, FR_7, + // 8 9 : ; < = > ? + FR_8, FR_9, FR_SCLN, FR_SCLN, FR_LABK, FR_EQL, FR_LABK, FR_6, + // @ A B C D E F G + FR_2, FR_A, FR_B, FR_C, FR_D, FR_E, FR_F, FR_G, + // H I J K L M N O + FR_H, FR_I, FR_J, FR_K, FR_L, FR_M, FR_N, FR_O, + // P Q R S T U V W + FR_P, FR_Q, FR_R, FR_S, FR_T, FR_U, FR_V, FR_W, + // X Y Z [ \ ] ^ _ + FR_X, FR_Y, FR_Z, FR_DCIR, FR_HASH, FR_CEDL, FR_DCIR, FR_MINS, + // ` a b c d e f g + FR_DGRV, FR_A, FR_B, FR_C, FR_D, FR_E, FR_F, FR_G, + // h i j k l m n o + FR_H, FR_I, FR_J, FR_K, FR_L, FR_M, FR_N, FR_O, + // p q r s t u v w + FR_P, FR_Q, FR_R, FR_S, FR_T, FR_U, FR_V, FR_W, + // x y z { | } ~ DEL + FR_X, FR_Y, FR_Z, FR_DGRV, FR_HASH, FR_LABK, FR_SCLN, KC_DEL +};