diff --git a/cli.ts b/cli.ts
index 23b991e..8c920c7 100644
--- a/cli.ts
+++ b/cli.ts
@@ -15,54 +15,54 @@ const choices = filenames.map((filename) => ({
value: filename,
}))
-;(async () => {
- const response = await prompts({
- type: "select",
- name: "input",
- message: "Pick input JSON file",
- choices,
- })
+ ; (async () => {
+ const response = await prompts({
+ type: "select",
+ name: "input",
+ message: "Pick input JSON file",
+ choices,
+ })
- const jsonInput = JSON.parse(
- fs.readFileSync(path.join(process.cwd(), "input", response.input), "utf8")
- )
+ const jsonInput = JSON.parse(
+ fs.readFileSync(path.join(process.cwd(), "input", response.input), "utf8")
+ )
- // Keylayout
- try {
- const keylayoutXml = await generateKeylayout(jsonInput)
- const layoutName = response.input.split(".")[0]
- const outputFilename = `output/${layoutName}.keylayout`
- fs.writeFileSync(outputFilename, keylayoutXml)
+ // Keylayout
+ try {
+ const keylayoutXml = await generateKeylayout(jsonInput)
+ const layoutName = response.input.split(".").slice(0, -1).join(".")
+ const outputFilename = `output/${layoutName}.keylayout`
+ fs.writeFileSync(outputFilename, keylayoutXml)
- fixUnicode(outputFilename)
+ fixUnicode(outputFilename)
- console.log(`Output : ${outputFilename}`)
- } catch (e) {
- console.error(e)
- process.exit(1)
- }
+ console.log(`Output : ${outputFilename}`)
+ } catch (e) {
+ console.error(e)
+ process.exit(1)
+ }
- // Klc
- try {
- const layoutName = response.input.split(".")[0]
- const outputFilename = `output/${layoutName}.klc`
- await generateKlc(jsonInput, outputFilename)
+ // Klc
+ try {
+ const layoutName = response.input.split(".").slice(0, -1).join(".")
+ const outputFilename = `output/${layoutName}.klc`
+ await generateKlc(jsonInput, outputFilename)
- console.log(`Output : ${outputFilename}`)
- } catch (e) {
- console.error(e)
- process.exit(1)
- }
+ console.log(`Output : ${outputFilename}`)
+ } catch (e) {
+ console.error(e)
+ process.exit(1)
+ }
// Xkb
- try {
- const layoutName = response.input.split(".")[0]
- const outputFilename = `output/${layoutName}_xkb`
- await generateXkb(jsonInput, outputFilename)
+ try {
+ const layoutName = response.input.split(".").slice(0, -1).join(".")
+ const outputFilename = `output/${layoutName}_xkb`
+ await generateXkb(jsonInput, outputFilename)
- console.log(`Output : ${outputFilename}`)
- } catch (e) {
- console.error(e)
- process.exit(1)
- }
-})()
+ console.log(`Output : ${outputFilename}`)
+ } catch (e) {
+ console.error(e)
+ process.exit(1)
+ }
+ })()
diff --git a/input/Manoonchai-v0.2.json b/input/Manoonchai-v0.2.json
new file mode 100644
index 0000000..9ab8fd4
--- /dev/null
+++ b/input/Manoonchai-v0.2.json
@@ -0,0 +1,63 @@
+{
+ "name": "Manoonchai v0.2",
+ "version": "0.2",
+ "language": "Thai",
+ "layers": ["Base", "Shift", "Command", "AltGr", "Control", "ShiftAltGr"],
+ "license": "MIT",
+ "os": {
+ "windows": {
+ "installerName": "Mnc02",
+ "company": "Manoonchai",
+ "localeId": "0000041e"
+ }
+ },
+ "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", "", "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", ""],
+ ",": ["ด", "ธ", ",", ",", ",", "<"],
+ ".": ["ะ", "ฏ", ".", ".", ".", ">"],
+ "/": ["ุ", "฿", "/", "/", "/", "?"]
+ }
+}
diff --git a/output/Manoonchai-v0.2.keylayout b/output/Manoonchai-v0.2.keylayout
new file mode 100644
index 0000000..61a9aed
--- /dev/null
+++ b/output/Manoonchai-v0.2.keylayout
@@ -0,0 +1,683 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/output/Manoonchai-v0.2.klc b/output/Manoonchai-v0.2.klc
new file mode 100644
index 0000000..e49ae74
Binary files /dev/null and b/output/Manoonchai-v0.2.klc differ
diff --git a/output/Manoonchai-v0.2_xkb b/output/Manoonchai-v0.2_xkb
new file mode 100644
index 0000000..a1e8b31
--- /dev/null
+++ b/output/Manoonchai-v0.2_xkb
@@ -0,0 +1,58 @@
+partial alphanumeric_keys
+xkb_symbols "Mnc02" {
+
+ // COPYRIGHT "MIT"
+
+ name[Group1]= "Manoonchai v0.2 v0.2";
+
+
+ key { [ 0x1000030, 0x1000029, 0x1000030, 0x1000e50 0x1000030 voidsymbol ] };
+ key { [ 0x1000031, 0x1000021, 0x1000031, 0x1000e51 0x1000031 voidsymbol ] };
+ key { [ 0x1000032, 0x1000040, 0x1000032, 0x1000e52 0x1000032 voidsymbol ] };
+ key { [ 0x1000033, 0x1000023, 0x1000033, 0x1000e53 0x1000033 voidsymbol ] };
+ key { [ 0x1000034, 0x1000024, 0x1000034, 0x1000e54 0x1000034 voidsymbol ] };
+ key { [ 0x1000035, 0x1000025, 0x1000035, 0x1000e55 0x1000035 voidsymbol ] };
+ key { [ 0x1000036, 0x100005e, 0x1000036, 0x1000e56 0x1000036 voidsymbol ] };
+ key { [ 0x1000037, 0x1000026, 0x1000037, 0x1000e57 0x1000037 voidsymbol ] };
+ key { [ 0x1000038, 0x100002a, 0x1000038, 0x1000e58 0x1000038 voidsymbol ] };
+ key { [ 0x1000039, 0x1000028, 0x1000039, 0x1000e59 0x1000039 voidsymbol ] };
+ key { [ 0x100002d, 0x100005f, 0x100002d, 0x10000f7 0x100002d voidsymbol ] };
+ key { [ 0x100003d, 0x100002b, 0x100003d, 0x10000d7 0x100003d voidsymbol ] };
+ key { [ 0x1000060, 0x100007e, 0x1000060, 0x1000060 0x1000060 voidsymbol ] };
+ key { [ 0x1000e1e, 0x1000e11, 0x1000071, voidsymbol 0x1000071 voidsymbol ] };
+ key { [ 0x1000e04, 0x1000e12, 0x1000077, voidsymbol 0x1000077 voidsymbol ] };
+ key { [ 0x1000e22, 0x1000e29, 0x1000065, voidsymbol 0x1000065 voidsymbol ] };
+ key { [ 0x1000e27, 0x1000e0d, 0x1000072, voidsymbol 0x1000072 voidsymbol ] };
+ key { [ 0x1000e25, 0x1000e1f, 0x1000074, voidsymbol 0x1000074 voidsymbol ] };
+ key { [ 0x1000e1b, 0x1000e0e, 0x1000079, voidsymbol 0x1000079 voidsymbol ] };
+ key { [ 0x1000e31, 0x1000e09, 0x1000075, 0x1000e3a 0x1000075 voidsymbol ] };
+ key { [ 0x1000e01, 0x1000e20, 0x1000069, voidsymbol 0x1000069 voidsymbol ] };
+ key { [ 0x1000e15, 0x1000e10, 0x100006f, voidsymbol 0x100006f voidsymbol ] };
+ key { [ 0x1000e1a, 0x1000e24, 0x1000070, voidsymbol 0x1000070 voidsymbol ] };
+ key { [ 0x1000e47, 0x1000e06, 0x100005b, 0x100005b 0x100005b 0x100007b ] };
+ key { [ 0x1000e39, 0x1000e0c, 0x100005d, 0x100005d 0x100005d 0x100007d ] };
+ key { [ 0x1000e2b, 0x1000e46, 0x1000061, 0x10025cc 0x1000061 voidsymbol ] };
+ key { [ 0x1000e40, 0x1000e16, 0x1000073, 0x1000e4f 0x1000073 voidsymbol ] };
+ key { [ 0x1000e19, 0x1000e41, 0x1000064, 0x1000e5b 0x1000064 voidsymbol ] };
+ key { [ 0x1000e23, 0x1000e02, 0x1000066, 0x1000e3f 0x1000066 voidsymbol ] };
+ key { [ 0x1000e21, 0x1000e1c, 0x1000067, voidsymbol 0x1000067 voidsymbol ] };
+ key { [ 0x1000e2d, 0x1000e36, 0x1000068, 0x1000e4d 0x1000068 voidsymbol ] };
+ key { [ 0x1000e32, 0x1000e43, 0x100006a, 0x1000e45 0x100006a voidsymbol ] };
+ key { [ 0x1000e48, 0x1000e33, 0x100006b, 0x1000e03 0x100006b voidsymbol ] };
+ key { [ 0x1000e49, 0x1000e42, 0x100006c, voidsymbol 0x100006c voidsymbol ] };
+ key { [ 0x1000e07, 0x1000e28, 0x100003b, 0x100003b 0x100003b 0x100003a ] };
+ key { [ 0x1000e37, 0x1000e2e, 0x1000027, 0x1000027 0x1000027 0x1000022 ] };
+ key { [ 0x1000e4b, 0x1000e2f, 0x100005c, 0x100005c 0x100005c 0x100007c ] };
+ key { [ 0x1000e0a, 0x1000e2c, 0x100007a, 0x1000e26 0x100007a voidsymbol ] };
+ key { [ 0x1000e44, 0x1000e4b, 0x1000078, voidsymbol 0x1000078 voidsymbol ] };
+ key { [ 0x1000e2a, 0x1000e4a, 0x1000063, 0x1000e5a 0x1000063 voidsymbol ] };
+ key { [ 0x1000e17, 0x1000e0b, 0x1000076, voidsymbol 0x1000076 voidsymbol ] };
+ key { [ 0x1000e08, 0x1000e1d, 0x1000062, voidsymbol 0x1000062 voidsymbol ] };
+ key { [ 0x1000e34, 0x100003f, 0x100006e, 0x1000e05 0x100006e voidsymbol ] };
+ key { [ 0x1000e35, 0x1000e13, 0x100006d, 0x1000e4e 0x100006d voidsymbol ] };
+ key { [ 0x1000e14, 0x1000e18, 0x100002c, 0x100002c 0x100002c 0x100003c ] };
+ key { [ 0x1000e30, 0x1000e0f, 0x100002e, 0x100002e 0x100002e 0x100003e ] };
+ key { [ 0x1000e38, 0x1000e3f, 0x100002f, 0x100002f 0x100002f 0x100003f ] };
+
+ include "level3(ralt_switch)"
+};
\ No newline at end of file