editeng/inc/editdoc.hxx                   |    2 
 editeng/qa/lookuptree/lookuptree_test.cxx |   48 +++++++++---------
 editeng/source/editeng/editdoc.cxx        |   12 ++--
 editeng/source/editeng/impedit2.cxx       |    4 -
 editeng/source/editeng/impedit4.cxx       |    2 
 editeng/source/editeng/textconv.cxx       |    4 -
 editeng/source/editeng/textconv.hxx       |    2 
 editeng/source/lookuptree/Trie.cxx        |   14 ++---
 editeng/source/misc/splwrap.cxx           |    4 -
 editeng/source/misc/svxacorr.cxx          |   77 +++++++++++++++---------------
 include/editeng/Trie.hxx                  |    5 +
 include/editeng/splwrap.hxx               |    2 
 include/editeng/svxacorr.hxx              |    8 +--
 sw/inc/acmplwrd.hxx                       |    2 
 sw/source/core/doc/acmplwrd.cxx           |    4 -
 15 files changed, 96 insertions(+), 94 deletions(-)

New commits:
commit f41868a5dcdb1982c1e3064dd985d894eaba0074
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Sep 21 11:23:39 2022 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Wed Sep 21 18:29:54 2022 +0200

    use more string_view in editeng
    
    Change-Id: I7e434076750ebdf4aeee621151fbe6dfc929c60f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140337
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/editeng/inc/editdoc.hxx b/editeng/inc/editdoc.hxx
index 25a3dca4b1fc..2a7aa0128423 100644
--- a/editeng/inc/editdoc.hxx
+++ b/editeng/inc/editdoc.hxx
@@ -773,7 +773,7 @@ public:
     EditPaM         Clear();
     EditPaM         RemoveText();
     void            RemoveChars( EditPaM aPaM, sal_Int32 nChars );
-    EditPaM         InsertText( EditPaM aPaM, const OUString& rStr );
+    EditPaM         InsertText( EditPaM aPaM, std::u16string_view rStr );
     EditPaM         InsertParaBreak( EditPaM aPaM, bool bKeepEndingAttribs );
     EditPaM         InsertFeature( EditPaM aPaM, const SfxPoolItem& rItem );
     EditPaM         ConnectParagraphs( ContentNode* pLeft, ContentNode* pRight 
);
diff --git a/editeng/qa/lookuptree/lookuptree_test.cxx 
b/editeng/qa/lookuptree/lookuptree_test.cxx
index 7d5e9647b00c..486c871ca09f 100644
--- a/editeng/qa/lookuptree/lookuptree_test.cxx
+++ b/editeng/qa/lookuptree/lookuptree_test.cxx
@@ -44,69 +44,69 @@ void LookupTreeTest::testTrie()
     editeng::Trie trie;
     std::vector<OUString> suggestions;
 
-    trie.findSuggestions( OUString(), suggestions);
+    trie.findSuggestions( u"", suggestions);
     CPPUNIT_ASSERT_EQUAL( size_t(0), suggestions.size() );
 
-    trie.insert( OUString() );
-    trie.findSuggestions( OUString(), suggestions);
+    trie.insert( u"" );
+    trie.findSuggestions( u"", suggestions);
     CPPUNIT_ASSERT_EQUAL( size_t(0), suggestions.size() );
 
-    trie.findSuggestions( "a", suggestions);
+    trie.findSuggestions( u"a", suggestions);
     CPPUNIT_ASSERT_EQUAL( size_t(0), suggestions.size() );
 
-    trie.insert( "abc" );
-    trie.insert( "abcdefghijklmnopqrstuvwxyz" );
-    trie.findSuggestions( "a", suggestions);
+    trie.insert( u"abc" );
+    trie.insert( u"abcdefghijklmnopqrstuvwxyz" );
+    trie.findSuggestions( u"a", suggestions);
     CPPUNIT_ASSERT_EQUAL( size_t(2), suggestions.size() );
     CPPUNIT_ASSERT_EQUAL( OUString("abc"), suggestions[0] );
     CPPUNIT_ASSERT_EQUAL( OUString("abcdefghijklmnopqrstuvwxyz"), 
suggestions[1] );
     suggestions.clear();
 
-    trie.findSuggestions( "abc", suggestions);
+    trie.findSuggestions( u"abc", suggestions);
     CPPUNIT_ASSERT_EQUAL( size_t(1), suggestions.size() );
     CPPUNIT_ASSERT_EQUAL( OUString("abcdefghijklmnopqrstuvwxyz"), 
suggestions[0] );
     suggestions.clear();
 
-    trie.findSuggestions( "abe", suggestions);
+    trie.findSuggestions( u"abe", suggestions);
     CPPUNIT_ASSERT_EQUAL( size_t(0), suggestions.size() );
     suggestions.clear();
 
-    trie.insert( "abe" );
-    trie.findSuggestions( "", suggestions);
+    trie.insert( u"abe" );
+    trie.findSuggestions( u"", suggestions);
     CPPUNIT_ASSERT_EQUAL( size_t(3), suggestions.size() );
     CPPUNIT_ASSERT_EQUAL( OUString("abc"), suggestions[0] );
     CPPUNIT_ASSERT_EQUAL( OUString("abcdefghijklmnopqrstuvwxyz"), 
suggestions[1] );
     CPPUNIT_ASSERT_EQUAL( OUString("abe"), suggestions[2] );
     suggestions.clear();
 
-    trie.insert( "H31l0" );
-    trie.findSuggestions( "H", suggestions);
+    trie.insert( u"H31l0" );
+    trie.findSuggestions( u"H", suggestions);
 
     CPPUNIT_ASSERT_EQUAL( size_t(1), suggestions.size() );
     CPPUNIT_ASSERT_EQUAL( OUString("H31l0"), suggestions[0] );
     suggestions.clear();
 
-    trie.insert( "H1" );
-    trie.findSuggestions( "H", suggestions);
+    trie.insert( u"H1" );
+    trie.findSuggestions( u"H", suggestions);
     CPPUNIT_ASSERT_EQUAL( size_t(2), suggestions.size() );
     CPPUNIT_ASSERT_EQUAL( OUString("H31l0"), suggestions[0] );
     CPPUNIT_ASSERT_EQUAL( OUString("H1"), suggestions[1] );
     suggestions.clear();
 
-    trie.findSuggestions( "H3", suggestions);
+    trie.findSuggestions( u"H3", suggestions);
     CPPUNIT_ASSERT_EQUAL( size_t(1), suggestions.size() );
     CPPUNIT_ASSERT_EQUAL( OUString("H31l0"), suggestions[0] );
     suggestions.clear();
 
     trie.insert( OStringToOUString( "H\xC3\xA4llo", RTL_TEXTENCODING_UTF8 ) );
-    trie.findSuggestions( "H", suggestions );
+    trie.findSuggestions( u"H", suggestions );
     CPPUNIT_ASSERT_EQUAL( size_t(3), suggestions.size() );
     CPPUNIT_ASSERT_EQUAL( OUString("H31l0"), suggestions[0] );
     CPPUNIT_ASSERT_EQUAL( OUString("H1"), suggestions[1] );
     CPPUNIT_ASSERT_EQUAL( OStringToOUString( "H\xC3\xA4llo", 
RTL_TEXTENCODING_UTF8 ), suggestions[2] );
     suggestions.clear();
 
-    trie.findSuggestions( "H3", suggestions );
+    trie.findSuggestions( u"H3", suggestions );
     CPPUNIT_ASSERT_EQUAL( size_t(1), suggestions.size() );
     CPPUNIT_ASSERT_EQUAL( OUString("H31l0"), suggestions[0] );
     suggestions.clear();
@@ -116,7 +116,7 @@ void LookupTreeTest::testTrie()
     CPPUNIT_ASSERT_EQUAL( OStringToOUString("H\xC3\xA4llo", 
RTL_TEXTENCODING_UTF8), suggestions[0] );
     suggestions.clear();
 
-    trie.findSuggestions( "", suggestions);
+    trie.findSuggestions( u"", suggestions);
     CPPUNIT_ASSERT_EQUAL( size_t(6), suggestions.size() );
     suggestions.clear();
 }
@@ -127,15 +127,15 @@ void LookupTreeTest::testTrieGetAllEntries()
 
     CPPUNIT_ASSERT_EQUAL( size_t(0), trie.size() );
 
-    trie.insert("A");
+    trie.insert(u"A");
     CPPUNIT_ASSERT_EQUAL( size_t(1), trie.size() );
 
-    trie.insert("B");
-    trie.insert("C");
+    trie.insert(u"B");
+    trie.insert(u"C");
     CPPUNIT_ASSERT_EQUAL( size_t(3), trie.size() );
 
-    trie.insert("AA");
-    trie.insert("AAA");
+    trie.insert(u"AA");
+    trie.insert(u"AAA");
     CPPUNIT_ASSERT_EQUAL( size_t(5), trie.size() );
 }
 
diff --git a/editeng/source/editeng/editdoc.cxx 
b/editeng/source/editeng/editdoc.cxx
index c3777f111783..108230a1666d 100644
--- a/editeng/source/editeng/editdoc.cxx
+++ b/editeng/source/editeng/editdoc.cxx
@@ -2254,16 +2254,16 @@ EditPaM EditDoc::RemoveText()
     return EditPaM( pNode, 0 );
 }
 
-EditPaM EditDoc::InsertText( EditPaM aPaM, const OUString& rStr )
+EditPaM EditDoc::InsertText( EditPaM aPaM, std::u16string_view rStr )
 {
-    DBG_ASSERT( rStr.indexOf( 0x0A ) == -1, "EditDoc::InsertText: Newlines 
prohibited in paragraph!" );
-    DBG_ASSERT( rStr.indexOf( 0x0D ) == -1, "EditDoc::InsertText: Newlines 
prohibited in paragraph!" );
-    DBG_ASSERT( rStr.indexOf( '\t' ) == -1, "EditDoc::InsertText: Newlines 
prohibited in paragraph!" );
+    DBG_ASSERT( rStr.find( 0x0A ) == std::u16string_view::npos, 
"EditDoc::InsertText: Newlines prohibited in paragraph!" );
+    DBG_ASSERT( rStr.find( 0x0D ) == std::u16string_view::npos, 
"EditDoc::InsertText: Newlines prohibited in paragraph!" );
+    DBG_ASSERT( rStr.find( '\t' ) == std::u16string_view::npos, 
"EditDoc::InsertText: Newlines prohibited in paragraph!" );
     assert(aPaM.GetNode());
 
     aPaM.GetNode()->Insert( rStr, aPaM.GetIndex() );
-    aPaM.GetNode()->ExpandAttribs( aPaM.GetIndex(), rStr.getLength(), 
GetItemPool() );
-    aPaM.SetIndex( aPaM.GetIndex() + rStr.getLength() );
+    aPaM.GetNode()->ExpandAttribs( aPaM.GetIndex(), rStr.size(), GetItemPool() 
);
+    aPaM.SetIndex( aPaM.GetIndex() + rStr.size() );
 
     SetModified( true );
 
diff --git a/editeng/source/editeng/impedit2.cxx 
b/editeng/source/editeng/impedit2.cxx
index 19b6c72e0536..455587bac4a6 100644
--- a/editeng/source/editeng/impedit2.cxx
+++ b/editeng/source/editeng/impedit2.cxx
@@ -2687,7 +2687,7 @@ EditPaM ImpEditEngine::InsertTextUserInput( const 
EditSelection& rCurSel,
             InsertUndo( std::move(pNewUndo), bTryMerge );
         }
 
-        aEditDoc.InsertText( aPaM, OUString(c) );
+        aEditDoc.InsertText( aPaM, OUStringChar(c) );
         ParaPortion* pPortion = FindParaPortion( aPaM.GetNode() );
         assert(pPortion);
         pPortion->MarkInvalid( aPaM.GetIndex(), 1 );
@@ -2813,7 +2813,7 @@ EditPaM ImpEditEngine::ImpInsertText(const EditSelection& 
aCurSel, const OUStrin
                         nEnd2 = aLine.getLength();    // not dereference!
 
                     if ( nEnd2 > nStart2 )
-                        aPaM = aEditDoc.InsertText( aPaM, aLine.copy( nStart2, 
nEnd2-nStart2 ) );
+                        aPaM = aEditDoc.InsertText( aPaM, aLine.subView( 
nStart2, nEnd2-nStart2 ) );
                     if ( nEnd2 < aLine.getLength() )
                     {
                         aPaM = aEditDoc.InsertFeature( aPaM, aTabItem );
diff --git a/editeng/source/editeng/impedit4.cxx 
b/editeng/source/editeng/impedit4.cxx
index 9b1ec896612a..ee9ebe89ff2e 100644
--- a/editeng/source/editeng/impedit4.cxx
+++ b/editeng/source/editeng/impedit4.cxx
@@ -3030,7 +3030,7 @@ short ImpEditEngine::ReplaceTextOnly(
         else
         {
             DBG_ASSERT( nDiff == 1, "TransliterateText - Diff other than 
expected! But should work..." );
-            GetEditDoc().InsertText( EditPaM( pNode, nCurrentPos ), 
OUString(rNewText[n]) );
+            GetEditDoc().InsertText( EditPaM( pNode, nCurrentPos ), 
OUStringChar(rNewText[n]) );
 
         }
         nDiffs = sal::static_int_cast< short >(nDiffs + nDiff);
diff --git a/editeng/source/editeng/textconv.cxx 
b/editeng/source/editeng/textconv.cxx
index a4d5386ea18e..e97be254d6d3 100644
--- a/editeng/source/editeng/textconv.cxx
+++ b/editeng/source/editeng/textconv.cxx
@@ -401,7 +401,7 @@ void TextConvWrapper::ReplaceUnit(
 
 
 void TextConvWrapper::ChangeText( const OUString &rNewText,
-        const OUString& rOrigText,
+        std::u16string_view rOrigText,
         const uno::Sequence< sal_Int32 > *pOffsets,
         ESelection *pESelection )
 {
@@ -443,7 +443,7 @@ void TextConvWrapper::ChangeText( const OUString &rNewText,
             else
             {
                 nPos   = nConvTextLen;
-                nIndex = rOrigText.getLength();
+                nIndex = rOrigText.size();
             }
 
             // end of string also terminates non-matching char sequence
diff --git a/editeng/source/editeng/textconv.hxx 
b/editeng/source/editeng/textconv.hxx
index 6afb20acf966..96525a98f530 100644
--- a/editeng/source/editeng/textconv.hxx
+++ b/editeng/source/editeng/textconv.hxx
@@ -61,7 +61,7 @@ class TextConvWrapper final : public 
editeng::HangulHanjaConversion
                                     const sal_Int32 nUnitEnd );
 
     void        ChangeText( const OUString &rNewText,
-                            const OUString& rOrigText,
+                            std::u16string_view rOrigText,
                             const css::uno::Sequence< sal_Int32 > *pOffsets,
                             ESelection *pESelection );
     void        ChangeText_impl( const OUString &rNewText, bool 
bKeepAttributes );
diff --git a/editeng/source/lookuptree/Trie.cxx 
b/editeng/source/lookuptree/Trie.cxx
index c994fa7cfb42..d4d3263c72cd 100644
--- a/editeng/source/lookuptree/Trie.cxx
+++ b/editeng/source/lookuptree/Trie.cxx
@@ -31,7 +31,7 @@ struct TrieNode final
 
     void      markWord();
     TrieNode* findChild(sal_Unicode aCharacter);
-    TrieNode* traversePath(const OUString& sPath);
+    TrieNode* traversePath(std::u16string_view sPath);
     void      addNewChild(TrieNode* pChild);
     void      collectSuggestions(std::u16string_view sPath, 
std::vector<OUString>& rSuggestionList);
     static void  collectSuggestionsForCurrentNode(TrieNode* pCurrent, 
std::u16string_view sPath, std::vector<OUString>& rSuggestionList);
@@ -110,11 +110,11 @@ void TrieNode::collectSuggestionsForCurrentNode(TrieNode* 
pCurrent, std::u16stri
     pCurrent->collectSuggestions(aStringPath, rSuggestionList);
 }
 
-TrieNode* TrieNode::traversePath(const OUString& sPath)
+TrieNode* TrieNode::traversePath(std::u16string_view sPath)
 {
     TrieNode* pCurrent = this;
 
-    for ( sal_Int32 i = 0; i < sPath.getLength(); i++ )
+    for ( size_t i = 0; i < sPath.size(); i++ )
     {
         sal_Unicode aCurrentChar = sPath[i];
         pCurrent = pCurrent->findChild(aCurrentChar);
@@ -134,10 +134,10 @@ Trie::Trie() :
 Trie::~Trie()
 {}
 
-void Trie::insert(const OUString& sInputString) const
+void Trie::insert(std::u16string_view sInputString) const
 {
     // adding an empty word is not allowed
-    if ( sInputString.isEmpty() )
+    if ( sInputString.empty() )
     {
         return;
     }
@@ -147,7 +147,7 @@ void Trie::insert(const OUString& sInputString) const
     TrieNode* pCurrent = mRoot.get();
     sal_Unicode aCurrentChar;
 
-    for ( sal_Int32 i = 0; i < sInputString.getLength(); i++ )
+    for ( size_t i = 0; i < sInputString.size(); i++ )
     {
         aCurrentChar = sInputString[i];
         TrieNode* pChild = pCurrent->findChild(aCurrentChar);
@@ -166,7 +166,7 @@ void Trie::insert(const OUString& sInputString) const
     pCurrent->markWord();
 }
 
-void Trie::findSuggestions(const OUString& sWordPart, std::vector<OUString>& 
rSuggestionList) const
+void Trie::findSuggestions(std::u16string_view sWordPart, 
std::vector<OUString>& rSuggestionList) const
 {
     TrieNode* pNode = mRoot->traversePath(sWordPart);
 
diff --git a/editeng/source/misc/splwrap.cxx b/editeng/source/misc/splwrap.cxx
index 134c7211f1a3..99658aad39b8 100644
--- a/editeng/source/misc/splwrap.cxx
+++ b/editeng/source/misc/splwrap.cxx
@@ -52,7 +52,7 @@ using namespace ::com::sun::star::linguistic2;
 
 // misc functions ---------------------------------------------
 
-void SvxPrepareAutoCorrect( OUString &rOldText, const OUString &rNewText )
+void SvxPrepareAutoCorrect( OUString &rOldText, std::u16string_view rNewText )
 {
     // This function should be used to strip (or add) trailing '.' from
     // the strings before passing them on to the autocorrect function in
@@ -64,7 +64,7 @@ void SvxPrepareAutoCorrect( OUString &rOldText, const 
OUString &rNewText )
     // rNewText: replacement text
 
     sal_Int32 nOldLen = rOldText.getLength();
-    sal_Int32 nNewLen = rNewText.getLength();
+    sal_Int32 nNewLen = rNewText.size();
     if (nOldLen && nNewLen)
     {
         bool bOldHasDot = '.' == rOldText[ nOldLen - 1 ],
diff --git a/editeng/source/misc/svxacorr.cxx b/editeng/source/misc/svxacorr.cxx
index bdfc4708f19d..cf5d7474e49d 100644
--- a/editeng/source/misc/svxacorr.cxx
+++ b/editeng/source/misc/svxacorr.cxx
@@ -106,7 +106,7 @@ const char
     /* also at these ends - Brackets and all kinds of begin characters */
     sImplEndSkipChars[] = "\"\')]}\x83\x84\x89\x91\x92\x93\x94";
 
-static OUString EncryptBlockName_Imp(const OUString& rName);
+static OUString EncryptBlockName_Imp(std::u16string_view rName);
 
 static bool NonFieldWordDelim( const sal_Unicode c )
 {
@@ -651,7 +651,7 @@ bool SvxAutoCorrect::FnChgToEnEmDash(
 
 // Add non-breaking space before specific punctuation marks in French text
 bool SvxAutoCorrect::FnAddNonBrkSpace(
-                                SvxAutoCorrDoc& rDoc, const OUString& rTxt,
+                                SvxAutoCorrDoc& rDoc, std::u16string_view rTxt,
                                 sal_Int32 nEndPos,
                                 LanguageType eLang, bool& io_bNbspRunNext )
 {
@@ -684,17 +684,17 @@ bool SvxAutoCorrect::FnAddNonBrkSpace(
 
             //See if the text is the start of a protocol string, e.g. have 
text of
             //"http" see if it is the start of "http:" and if so leave it alone
-            sal_Int32 nIndex = nSttWdPos + (bWasWordDelim ? 1 : 0);
-            sal_Int32 nProtocolLen = nEndPos - nSttWdPos + 1;
-            if (nIndex + nProtocolLen <= rTxt.getLength())
+            size_t nIndex = nSttWdPos + (bWasWordDelim ? 1 : 0);
+            size_t nProtocolLen = nEndPos - nSttWdPos + 1;
+            if (nIndex + nProtocolLen <= rTxt.size())
             {
-                if (INetURLObject::CompareProtocolScheme(rTxt.subView(nIndex, 
nProtocolLen)) != INetProtocol::NotValid)
+                if (INetURLObject::CompareProtocolScheme(rTxt.substr(nIndex, 
nProtocolLen)) != INetProtocol::NotValid)
                     return false;
             }
 
             // Check the presence of "://" in the word
-            sal_Int32 nStrPos = rTxt.indexOf( "://", nSttWdPos + 1 );
-            if ( nStrPos == -1 && nEndPos > 0 )
+            size_t nStrPos = rTxt.find( u"://", nSttWdPos + 1 );
+            if ( nStrPos == std::u16string_view::npos && nEndPos > 0 )
             {
                 // Check the previous char
                 sal_Unicode cPrevChar = rTxt[ nEndPos - 1 ];
@@ -723,7 +723,7 @@ bool SvxAutoCorrect::FnAddNonBrkSpace(
                     io_bNbspRunNext = true;
             }
         }
-        else if ( cChar == '/' && nEndPos > 1 && rTxt.getLength() > (nEndPos - 
1) )
+        else if ( cChar == '/' && nEndPos > 1 && 
static_cast<sal_Int32>(rTxt.size()) > (nEndPos - 1) )
         {
             // Remove the hardspace right before to avoid formatting URLs
             sal_Unicode cPrevChar = rTxt[ nEndPos - 1 ];
@@ -1876,11 +1876,11 @@ bool SvxAutoCorrect::PutText( const css::uno::Reference 
< css::embed::XStorage >
     return false;
 }
 
-OUString EncryptBlockName_Imp(const OUString& rName)
+OUString EncryptBlockName_Imp(std::u16string_view rName)
 {
     OUStringBuffer aName;
     aName.append('#').append(rName);
-    for (sal_Int32 nLen = rName.getLength(), nPos = 1; nPos < nLen; ++nPos)
+    for (size_t nLen = rName.size(), nPos = 1; nPos < nLen; ++nPos)
     {
         if (lcl_IsInAsciiArr( "!/:.\\", aName[nPos]))
             aName[nPos] &= 0x0f;
@@ -1914,7 +1914,7 @@ static void GeneratePackageName ( std::u16string_view 
rShort, OUString& rPackage
 }
 
 static const SvxAutocorrWord* lcl_SearchWordsInList(
-                SvxAutoCorrectLanguageLists* pList, const OUString& rTxt,
+                SvxAutoCorrectLanguageLists* pList, std::u16string_view rTxt,
                 sal_Int32& rStt, sal_Int32 nEndPos)
 {
     const SvxAutocorrWordList* pAutoCorrWordList = 
pList->GetAutocorrWordList();
@@ -1923,7 +1923,7 @@ static const SvxAutocorrWord* lcl_SearchWordsInList(
 
 // the search for the words in the substitution table
 const SvxAutocorrWord* SvxAutoCorrect::SearchWordsInList(
-                const OUString& rTxt, sal_Int32& rStt, sal_Int32 nEndPos,
+                std::u16string_view rTxt, sal_Int32& rStt, sal_Int32 nEndPos,
                 SvxAutoCorrDoc&, LanguageTag& rLang )
 {
     const SvxAutocorrWord* pRet = nullptr;
@@ -2932,7 +2932,7 @@ const SvxAutocorrWordList::AutocorrWordSetType& 
SvxAutocorrWordList::getSortedCo
 }
 
 const SvxAutocorrWord* SvxAutocorrWordList::WordMatches(const SvxAutocorrWord 
*pFnd,
-                                      const OUString &rTxt,
+                                      std::u16string_view rTxt,
                                       sal_Int32 &rStt,
                                       sal_Int32 nEndPos) const
 {
@@ -2940,10 +2940,11 @@ const SvxAutocorrWord* 
SvxAutocorrWordList::WordMatches(const SvxAutocorrWord *p
 
     sal_Int32 left_wildcard = rChk.startsWith( ".*" ) ? 2 : 0; // ".*word" 
pattern?
     sal_Int32 right_wildcard = rChk.endsWith( ".*" ) ? 2 : 0; // "word.*" 
pattern?
-    sal_Int32 nSttWdPos = nEndPos;
+    assert(nEndPos >= 0);
+    size_t nSttWdPos = nEndPos;
 
     // direct replacement of keywords surrounded by colons (for example, 
":name:")
-    bool bColonNameColon = rTxt.getLength() > nEndPos &&
+    bool bColonNameColon = static_cast<sal_Int32>(rTxt.size()) > nEndPos &&
         rTxt[nEndPos] == ':' && rChk[0] == ':' && rChk.endsWith(":");
     if ( nEndPos + (bColonNameColon ? 1 : 0) < rChk.getLength() - 
left_wildcard - right_wildcard )
         return nullptr;
@@ -2957,14 +2958,14 @@ const SvxAutocorrWord* 
SvxAutocorrWordList::WordMatches(const SvxAutocorrWord *p
             IsWordDelim( rTxt[ nCalcStt - 1 ] ))) )
     {
         TransliterationWrapper& rCmp = GetIgnoreTranslWrapper();
-        OUString sWord = rTxt.copy(nCalcStt, rChk.getLength() - left_wildcard);
+        OUString sWord( rTxt.substr(nCalcStt, rChk.getLength() - 
left_wildcard) );
         if( (!left_wildcard && rCmp.isEqual( rChk, sWord )) || (left_wildcard 
&& rCmp.isEqual( rChk.copy(left_wildcard), sWord) ))
         {
             rStt = nCalcStt;
             if (!left_wildcard)
             {
                 // fdo#33899 avoid "1/2", "1/3".. to be replaced by fractions 
in dates, eg. 1/2/14
-                if (rTxt.getLength() > nEndPos && rTxt[nEndPos] == '/' && 
rChk.indexOf('/') != -1)
+                if (static_cast<sal_Int32>(rTxt.size()) > nEndPos && 
rTxt[nEndPos] == '/' && rChk.indexOf('/') != -1)
                     return nullptr;
                 return pFnd;
             }
@@ -2972,10 +2973,10 @@ const SvxAutocorrWord* 
SvxAutocorrWordList::WordMatches(const SvxAutocorrWord *p
             while( rStt && !(bWasWordDelim = IsWordDelim( rTxt[ --rStt ])))
                 ;
             if (bWasWordDelim) rStt++;
-            OUString left_pattern = rTxt.copy(rStt, nEndPos - rStt - 
rChk.getLength() + left_wildcard);
+            OUString left_pattern( rTxt.substr(rStt, nEndPos - rStt - 
rChk.getLength() + left_wildcard) );
             // avoid double spaces before simple "word" replacement
             left_pattern += (left_pattern.getLength() == 0 && 
pFnd->GetLong()[0] == 0x20) ? pFnd->GetLong().subView(1) : pFnd->GetLong();
-            if( const SvxAutocorrWord* pNew = Insert( 
SvxAutocorrWord(rTxt.copy(rStt, nEndPos - rStt), left_pattern) ) )
+            if( const SvxAutocorrWord* pNew = Insert( 
SvxAutocorrWord(OUString(rTxt.substr(rStt, nEndPos - rStt)), left_pattern) ) )
                 return pNew;
         }
     } else
@@ -2990,17 +2991,17 @@ const SvxAutocorrWord* 
SvxAutocorrWordList::WordMatches(const SvxAutocorrWord *p
         while( nSttWdPos && !(bWasWordDelim = IsWordDelim( rTxt[ --nSttWdPos 
])))
             ;
         // search the first occurrence (with a left word delimitation, if 
needed)
-        sal_Int32 nFndPos = -1;
+        size_t nFndPos = std::u16string_view::npos;
         do {
-            nFndPos = rTxt.indexOf( sTmp, nFndPos + 1);
-            if (nFndPos == -1)
+            nFndPos = rTxt.find( sTmp, nFndPos + 1);
+            if (nFndPos == std::u16string_view::npos)
                 break;
             not_suffix = bWasWordDelim && (nSttWdPos >= (nFndPos + 
sTmp.getLength()));
         } while ( (!left_wildcard && nFndPos && !IsWordDelim( rTxt[ nFndPos - 
1 ])) || not_suffix );
 
-        if ( nFndPos != -1 )
+        if ( nFndPos != std::u16string_view::npos )
         {
-            sal_Int32 extra_repl = nFndPos + sTmp.getLength() > nEndPos ? 1: 
0; // for patterns with terminating characters, eg. "a:"
+            sal_Int32 extra_repl = static_cast<sal_Int32>(nFndPos) + 
sTmp.getLength() > nEndPos ? 1: 0; // for patterns with terminating characters, 
eg. "a:"
 
             if ( left_wildcard )
             {
@@ -3009,41 +3010,41 @@ const SvxAutocorrWord* 
SvxAutocorrWordList::WordMatches(const SvxAutocorrWord *p
                     ;
                 if (bWasWordDelim) nFndPos++;
             }
-            if (nEndPos + extra_repl <= nFndPos)
+            if (nEndPos + extra_repl <= static_cast<sal_Int32>(nFndPos))
             {
                 return nullptr;
             }
             // store matching pattern and its replacement as a new list item, 
eg. "i18ns" -> "internationalizations"
-            OUString aShort = rTxt.copy(nFndPos, nEndPos - nFndPos + 
extra_repl);
+            OUString aShort( rTxt.substr(nFndPos, nEndPos - nFndPos + 
extra_repl) );
 
             OUString aLong;
             rStt = nFndPos;
             if ( !left_wildcard )
             {
                 sal_Int32 siz = nEndPos - nFndPos - sTmp.getLength();
-                aLong = pFnd->GetLong() + (siz > 0 ? rTxt.subView(nFndPos + 
sTmp.getLength(), siz) : u"");
+                aLong = pFnd->GetLong() + (siz > 0 ? rTxt.substr(nFndPos + 
sTmp.getLength(), siz) : u"");
             } else {
                 OUStringBuffer buf;
                 do {
-                    nSttWdPos = rTxt.indexOf( sTmp, nFndPos);
-                    if (nSttWdPos != -1)
+                    nSttWdPos = rTxt.find( sTmp, nFndPos);
+                    if (nSttWdPos != std::u16string_view::npos)
                     {
                         sal_Int32 nTmp(nFndPos);
-                        while (nTmp < nSttWdPos && !IsWordDelim(rTxt[nTmp]))
+                        while (nTmp < static_cast<sal_Int32>(nSttWdPos) && 
!IsWordDelim(rTxt[nTmp]))
                             nTmp++;
-                        if (nTmp < nSttWdPos)
+                        if (nTmp < static_cast<sal_Int32>(nSttWdPos))
                             break; // word delimiter found
-                        buf.append(rTxt.subView(nFndPos, nSttWdPos - 
nFndPos)).append(pFnd->GetLong());
+                        buf.append(rTxt.substr(nFndPos, nSttWdPos - 
nFndPos)).append(pFnd->GetLong());
                         nFndPos = nSttWdPos + sTmp.getLength();
                     }
-                } while (nSttWdPos != -1);
-                if (nEndPos - nFndPos > extra_repl)
-                    buf.append(rTxt.subView(nFndPos, nEndPos - nFndPos));
+                } while (nSttWdPos != std::u16string_view::npos);
+                if (static_cast<sal_Int32>(nEndPos - nFndPos) > extra_repl)
+                    buf.append(rTxt.substr(nFndPos, nEndPos - nFndPos));
                 aLong = buf.makeStringAndClear();
             }
             if ( const SvxAutocorrWord* pNew = Insert( SvxAutocorrWord(aShort, 
aLong) ) )
             {
-                if ( (rTxt.getLength() > nEndPos && 
IsWordDelim(rTxt[nEndPos])) || rTxt.getLength() == nEndPos )
+                if ( (static_cast<sal_Int32>(rTxt.size()) > nEndPos && 
IsWordDelim(rTxt[nEndPos])) || static_cast<sal_Int32>(rTxt.size()) == nEndPos )
                     return pNew;
             }
         }
@@ -3051,7 +3052,7 @@ const SvxAutocorrWord* 
SvxAutocorrWordList::WordMatches(const SvxAutocorrWord *p
     return nullptr;
 }
 
-const SvxAutocorrWord* SvxAutocorrWordList::SearchWordsInList(const OUString& 
rTxt, sal_Int32& rStt,
+const SvxAutocorrWord* 
SvxAutocorrWordList::SearchWordsInList(std::u16string_view rTxt, sal_Int32& 
rStt,
                                                               sal_Int32 
nEndPos) const
 {
     for (auto const& elem : mpImpl->maHash)
diff --git a/include/editeng/Trie.hxx b/include/editeng/Trie.hxx
index e6ee659c3c99..21f234103d55 100644
--- a/include/editeng/Trie.hxx
+++ b/include/editeng/Trie.hxx
@@ -28,8 +28,9 @@ public:
     Trie();
     ~Trie();
 
-    void insert(const OUString& sInputString) const;
-    void findSuggestions(const OUString& sWordPart, std::vector<OUString>& 
rSuggestionList) const;
+    void insert(std::u16string_view sInputString) const;
+    void findSuggestions(std::u16string_view sWordPart,
+                         std::vector<OUString>& rSuggestionList) const;
     size_t size() const;
 };
 }
diff --git a/include/editeng/splwrap.hxx b/include/editeng/splwrap.hxx
index 79d55d179be1..8f8ea9c8f4be 100644
--- a/include/editeng/splwrap.hxx
+++ b/include/editeng/splwrap.hxx
@@ -36,7 +36,7 @@ namespace com::sun::star::linguistic2 {
 
 // misc functions 
---------------------------------------------------------------
 
-void EDITENG_DLLPUBLIC SvxPrepareAutoCorrect( OUString &rOldText, const 
OUString &rNewText );
+void EDITENG_DLLPUBLIC SvxPrepareAutoCorrect( OUString &rOldText, 
std::u16string_view rNewText );
 
 /*--------------------------------------------------------------------
      Description: The SpellWrapper
diff --git a/include/editeng/svxacorr.hxx b/include/editeng/svxacorr.hxx
index d3d7aacbd0a9..39a3d4c65f81 100644
--- a/include/editeng/svxacorr.hxx
+++ b/include/editeng/svxacorr.hxx
@@ -162,7 +162,7 @@ class EDITENG_DLLPUBLIC SvxAutocorrWordList
     const SvxAutocorrWordList& operator= ( const SvxAutocorrWordList& ) = 
delete;
 
     const SvxAutocorrWord* WordMatches(const SvxAutocorrWord *pFnd,
-                                       const OUString &rTxt,
+                                       std::u16string_view rTxt,
                                        sal_Int32 &rStt,
                                        sal_Int32 nEndPos) const;
 public:
@@ -179,7 +179,7 @@ public:
     typedef std::vector<SvxAutocorrWord> AutocorrWordSetType;
     const AutocorrWordSetType & getSortedContent() const;
 
-    const SvxAutocorrWord* SearchWordsInList(const OUString& rTxt, sal_Int32& 
rStt, sal_Int32 nEndPos) const;
+    const SvxAutocorrWord* SearchWordsInList(std::u16string_view rTxt, 
sal_Int32& rStt, sal_Int32 nEndPos) const;
 };
 
 class EDITENG_DLLPUBLIC SvxAutoCorrectLanguageLists
@@ -321,7 +321,7 @@ public:
     // nEnd - to check position - as of this item forward
     // rLang - Input: in which language is searched
     //         Output: in which "language list" was it found
-    const SvxAutocorrWord* SearchWordsInList( const OUString& rTxt,
+    const SvxAutocorrWord* SearchWordsInList( std::u16string_view rTxt,
                                     sal_Int32& rStt, sal_Int32 nEndPos,
                                     SvxAutoCorrDoc& rDoc,
                                     LanguageTag& rLang );
@@ -410,7 +410,7 @@ public:
     bool FnChgToEnEmDash( SvxAutoCorrDoc&, std::u16string_view,
                                 sal_Int32 nSttPos, sal_Int32 nEndPos,
                                 LanguageType eLang );
-    bool FnAddNonBrkSpace( SvxAutoCorrDoc&, const OUString&,
+    bool FnAddNonBrkSpace( SvxAutoCorrDoc&, std::u16string_view,
                                 sal_Int32 nEndPos,
                                 LanguageType eLang, bool& io_bNbspRunNext );
     bool FnSetINetAttr( SvxAutoCorrDoc&, const OUString&,
diff --git a/sw/inc/acmplwrd.hxx b/sw/inc/acmplwrd.hxx
index 78b62b4be607..935a92076ef9 100644
--- a/sw/inc/acmplwrd.hxx
+++ b/sw/inc/acmplwrd.hxx
@@ -70,7 +70,7 @@ public:
     void CheckChangedList(const editeng::SortedAutoCompleteStrings& rNewLst);
 
     // Returns all words matching a given prefix aMatch.
-    bool GetWordsMatching(const OUString& aMatch, std::vector<OUString>& 
aWords) const;
+    bool GetWordsMatching(std::u16string_view aMatch, std::vector<OUString>& 
aWords) const;
 };
 
 #endif
diff --git a/sw/source/core/doc/acmplwrd.cxx b/sw/source/core/doc/acmplwrd.cxx
index 65eb9193b679..d566f188d7cc 100644
--- a/sw/source/core/doc/acmplwrd.cxx
+++ b/sw/source/core/doc/acmplwrd.cxx
@@ -244,7 +244,7 @@ bool SwAutoCompleteWord::InsertWord( const OUString& rWord, 
SwDoc& rDoc )
         std::pair<editeng::SortedAutoCompleteStrings::const_iterator, bool>
             aInsPair = m_WordList.insert(pNew);
 
-        m_LookupTree.insert( aNewWord.copy(0, nWrdLen) );
+        m_LookupTree.insert( aNewWord.subView(0, nWrdLen) );
 
         if (aInsPair.second)
         {
@@ -330,7 +330,7 @@ void SwAutoCompleteWord::SetMinWordLen( sal_uInt16 n )
  *  @param aMatch the prefix to search for
  *  @param rWords the words found matching
  */
-bool SwAutoCompleteWord::GetWordsMatching(const OUString& aMatch, 
std::vector<OUString>& rWords) const
+bool SwAutoCompleteWord::GetWordsMatching(std::u16string_view aMatch, 
std::vector<OUString>& rWords) const
 {
     assert(rWords.empty());
     m_LookupTree.findSuggestions(aMatch, rWords);

Reply via email to