Chatterino
Emojis.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "util/ConcurrentMap.hpp"
4 
5 #include <QMap>
6 #include <QRegularExpression>
7 #include <boost/variant.hpp>
8 #include <map>
9 #include <set>
10 #include <vector>
11 
12 namespace chatterino {
13 
14 struct Emote;
15 using EmotePtr = std::shared_ptr<const Emote>;
16 
17 struct EmojiData {
18  // actual byte-representation of the emoji (i.e. \154075\156150 which is
19  // :male:)
20  QString value;
21 
22  // i.e. 204e-50a2
23  QString unifiedCode;
25 
26  // i.e. thinking
27  std::vector<QString> shortCodes;
28 
29  std::set<QString> capabilities;
30 
31  std::vector<EmojiData> variations;
32 
34 };
35 
37 
38 class Emojis
39 {
40 public:
41  void initialize();
42  void load();
43  std::vector<boost::variant<EmotePtr, QString>> parse(const QString &text);
44 
46  std::vector<QString> shortCodes;
47  QString replaceShortCodes(const QString &text);
48 
49 private:
50  void loadEmojis();
51  void sortEmojis();
52  void loadEmojiSet();
53 
55  QRegularExpression findShortCodesRegex_{":([-+\\w]+):"};
56 
57  // shortCodeToEmoji maps strings like "sunglasses" to its emoji
58  QMap<QString, std::shared_ptr<EmojiData>> emojiShortCodeToEmoji_;
59 
60  // Maps the first character of the emoji unicode string to a vector of
61  // possible emojis
62  QMap<QChar, QVector<std::shared_ptr<EmojiData>>> emojiFirstByte_;
63 };
64 
65 } // namespace chatterino
Definition: Emojis.hpp:17
std::set< QString > capabilities
Definition: Emojis.hpp:29
std::vector< QString > shortCodes
Definition: Emojis.hpp:27
QString nonQualifiedCode
Definition: Emojis.hpp:24
std::vector< EmojiData > variations
Definition: Emojis.hpp:31
EmotePtr emote
Definition: Emojis.hpp:33
Definition: Application.cpp:48
std::shared_ptr< const Emote > EmotePtr
Definition: Emote.hpp:38
Definition: Emojis.hpp:38
std::vector< QString > shortCodes
Definition: Emojis.hpp:46
QString unifiedCode
Definition: Emojis.hpp:23
EmojiMap emojis
Definition: Emojis.hpp:45
void load(const std::shared_ptr< NetworkData > &data)
Definition: NetworkPrivate.cpp:391
QString value
Definition: Emojis.hpp:20