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