aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2021-12-31 17:15:11 +0300
committerlevlam <levlam@telegram.org>2021-12-31 17:15:11 +0300
commit19f1f66ecaaf96cc9ec36c271f5590f2207839aa (patch)
treed1e449f8f5bb4a74a0b0d729523ad17d522c3be2
parent62d4e339de537a9c7d9865b56a70d62ef0eca920 (diff)
Support tg-spoiler HTML tag.
-rw-r--r--td/telegram/MessageEntity.cpp5
-rw-r--r--test/message_entities.cpp7
2 files changed, 9 insertions, 3 deletions
diff --git a/td/telegram/MessageEntity.cpp b/td/telegram/MessageEntity.cpp
index c27527c1a..4a602b8bb 100644
--- a/td/telegram/MessageEntity.cpp
+++ b/td/telegram/MessageEntity.cpp
@@ -2938,7 +2938,7 @@ static Result<vector<MessageEntity>> do_parse_html(CSlice text, string &result)
string tag_name = to_lower(text.substr(begin_pos + 1, i - begin_pos - 1));
if (tag_name != "a" && tag_name != "b" && tag_name != "strong" && tag_name != "i" && tag_name != "em" &&
tag_name != "s" && tag_name != "strike" && tag_name != "del" && tag_name != "u" && tag_name != "ins" &&
- tag_name != "span" && tag_name != "pre" && tag_name != "code") {
+ tag_name != "tg-spoiler" && tag_name != "span" && tag_name != "pre" && tag_name != "code") {
return Status::Error(400, PSLICE()
<< "Unsupported start tag \"" << tag_name << "\" at byte offset " << begin_pos);
}
@@ -3059,8 +3059,7 @@ static Result<vector<MessageEntity>> do_parse_html(CSlice text, string &result)
entities.emplace_back(MessageEntity::Type::Strikethrough, entity_offset, entity_length);
} else if (tag_name == "u" || tag_name == "ins") {
entities.emplace_back(MessageEntity::Type::Underline, entity_offset, entity_length);
- } else if (tag_name == "span") {
- CHECK(nested_entities.back().argument == "spoiler");
+ } else if (tag_name == "tg-spoiler" || (tag_name == "span" && nested_entities.back().argument == "spoiler")) {
entities.emplace_back(MessageEntity::Type::Spoiler, entity_offset, entity_length);
} else if (tag_name == "a") {
auto url = std::move(nested_entities.back().argument);
diff --git a/test/message_entities.cpp b/test/message_entities.cpp
index ac3006a1a..eec589194 100644
--- a/test/message_entities.cpp
+++ b/test/message_entities.cpp
@@ -1267,6 +1267,13 @@ TEST(MessageEntities, parse_html) {
check_parse_html("🏟 🏟<span class=\"tg-spoiler\">🏟 &gt;<b aba = caba>&lt🏟</b></span>",
"🏟 🏟🏟 ><🏟",
{{td::MessageEntity::Type::Spoiler, 5, 7}, {td::MessageEntity::Type::Bold, 9, 3}});
+ check_parse_html("➡️ ➡️<tg-spoiler>➡️ ➡️</tg-spoiler><b>➡️ ➡️</b>",
+ "➡️ ➡️➡️ ➡️➡️ ➡️",
+ {{td::MessageEntity::Type::Spoiler, 5, 5}, {td::MessageEntity::Type::Bold, 10, 5}});
+ check_parse_html("🏟 🏟<tg-spoiler>🏟 &lt🏟</tg-spoiler>", "🏟 🏟🏟 <🏟",
+ {{td::MessageEntity::Type::Spoiler, 5, 6}});
+ check_parse_html("🏟 🏟<tg-spoiler>🏟 &gt;<b aba = caba>&lt🏟</b></tg-spoiler>", "🏟 🏟🏟 ><🏟",
+ {{td::MessageEntity::Type::Spoiler, 5, 7}, {td::MessageEntity::Type::Bold, 9, 3}});
check_parse_html("<a href=telegram.org>\t</a>", "\t",
{{td::MessageEntity::Type::TextUrl, 0, 1, "http://telegram.org/"}});
check_parse_html("<a href=telegram.org>\r</a>", "\r",