Use StringViewMid adapter

This commit is contained in:
Ilya Fedin 2021-10-20 06:18:36 +04:00 committed by John Preston
parent 64e40913df
commit ee36b1f451
7 changed files with 34 additions and 26 deletions

View file

@ -10,6 +10,7 @@
#include "ui/text/text_entity.h" #include "ui/text/text_entity.h"
#include "ui/integration.h" #include "ui/integration.h"
#include "base/qthelp_url.h" #include "base/qthelp_url.h"
#include "base/qt_adapters.h"
#include <QtCore/QUrl> #include <QtCore/QUrl>
#include <QtCore/QRegularExpression> #include <QtCore/QRegularExpression>
@ -104,7 +105,7 @@ QString UrlClickHandler::ShowEncoded(const QString &url) {
if (const auto u = QUrl(domain); u.isValid()) { if (const auto u = QUrl(domain); u.isValid()) {
return QString( return QString(
).append(QString::fromUtf8(u.toEncoded()) ).append(QString::fromUtf8(u.toEncoded())
).append(QStringView(url).mid(match1.capturedEnd(2))); ).append(base::StringViewMid(url, match1.capturedEnd(2)));
} }
} }
return url; return url;

View file

@ -8,6 +8,7 @@
#include "base/basic_types.h" #include "base/basic_types.h"
#include "base/binary_guard.h" #include "base/binary_guard.h"
#include "base/qt_adapters.h"
#include "emoji.h" #include "emoji.h"
#include <QtGui/QPainter> #include <QtGui/QPainter>
@ -118,7 +119,7 @@ private:
[[nodiscard]] inline EmojiPtr FromUrl(const QString &url) { [[nodiscard]] inline EmojiPtr FromUrl(const QString &url) {
auto start = qstr("emoji://e."); auto start = qstr("emoji://e.");
if (url.startsWith(start)) { if (url.startsWith(start)) {
return internal::ByIndex(QStringView(url).mid(start.size()).toInt()); // skip emoji://e. return internal::ByIndex(base::StringViewMid(url, start.size()).toInt()); // skip emoji://e.
} }
return nullptr; return nullptr;
} }

View file

@ -12,6 +12,7 @@
#include "ui/emoji_config.h" #include "ui/emoji_config.h"
#include "ui/integration.h" #include "ui/integration.h"
#include "base/platform/base_platform_info.h" #include "base/platform/base_platform_info.h"
#include "base/qt_adapters.h"
#include <private/qfontengine_p.h> #include <private/qfontengine_p.h>
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
@ -3164,7 +3165,7 @@ void String::enumerateText(TextSelection selection, AppendPartCallback appendPar
auto rangeFrom = qMax(selection.from, lnkFrom); auto rangeFrom = qMax(selection.from, lnkFrom);
auto rangeTo = qMin(selection.to, blockFrom); auto rangeTo = qMin(selection.to, blockFrom);
if (rangeTo > rangeFrom) { // handle click handler if (rangeTo > rangeFrom) { // handle click handler
const auto r = QStringView(_text).mid(rangeFrom, rangeTo - rangeFrom); const auto r = base::StringViewMid(_text, rangeFrom, rangeTo - rangeFrom);
if (lnkFrom != rangeFrom || blockFrom != rangeTo) { if (lnkFrom != rangeFrom || blockFrom != rangeTo) {
// Ignore links that are partially copied. // Ignore links that are partially copied.
clickHandlerFinishCallback(r, nullptr); clickHandlerFinishCallback(r, nullptr);
@ -3195,7 +3196,7 @@ void String::enumerateText(TextSelection selection, AppendPartCallback appendPar
auto rangeFrom = qMax(selection.from, blockFrom); auto rangeFrom = qMax(selection.from, blockFrom);
auto rangeTo = qMin(selection.to, uint16(blockFrom + countBlockLength(i, e))); auto rangeTo = qMin(selection.to, uint16(blockFrom + countBlockLength(i, e)));
if (rangeTo > rangeFrom) { if (rangeTo > rangeFrom) {
appendPartCallback(QStringView(_text).mid(rangeFrom, rangeTo - rangeFrom)); appendPartCallback(base::StringViewMid(_text, rangeFrom, rangeTo - rangeFrom));
} }
} }
} }

View file

@ -12,6 +12,7 @@
#include "ui/text/text.h" #include "ui/text/text.h"
#include "ui/widgets/input_fields.h" #include "ui/widgets/input_fields.h"
#include "ui/emoji_config.h" #include "ui/emoji_config.h"
#include "base/qt_adapters.h"
#include <QtCore/QStack> #include <QtCore/QStack>
#include <QtCore/QMimeData> #include <QtCore/QMimeData>
@ -1155,13 +1156,13 @@ const QRegularExpression &RegExpWordSplit() {
for (const auto &entity : urls) { for (const auto &entity : urls) {
const auto till = entity.offset() + entity.length(); const auto till = entity.offset() + entity.length();
if (till > offset) { if (till > offset) {
result.append(QStringView(original).mid(offset, till - offset)); result.append(base::StringViewMid(original, offset, till - offset));
} }
result.append(qstr(" (")).append(entity.data()).append(')'); result.append(qstr(" (")).append(entity.data()).append(')');
offset = till; offset = till;
} }
if (original.size() > offset) { if (original.size() > offset) {
result.append(QStringView(original).mid(offset)); result.append(base::StringViewMid(original, offset));
} }
return result; return result;
} }
@ -2051,7 +2052,7 @@ QString TagWithRemoved(const QString &tag, const QString &removed) {
return QString(); return QString();
} }
auto list = QStringView(tag).split('|'); auto list = QStringView(tag).split('|');
list.erase(ranges::remove(list, QStringView(removed).mid(0)), list.end()); list.erase(ranges::remove(list, QStringView(removed)), list.end());
return JoinTag(list); return JoinTag(list);
} }
@ -2060,7 +2061,7 @@ QString TagWithAdded(const QString &tag, const QString &added) {
return added; return added;
} }
auto list = QStringView(tag).split('|'); auto list = QStringView(tag).split('|');
const auto ref = QStringView(added).mid(0); const auto ref = QStringView(added);
if (list.contains(ref)) { if (list.contains(ref)) {
return tag; return tag;
} }
@ -2155,7 +2156,7 @@ EntitiesInText ConvertTextTagsToEntities(const TextWithTags::Tags &tags) {
if (IsMentionLink(nextState.link)) { if (IsMentionLink(nextState.link)) {
const auto match = qthelp::regex_match( const auto match = qthelp::regex_match(
"^(\\d+\\.\\d+)(/|$)", "^(\\d+\\.\\d+)(/|$)",
QStringView(nextState.link).mid(kMentionTagStart.size())); base::StringViewMid(nextState.link, kMentionTagStart.size()));
if (match) { if (match) {
openType(EntityType::MentionName, match->captured(1)); openType(EntityType::MentionName, match->captured(1));
} }

View file

@ -7,6 +7,7 @@
#include "ui/text/text_utilities.h" #include "ui/text/text_utilities.h"
#include "base/algorithm.h" #include "base/algorithm.h"
#include "base/qt_adapters.h"
#include <QtCore/QRegularExpression> #include <QtCore/QRegularExpression>
@ -49,7 +50,7 @@ TextWithEntities RichLangValue(const QString &text) {
while (offset < text.size()) { while (offset < text.size()) {
const auto m = kStart.match(text, offset); const auto m = kStart.match(text, offset);
if (!m.hasMatch()) { if (!m.hasMatch()) {
result.text.append(QStringView(text).mid(offset)); result.text.append(base::StringViewMid(text, offset));
break; break;
} }
const auto position = m.capturedStart(); const auto position = m.capturedStart();
@ -61,13 +62,13 @@ TextWithEntities RichLangValue(const QString &text) {
continue; continue;
} }
if (position > offset) { if (position > offset) {
result.text.append(QStringView(text).mid(offset, position - offset)); result.text.append(base::StringViewMid(text, offset, position - offset));
} }
const auto type = (tag == qstr("__")) const auto type = (tag == qstr("__"))
? EntityType::Italic ? EntityType::Italic
: EntityType::Bold; : EntityType::Bold;
result.entities.push_back({ type, int(result.text.size()), int(till - from) }); result.entities.push_back({ type, int(result.text.size()), int(till - from) });
result.text.append(QStringView(text).mid(from, till - from)); result.text.append(base::StringViewMid(text, from, till - from));
offset = till + tag.size(); offset = till + tag.size();
} }
return result; return result;

View file

@ -126,20 +126,20 @@ bool IsNewline(QChar ch) {
} }
auto found = false; auto found = false;
for (const auto &single : QStringView(existing.id).split('|')) { for (const auto &single : QStringView(existing.id).split('|')) {
const auto normalized = (single == QStringView(kTagPre).mid(0)) const auto normalized = (single == QStringView(kTagPre))
? QStringView(kTagCode).mid(0) ? QStringView(kTagCode)
: single; : single;
if (checkingLink && IsValidMarkdownLink(single)) { if (checkingLink && IsValidMarkdownLink(single)) {
if (resultLink.isEmpty()) { if (resultLink.isEmpty()) {
resultLink = single.toString(); resultLink = single.toString();
found = true; found = true;
break; break;
} else if (QStringView(resultLink).mid(0) == single) { } else if (QStringView(resultLink) == single) {
found = true; found = true;
break; break;
} }
return QString(); return QString();
} else if (!checkingLink && QStringView(tag).mid(0) == normalized) { } else if (!checkingLink && QStringView(tag) == normalized) {
found = true; found = true;
break; break;
} }
@ -2566,7 +2566,7 @@ TextWithTags InputField::getTextWithAppliedMarkdown() const {
auto from = 0; auto from = 0;
const auto addOriginalTextUpTill = [&](int offset) { const auto addOriginalTextUpTill = [&](int offset) {
if (offset > from) { if (offset > from) {
result.text.append(QStringView(originalText).mid(from, offset - from)); result.text.append(base::StringViewMid(originalText, from, offset - from));
} }
}; };
auto link = links.begin(); auto link = links.begin();
@ -2622,7 +2622,8 @@ TextWithTags InputField::getTextWithAppliedMarkdown() const {
int(result.text.size()), int(result.text.size()),
entityLength, entityLength,
tag.tag }); tag.tag });
result.text.append(QStringView(originalText).mid( result.text.append(base::StringViewMid(
originalText,
entityStart, entityStart,
entityLength)); entityLength));
} }
@ -2898,7 +2899,7 @@ 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(tag).split('|').contains(
QStringView(link).mid(0)); QStringView(link));
}; };
const auto stateStart = [&](const State &state) { const auto stateStart = [&](const State &state) {
return state.i.fragment().position(); return state.i.fragment().position();
@ -3107,8 +3108,8 @@ void InputField::commitInstantReplacement(
kTagProperty kTagProperty
).toString(); ).toString();
const auto currentTags = QStringView(currentTag).split('|'); const auto currentTags = QStringView(currentTag).split('|');
if (currentTags.contains(QStringView(kTagPre).mid(0)) if (currentTags.contains(QStringView(kTagPre))
|| currentTags.contains(QStringView(kTagCode).mid(0))) { || currentTags.contains(QStringView(kTagCode))) {
return; return;
} }
} }
@ -3157,7 +3158,8 @@ bool InputField::commitMarkdownReplacement(
const auto extended = getTextWithTagsPart( const auto extended = getTextWithTagsPart(
from - extendLeft, from - extendLeft,
till + extendRight).text; till + extendRight).text;
const auto outer = QStringView(extended).mid( const auto outer = base::StringViewMid(
extended,
extendLeft, extendLeft,
extended.size() - extendLeft - extendRight); extended.size() - extendLeft - extendRight);
if ((outer.size() <= 2 * edge.size()) if ((outer.size() <= 2 * edge.size())
@ -3221,7 +3223,7 @@ bool InputField::commitMarkdownReplacement(
if (tagTill > tagFrom) { if (tagTill > tagFrom) {
_insertedTags.push_back({ _insertedTags.push_back({
tagFrom, tagFrom,
tagTill - tagFrom, int(tagTill - tagFrom),
tag, tag,
}); });
} }
@ -3333,7 +3335,7 @@ void InputField::commitMarkdownLinkEdit(
return; return;
} }
_insertedTags.clear(); _insertedTags.clear();
_insertedTags.push_back({ 0, text.size(), link }); _insertedTags.push_back({ 0, int(text.size()), link });
auto cursor = textCursor(); auto cursor = textCursor();
const auto editData = selectionEditLinkData(selection); const auto editData = selectionEditLinkData(selection);

View file

@ -8,6 +8,7 @@
#include "ui/widgets/input_fields.h" #include "ui/widgets/input_fields.h"
#include "ui/ui_utility.h" #include "ui/ui_utility.h"
#include "base/qt_adapters.h"
#include <QtCore/QRegularExpression> #include <QtCore/QRegularExpression>
#include <QTime> #include <QTime>
@ -24,7 +25,7 @@ QTime ValidateTime(const QString &value) {
const auto readInt = [](const QString &value) { const auto readInt = [](const QString &value) {
auto view = QStringView(value); auto view = QStringView(value);
while (!view.isEmpty() && view.at(0) == '0') { while (!view.isEmpty() && view.at(0) == '0') {
view = view.mid(1); view = base::StringViewMid(view, 1);
} }
return view.toInt(); return view.toInt();
}; };
@ -80,7 +81,7 @@ std::optional<int> Number(not_null<TimePart*> field) {
const auto text = field->getLastText(); const auto text = field->getLastText();
auto view = QStringView(text); auto view = QStringView(text);
while (view.size() > 1 && view.at(0) == '0') { while (view.size() > 1 && view.at(0) == '0') {
view = view.mid(1); view = base::StringViewMid(view, 1);
} }
return QRegularExpression("^\\d+$").match(view).hasMatch() return QRegularExpression("^\\d+$").match(view).hasMatch()
? std::make_optional(view.toInt()) ? std::make_optional(view.toInt())