ctlIME // Improve the accuracy of node-fixing process in IMKCandidates.

This commit is contained in:
ShikiSuen 2022-08-13 16:57:05 +08:00
parent 71afd139c7
commit 22419d9761
1 changed files with 46 additions and 16 deletions

View File

@ -272,23 +272,37 @@ class ctlInputMethod: IMKInputController {
/// - Returns: IMK
override func candidates(_ sender: Any!) -> [Any]! {
_ = sender //
var arrResult = [String]()
//
if let state = state as? InputState.AssociatedPhrases {
return state.candidates.map { theCandidate -> String in
for theCandidate in state.candidates {
let theConverted = IME.kanjiConversionIfRequired(theCandidate.1)
return (theCandidate.1 == theConverted) ? theCandidate.1 : "\(theConverted)(\(theCandidate.1))"
var result = (theCandidate.1 == theConverted) ? theCandidate.1 : "\(theConverted)(\(theCandidate.1))"
if arrResult.contains(result) {
result = "\(result)(\(theCandidate.0))"
}
arrResult.append(result)
}
} else if let state = state as? InputState.SymbolTable {
return state.candidates.map { theCandidate -> String in
for theCandidate in state.candidates {
let theConverted = IME.kanjiConversionIfRequired(theCandidate.1)
return (theCandidate.1 == theConverted) ? theCandidate.1 : "\(theConverted)(\(theCandidate.1))"
var result = (theCandidate.1 == theConverted) ? theCandidate.1 : "\(theConverted)(\(theCandidate.1))"
if arrResult.contains(result) {
result = "\(result)(\(theCandidate.0))"
}
arrResult.append(result)
}
} else if let state = state as? InputState.ChoosingCandidate {
return state.candidates.map { theCandidate -> String in
for theCandidate in state.candidates {
let theConverted = IME.kanjiConversionIfRequired(theCandidate.1)
return (theCandidate.1 == theConverted) ? theCandidate.1 : "\(theConverted)(\(theCandidate.1))"
var result = (theCandidate.1 == theConverted) ? theCandidate.1 : "\(theConverted)(\(theCandidate.1))"
if arrResult.contains(result) {
result = "\(result)(\(theCandidate.0))"
}
arrResult.append(result)
}
}
return .init()
return arrResult
}
override open func candidateSelectionChanged(_: NSAttributedString!) {
@ -305,28 +319,44 @@ class ctlInputMethod: IMKInputController {
}
var indexDeducted = 0
//
if let state = state as? InputState.AssociatedPhrases {
for (i, neta) in state.candidates.map(\.1).enumerated() {
let theConverted = IME.kanjiConversionIfRequired(neta)
let netaShown = (neta == theConverted) ? neta : "\(theConverted)(\(neta))"
for (i, neta) in state.candidates.enumerated() {
let theConverted = IME.kanjiConversionIfRequired(neta.1)
let netaShown = (neta.1 == theConverted) ? neta.1 : "\(theConverted)(\(neta.1))"
let netaShownWithPronunciation = "\(theConverted)(\(neta.0))"
if candidateString.string == netaShownWithPronunciation {
indexDeducted = i
break
}
if candidateString.string == netaShown {
indexDeducted = i
break
}
}
} else if let state = state as? InputState.SymbolTable {
for (i, neta) in state.candidates.map(\.1).enumerated() {
let theConverted = IME.kanjiConversionIfRequired(neta)
let netaShown = (neta == theConverted) ? neta : "\(theConverted)(\(neta))"
for (i, neta) in state.candidates.enumerated() {
let theConverted = IME.kanjiConversionIfRequired(neta.1)
let netaShown = (neta.1 == theConverted) ? neta.1 : "\(theConverted)(\(neta.1))"
let netaShownWithPronunciation = "\(theConverted)(\(neta.0))"
if candidateString.string == netaShownWithPronunciation {
indexDeducted = i
break
}
if candidateString.string == netaShown {
indexDeducted = i
break
}
}
} else if let state = state as? InputState.ChoosingCandidate {
for (i, neta) in state.candidates.map(\.1).enumerated() {
let theConverted = IME.kanjiConversionIfRequired(neta)
let netaShown = (neta == theConverted) ? neta : "\(theConverted)(\(neta))"
for (i, neta) in state.candidates.enumerated() {
let theConverted = IME.kanjiConversionIfRequired(neta.1)
let netaShown = (neta.1 == theConverted) ? neta.1 : "\(theConverted)(\(neta.1))"
let netaShownWithPronunciation = "\(theConverted)(\(neta.0))"
if candidateString.string == netaShownWithPronunciation {
indexDeducted = i
break
}
if candidateString.string == netaShown {
indexDeducted = i
break