editeng/source/editeng/eehtml.cxx  |    2 -
 editeng/source/rtf/svxrtf.cxx      |   15 +++------
 include/editeng/svxrtf.hxx         |    2 -
 include/o3tl/string_view.hxx       |    6 +++
 include/svtools/htmltokn.h         |    7 ++--
 include/svtools/rtftoken.h         |    2 -
 include/svtools/svparser.hxx       |    3 +
 o3tl/qa/test-string_view.cxx       |    4 ++
 svtools/source/svhtml/htmlkywd.cxx |   13 ++++----
 svtools/source/svhtml/parhtml.cxx  |   57 ++++++++++++++++++-------------------
 svtools/source/svrtf/parrtf.cxx    |   10 +++---
 svtools/source/svrtf/rtfkeywd.cxx  |    9 +++--
 svtools/source/svrtf/svparser.cxx  |    2 -
 sw/source/filter/html/htmlbas.cxx  |    4 +-
 sw/source/filter/html/htmlform.cxx |    2 -
 sw/source/filter/html/swhtml.cxx   |   10 +++---
 16 files changed, 80 insertions(+), 68 deletions(-)

New commits:
commit b871d057c45fdd231aa5e1d2b94e7d0a039f4292
Author:     Luboš Luňák <l.lu...@collabora.com>
AuthorDate: Tue Mar 1 12:07:47 2022 +0100
Commit:     Luboš Luňák <l.lu...@collabora.com>
CommitDate: Tue Mar 1 21:32:11 2022 +0100

    use OUStringBuffer for a string that's modified often (tdf#145862)
    
    SvParser::aToken was OUString despite being a buffer where the parsed
    result is collected.
    
    Change-Id: Id24c842738ea0f6f1836f77d855069963ac5ae55
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130763
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lu...@collabora.com>

diff --git a/editeng/source/editeng/eehtml.cxx 
b/editeng/source/editeng/eehtml.cxx
index a3de37005ffc..93740129e9df 100644
--- a/editeng/source/editeng/eehtml.cxx
+++ b/editeng/source/editeng/eehtml.cxx
@@ -179,7 +179,7 @@ void EditHTMLParser::NextToken( HtmlTokenId nToken )
             if ( !bInPara )
                 StartPara( false );
 
-            OUString aText = aToken;
+            OUString aText = aToken.toString();
             if ( aText.startsWith(" ") && ThrowAwayBlank() && !IsReadPRE() )
                 aText = aText.copy( 1 );
 
diff --git a/editeng/source/rtf/svxrtf.cxx b/editeng/source/rtf/svxrtf.cxx
index f60c14cdbafa..cae8e4361ad0 100644
--- a/editeng/source/rtf/svxrtf.cxx
+++ b/editeng/source/rtf/svxrtf.cxx
@@ -166,7 +166,7 @@ void SvxRTFParser::NextToken( int nToken )
     case RTF_LDBLQUOTE:     cCh = 0x201C;   goto INSINGLECHAR;
     case RTF_RDBLQUOTE:     cCh = 0x201D;   goto INSINGLECHAR;
 INSINGLECHAR:
-        aToken = OUString(cCh);
+        aToken = OUStringChar(cCh);
         [[fallthrough]]; // aToken is set as Text
     case RTF_TEXTTOKEN:
         {
@@ -324,7 +324,8 @@ void SvxRTFParser::ReadStyleTable()
         case RTF_TEXTTOKEN:
             if (bHasStyleNo)
             {
-                xStyle->sName = DelCharAtEnd( aToken, ';' );
+                DelCharAtEnd( aToken, ';' );
+                xStyle->sName = aToken.toString();
 
                 if (!m_StyleTable.empty())
                 {
@@ -581,15 +582,11 @@ void SvxRTFParser::ClearAttrStack()
     aAttrStack.clear();
 }
 
-OUString& SvxRTFParser::DelCharAtEnd( OUString& rStr, const sal_Unicode cDel )
+void SvxRTFParser::DelCharAtEnd( OUStringBuffer& rStr, const sal_Unicode cDel )
 {
-    if( !rStr.isEmpty() && ' ' == rStr[ 0 ])
-        rStr = comphelper::string::stripStart(rStr, ' ');
-    if( !rStr.isEmpty() && ' ' == rStr[ rStr.getLength()-1 ])
-        rStr = comphelper::string::stripEnd(rStr, ' ');
+    rStr.strip(' ');
     if( !rStr.isEmpty() && cDel == rStr[ rStr.getLength()-1 ])
-        rStr = rStr.copy( 0, rStr.getLength()-1 );
-    return rStr;
+        rStr.setLength( rStr.getLength()-1 );
 }
 
 
diff --git a/include/editeng/svxrtf.hxx b/include/editeng/svxrtf.hxx
index ec42c5045d07..e5ed1949bbb4 100644
--- a/include/editeng/svxrtf.hxx
+++ b/include/editeng/svxrtf.hxx
@@ -148,7 +148,7 @@ class EDITENG_DLLPUBLIC SvxRTFParser : public SvRTFParser
 protected:
     virtual void InsertPara() = 0;
 
-    static OUString& DelCharAtEnd( OUString& rStr, const sal_Unicode cDel );
+    static void DelCharAtEnd( OUStringBuffer& rStr, const sal_Unicode cDel );
 
     // is called for each token that is recognized in CallParser
     virtual void NextToken( int nToken ) override;
diff --git a/include/o3tl/string_view.hxx b/include/o3tl/string_view.hxx
index 74f15bf33b54..848143f189ed 100644
--- a/include/o3tl/string_view.hxx
+++ b/include/o3tl/string_view.hxx
@@ -31,6 +31,12 @@ inline bool equalsIgnoreAsciiCase(std::u16string_view s1, 
std::u16string_view s2
            == 0;
 };
 
+// Like OUString::compareToIgnoreAsciiCase, but for two std::u16string_view:
+inline int compareToIgnoreAsciiCase(std::u16string_view s1, 
std::u16string_view s2)
+{
+    return rtl_ustr_compareIgnoreAsciiCase_WithLength(s1.data(), s1.size(), 
s2.data(), s2.size());
+};
+
 // Similar to OString::getToken, returning the first token of a 
std::string_view, starting at a
 // given position (and if needed, it can be turned into a template to also 
cover std::u16string_view
 // etc., or extended to return the n'th token instead of just the first, or 
support an initial
diff --git a/include/svtools/htmltokn.h b/include/svtools/htmltokn.h
index ea27faa89471..bfa1f14d6812 100644
--- a/include/svtools/htmltokn.h
+++ b/include/svtools/htmltokn.h
@@ -22,6 +22,7 @@
 #include <svtools/svtdllapi.h>
 #include <sal/types.h>
 #include <stdexcept>
+#include <string_view>
 
 namespace rtl {
     class OUString;
@@ -30,13 +31,13 @@ enum class HtmlOptionId;
 enum class HtmlTokenId : sal_Int16;
 
 // search the char for the CharName
-sal_Unicode GetHTMLCharName( const rtl::OUString& rName );
+sal_Unicode GetHTMLCharName( std::u16string_view rName );
 
 // search the TokenID for the token
-SVT_DLLPUBLIC HtmlTokenId GetHTMLToken( const rtl::OUString& rName );
+SVT_DLLPUBLIC HtmlTokenId GetHTMLToken( std::u16string_view rName );
 
 // search the TokenId for an attribute token
-HtmlOptionId GetHTMLOption( const rtl::OUString& rName );
+HtmlOptionId GetHTMLOption( std::u16string_view rName );
 
 // search the 24-bit color for a color name (not found = SAL_MAX_UINT32)
 SVT_DLLPUBLIC sal_uInt32 GetHTMLColor( const rtl::OUString& rName );
diff --git a/include/svtools/rtftoken.h b/include/svtools/rtftoken.h
index df44b0013807..fb191c8ffa08 100644
--- a/include/svtools/rtftoken.h
+++ b/include/svtools/rtftoken.h
@@ -26,7 +26,7 @@ namespace rtl {
 };
 
 // search the TokenID for the token
-int GetRTFToken( const OUString& rSearch );
+int GetRTFToken( std::u16string_view rSearch );
 
 enum RTF_TOKEN_RANGES {
     RTF_NOGROUP                     = 0x0100,
diff --git a/include/svtools/svparser.hxx b/include/svtools/svparser.hxx
index 391b7e9a9521..4f4e1ab9ad97 100644
--- a/include/svtools/svparser.hxx
+++ b/include/svtools/svparser.hxx
@@ -24,6 +24,7 @@
 #include <tools/ref.hxx>
 #include <tools/long.hxx>
 #include <rtl/textenc.h>
+#include <rtl/ustrbuf.hxx>
 #include <rtl/ustring.hxx>
 #include <memory>
 
@@ -46,7 +47,7 @@ class SVT_DLLPUBLIC SvParser : public SvRefBase
 
 protected:
     SvStream&           rInput;
-    OUString            aToken;             // scanned token
+    OUStringBuffer      aToken;             // scanned token
     sal_uInt32          nlLineNr;           // current line number
     sal_uInt32          nlLinePos;          // current column number
 
diff --git a/o3tl/qa/test-string_view.cxx b/o3tl/qa/test-string_view.cxx
index c068638f800e..28ea5a2e99b0 100644
--- a/o3tl/qa/test-string_view.cxx
+++ b/o3tl/qa/test-string_view.cxx
@@ -592,6 +592,10 @@ private:
         using namespace std::string_view_literals;
         CPPUNIT_ASSERT(o3tl::equalsIgnoreAsciiCase(u"test"sv, u"test"sv));
         CPPUNIT_ASSERT(!o3tl::equalsIgnoreAsciiCase(u"test"sv, u"test2"sv));
+
+        CPPUNIT_ASSERT_EQUAL(0, o3tl::compareToIgnoreAsciiCase(u"test"sv, 
u"test"sv));
+        CPPUNIT_ASSERT_GREATER(0, o3tl::compareToIgnoreAsciiCase(u"zest"sv, 
u"test"sv));
+        CPPUNIT_ASSERT_LESS(0, o3tl::compareToIgnoreAsciiCase(u"test"sv, 
u"test2"sv));
     }
 };
 
diff --git a/svtools/source/svhtml/htmlkywd.cxx 
b/svtools/source/svhtml/htmlkywd.cxx
index 1873b8ee186a..2d51910d85e9 100644
--- a/svtools/source/svhtml/htmlkywd.cxx
+++ b/svtools/source/svhtml/htmlkywd.cxx
@@ -21,6 +21,7 @@
 #include <algorithm>
 #include <string_view>
 
+#include <o3tl/string_view.hxx>
 #include <sal/types.h>
 #include <rtl/ustring.hxx>
 #include <svtools/htmltokn.h>
@@ -43,12 +44,12 @@ static bool sortCompare(const TokenEntry<T> & lhs, const 
TokenEntry<T> & rhs)
     return lhs.sToken < rhs.sToken;
 }
 template<typename T>
-static bool findCompare(const TokenEntry<T> & lhs, const OUString & rhs)
+static bool findCompare(const TokenEntry<T> & lhs, std::u16string_view rhs)
 {
     return lhs.sToken < rhs;
 }
 template<typename T, size_t LEN>
-static T search(TokenEntry<T> const (&dataTable)[LEN], const OUString & key, T 
notFoundValue)
+static T search(TokenEntry<T> const (&dataTable)[LEN], std::u16string_view 
key, T notFoundValue)
 {
     auto findIt = std::lower_bound( std::begin(dataTable), std::end(dataTable),
                                      key, findCompare<T> );
@@ -174,7 +175,7 @@ HTML_TokenEntry const aHTMLTokenTab[] = {
 };
 
 
-HtmlTokenId GetHTMLToken( const OUString& rName )
+HtmlTokenId GetHTMLToken( std::u16string_view rName )
 {
     static bool bSortKeyWords = false;
     if( !bSortKeyWords )
@@ -183,7 +184,7 @@ HtmlTokenId GetHTMLToken( const OUString& rName )
         bSortKeyWords = true;
     }
 
-    if( rName.startsWith( OOO_STRING_SVTOOLS_HTML_comment ))
+    if( o3tl::starts_with( rName, u"" OOO_STRING_SVTOOLS_HTML_comment ))
         return HtmlTokenId::COMMENT;
 
     return search( aHTMLTokenTab, rName, HtmlTokenId::NONE);
@@ -459,7 +460,7 @@ static HTML_CharEntry aHTMLCharNameTab[] = {
     {std::u16string_view(u"" OOO_STRING_SVTOOLS_HTML_S_diams),     9830}
 };
 
-sal_Unicode GetHTMLCharName( const OUString& rName )
+sal_Unicode GetHTMLCharName( std::u16string_view rName )
 {
     if( !bSortCharKeyWords )
     {
@@ -631,7 +632,7 @@ static HTML_OptionEntry aHTMLOptionTab[] = {
     {std::u16string_view(u"" OOO_STRING_SVTOOLS_HTML_O_start),     
HtmlOptionId::START}, // Netscape 2.0 vs IExplorer 2.0
 };
 
-HtmlOptionId GetHTMLOption( const OUString& rName )
+HtmlOptionId GetHTMLOption( std::u16string_view rName )
 {
     if( !bSortOptionKeyWords )
     {
diff --git a/svtools/source/svhtml/parhtml.cxx 
b/svtools/source/svhtml/parhtml.cxx
index 6c3a2c070d2b..f8abfa7c694e 100644
--- a/svtools/source/svhtml/parhtml.cxx
+++ b/svtools/source/svhtml/parhtml.cxx
@@ -19,6 +19,7 @@
 
 #include <comphelper/string.hxx>
 #include <o3tl/safeint.hxx>
+#include <o3tl/string_view.hxx>
 #include <tools/stream.hxx>
 #include <tools/debug.hxx>
 #include <tools/color.hxx>
@@ -542,7 +543,7 @@ HtmlTokenId HTMLParser::ScanText( const sal_Unicode cBreak )
                             else
                             {
                                 // If not scanning a tag return token
-                                aToken += sTmpBuffer;
+                                aToken.append( sTmpBuffer );
                                 sTmpBuffer.setLength(0);
 
                                 if( !aToken.isEmpty() )
@@ -564,7 +565,7 @@ HtmlTokenId HTMLParser::ScanText( const sal_Unicode cBreak )
                                 // Hack: _GetNextChar shall not read the
                                 // next character
                                 if( ';' != nNextCh )
-                                    aToken += " ";
+                                    aToken.append( " " );
                                 if( 1U == cChar )
                                     return HtmlTokenId::NONBREAKSPACE;
                                 else //2U
@@ -719,7 +720,7 @@ HtmlTokenId HTMLParser::ScanText( const sal_Unicode cBreak )
                         if( !aToken.isEmpty() || sTmpBuffer.getLength() > 1 )
                         {
                             // Have seen s.th. aside from blanks?
-                            aToken += sTmpBuffer;
+                            aToken.append( sTmpBuffer );
                             sTmpBuffer.setLength(0);
                             return HtmlTokenId::TEXTTOKEN;
                         }
@@ -753,7 +754,7 @@ HtmlTokenId HTMLParser::ScanText( const sal_Unicode cBreak )
                         !IsParserWorking() )
                     {
                         if( !sTmpBuffer.isEmpty() )
-                            aToken += sTmpBuffer;
+                            aToken.append( sTmpBuffer );
                         return HtmlTokenId::TEXTTOKEN;
                     }
                 } while( rtl::isAsciiAlpha( nNextCh ) || rtl::isAsciiDigit( 
nNextCh ) );
@@ -766,7 +767,7 @@ HtmlTokenId HTMLParser::ScanText( const sal_Unicode cBreak )
     }
 
     if( !sTmpBuffer.isEmpty() )
-        aToken += sTmpBuffer;
+        aToken.append( sTmpBuffer );
 
     return HtmlTokenId::TEXTTOKEN;
 }
@@ -801,7 +802,7 @@ HtmlTokenId HTMLParser::GetNextRawToken()
                 // Maybe we've reached the end.
 
                 // Save what we have read previously...
-                aToken += sTmpBuffer;
+                aToken.append( sTmpBuffer );
                 sTmpBuffer.setLength(0);
 
                 // and remember position in stream.
@@ -904,9 +905,9 @@ HtmlTokenId HTMLParser::GetNextRawToken()
                 else
                 {
                     // remember "</" , everything else we find in the buffer
-                    aToken += "<";
+                    aToken.append( "<" );
                     if( bOffState )
-                        aToken += "/";
+                        aToken.append( "/" );
 
                     bNextCh = false;
                 }
@@ -974,7 +975,7 @@ HtmlTokenId HTMLParser::GetNextRawToken()
 
         if( !bContinue && !sTmpBuffer.isEmpty() )
         {
-            aToken += sTmpBuffer;
+            aToken.append( sTmpBuffer );
             sTmpBuffer.setLength(0);
         }
 
@@ -1001,7 +1002,7 @@ HtmlTokenId HTMLParser::GetNextToken_()
         // HtmlTokenId::<TOKEN>_OFF generated for HtmlTokenId::<TOKEN>_ON
         nRet = mnPendingOffToken;
         mnPendingOffToken = HtmlTokenId::NONE;
-        aToken.clear();
+        aToken.setLength( 0 );
         return nRet;
     }
 
@@ -1058,7 +1059,7 @@ HtmlTokenId HTMLParser::GetNextToken_()
 
                     if( !sTmpBuffer.isEmpty() )
                     {
-                        aToken += sTmpBuffer;
+                        aToken.append( sTmpBuffer );
                         sTmpBuffer.setLength(0);
                     }
 
@@ -1075,10 +1076,10 @@ HtmlTokenId HTMLParser::GetNextToken_()
 
                     // Search token in table:
                     sSaveToken = aToken;
-                    aToken = aToken.toAsciiLowerCase();
+                    aToken = aToken.toString().toAsciiLowerCase();
 
-                    if (!maNamespace.isEmpty() && 
aToken.startsWith(maNamespace))
-                        aToken = aToken.copy(maNamespace.getLength());
+                    if (!maNamespace.isEmpty() && o3tl::starts_with(aToken, 
maNamespace))
+                        aToken = aToken.remove( 0, maNamespace.getLength());
 
                     if( HtmlTokenId::NONE == (nRet = GetHTMLToken( aToken )) )
                         // Unknown control
@@ -1107,7 +1108,7 @@ HtmlTokenId HTMLParser::GetNextToken_()
                         //      and append a blank.
                         aToken = sSaveToken;
                         if( '>'!=nNextCh )
-                            aToken += " ";
+                            aToken.append( " " );
                         sal_uInt64 nCStreamPos = 0;
                         sal_uInt32 nCLineNr = 0;
                         sal_uInt32 nCLinePos = 0;
@@ -1146,14 +1147,14 @@ HtmlTokenId HTMLParser::GetNextToken_()
                             SetLineNr( nCLineNr );
                             SetLinePos( nCLinePos );
                             ClearTxtConvContext();
-                            aToken = aToken.copy(0, nCStrLen);
+                            aToken.truncate(nCStrLen);
                             nNextCh = '>';
                         }
                     }
                     else
                     {
                         // TokenString not needed anymore
-                        aToken.clear();
+                        aToken.setLength( 0 );
                     }
 
                     // Read until closing '>'
@@ -1165,10 +1166,10 @@ HtmlTokenId HTMLParser::GetNextToken_()
                         // generate pending HtmlTokenId::<TOKEN>_OFF for 
HtmlTokenId::<TOKEN>_ON
                         // Do not convert this to a single 
HtmlTokenId::<TOKEN>_OFF
                         // which lead to fdo#56772.
-                        if ((nRet >= HtmlTokenId::ONOFF_START) && 
aToken.endsWith("/"))
+                        if ((nRet >= HtmlTokenId::ONOFF_START) && 
o3tl::ends_with(aToken, u"/"))
                         {
                             mnPendingOffToken = 
static_cast<HtmlTokenId>(static_cast<int>(nRet) + 1);       // 
HtmlTokenId::<TOKEN>_ON -> HtmlTokenId::<TOKEN>_OFF
-                            aToken = aToken.replaceAt( aToken.getLength()-1, 
1, u"");   // remove trailing '/'
+                            aToken.setLength( aToken.getLength()-1 );   // 
remove trailing '/'
                         }
                         if( sal_Unicode(EOF) == nNextCh && rInput.eof() )
                         {
@@ -1212,7 +1213,7 @@ HtmlTokenId HTMLParser::GetNextToken_()
                         }
                         if( SvParserState::Pending == eState )
                             bReadNextChar = bReadNextCharSave;
-                        aToken.clear();
+                        aToken.setLength( 0 );
                     }
                     else if( '%' == nNextCh )
                     {
@@ -1249,7 +1250,7 @@ HtmlTokenId HTMLParser::GetNextToken_()
                         if( IsParserWorking() )
                         {
                             sSaveToken = aToken;
-                            aToken.clear();
+                            aToken.setLength( 0 );
                         }
                     }
                     else
@@ -1387,7 +1388,7 @@ void HTMLParser::UnescapeToken()
         bEscape = false;
         if( '\\'==aToken[nPos] && !bOldEscape )
         {
-            aToken = aToken.replaceAt( nPos, 1, u"" );
+            aToken.remove( nPos, 1 );
             bEscape = true;
         }
         else
@@ -1426,7 +1427,7 @@ const HTMLOptions& HTMLParser::GetOptions( HtmlOptionId 
const *pNoConvertToken )
                 nPos++;
             }
 
-            OUString sName( aToken.copy( nStt, nPos-nStt ) );
+            OUString sName( aToken.subView( nStt, nPos-nStt ) );
 
             // PlugIns require original token name. Convert to lower case only 
for searching.
             nToken = GetHTMLOption( sName.toAsciiLowerCase() ); // Name is 
ready
@@ -1477,7 +1478,7 @@ const HTMLOptions& HTMLParser::GetOptions( HtmlOptionId 
const *pNoConvertToken )
                             case '\r':
                             case '\n':
                                 if( bStripCRLF )
-                                    aToken = aToken.replaceAt( nPos, 1, u"" );
+                                    aToken.remove( nPos, 1 );
                                 else
                                 {
                                     nPos++;
@@ -1492,7 +1493,7 @@ const HTMLOptions& HTMLParser::GetOptions( HtmlOptionId 
const *pNoConvertToken )
                                 }
                                 else
                                 {
-                                    aToken = aToken.replaceAt( nPos, 1, u"" );
+                                    aToken.remove( nPos, 1 );
                                     bEscape = true;
                                 }
                                 break;
@@ -1549,7 +1550,7 @@ const HTMLOptions& HTMLParser::GetOptions( HtmlOptionId 
const *pNoConvertToken )
                                 }
                                 else
                                 {
-                                    aToken = aToken.replaceAt( nPos, 1, u"" );
+                                    aToken.remove( nPos, 1 );
                                     bEscape = true;
                                 }
                                 break;
@@ -1568,7 +1569,7 @@ const HTMLOptions& HTMLParser::GetOptions( HtmlOptionId 
const *pNoConvertToken )
                     }
 
                     if( nLen )
-                        aValue = aToken.copy( nStt, nLen );
+                        aValue = aToken.subView( nStt, nLen );
                 }
             }
 
@@ -1795,7 +1796,7 @@ HtmlTokenId HTMLParser::FilterXMP( HtmlTokenId nToken )
             }
             else
                 aToken = sSaveToken;
-            aToken += ">";
+            aToken.append( ">" );
             nToken = HtmlTokenId::TEXTTOKEN;
         }
         break;
diff --git a/svtools/source/svrtf/parrtf.cxx b/svtools/source/svrtf/parrtf.cxx
index d16ac8cf0a1e..719401d342fe 100644
--- a/svtools/source/svrtf/parrtf.cxx
+++ b/svtools/source/svrtf/parrtf.cxx
@@ -106,7 +106,7 @@ int SvRTFParser::GetNextToken_()
                                 aStrBuffer.appendUtf32(nNextCh);
                                 nNextCh = GetNextChar();
                             } while( RTF_ISALPHA( nNextCh ) );
-                            aToken += aStrBuffer;
+                            aToken.append( aStrBuffer );
                         }
 
                         // minus before numeric parameters
@@ -157,7 +157,7 @@ int SvRTFParser::GetNextToken_()
                                     aParserStates.top().nUCharOverread = 
nUCharOverread;
                                 }
                             }
-                            aToken.clear(); // #i47831# erase token to prevent 
the token from being treated as text
+                            aToken.setLength( 0 ); // #i47831# erase token to 
prevent the token from being treated as text
                             // read next token
                             nRet = 0;
                             break;
@@ -183,7 +183,7 @@ int SvRTFParser::GetNextToken_()
                             if( !bRTF_InTextRead )
                             {
                                 nRet = RTF_TEXTTOKEN;
-                                aToken = OUString( 
static_cast<sal_Unicode>(nTokenValue) );
+                                aToken = OUStringChar( 
static_cast<sal_Unicode>(nTokenValue) );
 
                                 // overread the next n "RTF" characters. This
                                 // can be also \{, \}, \'88
@@ -502,7 +502,7 @@ void SvRTFParser::ScanText()
                     if (sal_Unicode(EOF) == (nNextCh = GetNextChar()))
                     {
                         if (!aStrBuffer.isEmpty())
-                            aToken += aStrBuffer;
+                            aToken.append( aStrBuffer );
                         return;
                     }
                 } while
@@ -519,7 +519,7 @@ void SvRTFParser::ScanText()
     }
 
     if (!aStrBuffer.isEmpty())
-        aToken += aStrBuffer;
+        aToken.append( aStrBuffer );
 }
 
 
diff --git a/svtools/source/svrtf/rtfkeywd.cxx 
b/svtools/source/svrtf/rtfkeywd.cxx
index 58c153634e69..e4864d7eddd2 100644
--- a/svtools/source/svrtf/rtfkeywd.cxx
+++ b/svtools/source/svrtf/rtfkeywd.cxx
@@ -17,6 +17,7 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <o3tl/string_view.hxx>
 #include <rtl/ustring.hxx>
 #include <svtools/rtfkeywd.hxx>
 #include <svtools/rtftoken.h>
@@ -1175,7 +1176,7 @@ static RTF_TokenEntry aRTFTokenTab[] = {
 };
 
 
-int GetRTFToken( const OUString& rSearch )
+int GetRTFToken( std::u16string_view rSearch )
 {
     if( !bSortKeyWords )
     {
@@ -1187,12 +1188,12 @@ int GetRTFToken( const OUString& rSearch )
         bSortKeyWords = true;
     }
 
-    auto findCompare = [](const RTF_TokenEntry & lhs, const OUString & s)
+    auto findCompare = [](const RTF_TokenEntry & lhs, std::u16string_view s)
         {
-            return s.compareToIgnoreAsciiCase(lhs.sToken) > 0;
+            return o3tl::compareToIgnoreAsciiCase(s, lhs.sToken) > 0;
         };
     auto findIt = std::lower_bound( std::begin(aRTFTokenTab), 
std::end(aRTFTokenTab), rSearch, findCompare);
-    if (findIt != std::end(aRTFTokenTab) && 
rSearch.compareToIgnoreAsciiCase(findIt->sToken)==0)
+    if (findIt != std::end(aRTFTokenTab) && 
o3tl::compareToIgnoreAsciiCase(rSearch, findIt->sToken)==0)
         return findIt->nToken;
 
     return 0;
diff --git a/svtools/source/svrtf/svparser.cxx 
b/svtools/source/svrtf/svparser.cxx
index ca0a8816851a..c003ebde3af6 100644
--- a/svtools/source/svrtf/svparser.cxx
+++ b/svtools/source/svrtf/svparser.cxx
@@ -444,7 +444,7 @@ T SvParser<T>::GetNextToken()
 
     if( !nTokenStackPos )
     {
-        aToken.clear();     // empty token buffer
+        aToken.setLength( 0 );     // empty token buffer
         nTokenValue = -1;   // marker for no value read
         bTokenHasValue = false;
 
diff --git a/sw/source/filter/html/htmlbas.cxx 
b/sw/source/filter/html/htmlbas.cxx
index fecead1e542e..65badb54f68b 100644
--- a/sw/source/filter/html/htmlbas.cxx
+++ b/sw/source/filter/html/htmlbas.cxx
@@ -189,7 +189,7 @@ void SwHTMLParser::AddScriptSource()
             if( nPos != -1 )
             {
                 m_aBasicLib =
-                    aToken.copy( nPos + 
sizeof(OOO_STRING_SVTOOLS_HTML_SB_library) - 1 );
+                    aToken.subView( nPos + 
sizeof(OOO_STRING_SVTOOLS_HTML_SB_library) - 1 );
                 m_aBasicLib = comphelper::string::strip(m_aBasicLib, ' ');
             }
         }
@@ -200,7 +200,7 @@ void SwHTMLParser::AddScriptSource()
             if( nPos != -1 )
             {
                 m_aBasicModule =
-                    aToken.copy( nPos + 
sizeof(OOO_STRING_SVTOOLS_HTML_SB_module) - 1 );
+                    aToken.subView( nPos + 
sizeof(OOO_STRING_SVTOOLS_HTML_SB_module) - 1 );
                 m_aBasicModule = comphelper::string::strip(m_aBasicModule, ' 
');
             }
         }
diff --git a/sw/source/filter/html/htmlform.cxx 
b/sw/source/filter/html/htmlform.cxx
index e2685f6bf5ae..00c2a1334f26 100644
--- a/sw/source/filter/html/htmlform.cxx
+++ b/sw/source/filter/html/htmlform.cxx
@@ -2484,7 +2484,7 @@ void SwHTMLParser::InsertSelectText()
     {
         sal_Int32 nLen = rText.getLength();
         if( !nLen || ' '==rText[nLen-1])
-            aToken = aToken.replaceAt( 0, 1, u"" );
+            aToken.remove( 0, 1 );
     }
     if( !aToken.isEmpty() )
         rText += aToken;
diff --git a/sw/source/filter/html/swhtml.cxx b/sw/source/filter/html/swhtml.cxx
index e0952dfe11d8..5a564c12a907 100644
--- a/sw/source/filter/html/swhtml.cxx
+++ b/sw/source/filter/html/swhtml.cxx
@@ -1270,7 +1270,7 @@ void SwHTMLParser::NextToken( HtmlTokenId nToken )
             {
                 if( !m_bDocInitialized )
                     DocumentDetected();
-                m_xDoc->getIDocumentContentOperations().InsertString( *m_pPam, 
aToken );
+                m_xDoc->getIDocumentContentOperations().InsertString( *m_pPam, 
aToken.toString());
 
                 // if there are temporary paragraph attributes and the
                 // paragraph isn't empty then the paragraph attributes
@@ -1530,10 +1530,10 @@ void SwHTMLParser::NextToken( HtmlTokenId nToken )
                 const OUString& rText = pTextNode->GetText();
                 sal_Unicode cLast = rText[--nPos];
                 if( ' ' == cLast || '\x0a' == cLast)
-                    aToken = aToken.copy(1);
+                    aToken.remove(0, 1);
             }
             else
-                aToken = aToken.copy(1);
+                aToken.remove(0, 1);
 
             if( aToken.isEmpty() )
             {
@@ -1569,7 +1569,7 @@ void SwHTMLParser::NextToken( HtmlTokenId nToken )
                 }
             }
 
-            m_xDoc->getIDocumentContentOperations().InsertString( *m_pPam, 
aToken );
+            m_xDoc->getIDocumentContentOperations().InsertString( *m_pPam, 
aToken.toString());
 
             // if there are temporary paragraph attributes and the
             // paragraph isn't empty then the paragraph attributes
@@ -2058,7 +2058,7 @@ void SwHTMLParser::NextToken( HtmlTokenId nToken )
             if( ' ' == aToken[ 3 ] &&
                 ' ' == aToken[ aToken.getLength()-3 ] )
             {
-                OUString aComment( aToken.copy( 3, aToken.getLength()-5 ) );
+                OUString aComment( aToken.subView( 3, aToken.getLength()-5 ) );
                 InsertComment(comphelper::string::strip(aComment, ' '));
             }
             else

Reply via email to