ctlIME // Improve the accuracy of node-fixing process in IMKCandidates.
This commit is contained in:
parent
71afd139c7
commit
22419d9761
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue