diff --git a/src/providers/emoji/emojis.cpp b/src/providers/emoji/emojis.cpp index 33c8aa93..0838722f 100644 --- a/src/providers/emoji/emojis.cpp +++ b/src/providers/emoji/emojis.cpp @@ -84,17 +84,20 @@ void Emojis::load() this->loadEmojis(); this->loadEmojiOne2Capabilities(); + + this->sortEmojis(); + + this->loadEmojiSet(); } void Emojis::loadEmojis() { - static std::map toneNames{ - {"1F3FB", "tone1"}, // - {"1F3FC", "tone2"}, // - {"1F3FD", "tone3"}, // - {"1F3FE", "tone4"}, // - {"1F3FF", "tone5"}, // - }; + std::map toneNames; + toneNames["1F3FB"] = "tone1"; + toneNames["1F3FC"] = "tone2"; + toneNames["1F3FD"] = "tone3"; + toneNames["1F3FE"] = "tone4"; + toneNames["1F3FF"] = "tone5"; QFile file(":/emoji.json"); file.open(QFile::ReadOnly); @@ -120,7 +123,7 @@ void Emojis::loadEmojis() this->emojis.insert(emojiData->unifiedCode, emojiData); - if (unparsedEmoji.HasMember("skin_variations") && false) { + if (unparsedEmoji.HasMember("skin_variations")) { for (const auto &skinVariation : unparsedEmoji["skin_variations"].GetObject()) { std::string tone = skinVariation.name.GetString(); const auto &variation = skinVariation.value; @@ -146,7 +149,43 @@ void Emojis::loadEmojis() } } } +} +void Emojis::loadEmojiOne2Capabilities() +{ + QFile file(":/emojidata.txt"); + file.open(QFile::ReadOnly); + QTextStream in(&file); + + uint unicodeBytes[4]; + + while (!in.atEnd()) { + // Line example: sunglasses 1f60e + QString line = in.readLine(); + + if (line.at(0) == '#') { + // Ignore lines starting with # (comments) + continue; + } + + QStringList parts = line.split(' '); + if (parts.length() < 2) { + continue; + } + + QString shortCode = parts[0]; + + auto emojiIt = this->emojiShortCodeToEmoji.find(shortCode); + if (emojiIt != this->emojiShortCodeToEmoji.end()) { + std::shared_ptr emoji = *emojiIt; + emoji->capabilities.insert("EmojiOne 2"); + continue; + } + } +} + +void Emojis::sortEmojis() +{ for (auto &p : this->emojiFirstByte) { std::stable_sort(p.begin(), p.end(), [](const auto &lhs, const auto &rhs) { return lhs->value.length() > rhs->value.length(); @@ -156,10 +195,14 @@ void Emojis::loadEmojis() auto &p = this->shortCodes; std::stable_sort(p.begin(), p.end(), [](const auto &lhs, const auto &rhs) { return lhs < rhs; }); +} +void Emojis::loadEmojiSet() +{ auto app = getApp(); app->settings->emojiSet.connect([=](const auto &emojiSet, auto) { + debug::Log("Using emoji set {}", emojiSet); this->emojis.each([=](const auto &name, std::shared_ptr &emoji) { QString emojiSetToUse = emojiSet; // clang-format off @@ -197,39 +240,6 @@ void Emojis::loadEmojis() }); } -void Emojis::loadEmojiOne2Capabilities() -{ - QFile file(":/emojidata.txt"); - file.open(QFile::ReadOnly); - QTextStream in(&file); - - uint unicodeBytes[4]; - - while (!in.atEnd()) { - // Line example: sunglasses 1f60e - QString line = in.readLine(); - - if (line.at(0) == '#') { - // Ignore lines starting with # (comments) - continue; - } - - QStringList parts = line.split(' '); - if (parts.length() < 2) { - continue; - } - - QString shortCode = parts[0]; - - auto emojiIt = this->emojiShortCodeToEmoji.find(shortCode); - if (emojiIt != this->emojiShortCodeToEmoji.end()) { - std::shared_ptr emoji = *emojiIt; - emoji->capabilities.insert("EmojiOne 2"); - continue; - } - } -} - void Emojis::parse(std::vector> &parsedWords, const QString &text) { diff --git a/src/providers/emoji/emojis.hpp b/src/providers/emoji/emojis.hpp index 2eaba76a..fdfd626e 100644 --- a/src/providers/emoji/emojis.hpp +++ b/src/providers/emoji/emojis.hpp @@ -47,6 +47,8 @@ public: private: void loadEmojis(); void loadEmojiOne2Capabilities(); + void sortEmojis(); + void loadEmojiSet(); public: QString replaceShortCodes(const QString &text);