diff --git a/td/telegram/MessageEntity.cpp b/td/telegram/MessageEntity.cpp index e8d3bb009..10206f860 100644 --- a/td/telegram/MessageEntity.cpp +++ b/td/telegram/MessageEntity.cpp @@ -3514,7 +3514,6 @@ static std::pair remove_invalid_entities(const string &text, vect size_t last_non_whitespace_pos = text.size(); int32 utf16_offset = 0; - int32 last_space_utf16_offset = -1; int32 last_non_whitespace_utf16_offset = -1; td::remove_if(entities, [](const auto &entity) { return entity.length == 0; }); @@ -3527,10 +3526,9 @@ static std::pair remove_invalid_entities(const string &text, vect break; } - if (last_non_whitespace_utf16_offset >= entity->offset || - (last_space_utf16_offset >= entity->offset && is_hidden_data_entity(entity->type))) { - // TODO check entity for validness, for example, that mentions, hashtags, cashtags and URLs are valid + if (last_non_whitespace_utf16_offset >= entity->offset || is_hidden_data_entity(entity->type)) { // keep entity + // TODO check entity for validness, for example, that mentions, hashtags, cashtags and URLs are valid } else { entity->length = 0; } @@ -3566,9 +3564,7 @@ static std::pair remove_invalid_entities(const string &text, vect auto c = static_cast(text[pos]); switch (c) { case '\n': - break; case 32: - last_space_utf16_offset = utf16_offset; break; default: while (!is_utf8_character_first_code_unit(static_cast(text[pos + 1]))) { diff --git a/test/message_entities.cpp b/test/message_entities.cpp index 86fae01ae..67a5d65db 100644 --- a/test/message_entities.cpp +++ b/test/message_entities.cpp @@ -783,9 +783,8 @@ TEST(MessageEntities, fix_formatted_text) { td::vector fixed_entities; if (fixed_length > 0) { for (auto i = 0; i < length; i++) { - if (str[offset + i] != '\r' && str[offset + i] != '\n' && - (str[offset + i] != ' ' || type == td::MessageEntity::Type::TextUrl || - type == td::MessageEntity::Type::MentionName)) { + if (!td::is_space(str[offset + i]) || type == td::MessageEntity::Type::TextUrl || + type == td::MessageEntity::Type::MentionName) { fixed_entities.emplace_back(type, fixed_offset, fixed_length); break; } @@ -1413,7 +1412,7 @@ TEST(MessageEntities, parse_markdown_v3) { check_parse_markdown_v3("` `", " ", {{td::MessageEntity::Type::Code, 0, 1}}); check_parse_markdown_v3("`\n`", "\n", {{td::MessageEntity::Type::Code, 0, 1}}); check_parse_markdown_v3("` `a", " a", {{td::MessageEntity::Type::Code, 0, 1}}, true); - check_parse_markdown_v3("`\n`a", "\na", {}, true); + check_parse_markdown_v3("`\n`a", "\na", {{td::MessageEntity::Type::Code, 0, 1}}, true); check_parse_markdown_v3("``", "``", {}); check_parse_markdown_v3("`a````b```", "`a````b```", {}); check_parse_markdown_v3("ab", {{td::MessageEntity::Type::Code, 0, 1}, {td::MessageEntity::Type::Pre, 1, 1}}, "ab", @@ -1428,7 +1427,7 @@ TEST(MessageEntities, parse_markdown_v3) { "[ ](t.me) [ ](t.me)", {{td::MessageEntity::Type::TextUrl, 8, 1, "http://t.me/"}, {10, 1, td::UserId(1)}}, "[ ](t.me) [ ](t.me)", {{td::MessageEntity::Type::TextUrl, 8, 1, "http://t.me/"}, {10, 1, td::UserId(1)}}); check_parse_markdown_v3("[\n](t.me)", "\n", {{td::MessageEntity::Type::TextUrl, 0, 1, "http://t.me/"}}); - check_parse_markdown_v3("[\n](t.me)a", "\na", {}, true); + check_parse_markdown_v3("[\n](t.me)a", "\na", {{td::MessageEntity::Type::TextUrl, 0, 1, "http://t.me/"}}, true); check_parse_markdown_v3("asd[abcd](google.com)", {{td::MessageEntity::Type::Italic, 0, 5}}, "asdabcd", {{td::MessageEntity::Type::Italic, 0, 3}, {td::MessageEntity::Type::TextUrl, 3, 4, "http://google.com/"},