mirror-chatterino2/src/providers/emoji/Emojis.hpp

65 lines
1.5 KiB
C++
Raw Normal View History

2018-06-05 18:53:49 +02:00
#pragma once
2018-06-26 17:20:03 +02:00
#include "common/Emotemap.hpp"
#include "common/SimpleSignalVector.hpp"
2018-08-02 14:23:27 +02:00
#include "messages/Emote.hpp"
2018-06-26 14:09:39 +02:00
#include "util/ConcurrentMap.hpp"
2018-06-05 18:53:49 +02:00
#include <QMap>
#include <QRegularExpression>
2018-08-02 14:23:27 +02:00
#include <boost/variant.hpp>
2018-06-05 18:53:49 +02:00
#include <map>
2018-08-02 14:23:27 +02:00
#include <set>
#include <vector>
2018-06-05 18:53:49 +02:00
namespace chatterino {
struct EmojiData {
// actual byte-representation of the emoji (i.e. \154075\156150 which is :male:)
QString value;
// i.e. 204e-50a2
QString unifiedCode;
QString nonQualifiedCode;
2018-06-05 18:53:49 +02:00
// i.e. thinking
std::vector<QString> shortCodes;
2018-06-05 18:53:49 +02:00
std::set<QString> capabilities;
std::vector<EmojiData> variations;
2018-08-02 14:23:27 +02:00
EmotePtr emote;
2018-06-05 18:53:49 +02:00
};
2018-06-26 17:06:17 +02:00
using EmojiMap = ConcurrentMap<QString, std::shared_ptr<EmojiData>>;
2018-06-05 18:53:49 +02:00
class Emojis
{
public:
void initialize();
2018-07-06 19:23:47 +02:00
void load();
2018-08-02 14:23:27 +02:00
std::vector<boost::variant<EmotePtr, QString>> parse(const QString &text);
2018-06-05 18:53:49 +02:00
EmojiMap emojis;
std::vector<QString> shortCodes;
2018-07-06 19:23:47 +02:00
QString replaceShortCodes(const QString &text);
private:
void loadEmojis();
void loadEmojiOne2Capabilities();
void sortEmojis();
void loadEmojiSet();
2018-06-05 18:53:49 +02:00
/// Emojis
2018-07-06 19:23:47 +02:00
QRegularExpression findShortCodesRegex_{":([-+\\w]+):"};
2018-06-05 18:53:49 +02:00
// shortCodeToEmoji maps strings like "sunglasses" to its emoji
2018-07-06 19:23:47 +02:00
QMap<QString, std::shared_ptr<EmojiData>> emojiShortCodeToEmoji_;
2018-06-05 18:53:49 +02:00
// Maps the first character of the emoji unicode string to a vector of possible emojis
2018-07-06 19:23:47 +02:00
QMap<QChar, QVector<std::shared_ptr<EmojiData>>> emojiFirstByte_;
2018-06-05 18:53:49 +02:00
};
} // namespace chatterino