mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 12:21:52 +09:00
290 lines
4.7 KiB
Plaintext
290 lines
4.7 KiB
Plaintext
// TODO: implement the automata as per https://www.nectec.or.th/it-standards/keyboard_layout/thai-key.html
|
|
|
|
let states = {"keylayouts":[[""],[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
["\u0E08","\u0E57","0",")"],
|
|
["\u0E45","+","1","!"],
|
|
["/","\u0E51","2","@"],
|
|
["-","\u0E52","3","#"],
|
|
["\u0E20","\u0E53","4","$"],
|
|
["\u0E16","\u0E54","5","%"],
|
|
["\u0E38","\u0E39","6","^"],
|
|
["\u0E36","\u0E3F","7","&"],
|
|
["\u0E04","\u0E55","8","*"],
|
|
["\u0E15","\u0E56","9","("],
|
|
["*"],
|
|
["#"],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
["\u0E1F","\u0E24"],// A
|
|
["\u0E34","\u0E3A"],// B
|
|
["\u0E41","\u0E09"],// C
|
|
["\u0E01","\u0E0F"],// D
|
|
["\u0E33","\u0E0E"],// E
|
|
["\u0E14","\u0E42"],// F
|
|
["\u0E40","\u0E0C"],// G
|
|
["\u0E49","\u0E47"],// H
|
|
["\u0E23","\u0E13"],// I
|
|
["\u0E48","\u0E4B"],// J
|
|
["\u0E32","\u0E29"],// K
|
|
["\u0E2A","\u0E28"],// L
|
|
["\u0E17","?"],// M
|
|
["\u0E37","\u0E4C"],// N
|
|
["\u0E19","\u0E2F"],// O
|
|
["\u0E22","\u0E0D"],// P
|
|
["\u0E46","\u0E50"],// Q
|
|
["\u0E1E","\u0E11"],// R
|
|
["\u0E2B","\u0E06"],// S
|
|
["\u0E30","\u0E18"],// T
|
|
["\u0E35","\u0E4A"],// U
|
|
["\u0E2D","\u0E2E"],// V
|
|
["\u0E44",'"'],// W
|
|
["\u0E1B",")"],// X
|
|
["\u0E31","\u0E4D"],// Y
|
|
["\u0E1C","("],// Z
|
|
["\u0E21","\u0E12","\u0E5A","\u0E5A"],// <
|
|
["\u0E43","\u0E2C","\u0E4F","\u0E4F"],// >
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[" "],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
["\n"],
|
|
["\x08"],
|
|
["_","%","¤","¤"],// ~
|
|
["\u0E02","\u0E58"],// -
|
|
["\u0E0A","\u0E59"],// =
|
|
["\u0E1A","\u0E10"],// [
|
|
["\u0E25",","],// ]
|
|
["\u0E03","\u0E05"],// \
|
|
["\u0E27","\u0E0B"],// ;
|
|
["\u0E07",'.'],// '
|
|
["\u0E1D","\u0E26","\u0E5B","\u0E5B"],// ?
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
["0"],
|
|
["1"],
|
|
["2"],
|
|
["3"],
|
|
["4"],
|
|
["5"],
|
|
["6"],
|
|
["7"],
|
|
["8"],
|
|
["9"],
|
|
["/"],
|
|
["*"],
|
|
["-"],
|
|
["+"],
|
|
["."],
|
|
["."],
|
|
["\n"],
|
|
["="],
|
|
["("],
|
|
[")"],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined],
|
|
[undefined]
|
|
],
|
|
"code":""} // practically unused as long as there are no diacritics on the keyboard
|
|
let reset = () => {
|
|
states.code = 0
|
|
}
|
|
|
|
let diacriticsMapping = {
|
|
|
|
}
|
|
let inRange = (s,a,b) => (a <= s && s <= b)
|
|
let isDiacritics = (s) => s !== undefined && inRange(s.charCodeAt(0), 0x0300, 0x036F)
|
|
return Object.freeze({"n":"แป้นพิมพ์เกษมณี","v":"none","c":"CuriousTo\uA75Bvald","m":"rewrite",
|
|
"t":states.keylayouts,
|
|
"l":"thTH",
|
|
// return: [delete count, composed output]
|
|
"accept":(headkey,shiftin,altgrin)=>{
|
|
let layer = 1*shiftin + 2*altgrin // use AltGr to type conventional numbers
|
|
states.code = 0
|
|
|
|
let s = (states.keylayouts[headkey][layer] || states.keylayouts[headkey][1*shiftin]) || states.keylayouts[headkey][0]
|
|
return ['0', s]
|
|
},
|
|
"backspace":()=>{
|
|
reset()
|
|
return ''
|
|
},
|
|
"end":()=>{
|
|
reset()
|
|
return ''
|
|
},
|
|
"reset":()=>{ reset() },
|
|
"composing":()=>(states.code!='')
|
|
}) |