From f486615194d1ebdcb6f41b7ead315b68eeac471a Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Thu, 16 Jun 2022 19:54:05 +0800 Subject: [PATCH] KeyHandler // +markNodesFixedIfNecessary(). --- .../ControllerModules/KeyHandler_Core.swift | 19 ++++++++++++++++++- .../KeyHandler_HandleInput.swift | 3 +++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/Source/Modules/ControllerModules/KeyHandler_Core.swift b/Source/Modules/ControllerModules/KeyHandler_Core.swift index f29c4ec8..1399df32 100644 --- a/Source/Modules/ControllerModules/KeyHandler_Core.swift +++ b/Source/Modules/ControllerModules/KeyHandler_Core.swift @@ -42,7 +42,7 @@ protocol KeyHandlerDelegate { class KeyHandler { let kEpsilon: Double = 0.000001 - let kMaxComposingBufferNeedsToWalkSize: Int = 10 + let kMaxComposingBufferNeedsToWalkSize = Int(max(12, ceil(Double(mgrPrefs.composingBufferSize) / 2))) var composer: Tekkon.Composer = .init() var compositor: Megrez.Compositor var currentLM: vChewing.LMInstantiator = .init() @@ -188,6 +188,23 @@ class KeyHandler { } } + func markNodesFixedIfNecessary() { + let width = compositor.grid.width + if width <= kMaxComposingBufferNeedsToWalkSize { + return + } + var index: Int = 0 + for anchor in walkedAnchors { + guard let node = anchor.node else { break } + if index >= width - kMaxComposingBufferNeedsToWalkSize { break } + if node.score < node.kSelectedCandidateScore { + compositor.grid.fixNodeSelectedCandidate( + location: index + anchor.spanningLength, value: node.currentKeyValue.value) + } + index += anchor.spanningLength + } + } + var candidatesArray: [String] { var arrCandidates: [String] = [] var arrNodes: [Megrez.NodeAnchor] = [] diff --git a/Source/Modules/ControllerModules/KeyHandler_HandleInput.swift b/Source/Modules/ControllerModules/KeyHandler_HandleInput.swift index 416f0ca6..120c46cc 100644 --- a/Source/Modules/ControllerModules/KeyHandler_HandleInput.swift +++ b/Source/Modules/ControllerModules/KeyHandler_HandleInput.swift @@ -190,6 +190,9 @@ extension KeyHandler { // ... get and tweak override model suggestion if possible... // dealWithOverrideModelSuggestions() // 暫時禁用,因為無法使其生效。 + // ... fix nodes if necessary... + markNodesFixedIfNecessary() + // ... then update the text. composer.clear()