diff --git a/README.md b/README.md index de722d3..ed91bd3 100644 --- a/README.md +++ b/README.md @@ -10,4 +10,5 @@ Modify, and generate keyboard layout from single JSON file. Built with TypeScrip - Generate layout files - `.keylayout` (macOS) - `.klc` (Windows) + - `.kcm` (Android Physical keyboard) - XKB (Linux) diff --git a/cli.ts b/cli.ts index 8c920c7..6ce0887 100644 --- a/cli.ts +++ b/cli.ts @@ -4,6 +4,7 @@ import path from "path" import { generateKeylayout } from "./generateKeylayout" import { generateKlc } from "./generateKlc" import { generateXkb } from "./generateXkb" +import { generateKcm } from "./generateKcm" import { fixUnicode } from "./utils" // eslint-disable-next-line @typescript-eslint/no-var-requires @@ -31,7 +32,11 @@ const choices = filenames.map((filename) => ({ try { const keylayoutXml = await generateKeylayout(jsonInput) const layoutName = response.input.split(".").slice(0, -1).join(".") - const outputFilename = `output/${layoutName}.keylayout` + const dir = `output/${layoutName}` + if (!fs.existsSync(dir)){ + fs.mkdirSync(dir); + } + const outputFilename = `output/${layoutName}/${layoutName}.keylayout` fs.writeFileSync(outputFilename, keylayoutXml) fixUnicode(outputFilename) @@ -45,7 +50,11 @@ const choices = filenames.map((filename) => ({ // Klc try { const layoutName = response.input.split(".").slice(0, -1).join(".") - const outputFilename = `output/${layoutName}.klc` + const dir = `output/${layoutName}` + if (!fs.existsSync(dir)){ + fs.mkdirSync(dir); + } + const outputFilename = `output/${layoutName}/`+jsonInput.os.windows.installerName+`.klc` await generateKlc(jsonInput, outputFilename) console.log(`Output : ${outputFilename}`) @@ -57,7 +66,11 @@ const choices = filenames.map((filename) => ({ // Xkb try { const layoutName = response.input.split(".").slice(0, -1).join(".") - const outputFilename = `output/${layoutName}_xkb` + const dir = `output/${layoutName}` + if (!fs.existsSync(dir)){ + fs.mkdirSync(dir); + } + const outputFilename = `output/${layoutName}/${layoutName}_xkb` await generateXkb(jsonInput, outputFilename) console.log(`Output : ${outputFilename}`) @@ -65,4 +78,20 @@ const choices = filenames.map((filename) => ({ console.error(e) process.exit(1) } + + // Kmc + try { + const layoutName = response.input.split(".").slice(0, -1).join(".") + const dir = `output/${layoutName}` + if (!fs.existsSync(dir)){ + fs.mkdirSync(dir); + } + const outputFilename = `output/${layoutName}/${layoutName}.kcm` + await generateKcm(jsonInput, outputFilename) + + console.log(`Output : ${outputFilename}`) + } catch (e) { + console.error(e) + process.exit(1) + } })() diff --git a/generateKcm.ts b/generateKcm.ts new file mode 100644 index 0000000..c84fba4 --- /dev/null +++ b/generateKcm.ts @@ -0,0 +1,167 @@ +import { plainToClass } from "class-transformer" +import { validate } from "class-validator" +import fs from "fs" +import { Layout, WindowsAttributes } from "./main" + +export async function generateKcm( + content: Record, + outputPath: string +): Promise { + const layout = plainToClass(Layout, content) + const errors = await validate(layout) + + if (errors.length) { + throw new Error(errors.map((e) => e.toString()).join(", ")) + } + + const windowsErrors = await validate( + plainToClass(WindowsAttributes, layout.os.windows) + ) + + if (windowsErrors.length) { + throw new Error(windowsErrors.map((e) => e.toString()).join(", ")) + } + + function toHex(str: string) { + var hex, i; + var result = ""; + for (i=0; i + { + const extensions = "\n " + +((layout.keys[key][0])?("label: '"+(toHex(layout.keys[key][0]))+"'\n base: '"+(toHex(layout.keys[key][0]))+"'\n "):"") + +((layout.keys[key][1])?("shift: '"+(toHex(layout.keys[key][1]))+"'\n capslock: '"+(toHex(layout.keys[key][1]))+"'\n "):"") + +((layout.keys[key][0])?("capslock+shift: '"+(toHex(layout.keys[key][0]))+"'\n "):"") + +((layout.keys[key][3])?("ralt: '"+(toHex(layout.keys[key][3]))+"'\n "):"") + +((layout.keys[key][5])?("ralt+shift: '"+(toHex(layout.keys[key][5]))+"'\n "):"") + + "}\n" + + layoutLines.push([value,...extensions].join("")) + }) + + fs.writeFileSync( + outputPath, + //"\ufeff" + + [ + lines.join("\n"), + layoutLines.join("\n"), + ].join("\n\n"), + { + encoding: "utf8", + } + ) +} diff --git a/generateKlc.ts b/generateKlc.ts index 80693c4..f47035f 100644 --- a/generateKlc.ts +++ b/generateKlc.ts @@ -22,75 +22,128 @@ export async function generateKlc( throw new Error(windowsErrors.map((e) => e.toString()).join(", ")) } - const klcLocales = { + const klcLocales: any = { Thai: "th-TH", + Lao: "lo-LA", } - - const klcShiftStates = { - Base: 0, - Shift: 1, - Ctrl: 2, - "Shift+Ctrl": 3, - Alt: 4, // Layer number 4 is not supported in KLC - "Shift+Alt": 5, - "Alt+Ctrl": 6, - "Shift+Alt+Ctrl": 7, - // From macOS config - Command: 4, // Layer number 4 is not supported in KLC - AltGr: 6, - ShiftAltGr: 7, - Option: 7, - Control: 2, + + function toHex(str: string) { + let hex, i; + let result = ""; + if(str !== null && str !== undefined){ + for (i = 0; i < str.length; i++) { + hex = str.charCodeAt(i).toString(16); + result += ("0000" + hex).slice(-4); + } + return result; + } + else{ + return false; + } } + const toVK: any = { + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9", + "0": "0", + "-": "OEM_MINUS", + "=": "OEM_PLUS", + q: "Q", + w: "W", + e: "E", + r: "R", + t: "T", + y: "Y", + u: "U", + i: "I", + o: "O", + p: "P", + "[": "OEM_4", + "]": "OEM_6", + a: "A", + s: "S", + d: "D", + f: "F", + g: "G", + h: "H", + j: "J", + k: "K", + l: "L", + ";": "OEM_1", + "'": "OEM_7", + "`": "OEM_3", + "\\": "OEM_5", + z: "Z", + x: "X", + c: "C", + v: "V", + b: "B", + n: "N", + m: "M", + ",": "OEM_COMMA", + ".": "OEM_PERIOD", + "/": "OEM_2", + " ": "SPACE", + "KPDL": "DECIMAL", + } + const klfDefaultLayout = { - "1": "02\t1", - "2": "03\t2", - "3": "04\t3", - "4": "05\t4", - "5": "06\t5", - "6": "07\t6", - "7": "08\t7", - "8": "09\t8", - "9": "0a\t9", - "0": "0b\t0", - "-": "0c\tOEM_MINUS", - "=": "0d\tOEM_PLUS", - q: "10\tQ", - w: "11\tW", - e: "12\tE", - r: "13\tR", - t: "14\tT", - y: "15\tY", - u: "16\tU", - i: "17\tI", - o: "18\tO", - p: "19\tP", - "[": "1a\tOEM_4", - "]": "1b\tOEM_6", - a: "1e\tA", - s: "1f\tS", - d: "20\tD", - f: "21\tF", - g: "22\tG", - h: "23\tH", - j: "24\tJ", - k: "25\tK", - l: "26\tL", - ";": "27\tOEM_1", - "'": "28\tOEM_7", - "`": "29\tOEM_3", - "\\": "2b\tOEM_5", - z: "2c\tZ", - x: "2d\tX", - c: "2e\tC", - v: "2f\tV", - b: "30\tB", - n: "31\tN", - m: "32\tM", - ",": "33\tOEM_COMMA", - ".": "34\tOEM_PERIOD", - "/": "35\tOEM_2", + "1": "02", + "2": "03", + "3": "04", + "4": "05", + "5": "06", + "6": "07", + "7": "08", + "8": "09", + "9": "0a", + "0": "0b", + "-": "0c", + "=": "0d", + q: "10", + w: "11", + e: "12", + r: "13", + t: "14", + y: "15", + u: "16", + i: "17", + o: "18", + p: "19", + "[": "1a", + "]": "1b", + a: "1e", + s: "1f", + d: "20", + f: "21", + g: "22", + h: "23", + j: "24", + k: "25", + l: "26", + ";": "27", + "'": "28", + "`": "29", + "\\": "2b", + z: "2c", + x: "2d", + c: "2e", + v: "2f", + b: "30", + n: "31", + m: "32", + ",": "33", + ".": "34", + "/": "35", + " ": "39", + "KPDL": "53", } const lines = [ @@ -103,36 +156,30 @@ export async function generateKlc( ] const shiftStateLines: Array = [] - - layout.layers.forEach((layer, idx) => { - if (layer in klcShiftStates) { - // Filter out layer 4 (Command) - if (klcShiftStates[layer] === 4) { - layout.keys = Object.fromEntries( - Object.entries(layout.keys).map(([key, keys]) => { - keys.splice(idx, 1) - return [key, keys] - }) - ) - } else { - shiftStateLines.push( - `${klcShiftStates[layer]}\t// Column ${idx + 4} : ${layer}` - ) - } - } else { - throw new Error("Layer not valid") - } - }) + + shiftStateLines.push(`0\t//Column 4 : Base`) + shiftStateLines.push(`1\t//Column 5 : Shft`) + shiftStateLines.push(`2\t//Column 6 : Ctrl`) + shiftStateLines.push(`6\t//Column 7 : Ctrl Alt`) + shiftStateLines.push(`7\t//Column 8 : Shft Ctrl Alt`) shiftStateLines.unshift("SHIFTSTATE", "") + + const layoutLines = ["LAYOUT\t\t;an extra '@' at the end is a dead key\r\n"] - const layoutLines = ["LAYOUT"] + layoutLines.push(`//SC\tVK_\tCap\t0\t1\t2\t6\t7`) + layoutLines.push(`//--\t----\t----\t----\t----\t----\t----\t----\r\n`) Object.entries(klfDefaultLayout).forEach(([key, value]) => { - const extensions = layout.layers.map((_, idx) => { - return layout.keys[key][idx] || "-1" - }) - layoutLines.push([value, "0", ...extensions].join("\t")) + const extensions = "\t" + (toVK[(layout.keys[key][4])] || "-1") + + "\t0" + + "\t" + (toHex(layout.keys[key][0]) || "-1") + + "\t" + (toHex(layout.keys[key][1]) || "-1") + + "\t-1" + + "\t" + (toHex(layout.keys[key][3]) || "-1") + + "\t" + (toHex(layout.keys[key][5]) || "-1") + + layoutLines.push([value, ...extensions].join("")) }) fs.writeFileSync( diff --git a/generateXkb.ts b/generateXkb.ts index c102948..2fb29c5 100644 --- a/generateXkb.ts +++ b/generateXkb.ts @@ -33,8 +33,6 @@ export async function generateXkb( return result; } - - const klfDefaultLayout = { "1": "key { [", "2": "key { [", @@ -83,34 +81,34 @@ export async function generateXkb( ",": "key { [", ".": "key { [", "/": "key { [", + " ": "key { [", + "KPDL": "key { [", } const lines = [ `partial alphanumeric_keys`, `xkb_symbols "${layout.os.windows.installerName}" {`, `\n // COPYRIGHT "${layout.license}"`, - `\n name[Group1]= "${layout.name} v${layout.version}";`, + `\n name[Group1]= "${layout.language} (${layout.name} v${layout.version})";`, ] const layoutLines = [""] Object.entries(klfDefaultLayout).forEach(([key, value]) => { -// const extensions = layout.layers.map((_, idx) => { -// return (toHex(layout.keys[key][idx]) || "voidsymbol") + ((idx < 3) ? "," : "") -// }) - const extensions = (toHex(layout.keys[key][0]) || "voidsymbol") + "," + (toHex(layout.keys[key][1]) || "voidsymbol") - + "," + (toHex(layout.keys[key][3]) || "voidsymbol")+ "," + (toHex(layout.keys[key][5]) || "voidsymbol") + "] };" + const extensions = (toHex(layout.keys[key][0]) || "voidsymbol") + + "," + (toHex(layout.keys[key][1]) || "voidsymbol") + + "," + (toHex(layout.keys[key][3]) || "voidsymbol") + + "," + (toHex(layout.keys[key][5]) || "voidsymbol") + "] };" - //extensions.push("] };") layoutLines.push([value, ...extensions].join("")) }) fs.writeFileSync( outputPath, - "\ufeff" + + //"\ufeff" + [ lines.join("\n"), layoutLines.join("\n "), - " include \"level3(ralt_switch)\"\n};", + " include \"level3(ralt_switch)\"\n};\n", ].join("\n\n"), { encoding: "utf8", diff --git a/input/Manoonchai-ColemakDH-Mod.json b/input/Manoonchai-ColemakDH-Mod.json index 3d2c6ac..e436609 100644 --- a/input/Manoonchai-ColemakDH-Mod.json +++ b/input/Manoonchai-ColemakDH-Mod.json @@ -1,5 +1,5 @@ { - "name": "Manoonchai", + "name": "ManoonchaiColemak", "version": "1.0", "language": "Thai", "layers": ["Base", "Shift", "Command", "AltGr", "Control", "ShiftAltGr"], @@ -58,6 +58,8 @@ "m": ["ี", "์", "h", "๎", "h", ""], ",": ["ด", "ศ", ",", ",", ",", "<"], ".": ["ะ", "ฮ", ".", ".", ".", ">"], - "/": ["ู", "?", "/", "/", "/", "?"] + "/": ["ู", "?", "/", "/", "/", "?"], + " ": [" ", " ", " ", " ", " ", " "], + "KPDL": [".", ",", "KPDL", ".", "KPDL", "."] } } diff --git a/input/Manoonchai-WittNV.json b/input/Manoonchai-WittNV.json index 425aac8..cd8d1f1 100644 --- a/input/Manoonchai-WittNV.json +++ b/input/Manoonchai-WittNV.json @@ -58,6 +58,8 @@ "m": ["ี", "์", "h", "๎", "h", ""], ",": ["ด", "ศ", ",", ",", ",", "<"], ".": ["ะ", "ฮ", ".", ".", ".", ">"], - "/": ["ู", "?", "/", "/", "/", "?"] + "/": ["ู", "?", "/", "/", "/", "?"], + " ": [" ", " ", " ", " ", " ", " "], + "KPDL": [".", ",", "KPDL", ".", "KPDL", "."] } } diff --git a/input/Manoonchai-v0.2.json b/input/Manoonchai-v0.2.json index 9ab8fd4..b6a6dcd 100644 --- a/input/Manoonchai-v0.2.json +++ b/input/Manoonchai-v0.2.json @@ -58,6 +58,8 @@ "m": ["ี", "ณ", "m", "๎", "m", ""], ",": ["ด", "ธ", ",", ",", ",", "<"], ".": ["ะ", "ฏ", ".", ".", ".", ">"], - "/": ["ุ", "฿", "/", "/", "/", "?"] + "/": ["ุ", "฿", "/", "/", "/", "?"], + " ": [" ", " ", " ", " ", " ", " "], + "KPDL": [".", ",", "KPDL", ".", "KPDL", "."] } } diff --git a/input/Manoonchai.json b/input/Manoonchai.json index 32efee6..3365594 100644 --- a/input/Manoonchai.json +++ b/input/Manoonchai.json @@ -58,6 +58,8 @@ "m": ["ี", "์", "m", "๎", "m", ""], ",": ["ด", "ศ", ",", ",", ",", "<"], ".": ["ะ", "ฮ", ".", ".", ".", ">"], - "/": ["ู", "?", "/", "/", "/", "?"] + "/": ["ู", "?", "/", "/", "/", "?"], + " ": [" ", " ", " ", " ", " ", " "], + "KPDL": [".", ",", "KPDL", ".", "KPDL", "."] } } diff --git a/input/Manoonchai_Laos.json b/input/Manoonchai_Laos.json new file mode 100644 index 0000000..834342b --- /dev/null +++ b/input/Manoonchai_Laos.json @@ -0,0 +1,65 @@ +{ + "name": "Manoonchai Laos Pali", + "version": "1.0", + "language": "Laos", + "layers": ["Base", "Shift", "Command", "AltGr", "Control", "ShiftAltGr"], + "license": "MIT", + "os": { + "windows": { + "installerName": "LaosMnc", + "company": "Manoonchai", + "localeId": "00000454" + } + }, + "keys": { + "`": ["`", "~", "`", "`", "`", ""], + "1": ["1", "!", "1", "໑", "1", "!"], + "2": ["2", "@", "2", "໒", "2", "@"], + "3": ["3", "#", "3", "໓", "3", "#"], + "4": ["4", "$", "4", "໔", "4", "$"], + "5": ["5", "%", "5", "໕", "5", "%"], + "6": ["6", ",", "6", "໖", "6", "^"], + "7": ["7", "&", "7", "໗", "7", "&"], + "8": ["8", ".", "8", "໘", "8", "*"], + "9": ["9", "(", "9", "໙", "9", ""], + "0": ["0", ")", "0", "໐", "0", ""], + "-": ["-", "_", "-", "÷", "-", ""], + "=": ["=", "+", "=", "×", "=", ""], + "q": ["ໃ", "ຒ", "q", "", "q", ""], + "w": ["ຕ", "ຏ", "w", "x", "w", ""], + "e": ["ຫ", "ຢ", "e", "໡", "e", ""], + "r": ["ລ", "ຎ", "r", "໢", "r", ""], + "t": ["ສ", "ຟ", "t", "", "t", ""], + "y": ["ປ", "ຉ", "y", "", "y", ""], + "u": ["ັ", "ຶ", "u", "຺", "u", ""], + "i": ["ກ", "ຮ", "i", "ໞ", "i", ""], + "o": ["ິ", "ຽ", "o", "", "o", ""], + "p": ["ບ", "ຘ", "p", "", "p", ""], + "[": ["ົ", "ຆ", "[", "[", "[", "{"], + "]": ["ຬ", "ຑ", "]", "]", "]", "}"], + "\\": ["ໆ", "ຯ", "\\", "\\", "\\", "|"], + "a": ["ງ", "ຩ", "a", "໠", "a", ""], + "s": ["ເ", "ຖ", "s", "◌", "s", ""], + "d": ["ຣ", "ແ", "d", "₭", "d", ""], + "f": ["ນ", "ຊ", "f", "ໜ", "f", ""], + "g": ["ມ", "ພ", "g", "ໝ", "g", ""], + "h": ["ອ", "ໍ", "h", "", "h", ""], + "j": ["າ", "ຳ", "j", "", "j", ""], + "k": ["່", "ຂ", "k", "຃", "k", ""], + "l": ["້", "ໂ", "l", "໣", "l", ""], + ";": ["ວ", "ຠ", ";", ";", ";", ":"], + "'": ["ື", "\"", "'", "'", "'", "\""], + "z": ["ຸ", "ຼ", "z", "຦", "z", ""], + "x": ["ໄ", "ຝ", "x", "຤", "x", ""], + "c": ["ທ", "ຜ", "c", "ຌ", "c", ""], + "v": ["ຍ", "ຓ", "v", "ໟ", "v", ""], + "b": ["ຈ", "໊", "b", "", "b", ""], + "n": ["ຄ", "໋", "n", "຅", "n", ""], + "m": ["ີ", "໌", "m", "໎", "m", ""], + ",": ["ດ", "ຨ", ",", ",", ",", "<"], + ".": ["ະ", "ຐ", ".", ".", ".", ">"], + "/": ["ູ", "?", "/", "/", "/", "?"], + " ": [" ", "\u200B", " ", " ", " ", " "], + "KPDL": [",", ".", "KPDL", ",", "KPDL", ","] + } +} diff --git a/main.ts b/main.ts index 70886d5..c9f0c94 100644 --- a/main.ts +++ b/main.ts @@ -31,8 +31,11 @@ export class Layout { version: string @IsString() - @IsIn(["Thai"]) - language: "Thai" + language: string + + //@IsString() + //@IsIn(["Thai"]) + //language: "Thai" @ArrayNotEmpty() @IsIn( diff --git a/output/Manoonchai-ColemakDH-Mod.klc b/output/Manoonchai-ColemakDH-Mod.klc deleted file mode 100644 index 083232f..0000000 Binary files a/output/Manoonchai-ColemakDH-Mod.klc and /dev/null differ diff --git a/output/Manoonchai-ColemakDH-Mod/Manoonchai-ColemakDH-Mod.kcm b/output/Manoonchai-ColemakDH-Mod/Manoonchai-ColemakDH-Mod.kcm new file mode 100644 index 0000000..32a336d --- /dev/null +++ b/output/Manoonchai-ColemakDH-Mod/Manoonchai-ColemakDH-Mod.kcm @@ -0,0 +1,506 @@ +# License: MIT + +# Thai ManoonchaiColemak v1.0 + +type OVERLAY +map key 2 1 +map key 3 2 +map key 4 3 +map key 5 4 +map key 6 5 +map key 7 6 +map key 8 7 +map key 9 8 +map key 10 9 +map key 11 0 +map key 12 MINUS +map key 13 EQUALS +map key 16 Q +map key 17 W +map key 18 E +map key 19 R +map key 20 T +map key 21 Y +map key 22 U +map key 23 I +map key 24 O +map key 25 P +map key 26 LEFT_BRACKET +map key 27 RIGHT_BRACKET +map key 30 A +map key 31 S +map key 32 D +map key 33 F +map key 34 G +map key 35 H +map key 36 J +map key 37 K +map key 38 L +map key 39 SEMICOLON +map key 40 APOSTROPHE +map key 41 GRAVE +map key 43 BACKSLASH +map key 44 Z +map key 45 X +map key 46 C +map key 47 V +map key 48 B +map key 49 N +map key 50 M +map key 51 COMMA +map key 52 PERIOD +map key 53 SLASH +map key 57 SPACE +map key 95 NUMPAD_COMMA + + +key 0 { + label: '\u0030' + base: '\u0030' + shift: '\u0029' + capslock: '\u0029' + capslock+shift: '\u0030' + ralt: '\u0e50' + } + +key 1 { + label: '\u0031' + base: '\u0031' + shift: '\u0021' + capslock: '\u0021' + capslock+shift: '\u0031' + ralt: '\u0e51' + } + +key 2 { + label: '\u0032' + base: '\u0032' + shift: '\u0040' + capslock: '\u0040' + capslock+shift: '\u0032' + ralt: '\u0e52' + } + +key 3 { + label: '\u0033' + base: '\u0033' + shift: '\u0023' + capslock: '\u0023' + capslock+shift: '\u0033' + ralt: '\u0e53' + } + +key 4 { + label: '\u0034' + base: '\u0034' + shift: '\u0024' + capslock: '\u0024' + capslock+shift: '\u0034' + ralt: '\u0e54' + } + +key 5 { + label: '\u0035' + base: '\u0035' + shift: '\u0025' + capslock: '\u0025' + capslock+shift: '\u0035' + ralt: '\u0e55' + } + +key 6 { + label: '\u0036' + base: '\u0036' + shift: '\u005e' + capslock: '\u005e' + capslock+shift: '\u0036' + ralt: '\u0e56' + } + +key 7 { + label: '\u0037' + base: '\u0037' + shift: '\u0026' + capslock: '\u0026' + capslock+shift: '\u0037' + ralt: '\u0e57' + } + +key 8 { + label: '\u0038' + base: '\u0038' + shift: '\u002a' + capslock: '\u002a' + capslock+shift: '\u0038' + ralt: '\u0e58' + } + +key 9 { + label: '\u0039' + base: '\u0039' + shift: '\u0028' + capslock: '\u0028' + capslock+shift: '\u0039' + ralt: '\u0e59' + } + +key MINUS { + label: '\u002d' + base: '\u002d' + shift: '\u005f' + capslock: '\u005f' + capslock+shift: '\u002d' + ralt: '\u00f7' + } + +key EQUALS { + label: '\u003d' + base: '\u003d' + shift: '\u002b' + capslock: '\u002b' + capslock+shift: '\u003d' + ralt: '\u00d7' + } + +key GRAVE { + label: '\u0060' + base: '\u0060' + shift: '\u007e' + capslock: '\u007e' + capslock+shift: '\u0060' + ralt: '\u0060' + } + +key Q { + label: '\u0e43' + base: '\u0e43' + shift: '\u0e12' + capslock: '\u0e12' + capslock+shift: '\u0e43' + ralt: '\u0071' + } + +key W { + label: '\u0e15' + base: '\u0e15' + shift: '\u0e0f' + capslock: '\u0e0f' + capslock+shift: '\u0e15' + ralt: '\u0077' + } + +key E { + label: '\u0e2b' + base: '\u0e2b' + shift: '\u0e0b' + capslock: '\u0e0b' + capslock+shift: '\u0e2b' + ralt: '\u0066' + } + +key R { + label: '\u0e25' + base: '\u0e25' + shift: '\u0e0d' + capslock: '\u0e0d' + capslock+shift: '\u0e25' + ralt: '\u0070' + } + +key T { + label: '\u0e2a' + base: '\u0e2a' + shift: '\u0e1f' + capslock: '\u0e1f' + capslock+shift: '\u0e2a' + ralt: '\u0062' + } + +key Y { + label: '\u0e1b' + base: '\u0e1b' + shift: '\u0e09' + capslock: '\u0e09' + capslock+shift: '\u0e1b' + ralt: '\u006a' + } + +key U { + label: '\u0e31' + base: '\u0e31' + shift: '\u0e36' + capslock: '\u0e36' + capslock+shift: '\u0e31' + ralt: '\u0e3a' + } + +key I { + label: '\u0e01' + base: '\u0e01' + shift: '\u0e18' + capslock: '\u0e18' + capslock+shift: '\u0e01' + ralt: '\u0075' + } + +key O { + label: '\u0e34' + base: '\u0e34' + shift: '\u0e10' + capslock: '\u0e10' + capslock+shift: '\u0e34' + ralt: '\u0079' + } + +key P { + label: '\u0e1a' + base: '\u0e1a' + shift: '\u0e0e' + capslock: '\u0e0e' + capslock+shift: '\u0e1a' + ralt: '\u003b' + ralt+shift: '\u003a' + } + +key LEFT_BRACKET { + label: '\u0e47' + base: '\u0e47' + shift: '\u0e06' + capslock: '\u0e06' + capslock+shift: '\u0e47' + ralt: '\u005b' + ralt+shift: '\u007b' + } + +key RIGHT_BRACKET { + label: '\u0e2c' + base: '\u0e2c' + shift: '\u0e11' + capslock: '\u0e11' + capslock+shift: '\u0e2c' + ralt: '\u005d' + ralt+shift: '\u007d' + } + +key A { + label: '\u0e07' + base: '\u0e07' + shift: '\u0e29' + capslock: '\u0e29' + capslock+shift: '\u0e07' + ralt: '\u25cc' + } + +key S { + label: '\u0e40' + base: '\u0e40' + shift: '\u0e16' + capslock: '\u0e16' + capslock+shift: '\u0e40' + ralt: '\u0e4f' + } + +key D { + label: '\u0e23' + base: '\u0e23' + shift: '\u0e41' + capslock: '\u0e41' + capslock+shift: '\u0e23' + ralt: '\u0e5b' + } + +key F { + label: '\u0e19' + base: '\u0e19' + shift: '\u0e0a' + capslock: '\u0e0a' + capslock+shift: '\u0e19' + ralt: '\u0e3f' + } + +key G { + label: '\u0e21' + base: '\u0e21' + shift: '\u0e1e' + capslock: '\u0e1e' + capslock+shift: '\u0e21' + ralt: '\u0067' + } + +key H { + label: '\u0e2d' + base: '\u0e2d' + shift: '\u0e1c' + capslock: '\u0e1c' + capslock+shift: '\u0e2d' + ralt: '\u0e4d' + } + +key J { + label: '\u0e32' + base: '\u0e32' + shift: '\u0e33' + capslock: '\u0e33' + capslock+shift: '\u0e32' + ralt: '\u0e45' + } + +key K { + label: '\u0e48' + base: '\u0e48' + shift: '\u0e02' + capslock: '\u0e02' + capslock+shift: '\u0e48' + ralt: '\u0e03' + } + +key L { + label: '\u0e49' + base: '\u0e49' + shift: '\u0e42' + capslock: '\u0e42' + capslock+shift: '\u0e49' + ralt: '\u0069' + } + +key SEMICOLON { + label: '\u0e27' + base: '\u0e27' + shift: '\u0e20' + capslock: '\u0e20' + capslock+shift: '\u0e27' + ralt: '\u006f' + } + +key APOSTROPHE { + label: '\u0e37' + base: '\u0e37' + shift: '\u0022' + capslock: '\u0022' + capslock+shift: '\u0e37' + ralt: '\u0027' + ralt+shift: '\u0022' + } + +key BACKSLASH { + label: '\u0e2f' + base: '\u0e2f' + shift: '\u0e0c' + capslock: '\u0e0c' + capslock+shift: '\u0e2f' + ralt: '\u005c' + ralt+shift: '\u007c' + } + +key Z { + label: '\u0e38' + base: '\u0e38' + shift: '\u0e24' + capslock: '\u0e24' + capslock+shift: '\u0e38' + ralt: '\u0e26' + } + +key X { + label: '\u0e44' + base: '\u0e44' + shift: '\u0e1d' + capslock: '\u0e1d' + capslock+shift: '\u0e44' + ralt: '\u0078' + } + +key C { + label: '\u0e17' + base: '\u0e17' + shift: '\u0e46' + capslock: '\u0e46' + capslock+shift: '\u0e17' + ralt: '\u0e5a' + } + +key V { + label: '\u0e22' + base: '\u0e22' + shift: '\u0e13' + capslock: '\u0e13' + capslock+shift: '\u0e22' + ralt: '\u0076' + } + +key B { + label: '\u0e08' + base: '\u0e08' + shift: '\u0e4a' + capslock: '\u0e4a' + capslock+shift: '\u0e08' + ralt: '\u0064' + } + +key N { + label: '\u0e04' + base: '\u0e04' + shift: '\u0e4b' + capslock: '\u0e4b' + capslock+shift: '\u0e04' + ralt: '\u0e05' + } + +key M { + label: '\u0e35' + base: '\u0e35' + shift: '\u0e4c' + capslock: '\u0e4c' + capslock+shift: '\u0e35' + ralt: '\u0e4e' + } + +key COMMA { + label: '\u0e14' + base: '\u0e14' + shift: '\u0e28' + capslock: '\u0e28' + capslock+shift: '\u0e14' + ralt: '\u002c' + ralt+shift: '\u003c' + } + +key PERIOD { + label: '\u0e30' + base: '\u0e30' + shift: '\u0e2e' + capslock: '\u0e2e' + capslock+shift: '\u0e30' + ralt: '\u002e' + ralt+shift: '\u003e' + } + +key SLASH { + label: '\u0e39' + base: '\u0e39' + shift: '\u003f' + capslock: '\u003f' + capslock+shift: '\u0e39' + ralt: '\u002f' + ralt+shift: '\u003f' + } + +key SPACE { + label: '\u0020' + base: '\u0020' + shift: '\u0020' + capslock: '\u0020' + capslock+shift: '\u0020' + ralt: '\u0020' + ralt+shift: '\u0020' + } + +key NUMPAD_COMMA { + label: '\u002e' + base: '\u002e' + shift: '\u002c' + capslock: '\u002c' + capslock+shift: '\u002e' + ralt: '\u002e' + ralt+shift: '\u002e' + } diff --git a/output/Manoonchai-ColemakDH-Mod.keylayout b/output/Manoonchai-ColemakDH-Mod/Manoonchai-ColemakDH-Mod.keylayout similarity index 99% rename from output/Manoonchai-ColemakDH-Mod.keylayout rename to output/Manoonchai-ColemakDH-Mod/Manoonchai-ColemakDH-Mod.keylayout index c11739e..58d3a99 100644 --- a/output/Manoonchai-ColemakDH-Mod.keylayout +++ b/output/Manoonchai-ColemakDH-Mod/Manoonchai-ColemakDH-Mod.keylayout @@ -1,6 +1,6 @@ - + diff --git a/output/Manoonchai-ColemakDH-Mod_xkb b/output/Manoonchai-ColemakDH-Mod/Manoonchai-ColemakDH-Mod_xkb similarity index 93% rename from output/Manoonchai-ColemakDH-Mod_xkb rename to output/Manoonchai-ColemakDH-Mod/Manoonchai-ColemakDH-Mod_xkb index d8943d5..7a1d7c3 100644 --- a/output/Manoonchai-ColemakDH-Mod_xkb +++ b/output/Manoonchai-ColemakDH-Mod/Manoonchai-ColemakDH-Mod_xkb @@ -1,9 +1,9 @@ -partial alphanumeric_keys +partial alphanumeric_keys xkb_symbols "Mnc-DH" { // COPYRIGHT "MIT" - name[Group1]= "Manoonchai v1.0"; + name[Group1]= "Thai (ManoonchaiColemak v1.0)"; key { [ 0x1000030, 0x1000029, 0x1000e50,voidsymbol] }; @@ -53,6 +53,8 @@ xkb_symbols "Mnc-DH" { key { [ 0x1000e14, 0x1000e28, 0x100002c, 0x100003c] }; key { [ 0x1000e30, 0x1000e2e, 0x100002e, 0x100003e] }; key { [ 0x1000e39, 0x100003f, 0x100002f, 0x100003f] }; + key { [ 0x1000020, 0x1000020, 0x1000020, 0x1000020] }; + key { [ 0x100002e, 0x100002c, 0x100002e, 0x100002e] }; include "level3(ralt_switch)" -}; \ No newline at end of file +}; diff --git a/output/Manoonchai-ColemakDH-Mod/Mnc-DH.klc b/output/Manoonchai-ColemakDH-Mod/Mnc-DH.klc new file mode 100644 index 0000000..f21b81d Binary files /dev/null and b/output/Manoonchai-ColemakDH-Mod/Mnc-DH.klc differ diff --git a/output/Manoonchai-WittNV.klc b/output/Manoonchai-WittNV.klc deleted file mode 100644 index 31073d1..0000000 Binary files a/output/Manoonchai-WittNV.klc and /dev/null differ diff --git a/output/Manoonchai-WittNV/Manoonchai-WittNV.kcm b/output/Manoonchai-WittNV/Manoonchai-WittNV.kcm new file mode 100644 index 0000000..74459be --- /dev/null +++ b/output/Manoonchai-WittNV/Manoonchai-WittNV.kcm @@ -0,0 +1,507 @@ +# License: MIT + +# Thai Manoonchai-WittNV v1.0 + +type OVERLAY +map key 2 1 +map key 3 2 +map key 4 3 +map key 5 4 +map key 6 5 +map key 7 6 +map key 8 7 +map key 9 8 +map key 10 9 +map key 11 0 +map key 12 MINUS +map key 13 EQUALS +map key 16 Q +map key 17 W +map key 18 E +map key 19 R +map key 20 T +map key 21 Y +map key 22 U +map key 23 I +map key 24 O +map key 25 P +map key 26 LEFT_BRACKET +map key 27 RIGHT_BRACKET +map key 30 A +map key 31 S +map key 32 D +map key 33 F +map key 34 G +map key 35 H +map key 36 J +map key 37 K +map key 38 L +map key 39 SEMICOLON +map key 40 APOSTROPHE +map key 41 GRAVE +map key 43 BACKSLASH +map key 44 Z +map key 45 X +map key 46 C +map key 47 V +map key 48 B +map key 49 N +map key 50 M +map key 51 COMMA +map key 52 PERIOD +map key 53 SLASH +map key 57 SPACE +map key 95 NUMPAD_COMMA + + +key 0 { + label: '\u0030' + base: '\u0030' + shift: '\u0029' + capslock: '\u0029' + capslock+shift: '\u0030' + ralt: '\u0e50' + } + +key 1 { + label: '\u0031' + base: '\u0031' + shift: '\u0021' + capslock: '\u0021' + capslock+shift: '\u0031' + ralt: '\u0e51' + } + +key 2 { + label: '\u0032' + base: '\u0032' + shift: '\u0040' + capslock: '\u0040' + capslock+shift: '\u0032' + ralt: '\u0e52' + } + +key 3 { + label: '\u0033' + base: '\u0033' + shift: '\u0023' + capslock: '\u0023' + capslock+shift: '\u0033' + ralt: '\u0e53' + } + +key 4 { + label: '\u0034' + base: '\u0034' + shift: '\u0e3f' + capslock: '\u0e3f' + capslock+shift: '\u0034' + ralt: '\u0e54' + ralt+shift: '\u0024' + } + +key 5 { + label: '\u0035' + base: '\u0035' + shift: '\u0025' + capslock: '\u0025' + capslock+shift: '\u0035' + ralt: '\u0e55' + } + +key 6 { + label: '\u0036' + base: '\u0036' + shift: '\u005e' + capslock: '\u005e' + capslock+shift: '\u0036' + ralt: '\u0e56' + } + +key 7 { + label: '\u0037' + base: '\u0037' + shift: '\u0026' + capslock: '\u0026' + capslock+shift: '\u0037' + ralt: '\u0e57' + } + +key 8 { + label: '\u0038' + base: '\u0038' + shift: '\u002a' + capslock: '\u002a' + capslock+shift: '\u0038' + ralt: '\u0e58' + } + +key 9 { + label: '\u0039' + base: '\u0039' + shift: '\u0028' + capslock: '\u0028' + capslock+shift: '\u0039' + ralt: '\u0e59' + } + +key MINUS { + label: '\u002d' + base: '\u002d' + shift: '\u005f' + capslock: '\u005f' + capslock+shift: '\u002d' + ralt: '\u002d' + } + +key EQUALS { + label: '\u003d' + base: '\u003d' + shift: '\u002b' + capslock: '\u002b' + capslock+shift: '\u003d' + ralt: '\u003d' + } + +key GRAVE { + label: '\u0060' + base: '\u0060' + shift: '\u007e' + capslock: '\u007e' + capslock+shift: '\u0060' + ralt: '\u0060' + } + +key Q { + label: '\u0e43' + base: '\u0e43' + shift: '\u0e12' + capslock: '\u0e12' + capslock+shift: '\u0e43' + ralt: '\u0071' + } + +key W { + label: '\u0e15' + base: '\u0e15' + shift: '\u0e0f' + capslock: '\u0e0f' + capslock+shift: '\u0e15' + ralt: '\u0077' + } + +key E { + label: '\u0e2b' + base: '\u0e2b' + shift: '\u0e0b' + capslock: '\u0e0b' + capslock+shift: '\u0e2b' + ralt: '\u0066' + } + +key R { + label: '\u0e25' + base: '\u0e25' + shift: '\u0e0d' + capslock: '\u0e0d' + capslock+shift: '\u0e25' + ralt: '\u0070' + } + +key T { + label: '\u0e2a' + base: '\u0e2a' + shift: '\u0e1f' + capslock: '\u0e1f' + capslock+shift: '\u0e2a' + ralt: '\u0062' + } + +key Y { + label: '\u0e1b' + base: '\u0e1b' + shift: '\u0e09' + capslock: '\u0e09' + capslock+shift: '\u0e1b' + ralt: '\u006a' + } + +key U { + label: '\u0e31' + base: '\u0e31' + shift: '\u0e36' + capslock: '\u0e36' + capslock+shift: '\u0e31' + ralt: '\u0e3a' + } + +key I { + label: '\u0e01' + base: '\u0e01' + shift: '\u0e18' + capslock: '\u0e18' + capslock+shift: '\u0e01' + ralt: '\u0075' + } + +key O { + label: '\u0e34' + base: '\u0e34' + shift: '\u0e10' + capslock: '\u0e10' + capslock+shift: '\u0e34' + ralt: '\u0079' + } + +key P { + label: '\u0e1a' + base: '\u0e1a' + shift: '\u0e0e' + capslock: '\u0e0e' + capslock+shift: '\u0e1a' + ralt: '\u003b' + ralt+shift: '\u003a' + } + +key LEFT_BRACKET { + label: '\u0e47' + base: '\u0e47' + shift: '\u0e06' + capslock: '\u0e06' + capslock+shift: '\u0e47' + ralt: '\u005b' + ralt+shift: '\u007b' + } + +key RIGHT_BRACKET { + label: '\u0e2c' + base: '\u0e2c' + shift: '\u0e11' + capslock: '\u0e11' + capslock+shift: '\u0e2c' + ralt: '\u005d' + ralt+shift: '\u007d' + } + +key A { + label: '\u0e07' + base: '\u0e07' + shift: '\u0e29' + capslock: '\u0e29' + capslock+shift: '\u0e07' + ralt: '\u25cc' + } + +key S { + label: '\u0e40' + base: '\u0e40' + shift: '\u0e16' + capslock: '\u0e16' + capslock+shift: '\u0e40' + ralt: '\u0e4f' + } + +key D { + label: '\u0e23' + base: '\u0e23' + shift: '\u0e41' + capslock: '\u0e41' + capslock+shift: '\u0e23' + ralt: '\u0e5b' + } + +key F { + label: '\u0e19' + base: '\u0e19' + shift: '\u0e0a' + capslock: '\u0e0a' + capslock+shift: '\u0e19' + ralt: '\u0e3f' + } + +key G { + label: '\u0e21' + base: '\u0e21' + shift: '\u0e1e' + capslock: '\u0e1e' + capslock+shift: '\u0e21' + ralt: '\u0067' + } + +key H { + label: '\u0e2d' + base: '\u0e2d' + shift: '\u0e37' + capslock: '\u0e37' + capslock+shift: '\u0e2d' + ralt: '\u0e4d' + } + +key J { + label: '\u0e32' + base: '\u0e32' + shift: '\u0e33' + capslock: '\u0e33' + capslock+shift: '\u0e32' + ralt: '\u0e45' + } + +key K { + label: '\u0e48' + base: '\u0e48' + shift: '\u0e02' + capslock: '\u0e02' + capslock+shift: '\u0e48' + ralt: '\u0e03' + } + +key L { + label: '\u0e49' + base: '\u0e49' + shift: '\u0e42' + capslock: '\u0e42' + capslock+shift: '\u0e49' + ralt: '\u0069' + } + +key SEMICOLON { + label: '\u0e27' + base: '\u0e27' + shift: '\u0e20' + capslock: '\u0e20' + capslock+shift: '\u0e27' + ralt: '\u006f' + } + +key APOSTROPHE { + label: '\u0e46' + base: '\u0e46' + shift: '\u0022' + capslock: '\u0022' + capslock+shift: '\u0e46' + ralt: '\u0027' + ralt+shift: '\u0022' + } + +key BACKSLASH { + label: '\u0e2f' + base: '\u0e2f' + shift: '\u0e0c' + capslock: '\u0e0c' + capslock+shift: '\u0e2f' + ralt: '\u005c' + ralt+shift: '\u007c' + } + +key Z { + label: '\u0e38' + base: '\u0e38' + shift: '\u0e24' + capslock: '\u0e24' + capslock+shift: '\u0e38' + ralt: '\u0e26' + } + +key X { + label: '\u0e44' + base: '\u0e44' + shift: '\u0e1d' + capslock: '\u0e1d' + capslock+shift: '\u0e44' + ralt: '\u0078' + } + +key C { + label: '\u0e17' + base: '\u0e17' + shift: '\u0e1c' + capslock: '\u0e1c' + capslock+shift: '\u0e17' + ralt: '\u0e5a' + } + +key V { + label: '\u0e22' + base: '\u0e22' + shift: '\u0e13' + capslock: '\u0e13' + capslock+shift: '\u0e22' + ralt: '\u0076' + } + +key B { + label: '\u0e08' + base: '\u0e08' + shift: '\u0e4a' + capslock: '\u0e4a' + capslock+shift: '\u0e08' + ralt: '\u0064' + } + +key N { + label: '\u0e04' + base: '\u0e04' + shift: '\u0e4b' + capslock: '\u0e4b' + capslock+shift: '\u0e04' + ralt: '\u0e05' + } + +key M { + label: '\u0e35' + base: '\u0e35' + shift: '\u0e4c' + capslock: '\u0e4c' + capslock+shift: '\u0e35' + ralt: '\u0e4e' + } + +key COMMA { + label: '\u0e14' + base: '\u0e14' + shift: '\u0e28' + capslock: '\u0e28' + capslock+shift: '\u0e14' + ralt: '\u002c' + ralt+shift: '\u003c' + } + +key PERIOD { + label: '\u0e30' + base: '\u0e30' + shift: '\u0e2e' + capslock: '\u0e2e' + capslock+shift: '\u0e30' + ralt: '\u002e' + ralt+shift: '\u003e' + } + +key SLASH { + label: '\u0e39' + base: '\u0e39' + shift: '\u003f' + capslock: '\u003f' + capslock+shift: '\u0e39' + ralt: '\u002f' + ralt+shift: '\u003f' + } + +key SPACE { + label: '\u0020' + base: '\u0020' + shift: '\u0020' + capslock: '\u0020' + capslock+shift: '\u0020' + ralt: '\u0020' + ralt+shift: '\u0020' + } + +key NUMPAD_COMMA { + label: '\u002e' + base: '\u002e' + shift: '\u002c' + capslock: '\u002c' + capslock+shift: '\u002e' + ralt: '\u002e' + ralt+shift: '\u002e' + } diff --git a/output/Manoonchai-WittNV.keylayout b/output/Manoonchai-WittNV/Manoonchai-WittNV.keylayout similarity index 100% rename from output/Manoonchai-WittNV.keylayout rename to output/Manoonchai-WittNV/Manoonchai-WittNV.keylayout diff --git a/output/Manoonchai-WittNV_xkb b/output/Manoonchai-WittNV/Manoonchai-WittNV_xkb similarity index 93% rename from output/Manoonchai-WittNV_xkb rename to output/Manoonchai-WittNV/Manoonchai-WittNV_xkb index d910caf..3f39914 100644 --- a/output/Manoonchai-WittNV_xkb +++ b/output/Manoonchai-WittNV/Manoonchai-WittNV_xkb @@ -1,9 +1,9 @@ -partial alphanumeric_keys +partial alphanumeric_keys xkb_symbols "WittNV" { // COPYRIGHT "MIT" - name[Group1]= "Manoonchai-WittNV v1.0"; + name[Group1]= "Thai (Manoonchai-WittNV v1.0)"; key { [ 0x1000030, 0x1000029, 0x1000e50,voidsymbol] }; @@ -53,6 +53,8 @@ xkb_symbols "WittNV" { key { [ 0x1000e14, 0x1000e28, 0x100002c, 0x100003c] }; key { [ 0x1000e30, 0x1000e2e, 0x100002e, 0x100003e] }; key { [ 0x1000e39, 0x100003f, 0x100002f, 0x100003f] }; + key { [ 0x1000020, 0x1000020, 0x1000020, 0x1000020] }; + key { [ 0x100002e, 0x100002c, 0x100002e, 0x100002e] }; include "level3(ralt_switch)" -}; \ No newline at end of file +}; diff --git a/output/Manoonchai-WittNV/WittNV.klc b/output/Manoonchai-WittNV/WittNV.klc new file mode 100644 index 0000000..1803f40 Binary files /dev/null and b/output/Manoonchai-WittNV/WittNV.klc differ diff --git a/output/Manoonchai-v0.2.klc b/output/Manoonchai-v0.2.klc deleted file mode 100644 index e49ae74..0000000 Binary files a/output/Manoonchai-v0.2.klc and /dev/null differ diff --git a/output/Manoonchai-v0.2/Manoonchai-v0.2.kcm b/output/Manoonchai-v0.2/Manoonchai-v0.2.kcm new file mode 100644 index 0000000..d5cba2b --- /dev/null +++ b/output/Manoonchai-v0.2/Manoonchai-v0.2.kcm @@ -0,0 +1,492 @@ +# License: MIT + +# Thai Manoonchai v0.2 v0.2 + +type OVERLAY +map key 2 1 +map key 3 2 +map key 4 3 +map key 5 4 +map key 6 5 +map key 7 6 +map key 8 7 +map key 9 8 +map key 10 9 +map key 11 0 +map key 12 MINUS +map key 13 EQUALS +map key 16 Q +map key 17 W +map key 18 E +map key 19 R +map key 20 T +map key 21 Y +map key 22 U +map key 23 I +map key 24 O +map key 25 P +map key 26 LEFT_BRACKET +map key 27 RIGHT_BRACKET +map key 30 A +map key 31 S +map key 32 D +map key 33 F +map key 34 G +map key 35 H +map key 36 J +map key 37 K +map key 38 L +map key 39 SEMICOLON +map key 40 APOSTROPHE +map key 41 GRAVE +map key 43 BACKSLASH +map key 44 Z +map key 45 X +map key 46 C +map key 47 V +map key 48 B +map key 49 N +map key 50 M +map key 51 COMMA +map key 52 PERIOD +map key 53 SLASH +map key 57 SPACE +map key 95 NUMPAD_COMMA + + +key 0 { + label: '\u0030' + base: '\u0030' + shift: '\u0029' + capslock: '\u0029' + capslock+shift: '\u0030' + ralt: '\u0e50' + } + +key 1 { + label: '\u0031' + base: '\u0031' + shift: '\u0021' + capslock: '\u0021' + capslock+shift: '\u0031' + ralt: '\u0e51' + } + +key 2 { + label: '\u0032' + base: '\u0032' + shift: '\u0040' + capslock: '\u0040' + capslock+shift: '\u0032' + ralt: '\u0e52' + } + +key 3 { + label: '\u0033' + base: '\u0033' + shift: '\u0023' + capslock: '\u0023' + capslock+shift: '\u0033' + ralt: '\u0e53' + } + +key 4 { + label: '\u0034' + base: '\u0034' + shift: '\u0024' + capslock: '\u0024' + capslock+shift: '\u0034' + ralt: '\u0e54' + } + +key 5 { + label: '\u0035' + base: '\u0035' + shift: '\u0025' + capslock: '\u0025' + capslock+shift: '\u0035' + ralt: '\u0e55' + } + +key 6 { + label: '\u0036' + base: '\u0036' + shift: '\u005e' + capslock: '\u005e' + capslock+shift: '\u0036' + ralt: '\u0e56' + } + +key 7 { + label: '\u0037' + base: '\u0037' + shift: '\u0026' + capslock: '\u0026' + capslock+shift: '\u0037' + ralt: '\u0e57' + } + +key 8 { + label: '\u0038' + base: '\u0038' + shift: '\u002a' + capslock: '\u002a' + capslock+shift: '\u0038' + ralt: '\u0e58' + } + +key 9 { + label: '\u0039' + base: '\u0039' + shift: '\u0028' + capslock: '\u0028' + capslock+shift: '\u0039' + ralt: '\u0e59' + } + +key MINUS { + label: '\u002d' + base: '\u002d' + shift: '\u005f' + capslock: '\u005f' + capslock+shift: '\u002d' + ralt: '\u00f7' + } + +key EQUALS { + label: '\u003d' + base: '\u003d' + shift: '\u002b' + capslock: '\u002b' + capslock+shift: '\u003d' + ralt: '\u00d7' + } + +key GRAVE { + label: '\u0060' + base: '\u0060' + shift: '\u007e' + capslock: '\u007e' + capslock+shift: '\u0060' + ralt: '\u0060' + } + +key Q { + label: '\u0e1e' + base: '\u0e1e' + shift: '\u0e11' + capslock: '\u0e11' + capslock+shift: '\u0e1e' + } + +key W { + label: '\u0e04' + base: '\u0e04' + shift: '\u0e12' + capslock: '\u0e12' + capslock+shift: '\u0e04' + } + +key E { + label: '\u0e22' + base: '\u0e22' + shift: '\u0e29' + capslock: '\u0e29' + capslock+shift: '\u0e22' + } + +key R { + label: '\u0e27' + base: '\u0e27' + shift: '\u0e0d' + capslock: '\u0e0d' + capslock+shift: '\u0e27' + } + +key T { + label: '\u0e25' + base: '\u0e25' + shift: '\u0e1f' + capslock: '\u0e1f' + capslock+shift: '\u0e25' + } + +key Y { + label: '\u0e1b' + base: '\u0e1b' + shift: '\u0e0e' + capslock: '\u0e0e' + capslock+shift: '\u0e1b' + } + +key U { + label: '\u0e31' + base: '\u0e31' + shift: '\u0e09' + capslock: '\u0e09' + capslock+shift: '\u0e31' + ralt: '\u0e3a' + } + +key I { + label: '\u0e01' + base: '\u0e01' + shift: '\u0e20' + capslock: '\u0e20' + capslock+shift: '\u0e01' + } + +key O { + label: '\u0e15' + base: '\u0e15' + shift: '\u0e10' + capslock: '\u0e10' + capslock+shift: '\u0e15' + } + +key P { + label: '\u0e1a' + base: '\u0e1a' + shift: '\u0e24' + capslock: '\u0e24' + capslock+shift: '\u0e1a' + } + +key LEFT_BRACKET { + label: '\u0e47' + base: '\u0e47' + shift: '\u0e06' + capslock: '\u0e06' + capslock+shift: '\u0e47' + ralt: '\u005b' + ralt+shift: '\u007b' + } + +key RIGHT_BRACKET { + label: '\u0e39' + base: '\u0e39' + shift: '\u0e0c' + capslock: '\u0e0c' + capslock+shift: '\u0e39' + ralt: '\u005d' + ralt+shift: '\u007d' + } + +key A { + label: '\u0e2b' + base: '\u0e2b' + shift: '\u0e46' + capslock: '\u0e46' + capslock+shift: '\u0e2b' + ralt: '\u25cc' + } + +key S { + label: '\u0e40' + base: '\u0e40' + shift: '\u0e16' + capslock: '\u0e16' + capslock+shift: '\u0e40' + ralt: '\u0e4f' + } + +key D { + label: '\u0e19' + base: '\u0e19' + shift: '\u0e41' + capslock: '\u0e41' + capslock+shift: '\u0e19' + ralt: '\u0e5b' + } + +key F { + label: '\u0e23' + base: '\u0e23' + shift: '\u0e02' + capslock: '\u0e02' + capslock+shift: '\u0e23' + ralt: '\u0e3f' + } + +key G { + label: '\u0e21' + base: '\u0e21' + shift: '\u0e1c' + capslock: '\u0e1c' + capslock+shift: '\u0e21' + } + +key H { + label: '\u0e2d' + base: '\u0e2d' + shift: '\u0e36' + capslock: '\u0e36' + capslock+shift: '\u0e2d' + ralt: '\u0e4d' + } + +key J { + label: '\u0e32' + base: '\u0e32' + shift: '\u0e43' + capslock: '\u0e43' + capslock+shift: '\u0e32' + ralt: '\u0e45' + } + +key K { + label: '\u0e48' + base: '\u0e48' + shift: '\u0e33' + capslock: '\u0e33' + capslock+shift: '\u0e48' + ralt: '\u0e03' + } + +key L { + label: '\u0e49' + base: '\u0e49' + shift: '\u0e42' + capslock: '\u0e42' + capslock+shift: '\u0e49' + } + +key SEMICOLON { + label: '\u0e07' + base: '\u0e07' + shift: '\u0e28' + capslock: '\u0e28' + capslock+shift: '\u0e07' + ralt: '\u003b' + ralt+shift: '\u003a' + } + +key APOSTROPHE { + label: '\u0e37' + base: '\u0e37' + shift: '\u0e2e' + capslock: '\u0e2e' + capslock+shift: '\u0e37' + ralt: '\u0027' + ralt+shift: '\u0022' + } + +key BACKSLASH { + label: '\u0e4b' + base: '\u0e4b' + shift: '\u0e2f' + capslock: '\u0e2f' + capslock+shift: '\u0e4b' + ralt: '\u005c' + ralt+shift: '\u007c' + } + +key Z { + label: '\u0e0a' + base: '\u0e0a' + shift: '\u0e2c' + capslock: '\u0e2c' + capslock+shift: '\u0e0a' + ralt: '\u0e26' + } + +key X { + label: '\u0e44' + base: '\u0e44' + shift: '\u0e4b' + capslock: '\u0e4b' + capslock+shift: '\u0e44' + } + +key C { + label: '\u0e2a' + base: '\u0e2a' + shift: '\u0e4a' + capslock: '\u0e4a' + capslock+shift: '\u0e2a' + ralt: '\u0e5a' + } + +key V { + label: '\u0e17' + base: '\u0e17' + shift: '\u0e0b' + capslock: '\u0e0b' + capslock+shift: '\u0e17' + } + +key B { + label: '\u0e08' + base: '\u0e08' + shift: '\u0e1d' + capslock: '\u0e1d' + capslock+shift: '\u0e08' + } + +key N { + label: '\u0e34' + base: '\u0e34' + shift: '\u003f' + capslock: '\u003f' + capslock+shift: '\u0e34' + ralt: '\u0e05' + } + +key M { + label: '\u0e35' + base: '\u0e35' + shift: '\u0e13' + capslock: '\u0e13' + capslock+shift: '\u0e35' + ralt: '\u0e4e' + } + +key COMMA { + label: '\u0e14' + base: '\u0e14' + shift: '\u0e18' + capslock: '\u0e18' + capslock+shift: '\u0e14' + ralt: '\u002c' + ralt+shift: '\u003c' + } + +key PERIOD { + label: '\u0e30' + base: '\u0e30' + shift: '\u0e0f' + capslock: '\u0e0f' + capslock+shift: '\u0e30' + ralt: '\u002e' + ralt+shift: '\u003e' + } + +key SLASH { + label: '\u0e38' + base: '\u0e38' + shift: '\u0e3f' + capslock: '\u0e3f' + capslock+shift: '\u0e38' + ralt: '\u002f' + ralt+shift: '\u003f' + } + +key SPACE { + label: '\u0020' + base: '\u0020' + shift: '\u0020' + capslock: '\u0020' + capslock+shift: '\u0020' + ralt: '\u0020' + ralt+shift: '\u0020' + } + +key NUMPAD_COMMA { + label: '\u002e' + base: '\u002e' + shift: '\u002c' + capslock: '\u002c' + capslock+shift: '\u002e' + ralt: '\u002e' + ralt+shift: '\u002e' + } diff --git a/output/Manoonchai-v0.2.keylayout b/output/Manoonchai-v0.2/Manoonchai-v0.2.keylayout similarity index 100% rename from output/Manoonchai-v0.2.keylayout rename to output/Manoonchai-v0.2/Manoonchai-v0.2.keylayout diff --git a/output/Manoonchai-v0.2_xkb b/output/Manoonchai-v0.2/Manoonchai-v0.2_xkb similarity index 93% rename from output/Manoonchai-v0.2_xkb rename to output/Manoonchai-v0.2/Manoonchai-v0.2_xkb index fb0c716..3d91018 100644 --- a/output/Manoonchai-v0.2_xkb +++ b/output/Manoonchai-v0.2/Manoonchai-v0.2_xkb @@ -1,9 +1,9 @@ -partial alphanumeric_keys +partial alphanumeric_keys xkb_symbols "Mnc02" { // COPYRIGHT "MIT" - name[Group1]= "Manoonchai v0.2 v0.2"; + name[Group1]= "Thai (Manoonchai v0.2 v0.2)"; key { [ 0x1000030, 0x1000029, 0x1000e50,voidsymbol] }; @@ -53,6 +53,8 @@ xkb_symbols "Mnc02" { key { [ 0x1000e14, 0x1000e18, 0x100002c, 0x100003c] }; key { [ 0x1000e30, 0x1000e0f, 0x100002e, 0x100003e] }; key { [ 0x1000e38, 0x1000e3f, 0x100002f, 0x100003f] }; + key { [ 0x1000020, 0x1000020, 0x1000020, 0x1000020] }; + key { [ 0x100002e, 0x100002c, 0x100002e, 0x100002e] }; include "level3(ralt_switch)" -}; \ No newline at end of file +}; diff --git a/output/Manoonchai-v0.2/Mnc02.klc b/output/Manoonchai-v0.2/Mnc02.klc new file mode 100644 index 0000000..6837331 Binary files /dev/null and b/output/Manoonchai-v0.2/Mnc02.klc differ diff --git a/output/Manoonchai.klc b/output/Manoonchai.klc deleted file mode 100644 index 51166bf..0000000 Binary files a/output/Manoonchai.klc and /dev/null differ diff --git a/output/Manoonchai/Manoonchai.kcm b/output/Manoonchai/Manoonchai.kcm new file mode 100644 index 0000000..4c4077e --- /dev/null +++ b/output/Manoonchai/Manoonchai.kcm @@ -0,0 +1,492 @@ +# License: MIT + +# Thai Manoonchai v1.0 + +type OVERLAY +map key 2 1 +map key 3 2 +map key 4 3 +map key 5 4 +map key 6 5 +map key 7 6 +map key 8 7 +map key 9 8 +map key 10 9 +map key 11 0 +map key 12 MINUS +map key 13 EQUALS +map key 16 Q +map key 17 W +map key 18 E +map key 19 R +map key 20 T +map key 21 Y +map key 22 U +map key 23 I +map key 24 O +map key 25 P +map key 26 LEFT_BRACKET +map key 27 RIGHT_BRACKET +map key 30 A +map key 31 S +map key 32 D +map key 33 F +map key 34 G +map key 35 H +map key 36 J +map key 37 K +map key 38 L +map key 39 SEMICOLON +map key 40 APOSTROPHE +map key 41 GRAVE +map key 43 BACKSLASH +map key 44 Z +map key 45 X +map key 46 C +map key 47 V +map key 48 B +map key 49 N +map key 50 M +map key 51 COMMA +map key 52 PERIOD +map key 53 SLASH +map key 57 SPACE +map key 95 NUMPAD_COMMA + + +key 0 { + label: '\u0030' + base: '\u0030' + shift: '\u0029' + capslock: '\u0029' + capslock+shift: '\u0030' + ralt: '\u0e50' + } + +key 1 { + label: '\u0031' + base: '\u0031' + shift: '\u0021' + capslock: '\u0021' + capslock+shift: '\u0031' + ralt: '\u0e51' + } + +key 2 { + label: '\u0032' + base: '\u0032' + shift: '\u0040' + capslock: '\u0040' + capslock+shift: '\u0032' + ralt: '\u0e52' + } + +key 3 { + label: '\u0033' + base: '\u0033' + shift: '\u0023' + capslock: '\u0023' + capslock+shift: '\u0033' + ralt: '\u0e53' + } + +key 4 { + label: '\u0034' + base: '\u0034' + shift: '\u0024' + capslock: '\u0024' + capslock+shift: '\u0034' + ralt: '\u0e54' + } + +key 5 { + label: '\u0035' + base: '\u0035' + shift: '\u0025' + capslock: '\u0025' + capslock+shift: '\u0035' + ralt: '\u0e55' + } + +key 6 { + label: '\u0036' + base: '\u0036' + shift: '\u005e' + capslock: '\u005e' + capslock+shift: '\u0036' + ralt: '\u0e56' + } + +key 7 { + label: '\u0037' + base: '\u0037' + shift: '\u0026' + capslock: '\u0026' + capslock+shift: '\u0037' + ralt: '\u0e57' + } + +key 8 { + label: '\u0038' + base: '\u0038' + shift: '\u002a' + capslock: '\u002a' + capslock+shift: '\u0038' + ralt: '\u0e58' + } + +key 9 { + label: '\u0039' + base: '\u0039' + shift: '\u0028' + capslock: '\u0028' + capslock+shift: '\u0039' + ralt: '\u0e59' + } + +key MINUS { + label: '\u002d' + base: '\u002d' + shift: '\u005f' + capslock: '\u005f' + capslock+shift: '\u002d' + ralt: '\u00f7' + } + +key EQUALS { + label: '\u003d' + base: '\u003d' + shift: '\u002b' + capslock: '\u002b' + capslock+shift: '\u003d' + ralt: '\u00d7' + } + +key GRAVE { + label: '\u0060' + base: '\u0060' + shift: '\u007e' + capslock: '\u007e' + capslock+shift: '\u0060' + ralt: '\u0060' + } + +key Q { + label: '\u0e43' + base: '\u0e43' + shift: '\u0e12' + capslock: '\u0e12' + capslock+shift: '\u0e43' + } + +key W { + label: '\u0e15' + base: '\u0e15' + shift: '\u0e0f' + capslock: '\u0e0f' + capslock+shift: '\u0e15' + } + +key E { + label: '\u0e2b' + base: '\u0e2b' + shift: '\u0e0b' + capslock: '\u0e0b' + capslock+shift: '\u0e2b' + } + +key R { + label: '\u0e25' + base: '\u0e25' + shift: '\u0e0d' + capslock: '\u0e0d' + capslock+shift: '\u0e25' + } + +key T { + label: '\u0e2a' + base: '\u0e2a' + shift: '\u0e1f' + capslock: '\u0e1f' + capslock+shift: '\u0e2a' + } + +key Y { + label: '\u0e1b' + base: '\u0e1b' + shift: '\u0e09' + capslock: '\u0e09' + capslock+shift: '\u0e1b' + } + +key U { + label: '\u0e31' + base: '\u0e31' + shift: '\u0e36' + capslock: '\u0e36' + capslock+shift: '\u0e31' + ralt: '\u0e3a' + } + +key I { + label: '\u0e01' + base: '\u0e01' + shift: '\u0e18' + capslock: '\u0e18' + capslock+shift: '\u0e01' + } + +key O { + label: '\u0e34' + base: '\u0e34' + shift: '\u0e10' + capslock: '\u0e10' + capslock+shift: '\u0e34' + } + +key P { + label: '\u0e1a' + base: '\u0e1a' + shift: '\u0e0e' + capslock: '\u0e0e' + capslock+shift: '\u0e1a' + } + +key LEFT_BRACKET { + label: '\u0e47' + base: '\u0e47' + shift: '\u0e06' + capslock: '\u0e06' + capslock+shift: '\u0e47' + ralt: '\u005b' + ralt+shift: '\u007b' + } + +key RIGHT_BRACKET { + label: '\u0e2c' + base: '\u0e2c' + shift: '\u0e11' + capslock: '\u0e11' + capslock+shift: '\u0e2c' + ralt: '\u005d' + ralt+shift: '\u007d' + } + +key A { + label: '\u0e07' + base: '\u0e07' + shift: '\u0e29' + capslock: '\u0e29' + capslock+shift: '\u0e07' + ralt: '\u25cc' + } + +key S { + label: '\u0e40' + base: '\u0e40' + shift: '\u0e16' + capslock: '\u0e16' + capslock+shift: '\u0e40' + ralt: '\u0e4f' + } + +key D { + label: '\u0e23' + base: '\u0e23' + shift: '\u0e41' + capslock: '\u0e41' + capslock+shift: '\u0e23' + ralt: '\u0e5b' + } + +key F { + label: '\u0e19' + base: '\u0e19' + shift: '\u0e0a' + capslock: '\u0e0a' + capslock+shift: '\u0e19' + ralt: '\u0e3f' + } + +key G { + label: '\u0e21' + base: '\u0e21' + shift: '\u0e1e' + capslock: '\u0e1e' + capslock+shift: '\u0e21' + } + +key H { + label: '\u0e2d' + base: '\u0e2d' + shift: '\u0e1c' + capslock: '\u0e1c' + capslock+shift: '\u0e2d' + ralt: '\u0e4d' + } + +key J { + label: '\u0e32' + base: '\u0e32' + shift: '\u0e33' + capslock: '\u0e33' + capslock+shift: '\u0e32' + ralt: '\u0e45' + } + +key K { + label: '\u0e48' + base: '\u0e48' + shift: '\u0e02' + capslock: '\u0e02' + capslock+shift: '\u0e48' + ralt: '\u0e03' + } + +key L { + label: '\u0e49' + base: '\u0e49' + shift: '\u0e42' + capslock: '\u0e42' + capslock+shift: '\u0e49' + } + +key SEMICOLON { + label: '\u0e27' + base: '\u0e27' + shift: '\u0e20' + capslock: '\u0e20' + capslock+shift: '\u0e27' + ralt: '\u003b' + ralt+shift: '\u003a' + } + +key APOSTROPHE { + label: '\u0e37' + base: '\u0e37' + shift: '\u0022' + capslock: '\u0022' + capslock+shift: '\u0e37' + ralt: '\u0027' + ralt+shift: '\u0022' + } + +key BACKSLASH { + label: '\u0e2f' + base: '\u0e2f' + shift: '\u0e0c' + capslock: '\u0e0c' + capslock+shift: '\u0e2f' + ralt: '\u005c' + ralt+shift: '\u007c' + } + +key Z { + label: '\u0e38' + base: '\u0e38' + shift: '\u0e24' + capslock: '\u0e24' + capslock+shift: '\u0e38' + ralt: '\u0e26' + } + +key X { + label: '\u0e44' + base: '\u0e44' + shift: '\u0e1d' + capslock: '\u0e1d' + capslock+shift: '\u0e44' + } + +key C { + label: '\u0e17' + base: '\u0e17' + shift: '\u0e46' + capslock: '\u0e46' + capslock+shift: '\u0e17' + ralt: '\u0e5a' + } + +key V { + label: '\u0e22' + base: '\u0e22' + shift: '\u0e13' + capslock: '\u0e13' + capslock+shift: '\u0e22' + } + +key B { + label: '\u0e08' + base: '\u0e08' + shift: '\u0e4a' + capslock: '\u0e4a' + capslock+shift: '\u0e08' + } + +key N { + label: '\u0e04' + base: '\u0e04' + shift: '\u0e4b' + capslock: '\u0e4b' + capslock+shift: '\u0e04' + ralt: '\u0e05' + } + +key M { + label: '\u0e35' + base: '\u0e35' + shift: '\u0e4c' + capslock: '\u0e4c' + capslock+shift: '\u0e35' + ralt: '\u0e4e' + } + +key COMMA { + label: '\u0e14' + base: '\u0e14' + shift: '\u0e28' + capslock: '\u0e28' + capslock+shift: '\u0e14' + ralt: '\u002c' + ralt+shift: '\u003c' + } + +key PERIOD { + label: '\u0e30' + base: '\u0e30' + shift: '\u0e2e' + capslock: '\u0e2e' + capslock+shift: '\u0e30' + ralt: '\u002e' + ralt+shift: '\u003e' + } + +key SLASH { + label: '\u0e39' + base: '\u0e39' + shift: '\u003f' + capslock: '\u003f' + capslock+shift: '\u0e39' + ralt: '\u002f' + ralt+shift: '\u003f' + } + +key SPACE { + label: '\u0020' + base: '\u0020' + shift: '\u0020' + capslock: '\u0020' + capslock+shift: '\u0020' + ralt: '\u0020' + ralt+shift: '\u0020' + } + +key NUMPAD_COMMA { + label: '\u002e' + base: '\u002e' + shift: '\u002c' + capslock: '\u002c' + capslock+shift: '\u002e' + ralt: '\u002e' + ralt+shift: '\u002e' + } diff --git a/output/Manoonchai.keylayout b/output/Manoonchai/Manoonchai.keylayout similarity index 100% rename from output/Manoonchai.keylayout rename to output/Manoonchai/Manoonchai.keylayout diff --git a/output/Manoonchai_xkb b/output/Manoonchai/Manoonchai_xkb similarity index 93% rename from output/Manoonchai_xkb rename to output/Manoonchai/Manoonchai_xkb index 52258eb..7de8521 100644 --- a/output/Manoonchai_xkb +++ b/output/Manoonchai/Manoonchai_xkb @@ -1,9 +1,9 @@ -partial alphanumeric_keys +partial alphanumeric_keys xkb_symbols "ThaiMnc" { // COPYRIGHT "MIT" - name[Group1]= "Manoonchai v1.0"; + name[Group1]= "Thai (Manoonchai v1.0)"; key { [ 0x1000030, 0x1000029, 0x1000e50,voidsymbol] }; @@ -53,6 +53,8 @@ xkb_symbols "ThaiMnc" { key { [ 0x1000e14, 0x1000e28, 0x100002c, 0x100003c] }; key { [ 0x1000e30, 0x1000e2e, 0x100002e, 0x100003e] }; key { [ 0x1000e39, 0x100003f, 0x100002f, 0x100003f] }; + key { [ 0x1000020, 0x1000020, 0x1000020, 0x1000020] }; + key { [ 0x100002e, 0x100002c, 0x100002e, 0x100002e] }; include "level3(ralt_switch)" -}; \ No newline at end of file +}; diff --git a/output/Manoonchai/ThaiMnc.klc b/output/Manoonchai/ThaiMnc.klc new file mode 100644 index 0000000..dec330d Binary files /dev/null and b/output/Manoonchai/ThaiMnc.klc differ diff --git a/output/Manoonchai_Lao/LaoMnc.klc b/output/Manoonchai_Lao/LaoMnc.klc new file mode 100644 index 0000000..ac6427e Binary files /dev/null and b/output/Manoonchai_Lao/LaoMnc.klc differ diff --git a/output/Manoonchai_Lao/Manoonchai_Lao.kcm b/output/Manoonchai_Lao/Manoonchai_Lao.kcm new file mode 100644 index 0000000..94c8355 --- /dev/null +++ b/output/Manoonchai_Lao/Manoonchai_Lao.kcm @@ -0,0 +1,506 @@ +# License: MIT + +# Lao Manoonchai Lao-Pali v1.0 + +type OVERLAY +map key 2 1 +map key 3 2 +map key 4 3 +map key 5 4 +map key 6 5 +map key 7 6 +map key 8 7 +map key 9 8 +map key 10 9 +map key 11 0 +map key 12 MINUS +map key 13 EQUALS +map key 16 Q +map key 17 W +map key 18 E +map key 19 R +map key 20 T +map key 21 Y +map key 22 U +map key 23 I +map key 24 O +map key 25 P +map key 26 LEFT_BRACKET +map key 27 RIGHT_BRACKET +map key 30 A +map key 31 S +map key 32 D +map key 33 F +map key 34 G +map key 35 H +map key 36 J +map key 37 K +map key 38 L +map key 39 SEMICOLON +map key 40 APOSTROPHE +map key 41 GRAVE +map key 43 BACKSLASH +map key 44 Z +map key 45 X +map key 46 C +map key 47 V +map key 48 B +map key 49 N +map key 50 M +map key 51 COMMA +map key 52 PERIOD +map key 53 SLASH +map key 57 SPACE +map key 95 NUMPAD_COMMA + + +key 0 { + label: '\u0030' + base: '\u0030' + shift: '\u0029' + capslock: '\u0029' + capslock+shift: '\u0030' + ralt: '\u0ed0' + } + +key 1 { + label: '\u0031' + base: '\u0031' + shift: '\u0021' + capslock: '\u0021' + capslock+shift: '\u0031' + ralt: '\u0ed1' + ralt+shift: '\u0021' + } + +key 2 { + label: '\u0032' + base: '\u0032' + shift: '\u0040' + capslock: '\u0040' + capslock+shift: '\u0032' + ralt: '\u0ed2' + ralt+shift: '\u0040' + } + +key 3 { + label: '\u0033' + base: '\u0033' + shift: '\u0023' + capslock: '\u0023' + capslock+shift: '\u0033' + ralt: '\u0ed3' + ralt+shift: '\u0023' + } + +key 4 { + label: '\u0034' + base: '\u0034' + shift: '\u0024' + capslock: '\u0024' + capslock+shift: '\u0034' + ralt: '\u0ed4' + ralt+shift: '\u0024' + } + +key 5 { + label: '\u0035' + base: '\u0035' + shift: '\u0025' + capslock: '\u0025' + capslock+shift: '\u0035' + ralt: '\u0ed5' + ralt+shift: '\u0025' + } + +key 6 { + label: '\u0036' + base: '\u0036' + shift: '\u002c' + capslock: '\u002c' + capslock+shift: '\u0036' + ralt: '\u0ed6' + ralt+shift: '\u005e' + } + +key 7 { + label: '\u0037' + base: '\u0037' + shift: '\u0026' + capslock: '\u0026' + capslock+shift: '\u0037' + ralt: '\u0ed7' + ralt+shift: '\u0026' + } + +key 8 { + label: '\u0038' + base: '\u0038' + shift: '\u002e' + capslock: '\u002e' + capslock+shift: '\u0038' + ralt: '\u0ed8' + ralt+shift: '\u002a' + } + +key 9 { + label: '\u0039' + base: '\u0039' + shift: '\u0028' + capslock: '\u0028' + capslock+shift: '\u0039' + ralt: '\u0ed9' + } + +key MINUS { + label: '\u002d' + base: '\u002d' + shift: '\u005f' + capslock: '\u005f' + capslock+shift: '\u002d' + ralt: '\u00f7' + } + +key EQUALS { + label: '\u003d' + base: '\u003d' + shift: '\u002b' + capslock: '\u002b' + capslock+shift: '\u003d' + ralt: '\u00d7' + } + +key GRAVE { + label: '\u0060' + base: '\u0060' + shift: '\u007e' + capslock: '\u007e' + capslock+shift: '\u0060' + ralt: '\u0060' + } + +key Q { + label: '\u0ec3' + base: '\u0ec3' + shift: '\u0e92' + capslock: '\u0e92' + capslock+shift: '\u0ec3' + } + +key W { + label: '\u0e95' + base: '\u0e95' + shift: '\u0e8f' + capslock: '\u0e8f' + capslock+shift: '\u0e95' + ralt: '\u0078' + } + +key E { + label: '\u0eab' + base: '\u0eab' + shift: '\u0ea2' + capslock: '\u0ea2' + capslock+shift: '\u0eab' + ralt: '\u0ee1' + } + +key R { + label: '\u0ea5' + base: '\u0ea5' + shift: '\u0e8e' + capslock: '\u0e8e' + capslock+shift: '\u0ea5' + ralt: '\u0ee2' + } + +key T { + label: '\u0eaa' + base: '\u0eaa' + shift: '\u0e9f' + capslock: '\u0e9f' + capslock+shift: '\u0eaa' + } + +key Y { + label: '\u0e9b' + base: '\u0e9b' + shift: '\u0e89' + capslock: '\u0e89' + capslock+shift: '\u0e9b' + } + +key U { + label: '\u0eb1' + base: '\u0eb1' + shift: '\u0eb6' + capslock: '\u0eb6' + capslock+shift: '\u0eb1' + ralt: '\u0eba' + } + +key I { + label: '\u0e81' + base: '\u0e81' + shift: '\u0eae' + capslock: '\u0eae' + capslock+shift: '\u0e81' + ralt: '\u0ede' + } + +key O { + label: '\u0eb4' + base: '\u0eb4' + shift: '\u0ebd' + capslock: '\u0ebd' + capslock+shift: '\u0eb4' + } + +key P { + label: '\u0e9a' + base: '\u0e9a' + shift: '\u0e98' + capslock: '\u0e98' + capslock+shift: '\u0e9a' + } + +key LEFT_BRACKET { + label: '\u0ebb' + base: '\u0ebb' + shift: '\u0e86' + capslock: '\u0e86' + capslock+shift: '\u0ebb' + ralt: '\u005b' + ralt+shift: '\u007b' + } + +key RIGHT_BRACKET { + label: '\u0eac' + base: '\u0eac' + shift: '\u0e91' + capslock: '\u0e91' + capslock+shift: '\u0eac' + ralt: '\u005d' + ralt+shift: '\u007d' + } + +key A { + label: '\u0e87' + base: '\u0e87' + shift: '\u0ea9' + capslock: '\u0ea9' + capslock+shift: '\u0e87' + ralt: '\u0ee0' + } + +key S { + label: '\u0ec0' + base: '\u0ec0' + shift: '\u0e96' + capslock: '\u0e96' + capslock+shift: '\u0ec0' + ralt: '\u25cc' + } + +key D { + label: '\u0ea3' + base: '\u0ea3' + shift: '\u0ec1' + capslock: '\u0ec1' + capslock+shift: '\u0ea3' + ralt: '\u20ad' + } + +key F { + label: '\u0e99' + base: '\u0e99' + shift: '\u0e8a' + capslock: '\u0e8a' + capslock+shift: '\u0e99' + ralt: '\u0edc' + } + +key G { + label: '\u0ea1' + base: '\u0ea1' + shift: '\u0e9e' + capslock: '\u0e9e' + capslock+shift: '\u0ea1' + ralt: '\u0edd' + } + +key H { + label: '\u0ead' + base: '\u0ead' + shift: '\u0ecd' + capslock: '\u0ecd' + capslock+shift: '\u0ead' + } + +key J { + label: '\u0eb2' + base: '\u0eb2' + shift: '\u0eb3' + capslock: '\u0eb3' + capslock+shift: '\u0eb2' + } + +key K { + label: '\u0ec8' + base: '\u0ec8' + shift: '\u0e82' + capslock: '\u0e82' + capslock+shift: '\u0ec8' + ralt: '\u0e83' + } + +key L { + label: '\u0ec9' + base: '\u0ec9' + shift: '\u0ec2' + capslock: '\u0ec2' + capslock+shift: '\u0ec9' + ralt: '\u0ee3' + } + +key SEMICOLON { + label: '\u0ea7' + base: '\u0ea7' + shift: '\u0ea0' + capslock: '\u0ea0' + capslock+shift: '\u0ea7' + ralt: '\u003b' + ralt+shift: '\u003a' + } + +key APOSTROPHE { + label: '\u0eb7' + base: '\u0eb7' + shift: '\u0022' + capslock: '\u0022' + capslock+shift: '\u0eb7' + ralt: '\u0027' + ralt+shift: '\u0022' + } + +key BACKSLASH { + label: '\u0ec6' + base: '\u0ec6' + shift: '\u0eaf' + capslock: '\u0eaf' + capslock+shift: '\u0ec6' + ralt: '\u005c' + ralt+shift: '\u007c' + } + +key Z { + label: '\u0eb8' + base: '\u0eb8' + shift: '\u0ebc' + capslock: '\u0ebc' + capslock+shift: '\u0eb8' + ralt: '\u0ea6' + } + +key X { + label: '\u0ec4' + base: '\u0ec4' + shift: '\u0e9d' + capslock: '\u0e9d' + capslock+shift: '\u0ec4' + ralt: '\u0ea4' + } + +key C { + label: '\u0e97' + base: '\u0e97' + shift: '\u0e9c' + capslock: '\u0e9c' + capslock+shift: '\u0e97' + ralt: '\u0e8c' + } + +key V { + label: '\u0e8d' + base: '\u0e8d' + shift: '\u0e93' + capslock: '\u0e93' + capslock+shift: '\u0e8d' + ralt: '\u0edf' + } + +key B { + label: '\u0e88' + base: '\u0e88' + shift: '\u0eca' + capslock: '\u0eca' + capslock+shift: '\u0e88' + } + +key N { + label: '\u0e84' + base: '\u0e84' + shift: '\u0ecb' + capslock: '\u0ecb' + capslock+shift: '\u0e84' + ralt: '\u0e85' + } + +key M { + label: '\u0eb5' + base: '\u0eb5' + shift: '\u0ecc' + capslock: '\u0ecc' + capslock+shift: '\u0eb5' + ralt: '\u0ece' + } + +key COMMA { + label: '\u0e94' + base: '\u0e94' + shift: '\u0ea8' + capslock: '\u0ea8' + capslock+shift: '\u0e94' + ralt: '\u002c' + ralt+shift: '\u003c' + } + +key PERIOD { + label: '\u0eb0' + base: '\u0eb0' + shift: '\u0e90' + capslock: '\u0e90' + capslock+shift: '\u0eb0' + ralt: '\u002e' + ralt+shift: '\u003e' + } + +key SLASH { + label: '\u0eb9' + base: '\u0eb9' + shift: '\u003f' + capslock: '\u003f' + capslock+shift: '\u0eb9' + ralt: '\u002f' + ralt+shift: '\u003f' + } + +key SPACE { + label: '\u0020' + base: '\u0020' + shift: '\u200b' + capslock: '\u200b' + capslock+shift: '\u0020' + ralt: '\u0020' + ralt+shift: '\u0020' + } + +key NUMPAD_COMMA { + label: '\u002c' + base: '\u002c' + shift: '\u002e' + capslock: '\u002e' + capslock+shift: '\u002c' + ralt: '\u002c' + ralt+shift: '\u002c' + } diff --git a/output/Manoonchai_Lao/Manoonchai_Lao.keylayout b/output/Manoonchai_Lao/Manoonchai_Lao.keylayout new file mode 100644 index 0000000..078660c --- /dev/null +++ b/output/Manoonchai_Lao/Manoonchai_Lao.keylayout @@ -0,0 +1,683 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/output/Manoonchai_Lao/Manoonchai_Lao_xkb b/output/Manoonchai_Lao/Manoonchai_Lao_xkb new file mode 100644 index 0000000..3204a33 --- /dev/null +++ b/output/Manoonchai_Lao/Manoonchai_Lao_xkb @@ -0,0 +1,60 @@ +partial alphanumeric_keys +xkb_symbols "LaoMnc" { + + // COPYRIGHT "MIT" + + name[Group1]= "Lao (Manoonchai Lao-Pali v1.0)"; + + + key { [ 0x1000030, 0x1000029, 0x1000ed0,voidsymbol] }; + key { [ 0x1000031, 0x1000021, 0x1000ed1, 0x1000021] }; + key { [ 0x1000032, 0x1000040, 0x1000ed2, 0x1000040] }; + key { [ 0x1000033, 0x1000023, 0x1000ed3, 0x1000023] }; + key { [ 0x1000034, 0x1000024, 0x1000ed4, 0x1000024] }; + key { [ 0x1000035, 0x1000025, 0x1000ed5, 0x1000025] }; + key { [ 0x1000036, 0x100002c, 0x1000ed6, 0x100005e] }; + key { [ 0x1000037, 0x1000026, 0x1000ed7, 0x1000026] }; + key { [ 0x1000038, 0x100002e, 0x1000ed8, 0x100002a] }; + key { [ 0x1000039, 0x1000028, 0x1000ed9,voidsymbol] }; + key { [ 0x100002d, 0x100005f, 0x10000f7,voidsymbol] }; + key { [ 0x100003d, 0x100002b, 0x10000d7,voidsymbol] }; + key { [ 0x1000060, 0x100007e, 0x1000060,voidsymbol] }; + key { [ 0x1000ec3, 0x1000e92,voidsymbol,voidsymbol] }; + key { [ 0x1000e95, 0x1000e8f, 0x1000078,voidsymbol] }; + key { [ 0x1000eab, 0x1000ea2, 0x1000ee1,voidsymbol] }; + key { [ 0x1000ea5, 0x1000e8e, 0x1000ee2,voidsymbol] }; + key { [ 0x1000eaa, 0x1000e9f,voidsymbol,voidsymbol] }; + key { [ 0x1000e9b, 0x1000e89,voidsymbol,voidsymbol] }; + key { [ 0x1000eb1, 0x1000eb6, 0x1000eba,voidsymbol] }; + key { [ 0x1000e81, 0x1000eae, 0x1000ede,voidsymbol] }; + key { [ 0x1000eb4, 0x1000ebd,voidsymbol,voidsymbol] }; + key { [ 0x1000e9a, 0x1000e98,voidsymbol,voidsymbol] }; + key { [ 0x1000ebb, 0x1000e86, 0x100005b, 0x100007b] }; + key { [ 0x1000eac, 0x1000e91, 0x100005d, 0x100007d] }; + key { [ 0x1000e87, 0x1000ea9, 0x1000ee0,voidsymbol] }; + key { [ 0x1000ec0, 0x1000e96, 0x10025cc,voidsymbol] }; + key { [ 0x1000ea3, 0x1000ec1, 0x10020ad,voidsymbol] }; + key { [ 0x1000e99, 0x1000e8a, 0x1000edc,voidsymbol] }; + key { [ 0x1000ea1, 0x1000e9e, 0x1000edd,voidsymbol] }; + key { [ 0x1000ead, 0x1000ecd,voidsymbol,voidsymbol] }; + key { [ 0x1000eb2, 0x1000eb3,voidsymbol,voidsymbol] }; + key { [ 0x1000ec8, 0x1000e82, 0x1000e83,voidsymbol] }; + key { [ 0x1000ec9, 0x1000ec2, 0x1000ee3,voidsymbol] }; + key { [ 0x1000ea7, 0x1000ea0, 0x100003b, 0x100003a] }; + key { [ 0x1000eb7, 0x1000022, 0x1000027, 0x1000022] }; + key { [ 0x1000ec6, 0x1000eaf, 0x100005c, 0x100007c] }; + key { [ 0x1000eb8, 0x1000ebc, 0x1000ea6,voidsymbol] }; + key { [ 0x1000ec4, 0x1000e9d, 0x1000ea4,voidsymbol] }; + key { [ 0x1000e97, 0x1000e9c, 0x1000e8c,voidsymbol] }; + key { [ 0x1000e8d, 0x1000e93, 0x1000edf,voidsymbol] }; + key { [ 0x1000e88, 0x1000eca,voidsymbol,voidsymbol] }; + key { [ 0x1000e84, 0x1000ecb, 0x1000e85,voidsymbol] }; + key { [ 0x1000eb5, 0x1000ecc, 0x1000ece,voidsymbol] }; + key { [ 0x1000e94, 0x1000ea8, 0x100002c, 0x100003c] }; + key { [ 0x1000eb0, 0x1000e90, 0x100002e, 0x100003e] }; + key { [ 0x1000eb9, 0x100003f, 0x100002f, 0x100003f] }; + key { [ 0x1000020, 0x100200b, 0x1000020, 0x1000020] }; + key { [ 0x100002c, 0x100002e, 0x100002c, 0x100002c] }; + + include "level3(ralt_switch)" +}; diff --git a/test/main.test.ts b/test/main.test.ts index 8ca198c..ad055a9 100644 --- a/test/main.test.ts +++ b/test/main.test.ts @@ -463,17 +463,27 @@ describe("generateKlc", () => { // 6 //Column 7 : Ctrl Alt // 7 //Column 8 : Shft Ctrl Alt + //expect(lines[6]).toEqual(`SHIFTSTATE`) + //expect(lines[7]).toEqual(`0\t// Column 4 : Base`) + //expect(lines[8]).toEqual(`1\t// Column 5 : Shift`) + //expect(lines[9]).toEqual(`6\t// Column 7 : AltGr`) + expect(lines[6]).toEqual(`SHIFTSTATE`) - expect(lines[7]).toEqual(`0\t// Column 4 : Base`) - expect(lines[8]).toEqual(`1\t// Column 5 : Shift`) - expect(lines[9]).toEqual(`6\t// Column 7 : AltGr`) + expect(lines[7]).toEqual(`0\t//Column 4 : Base`) + expect(lines[8]).toEqual(`1\t//Column 5 : Shft`) + expect(lines[9]).toEqual(`2\t//Column 6 : Ctrl`) + expect(lines[10]).toEqual(`6\t//Column 7 : Ctrl Alt`) + expect(lines[11]).toEqual(`7\t//Column 8 : Shft Ctrl Alt`) // Assert Layout - const layoutLineIdx = lines.indexOf(`LAYOUT`) - expect(lines[layoutLineIdx]).toEqual(`LAYOUT`) + //const layoutLineIdx = lines.indexOf(`LAYOUT`) + //expect(lines[layoutLineIdx]).toEqual(`LAYOUT`) - expect(lines[layoutLineIdx + 1]).toEqual(`0b\t0\t0\t0\t)\t๐\t0\t-1\t-1`) - expect(lines[layoutLineIdx + 2]).toEqual(`02\t1\t0\t1\t!\t๑\t1\t-1\t-1`) + //expect(lines[layoutLineIdx + 5]).toEqual(`0b\t0\t0\t0\t)\t๐\t0\t-1\t-1`) + //expect(lines[layoutLineIdx + 6]).toEqual(`02\t1\t0\t1\t!\t๑\t1\t-1\t-1`) + + expect(lines[15]).toEqual(`0b\t0\t0\t0030\t0029\t-1\t0e50\t-1`) + expect(lines[16]).toEqual(`02\t1\t0\t0031\t0021\t-1\t0e51\t-1`) // Assert ENDKBD expect(lines.slice(-1)).toEqual(["ENDKBD"])