diff --git a/include/aotextarea.h b/include/aotextarea.h
index 405f4eb40..0dc622201 100644
--- a/include/aotextarea.h
+++ b/include/aotextarea.h
@@ -15,6 +15,7 @@ class AOTextArea : public QTextBrowser {
void append_chatmessage(QString p_name, QString p_message,
QString p_name_colour, QString p_color = QString());
void append_error(QString p_message);
+ QString closetags(QString html);
private:
const QRegularExpression url_parser_regex = QRegularExpression("\\b(https?://\\S+\\.\\S+)\\b");
diff --git a/src/aotextarea.cpp b/src/aotextarea.cpp
index a42590391..4c3c2986a 100644
--- a/src/aotextarea.cpp
+++ b/src/aotextarea.cpp
@@ -32,9 +32,8 @@ void AOTextArea::append_chatmessage(QString p_name, QString p_message,
p_message += " ";
}
- QString result = p_message.toHtmlEscaped()
- .replace("\n", "
")
- .replace(url_parser_regex, "\\1");
+ QString result = this->closetags(p_message);
+ result = result.replace("\n", "
").replace(url_parser_regex, "\\1");
if (!p_color.isEmpty()) {
result = "" + result + "";
@@ -81,3 +80,33 @@ void AOTextArea::auto_scroll(QTextCursor old_cursor, int old_scrollbar_value,
this->verticalScrollBar()->setValue(this->verticalScrollBar()->maximum());
}
}
+
+QString AOTextArea::closetags(QString html)
+{
+ QRegExp opened_regex("(<([a-z]+)(?: .*)?(?)");
+ QRegExp closed_regex("(([a-z]+)>)");
+
+ opened_regex.indexIn(html);
+ closed_regex.indexIn(html);
+ QStringList opentags = opened_regex.capturedTexts();
+ QStringList closetags = closed_regex.capturedTexts();
+
+ int size_opentags = opentags.count();
+ for (int i = 1; i <= size_opentags; i++) {
+ if (i <= closetags.count()) {
+ QString expected_opentag = closetags.at(i - 1);
+ expected_opentag = expected_opentag.replace("", "<").replace(">", "");
+ if (!opentags.at(size_opentags - i).startsWith(expected_opentag)) {
+ QString expected_closetag = opentags.at(size_opentags - i);
+ expected_closetag = expected_closetag.replace("<", "");
+ html = html + expected_closetag;
+ }
+ }
+ else {
+ QString expected_closetag = opentags.at(size_opentags - i);
+ expected_closetag = expected_closetag.replace("<", "");
+ html = html + expected_closetag;
+ }
+ }
+ return html;
+}