From d91d5d3abe64c61d157a1d7456ef622ac759cfd3 Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Wed, 28 Feb 2024 16:36:02 -0700 Subject: QTextHtmlImporter: don't forget to appendBlock after block tag closed If we see a closing tag that really demands a new block after it, like , that needs to be done even if some ignorable whitespace and "inline" tags come after it. Don't get distracted by those. Also add a comment in QTextDocument::setHtml() to remind the reader that HTML parsing is a two-pass algorithm. Fixes: QTBUG-81662 Change-Id: If723c9d3c211a684725055a06bcf87be4e38923a Reviewed-by: Qt CI Bot Reviewed-by: Eskil Abrahamsen Blomfeldt (cherry picked from commit 60aeeb0e92762d57c208e4212374d30be6490611) Reviewed-by: Qt Cherry-pick Bot (cherry picked from commit f0713117d6d0b77c5903ffe9ce3a7d5317021691) --- .../tst_qtextdocumentfragment.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'tests') diff --git a/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp b/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp index ca23c56b3e..425b22f335 100644 --- a/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp +++ b/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp @@ -16,6 +16,8 @@ #include +using namespace Qt::StringLiterals; + QT_FORWARD_DECLARE_CLASS(QTextDocument) class tst_QTextDocumentFragment : public QObject @@ -245,6 +247,7 @@ private slots: void html_fromFirefox(); void html_emptyInlineInsideBlock(); void css_fontAndWordSpacing(); + void html_brWithWhitespaceAfterList(); private: inline void setHtml(const QString &html) @@ -4320,5 +4323,24 @@ void tst_QTextDocumentFragment::css_fontAndWordSpacing() } } +void tst_QTextDocumentFragment::html_brWithWhitespaceAfterList() // QTBUG-81662 +{ + setHtml(QString::fromLatin1("
  • one
  • two
\n
\nhello")); + + QCOMPARE(doc->blockCount(), 3); + + QTextBlock block = doc->begin(); + QVERIFY(block.textList()); + + block = block.next(); + QVERIFY(block.textList()); + + block = block.next(); + QCOMPARE(block.text(), u"\u2028hello"_s); + + block = block.next(); + QVERIFY(block.text().isEmpty()); +} + QTEST_MAIN(tst_QTextDocumentFragment) #include "tst_qtextdocumentfragment.moc" -- cgit v1.2.3