From 8678eb81adcef0a9f2b070fc0529608cd16e6361 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 27 Aug 2022 11:51:16 +0800 Subject: [PATCH 01/20] Repo // Update issue templates. --- .github/ISSUE_TEMPLATE/bug_report.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index d29629e9..83892d0e 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -35,9 +35,6 @@ assignees: "" **螢幕截圖或螢幕錄製** 如果您能夠提供像螢幕截圖或螢幕錄製供大家參考,我們可以從畫面中,看出更多只從文字內容無法了解的線索。 -**小麥注音是否也有該問題** -威注音一開始是小麥注音的下游。雖經大量修改與重構,但也難免會受到之前繼承過來的可能存在的上游 Bug 或設計缺陷的影響。 - 所以呢,這個問題也請答覆。但如果是威注音特有功能出現故障的話,那這個問題可以不用答覆。 **電腦環境** From 254934b219c178a4048c301e1d4ac42b3b0f92a2 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 27 Aug 2022 15:10:43 +0800 Subject: [PATCH 02/20] ctlIME // Simplify symbol menu processings for IMKCandidates. --- .../ctlInputMethod_Core.swift | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/Source/Modules/ControllerModules/ctlInputMethod_Core.swift b/Source/Modules/ControllerModules/ctlInputMethod_Core.swift index 6ad18b88..99cf1603 100644 --- a/Source/Modules/ControllerModules/ctlInputMethod_Core.swift +++ b/Source/Modules/ControllerModules/ctlInputMethod_Core.swift @@ -313,9 +313,15 @@ class ctlInputMethod: IMKInputController { if let state = state as? InputState.AssociatedPhrases { handleCandidatesPrepared(state.candidates, prefix: "⇧") } else if let state = state as? InputState.SymbolTable { - handleCandidatesPrepared(state.candidates) + // 分類符號選單不會出現同符異音項、不需要康熙 / JIS 轉換,所以使用簡化過的處理方式。 + arrResult = state.candidates.map(\.1) } else if let state = state as? InputState.ChoosingCandidate { - handleCandidatesPrepared(state.candidates) + guard !state.candidates.isEmpty else { return .init() } + if state.candidates[0].0.contains("_punctuation") { + arrResult = state.candidates.map(\.1) // 標點符號選單處理。 + } else { + handleCandidatesPrepared(state.candidates) + } } return arrResult @@ -372,12 +378,27 @@ class ctlInputMethod: IMKInputController { } } + // 分類符號選單不會出現同符異音項、不需要康熙 / JIS 轉換,所以使用簡化過的處理方式。 + func handleSymbolCandidatesSelected(_ candidates: [(String, String)]) { + for (i, neta) in candidates.enumerated() { + if candidateString.string == neta.1 { + indexDeducted = i + break + } + } + } + if let state = state as? InputState.AssociatedPhrases { handleCandidatesSelected(state.candidates, prefix: "⇧") } else if let state = state as? InputState.SymbolTable { - handleCandidatesSelected(state.candidates) + handleSymbolCandidatesSelected(state.candidates) } else if let state = state as? InputState.ChoosingCandidate { - handleCandidatesSelected(state.candidates) + guard !state.candidates.isEmpty else { return } + if state.candidates[0].0.contains("_punctuation") { + handleSymbolCandidatesSelected(state.candidates) // 標點符號選單處理。 + } else { + handleCandidatesSelected(state.candidates) + } } keyHandler( keyHandler, From c67b9a3d2ad402a3bff27c76de81efa529a4d1f4 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 27 Aug 2022 16:30:05 +0800 Subject: [PATCH 03/20] CCBridge // Add repeat symbols during JIS conversion. --- .../HotenkaCCBridge.swift | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Source/3rdParty/HotenkaChineseConverter/HotenkaCCBridge.swift b/Source/3rdParty/HotenkaChineseConverter/HotenkaCCBridge.swift index 07f26b5d..a580cf60 100644 --- a/Source/3rdParty/HotenkaChineseConverter/HotenkaCCBridge.swift +++ b/Source/3rdParty/HotenkaChineseConverter/HotenkaCCBridge.swift @@ -11,6 +11,19 @@ import Foundation public enum ChineseConverter { public static let shared = HotenkaChineseConverter(plistDir: mgrLangModel.getBundleDataPath("convdict")) + // 給 JIS 轉換模式新增疊字符號支援。 + private static func processKanjiRepeatSymbol(target: inout String) { + guard !target.isEmpty else { return } + var arr = target.charComponents + for (i, char) in arr.enumerated() { + if i == 0 { continue } + if char == target.charComponents[i - 1] { + arr[i] = "々" + } + } + target = arr.joined() + } + /// 漢字數字大寫轉換專用辭典,順序為:康熙、當代繁體中文、日文、簡體中文。 private static let currencyNumeralDictTable: [String: (String, String, String, String)] = [ "一": ("壹", "壹", "壹", "壹"), "二": ("貳", "貳", "弐", "贰"), "三": ("叄", "參", "参", "叁"), @@ -75,6 +88,8 @@ public enum ChineseConverter { public static func cnvTradToJIS(_ strObj: String) -> String { // 該轉換是由康熙繁體轉換至日語當用漢字的,所以需要先跑一遍康熙轉換。 let strObj = cnvTradToKangXi(strObj) - return shared.convert(strObj, to: .zhHansJP) + var result = shared.convert(strObj, to: .zhHansJP) + processKanjiRepeatSymbol(target: &result) + return result } } From d27094976e6ef6618342a16e54bb12b4232dfcc8 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 27 Aug 2022 22:48:46 +0800 Subject: [PATCH 04/20] InputState // Typo fix. --- Source/Modules/ControllerModules/InputState.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Modules/ControllerModules/InputState.swift b/Source/Modules/ControllerModules/InputState.swift index bff3f72e..d5f0b9b0 100644 --- a/Source/Modules/ControllerModules/InputState.swift +++ b/Source/Modules/ControllerModules/InputState.swift @@ -471,7 +471,7 @@ public enum InputState { super.init(composingBuffer: composingBuffer, cursorIndex: cursorIndex, nodeValuesArray: nodeValuesArray) } - // 這個函數尚未經過嚴格的單元測試。請在使用時確保 chosenCandidateString 為空。 + // 這個函式尚未經過嚴格的單元測試。請在使用時確保 chosenCandidateString 為空。 // 不為空的話,該參數的返回值就會有對應的影響、顯示成類似 macOS 內建注音輸入法那樣子。 // 本來想給輸入法拓展這方面的功能的,奈何 ctlInputMethod.candidateSelectionChanged() 這函式太氣人。 // 想要講的幹話已經在那邊講完了,感興趣的可以去看看。 From 4e8039550e34d002e219990e8913a24c3eb40d05 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 27 Aug 2022 19:18:18 +0800 Subject: [PATCH 05/20] Repo // Megrez v2.0.3 update. --- .../LanguageParsers/Megrez/6_Node.swift | 66 ++++++++++++------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/Source/Modules/LanguageParsers/Megrez/6_Node.swift b/Source/Modules/LanguageParsers/Megrez/6_Node.swift index c17c457c..ebbc9df9 100644 --- a/Source/Modules/LanguageParsers/Megrez/6_Node.swift +++ b/Source/Modules/LanguageParsers/Megrez/6_Node.swift @@ -140,6 +140,43 @@ extension Array where Element == Megrez.Compositor.Node { /// 從一個節點陣列當中取出目前的索引鍵陣列。 public var keys: [String] { map(\.key) } + /// 返回一連串的節點起點。結果為 (Result A, Result B) 辭典陣列 + /// Result A 以索引查座標,Result B 以座標查索引。 + public var nodeBorderPointDictPair: ([Int: Int], [Int: Int]) { + // Result A 以索引查座標,Result B 以座標查索引。 + var resultA = [Int: Int]() + var resultB = [Int: Int]() + var i = 0 + for (j, neta) in enumerated() { + resultA[j] = i + neta.keyArray.forEach { _ in + resultB[i] = j + i += 1 + } + } + resultA[resultA.count] = i + resultB[i] = resultB.count + return (resultA, resultB) + } + + /// 總讀音單元數量,也就是總幅位長度。 + public var totalKeyCount: Int { map(\.keyArray.count).reduce(0, +) } + + /// 根據給定的游標,返回其前後最近的邊界點。 + /// - Parameter cursor: 給定的游標。 + public func contextRange(ofGivenCursor cursor: Int) -> Range { + guard !isEmpty else { return 0..<0 } + let lastSpanningLength = reversed()[0].keyArray.count + var nilReturn = (totalKeyCount - lastSpanningLength)..= totalKeyCount { return nilReturn } // 防呆 + let cursor = Swift.max(0, cursor) // 防呆 + nilReturn = cursor.. Megrez.Compositor.Node? { guard !isEmpty else { return nil } - let cursor = Swift.max(0, Swift.min(cursor, keys.count)) - - if cursor == 0, let theFirst = first { - outCursorPastNode = theFirst.spanLength - return theFirst - } - - // 同時應對「游標在右端」與「游標離右端還差一個位置」的情形。 - if cursor >= keys.count - 1, let theLast = last { - outCursorPastNode = keys.count - return theLast - } - - var accumulated = 0 - for neta in self { - accumulated += neta.spanLength - if accumulated > cursor { - outCursorPastNode = accumulated - return neta - } - } - - // 下述情形本不應該出現。 - return nil + let cursor = Swift.min(Swift.max(0, cursor), totalKeyCount - 1) // 防呆 + let range = contextRange(ofGivenCursor: cursor) + outCursorPastNode = range.upperBound + guard let rearNodeID = nodeBorderPointDictPair.1[cursor] else { return nil } + return count - 1 >= rearNodeID ? self[rearNodeID] : nil } /// 在陣列內以給定游標位置找出對應的節點。 From 633d656144dabac05335eb5db36b6e7790055877 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 27 Aug 2022 20:43:46 +0800 Subject: [PATCH 06/20] UOM // Sync recent Megrez updates. --- .../LangModelRelated/SubLMs/lmUserOverride.swift | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/Source/Modules/LangModelRelated/SubLMs/lmUserOverride.swift b/Source/Modules/LangModelRelated/SubLMs/lmUserOverride.swift index afda1f2a..ba8edbbd 100644 --- a/Source/Modules/LangModelRelated/SubLMs/lmUserOverride.swift +++ b/Source/Modules/LangModelRelated/SubLMs/lmUserOverride.swift @@ -32,7 +32,7 @@ extension vChewing { ) { // 參數合規性檢查。 guard !walkedAfter.isEmpty, !walkedBefore.isEmpty else { return } - guard walkedBefore.totalReadingsCount == walkedAfter.totalReadingsCount else { return } + guard walkedBefore.totalKeyCount == walkedAfter.totalKeyCount else { return } // 先判斷用哪種覆寫方法。 var actualCursor = 0 guard let currentNode = walkedAfter.findNode(at: cursor, target: &actualCursor) else { return } @@ -213,18 +213,6 @@ extension vChewing.LMUserOverride { } } -// MARK: - Array Extensions. - -extension Array where Element == Megrez.Compositor.Node { - public var totalReadingsCount: Int { - var counter = 0 - for node in self { - counter += node.keyArray.count - } - return counter - } -} - // MARK: - Private Methods extension vChewing.LMUserOverride { From 1927d1ca7400db371fd24aded6e09fdf39c15eb2 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 27 Aug 2022 17:20:24 +0800 Subject: [PATCH 07/20] KeyHandler // Fix an overkill error in consolidateCursorContext(). --- .../ControllerModules/KeyHandler_Core.swift | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/Source/Modules/ControllerModules/KeyHandler_Core.swift b/Source/Modules/ControllerModules/KeyHandler_Core.swift index 2ee93f28..8ac1887d 100644 --- a/Source/Modules/ControllerModules/KeyHandler_Core.swift +++ b/Source/Modules/ControllerModules/KeyHandler_Core.swift @@ -142,38 +142,37 @@ public class KeyHandler { /// /// 威注音輸入法截至 v1.9.3 SP2 版為止都受到上游的這個 Bug 的影響,且在 v1.9.4 版利用該函式修正了這個缺陷。 /// 該修正必須搭配至少天權星組字引擎 v2.0.2 版方可生效。算法可能比較囉唆,但至少在常用情形下不會再發生該問題。 - /// - Parameters: - /// - theCandidate: 要拿來覆寫的詞音配對。 - /// - cursorSpecified: 給定作業目標游標位置(不知道怎麼用的話就不要用),不設定的話則改用 actualCandidateCursor。 - func consolidateCursorContext(with theCandidate: Megrez.Compositor.Candidate = .init(), cursorSpecified: Int? = nil) { - var cursorSpecified = cursorSpecified ?? actualCandidateCursor - if cursorSpecified != actualCandidateCursor { - cursorSpecified = max(0, min(cursorSpecified, compositor.width - 1)) // 糾正傳入的數值。 - } - let grid = compositor - var frontBoundaryEX = compositor.width - 1 - var rearBoundaryEX = 0 - if grid.overrideCandidate(theCandidate, at: cursorSpecified) { - guard let node = compositor.walkedNodes.findNode(at: cursorSpecified, target: &frontBoundaryEX) else { - return - } - rearBoundaryEX = max(0, frontBoundaryEX - node.keyArray.count) + /// - Parameter theCandidate: 要拿來覆寫的詞音配對。 + func consolidateCursorContext(with theCandidate: Megrez.Compositor.Candidate) { + var grid = compositor + var frontBoundaryEX = actualCandidateCursor + 1 + var rearBoundaryEX = actualCandidateCursor + var debugIntelToPrint = "" + if grid.overrideCandidate(theCandidate, at: actualCandidateCursor) { + grid.walk() + let range = grid.walkedNodes.contextRange(ofGivenCursor: actualCandidateCursor) + rearBoundaryEX = range.lowerBound + frontBoundaryEX = range.upperBound + debugIntelToPrint.append("EX: \(rearBoundaryEX)..<\(frontBoundaryEX), ") } - var frontBoundary = 0 - guard let node = compositor.walkedNodes.findNode(at: cursorSpecified, target: &frontBoundary) else { return } + let range = compositor.walkedNodes.contextRange(ofGivenCursor: actualCandidateCursor) + var rearBoundary = min(range.lowerBound, rearBoundaryEX) + var frontBoundary = max(range.upperBound, frontBoundaryEX) - var rearBoundary = min(max(0, frontBoundary - node.keyArray.count), rearBoundaryEX) // 防呆 - frontBoundary = max(min(frontBoundary, compositor.width), frontBoundaryEX) // 防呆。 + debugIntelToPrint.append("INI: \(rearBoundary)..<\(frontBoundary), ") let cursorBackup = compositor.cursor while compositor.cursor > rearBoundary { compositor.jumpCursorBySpan(to: .rear) } rearBoundary = min(compositor.cursor, rearBoundary) compositor.cursor = cursorBackup // 游標歸位,再接著計算。 while compositor.cursor < frontBoundary { compositor.jumpCursorBySpan(to: .front) } - frontBoundary = max(compositor.cursor, frontBoundary) + frontBoundary = min(max(compositor.cursor, frontBoundary), compositor.width) compositor.cursor = cursorBackup // 計算結束,游標歸位。 + debugIntelToPrint.append("FIN: \(rearBoundary)..<\(frontBoundary)") + IME.prtDebugIntel(debugIntelToPrint) + // 接下來獲取這個範圍內的媽的都不知道該怎麼講了。 var nodeIndices = [Int]() // 僅作統計用。 From a0400c111a8ca527ef0ed566207ca4954bf4265c Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 27 Aug 2022 22:54:28 +0800 Subject: [PATCH 08/20] ctlIME // Move isVerticalTyping to KeyHandlerDelegate. --- Source/Modules/ControllerModules/KeyHandler_Core.swift | 1 + .../ControllerModules/ctlInputMethod_Core.swift | 10 ---------- .../ControllerModules/ctlInputMethod_Delegates.swift | 10 ++++++++++ 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Source/Modules/ControllerModules/KeyHandler_Core.swift b/Source/Modules/ControllerModules/KeyHandler_Core.swift index 8ac1887d..09016f4c 100644 --- a/Source/Modules/ControllerModules/KeyHandler_Core.swift +++ b/Source/Modules/ControllerModules/KeyHandler_Core.swift @@ -19,6 +19,7 @@ import Foundation /// KeyHandler 委任協定 protocol KeyHandlerDelegate { var clientBundleIdentifier: String { get } + var isVerticalTyping: Bool { get } func ctlCandidate() -> ctlCandidateProtocol func keyHandler( _: KeyHandler, didSelectCandidateAt index: Int, diff --git a/Source/Modules/ControllerModules/ctlInputMethod_Core.swift b/Source/Modules/ControllerModules/ctlInputMethod_Core.swift index 99cf1603..dab2ccf2 100644 --- a/Source/Modules/ControllerModules/ctlInputMethod_Core.swift +++ b/Source/Modules/ControllerModules/ctlInputMethod_Core.swift @@ -39,16 +39,6 @@ class ctlInputMethod: IMKInputController { /// 當前這個 ctlInputMethod 副本是否處於英數輸入模式。 var isASCIIMode: Bool = false - /// 記錄當前輸入環境是縱排輸入還是橫排輸入。 - public var isVerticalTyping: Bool { - guard let client = client() else { return false } - var textFrame = NSRect.zero - let attributes: [AnyHashable: Any]? = client.attributes( - forCharacterIndex: 0, lineHeightRectangle: &textFrame - ) - return (attributes?["IMKTextOrientation"] as? NSNumber)?.intValue == 0 || false - } - /// 切換當前 ctlInputMethod 副本的英數輸入模式開關。 func toggleASCIIMode() -> Bool { resetKeyHandler() diff --git a/Source/Modules/ControllerModules/ctlInputMethod_Delegates.swift b/Source/Modules/ControllerModules/ctlInputMethod_Delegates.swift index 1d634e75..d0746aa4 100644 --- a/Source/Modules/ControllerModules/ctlInputMethod_Delegates.swift +++ b/Source/Modules/ControllerModules/ctlInputMethod_Delegates.swift @@ -13,6 +13,16 @@ import Cocoa // MARK: - KeyHandler Delegate extension ctlInputMethod: KeyHandlerDelegate { + /// 記錄當前輸入環境是縱排輸入還是橫排輸入。 + public var isVerticalTyping: Bool { + guard let client = client() else { return false } + var textFrame = NSRect.zero + let attributes: [AnyHashable: Any]? = client.attributes( + forCharacterIndex: 0, lineHeightRectangle: &textFrame + ) + return (attributes?["IMKTextOrientation"] as? NSNumber)?.intValue == 0 || false + } + var clientBundleIdentifier: String { guard let client = client() else { return "" } return client.bundleIdentifier() ?? "" From 80c0721a282412e0ce2bfabf275b1ce50dfd6092 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 27 Aug 2022 22:48:38 +0800 Subject: [PATCH 09/20] CCBridge // +convertPunctuationsToVertical(). --- .../HotenkaCCBridge.swift | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Source/3rdParty/HotenkaChineseConverter/HotenkaCCBridge.swift b/Source/3rdParty/HotenkaChineseConverter/HotenkaCCBridge.swift index a580cf60..598e3d98 100644 --- a/Source/3rdParty/HotenkaChineseConverter/HotenkaCCBridge.swift +++ b/Source/3rdParty/HotenkaChineseConverter/HotenkaCCBridge.swift @@ -11,6 +11,23 @@ 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 } From a5318e82ddc68e8a4b9f22d1734377e7ee557ee4 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 27 Aug 2022 23:12:54 +0800 Subject: [PATCH 10/20] mgrPrefs // +hardenVerticalPunctuations. --- Source/Modules/IMEModules/mgrPrefs.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Source/Modules/IMEModules/mgrPrefs.swift b/Source/Modules/IMEModules/mgrPrefs.swift index 36c23662..2326ae6e 100644 --- a/Source/Modules/IMEModules/mgrPrefs.swift +++ b/Source/Modules/IMEModules/mgrPrefs.swift @@ -53,6 +53,7 @@ public enum UserDef: String, CaseIterable { case kUpperCaseLetterKeyBehavior = "UpperCaseLetterKeyBehavior" case kDisableShiftTogglingAlphanumericalMode = "DisableShiftTogglingAlphanumericalMode" case kConsolidateContextOnCandidateSelection = "ConsolidateContextOnCandidateSelection" + case kHardenVerticalPunctuations = "HardenVerticalPunctuations" case kUseIMKCandidateWindow = "UseIMKCandidateWindow" case kHandleDefaultCandidateFontsByLangIdentifier = "HandleDefaultCandidateFontsByLangIdentifier" @@ -297,6 +298,9 @@ public enum mgrPrefs { UserDefaults.standard.setDefault( mgrPrefs.consolidateContextOnCandidateSelection, forKey: UserDef.kConsolidateContextOnCandidateSelection.rawValue ) + UserDefaults.standard.setDefault( + mgrPrefs.hardenVerticalPunctuations, forKey: UserDef.kHardenVerticalPunctuations.rawValue + ) // ----- @@ -425,6 +429,9 @@ public enum mgrPrefs { @UserDefault(key: UserDef.kConsolidateContextOnCandidateSelection.rawValue, defaultValue: true) static var consolidateContextOnCandidateSelection: Bool + @UserDefault(key: UserDef.kHardenVerticalPunctuations.rawValue, defaultValue: false) + static var hardenVerticalPunctuations: Bool + // MARK: - Settings (Tier 2) @UserDefault(key: UserDef.kUseIMKCandidateWindow.rawValue, defaultValue: false) From 7d60f6ad0e4a075fb412c41c421a5b5c998d557d Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 27 Aug 2022 22:57:38 +0800 Subject: [PATCH 11/20] KeyHandler // Apply hardenVerticalPunctuations(). --- Source/Modules/ControllerModules/KeyHandler_States.swift | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/Modules/ControllerModules/KeyHandler_States.swift b/Source/Modules/ControllerModules/KeyHandler_States.swift index ee24ce2c..c82bf2c2 100644 --- a/Source/Modules/ControllerModules/KeyHandler_States.swift +++ b/Source/Modules/ControllerModules/KeyHandler_States.swift @@ -22,7 +22,13 @@ extension KeyHandler { /// 「更新內文組字區 (Update the composing buffer)」是指要求客體軟體將組字緩衝區的內容 /// 換成由此處重新生成的組字字串(NSAttributeString,否則會不顯示)。 var tooltipParameterRef: [String] = ["", ""] - let nodeValuesArray: [String] = compositor.walkedNodes.values + let nodeValuesArray: [String] = compositor.walkedNodes.values.map { + guard let delegate = delegate, delegate.isVerticalTyping else { return $0 } + guard mgrPrefs.hardenVerticalPunctuations else { return $0 } + var neta = $0 + ChineseConverter.hardenVerticalPunctuations(target: &neta, convert: delegate.isVerticalTyping) + return neta + } var composedStringCursorIndex = 0 var readingCursorIndex = 0 /// IMK 協定的內文組字區的游標長度與游標位置無法正確統計 UTF8 高萬字(比如 emoji)的長度, From a3a6fb1ebcba88230a3e2bc0d0796b3e62496887 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sat, 27 Aug 2022 23:33:22 +0800 Subject: [PATCH 12/20] PrefUI // +hardenVerticalPunctuations. --- .../PrefUI/suiPrefPaneDictionary.swift | 17 ++++++++++++++++- Source/Resources/Base.lproj/Localizable.strings | 2 ++ Source/Resources/en.lproj/Localizable.strings | 2 ++ Source/Resources/ja.lproj/Localizable.strings | 2 ++ .../Resources/zh-Hans.lproj/Localizable.strings | 2 ++ .../Resources/zh-Hant.lproj/Localizable.strings | 2 ++ 6 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Source/Modules/UIModules/PrefUI/suiPrefPaneDictionary.swift b/Source/Modules/UIModules/PrefUI/suiPrefPaneDictionary.swift index ad486cc6..400d8d5a 100644 --- a/Source/Modules/UIModules/PrefUI/suiPrefPaneDictionary.swift +++ b/Source/Modules/UIModules/PrefUI/suiPrefPaneDictionary.swift @@ -27,6 +27,8 @@ struct suiPrefPaneDictionary: View { forKey: UserDef.kUseFixecCandidateOrderOnSelection.rawValue) @State private var selConsolidateContextOnCandidateSelection: Bool = UserDefaults.standard.bool( forKey: UserDef.kConsolidateContextOnCandidateSelection.rawValue) + @State private var selHardenVerticalPunctuations: Bool = UserDefaults.standard.bool( + forKey: UserDef.kHardenVerticalPunctuations.rawValue) private let contentMaxHeight: Double = 430 private let contentWidth: Double = { @@ -112,7 +114,8 @@ struct suiPrefPaneDictionary: View { mgrPrefs.shouldAutoReloadUserDataFiles = selAutoReloadUserData } ).controlSize(.small) - Divider() + } + Preferences.Section(title: "") { Toggle( LocalizedStringKey("Enable CNS11643 Support (2022-08-02)"), isOn: $selEnableCNS11643.onChange { @@ -151,6 +154,18 @@ struct suiPrefPaneDictionary: View { mgrPrefs.consolidateContextOnCandidateSelection = selConsolidateContextOnCandidateSelection } ) + Toggle( + LocalizedStringKey("Harden vertical punctuations during vertical typing (not recommended)"), + isOn: $selHardenVerticalPunctuations.onChange { + mgrPrefs.hardenVerticalPunctuations = selHardenVerticalPunctuations + } + ) + Text( + LocalizedStringKey( + "⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." + ) + ) + .preferenceDescription().fixedSize(horizontal: false, vertical: true) } } } diff --git a/Source/Resources/Base.lproj/Localizable.strings b/Source/Resources/Base.lproj/Localizable.strings index f9e3112b..1f694002 100644 --- a/Source/Resources/Base.lproj/Localizable.strings +++ b/Source/Resources/Base.lproj/Localizable.strings @@ -148,6 +148,8 @@ "for cycling pages" = "for cycling pages"; "General" = "General"; "Hanyu Pinyin with Numeral Intonation" = "Hanyu Pinyin with Numeral Intonation"; +"Harden vertical punctuations during vertical typing (not recommended)" = "Harden vertical punctuations during vertical typing (not recommended)"; +"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." = "⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal."; "Horizontal" = "Horizontal"; "Hsu" = "Hsu"; "Hualuo Pinyin with Numeral Intonation" = "Hualuo Pinyin with Numeral Intonation"; diff --git a/Source/Resources/en.lproj/Localizable.strings b/Source/Resources/en.lproj/Localizable.strings index f9e3112b..1f694002 100644 --- a/Source/Resources/en.lproj/Localizable.strings +++ b/Source/Resources/en.lproj/Localizable.strings @@ -148,6 +148,8 @@ "for cycling pages" = "for cycling pages"; "General" = "General"; "Hanyu Pinyin with Numeral Intonation" = "Hanyu Pinyin with Numeral Intonation"; +"Harden vertical punctuations during vertical typing (not recommended)" = "Harden vertical punctuations during vertical typing (not recommended)"; +"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." = "⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal."; "Horizontal" = "Horizontal"; "Hsu" = "Hsu"; "Hualuo Pinyin with Numeral Intonation" = "Hualuo Pinyin with Numeral Intonation"; diff --git a/Source/Resources/ja.lproj/Localizable.strings b/Source/Resources/ja.lproj/Localizable.strings index e657814a..dd56d107 100644 --- a/Source/Resources/ja.lproj/Localizable.strings +++ b/Source/Resources/ja.lproj/Localizable.strings @@ -148,6 +148,8 @@ "for cycling pages" = "候補陳列ページ"; "General" = "全般設定"; "Hanyu Pinyin with Numeral Intonation" = "漢語弁音 (ローマ字+数字音調)"; +"Harden vertical punctuations during vertical typing (not recommended)" = "縦書きの時に、引用符・括弧などを強制的に縦書き文字と変換する(不推奨)"; +"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." = "⚠︎ 該当の組版用フォントには縦書き(引用符・括弧)変換機能が備えていない限り、この機能を使う甲斐がある。一旦使うと、入力した全ての引用符・括弧は永遠的に縦書きの様式になる。例え入力を受けているアプリ(例えばワープロソフとなど)の書写方向は横書きと変えたとしても、これらの入力済みの引用符・括弧は全て縦書きの見た目であり、削除してから入力し直す必要になる。"; "Horizontal" = "横型陳列"; "Hsu" = "許氏国音自然配列"; "Hualuo Pinyin with Numeral Intonation" = "中華ローマ弁音 (ローマ字+数字音調)"; diff --git a/Source/Resources/zh-Hans.lproj/Localizable.strings b/Source/Resources/zh-Hans.lproj/Localizable.strings index b5169091..be143817 100644 --- a/Source/Resources/zh-Hans.lproj/Localizable.strings +++ b/Source/Resources/zh-Hans.lproj/Localizable.strings @@ -148,6 +148,8 @@ "for cycling pages" = "轮替页面"; "General" = "通用设定"; "Hanyu Pinyin with Numeral Intonation" = "汉语拼音+数字标调"; +"Harden vertical punctuations during vertical typing (not recommended)" = "在纵排书写时,强制转换标点为纵排形式(不推荐)"; +"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." = "⚠︎ 该功能当且仅当目前的排版字型不支援纵排标点动态显示转义的情况下才有用。一旦使用了,所有敲出去的标点都会被永久转换为静态纵排标点:哪怕当前编辑器的排版模式已经改成横排,这些已经输入的标点也都还是纵排标点字符。"; "Horizontal" = "横向布局"; "Hsu" = "许氏国音自然排列"; "Hualuo Pinyin with Numeral Intonation" = "华罗拼音+数字标调"; diff --git a/Source/Resources/zh-Hant.lproj/Localizable.strings b/Source/Resources/zh-Hant.lproj/Localizable.strings index d0c5c1ac..d4bef2d0 100644 --- a/Source/Resources/zh-Hant.lproj/Localizable.strings +++ b/Source/Resources/zh-Hant.lproj/Localizable.strings @@ -148,6 +148,8 @@ "for cycling pages" = "輪替頁面"; "General" = "通用設定"; "Hanyu Pinyin with Numeral Intonation" = "漢語拼音+數字標調"; +"Harden vertical punctuations during vertical typing (not recommended)" = "在縱排書寫時,強制轉換標點為縱排形式(不推薦)"; +"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." = "⚠︎ 該功能當且僅當目前的排版字型不支援縱排標點動態顯示轉義的情況下才有用。一旦使用了,所有敲出去的標點都會被永久轉換為靜態縱排標點:哪怕當前編輯器的排版模式已經改成橫排,這些已經輸入的標點也都還是縱排標點字符。"; "Horizontal" = "橫向佈局"; "Hsu" = "許氏國音自然排列"; "Hualuo Pinyin with Numeral Intonation" = "華羅拼音+數字標調"; From add4fe088689007b9819dc0b4bea01bdb24e7d05 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sun, 28 Aug 2022 00:10:52 +0800 Subject: [PATCH 13/20] PrefUI // Add some extra descriptions to the Dictionary pane. --- Source/Modules/UIModules/PrefUI/suiPrefPaneDictionary.swift | 6 ++++++ Source/Resources/Base.lproj/Localizable.strings | 1 + Source/Resources/en.lproj/Localizable.strings | 1 + Source/Resources/ja.lproj/Localizable.strings | 1 + Source/Resources/zh-Hans.lproj/Localizable.strings | 1 + Source/Resources/zh-Hant.lproj/Localizable.strings | 1 + 6 files changed, 11 insertions(+) diff --git a/Source/Modules/UIModules/PrefUI/suiPrefPaneDictionary.swift b/Source/Modules/UIModules/PrefUI/suiPrefPaneDictionary.swift index 400d8d5a..55dd18d7 100644 --- a/Source/Modules/UIModules/PrefUI/suiPrefPaneDictionary.swift +++ b/Source/Modules/UIModules/PrefUI/suiPrefPaneDictionary.swift @@ -154,6 +154,12 @@ struct suiPrefPaneDictionary: View { mgrPrefs.consolidateContextOnCandidateSelection = selConsolidateContextOnCandidateSelection } ) + Text( + LocalizedStringKey( + "For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." + ) + ) + .preferenceDescription().fixedSize(horizontal: false, vertical: true) Toggle( LocalizedStringKey("Harden vertical punctuations during vertical typing (not recommended)"), isOn: $selHardenVerticalPunctuations.onChange { diff --git a/Source/Resources/Base.lproj/Localizable.strings b/Source/Resources/Base.lproj/Localizable.strings index 1f694002..485b0489 100644 --- a/Source/Resources/Base.lproj/Localizable.strings +++ b/Source/Resources/Base.lproj/Localizable.strings @@ -196,4 +196,5 @@ "Use Shift Key Accommodation in all cases" = "Use Shift Key Accommodation in all cases"; "Vertical" = "Vertical"; "Warning: This page is for testing future features. \nFeatures listed here may not work as expected." = "Warning: This page is for testing future features. \nFeatures listed here may not work as expected."; +"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." = "For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is."; "Yale Pinyin with Numeral Intonation" = "Yale Pinyin with Numeral Intonation"; diff --git a/Source/Resources/en.lproj/Localizable.strings b/Source/Resources/en.lproj/Localizable.strings index 1f694002..485b0489 100644 --- a/Source/Resources/en.lproj/Localizable.strings +++ b/Source/Resources/en.lproj/Localizable.strings @@ -196,4 +196,5 @@ "Use Shift Key Accommodation in all cases" = "Use Shift Key Accommodation in all cases"; "Vertical" = "Vertical"; "Warning: This page is for testing future features. \nFeatures listed here may not work as expected." = "Warning: This page is for testing future features. \nFeatures listed here may not work as expected."; +"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." = "For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is."; "Yale Pinyin with Numeral Intonation" = "Yale Pinyin with Numeral Intonation"; diff --git a/Source/Resources/ja.lproj/Localizable.strings b/Source/Resources/ja.lproj/Localizable.strings index dd56d107..b9cf7651 100644 --- a/Source/Resources/ja.lproj/Localizable.strings +++ b/Source/Resources/ja.lproj/Localizable.strings @@ -196,4 +196,5 @@ "Use Shift Key Accommodation in all cases" = "いずれの客体アプリにも Shift キーの互換性措置を起用"; "Vertical" = "縦型陳列"; "Warning: This page is for testing future features. \nFeatures listed here may not work as expected." = "警告:これからの新機能テストのために作ったページですから、\nここで陳列されている諸機能は予想通り動けるだと思わないでください。"; +"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." = "例えば、入力緩衝列には「章太炎」という節点があり、その範囲は [0,3) である。もし、「太」を「泰」にしたいのなら、今回の作業範囲は [1,2) で、「章太炎」の範囲と重ねてしまう。この場合、もし、事前強固措置がなければ、今回の作業でこの単語は「張泰言」のような望ましくない変換結果になってしまう。事前強固措置があるからこそ、「章泰炎」のような正確な作業結果の保証である。"; "Yale Pinyin with Numeral Intonation" = "イェール弁音 (ローマ字+数字音調)"; diff --git a/Source/Resources/zh-Hans.lproj/Localizable.strings b/Source/Resources/zh-Hans.lproj/Localizable.strings index be143817..af68021d 100644 --- a/Source/Resources/zh-Hans.lproj/Localizable.strings +++ b/Source/Resources/zh-Hans.lproj/Localizable.strings @@ -196,4 +196,5 @@ "Use Shift Key Accommodation in all cases" = "对任何客体应用均启用 Shift 键相容性措施"; "Vertical" = "纵向布局"; "Warning: This page is for testing future features. \nFeatures listed here may not work as expected." = "警告:该页面仅作未来功能测试所用。\n在此列出的功能并非处于完全可用之状态。"; +"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." = "打比方说,你敲了「章太炎」,你想将「太」改成「泰」。这个操作的作业索引范围是开闭区间 [1,2),会切到「章太炎」这个节点的所在索引范围 [0,3)。如果没有事前巩固处理的话,这个词会在你选字之后变成诸如「张泰言」这种你不想要的自动选字结果。当且仅当你启用了这个巩固功能的前提下,你选字之后的结果才会是「章泰炎」这种你想要的结果。"; "Yale Pinyin with Numeral Intonation" = "耶鲁拼音+数字标调"; diff --git a/Source/Resources/zh-Hant.lproj/Localizable.strings b/Source/Resources/zh-Hant.lproj/Localizable.strings index d4bef2d0..c66661f8 100644 --- a/Source/Resources/zh-Hant.lproj/Localizable.strings +++ b/Source/Resources/zh-Hant.lproj/Localizable.strings @@ -196,4 +196,5 @@ "Use Shift Key Accommodation in all cases" = "對任何客體應用均啟用 Shift 鍵相容性措施"; "Vertical" = "縱向佈局"; "Warning: This page is for testing future features. \nFeatures listed here may not work as expected." = "警告:該頁面僅作未來功能測試所用。\n在此列出的功能並非處於完全可用之狀態。"; +"For example: When typing “章太炎” and you want to override the “太” with “泰”, and the raw operation index range [1,2) which bounds are cutting the current node “章太炎” in range [0,3). If having lack of the pre-consolidation process, this word will become something like “張泰言” after the candidate selection. Only if we enable this consolidation, this word will become “章泰炎” which is the expected result that the context is kept as-is." = "打比方說,你敲了「章太炎」,你想將「太」改成「泰」。這個操作的作業索引範圍是開閉區間 [1,2),會切到「章太炎」這個節點的所在索引範圍 [0,3)。如果沒有事前鞏固處理的話,這個詞會在你選字之後變成諸如「張泰言」這種你不想要的自動選字結果。當且僅當你啟用了這個鞏固功能的前提下,你選字之後的結果才會是「章泰炎」這種你想要的結果。"; "Yale Pinyin with Numeral Intonation" = "耶魯拼音+數字標調"; From 93e69b9b7347c4138eb853a4c9ec685e602be944 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sun, 28 Aug 2022 00:36:19 +0800 Subject: [PATCH 14/20] PrefUI // Slightly tweak contentMaxHeight. --- Source/Modules/UIModules/PrefUI/suiPrefPaneDevZone.swift | 2 +- Source/Modules/UIModules/PrefUI/suiPrefPaneDictionary.swift | 2 +- Source/Modules/UIModules/PrefUI/suiPrefPaneExperience.swift | 2 +- Source/Modules/UIModules/PrefUI/suiPrefPaneGeneral.swift | 2 +- Source/Modules/UIModules/PrefUI/suiPrefPaneKeyboard.swift | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/Modules/UIModules/PrefUI/suiPrefPaneDevZone.swift b/Source/Modules/UIModules/PrefUI/suiPrefPaneDevZone.swift index ef73f01b..cf729b98 100644 --- a/Source/Modules/UIModules/PrefUI/suiPrefPaneDevZone.swift +++ b/Source/Modules/UIModules/PrefUI/suiPrefPaneDevZone.swift @@ -17,7 +17,7 @@ struct suiPrefPaneDevZone: View { @State private var selShouldAlwaysUseShiftKeyAccommodation: Bool = UserDefaults.standard.bool( forKey: UserDef.kShouldAlwaysUseShiftKeyAccommodation.rawValue) - private let contentMaxHeight: Double = 430 + private let contentMaxHeight: Double = 432 private let contentWidth: Double = { switch mgrPrefs.appleLanguages[0] { case "ja": diff --git a/Source/Modules/UIModules/PrefUI/suiPrefPaneDictionary.swift b/Source/Modules/UIModules/PrefUI/suiPrefPaneDictionary.swift index 55dd18d7..fe1855ec 100644 --- a/Source/Modules/UIModules/PrefUI/suiPrefPaneDictionary.swift +++ b/Source/Modules/UIModules/PrefUI/suiPrefPaneDictionary.swift @@ -30,7 +30,7 @@ struct suiPrefPaneDictionary: View { @State private var selHardenVerticalPunctuations: Bool = UserDefaults.standard.bool( forKey: UserDef.kHardenVerticalPunctuations.rawValue) - private let contentMaxHeight: Double = 430 + private let contentMaxHeight: Double = 432 private let contentWidth: Double = { switch mgrPrefs.appleLanguages[0] { case "ja": diff --git a/Source/Modules/UIModules/PrefUI/suiPrefPaneExperience.swift b/Source/Modules/UIModules/PrefUI/suiPrefPaneExperience.swift index 8f3be3a8..3318fbd0 100644 --- a/Source/Modules/UIModules/PrefUI/suiPrefPaneExperience.swift +++ b/Source/Modules/UIModules/PrefUI/suiPrefPaneExperience.swift @@ -42,7 +42,7 @@ struct suiPrefPaneExperience: View { @State private var selSpecifyShiftBackSpaceKeyBehavior = UserDefaults.standard.integer( forKey: UserDef.kSpecifyShiftBackSpaceKeyBehavior.rawValue) - private let contentMaxHeight: Double = 430 + private let contentMaxHeight: Double = 432 private let contentWidth: Double = { switch mgrPrefs.appleLanguages[0] { case "ja": diff --git a/Source/Modules/UIModules/PrefUI/suiPrefPaneGeneral.swift b/Source/Modules/UIModules/PrefUI/suiPrefPaneGeneral.swift index fd1aff34..728b0a10 100644 --- a/Source/Modules/UIModules/PrefUI/suiPrefPaneGeneral.swift +++ b/Source/Modules/UIModules/PrefUI/suiPrefPaneGeneral.swift @@ -37,7 +37,7 @@ struct suiPrefPaneGeneral: View { forKey: UserDef.kCheckUpdateAutomatically.rawValue) @State private var selEnableDebugMode = UserDefaults.standard.bool(forKey: UserDef.kIsDebugModeEnabled.rawValue) - private let contentMaxHeight: Double = 430 + private let contentMaxHeight: Double = 432 private let contentWidth: Double = { switch mgrPrefs.appleLanguages[0] { case "ja": diff --git a/Source/Modules/UIModules/PrefUI/suiPrefPaneKeyboard.swift b/Source/Modules/UIModules/PrefUI/suiPrefPaneKeyboard.swift index 76bd9b0e..177beebf 100644 --- a/Source/Modules/UIModules/PrefUI/suiPrefPaneKeyboard.swift +++ b/Source/Modules/UIModules/PrefUI/suiPrefPaneKeyboard.swift @@ -28,7 +28,7 @@ struct suiPrefPaneKeyboard: View { @State private var selUsingHotKeyCurrencyNumerals = UserDefaults.standard.bool( forKey: UserDef.kUsingHotKeyCurrencyNumerals.rawValue) - private let contentMaxHeight: Double = 430 + private let contentMaxHeight: Double = 432 private let contentWidth: Double = { switch mgrPrefs.appleLanguages[0] { case "ja": From 96704e43d2f2ea500bedd014510e67df574e1d05 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sun, 28 Aug 2022 11:28:28 +0800 Subject: [PATCH 15/20] SymbolNode // Add extra symbols. --- .../LangModelRelated/LMSymbolNode.swift | 99 ++++++++++++++++--- .../Resources/Base.lproj/Localizable.strings | 11 ++- Source/Resources/en.lproj/Localizable.strings | 11 ++- Source/Resources/ja.lproj/Localizable.strings | 11 ++- .../zh-Hans.lproj/Localizable.strings | 11 ++- .../zh-Hant.lproj/Localizable.strings | 11 ++- 6 files changed, 135 insertions(+), 19 deletions(-) diff --git a/Source/Modules/LangModelRelated/LMSymbolNode.swift b/Source/Modules/LangModelRelated/LMSymbolNode.swift index c52f2154..38695ba7 100644 --- a/Source/Modules/LangModelRelated/LMSymbolNode.swift +++ b/Source/Modules/LangModelRelated/LMSymbolNode.swift @@ -55,8 +55,10 @@ class SymbolNode { format: NSLocalizedString("catHoriBrackets", comment: "")) static let catVertBrackets = String( format: NSLocalizedString("catVertBrackets", comment: "")) - static let catGreekLetters = String( - format: NSLocalizedString("catGreekLetters", comment: "")) + static let catAlphabets = String( + format: NSLocalizedString("catAlphabets", comment: "")) + static let catSpecialNumbers = String( + format: NSLocalizedString("catSpecialNumbers", comment: "")) static let catMathSymbols = String( format: NSLocalizedString("catMathSymbols", comment: "")) static let catCurrencyUnits = String( @@ -79,6 +81,22 @@ class SymbolNode { format: NSLocalizedString("catFillingBlocks", comment: "")) static let catLineSegments = String( format: NSLocalizedString("catLineSegments", comment: "")) + static let catKana = String( + format: NSLocalizedString("catKana", comment: "")) + static let catCombinations = String( + format: NSLocalizedString("catCombinations", comment: "")) + static let catPhonabets = String( + format: NSLocalizedString("catPhonabets", comment: "")) + static let catCircledASCII = String( + format: NSLocalizedString("catCircledASCII", comment: "")) + static let catBracketedASCII = String( + format: NSLocalizedString("catBracketedASCII", comment: "")) + static let catMusicSymbols = String( + format: NSLocalizedString("catMusicSymbols", comment: "")) + static let catThai = String( + format: NSLocalizedString("catThai", comment: "")) + static let catYi = String( + format: NSLocalizedString("catYi", comment: "")) private(set) static var root: SymbolNode = .init("/") @@ -87,25 +105,78 @@ class SymbolNode { [ SymbolNode(" "), SymbolNode("`"), - SymbolNode(catCommonSymbols, symbols: ",、。.?!;:‧‥﹐﹒˙·‘’“”〝〞‵′〃~$%@&#*"), - SymbolNode(catHoriBrackets, symbols: "()「」〔〕{}〈〉『』《》【】﹙﹚﹝﹞﹛﹜"), + SymbolNode(catCommonSymbols, symbols: ",、。.?!;:‧‥﹐﹒˙·‘’“”〝〞‵′〃~$%﹪@&#*・…—〜/\_―‖﹫﹟﹠﹡"), + SymbolNode( + catHoriBrackets, + symbols: + "()[]{}〈〉《》「」『』【】〔〕〖〗〘〙〚〛︗︘︷︸︹︺︻︼︽︾︿﹀﹁﹂﹃﹄﹇﹈[]{}⁅⁆⎡⎢⎣⎤⎥⎦⎧⎨⎩⎪⎫⎬⎭⎰⎱「」❬❭❰❱❲❳❴❵⟦⟧⟨⟩⟪⟫⟬⟭⦃⦄⦇⦈⦉⦊⦋⦌⦍⦎⦏⦐⦑⦒⦓⦔⦕⦖⦗⦘⧼⧽⸂⸃⸄⸅⸉⸊⸌⸍⸜⸝⸢⸣⸤⸥⸦⸧⎴⎵⎶⏞⏟⏠⏡﹙﹚﹛﹜﹝﹞︵︶﹤﹥‘’“”〝〞‵′″'" + ), SymbolNode(catVertBrackets, symbols: "︵︶﹁﹂︹︺︷︸︿﹀﹃﹄︽︾︻︼"), SymbolNode( - catGreekLetters, symbols: "αβγδεζηθικλμνξοπρστυφχψωΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ" + catAlphabets, + symbols: + "αβγδεζηθικλμνξοπρστυφχψωΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩабвгдежзийклмнопрстуфхцчшщъыьэюяёАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯЁàáèéêìíòóùúüāēěīńňōūǎǐǒǔǖǘǚǜɑɡ¨·" ), - SymbolNode(catMathSymbols, symbols: "+-×÷=≠≒∞±√<>﹤﹥≦≧∩∪ˇ⊥∠∟⊿㏒㏑∫∮∵∴╳﹢"), - SymbolNode(catCurrencyUnits, symbols: "$€¥¢£₽₨₩฿₺₮₱₭₴₦৲৳૱௹﷼₹₲₪₡₫៛₵₢₸₤₳₥₠₣₰₧₯₶₷"), - SymbolNode(catSpecialSymbols, symbols: "↑↓←→↖↗↙↘↺⇧⇩⇦⇨⇄⇆⇅⇵↻◎○●⊕⊙※△▲☆★◇◆□■▽▼§¥〒¢£♀♂↯"), - SymbolNode(catUnicodeSymbols, symbols: "♨☀☁☂☃♠♥♣♦♩♪♫♬☺☻"), - SymbolNode(catCircledKanjis, symbols: "㊟㊞㊚㊛㊊㊋㊌㊍㊎㊏㊐㊑㊒㊓㊔㊕㊖㊗︎㊘㊙︎㊜㊝㊠㊡㊢㊣㊤㊥㊦㊧㊨㊩㊪㊫㊬㊭㊮㊯㊰🈚︎🈯︎"), SymbolNode( - catCircledKataKana, symbols: "㋐㋑㋒㋓㋔㋕㋖㋗㋘㋙㋚㋛㋜㋝㋞㋟㋠㋡㋢㋣㋤㋥㋦㋧㋨㋩㋪㋫㋬㋭㋮㋯㋰㋱㋲㋳㋴㋵㋶㋷㋸㋹㋺㋻㋼㋾" + catSpecialNumbers, symbols: "ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻ〇〡〢〣〤〥〦〧〨〩" + ), + SymbolNode( + catMathSymbols, + symbols: + "﹢﹤﹥+-<=>✕%+<=>¡¢«°±µ»¼½¾¿×÷ˇθπ‰₠₡₢₣₤₥₦₧₨₩₪₫€℀℁℃℅℆℉⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜⅝⅞⅟∀∁∂∃∄∅∆∇∈∉∊∋∌∍∎∏∐∑−∓∔∕∖∗∘∙√∛∜∝∞∟∠∡∢∣∤∥∧∨∩∪∫∬∭∮∯∰∱∲∳∴∵∶∷∸∹∺∻∼∽∾∿≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟≠≡≢≣≤≥≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊂⊃⊄⊅⊆⊇⊈⊉⊊⊋⊌⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜⊝⊞⊟⊠⊡⊢⊣⊤⊥⊦⊧⊨⊩⊪⊫⊬⊭⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱" + ), + SymbolNode(catCurrencyUnits, symbols: "$¢£¤¥৲৳૱௹฿៛₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲₳₴₵₶₷₸₹₺₽﷼﹩$¢£¥₩"), + SymbolNode( + catSpecialSymbols, + symbols: + "↑↓←→↖↗↙↘↺⇧⇩⇦⇨⇄⇆⇅⇵↻◎○●⊕⊙※△▲☆★◇◆□■▽▼№℡§〒♀♂↯¶©®™🜀🜁🜂🜃🜄🜅🜆🜇🜈🜉🜊🜋🜌🜍🜎🜏🜐🜑🜒🜓🜔🜕🜖🜗🜘🜙🜚🜛🜜🜝🜞🜟🜠🜡🜢🜣🜤🜥🜦🜧🜨🜩🜪🜫🜬🜭🜮🜯🜰🜱🜲🜳🜴🜵🜶🜷🜸🜹🜺🜻🜼🜽🜾🜿🝀🝁🝂🝃🝄🝅🝆🝇🝈🝉🝊🝋🝌🝍🝎🝏🝐🝑🝒🝓🝔🝕🝖🝗🝘🝙🝚🝛🝜🝝🝞🝟🝠🝡🝢🝣🝤🝥🝦🝧🝨🝩🝪🝫🝬🝭🝮🝯🝰🝱🝲🝳↚↛↜↝↞↟↠↡↢↣↤↥↦↧↨↩↪↫↬↭↮" + ), + SymbolNode( + catUnicodeSymbols, + symbols: + "※∮∴∵∽☀☁☂☃☺☻♠♣♥♦♨♩♪♫♬♭♯■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▲△▴▵▶▷▸▹►▻▼▽▾▿◀◁◂◃◄◅◆◇◈◉◊○◌◍◎●◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷◸◹◺◻◼◽◾◿☄★☆☇☈☉☊☋☌☍☎☏☐☑☒☓☔☕☖☗☘☙☚☛☜☝☞☟☠☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯☰☱☲☳☴☵☶☷☸☹☼☽☾☿♀♁♂♃♄♅♆♇♈♉♊♋♌♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟♡♢♤♧♮♰♱♲♳♴♵♶♷♸♹♺♻♼♽♾♿⚀⚁⚂⚃⚄⚅⚆⚇⚈⚉⚊⚋⚌⚍⚎⚏⚐⚑⚒⚓⚔⚕⚖⚗⚘⚙⚚⚛⚜⚝⚞⚟⚠⚡⚢⚣⚤⚥⚦⚧⚨⚩⚪⚫⚬⚭⚮⚯⚰⚱⚲⚳⚴⚵⚶⚷⚸⚹⚺⚻⚼⚽⚾⚿⛀⛁⛂⛃⛄⛅⛆⛇⛈⛉⛊⛋⛌⛍⛎⛏⛐⛑⛒⛓⛔⛕⛖⛗⛘⛙⛚⛛⛜⛝⛞⛟⛠⛡⛢⛣⛤⛥⛦⛧⛨⛩⛪⛫⛬⛭⛮⛯⛰⛱⛲⛳⛴⛵⛶⛷⛸⛹⛺⛻⛼⛽⛾⛿✁✂✃✄✅✆✇✈✉✊✋✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟✠✡✢✣✤✥✦✧✨✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋❌❍❎❏❐❑❒❓❔❕❖❗❘❙❚❛❜❝❞❟❠❡❢❣❤❥❦❧❨❩❪❫❬❭❮❯❰❱❲❳❴❵➔➕➖➗➘➙➚➛➜➝➞➟➠➡➢➣➤➥➦➧➨➩➪➫➬➭➮➯➰➱➲➳➴➵➶➷➸➹➺➻➼➽➾➿⬀⬁⬂⬃⬄⬅⬆⬇⬈⬉⬊⬋⬌⬍⬎⬏⬐⬑⬒⬓⬔⬕⬖⬗⬘⬙⬚⬛⬜⬝⬞⬟⬠⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬⬭⬮⬯⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿⭀⭁⭂⭃⭄⭅⭆⭇⭈⭉⭊⭋⭌⭐⭑⭒⭓⭔⭕⭖⭗⭘⭙₮〠〶ↀↁↂ₭〇〄㉿〆₯ℂ℄" + ), + SymbolNode( + catMusicSymbols, + symbols: + "𝄀𝄁𝄂𝄃𝄄𝄅𝄆𝄇𝄈𝄉𝄊𝄋𝄌𝄍𝄎𝄏𝄐𝄑𝄒𝄓𝄔𝄕𝄖𝄗𝄘𝄙𝄚𝄛𝄜𝄝𝄞𝄟𝄠𝄡𝄢𝄣𝄤𝄥𝄦𝄩𝄪𝄫𝄬𝄭𝄮𝄯𝄰𝄱𝄲𝄳𝄴𝄵𝄶𝄷𝄸𝄹𝄺𝄻𝄼𝄽𝄾𝄿𝅀𝅁𝅂𝅃𝅄𝅅𝅆𝅇𝅈𝅉𝅊𝅋𝅌𝅍𝅎𝅏𝅐𝅑𝅒𝅓𝅔𝅕𝅖𝅗𝅗𝅥𝅘𝅘𝅥𝅘𝅥𝅮𝅘𝅥𝅯𝅘𝅥𝅰𝅘𝅥𝅱𝅘𝅧𝅨𝅩𝅥𝅲𝅥𝅦𝅙𝅚𝅛𝅜𝅝𝅪𝅫𝅬𝅮𝅯𝅰𝅱𝅲𝅭𝅳𝅴𝅵𝅶𝅷𝅸𝅹𝅺𝅻𝅼𝅽𝅾𝅿𝆀𝆁𝆂𝆃𝆄𝆊𝆋𝆅𝆆𝆇𝆈𝆉𝆌𝆍𝆎𝆏𝆐𝆑𝆒𝆓𝆔𝆕𝆖𝆗𝆘𝆙𝆚𝆛𝆜𝆝𝆞𝆟𝆠𝆡𝆢𝆣𝆤𝆥𝆦𝆧𝆨𝆩𝆪𝆫𝆬𝆭𝆮𝆯𝆰𝆱𝆲𝆳𝆴𝆵𝆶𝆷𝆸𝆹𝆹𝅥𝆹𝅥𝅮𝆹𝅥𝅯𝆺𝆺𝅥𝆺𝅥𝅮𝆺𝅥𝅯𝇁𝇂𝇃𝇄𝇅𝇆𝇇𝇈𝇉𝇊𝇋𝇌𝇍𝇎𝇏𝇐𝇑𝇒𝇓𝇔𝇕𝇖𝇗𝇘𝇙𝇚𝇛𝇜𝇝𝇞𝇟𝇠𝇡𝇢𝇣𝇤𝇥𝇦𝇧𝇨" + ), + SymbolNode(catCircledKanjis, symbols: "㊊㊋㊌㊍㊎㊏㊐㊑㊒㊓㊔㊕㊖㊗︎㊘㊙︎㊚㊛㊜㊝㊞㊟㊠㊡㊢㊣㊤㊥㊦㊧㊨㊩㊪㊫㊬㊭㊮㊯㊰㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉🈚︎🈯︎"), + SymbolNode( + catCircledKataKana, symbols: "㋐㋑㋒㋓㋔㋕㋖㋗㋘㋙㋚㋛㋜㋝㋞㋟㋠㋡㋢㋣㋤㋥㋦㋧㋨㋩㋪㋫㋬㋭㋮㋯㋰㋱㋲㋳㋴㋵㋶㋷㋸㋹㋺㋻㋼㋽㋾" ), SymbolNode(catBracketKanjis, symbols: "㈪㈫㈬㈭㈮㈯㈰㈱㈲㈳㈴㈵㈶㈷㈸㈹㈺㈻㈼㈽㈾㈿㉀㉁㉂㉃"), - SymbolNode(catSingleTableLines, symbols: "├─┼┴┬┤┌┐╞═╪╡│▕└┘╭╮╰╯"), - SymbolNode(catDoubleTableLines, symbols: "╔╦╗╠═╬╣╓╥╖╒╤╕║╚╩╝╟╫╢╙╨╜╞╪╡╘╧╛"), + SymbolNode(catSingleTableLines, symbols: "─│┌┐└┕┘├┤┬┴┼═╞╡╪╭╮╯╰▕"), + SymbolNode(catDoubleTableLines, symbols: "═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬"), SymbolNode(catFillingBlocks, symbols: "_ˍ▁▂▃▄▅▆▇█▏▎▍▌▋▊▉◢◣◥◤"), - SymbolNode(catLineSegments, symbols: "﹣﹦≡|∣∥–︱—︳╴¯ ̄﹉﹊﹍﹎﹋﹌﹏︴∕﹨╱╲/\"), + SymbolNode(catLineSegments, symbols: "﹣﹦≡|∣∥–︱—︳╴¯ ̄﹉﹊﹍﹎﹋﹌﹏︴∕﹨╱╲/\ˍ━┃▕〓╳∏ˆ⌒┄┅┆┇┈┉┊┋"), + SymbolNode( + catKana, + symbols: + "ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばひびふぶへべほぼまみむめもゃやゅゆょよらら゚りり゚るる゚れれ゚ろろ゚ゎわわ゙ゐゐ゙ゑゑ゙をを゙んゔゕゖゝゞゟ〻゠ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨララ゚リリ゚ルル゚レレ゚ロロ゚ヮワヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿ々ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン ゙ ゚〲〱〳〴〵" + ), + SymbolNode( + catCombinations, + symbols: + "㍘㍙㍚㍛㍜㍝㍞㍟㍠㍡㍢㍣㍤㍥㍦㍧㍨㍩㍪㍫㍬㍭㍮㍯㍰㏠㏡㏢㏣㏤㏥㏦㏧㏨㏩㏪㏫㏬㏭㏮㏯㏰㏱㏲㏳㏴㏵㏶㏷㏸㏹㏺㏻㏼㏽㏾㍱㍲㍳㍴㍵㍶㍷㍸㍹㍺㎀㎁㎂㎃㎄㎅㎆㎇㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏋㏌㏍㏎㏏㏐㏑㏒㏓㏔㏕㏖㏗㏘㏙㏚㏛㏜㏝㏞㏟㏿㋿㍼㍽㍾㍻㍿㌀㌁㌂㌃㌄㌅㌆㌇㌈㌉㌊㌋㌌㌍㌎㌏㌐㌑㌒㌓㌔㌕㌖㌗㌘㌙㌚㌛㌜㌝㌞㌟㌠㌡㌢㌣㌤㌥㌦㌧㌨㌩㌪㌫㌬㌭㌮㌯㌰㌱㌲㌳㌴㌵㌶㌷㌸㌹㌺㌻㌼㌽㌾㌿㍀㍁㍂㍃㍄㍅㍆㍇㍈㍉㍊㍋㍌㍍㍎㍏㍐㍑㍒㍓㍔㍕㍖㍗" + ), + SymbolNode( + catPhonabets, symbols: "ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩㄪㄫㄬㄭㄮㄯㆵㆠㆡㆢㆣㆤㆥㆦㆧㆨㆩㆪㆫㆬㆭㆮㆯㆰㆱㆲㆳㆴㆶㆷㆸㆹㆺㆻㆼㆽㆾㆿ˙ˊˇˋ˪˫" + ), + SymbolNode( + catCircledASCII, + symbols: + "➀➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ⓪⓿❶❷❸❹❺❻❼❽❾❿⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾" + ), + SymbolNode(catBracketedASCII, symbols: "⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵"), + SymbolNode( + catThai, symbols: "กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัะาำิีึืฺุูาำเแโใไๅๆ็่้๊๋์ํ๎ๆ๏๐๑๒๓๔๕๖๗๘๙๚๛◌ั◌ิ◌ี◌ึ◌ื◌ุ◌ู◌ฺ◌็◌่◌้◌๊◌๋◌์◌ํ◌๎" + ), + SymbolNode( + catYi, + symbols: + "ꀀꀁꀂꀃꀄꀅꀆꀇꀈꀉꀊꀋꀌꀍꀎꀏꀐꀑꀒꀓꀔꀕꀖꀗꀘꀙꀚꀛꀜꀝꀞꀟꀠꀡꀢꀣꀤꀥꀦꀧꀨꀩꀪꀫꀬꀭꀮꀯꀰꀱꀲꀳꀴꀵꀶꀷꀸꀹꀺꀻꀼꀽꀾꀿꁀꁁꁂꁃꁄꁅꁆꁇꁈꁉꁊꁋꁌꁍꁎꁏꁐꁑꁒꁓꁔꁕꁖꁗꁘꁙꁚꁛꁜꁝꁞꁟꁠꁡꁢꁣꁤꁥꁦꁧꁨꁩꁪꁫꁬꁭꁮꁯꁰꁱꁲꁳꁴꁵꁶꁷꁸꁹꁺꁻꁼꁽꁾꁿꂀꂁꂂꂃꂄꂅꂆꂇꂈꂉꂊꂋꂌꂍꂎꂏꂐꂑꂒꂓꂔꂕꂖꂗꂘꂙꂚꂛꂜꂝꂞꂟꂠꂡꂢꂣꂤꂥꂦꂧꂨꂩꂪꂫꂬꂭꂮꂯꂰꂱꂲꂳꂴꂵꂶꂷꂸꂹꂺꂻꂼꂽꂾꂿꃀꃁꃂꃃꃄꃅꃆꃇꃈꃉꃊꃋꃌꃍꃎꃏꃐꃑꃒꃓꃔꃕꃖꃗꃘꃙꃚꃛꃜꃝꃞꃟꃠꃡꃢꃣꃤꃥꃦꃧꃨꃩꃪꃫꃬꃭꃮꃯꃰꃱꃲꃳꃴꃵꃶꃷꃸꃹꃺꃻꃼꃽꃾꃿꄀꄁꄂꄃꄄꄅꄆꄇꄈꄉꄊꄋꄌꄍꄎꄏꄐꄑꄒꄓꄔꄕꄖꄗꄘꄙꄚꄛꄜꄝꄞꄟꄠꄡꄢꄣꄤꄥꄦꄧꄨꄩꄪꄫꄬꄭꄮꄯꄰꄱꄲꄳꄴꄵꄶꄷꄸꄹꄺꄻꄼꄽꄾꄿꅀꅁꅂꅃꅄꅅꅆꅇꅈꅉꅊꅋꅌꅍꅎꅏꅐꅑꅒꅓꅔꅕꅖꅗꅘꅙꅚꅛꅜꅝꅞꅟꅠꅡꅢꅣꅤꅥꅦꅧꅨꅩꅪꅫꅬꅭꅮꅯꅰꅱꅲꅳꅴꅵꅶꅷꅸꅹꅺꅻꅼꅽꅾꅿꆀꆁꆂꆃꆄꆅꆆꆇꆈꆉꆊꆋꆌꆍꆎꆏꆐꆑꆒꆓꆔꆕꆖꆗꆘꆙꆚꆛꆜꆝꆞꆟꆠꆡꆢꆣꆤꆥꆦꆧꆨꆩꆪꆫꆬꆭꆮꆯꆰꆱꆲꆳꆴꆵꆶꆷꆸꆹꆺꆻꆼꆽꆾꆿꇀꇁꇂꇃꇄꇅꇆꇇꇈꇉꇊꇋꇌꇍꇎꇏꇐꇑꇒꇓꇔꇕꇖꇗꇘꇙꇚꇛꇜꇝꇞꇟꇠꇡꇢꇣꇤꇥꇦꇧꇨꇩꇪꇫꇬꇭꇮꇯꇰꇱꇲꇳꇴꇵꇶꇷꇸꇹꇺꇻꇼꇽꇾꇿꈀꈁꈂꈃꈄꈅꈆꈇꈈꈉꈊꈋꈌꈍꈎꈏꈐꈑꈒꈓꈔꈕꈖꈗꈘꈙꈚꈛꈜꈝꈞꈟꈠꈡꈢꈣꈤꈥꈦꈧꈨꈩꈪꈫꈬꈭꈮꈯꈰꈱꈲꈳꈴꈵꈶꈷꈸꈹꈺꈻꈼꈽꈾꈿꉀꉁꉂꉃꉄꉅꉆꉇꉈꉉꉊꉋꉌꉍꉎꉏꉐꉑꉒꉓꉔꉕꉖꉗꉘꉙꉚꉛꉜꉝꉞꉟꉠꉡꉢꉣꉤꉥꉦꉧꉨꉩꉪꉫꉬꉭꉮꉯꉰꉱꉲꉳꉴꉵꉶꉷꉸꉹꉺꉻꉼꉽꉾꉿꊀꊁꊂꊃꊄꊅꊆꊇꊈꊉꊊꊋꊌꊍꊎꊏꊐꊑꊒꊓꊔꊕꊖꊗꊘꊙꊚꊛꊜꊝꊞꊟꊠꊡꊢꊣꊤꊥꊦꊧꊨꊩꊪꊫꊬꊭꊮꊯꊰꊱꊲꊳꊴꊵꊶꊷꊸꊹꊺꊻꊼꊽꊾꊿꋀꋁꋂꋃꋄꋅꋆꋇꋈꋉꋊꋋꋌꋍꋎꋏꋐꋑꋒꋓꋔꋕꋖꋗꋘꋙꋚꋛꋜꋝꋞꋟꋠꋡꋢꋣꋤꋥꋦꋧꋨꋩꋪꋫꋬꋭꋮꋯꋰꋱꋲꋳꋴꋵꋶꋷꋸꋹꋺꋻꋼꋽꋾꋿꌀꌁꌂꌃꌄꌅꌆꌇꌈꌉꌊꌋꌌꌍꌎꌏꌐꌑꌒꌓꌔꌕꌖꌗꌘꌙꌚꌛꌜꌝꌞꌟꌠꌡꌢꌣꌤꌥꌦꌧꌨꌩꌪꌫꌬꌭꌮꌯꌰꌱꌲꌳꌴꌵꌶꌷꌸꌹꌺꌻꌼꌽꌾꌿꍀꍁꍂꍃꍄꍅꍆꍇꍈꍉꍊꍋꍌꍍꍎꍏꍐꍑꍒꍓꍔꍕꍖꍗꍘꍙꍚꍛꍜꍝꍞꍟꍠꍡꍢꍣꍤꍥꍦꍧꍨꍩꍪꍫꍬꍭꍮꍯꍰꍱꍲꍳꍴꍵꍶꍷꍸꍹꍺꍻꍼꍽꍾꍿꎀꎁꎂꎃꎄꎅꎆꎇꎈꎉꎊꎋꎌꎍꎎꎏꎐꎑꎒꎓꎔꎕꎖꎗꎘꎙꎚꎛꎜꎝꎞꎟꎠꎡꎢꎣꎤꎥꎦꎧꎨꎩꎪꎫꎬꎭꎮꎯꎰꎱꎲꎳꎴꎵꎶꎷꎸꎹꎺꎻꎼꎽꎾꎿꏀꏁꏂꏃꏄꏅꏆꏇꏈꏉꏊꏋꏌꏍꏎꏏꏐꏑꏒꏓꏔꏕꏖꏗꏘꏙꏚꏛꏜꏝꏞꏟꏠꏡꏢꏣꏤꏥꏦꏧꏨꏩꏪꏫꏬꏭꏮꏯꏰꏱꏲꏳꏴꏵꏶꏷꏸꏹꏺꏻꏼꏽꏾꏿꐀꐁꐂꐃꐄꐅꐆꐇꐈꐉꐊꐋꐌꐍꐎꐏꐐꐑꐒꐓꐔꐕꐖꐗꐘꐙꐚꐛꐜꐝꐞꐟꐠꐡꐢꐣꐤꐥꐦꐧꐨꐩꐪꐫꐬꐭꐮꐯꐰꐱꐲꐳꐴꐵꐶꐷꐸꐹꐺꐻꐼꐽꐾꐿꑀꑁꑂꑃꑄꑅꑆꑇꑈꑉꑊꑋꑌꑍꑎꑏꑐꑑꑒꑓꑔꑕꑖꑗꑘꑙꑚꑛꑜꑝꑞꑟꑠꑡꑢꑣꑤꑥꑦꑧꑨꑩꑪꑫꑬꑭꑮꑯꑰꑱꑲꑳꑴꑵꑶꑷꑸꑹꑺꑻꑼꑽꑾꑿꒀꒁꒂꒃꒄꒅꒆꒇꒈꒉꒊꒋꒌ꒐꒑꒒꒓꒔꒕꒖꒗꒘꒙꒚꒛꒜꒝꒞꒟꒠꒡꒢꒣꒤꒥꒦꒧꒨꒩꒪꒫꒬꒭꒮꒯꒰꒱꒲꒳꒴꒵꒶꒷꒸꒹꒺꒻꒼꒽꒾꒿꓀꓁꓂꓃꓄꓅꓆" + ), ] ) } diff --git a/Source/Resources/Base.lproj/Localizable.strings b/Source/Resources/Base.lproj/Localizable.strings index 485b0489..517096d3 100644 --- a/Source/Resources/Base.lproj/Localizable.strings +++ b/Source/Resources/Base.lproj/Localizable.strings @@ -71,7 +71,8 @@ "catCommonSymbols" = "CommonSymbols"; "catHoriBrackets" = "HorizontalBrackets"; "catVertBrackets" = "VerticalBrackets"; -"catGreekLetters" = "GreekLetters"; +"catAlphabets" = "Alphabets"; +"catSpecialNumbers" = "SpecialNumbers"; "catMathSymbols" = "MathSymbols"; "catCurrencyUnits" = "CurrencyUnits"; "catSpecialSymbols" = "SpecialSymbols"; @@ -83,6 +84,14 @@ "catDoubleTableLines" = "DoubleTableLines"; "catFillingBlocks" = "FillingBlocks"; "catLineSegments" = "LineSegments"; +"catKana" = "Kana"; +"catCombinations" = "Combinations"; +"catPhonabets" = "Phonabets"; +"catCircledASCII" = "CircledASCII"; +"catBracketedASCII" = "BracketASCII"; +"catMusicSymbols" = "MusicSymbols"; +"catThai" = "Thaiphabets"; +"catYi" = "Yiphabets"; // SwiftUI Preferences "(Shift+)Space:" = "(Shift+)Space:"; diff --git a/Source/Resources/en.lproj/Localizable.strings b/Source/Resources/en.lproj/Localizable.strings index 485b0489..517096d3 100644 --- a/Source/Resources/en.lproj/Localizable.strings +++ b/Source/Resources/en.lproj/Localizable.strings @@ -71,7 +71,8 @@ "catCommonSymbols" = "CommonSymbols"; "catHoriBrackets" = "HorizontalBrackets"; "catVertBrackets" = "VerticalBrackets"; -"catGreekLetters" = "GreekLetters"; +"catAlphabets" = "Alphabets"; +"catSpecialNumbers" = "SpecialNumbers"; "catMathSymbols" = "MathSymbols"; "catCurrencyUnits" = "CurrencyUnits"; "catSpecialSymbols" = "SpecialSymbols"; @@ -83,6 +84,14 @@ "catDoubleTableLines" = "DoubleTableLines"; "catFillingBlocks" = "FillingBlocks"; "catLineSegments" = "LineSegments"; +"catKana" = "Kana"; +"catCombinations" = "Combinations"; +"catPhonabets" = "Phonabets"; +"catCircledASCII" = "CircledASCII"; +"catBracketedASCII" = "BracketASCII"; +"catMusicSymbols" = "MusicSymbols"; +"catThai" = "Thaiphabets"; +"catYi" = "Yiphabets"; // SwiftUI Preferences "(Shift+)Space:" = "(Shift+)Space:"; diff --git a/Source/Resources/ja.lproj/Localizable.strings b/Source/Resources/ja.lproj/Localizable.strings index b9cf7651..3b30ca5a 100644 --- a/Source/Resources/ja.lproj/Localizable.strings +++ b/Source/Resources/ja.lproj/Localizable.strings @@ -71,7 +71,8 @@ "catCommonSymbols" = "常用"; "catHoriBrackets" = "横括"; "catVertBrackets" = "縦括"; -"catGreekLetters" = "ギリシャ"; +"catAlphabets" = "字母"; +"catSpecialNumbers" = "数字"; "catMathSymbols" = "数学"; "catCurrencyUnits" = "貨幣"; "catSpecialSymbols" = "特殊"; @@ -83,6 +84,14 @@ "catDoubleTableLines" = "双線"; "catFillingBlocks" = "ブロック"; "catLineSegments" = "線分"; +"catKana" = "仮名"; +"catCombinations" = "組合文字"; +"catPhonabets" = "注音"; +"catCircledASCII" = "丸付英数"; +"catBracketedASCII" = "括付英数"; +"catMusicSymbols" = "音楽記号"; +"catThai" = "タイ文字"; +"catYi" = "彝族文字"; // SwiftUI Preferences "(Shift+)Space:" = "(Shift+)Space:"; diff --git a/Source/Resources/zh-Hans.lproj/Localizable.strings b/Source/Resources/zh-Hans.lproj/Localizable.strings index af68021d..18db2774 100644 --- a/Source/Resources/zh-Hans.lproj/Localizable.strings +++ b/Source/Resources/zh-Hans.lproj/Localizable.strings @@ -71,7 +71,8 @@ "catCommonSymbols" = "常用"; "catHoriBrackets" = "横括"; "catVertBrackets" = "纵括"; -"catGreekLetters" = "希腊"; +"catAlphabets" = "字母"; +"catSpecialNumbers" = "数字"; "catMathSymbols" = "数学"; "catCurrencyUnits" = "货币"; "catSpecialSymbols" = "特殊"; @@ -83,6 +84,14 @@ "catDoubleTableLines" = "双线"; "catFillingBlocks" = "填色"; "catLineSegments" = "线段"; +"catKana" = "假名"; +"catCombinations" = "组字"; +"catPhonabets" = "注音"; +"catCircledASCII" = "圈英"; +"catBracketedASCII" = "括英"; +"catMusicSymbols" = "音乐"; +"catThai" = "泰文"; +"catYi" = "彝文"; // SwiftUI Preferences "(Shift+)Space:" = "(Shift+)空格键:"; diff --git a/Source/Resources/zh-Hant.lproj/Localizable.strings b/Source/Resources/zh-Hant.lproj/Localizable.strings index c66661f8..6c6a677a 100644 --- a/Source/Resources/zh-Hant.lproj/Localizable.strings +++ b/Source/Resources/zh-Hant.lproj/Localizable.strings @@ -71,7 +71,8 @@ "catCommonSymbols" = "常用"; "catHoriBrackets" = "橫括"; "catVertBrackets" = "縱括"; -"catGreekLetters" = "希臘"; +"catAlphabets" = "字母"; +"catSpecialNumbers" = "數字"; "catMathSymbols" = "數學"; "catCurrencyUnits" = "貨幣"; "catSpecialSymbols" = "特殊"; @@ -83,6 +84,14 @@ "catDoubleTableLines" = "雙線"; "catFillingBlocks" = "填色"; "catLineSegments" = "線段"; +"catKana" = "假名"; +"catCombinations" = "組字"; +"catPhonabets" = "注音"; +"catCircledASCII" = "圈英"; +"catBracketedASCII" = "括英"; +"catMusicSymbols" = "音樂"; +"catThai" = "泰文"; +"catYi" = "彝文"; // SwiftUI Preferences "(Shift+)Space:" = "(Shift+)空格鍵:"; From 49bb4018dbfec09b0d2ae41ec14fb244174ee0da Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sun, 28 Aug 2022 13:28:01 +0800 Subject: [PATCH 16/20] i18n // Misc fixes. --- Source/Resources/ja.lproj/Localizable.strings | 2 +- Source/Resources/zh-Hans.lproj/Localizable.strings | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Resources/ja.lproj/Localizable.strings b/Source/Resources/ja.lproj/Localizable.strings index 3b30ca5a..36d9f6a1 100644 --- a/Source/Resources/ja.lproj/Localizable.strings +++ b/Source/Resources/ja.lproj/Localizable.strings @@ -30,7 +30,7 @@ "\"%@\" length must ≥ 2 for a user phrase." = "「%@」もう1つ文字のお選びを。"; "\"%@\" length should ≤ %d for a user phrase." = "「%@」文字数過剰で登録不可、%d 文字以内にして下さい。"; "\"%@\" selected. ENTER to add user phrase." = "「%@」を ENTER で辞書に登録。"; -"\"%@\" already exists: ENTER to boost, SHIFT+COMMAND+ENTER to nerf, \n BackSpace or Delete key to exclude." = "「%@」は既存語彙:ENTER で最優先にし、SHIFT+COMMAND+ENTER で優先順位を下げる;\n BackSpace 或いは Delete で排除。"; +"\"%@\" already exists: ENTER to boost, SHIFT+COMMAND+ENTER to nerf, \n BackSpace or Delete key to exclude." = "「%@」は既存語彙:ENTER で最優先にし、SHIFT+COMMAND+ENTER で優先順位を下げる;\n BackSpace 或いは Delete で排除。"; "Edit Phrase Replacement Table…" = "言葉置換表を編集…"; "Use Phrase Replacement" = "言葉置換機能"; "Candidates keys cannot be empty." = "言選り用キー陣列に何かキーをご登録ください。"; diff --git a/Source/Resources/zh-Hans.lproj/Localizable.strings b/Source/Resources/zh-Hans.lproj/Localizable.strings index 18db2774..47093c28 100644 --- a/Source/Resources/zh-Hans.lproj/Localizable.strings +++ b/Source/Resources/zh-Hans.lproj/Localizable.strings @@ -132,7 +132,7 @@ "Clear the entire inline composition buffer like Shift+Delete" = "像 Shift+Delete 那样清空当前组字区内容"; "Commit Hanyu-Pinyin instead on Ctrl(+Option)+Command+Enter" = "Ctrl(+Option)+Command+Enter 输出汉语拼音而非注音"; "Completely disable using Shift key to toggle alphanumerical mode" = "彻底禁止使用 Shift 键切换英数模式"; -"Consolidate the context on confirming candidate selection" = "在使用选字窗选字时,自動巩固上下文"; +"Consolidate the context on confirming candidate selection" = "在使用选字窗选字时,自动巩固上下文"; "Cursor Selection:" = "选字游标:"; "Dachen (Microsoft Standard / Wang / 01, etc.)" = "大千排列 (微软标准/王安/零壹/仲鼎/国乔)"; "Dachen 26 (libChewing)" = "酷音大千二十六键排列"; From e663ce987028e3e9d9db88fb2381630c1ada2e75 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sun, 28 Aug 2022 12:00:58 +0800 Subject: [PATCH 17/20] PrefWindow // Syncing recent changes in PrefUI. --- Source/WindowNIBs/Base.lproj/MainMenu.xib | 4 +- .../WindowNIBs/Base.lproj/frmPrefWindow.xib | 1640 ++++++++++------- .../WindowNIBs/en.lproj/frmPrefWindow.strings | 10 + .../WindowNIBs/ja.lproj/frmPrefWindow.strings | 10 + .../zh-Hans.lproj/frmPrefWindow.strings | 10 + .../zh-Hant.lproj/frmPrefWindow.strings | 10 + 6 files changed, 973 insertions(+), 711 deletions(-) diff --git a/Source/WindowNIBs/Base.lproj/MainMenu.xib b/Source/WindowNIBs/Base.lproj/MainMenu.xib index 7ab2c330..5bdf5fbb 100644 --- a/Source/WindowNIBs/Base.lproj/MainMenu.xib +++ b/Source/WindowNIBs/Base.lproj/MainMenu.xib @@ -1,8 +1,8 @@ - + - + diff --git a/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib b/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib index da119bae..e78789c7 100644 --- a/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib +++ b/Source/WindowNIBs/Base.lproj/frmPrefWindow.xib @@ -1,6 +1,7 @@ + @@ -16,15 +17,13 @@ - + - - @@ -35,6 +34,446 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -94,7 +533,7 @@ - + @@ -102,7 +541,7 @@ - + @@ -128,26 +567,8 @@ - - + @@ -158,7 +579,7 @@ - + - + @@ -280,7 +701,7 @@ + @@ -351,22 +790,361 @@ - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + %{value1}@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -387,491 +1165,16 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %{value1}@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Apple Dynamic Bopomofo Basic Keyboard Layouts (Dachen & Eten Traditional) must match the Dachen parser in order to be functional. - - - - - - - - - - - + + + - - - - + @@ -902,10 +1205,7 @@ - - - - + @@ -915,205 +1215,127 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - Warning: This page is for testing future features. + + + + + + + + Warning: This page is for testing future features. Features listed here may not work as expected. - - - - - - - - - - - - - - - - IMK candidate window relies on certain Apple private APIs which are force-exposed by using bridging headers. Its usability, at this moment, is only guaranteed from macOS 10.14 Mojave to macOS 13 Ventura. Further tests are required in the future in order to tell whether it is usable in newer macOS releases. - - - - + + + + + + + + + + + + + + + + IMK candidate window relies on certain Apple private APIs which are force-exposed by using bridging headers. Its usability, at this moment, is only guaranteed from macOS 10.14 Mojave to macOS 13 Ventura. Further tests are required in the future in order to tell whether it is usable in newer macOS releases. + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + - + diff --git a/Source/WindowNIBs/en.lproj/frmPrefWindow.strings b/Source/WindowNIBs/en.lproj/frmPrefWindow.strings index 94436db2..71bf86e9 100644 --- a/Source/WindowNIBs/en.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/en.lproj/frmPrefWindow.strings @@ -43,7 +43,9 @@ "chkAllowBoostingSingleKanjiAsUserPhrase.title" = "Allow boosting / excluding a candidate of single kanji"; "chkAlsoConfirmAssociatedCandidatesByEnter.title" = "Allow using Enter key to confirm associated candidate selection"; "chkAutoCorrectReadingCombination.title" = "Automatically correct reading combinations when typing"; +"chkConsolidateContextOnCandidateSelection.title" = "Consolidate the context on confirming candidate selection"; "chkFetchSuggestionsFromUserOverrideModel.title" = "Applying typing suggestions from half-life user override model"; +"chkHardenVerticalPunctuations.title" = "Harden vertical punctuations during vertical typing"; "chkKeepReadingUponCompositionError.title" = "Allow backspace-editing miscomposed readings"; "chkUseFixecCandidateOrderOnSelection.title" = "Always use fixed listing order in candidate window"; "DbW-eq-ZdB.title" = "Starlight"; @@ -64,6 +66,8 @@ "jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3"; "lblDevZoneIMKCandidate.title" = "IMK candidate window relies on certain Apple private APIs which are force-exposed by using bridging headers. Its usability, at this moment, is only guaranteed from macOS 10.14 Mojave to macOS 13 Ventura. Further tests are required in the future in order to tell whether it is usable in newer macOS releases."; "lblDevZoneTitleDescription.title" = "Warning: This page is for testing future features. \nFeatures listed here may not work as expected."; +"lblIntonationKeyBehavior.title" = "Specify what intonation key does when syllable composer is empty."; +"lblShiftBkspKeyBehavior.title" = "Choose the attempted behavior of Shift+BackSpace key."; "lblUpperCaseLetterKeyBehavior.title" = "Choose the behavior of Shift+Letter key with letter inputs."; "Parser11.title" = "Secondary Pinyin with Numeral Intonation"; "Parser12.title" = "Yale Pinyin with Numeral Intonation"; @@ -71,6 +75,12 @@ "Parser14.title" = "Universal Pinyin with Numeral Intonation"; "Pg5-G9-pY5.title" = "Choose the behavior of (Shift+)Space key with candidates."; "QUQ-oY-4Hc.label" = "General"; +"rdoIntonationKeyBehavior0.title" = "Override the previous reading's intonation with candidate-reset"; +"rdoIntonationKeyBehavior1.title" = "Only override the intonation of the previous reading if different"; +"rdoIntonationKeyBehavior2.title" = "Always type intonations to the inline composition buffer"; +"rdoShiftBkspKeyBehavior0.title" = "Disassemble the previous reading, dropping its intonation"; +"rdoShiftBkspKeyBehavior1.title" = "Clear the entire inline composition buffer like Shift+Delete"; +"rdoShiftBkspKeyBehavior2.title" = "Always drop the previous reading"; "rdoUpperCaseLetterKeyBehavior0.title" = "Type them into inline composition buffer"; "rdoUpperCaseLetterKeyBehavior1.title" = "Directly commit lowercased letters"; "rdoUpperCaseLetterKeyBehavior2.title" = "Directly commit uppercased letters"; diff --git a/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings b/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings index 8ad344e4..9393550b 100644 --- a/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/ja.lproj/frmPrefWindow.strings @@ -43,7 +43,9 @@ "chkAllowBoostingSingleKanjiAsUserPhrase.title" = "即排除/即最優先にできる候補の文字数の最低限は1字とする"; "chkAlsoConfirmAssociatedCandidatesByEnter.title" = "Enter キーを連想語彙候補の確認のために使う"; "chkAutoCorrectReadingCombination.title" = "入力中で打ち間違った発音組み合わせを自動的に訂正する"; +"chkConsolidateContextOnCandidateSelection.title" = "候補陳列ウィンドウで候補を選ぶ時に文脈を強固する"; "chkFetchSuggestionsFromUserOverrideModel.title" = "入力中で臨時記憶モジュールからお薦めの候補を自動的に選ぶ"; +"chkHardenVerticalPunctuations.title" = "縦書きの時に、引用符・括弧などを強制的に縦書き文字と変換する(不推奨)"; "chkKeepReadingUponCompositionError.title" = "効かぬ音読みを BackSpace で再編集"; "chkUseFixecCandidateOrderOnSelection.title" = "候補文字を固定順番で陳列する"; "DbW-eq-ZdB.title" = "星光"; @@ -64,6 +66,8 @@ "jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3"; "lblDevZoneIMKCandidate.title" = "IMK 候補陳列ウィンドウは、Apple の未公開のAPIを「bridging-header」という強引的な手段で引き出して利用した機能である。現時点で macOS 10.14 Mojave から macOS 13 Ventura まで利用可能であるが、その後の新しい macOS との互換性の話はまだ早い。"; "lblDevZoneTitleDescription.title" = "警告:これからの新機能テストのために作ったページですから、\nここで陳列されている諸機能は予想通り動けるだと思わないでください。"; +"lblIntonationKeyBehavior.title" = "音調組立緩衝列が空かされた時の音調キーの行為をご指定ください。"; +"lblShiftBkspKeyBehavior.title" = "Shift+BackSpace キーの優先行為をご指定ください。"; "lblUpperCaseLetterKeyBehavior.title" = "Shift+文字キーの行為をご指定ください。"; "Parser11.title" = "国音二式 (ローマ字+数字音調)"; "Parser12.title" = "イェール弁音 (ローマ字+数字音調)"; @@ -71,6 +75,12 @@ "Parser14.title" = "汎用弁音 (ローマ字+数字音調)"; "Pg5-G9-pY5.title" = "入力候補についての (Shift+)Space キーの輪番切替対象をご指定ください。"; "QUQ-oY-4Hc.label" = "全般"; +"rdoIntonationKeyBehavior0.title" = "カーソルの後部の音読みの音調を上書きし、候補選択状態を戻す"; +"rdoIntonationKeyBehavior1.title" = "カーソルの後部の音読みの異なる音調だけを上書きする"; +"rdoIntonationKeyBehavior2.title" = "常に入力緩衝列に音調を入力する"; +"rdoShiftBkspKeyBehavior0.title" = "カーソルの後部の音読みを解き、その音調を除く"; +"rdoShiftBkspKeyBehavior1.title" = "Shift+Delete のように入力緩衝列を消す"; +"rdoShiftBkspKeyBehavior2.title" = "カーソルの後部の音読みを常に削除する"; "rdoUpperCaseLetterKeyBehavior0.title" = "入力緩衝列にローマ字入力"; "rdoUpperCaseLetterKeyBehavior1.title" = "ローマ字(小文字)を直接出力"; "rdoUpperCaseLetterKeyBehavior2.title" = "ローマ字(大文字)を直接出力"; diff --git a/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings b/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings index 0cfb4fc1..ac8fcefb 100644 --- a/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/zh-Hans.lproj/frmPrefWindow.strings @@ -43,7 +43,9 @@ "chkAllowBoostingSingleKanjiAsUserPhrase.title" = "将可以就地升权/排除的候选字词的最短词长设为单个汉字"; "chkAlsoConfirmAssociatedCandidatesByEnter.title" = "允许使用 Enter 确认当前选中的联想词"; "chkAutoCorrectReadingCombination.title" = "敲字时自动纠正读音组合"; +"chkConsolidateContextOnCandidateSelection.title" = "在使用选字窗选字时,自动巩固上下文"; "chkFetchSuggestionsFromUserOverrideModel.title" = "在敲字时自动套用来自半衰记忆模组的建议"; +"chkHardenVerticalPunctuations.title" = "在纵排书写时,强制转换标点为纵排形式(不推荐)"; "chkKeepReadingUponCompositionError.title" = "允许对无效的读音使用 BackSpace 编辑"; "chkUseFixecCandidateOrderOnSelection.title" = "以固定顺序来陈列选字窗内的候选字"; "DbW-eq-ZdB.title" = "星光"; @@ -64,6 +66,8 @@ "jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3"; "lblDevZoneIMKCandidate.title" = "IMK 选字窗依赖于 Apple 的私有 API,而且是借由桥接档案头强制曝露的方法使用的。目前,该功能仅在 macOS 10.14 Mojave 至 macOS 13 Ventura 系统内有测试过可用性。至于在未来的 macOS 发行版当中是否可用,则需要另行测试、才能下结论。"; "lblDevZoneTitleDescription.title" = "警告:该页面仅作未来功能测试所用。\n在此列出的功能并非处于完全可用之状态。"; +"lblIntonationKeyBehavior.title" = "指定声调键(在注拼槽为「空」状态时)的行为。"; +"lblShiftBkspKeyBehavior.title" = "指定 Shift+BackSpace 组合键率先尝试的行为。"; "lblUpperCaseLetterKeyBehavior.title" = "指定 Shift+字母键 的行为。"; "Parser11.title" = "国音二式+数字标调"; "Parser12.title" = "耶鲁拼音+数字标调"; @@ -71,6 +75,12 @@ "Parser14.title" = "通用拼音+数字标调"; "Pg5-G9-pY5.title" = "指定 (Shift+)Space 热键对候选字词而言的轮替操作对象。"; "QUQ-oY-4Hc.label" = "一般"; +"rdoIntonationKeyBehavior0.title" = "尝试对游标正后方的字音覆写声调,且重设其选字状态"; +"rdoIntonationKeyBehavior1.title" = "仅在键入的声调与游标正后方的字音不同时,尝试覆写"; +"rdoIntonationKeyBehavior2.title" = "始终在内文组字区内键入声调符号"; +"rdoShiftBkspKeyBehavior0.title" = "析构游标正后方的字音,且剔除其声调"; +"rdoShiftBkspKeyBehavior1.title" = "像 Shift+Delete 那样清空当前组字区的内容"; +"rdoShiftBkspKeyBehavior2.title" = "始终剔除游标正后方的字音"; "rdoUpperCaseLetterKeyBehavior0.title" = "直接键入内文组字区"; "rdoUpperCaseLetterKeyBehavior1.title" = "直接递交小写字母"; "rdoUpperCaseLetterKeyBehavior2.title" = "直接递交大写字母"; diff --git a/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings b/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings index 1fc2a304..8a105a5e 100644 --- a/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings +++ b/Source/WindowNIBs/zh-Hant.lproj/frmPrefWindow.strings @@ -43,7 +43,9 @@ "chkAllowBoostingSingleKanjiAsUserPhrase.title" = "將可以就地升權/排除的候選字詞的最短詞長設為單個漢字"; "chkAlsoConfirmAssociatedCandidatesByEnter.title" = "允許使用 Enter 確認當前選中的聯想詞"; "chkAutoCorrectReadingCombination.title" = "敲字時自動糾正讀音組合"; +"chkConsolidateContextOnCandidateSelection.title" = "在使用選字窗選字時,自動鞏固上下文"; "chkFetchSuggestionsFromUserOverrideModel.title" = "在敲字時自動套用來自半衰記憶模組的建議"; +"chkHardenVerticalPunctuations.title" = "在縱排書寫時,強制轉換標點為縱排形式(不推薦)"; "chkKeepReadingUponCompositionError.title" = "允許對無效的讀音使用 BackSpace 編輯"; "chkUseFixecCandidateOrderOnSelection.title" = "以固定順序來陳列選字窗內的候選字"; "DbW-eq-ZdB.title" = "星光"; @@ -64,6 +66,8 @@ "jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3"; "lblDevZoneIMKCandidate.title" = "IMK 選字窗依賴於 Apple 的私有 API,而且是藉由橋接檔案頭強制曝露的方法使用的。目前,該功能僅在 macOS 10.14 Mojave 至 macOS 13 Ventura 系統內有測試過可用性。至於在未來的 macOS 發行版當中是否可用,則需要另行測試、才能下結論。"; "lblDevZoneTitleDescription.title" = "警告:該頁面僅作未來功能測試所用。\n在此列出的功能並非處於完全可用之狀態。"; +"lblIntonationKeyBehavior.title" = "指定聲調鍵(在注拼槽為「空」狀態時)的行為。"; +"lblShiftBkspKeyBehavior.title" = "指定 Shift+BackSpace 組合鍵率先嘗試的行為。"; "lblUpperCaseLetterKeyBehavior.title" = "指定 Shift+字母鍵 的行為。"; "Parser11.title" = "國音二式+數字標調"; "Parser12.title" = "耶魯拼音+數字標調"; @@ -71,6 +75,12 @@ "Parser14.title" = "通用拼音+數字標調"; "Pg5-G9-pY5.title" = "指定 (Shift+)Space 熱鍵對候選字詞而言的輪替操作對象。"; "QUQ-oY-4Hc.label" = "一般"; +"rdoIntonationKeyBehavior0.title" = "嘗試對游標正後方的字音覆寫聲調,且重設其選字狀態"; +"rdoIntonationKeyBehavior1.title" = "僅在鍵入的聲調與游標正後方的字音不同時,嘗試覆寫"; +"rdoIntonationKeyBehavior2.title" = "始終在內文組字區內鍵入聲調符號"; +"rdoShiftBkspKeyBehavior0.title" = "析構游標正後方的字音,且剔除其聲調"; +"rdoShiftBkspKeyBehavior1.title" = "像 Shift+Delete 那樣清空當前組字區的內容"; +"rdoShiftBkspKeyBehavior2.title" = "始終剔除游標正後方的字音"; "rdoUpperCaseLetterKeyBehavior0.title" = "直接鍵入內文組字區"; "rdoUpperCaseLetterKeyBehavior1.title" = "直接遞交小寫字母"; "rdoUpperCaseLetterKeyBehavior2.title" = "直接遞交大寫字母"; From 29173e92caaa86a2120de1be659d7d91836ede87 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sun, 28 Aug 2022 15:46:02 +0800 Subject: [PATCH 18/20] mgrPrefs // Stop auto-fixing lang settings in user defaults. - This can bring unexpected problems. --- Source/Modules/IMEModules/mgrPrefs.swift | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/Source/Modules/IMEModules/mgrPrefs.swift b/Source/Modules/IMEModules/mgrPrefs.swift index 2326ae6e..14c4ce65 100644 --- a/Source/Modules/IMEModules/mgrPrefs.swift +++ b/Source/Modules/IMEModules/mgrPrefs.swift @@ -725,18 +725,6 @@ extension mgrPrefs { mgrPrefs.disableShiftTogglingAlphanumericalMode = false mgrPrefs.togglingAlphanumericalModeWithLShift = false } - // 介面語言選項糾錯。 - var filteredAppleLanguages = Set() - appleLanguages.forEach { - if IME.arrSupportedLocales.contains($0) { - filteredAppleLanguages.insert($0) - } - } - if !filteredAppleLanguages.isEmpty { - appleLanguages = Array(filteredAppleLanguages) - } else { - UserDefaults.standard.removeObject(forKey: UserDef.kAppleLanguages.rawValue) - } // 注拼槽注音排列選項糾錯。 var isMandarinParserOptionValid = false MandarinParser.allCases.forEach { From 206819982f5fb587c4ca6ecd3d0bfa7a2bd99a29 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sun, 28 Aug 2022 11:28:20 +0800 Subject: [PATCH 19/20] Update Data - 20220828 --- Source/Data | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Data b/Source/Data index a0a2565c..dd3abda8 160000 --- a/Source/Data +++ b/Source/Data @@ -1 +1 @@ -Subproject commit a0a2565cbede65e189951bc8cd44197b3e3d7cda +Subproject commit dd3abda8b5d28f86bdac10c07bb8d82aa8b9365b From eb638c50e15cd6aecd73962a0cd1131276cdab4d Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sun, 28 Aug 2022 15:01:16 +0800 Subject: [PATCH 20/20] Bump version to 2.2.0 Golden Master Build 2200. --- Update-Info.plist | 4 ++-- vChewing.pkgproj | 2 +- vChewing.xcodeproj/project.pbxproj | 32 +++++++++++++++--------------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Update-Info.plist b/Update-Info.plist index 13f67487..1c080c1f 100644 --- a/Update-Info.plist +++ b/Update-Info.plist @@ -3,9 +3,9 @@ CFBundleShortVersionString - 2.1.0 + 2.2.0 CFBundleVersion - 2101 + 2200 UpdateInfoEndpoint https://gitee.com/vchewing/vChewing-macOS/raw/main/Update-Info.plist UpdateInfoSite diff --git a/vChewing.pkgproj b/vChewing.pkgproj index 85752e1b..b5ce7ea0 100644 --- a/vChewing.pkgproj +++ b/vChewing.pkgproj @@ -726,7 +726,7 @@ USE_HFS+_COMPRESSION VERSION - 2.1.0 + 2.2.0 TYPE 0 diff --git a/vChewing.xcodeproj/project.pbxproj b/vChewing.xcodeproj/project.pbxproj index 81215cfc..4de6c4e1 100644 --- a/vChewing.xcodeproj/project.pbxproj +++ b/vChewing.xcodeproj/project.pbxproj @@ -1449,7 +1449,7 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2101; + CURRENT_PROJECT_VERSION = 2200; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_PREPROCESSOR_DEFINITIONS = ( @@ -1459,7 +1459,7 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 2.1.0; + MARKETING_VERSION = 2.2.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewingTests; @@ -1488,13 +1488,13 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2101; + CURRENT_PROJECT_VERSION = 2200; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 2.1.0; + MARKETING_VERSION = 2.2.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewingTests; @@ -1525,7 +1525,7 @@ CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 2101; + CURRENT_PROJECT_VERSION = 2200; DEAD_CODE_STRIPPING = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; @@ -1546,7 +1546,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MARKETING_VERSION = 2.1.0; + MARKETING_VERSION = 2.2.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor; @@ -1575,7 +1575,7 @@ CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 2101; + CURRENT_PROJECT_VERSION = 2200; DEAD_CODE_STRIPPING = YES; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -1592,7 +1592,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MARKETING_VERSION = 2.1.0; + MARKETING_VERSION = 2.2.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingPhraseEditor; @@ -1707,7 +1707,7 @@ CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 2101; + CURRENT_PROJECT_VERSION = 2200; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = ""; @@ -1735,7 +1735,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MARKETING_VERSION = 2.1.0; + MARKETING_VERSION = 2.2.0; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1764,7 +1764,7 @@ CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 2101; + CURRENT_PROJECT_VERSION = 2200; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_ASSET_PATHS = ""; DEVELOPMENT_TEAM = ""; @@ -1786,7 +1786,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MARKETING_VERSION = 2.1.0; + MARKETING_VERSION = 2.2.0; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.inputmethod.vChewing; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1809,7 +1809,7 @@ CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 2101; + CURRENT_PROJECT_VERSION = 2200; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -1829,7 +1829,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MARKETING_VERSION = 2.1.0; + MARKETING_VERSION = 2.2.0; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingInstaller; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1851,7 +1851,7 @@ CODE_SIGN_IDENTITY = "-"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 2101; + CURRENT_PROJECT_VERSION = 2200; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -1865,7 +1865,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MARKETING_VERSION = 2.1.0; + MARKETING_VERSION = 2.2.0; PRODUCT_BUNDLE_IDENTIFIER = org.atelierInmu.vChewing.vChewingInstaller; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = "";