From 0e8b027674aced32867e562d9fc848988b053321 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Wed, 27 Jul 2022 14:55:42 +0800 Subject: [PATCH] SymbolNode // Add and call previous node references. --- Source/Modules/ControllerModules/InputState.swift | 5 ++++- .../ControllerModules/KeyHandler_HandleCandidate.swift | 5 ++++- .../Modules/ControllerModules/ctlInputMethod_Delegates.swift | 2 +- Source/Modules/LangModelRelated/LMSymbolNode.swift | 1 + 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Source/Modules/ControllerModules/InputState.swift b/Source/Modules/ControllerModules/InputState.swift index 5230386c..baf085b8 100644 --- a/Source/Modules/ControllerModules/InputState.swift +++ b/Source/Modules/ControllerModules/InputState.swift @@ -440,8 +440,11 @@ enum InputState { override public var type: StateType { .ofSymbolTable } var node: SymbolNode - init(node: SymbolNode, isTypingVertical: Bool) { + init(node: SymbolNode, previous: SymbolNode? = nil, isTypingVertical: Bool) { self.node = node + if let previous = previous { + self.node.previous = previous + } let candidates = node.children?.map(\.title) ?? [String]() super.init( composingBuffer: "", cursorIndex: 0, candidates: candidates.map { ("", $0) }, diff --git a/Source/Modules/ControllerModules/KeyHandler_HandleCandidate.swift b/Source/Modules/ControllerModules/KeyHandler_HandleCandidate.swift index 2f8eba7b..83501782 100644 --- a/Source/Modules/ControllerModules/KeyHandler_HandleCandidate.swift +++ b/Source/Modules/ControllerModules/KeyHandler_HandleCandidate.swift @@ -59,7 +59,7 @@ extension KeyHandler { || ((input.isCursorBackward || input.isCursorForward) && input.isShiftHold) if cancelCandidateKey { - if (state is InputState.AssociatedPhrases) + if state is InputState.AssociatedPhrases || mgrPrefs.useSCPCTypingMode || compositor.isEmpty { @@ -72,6 +72,9 @@ extension KeyHandler { } else { stateCallback(buildInputtingState) } + if let state = state as? InputState.SymbolTable, let nodePrevious = state.node.previous { + stateCallback(InputState.SymbolTable(node: nodePrevious, isTypingVertical: state.isTypingVertical)) + } return true } diff --git a/Source/Modules/ControllerModules/ctlInputMethod_Delegates.swift b/Source/Modules/ControllerModules/ctlInputMethod_Delegates.swift index 817176ce..c6f19fb3 100644 --- a/Source/Modules/ControllerModules/ctlInputMethod_Delegates.swift +++ b/Source/Modules/ControllerModules/ctlInputMethod_Delegates.swift @@ -101,7 +101,7 @@ extension ctlInputMethod: ctlCandidateDelegate { if let children = node.children, !children.isEmpty { handle(state: InputState.Empty()) // 防止縱橫排選字窗同時出現 handle( - state: InputState.SymbolTable(node: node, isTypingVertical: state.isTypingVertical) + state: InputState.SymbolTable(node: node, previous: state.node, isTypingVertical: state.isTypingVertical) ) } else { handle(state: InputState.Committing(textToCommit: node.title)) diff --git a/Source/Modules/LangModelRelated/LMSymbolNode.swift b/Source/Modules/LangModelRelated/LMSymbolNode.swift index e7270e83..dc2ae11c 100644 --- a/Source/Modules/LangModelRelated/LMSymbolNode.swift +++ b/Source/Modules/LangModelRelated/LMSymbolNode.swift @@ -29,6 +29,7 @@ import Foundation class SymbolNode { var title: String var children: [SymbolNode]? + var previous: SymbolNode? init(_ title: String, _ children: [SymbolNode]? = nil) { self.title = title