Fix: QTextDocument::find backward search crossing paragraphs
If the start position of a backward string search was the at the start of a paragraph, the code would start searching at an illegal position (at the eol character) in the preceding paragraph. That caused that whole paragraph to be skipped, so any matches there would not be found. Fix by making sure the search starts at legal position. Fixes: QTBUG-48035 Change-Id: Id6c0159b6613ec75ec617a0a57096ceef2b4cbd0 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
This commit is contained in:
parent
7fc67e09f3
commit
a4f79313f0
@ -1358,6 +1358,8 @@ QTextCursor QTextDocument::find(const QString &subString, int from, FindFlags op
|
|||||||
blockOffset = 0;
|
blockOffset = 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (blockOffset == block.length() - 1)
|
||||||
|
--blockOffset; // make sure to skip end-of-paragraph character
|
||||||
while (block.isValid()) {
|
while (block.isValid()) {
|
||||||
if (findInBlock(block, subString, blockOffset, options, &cursor))
|
if (findInBlock(block, subString, blockOffset, options, &cursor))
|
||||||
return cursor;
|
return cursor;
|
||||||
|
@ -319,6 +319,15 @@ void tst_QTextDocument::find_data()
|
|||||||
QTest::newRow("nbsp") << "Hello" + QString(QChar(QChar::Nbsp)) +"World" << " " << int(QTextDocument::FindCaseSensitively) << 0 << 5 << 6;
|
QTest::newRow("nbsp") << "Hello" + QString(QChar(QChar::Nbsp)) +"World" << " " << int(QTextDocument::FindCaseSensitively) << 0 << 5 << 6;
|
||||||
|
|
||||||
QTest::newRow("from-the-end") << "Hello World" << "Hello World" << int(QTextDocument::FindCaseSensitively| QTextDocument::FindBackward) << 11 << 0 << 11;
|
QTest::newRow("from-the-end") << "Hello World" << "Hello World" << int(QTextDocument::FindCaseSensitively| QTextDocument::FindBackward) << 11 << 0 << 11;
|
||||||
|
|
||||||
|
QTest::newRow("bw-cross-paras-1") << "a1\na2\nb1" << "a" << int(QTextDocument::FindBackward) << 7 << 3 << 4;
|
||||||
|
QTest::newRow("bw-cross-paras-2") << "a1\na2\nb1" << "a" << int(QTextDocument::FindBackward) << 6 << 3 << 4;
|
||||||
|
QTest::newRow("bw-cross-paras-3") << "a1\na2\nb1" << "a" << int(QTextDocument::FindBackward) << 5 << 3 << 4;
|
||||||
|
QTest::newRow("bw-cross-paras-4") << "a1\na2\nb1" << "a" << int(QTextDocument::FindBackward) << 3 << 0 << 1;
|
||||||
|
QTest::newRow("bw-cross-paras-5") << "xa\n\nb1" << "a" << int(QTextDocument::FindBackward) << 5 << 1 << 2;
|
||||||
|
QTest::newRow("bw-cross-paras-6") << "xa\n\nb1" << "a" << int(QTextDocument::FindBackward) << 4 << 1 << 2;
|
||||||
|
QTest::newRow("bw-cross-paras-7") << "xa\n\nb1" << "a" << int(QTextDocument::FindBackward) << 3 << 1 << 2;
|
||||||
|
QTest::newRow("bw-cross-paras-8") << "xa\n\nb1" << "a" << int(QTextDocument::FindBackward) << 2 << 1 << 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QTextDocument::find()
|
void tst_QTextDocument::find()
|
||||||
|
Loading…
Reference in New Issue
Block a user