From cf3d400858600423529e8856e2dc34ab015ae30d Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 14 May 2022 19:16:26 +0800 Subject: [PATCH] KeyHandler // Integrate InlineDumpPinyinInLieuOfZhuyin. --- .../ControllerModules/KeyHandler_Misc.swift | 27 +++++++++++++++++++ .../ControllerModules/KeyHandler_States.swift | 25 ++++++++++++----- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/Source/Modules/ControllerModules/KeyHandler_Misc.swift b/Source/Modules/ControllerModules/KeyHandler_Misc.swift index ad15ee8e..449a43bd 100644 --- a/Source/Modules/ControllerModules/KeyHandler_Misc.swift +++ b/Source/Modules/ControllerModules/KeyHandler_Misc.swift @@ -51,4 +51,31 @@ extension KeyHandler { } return cursorIndex } + + // 用於網頁 Ruby 的注音需要按照教科書印刷的方式來顯示輕聲,所以這裡處理一下。 + func cnvZhuyinKeyToTextbookReading(target: String, newSeparator: String = "-") -> String { + var arrReturn: [String] = [] + for neta in target.split(separator: "-") { + var newString = String(neta) + if String(neta.reversed()[0]) == "˙" { + newString = String(neta.dropLast()) + newString.insert("˙", at: newString.startIndex) + } + arrReturn.append(newString) + } + return arrReturn.joined(separator: newSeparator) + } + + // 用於網頁 Ruby 的拼音的陰平必須顯示,這裡處理一下。 + func restoreToneOneInZhuyinKey(target: String, newSeparator: String = "-") -> String { + var arrReturn: [String] = [] + for neta in target.split(separator: "-") { + var newNeta = String(neta) + if !"ˊˇˋ˙".contains(String(neta.reversed()[0])), !neta.contains("_") { + newNeta += "1" + } + arrReturn.append(newNeta) + } + return arrReturn.joined(separator: newSeparator) + } } diff --git a/Source/Modules/ControllerModules/KeyHandler_States.swift b/Source/Modules/ControllerModules/KeyHandler_States.swift index 97312be3..f547322b 100644 --- a/Source/Modules/ControllerModules/KeyHandler_States.swift +++ b/Source/Modules/ControllerModules/KeyHandler_States.swift @@ -281,11 +281,15 @@ extension KeyHandler { return false } - let readings: [String] = currentReadings() - let composingBuffer = - (IME.areWeUsingOurOwnPhraseEditor) - ? readings.joined(separator: "-") - : readings.joined(separator: " ") + var composingBuffer = currentReadings().joined(separator: "-") + if mgrPrefs.inlineDumpPinyinInLieuOfZhuyin { + composingBuffer = restoreToneOneInZhuyinKey(target: composingBuffer) // 恢復陰平標記 + composingBuffer = Tekkon.cnvPhonaToHanyuPinyin(target: composingBuffer) // 注音轉拼音 + } + + if !IME.areWeUsingOurOwnPhraseEditor { + composingBuffer = composingBuffer.replacingOccurrences(of: "-", with: " ") + } clear() @@ -309,7 +313,16 @@ extension KeyHandler { for theAnchor in _walkedNodes { if let node = theAnchor.node { - let key = node.currentKeyValue().key.replacingOccurrences(of: "-", with: " ") + var key = node.currentKeyValue().key + if mgrPrefs.inlineDumpPinyinInLieuOfZhuyin { + key = restoreToneOneInZhuyinKey(target: key) // 恢復陰平標記 + key = Tekkon.cnvPhonaToHanyuPinyin(target: key) // 注音轉拼音 + key = Tekkon.cnvHanyuPinyinToTextbookStyle(target: key) // 轉教科書式標調 + key = key.replacingOccurrences(of: "-", with: " ") + } else { + key = cnvZhuyinKeyToTextbookReading(target: key, newSeparator: " ") + } + let value = node.currentKeyValue().value if key.contains("_") { // 不要給標點符號等特殊元素加注音 composed += value