KeyHandler // Stop generating candidate states with emply container.

This commit is contained in:
ShikiSuen 2022-10-08 18:05:24 +08:00
parent 1dfebd7b44
commit b510ee5c1e
3 changed files with 44 additions and 33 deletions

View File

@ -126,23 +126,25 @@ extension KeyHandler {
/// ///
if prefs.useSCPCTypingMode { if prefs.useSCPCTypingMode {
let candidateState: IMEState = buildCandidate(state: inputting) let candidateState: IMEStateProtocol = buildCandidate(state: inputting)
if candidateState.candidates.count == 1, let firstCandidate = candidateState.candidates.first { switch candidateState.candidates.count {
let reading: String = firstCandidate.0 case 2...: stateCallback(candidateState)
let text: String = firstCandidate.1 case 1:
stateCallback(IMEState.ofCommitting(textToCommit: text)) let firstCandidate = candidateState.candidates.first! //
let reading: String = firstCandidate.0
let text: String = firstCandidate.1
stateCallback(IMEState.ofCommitting(textToCommit: text))
if !prefs.associatedPhrasesEnabled { if !prefs.associatedPhrasesEnabled {
stateCallback(IMEState.ofEmpty()) stateCallback(IMEState.ofEmpty())
} else { } else {
let associatedPhrases = let associatedPhrases =
buildAssociatePhraseState( buildAssociatePhraseState(
withPair: .init(key: reading, value: text) withPair: .init(key: reading, value: text)
) )
stateCallback(associatedPhrases.candidates.isEmpty ? IMEState.ofEmpty() : associatedPhrases) stateCallback(associatedPhrases.candidates.isEmpty ? IMEState.ofEmpty() : associatedPhrases)
} }
} else { default: break
stateCallback(candidateState)
} }
} }
// SessionCtl IMK // SessionCtl IMK

View File

@ -176,7 +176,12 @@ extension KeyHandler {
) )
} }
} }
stateCallback(buildCandidate(state: state)) let candidateState: IMEStateProtocol = buildCandidate(state: state)
if candidateState.candidates.isEmpty {
errorCallback("3572F238")
} else {
stateCallback(candidateState)
}
return true return true
} }
@ -289,7 +294,12 @@ extension KeyHandler {
var inputting = buildInputtingState var inputting = buildInputtingState
inputting.textToCommit = textToCommit inputting.textToCommit = textToCommit
stateCallback(inputting) stateCallback(inputting)
stateCallback(buildCandidate(state: inputting)) let candidateState = buildCandidate(state: inputting)
if candidateState.candidates.isEmpty {
errorCallback("B5127D8A")
} else {
stateCallback(candidateState)
}
} else { // } else { //
errorCallback("17446655") errorCallback("17446655")
} }

View File

@ -18,7 +18,7 @@ extension KeyHandler {
// MARK: - State Building // MARK: - State Building
/// ///
public var buildInputtingState: IMEState { public var buildInputtingState: IMEStateProtocol {
/// (Update the composing buffer) /// (Update the composing buffer)
/// NSAttributeString /// NSAttributeString
var displayTextSegments: [String] = compositor.walkedNodes.values var displayTextSegments: [String] = compositor.walkedNodes.values
@ -85,11 +85,10 @@ extension KeyHandler {
/// ///
/// - Parameters: /// - Parameters:
/// - currentState: /// - currentState:
/// - isTypingVertical:
/// - Returns: /// - Returns:
func buildCandidate( func buildCandidate(
state currentState: IMEStateProtocol state currentState: IMEStateProtocol
) -> IMEState { ) -> IMEStateProtocol {
IMEState.ofCandidates( IMEState.ofCandidates(
candidates: getCandidatesArray(fixOrder: prefs.useFixecCandidateOrderOnSelection), candidates: getCandidatesArray(fixOrder: prefs.useFixecCandidateOrderOnSelection),
displayTextSegments: compositor.walkedNodes.values, displayTextSegments: compositor.walkedNodes.values,
@ -113,7 +112,7 @@ extension KeyHandler {
/// - Returns: /// - Returns:
func buildAssociatePhraseState( func buildAssociatePhraseState(
withPair pair: Megrez.Compositor.KeyValuePaired withPair pair: Megrez.Compositor.KeyValuePaired
) -> IMEState { ) -> IMEStateProtocol {
IMEState.ofAssociates( IMEState.ofAssociates(
candidates: buildAssociatePhraseArray(withPair: pair)) candidates: buildAssociatePhraseArray(withPair: pair))
} }
@ -232,7 +231,6 @@ extension KeyHandler {
/// ///
/// - Parameters: /// - Parameters:
/// - customPunctuation: /// - customPunctuation:
/// - isTypingVertical:
/// - stateCallback: /// - stateCallback:
/// - errorCallback: /// - errorCallback:
/// - Returns: SessionCtl IMK /// - Returns: SessionCtl IMK
@ -265,16 +263,17 @@ extension KeyHandler {
guard prefs.useSCPCTypingMode, composer.isEmpty else { return true } guard prefs.useSCPCTypingMode, composer.isEmpty else { return true }
let candidateState = buildCandidate(state: inputting) let candidateState = buildCandidate(state: inputting)
if candidateState.candidates.count == 1 { switch candidateState.candidates.count {
clear() // candidateState case 2...: stateCallback(candidateState)
if let candidateToCommit: (String, String) = candidateState.candidates.first, !candidateToCommit.1.isEmpty { case 1:
stateCallback(IMEState.ofCommitting(textToCommit: candidateToCommit.1)) clear() // candidateState
stateCallback(IMEState.ofEmpty()) if let candidateToCommit: (String, String) = candidateState.candidates.first, !candidateToCommit.1.isEmpty {
} else { stateCallback(IMEState.ofCommitting(textToCommit: candidateToCommit.1))
stateCallback(candidateState) stateCallback(IMEState.ofEmpty())
} } else {
} else { stateCallback(candidateState)
stateCallback(candidateState) }
default: errorCallback("8DA4096E")
} }
return true return true
} }