From dd38da773716f36bf9e39a7b1387d6d6b46eadf6 Mon Sep 17 00:00:00 2001
From: John Preston <johnprestonmail@gmail.com>
Date: Thu, 4 Jul 2019 11:51:41 +0200
Subject: [PATCH] Allow markdown to intersect with previewed links.

---
 .../SourceFiles/chat_helpers/message_field.cpp     | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/Telegram/SourceFiles/chat_helpers/message_field.cpp b/Telegram/SourceFiles/chat_helpers/message_field.cpp
index c10a4f6fc..a4f9428db 100644
--- a/Telegram/SourceFiles/chat_helpers/message_field.cpp
+++ b/Telegram/SourceFiles/chat_helpers/message_field.cpp
@@ -605,6 +605,12 @@ void MessageLinksParser::parse() {
 		_list = QStringList();
 		return;
 	}
+	const auto tagCanIntersectWithLink = [](const QString &tag) {
+		return (tag == Ui::InputField::kTagBold)
+			|| (tag == Ui::InputField::kTagItalic)
+			|| (tag == Ui::InputField::kTagUnderline)
+			|| (tag == Ui::InputField::kTagStrikeOut);
+	};
 
 	auto ranges = QVector<LinkRange>();
 
@@ -620,7 +626,9 @@ void MessageLinksParser::parse() {
 		++tag;
 	};
 	const auto processTagsBefore = [&](int offset) {
-		while (tag != tagsEnd && tag->offset + tag->length <= offset) {
+		while (tag != tagsEnd
+			&& (tag->offset + tag->length <= offset
+				|| tagCanIntersectWithLink(tag->id))) {
 			processTag();
 		}
 	};
@@ -640,9 +648,9 @@ void MessageLinksParser::parse() {
 		while (markdownTag != markdownTagsEnd
 			&& (markdownTag->adjustedStart
 				+ markdownTag->adjustedLength <= from
-				|| !markdownTag->closed)) {
+				|| !markdownTag->closed
+				|| tagCanIntersectWithLink(markdownTag->tag))) {
 			++markdownTag;
-			continue;
 		}
 		if (markdownTag == markdownTagsEnd
 			|| markdownTag->adjustedStart >= from + length) {