aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/searchtextlocator.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2023-04-30 18:31:18 -0400
committerLibravatarUnit 193 <unit193@unit193.net>2023-04-30 18:31:18 -0400
commit4de57f628bc74f00ba1885e91c84ea07c5405d8f (patch)
tree5d91900751e826d491ff1b2ebc571a787e84f864 /SQLiteStudio3/guiSQLiteStudio/searchtextlocator.cpp
parent74d881cefa9097e58e129e37b9c44d680d8c7dfe (diff)
parent3565aad630864ecdbe53fdaa501ea708555b3c7c (diff)
Update upstream source from tag 'upstream/3.4.4+dfsg'
Update to upstream version '3.4.4+dfsg' with Debian dir 482614bd23f0ef52dabc9803477204ad88e917ed
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/searchtextlocator.cpp')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/searchtextlocator.cpp41
1 files changed, 39 insertions, 2 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/searchtextlocator.cpp b/SQLiteStudio3/guiSQLiteStudio/searchtextlocator.cpp
index 7e5c2ec..ac93028 100644
--- a/SQLiteStudio3/guiSQLiteStudio/searchtextlocator.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/searchtextlocator.cpp
@@ -204,8 +204,45 @@ bool SearchTextLocator::replaceAndFind()
void SearchTextLocator::replaceAll()
{
- while (replaceAndFind())
- continue;
+ QString origContents = document->toPlainText();
+ QString contents = origContents;
+ Qt::CaseSensitivity cs = caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive;
+ int replLen = replaceString.length();
+ int diff = 0;
+ if (regularExpression)
+ {
+ QRegExp re(lookupString, cs);
+ contents.replace(re, replaceString);
+
+ int pos = 0;
+ while ((pos = re.indexIn(origContents, pos)) != -1 && pos < startPosition)
+ {
+ int len = re.matchedLength();
+ pos += len;
+ diff += (replLen - len);
+ }
+ }
+ else
+ {
+ contents.replace(lookupString, replaceString, cs);
+
+ int len = lookupString.length();
+ int singleDiff = (replLen - len);
+ int pos = 0;
+ while ((pos = origContents.indexOf(lookupString, pos, cs)) != -1 && pos < startPosition)
+ {
+ pos += len;
+ diff += singleDiff;
+ }
+ }
+ int newPos = startPosition + diff; // calculated before replacing contents to use original startPosition
+
+ QTextCursor cursor(document);
+ cursor.setPosition(0);
+ cursor.setPosition(origContents.length(), QTextCursor::KeepAnchor);
+ cursor.insertText(contents);
+
+ emit newCursorPositionAfterAllReplaced(newPos);
}
void SearchTextLocator::cursorMoved()