diff --git a/src/gui/text/qtextmarkdownimporter.cpp b/src/gui/text/qtextmarkdownimporter.cpp index 35feb0b3b1..98980c3c00 100644 --- a/src/gui/text/qtextmarkdownimporter.cpp +++ b/src/gui/text/qtextmarkdownimporter.cpp @@ -620,6 +620,9 @@ void QTextMarkdownImporter::insertBlock() if (m_doc->isEmpty()) { m_cursor->setBlockFormat(blockFormat); m_cursor->setCharFormat(charFormat); + } else if (m_listItem) { + m_cursor->insertBlock(blockFormat, QTextCharFormat()); + m_cursor->setCharFormat(charFormat); } else { m_cursor->insertBlock(blockFormat, charFormat); } diff --git a/tests/auto/gui/text/qtextmarkdownimporter/tst_qtextmarkdownimporter.cpp b/tests/auto/gui/text/qtextmarkdownimporter/tst_qtextmarkdownimporter.cpp index 9b376c41f4..cce3b28bc1 100644 --- a/tests/auto/gui/text/qtextmarkdownimporter/tst_qtextmarkdownimporter.cpp +++ b/tests/auto/gui/text/qtextmarkdownimporter/tst_qtextmarkdownimporter.cpp @@ -211,6 +211,9 @@ void tst_QTextMarkdownImporter::lists_data() QTest::newRow("numeric lists nested in empty lists") << "- \n 1. a\n 2. b\n- c\n 1.\n + d\n" << 4 << false << "- \n 1. a\n 2. b\n- c 1. + d\n"; + QTest::newRow("styled spans in list items") + << "1. normal text\n2. **bold** text\n3. `code` in the item\n4. *italic* text\n5. _underlined_ text\n" << 5 << false + << "1. normal text\n2. **bold** text\n3. `code` in the item\n4. *italic* text\n5. _underlined_ text\n"; } void tst_QTextMarkdownImporter::lists() @@ -222,11 +225,22 @@ void tst_QTextMarkdownImporter::lists() QTextDocument doc; doc.setMarkdown(input); // QTBUG-78870 : don't crash + +#ifdef DEBUG_WRITE_HTML + { + QFile out("/tmp/" + QLatin1String(QTest::currentDataTag()) + ".html"); + out.open(QFile::WriteOnly); + out.write(doc.toHtml().toLatin1()); + out.close(); + } +#endif + QTextFrame::iterator iterator = doc.rootFrame()->begin(); QTextFrame *currentFrame = iterator.currentFrame(); int i = 0; int itemCount = 0; bool emptyItems = true; + QString firstItemFontFamily; while (!iterator.atEnd()) { // There are no child frames QCOMPARE(iterator.currentFrame(), currentFrame); @@ -239,6 +253,21 @@ void tst_QTextMarkdownImporter::lists() } qCDebug(lcTests, "%d %s%s", i, (block.textList() ? "
  • " : "

    "), qPrintable(block.text())); + QTextCharFormat listItemFmt = block.charFormat(); + QFont listItemFont = listItemFmt.font(); + // QTextDocumentLayoutPrivate::drawListItem() uses listItemFont to render numbers in an ordered list. + // We want that to be consistent, regardless whether the list item's text begins with a styled span. + if (firstItemFontFamily.isEmpty()) + firstItemFontFamily = listItemFont.family(); + else + QCOMPARE(listItemFont.family(), firstItemFontFamily); + QCOMPARE(listItemFont.bold(), false); + QCOMPARE(listItemFont.italic(), false); + QCOMPARE(listItemFont.underline(), false); + QCOMPARE(listItemFont.fixedPitch(), false); + QCOMPARE(listItemFmt.fontItalic(), false); + QCOMPARE(listItemFmt.fontUnderline(), false); + QCOMPARE(listItemFmt.fontFixedPitch(), false); ++iterator; ++i; }