From 385638c3b9df3b27fc856af3fbc942ae7cece062 Mon Sep 17 00:00:00 2001 From: zonble Date: Thu, 11 Nov 2021 02:22:19 +0800 Subject: [PATCH] Allows commit the first canidate while typing a punctuation in plain BPMF mode. --- Source/InputMethodController.mm | 65 ++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 26 deletions(-) diff --git a/Source/InputMethodController.mm b/Source/InputMethodController.mm index fead0f12..fe3f3eb1 100644 --- a/Source/InputMethodController.mm +++ b/Source/InputMethodController.mm @@ -547,6 +547,35 @@ public: NSBeep(); } +- (string)currentLayout +{ + string layout = string("Standard_");; + NSInteger keyboardLayout = [[NSUserDefaults standardUserDefaults] integerForKey:kKeyboardLayoutPreferenceKey]; + switch (keyboardLayout) { + case 0: + layout = string("Standard_"); + break; + case 1: + layout = string("ETen_"); + break; + case 2: + layout = string("ETen26_"); + break; + case 3: + layout = string("Hsu_"); + break; + case 4: + layout = string("HanyuPinyin_"); + break; + case 5: + layout = string("IBM_"); + break; + default: + break; + } + return layout; +} + - (BOOL)handleInputText:(NSString*)inputText key:(NSInteger)keyCode modifiers:(NSUInteger)flags client:(id)client { NSRect textFrame = NSZeroRect; @@ -896,31 +925,7 @@ public: } } - string layout = string("Standard_");; - NSInteger keyboardLayout = [[NSUserDefaults standardUserDefaults] integerForKey:kKeyboardLayoutPreferenceKey]; - switch (keyboardLayout) { - case 0: - layout = string("Standard_"); - break; - case 1: - layout = string("ETen_"); - break; - case 2: - layout = string("ETen26_"); - break; - case 3: - layout = string("Hsu_"); - break; - case 4: - layout = string("HanyuPinyin_"); - break; - case 5: - layout = string("IBM_"); - break; - default: - break; - } - + string layout = [self currentLayout]; string customPunctuation = string("_punctuation_") + layout + string(1, (char)charCode); if (_languageModel->hasUnigramsForKey(customPunctuation)) { if (_bpmfReadingBuffer->isEmpty()) { @@ -1138,7 +1143,15 @@ public: } if (_inputMode == kPlainBopomofoModeIdentifier) { - if (_bpmfReadingBuffer->isValidKey((char)charCode)) { + // TODO: also commit punctuation. + string layout = [self currentLayout]; + string customPunctuation = string("_punctuation_") + layout + string(1, (char)charCode); + string punctuation = string("_punctuation_") + string(1, (char)charCode); + + BOOL shouldAutoSelectCandidate = _bpmfReadingBuffer->isValidKey((char)charCode) || _languageModel->hasUnigramsForKey(customPunctuation) || + _languageModel->hasUnigramsForKey(punctuation); + + if (shouldAutoSelectCandidate) { NSUInteger candidateIndex = [gCurrentCandidateController candidateIndexAtKeyLabelIndex:0]; if (candidateIndex != NSUIntegerMax) { [self candidateController:gCurrentCandidateController didSelectCandidateAtIndex:candidateIndex];