From 19f1f66ecaaf96cc9ec36c271f5590f2207839aa Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 31 Dec 2021 17:15:11 +0300 Subject: [PATCH] Support tg-spoiler HTML tag. --- td/telegram/MessageEntity.cpp | 5 ++--- test/message_entities.cpp | 7 +++++++ 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> 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> 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("🏟 🏟🏟 ><🏟", "🏟 🏟🏟 ><🏟", {{td::MessageEntity::Type::Spoiler, 5, 7}, {td::MessageEntity::Type::Bold, 9, 3}}); + check_parse_html("➡️ ➡️➡️ ➡️➡️ ➡️", + "➡️ ➡️➡️ ➡️➡️ ➡️", + {{td::MessageEntity::Type::Spoiler, 5, 5}, {td::MessageEntity::Type::Bold, 10, 5}}); + check_parse_html("🏟 🏟🏟 <🏟", "🏟 🏟🏟 <🏟", + {{td::MessageEntity::Type::Spoiler, 5, 6}}); + check_parse_html("🏟 🏟🏟 ><🏟", "🏟 🏟🏟 ><🏟", + {{td::MessageEntity::Type::Spoiler, 5, 7}, {td::MessageEntity::Type::Bold, 9, 3}}); check_parse_html("\t", "\t", {{td::MessageEntity::Type::TextUrl, 0, 1, "http://telegram.org/"}}); check_parse_html("\r", "\r",