diff --git a/bin/keyboard_layouts.mjs b/bin/keyboard_layouts.mjs new file mode 100644 index 000000000..4f8aa64eb --- /dev/null +++ b/bin/keyboard_layouts.mjs @@ -0,0 +1,38 @@ +import fs from 'node:fs'; +import path from 'node:path'; + +const DATA = {}; + +for (let i = 2; i < process.argv.length; ++i) { + const filename = process.argv[i]; + const key = path.basename(filename).split('.')[0]; + const value = JSON.parse(fs.readFileSync(filename)); + DATA[key] = value; +} + +let keys = []; +for (const map in DATA) { + keys = keys.concat(Object.keys(DATA[map])); +} +const KEYS = Array.from(new Set(keys)).sort(); +const ACC = Object.fromEntries(Object.keys(DATA).map((el, i) => [el, i])); +const MAP = Object.fromEntries(KEYS.map(el => [el, []])); +for (const key of KEYS) { + for (const map in ACC) { + MAP[key].push(DATA[map][key]); + } +} + +// minify if all entries are of length 1 +for (const key in MAP) { + for (const c of MAP[key]) { + if (!c || c.length !== 1) + break; + } + MAP[key] = MAP[key].join(''); +} + +const FINAL = {acc: ACC, map: MAP}; + +console.log(FINAL); +console.log(JSON.stringify(FINAL).length); diff --git a/fixtures/keyboard_layouts/DE_QWERTZ.json b/fixtures/keyboard_layouts/DE_QWERTZ.json index acd512313..9f737086e 100644 --- a/fixtures/keyboard_layouts/DE_QWERTZ.json +++ b/fixtures/keyboard_layouts/DE_QWERTZ.json @@ -14,7 +14,7 @@ "Digit7": "7", "Digit8": "8", "Digit9": "9", - "Equal": "'", + "Equal": "´", "IntlBackslash": "<", "KeyA": "a", "KeyB": "b", diff --git a/fixtures/keyboard_layouts/FR_AZERTY.json b/fixtures/keyboard_layouts/FR_AZERTY.json index a8e31bb12..5a5db35aa 100644 --- a/fixtures/keyboard_layouts/FR_AZERTY.json +++ b/fixtures/keyboard_layouts/FR_AZERTY.json @@ -1,21 +1,21 @@ { "Backquote": "\u00b2", - "Backslash": "\u20ac", + "Backslash": "μ", "BracketLeft": "^", "BracketRight": "$", "Comma": ";", - "Digit0": "0", + "Digit0": "\u00e0", "Digit1": "&", "Digit2": "\u00e9", "Digit3": "\"", "Digit4": "'", - "Digit5": "", - "Digit6": "-", + "Digit5": "(", + "Digit6": "§", "Digit7": "\u00e8", - "Digit8": "*", - "Digit9": ")", - "Equal": "=", - "IntlBackslash": "\\", + "Digit8": "!", + "Digit9": "ç", + "Equal": "-", + "IntlBackslash": "<", "KeyA": "q", "KeyB": "b", "KeyC": "c", @@ -42,9 +42,9 @@ "KeyX": "x", "KeyY": "y", "KeyZ": "w", - "Minus": "_", - "Period": ".", + "Minus": ")", + "Period": ":", "Quote": "\u00f9", "Semicolon": "m", - "Slash": "/" + "Slash": "=" } \ No newline at end of file