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("()"); + + 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("", ""); + if (!opentags.at(size_opentags - i).startsWith(expected_opentag)) { + QString expected_closetag = opentags.at(size_opentags - i); + expected_closetag = expected_closetag.replace("<", "