From 27db3f984bb8952ca014a8fe2c0f040b68fb3b96 Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Wed, 21 Feb 2018 09:07:40 +0700 Subject: [PATCH] Fixes issue with not deleting matched deadkeys on touch paths. --- web/source/kmwcallback.ts | 8 +- .../json/engine_tests/deadkeys.json | 446 ++++++++++++++++++ 2 files changed, 452 insertions(+), 2 deletions(-) diff --git a/web/source/kmwcallback.ts b/web/source/kmwcallback.ts index 3c84f96eea..6698cad515 100644 --- a/web/source/kmwcallback.ts +++ b/web/source/kmwcallback.ts @@ -670,6 +670,12 @@ class KeyboardInterface { } this.keymanweb.touchAliasing.setTextBeforeCaret(Pelem,t); + + // Adjust deadkey positions + this._DeadkeyDeleteMatched(); // I3318 + if(dn >= 0) { + this._DeadkeyAdjustPos(this._SelPos(Pelem), -dn + s._kmwLength()); // I3318,I3319 + } return; } @@ -801,8 +807,6 @@ class KeyboardInterface { // Aim to put the newest deadkeys first. this._DeadKeys=[Lc].concat(this._DeadKeys); // _DebugDeadKeys(Pelem, 'KDeadKeyOutput: dn='+Pdn+'; deadKey='+Pd); - // It's possible to have deadkey-only rules. - this._DeadkeyDeleteMatched(); } /** diff --git a/web/unit_tests/json/engine_tests/deadkeys.json b/web/unit_tests/json/engine_tests/deadkeys.json index f3d214257c..d6bbbe983c 100644 --- a/web/unit_tests/json/engine_tests/deadkeys.json +++ b/web/unit_tests/json/engine_tests/deadkeys.json @@ -632,6 +632,452 @@ "output": "(P)(Q)(R)" } ] + }, + { + "constraint": { + "target": "phone", + "validOSList": null, + "validBrowsers": null + }, + "testSet": [ + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_A" + }, + { + "type": "osk", + "keyID": "default-K_B" + } + ], + "output": "(a)(b)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_B" + } + ], + "output": "(b)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_B" + }, + { + "type": "osk", + "keyID": "default-K_B" + } + ], + "output": "(b)+(b)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_B" + }, + { + "type": "osk", + "keyID": "default-K_A" + }, + { + "type": "osk", + "keyID": "default-K_B" + } + ], + "output": "(b)+(a)+(b)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_A" + }, + { + "type": "osk", + "keyID": "default-K_C" + } + ], + "output": "x" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_A" + }, + { + "type": "osk", + "keyID": "default-K_D" + }, + { + "type": "osk", + "keyID": "default-K_E" + } + ], + "output": "(a)(d)(e)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_F" + }, + { + "type": "osk", + "keyID": "default-K_A" + }, + { + "type": "osk", + "keyID": "default-K_D" + }, + { + "type": "osk", + "keyID": "default-K_E" + } + ], + "output": "(f)-(a)-(d)-(e)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_A" + }, + { + "type": "osk", + "keyID": "default-K_S" + }, + { + "type": "osk", + "keyID": "default-K_PERIOD" + } + ], + "output": "(a)-(s)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_S" + }, + { + "type": "osk", + "keyID": "default-K_A" + }, + { + "type": "osk", + "keyID": "default-K_PERIOD" + } + ], + "output": "(s)+(a)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_M" + }, + { + "type": "osk", + "keyID": "default-K_PERIOD" + } + ], + "output": "dk(m)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_N" + }, + { + "type": "osk", + "keyID": "default-K_PERIOD" + } + ], + "output": "dk(n)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_O" + }, + { + "type": "osk", + "keyID": "default-K_PERIOD" + } + ], + "output": "dk(o)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_P" + }, + { + "type": "osk", + "keyID": "default-K_Q" + }, + { + "type": "osk", + "keyID": "default-K_R" + } + ], + "output": "(p)(q)(r)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_SHIFT" + }, + { + "type": "osk", + "keyID": "shift-K_P" + }, + { + "type": "osk", + "keyID": "shift-K_Q" + }, + { + "type": "osk", + "keyID": "shift-K_R" + } + ], + "output": "(P)(Q)(R)" + } + ] + }, + { + "constraint": { + "target": "tablet", + "validOSList": null, + "validBrowsers": null + }, + "testSet": [ + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_A" + }, + { + "type": "osk", + "keyID": "default-K_B" + } + ], + "output": "(a)(b)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_B" + } + ], + "output": "(b)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_B" + }, + { + "type": "osk", + "keyID": "default-K_B" + } + ], + "output": "(b)+(b)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_B" + }, + { + "type": "osk", + "keyID": "default-K_A" + }, + { + "type": "osk", + "keyID": "default-K_B" + } + ], + "output": "(b)+(a)+(b)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_A" + }, + { + "type": "osk", + "keyID": "default-K_C" + } + ], + "output": "x" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_A" + }, + { + "type": "osk", + "keyID": "default-K_D" + }, + { + "type": "osk", + "keyID": "default-K_E" + } + ], + "output": "(a)(d)(e)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_F" + }, + { + "type": "osk", + "keyID": "default-K_A" + }, + { + "type": "osk", + "keyID": "default-K_D" + }, + { + "type": "osk", + "keyID": "default-K_E" + } + ], + "output": "(f)-(a)-(d)-(e)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_A" + }, + { + "type": "osk", + "keyID": "default-K_S" + }, + { + "type": "osk", + "keyID": "default-K_PERIOD" + } + ], + "output": "(a)-(s)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_S" + }, + { + "type": "osk", + "keyID": "default-K_A" + }, + { + "type": "osk", + "keyID": "default-K_PERIOD" + } + ], + "output": "(s)+(a)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_M" + }, + { + "type": "osk", + "keyID": "default-K_PERIOD" + } + ], + "output": "dk(m)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_N" + }, + { + "type": "osk", + "keyID": "default-K_PERIOD" + } + ], + "output": "dk(n)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_O" + }, + { + "type": "osk", + "keyID": "default-K_PERIOD" + } + ], + "output": "dk(o)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "default-K_P" + }, + { + "type": "osk", + "keyID": "default-K_Q" + }, + { + "type": "osk", + "keyID": "default-K_R" + } + ], + "output": "(p)(q)(r)" + }, + { + "inputs": [ + { + "type": "osk", + "keyID": "K_SHIFT" + }, + { + "type": "osk", + "keyID": "shift-K_P" + }, + { + "type": "osk", + "keyID": "shift-K_Q" + }, + { + "type": "osk", + "keyID": "shift-K_R" + } + ], + "output": "(P)(Q)(R)" + } + ] } ] } \ No newline at end of file