mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Simplify escaping when parsing IV.
This commit is contained in:
parent
f36e3c213e
commit
7803f8e670
1 changed files with 31 additions and 36 deletions
|
@ -51,7 +51,7 @@ template <typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
|
||||||
return Number(base::SafeRound(value * 10000.) / 100.);
|
return Number(base::SafeRound(value * 10000.) / 100.);
|
||||||
};
|
};
|
||||||
|
|
||||||
[[nodiscard]] QByteArray EscapeAttr(QByteArray value) {
|
[[nodiscard]] QByteArray Escape(QByteArray value) {
|
||||||
auto result = QByteArray();
|
auto result = QByteArray();
|
||||||
result.reserve(value.size());
|
result.reserve(value.size());
|
||||||
for (const auto &ch : value) {
|
for (const auto &ch : value) {
|
||||||
|
@ -67,8 +67,8 @@ template <typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] QByteArray EscapeText(QByteArray value) {
|
[[nodiscard]] QByteArray Date(TimeId date) {
|
||||||
return EscapeAttr(value);
|
return Escape(langDateTimeFull(base::unixtime::parse(date)).toUtf8());
|
||||||
}
|
}
|
||||||
|
|
||||||
class Parser final {
|
class Parser final {
|
||||||
|
@ -391,9 +391,7 @@ QByteArray Parser::block(const MTPDpageBlockSubtitle &data) {
|
||||||
QByteArray Parser::block(const MTPDpageBlockAuthorDate &data) {
|
QByteArray Parser::block(const MTPDpageBlockAuthorDate &data) {
|
||||||
auto inner = rich(data.vauthor());
|
auto inner = rich(data.vauthor());
|
||||||
if (const auto date = data.vpublished_date().v) {
|
if (const auto date = data.vpublished_date().v) {
|
||||||
const auto parsed = base::unixtime::parse(date);
|
inner += " \xE2\x80\xA2 " + tag("time", Date(date));
|
||||||
inner += " \xE2\x80\xA2 "
|
|
||||||
+ tag("time", EscapeText(langDateTimeFull(parsed).toUtf8()));
|
|
||||||
}
|
}
|
||||||
return tag("address", inner);
|
return tag("address", inner);
|
||||||
}
|
}
|
||||||
|
@ -412,7 +410,7 @@ QByteArray Parser::block(const MTPDpageBlockParagraph &data) {
|
||||||
|
|
||||||
QByteArray Parser::block(const MTPDpageBlockPreformatted &data) {
|
QByteArray Parser::block(const MTPDpageBlockPreformatted &data) {
|
||||||
auto list = Attributes();
|
auto list = Attributes();
|
||||||
const auto language = EscapeAttr(utf(data.vlanguage()));
|
const auto language = utf(data.vlanguage());
|
||||||
if (!language.isEmpty()) {
|
if (!language.isEmpty()) {
|
||||||
list.push_back({ "data-language", language });
|
list.push_back({ "data-language", language });
|
||||||
list.push_back({ "class", "lang-" + language });
|
list.push_back({ "class", "lang-" + language });
|
||||||
|
@ -430,7 +428,7 @@ QByteArray Parser::block(const MTPDpageBlockDivider &data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray Parser::block(const MTPDpageBlockAnchor &data) {
|
QByteArray Parser::block(const MTPDpageBlockAnchor &data) {
|
||||||
return tag("a", { { "name", EscapeAttr(utf(data.vname())) } });
|
return tag("a", { { "name", utf(data.vname()) } });
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray Parser::block(const MTPDpageBlockList &data) {
|
QByteArray Parser::block(const MTPDpageBlockList &data) {
|
||||||
|
@ -507,15 +505,13 @@ QByteArray Parser::block(
|
||||||
};
|
};
|
||||||
auto result = tag("div", attributes, inner);
|
auto result = tag("div", attributes, inner);
|
||||||
|
|
||||||
const auto href = data.vurl()
|
const auto href = data.vurl() ? utf(*data.vurl()) : photoFullUrl(photo);
|
||||||
? utf(*data.vurl())
|
|
||||||
: photoFullUrl(photo);
|
|
||||||
const auto id = Number(photo.id);
|
const auto id = Number(photo.id);
|
||||||
result = tag("a", {
|
result = tag("a", {
|
||||||
{ "href", href },
|
{ "href", href },
|
||||||
{ "oncontextmenu", data.vurl() ? QByteArray() : "return false;" },
|
{ "oncontextmenu", data.vurl() ? QByteArray() : "return false;" },
|
||||||
{ "data-context", data.vurl() ? QByteArray() : "viewer-photo" + id },
|
{ "data-context", data.vurl() ? QByteArray() : "viewer-photo" + id },
|
||||||
}, result);
|
}, result);
|
||||||
if (!slideshow) {
|
if (!slideshow) {
|
||||||
result += caption(data.vcaption());
|
result += caption(data.vcaption());
|
||||||
}
|
}
|
||||||
|
@ -621,9 +617,9 @@ QByteArray Parser::block(const MTPDpageBlockEmbed &data) {
|
||||||
attributes.push_back({ "height", iframeHeight });
|
attributes.push_back({ "height", iframeHeight });
|
||||||
if (const auto url = data.vurl()) {
|
if (const auto url = data.vurl()) {
|
||||||
if (!autosize) {
|
if (!autosize) {
|
||||||
attributes.push_back({ "src", EscapeAttr(utf(url)) });
|
attributes.push_back({ "src", utf(url) });
|
||||||
} else {
|
} else {
|
||||||
attributes.push_back({ "srcdoc", EscapeAttr(utf(url)) });
|
attributes.push_back({ "srcdoc", utf(url) });
|
||||||
}
|
}
|
||||||
} else if (const auto html = data.vhtml()) {
|
} else if (const auto html = data.vhtml()) {
|
||||||
attributes.push_back({ "src", embedUrl(html->v) });
|
attributes.push_back({ "src", embedUrl(html->v) });
|
||||||
|
@ -661,12 +657,10 @@ QByteArray Parser::block(const MTPDpageBlockEmbedPost &data) {
|
||||||
address += tag(
|
address += tag(
|
||||||
"a",
|
"a",
|
||||||
{ { "rel", "author" }, { "onclick", "return false;" } },
|
{ { "rel", "author" }, { "onclick", "return false;" } },
|
||||||
EscapeText(utf(data.vauthor())));
|
utf(data.vauthor()));
|
||||||
if (const auto date = data.vdate().v) {
|
if (const auto date = data.vdate().v) {
|
||||||
const auto parsed = base::unixtime::parse(date);
|
const auto parsed = base::unixtime::parse(date);
|
||||||
address += tag(
|
address += tag("time", Date(date));
|
||||||
"time",
|
|
||||||
EscapeText(langDateTimeFull(parsed).toUtf8()));
|
|
||||||
}
|
}
|
||||||
const auto inner = tag("address", address) + list(data.vblocks());
|
const auto inner = tag("address", address) + list(data.vblocks());
|
||||||
result = tag("blockquote", { { "class", "embed-post" } }, inner);
|
result = tag("blockquote", { { "class", "embed-post" } }, inner);
|
||||||
|
@ -675,7 +669,7 @@ QByteArray Parser::block(const MTPDpageBlockEmbedPost &data) {
|
||||||
const auto inner = tag("strong", utf(data.vauthor()))
|
const auto inner = tag("strong", utf(data.vauthor()))
|
||||||
+ tag(
|
+ tag(
|
||||||
"small",
|
"small",
|
||||||
tag("a", { { "href", EscapeAttr(url) } }, EscapeText(url)));
|
tag("a", { { "href", url } }, url));
|
||||||
result = tag("section", { { "class", "embed-post" } }, inner);
|
result = tag("section", { { "class", "embed-post" } }, inner);
|
||||||
}
|
}
|
||||||
result += caption(data.vcaption());
|
result += caption(data.vcaption());
|
||||||
|
@ -732,7 +726,7 @@ QByteArray Parser::block(const MTPDpageBlockChannel &data) {
|
||||||
: "https://t.me/" + username;
|
: "https://t.me/" + username;
|
||||||
result = tag(
|
result = tag(
|
||||||
"a",
|
"a",
|
||||||
{ { "href", EscapeAttr(link) }, { "data-context", "channel" + id } },
|
{ { "href", link }, { "data-context", "channel" + id } },
|
||||||
result);
|
result);
|
||||||
_result.channelIds.emplace(id);
|
_result.channelIds.emplace(id);
|
||||||
return tag("section", {
|
return tag("section", {
|
||||||
|
@ -839,23 +833,21 @@ QByteArray Parser::block(const MTPDpageRelatedArticle &data) {
|
||||||
inner += tag(
|
inner += tag(
|
||||||
"span",
|
"span",
|
||||||
{ { "class", "related-link-title" } },
|
{ { "class", "related-link-title" } },
|
||||||
EscapeText(utf(*title)));
|
utf(*title));
|
||||||
}
|
}
|
||||||
if (description) {
|
if (description) {
|
||||||
inner += tag(
|
inner += tag(
|
||||||
"span",
|
"span",
|
||||||
{ { "class", "related-link-desc" } },
|
{ { "class", "related-link-desc" } },
|
||||||
EscapeText(utf(*description)));
|
utf(*description));
|
||||||
}
|
}
|
||||||
if (author || published) {
|
if (author || published) {
|
||||||
const auto separator = (author && published) ? ", " : "";
|
|
||||||
const auto parsed = base::unixtime::parse(published->v);
|
|
||||||
inner += tag(
|
inner += tag(
|
||||||
"span",
|
"span",
|
||||||
{ { "class", "related-link-source" } },
|
{ { "class", "related-link-source" } },
|
||||||
EscapeText((author ? utf(*author) : QByteArray())
|
((author ? utf(*author) : QByteArray())
|
||||||
+ separator
|
+ ((author && published) ? ", " : QByteArray())
|
||||||
+ langDateTimeFull(parsed).toUtf8()));
|
+ (published ? Date(published->v) : QByteArray())));
|
||||||
}
|
}
|
||||||
result += tag("span", {
|
result += tag("span", {
|
||||||
{ "class", "related-link-content" },
|
{ "class", "related-link-content" },
|
||||||
|
@ -912,22 +904,25 @@ QByteArray Parser::block(const MTPDpageListItemBlocks &data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray Parser::block(const MTPDpageListOrderedItemText &data) {
|
QByteArray Parser::block(const MTPDpageListOrderedItemText &data) {
|
||||||
return tag("li", { { "value", utf(data.vnum()) } }, rich(data.vtext()));
|
return tag(
|
||||||
|
"li",
|
||||||
|
{ { "value", utf(data.vnum()) } },
|
||||||
|
rich(data.vtext()));
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray Parser::block(const MTPDpageListOrderedItemBlocks &data) {
|
QByteArray Parser::block(const MTPDpageListOrderedItemBlocks &data) {
|
||||||
return tag(
|
return tag(
|
||||||
"li",
|
"li",
|
||||||
{ { "value", EscapeAttr(utf(data.vnum())) } },
|
{ { "value", utf(data.vnum()) } },
|
||||||
list(data.vblocks()));
|
list(data.vblocks()));
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray Parser::utf(const MTPstring &text) {
|
QByteArray Parser::utf(const MTPstring &text) {
|
||||||
return text.v;
|
return Escape(text.v);
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray Parser::utf(const tl::conditional<MTPstring> &text) {
|
QByteArray Parser::utf(const tl::conditional<MTPstring> &text) {
|
||||||
return text ? text->v : QByteArray();
|
return text ? utf(*text) : QByteArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray Parser::tag(
|
QByteArray Parser::tag(
|
||||||
|
@ -965,7 +960,7 @@ QByteArray Parser::rich(const MTPRichText &text) {
|
||||||
{ "\xE2\x81\xA8", "<span dir=\"auto\">" },
|
{ "\xE2\x81\xA8", "<span dir=\"auto\">" },
|
||||||
{ "\xE2\x81\xA9", "</span>" },
|
{ "\xE2\x81\xA9", "</span>" },
|
||||||
};
|
};
|
||||||
auto text = EscapeText(utf(data.vtext()));
|
auto text = utf(data.vtext());
|
||||||
for (const auto &[from, to] : replacements) {
|
for (const auto &[from, to] : replacements) {
|
||||||
text.replace(from, to);
|
text.replace(from, to);
|
||||||
}
|
}
|
||||||
|
@ -1016,8 +1011,8 @@ QByteArray Parser::rich(const MTPRichText &text) {
|
||||||
}, rich(data.vtext()));
|
}, rich(data.vtext()));
|
||||||
}, [&](const MTPDtextEmail &data) {
|
}, [&](const MTPDtextEmail &data) {
|
||||||
return tag("a", {
|
return tag("a", {
|
||||||
{ "href", "mailto:" + EscapeAttr(utf(data.vemail())) },
|
{ "href", "mailto:" + utf(data.vemail()) },
|
||||||
}, rich(data.vtext()));
|
}, rich(data.vtext()));
|
||||||
}, [&](const MTPDtextSubscript &data) {
|
}, [&](const MTPDtextSubscript &data) {
|
||||||
return tag("sub", rich(data.vtext()));
|
return tag("sub", rich(data.vtext()));
|
||||||
}, [&](const MTPDtextSuperscript &data) {
|
}, [&](const MTPDtextSuperscript &data) {
|
||||||
|
@ -1026,11 +1021,11 @@ QByteArray Parser::rich(const MTPRichText &text) {
|
||||||
return tag("mark", rich(data.vtext()));
|
return tag("mark", rich(data.vtext()));
|
||||||
}, [&](const MTPDtextPhone &data) {
|
}, [&](const MTPDtextPhone &data) {
|
||||||
return tag("a", {
|
return tag("a", {
|
||||||
{ "href", "tel:" + EscapeAttr(utf(data.vphone())) },
|
{ "href", "tel:" + utf(data.vphone()) },
|
||||||
}, rich(data.vtext()));
|
}, rich(data.vtext()));
|
||||||
}, [&](const MTPDtextAnchor &data) {
|
}, [&](const MTPDtextAnchor &data) {
|
||||||
const auto inner = rich(data.vtext());
|
const auto inner = rich(data.vtext());
|
||||||
const auto name = EscapeAttr(utf(data.vname()));
|
const auto name = utf(data.vname());
|
||||||
return inner.isEmpty()
|
return inner.isEmpty()
|
||||||
? tag("a", { { "name", name } })
|
? tag("a", { { "name", name } })
|
||||||
: tag(
|
: tag(
|
||||||
|
|
Loading…
Add table
Reference in a new issue