refactor(emojis): use std::variant and QStringView (#6714)

This commit is contained in:
Nerixyz
2026-01-05 21:06:42 +01:00
committed by GitHub
parent 327dc0ebcb
commit b7b592098f
8 changed files with 52 additions and 52 deletions
@@ -143,9 +143,11 @@ bool appendWhisperMessageWordsLocally(const QStringList &words)
b.emplace<EmoteElement>(emote,
MessageElementFlag::EmojiAll);
}
void operator()(const QString &string,
void operator()(QStringView stringView,
MessageBuilder &b) const
{
QString string =
stringView.toString(); // FIXME: use string view
auto link = linkparser::parse(string);
if (link)
{
@@ -158,7 +160,7 @@ bool appendWhisperMessageWordsLocally(const QStringList &words)
}
}
} visitor;
boost::apply_visitor(
std::visit(
[&b](auto &&arg) {
visitor(arg, b);
},
+18 -20
View File
@@ -2363,16 +2363,15 @@ void MessageBuilder::addWords(
for (auto variant :
getApp()->getEmotes()->getEmojis()->parse(preText))
{
boost::apply_visitor(variant::Overloaded{
[&](const EmotePtr &emote) {
this->addEmoji(emote);
},
[&](QString text) {
this->addTextOrEmote(
state, std::move(text));
},
},
variant);
std::visit(variant::Overloaded{
[&](const EmotePtr &emote) {
this->addEmoji(emote);
},
[&](QStringView text) {
this->addTextOrEmote(state, text.toString());
},
},
variant);
}
cursor += preText.size();
@@ -2388,16 +2387,15 @@ void MessageBuilder::addWords(
// split words
for (auto variant : getApp()->getEmotes()->getEmojis()->parse(word))
{
boost::apply_visitor(variant::Overloaded{
[&](const EmotePtr &emote) {
this->addEmoji(emote);
},
[&](QString text) {
this->addTextOrEmote(state,
std::move(text));
},
},
variant);
std::visit(variant::Overloaded{
[&](const EmotePtr &emote) {
this->addEmoji(emote);
},
[&](QStringView text) {
this->addTextOrEmote(state, text.toString());
},
},
variant);
}
cursor += word.size() + 1;
+4 -4
View File
@@ -929,9 +929,9 @@ void SingleLineTextElement::addToContainer(MessageLayoutContainer &container,
for (const auto &parsedWord :
app->getEmotes()->getEmojis()->parse(word))
{
if (parsedWord.type() == typeid(QString))
if (std::holds_alternative<QStringView>(parsedWord))
{
currentText += boost::get<QString>(parsedWord);
currentText += std::get<QStringView>(parsedWord);
QString prev =
currentText; // only increments the ref-count
currentText =
@@ -943,9 +943,9 @@ void SingleLineTextElement::addToContainer(MessageLayoutContainer &container,
break;
}
}
else if (parsedWord.type() == typeid(EmotePtr))
else if (std::holds_alternative<EmotePtr>(parsedWord))
{
auto emote = boost::get<EmotePtr>(parsedWord);
auto emote = std::get<EmotePtr>(parsedWord);
auto image =
emote->images.getImageOrLoaded(container.getScale());
if (!image->isEmpty())
+5 -6
View File
@@ -312,10 +312,10 @@ void Emojis::loadEmojiSet()
});
}
std::vector<boost::variant<EmotePtr, QString>> Emojis::parse(
const QString &text) const
std::vector<std::variant<EmotePtr, QStringView>> Emojis::parse(
QStringView text) const
{
auto result = std::vector<boost::variant<EmotePtr, QString>>();
auto result = std::vector<std::variant<EmotePtr, QStringView>>();
QString::size_type lastParsedEmojiEndIndex = 0;
for (qsizetype i = 0; i < text.length(); ++i)
@@ -351,7 +351,7 @@ std::vector<boost::variant<EmotePtr, QString>> Emojis::parse(
{
// look in emoji->value
bool match = QStringView{emoji->value}.mid(1) ==
QStringView{text}.mid(i + 1, emojiExtraCharacters);
text.mid(i + 1, emojiExtraCharacters);
if (match)
{
@@ -367,8 +367,7 @@ std::vector<boost::variant<EmotePtr, QString>> Emojis::parse(
// This checking here relies on the fact that the nonQualified string
// always starts with the same byte as value (the unified string)
bool match = QStringView{emoji->nonQualified}.mid(1) ==
QStringView{text}.mid(
i + 1, emojiNonQualifiedExtraCharacters);
text.mid(i + 1, emojiNonQualifiedExtraCharacters);
if (match)
{
+5 -5
View File
@@ -3,12 +3,12 @@
#include "common/FlagsEnum.hpp"
#include "providers/emoji/EmojiStyle.hpp"
#include <boost/variant.hpp>
#include <QMap>
#include <QRegularExpression>
#include <QVector>
#include <memory>
#include <variant>
#include <vector>
namespace chatterino {
@@ -50,8 +50,8 @@ class IEmojis
public:
virtual ~IEmojis() = default;
virtual std::vector<boost::variant<EmotePtr, QString>> parse(
const QString &text) const = 0;
virtual std::vector<std::variant<EmotePtr, QStringView>> parse(
QStringView text) const = 0;
virtual const std::vector<EmojiPtr> &getEmojis() const = 0;
virtual const std::vector<QString> &getShortCodes() const = 0;
virtual QString replaceShortCodes(const QString &text) const = 0;
@@ -61,8 +61,8 @@ class Emojis : public IEmojis
{
public:
void load();
std::vector<boost::variant<EmotePtr, QString>> parse(
const QString &text) const override;
std::vector<std::variant<EmotePtr, QStringView>> parse(
QStringView text) const override;
std::vector<QString> shortCodes;
QString replaceShortCodes(const QString &text) const override;