diff options
-rw-r--r-- | editeng/inc/editdoc.hxx | 2 | ||||
-rw-r--r-- | editeng/qa/lookuptree/lookuptree_test.cxx | 48 | ||||
-rw-r--r-- | editeng/source/editeng/editdoc.cxx | 12 | ||||
-rw-r--r-- | editeng/source/editeng/impedit2.cxx | 4 | ||||
-rw-r--r-- | editeng/source/editeng/impedit4.cxx | 2 | ||||
-rw-r--r-- | editeng/source/editeng/textconv.cxx | 4 | ||||
-rw-r--r-- | editeng/source/editeng/textconv.hxx | 2 | ||||
-rw-r--r-- | editeng/source/lookuptree/Trie.cxx | 14 | ||||
-rw-r--r-- | editeng/source/misc/splwrap.cxx | 4 | ||||
-rw-r--r-- | editeng/source/misc/svxacorr.cxx | 77 | ||||
-rw-r--r-- | include/editeng/Trie.hxx | 5 | ||||
-rw-r--r-- | include/editeng/splwrap.hxx | 2 | ||||
-rw-r--r-- | include/editeng/svxacorr.hxx | 8 | ||||
-rw-r--r-- | sw/inc/acmplwrd.hxx | 2 | ||||
-rw-r--r-- | sw/source/core/doc/acmplwrd.cxx | 4 |
15 files changed, 96 insertions, 94 deletions
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); |