From 22a0182e01738bd8a305b56194817db9f74c1623 Mon Sep 17 00:00:00 2001 From: Niklas Amslgruber Date: Wed, 14 Jun 2023 17:46:27 +0200 Subject: [PATCH] Add support for SPM --- Package.swift | 12 ++-- Sources/EmojiKit/DataProcessor.swift | 1 + Sources/EmojiKit/EmojiCategory.swift | 32 ---------- Sources/EmojiKitLibrary/EmojiCategory.swift | 62 +++++++++++++++++++ .../EmojiManager.swift | 19 +++--- 5 files changed, 81 insertions(+), 45 deletions(-) delete mode 100644 Sources/EmojiKit/EmojiCategory.swift create mode 100644 Sources/EmojiKitLibrary/EmojiCategory.swift rename Sources/{EmojiKit => EmojiKitLibrary}/EmojiManager.swift (64%) diff --git a/Package.swift b/Package.swift index ebbdc13..102b537 100644 --- a/Package.swift +++ b/Package.swift @@ -11,10 +11,10 @@ let package = Package( name: "EmojiKit", targets: ["EmojiKit"] ), -// .library( -// name: "EmojiKitLibrary", -// targets: ["EmojiKitLibrary"] -// ) + .library( + name: "EmojiKitLibrary", + targets: ["EmojiKitLibrary"] + ) ], dependencies: [ .package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.0.0"), @@ -26,8 +26,8 @@ let package = Package( dependencies: [ .product(name: "ArgumentParser", package: "swift-argument-parser"), .product(name: "SwiftSoup", package: "SwiftSoup"), -// .target(name: "EmojiKitLibrary") + .target(name: "EmojiKitLibrary") ]), -// .target(name: "EmojiKitLibrary") + .target(name: "EmojiKitLibrary") ] ) diff --git a/Sources/EmojiKit/DataProcessor.swift b/Sources/EmojiKit/DataProcessor.swift index 5c58cfb..b7d0a9e 100644 --- a/Sources/EmojiKit/DataProcessor.swift +++ b/Sources/EmojiKit/DataProcessor.swift @@ -6,6 +6,7 @@ // import Foundation +import EmojiKitLibrary public enum DataProcessor { diff --git a/Sources/EmojiKit/EmojiCategory.swift b/Sources/EmojiKit/EmojiCategory.swift deleted file mode 100644 index 1b203ad..0000000 --- a/Sources/EmojiKit/EmojiCategory.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// EmojiCategory.swift -// -// -// Created by Niklas Amslgruber on 10.06.23. -// - -import Foundation - -public class EmojiCategory: Codable { - - public enum Name: String, CaseIterable, Codable { - case flags = "Flags" - case activities = "Activities" - case components = "Component" - case objects = "Objects" - case travelAndPlaces = "Travel & Places" - case symbols = "Symbols" - case peopleAndBody = "People & Body" - case animalsAndNature = "Animals & Nature" - case foodAndDrink = "Food & Drink" - case smileysAndEmotions = "Smileys & Emotion" - } - - public let name: Name - public let values: [String] - - public init(name: Name, values: [String]) { - self.name = name - self.values = values - } -} diff --git a/Sources/EmojiKitLibrary/EmojiCategory.swift b/Sources/EmojiKitLibrary/EmojiCategory.swift new file mode 100644 index 0000000..e31c0cb --- /dev/null +++ b/Sources/EmojiKitLibrary/EmojiCategory.swift @@ -0,0 +1,62 @@ +// +// EmojiCategory.swift +// +// +// Created by Niklas Amslgruber on 10.06.23. +// + +import Foundation + +public class EmojiCategory: Codable { + + public enum Name: String, CaseIterable, Codable { + case flags = "Flags" + case activities = "Activities" + case components = "Component" + case objects = "Objects" + case travelAndPlaces = "Travel & Places" + case symbols = "Symbols" + case peopleAndBody = "People & Body" + case animalsAndNature = "Animals & Nature" + case foodAndDrink = "Food & Drink" + case smileysAndEmotions = "Smileys & Emotion" + + public static var orderedCases: [EmojiCategory.Name] { + return EmojiCategory.Name.allCases.sorted(by: { $0.order < $1.order }) + } + + // Order that Apple uses in their emoji picker + public var order: Int { + switch self { + case .flags: + return 10 + case .activities: + return 5 + case .components: + return 8 + case .objects: + return 7 + case .travelAndPlaces: + return 6 + case .symbols: + return 9 + case .peopleAndBody: + return 2 + case .animalsAndNature: + return 3 + case .foodAndDrink: + return 4 + case .smileysAndEmotions: + return 1 + } + } + } + + public let name: Name + public let values: [String] + + public init(name: Name, values: [String]) { + self.name = name + self.values = values + } +} diff --git a/Sources/EmojiKit/EmojiManager.swift b/Sources/EmojiKitLibrary/EmojiManager.swift similarity index 64% rename from Sources/EmojiKit/EmojiManager.swift rename to Sources/EmojiKitLibrary/EmojiManager.swift index 6ae5534..e813eb7 100644 --- a/Sources/EmojiKit/EmojiManager.swift +++ b/Sources/EmojiKitLibrary/EmojiManager.swift @@ -7,17 +7,17 @@ import Foundation -enum EmojiManager { +public enum EmojiManager { - enum Version: Int { + public enum Version: Int { case v14 = 14 case v15 = 15 - var fileName: String { + public var fileName: String { return "emojis_v\(rawValue)" } - static func getSupportedVersion() -> Version { + public static func getSupportedVersion() -> Version { if #available(iOS 16.4, *) { return .v15 } else { @@ -25,13 +25,18 @@ enum EmojiManager { } } } - - static func getAvailableEmojis(version: Version = .getSupportedVersion()) -> [EmojiCategory] { + + /// Returns all emojis for a specific version + /// - Parameters: + /// - version: The specific version you want to fetch (default: the highest supported version for a device's iOS version) + /// - showAllVariations: Some emojis inlcude skin type variations which increases the number of emojis drastically. (default: only the yellow neutral emojis are returned) + /// - Returns: Array of categories with all emojis that are assigned to each category + public static func getAvailableEmojis(version: Version = .getSupportedVersion(), showAllVariations: Bool = false) -> [EmojiCategory] { if let url = Bundle.main.url(forResource: version.fileName, withExtension: "json"), let content = try? Data(contentsOf: url), let result = try? JSONDecoder().decode([EmojiCategory].self, from: content) { var filteredEmojis: [EmojiCategory] = [] for category in result { let supportedEmojis = category.values.filter({ - isNeutralEmoji(for: $0) + showAllVariations ? true : isNeutralEmoji(for: $0) }) filteredEmojis.append(EmojiCategory(name: category.name, values: supportedEmojis)) }