From 7df892c5418027174da67ff3b029232464648012 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Mon, 19 Jun 2023 22:48:32 +0800 Subject: [PATCH] InputHandler // Use .ofSymbolTable() to handle `%symboldef`. --- Source/Modules/InputHandler_HandleStates.swift | 18 ++++++++++++++++++ Source/Modules/InputHandler_TriageInput.swift | 2 ++ 2 files changed, 20 insertions(+) diff --git a/Source/Modules/InputHandler_HandleStates.swift b/Source/Modules/InputHandler_HandleStates.swift index eb3a1cae..5c44f656 100644 --- a/Source/Modules/InputHandler_HandleStates.swift +++ b/Source/Modules/InputHandler_HandleStates.swift @@ -1089,4 +1089,22 @@ extension InputHandler { } return false } + + // MARK: - 處理磁帶模式的符號選單輸入 + + func handleCassetteSymbolTable(input: InputSignalProtocol) -> Bool { + guard let delegate = delegate else { return false } + guard prefs.cassetteEnabled else { return false } + let inputText = input.text + guard !inputText.isEmpty else { return false } + let queryString = calligrapher + inputText + let maybeResult = currentLM.cassetteSymbolDataFor(key: queryString) + guard let result = maybeResult else { return false } + let root = CandidateNode(name: queryString, symbols: result) + // 得在這裡先 commit buffer,不然會導致「在摁 ESC 離開符號選單時會重複輸入上一次的組字區的內容」的不當行為。 + let textToCommit = generateStateOfInputting(sansReading: true).displayedText + delegate.switchState(IMEState.ofCommitting(textToCommit: textToCommit)) + delegate.switchState(IMEState.ofSymbolTable(node: root)) + return true + } } diff --git a/Source/Modules/InputHandler_TriageInput.swift b/Source/Modules/InputHandler_TriageInput.swift index cd3c8867..0477a360 100644 --- a/Source/Modules/InputHandler_TriageInput.swift +++ b/Source/Modules/InputHandler_TriageInput.swift @@ -148,6 +148,8 @@ extension InputHandler { return handleHaninKeyboardSymbolModeToggle() } + if handleCassetteSymbolTable(input: input) { return true } + let hasQuickCandidates: Bool = state.type == .ofInputting && state.isCandidateContainer if input.modifierFlags == .shift {