mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-26 10:17:41 +00:00
Behold! Actual chiral output! Supported both by physical keystrokes and osk interaction.
Yet to do: state keys, embedded integration.
This commit is contained in:
parent
4633ebbf34
commit
7a57fa884c
4 changed files with 104 additions and 153 deletions
|
|
@ -1,152 +1,65 @@
|
|||
KeymanWeb.KR(new Keyboard_chirality());
|
||||
|
||||
function Keyboard_chirality() {
|
||||
this.KI = "Keyboard_chirality";
|
||||
this.KN = "Development Chirality Test Keyboard";
|
||||
this.KV = {
|
||||
KMBM: 0x001F,
|
||||
F: ' 1em "Arial"',
|
||||
K102: 0,
|
||||
KLS: { 'default': new Array("`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "", "", "", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "\\", "", "", "", "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "", "", "", "", "", "", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "", "", "", "", "", ""),
|
||||
'shift': new Array("~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+", "", "", "", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "{", "}", "|", "", "", "", "A", "S", "D", "F", "G", "H", "J", "K", "L", ":", "\"", "", "", "", "", "", "", "Z", "X", "C", "V", "B", "N", "M", "<", ">", "?", "", "", "", "", "", ""),
|
||||
'leftctrl': new Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ʍ", "ə", "ɹ", "ð", "ʏ", "ʉ", "ɨ", "ɵ", "ʘ", "", "", "", "", "", "", "ɑ", "ʃ", "", "ɸ", "ɣ", "ɥ", "ɟ", "", "ɬ", "ː", "", "", "", "", "", "", "", "ʒ", "χ", "ç", "ʋ", "β", "ɲ", "", "", "", "", "", "", "", "", "", ""),
|
||||
'leftctrl-shift': new Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ʡ", "", "ɘ", "ʀ", "θ", "", "ɯ", "ɪ", "", "", "", "", "", "", "", "", "ɒ", "ᶘ", "", "", "ɢ", "ʜ", "", "", "ʟ", "ː", "", "", "", "", "", "", "", "ᶚ", "", "", "", "ʙ", "ɴ", "", "", "", "ʔ", "", "", "", "", "", ""),
|
||||
'leftalt': new Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ɛ", "ɽ", "ʈ", "ɥ", "ʊ", "", "ɔ", "", "", "", "", "", "", "", "æ", "", "ɖ", "", "ɡ", "ɦ", "ʝ", "", "ɭ", "", "", "", "", "", "", "", "", "ʐ", "", "ɕ", "", "", "ɳ", "", "", "", "", "", "", "", "", "", ""),
|
||||
'rightalt': new Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ʠ", "ɰ", "ɜ", "ɾ", "ƭ", "", "ʌ", "", "ø", "ƥ", "", "", "", "", "", "", "ɐ", "σ", "ɗ", "", "ɠ", "ħ", "ʄ", "ƙ", "ɮ", "", "", "", "", "", "", "", "", "ʑ", "", "ƈ", "", "ɓ", "ŋ", "ɱ", "", "", "", "", "", "", "", "", ""),
|
||||
'leftalt-shift': new Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ʢ", "", "œ", "ɻ", "", "", "", "ᵻ", "ɞ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ʎ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""),
|
||||
'rightalt-shift': new Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ɶ", "ʁ", "", "", "ᵾ", "ᵼ", "ɤ", "", "", "", "", "", "", "", "ᴂ", "", "", "", "ʛ", "ɧ", "", "", "ɺ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
|
||||
this.KI = "Keyboard_chirality";
|
||||
this.KN = "Development Chirality Test Keyboard";
|
||||
this.KV = {
|
||||
KMBM: 0x001F,
|
||||
F: ' 1em "Arial"',
|
||||
K102: 0,
|
||||
KLS: { 'default': new Array("`", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "", "", "", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "\\", "", "", "", "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "", "", "", "", "", "", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "", "", "", "", "", ""),
|
||||
'shift': new Array("~", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+", "", "", "", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "{", "}", "|", "", "", "", "A", "S", "D", "F", "G", "H", "J", "K", "L", ":", "\"", "", "", "", "", "", "", "Z", "X", "C", "V", "B", "N", "M", "<", ">", "?", "", "", "", "", "", ""),
|
||||
'leftctrl': new Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ʍ", "ə", "ɹ", "ð", "ʏ", "ʉ", "ɨ", "ɵ", "ʘ", "", "", "", "", "", "", "ɑ", "ʃ", "", "ɸ", "ɣ", "ɥ", "ɟ", "", "ɬ", "ː", "", "", "", "", "", "", "", "ʒ", "χ", "ç", "ʋ", "β", "ɲ", "", "", "", "", "", "", "", "", "", ""),
|
||||
'leftctrl-shift': new Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ʡ", "", "ɘ", "ʀ", "θ", "", "ɯ", "ɪ", "", "", "", "", "", "", "", "", "ɒ", "ᶘ", "", "", "ɢ", "ʜ", "", "", "ʟ", "ː", "", "", "", "", "", "", "", "ᶚ", "", "", "", "ʙ", "ɴ", "", "", "", "ʔ", "", "", "", "", "", ""),
|
||||
'leftalt': new Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ɛ", "ɽ", "ʈ", "ɥ", "ʊ", "", "ɔ", "", "", "", "", "", "", "", "æ", "", "ɖ", "", "ɡ", "ɦ", "ʝ", "", "ɭ", "", "", "", "", "", "", "", "", "ʐ", "", "ɕ", "", "", "ɳ", "", "", "", "", "", "", "", "", "", ""),
|
||||
'rightalt': new Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ʠ", "ɰ", "ɜ", "ɾ", "ƭ", "", "ʌ", "", "ø", "ƥ", "", "", "", "", "", "", "ɐ", "σ", "ɗ", "", "ɠ", "ħ", "ʄ", "ƙ", "ɮ", "", "", "", "", "", "", "", "", "ʑ", "", "ƈ", "", "ɓ", "ŋ", "ɱ", "", "", "", "", "", "", "", "", ""),
|
||||
'leftalt-shift': new Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ʢ", "", "œ", "ɻ", "", "", "", "ᵻ", "ɞ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ʎ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""),
|
||||
'rightalt-shift': new Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ɶ", "ʁ", "", "", "ᵾ", "ᵼ", "ɤ", "", "", "", "", "", "", "", "ᴂ", "", "", "", "ʛ", "ɧ", "", "", "ɺ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
|
||||
}
|
||||
};
|
||||
this.KH = '';
|
||||
this.KM = 0;
|
||||
|
||||
this.dfltCodes = ["K_BKQUOTE","K_1","K_2","K_3","K_4","K_5","K_6","K_7","K_8","K_9","K_0",
|
||||
"K_HYPHEN","K_EQUAL","K_*","K_*","K_*","K_Q","K_W","K_E","K_R","K_T",
|
||||
"K_Y","K_U","K_I","K_O","K_P","K_LBRKT","K_RBRKT","K_BKSLASH","K_*",
|
||||
"K_*","K_*","K_A","K_S","K_D","K_F","K_G","K_H","K_J","K_K","K_L",
|
||||
"K_COLON","K_QUOTE","K_*","K_*","K_*","K_*","K_*","K_oE2",
|
||||
"K_Z","K_X","K_C","K_V","K_B","K_N","K_M","K_COMMA","K_PERIOD",
|
||||
"K_SLASH","K_*","K_*","K_*","K_*","K_*","K_SPACE"];
|
||||
|
||||
this.gs = function (t, e) {
|
||||
return this.g0(t, e);
|
||||
};
|
||||
this.g0 = function (t, e) {
|
||||
var k = KeymanWeb, r = 0, m = 0;
|
||||
|
||||
// Handwritten time!
|
||||
var kls = this.KV.KLS;
|
||||
|
||||
var layers = ['leftctrl', 'default', 'shift', 'leftctrl', 'leftctrl-shift', 'leftalt', 'rightalt', 'leftalt-shift', 'rightalt-shift'];
|
||||
|
||||
// Maps keystrokes by base key-codes and array into the key symbols displayed in KLS.
|
||||
for(var i = 0; i < layers.length; i++) {
|
||||
// Obtain the modifier code to match for the selected layer.
|
||||
var modCode = k.osk.modifierCodes['VIRTUAL_KEY'] | k.osk.getModifierState(layers[i]);
|
||||
var layer = layers[i];
|
||||
|
||||
for(var key=0; key < kls[layer].length; key++) {
|
||||
var keySymbol = this.dfltCodes[key];
|
||||
|
||||
if(keySymbol == "K_*") {
|
||||
continue;
|
||||
} else if(kls[layer][key] != '') {
|
||||
if (k.KKM(e, modCode, k.osk.keyCodes[keySymbol])) {
|
||||
r = m = 1;
|
||||
k.KO(0, t, kls[layer][key]);
|
||||
return r;
|
||||
}
|
||||
}
|
||||
};
|
||||
this.KH = '';
|
||||
this.KM = 0;
|
||||
this.gs = function (t, e) {
|
||||
return 0; //this.g0(t, e);
|
||||
};
|
||||
this.g0 = function (t, e) {
|
||||
// var k = KeymanWeb, r = 0, m = 0;
|
||||
// if (k.KKM(e, 16480, 48)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "໘");
|
||||
// } else if (k.KKM(e, 16480, 49)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "໑");
|
||||
// } else if (k.KKM(e, 16480, 50)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "໒");
|
||||
// } else if (k.KKM(e, 16480, 51)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "໓");
|
||||
// } else if (k.KKM(e, 16480, 52)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "໔");
|
||||
// } else if (k.KKM(e, 16480, 55)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "໕");
|
||||
// } else if (k.KKM(e, 16480, 56)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "໖");
|
||||
// } else if (k.KKM(e, 16480, 57)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "໗");
|
||||
// } else if (k.KKM(e, 16480, 87)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "໐");
|
||||
// } else if (k.KKM(e, 16384, 96)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "0");
|
||||
// } else if (k.KKM(e, 16384, 97)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "1");
|
||||
// } else if (k.KKM(e, 16384, 98)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "2");
|
||||
// } else if (k.KKM(e, 16384, 99)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "3");
|
||||
// } else if (k.KKM(e, 16384, 100)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "4");
|
||||
// } else if (k.KKM(e, 16384, 101)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "5");
|
||||
// } else if (k.KKM(e, 16384, 102)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "6");
|
||||
// } else if (k.KKM(e, 16384, 103)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "7");
|
||||
// } else if (k.KKM(e, 16384, 104)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "8");
|
||||
// } else if (k.KKM(e, 16384, 105)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "9");
|
||||
// } else if (k.KKM(e, 16384, 106)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "*");
|
||||
// } else if (k.KKM(e, 16384, 107)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "+");
|
||||
// } else if (k.KKM(e, 16384, 109)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "-");
|
||||
// } else if (k.KKM(e, 16384, 110)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, ".");
|
||||
// } else if (k.KKM(e, 16384, 111)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "/");
|
||||
// } else if (k.KKM(e, 16480, 187)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "€");
|
||||
// } else if (k.KKM(e, 16480, 189)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "໙");
|
||||
// } else if (k.KKM(e, 16480, 192)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "₭");
|
||||
// } else if (k.KKM(e, 16480, 219)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "[");
|
||||
// } else if (k.KKM(e, 16480, 221)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "]");
|
||||
// }
|
||||
// if (!m && k.KIK(e)) {
|
||||
// r = this.g1(t, e);
|
||||
// }
|
||||
// return r;
|
||||
};
|
||||
// this.g1 = function (t, e) {
|
||||
// var k = KeymanWeb, r = 0, m = 0;
|
||||
// if (k.KKM(e, 16400, 49)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "1");
|
||||
// } else if (k.KKM(e, 16400, 222)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "=");
|
||||
// } else if (k.KKM(e, 16400, 51)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "3");
|
||||
// } else if (k.KKM(e, 16400, 52)) {
|
||||
// r = m = 1;
|
||||
// k.KO(0, t, "4");
|
||||
// } else if (k.KKM(e, 16400, 53) && k.KCM(1, t, "ຳ", 1)) {
|
||||
// r = m = 1;
|
||||
// k.KO(1, t, "໌");
|
||||
// } else if (k.KKM(e, 16400, 53) && k.KA(0, k.KC(1, 1, t), this.s22)) {
|
||||
// r = m = 1;
|
||||
// k.KB(t);
|
||||
// } else if (k.KKM(e, 16400, 53) && k.KA(0, k.KC(1, 1, t), this.s18)) {
|
||||
// r = m = 1;
|
||||
// k.KB(t);
|
||||
// } else if (k.KKM(e, 16400, 53) && k.KA(0, k.KC(1, 1, t), this.s20)) {
|
||||
// r = m = 1;
|
||||
// k.KB(t);
|
||||
// } else if (k.KKM(e, 16400, 53) && k.KA(0, k.KC(1, 1, t), this.s24)) {
|
||||
// r = m = 1;
|
||||
// k.KB(t);
|
||||
// }
|
||||
// return r;
|
||||
// };
|
||||
}
|
||||
}
|
||||
|
||||
return r;
|
||||
};
|
||||
}
|
||||
|
|
@ -2775,9 +2775,37 @@ if(!window['tavultesoft']['keymanweb']['initialized']) {
|
|||
var osk = keymanweb["osk"];
|
||||
|
||||
if(keymanweb.isChiral()) {
|
||||
s.Lmodifiers = (e.shiftKey ? 0x10 : 0);
|
||||
s.Lmodifiers = s.Lmodifiers | (e.ctrlKey ? (e.location == 1 ? osk.modifierCodes['LCTRL'] : osk.modifierCodes['RCTRL']) : 0);
|
||||
s.Lmodifiers = s.Lmodifiers | (e.altKey ? (e.location == 1 ? osk.modifierCodes['LALT'] : osk.modifierCodes['RALT']) : 0);
|
||||
s.Lmodifiers = (e.shiftKey ? 0x10 : 0);
|
||||
|
||||
var ctrlEvent = false, altEvent = false;
|
||||
|
||||
switch(s.Lcode) {
|
||||
case osk.keyCodes["K_CONTROL"]:
|
||||
case osk.keyCodes["K_CTRL"]:
|
||||
case osk.keyCodes["K_LCONTROL"]:
|
||||
case osk.keyCodes["K_LCTRL"]:
|
||||
case osk.keyCodes["K_RCONTROL"]:
|
||||
case osk.keyCodes["K_RCTRL"]:
|
||||
ctrlEvent = true;
|
||||
break;
|
||||
case osk.keyCodes["K_ALT"]:
|
||||
case osk.keyCodes["K_LALT"]:
|
||||
case osk.keyCodes["K_LMENU"]:
|
||||
case osk.keyCodes["K_RALT"]:
|
||||
case osk.keyCodes["K_RMENU"]:
|
||||
altEvent = true;
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO: Ensure the keypress is also the CTRL or the ALT for the e.location != 0 check.
|
||||
if(e.ctrlKey) {
|
||||
s.Lmodifiers = s.Lmodifiers | ((e.location != 0 && ctrlEvent) ?
|
||||
(e.location == 1 ? osk.modifierCodes['LCTRL'] : osk.modifierCodes['RCTRL']) : osk.getModifierState(osk.layerId) & 0x0003);
|
||||
}
|
||||
if(e.altKey) {
|
||||
s.Lmodifiers = s.Lmodifiers | ((e.location != 0 && altEvent) ?
|
||||
(e.location == 1 ? osk.modifierCodes['LALT'] : osk.modifierCodes['RALT']) : osk.getModifierState(osk.layerId) & 0x000C);
|
||||
}
|
||||
} else {
|
||||
s.Lmodifiers =
|
||||
(e.shiftKey ? 0x10 : 0) |
|
||||
|
|
@ -2787,7 +2815,8 @@ if(!window['tavultesoft']['keymanweb']['initialized']) {
|
|||
|
||||
//s.LisVirtualKey = (e.charCode != null && (e.charCode == 0 || (s.Lmodifiers & 0x60) != 0)) || e.type != 'keypress';
|
||||
//s.LisVirtualKeyCode = false;
|
||||
s.LisVirtualKeyCode = (typeof e.charCode != 'undefined' && e.charCode != null && (e.charCode == 0 || (s.Lmodifiers & 0x60) != 0));
|
||||
// The 0x6F used to be 0x60 - this adjustment now includes the chiral alt and ctrl modifiers in that check.
|
||||
s.LisVirtualKeyCode = (typeof e.charCode != 'undefined' && e.charCode != null && (e.charCode == 0 || (s.Lmodifiers & 0x6F) != 0));
|
||||
s.LisVirtualKey = s.LisVirtualKeyCode || e.type != 'keypress';
|
||||
|
||||
return s;
|
||||
|
|
|
|||
|
|
@ -290,13 +290,21 @@ if(!window['tavultesoft']['keymanweb']['initialized']) {
|
|||
var retVal = 0; // I3318
|
||||
var keyCode = (e.Lcode == 173 ? 189 : e.Lcode); //I3555 (Firefox hyphen issue)
|
||||
|
||||
var bitmask;
|
||||
if(keymanweb._ActiveKeyboard['KV']) {
|
||||
bitmask = keymanweb._ActiveKeyboard['KV']['KMBM'];
|
||||
if(typeof bitmask == 'undefined' || !bitmask) {
|
||||
bitmask = osk.modifierBitmasks["NON_CHIRAL"];
|
||||
}
|
||||
}
|
||||
|
||||
if(e.vkCode > 255) keyCode = e.vkCode; // added to support extended (touch-hold) keys for mnemonic layouts
|
||||
|
||||
if(e.LisVirtualKey || keyCode > 255)
|
||||
{
|
||||
if((Lruleshift & 0x4000) == 0x4000 || (keyCode > 255)) // added keyCode test to support extended keys
|
||||
{
|
||||
retVal = ((Lrulekey == keyCode) && ((Lruleshift&0x7F) == e.Lmodifiers)); //I3318, I3555
|
||||
retVal = ((Lrulekey == keyCode) && ((Lruleshift & bitmask) == e.Lmodifiers)); //I3318, I3555
|
||||
}
|
||||
}
|
||||
else if((Lruleshift & 0x4000) == 0)
|
||||
|
|
|
|||
|
|
@ -33,7 +33,8 @@ if(!window['tavultesoft']['keymanweb']['initialized']) {
|
|||
"NUM_LOCK":0x0400,
|
||||
"NO_NUM_LOCK":0x0800,
|
||||
"SCROLL_LOCK":0x1000,
|
||||
"NO_SCROLL_LOCK":0x2000
|
||||
"NO_SCROLL_LOCK":0x2000,
|
||||
"VIRTUAL_KEY":0x4000
|
||||
};
|
||||
|
||||
osk.modifierBitmasks = {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue