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 {
let candidateState: IMEState = buildCandidate(state: inputting)
if candidateState.candidates.count == 1, let firstCandidate = candidateState.candidates.first {
let reading: String = firstCandidate.0
let text: String = firstCandidate.1
stateCallback(IMEState.ofCommitting(textToCommit: text))
let candidateState: IMEStateProtocol = buildCandidate(state: inputting)
switch candidateState.candidates.count {
case 2...: stateCallback(candidateState)
case 1:
let firstCandidate = candidateState.candidates.first! //
let reading: String = firstCandidate.0
let text: String = firstCandidate.1
stateCallback(IMEState.ofCommitting(textToCommit: text))
if !prefs.associatedPhrasesEnabled {
stateCallback(IMEState.ofEmpty())
} else {
let associatedPhrases =
buildAssociatePhraseState(
withPair: .init(key: reading, value: text)
)
stateCallback(associatedPhrases.candidates.isEmpty ? IMEState.ofEmpty() : associatedPhrases)
}
} else {
stateCallback(candidateState)
if !prefs.associatedPhrasesEnabled {
stateCallback(IMEState.ofEmpty())
} else {
let associatedPhrases =
buildAssociatePhraseState(
withPair: .init(key: reading, value: text)
)
stateCallback(associatedPhrases.candidates.isEmpty ? IMEState.ofEmpty() : associatedPhrases)
}
default: break
}
}
// 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
}
@ -289,7 +294,12 @@ extension KeyHandler {
var inputting = buildInputtingState
inputting.textToCommit = textToCommit
stateCallback(inputting)
stateCallback(buildCandidate(state: inputting))
let candidateState = buildCandidate(state: inputting)
if candidateState.candidates.isEmpty {
errorCallback("B5127D8A")
} else {
stateCallback(candidateState)
}
} else { //
errorCallback("17446655")
}

View File

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