From b9eb62bd52ecced370aa3d1823087457ee1b926b Mon Sep 17 00:00:00 2001 From: tisfeng Date: Sat, 25 May 2024 11:40:59 +0800 Subject: [PATCH 1/3] perf: adjust files structure, move Swift extension to Swift group --- Easydict.xcodeproj/project.pbxproj | 48 ++++++++----------- .../Extensions}/Array/Array+Convenience.swift | 0 .../Extensions}/Binding/Binding+DidSet.swift | 0 .../Extensions}/Bundle/Bundle+AppInfo.swift | 0 .../Notification/Notification+Name.swift | 0 .../LanguageDetectOptimizeExtensions.swift | 0 .../{ => Others}/LanguageExtensions.swift | 0 .../ShowWindowPositionExtensions.swift | 0 .../{ => Others}/WindowTypeExtensions.swift | 0 .../String/String+EncryptAES.swift | 0 10 files changed, 19 insertions(+), 29 deletions(-) rename Easydict/{objc/Utility/Swift => Swift/Utility/Extensions}/Array/Array+Convenience.swift (100%) rename Easydict/{objc/Utility/Swift => Swift/Utility/Extensions}/Binding/Binding+DidSet.swift (100%) rename Easydict/{objc/Utility/Swift => Swift/Utility/Extensions}/Bundle/Bundle+AppInfo.swift (100%) rename Easydict/{objc/Utility/Swift => Swift/Utility/Extensions}/Notification/Notification+Name.swift (100%) rename Easydict/Swift/Utility/Extensions/{ => Others}/LanguageDetectOptimizeExtensions.swift (100%) rename Easydict/Swift/Utility/Extensions/{ => Others}/LanguageExtensions.swift (100%) rename Easydict/Swift/Utility/Extensions/{ => Others}/ShowWindowPositionExtensions.swift (100%) rename Easydict/Swift/Utility/Extensions/{ => Others}/WindowTypeExtensions.swift (100%) rename Easydict/{objc/Utility/Swift => Swift/Utility/Extensions}/String/String+EncryptAES.swift (100%) diff --git a/Easydict.xcodeproj/project.pbxproj b/Easydict.xcodeproj/project.pbxproj index b9ae9f3ed..424012ffb 100644 --- a/Easydict.xcodeproj/project.pbxproj +++ b/Easydict.xcodeproj/project.pbxproj @@ -40,7 +40,6 @@ 033C30FC2A7409C40095926A /* TTTDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 033C30FB2A7409C40095926A /* TTTDictionary.m */; }; 033C31002A74CECE0095926A /* EZAppleDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 033C30FF2A74CECE0095926A /* EZAppleDictionary.m */; }; 0342A9812AD64924002A9F5F /* NSString+EZSplit.m in Sources */ = {isa = PBXBuildFile; fileRef = 0342A9802AD64924002A9F5F /* NSString+EZSplit.m */; }; - 034749772B37279200FF679C /* String+EncryptAES.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03FD68BD2B1E151A00FD388E /* String+EncryptAES.swift */; }; 03542A30293645DF00C34C33 /* EZAppleService.m in Sources */ = {isa = PBXBuildFile; fileRef = 03542A2F293645DF00C34C33 /* EZAppleService.m */; }; 03542A342936F70F00C34C33 /* EZLanguageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 03542A332936F70F00C34C33 /* EZLanguageManager.m */; }; 03542A3A2937AE6400C34C33 /* EZQueryService.m in Sources */ = {isa = PBXBuildFile; fileRef = 03542A392937AE6400C34C33 /* EZQueryService.m */; }; @@ -307,8 +306,8 @@ A0B65CA0F31AC8ECFB8347CC /* Pods_EasydictTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 378E73A7EA8FC8FB9C975A63 /* Pods_EasydictTests.framework */; }; B87AC7E36367075BA5D13234 /* Pods_Easydict.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6372B33DFF803C7096A82250 /* Pods_Easydict.framework */; }; C415C0AD2B450D4800A9D231 /* GeminiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415C0AC2B450D4800A9D231 /* GeminiService.swift */; }; - C4BFDD7A2BE61F550094026B /* Vortex in Frameworks */ = {isa = PBXBuildFile; productRef = C4BFDD792BE61F550094026B /* Vortex */; }; C490BF722BE910B70021E40A /* AdvancedTabItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C490BF712BE910B70021E40A /* AdvancedTabItemView.swift */; }; + C4BFDD7A2BE61F550094026B /* Vortex in Frameworks */ = {isa = PBXBuildFile; productRef = C4BFDD792BE61F550094026B /* Vortex */; }; C4DD01E92B12B3C80025EE8E /* TencentService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4DD01E82B12B3C80025EE8E /* TencentService.swift */; }; C4DD01EB2B12BA250025EE8E /* TencentResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4DD01EA2B12BA250025EE8E /* TencentResponse.swift */; }; C4DD01ED2B12BE9B0025EE8E /* TencentTranslateType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4DD01EC2B12BE9B0025EE8E /* TencentTranslateType.swift */; }; @@ -1019,6 +1018,17 @@ path = EasydictTests; sourceTree = ""; }; + 0317516C2C018A8800EFB343 /* Others */ = { + isa = PBXGroup; + children = ( + EA9943E72B534D8900EE7B97 /* LanguageDetectOptimizeExtensions.swift */, + EA9943ED2B5353AB00EE7B97 /* WindowTypeExtensions.swift */, + EA9943EF2B5354C400EE7B97 /* ShowWindowPositionExtensions.swift */, + EA9943F12B5358BF00EE7B97 /* LanguageExtensions.swift */, + ); + path = Others; + sourceTree = ""; + }; 03247E37296AE8C800AFCD67 /* LoadingAnimationView */ = { isa = PBXGroup; children = ( @@ -1337,7 +1347,6 @@ 038954372A25A94E00EFFDC3 /* Utility */ = { isa = PBXGroup; children = ( - 03CF88602B137ECB0030C199 /* Swift */, 03CAB9522ADBEF5000DA94A3 /* SystemUtility */, 030570DF2ADB916E00C9905E /* AppleScript */, 03D8B26A292DBC8800D5A811 /* EZCategory */, @@ -1371,8 +1380,9 @@ 038A723E2B62C07B004995E3 /* String */ = { isa = PBXGroup; children = ( - 038A723F2B62C0B9004995E3 /* String+Regex.swift */, 033A8EAD2BDFE09B00030C08 /* String+Extension.swift */, + 038A723F2B62C0B9004995E3 /* String+Regex.swift */, + 03FD68BD2B1E151A00FD388E /* String+EncryptAES.swift */, ); path = String; sourceTree = ""; @@ -2009,18 +2019,6 @@ path = SystemUtility; sourceTree = ""; }; - 03CF88602B137ECB0030C199 /* Swift */ = { - isa = PBXGroup; - children = ( - 0A2A05A42B59755F00EEA142 /* Bundle */, - 0A2BA9622B4A3CBB002872A4 /* Notification */, - 0A2BA95E2B49A967002872A4 /* Binding */, - 03FD68BC2B1E14B500FD388E /* String */, - 03CF88612B137ED60030C199 /* Array */, - ); - path = Swift; - sourceTree = ""; - }; 03CF88612B137ED60030C199 /* Array */ = { isa = PBXGroup; children = ( @@ -2185,14 +2183,6 @@ path = Volcano; sourceTree = ""; }; - 03FD68BC2B1E14B500FD388E /* String */ = { - isa = PBXGroup; - children = ( - 03FD68BD2B1E151A00FD388E /* String+EncryptAES.swift */, - ); - path = String; - sourceTree = ""; - }; 0A2A05A42B59755F00EEA142 /* Bundle */ = { isa = PBXGroup; children = ( @@ -2517,14 +2507,15 @@ EA9943E62B534D7C00EE7B97 /* Extensions */ = { isa = PBXGroup; children = ( + 0317516C2C018A8800EFB343 /* Others */, + 0A2A05A42B59755F00EEA142 /* Bundle */, + 0A2BA9622B4A3CBB002872A4 /* Notification */, + 0A2BA95E2B49A967002872A4 /* Binding */, + 03CF88612B137ED60030C199 /* Array */, 03779F162BB256C5008D3C42 /* URL */, 038F1F8D2BAD835500CD2F65 /* AppKit */, EA1013412B5DBDA5005E43F9 /* Defaults */, 038A723E2B62C07B004995E3 /* String */, - EA9943E72B534D8900EE7B97 /* LanguageDetectOptimizeExtensions.swift */, - EA9943ED2B5353AB00EE7B97 /* WindowTypeExtensions.swift */, - EA9943EF2B5354C400EE7B97 /* ShowWindowPositionExtensions.swift */, - EA9943F12B5358BF00EE7B97 /* LanguageExtensions.swift */, ); path = Extensions; sourceTree = ""; @@ -2917,7 +2908,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 034749772B37279200FF679C /* String+EncryptAES.swift in Sources */, 03022F312B370B7100B63209 /* EasydictSwiftTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Easydict/objc/Utility/Swift/Array/Array+Convenience.swift b/Easydict/Swift/Utility/Extensions/Array/Array+Convenience.swift similarity index 100% rename from Easydict/objc/Utility/Swift/Array/Array+Convenience.swift rename to Easydict/Swift/Utility/Extensions/Array/Array+Convenience.swift diff --git a/Easydict/objc/Utility/Swift/Binding/Binding+DidSet.swift b/Easydict/Swift/Utility/Extensions/Binding/Binding+DidSet.swift similarity index 100% rename from Easydict/objc/Utility/Swift/Binding/Binding+DidSet.swift rename to Easydict/Swift/Utility/Extensions/Binding/Binding+DidSet.swift diff --git a/Easydict/objc/Utility/Swift/Bundle/Bundle+AppInfo.swift b/Easydict/Swift/Utility/Extensions/Bundle/Bundle+AppInfo.swift similarity index 100% rename from Easydict/objc/Utility/Swift/Bundle/Bundle+AppInfo.swift rename to Easydict/Swift/Utility/Extensions/Bundle/Bundle+AppInfo.swift diff --git a/Easydict/objc/Utility/Swift/Notification/Notification+Name.swift b/Easydict/Swift/Utility/Extensions/Notification/Notification+Name.swift similarity index 100% rename from Easydict/objc/Utility/Swift/Notification/Notification+Name.swift rename to Easydict/Swift/Utility/Extensions/Notification/Notification+Name.swift diff --git a/Easydict/Swift/Utility/Extensions/LanguageDetectOptimizeExtensions.swift b/Easydict/Swift/Utility/Extensions/Others/LanguageDetectOptimizeExtensions.swift similarity index 100% rename from Easydict/Swift/Utility/Extensions/LanguageDetectOptimizeExtensions.swift rename to Easydict/Swift/Utility/Extensions/Others/LanguageDetectOptimizeExtensions.swift diff --git a/Easydict/Swift/Utility/Extensions/LanguageExtensions.swift b/Easydict/Swift/Utility/Extensions/Others/LanguageExtensions.swift similarity index 100% rename from Easydict/Swift/Utility/Extensions/LanguageExtensions.swift rename to Easydict/Swift/Utility/Extensions/Others/LanguageExtensions.swift diff --git a/Easydict/Swift/Utility/Extensions/ShowWindowPositionExtensions.swift b/Easydict/Swift/Utility/Extensions/Others/ShowWindowPositionExtensions.swift similarity index 100% rename from Easydict/Swift/Utility/Extensions/ShowWindowPositionExtensions.swift rename to Easydict/Swift/Utility/Extensions/Others/ShowWindowPositionExtensions.swift diff --git a/Easydict/Swift/Utility/Extensions/WindowTypeExtensions.swift b/Easydict/Swift/Utility/Extensions/Others/WindowTypeExtensions.swift similarity index 100% rename from Easydict/Swift/Utility/Extensions/WindowTypeExtensions.swift rename to Easydict/Swift/Utility/Extensions/Others/WindowTypeExtensions.swift diff --git a/Easydict/objc/Utility/Swift/String/String+EncryptAES.swift b/Easydict/Swift/Utility/Extensions/String/String+EncryptAES.swift similarity index 100% rename from Easydict/objc/Utility/Swift/String/String+EncryptAES.swift rename to Easydict/Swift/Utility/Extensions/String/String+EncryptAES.swift From 765793597720ea7a6a03a3233e77096548fc58a9 Mon Sep 17 00:00:00 2001 From: tisfeng Date: Sat, 25 May 2024 11:51:27 +0800 Subject: [PATCH 2/3] fix: replace newlines with whitespaces cannot work in Adobe Acrobat --- .../Extensions/String/String+Extension.swift | 13 +++++++++++++ .../BaseQueryWindow/EZBaseQueryViewController.m | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Easydict/Swift/Utility/Extensions/String/String+Extension.swift b/Easydict/Swift/Utility/Extensions/String/String+Extension.swift index 12f4680b7..8f342a8c6 100644 --- a/Easydict/Swift/Utility/Extensions/String/String+Extension.swift +++ b/Easydict/Swift/Utility/Extensions/String/String+Extension.swift @@ -9,10 +9,12 @@ import Foundation extension String { + /// Truncate string max lenght to 200. func truncated(_ maxLength: Int = 200) -> String { String(prefix(maxLength)) } + /// Trim whitespaces and newlines. func trim() -> String { trimmingCharacters(in: .whitespacesAndNewlines) } @@ -30,4 +32,15 @@ extension NSString { } return self } + + /// Replace all newlines with whitespaces. + /// For line breaks, currently macOS is `\n`, previously used `\n`, Windows is `\r\n`. + func replacingNewlinesWithWhitespace() -> NSString { + let newlines = ["\r\n", "\n", "\r"] + var newString = self + for newline in newlines { + newString = replacingOccurrences(of: newline, with: " ") as NSString + } + return newString + } } diff --git a/Easydict/objc/ViewController/Window/BaseQueryWindow/EZBaseQueryViewController.m b/Easydict/objc/ViewController/Window/BaseQueryWindow/EZBaseQueryViewController.m index a72a77804..304e98571 100644 --- a/Easydict/objc/ViewController/Window/BaseQueryWindow/EZBaseQueryViewController.m +++ b/Easydict/objc/ViewController/Window/BaseQueryWindow/EZBaseQueryViewController.m @@ -685,7 +685,7 @@ - (void)receiveTitlebarAction:(EZTitlebarQuickAction)action { break; } case EZTitlebarQuickActionReplaceNewlineWithSpace: { - self.inputText = [self.inputText stringByReplacingOccurrencesOfString:@"\n" withString:@" "]; + self.inputText = [self.inputText replacingNewlinesWithWhitespace]; } default: break; From d7997da9021e20fba2dbf21b0cb053002250d8a7 Mon Sep 17 00:00:00 2001 From: tisfeng Date: Sat, 25 May 2024 11:54:19 +0800 Subject: [PATCH 3/3] perf: add replacingNewlinesWithWhitespace() for Swift String extension --- .../Utility/Extensions/String/String+Extension.swift | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Easydict/Swift/Utility/Extensions/String/String+Extension.swift b/Easydict/Swift/Utility/Extensions/String/String+Extension.swift index 8f342a8c6..5bc7d27a4 100644 --- a/Easydict/Swift/Utility/Extensions/String/String+Extension.swift +++ b/Easydict/Swift/Utility/Extensions/String/String+Extension.swift @@ -18,6 +18,12 @@ extension String { func trim() -> String { trimmingCharacters(in: .whitespacesAndNewlines) } + + /// Replace all newlines with whitespaces. + /// For line breaks, currently macOS is `\n`, previously used `\r`, Windows is `\r\n`. + func replacingNewlinesWithWhitespace() -> String { + (self as NSString).replacingNewlinesWithWhitespace() as String + } } @objc @@ -33,8 +39,6 @@ extension NSString { return self } - /// Replace all newlines with whitespaces. - /// For line breaks, currently macOS is `\n`, previously used `\n`, Windows is `\r\n`. func replacingNewlinesWithWhitespace() -> NSString { let newlines = ["\r\n", "\n", "\r"] var newString = self