WIP: unsupported emojis

This commit is contained in:
Ryan Zhao 2022-08-18 17:11:08 +10:00
parent 651373234a
commit 43b6f0b649
3 changed files with 29 additions and 13 deletions

View File

@ -301,7 +301,7 @@ extension EmojiGenerator {
fileHandle.writeLine("} else {") fileHandle.writeLine("} else {")
fileHandle.indent { fileHandle.indent {
fileHandle.writeLine("return nil") fileHandle.writeLine("self.init(unsupportedValue: rawValue)")
} }
fileHandle.writeLine("}") fileHandle.writeLine("}")
} }

View File

@ -7263,7 +7263,7 @@ extension EmojiWithSkinTones {
} else if rawValue == "🏴󠁧󠁢󠁷󠁬󠁳󠁿" { } else if rawValue == "🏴󠁧󠁢󠁷󠁬󠁳󠁿" {
self.init(baseEmoji: .flagWales, skinTones: nil) self.init(baseEmoji: .flagWales, skinTones: nil)
} else { } else {
return nil self.init(unsupportedValue: rawValue)
} }
} }
} }

View File

@ -6,8 +6,9 @@ import DifferenceKit
import SessionMessagingKit import SessionMessagingKit
public struct EmojiWithSkinTones: Hashable, Equatable, ContentEquatable, ContentIdentifiable { public struct EmojiWithSkinTones: Hashable, Equatable, ContentEquatable, ContentIdentifiable {
let baseEmoji: Emoji let baseEmoji: Emoji?
let skinTones: [Emoji.SkinTone]? let skinTones: [Emoji.SkinTone]?
let unsupportedValue: String?
init(baseEmoji: Emoji, skinTones: [Emoji.SkinTone]? = nil) { init(baseEmoji: Emoji, skinTones: [Emoji.SkinTone]? = nil) {
self.baseEmoji = baseEmoji self.baseEmoji = baseEmoji
@ -20,23 +21,34 @@ public struct EmojiWithSkinTones: Hashable, Equatable, ContentEquatable, Content
guard !result.contains(skinTone) else { return } guard !result.contains(skinTone) else { return }
result.append(skinTone) result.append(skinTone)
} }
self.unsupportedValue = nil
}
init(unsupportedValue: String) {
self.unsupportedValue = unsupportedValue
self.baseEmoji = nil
self.skinTones = nil
} }
var rawValue: String { var rawValue: String {
if let skinTones = skinTones { if let baseEmoji = baseEmoji {
return baseEmoji.emojiPerSkinTonePermutation?[skinTones] ?? baseEmoji.rawValue if let skinTones = skinTones {
} else { return baseEmoji.emojiPerSkinTonePermutation?[skinTones] ?? baseEmoji.rawValue
return baseEmoji.rawValue } else {
return baseEmoji.rawValue
}
} }
if let unsupportedValue = unsupportedValue {
return unsupportedValue
}
return "" // Should not happen
} }
var normalized: EmojiWithSkinTones { var normalized: EmojiWithSkinTones {
switch (baseEmoji, skinTones) { if let baseEmoji = baseEmoji, baseEmoji.normalized != baseEmoji {
case (let base, nil) where base.normalized != base: return EmojiWithSkinTones(baseEmoji: baseEmoji.normalized)
return EmojiWithSkinTones(baseEmoji: base.normalized)
default:
return self
} }
return self
} }
var isNormalized: Bool { self == normalized } var isNormalized: Bool { self == normalized }
@ -104,7 +116,11 @@ extension Emoji {
init?(_ string: String) { init?(_ string: String) {
guard let emojiWithSkinTonePermutation = EmojiWithSkinTones(rawValue: string) else { return nil } guard let emojiWithSkinTonePermutation = EmojiWithSkinTones(rawValue: string) else { return nil }
self = emojiWithSkinTonePermutation.baseEmoji if let baseEmoji = emojiWithSkinTonePermutation.baseEmoji {
self = baseEmoji
} else {
return nil
}
} }
} }