From c06f0435c40dd6c987413337f108e468cfe8bfc9 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sun, 19 Dec 2021 12:59:05 +0300 Subject: [PATCH] Moved splitting of tags to separated method. --- ui/text/text_entity.cpp | 14 ++++++++++---- ui/text/text_entity.h | 1 + ui/widgets/input_fields.cpp | 10 +++++----- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/ui/text/text_entity.cpp b/ui/text/text_entity.cpp index 614d967..00cfcf3 100644 --- a/ui/text/text_entity.cpp +++ b/ui/text/text_entity.cpp @@ -22,6 +22,8 @@ namespace TextUtilities { namespace { +constexpr auto kTagSeparator = '|'; + using namespace Ui::Text; QString ExpressionMailNameAtEnd() { @@ -2041,17 +2043,21 @@ QString JoinTag(const QList &list) { result.append(list.front()); for (auto i = 1, count = int(list.size()); i != count; ++i) { if (!IsSeparateTag(list[i])) { - result.append('|').append(list[i]); + result.append(kTagSeparator).append(list[i]); } } return result; } +QList SplitTags(const QString &tag) { + return QStringView(tag).split(kTagSeparator); +} + QString TagWithRemoved(const QString &tag, const QString &removed) { if (tag == removed) { return QString(); } - auto list = QStringView(tag).split('|'); + auto list = SplitTags(tag); list.erase(ranges::remove(list, QStringView(removed)), list.end()); return JoinTag(list); } @@ -2060,7 +2066,7 @@ QString TagWithAdded(const QString &tag, const QString &added) { if (tag.isEmpty() || tag == added) { return added; } - auto list = QStringView(tag).split('|'); + auto list = SplitTags(tag); const auto ref = QStringView(added); if (list.contains(ref)) { return tag; @@ -2173,7 +2179,7 @@ EntitiesInText ConvertTextTagsToEntities(const TextWithTags::Tags &tags) { }; const auto stateForTag = [&](const QString &tag) { auto result = State(); - const auto list = QStringView(tag).split('|'); + const auto list = SplitTags(tag); for (const auto &single : list) { if (single == Ui::InputField::kTagBold) { result.set(EntityType::Bold); diff --git a/ui/text/text_entity.h b/ui/text/text_entity.h index cee3a7d..db5b598 100644 --- a/ui/text/text_entity.h +++ b/ui/text/text_entity.h @@ -363,6 +363,7 @@ inline const auto kMentionTagStart = qstr("mention://user."); [[nodiscard]] bool IsMentionLink(QStringView link); [[nodiscard]] bool IsSeparateTag(QStringView tag); [[nodiscard]] QString JoinTag(const QList &list); +[[nodiscard]] QList SplitTags(const QString &tag); [[nodiscard]] QString TagWithRemoved( const QString &tag, const QString &removed); diff --git a/ui/widgets/input_fields.cpp b/ui/widgets/input_fields.cpp index 5c23eaf..98cb7f1 100644 --- a/ui/widgets/input_fields.cpp +++ b/ui/widgets/input_fields.cpp @@ -125,7 +125,7 @@ bool IsNewline(QChar ch) { return QString(); } auto found = false; - for (const auto &single : QStringView(existing.id).split('|')) { + for (const auto &single : TextUtilities::SplitTags(existing.id)) { const auto normalized = (single == QStringView(kTagPre)) ? QStringView(kTagCode) : single; @@ -718,7 +718,7 @@ QTextCharFormat PrepareTagFormat( font = font->monospace(); } }; - for (const auto &tag : QStringView(tag).split('|')) { + for (const auto &tag : TextUtilities::SplitTags(tag)) { applyOne(tag); } result.setFont(font); @@ -2903,8 +2903,8 @@ auto InputField::selectionEditLinkData(EditLinkSelection selection) const }; const auto stateTagHasLink = [&](const State &state) { const auto tag = stateTag(state); - return (tag == link) || QStringView(tag).split('|').contains( - QStringView(link)); + return (tag == link) + || TextUtilities::SplitTags(tag).contains(QStringView(link)); }; const auto stateStart = [&](const State &state) { return state.i.fragment().position(); @@ -3112,7 +3112,7 @@ void InputField::commitInstantReplacement( const auto currentTag = cursor.charFormat().property( kTagProperty ).toString(); - const auto currentTags = QStringView(currentTag).split('|'); + const auto currentTags = TextUtilities::SplitTags(currentTag); if (currentTags.contains(QStringView(kTagPre)) || currentTags.contains(QStringView(kTagCode))) { return;