Browse Source

Add Canadian French input locale (#21456)

Co-authored-by: Ryan <fauxpark@gmail.com>
Nebuleon 2 years ago
parent
commit
e67d2c2f6f

+ 407 - 0
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)",
+        }
+    }
+}

+ 1 - 0
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`               |

+ 122 - 0
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)
+

+ 120 - 0
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 <http://www.gnu.org/licenses/>.
+ */
+
+// 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
+};