From 3d8ad5423a7b55d4552c0d56510a8beb207d1947 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Sun, 5 Mar 2023 13:24:26 +0800 Subject: [PATCH] IMEStateData // Disallow filtering single kanjis in .ofMarking() state. --- Source/Modules/IMEStateData.swift | 30 ++++++++++++------- .../Resources/Base.lproj/Localizable.strings | 1 + Source/Resources/en.lproj/Localizable.strings | 1 + Source/Resources/ja.lproj/Localizable.strings | 1 + .../zh-Hans.lproj/Localizable.strings | 1 + .../zh-Hant.lproj/Localizable.strings | 1 + 6 files changed, 25 insertions(+), 10 deletions(-) diff --git a/Source/Modules/IMEStateData.swift b/Source/Modules/IMEStateData.swift index ea20fc2e..924495d3 100644 --- a/Source/Modules/IMEStateData.swift +++ b/Source/Modules/IMEStateData.swift @@ -103,7 +103,7 @@ public struct IMEStateData: IMEStateDataProtocol { ] ) public var isFilterable: Bool { - markedTargetExists ? isMarkedLengthValid : false + markedTargetExists ? (isMarkedLengthValid && markedRange.count > 1) : false } public var isMarkedLengthValid: Bool { @@ -232,30 +232,40 @@ public extension IMEStateData { let text = pair.1 let readingDisplay = readingThreadForDisplay - if markedRange.count < IMEStateData.allowedMarkLengthRange.lowerBound { + if markedRange.count < Self.allowedMarkLengthRange.lowerBound { tooltipColorState = .denialInsufficiency return String( format: NSLocalizedString( "\"%@\" length must ≥ 2 for a user phrase.", comment: "" ) + "\n◆ " + readingDisplay, text ) - } else if markedRange.count > IMEStateData.allowedMarkLengthRange.upperBound { + } else if markedRange.count > Self.allowedMarkLengthRange.upperBound { tooltipColorState = .denialOverflow return String( format: NSLocalizedString( "\"%@\" length should ≤ %d for a user phrase.", comment: "" - ) + "\n◆ " + readingDisplay, text, IMEStateData.allowedMarkLengthRange.upperBound + ) + "\n◆ " + readingDisplay, text, Self.allowedMarkLengthRange.upperBound ) } if markedTargetExists { tooltipColorState = .prompt - return String( - format: NSLocalizedString( - "\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf, \n BackSpace or Delete key to exclude.", - comment: "" - ) + "\n◆ " + readingDisplay, text - ) + switch markedRange.count { + case 1: + return String( + format: NSLocalizedString( + "\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf.", + comment: "" + ) + "\n◆ " + readingDisplay, text + ) + default: + return String( + format: NSLocalizedString( + "\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf, \n BackSpace or Delete key to exclude.", + comment: "" + ) + "\n◆ " + readingDisplay, text + ) + } } tooltipColorState = .normal return String( diff --git a/Source/Resources/Base.lproj/Localizable.strings b/Source/Resources/Base.lproj/Localizable.strings index 76ae03cb..90c63448 100644 --- a/Source/Resources/Base.lproj/Localizable.strings +++ b/Source/Resources/Base.lproj/Localizable.strings @@ -106,6 +106,7 @@ "\"%@\" length must ≥ 2 for a user phrase." = "\"%@\" length must ≥ 2 for a user phrase."; "\"%@\" length should ≤ %d for a user phrase." = "\"%@\" length should ≤ %d for a user phrase."; "\"%@\" selected. ENTER to add user phrase." = "\"%@\" selected. ENTER to add user phrase."; +"\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf." = "\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf."; "\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf, \n BackSpace or Delete key to exclude." = "\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf, \n BackSpace or Delete key to exclude."; "Edit Phrase Replacement Table…" = "Edit Phrase Replacement Table…"; "Use Phrase Replacement" = "Use Phrase Replacement"; diff --git a/Source/Resources/en.lproj/Localizable.strings b/Source/Resources/en.lproj/Localizable.strings index 76ae03cb..90c63448 100644 --- a/Source/Resources/en.lproj/Localizable.strings +++ b/Source/Resources/en.lproj/Localizable.strings @@ -106,6 +106,7 @@ "\"%@\" length must ≥ 2 for a user phrase." = "\"%@\" length must ≥ 2 for a user phrase."; "\"%@\" length should ≤ %d for a user phrase." = "\"%@\" length should ≤ %d for a user phrase."; "\"%@\" selected. ENTER to add user phrase." = "\"%@\" selected. ENTER to add user phrase."; +"\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf." = "\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf."; "\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf, \n BackSpace or Delete key to exclude." = "\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf, \n BackSpace or Delete key to exclude."; "Edit Phrase Replacement Table…" = "Edit Phrase Replacement Table…"; "Use Phrase Replacement" = "Use Phrase Replacement"; diff --git a/Source/Resources/ja.lproj/Localizable.strings b/Source/Resources/ja.lproj/Localizable.strings index 937ade1b..9a91e277 100644 --- a/Source/Resources/ja.lproj/Localizable.strings +++ b/Source/Resources/ja.lproj/Localizable.strings @@ -106,6 +106,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:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf." = "「%@」は既存語彙:\n ENTER で最優先にし、SHIFT+COMMAND+ENTER で優先順位を下げる。"; "\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf, \n BackSpace or Delete key to exclude." = "「%@」は既存語彙:\n ENTER で最優先にし、SHIFT+COMMAND+ENTER で優先順位を下げる;\n BackSpace 或いは Delete で排除。"; "Edit Phrase Replacement Table…" = "言葉置換表を編集…"; "Use Phrase Replacement" = "言葉置換機能"; diff --git a/Source/Resources/zh-Hans.lproj/Localizable.strings b/Source/Resources/zh-Hans.lproj/Localizable.strings index fbac2efb..a1d0fbcc 100644 --- a/Source/Resources/zh-Hans.lproj/Localizable.strings +++ b/Source/Resources/zh-Hans.lproj/Localizable.strings @@ -106,6 +106,7 @@ "\"%@\" length must ≥ 2 for a user phrase." = "「%@」字数不足以自订语汇。"; "\"%@\" length should ≤ %d for a user phrase." = "「%@」字数超过 %d、无法自订。"; "\"%@\" selected. ENTER to add user phrase." = "「%@」敲 Enter 添入自订语汇。"; +"\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf." = "「%@」已存在:\n 敲 Enter 以升权、敲 Shift+Command+Enter 以降权。"; "\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf, \n BackSpace or Delete key to exclude." = "「%@」已存在:\n 敲 Enter 以升权、敲 Shift+Command+Enter 以降权;\n 敲 BackSpace 或 Delete 以排除。"; "Edit Phrase Replacement Table…" = "编辑语汇置换表…"; "Use Phrase Replacement" = "使用语汇置换"; diff --git a/Source/Resources/zh-Hant.lproj/Localizable.strings b/Source/Resources/zh-Hant.lproj/Localizable.strings index d7002ea7..a038e8d1 100644 --- a/Source/Resources/zh-Hant.lproj/Localizable.strings +++ b/Source/Resources/zh-Hant.lproj/Localizable.strings @@ -106,6 +106,7 @@ "\"%@\" length must ≥ 2 for a user phrase." = "「%@」字數不足以自訂語彙。"; "\"%@\" length should ≤ %d for a user phrase." = "「%@」字數超過 %d、無法自訂。"; "\"%@\" selected. ENTER to add user phrase." = "「%@」敲 Enter 添入自訂語彙。"; +"\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf." = "「%@」已存在:\n 敲 Enter 以升權、敲 Shift+Command+Enter 以降權。"; "\"%@\" already exists:\n ENTER to boost, SHIFT+COMMAND+ENTER to nerf, \n BackSpace or Delete key to exclude." = "「%@」已存在:\n 敲 Enter 以升權、敲 Shift+Command+Enter 以降權;\n 敲 BackSpace 或 Delete 以排除。"; "Edit Phrase Replacement Table…" = "編輯語彙置換表…"; "Use Phrase Replacement" = "使用語彙置換";