InputHandler // Accept Shift-combined chars as strokes.
This commit is contained in:
parent
7f99b2f76a
commit
a22e396c6f
|
@ -30,6 +30,8 @@ extension InputHandler {
|
||||||
/// - Returns: 告知 IMK「該按鍵是否已經被輸入法攔截處理」。
|
/// - Returns: 告知 IMK「該按鍵是否已經被輸入法攔截處理」。
|
||||||
private func handlePhonabetComposition(input: InputSignalProtocol) -> Bool? {
|
private func handlePhonabetComposition(input: InputSignalProtocol) -> Bool? {
|
||||||
guard let delegate = delegate else { return nil }
|
guard let delegate = delegate else { return nil }
|
||||||
|
var inputText = (input.inputTextIgnoringModifiers ?? input.text)
|
||||||
|
inputText = inputText.lowercased().applyingTransformFW2HW(reverse: false)
|
||||||
let existedIntonation = composer.intonation
|
let existedIntonation = composer.intonation
|
||||||
var overrideHappened = false
|
var overrideHappened = false
|
||||||
|
|
||||||
|
@ -56,7 +58,7 @@ extension InputHandler {
|
||||||
prevReading.0.map(\.description).forEach { theComposer.receiveKey(fromPhonabet: $0) }
|
prevReading.0.map(\.description).forEach { theComposer.receiveKey(fromPhonabet: $0) }
|
||||||
// 發現要覆寫的聲調與覆寫對象的聲調雷同的情況的話,直接跳過處理。
|
// 發現要覆寫的聲調與覆寫對象的聲調雷同的情況的話,直接跳過處理。
|
||||||
let oldIntonation: Tekkon.Phonabet = theComposer.intonation
|
let oldIntonation: Tekkon.Phonabet = theComposer.intonation
|
||||||
theComposer.receiveKey(fromString: input.text)
|
theComposer.receiveKey(fromString: inputText)
|
||||||
if theComposer.intonation == oldIntonation, prefs.specifyIntonationKeyBehavior == 1 { break proc }
|
if theComposer.intonation == oldIntonation, prefs.specifyIntonationKeyBehavior == 1 { break proc }
|
||||||
theComposer.intonation.clear()
|
theComposer.intonation.clear()
|
||||||
// 檢查新的漢字字音是否在庫。
|
// 檢查新的漢字字音是否在庫。
|
||||||
|
@ -74,7 +76,7 @@ extension InputHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 鐵恨引擎並不具備對 Enter (CR / LF) 鍵的具體判斷能力,所以在這裡單獨處理。
|
// 鐵恨引擎並不具備對 Enter (CR / LF) 鍵的具體判斷能力,所以在這裡單獨處理。
|
||||||
composer.receiveKey(fromString: confirmCombination ? " " : input.text)
|
composer.receiveKey(fromString: confirmCombination ? " " : inputText)
|
||||||
keyConsumedByReading = true
|
keyConsumedByReading = true
|
||||||
|
|
||||||
// 沒有調號的話,只需要 setInlineDisplayWithCursor() 且終止處理(return true)即可。
|
// 沒有調號的話,只需要 setInlineDisplayWithCursor() 且終止處理(return true)即可。
|
||||||
|
@ -211,11 +213,12 @@ extension InputHandler {
|
||||||
private func handleCassetteComposition(input: InputSignalProtocol) -> Bool? {
|
private func handleCassetteComposition(input: InputSignalProtocol) -> Bool? {
|
||||||
guard let delegate = delegate else { return nil }
|
guard let delegate = delegate else { return nil }
|
||||||
var wildcardKey: String { currentLM.cassetteWildcardKey } // 花牌鍵。
|
var wildcardKey: String { currentLM.cassetteWildcardKey } // 花牌鍵。
|
||||||
let isWildcardKeyInput: Bool = (input.text == wildcardKey && !wildcardKey.isEmpty)
|
let inputText = input.text
|
||||||
|
let isWildcardKeyInput: Bool = (inputText == wildcardKey && !wildcardKey.isEmpty)
|
||||||
|
|
||||||
let skipStrokeHandling =
|
let skipStrokeHandling =
|
||||||
input.isReservedKey || input.isNumericPadKey || input.isNonLaptopFunctionKey
|
input.isReservedKey || input.isNumericPadKey || input.isNonLaptopFunctionKey
|
||||||
|| input.isControlHold || input.isOptionHold || input.isShiftHold || input.isCommandHold
|
|| input.isControlHold || input.isOptionHold || input.isCommandHold // || input.isShiftHold
|
||||||
let confirmCombination = input.isSpace || input.isEnter
|
let confirmCombination = input.isSpace || input.isEnter
|
||||||
|
|
||||||
var isLongestPossibleKeyFormed: Bool {
|
var isLongestPossibleKeyFormed: Bool {
|
||||||
|
@ -227,7 +230,7 @@ extension InputHandler {
|
||||||
calligrapher.count >= currentLM.maxCassetteKeyLength || isLongestPossibleKeyFormed
|
calligrapher.count >= currentLM.maxCassetteKeyLength || isLongestPossibleKeyFormed
|
||||||
}
|
}
|
||||||
|
|
||||||
prehandling: if !skipStrokeHandling && currentLM.isThisCassetteKeyAllowed(key: input.text) {
|
prehandling: if !skipStrokeHandling && currentLM.isThisCassetteKeyAllowed(key: inputText) {
|
||||||
if calligrapher.isEmpty, isWildcardKeyInput {
|
if calligrapher.isEmpty, isWildcardKeyInput {
|
||||||
delegate.callError("3606B9C0")
|
delegate.callError("3606B9C0")
|
||||||
var newEmptyState = compositor.isEmpty ? IMEState.ofEmpty() : generateStateOfInputting()
|
var newEmptyState = compositor.isEmpty ? IMEState.ofEmpty() : generateStateOfInputting()
|
||||||
|
@ -241,7 +244,7 @@ extension InputHandler {
|
||||||
delegate.callError("2268DD51: calligrapher is full, clearing calligrapher.")
|
delegate.callError("2268DD51: calligrapher is full, clearing calligrapher.")
|
||||||
calligrapher.removeAll()
|
calligrapher.removeAll()
|
||||||
} else {
|
} else {
|
||||||
calligrapher.append(input.text)
|
calligrapher.append(inputText)
|
||||||
}
|
}
|
||||||
if isWildcardKeyInput {
|
if isWildcardKeyInput {
|
||||||
break prehandling
|
break prehandling
|
||||||
|
|
Loading…
Reference in New Issue