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 {
constexpr auto kTagSeparator = '|';
using namespace Ui::Text;
QString ExpressionMailNameAtEnd() {
@ -2041,17 +2043,21 @@ QString JoinTag(const QList<QStringView> &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<QStringView> 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);

View file

@ -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<QStringView> &list);
[[nodiscard]] QList<QStringView> SplitTags(const QString &tag);
[[nodiscard]] QString TagWithRemoved(
const QString &tag,
const QString &removed);

View file

@ -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;