Moved splitting of tags to separated method.
This commit is contained in:
parent
eaea768ca0
commit
c06f0435c4
3 changed files with 16 additions and 9 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue