From 9344faa8784b4fa8660062380bd216b85ae9848c Mon Sep 17 00:00:00 2001 From: minjaesong Date: Mon, 15 Nov 2021 22:39:02 +0900 Subject: [PATCH] bulgarian keyboard --- assets/keylayout/bg_bg_bds.ime | 416 +++++++++++++++++++++++++++++++++ 1 file changed, 416 insertions(+) create mode 100644 assets/keylayout/bg_bg_bds.ime diff --git a/assets/keylayout/bg_bg_bds.ime b/assets/keylayout/bg_bg_bds.ime new file mode 100644 index 000000000..4d378a2cd --- /dev/null +++ b/assets/keylayout/bg_bg_bds.ime @@ -0,0 +1,416 @@ +let states = {"keylayouts":[[""],[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +["0","`","]","}"], +["1","!","÷","≈"], +["2","?","¤","∞"], +["3","+","§","₴"], +["4",'"',"$","€"], +["5","%","°",""], +["6","=","<","≤"], +["7",":",">","≥"], +["8","/","•","×"], +["9","-","[","{"], +["*"], +["#"], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +["ь","Ь","ҧ","Ҧ"], +["ф","Ф","ҩ","Ҩ"], +["ъ","Ъ","ї","Ї"], +["а","А","ҟ","Ҟ"], +["е","Е","ҝ","Ҝ"], +["о","О","ө","Ө"], +["ж","Ж","џ","Џ"], +["г","Г","ґ","Ґ"], +["с","С","ҽ","Ҽ"], +["т","Т","ћ","Ћ"], +["н","Н","њ","Њ"], +["в","В","ү","Ү"], +["п","П","ҡ","Ҡ"], +["х","Х","ҳ","Ҳ"], +["д","Д","ђ","Ђ"], +["з","З","ѕ","Ѕ"], +[",","ы","і","І"], +["и","И","\u0335","\u0321"], // strikethru, hook below +["я","Я","ә","Ә"], +["ш","Ш","ѓ","Ѓ"], +["к","К","ќ","Ќ"], +["э",'Э',"є","Є"], +["у","У","ў","Ў"], +["й","Й","ј","Ј"], +["щ","Щ","ӡ","Ӡ"], +["ю","Ю","ғ","Ғ"], +["р","Р","«","„"], +["л","Л","»","“"], +[undefined], +[undefined], +[undefined], +[undefined], +[undefined], +[" "], +[undefined], +[undefined], +[undefined], +["\n"], +["\x08"], +["ё","Ё","ӏ","Ӏ"], +["-","_","—","–"], +[".","~","≠","±"], +["ц","Ц","ҵ","Ҵ"], +[";","§","\u0308","\u0306"], // diaresis, breve +[")","(","\\","|"], +["м","М","\u0329","\u0301"], // "descender", acute +["ч","Ч","һ","Һ"], +["б","Б","љ","Љ"], +[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 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 isDiacritics = (s) => s !== undefined && inRange(s.charCodeAt(0), 0x0300, 0x036F) +return Object.freeze({"n":"\uDBBF\uDFC1Бъл. Многоезична\uDBBF\uDFC0","v":"none","c":"CuriousTo\uA75Bvald","m":"rewrite", +"t":states.keylayouts, +// return: [displayed output, composed output] +"accept":(headkey,shiftin,altgrin)=>{ + let layer = 1*shiftin + 2*altgrin + + let s = states.keylayouts[headkey][layer] + + // typing seq for diacritics: diacritics THEN a character + if (isDiacritics(s)) { + states.code = s + return ['0', ' '+s] // todo: insert diacritics placeholder char + } + else { + // has diacritecs + 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":()=>{ + reset() + return '' +}, +"end":()=>{ + reset() + return '' +}, +"reset":()=>{ reset() }, +"composing":()=>(states.code!='') +}) \ No newline at end of file