working backspace button :)

This commit is contained in:
remi 2022-05-07 11:55:45 +02:00
parent c01ebee0ae
commit ad22fd715e

148
ime.js
View File

@ -22,17 +22,15 @@ function imeDown(keyEvent, inputField) {
switch (keyEvent.key) {
case "Backspace":
if (selected == -1) {
let latest = input[input.length]
console.log(latest);
if (currentWord.join("") == "") {
currentWord = input.pop() || [];
} else {
currentWord.pop();
imeRestore(currentWord);
// currentWord.pop();
}
} else {
input[selected].pop();
imeRestore(input[selected]);
// input[selected].pop();
if (input[selected].join("") == "") {
input.splice(selected,1);
imeMove("left");
@ -190,8 +188,17 @@ function getUnicodeConsonant(consonant, scv) {
return String.fromCharCode(parseInt("E" + hConsonants[consonant] + "" + scv, 16));
}
function inverse(obj){
var retobj = {};
for(var key in obj){
retobj[obj[key]] = key;
}
return retobj;
}
let hVowelsK = Object.keys(hVowels)
let hConsonantsK = Object.keys(hConsonants);
let hConsonantsR = inverse(hConsonants);
function debugInput(key) {
console.log("pre "+key+": inputstate - "+inputState +", statestate - "+ stateState);
@ -207,6 +214,128 @@ function imeReset() {
inputState = 0;
inputFull = [];
inputCurrent = "";
if (selected == -1) {
currentWord = [];
} else {
input[selected] = [];
}
}
function imeInfo(decHex) {
try {
let hex = decHex.codePointAt(0).toString(16);
hex[1] = parseInt(hex[1], 16);
hex[2] = parseInt(hex[2], 16);
hex[3] = parseInt(hex[3], 16);
let ka = (hex[1] == 0 && hex[2] == 0) ? "a" : "k";
if (ka == "k") {
if (hex[3] == 1) {
//trailing
return([ka,"trailing"])
} else if (hex[3] == 0) {
//standalone
//full reset / no restore necessary
return([ka,"standalone"])
} else {
//composing
return([ka,"composing"])
}
} else {
if (hex[3] <= 8) {
//standalone
return([ka,"standalone"])
} else {
//trailing
return([ka,"trailing"])
}
}
} catch {
return "";
}
}
function imeChange(inState, stState, pop, array) {
inputState = inState;
stateState = stState;
if (pop) {
array.pop();
}
inputFull = array;
}
function imeRestore(array) {
let hex = array[array.length-1].codePointAt(0).toString(16);
hex[1] = parseInt(hex[1], 16);
hex[2] = parseInt(hex[2], 16);
hex[3] = parseInt(hex[3], 16);
let previous = imeInfo(array[array.length-2])[1];
let ka = (hex[1] == 0 && hex[2] == 0) ? "a" : "k";
if (ka == "k") {
if (hex[3] == 1) {
//trailing
if (previous == "trailing") {
//trailing twice
console.log("2.1");
imeChange(2,1,true,array);
} else {
//trailing once
console.log("2.0");
imeChange(2,0,true,array);
}
} else if (hex[3] == 0) {
console.log(array.length);
if (array.length != 1) {
//0.1, i think?
console.log("0.1");
imeChange(0,1,true,array);
} else {
//standalone
console.log("full reset");
imeReset();
}
} else {
//composing
if (previous == "standalone") {
//0.1??
//recreate?? last digit???
let c = hConsonantsR[[hex[1], hex[2]].join("").toUpperCase()];
array.pop();
array.push(getUnicodeConsonant(c, "standalone"));
inputCurrent = c;
console.log("0.1");
imeChange(0,1,false,array);
} else {
//0.2???? fuck it lets try and find out ig
//recreate?? last digit???
let c = hConsonantsR[[hex[1], hex[2]].join("").toUpperCase()];
array.pop();
array.push(getUnicodeConsonant(c, "standalone"));
inputCurrent = c;
console.log("0.2");
imeChange(0,2,false,array);
}
}
} else {
if (hex[3] <= 8) {
//standalone
console.log("full reset");
imeReset();
} else {
//trailing
if (previous == "trailing") {
//trailing twice
console.log("2.1");
imeChange(2,1,true,array);
} else {
//trailing once
console.log("2.0");
imeChange(2,0,true,array);
}
}
}
}
function imeInput(key) {
@ -261,11 +390,8 @@ function imeInput(key) {
inputState = 3;
}
break;
case 3: //do nothing (i.e "waiting 4 u 2 hit enter")
break;
case 4: //cleanup (reset vars)
stateState = 0;
inputCurrent = "";
case 3: //go to next word uwu
//todo :)
break;
}
}