diff --git a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/LMInstantiator.swift b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/LMInstantiator.swift index 609b8b7d..13902097 100644 --- a/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/LMInstantiator.swift +++ b/Packages/vChewing_LangModelAssembly/Sources/LangModelAssembly/LMInstantiator.swift @@ -233,6 +233,11 @@ public extension vChewingLM { lmAssociates.valuesFor(pair: pair) } + public func queryReplacementValue(key: String) -> String? { + let result = lmReplacements.valuesFor(key: key) + return result.isEmpty ? nil : result + } + /// 插入臨時資料。 /// - Parameters: /// - key: 索引鍵陣列。 diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_HandleStates.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_HandleStates.swift index fe0eafaa..c7d84276 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_HandleStates.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/SessionCtl_HandleStates.swift @@ -129,8 +129,17 @@ public extension SessionCtl { /// 遞交組字區內容。 /// 注意:必須在 IMK 的 commitComposition 函式當中也間接或者直接執行這個處理。 private func commit(text: String) { - let text = text.trimmingCharacters(in: .newlines) - let buffer = ChineseConverter.kanjiConversionIfRequired(text) + let phE = PrefMgr.shared.phraseReplacementEnabled && text.count > 1 + var text = text.trimmingCharacters(in: .newlines) + var replaced = false + if phE, let queried = inputHandler?.currentLM.queryReplacementValue(key: text) { + replaced = true + text = queried + } + var buffer = ChineseConverter.kanjiConversionIfRequired(text) + if phE, !replaced, let queried = inputHandler?.currentLM.queryReplacementValue(key: buffer) { + buffer = ChineseConverter.kanjiConversionIfRequired(queried) + } if isServingIMEItself { DispatchQueue.main.async { guard let client = self.client() else { return }