From 58a68c51fc8be1d4dbafb0466a1551edc154d9c6 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Tue, 9 Aug 2022 11:59:02 +0800 Subject: [PATCH] KeyHandler // +upperCaseLetterKeyBehavior. --- .../KeyHandler_HandleInput.swift | 46 +++++++++++++------ 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/Source/Modules/ControllerModules/KeyHandler_HandleInput.swift b/Source/Modules/ControllerModules/KeyHandler_HandleInput.swift index 6a53c36d..d362d9c9 100644 --- a/Source/Modules/ControllerModules/KeyHandler_HandleInput.swift +++ b/Source/Modules/ControllerModules/KeyHandler_HandleInput.swift @@ -359,20 +359,6 @@ extension KeyHandler { return true } - // 這裡不使用小麥注音 2.2 版的組字區處理方式,而是直接由詞庫負責。 - if input.isUpperCaseASCIILetterKey { - let letter: String! = String(format: "%@%c", "_letter_", charCode.isPrintableASCII ? CChar(charCode) : inputText) - if handlePunctuation( - letter, - state: state, - usingVerticalTyping: input.isTypingVertical, - stateCallback: stateCallback, - errorCallback: errorCallback - ) { - return true - } - } - // MARK: 全形/半形空白 (Full-Width / Half-Width Space) /// 該功能僅可在當前組字區沒有任何內容的時候使用。 @@ -384,6 +370,38 @@ extension KeyHandler { } } + // MARK: 摁住 Shift+字母鍵 的處理 (Shift+Letter Processing) + + // 這裡不使用小麥注音 2.2 版的組字區處理方式,而是直接由詞庫負責。 + if input.isUpperCaseASCIILetterKey, !input.isCommandHold, !input.isControlHold { + if input.isShiftHold { // 這裡先不要判斷 isOptionHold。 + switch mgrPrefs.upperCaseLetterKeyBehavior { + case 1: + stateCallback(InputState.Empty()) + stateCallback(InputState.Committing(textToCommit: inputText.lowercased())) + stateCallback(InputState.Empty()) + return true + case 2: + stateCallback(InputState.Empty()) + stateCallback(InputState.Committing(textToCommit: inputText.uppercased())) + stateCallback(InputState.Empty()) + return true + default: // 包括 case 0,直接塞給組字區。 + let letter: String! = String( + format: "%@%c", "_letter_", charCode.isPrintableASCII ? CChar(charCode) : inputText) + if handlePunctuation( + letter, + state: state, + usingVerticalTyping: input.isTypingVertical, + stateCallback: stateCallback, + errorCallback: errorCallback + ) { + return true + } + } + } + } + // MARK: - 終末處理 (Still Nothing) /// 對剩下的漏網之魚做攔截處理、直接將當前狀態繼續回呼給 ctlInputMethod。