Remove empty block at beginning of imported markdown
An empty QTextDocument already contains a block; so when the formatting is fully determined, if the document is still empty, then instead of inserting a new block, we can set formatting on the cursor, which affects the pre-existing block, before inserting text. This avoids leaving a blank line (the default block) above the inserted content. Fixes: QTBUG-81060 Change-Id: I14e45e300a602493aa59680417d74d4c2b25862d Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>bb10
parent
18e06c37e1
commit
76fbe75abe
|
|
@ -207,7 +207,12 @@ int QTextMarkdownImporter::cbEnterBlock(int blockType, void *det)
|
|||
charFmt.setFontWeight(QFont::Bold);
|
||||
blockFmt.setHeadingLevel(int(detail->level));
|
||||
m_needsInsertBlock = false;
|
||||
m_cursor->insertBlock(blockFmt, charFmt);
|
||||
if (m_doc->isEmpty()) {
|
||||
m_cursor->setBlockFormat(blockFmt);
|
||||
m_cursor->setCharFormat(charFmt);
|
||||
} else {
|
||||
m_cursor->insertBlock(blockFmt, charFmt);
|
||||
}
|
||||
qCDebug(lcMD, "H%d", detail->level);
|
||||
} break;
|
||||
case MD_BLOCK_LI: {
|
||||
|
|
@ -592,7 +597,12 @@ void QTextMarkdownImporter::insertBlock()
|
|||
blockFormat.setMarker(m_markerType);
|
||||
if (!m_listStack.isEmpty())
|
||||
blockFormat.setIndent(m_listStack.count());
|
||||
m_cursor->insertBlock(blockFormat, charFormat);
|
||||
if (m_doc->isEmpty()) {
|
||||
m_cursor->setBlockFormat(blockFormat);
|
||||
m_cursor->setCharFormat(charFormat);
|
||||
} else {
|
||||
m_cursor->insertBlock(blockFormat, charFormat);
|
||||
}
|
||||
if (m_needsInsertList) {
|
||||
m_listStack.push(m_cursor->createList(m_listFormat));
|
||||
} else if (!m_listStack.isEmpty() && m_listItem) {
|
||||
|
|
|
|||
|
|
@ -55,12 +55,13 @@ private slots:
|
|||
void thematicBreaks();
|
||||
void lists_data();
|
||||
void lists();
|
||||
void avoidBlankLineAtBeginning_data();
|
||||
void avoidBlankLineAtBeginning();
|
||||
};
|
||||
|
||||
void tst_QTextMarkdownImporter::headingBulletsContinuations()
|
||||
{
|
||||
const QStringList expectedBlocks = QStringList() <<
|
||||
"" << // we could do without this blank line before the heading, but currently it happens
|
||||
"heading" <<
|
||||
"bullet 1 continuation line 1, indented via tab" <<
|
||||
"bullet 2 continuation line 2, indented via 4 spaces" <<
|
||||
|
|
@ -222,5 +223,38 @@ void tst_QTextMarkdownImporter::lists()
|
|||
QCOMPARE(doc.toMarkdown(), rewrite);
|
||||
}
|
||||
|
||||
void tst_QTextMarkdownImporter::avoidBlankLineAtBeginning_data()
|
||||
{
|
||||
QTest::addColumn<QString>("input");
|
||||
QTest::addColumn<int>("expectedNumberOfParagraphs");
|
||||
|
||||
QTest::newRow("Text block") << QString("Markdown text") << 1;
|
||||
QTest::newRow("Headline") << QString("Markdown text\n============") << 1;
|
||||
QTest::newRow("Code block") << QString(" Markdown text") << 2;
|
||||
QTest::newRow("Unordered list") << QString("* Markdown text") << 1;
|
||||
QTest::newRow("Ordered list") << QString("1. Markdown text") << 1;
|
||||
QTest::newRow("Blockquote") << QString("> Markdown text") << 1;
|
||||
}
|
||||
|
||||
void tst_QTextMarkdownImporter::avoidBlankLineAtBeginning() // QTBUG-81060
|
||||
{
|
||||
QFETCH(QString, input);
|
||||
QFETCH(int, expectedNumberOfParagraphs);
|
||||
|
||||
QTextDocument doc;
|
||||
QTextMarkdownImporter(QTextMarkdownImporter::DialectGitHub).import(&doc, input);
|
||||
QTextFrame::iterator iterator = doc.rootFrame()->begin();
|
||||
int i = 0;
|
||||
while (!iterator.atEnd()) {
|
||||
QTextBlock block = iterator.currentBlock();
|
||||
// Make sure there is no empty paragraph at the beginning of the document
|
||||
if (i == 0)
|
||||
QVERIFY(!block.text().isEmpty());
|
||||
++iterator;
|
||||
++i;
|
||||
}
|
||||
QCOMPARE(i, expectedNumberOfParagraphs);
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QTextMarkdownImporter)
|
||||
#include "tst_qtextmarkdownimporter.moc"
|
||||
|
|
|
|||
Loading…
Reference in New Issue