feat: use azooKey_emoji_dictionary_storage (#146)

* feat: use azooKey_emoji_dictionary_storage

* feat: add test

* fix: test case

* feat: fix build error

* fix: build error

* fix: fix android build

* fix: confirm libicu-dev is installed

* test: add non-empty test case

* fix: continue on empty line
This commit is contained in:
Miwa
2024-12-01 00:59:27 +09:00
committed by GitHub
parent 254a8ca7db
commit fe3fe96e9b
6 changed files with 65 additions and 3 deletions

View File

@@ -19,13 +19,21 @@ public struct TextReplacer: Sendable {
private var emojiGroups: [EmojiGroup] = []
private var nonBaseEmojis: Set<String> = []
///
var isEmpty: Bool {
emojiSearchDict.isEmpty && emojiGroups.isEmpty && nonBaseEmojis.isEmpty
}
public init(emojiDataProvider: () -> URL) {
var emojiSearchDict: [String: [String]] = [:]
var emojiGroups: [EmojiGroup] = []
do {
let string = try String(contentsOf: emojiDataProvider(), encoding: .utf8)
let lines = string.split(separator: "\n")
let lines = string.components(separatedBy: .newlines)
for line in lines {
if line.isEmpty {
continue
}
let splited = line.split(separator: "\t", omittingEmptySubsequences: false)
guard splited.count == 3 else {
debug("error", line)
@@ -84,7 +92,7 @@ public struct TextReplacer: Sendable {
}
}
public struct SearchResultItem: Sendable {
public struct SearchResultItem: Sendable, Equatable, Hashable {
public var query: String
public var text: String
public var inputable: Bool {

View File

@@ -18,7 +18,7 @@ public extension ConvertRequestOptions {
memoryDirectoryURL: URL,
sharedContainerURL: URL,
zenzaiMode: ZenzaiMode = .off,
textReplacer: TextReplacer = TextReplacer(),
textReplacer: TextReplacer = .withDefaultEmojiDictionary(),
metadata: ConvertRequestOptions.Metadata?
) -> Self {
#if os(iOS) || os(watchOS) || os(tvOS) || os(visionOS)
@@ -50,3 +50,35 @@ public extension ConvertRequestOptions {
)
}
}
public extension TextReplacer {
static func withDefaultEmojiDictionary() -> Self {
self.init {
let directoryName = "EmojiDictionary"
#if os(iOS) || os(watchOS) || os(tvOS) || os(visionOS)
let directory = Bundle.module.bundleURL.appendingPathComponent(directoryName, isDirectory: true)
return if #available(iOS 17.4, *) {
directory.appendingPathComponent("emoji_all_E15.1.txt", isDirectory: false)
} else if #available(iOS 16.4, *) {
directory.appendingPathComponent("emoji_all_E15.0.txt", isDirectory: false)
} else if #available(iOS 15.4, *) {
directory.appendingPathComponent("emoji_all_E14.0.txt", isDirectory: false)
} else {
directory.appendingPathComponent("emoji_all_E13.1.txt", isDirectory: false)
}
#elseif os(macOS)
let directory = Bundle.module.resourceURL!.appendingPathComponent(directoryName, isDirectory: true)
return if #available(macOS 14.4, *) {
directory.appendingPathComponent("emoji_all_E15.1.txt", isDirectory: false)
} else {
directory.appendingPathComponent("emoji_all_E15.0.txt", isDirectory: false)
}
#else
return Bundle.module.resourceURL!
.appendingPathComponent(directoryName, isDirectory: true)
.appendingPathComponent("emoji_all_E15.1.txt", isDirectory: false)
#endif
}
}
}