From 30f07c814c96cf02fae82f1a85cd9959383497a2 Mon Sep 17 00:00:00 2001 From: Aliaksandr Radzivanovich Date: Mon, 8 Apr 2024 12:33:44 +0200 Subject: [PATCH] feat: fix exising and add new layouts closes #93 --- .../keybr-keyboard-generator/lib/index.ts | 18 +- .../lib/layout/de_bone.ts | 6 +- .../lib/layout/de_mine.ts | 10 +- .../lib/layout/de_neo_2.ts | 6 +- .../lib/layout/de_noted.ts | 51 +++++ .../lib/layout/en_canary.ts | 51 +++++ .../lib/layout/en_colemak.ts | 2 +- .../lib/layout/en_colemak_dh.ts | 2 +- .../lib/layout/en_colemak_dh_matrix.ts | 2 +- .../lib/layout/en_dvorak_prog.ts | 50 +++++ .../lib/layout/en_workman.ts | 2 +- .../lib/layout/en_workman_prog.ts | 50 +++++ .../layout/{fr_ergol.json => fr_ergo_l.json} | 0 .../lib/layout/fr_optimot_ergo.ts | 4 +- .../lib/util/import.ts | 193 ++++++++++++++++++ packages/keybr-keyboard/lib/data/layout.ts | 8 +- .../keybr-keyboard/lib/data/layout/de_bone.ts | 6 +- .../keybr-keyboard/lib/data/layout/de_mine.ts | 8 +- .../lib/data/layout/de_neo_2.ts | 6 +- .../lib/data/layout/de_noted.ts | 54 +++++ .../lib/data/layout/en_canary.ts | 56 +++++ .../lib/data/layout/en_dvorak_prog.ts | 56 +++++ .../lib/data/layout/en_dvorakl-win.ts | 56 +++++ .../lib/data/layout/en_dvorakr-win.ts | 56 +++++ .../lib/data/layout/en_workman_prog.ts | 56 +++++ .../data/layout/{fr_ergol.ts => fr_ergo_l.ts} | 2 +- .../lib/data/layout/fr_optimot_ergo.ts | 4 +- packages/keybr-keyboard/lib/layout.ts | 46 ++++- packages/keybr-keyboard/lib/load.ts | 8 +- 29 files changed, 825 insertions(+), 44 deletions(-) create mode 100644 packages/keybr-keyboard-generator/lib/layout/de_noted.ts create mode 100644 packages/keybr-keyboard-generator/lib/layout/en_canary.ts create mode 100644 packages/keybr-keyboard-generator/lib/layout/en_dvorak_prog.ts create mode 100644 packages/keybr-keyboard-generator/lib/layout/en_workman_prog.ts rename packages/keybr-keyboard-generator/lib/layout/{fr_ergol.json => fr_ergo_l.json} (100%) create mode 100644 packages/keybr-keyboard-generator/lib/util/import.ts create mode 100644 packages/keybr-keyboard/lib/data/layout/de_noted.ts create mode 100644 packages/keybr-keyboard/lib/data/layout/en_canary.ts create mode 100644 packages/keybr-keyboard/lib/data/layout/en_dvorak_prog.ts create mode 100644 packages/keybr-keyboard/lib/data/layout/en_dvorakl-win.ts create mode 100644 packages/keybr-keyboard/lib/data/layout/en_dvorakr-win.ts create mode 100644 packages/keybr-keyboard/lib/data/layout/en_workman_prog.ts rename packages/keybr-keyboard/lib/data/layout/{fr_ergol.ts => fr_ergo_l.ts} (98%) diff --git a/packages/keybr-keyboard-generator/lib/index.ts b/packages/keybr-keyboard-generator/lib/index.ts index ea118a67..bf83284f 100644 --- a/packages/keybr-keyboard-generator/lib/index.ts +++ b/packages/keybr-keyboard-generator/lib/index.ts @@ -9,14 +9,18 @@ import { convertKalamine } from "./conv/kalamine.ts"; import LAYOUT_DE_BONE from "./layout/de_bone.ts"; import LAYOUT_DE_MINE from "./layout/de_mine.ts"; import LAYOUT_DE_NEO_2 from "./layout/de_neo_2.ts"; +import LAYOUT_DE_NOTED from "./layout/de_noted.ts"; +import LAYOUT_EN_CANARY from "./layout/en_canary.ts"; import LAYOUT_EN_CANARY_MATRIX from "./layout/en_canary_matrix.ts"; import LAYOUT_EN_COLEMAK from "./layout/en_colemak.ts"; import LAYOUT_EN_COLEMAK_DH from "./layout/en_colemak_dh.ts"; import LAYOUT_EN_COLEMAK_DH_MATRIX from "./layout/en_colemak_dh_matrix.ts"; +import LAYOUT_EN_DVORAK_PROG from "./layout/en_dvorak_prog.ts"; import LAYOUT_EN_WORKMAN from "./layout/en_workman.ts"; +import LAYOUT_EN_WORKMAN_PROG from "./layout/en_workman_prog.ts"; import LAYOUT_FR_BEPO from "./layout/fr_bepo.json"; import LAYOUT_FR_ERGLACE from "./layout/fr_erglace.json"; -import LAYOUT_FR_ERGO_L from "./layout/fr_ergol.json"; +import LAYOUT_FR_ERGO_L from "./layout/fr_ergo_l.json"; import LAYOUT_FR_OPTIMOT_ERGO from "./layout/fr_optimot_ergo.ts"; import LAYOUT_JA_JP_JIS from "./layout/ja_jp_jis.ts"; import { writeGeneratedFile } from "./util/generate.ts"; @@ -30,21 +34,27 @@ for (const [output, keymap] of [ ["de_de-win.ts", convertCldr("cldr-keyboards-43.0/keyboards/windows/de-t-k0-windows.xml")], ["de_mine.ts", LAYOUT_DE_MINE], ["de_neo_2.ts", LAYOUT_DE_NEO_2], + ["de_noted.ts", LAYOUT_DE_NOTED], ["el_gr-win.ts", convertCldr("cldr-keyboards-43.0/keyboards/windows/el-t-k0-windows.xml")], + ["en_canary.ts", LAYOUT_EN_CANARY], ["en_canary_matrix.ts", LAYOUT_EN_CANARY_MATRIX], - ["en_colemak_dh_matrix.ts", LAYOUT_EN_COLEMAK_DH_MATRIX], - ["en_colemak_dh.ts", LAYOUT_EN_COLEMAK_DH], ["en_colemak.ts", LAYOUT_EN_COLEMAK], + ["en_colemak_dh.ts", LAYOUT_EN_COLEMAK_DH], + ["en_colemak_dh_matrix.ts", LAYOUT_EN_COLEMAK_DH_MATRIX], ["en_dvorak-win.ts", convertCldr("cldr-keyboards-43.0/keyboards/windows/en-t-k0-windows-dvorak.xml")], + ["en_dvorak_prog.ts", LAYOUT_EN_DVORAK_PROG], + ["en_dvorakl-win.ts", convertCldr("cldr-keyboards-43.0/keyboards/windows/en-t-k0-windows-dvorakl.xml")], + ["en_dvorakr-win.ts", convertCldr("cldr-keyboards-43.0/keyboards/windows/en-t-k0-windows-dvorakr.xml")], ["en_uk-win.ts", convertCldr("cldr-keyboards-43.0/keyboards/windows/en-GB-t-k0-windows.xml")], ["en_us-win.ts", convertCldr("cldr-keyboards-43.0/keyboards/windows/en-t-k0-windows.xml")], ["en_workman.ts", LAYOUT_EN_WORKMAN], + ["en_workman_prog.ts", LAYOUT_EN_WORKMAN_PROG], ["es_es-win.ts", convertCldr("cldr-keyboards-43.0/keyboards/windows/es-t-k0-windows.xml")], ["fr_bepo.ts", convertKalamine(LAYOUT_FR_BEPO)], ["fr_ca-win.ts", convertCldr("cldr-keyboards-43.0/keyboards/windows/fr-CA-t-k0-windows-var.xml")], ["fr_ch-win.ts", convertCldr("cldr-keyboards-43.0/keyboards/windows/fr-CH-t-k0-windows.xml")], ["fr_erglace.ts", convertKalamine(LAYOUT_FR_ERGLACE)], - ["fr_ergol.ts", convertKalamine(LAYOUT_FR_ERGO_L)], + ["fr_ergo_l.ts", convertKalamine(LAYOUT_FR_ERGO_L)], ["fr_fr-win.ts", convertCldr("cldr-keyboards-43.0/keyboards/windows/fr-t-k0-windows.xml")], ["fr_optimot_ergo.ts", LAYOUT_FR_OPTIMOT_ERGO], ["he_il-win.ts", convertCldr("cldr-keyboards-43.0/keyboards/windows/he-t-k0-windows.xml")], diff --git a/packages/keybr-keyboard-generator/lib/layout/de_bone.ts b/packages/keybr-keyboard-generator/lib/layout/de_bone.ts index fca184db..a0ed77b2 100644 --- a/packages/keybr-keyboard-generator/lib/layout/de_bone.ts +++ b/packages/keybr-keyboard-generator/lib/layout/de_bone.ts @@ -1,5 +1,5 @@ export default { - Backquote: "^ˇ", + Backquote: ["*^", "*ˇ"], Digit1: "1°", Digit2: "2§", Digit3: "3ℓ", @@ -11,7 +11,7 @@ export default { Digit9: "9“", Digit0: "0”", Minus: "-—", - Equal: "`¸", + Equal: ["*`", "*¸", "*¨"], KeyQ: "jJ", KeyW: "dD", KeyE: "uU", @@ -23,7 +23,7 @@ export default { KeyO: "mM", KeyP: "wW", BracketLeft: "ßẞ", - BracketRight: "´˜", + BracketRight: ["*´", "*~"], Backslash: "", KeyA: "cC", KeyS: "tT", diff --git a/packages/keybr-keyboard-generator/lib/layout/de_mine.ts b/packages/keybr-keyboard-generator/lib/layout/de_mine.ts index db5d94f0..6790214c 100644 --- a/packages/keybr-keyboard-generator/lib/layout/de_mine.ts +++ b/packages/keybr-keyboard-generator/lib/layout/de_mine.ts @@ -1,5 +1,5 @@ export default { - Backquote: "^ˇ", + Backquote: ["*^", "*ˇ"], Digit1: "1°", Digit2: "2§", Digit3: "3ℓ", @@ -11,7 +11,7 @@ export default { Digit9: "9“", Digit0: "0”", Minus: "-—", - Equal: "`¸", + Equal: ["*`", "*¸", "*¨"], KeyQ: "jJ", KeyW: "lL", KeyE: "uU", @@ -21,10 +21,10 @@ export default { KeyU: "bB", KeyI: "dD", KeyO: "gG", - KeyP: "YY", + KeyP: "yY", BracketLeft: "zZ", BracketRight: "ßẞ", - Backslash: "", + Backslash: ["*´", "*~"], KeyA: "cC", KeyS: "rR", KeyD: "iI", @@ -36,7 +36,7 @@ export default { KeyL: "sS", Semicolon: "hH", Quote: "", - IntlBackslash: "´˜", + IntlBackslash: "", KeyZ: "vV", KeyX: "xX", KeyC: "üÜ", diff --git a/packages/keybr-keyboard-generator/lib/layout/de_neo_2.ts b/packages/keybr-keyboard-generator/lib/layout/de_neo_2.ts index 1f71e2ef..41f28261 100644 --- a/packages/keybr-keyboard-generator/lib/layout/de_neo_2.ts +++ b/packages/keybr-keyboard-generator/lib/layout/de_neo_2.ts @@ -1,5 +1,5 @@ export default { - Backquote: "^ˇ", + Backquote: ["*^", "*ˇ"], Digit1: "1°", Digit2: "2§", Digit3: "3ℓ", @@ -11,7 +11,7 @@ export default { Digit9: "9“", Digit0: "0”", Minus: "-—", - Equal: "`¸", + Equal: ["*`", "*¸", "*¨"], KeyQ: "xX", KeyW: "vV", KeyE: "lL", @@ -23,7 +23,7 @@ export default { KeyO: "fF", KeyP: "qQ", BracketLeft: "ßẞ", - BracketRight: "´˜", + BracketRight: ["*´", "*~"], Backslash: "", KeyA: "uU", KeyS: "iI", diff --git a/packages/keybr-keyboard-generator/lib/layout/de_noted.ts b/packages/keybr-keyboard-generator/lib/layout/de_noted.ts new file mode 100644 index 00000000..528ec893 --- /dev/null +++ b/packages/keybr-keyboard-generator/lib/layout/de_noted.ts @@ -0,0 +1,51 @@ +export default { + Backquote: ["*^", "*ˇ"], + Digit1: "1°", + Digit2: "2§", + Digit3: "3ℓ", + Digit4: "4»", + Digit5: "5«", + Digit6: "6$", + Digit7: "7€", + Digit8: "8„", + Digit9: "9“", + Digit0: "0”", + Minus: "-—", + Equal: ["*`", "*¸", "*¨"], + KeyQ: "zZ", + KeyW: "yY", + KeyE: "uU", + KeyR: "aA", + KeyT: "qQ", + KeyY: "pP", + KeyU: "bB", + KeyI: "mM", + KeyO: "lL", + KeyP: "fF", + BracketLeft: "jJ", + BracketRight: "ßẞ", + Backslash: ["*´", "*~"], + KeyA: "cC", + KeyS: "sS", + KeyD: "iI", + KeyF: "eE", + KeyG: "oO", + KeyH: "dD", + KeyJ: "tT", + KeyK: "nN", + KeyL: "rR", + Semicolon: "hH", + Quote: "", + IntlBackslash: "", + KeyZ: "vV", + KeyX: "xX", + KeyC: "üÜ", + KeyV: "äÄ", + KeyB: "öÖ", + KeyN: "wW", + KeyM: "gG", + Comma: ",–", + Period: ".•", + Slash: "kK", + Space: " ", +}; diff --git a/packages/keybr-keyboard-generator/lib/layout/en_canary.ts b/packages/keybr-keyboard-generator/lib/layout/en_canary.ts new file mode 100644 index 00000000..ca3a8ea7 --- /dev/null +++ b/packages/keybr-keyboard-generator/lib/layout/en_canary.ts @@ -0,0 +1,51 @@ +export default { + Backquote: "`~", + Digit1: "1!", + Digit2: "2@", + Digit3: "3#", + Digit4: "4$", + Digit5: "5%", + Digit6: "6^", + Digit7: "7&", + Digit8: "8*", + Digit9: "9(", + Digit0: "0)", + Minus: "-_", + Equal: "=+", + KeyQ: "wW", + KeyW: "lL", + KeyE: "yY", + KeyR: "pP", + KeyT: "kK", + KeyY: "zZ", + KeyU: "xX", + KeyI: "oO", + KeyO: "uU", + KeyP: ";:", + BracketLeft: "[{", + BracketRight: "]}", + Backslash: "\\|", + KeyA: "cC", + KeyS: "rR", + KeyD: "sS", + KeyF: "tT", + KeyG: "bB", + KeyH: "fF", + KeyJ: "nN", + KeyK: "eE", + KeyL: "iI", + Semicolon: "aA", + Quote: "'\"", + IntlBackslash: "\\|", + KeyZ: "jJ", + KeyX: "vV", + KeyC: "dD", + KeyV: "gG", + KeyB: "qQ", + KeyN: "mM", + KeyM: "hH", + Comma: "/?", + Period: ",<", + Slash: ".>", + Space: " ", +}; diff --git a/packages/keybr-keyboard-generator/lib/layout/en_colemak.ts b/packages/keybr-keyboard-generator/lib/layout/en_colemak.ts index 3fc7168c..1cc33dd2 100644 --- a/packages/keybr-keyboard-generator/lib/layout/en_colemak.ts +++ b/packages/keybr-keyboard-generator/lib/layout/en_colemak.ts @@ -35,7 +35,7 @@ export default { KeyK: "eE", KeyL: "iI", Semicolon: "oO", - Quote: `'"`, + Quote: "'\"", IntlBackslash: "\\|", KeyZ: "zZ", KeyX: "xX", diff --git a/packages/keybr-keyboard-generator/lib/layout/en_colemak_dh.ts b/packages/keybr-keyboard-generator/lib/layout/en_colemak_dh.ts index 5290f84e..0859ccc8 100644 --- a/packages/keybr-keyboard-generator/lib/layout/en_colemak_dh.ts +++ b/packages/keybr-keyboard-generator/lib/layout/en_colemak_dh.ts @@ -35,7 +35,7 @@ export default { KeyK: "eE", KeyL: "iI", Semicolon: "oO", - Quote: `'"`, + Quote: "'\"", IntlBackslash: "\\|", KeyZ: "xX", KeyX: "cC", diff --git a/packages/keybr-keyboard-generator/lib/layout/en_colemak_dh_matrix.ts b/packages/keybr-keyboard-generator/lib/layout/en_colemak_dh_matrix.ts index 2245693b..a783b309 100644 --- a/packages/keybr-keyboard-generator/lib/layout/en_colemak_dh_matrix.ts +++ b/packages/keybr-keyboard-generator/lib/layout/en_colemak_dh_matrix.ts @@ -35,7 +35,7 @@ export default { KeyK: "eE", KeyL: "iI", Semicolon: "oO", - Quote: `'"`, + Quote: "'\"", IntlBackslash: "\\|", KeyZ: "zZ", KeyX: "xX", diff --git a/packages/keybr-keyboard-generator/lib/layout/en_dvorak_prog.ts b/packages/keybr-keyboard-generator/lib/layout/en_dvorak_prog.ts new file mode 100644 index 00000000..1ffd2cd9 --- /dev/null +++ b/packages/keybr-keyboard-generator/lib/layout/en_dvorak_prog.ts @@ -0,0 +1,50 @@ +export default { + Backquote: "$~", + Digit1: "&%", + Digit2: "[7", + Digit3: "{5", + Digit4: "}3", + Digit5: "(1", + Digit6: "=9", + Digit7: "*0", + Digit8: ")2", + Digit9: "+4", + Digit0: "]6", + Minus: "!8", + Equal: "#`", + KeyQ: ";:", + KeyW: ",<", + KeyE: ".>", + KeyR: "pP", + KeyT: "yY", + KeyY: "fF", + KeyU: "gG", + KeyI: "cC", + KeyO: "rR", + KeyP: "lL", + BracketLeft: "/?", + BracketRight: "@^", + Backslash: "\\|", + KeyA: "aA", + KeyS: "oO", + KeyD: "eE", + KeyF: "uU", + KeyG: "iI", + KeyH: "dD", + KeyJ: "hH", + KeyK: "tT", + KeyL: "nN", + Semicolon: "sS", + Quote: "-_", + IntlBackslash: "\\|", + KeyZ: "'\"", + KeyX: "qQ", + KeyC: "jJ", + KeyV: "kK", + KeyB: "xX", + KeyN: "bB", + KeyM: "mM", + Comma: "wW", + Period: "vV", + Slash: "zZ", +}; diff --git a/packages/keybr-keyboard-generator/lib/layout/en_workman.ts b/packages/keybr-keyboard-generator/lib/layout/en_workman.ts index fde63942..ece50bdb 100644 --- a/packages/keybr-keyboard-generator/lib/layout/en_workman.ts +++ b/packages/keybr-keyboard-generator/lib/layout/en_workman.ts @@ -35,7 +35,7 @@ export default { KeyK: "eE", KeyL: "oO", Semicolon: "iI", - Quote: `'"`, + Quote: "'\"", IntlBackslash: "\\|", KeyZ: "zZ", KeyX: "xX", diff --git a/packages/keybr-keyboard-generator/lib/layout/en_workman_prog.ts b/packages/keybr-keyboard-generator/lib/layout/en_workman_prog.ts new file mode 100644 index 00000000..1bd08260 --- /dev/null +++ b/packages/keybr-keyboard-generator/lib/layout/en_workman_prog.ts @@ -0,0 +1,50 @@ +export default { + Backquote: "`~", + Digit1: "!1", + Digit2: "@2", + Digit3: "#3", + Digit4: "$4", + Digit5: "%5", + Digit6: "^6", + Digit7: "&7", + Digit8: "*8", + Digit9: "(9", + Digit0: ")0", + Minus: "-_", + Equal: "=+", + KeyQ: "qQ", + KeyW: "dD", + KeyE: "rR", + KeyR: "wW", + KeyT: "bB", + KeyY: "jJ", + KeyU: "fF", + KeyI: "uU", + KeyO: "pP", + KeyP: ";:", + BracketLeft: "{[", + BracketRight: "}]", + Backslash: "\\|", + KeyA: "aA", + KeyS: "sS", + KeyD: "hH", + KeyF: "tT", + KeyG: "gG", + KeyH: "yY", + KeyJ: "nN", + KeyK: "eE", + KeyL: "oO", + Semicolon: "iI", + Quote: "'\"", + IntlBackslash: "\\|", + KeyZ: "zZ", + KeyX: "xX", + KeyC: "mM", + KeyV: "cC", + KeyB: "vV", + KeyN: "kK", + KeyM: "lL", + Comma: ",<", + Period: ".>", + Slash: "/?", +}; diff --git a/packages/keybr-keyboard-generator/lib/layout/fr_ergol.json b/packages/keybr-keyboard-generator/lib/layout/fr_ergo_l.json similarity index 100% rename from packages/keybr-keyboard-generator/lib/layout/fr_ergol.json rename to packages/keybr-keyboard-generator/lib/layout/fr_ergo_l.json diff --git a/packages/keybr-keyboard-generator/lib/layout/fr_optimot_ergo.ts b/packages/keybr-keyboard-generator/lib/layout/fr_optimot_ergo.ts index f813f88e..c9df8477 100644 --- a/packages/keybr-keyboard-generator/lib/layout/fr_optimot_ergo.ts +++ b/packages/keybr-keyboard-generator/lib/layout/fr_optimot_ergo.ts @@ -35,7 +35,7 @@ export default { KeyL: ["r", "R", "", "⬆"], Semicolon: ["n", "N", "*~", "⮕"], Quote: ["*^", "!", "*¨", "¡"], - Backslash: ["ç", "Ç", "* ̛", "🄯"], + Backslash: ["ç", "Ç", "*´", "🄯"], IntlBackslash: ["*¨", "‽", "ø", "Ø"], KeyZ: ["k", "K"], KeyX: ["y", "Y", "*˙", "⌥"], @@ -44,7 +44,7 @@ export default { KeyB: ["w", "W", "•", "✗"], KeyN: ["g", "G", "", "✣"], KeyM: ["c", "C", "*¸", "♠"], - Comma: ["m", "M", "* ̄", "♥"], + Comma: ["m", "M", "*¯", "♥"], Period: ["h", "H", "*˘", "♦"], Slash: ["v", "V", "*ˇ", "♣"], Space: [" ", 0x202f, "_", 0x00a0], diff --git a/packages/keybr-keyboard-generator/lib/util/import.ts b/packages/keybr-keyboard-generator/lib/util/import.ts new file mode 100644 index 00000000..f1e2c770 --- /dev/null +++ b/packages/keybr-keyboard-generator/lib/util/import.ts @@ -0,0 +1,193 @@ +import type { KeyId } from "@keybr/keyboard"; +import { characterKeys } from "./keys.ts"; +import { type CodePointList, type KeyMap } from "./layout.ts"; + +/** + * Layout data as a two-dimensional array. + * + * ``` + * [ + * ["`~", "1!", ...], // Backspace row. + * ["qQ", "wW", ...], // Tab row. + * ["aA", "sS", ...], // CapsLock row. + * ["zZ", "xX", ...], // Shift row. + * ] + * ``` + */ +export type KeyList = readonly (readonly CodePointList[])[]; + +/** + * Maps row and column indices to key identifiers of the ANSI geometry. + */ +export const ansiGeometry: readonly (readonly KeyId[])[] = [ + [ + "Backquote", + "Digit1", + "Digit2", + "Digit3", + "Digit4", + "Digit5", + "Digit6", + "Digit7", + "Digit8", + "Digit9", + "Digit0", + "Minus", + "Equal", + ], + [ + "KeyQ", + "KeyW", + "KeyE", + "KeyR", + "KeyT", + "KeyY", + "KeyU", + "KeyI", + "KeyO", + "KeyP", + "BracketLeft", + "BracketRight", + "Backslash", + ], + [ + "KeyA", + "KeyS", + "KeyD", + "KeyF", + "KeyG", + "KeyH", + "KeyJ", + "KeyK", + "KeyL", + "Semicolon", + "Quote", + ], + [ + "KeyZ", + "KeyX", + "KeyC", + "KeyV", + "KeyB", + "KeyN", + "KeyM", + "Comma", + "Period", + "Slash", + ], +]; + +/** + * Maps row and column indices to key identifiers of the ISO geometry. + */ +export const isoGeometry: readonly (readonly KeyId[])[] = [ + [ + "Backquote", + "Digit1", + "Digit2", + "Digit3", + "Digit4", + "Digit5", + "Digit6", + "Digit7", + "Digit8", + "Digit9", + "Digit0", + "Minus", + "Equal", + ], + [ + "KeyQ", + "KeyW", + "KeyE", + "KeyR", + "KeyT", + "KeyY", + "KeyU", + "KeyI", + "KeyO", + "KeyP", + "BracketLeft", + "BracketRight", + ], + [ + "KeyA", + "KeyS", + "KeyD", + "KeyF", + "KeyG", + "KeyH", + "KeyJ", + "KeyK", + "KeyL", + "Semicolon", + "Quote", + "Backslash", + ], + [ + "IntlBackslash", + "KeyZ", + "KeyX", + "KeyC", + "KeyV", + "KeyB", + "KeyN", + "KeyM", + "Comma", + "Period", + "Slash", + ], +]; + +/** + * Imports the given layout data for the ANSI geometry. + */ +export function importAnsiLayout(data: KeyList): KeyMap { + return importLayout(ansiGeometry, data); +} + +/** + * Imports the given layout data for the ISO geometry. + */ +export function importIsoLayout(data: KeyList): KeyMap { + return importLayout(isoGeometry, data); +} + +export function importLayout( + geometry: readonly (readonly KeyId[])[], + data: KeyList, +): KeyMap { + const map = new Map(); + if (geometry.length !== data.length) { + throw new TypeError( + `Wrong number of rows, ` + + `expected ${geometry.length}, ` + + `got ${data.length}`, + ); + } + for (let i = 0; i < geometry.length; i++) { + const geometryRow = geometry[i]; + const dataRow = data[i]; + if (geometryRow.length !== dataRow.length) { + throw new TypeError( + `Wrong number of keys in row ${i}, ` + + `expected ${geometryRow.length}, ` + + `actual ${dataRow.length}`, + ); + } + for (let j = 0; j < geometryRow.length; j++) { + map.set(geometryRow[j], dataRow[j]); + } + } + if (!map.has("IntlBackslash") && map.has("Backslash")) { + map.set("IntlBackslash", map.get("Backslash")!); + } + return { + ...Object.fromEntries( + [...map].sort( + (a, b) => characterKeys.indexOf(a[0]) - characterKeys.indexOf(b[0]), + ), + ), + Space: " ", + }; +} diff --git a/packages/keybr-keyboard/lib/data/layout.ts b/packages/keybr-keyboard/lib/data/layout.ts index 927b0310..ef2cb70b 100644 --- a/packages/keybr-keyboard/lib/data/layout.ts +++ b/packages/keybr-keyboard/lib/data/layout.ts @@ -5,21 +5,27 @@ export { LAYOUT_DE_CH_WIN } from "./layout/de_ch-win.ts"; export { LAYOUT_DE_DE_WIN } from "./layout/de_de-win.ts"; export { LAYOUT_DE_MINE } from "./layout/de_mine.ts"; export { LAYOUT_DE_NEO_2 } from "./layout/de_neo_2.ts"; +export { LAYOUT_DE_NOTED } from "./layout/de_noted.ts"; export { LAYOUT_EL_GR_WIN } from "./layout/el_gr-win.ts"; +export { LAYOUT_EN_CANARY } from "./layout/en_canary.ts"; export { LAYOUT_EN_CANARY_MATRIX } from "./layout/en_canary_matrix.ts"; export { LAYOUT_EN_COLEMAK } from "./layout/en_colemak.ts"; export { LAYOUT_EN_COLEMAK_DH } from "./layout/en_colemak_dh.ts"; export { LAYOUT_EN_COLEMAK_DH_MATRIX } from "./layout/en_colemak_dh_matrix.ts"; +export { LAYOUT_EN_DVORAK_PROG } from "./layout/en_dvorak_prog.ts"; export { LAYOUT_EN_DVORAK_WIN } from "./layout/en_dvorak-win.ts"; +export { LAYOUT_EN_DVORAKL_WIN } from "./layout/en_dvorakl-win.ts"; +export { LAYOUT_EN_DVORAKR_WIN } from "./layout/en_dvorakr-win.ts"; export { LAYOUT_EN_UK_WIN } from "./layout/en_uk-win.ts"; export { LAYOUT_EN_US_WIN } from "./layout/en_us-win.ts"; export { LAYOUT_EN_WORKMAN } from "./layout/en_workman.ts"; +export { LAYOUT_EN_WORKMAN_PROG } from "./layout/en_workman_prog.ts"; export { LAYOUT_ES_ES_WIN } from "./layout/es_es-win.ts"; export { LAYOUT_FR_BEPO } from "./layout/fr_bepo.ts"; export { LAYOUT_FR_CA_WIN } from "./layout/fr_ca-win.ts"; export { LAYOUT_FR_CH_WIN } from "./layout/fr_ch-win.ts"; export { LAYOUT_FR_ERGLACE } from "./layout/fr_erglace.ts"; -export { LAYOUT_FR_ERGOL } from "./layout/fr_ergol.ts"; +export { LAYOUT_FR_ERGO_L } from "./layout/fr_ergo_l.ts"; export { LAYOUT_FR_FR_WIN } from "./layout/fr_fr-win.ts"; export { LAYOUT_FR_OPTIMOT_ERGO } from "./layout/fr_optimot_ergo.ts"; export { LAYOUT_HE_IL_WIN } from "./layout/he_il-win.ts"; diff --git a/packages/keybr-keyboard/lib/data/layout/de_bone.ts b/packages/keybr-keyboard/lib/data/layout/de_bone.ts index d3537c3f..df8545cb 100644 --- a/packages/keybr-keyboard/lib/data/layout/de_bone.ts +++ b/packages/keybr-keyboard/lib/data/layout/de_bone.ts @@ -4,7 +4,7 @@ import { type CodePointDict } from "../../types.ts"; // prettier-ignore export const LAYOUT_DE_BONE: CodePointDict = { - Backquote: [/* ^ */ 0x005e, /* ˇ */ 0x02c7], + Backquote: [/* DEAD CIRCUMFLEX ACCENT */ 0x0302, /* DEAD CARON */ 0x030c], Digit1: [/* 1 */ 0x0031, /* ° */ 0x00b0], Digit2: [/* 2 */ 0x0032, /* § */ 0x00a7], Digit3: [/* 3 */ 0x0033, /* ℓ */ 0x2113], @@ -16,7 +16,7 @@ export const LAYOUT_DE_BONE: CodePointDict = { Digit9: [/* 9 */ 0x0039, /* “ */ 0x201c], Digit0: [/* 0 */ 0x0030, /* ” */ 0x201d], Minus: [/* - */ 0x002d, /* — */ 0x2014], - Equal: [/* ` */ 0x0060, /* ¸ */ 0x00b8], + Equal: [/* DEAD GRAVE ACCENT */ 0x0300, /* DEAD CEDILLA */ 0x0327, /* DEAD DIAERESIS */ 0x0308], KeyQ: [/* j */ 0x006a, /* J */ 0x004a], KeyW: [/* d */ 0x0064, /* D */ 0x0044], KeyE: [/* u */ 0x0075, /* U */ 0x0055], @@ -28,7 +28,7 @@ export const LAYOUT_DE_BONE: CodePointDict = { KeyO: [/* m */ 0x006d, /* M */ 0x004d], KeyP: [/* w */ 0x0077, /* W */ 0x0057], BracketLeft: [/* ß */ 0x00df, /* ẞ */ 0x1e9e], - BracketRight: [/* ´ */ 0x00b4, /* ˜ */ 0x02dc], + BracketRight: [/* DEAD ACUTE ACCENT */ 0x0301, /* DEAD TILDE */ 0x0303], KeyA: [/* c */ 0x0063, /* C */ 0x0043], KeyS: [/* t */ 0x0074, /* T */ 0x0054], KeyD: [/* i */ 0x0069, /* I */ 0x0049], diff --git a/packages/keybr-keyboard/lib/data/layout/de_mine.ts b/packages/keybr-keyboard/lib/data/layout/de_mine.ts index 8d9a4c6b..2c5c675c 100644 --- a/packages/keybr-keyboard/lib/data/layout/de_mine.ts +++ b/packages/keybr-keyboard/lib/data/layout/de_mine.ts @@ -4,7 +4,7 @@ import { type CodePointDict } from "../../types.ts"; // prettier-ignore export const LAYOUT_DE_MINE: CodePointDict = { - Backquote: [/* ^ */ 0x005e, /* ˇ */ 0x02c7], + Backquote: [/* DEAD CIRCUMFLEX ACCENT */ 0x0302, /* DEAD CARON */ 0x030c], Digit1: [/* 1 */ 0x0031, /* ° */ 0x00b0], Digit2: [/* 2 */ 0x0032, /* § */ 0x00a7], Digit3: [/* 3 */ 0x0033, /* ℓ */ 0x2113], @@ -16,7 +16,7 @@ export const LAYOUT_DE_MINE: CodePointDict = { Digit9: [/* 9 */ 0x0039, /* “ */ 0x201c], Digit0: [/* 0 */ 0x0030, /* ” */ 0x201d], Minus: [/* - */ 0x002d, /* — */ 0x2014], - Equal: [/* ` */ 0x0060, /* ¸ */ 0x00b8], + Equal: [/* DEAD GRAVE ACCENT */ 0x0300, /* DEAD CEDILLA */ 0x0327, /* DEAD DIAERESIS */ 0x0308], KeyQ: [/* j */ 0x006a, /* J */ 0x004a], KeyW: [/* l */ 0x006c, /* L */ 0x004c], KeyE: [/* u */ 0x0075, /* U */ 0x0055], @@ -26,9 +26,10 @@ export const LAYOUT_DE_MINE: CodePointDict = { KeyU: [/* b */ 0x0062, /* B */ 0x0042], KeyI: [/* d */ 0x0064, /* D */ 0x0044], KeyO: [/* g */ 0x0067, /* G */ 0x0047], - KeyP: [/* Y */ 0x0059, /* Y */ 0x0059], + KeyP: [/* y */ 0x0079, /* Y */ 0x0059], BracketLeft: [/* z */ 0x007a, /* Z */ 0x005a], BracketRight: [/* ß */ 0x00df, /* ẞ */ 0x1e9e], + Backslash: [/* DEAD ACUTE ACCENT */ 0x0301, /* DEAD TILDE */ 0x0303], KeyA: [/* c */ 0x0063, /* C */ 0x0043], KeyS: [/* r */ 0x0072, /* R */ 0x0052], KeyD: [/* i */ 0x0069, /* I */ 0x0049], @@ -39,7 +40,6 @@ export const LAYOUT_DE_MINE: CodePointDict = { KeyK: [/* t */ 0x0074, /* T */ 0x0054], KeyL: [/* s */ 0x0073, /* S */ 0x0053], Semicolon: [/* h */ 0x0068, /* H */ 0x0048], - IntlBackslash: [/* ´ */ 0x00b4, /* ˜ */ 0x02dc], KeyZ: [/* v */ 0x0076, /* V */ 0x0056], KeyX: [/* x */ 0x0078, /* X */ 0x0058], KeyC: [/* ü */ 0x00fc, /* Ü */ 0x00dc], diff --git a/packages/keybr-keyboard/lib/data/layout/de_neo_2.ts b/packages/keybr-keyboard/lib/data/layout/de_neo_2.ts index 6ace5587..d024df6c 100644 --- a/packages/keybr-keyboard/lib/data/layout/de_neo_2.ts +++ b/packages/keybr-keyboard/lib/data/layout/de_neo_2.ts @@ -4,7 +4,7 @@ import { type CodePointDict } from "../../types.ts"; // prettier-ignore export const LAYOUT_DE_NEO_2: CodePointDict = { - Backquote: [/* ^ */ 0x005e, /* ˇ */ 0x02c7], + Backquote: [/* DEAD CIRCUMFLEX ACCENT */ 0x0302, /* DEAD CARON */ 0x030c], Digit1: [/* 1 */ 0x0031, /* ° */ 0x00b0], Digit2: [/* 2 */ 0x0032, /* § */ 0x00a7], Digit3: [/* 3 */ 0x0033, /* ℓ */ 0x2113], @@ -16,7 +16,7 @@ export const LAYOUT_DE_NEO_2: CodePointDict = { Digit9: [/* 9 */ 0x0039, /* “ */ 0x201c], Digit0: [/* 0 */ 0x0030, /* ” */ 0x201d], Minus: [/* - */ 0x002d, /* — */ 0x2014], - Equal: [/* ` */ 0x0060, /* ¸ */ 0x00b8], + Equal: [/* DEAD GRAVE ACCENT */ 0x0300, /* DEAD CEDILLA */ 0x0327, /* DEAD DIAERESIS */ 0x0308], KeyQ: [/* x */ 0x0078, /* X */ 0x0058], KeyW: [/* v */ 0x0076, /* V */ 0x0056], KeyE: [/* l */ 0x006c, /* L */ 0x004c], @@ -28,7 +28,7 @@ export const LAYOUT_DE_NEO_2: CodePointDict = { KeyO: [/* f */ 0x0066, /* F */ 0x0046], KeyP: [/* q */ 0x0071, /* Q */ 0x0051], BracketLeft: [/* ß */ 0x00df, /* ẞ */ 0x1e9e], - BracketRight: [/* ´ */ 0x00b4, /* ˜ */ 0x02dc], + BracketRight: [/* DEAD ACUTE ACCENT */ 0x0301, /* DEAD TILDE */ 0x0303], KeyA: [/* u */ 0x0075, /* U */ 0x0055], KeyS: [/* i */ 0x0069, /* I */ 0x0049], KeyD: [/* a */ 0x0061, /* A */ 0x0041], diff --git a/packages/keybr-keyboard/lib/data/layout/de_noted.ts b/packages/keybr-keyboard/lib/data/layout/de_noted.ts new file mode 100644 index 00000000..ca9755f3 --- /dev/null +++ b/packages/keybr-keyboard/lib/data/layout/de_noted.ts @@ -0,0 +1,54 @@ +// Generated file, do not edit. + +import { type CodePointDict } from "../../types.ts"; + +// prettier-ignore +export const LAYOUT_DE_NOTED: CodePointDict = { + Backquote: [/* DEAD CIRCUMFLEX ACCENT */ 0x0302, /* DEAD CARON */ 0x030c], + Digit1: [/* 1 */ 0x0031, /* ° */ 0x00b0], + Digit2: [/* 2 */ 0x0032, /* § */ 0x00a7], + Digit3: [/* 3 */ 0x0033, /* ℓ */ 0x2113], + Digit4: [/* 4 */ 0x0034, /* » */ 0x00bb], + Digit5: [/* 5 */ 0x0035, /* « */ 0x00ab], + Digit6: [/* 6 */ 0x0036, /* $ */ 0x0024], + Digit7: [/* 7 */ 0x0037, /* € */ 0x20ac], + Digit8: [/* 8 */ 0x0038, /* „ */ 0x201e], + Digit9: [/* 9 */ 0x0039, /* “ */ 0x201c], + Digit0: [/* 0 */ 0x0030, /* ” */ 0x201d], + Minus: [/* - */ 0x002d, /* — */ 0x2014], + Equal: [/* DEAD GRAVE ACCENT */ 0x0300, /* DEAD CEDILLA */ 0x0327, /* DEAD DIAERESIS */ 0x0308], + KeyQ: [/* z */ 0x007a, /* Z */ 0x005a], + KeyW: [/* y */ 0x0079, /* Y */ 0x0059], + KeyE: [/* u */ 0x0075, /* U */ 0x0055], + KeyR: [/* a */ 0x0061, /* A */ 0x0041], + KeyT: [/* q */ 0x0071, /* Q */ 0x0051], + KeyY: [/* p */ 0x0070, /* P */ 0x0050], + KeyU: [/* b */ 0x0062, /* B */ 0x0042], + KeyI: [/* m */ 0x006d, /* M */ 0x004d], + KeyO: [/* l */ 0x006c, /* L */ 0x004c], + KeyP: [/* f */ 0x0066, /* F */ 0x0046], + BracketLeft: [/* j */ 0x006a, /* J */ 0x004a], + BracketRight: [/* ß */ 0x00df, /* ẞ */ 0x1e9e], + Backslash: [/* DEAD ACUTE ACCENT */ 0x0301, /* DEAD TILDE */ 0x0303], + KeyA: [/* c */ 0x0063, /* C */ 0x0043], + KeyS: [/* s */ 0x0073, /* S */ 0x0053], + KeyD: [/* i */ 0x0069, /* I */ 0x0049], + KeyF: [/* e */ 0x0065, /* E */ 0x0045], + KeyG: [/* o */ 0x006f, /* O */ 0x004f], + KeyH: [/* d */ 0x0064, /* D */ 0x0044], + KeyJ: [/* t */ 0x0074, /* T */ 0x0054], + KeyK: [/* n */ 0x006e, /* N */ 0x004e], + KeyL: [/* r */ 0x0072, /* R */ 0x0052], + Semicolon: [/* h */ 0x0068, /* H */ 0x0048], + KeyZ: [/* v */ 0x0076, /* V */ 0x0056], + KeyX: [/* x */ 0x0078, /* X */ 0x0058], + KeyC: [/* ü */ 0x00fc, /* Ü */ 0x00dc], + KeyV: [/* ä */ 0x00e4, /* Ä */ 0x00c4], + KeyB: [/* ö */ 0x00f6, /* Ö */ 0x00d6], + KeyN: [/* w */ 0x0077, /* W */ 0x0057], + KeyM: [/* g */ 0x0067, /* G */ 0x0047], + Comma: [/* , */ 0x002c, /* – */ 0x2013], + Period: [/* . */ 0x002e, /* • */ 0x2022], + Slash: [/* k */ 0x006b, /* K */ 0x004b], + Space: [/* SPACE */ 0x0020], +}; diff --git a/packages/keybr-keyboard/lib/data/layout/en_canary.ts b/packages/keybr-keyboard/lib/data/layout/en_canary.ts new file mode 100644 index 00000000..84433009 --- /dev/null +++ b/packages/keybr-keyboard/lib/data/layout/en_canary.ts @@ -0,0 +1,56 @@ +// Generated file, do not edit. + +import { type CodePointDict } from "../../types.ts"; + +// prettier-ignore +export const LAYOUT_EN_CANARY: CodePointDict = { + Backquote: [/* ` */ 0x0060, /* ~ */ 0x007e], + Digit1: [/* 1 */ 0x0031, /* ! */ 0x0021], + Digit2: [/* 2 */ 0x0032, /* @ */ 0x0040], + Digit3: [/* 3 */ 0x0033, /* # */ 0x0023], + Digit4: [/* 4 */ 0x0034, /* $ */ 0x0024], + Digit5: [/* 5 */ 0x0035, /* % */ 0x0025], + Digit6: [/* 6 */ 0x0036, /* ^ */ 0x005e], + Digit7: [/* 7 */ 0x0037, /* & */ 0x0026], + Digit8: [/* 8 */ 0x0038, /* * */ 0x002a], + Digit9: [/* 9 */ 0x0039, /* ( */ 0x0028], + Digit0: [/* 0 */ 0x0030, /* ) */ 0x0029], + Minus: [/* - */ 0x002d, /* _ */ 0x005f], + Equal: [/* = */ 0x003d, /* + */ 0x002b], + KeyQ: [/* w */ 0x0077, /* W */ 0x0057], + KeyW: [/* l */ 0x006c, /* L */ 0x004c], + KeyE: [/* y */ 0x0079, /* Y */ 0x0059], + KeyR: [/* p */ 0x0070, /* P */ 0x0050], + KeyT: [/* k */ 0x006b, /* K */ 0x004b], + KeyY: [/* z */ 0x007a, /* Z */ 0x005a], + KeyU: [/* x */ 0x0078, /* X */ 0x0058], + KeyI: [/* o */ 0x006f, /* O */ 0x004f], + KeyO: [/* u */ 0x0075, /* U */ 0x0055], + KeyP: [/* ; */ 0x003b, /* : */ 0x003a], + BracketLeft: [/* [ */ 0x005b, /* { */ 0x007b], + BracketRight: [/* ] */ 0x005d, /* } */ 0x007d], + Backslash: [/* \ */ 0x005c, /* | */ 0x007c], + KeyA: [/* c */ 0x0063, /* C */ 0x0043], + KeyS: [/* r */ 0x0072, /* R */ 0x0052], + KeyD: [/* s */ 0x0073, /* S */ 0x0053], + KeyF: [/* t */ 0x0074, /* T */ 0x0054], + KeyG: [/* b */ 0x0062, /* B */ 0x0042], + KeyH: [/* f */ 0x0066, /* F */ 0x0046], + KeyJ: [/* n */ 0x006e, /* N */ 0x004e], + KeyK: [/* e */ 0x0065, /* E */ 0x0045], + KeyL: [/* i */ 0x0069, /* I */ 0x0049], + Semicolon: [/* a */ 0x0061, /* A */ 0x0041], + Quote: [/* ' */ 0x0027, /* " */ 0x0022], + IntlBackslash: [/* \ */ 0x005c, /* | */ 0x007c], + KeyZ: [/* j */ 0x006a, /* J */ 0x004a], + KeyX: [/* v */ 0x0076, /* V */ 0x0056], + KeyC: [/* d */ 0x0064, /* D */ 0x0044], + KeyV: [/* g */ 0x0067, /* G */ 0x0047], + KeyB: [/* q */ 0x0071, /* Q */ 0x0051], + KeyN: [/* m */ 0x006d, /* M */ 0x004d], + KeyM: [/* h */ 0x0068, /* H */ 0x0048], + Comma: [/* / */ 0x002f, /* ? */ 0x003f], + Period: [/* , */ 0x002c, /* < */ 0x003c], + Slash: [/* . */ 0x002e, /* > */ 0x003e], + Space: [/* SPACE */ 0x0020], +}; diff --git a/packages/keybr-keyboard/lib/data/layout/en_dvorak_prog.ts b/packages/keybr-keyboard/lib/data/layout/en_dvorak_prog.ts new file mode 100644 index 00000000..c9f132f1 --- /dev/null +++ b/packages/keybr-keyboard/lib/data/layout/en_dvorak_prog.ts @@ -0,0 +1,56 @@ +// Generated file, do not edit. + +import { type CodePointDict } from "../../types.ts"; + +// prettier-ignore +export const LAYOUT_EN_DVORAK_PROG: CodePointDict = { + Backquote: [/* $ */ 0x0024, /* ~ */ 0x007e], + Digit1: [/* & */ 0x0026, /* % */ 0x0025], + Digit2: [/* [ */ 0x005b, /* 7 */ 0x0037], + Digit3: [/* { */ 0x007b, /* 5 */ 0x0035], + Digit4: [/* } */ 0x007d, /* 3 */ 0x0033], + Digit5: [/* ( */ 0x0028, /* 1 */ 0x0031], + Digit6: [/* = */ 0x003d, /* 9 */ 0x0039], + Digit7: [/* * */ 0x002a, /* 0 */ 0x0030], + Digit8: [/* ) */ 0x0029, /* 2 */ 0x0032], + Digit9: [/* + */ 0x002b, /* 4 */ 0x0034], + Digit0: [/* ] */ 0x005d, /* 6 */ 0x0036], + Minus: [/* ! */ 0x0021, /* 8 */ 0x0038], + Equal: [/* # */ 0x0023, /* ` */ 0x0060], + KeyQ: [/* ; */ 0x003b, /* : */ 0x003a], + KeyW: [/* , */ 0x002c, /* < */ 0x003c], + KeyE: [/* . */ 0x002e, /* > */ 0x003e], + KeyR: [/* p */ 0x0070, /* P */ 0x0050], + KeyT: [/* y */ 0x0079, /* Y */ 0x0059], + KeyY: [/* f */ 0x0066, /* F */ 0x0046], + KeyU: [/* g */ 0x0067, /* G */ 0x0047], + KeyI: [/* c */ 0x0063, /* C */ 0x0043], + KeyO: [/* r */ 0x0072, /* R */ 0x0052], + KeyP: [/* l */ 0x006c, /* L */ 0x004c], + BracketLeft: [/* / */ 0x002f, /* ? */ 0x003f], + BracketRight: [/* @ */ 0x0040, /* ^ */ 0x005e], + Backslash: [/* \ */ 0x005c, /* | */ 0x007c], + KeyA: [/* a */ 0x0061, /* A */ 0x0041], + KeyS: [/* o */ 0x006f, /* O */ 0x004f], + KeyD: [/* e */ 0x0065, /* E */ 0x0045], + KeyF: [/* u */ 0x0075, /* U */ 0x0055], + KeyG: [/* i */ 0x0069, /* I */ 0x0049], + KeyH: [/* d */ 0x0064, /* D */ 0x0044], + KeyJ: [/* h */ 0x0068, /* H */ 0x0048], + KeyK: [/* t */ 0x0074, /* T */ 0x0054], + KeyL: [/* n */ 0x006e, /* N */ 0x004e], + Semicolon: [/* s */ 0x0073, /* S */ 0x0053], + Quote: [/* - */ 0x002d, /* _ */ 0x005f], + IntlBackslash: [/* \ */ 0x005c, /* | */ 0x007c], + KeyZ: [/* ' */ 0x0027, /* " */ 0x0022], + KeyX: [/* q */ 0x0071, /* Q */ 0x0051], + KeyC: [/* j */ 0x006a, /* J */ 0x004a], + KeyV: [/* k */ 0x006b, /* K */ 0x004b], + KeyB: [/* x */ 0x0078, /* X */ 0x0058], + KeyN: [/* b */ 0x0062, /* B */ 0x0042], + KeyM: [/* m */ 0x006d, /* M */ 0x004d], + Comma: [/* w */ 0x0077, /* W */ 0x0057], + Period: [/* v */ 0x0076, /* V */ 0x0056], + Slash: [/* z */ 0x007a, /* Z */ 0x005a], + Space: [/* SPACE */ 0x0020], +}; diff --git a/packages/keybr-keyboard/lib/data/layout/en_dvorakl-win.ts b/packages/keybr-keyboard/lib/data/layout/en_dvorakl-win.ts new file mode 100644 index 00000000..2e5b53ce --- /dev/null +++ b/packages/keybr-keyboard/lib/data/layout/en_dvorakl-win.ts @@ -0,0 +1,56 @@ +// Generated file, do not edit. + +import { type CodePointDict } from "../../types.ts"; + +// prettier-ignore +export const LAYOUT_EN_DVORAKL_WIN: CodePointDict = { + Backquote: [/* ` */ 0x0060, /* ~ */ 0x007e], + Digit1: [/* [ */ 0x005b, /* { */ 0x007b], + Digit2: [/* ] */ 0x005d, /* } */ 0x007d], + Digit3: [/* / */ 0x002f, /* ? */ 0x003f], + Digit4: [/* p */ 0x0070, /* P */ 0x0050], + Digit5: [/* f */ 0x0066, /* F */ 0x0046], + Digit6: [/* m */ 0x006d, /* M */ 0x004d], + Digit7: [/* l */ 0x006c, /* L */ 0x004c], + Digit8: [/* j */ 0x006a, /* J */ 0x004a], + Digit9: [/* 4 */ 0x0034, /* $ */ 0x0024], + Digit0: [/* 3 */ 0x0033, /* # */ 0x0023], + Minus: [/* 2 */ 0x0032, /* @ */ 0x0040], + Equal: [/* 1 */ 0x0031, /* ! */ 0x0021], + KeyQ: [/* ; */ 0x003b, /* : */ 0x003a], + KeyW: [/* q */ 0x0071, /* Q */ 0x0051], + KeyE: [/* b */ 0x0062, /* B */ 0x0042], + KeyR: [/* y */ 0x0079, /* Y */ 0x0059], + KeyT: [/* u */ 0x0075, /* U */ 0x0055], + KeyY: [/* r */ 0x0072, /* R */ 0x0052], + KeyU: [/* s */ 0x0073, /* S */ 0x0053], + KeyI: [/* o */ 0x006f, /* O */ 0x004f], + KeyO: [/* . */ 0x002e, /* > */ 0x003e], + KeyP: [/* 6 */ 0x0036, /* ^ */ 0x005e], + BracketLeft: [/* 5 */ 0x0035, /* % */ 0x0025], + BracketRight: [/* = */ 0x003d, /* + */ 0x002b], + Backslash: [/* \ */ 0x005c, /* | */ 0x007c], + KeyA: [/* - */ 0x002d, /* _ */ 0x005f], + KeyS: [/* k */ 0x006b, /* K */ 0x004b], + KeyD: [/* c */ 0x0063, /* C */ 0x0043], + KeyF: [/* d */ 0x0064, /* D */ 0x0044], + KeyG: [/* t */ 0x0074, /* T */ 0x0054], + KeyH: [/* h */ 0x0068, /* H */ 0x0048], + KeyJ: [/* e */ 0x0065, /* E */ 0x0045], + KeyK: [/* a */ 0x0061, /* A */ 0x0041], + KeyL: [/* z */ 0x007a, /* Z */ 0x005a], + Semicolon: [/* 8 */ 0x0038, /* * */ 0x002a], + Quote: [/* 7 */ 0x0037, /* & */ 0x0026], + IntlBackslash: [/* \ */ 0x005c, /* | */ 0x007c], + KeyZ: [/* ' */ 0x0027, /* " */ 0x0022], + KeyX: [/* x */ 0x0078, /* X */ 0x0058], + KeyC: [/* g */ 0x0067, /* G */ 0x0047], + KeyV: [/* v */ 0x0076, /* V */ 0x0056], + KeyB: [/* w */ 0x0077, /* W */ 0x0057], + KeyN: [/* n */ 0x006e, /* N */ 0x004e], + KeyM: [/* i */ 0x0069, /* I */ 0x0049], + Comma: [/* , */ 0x002c, /* < */ 0x003c], + Period: [/* 0 */ 0x0030, /* ) */ 0x0029], + Slash: [/* 9 */ 0x0039, /* ( */ 0x0028], + Space: [/* SPACE */ 0x0020], +}; diff --git a/packages/keybr-keyboard/lib/data/layout/en_dvorakr-win.ts b/packages/keybr-keyboard/lib/data/layout/en_dvorakr-win.ts new file mode 100644 index 00000000..f71bb8a3 --- /dev/null +++ b/packages/keybr-keyboard/lib/data/layout/en_dvorakr-win.ts @@ -0,0 +1,56 @@ +// Generated file, do not edit. + +import { type CodePointDict } from "../../types.ts"; + +// prettier-ignore +export const LAYOUT_EN_DVORAKR_WIN: CodePointDict = { + Backquote: [/* ` */ 0x0060, /* ~ */ 0x007e], + Digit1: [/* 1 */ 0x0031, /* ! */ 0x0021], + Digit2: [/* 2 */ 0x0032, /* @ */ 0x0040], + Digit3: [/* 3 */ 0x0033, /* # */ 0x0023], + Digit4: [/* 4 */ 0x0034, /* $ */ 0x0024], + Digit5: [/* j */ 0x006a, /* J */ 0x004a], + Digit6: [/* l */ 0x006c, /* L */ 0x004c], + Digit7: [/* m */ 0x006d, /* M */ 0x004d], + Digit8: [/* f */ 0x0066, /* F */ 0x0046], + Digit9: [/* p */ 0x0070, /* P */ 0x0050], + Digit0: [/* / */ 0x002f, /* ? */ 0x003f], + Minus: [/* [ */ 0x005b, /* { */ 0x007b], + Equal: [/* ] */ 0x005d, /* } */ 0x007d], + KeyQ: [/* 5 */ 0x0035, /* % */ 0x0025], + KeyW: [/* 6 */ 0x0036, /* ^ */ 0x005e], + KeyE: [/* q */ 0x0071, /* Q */ 0x0051], + KeyR: [/* . */ 0x002e, /* > */ 0x003e], + KeyT: [/* o */ 0x006f, /* O */ 0x004f], + KeyY: [/* r */ 0x0072, /* R */ 0x0052], + KeyU: [/* s */ 0x0073, /* S */ 0x0053], + KeyI: [/* u */ 0x0075, /* U */ 0x0055], + KeyO: [/* y */ 0x0079, /* Y */ 0x0059], + KeyP: [/* b */ 0x0062, /* B */ 0x0042], + BracketLeft: [/* ; */ 0x003b, /* : */ 0x003a], + BracketRight: [/* = */ 0x003d, /* + */ 0x002b], + Backslash: [/* \ */ 0x005c, /* | */ 0x007c], + KeyA: [/* 7 */ 0x0037, /* & */ 0x0026], + KeyS: [/* 8 */ 0x0038, /* * */ 0x002a], + KeyD: [/* z */ 0x007a, /* Z */ 0x005a], + KeyF: [/* a */ 0x0061, /* A */ 0x0041], + KeyG: [/* e */ 0x0065, /* E */ 0x0045], + KeyH: [/* h */ 0x0068, /* H */ 0x0048], + KeyJ: [/* t */ 0x0074, /* T */ 0x0054], + KeyK: [/* d */ 0x0064, /* D */ 0x0044], + KeyL: [/* c */ 0x0063, /* C */ 0x0043], + Semicolon: [/* k */ 0x006b, /* K */ 0x004b], + Quote: [/* - */ 0x002d, /* _ */ 0x005f], + IntlBackslash: [/* \ */ 0x005c, /* | */ 0x007c], + KeyZ: [/* 9 */ 0x0039, /* ( */ 0x0028], + KeyX: [/* 0 */ 0x0030, /* ) */ 0x0029], + KeyC: [/* x */ 0x0078, /* X */ 0x0058], + KeyV: [/* , */ 0x002c, /* < */ 0x003c], + KeyB: [/* i */ 0x0069, /* I */ 0x0049], + KeyN: [/* n */ 0x006e, /* N */ 0x004e], + KeyM: [/* w */ 0x0077, /* W */ 0x0057], + Comma: [/* v */ 0x0076, /* V */ 0x0056], + Period: [/* g */ 0x0067, /* G */ 0x0047], + Slash: [/* ' */ 0x0027, /* " */ 0x0022], + Space: [/* SPACE */ 0x0020], +}; diff --git a/packages/keybr-keyboard/lib/data/layout/en_workman_prog.ts b/packages/keybr-keyboard/lib/data/layout/en_workman_prog.ts new file mode 100644 index 00000000..88bcfa48 --- /dev/null +++ b/packages/keybr-keyboard/lib/data/layout/en_workman_prog.ts @@ -0,0 +1,56 @@ +// Generated file, do not edit. + +import { type CodePointDict } from "../../types.ts"; + +// prettier-ignore +export const LAYOUT_EN_WORKMAN_PROG: CodePointDict = { + Backquote: [/* ` */ 0x0060, /* ~ */ 0x007e], + Digit1: [/* ! */ 0x0021, /* 1 */ 0x0031], + Digit2: [/* @ */ 0x0040, /* 2 */ 0x0032], + Digit3: [/* # */ 0x0023, /* 3 */ 0x0033], + Digit4: [/* $ */ 0x0024, /* 4 */ 0x0034], + Digit5: [/* % */ 0x0025, /* 5 */ 0x0035], + Digit6: [/* ^ */ 0x005e, /* 6 */ 0x0036], + Digit7: [/* & */ 0x0026, /* 7 */ 0x0037], + Digit8: [/* * */ 0x002a, /* 8 */ 0x0038], + Digit9: [/* ( */ 0x0028, /* 9 */ 0x0039], + Digit0: [/* ) */ 0x0029, /* 0 */ 0x0030], + Minus: [/* - */ 0x002d, /* _ */ 0x005f], + Equal: [/* = */ 0x003d, /* + */ 0x002b], + KeyQ: [/* q */ 0x0071, /* Q */ 0x0051], + KeyW: [/* d */ 0x0064, /* D */ 0x0044], + KeyE: [/* r */ 0x0072, /* R */ 0x0052], + KeyR: [/* w */ 0x0077, /* W */ 0x0057], + KeyT: [/* b */ 0x0062, /* B */ 0x0042], + KeyY: [/* j */ 0x006a, /* J */ 0x004a], + KeyU: [/* f */ 0x0066, /* F */ 0x0046], + KeyI: [/* u */ 0x0075, /* U */ 0x0055], + KeyO: [/* p */ 0x0070, /* P */ 0x0050], + KeyP: [/* ; */ 0x003b, /* : */ 0x003a], + BracketLeft: [/* { */ 0x007b, /* [ */ 0x005b], + BracketRight: [/* } */ 0x007d, /* ] */ 0x005d], + Backslash: [/* \ */ 0x005c, /* | */ 0x007c], + KeyA: [/* a */ 0x0061, /* A */ 0x0041], + KeyS: [/* s */ 0x0073, /* S */ 0x0053], + KeyD: [/* h */ 0x0068, /* H */ 0x0048], + KeyF: [/* t */ 0x0074, /* T */ 0x0054], + KeyG: [/* g */ 0x0067, /* G */ 0x0047], + KeyH: [/* y */ 0x0079, /* Y */ 0x0059], + KeyJ: [/* n */ 0x006e, /* N */ 0x004e], + KeyK: [/* e */ 0x0065, /* E */ 0x0045], + KeyL: [/* o */ 0x006f, /* O */ 0x004f], + Semicolon: [/* i */ 0x0069, /* I */ 0x0049], + Quote: [/* ' */ 0x0027, /* " */ 0x0022], + IntlBackslash: [/* \ */ 0x005c, /* | */ 0x007c], + KeyZ: [/* z */ 0x007a, /* Z */ 0x005a], + KeyX: [/* x */ 0x0078, /* X */ 0x0058], + KeyC: [/* m */ 0x006d, /* M */ 0x004d], + KeyV: [/* c */ 0x0063, /* C */ 0x0043], + KeyB: [/* v */ 0x0076, /* V */ 0x0056], + KeyN: [/* k */ 0x006b, /* K */ 0x004b], + KeyM: [/* l */ 0x006c, /* L */ 0x004c], + Comma: [/* , */ 0x002c, /* < */ 0x003c], + Period: [/* . */ 0x002e, /* > */ 0x003e], + Slash: [/* / */ 0x002f, /* ? */ 0x003f], + Space: [/* SPACE */ 0x0020], +}; diff --git a/packages/keybr-keyboard/lib/data/layout/fr_ergol.ts b/packages/keybr-keyboard/lib/data/layout/fr_ergo_l.ts similarity index 98% rename from packages/keybr-keyboard/lib/data/layout/fr_ergol.ts rename to packages/keybr-keyboard/lib/data/layout/fr_ergo_l.ts index f81e07d9..04fa4051 100644 --- a/packages/keybr-keyboard/lib/data/layout/fr_ergol.ts +++ b/packages/keybr-keyboard/lib/data/layout/fr_ergo_l.ts @@ -3,7 +3,7 @@ import { type CodePointDict } from "../../types.ts"; // prettier-ignore -export const LAYOUT_FR_ERGOL: CodePointDict = { +export const LAYOUT_FR_ERGO_L: CodePointDict = { Backquote: [/* ` */ 0x0060, /* ~ */ 0x007e], Digit1: [/* 1 */ 0x0031, /* ! */ 0x0021, /* ₁ */ 0x2081, /* ¹ */ 0x00b9], Digit2: [/* 2 */ 0x0032, /* @ */ 0x0040, /* ₂ */ 0x2082, /* ² */ 0x00b2], diff --git a/packages/keybr-keyboard/lib/data/layout/fr_optimot_ergo.ts b/packages/keybr-keyboard/lib/data/layout/fr_optimot_ergo.ts index ecc887a4..ec1299bd 100644 --- a/packages/keybr-keyboard/lib/data/layout/fr_optimot_ergo.ts +++ b/packages/keybr-keyboard/lib/data/layout/fr_optimot_ergo.ts @@ -29,7 +29,7 @@ export const LAYOUT_FR_OPTIMOT_ERGO: CodePointDict = { KeyP: [/* q */ 0x0071, /* Q */ 0x0051, /* DEAD RING ABOVE */ 0x030a, /* ⸮ */ 0x2e2e], BracketLeft: [/* x */ 0x0078, /* X */ 0x0058, /* | */ 0x007c, /* ¦ */ 0x00a6], BracketRight: [/* z */ 0x007a, /* Z */ 0x005a, /* ™ */ 0x2122], - Backslash: [/* ç */ 0x00e7, /* Ç */ 0x00c7, /* 🄯 */ 0x1f12f], + Backslash: [/* ç */ 0x00e7, /* Ç */ 0x00c7, /* DEAD ACUTE ACCENT */ 0x0301, /* 🄯 */ 0x1f12f], KeyA: [/* a */ 0x0061, /* A */ 0x0041, /* æ */ 0x00e6, /* Æ */ 0x00c6], KeyS: [/* i */ 0x0069, /* I */ 0x0049, /* ₂ */ 0x2082, /* § */ 0x00a7], KeyD: [/* e */ 0x0065, /* E */ 0x0045, /* ² */ 0x00b2, /* ¶ */ 0x00b6], @@ -49,7 +49,7 @@ export const LAYOUT_FR_OPTIMOT_ERGO: CodePointDict = { KeyB: [/* w */ 0x0077, /* W */ 0x0057, /* • */ 0x2022, /* ✗ */ 0x2717], KeyN: [/* g */ 0x0067, /* G */ 0x0047, /* ✣ */ 0x2723], KeyM: [/* c */ 0x0063, /* C */ 0x0043, /* DEAD CEDILLA */ 0x0327, /* ♠ */ 0x2660], - Comma: [/* m */ 0x006d, /* M */ 0x004d, /* ♥ */ 0x2665], + Comma: [/* m */ 0x006d, /* M */ 0x004d, /* DEAD MACRON */ 0x0304, /* ♥ */ 0x2665], Period: [/* h */ 0x0068, /* H */ 0x0048, /* DEAD BREVE */ 0x0306, /* ♦ */ 0x2666], Slash: [/* v */ 0x0076, /* V */ 0x0056, /* DEAD CARON */ 0x030c, /* ♣ */ 0x2663], Space: [/* SPACE */ 0x0020], diff --git a/packages/keybr-keyboard/lib/layout.ts b/packages/keybr-keyboard/lib/layout.ts index 109f29f4..26988f26 100644 --- a/packages/keybr-keyboard/lib/layout.ts +++ b/packages/keybr-keyboard/lib/layout.ts @@ -87,6 +87,21 @@ export class Layout implements XEnumItem { /* emulate= */ true, /* geometries= */ new Enum(Geometry.MATRIX), ); + static readonly EN_CANARY = new Layout( + /* id= */ "en-canary", + /* xid= */ 0x1e, + /* name= */ "Canary", + /* family= */ "canary", + /* language= */ Language.EN, + /* emulate= */ true, + /* geometries= */ new Enum( + Geometry.STANDARD_101, + Geometry.STANDARD_101_FULL, + Geometry.STANDARD_102, + Geometry.STANDARD_102_FULL, + Geometry.MATRIX, + ), + ); static readonly EN_CANARY_MATRIX = new Layout( /* id= */ "en-canary-matrix", /* xid= */ 0x1d, @@ -157,7 +172,7 @@ export class Layout implements XEnumItem { /* id= */ "de-neo-2", /* xid= */ 0x22, /* name= */ "Neo 2", - /* family= */ "neo-2", + /* family= */ "de-neo-2", /* language= */ Language.DE, /* emulate= */ false, /* geometries= */ new Enum( @@ -172,7 +187,7 @@ export class Layout implements XEnumItem { /* id= */ "de-bone", /* xid= */ 0x23, /* name= */ "Bone", - /* family= */ "bone", + /* family= */ "de-bone", /* language= */ Language.DE, /* emulate= */ false, /* geometries= */ new Enum( @@ -187,7 +202,22 @@ export class Layout implements XEnumItem { /* id= */ "de-mine", /* xid= */ 0x24, /* name= */ "Mine", - /* family= */ "mine", + /* family= */ "de-mine", + /* language= */ Language.DE, + /* emulate= */ false, + /* geometries= */ new Enum( + Geometry.STANDARD_102, + Geometry.STANDARD_102_FULL, + Geometry.STANDARD_101, + Geometry.STANDARD_101_FULL, + Geometry.MATRIX, + ), + ); + static readonly DE_NOTED = new Layout( + /* id= */ "de-noted", + /* xid= */ 0x25, + /* name= */ "Noted", + /* family= */ "de-noted", /* language= */ Language.DE, /* emulate= */ false, /* geometries= */ new Enum( @@ -247,7 +277,7 @@ export class Layout implements XEnumItem { /* id= */ "fr-bepo", /* xid= */ 0x33, /* name= */ "Bepo", - /* family= */ "bepo", + /* family= */ "fr-bepo", /* language= */ Language.FR, /* emulate= */ false, /* geometries= */ new Enum( @@ -262,7 +292,7 @@ export class Layout implements XEnumItem { /* id= */ "fr-ergol", /* xid= */ 0x34, /* name= */ "Ergo-L", - /* family= */ "ergol", + /* family= */ "fr-ergol", /* language= */ Language.FR, /* emulate= */ false, /* geometries= */ new Enum( @@ -277,7 +307,7 @@ export class Layout implements XEnumItem { /* id= */ "fr-optimot-ergo", /* xid= */ 0x35, /* name= */ "Optimot Ergo", - /* family= */ "optimot-ergo", + /* family= */ "fr-optimot-ergo", /* language= */ Language.FR, /* emulate= */ false, /* geometries= */ new Enum( @@ -292,7 +322,7 @@ export class Layout implements XEnumItem { /* id= */ "fr-erglace", /* xid= */ 0x36, /* name= */ "Erglace", - /* family= */ "erglace", + /* family= */ "fr-erglace", /* language= */ Language.FR, /* emulate= */ false, /* geometries= */ new Enum( @@ -567,6 +597,7 @@ export class Layout implements XEnumItem { Layout.EN_COLEMAK, Layout.EN_COLEMAK_DH, Layout.EN_COLEMAK_DH_MATRIX, + Layout.EN_CANARY, Layout.EN_CANARY_MATRIX, Layout.EN_WORKMAN, Layout.EN_UK, @@ -578,6 +609,7 @@ export class Layout implements XEnumItem { Layout.DE_NEO_2, Layout.DE_BONE, Layout.DE_MINE, + Layout.DE_NOTED, Layout.FR_FR, Layout.FR_CA, Layout.FR_CH, diff --git a/packages/keybr-keyboard/lib/load.ts b/packages/keybr-keyboard/lib/load.ts index 4d0c3ec6..f7d062ba 100644 --- a/packages/keybr-keyboard/lib/load.ts +++ b/packages/keybr-keyboard/lib/load.ts @@ -19,7 +19,9 @@ import { LAYOUT_DE_DE_WIN, LAYOUT_DE_MINE, LAYOUT_DE_NEO_2, + LAYOUT_DE_NOTED, LAYOUT_EL_GR_WIN, + LAYOUT_EN_CANARY, LAYOUT_EN_CANARY_MATRIX, LAYOUT_EN_COLEMAK, LAYOUT_EN_COLEMAK_DH, @@ -33,7 +35,7 @@ import { LAYOUT_FR_CA_WIN, LAYOUT_FR_CH_WIN, LAYOUT_FR_ERGLACE, - LAYOUT_FR_ERGOL, + LAYOUT_FR_ERGO_L, LAYOUT_FR_FR_WIN, LAYOUT_FR_OPTIMOT_ERGO, LAYOUT_HE_IL_WIN, @@ -65,7 +67,9 @@ const layoutDict = new Map([ [Layout.DE_DE, LAYOUT_DE_DE_WIN], [Layout.DE_MINE, LAYOUT_DE_MINE], [Layout.DE_NEO_2, LAYOUT_DE_NEO_2], + [Layout.DE_NOTED, LAYOUT_DE_NOTED], [Layout.EL_GR, LAYOUT_EL_GR_WIN], + [Layout.EN_CANARY, LAYOUT_EN_CANARY], [Layout.EN_CANARY_MATRIX, LAYOUT_EN_CANARY_MATRIX], [Layout.EN_COLEMAK, LAYOUT_EN_COLEMAK], [Layout.EN_COLEMAK_DH, LAYOUT_EN_COLEMAK_DH], @@ -80,7 +84,7 @@ const layoutDict = new Map([ [Layout.FR_CA, LAYOUT_FR_CA_WIN], [Layout.FR_CH, LAYOUT_FR_CH_WIN], [Layout.FR_ERGLACE, LAYOUT_FR_ERGLACE], - [Layout.FR_ERGO_L, LAYOUT_FR_ERGOL], + [Layout.FR_ERGO_L, LAYOUT_FR_ERGO_L], [Layout.FR_FR, LAYOUT_FR_FR_WIN], [Layout.FR_OPTIMOT_ERGO, LAYOUT_FR_OPTIMOT_ERGO], [Layout.HE_IL, LAYOUT_HE_IL_WIN],