From fcad389e25543e4db49f26c022856d9ede8ff3ac Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 27 Aug 2022 22:48:38 +0800 Subject: [PATCH] CCBridge // +convertPunctuationsToVertical(). --- .../HotenkaCCBridge.swift | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Source/3rdParty/HotenkaChineseConverter/HotenkaCCBridge.swift b/Source/3rdParty/HotenkaChineseConverter/HotenkaCCBridge.swift index a580cf60..c713b0a2 100644 --- a/Source/3rdParty/HotenkaChineseConverter/HotenkaCCBridge.swift +++ b/Source/3rdParty/HotenkaChineseConverter/HotenkaCCBridge.swift @@ -11,6 +11,24 @@ import Foundation public enum ChineseConverter { public static let shared = HotenkaChineseConverter(plistDir: mgrLangModel.getBundleDataPath("convdict")) + private static var punctuationConversionTable: [(String, String)] = [ + ("【", "︻"), ("】", "︼"), ("〖", "︗"), ("〗", "︘"), ("〔", "︹"), ("〕", "︺"), ("《", "︽"), ("》", "︾"), + ("〈", "︿"), ("〉", "﹀"), ("「", "﹁"), ("」", "﹂"), ("『", "﹃"), ("』", "﹄"), ("{", "︷"), ("}", "︸"), + ("(", "︵"), (")", "︶"), ("[", "﹇"), ("]", "﹈"), + ] + + /// 將操作對象內的橫排標點轉為縱排標點。 + /// 本來是不推薦使用的,但某些極端的排版情形下、使用的中文字型不支援縱排標點自動切換,才需要這個功能。 + /// - Parameters: + /// - target: 轉換目標。 + /// - convert: 是否真的執行此操作。不填寫的話,該函式不執行。 + public static func hardenVerticalPunctuations(target: inout String, convert: Bool = false) { + guard convert else { return } + for neta in ChineseConverter.punctuationConversionTable { + target = target.replacingOccurrences(of: neta.0, with: neta.1) + } + } + // 給 JIS 轉換模式新增疊字符號支援。 private static func processKanjiRepeatSymbol(target: inout String) { guard !target.isEmpty else { return }