From 1f558e08d3fdb991627062845c188fd4bf4583c8 Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Mon, 26 Feb 2018 15:14:02 +0700 Subject: [PATCH] Full Developer KMW compilation update complete. --- .../json/engine_tests/deadkeys.json | 2 +- .../json/keyboards/temp_test_deadkeys.json | 10 - .../keyboards/temp_test_deadkeys_hand.js | 377 ------------------ .../resources/keyboards/test_deadkeys.js | 336 ++++++++++------ .../resources/keyboards/test_deadkeys.kmn | 8 +- .../resources/keyboards/test_deadkeys.kmx | Bin 6768 -> 7002 bytes .../TIKE/compile/CompileKeymanWeb.pas | 12 +- 7 files changed, 230 insertions(+), 515 deletions(-) delete mode 100644 web/unit_tests/json/keyboards/temp_test_deadkeys.json delete mode 100644 web/unit_tests/resources/keyboards/temp_test_deadkeys_hand.js diff --git a/web/unit_tests/json/engine_tests/deadkeys.json b/web/unit_tests/json/engine_tests/deadkeys.json index 8939238803..f831728cfe 100644 --- a/web/unit_tests/json/engine_tests/deadkeys.json +++ b/web/unit_tests/json/engine_tests/deadkeys.json @@ -2,7 +2,7 @@ "keyboard": { "id": "test_deadkeys", "name": "Keyman Deadkey Stress-Tester", - "filename": "resources/keyboards/temp_test_deadkeys_hand.js", + "filename": "resources/keyboards/test_deadkeys.js", "languages": {} }, "inputTestSets": [ diff --git a/web/unit_tests/json/keyboards/temp_test_deadkeys.json b/web/unit_tests/json/keyboards/temp_test_deadkeys.json deleted file mode 100644 index 0d97c6d565..0000000000 --- a/web/unit_tests/json/keyboards/temp_test_deadkeys.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "id": "test_deadkeys", - "name":"Keyman Deadkey Stress-Tester", - "languages":{ - "id":"en", - "name": "English", - "region": "World" - }, - "filename":"resources/keyboards/temp_test_deadkeys_hand.js" -} \ No newline at end of file diff --git a/web/unit_tests/resources/keyboards/temp_test_deadkeys_hand.js b/web/unit_tests/resources/keyboards/temp_test_deadkeys_hand.js deleted file mode 100644 index 2a7c7c5d51..0000000000 --- a/web/unit_tests/resources/keyboards/temp_test_deadkeys_hand.js +++ /dev/null @@ -1,377 +0,0 @@ - -KeymanWeb.KR(new Keyboard_test_deadkeys()); - -function Keyboard_test_deadkeys() -{ - - this.KI="Keyboard_test_deadkeys"; - this.KN="Keyman Deadkey Stress-Tester"; - this.KMINVER="10.0"; - this.KV={F:' 1em "Arial"',K102:0}; - this.KDU=0; - this.KLS={ - - }; - this.KV.BK=(function(x){ - var - empty=Array.apply(null, Array(65)).map(String.prototype.valueOf,""), - result=[], v, i, - modifiers=['default','shift','ctrl','shift-ctrl','alt','shift-alt','ctrl-alt','shift-ctrl-alt']; - for(i=modifiers.length-1;i>=0;i--) { - v = x[modifiers[i]]; - if(v || result.length > 0) { - result=(v ? v : empty).slice().concat(result); - } - } - return result; - })(this.KLS); - this.KH=''; - this.KM=0; - this.KBVER="1.0"; - this.KMBM=0x0010; - this.s_deadnums=[{d:0},{d:1},{d:2},{d:3},{d:4},{d:5},{d:6},{d:7},{d:8},{d:9}]; - this.s_livenums="0123456789"; - this.s_liveQwerty="qwerty"; - this.s_deadQwerty=[{d:10},{d:11},{d:12},{d:13},{d:14},{d:15}]; - this.KVER="10.0.1014.0"; - this.gs=function(t,e) { - return this.g_main(t,e); - }; - this.g_main=function(t,e) { - var k=KeymanWeb,r=0,m=0; - if(k.KKM(e, 0x4000, 0xBE)&&k.KFCM(7,t,['(','o',')',{t:'d',d:18},'(','o',')'])) { // Line 51 - r=m=1; - k.KDC(7,t); - k.KO(0,t,"dk(o)"); - } - else if(k.KKM(e, 0x4000, 0xBE)&&k.KFCM(4,t,[{t:'d',d:18},'(','m',')'])) { // Line 45 - r=m=1; - k.KDC(4,t); - k.KO(0,t,"dk(m)"); - } - else if(k.KKM(e, 0x4000, 0xBE)&&k.KFCM(4,t,['(','n',')',{t:'d',d:18}])) { // Line 48 - r=m=1; - k.KDC(4,t); - k.KO(0,t,"dk(n)"); - } - else if(k.KKM(e, 0x4000, 0xBE)&&k.KFCM(2,t,[{t:'d',d:16},{t:'d',d:17}])) { // Line 40 - r=m=1; - k.KDC(2,t); - k.KO(0,t,"(a)-(s)"); - } - else if(k.KKM(e, 0x4000, 0xBE)&&k.KFCM(2,t,[{t:'d',d:17},{t:'d',d:16}])) { // Line 41 - r=m=1; - k.KDC(2,t); - k.KO(0,t,"(s)+(a)"); - } - // ---- START: Unsure where Developer would place these lines, which are fully handwritten. ---- // - else if(k.KKM(e, 0x4000, 0xBE)&&k.KFCM(3,t,['?',{t:'a',a:this.s_deadQwerty},{t:'c',c:2}])) { // Line 78 - r=m=1; - k.KDC(3,t); - k.KO(0,t,'('); - k.KIO(0,this.s_liveQwerty,2,t); - k.KIO(0,this.s_liveQwerty,2,t); - k.KO(0,t,')'); - } - else if(k.KKM(e, 0x4010, 0x31)&&k.KFCM(1,t,[{t:'a',a:this.s_liveQwerty}])) { // Line 77 - r=m=1; - k.KDC(3,t); - k.KO(0,t,'?'); - k.KIO(0,this.s_deadQwerty,1,t); - k.KIO(0,this.s_deadQwerty,1,t); - } - else if(k.KKM(e, 0x4000, 0xBE)&&k.KFCM(1,t,[{t:'a',a:this.s_deadnums}])) { // Line 76 - r=m=1; - k.KDC(1,t); - k.KO(0,t,'#'); - k.KIO(0,this.s_livenums,1,t); - } - // ---- END: Unsure where Developer would place these lines, which are fully handwritten. ---- // - else if(k.KKM(e, 0x4000, 0x30)) { // Line 64 - r=m=1; - k.KDO(0,t,0); - } - else if(k.KKM(e, 0x4000, 0x31)) { // Line 65 - r=m=1; - k.KDO(0,t,1); - } - else if(k.KKM(e, 0x4000, 0x32)) { // Line 66 - r=m=1; - k.KDO(0,t,2); - } - else if(k.KKM(e, 0x4000, 0x33)) { // Line 67 - r=m=1; - k.KDO(0,t,3); - } - else if(k.KKM(e, 0x4000, 0x34)) { // Line 68 - r=m=1; - k.KDO(0,t,4); - } - else if(k.KKM(e, 0x4000, 0x35)) { // Line 69 - r=m=1; - k.KDO(0,t,5); - } - else if(k.KKM(e, 0x4000, 0x36)) { // Line 70 - r=m=1; - k.KDO(0,t,6); - } - else if(k.KKM(e, 0x4000, 0x37)) { // Line 71 - r=m=1; - k.KDO(0,t,7); - } - else if(k.KKM(e, 0x4000, 0x38)) { // Line 72 - r=m=1; - k.KDO(0,t,8); - } - else if(k.KKM(e, 0x4000, 0x39)) { // Line 73 - r=m=1; - k.KDO(0,t,9); - } - else if(k.KKM(e, 0x4010, 0xBF)) { // Line 125 - r=m=1; - k.KO(0,t,"ab > (a)(b) tests basic deadkey\rb > (b) only matches if \"a\" not pressed first\rbb > (b)+(b) Missing deadkey does not trigger match.\rbab > (b)+(a)+(b) deadkey at end of context\rac > x tests basic deadkey\rade > (a)(d)(e) deadkey at start of context\rfade > (f)-(a)-(d)-(e) deadkey in middle of context\ras. > (a)-(s) defined deadkey order (1/2)\rsa. > (s)+(a) defined deadkey order (2/2)\rm. > dk(m) deadkey output then letters\rn. > dk(n) letters output then deadkey\ro. > dk(o) letters, deadkey, letters\rpqr > (p)(q)(r) deadkey, unmatched, letters\rPQR > (P)(Q)(R) deadkey, deadkey, match, match\r12bb > success deadkey reordering (with the following)\r21bb > success \r21b > dead2 \r34bb > success \r43bb > success \rABCDE > success deadkey output before match(group) rule\r1. > #1 deadkey matched by any\rq! > ? same as above, with extra deadkey output.\rq!. > (qq) deadkey matched by context() in context\r\r"); - } - else if(k.KKM(e, 0x4010, 0x41)) { // Line 93 - r=m=1; - k.KDO(0,t,16); - } - else if(k.KKM(e, 0x4010, 0x42)&&k.KFCM(1, t, [{t:'d',d:16}])) { // Line 94 - r=m=1; - k.KDC(1,t); - k.KO(0,t,"ab"); - k.KDO(-1,t,21); - } - else if(k.KKM(e, 0x4010, 0x43)&&k.KFCM(1, t, [{t:'d',d:22}])) { // Line 95 - r=m=1; - k.KDC(1,t); - k.KO(0,t,"abc"); - } - else if(k.KKM(e, 0x4010, 0x44)&&k.KFCM(3,t,['a','b','c'])) { // Line 92 - r=m=1; - k.KDC(3,t); - k.KO(0,t,"$abc$d"); - } - else if(k.KKM(e, 0x4010, 0x45)&&k.KFCM(4,t,['a','b',{t:'d',d:23},'d'])) { // Line 96 - r=m=1; - k.KDC(4,t); - k.KO(0,t,"success"); - } - else if(k.KKM(e, 0x4010, 0x50)) { // Line 58 - r=m=1; - k.KDO(0,t,20); - k.KDO(-1,t,20); - k.KO(-1,t,"(P)"); - } - else if(k.KKM(e, 0x4010, 0x51)&&k.KFCM(4,t,[{t:'d',d:20},'(','P',')'])) { // Line 59 - r=m=1; - k.KDC(4,t); - k.KO(0,t,"(P)(Q)"); - } - else if(k.KKM(e, 0x4010, 0x52)&&k.KFCM(8,t,[{t:'d',d:20},{t:'d',d:20},'(','P',')','(','Q',')'])) { // Line 61 - r=m=1; - k.KDC(8,t); - k.KO(0,t,"ERROR"); - } - else if(k.KKM(e, 0x4010, 0x52)&&k.KFCM(7,t,[{t:'d',d:20},'(','P',')','(','Q',')'])) { // Line 60 - r=m=1; - k.KDC(7,t); - k.KO(0,t,"(P)(Q)(R)"); - } - else if(k.KKM(e, 0x4000, 0x41)) { // Line 18 - r=m=1; - k.KDO(0,t,16); - } - else if(k.KKM(e, 0x4000, 0x42)&&k.KFCM(6,t,[{t:'d',d:2},'d','e','a','d','1'])) { // Line 84 - r=m=1; - k.KDC(6,t); - k.KO(0,t,"ERROR"); - } - else if(k.KKM(e, 0x4000, 0x42)&&k.KFCM(6,t,[{t:'d',d:1},'d','e','a','d','2'])) { // Line 85 - r=m=1; - k.KDC(6,t); - k.KO(0,t,"success"); - } - else if(k.KKM(e, 0x4000, 0x42)&&k.KFCM(6,t,[{t:'d',d:4},'d','e','a','d','3'])) { // Line 89 - r=m=1; - k.KDC(6,t); - k.KO(0,t,"success"); - } - else if(k.KKM(e, 0x4000, 0x42)&&k.KFCM(6,t,[{t:'d',d:3},'d','e','a','d','4'])) { // Line 90 - r=m=1; - k.KDC(6,t); - k.KO(0,t,"ERROR"); - } - else if(k.KKM(e, 0x4000, 0x42)&&k.KFCM(4,t,['(','b',')',{t:'d',d:16}])) { // Line 24 - r=m=1; - k.KDC(4,t); - k.KO(0,t,"(b)+(a)+(b)"); - } - else if(k.KKM(e, 0x4000, 0x42)&&k.KFCM(3,t,['(','b',')'])) { // Line 23 - r=m=1; - k.KDC(3,t); - k.KO(0,t,"(b)+(b)"); - } - else if(k.KKM(e, 0x4000, 0x42)&&k.KFCM(1, t, [{t:'d',d:16}])) { // Line 19 - r=m=1; - k.KDC(1,t); - k.KO(0,t,"(a)(b)"); - } - else if(k.KKM(e, 0x4000, 0x42)&&k.KFCM(1, t, [{t:'d',d:2}])) { // Line 82 - r=m=1; - k.KDC(1,t); - k.KO(0,t,"dead2"); - } - else if(k.KKM(e, 0x4000, 0x42)&&k.KFCM(1, t, [{t:'d',d:1}])) { // Line 83 - r=m=1; - k.KDC(1,t); - k.KO(0,t,"dead1"); - } - else if(k.KKM(e, 0x4000, 0x42)&&k.KFCM(1, t, [{t:'d',d:4}])) { // Line 87 - r=m=1; - k.KDC(1,t); - k.KO(0,t,"dead4"); - } - else if(k.KKM(e, 0x4000, 0x42)&&k.KFCM(1, t, [{t:'d',d:3}])) { // Line 88 - r=m=1; - k.KDC(1,t); - k.KO(0,t,"dead3"); - } - else if(k.KKM(e, 0x4000, 0x42)) { // Line 20 - r=m=1; - k.KO(0,t,"(b)"); - } - else if(k.KKM(e, 0x4000, 0x43)&&k.KFCM(1, t, [{t:'d',d:16}])) { // Line 27 - r=m=1; - k.KDC(1,t); - k.KO(0,t,"x"); - } - else if(k.KKM(e, 0x4000, 0x44)) { // Line 30 - r=m=1; - k.KO(0,t,"d"); - } - else if(k.KKM(e, 0x4000, 0x45)&&k.KFCM(3,t,['f',{t:'d',d:16},'d'])) { // Line 35 - r=m=1; - k.KDC(3,t); - k.KO(0,t,"(f)-(a)-(d)-(e)"); - } - else if(k.KKM(e, 0x4000, 0x45)&&k.KFCM(2,t,[{t:'d',d:16},'d'])) { // Line 34 - r=m=1; - k.KDC(2,t); - k.KO(0,t,"(a)(d)(e)"); - } - else if(k.KKM(e, 0x4000, 0x46)) { // Line 31 - r=m=1; - k.KO(0,t,"f"); - } - else if(k.KKM(e, 0x4000, 0x4D)) { // Line 44 - r=m=1; - k.KDO(0,t,18); - k.KO(-1,t,"(m)"); - } - else if(k.KKM(e, 0x4000, 0x4E)) { // Line 47 - r=m=1; - k.KO(0,t,"(n)"); - k.KDO(-1,t,18); - } - else if(k.KKM(e, 0x4000, 0x4F)) { // Line 50 - r=m=1; - k.KO(0,t,"(o)"); - k.KDO(-1,t,18); - k.KO(-1,t,"(o)"); - } - else if(k.KKM(e, 0x4000, 0x50)) { // Line 54 - r=m=1; - k.KDO(0,t,19); - k.KDO(-1,t,10); - k.KO(-1,t,"(p)"); - } - else if(k.KKM(e, 0x4000, 0x51)&&k.KFCM(4,t,[{t:'d',d:10},'(','p',')'])) { // Line 55 - r=m=1; - k.KDC(4,t); - k.KO(0,t,"(p)(q)"); - } - else if(k.KKM(e, 0x4000, 0x52)&&k.KFCM(7,t,[{t:'d',d:19},'(','p',')','(','q',')'])) { // Line 56 - r=m=1; - k.KDC(7,t); - k.KO(0,t,"(p)(q)(r)"); - } - else if(k.KKM(e, 0x4000, 0x53)) { // Line 38 - r=m=1; - k.KDO(0,t,17); - } - if(m) { - - r=this.g_dead_reorder(t,e); - } - if(!m&&k.KIK(e)) { - r=1; - r=this.g_qwerty_out(t,e); - } - return r; - }; - this.g_dead_reorder=function(t,e) { - var k=KeymanWeb,r=1,m=0; - if(k.KFCM(6,t,['$','a','b','c','$','d'])) { // Line 134 - m=1; - k.KDC(6,t); - k.KO(0,t,"ab"); - k.KDO(-1,t,23); - k.KO(-1,t,"d"); - } - else if(k.KFCM(3,t,['a','b',{t:'d',d:21}])) { // Line 133 - m=1; - k.KDC(3,t); - k.KDO(0,t,22); - } - else if(k.KFCM(2,t,[{t:'d',d:2},{t:'d',d:1}])) { // Line 130 - m=1; - k.KDC(2,t); - k.KDO(0,t,1); - k.KDO(-1,t,2); - } - else if(k.KFCM(2,t,[{t:'d',d:3},{t:'d',d:4}])) { // Line 131 - m=1; - k.KDC(2,t); - k.KDO(0,t,4); - k.KDO(-1,t,3); - } - else if(k.KFCM(2,t,[{t:'a',a:this.s_deadnums},{t:'i',i:{o:1,s:this.s_deadnums}}])) { // Line 138 - m=1; - k.KDC(2,t); - k.KO(0,t,'('); - k.KIO(0,this.s_livenums,1,t); - k.KO(0,t,')('); - k.KIO(0,this.s_livenums,1,t); - k.KO(0,t,')'); - } - return r; - }; - this.g_qwerty_out=function(t,e) { - var k=KeymanWeb,r=0,m=0; - if(k.KKM(e, 0x4000, 0x45)) { // Line 145 - r=m=1; - k.KO(0,t,"e"); - } - else if(k.KKM(e, 0x4000, 0x51)) { // Line 143 - r=m=1; - k.KO(0,t,"q"); - } - else if(k.KKM(e, 0x4000, 0x52)) { // Line 146 - r=m=1; - k.KO(0,t,"r"); - } - else if(k.KKM(e, 0x4000, 0x54)) { // Line 147 - r=m=1; - k.KO(0,t,"t"); - } - else if(k.KKM(e, 0x4000, 0x57)) { // Line 144 - r=m=1; - k.KO(0,t,"w"); - } - else if(k.KKM(e, 0x4000, 0x59)) { // Line 148 - r=m=1; - k.KO(0,t,"y"); - } - return r; - }; -} diff --git a/web/unit_tests/resources/keyboards/test_deadkeys.js b/web/unit_tests/resources/keyboards/test_deadkeys.js index 5e3eb0f013..71555a143d 100644 --- a/web/unit_tests/resources/keyboards/test_deadkeys.js +++ b/web/unit_tests/resources/keyboards/test_deadkeys.js @@ -34,284 +34,376 @@ function Keyboard_test_deadkeys() this.KM=0; this.KBVER="1.0"; this.KMBM=modCodes.SHIFT /* 0x0010 */; - this.s_deadnums=".........."; + this.s_deadnums=[{d:0},{d:1},{d:2},{d:3},{d:4},{d:5},{d:6},{d:7},{d:8},{d:9}]; this.s_livenums="0123456789"; this.s_liveQwerty="qwerty"; - this.s_deadQwerty="......"; - this.KVER="10.0.1014.0"; + this.s_deadQwerty=[{d:10},{d:11},{d:12},{d:13},{d:14},{d:15}]; + this.KVER="10.0.700.0"; this.gs=function(t,e) { return this.g_main(t,e); }; this.g_main=function(t,e) { var k=KeymanWeb,r=0,m=0; - if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_PERIOD /* 0xBE */)&&k.KCM(6,t,"(o)",3)&&k.KDM(3,t,18)&&k.KCM(3,t,"(o)",3)) { // Line 52 + if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_1 /* 0x31 */)&&k.KFCM(1,t,[{t:'a',a:this.s_liveQwerty}])) { // Line 77 r=m=1; - k.KO(6,t,"dk(o)"); + k.KDC(1,t); + k.KO(-1,t,"?"); + k.KIO(-1,this.s_deadQwerty,1,t); + k.KIO(-1,this.s_deadQwerty,1,t); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_PERIOD /* 0xBE */)&&k.KDM(3,t,18)&&k.KCM(3,t,"(m)",3)) { // Line 46 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_PERIOD /* 0xBE */)&&k.KFCM(7,t,['(','o',')',{t:'d',d:18},'(','o',')'])) { // Line 51 r=m=1; - k.KO(3,t,"dk(m)"); + k.KDC(7,t); + k.KO(-1,t,"dk(o)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_PERIOD /* 0xBE */)&&k.KCM(3,t,"(n)",3)&&k.KDM(0,t,18)) { // Line 49 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_PERIOD /* 0xBE */)&&k.KFCM(4,t,[{t:'d',d:18},'(','m',')'])) { // Line 45 r=m=1; - k.KO(3,t,"dk(n)"); + k.KDC(4,t); + k.KO(-1,t,"dk(m)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_PERIOD /* 0xBE */)&&k.KDM(0,t,16)&&k.KDM(0,t,17)) { // Line 41 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_PERIOD /* 0xBE */)&&k.KFCM(4,t,['(','n',')',{t:'d',d:18}])) { // Line 48 r=m=1; - k.KO(0,t,"(a)-(s)"); + k.KDC(4,t); + k.KO(-1,t,"dk(n)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_PERIOD /* 0xBE */)&&k.KDM(0,t,17)&&k.KDM(0,t,16)) { // Line 42 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_PERIOD /* 0xBE */)&&k.KFCM(3,t,['?',{t:'a',a:this.s_deadQwerty},{t:'c',c:2}])) { // Line 78 r=m=1; - k.KO(0,t,"(s)+(a)"); + k.KDC(3,t); + k.KO(-1,t,"("); + k.KIO(-1,this.s_liveQwerty,2,t); + k.KIO(-1,this.s_liveQwerty,2,t); + k.KO(-1,t,")"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_0 /* 0x30 */)) { // Line 65 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_PERIOD /* 0xBE */)&&k.KFCM(2,t,[{t:'d',d:16},{t:'d',d:17}])) { // Line 40 r=m=1; - k.KDO(0,t,0); + k.KDC(2,t); + k.KO(-1,t,"(a)-(s)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_1 /* 0x31 */)) { // Line 66 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_PERIOD /* 0xBE */)&&k.KFCM(2,t,[{t:'d',d:17},{t:'d',d:16}])) { // Line 41 r=m=1; - k.KDO(0,t,1); + k.KDC(2,t); + k.KO(-1,t,"(s)+(a)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_2 /* 0x32 */)) { // Line 67 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_PERIOD /* 0xBE */)&&k.KFCM(1,t,[{t:'a',a:this.s_deadnums}])) { // Line 76 r=m=1; - k.KDO(0,t,2); + k.KDC(1,t); + k.KO(-1,t,"#"); + k.KIO(-1,this.s_livenums,1,t); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_3 /* 0x33 */)) { // Line 68 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_0 /* 0x30 */)) { // Line 64 r=m=1; - k.KDO(0,t,3); + k.KDC(0,t); + k.KDO(-1,t,0); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_4 /* 0x34 */)) { // Line 69 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_1 /* 0x31 */)) { // Line 65 r=m=1; - k.KDO(0,t,4); + k.KDC(0,t); + k.KDO(-1,t,1); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_5 /* 0x35 */)) { // Line 70 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_2 /* 0x32 */)) { // Line 66 r=m=1; - k.KDO(0,t,5); + k.KDC(0,t); + k.KDO(-1,t,2); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_6 /* 0x36 */)) { // Line 71 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_3 /* 0x33 */)) { // Line 67 r=m=1; - k.KDO(0,t,6); + k.KDC(0,t); + k.KDO(-1,t,3); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_7 /* 0x37 */)) { // Line 72 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_4 /* 0x34 */)) { // Line 68 r=m=1; - k.KDO(0,t,7); + k.KDC(0,t); + k.KDO(-1,t,4); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_8 /* 0x38 */)) { // Line 73 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_5 /* 0x35 */)) { // Line 69 r=m=1; - k.KDO(0,t,8); + k.KDC(0,t); + k.KDO(-1,t,5); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_9 /* 0x39 */)) { // Line 74 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_6 /* 0x36 */)) { // Line 70 r=m=1; - k.KDO(0,t,9); + k.KDC(0,t); + k.KDO(-1,t,6); + } + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_7 /* 0x37 */)) { // Line 71 + r=m=1; + k.KDC(0,t); + k.KDO(-1,t,7); + } + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_8 /* 0x38 */)) { // Line 72 + r=m=1; + k.KDC(0,t); + k.KDO(-1,t,8); + } + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_9 /* 0x39 */)) { // Line 73 + r=m=1; + k.KDC(0,t); + k.KDO(-1,t,9); } else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_SLASH /* 0xBF */)) { // Line 126 r=m=1; - k.KO(0,t,"ab > (a)(b) tests basic deadkey\rb > (b) only matches if \"a\" not pressed first\rbb > (b)+(b) Missing deadkey does not trigger match.\rbab > (b)+(a)+(b) deadkey at end of context\rac > x tests basic deadkey\rade > (a)(d)(e) deadkey at start of context\rfade > (f)-(a)-(d)-(e) deadkey in middle of context\ras. > (a)-(s) defined deadkey order (1/2)\rsa. > (s)+(a) defined deadkey order (2/2)\rm. > dk(m) deadkey output then letters\rn. > dk(n) letters output then deadkey\ro. > dk(o) letters, deadkey, letters\rpqr > (p)(q)(r) deadkey, unmatched, letters\rPQR > (P)(Q)(R) deadkey, deadkey, match, match\r12bb > success deadkey reordering (with the following)\r21bb > success \r21b > dead2 \r34bb > success \r43bb > success \rABCDE > success deadkey output before match(group) rule\r1. > #1 deadkey matched by any\rq! > ? same as above, with extra deadkey output.\rq!. > (qq) deadkey matched by context() in context\r\r"); + k.KDC(0,t); + k.KO(-1,t,"ab > (a)(b) tests basic deadkey\rb > (b) only matches if \"a\" not pressed first\rbb > (b)+(b) Missing deadkey does not trigger match.\rbab > (b)+(a)+(b) deadkey at end of context\rac > x tests basic deadkey\rade > (a)(d)(e) deadkey at start of context\rfade > (f)-(a)-(d)-(e) deadkey in middle of context\ras. > (a)-(s) defined deadkey order (1/2)\rsa. > (s)+(a) defined deadkey order (2/2)\rm. > dk(m) deadkey output then letters\rn. > dk(n) letters output then deadkey\ro. > dk(o) letters, deadkey, letters\rpqr > (p)(q)(r) deadkey, unmatched, letters\rPQR > (P)(Q)(R) deadkey, deadkey, match, match\r12bb > success deadkey reordering (with the following)\r21bb > success \r21b > dead2 \r34bb > success \r43bb > success \rABCDE > success deadkey output before match(group) rule\r1. > #1 deadkey matched by any\rq! > ? same as above, with extra deadkey output.\rq!. > (qq) deadkey matched by context() in context\r11 > (1)(1) deadkey matched by index() within context.\r\r"); } - else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_A /* 0x41 */)) { // Line 94 + else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_A /* 0x41 */)) { // Line 93 r=m=1; - k.KDO(0,t,16); + k.KDC(0,t); + k.KDO(-1,t,16); } - else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_B /* 0x42 */)&&k.KDM(0,t,16)) { // Line 95 + else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_B /* 0x42 */)&&k.KFCM(1,t,[{t:'d',d:16}])) { // Line 94 r=m=1; - k.KO(0,t,"ab"); + k.KDC(1,t); + k.KO(-1,t,"ab"); k.KDO(-1,t,21); } - else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_C /* 0x43 */)&&k.KDM(0,t,22)) { // Line 96 + else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_C /* 0x43 */)&&k.KFCM(1,t,[{t:'d',d:22}])) { // Line 95 r=m=1; - k.KO(0,t,"abc"); + k.KDC(1,t); + k.KO(-1,t,"abc"); } - else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_D /* 0x44 */)&&k.KCM(3,t,"abc",3)) { // Line 97 + else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_D /* 0x44 */)&&k.KFCM(3,t,['a','b','c'])) { // Line 96 r=m=1; - k.KO(3,t,"$abc$d"); + k.KDC(3,t); + k.KO(-1,t,"$abc$d"); } - else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_E /* 0x45 */)&&k.KCM(3,t,"ab",2)&&k.KDM(1,t,23)&&k.KCM(1,t,"d",1)) { // Line 98 + else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_E /* 0x45 */)&&k.KFCM(4,t,['a','b',{t:'d',d:23},'d'])) { // Line 97 r=m=1; - k.KO(3,t,"success"); + k.KDC(4,t); + k.KO(-1,t,"success"); } - else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_P /* 0x50 */)) { // Line 59 + else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_P /* 0x50 */)) { // Line 58 r=m=1; - k.KDO(0,t,20); + k.KDC(0,t); + k.KDO(-1,t,20); k.KDO(-1,t,20); k.KO(-1,t,"(P)"); } - else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_Q /* 0x51 */)&&k.KDM(3,t,20)&&k.KCM(3,t,"(P)",3)) { // Line 60 + else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_Q /* 0x51 */)&&k.KFCM(4,t,[{t:'d',d:20},'(','P',')'])) { // Line 59 r=m=1; - k.KO(3,t,"(P)(Q)"); + k.KDC(4,t); + k.KO(-1,t,"(P)(Q)"); } - else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_R /* 0x52 */)&&k.KDM(6,t,20)&&k.KDM(6,t,20)&&k.KCM(6,t,"(P)(Q)",6)) { // Line 62 + else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_R /* 0x52 */)&&k.KFCM(8,t,[{t:'d',d:20},{t:'d',d:20},'(','P',')','(','Q',')'])) { // Line 61 r=m=1; - k.KO(6,t,"ERROR"); + k.KDC(8,t); + k.KO(-1,t,"ERROR"); } - else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_R /* 0x52 */)&&k.KDM(6,t,20)&&k.KCM(6,t,"(P)(Q)",6)) { // Line 61 + else if(k.KKM(e, modCodes.SHIFT | modCodes.VIRTUAL_KEY /* 0x4010 */, keyCodes.K_R /* 0x52 */)&&k.KFCM(7,t,[{t:'d',d:20},'(','P',')','(','Q',')'])) { // Line 60 r=m=1; - k.KO(6,t,"(P)(Q)(R)"); + k.KDC(7,t); + k.KO(-1,t,"(P)(Q)(R)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_A /* 0x41 */)) { // Line 19 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_A /* 0x41 */)) { // Line 18 r=m=1; - k.KDO(0,t,16); + k.KDC(0,t); + k.KDO(-1,t,16); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KDM(5,t,2)&&k.KCM(5,t,"dead1",5)) { // Line 85 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KFCM(6,t,[{t:'d',d:2},'d','e','a','d','1'])) { // Line 84 r=m=1; - k.KO(5,t,"ERROR"); + k.KDC(6,t); + k.KO(-1,t,"ERROR"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KDM(5,t,1)&&k.KCM(5,t,"dead2",5)) { // Line 86 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KFCM(6,t,[{t:'d',d:1},'d','e','a','d','2'])) { // Line 85 r=m=1; - k.KO(5,t,"success"); + k.KDC(6,t); + k.KO(-1,t,"success"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KDM(5,t,4)&&k.KCM(5,t,"dead3",5)) { // Line 90 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KFCM(6,t,[{t:'d',d:4},'d','e','a','d','3'])) { // Line 89 r=m=1; - k.KO(5,t,"success"); + k.KDC(6,t); + k.KO(-1,t,"success"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KDM(5,t,3)&&k.KCM(5,t,"dead4",5)) { // Line 91 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KFCM(6,t,[{t:'d',d:3},'d','e','a','d','4'])) { // Line 90 r=m=1; - k.KO(5,t,"ERROR"); + k.KDC(6,t); + k.KO(-1,t,"ERROR"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KCM(3,t,"(b)",3)&&k.KDM(0,t,16)) { // Line 25 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KFCM(4,t,['(','b',')',{t:'d',d:16}])) { // Line 24 r=m=1; - k.KO(3,t,"(b)+(a)+(b)"); + k.KDC(4,t); + k.KO(-1,t,"(b)+(a)+(b)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KCM(3,t,"(b)",3)) { // Line 24 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KFCM(3,t,['(','b',')'])) { // Line 23 r=m=1; - k.KO(3,t,"(b)+(b)"); + k.KDC(3,t); + k.KO(-1,t,"(b)+(b)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KDM(0,t,16)) { // Line 20 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KFCM(1,t,[{t:'d',d:16}])) { // Line 19 r=m=1; - k.KO(0,t,"(a)(b)"); + k.KDC(1,t); + k.KO(-1,t,"(a)(b)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KDM(0,t,2)) { // Line 83 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KFCM(1,t,[{t:'d',d:2}])) { // Line 82 r=m=1; - k.KO(0,t,"dead2"); + k.KDC(1,t); + k.KO(-1,t,"dead2"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KDM(0,t,1)) { // Line 84 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KFCM(1,t,[{t:'d',d:1}])) { // Line 83 r=m=1; - k.KO(0,t,"dead1"); + k.KDC(1,t); + k.KO(-1,t,"dead1"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KDM(0,t,4)) { // Line 88 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KFCM(1,t,[{t:'d',d:4}])) { // Line 87 r=m=1; - k.KO(0,t,"dead4"); + k.KDC(1,t); + k.KO(-1,t,"dead4"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KDM(0,t,3)) { // Line 89 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)&&k.KFCM(1,t,[{t:'d',d:3}])) { // Line 88 r=m=1; - k.KO(0,t,"dead3"); + k.KDC(1,t); + k.KO(-1,t,"dead3"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)) { // Line 21 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_B /* 0x42 */)) { // Line 20 r=m=1; - k.KO(0,t,"(b)"); + k.KDC(0,t); + k.KO(-1,t,"(b)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_C /* 0x43 */)&&k.KDM(0,t,16)) { // Line 28 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_C /* 0x43 */)&&k.KFCM(1,t,[{t:'d',d:16}])) { // Line 27 r=m=1; - k.KO(0,t,"x"); + k.KDC(1,t); + k.KO(-1,t,"x"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_D /* 0x44 */)) { // Line 31 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_D /* 0x44 */)) { // Line 30 r=m=1; - k.KO(0,t,"d"); + k.KDC(0,t); + k.KO(-1,t,"d"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_E /* 0x45 */)&&k.KCM(2,t,"f",1)&&k.KDM(1,t,16)&&k.KCM(1,t,"d",1)) { // Line 36 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_E /* 0x45 */)&&k.KFCM(3,t,['f',{t:'d',d:16},'d'])) { // Line 35 r=m=1; - k.KO(2,t,"(f)-(a)-(d)-(e)"); + k.KDC(3,t); + k.KO(-1,t,"(f)-(a)-(d)-(e)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_E /* 0x45 */)&&k.KDM(1,t,16)&&k.KCM(1,t,"d",1)) { // Line 35 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_E /* 0x45 */)&&k.KFCM(2,t,[{t:'d',d:16},'d'])) { // Line 34 r=m=1; - k.KO(1,t,"(a)(d)(e)"); + k.KDC(2,t); + k.KO(-1,t,"(a)(d)(e)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_F /* 0x46 */)) { // Line 32 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_F /* 0x46 */)) { // Line 31 r=m=1; - k.KO(0,t,"f"); + k.KDC(0,t); + k.KO(-1,t,"f"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_M /* 0x4D */)) { // Line 45 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_M /* 0x4D */)) { // Line 44 r=m=1; - k.KDO(0,t,18); + k.KDC(0,t); + k.KDO(-1,t,18); k.KO(-1,t,"(m)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_N /* 0x4E */)) { // Line 48 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_N /* 0x4E */)) { // Line 47 r=m=1; - k.KO(0,t,"(n)"); + k.KDC(0,t); + k.KO(-1,t,"(n)"); k.KDO(-1,t,18); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_O /* 0x4F */)) { // Line 51 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_O /* 0x4F */)) { // Line 50 r=m=1; - k.KO(0,t,"(o)"); + k.KDC(0,t); + k.KO(-1,t,"(o)"); k.KDO(-1,t,18); k.KO(-1,t,"(o)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_P /* 0x50 */)) { // Line 55 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_P /* 0x50 */)) { // Line 54 r=m=1; - k.KDO(0,t,19); + k.KDC(0,t); + k.KDO(-1,t,19); k.KDO(-1,t,10); k.KO(-1,t,"(p)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_Q /* 0x51 */)&&k.KDM(3,t,10)&&k.KCM(3,t,"(p)",3)) { // Line 56 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_Q /* 0x51 */)&&k.KFCM(4,t,[{t:'d',d:10},'(','p',')'])) { // Line 55 r=m=1; - k.KO(3,t,"(p)(q)"); + k.KDC(4,t); + k.KO(-1,t,"(p)(q)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_R /* 0x52 */)&&k.KDM(6,t,19)&&k.KCM(6,t,"(p)(q)",6)) { // Line 57 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_R /* 0x52 */)&&k.KFCM(7,t,[{t:'d',d:19},'(','p',')','(','q',')'])) { // Line 56 r=m=1; - k.KO(6,t,"(p)(q)(r)"); + k.KDC(7,t); + k.KO(-1,t,"(p)(q)(r)"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_S /* 0x53 */)) { // Line 39 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_S /* 0x53 */)) { // Line 38 r=m=1; - k.KDO(0,t,17); + k.KDC(0,t); + k.KDO(-1,t,17); } if(m) { + k.KDC(-1,t); r=this.g_dead_reorder(t,e); } if(!m&&k.KIK(e)) { r=1; + k.KDC(-1,t); r=this.g_qwerty_out(t,e); } return r; }; this.g_dead_reorder=function(t,e) { var k=KeymanWeb,r=1,m=0; - if(k.KCM(6,t,"$abc$d",6)) { // Line 135 + if(k.KFCM(6,t,['$','a','b','c','$','d'])) { // Line 134 m=1; - k.KO(6,t,"ab"); + k.KDC(6,t); + k.KO(-1,t,"ab"); k.KDO(-1,t,23); k.KO(-1,t,"d"); } - else if(k.KCM(2,t,"ab",2)&&k.KDM(0,t,21)) { // Line 134 + else if(k.KFCM(3,t,['a','b',{t:'d',d:21}])) { // Line 133 m=1; - k.KDO(2,t,22); + k.KDC(3,t); + k.KDO(-1,t,22); } - else if(k.KDM(0,t,2)&&k.KDM(0,t,1)) { // Line 131 + else if(k.KFCM(2,t,[{t:'d',d:2},{t:'d',d:1}])) { // Line 130 m=1; - k.KDO(0,t,1); + k.KDC(2,t); + k.KDO(-1,t,1); k.KDO(-1,t,2); } - else if(k.KDM(0,t,3)&&k.KDM(0,t,4)) { // Line 132 + else if(k.KFCM(2,t,[{t:'d',d:3},{t:'d',d:4}])) { // Line 131 m=1; - k.KDO(0,t,4); + k.KDC(2,t); + k.KDO(-1,t,4); k.KDO(-1,t,3); } + else if(k.KFCM(2,t,[{t:'a',a:this.s_deadnums},{t:'i',i:{s:this.s_deadnums,o:1}}])) { // Line 138 + m=1; + k.KDC(2,t); + k.KO(-1,t,"("); + k.KIO(-1,this.s_livenums,1,t); + k.KO(-1,t,")("); + k.KIO(-1,this.s_livenums,1,t); + k.KO(-1,t,")"); + } return r; }; this.g_qwerty_out=function(t,e) { var k=KeymanWeb,r=0,m=0; - if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_E /* 0x45 */)) { // Line 146 + if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_E /* 0x45 */)) { // Line 145 r=m=1; - k.KO(0,t,"e"); + k.KDC(0,t); + k.KO(-1,t,"e"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_Q /* 0x51 */)) { // Line 144 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_Q /* 0x51 */)) { // Line 143 r=m=1; - k.KO(0,t,"q"); + k.KDC(0,t); + k.KO(-1,t,"q"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_R /* 0x52 */)) { // Line 147 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_R /* 0x52 */)) { // Line 146 r=m=1; - k.KO(0,t,"r"); + k.KDC(0,t); + k.KO(-1,t,"r"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_T /* 0x54 */)) { // Line 148 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_T /* 0x54 */)) { // Line 147 r=m=1; - k.KO(0,t,"t"); + k.KDC(0,t); + k.KO(-1,t,"t"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_W /* 0x57 */)) { // Line 145 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_W /* 0x57 */)) { // Line 144 r=m=1; - k.KO(0,t,"w"); + k.KDC(0,t); + k.KO(-1,t,"w"); } - else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_Y /* 0x59 */)) { // Line 149 + else if(k.KKM(e, modCodes.VIRTUAL_KEY /* 0x4000 */, keyCodes.K_Y /* 0x59 */)) { // Line 148 r=m=1; - k.KO(0,t,"y"); + k.KDC(0,t); + k.KO(-1,t,"y"); } return r; }; diff --git a/web/unit_tests/resources/keyboards/test_deadkeys.kmn b/web/unit_tests/resources/keyboards/test_deadkeys.kmn index 6fc60ed070..b34aa6e968 100644 --- a/web/unit_tests/resources/keyboards/test_deadkeys.kmn +++ b/web/unit_tests/resources/keyboards/test_deadkeys.kmn @@ -73,9 +73,9 @@ c Basic digits > 'deadnums' - deadkey per number. + '9' > dk(9) c any/index with deadkeys in stores. -c any(deadnums) + '.' > '#' index(livenums, 1) -c any(liveQwerty) + '!' > '?' index(deadQwerty, 1) index(deadQwerty, 1) -c '?' any(deadQwerty) context(2) + '.' > '(' index(liveQwerty, 2) index(liveQwerty, 2) ')' +any(deadnums) + '.' > '#' index(livenums, 1) +any(liveQwerty) + '!' > '?' index(deadQwerty, 1) index(deadQwerty, 1) +'?' any(deadQwerty) context(2) + '.' > '(' index(liveQwerty, 2) index(liveQwerty, 2) ')' c Two different versions are here to help ensure we don't get a 'lucky fix' due c to Developer's rule orderings. These two sets should end up with opposite orders. @@ -135,7 +135,7 @@ dk(3) dk(4) > dk(4) dk(3) c Since 'index' cannot function in the 'key' part of a rule, we place the c 'index in context' test within this group. -c any(deadnums) index(deadnums, 1) > '(' index(livenums, 1) ')(' index(livenums, 1) ')' +any(deadnums) index(deadnums, 1) > '(' index(livenums, 1) ')(' index(livenums, 1) ')' c Needed for KMW testing, as the characters will not be output on plain keystrokes otherwise. group(qwerty_out) using keys diff --git a/web/unit_tests/resources/keyboards/test_deadkeys.kmx b/web/unit_tests/resources/keyboards/test_deadkeys.kmx index 1bf1e4dfc7c0a353b28c7a4c4772b3a7a7af95b2..ba229e59193fdf665525975bcfc87d022ee23901 100644 GIT binary patch literal 7002 zcmbuDU1(g#6~{-itSGUi#*Xc{sYw;Zn04c*)moMkHH~fgOHO1}mKE1AZCtHB5+~A1 zUdf*iqPWxq6H?bLMVLHgb?~riU@fyArB#xVu}fU2%!{HOfh{3!BqYIXU^>1 zySohvo#otf&VOdkIdksJ+?jp$$lxJ&pL1(l=AUwu8a*hFLCc^WqI;ZMq#zc{(QgHD zE$r=D=XOKukmuo7p$C!w1iuC~Ab$v7fHooDf!~DIBWG|@2jRk&F~y?&F-{2j{FkRvmj^P1a*0|-DszvaX0Cv-~}-01vgEPN#CZ; zeb2Re>f{+@Tp_8H+LInzYhE38d)$CK_{NoXH-ntkq%(_bsNfz_>Nt$!}_&pQ8H?w|Gkd5?cK_~*U;$@WmpOx~Turt+vL zvu>+vciUWt>m*`%9p_EzohI#0kavxAhKwfl2UDn`TH$@I^v_2BZ1T@<_^0Mxd^_pB zilUR+eZD;?eENtz*Tz!ad0Tc^ctZ%=#xZHpD#Pxa8o*CBdBWMS#`Slfi4WU+a%@LK)&~F>| zcz|5(O1^H8+Gz%=Y(UQ#ru|W+1HIRzjY}h&Ui-z?YHi!N@NcMLaHjn-u zq&dFRus@(LK$_*suFCu9A3_>~va9kD`kx`qbnU1re?k8gQdYG;s{9T8?~rEuUXM8U z5A=UQVIK(K9rQ0D&BGpRcNe{`G3<}~4Xa0Qg0`d28g@VW&p6I#3_mgKJo-gQV|c-^ z*U;x6jp3MKZ=zp?G=`rV_73_2q%jN`b{+i&)Q{d}*yre9KnKykZ`haU4G(e>LH~ha z>(E;a^T#&ur_lQ$*e!|zsnxKW6y!8|h^|B*>EB#3# za9LLrHAJzvxXSNk8Rp_<&N~@mR=s+!@=wjrfIbFSt5Cbz+UTvw!wTCQYjj2Nbv5uH z)fS~?MX9bRh5c3@wZn!UY|kd?MiQ`li;_HO_2gW${ho%0=rW+2i+HRT*SSn*xoPAa zy>*fuMviBdaFT2+vD)l{-T!4VSl4NI+@D|dC78kHOWsp6_Q$Z_0@?!4^JZt@Q_K}b zGR;$G@G;uyTs_14$d!0cd@J+SV>m!xSR zldPuw>&;ijQSMLU*I7fS_-1@-{5qY5Q}G!;#vz~ekURM}1AWzRsqamv_))VIVpq%= zP(4R0W<~Yb^&W=EjK)zt{xRyKr{HG{+gdwu4auYQ;IrJ1-j(ux94jNt9K~GSljdk^ z#fai6t<0G`X*T8I%73}%{5SpH=!0 zQW?L_{!{)2p!KYErd%qAGyF88rx{Pasvqr&)%~RV>upr`la8m6cJb|$jz|0VQv7VG z7@?4KERBrzgkPt!7-riP_A{V*7AkzDW0b{{-+MUdp94$q zQ|USJDvycQ$lS{o_d1Pgnka|)g?+IyduiLcxr~zicw>yaUxu4c{68bi4(+a!-E^l8Fv@w*FD6rlyStU!?&({ zrsv42@}=ySzOM{fD}bM5HfnAckTg&A9@8t}QIKlch*-J*WKM(~E9bwX;s2mU=J+E; zYZ~45q89C?x%ROMAG>x=-BEKyt^YVQ|B|^e$~Q;f!6DG{h)UPKzKDt;j!`jasGPoGJx{z)9* ze>L4xDtpI1r4}-@Ew>Zf$-*k{v)t~o;!M$vxqKArS6ghMJ4Ce>%Zn{^n=bcISFF{& zI-L08H#nZWA|B&RTIqZkYsJIaC!n!)oEwTym`>vn)2PBI5=?Oj(+NGcQ{=*Qeh=Oe zm`4Fs?)0`*_f@AN-P2@cm2VxRO-^djnr!Jt7j)f(!hJ{fOK&;S_1%@t?sGNttNwqj?(e^XR64lucR?qRf9Vna6G7hr70@pm){VXwnnC}y mVLj-*&}sBbhV`KjKxff^W7r`25lDW6r(io+3;jb6=l%;TU$8>} literal 6768 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 Z4EoOvJBB_E$#3u!YzJ$hf9T=d{{XgMjTry{ diff --git a/windows/src/developer/TIKE/compile/CompileKeymanWeb.pas b/windows/src/developer/TIKE/compile/CompileKeymanWeb.pas index 9497edaec3..adda60a139 100644 --- a/windows/src/developer/TIKE/compile/CompileKeymanWeb.pas +++ b/windows/src/developer/TIKE/compile/CompileKeymanWeb.pas @@ -573,6 +573,15 @@ begin CheckStoreForInvalidFunctions(fkp, rec.Any.Store); // I1520 FullContext := FullContext + Format('{t:''a'',a:this.s%s,n:1}', [JavaScript_Name(rec.Any.StoreIndex, rec.Any.Store.szName)]); end; + CODE_CONTEXTEX: + begin + FullContext := FullContext + Format('{t:''c'',c:%d}', [rec.ContextEx.Index]); // I4611 + end; + CODE_INDEX: + begin + FullContext := FullContext + Format('{t:''i'',i:{s:this.s%s,o:%d}}', + [JavaScript_Name(rec.Index.StoreIndex, rec.Index.Store.szName), rec.Index.Index]); // I4611 + end; else begin @@ -1951,7 +1960,8 @@ const wcsentinel: WideString = #$FFFF; begin n := Pos(wcsentinel, store.dpString); - if n > 0 then + // Disable the check with version 10+, since we now support deadkeys in stores. + if (n > 0) and not IsKeyboardVersion10OrLater then begin pwsz := PWideChar(store.dpString); Inc(pwsz, n-1);