From 55dcdc8ce04276f6cd694158ec1faa607dac6a53 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Tue, 27 Feb 2024 13:24:29 +0800 Subject: [PATCH] (NS)String // Add some codepoint extensions. --- .../CocoaExtension/CocoaExtension_Misc.swift | 12 +++++++++++ .../SwiftExtension/SwiftExtension.swift | 21 ++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_Misc.swift b/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_Misc.swift index 858e2d17..987f5858 100644 --- a/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_Misc.swift +++ b/Packages/vChewing_CocoaExtension/Sources/CocoaExtension/CocoaExtension_Misc.swift @@ -71,6 +71,18 @@ public extension NSAttributedString { public extension NSString { var localized: String { NSLocalizedString(description, comment: "") } + + @objc func getCharDescriptions(_: Any? = nil) -> [String] { + (self as String).charDescriptions + } + + @objc func getCodePoints(_: Any? = nil) -> [String] { + (self as String).codePoints + } + + @objc func getDescriptionAsCodePoints(_: Any? = nil) -> [String] { + (self as String).describedAsCodePoints + } } // MARK: - NSRange Extension diff --git a/Packages/vChewing_SwiftExtension/Sources/SwiftExtension/SwiftExtension.swift b/Packages/vChewing_SwiftExtension/Sources/SwiftExtension/SwiftExtension.swift index d922df88..b994e9d9 100644 --- a/Packages/vChewing_SwiftExtension/Sources/SwiftExtension/SwiftExtension.swift +++ b/Packages/vChewing_SwiftExtension/Sources/SwiftExtension/SwiftExtension.swift @@ -200,7 +200,7 @@ public extension String { } } -// MARK: - String CharName Extension +// MARK: - String CharName and CodePoint Extension public extension String { var charDescriptions: [String] { @@ -209,6 +209,25 @@ public extension String { return String(format: "U+%02X %@", $0.value, theName) } } + + var codePoints: [String] { + map(\.codePoint) + } + + var describedAsCodePoints: [String] { + map { + "\($0) (\($0.codePoint))" + } + } +} + +// MARK: - Character Codepoint + +public extension Character { + var codePoint: String { + guard let value = unicodeScalars.first?.value else { return "U+NULL" } + return String(format: "U+%02X", value) + } } // MARK: - String Ellipsis Extension