[Libreoffice-commits] core.git: basic/source comphelper/source configmgr/qa connectivity/source desktop/source editeng/source forms/source framework/source i18npool/source include/rtl oox/source opencl/source registry/source sax/source sc/source sdext/source stoc/source svl/source sw/source toolkit/source ucb/source unotools/source vbahelper/source vcl/source writerfilter/source xmloff/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Jan 11 12:55:41 UTC 2019


 basic/source/comp/codegen.cxx                                     |    3 
 basic/source/runtime/runtime.cxx                                  |    4 
 comphelper/source/misc/string.cxx                                 |    3 
 configmgr/qa/unit/test.cxx                                        |    3 
 connectivity/source/commontools/dbtools2.cxx                      |    5 
 connectivity/source/drivers/firebird/Clob.cxx                     |    8 +
 connectivity/source/drivers/firebird/PreparedStatement.cxx        |    9 +
 desktop/source/deployment/misc/dp_misc.cxx                        |    3 
 desktop/source/deployment/misc/dp_ucb.cxx                         |   15 +-
 editeng/source/editeng/editdoc.cxx                                |    3 
 editeng/source/misc/svxacorr.cxx                                  |    5 
 forms/source/component/Filter.cxx                                 |    6 -
 framework/source/uielement/toolbarsmenucontroller.cxx             |    5 
 i18npool/source/characterclassification/cclass_unicode_parser.cxx |   13 +-
 i18npool/source/nativenumber/nativenumbersupplier.cxx             |    5 
 include/rtl/ustrbuf.hxx                                           |   52 ++--------
 oox/source/core/relationshandler.cxx                              |    6 -
 oox/source/dump/dumperbase.cxx                                    |    8 -
 opencl/source/openclconfig.cxx                                    |    8 +
 registry/source/keyimpl.cxx                                       |    3 
 sax/source/tools/converter.cxx                                    |    3 
 sc/source/core/tool/address.cxx                                   |    6 -
 sc/source/filter/excel/xehelper.cxx                               |    6 -
 sc/source/ui/app/inputhdl.cxx                                     |    6 -
 sdext/source/pdfimport/tree/style.cxx                             |    3 
 sdext/source/presenter/PresenterController.cxx                    |    8 +
 stoc/source/uriproc/ExternalUriReferenceTranslator.cxx            |    8 +
 stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTscript.cxx |    7 -
 svl/source/misc/urihelper.cxx                                     |    6 -
 svl/source/numbers/zformat.cxx                                    |   12 +-
 sw/source/core/access/accportions.cxx                             |    6 -
 sw/source/core/bastyp/calc.cxx                                    |    9 -
 sw/source/core/crsr/pam.cxx                                       |    6 -
 sw/source/core/fields/cellfml.cxx                                 |    8 +
 sw/source/core/text/redlnitr.cxx                                  |    8 +
 sw/source/filter/xml/xmltexte.cxx                                 |    6 -
 toolkit/source/awt/animatedimagespeer.cxx                         |    6 -
 ucb/source/ucp/tdoc/tdoc_content.cxx                              |    6 -
 unotools/source/config/configpaths.cxx                            |    8 +
 unotools/source/i18n/textsearch.cxx                               |    5 
 vbahelper/source/vbahelper/vbacommandbarhelper.cxx                |    5 
 vcl/source/control/field.cxx                                      |   17 +--
 vcl/source/control/field2.cxx                                     |    3 
 vcl/source/control/longcurr.cxx                                   |    6 -
 vcl/source/edit/texteng.cxx                                       |    5 
 vcl/source/window/menu.cxx                                        |    5 
 writerfilter/source/rtftok/rtfdocumentimpl.cxx                    |    3 
 xmloff/source/core/xmluconv.cxx                                   |    5 
 xmloff/source/meta/xmlmetai.cxx                                   |    8 +
 xmloff/source/style/fonthdl.cxx                                   |    6 -
 xmloff/source/style/xmlexppr.cxx                                  |    3 
 51 files changed, 228 insertions(+), 138 deletions(-)

New commits:
commit 70519a43e0d89a6b5d89859a6851f8c757c6b0c7
Author:     Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Fri Jan 11 11:21:46 2019 +0100
Commit:     Stephan Bergmann <sbergman at redhat.com>
CommitDate: Fri Jan 11 13:55:14 2019 +0100

    Replace OUStringBuffer::appendCopy with append(std::u16string_view)
    
    ...which is more general
    
    Change-Id: I94f28f8eda887120cf5f143b4549e0339b60e6a7
    Reviewed-on: https://gerrit.libreoffice.org/66155
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>

diff --git a/basic/source/comp/codegen.cxx b/basic/source/comp/codegen.cxx
index 6daa6dde378d..eeb610bbed99 100644
--- a/basic/source/comp/codegen.cxx
+++ b/basic/source/comp/codegen.cxx
@@ -25,6 +25,7 @@
 #include <cstddef>
 #include <limits>
 #include <algorithm>
+#include <string_view>
 #include <osl/diagnose.h>
 #include <com/sun/star/script/ModuleType.hpp>
 
@@ -212,7 +213,7 @@ void SbiCodeGen::Save()
                         {
                             aIfaceProcName.append(aPropPrefix);
                         }
-                        aIfaceProcName.appendCopy(aPureProcName, rIfaceName.getLength() + 1 );
+                        aIfaceProcName.append(std::u16string_view(aPureProcName).substr(rIfaceName.getLength() + 1) );
                         aIfaceName = rIfaceName;
                         nPassCount = 2;
                         break;
diff --git a/basic/source/runtime/runtime.cxx b/basic/source/runtime/runtime.cxx
index c8d3ccbd5699..ea0d9ae69379 100644
--- a/basic/source/runtime/runtime.cxx
+++ b/basic/source/runtime/runtime.cxx
@@ -20,7 +20,7 @@
 #include <stdlib.h>
 
 #include <algorithm>
-
+#include <string_view>
 #include <unordered_map>
 
 #include <com/sun/star/beans/XPropertySet.hpp>
@@ -2050,7 +2050,7 @@ void SbiRuntime::StepRSET()
         }
         else
         {
-            aNewStr.appendCopy(aRefValString, 0, nVarStrLen);
+            aNewStr.append(std::u16string_view(aRefValString).substr(0, nVarStrLen));
         }
         refVar->PutString(aNewStr.makeStringAndClear());
 
diff --git a/comphelper/source/misc/string.cxx b/comphelper/source/misc/string.cxx
index 89d72a3a1cf2..0822d39d5d78 100644
--- a/comphelper/source/misc/string.cxx
+++ b/comphelper/source/misc/string.cxx
@@ -21,6 +21,7 @@
 
 #include <cstddef>
 #include <string.h>
+#include <string_view>
 #include <vector>
 #include <algorithm>
 
@@ -443,7 +444,7 @@ OUString removeAny(OUString const& rIn,
             {
                 if (i > 0)
                 {
-                    buf.appendCopy(rIn, 0, i);
+                    buf.append(std::u16string_view(rIn).substr(0, i));
                 }
                 isFound = true;
             }
diff --git a/configmgr/qa/unit/test.cxx b/configmgr/qa/unit/test.cxx
index 1ea04c4081f1..f98fa730f58c 100644
--- a/configmgr/qa/unit/test.cxx
+++ b/configmgr/qa/unit/test.cxx
@@ -20,6 +20,7 @@
 #include <sal/config.h>
 
 #include <cstddef>
+#include <string_view>
 
 #include <com/sun/star/beans/NamedValue.hpp>
 #include <com/sun/star/beans/PropertyChangeEvent.hpp>
@@ -553,7 +554,7 @@ void normalize(
     } else {
         OUStringBuffer buf(path);
         buf.append('/');
-        buf.appendCopy(relative, 0, i);
+        buf.append(std::u16string_view(relative).substr(0, i));
         *normalizedPath = buf.makeStringAndClear();
         *name = relative.copy(i + 1);
     }
diff --git a/connectivity/source/commontools/dbtools2.cxx b/connectivity/source/commontools/dbtools2.cxx
index b8643e642efd..9134f02df358 100644
--- a/connectivity/source/commontools/dbtools2.cxx
+++ b/connectivity/source/commontools/dbtools2.cxx
@@ -47,6 +47,7 @@
 #include <tools/diagnose_ex.h>
 #include <unotools/sharedunocomponent.hxx>
 #include <algorithm>
+#include <string_view>
 
 namespace dbtools
 {
@@ -132,7 +133,7 @@ OUString createStandardTypePart(const Reference< XPropertySet >& xColProp,const
         }
         else
         {
-            aSql.appendCopy(sTypeName, 0, ++nParenPos);
+            aSql.append(std::u16string_view(sTypeName).substr(0, ++nParenPos));
         }
 
         if ( nPrecision > 0 && nDataType != DataType::TIMESTAMP )
@@ -149,7 +150,7 @@ OUString createStandardTypePart(const Reference< XPropertySet >& xColProp,const
         else
         {
             nParenPos = sTypeName.indexOf(')',nParenPos);
-            aSql.appendCopy(sTypeName, nParenPos);
+            aSql.append(std::u16string_view(sTypeName).substr(nParenPos));
         }
     }
     else
diff --git a/connectivity/source/drivers/firebird/Clob.cxx b/connectivity/source/drivers/firebird/Clob.cxx
index 2d150da912f1..6fb7092457d7 100644
--- a/connectivity/source/drivers/firebird/Clob.cxx
+++ b/connectivity/source/drivers/firebird/Clob.cxx
@@ -7,6 +7,10 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include "Clob.hxx"
 #include "Blob.hxx"
 #include "Connection.hxx"
@@ -99,7 +103,7 @@ OUString SAL_CALL Clob::getSubString(sal_Int64 nPosition,
             if( nCharsToCopy > nLength )
                 nCharsToCopy = nLength;
             // append relevant part of first segment
-            sSegmentBuffer.appendCopy( sSegment, 0, nCharsToCopy );
+            sSegmentBuffer.append( std::u16string_view(sSegment).substr(0, nCharsToCopy) );
             nActLen += sSegmentBuffer.getLength();
         }
     }
@@ -115,7 +119,7 @@ OUString SAL_CALL Clob::getSubString(sal_Int64 nPosition,
                             RTL_TEXTENCODING_UTF8 );
         sal_Int32 nStrLen = sSegment.getLength();
         if( nActLen + nStrLen > nLength )
-            sSegmentBuffer.appendCopy(sSegment, 0, nLength - nActLen);
+            sSegmentBuffer.append(std::u16string_view(sSegment).substr(0, nLength - nActLen));
         else
             sSegmentBuffer.append(sSegment);
         nActLen += nStrLen;
diff --git a/connectivity/source/drivers/firebird/PreparedStatement.cxx b/connectivity/source/drivers/firebird/PreparedStatement.cxx
index 648f3f678ff4..cf44aa4d238d 100644
--- a/connectivity/source/drivers/firebird/PreparedStatement.cxx
+++ b/connectivity/source/drivers/firebird/PreparedStatement.cxx
@@ -16,6 +16,11 @@
  *   except in compliance with the License. You may obtain a copy of
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
+
+#include <sal/config.h>
+
+#include <string_view>
+
 #include "Connection.hxx"
 #include "PreparedStatement.hxx"
 #include "ResultSet.hxx"
@@ -333,9 +338,9 @@ sal_Int64 toNumericWithoutDecimalPlace(const OUString& sSource)
         OUStringBuffer sBuffer(15);
         if(nDotIndex > 0)
         {
-            sBuffer.appendCopy(sNumber, 0, nDotIndex);
+            sBuffer.append(std::u16string_view(sNumber).substr(0, nDotIndex));
         }
-        sBuffer.appendCopy(sNumber, nDotIndex + 1);
+        sBuffer.append(std::u16string_view(sNumber).substr(nDotIndex + 1));
         return sBuffer.makeStringAndClear().toInt64();
     }
 }
diff --git a/desktop/source/deployment/misc/dp_misc.cxx b/desktop/source/deployment/misc/dp_misc.cxx
index 031d599050f2..568ab79d4ec1 100644
--- a/desktop/source/deployment/misc/dp_misc.cxx
+++ b/desktop/source/deployment/misc/dp_misc.cxx
@@ -42,6 +42,7 @@
 #include <com/sun/star/deployment/ExtensionManager.hpp>
 #include <com/sun/star/task/OfficeRestartManager.hpp>
 #include <memory>
+#include <string_view>
 #include <comphelper/lok.hxx>
 #include <comphelper/processfactory.hxx>
 #include <salhelper/linkhelper.hxx>
@@ -266,7 +267,7 @@ OUString makeURL( OUString const & baseURL, OUString const & relPath_ )
 {
     OUStringBuffer buf;
     if (baseURL.getLength() > 1 && baseURL[ baseURL.getLength() - 1 ] == '/')
-        buf.appendCopy( baseURL, 0, baseURL.getLength() - 1 );
+        buf.append( std::u16string_view(baseURL).substr(0, baseURL.getLength() - 1) );
     else
         buf.append( baseURL );
     OUString relPath(relPath_);
diff --git a/desktop/source/deployment/misc/dp_ucb.cxx b/desktop/source/deployment/misc/dp_ucb.cxx
index 75bbbe843142..35be6bb90918 100644
--- a/desktop/source/deployment/misc/dp_ucb.cxx
+++ b/desktop/source/deployment/misc/dp_ucb.cxx
@@ -17,6 +17,9 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
 
 #include <dp_misc.h>
 #include <dp_ucb.h>
@@ -216,18 +219,18 @@ bool readLine( OUString * res, OUString const & startingWith,
             {
                 pos = file.indexOf( LF, pos );
                 if (pos < 0) { // EOF
-                    buf.appendCopy( file, start );
+                    buf.append( std::u16string_view(file).substr(start) );
                 }
                 else
                 {
                     if (pos > 0 && file[ pos - 1 ] == CR)
                     {
                         // consume extra CR
-                        buf.appendCopy( file, start, pos - start - 1 );
+                        buf.append( std::u16string_view(file).substr(start, pos - start - 1) );
                         ++pos;
                     }
                     else
-                        buf.appendCopy( file, start, pos - start );
+                        buf.append( std::u16string_view(file).substr(start, pos - start) );
                     ++pos; // consume LF
                     // check next line:
                     if (pos < file.getLength() &&
@@ -271,16 +274,16 @@ bool readProperties( std::vector< std::pair< OUString, OUString> > & out_result,
         bool bEOF = false;
         pos = file.indexOf( LF, pos );
         if (pos < 0) { // EOF
-            buf.appendCopy( file, start );
+            buf.append( std::u16string_view(file).substr(start) );
             bEOF = true;
         }
         else
         {
             if (pos > 0 && file[ pos - 1 ] == CR)
                 // consume extra CR
-                buf.appendCopy( file, start, pos - start - 1 );
+                buf.append( std::u16string_view(file).substr(start, pos - start - 1) );
             else
-                buf.appendCopy( file, start, pos - start );
+                buf.append( std::u16string_view(file).substr(start, pos - start) );
             pos++;
         }
         OUString aLine = buf.makeStringAndClear();
diff --git a/editeng/source/editeng/editdoc.cxx b/editeng/source/editeng/editdoc.cxx
index 86e4b53fced9..d19542ddc056 100644
--- a/editeng/source/editeng/editdoc.cxx
+++ b/editeng/source/editeng/editdoc.cxx
@@ -65,6 +65,7 @@
 #include <limits>
 #include <memory>
 #include <set>
+#include <string_view>
 
 using namespace ::com::sun::star;
 
@@ -1642,7 +1643,7 @@ OUString ContentNode::GetExpandedText(sal_Int32 nStartPos, sal_Int32 nEndPos) co
         DBG_ASSERT( nEnd >= nIndex, "End in front of the index?" );
         //!! beware of sub string length  of -1
         if (nEnd > nIndex)
-            aStr.appendCopy( GetString(), nIndex, nEnd - nIndex );
+            aStr.append( std::u16string_view(GetString()).substr(nIndex, nEnd - nIndex) );
 
         if ( pNextFeature )
         {
diff --git a/editeng/source/misc/svxacorr.cxx b/editeng/source/misc/svxacorr.cxx
index c6cb322d58b0..2ef3ab48523a 100644
--- a/editeng/source/misc/svxacorr.cxx
+++ b/editeng/source/misc/svxacorr.cxx
@@ -18,6 +18,7 @@
  */
 
 #include <memory>
+#include <string_view>
 #include <sal/config.h>
 
 #include <com/sun/star/io/IOException.hpp>
@@ -2810,12 +2811,12 @@ const SvxAutocorrWord* SvxAutocorrWordList::WordMatches(const SvxAutocorrWord *p
                                 nTmp++;
                             if (nTmp < nSttWdPos)
                                 break; // word delimiter found
-                            buf.appendCopy(rTxt, nFndPos, nSttWdPos - nFndPos).append(pFnd->GetLong());
+                            buf.append(std::u16string_view(rTxt).substr(nFndPos, nSttWdPos - nFndPos)).append(pFnd->GetLong());
                             nFndPos = nSttWdPos + sTmp.getLength();
                         }
                     } while (nSttWdPos != -1);
                     if (nEndPos - nFndPos > extra_repl)
-                        buf.appendCopy(rTxt, nFndPos, nEndPos - nFndPos);
+                        buf.append(std::u16string_view(rTxt).substr(nFndPos, nEndPos - nFndPos));
                     aLong = buf.makeStringAndClear();
                 }
                 SvxAutocorrWord* pNew = new SvxAutocorrWord(aShort, aLong);
diff --git a/forms/source/component/Filter.cxx b/forms/source/component/Filter.cxx
index d15df8535313..99f43e25d2c2 100644
--- a/forms/source/component/Filter.cxx
+++ b/forms/source/component/Filter.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include "Filter.hxx"
 #include <FormComponent.hxx>
 #include <strings.hrc>
@@ -307,7 +311,7 @@ namespace frm
                     // To fix this, we would probably have to revert here to always return "1" or "0" as normalized
                     // filter, and change our client code to properly translate this (which could be some effort).
                     if ( nMarkerPos == 0 )
-                        aText.appendCopy( sText, sExpressionMarker.getLength() );
+                        aText.append( std::u16string_view(sText).substr(sExpressionMarker.getLength()) );
                     else
                     {
                         // fallback
diff --git a/framework/source/uielement/toolbarsmenucontroller.cxx b/framework/source/uielement/toolbarsmenucontroller.cxx
index c5f554488800..11870476e294 100644
--- a/framework/source/uielement/toolbarsmenucontroller.cxx
+++ b/framework/source/uielement/toolbarsmenucontroller.cxx
@@ -20,6 +20,7 @@
 #include <uielement/toolbarsmenucontroller.hxx>
 
 #include <algorithm>
+#include <string_view>
 
 #include <services.h>
 #include <strings.hrc>
@@ -394,7 +395,7 @@ void ToolbarsMenuController::fillPopupMenu( Reference< css::awt::XPopupMenu > co
 
             sal_Int32 n = aSortedTbs[i].aCommand.lastIndexOf( '/' );
             if (( n > 0 ) && (( n+1 ) < aSortedTbs[i].aCommand.getLength() ))
-                aStrBuf.appendCopy( aSortedTbs[i].aCommand, n+1 );
+                aStrBuf.append( std::u16string_view(aSortedTbs[i].aCommand).substr(n+1) );
 
             OUString aCmd( aStrBuf.makeStringAndClear() );
 
@@ -666,7 +667,7 @@ void SAL_CALL ToolbarsMenuController::itemSelected( const css::awt::MenuEvent& r
                     if (( nIndex > 0 ) && (( nIndex+1 ) < aCmd.getLength() ))
                     {
                         OUStringBuffer aBuf( "private:resource/toolbar/" );
-                        aBuf.appendCopy( aCmd, nIndex+1 );
+                        aBuf.append( std::u16string_view(aCmd).substr(nIndex+1) );
 
                         bool      bShow( !pVCLPopupMenu->IsItemChecked( rEvent.MenuId ));
                         OUString aToolBarResName( aBuf.makeStringAndClear() );
diff --git a/i18npool/source/characterclassification/cclass_unicode_parser.cxx b/i18npool/source/characterclassification/cclass_unicode_parser.cxx
index cc7107e355a2..29d69521954e 100644
--- a/i18npool/source/characterclassification/cclass_unicode_parser.cxx
+++ b/i18npool/source/characterclassification/cclass_unicode_parser.cxx
@@ -31,6 +31,7 @@
 #include <com/sun/star/i18n/NativeNumberSupplier.hpp>
 
 #include <string.h>
+#include <string_view>
 
 using namespace ::com::sun::star::uno;
 using namespace ::com::sun::star::i18n;
@@ -902,13 +903,13 @@ void cclass_Unicode::parseText( ParseResult& r, const OUString& rText, sal_Int32
                     {
                         if ( cLast == '\\' )
                         {   // escaped
-                            aSymbol.appendCopy(rText, postSymbolIndex, nextCharIndex - postSymbolIndex - 2);
+                            aSymbol.append(std::u16string_view(rText).substr(postSymbolIndex, nextCharIndex - postSymbolIndex - 2));
                             aSymbol.append(OUString(&current, 1));
                         }
                         else
                         {
                             eState = ssStop;
-                            aSymbol.appendCopy(rText, postSymbolIndex, nextCharIndex - postSymbolIndex - 1);
+                            aSymbol.append(std::u16string_view(rText).substr(postSymbolIndex, nextCharIndex - postSymbolIndex - 1));
                         }
                         postSymbolIndex = nextCharIndex;
                     }
@@ -927,13 +928,13 @@ void cclass_Unicode::parseText( ParseResult& r, const OUString& rText, sal_Int32
                 {
                     if ( cLast == '\\' )
                     {   // escaped
-                        aSymbol.appendCopy(rText, postSymbolIndex, nextCharIndex - postSymbolIndex - 2);
+                        aSymbol.append(std::u16string_view(rText).substr(postSymbolIndex, nextCharIndex - postSymbolIndex - 2));
                         aSymbol.append(OUString(&current, 1));
                     }
                     else if (current == nextChar &&
                             !(nContTypes & KParseTokens::TWO_DOUBLE_QUOTES_BREAK_STRING) )
                     {   // "" => literal " escaped
-                        aSymbol.appendCopy(rText, postSymbolIndex, nextCharIndex - postSymbolIndex);
+                        aSymbol.append(std::u16string_view(rText).substr(postSymbolIndex, nextCharIndex - postSymbolIndex));
                         nextCharIndex = index;
                         if (index < rText.getLength()) { ++nCodePoints; }
                         nextChar = (index < rText.getLength()) ? rText.iterateCodePoints(&index) : 0;
@@ -941,7 +942,7 @@ void cclass_Unicode::parseText( ParseResult& r, const OUString& rText, sal_Int32
                     else
                     {
                         eState = ssStop;
-                        aSymbol.appendCopy(rText, postSymbolIndex, nextCharIndex - postSymbolIndex - 1);
+                        aSymbol.append(std::u16string_view(rText).substr(postSymbolIndex, nextCharIndex - postSymbolIndex - 1));
                     }
                     postSymbolIndex = nextCharIndex;
                 }
@@ -1050,7 +1051,7 @@ void cclass_Unicode::parseText( ParseResult& r, const OUString& rText, sal_Int32
     {
         if (postSymbolIndex < nextCharIndex)
         {   //! open quote
-            aSymbol.appendCopy(rText, postSymbolIndex, nextCharIndex - postSymbolIndex - 1);
+            aSymbol.append(std::u16string_view(rText).substr(postSymbolIndex, nextCharIndex - postSymbolIndex - 1));
             r.TokenType |= KParseType::MISSING_QUOTE;
         }
         r.DequotedNameOrString = aSymbol.toString();
diff --git a/i18npool/source/nativenumber/nativenumbersupplier.cxx b/i18npool/source/nativenumber/nativenumbersupplier.cxx
index 4e6f176edbb2..80fd575e115d 100644
--- a/i18npool/source/nativenumber/nativenumbersupplier.cxx
+++ b/i18npool/source/nativenumber/nativenumbersupplier.cxx
@@ -28,6 +28,7 @@
 #include <cppuhelper/supportsservice.hxx>
 #include <map>
 #include <memory>
+#include <string_view>
 #include <unordered_map>
 #include <com/sun/star/linguistic2/NumberText.hpp>
 
@@ -1070,7 +1071,7 @@ OUString getHebrewNativeNumberString(const OUString& aNumberString, bool useGere
         makeHebrewNumber(value, output, true, useGeresh);
 
         if (i < len)
-            output.appendCopy(aNumberString,i);
+            output.append(std::u16string_view(aNumberString).substr(i));
 
         return output.makeStringAndClear();
     }
@@ -1189,7 +1190,7 @@ OUString getCyrillicNativeNumberString(const OUString& aNumberString)
         makeCyrillicNumber(value, output, true);
 
         if (i < len)
-            output.appendCopy(aNumberString,i);
+            output.append(std::u16string_view(aNumberString).substr(i));
 
         return output.makeStringAndClear();
     }
diff --git a/include/rtl/ustrbuf.hxx b/include/rtl/ustrbuf.hxx
index e504cb894755..62ba9f6b2cd7 100644
--- a/include/rtl/ustrbuf.hxx
+++ b/include/rtl/ustrbuf.hxx
@@ -24,6 +24,12 @@
 
 #include <cassert>
 #include <cstring>
+#include <limits>
+#include <new>
+
+#if defined LIBO_INTERNAL_ONLY
+#include <string_view>
+#endif
 
 #include "rtl/ustrbuf.h"
 #include "rtl/ustring.hxx"
@@ -530,46 +536,14 @@ public:
         return append( str.getStr(), str.getLength() );
     }
 
-#ifdef LIBO_INTERNAL_ONLY
-    /**
-        Appends a substring of an OUString, starting at position beginIndex.
-
-        The characters of the <code>OUString</code> argument are appended, in
-        order, to the contents of this string buffer.
-
-        @param   str   a string.
-        @param   beginIndex the beginning index, inclusive. Must be >= 0 and <= the length of str.
-        @return  this string buffer.
-
-        @since LibreOffice 6.2
-     */
-    OUStringBuffer & appendCopy(const OUString &str, sal_Int32 beginIndex)
-    {
-        assert(beginIndex >=0 && beginIndex <= str.getLength());
-        return append( str.getStr() + beginIndex, str.getLength() - beginIndex );
-    }
-
-    /**
-        Appends a substring of an OUString, starting at position beginIndex,
-        running for count characters.
-
-        The characters of the <code>OUString</code> argument are appended, in
-        order, to the contents of this string buffer.
-
-        @param   str    a string.
-        @param   beginIndex the beginning index, inclusive. Must be >= 0 and <= the length of str.
-        @param   count must be >= 0 and <= (str.length() - beginIndex).
-        @return  this string buffer.
-
-        @since LibreOffice 6.2
-     */
-    OUStringBuffer & appendCopy(const OUString &str, sal_Int32 beginIndex, sal_Int32 count)
-    {
-        assert(beginIndex >=0 && beginIndex <= str.getLength());
-        assert(count >=0 && count <= (str.getLength() - beginIndex));
-        return append( str.getStr() + beginIndex, count );
+#if defined LIBO_INTERNAL_ONLY
+    OUStringBuffer & append(std::u16string_view sv) {
+        if (sv.size() > sal_uInt32(std::numeric_limits<sal_Int32>::max())) {
+            throw std::bad_alloc();
+        }
+        return append(sv.data(), sv.size());
     }
-#endif // LIBO_INTERNAL_ONLY
+#endif
 
     /**
         Appends the content of a stringbuffer to this string buffer.
diff --git a/oox/source/core/relationshandler.cxx b/oox/source/core/relationshandler.cxx
index 16eb928ded2a..9b7675ff2cb1 100644
--- a/oox/source/core/relationshandler.cxx
+++ b/oox/source/core/relationshandler.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include <oox/core/relationshandler.hxx>
 
 #include <rtl/ustrbuf.hxx>
@@ -44,7 +48,7 @@ OUString lclGetRelationsPath( const OUString& rFragmentPath )
     return
         OUStringBuffer( rFragmentPath.copy( 0, nPathLen ) ).    // file path including slash
         append( "_rels/" ).                                // additional '_rels/' path
-        appendCopy( rFragmentPath, nPathLen ).               // file name after path
+        append( std::u16string_view(rFragmentPath).substr(nPathLen) ).               // file name after path
         append( ".rels" ).                                 // '.rels' suffix
         makeStringAndClear();
 }
diff --git a/oox/source/dump/dumperbase.cxx b/oox/source/dump/dumperbase.cxx
index d754c6fa9cd9..77b964b43b1e 100644
--- a/oox/source/dump/dumperbase.cxx
+++ b/oox/source/dump/dumperbase.cxx
@@ -20,6 +20,8 @@
 #include <oox/dump/dumperbase.hxx>
 
 #include <algorithm>
+#include <string_view>
+
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
 #include <com/sun/star/io/XActiveDataSource.hpp>
 #include <com/sun/star/io/TextOutputStream.hpp>
@@ -496,7 +498,7 @@ void StringHelper::appendEncString( OUStringBuffer& rStr, const OUString& rData,
             if( (nBeg == 0) && (nIdx == nEnd) )
                 rStr.append( rData );
             else
-                rStr.appendCopy( rData, nBeg, nIdx - nBeg );
+                rStr.append( std::u16string_view(rData).substr(nBeg, nIdx - nBeg) );
         }
         // append characters to be encoded
         while( (nIdx < nEnd) && (rData[ nIdx ] < 0x20) )
@@ -562,7 +564,7 @@ OUString lclTrimQuotedStringList( const OUString& rStr )
             {
                 // seek to next quote character and add text portion to token buffer
                 sal_Int32 nEnd = lclIndexOf( rStr, OOX_DUMP_CFG_QUOTE, nPos );
-                aToken.appendCopy( rStr, nPos, nEnd - nPos );
+                aToken.append( std::u16string_view(rStr).substr(nPos, nEnd - nPos) );
                 // process literal quotes
                 while( (nEnd + 1 < nLen) && (rStr[ nEnd ] == OOX_DUMP_CFG_QUOTE) && (rStr[ nEnd + 1 ] == OOX_DUMP_CFG_QUOTE) )
                 {
@@ -585,7 +587,7 @@ OUString lclTrimQuotedStringList( const OUString& rStr )
         {
             // find list separator, add token text to buffer
             sal_Int32 nEnd = lclIndexOf( rStr, OOX_DUMP_CFG_LISTSEP, nPos );
-            aBuffer.appendCopy( rStr,  nPos, nEnd - nPos );
+            aBuffer.append( std::u16string_view(rStr).substr(nPos, nEnd - nPos) );
             if( nEnd < nLen )
                 aBuffer.append( OOX_DUMP_LF );
             // set current position behind list separator
diff --git a/opencl/source/openclconfig.cxx b/opencl/source/openclconfig.cxx
index 7517cf3fecdf..cf067de5aac3 100644
--- a/opencl/source/openclconfig.cxx
+++ b/opencl/source/openclconfig.cxx
@@ -7,6 +7,10 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include <unicode/regex.h>
 
 #include <comphelper/configuration.hxx>
@@ -76,7 +80,7 @@ OUString getToken(const OUString& string, sal_Int32& index)
     while ((p = token.indexOf('%', i)) >= 0)
     {
         if (p > i)
-            result.appendCopy(token, i, p - i);
+            result.append(std::u16string_view(token).substr(i, p - i));
         if (p < token.getLength() - 2)
         {
             result.append(OUStringLiteral1(token.copy(p+1, 2).toInt32(16)));
@@ -87,7 +91,7 @@ OUString getToken(const OUString& string, sal_Int32& index)
             i = token.getLength();
         }
     }
-    result.appendCopy(token,i);
+    result.append(std::u16string_view(token).substr(i));
 
     return result.makeStringAndClear();
 }
diff --git a/registry/source/keyimpl.cxx b/registry/source/keyimpl.cxx
index 508d36ea3a66..06bbda584c33 100644
--- a/registry/source/keyimpl.cxx
+++ b/registry/source/keyimpl.cxx
@@ -19,6 +19,7 @@
 
 
 #include <string.h>
+#include <string_view>
 
 #include "keyimpl.hxx"
 
@@ -987,7 +988,7 @@ OUString ORegKey::getFullPath(OUString const & path) const {
     OUStringBuffer b(m_name);
     if (!b.isEmpty() && b[b.getLength() - 1] == '/') {
         if (path[0] == '/') {
-            b.appendCopy(path,1);
+            b.append(std::u16string_view(path).substr(1));
         } else {
             b.append(path);
         }
diff --git a/sax/source/tools/converter.cxx b/sax/source/tools/converter.cxx
index e1dbac1355e5..dce277b3e464 100644
--- a/sax/source/tools/converter.cxx
+++ b/sax/source/tools/converter.cxx
@@ -35,6 +35,7 @@
 #include <osl/diagnose.h>
 
 #include <algorithm>
+#include <string_view>
 
 using namespace com::sun::star;
 using namespace com::sun::star::uno;
@@ -755,7 +756,7 @@ void Converter::convertDuration(OUStringBuffer& rBuffer,
         if ( aNS.getLength() > 2 )
         {
             rBuffer.append( '.');
-            rBuffer.appendCopy( aNS, 2 );     // strip "0."
+            rBuffer.append( std::u16string_view(aNS).substr(2) );     // strip "0."
         }
     }
     rBuffer.append( 'S');
diff --git a/sc/source/core/tool/address.cxx b/sc/source/core/tool/address.cxx
index 2b053d5e3d43..9d076053df6b 100644
--- a/sc/source/core/tool/address.cxx
+++ b/sc/source/core/tool/address.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include <address.hxx>
 #include <global.hxx>
 #include <compiler.hxx>
@@ -2157,7 +2161,7 @@ static void lcl_ScRange_Format_XL_Header( OUStringBuffer& rString, const ScRange
                 {
                     if (!aDocName.isEmpty())
                     {
-                        rString.append("'[").append(aDocName).append("]").appendCopy(aTabName, 1);
+                        rString.append("'[").append(aDocName).append("]").append(std::u16string_view(aTabName).substr(1));
                     }
                     else
                     {
diff --git a/sc/source/filter/excel/xehelper.cxx b/sc/source/filter/excel/xehelper.cxx
index c6475572f477..de1292feb7e6 100644
--- a/sc/source/filter/excel/xehelper.cxx
+++ b/sc/source/filter/excel/xehelper.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include <com/sun/star/i18n/XBreakIterator.hpp>
 #include <com/sun/star/i18n/ScriptType.hpp>
 #include <sfx2/objsh.hxx>
@@ -921,7 +925,7 @@ OUString lclEncodeDosUrl(
                 // Excel seems confused by this token).
                 aBuf.append(EXC_URL_PARENTDIR);
             else
-                aBuf.appendCopy(aOldUrl,0,nPos).append(EXC_URL_SUBDIR);
+                aBuf.append(std::u16string_view(aOldUrl).substr(0,nPos)).append(EXC_URL_SUBDIR);
 
             aOldUrl = aOldUrl.copy(nPos + 1);
         }
diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index dbe34d3fc937..377495e609d1 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -18,6 +18,8 @@
  */
 
 #include <memory>
+#include <string_view>
+
 #include <inputhdl.hxx>
 #include <scitems.hxx>
 #include <editeng/eeitem.hxx>
@@ -1001,9 +1003,9 @@ void ScInputHandler::ShowArgumentsTip( OUString& rSelText )
                             if (nStartPosition > 0)
                             {
                                 OUStringBuffer aBuf;
-                                aBuf.appendCopy(aNew, 0, nStartPosition);
+                                aBuf.append(std::u16string_view(aNew).substr(0, nStartPosition));
                                 aBuf.append(u'\x25BA');
-                                aBuf.appendCopy(aNew, nStartPosition);
+                                aBuf.append(std::u16string_view(aNew).substr(nStartPosition));
                                 nArgs = ppFDesc->getParameterCount();
                                 sal_Int16 nVarArgsSet = 0;
                                 if ( nArgs >= PAIRED_VAR_ARGS )
diff --git a/sdext/source/pdfimport/tree/style.cxx b/sdext/source/pdfimport/tree/style.cxx
index 87d0479a564a..b00920a62f93 100644
--- a/sdext/source/pdfimport/tree/style.cxx
+++ b/sdext/source/pdfimport/tree/style.cxx
@@ -25,6 +25,7 @@
 #include <rtl/ustrbuf.hxx>
 
 #include <algorithm>
+#include <string_view>
 
 using namespace pdfi;
 
@@ -167,7 +168,7 @@ OUString StyleContainer::getStyleName( sal_Int32 nStyle ) const
             else
                 aStyleName = OStringToOUString( rStyle.Name, RTL_TEXTENCODING_ASCII_US );
             sal_Int32 nIndex = aStyleName.lastIndexOf( ':' );
-            aRet.appendCopy( aStyleName, nIndex+1 );
+            aRet.append( std::u16string_view(aStyleName).substr(nIndex+1) );
             aRet.append( nStyle );
         }
     }
diff --git a/sdext/source/presenter/PresenterController.cxx b/sdext/source/presenter/PresenterController.cxx
index 1a1c6bbc9b08..313a34cef216 100644
--- a/sdext/source/presenter/PresenterController.cxx
+++ b/sdext/source/presenter/PresenterController.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include "PresenterController.hxx"
 
 #include "PresenterAccessibility.hxx"
@@ -381,13 +385,13 @@ void PresenterController::UpdatePaneTitles()
             if (nStartIndex < 0)
             {
                 // Add the remaining part of the string.
-                sResult.appendCopy(sTemplate, nIndex);
+                sResult.append(std::u16string_view(sTemplate).substr(nIndex));
                 break;
             }
             else
             {
                 // Add the part preceding the next %.
-                sResult.appendCopy(sTemplate, nIndex, nStartIndex-nIndex);
+                sResult.append(std::u16string_view(sTemplate).substr(nIndex, nStartIndex-nIndex));
 
                 // Get the placeholder
                 ++nStartIndex;
diff --git a/stoc/source/uriproc/ExternalUriReferenceTranslator.cxx b/stoc/source/uriproc/ExternalUriReferenceTranslator.cxx
index f1f102311c7e..c945c1a92c78 100644
--- a/stoc/source/uriproc/ExternalUriReferenceTranslator.cxx
+++ b/stoc/source/uriproc/ExternalUriReferenceTranslator.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include <com/sun/star/lang/XServiceInfo.hpp>
 #include <com/sun/star/uno/Exception.hpp>
 #include <com/sun/star/uno/Reference.hxx>
@@ -91,7 +95,7 @@ OUString Translator::translateToInternal(
     }
     sal_Int32 i = RTL_CONSTASCII_LENGTH("file:");
     OUStringBuffer buf;
-    buf.appendCopy(externalUriReference, 0, i);
+    buf.append(std::u16string_view(externalUriReference).substr(0, i));
     // Some environments (e.g., Java) produce illegal file URLs without an
     // authority part; treat them as having an empty authority part:
     if (!externalUriReference.match("//", i))
@@ -139,7 +143,7 @@ OUString Translator::translateToExternal(
     }
     sal_Int32 i = RTL_CONSTASCII_LENGTH("file://");
     OUStringBuffer buf;
-    buf.appendCopy(internalUriReference, 0, i);
+    buf.append(std::u16string_view(internalUriReference).substr(0, i));
     rtl_TextEncoding encoding = osl_getThreadTextEncoding();
     for (bool path = true;;) {
         sal_Int32 j = i;
diff --git a/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTscript.cxx b/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTscript.cxx
index af7b25c57264..7fdc07b922e7 100644
--- a/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTscript.cxx
+++ b/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTscript.cxx
@@ -40,6 +40,7 @@
 #include <sal/types.h>
 
 #include <exception>
+#include <string_view>
 
 namespace {
 
@@ -284,7 +285,7 @@ void SAL_CALL UrlReference::setName(OUString const & name)
 
     OUStringBuffer newPath;
     newPath.append(encodeNameOrParamFragment(name));
-    newPath.appendCopy(m_base.m_path, i);
+    newPath.append(std::u16string_view(m_base.m_path).substr(i));
     m_base.m_path = newPath.makeStringAndClear();
 }
 
@@ -315,7 +316,7 @@ void UrlReference::setParameter(OUString const & key, OUString const & value)
     }
 
     OUStringBuffer newPath;
-    newPath.appendCopy(m_base.m_path, 0, i);
+    newPath.append(std::u16string_view(m_base.m_path).substr(0, i));
     if (!bExistent) {
         newPath.append( m_base.m_path.indexOf('?') < 0 ? '?' : '&' );
         newPath.append(encodeNameOrParamFragment(key));
@@ -325,7 +326,7 @@ void UrlReference::setParameter(OUString const & key, OUString const & value)
     if (bExistent) {
         /*oldValue = */
         parsePart(m_base.m_path, false, &i); // skip key
-        newPath.appendCopy(m_base.m_path, i);
+        newPath.append(std::u16string_view(m_base.m_path).substr(i));
     }
 
     m_base.m_path = newPath.makeStringAndClear();
diff --git a/svl/source/misc/urihelper.cxx b/svl/source/misc/urihelper.cxx
index a424653679e8..dc60dee5f73f 100644
--- a/svl/source/misc/urihelper.cxx
+++ b/svl/source/misc/urihelper.cxx
@@ -18,6 +18,8 @@
  */
 
 #include <memory>
+#include <string_view>
+
 #include <sal/config.h>
 
 #include <unicode/idna.h>
@@ -783,11 +785,11 @@ OUString URIHelper::resolveIdnaHost(OUString const & url) {
         return url;
     }
     OUStringBuffer buf(uri->getScheme());
-    buf.append("://").appendCopy(auth, 0, hostStart);
+    buf.append("://").append(std::u16string_view(auth).substr(0, hostStart));
     buf.append(
         reinterpret_cast<sal_Unicode const *>(ascii.getBuffer()),
         ascii.length());
-    buf.appendCopy(auth, hostEnd).append(uri->getPath());
+    buf.append(std::u16string_view(auth).substr(hostEnd)).append(uri->getPath());
     if (uri->hasQuery()) {
         buf.append('?').append(uri->getQuery());
     }
diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx
index 903fd9960200..94a6ed27bb16 100644
--- a/svl/source/numbers/zformat.cxx
+++ b/svl/source/numbers/zformat.cxx
@@ -21,6 +21,8 @@
 #include <float.h>
 #include <errno.h>
 #include <stdlib.h>
+#include <string_view>
+
 #include <comphelper/string.hxx>
 #include <sal/log.hxx>
 #include <tools/debug.hxx>
@@ -1734,7 +1736,7 @@ short SvNumberformat::ImpNextSymbol(OUStringBuffer& rString,
                         0 <= nNatNumNum && nNatNumNum <= 19 )
                 {
                     sBuffSymbol.stripStart('[');
-                    sBuffSymbol.appendCopy( aBufStr, --nPos, aNatNum.getLength()+1 );
+                    sBuffSymbol.append( std::u16string_view(aBufStr).substr(--nPos, aNatNum.getLength()+1) );
                     nPos += aNatNum.getLength()+1;
                     //! SymbolType is negative
                     eSymbolType = static_cast<short>(BRACKET_SYMBOLTYPE_NATNUM0 - nNatNumNum);
@@ -1744,7 +1746,7 @@ short SvNumberformat::ImpNextSymbol(OUStringBuffer& rString,
                         1 <= nDBNum && nDBNum <= 9 )
                 {
                     sBuffSymbol.stripStart('[');
-                    sBuffSymbol.appendCopy( aBufStr, --nPos, aDBNum.getLength()+1 );
+                    sBuffSymbol.append( std::u16string_view(aBufStr).substr(--nPos, aDBNum.getLength()+1) );
                     nPos += aDBNum.getLength()+1;
                     //! SymbolType is negative
                     eSymbolType = sal::static_int_cast< short >( BRACKET_SYMBOLTYPE_DBNUM1 - (nDBNum - 1) );
@@ -1972,7 +1974,7 @@ OUString SvNumberformat::StripNewCurrencyDelimiters( const OUString& rStr )
         }
         else
         {
-            aTmp.appendCopy(rStr, nStartPos, nPos - nStartPos );
+            aTmp.append(std::u16string_view(rStr).substr(nStartPos, nPos - nStartPos) );
             nStartPos = nPos + 2;
             sal_Int32 nDash;
             nEnd = nStartPos - 1;
@@ -2003,13 +2005,13 @@ OUString SvNumberformat::StripNewCurrencyDelimiters( const OUString& rStr )
             {
                 nPos = nDash;
             }
-            aTmp.appendCopy(rStr, nStartPos, nPos - nStartPos );
+            aTmp.append(std::u16string_view(rStr).substr(nStartPos, nPos - nStartPos) );
             nStartPos = nClose + 1;
         }
     }
     if ( nLen > nStartPos )
     {
-        aTmp.appendCopy(rStr, nStartPos, nLen - nStartPos );
+        aTmp.append(std::u16string_view(rStr).substr(nStartPos, nLen - nStartPos) );
     }
     return aTmp.makeStringAndClear();
 }
diff --git a/sw/source/core/access/accportions.cxx b/sw/source/core/access/accportions.cxx
index 3cb904eaa634..a5cac3f6f6b6 100644
--- a/sw/source/core/access/accportions.cxx
+++ b/sw/source/core/access/accportions.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include "accportions.hxx"
 #include <rtl/ustring.hxx>
 #include <com/sun/star/i18n/Boundary.hpp>
@@ -125,7 +129,7 @@ void SwAccessiblePortionData::Text(TextFrameIndex const nLength,
     m_aPortionAttrs.push_back( nAttr );
 
     // update buffer + nViewPosition
-    m_aBuffer.appendCopy(m_pTextFrame->GetText(), sal_Int32(m_nViewPosition), sal_Int32(nLength));
+    m_aBuffer.append(std::u16string_view(m_pTextFrame->GetText()).substr(sal_Int32(m_nViewPosition), sal_Int32(nLength)));
     m_nViewPosition += nLength;
 }
 
diff --git a/sw/source/core/bastyp/calc.cxx b/sw/source/core/bastyp/calc.cxx
index 982abef78a34..0ba681813caa 100644
--- a/sw/source/core/bastyp/calc.cxx
+++ b/sw/source/core/bastyp/calc.cxx
@@ -23,6 +23,7 @@
 #include <cfloat>
 #include <climits>
 #include <memory>
+#include <string_view>
 #include <comphelper/processfactory.hxx>
 #include <comphelper/string.hxx>
 #include <cstdlib>
@@ -758,8 +759,8 @@ SwCalcOper SwCalc::GetToken()
                                 // ignore the ]
                                 if ('\\' == m_sCommand[nFndPos-1])
                                 {
-                                    m_aVarName.appendCopy(m_sCommand, nSttPos,
-                                                    nFndPos - nSttPos - 1 );
+                                    m_aVarName.append(std::u16string_view(m_sCommand).substr(nSttPos,
+                                                    nFndPos - nSttPos - 1) );
                                     nSttPos = ++nFndPos;
                                 }
                                 else
@@ -770,8 +771,8 @@ SwCalcOper SwCalc::GetToken()
                         if( nFndPos != -1 )
                         {
                             if( nSttPos != nFndPos )
-                                m_aVarName.appendCopy(m_sCommand, nSttPos,
-                                                    nFndPos - nSttPos );
+                                m_aVarName.append(std::u16string_view(m_sCommand).substr(nSttPos,
+                                                    nFndPos - nSttPos) );
                             aRes.EndPos = nFndPos + 1;
                             m_eCurrOper = CALC_NAME;
                         }
diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx
index 0d888149e6d0..f188f65f5791 100644
--- a/sw/source/core/crsr/pam.cxx
+++ b/sw/source/core/crsr/pam.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include <tools/gen.hxx>
 #include <hintids.hxx>
 #include <editeng/protitem.hxx>
@@ -1026,7 +1030,7 @@ OUString SwPaM::GetText() const
                     ? End()->nContent.GetIndex()
                     : aTmpStr.getLength();
 
-                aResult.appendCopy(aTmpStr, nStart, nEnd-nStart);
+                aResult.append(std::u16string_view(aTmpStr).substr(nStart, nEnd-nStart));
             }
             else
             {
diff --git a/sw/source/core/fields/cellfml.cxx b/sw/source/core/fields/cellfml.cxx
index e5971f552bfb..bb0aad922518 100644
--- a/sw/source/core/fields/cellfml.cxx
+++ b/sw/source/core/fields/cellfml.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include <float.h>
 #include <hintids.hxx>
 #include <hints.hxx>
@@ -640,12 +644,12 @@ OUString SwTableFormula::ScanString( FnScanFormula fnFormula, const SwTable& rTa
         if (nStt<0 || nEnd<0 )
         {
             // set the rest and finish
-            aStr.appendCopy(m_sFormula, nFormula);
+            aStr.append(std::u16string_view(m_sFormula).substr(nFormula));
             break;
         }
 
         // write beginning
-        aStr.appendCopy(m_sFormula, nFormula, nStt - nFormula);
+        aStr.append(std::u16string_view(m_sFormula).substr(nFormula, nStt - nFormula));
 
         if (fnFormula)
         {
diff --git a/sw/source/core/text/redlnitr.cxx b/sw/source/core/text/redlnitr.cxx
index f948d0de950b..c66465ab953b 100644
--- a/sw/source/core/text/redlnitr.cxx
+++ b/sw/source/core/text/redlnitr.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include <hintids.hxx>
 #include <o3tl/make_unique.hxx>
 #include <svl/whiter.hxx>
@@ -92,7 +96,7 @@ CheckParaRedlineMerge(SwTextFrame & rFrame, SwTextNode & rTextNode,
         if (pStart->nContent != nLastEnd) // not 0 so we eliminate adjacent deletes
         {
             extents.emplace_back(pNode, nLastEnd, pStart->nContent.GetIndex());
-            mergedText.appendCopy(pNode->GetText(), nLastEnd, pStart->nContent.GetIndex() - nLastEnd);
+            mergedText.append(std::u16string_view(pNode->GetText()).substr(nLastEnd, pStart->nContent.GetIndex() - nLastEnd));
         }
         if (&pEnd->nNode.GetNode() != pNode)
         {
@@ -213,7 +217,7 @@ CheckParaRedlineMerge(SwTextFrame & rFrame, SwTextNode & rTextNode,
     if (nLastEnd != pNode->Len())
     {
         extents.emplace_back(pNode, nLastEnd, pNode->Len());
-        mergedText.appendCopy(pNode->GetText(), nLastEnd, pNode->Len() - nLastEnd);
+        mergedText.append(std::u16string_view(pNode->GetText()).substr(nLastEnd, pNode->Len() - nLastEnd));
     }
     if (extents.empty()) // there was no text anywhere
     {
diff --git a/sw/source/filter/xml/xmltexte.cxx b/sw/source/filter/xml/xmltexte.cxx
index d20f484c1b6e..5d12115e023c 100644
--- a/sw/source/filter/xml/xmltexte.cxx
+++ b/sw/source/filter/xml/xmltexte.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include <comphelper/classids.hxx>
 #include <com/sun/star/embed/XEmbeddedObject.hpp>
 #include <com/sun/star/embed/XLinkageSupport.hpp>
@@ -367,7 +371,7 @@ void SwXMLTextParagraphExport::_exportTextEmbedded(
                         if( aBuffer.isEmpty() )
                         {
                             aBuffer.append( '\'' );
-                            aBuffer.appendCopy( sRange, 0, i );
+                            aBuffer.append( std::u16string_view(sRange).substr(0, i) );
                         }
                         if( '\'' == c || '\\' == c )
                             aBuffer.append( '\\' );
diff --git a/toolkit/source/awt/animatedimagespeer.cxx b/toolkit/source/awt/animatedimagespeer.cxx
index 8221d5a21082..4d1be4be96e7 100644
--- a/toolkit/source/awt/animatedimagespeer.cxx
+++ b/toolkit/source/awt/animatedimagespeer.cxx
@@ -39,7 +39,7 @@
 #include <vcl/settings.hxx>
 
 #include <limits>
-
+#include <string_view>
 
 namespace toolkit
 {
@@ -117,9 +117,9 @@ namespace toolkit
             ENSURE_OR_RETURN( separatorPos != -1, "lcl_getHighContrastURL: unsupported URL scheme - cannot automatically determine HC version!", i_imageURL );
 
             OUStringBuffer composer;
-            composer.appendCopy( i_imageURL, 0, separatorPos );
+            composer.append( std::u16string_view(i_imageURL).substr(0, separatorPos) );
             composer.append( "/sifr" );
-            composer.appendCopy( i_imageURL, separatorPos );
+            composer.append( std::u16string_view(i_imageURL).substr(separatorPos) );
             return composer.makeStringAndClear();
         }
 
diff --git a/ucb/source/ucp/tdoc/tdoc_content.cxx b/ucb/source/ucp/tdoc/tdoc_content.cxx
index 1cf7fbdaa222..688662e30a95 100644
--- a/ucb/source/ucp/tdoc/tdoc_content.cxx
+++ b/ucb/source/ucp/tdoc/tdoc_content.cxx
@@ -24,6 +24,10 @@
 
  *************************************************************************/
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include <osl/diagnose.h>
 #include <rtl/ustrbuf.hxx>
 #include <com/sun/star/beans/IllegalTypeException.hpp>
@@ -1729,7 +1733,7 @@ Content::queryChildContent( const OUString & rRelativeChildUri )
     if ( !rRelativeChildUri.startsWith("/") )
         aBuf.append( rRelativeChildUri );
     else
-        aBuf.appendCopy( rRelativeChildUri, 1 );
+        aBuf.append( std::u16string_view(rRelativeChildUri).substr(1) );
 
     uno::Reference< ucb::XContentIdentifier > xChildId
         = new ::ucbhelper::ContentIdentifier( aBuf.makeStringAndClear() );
diff --git a/unotools/source/config/configpaths.cxx b/unotools/source/config/configpaths.cxx
index 6625b3d382d4..81d8cb828c6e 100644
--- a/unotools/source/config/configpaths.cxx
+++ b/unotools/source/config/configpaths.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include <unotools/configpaths.hxx>
 #include <rtl/ustring.hxx>
 #include <rtl/ustrbuf.hxx>
@@ -49,7 +53,7 @@ void lcl_resolveCharEntities(OUString & aLocalString)
         OSL_ENSURE(ch,"Configuration path contains '&' that is not part of a valid character escape");
         if (ch)
         {
-            aResult.appendCopy(aLocalString, nStart,nEscapePos-nStart).append(ch);
+            aResult.append(std::u16string_view(aLocalString).substr(nStart,nEscapePos-nStart)).append(ch);
 
             sal_Int32 nEscapeEnd=aLocalString.indexOf(';',nEscapePos);
             nStart = nEscapeEnd+1;
@@ -62,7 +66,7 @@ void lcl_resolveCharEntities(OUString & aLocalString)
     }
     while ( nEscapePos > 0);
 
-    aResult.appendCopy(aLocalString, nStart);
+    aResult.append(std::u16string_view(aLocalString).substr(nStart));
 
     aLocalString = aResult.makeStringAndClear();
 }
diff --git a/unotools/source/i18n/textsearch.cxx b/unotools/source/i18n/textsearch.cxx
index 81768e9d021e..bd0f3f9bcb2e 100644
--- a/unotools/source/i18n/textsearch.cxx
+++ b/unotools/source/i18n/textsearch.cxx
@@ -20,6 +20,7 @@
 #include <sal/config.h>
 
 #include <cstdlib>
+#include <string_view>
 
 #include <i18nlangtag/languagetag.hxx>
 #include <i18nutil/searchopt.hxx>
@@ -316,7 +317,7 @@ void TextSearch::ReplaceBackReferences( OUString& rReplaceStr, const OUString &r
             {
                 sal_Int32 nStart = rResult.startOffset[0];
                 sal_Int32 nLength = rResult.endOffset[0] - rResult.startOffset[0];
-                sBuff.appendCopy(rStr, nStart, nLength);
+                sBuff.append(std::u16string_view(rStr).substr(nStart, nLength));
             }
             else if((i < rReplaceStr.getLength() - 1) && rReplaceStr[i] == '$')
             {
@@ -353,7 +354,7 @@ void TextSearch::ReplaceBackReferences( OUString& rReplaceStr, const OUString &r
                                 nSttReg = rResult.endOffset[j];
                             }
                             // Copy reference from found string
-                            sBuff.appendCopy(rStr, nSttReg, nRegLen);
+                            sBuff.append(std::u16string_view(rStr).substr(nSttReg, nRegLen));
                         }
                         i += 1;
                     }
diff --git a/vbahelper/source/vbahelper/vbacommandbarhelper.cxx b/vbahelper/source/vbahelper/vbacommandbarhelper.cxx
index 708b59a0da41..961288463c63 100644
--- a/vbahelper/source/vbahelper/vbacommandbarhelper.cxx
+++ b/vbahelper/source/vbahelper/vbacommandbarhelper.cxx
@@ -33,6 +33,7 @@
 #include <sal/log.hxx>
 #include <time.h>
 #include <map>
+#include <string_view>
 
 using namespace com::sun::star;
 using namespace ooo::vba;
@@ -223,10 +224,10 @@ sal_Int32 VbaCommandBarHelper::findControlByName( const css::uno::Reference< css
         }
         else
         {
-            aBuffer.appendCopy( sLabel, 0, index );
+            aBuffer.append( std::u16string_view(sLabel).substr(0, index) );
             if( bMenu )
                 aBuffer.append( '&' );
-            aBuffer.appendCopy( sLabel, index + 1 );
+            aBuffer.append( std::u16string_view(sLabel).substr(index + 1) );
         }
         OUString sNewLabel = aBuffer.makeStringAndClear();
         SAL_INFO("vbahelper", "VbaCommandBarHelper::findControlByName, control name: " << sNewLabel);
diff --git a/vcl/source/control/field.cxx b/vcl/source/control/field.cxx
index 6801c0a7a5d8..d444bc8c678e 100644
--- a/vcl/source/control/field.cxx
+++ b/vcl/source/control/field.cxx
@@ -18,6 +18,9 @@
  */
 
 #include <sal/config.h>
+
+#include <string_view>
+
 #include <sal/log.hxx>
 #include <osl/diagnose.h>
 
@@ -113,23 +116,23 @@ bool ImplNumericGetValue( const OUString& rStr, sal_Int64& rValue,
         // If in "a b/c" format.
         if(nFracNumPos != -1 )
         {
-            aStr1.appendCopy(aStr, 0, nFracNumPos);
-            aStrNum.appendCopy(aStr, nFracNumPos+1, nFracDivPos-nFracNumPos-1);
-            aStrDenom.appendCopy(aStr, nFracDivPos+1);
+            aStr1.append(std::u16string_view(aStr).substr(0, nFracNumPos));
+            aStrNum.append(std::u16string_view(aStr).substr(nFracNumPos+1, nFracDivPos-nFracNumPos-1));
+            aStrDenom.append(std::u16string_view(aStr).substr(nFracDivPos+1));
         }
         // "a/b" format, or not a fraction at all
         else
         {
-            aStrNum.appendCopy(aStr, 0, nFracDivPos);
-            aStrDenom.appendCopy(aStr, nFracDivPos+1);
+            aStrNum.append(std::u16string_view(aStr).substr(0, nFracDivPos));
+            aStrDenom.append(std::u16string_view(aStr).substr(nFracDivPos+1));
         }
 
     }
     // parse decimal strings
     else if ( nDecPos >= 0)
     {
-        aStr1.appendCopy(aStr, 0, nDecPos);
-        aStr2.appendCopy(aStr, nDecPos+1);
+        aStr1.append(std::u16string_view(aStr).substr(0, nDecPos));
+        aStr2.append(std::u16string_view(aStr).substr(nDecPos+1));
     }
     else
         aStr1 = aStr;
diff --git a/vcl/source/control/field2.cxx b/vcl/source/control/field2.cxx
index cfef2ecdc002..71029a830cb5 100644
--- a/vcl/source/control/field2.cxx
+++ b/vcl/source/control/field2.cxx
@@ -20,6 +20,7 @@
 #include <sal/config.h>
 
 #include <algorithm>
+#include <string_view>
 
 #include <tools/diagnose_ex.h>
 #include <comphelper/processfactory.hxx>
@@ -678,7 +679,7 @@ static bool ImplPatternProcessKeyInput( Edit* pEdit, const KeyEvent& rKEvt,
             {
                 // possibly extend string until cursor position
                 if ( aStr.getLength() < nNewPos )
-                    aStr.appendCopy( rLiteralMask, aStr.getLength(), nNewPos-aStr.getLength() );
+                    aStr.append( std::u16string_view(rLiteralMask).substr(aStr.getLength(), nNewPos-aStr.getLength()) );
                 if ( nNewPos < aStr.getLength() )
                     aStr.insert( cChar, nNewPos );
                 else if ( nNewPos < rEditMask.getLength() )
diff --git a/vcl/source/control/longcurr.cxx b/vcl/source/control/longcurr.cxx
index 03820f9792fa..77453650d9a9 100644
--- a/vcl/source/control/longcurr.cxx
+++ b/vcl/source/control/longcurr.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include <comphelper/string.hxx>
 #include <tools/bigint.hxx>
 #include <sal/log.hxx>
@@ -117,7 +121,7 @@ bool ImplCurrencyGetValue( const OUString& rStr, BigInt& rValue,
     if ( nDecPos != -1 )
     {
         aStr1 = aStr.copy( 0, nDecPos );
-        aStr2.appendCopy(aStr, nDecPos+1);
+        aStr2.append(std::u16string_view(aStr).substr(nDecPos+1));
     }
     else
         aStr1 = aStr;
diff --git a/vcl/source/edit/texteng.cxx b/vcl/source/edit/texteng.cxx
index cdc1d4cbd11a..c4402d48924b 100644
--- a/vcl/source/edit/texteng.cxx
+++ b/vcl/source/edit/texteng.cxx
@@ -63,6 +63,7 @@
 #include <cstdlib>
 #include <memory>
 #include <set>
+#include <string_view>
 #include <vector>
 
 using namespace ::com::sun::star;
@@ -272,7 +273,7 @@ OUString TextEngine::GetTextLines( LineEnd aSeparator ) const
         for ( size_t nL = 0; nL < nLines; ++nL )
         {
             TextLine& rLine = pTEParaPortion->GetLines()[nL];
-            aText.appendCopy( pTEParaPortion->GetNode()->GetText(), rLine.GetStart(), rLine.GetEnd() - rLine.GetStart() );
+            aText.append( std::u16string_view(pTEParaPortion->GetNode()->GetText()).substr(rLine.GetStart(), rLine.GetEnd() - rLine.GetStart()) );
             if ( pSep && ( ( (nP+1) < nParas ) || ( (nL+1) < nLines ) ) )
                 aText.append(pSep);
         }
@@ -409,7 +410,7 @@ OUString TextEngine::GetText( const TextSelection& rSel, LineEnd aSeparator ) co
         if ( nNode == nEndPara ) // may also be == nStart!
             nEndPos = aSel.GetEnd().GetIndex();
 
-        aText.appendCopy(pNode->GetText(), nStartPos, nEndPos-nStartPos);
+        aText.append(std::u16string_view(pNode->GetText()).substr(nStartPos, nEndPos-nStartPos));
         if ( nNode < nEndPara )
             aText.append(pSep);
     }
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
index bc310e55cd37..24b0c04abc88 100644
--- a/vcl/source/window/menu.cxx
+++ b/vcl/source/window/menu.cxx
@@ -69,6 +69,7 @@
 #include <vcl/vcllayout.hxx>
 
 #include <map>
+#include <string_view>
 #include <vector>
 
 namespace vcl
@@ -1669,9 +1670,9 @@ static OUString getShortenedString( const OUString& i_rLong, vcl::RenderContext
         if (nPos < aNonMnem.getLength() && i_rLong[nPos+1] == aNonMnem[nPos])
         {
             OUStringBuffer aBuf( i_rLong.getLength() );
-            aBuf.appendCopy( aNonMnem, 0, nPos );
+            aBuf.append( std::u16string_view(aNonMnem).substr(0, nPos) );
             aBuf.append( '~' );
-            aBuf.appendCopy( aNonMnem, nPos );
+            aBuf.append( std::u16string_view(aNonMnem).substr(nPos) );
             aNonMnem = aBuf.makeStringAndClear();
         }
     }
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 9ed80c64d34e..fca398968320 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -9,6 +9,7 @@
 
 #include "rtfdocumentimpl.hxx"
 #include <memory>
+#include <string_view>
 #include <com/sun/star/embed/XEmbeddedObject.hpp>
 #include <com/sun/star/beans/PropertyAttribute.hpp>
 #include <com/sun/star/io/WrongFormatException.hpp>
@@ -2236,7 +2237,7 @@ RTFError RTFDocumentImpl::popState()
                                                   - aState.aLevelNumbers.size()));
                         }
                         else
-                            aBuf.appendCopy(aOrig, i, 1);
+                            aBuf.append(std::u16string_view(aOrig).substr(i, 1));
                     }
 
                     pValue->setString(aBuf.makeStringAndClear());
diff --git a/xmloff/source/core/xmluconv.cxx b/xmloff/source/core/xmluconv.cxx
index 804265efb022..2f0f4017e6da 100644
--- a/xmloff/source/core/xmluconv.cxx
+++ b/xmloff/source/core/xmluconv.cxx
@@ -17,6 +17,9 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
 
 #include <xmloff/xmluconv.hxx>
 
@@ -393,7 +396,7 @@ void SvXMLUnitConverter::convertDateTime( OUStringBuffer& rBuffer,
                 // Truncate nFractionDecimals+1 digit if it was not rounded to zero.
                 const sal_Int32 nCount = nLen - 2 - static_cast<int>(nLen > nFractionDecimals + 2);
                 rBuffer.append( '.');
-                rBuffer.appendCopy( aFraction, 2, nCount);     // strip 0.
+                rBuffer.append( std::u16string_view(aFraction).substr(2, nCount));     // strip 0.
             }
         }
     }
diff --git a/xmloff/source/meta/xmlmetai.cxx b/xmloff/source/meta/xmlmetai.cxx
index 21f634fe50e5..c64e2f7cd068 100644
--- a/xmloff/source/meta/xmlmetai.cxx
+++ b/xmloff/source/meta/xmlmetai.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
 #include <com/sun/star/xml/dom/SAXDocumentBuilder.hpp>
 #include <com/sun/star/xml/dom/XSAXDocumentBuilder2.hpp>
@@ -236,8 +240,8 @@ void SvXMLMetaDocumentContext::setBuildId(OUString const& i_rBuildId, const uno:
                 if ( nBegin != -1 )
                 {
                     sBuffer.append( '$' );
-                    sBuffer.appendCopy( i_rBuildId,
-                        nBegin + sBuildCompare.getLength() );
+                    sBuffer.append( std::u16string_view(i_rBuildId).substr(
+                        nBegin + sBuildCompare.getLength()) );
                     sBuildId = sBuffer.makeStringAndClear();
                 }
             }
diff --git a/xmloff/source/style/fonthdl.cxx b/xmloff/source/style/fonthdl.cxx
index 60da2fca83e1..e446aab5b437 100644
--- a/xmloff/source/style/fonthdl.cxx
+++ b/xmloff/source/style/fonthdl.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <string_view>
+
 #include "fonthdl.hxx"
 
 #include <sax/tools/converter.hxx>
@@ -93,7 +97,7 @@ bool XMLFontFamilyNamePropHdl::importXML( const OUString& rStrImpValue, uno::Any
             if( !sValue.isEmpty() )
                 sValue.append(';');
 
-            sValue.appendCopy(rStrImpValue, nFirst, nLast-nFirst+1);
+            sValue.append(std::u16string_view(rStrImpValue).substr(nFirst, nLast-nFirst+1));
         }
 
         if( -1 != nPos )
diff --git a/xmloff/source/style/xmlexppr.cxx b/xmloff/source/style/xmlexppr.cxx
index 7f85710cc1cf..be0f9de521df 100644
--- a/xmloff/source/style/xmlexppr.cxx
+++ b/xmloff/source/style/xmlexppr.cxx
@@ -18,6 +18,7 @@
  */
 
 #include <memory>
+#include <string_view>
 #include <com/sun/star/container/XNameContainer.hpp>
 #include <com/sun/star/xml/AttributeData.hpp>
 #include <com/sun/star/beans/XPropertyState.hpp>
@@ -937,7 +938,7 @@ void SvXMLExportPropertyMapper::_exportXML(
                                 sPrefix = pNamespaceMap->GetPrefixByKey( nKey );
                             }
                             // In any case, the attribute name has to be adapted.
-                            sNameBuffer.append(sPrefix).append(":").appendCopy(*pAttribName, nColonPos+1 );
+                            sNameBuffer.append(sPrefix).append(":").append(std::u16string_view(*pAttribName).substr(nColonPos+1) );
                             sAttribName = sNameBuffer.makeStringAndClear();
                         }
 


More information about the Libreoffice-commits mailing list