mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-09 18:14:06 +09:00
russian keyboard is now multilingual cyrillic keyboard
This commit is contained in:
Binary file not shown.
@@ -4,16 +4,16 @@ let states = {"keylayouts":[[""],[undefined],
|
|||||||
[undefined],
|
[undefined],
|
||||||
[undefined],
|
[undefined],
|
||||||
[undefined],
|
[undefined],
|
||||||
["0",")"],
|
["0",")","]","}"],
|
||||||
["1","!"],
|
["1","!","÷","≈"],
|
||||||
["2",'"'],
|
["2",'"',"¤","∞"],
|
||||||
["3","¤"],
|
["3","¤","§","₴"],
|
||||||
["4",";"],
|
["4",";","$","€"],
|
||||||
["5","%"],
|
["5","%","°",""],
|
||||||
["6",":"],
|
["6",":","<","≤"],
|
||||||
["7","?"],
|
["7","?",">","≥"],
|
||||||
["8","₽"],
|
["8","₽","•","×"],
|
||||||
["9","("],
|
["9","(","[","{"],
|
||||||
["*"],
|
["*"],
|
||||||
["#"],
|
["#"],
|
||||||
[undefined],
|
[undefined],
|
||||||
@@ -26,34 +26,34 @@ let states = {"keylayouts":[[""],[undefined],
|
|||||||
[undefined],
|
[undefined],
|
||||||
[undefined],
|
[undefined],
|
||||||
[undefined],
|
[undefined],
|
||||||
["ф","Ф"],
|
["ф","Ф","ҩ","Ҩ"],
|
||||||
["и","И"],
|
["и","И","\u0335","\u0321"], // strikethru, hook below
|
||||||
["с","С"],
|
["с","С","ҽ","Ҽ"],
|
||||||
["в","В"],
|
["в","В","ү","Ү"],
|
||||||
["у","У"],
|
["у","У","ў","Ў"],
|
||||||
["а","А"],
|
["а","А","ҟ","Ҟ"],
|
||||||
["п","П"],
|
["п","П","ҡ","Ҡ"],
|
||||||
["р","Р"],
|
["р","Р","ғ","Ғ"],
|
||||||
["ш","Ш"],
|
["ш","Ш","ѓ","Ѓ"],
|
||||||
["о","О"],
|
["о","О","ө","Ө"],
|
||||||
["л","Л"],
|
["л","Л","љ","Љ"],
|
||||||
["д","Д"],
|
["д","Д","ђ","Ђ"],
|
||||||
["ь","Ь"],
|
["ь","Ь","ҧ","Ҧ"],
|
||||||
["т","Т"],
|
["т","Т","ћ","Ћ"],
|
||||||
["щ","Щ"],
|
["щ","Щ","ӡ","Ӡ"],
|
||||||
["з","З"],
|
["з","З","ѕ","Ѕ"],
|
||||||
["й","Й"],
|
["й","Й","ј","Ј"],
|
||||||
["к","К"],
|
["к","К","ќ","Ќ"],
|
||||||
["ы","Ы"],
|
["ы","Ы","і","І"],
|
||||||
["е","Е"],
|
["е","Е","ҝ","Ҝ"],
|
||||||
["г","Г"],
|
["г","Г","ґ","Ґ"],
|
||||||
["м","М"],
|
["м","М","\u0329","\u0301"], // "descender", acute
|
||||||
["ц","Ц"],
|
["ц","Ц","ҵ","Ҵ"],
|
||||||
["ч","Ч"],
|
["ч","Ч","һ","Һ"],
|
||||||
["н","Н"],
|
["н","Н","њ","Њ"],
|
||||||
["я","Я"],
|
["я","Я","ә","Ә"],
|
||||||
["б","Б"],
|
["б","Б","«","„"],
|
||||||
["ю","Ю"],
|
["ю","Ю","»","“"],
|
||||||
[undefined],
|
[undefined],
|
||||||
[undefined],
|
[undefined],
|
||||||
[undefined],
|
[undefined],
|
||||||
@@ -65,15 +65,15 @@ let states = {"keylayouts":[[""],[undefined],
|
|||||||
[undefined],
|
[undefined],
|
||||||
["\n"],
|
["\n"],
|
||||||
["\x08"],
|
["\x08"],
|
||||||
["ё","Ё"],
|
["ё","Ё","ӏ","Ӏ"],
|
||||||
["-","_"],
|
["-","_","—","–"],
|
||||||
["=","+"],
|
["=","+","≠","±"],
|
||||||
["х","Х"],
|
["х","Х","ҳ","Ҳ"],
|
||||||
["ъ","Ъ"],
|
["ъ","Ъ","ї","Ї"],
|
||||||
["\\","/"],
|
["/","\\","\u0308","\u0306"], // diaresis, breve
|
||||||
["ж","Ж"],
|
["ж","Ж","џ","Џ"],
|
||||||
["э",'Э'],
|
["э",'Э',"є","Є"],
|
||||||
[".",","],
|
[".",",","/","…"],
|
||||||
[undefined],
|
[undefined],
|
||||||
[undefined],
|
[undefined],
|
||||||
[undefined],
|
[undefined],
|
||||||
@@ -254,27 +254,153 @@ let states = {"keylayouts":[[""],[undefined],
|
|||||||
[undefined],
|
[undefined],
|
||||||
[undefined]
|
[undefined]
|
||||||
],
|
],
|
||||||
"code":0} // practically unused as long as there are no diacritics on the keyboard
|
"code":""} // practically unused as long as there are no diacritics on the keyboard
|
||||||
let reset = () => {
|
let reset = () => {
|
||||||
states.code = 0
|
states.code = 0
|
||||||
}
|
}
|
||||||
|
let diacriticsAcute = {
|
||||||
|
"Е":"Ѐ",
|
||||||
|
"Г":"Ѓ",
|
||||||
|
"К":"Ќ",
|
||||||
|
"И":"Ѝ",
|
||||||
|
|
||||||
|
"е":"ѐ",
|
||||||
|
"г":"ѓ",
|
||||||
|
"к":"ќ",
|
||||||
|
"и":"ѝ"
|
||||||
|
}
|
||||||
|
let diacriticsDescender = {
|
||||||
|
"Ж":"Җ",
|
||||||
|
"З":"Ҙ",
|
||||||
|
"К":"Қ",
|
||||||
|
"Н":"Ң",
|
||||||
|
"С":"Ҫ",
|
||||||
|
"Т":"Ҭ",
|
||||||
|
"Х":"Ҳ",
|
||||||
|
"Ч":"Ҷ",
|
||||||
|
"Ҽ":"Ҿ",
|
||||||
|
"Г":"Ӷ",
|
||||||
|
"Ғ":"Ӻ",
|
||||||
|
"П":"Ԥ",
|
||||||
|
"Һ":"Ԧ",
|
||||||
|
|
||||||
|
"ж":"җ",
|
||||||
|
"з":"ҙ",
|
||||||
|
"к":"қ",
|
||||||
|
"н":"ң",
|
||||||
|
"с":"ҫ",
|
||||||
|
"т":"ҭ",
|
||||||
|
"х":"ҳ",
|
||||||
|
"ч":"ҷ",
|
||||||
|
"ҽ":"ҿ",
|
||||||
|
"г":"ӷ",
|
||||||
|
"ғ":"ӻ",
|
||||||
|
"п":"ԥ",
|
||||||
|
"һ":"ԧ"
|
||||||
|
}
|
||||||
|
let diacriticsStrikethru = {
|
||||||
|
"Г":"Ғ",
|
||||||
|
"К":"Ҟ",
|
||||||
|
"Ү":"Ұ",
|
||||||
|
"Х":"Ӿ",
|
||||||
|
|
||||||
|
"г":"ғ",
|
||||||
|
"к":"ҟ",
|
||||||
|
"ү":"ұ",
|
||||||
|
"х":"ӿ"
|
||||||
|
}
|
||||||
|
let diacriticsHookBelow = {
|
||||||
|
"Г":"Ҕ",
|
||||||
|
"П":"Ҧ",
|
||||||
|
"К":"Ӄ",
|
||||||
|
"Н":"Ӈ",
|
||||||
|
"Ғ":"Ӻ",
|
||||||
|
"Х":"Ӽ",
|
||||||
|
|
||||||
|
"г":"ҕ",
|
||||||
|
"п":"ҧ",
|
||||||
|
"к":"ӄ",
|
||||||
|
"н":"ӈ",
|
||||||
|
"ғ":"ӻ",
|
||||||
|
"х":"ӽ"
|
||||||
|
}
|
||||||
|
let diacriticsDiaresis = {
|
||||||
|
"А":"Ӓ",
|
||||||
|
"Ә":"Ӛ",
|
||||||
|
"Ж":"Ӝ",
|
||||||
|
"З":"Ӟ",
|
||||||
|
"И":"Ӥ",
|
||||||
|
"О":"Ӧ",
|
||||||
|
"Ө":"Ӫ",
|
||||||
|
"Э":"Ӭ",
|
||||||
|
"У":"Ӱ",
|
||||||
|
"Ч":"Ӵ",
|
||||||
|
"Ы":"Ӹ",
|
||||||
|
|
||||||
|
"а":"ӓ",
|
||||||
|
"ә":"ӛ",
|
||||||
|
"ж":"ӝ",
|
||||||
|
"з":"ӟ",
|
||||||
|
"и":"ӥ",
|
||||||
|
"о":"ӧ",
|
||||||
|
"ө":"ӫ",
|
||||||
|
"э":"ӭ",
|
||||||
|
"у":"ӱ",
|
||||||
|
"ч":"ӵ",
|
||||||
|
"ы":"ӹ"
|
||||||
|
}
|
||||||
|
let diacriticsBreve = {
|
||||||
|
"Ж":"Ӂ",
|
||||||
|
"А":"Ӑ",
|
||||||
|
"Е":"Ӗ",
|
||||||
|
"И":"Ӣ",
|
||||||
|
"У":"Ӯ",
|
||||||
|
|
||||||
|
"ж":"ӂ",
|
||||||
|
"а":"ӑ",
|
||||||
|
"е":"ӗ",
|
||||||
|
"и":"ӣ",
|
||||||
|
"у":"ӯ"
|
||||||
|
}
|
||||||
|
let diacriticsMapping = {
|
||||||
|
"\u0329":diacriticsDescender,
|
||||||
|
"\u0301":diacriticsAcute,
|
||||||
|
"\u0308":diacriticsDiaresis,
|
||||||
|
"\u0306":diacriticsBreve,
|
||||||
|
"\u0335":diacriticsStrikethru,
|
||||||
|
"\u0321":diacriticsHookBelow
|
||||||
|
}
|
||||||
let inRange = (s,a,b) => (a <= s && s <= b)
|
let inRange = (s,a,b) => (a <= s && s <= b)
|
||||||
let isDiacritics = (s) => s !== undefined && inRange(s.charCodeAt(0), 0x0300, 0x036F)
|
let isDiacritics = (s) => s !== undefined && inRange(s.charCodeAt(0), 0x0300, 0x036F)
|
||||||
return Object.freeze({"n":"Рус. ЙЦУКЕН (MS)","v":"none","c":"CuriousTo\uA75Bvald","m":"rewrite",
|
return Object.freeze({"n":"Мног. ЙЦУКЕН","v":"none","c":"CuriousTo\uA75Bvald","m":"rewrite",
|
||||||
"t":states.keylayouts.map(it => [it[0],it[1]]),
|
"t":states.keylayouts,
|
||||||
// return: [displayed output, composed output]
|
// return: [displayed output, composed output]
|
||||||
"accept":(headkey,shiftin,altgrin)=>{
|
"accept":(headkey,shiftin,altgrin)=>{
|
||||||
let layer = 1*shiftin// + 2*altgrin
|
let layer = 1*shiftin + 2*altgrin
|
||||||
states.code = 1
|
|
||||||
|
|
||||||
let s = states.keylayouts[headkey][layer]
|
let s = states.keylayouts[headkey][layer]
|
||||||
|
|
||||||
|
// typing seq for diacritics: diacritics THEN a character
|
||||||
if (isDiacritics(s)) {
|
if (isDiacritics(s)) {
|
||||||
return ['1', '']
|
states.code = s
|
||||||
|
return ['0', ' '+s] // todo: insert diacritics placeholder char
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
reset()
|
// has diacritecs
|
||||||
return ['0', s]
|
if (states.code != '') {
|
||||||
|
if (diacriticsMapping[states.code] == undefined) {
|
||||||
|
reset()
|
||||||
|
return ['0','']
|
||||||
|
}
|
||||||
|
let composed = diacriticsMapping[states.code][s]
|
||||||
|
reset()
|
||||||
|
return ['2', composed || s]
|
||||||
|
}
|
||||||
|
// nope!
|
||||||
|
else {
|
||||||
|
reset()
|
||||||
|
return ['0', s]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"backspace":()=>{
|
"backspace":()=>{
|
||||||
@@ -286,5 +412,5 @@ return Object.freeze({"n":"Рус. ЙЦУКЕН (MS)","v":"none","c":"CuriousTo\
|
|||||||
return ''
|
return ''
|
||||||
},
|
},
|
||||||
"reset":()=>{ reset() },
|
"reset":()=>{ reset() },
|
||||||
"composing":()=>(states.code!=0)
|
"composing":()=>(states.code!='')
|
||||||
})
|
})
|
||||||
Reference in New Issue
Block a user