Moved splitting of tags to separated method.

This commit is contained in:
23rd 2021-12-19 12:59:05 +03:00
parent eaea768ca0
commit c06f0435c4
3 changed files with 16 additions and 9 deletions

View file

@ -22,6 +22,8 @@
namespace TextUtilities { namespace TextUtilities {
namespace { namespace {
constexpr auto kTagSeparator = '|';
using namespace Ui::Text; using namespace Ui::Text;
QString ExpressionMailNameAtEnd() { QString ExpressionMailNameAtEnd() {
@ -2041,17 +2043,21 @@ QString JoinTag(const QList<QStringView> &list) {
result.append(list.front()); result.append(list.front());
for (auto i = 1, count = int(list.size()); i != count; ++i) { for (auto i = 1, count = int(list.size()); i != count; ++i) {
if (!IsSeparateTag(list[i])) { if (!IsSeparateTag(list[i])) {
result.append('|').append(list[i]); result.append(kTagSeparator).append(list[i]);
} }
} }
return result; return result;
} }
QList<QStringView> SplitTags(const QString &tag) {
return QStringView(tag).split(kTagSeparator);
}
QString TagWithRemoved(const QString &tag, const QString &removed) { QString TagWithRemoved(const QString &tag, const QString &removed) {
if (tag == removed) { if (tag == removed) {
return QString(); return QString();
} }
auto list = QStringView(tag).split('|'); auto list = SplitTags(tag);
list.erase(ranges::remove(list, QStringView(removed)), list.end()); list.erase(ranges::remove(list, QStringView(removed)), list.end());
return JoinTag(list); return JoinTag(list);
} }
@ -2060,7 +2066,7 @@ QString TagWithAdded(const QString &tag, const QString &added) {
if (tag.isEmpty() || tag == added) { if (tag.isEmpty() || tag == added) {
return added; return added;
} }
auto list = QStringView(tag).split('|'); auto list = SplitTags(tag);
const auto ref = QStringView(added); const auto ref = QStringView(added);
if (list.contains(ref)) { if (list.contains(ref)) {
return tag; return tag;
@ -2173,7 +2179,7 @@ EntitiesInText ConvertTextTagsToEntities(const TextWithTags::Tags &tags) {
}; };
const auto stateForTag = [&](const QString &tag) { const auto stateForTag = [&](const QString &tag) {
auto result = State(); auto result = State();
const auto list = QStringView(tag).split('|'); const auto list = SplitTags(tag);
for (const auto &single : list) { for (const auto &single : list) {
if (single == Ui::InputField::kTagBold) { if (single == Ui::InputField::kTagBold) {
result.set(EntityType::Bold); result.set(EntityType::Bold);

View file

@ -363,6 +363,7 @@ inline const auto kMentionTagStart = qstr("mention://user.");
[[nodiscard]] bool IsMentionLink(QStringView link); [[nodiscard]] bool IsMentionLink(QStringView link);
[[nodiscard]] bool IsSeparateTag(QStringView tag); [[nodiscard]] bool IsSeparateTag(QStringView tag);
[[nodiscard]] QString JoinTag(const QList<QStringView> &list); [[nodiscard]] QString JoinTag(const QList<QStringView> &list);
[[nodiscard]] QList<QStringView> SplitTags(const QString &tag);
[[nodiscard]] QString TagWithRemoved( [[nodiscard]] QString TagWithRemoved(
const QString &tag, const QString &tag,
const QString &removed); const QString &removed);

View file

@ -125,7 +125,7 @@ bool IsNewline(QChar ch) {
return QString(); return QString();
} }
auto found = false; 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)) const auto normalized = (single == QStringView(kTagPre))
? QStringView(kTagCode) ? QStringView(kTagCode)
: single; : single;
@ -718,7 +718,7 @@ QTextCharFormat PrepareTagFormat(
font = font->monospace(); font = font->monospace();
} }
}; };
for (const auto &tag : QStringView(tag).split('|')) { for (const auto &tag : TextUtilities::SplitTags(tag)) {
applyOne(tag); applyOne(tag);
} }
result.setFont(font); result.setFont(font);
@ -2903,8 +2903,8 @@ auto InputField::selectionEditLinkData(EditLinkSelection selection) const
}; };
const auto stateTagHasLink = [&](const State &state) { const auto stateTagHasLink = [&](const State &state) {
const auto tag = stateTag(state); const auto tag = stateTag(state);
return (tag == link) || QStringView(tag).split('|').contains( return (tag == link)
QStringView(link)); || TextUtilities::SplitTags(tag).contains(QStringView(link));
}; };
const auto stateStart = [&](const State &state) { const auto stateStart = [&](const State &state) {
return state.i.fragment().position(); return state.i.fragment().position();
@ -3112,7 +3112,7 @@ void InputField::commitInstantReplacement(
const auto currentTag = cursor.charFormat().property( const auto currentTag = cursor.charFormat().property(
kTagProperty kTagProperty
).toString(); ).toString();
const auto currentTags = QStringView(currentTag).split('|'); const auto currentTags = TextUtilities::SplitTags(currentTag);
if (currentTags.contains(QStringView(kTagPre)) if (currentTags.contains(QStringView(kTagPre))
|| currentTags.contains(QStringView(kTagCode))) { || currentTags.contains(QStringView(kTagCode))) {
return; return;