Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
PIM
KPimTextEdit
Commits
b9e618af
Commit
b9e618af
authored
Mar 07, 2022
by
Laurent Montel
😁
Browse files
Fix support for replaceAll
parent
81771f94
Pipeline
#146580
passed with stages
in 5 minutes and 59 seconds
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
src/texteditor/commonwidget/findutils.cpp
View file @
b9e618af
...
...
@@ -31,26 +31,54 @@ QTextDocument::FindFlags FindUtils::convertTextEditFindFlags(TextEditFindBarBase
return
flags
;
}
int
FindUtils
::
replaceAll
(
QTextEdit
*
view
,
const
QString
&
str
,
const
QString
&
replace
Widget
,
TextEditFindBarBase
::
FindFlags
searchOptions
)
int
FindUtils
::
replaceAll
(
QTextEdit
*
view
,
const
QString
&
str
,
const
QString
&
replace
Str
,
TextEditFindBarBase
::
FindFlags
searchOptions
)
{
auto
document
=
view
->
document
();
QTextCursor
c
(
document
);
c
.
beginEditBlock
();
int
count
=
0
;
// Ignoring FindBackward when replacing all
const
QTextDocument
::
FindFlags
flags
=
FindUtils
::
convertTextEditFindFlags
(
searchOptions
)
&
~
QTextDocument
::
FindBackward
;
while
(
!
c
.
isNull
())
{
c
=
document
->
find
(
str
,
c
,
flags
);
if
(
!
c
.
isNull
())
{
// find() selects found text, and insertText() replaces selection
c
.
insertText
(
replaceWidget
);
count
++
;
}
else
{
break
;
if
(
searchOptions
&
TextEditFindBarBase
::
FindFlag
::
FindRespectDiacritics
)
{
view
->
textCursor
().
beginEditBlock
();
QTextCursor
c
(
document
);
while
(
!
c
.
isNull
())
{
c
=
document
->
find
(
str
,
c
,
flags
);
if
(
!
c
.
isNull
())
{
// find() selects found text, and insertText() replaces selection
c
.
insertText
(
replaceStr
);
count
++
;
}
else
{
break
;
}
}
view
->
textCursor
().
endEditBlock
();
}
else
{
const
QString
toPlainTextWithoutRespectDiacritics
{
FindUtils
::
normalize
(
view
->
toPlainText
())};
const
QString
searchStrWithoutRespectDiacritics
{
FindUtils
::
normalize
(
str
)};
QTextDocument
documentWithoutRespectDiacritics
(
toPlainTextWithoutRespectDiacritics
);
QTextCursor
documentWithoutRespectDiacriticsTextCursor
(
&
documentWithoutRespectDiacritics
);
QTextCursor
docCusor
(
view
->
textCursor
());
documentWithoutRespectDiacriticsTextCursor
.
setPosition
(
0
);
view
->
textCursor
().
beginEditBlock
();
QTextCursor
c
(
document
);
while
(
!
documentWithoutRespectDiacriticsTextCursor
.
isNull
())
{
documentWithoutRespectDiacriticsTextCursor
=
documentWithoutRespectDiacritics
.
find
(
searchStrWithoutRespectDiacritics
,
documentWithoutRespectDiacriticsTextCursor
,
flags
);
if
(
!
documentWithoutRespectDiacriticsTextCursor
.
isNull
())
{
c
.
setPosition
(
documentWithoutRespectDiacriticsTextCursor
.
selectionStart
());
c
.
setPosition
(
documentWithoutRespectDiacriticsTextCursor
.
selectionEnd
(),
QTextCursor
::
KeepAnchor
);
// find() selects found text, and insertText() replaces selection
c
.
insertText
(
replaceStr
);
documentWithoutRespectDiacriticsTextCursor
.
insertText
(
replaceStr
);
count
++
;
}
else
{
break
;
}
}
view
->
textCursor
().
endEditBlock
();
}
c
.
endEditBlock
();
view
->
setTextCursor
(
c
);
return
count
;
}
...
...
@@ -81,18 +109,20 @@ int FindUtils::replaceAll(QPlainTextEdit *view, const QString &str, const QStrin
QTextDocument
documentWithoutRespectDiacritics
(
toPlainTextWithoutRespectDiacritics
);
QTextCursor
documentWithoutRespectDiacriticsTextCursor
(
&
documentWithoutRespectDiacritics
);
QTextCursor
docCusor
(
view
->
textCursor
());
documentWithoutRespectDiacriticsTextCursor
.
setPosition
(
docCusor
.
position
()
);
documentWithoutRespectDiacriticsTextCursor
.
setPosition
(
0
);
view
->
textCursor
().
beginEditBlock
();
QTextCursor
c
(
document
);
while
(
!
documentWithoutRespectDiacriticsTextCursor
.
isNull
())
{
documentWithoutRespectDiacriticsTextCursor
=
document
->
find
(
searchStrWithoutRespectDiacritics
,
documentWithoutRespectDiacriticsTextCursor
,
flags
);
documentWithoutRespectDiacriticsTextCursor
=
documentWithoutRespectDiacritics
.
find
(
searchStrWithoutRespectDiacritics
,
documentWithoutRespectDiacriticsTextCursor
,
flags
);
if
(
!
documentWithoutRespectDiacriticsTextCursor
.
isNull
())
{
c
.
setPosition
(
documentWithoutRespectDiacriticsTextCursor
.
selectionStart
());
c
.
setPosition
(
documentWithoutRespectDiacriticsTextCursor
.
selectionEnd
(),
QTextCursor
::
KeepAnchor
);
// find() selects found text, and insertText() replaces selection
c
.
insertText
(
replaceStr
);
documentWithoutRespectDiacriticsTextCursor
.
insertText
(
replaceStr
);
count
++
;
}
else
{
break
;
...
...
src/texteditor/plaintexteditor/autotests/plaintexteditfindbartest.cpp
View file @
b9e618af
...
...
@@ -122,6 +122,18 @@ void PlainTextEditFindBarTest::shouldReplaceAllText_data()
QTest
::
newRow
(
"wholewords-no-diacritics"
)
<<
QStringLiteral
(
"réunion reunion réunion"
)
<<
QStringLiteral
(
"réunion"
)
<<
QStringLiteral
(
"replace"
)
<<
flags
<<
3
<<
QStringLiteral
(
"replace replace replace"
);
}
{
KPIMTextEdit
::
TextEditFindBarBase
::
FindFlags
flags
;
flags
|=
KPIMTextEdit
::
TextEditFindBarBase
::
FindWholeWords
;
QTest
::
newRow
(
"wholewords-no-diacritics-2"
)
<<
QStringLiteral
(
"réunion réunion réunion"
)
<<
QStringLiteral
(
"réunion"
)
<<
QStringLiteral
(
"replace"
)
<<
flags
<<
3
<<
QStringLiteral
(
"replace replace replace"
);
}
{
KPIMTextEdit
::
TextEditFindBarBase
::
FindFlags
flags
;
flags
|=
KPIMTextEdit
::
TextEditFindBarBase
::
FindWholeWords
;
QTest
::
newRow
(
"wholewords-no-diacritics-2"
)
<<
QStringLiteral
(
"voiture voiture voiture"
)
<<
QStringLiteral
(
"réunion"
)
<<
QStringLiteral
(
"replace"
)
<<
flags
<<
0
<<
QStringLiteral
(
"voiture voiture voiture"
);
}
}
void
PlainTextEditFindBarTest
::
shouldReplaceAllText
()
...
...
src/texteditor/richtexteditor/autotests/richtexteditfindbartest.cpp
View file @
b9e618af
...
...
@@ -122,6 +122,18 @@ void RichTextEditFindBarTest::shouldReplaceAllText_data()
QTest
::
newRow
(
"wholewords-no-diacritics"
)
<<
QStringLiteral
(
"réunion reunion réunion"
)
<<
QStringLiteral
(
"réunion"
)
<<
QStringLiteral
(
"replace"
)
<<
flags
<<
3
<<
QStringLiteral
(
"replace replace replace"
);
}
{
KPIMTextEdit
::
TextEditFindBarBase
::
FindFlags
flags
;
flags
|=
KPIMTextEdit
::
TextEditFindBarBase
::
FindWholeWords
;
QTest
::
newRow
(
"wholewords-no-diacritics-2"
)
<<
QStringLiteral
(
"réunion réunion réunion"
)
<<
QStringLiteral
(
"réunion"
)
<<
QStringLiteral
(
"replace"
)
<<
flags
<<
3
<<
QStringLiteral
(
"replace replace replace"
);
}
{
KPIMTextEdit
::
TextEditFindBarBase
::
FindFlags
flags
;
flags
|=
KPIMTextEdit
::
TextEditFindBarBase
::
FindWholeWords
;
QTest
::
newRow
(
"wholewords-no-diacritics-2"
)
<<
QStringLiteral
(
"voiture voiture voiture"
)
<<
QStringLiteral
(
"réunion"
)
<<
QStringLiteral
(
"replace"
)
<<
flags
<<
0
<<
QStringLiteral
(
"voiture voiture voiture"
);
}
}
void
RichTextEditFindBarTest
::
shouldReplaceAllText
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment