[Libreoffice-commits] core.git: 39 commits - dbaccess/source editeng/source extensions/source oox/source sc/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Sun Sep 9 19:08:41 UTC 2018


 dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx |   52 ++++++---------
 editeng/source/outliner/outliner.cxx                  |   15 ++--
 extensions/source/propctrlr/standardcontrol.cxx       |   22 ++++--
 oox/source/ole/axcontrol.cxx                          |   33 +++++----
 sc/source/core/data/globalx.cxx                       |    8 +-
 sc/source/core/tool/compiler.cxx                      |    4 -
 sc/source/filter/excel/xecontent.cxx                  |   35 +++++-----
 sc/source/filter/excel/xlformula.cxx                  |   19 +++--
 sc/source/filter/html/htmlexp.cxx                     |   36 +++-------
 sc/source/filter/html/htmlimp.cxx                     |   25 +++----
 sc/source/ui/app/inputhdl.cxx                         |   17 +++--
 sc/source/ui/dbgui/asciiopt.cxx                       |    3 
 sc/source/ui/dbgui/csvgrid.cxx                        |    8 --
 sc/source/ui/dbgui/csvruler.cxx                       |   24 ++++---
 sc/source/ui/dbgui/scuiasciiopt.cxx                   |   47 ++++++++------
 sc/source/ui/dbgui/scuiimoptdlg.cxx                   |   60 +++++++-----------
 sc/source/ui/dbgui/validate.cxx                       |   14 ++--
 sc/source/ui/docshell/arealink.cxx                    |   25 +++----
 sc/source/ui/docshell/docsh8.cxx                      |   26 +++----
 sc/source/ui/miscdlgs/anyrefdg.cxx                    |   33 +++++----
 sc/source/ui/miscdlgs/linkarea.cxx                    |   12 ++-
 sc/source/ui/optdlg/tpusrlst.cxx                      |   10 +--
 sc/source/ui/pagedlg/areasdlg.cxx                     |   13 +--
 23 files changed, 275 insertions(+), 266 deletions(-)

New commits:
commit a6589756916ae0e5f85c8320f602fa07b7291e73
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Sep 9 20:01:03 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:08:02 2018 +0200

    Avoid getTokenCount()
    
    Change-Id: I82fa0cca6cd14f92c11678fa7d416fcf629195b8

diff --git a/sc/source/ui/dbgui/scuiasciiopt.cxx b/sc/source/ui/dbgui/scuiasciiopt.cxx
index 57a888543cf2..fe4ae899fc47 100644
--- a/sc/source/ui/dbgui/scuiasciiopt.cxx
+++ b/sc/source/ui/dbgui/scuiasciiopt.cxx
@@ -34,7 +34,6 @@
 #include <strings.hrc>
 #include <strings.hxx>
 #include <csvtablebox.hxx>
-#include <comphelper/string.hxx>
 #include <osl/thread.h>
 #include <rtl/tencinfo.h>
 #include <unotools/transliterationwrapper.hxx>
@@ -122,13 +121,19 @@ static sal_Unicode lcl_CharFromCombo( const ComboBox& rCombo, const OUString& rL
 {
     sal_Unicode c = 0;
     OUString aStr = rCombo.GetText();
-    if ( !aStr.isEmpty() )
+    if ( !aStr.isEmpty() && !rList.isEmpty() )
     {
-        sal_Int32 nCount = comphelper::string::getTokenCount(rList, '\t');
-        for ( sal_Int32 i=0; i<nCount; i+=2 )
+        sal_Int32 nIdx {0};
+        OUString sToken {rList.getToken(0, '\t', nIdx)};
+        while (nIdx>0)
         {
-            if ( ScGlobal::GetpTransliteration()->isEqual( aStr, rList.getToken(i,'\t') ) )
-                c = static_cast<sal_Unicode>(rList.getToken(i+1,'\t').toInt32());
+            if ( ScGlobal::GetpTransliteration()->isEqual( aStr, sToken ) )
+            {
+                sal_Int32 nTmpIdx {nIdx};
+                c = static_cast<sal_Unicode>(rList.getToken(0, '\t', nTmpIdx).toInt32());
+            }
+            // Skip to next token at even position
+            sToken = rList.getToken(1, '\t', nIdx);
         }
         if (!c)
         {
commit a928e673c4b7cd40d6c903013517325249938a6e
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Sep 9 19:18:36 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:08:02 2018 +0200

    Remove redundant check
    
    Change-Id: Ib35da3156a48d7421ba73a33baee8341dd05355f

diff --git a/sc/source/ui/dbgui/scuiasciiopt.cxx b/sc/source/ui/dbgui/scuiasciiopt.cxx
index 706289ef6f7d..57a888543cf2 100644
--- a/sc/source/ui/dbgui/scuiasciiopt.cxx
+++ b/sc/source/ui/dbgui/scuiasciiopt.cxx
@@ -130,7 +130,7 @@ static sal_Unicode lcl_CharFromCombo( const ComboBox& rCombo, const OUString& rL
             if ( ScGlobal::GetpTransliteration()->isEqual( aStr, rList.getToken(i,'\t') ) )
                 c = static_cast<sal_Unicode>(rList.getToken(i+1,'\t').toInt32());
         }
-        if (!c && !aStr.isEmpty())
+        if (!c)
         {
             sal_Unicode cFirst = aStr[0];
             // #i24235# first try the first character of the string directly
commit 5b383e1feece636cce3e90eb6a49221dfa5a2a5a
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Sep 9 18:32:49 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:08:01 2018 +0200

    Avoid getTokenCount()
    
    Change-Id: I4f0f921a177e10fc896a12b2bea8aaced1cacf0d

diff --git a/sc/source/ui/dbgui/scuiasciiopt.cxx b/sc/source/ui/dbgui/scuiasciiopt.cxx
index e4c2e5622954..706289ef6f7d 100644
--- a/sc/source/ui/dbgui/scuiasciiopt.cxx
+++ b/sc/source/ui/dbgui/scuiasciiopt.cxx
@@ -95,17 +95,22 @@ CSVImportOptionsIndex getSkipEmptyCellsIndex( ScImportAsciiCall eCall )
 
 static void lcl_FillCombo( ComboBox& rCombo, const OUString& rList, sal_Unicode cSelect )
 {
-    sal_Int32 i;
-    sal_Int32 nCount = comphelper::string::getTokenCount(rList, '\t');
-    for ( i=0; i<nCount; i+=2 )
-        rCombo.InsertEntry( rList.getToken(i,'\t') );
+    OUString aStr;
+    if (!rList.isEmpty())
+    {
+        sal_Int32 nIdx {0};
+        do
+        {
+            const OUString sEntry {rList.getToken(0, '\t', nIdx)};
+            rCombo.InsertEntry( sEntry );
+            if (nIdx>0 && static_cast<sal_Unicode>(rList.getToken(0, '\t', nIdx).toInt32()) == cSelect)
+                aStr = sEntry;
+        }
+        while (nIdx>0);
+    }
 
     if ( cSelect )
     {
-        OUString aStr;
-        for ( i=0; i<nCount; i+=2 )
-            if ( static_cast<sal_Unicode>(rList.getToken(i+1,'\t').toInt32()) == cSelect )
-                aStr = rList.getToken(i,'\t');
         if (aStr.isEmpty())
             aStr = OUString(cSelect);         // Ascii
 
commit 31fca96e53e59e810da136e8448b8e6986c44afa
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Sep 9 12:30:06 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:08:01 2018 +0200

    Avoid getTokenCount()
    
    Change-Id: I3d4ae7495f43cae35e8a149c6523bc0337621724

diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
index 65fd640ba363..178f90991727 100644
--- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
+++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
@@ -945,7 +945,7 @@ bool OSelectionBrowseBox::SaveModified()
 
                         sal_Int32 nPos = m_pFieldCell->GetEntryPos(aFieldName);
                         OUString aAliasName = pEntry->GetAlias();
-                        if ( nPos != COMBOBOX_ENTRY_NOTFOUND && aAliasName.isEmpty() && comphelper::string::getTokenCount(aFieldName, '.') > 1 )
+                        if ( nPos != COMBOBOX_ENTRY_NOTFOUND && aAliasName.isEmpty() && aFieldName.indexOf('.') >= 0 )
                         { // special case, we have a table field so we must cut the table name
                             OUString sTableAlias = aFieldName.getToken(0,'.');
                             pEntry->SetAlias(sTableAlias);
commit 1b49ad9550ce69e29ad0fcdf32d2f345b58ff76d
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Sep 9 12:26:59 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:08:01 2018 +0200

    Remove return variable
    
    Change-Id: I322386e103e21e2660716419dd0747765ee087de

diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
index 97848337ffa4..65fd640ba363 100644
--- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
+++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
@@ -2145,7 +2145,6 @@ OUString OSelectionBrowseBox::GetCellText(long nRow, sal_uInt16 nColId) const
 
 bool OSelectionBrowseBox::GetFunctionName(sal_uInt32 _nFunctionTokenId, OUString& rFkt)
 {
-    bool bErg=true;
     switch(_nFunctionTokenId)
     {
         case SQL_TOKEN_COUNT:
@@ -2205,11 +2204,11 @@ bool OSelectionBrowseBox::GetFunctionName(sal_uInt32 _nFunctionTokenId, OUString
                         return true;
                     }
                 }
-                bErg = false;
+                return false;
             }
     }
 
-    return bErg;
+    return true;
 }
 
 OUString OSelectionBrowseBox::GetCellContents(sal_Int32 nCellIndex, sal_uInt16 nColId)
commit 7ce0fbe7e71cfde8a73f359fac5dd9ed02587be7
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Sep 9 12:25:08 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:08:00 2018 +0200

    Reduce OUString operations
    
    Change-Id: Ia95ced36201ee78d511604a33992be0eff4810df

diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
index c99cfd24b64d..97848337ffa4 100644
--- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
+++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
@@ -190,12 +190,9 @@ void OSelectionBrowseBox::initialize()
 
         for (IParseContext::InternationalKeyCode eFunction : eFunctions)
         {
-            m_aFunctionStrings += ";";
-            m_aFunctionStrings += OStringToOUString(rContext.getIntlKeywordAscii(eFunction),
-                RTL_TEXTENCODING_UTF8);
+            m_aFunctionStrings += ";" + OStringToOUString(rContext.getIntlKeywordAscii(eFunction), RTL_TEXTENCODING_UTF8);
         }
-        m_aFunctionStrings += ";";
-        m_aFunctionStrings += sGroup;
+        m_aFunctionStrings += ";" + sGroup;
 
         // Aggregate functions in general available only with Core SQL
         // We slip in a few optionals one, too.
@@ -697,13 +694,12 @@ bool OSelectionBrowseBox::saveField(OUString& _sFieldName ,OTableFieldDescRef co
             bool bQuote = ( nPass <= 2 );
             bool bInternational = ( nPass % 2 ) == 0;
 
-            OUString sSql;
+            OUString sSql {"SELECT "};
             if ( bQuote )
                 sSql += sQuotedFullFieldName;
             else
                 sSql += sFullFieldName;
 
-            sSql = "SELECT " + sSql;
             if ( !sFieldAlias.isEmpty() )
             { // always quote the alias name: there cannot be a function in it
                 sSql += " " + ::dbtools::quoteName( xMetaData->getIdentifierQuoteString(), sFieldAlias );
commit 0da6e8800b8188caae60707ed2c609d9a17c1dd8
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Sep 9 11:29:29 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:08:00 2018 +0200

    Avoid getTokenCount()
    
    Change-Id: Ib84104ea0c523729c3a7fe6019ed2e788ff7b189

diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
index fde2fd045af3..c99cfd24b64d 100644
--- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
+++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
@@ -2199,18 +2199,17 @@ bool OSelectionBrowseBox::GetFunctionName(sal_uInt32 _nFunctionTokenId, OUString
             break;
         default:
             {
-                sal_Int32 nCount = comphelper::string::getTokenCount(m_aFunctionStrings, ';');
-                sal_Int32 i;
-                for( i = 0; i < nCount-1; i++ ) // grouping is not counted
+                const sal_Int32 nStopIdx = m_aFunctionStrings.lastIndexOf(';'); // grouping is not counted
+                for (sal_Int32 nIdx {0}; nIdx<nStopIdx;)
                 {
-                    if(rFkt.equalsIgnoreAsciiCase(m_aFunctionStrings.getToken(i, ';')))
+                    const OUString sFunc {m_aFunctionStrings.getToken(0, ';', nIdx)};
+                    if (rFkt.equalsIgnoreAsciiCase(sFunc))
                     {
-                        rFkt = m_aFunctionStrings.getToken(i, ';');
-                        break;
+                        rFkt = sFunc;
+                        return true;
                     }
                 }
-                if(i == nCount-1)
-                    bErg = false;
+                bErg = false;
             }
     }
 
commit d1bda6b0b0f2d42a76df822757d21130c401922e
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Sep 9 10:48:28 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:59 2018 +0200

    Avoid getTokenCount()
    
    Change-Id: I30b9a9122a1e20f50471d1864b8c08af985fc5d7

diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
index 02096f44f68e..fde2fd045af3 100644
--- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
+++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
@@ -185,7 +185,7 @@ void OSelectionBrowseBox::initialize()
             ,IParseContext::InternationalKeyCode::Intersection
         };
 
-        OUString sGroup = m_aFunctionStrings.getToken(comphelper::string::getTokenCount(m_aFunctionStrings, ';') - 1, ';');
+        OUString sGroup = m_aFunctionStrings.copy(m_aFunctionStrings.lastIndexOf(';')+1);;
         m_aFunctionStrings = m_aFunctionStrings.getToken(0, ';');
 
         for (IParseContext::InternationalKeyCode eFunction : eFunctions)
@@ -822,7 +822,7 @@ bool OSelectionBrowseBox::saveField(OUString& _sFieldName ,OTableFieldDescRef co
                     aSelEntry->SetField(sParameters);
                     if ( aSelEntry->IsGroupBy() )
                     {
-                        sOldLocalizedFunctionName = m_aFunctionStrings.getToken(comphelper::string::getTokenCount(m_aFunctionStrings, ';')-1, ';');
+                        sOldLocalizedFunctionName = m_aFunctionStrings.copy(m_aFunctionStrings.lastIndexOf(';')+1);
                         aSelEntry->SetGroupBy(false);
                     }
 
@@ -1040,7 +1040,7 @@ bool OSelectionBrowseBox::SaveModified()
                     sal_Int32 nPos = m_pFunctionCell->GetSelectedEntryPos();
                     // these functions are only available in CORE
                     OUString sFunctionName        = m_pFunctionCell->GetEntry(nPos);
-                    OUString sGroupFunctionName   = m_aFunctionStrings.getToken(comphelper::string::getTokenCount(m_aFunctionStrings, ';')-1, ';');
+                    OUString sGroupFunctionName   = m_aFunctionStrings.copy(m_aFunctionStrings.lastIndexOf(';')+1);
                     bool bGroupBy = false;
                     if ( sGroupFunctionName == sFunctionName ) // check if the function name is GROUP
                     {
@@ -2137,7 +2137,7 @@ OUString OSelectionBrowseBox::GetCellText(long nRow, sal_uInt16 nColId) const
         case BROW_FUNCTION_ROW:
             // we always show the group function at first
             if ( pEntry->IsGroupBy() )
-                aText = m_aFunctionStrings.getToken(comphelper::string::getTokenCount(m_aFunctionStrings, ';')-1, ';');
+                aText = m_aFunctionStrings.copy(m_aFunctionStrings.lastIndexOf(';')+1);
             else if ( pEntry->isNumericOrAggreateFunction() )
                 aText = pEntry->GetFunction();
             break;
@@ -2273,7 +2273,7 @@ void OSelectionBrowseBox::SetCellContents(sal_Int32 nRow, sal_uInt16 nColId, con
             break;
         case BROW_FUNCTION_ROW:
         {
-            OUString sGroupFunctionName = m_aFunctionStrings.getToken(comphelper::string::getTokenCount(m_aFunctionStrings, ';')-1, ';');
+            OUString sGroupFunctionName = m_aFunctionStrings.copy(m_aFunctionStrings.lastIndexOf(';')+1);
             pEntry->SetFunction(strNewText);
             // first reset this two member
             sal_Int32 nFunctionType = pEntry->GetFunctionType();
commit 4f90bd648de91cfb803e94148e8ffcbc9502299e
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Sep 9 10:24:44 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:59 2018 +0200

    Avoid getTokenCount()
    
    Change-Id: I13318d43d3c572bd81080d5bb164fdcd9cd7d27b

diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
index 604f9bd66ec0..02096f44f68e 100644
--- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
+++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
@@ -135,10 +135,9 @@ OSelectionBrowseBox::OSelectionBrowseBox( vcl::Window* pParent )
     aTitleFont.SetFontSize(Size(0, 6));
     SetTitleFont(aTitleFont);
 
-    OUString aTxt(DBA_RES(STR_QUERY_SORTTEXT));
-    sal_Int32 nCount = comphelper::string::getTokenCount(aTxt, ';');
-    for (sal_Int32 nIdx = 0; nIdx < nCount; nIdx++)
-        m_pOrderCell->InsertEntry(aTxt.getToken(nIdx, ';'));
+    const OUString aTxt(DBA_RES(STR_QUERY_SORTTEXT));
+    for (sal_Int32 nIdx {0}; nIdx>=0;)
+        m_pOrderCell->InsertEntry(aTxt.getToken(0, ';', nIdx));
 
     m_bVisibleRow.insert(m_bVisibleRow.end(), BROW_ROW_CNT, true);
 
@@ -202,9 +201,8 @@ void OSelectionBrowseBox::initialize()
         // We slip in a few optionals one, too.
         if ( lcl_SupportsCoreSQLGrammar(xConnection) )
         {
-            sal_Int32 nCount = comphelper::string::getTokenCount(m_aFunctionStrings, ';');
-            for( sal_Int32 nIdx = 0; nIdx < nCount; nIdx++ )
-                m_pFunctionCell->InsertEntry(m_aFunctionStrings.getToken(nIdx, ';'));
+            for (sal_Int32 nIdx {0}; nIdx>=0;)
+                m_pFunctionCell->InsertEntry(m_aFunctionStrings.getToken(0, ';', nIdx));
         }
         else // else only COUNT(*) and COUNT("table".*)
         {
commit d3596b7274934e124b6baf57a2fb2fe75d732598
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Sep 9 02:05:50 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:58 2018 +0200

    Handle trailing token separator without copying string
    
    Change-Id: I09770f343ed54645cfa1f56ed2604af5e18c1720

diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx
index 0c97d71bd60a..01f4a218708a 100644
--- a/editeng/source/outliner/outliner.cxx
+++ b/editeng/source/outliner/outliner.cxx
@@ -423,15 +423,16 @@ void Outliner::SetText( const OUString& rText, Paragraph* pPara )
     }
     else
     {
-        OUString aText(convertLineEnd(rText, LINEEND_LF));
-
-        if (aText.endsWith("\x0A"))
-            aText = aText.copy(0, aText.getLength()-1); // Delete the last break
+        const OUString aText(convertLineEnd(rText, LINEEND_LF));
 
         sal_Int32 nPos = 0;
         sal_Int32 nInsPos = nPara+1;
-        sal_Int32 nIdx {aText.isEmpty() ? -1 : 0};
-        while( nIdx>=0 )
+        sal_Int32 nIdx {0};
+        // Loop over all tokens, but ignore the last one if empty
+        // (i.e. if strings ends with the delimiter, detected by
+        // checking nIdx against string length). This check also
+        // handle empty strings.
+        while( nIdx>=0 && nIdx<aText.getLength() )
         {
             OUString aStr = aText.getToken( 0, '\x0A', nIdx );
 
commit 82974d069bc35c0eaaae0dd1cbfe2a46bc237552
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Sep 9 01:44:31 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:58 2018 +0200

    Avoid getTokenCount()
    
    Change-Id: I6b90d09d37ed47f965110fb93138155a1271c7dc

diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx
index 186a1c17daca..0c97d71bd60a 100644
--- a/editeng/source/outliner/outliner.cxx
+++ b/editeng/source/outliner/outliner.cxx
@@ -428,12 +428,12 @@ void Outliner::SetText( const OUString& rText, Paragraph* pPara )
         if (aText.endsWith("\x0A"))
             aText = aText.copy(0, aText.getLength()-1); // Delete the last break
 
-        sal_Int32 nCount = comphelper::string::getTokenCount(aText, '\x0A');
         sal_Int32 nPos = 0;
         sal_Int32 nInsPos = nPara+1;
-        while( nCount > nPos )
+        sal_Int32 nIdx {aText.isEmpty() ? -1 : 0};
+        while( nIdx>=0 )
         {
-            OUString aStr = aText.getToken( nPos, '\x0A' );
+            OUString aStr = aText.getToken( 0, '\x0A', nIdx );
 
             sal_Int16 nCurDepth;
             if( nPos )
commit 3ca649430c832be555b556fd045fa5d490e4da9e
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Sep 9 00:25:34 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:58 2018 +0200

    Fix condition in f573402116937876cb0b80cf7af2a52bf2ccc31a
    
    Change-Id: I6b755c64da5050f69114f63c693ff25c7b12991f

diff --git a/sc/source/ui/dbgui/scuiasciiopt.cxx b/sc/source/ui/dbgui/scuiasciiopt.cxx
index bc57fb52f413..e4c2e5622954 100644
--- a/sc/source/ui/dbgui/scuiasciiopt.cxx
+++ b/sc/source/ui/dbgui/scuiasciiopt.cxx
@@ -474,7 +474,7 @@ ScImportAsciiDlg::ScImportAsciiDlg( vcl::Window* pParent, const OUString& aDatNa
     pLbCustomLang->SelectLanguage(static_cast<LanguageType>(nLanguage));
 
     // *** column type ListBox ***
-    for (sal_Int32 nIdx {0}; nIdx>0; )
+    for (sal_Int32 nIdx {0}; nIdx>=0; )
     {
         pLbType->InsertEntry( aColumnUser.getToken( 0, ';', nIdx ) );
     }
commit da37548dab2eeaae6a105574549c6e504ba49674
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sat Sep 8 23:26:40 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:57 2018 +0200

    Avoid getTokenCount()
    
    Change-Id: I783dc5a6b31c3a2be65a1dc50f69f86a29cca0ae

diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index 9351055540bb..2d56ce5f075a 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -52,7 +52,6 @@
 #include <vcl/cursor.hxx>
 #include <vcl/settings.hxx>
 #include <tools/urlobj.hxx>
-#include <comphelper/string.hxx>
 #include <formula/formulahelper.hxx>
 #include <formula/funcvarargs.h>
 #include <LibreOfficeKit/LibreOfficeKitEnums.h>
@@ -875,6 +874,16 @@ void ScInputHandler::HideTipBelow()
     aManualTip.clear();
 }
 
+namespace
+{
+
+bool lcl_hasSingleToken(const OUString& s, sal_Unicode c)
+{
+    return !s.isEmpty() && s.indexOf(c)<0;
+}
+
+}
+
 void ScInputHandler::ShowArgumentsTip( OUString& rSelText )
 {
     ScDocShell* pDocSh = pActiveViewSh->GetViewData().GetDocShell();
@@ -917,12 +926,10 @@ void ScInputHandler::ShowArgumentsTip( OUString& rSelText )
                         }
                         if( bFlag )
                         {
-                            sal_Int32 nCountSemicolon = comphelper::string::getTokenCount(aNew, cSep) - 1;
-                            sal_Int32 nCountDot = comphelper::string::getTokenCount(aNew, cSheetSep) - 1;
                             sal_Int32 nStartPosition = 0;
                             sal_Int32 nEndPosition = 0;
 
-                            if( !nCountSemicolon )
+                            if( lcl_hasSingleToken(aNew, cSep) )
                             {
                                 for (sal_Int32 i = 0; i < aNew.getLength(); ++i)
                                 {
@@ -933,7 +940,7 @@ void ScInputHandler::ShowArgumentsTip( OUString& rSelText )
                                     }
                                 }
                             }
-                            else if( !nCountDot )
+                            else if( lcl_hasSingleToken(aNew, cSheetSep) )
                             {
                                 sal_uInt16 nCount = 0;
                                 for (sal_Int32 i = 0; i < aNew.getLength(); ++i)
commit 67e2acb013ebe0f716ee096f12ec63debcd1d814
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sat Sep 8 19:15:25 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:57 2018 +0200

    Avoid getTokenCount()
    
    Change-Id: I2fa4e9d36fa2707ba7fb6faa59fc8f4be906c04c

diff --git a/sc/source/filter/html/htmlexp.cxx b/sc/source/filter/html/htmlexp.cxx
index 2e5be7e5528b..08c7d1caa616 100644
--- a/sc/source/filter/html/htmlexp.cxx
+++ b/sc/source/filter/html/htmlexp.cxx
@@ -18,7 +18,6 @@
  */
 
 #include <scitems.hxx>
-#include <comphelper/string.hxx>
 #include <editeng/eeitem.hxx>
 
 #include <rtl/tencinfo.h>
@@ -350,24 +349,17 @@ void ScHTMLExport::WriteHeader()
        .WriteCharPtr( OOO_STRING_SVTOOLS_HTML_tablerow ).WriteCharPtr( "," ).WriteCharPtr( OOO_STRING_SVTOOLS_HTML_tableheader ).WriteCharPtr( "," )
        .WriteCharPtr( OOO_STRING_SVTOOLS_HTML_tabledata ).WriteCharPtr( "," ).WriteCharPtr( OOO_STRING_SVTOOLS_HTML_parabreak )
        .WriteCharPtr( " { " ).WriteCharPtr( "font-family:" );
-    sal_Int32 nFonts = comphelper::string::getTokenCount(aHTMLStyle.aFontFamilyName, ';');
-    if ( nFonts == 1 )
+    if (!aHTMLStyle.aFontFamilyName.isEmpty())
     {
-        rStrm.WriteChar( '\"' );
-        OUT_STR( aHTMLStyle.aFontFamilyName );
-        rStrm.WriteChar( '\"' );
-    }
-    else
-    {   // Fontlist, VCL: Semicolon as separator
-        // CSS1: Comma as separator and every single font name quoted
         const OUString& rList = aHTMLStyle.aFontFamilyName;
-        for ( sal_Int32 j = 0, nPos = 0; j < nFonts; j++ )
+        for(sal_Int32 nPos {0};;)
         {
             rStrm.WriteChar( '\"' );
             OUT_STR( rList.getToken( 0, ';', nPos ) );
             rStrm.WriteChar( '\"' );
-            if ( j < nFonts-1 )
-                rStrm.WriteCharPtr( ", " );
+            if (nPos<0)
+                break;
+            rStrm.WriteCharPtr( ", " );
         }
     }
     rStrm.WriteCharPtr( "; " ).WriteCharPtr( "font-size:" )
@@ -1104,26 +1096,22 @@ void ScHTMLExport::WriteCell( SCCOL nCol, SCROW nRow, SCTAB nTab )
         {
             aStr.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_face).
                 append("=\"");
-            sal_Int32 nFonts = comphelper::string::getTokenCount(rFontItem.GetFamilyName(), ';');
-            if ( nFonts == 1 )
+
+            if (!rFontItem.GetFamilyName().isEmpty())
             {
-                OString aTmpStr = HTMLOutFuncs::ConvertStringToHTML(
-                    rFontItem.GetFamilyName(), eDestEnc, &aNonConvertibleChars);
-                aStr.append(aTmpStr);
-            }
-            else
-            {   // Font list, VCL: Semicolon as separator, HTML: Comma
                 const OUString& rList = rFontItem.GetFamilyName();
-                for ( sal_Int32 j = 0, nPos = 0; j < nFonts; j++ )
+                for (sal_Int32 nPos {0};;)
                 {
                     OString aTmpStr = HTMLOutFuncs::ConvertStringToHTML(
                         rList.getToken( 0, ';', nPos ), eDestEnc,
                         &aNonConvertibleChars);
                     aStr.append(aTmpStr);
-                    if ( j < nFonts-1 )
-                        aStr.append(',');
+                    if (nPos<0)
+                        break;
+                    aStr.append(',');
                 }
             }
+
             aStr.append('\"');
         }
         if ( nSetFontSizeNumber )
commit daf832451e49592096c1cc7926584d887000aca3
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sat Sep 8 18:50:37 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:56 2018 +0200

    Avoid getTokenCount()
    
    Change-Id: I3148f7fcd9db1511cf552f62b81ac6937302a160

diff --git a/sc/source/ui/dbgui/scuiasciiopt.cxx b/sc/source/ui/dbgui/scuiasciiopt.cxx
index db98865ca7f0..bc57fb52f413 100644
--- a/sc/source/ui/dbgui/scuiasciiopt.cxx
+++ b/sc/source/ui/dbgui/scuiasciiopt.cxx
@@ -474,9 +474,10 @@ ScImportAsciiDlg::ScImportAsciiDlg( vcl::Window* pParent, const OUString& aDatNa
     pLbCustomLang->SelectLanguage(static_cast<LanguageType>(nLanguage));
 
     // *** column type ListBox ***
-    sal_Int32 nCount = comphelper::string::getTokenCount(aColumnUser, ';');
-    for (sal_Int32 i=0; i<nCount; i++)
-        pLbType->InsertEntry( aColumnUser.getToken( i, ';' ) );
+    for (sal_Int32 nIdx {0}; nIdx>0; )
+    {
+        pLbType->InsertEntry( aColumnUser.getToken( 0, ';', nIdx ) );
+    }
 
     pLbType->SetSelectHdl( LINK( this, ScImportAsciiDlg, LbColTypeHdl ) );
     pFtType->Disable();
commit 2c1c0168e02e1efda51f8a0f71bf030da4f665f3
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sat Sep 8 17:33:28 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:56 2018 +0200

    Avoid getTokenCount()
    
    Change-Id: Idb1eff48c33a8bd9c5119c1caa6ee01202d1d374

diff --git a/sc/source/ui/dbgui/scuiimoptdlg.cxx b/sc/source/ui/dbgui/scuiimoptdlg.cxx
index ab8371865a6b..632e297a4111 100644
--- a/sc/source/ui/dbgui/scuiimoptdlg.cxx
+++ b/sc/source/ui/dbgui/scuiimoptdlg.cxx
@@ -24,7 +24,6 @@
 #include <scresid.hxx>
 #include <strings.hrc>
 #include <strings.hxx>
-#include <comphelper/string.hxx>
 #include <officecfg/Office/Calc.hxx>
 #include <osl/thread.h>
 #include <rtl/tencinfo.h>
@@ -36,65 +35,54 @@ class ScDelimiterTable
 public:
     explicit ScDelimiterTable( const OUString& rDelTab )
             :   theDelTab ( rDelTab ),
-                nCount    ( comphelper::string::getTokenCount(rDelTab, '\t') ),
-                nIter     ( 0 )
+                nDelIdx   ( 0 )
             {}
 
     sal_uInt16  GetCode( const OUString& rDelimiter ) const;
     OUString  GetDelimiter( sal_Unicode nCode ) const;
 
-    OUString  FirstDel()  { nIter = 0; return theDelTab.getToken( nIter, cSep ); }
-    OUString  NextDel()   { nIter +=2; return theDelTab.getToken( nIter, cSep ); }
+    OUString  FirstDel()  { nDelIdx = 0; return theDelTab.getToken( 0, cSep, nDelIdx ); }
+    OUString  NextDel()   { return theDelTab.getToken( 1, cSep, nDelIdx ); }
 
 private:
     const OUString      theDelTab;
-    static const sal_Unicode   cSep = '\t';
-    const sal_Int32    nCount;
-    sal_Int32          nIter;
+    static constexpr sal_Unicode cSep {'\t'};
+    sal_Int32           nDelIdx;
 };
 
 sal_uInt16 ScDelimiterTable::GetCode( const OUString& rDel ) const
 {
-    sal_Unicode nCode = 0;
-
-    if ( nCount >= 2 )
+    if (!theDelTab.isEmpty())
     {
-        sal_Int32 i = 0;
-        while ( i<nCount )
-        {
-            if ( rDel == theDelTab.getToken( i, cSep ) )
-            {
-                nCode = static_cast<sal_Unicode>(theDelTab.getToken( i+1, cSep ).toInt32());
-                i     = nCount;
-            }
-            else
-                i += 2;
-        }
+        sal_Int32 nIdx {0};
+
+        // Check even tokens: start from 0 and then skip 1 token at each iteration
+        if (rDel != theDelTab.getToken( 0, cSep, nIdx ))
+            while (nIdx>0 && rDel != theDelTab.getToken( 1, cSep, nIdx ));
+
+        if (nIdx>0)
+            return static_cast<sal_Unicode>(theDelTab.getToken( 0, cSep, nIdx ).toInt32());
     }
 
-    return nCode;
+    return 0;
 }
 
 OUString ScDelimiterTable::GetDelimiter( sal_Unicode nCode ) const
 {
-    OUString aStrDel;
-
-    if ( nCount >= 2 )
+    if (!theDelTab.isEmpty())
     {
-        sal_Int32 i = 0;
-        while ( i<nCount )
+        sal_Int32 nIdx {0};
+        // Check odd tokens: start from 1 and then skip 1 token at each iteration
+        do
         {
-            if ( nCode == static_cast<sal_Unicode>(theDelTab.getToken( i+1, cSep ).toInt32()) )
-            {
-                aStrDel = theDelTab.getToken( i, cSep );
-                i       = nCount;
-            }
-            else
-                i += 2;
+            sal_Int32 nPrevIdx {nIdx};
+            if (nCode == static_cast<sal_Unicode>(theDelTab.getToken( 1, cSep, nIdx ).toInt32()))
+                return theDelTab.getToken( 0, cSep, nPrevIdx );
         }
+        while (nIdx>0);
     }
 
-    return aStrDel;
+    return OUString();
 }
 
 // ScImportOptionsDlg
commit 41bcf6138c88ed413d557419b73d29a8526e5fb3
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Sep 2 15:38:50 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:56 2018 +0200

    Avoid getTokenCount()
    
    Change-Id: I3d9a1c4a6c57fca1179a08494b6d298d4aeffb05

diff --git a/sc/source/ui/dbgui/csvgrid.cxx b/sc/source/ui/dbgui/csvgrid.cxx
index 32ac2515f7de..f5b63fd3a48f 100644
--- a/sc/source/ui/dbgui/csvgrid.cxx
+++ b/sc/source/ui/dbgui/csvgrid.cxx
@@ -22,7 +22,6 @@
 #include <algorithm>
 #include <memory>
 
-#include <comphelper/string.hxx>
 #include <svtools/colorcfg.hxx>
 #include <sal/macros.h>
 #include <tools/poly.hxx>
@@ -1084,12 +1083,11 @@ void ScCsvGrid::ImplDrawCellText( const Point& rPos, const OUString& rText )
     /*  #i60296# If string contains mixed script types, the space character
         U+0020 may be drawn with a wrong width (from non-fixed-width Asian or
         Complex font). Now we draw every non-space portion separately. */
-    sal_Int32 nTokenCount = comphelper::string::getTokenCount(aPlainText, ' ');
-    sal_Int32 nCharIxInt = 0;
-    for( sal_Int32 nToken = 0; nToken < nTokenCount; ++nToken )
+    sal_Int32 nCharIxInt {aPlainText.isEmpty() ? -1 : 0};
+    while (nCharIxInt>=0)
     {
         sal_Int32 nBeginIx = nCharIxInt;
-        OUString aToken = aPlainText.getToken( 0, ' ', nCharIxInt );
+        const OUString aToken = aPlainText.getToken( 0, ' ', nCharIxInt );
         if( !aToken.isEmpty() )
         {
             sal_Int32 nX = rPos.X() + GetCharWidth() * nBeginIx;
commit 559449ba62565966aa4a42a822a70b07e6c98079
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Sep 2 15:34:55 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:55 2018 +0200

    Avoid getTokenCount and temporaries, reduce scope
    
    Change-Id: Ic97e9952de387040bb87e854eb34a183f0cf60ec

diff --git a/sc/source/ui/dbgui/csvruler.cxx b/sc/source/ui/dbgui/csvruler.cxx
index 9370a3decc89..86acdc1ec807 100644
--- a/sc/source/ui/dbgui/csvruler.cxx
+++ b/sc/source/ui/dbgui/csvruler.cxx
@@ -34,9 +34,6 @@ using namespace com::sun::star::uno;
 
 static void load_FixedWidthList(ScCsvSplits &rSplits)
 {
-    OUString sSplits;
-    OUString sFixedWidthLists;
-
     Sequence<Any>aValues;
     const Any *pProperties;
     Sequence<OUString> aNames { FIXED_WIDTH_LIST };
@@ -48,14 +45,23 @@ static void load_FixedWidthList(ScCsvSplits &rSplits)
     if( pProperties[0].hasValue() )
     {
         rSplits.Clear();
-        pProperties[0] >>= sFixedWidthLists;
 
-        sSplits = sFixedWidthLists;
+        OUString sFixedWidthLists;
+        pProperties[0] >>= sFixedWidthLists;
 
-        // String ends with a semi-colon so there is no 'int' after the last one.
-        sal_Int32 n = comphelper::string::getTokenCount(sSplits, ';') - 1;
-        for (sal_Int32 i = 0; i < n; ++i)
-            rSplits.Insert( sSplits.getToken(i, ';').toInt32() );
+        sal_Int32 nIdx {0};
+        for(;;)
+        {
+            const sal_Int32 n {sFixedWidthLists.getToken(0, ';', nIdx).toInt32()};
+            if (nIdx<0)
+            {
+                // String ends with a semi-colon so there
+                // is no useful 'int' after the last one.
+                // This also works in case of empty string
+                break;
+            }
+            rSplits.Insert(n);
+        }
     }
 }
 static void save_FixedWidthList(const ScCsvSplits& rSplits)
commit 42e961972a56a6508c9a38c2b80a996ee2e679e1
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Sep 2 14:31:49 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:55 2018 +0200

    Avoid temporary variable
    
    Change-Id: I0febc7c1b270a46460cf7a67ec269458974f70c5

diff --git a/sc/source/ui/dbgui/asciiopt.cxx b/sc/source/ui/dbgui/asciiopt.cxx
index e580334f27c6..40f62a357e63 100644
--- a/sc/source/ui/dbgui/asciiopt.cxx
+++ b/sc/source/ui/dbgui/asciiopt.cxx
@@ -120,8 +120,7 @@ void ScAsciiOptions::ReadFromString( const OUString& rString )
     if ( nPos >= 0 )
     {
         const OUString aToken = rString.getToken(0, ',', nPos);
-        sal_Int32 nSub = comphelper::string::getTokenCount(aToken, '/');
-        sal_Int32 nInfoCount = nSub / 2;
+        const sal_Int32 nInfoCount = comphelper::string::getTokenCount(aToken, '/')/2;
         mvColStart.resize(nInfoCount);
         mvColFormat.resize(nInfoCount);
         sal_Int32 nP = 0;
commit 6d76610978733bf0add633670cb33504d6720122
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sat Aug 25 20:57:28 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:55 2018 +0200

    Use optimized OUString concatenation and avoid temporary
    
    Change-Id: I25cae27d9822a323167a8b202acc2bde660abc58

diff --git a/sc/source/ui/pagedlg/areasdlg.cxx b/sc/source/ui/pagedlg/areasdlg.cxx
index 02815f104654..4025adcb0236 100644
--- a/sc/source/ui/pagedlg/areasdlg.cxx
+++ b/sc/source/ui/pagedlg/areasdlg.cxx
@@ -282,7 +282,6 @@ void ScPrintAreasDlg::Impl_Reset()
     // printing area
 
     aStrRange.clear();
-    OUString aOne;
     const formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention();
     const sal_Unicode sep = ScCompiler::GetNativeSymbolChar(ocSep);
     sal_uInt16 nRangeCount = pDoc->GetPrintRangeCount( nCurTab );
@@ -293,8 +292,7 @@ void ScPrintAreasDlg::Impl_Reset()
         {
             if ( !aStrRange.isEmpty() )
                 aStrRange += OUStringLiteral1(sep);
-            aOne = pPrintRange->Format(ScRefFlags::RANGE_ABS, pDoc, eConv);
-            aStrRange += aOne;
+            aStrRange += pPrintRange->Format(ScRefFlags::RANGE_ABS, pDoc, eConv);
         }
     }
     pEdPrintArea->SetText( aStrRange );
commit 2d94bfbabf1948317ad85f9fa3be7d2fcb895a30
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sat Aug 25 20:56:47 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:54 2018 +0200

    Use optimized OUString concatenation
    
    Change-Id: I95e1a00caf2ef82f2931cc3a2709cbb3c6cc3d26

diff --git a/sc/source/ui/docshell/docsh8.cxx b/sc/source/ui/docshell/docsh8.cxx
index 9514e3b3f6ef..ce54a91532d9 100644
--- a/sc/source/ui/docshell/docsh8.cxx
+++ b/sc/source/ui/docshell/docsh8.cxx
@@ -119,8 +119,7 @@ namespace
 
         // get connection
 
-        OUString aConnUrl("sdbc:dbase:");
-        aConnUrl += aPath;
+        const OUString aConnUrl{"sdbc:dbase:" + aPath};
 
         // sdbc:dbase is based on the css.sdbc.FILEConnectionProperties UNOIDL service, so we can
         // transport the raw rtl_TextEncoding value instead of having to translate it into a IANA
commit ecdca13805a2a7ded0f08208337509030d160c2c
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sat Aug 25 20:55:53 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:54 2018 +0200

    Bail out early
    
    Change-Id: Ie5b34bfbfd45aaafbf0a64ee72f741066d1632e1

diff --git a/sc/source/filter/html/htmlimp.cxx b/sc/source/filter/html/htmlimp.cxx
index ba4fc94344b7..e75f8421c9ad 100644
--- a/sc/source/filter/html/htmlimp.cxx
+++ b/sc/source/filter/html/htmlimp.cxx
@@ -214,22 +214,18 @@ OUString ScHTMLImport::GetHTMLRangeNameList( const ScDocument* pDoc, const OUStr
         if( pRangeNames && ScfTools::IsHTMLTablesName( aToken ) )
         {   // build list with all HTML tables
             sal_uLong nIndex = 1;
-            bool bLoop = true;
-            while( bLoop )
+            for(;;)
             {
                 aToken = ScfTools::GetNameFromHTMLIndex( nIndex++ );
                 const ScRangeData* pRangeData = pRangeNames->findByUpperName(ScGlobal::pCharClass->uppercase(aToken));
-                if (pRangeData)
+                if (!pRangeData)
+                    break;
+                ScRange aRange;
+                if( pRangeData->IsReference( aRange ) && !aRangeList.In( aRange ) )
                 {
-                    ScRange aRange;
-                    if( pRangeData->IsReference( aRange ) && !aRangeList.In( aRange ) )
-                    {
-                        aNewName = ScGlobal::addToken(aNewName, aToken, ';');
-                        aRangeList.push_back( aRange );
-                    }
+                    aNewName = ScGlobal::addToken(aNewName, aToken, ';');
+                    aRangeList.push_back( aRange );
                 }
-                else
-                    bLoop = false;
             }
         }
         else
commit c08c3807fe1a2c4a08b542125ee9f40f0f7f07fe
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sat Aug 25 20:52:48 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:54 2018 +0200

    Reduce scope
    
    Change-Id: Id4f6e3dd2e9acdc8586e59a26b2d4ac6b13980dd

diff --git a/sc/source/filter/excel/xlformula.cxx b/sc/source/filter/excel/xlformula.cxx
index e5b5bc3061c3..4d1774d9aed7 100644
--- a/sc/source/filter/excel/xlformula.cxx
+++ b/sc/source/filter/excel/xlformula.cxx
@@ -873,7 +873,6 @@ bool XclTokenArrayHelper::GetString( OUString& rString, const ScTokenArray& rScT
 bool XclTokenArrayHelper::GetStringList( OUString& rStringList, const ScTokenArray& rScTokArr, sal_Unicode cSep )
 {
     bool bRet = true;
-    OUString aString;
     XclTokenArrayIterator aIt( rScTokArr, true );
     enum { STATE_START, STATE_STR, STATE_SEP, STATE_END } eState = STATE_START;
     while( eState != STATE_END ) switch( eState )
@@ -882,10 +881,13 @@ bool XclTokenArrayHelper::GetStringList( OUString& rStringList, const ScTokenArr
             eState = aIt.Is() ? STATE_STR : STATE_END;
         break;
         case STATE_STR:
+        {
+            OUString aString;
             bRet = GetTokenString( aString, *aIt );
             if( bRet ) rStringList += aString ;
             eState = (bRet && (++aIt).Is()) ? STATE_SEP : STATE_END;
-        break;
+            break;
+        }
         case STATE_SEP:
             bRet = aIt->GetOpCode() == ocSep;
             if( bRet ) rStringList += OUStringLiteral1(cSep);
commit d2fdf0610792f187f313e7ec64fa8049b814cb27
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 23:07:44 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:53 2018 +0200

    Avoid getTokenCount and use indexed getToken
    
    Change-Id: Iaac598c9e56afa29db88237fecbe54d9cb4d4011

diff --git a/extensions/source/propctrlr/standardcontrol.cxx b/extensions/source/propctrlr/standardcontrol.cxx
index f6bd2718c35e..40e283108339 100644
--- a/extensions/source/propctrlr/standardcontrol.cxx
+++ b/extensions/source/propctrlr/standardcontrol.cxx
@@ -1055,9 +1055,17 @@ namespace pcr
         {
             sal_Int32 nLines = comphelper::string::getTokenCount(_rCompsedTextWithLineBreaks, '\n');
             StlSyntaxSequence< OUString > aStrings( nLines );
-            StlSyntaxSequence< OUString >::iterator stringItem = aStrings.begin();
-            for ( sal_Int32 token = 0; token < nLines; ++token, ++stringItem )
-                *stringItem = _rCompsedTextWithLineBreaks.getToken( token, '\n' );
+            if (nLines)
+            {
+                StlSyntaxSequence< OUString >::iterator stringItem = aStrings.begin();
+                sal_Int32 nIdx {0};
+                do
+                {
+                    *stringItem = _rCompsedTextWithLineBreaks.getToken( 0, '\n', nIdx );
+                    ++stringItem;
+                }
+                while (nIdx>0);
+            }
             return aStrings;
         }
 
@@ -1150,9 +1158,9 @@ namespace pcr
         if (!aStr.isEmpty())
         {
             long nDiff=0;
-            sal_Int32 nCount = comphelper::string::getTokenCount(aStr, '\n');
 
-            OUString aInput = aStr.getToken(0,'\n' );
+            sal_Int32 nIdx {0};
+            OUString aInput = aStr.getToken(0, '\n', nIdx );
 
             if (!aInput.isEmpty())
             {
@@ -1168,9 +1176,9 @@ namespace pcr
             }
             else
             {
-                for (sal_Int32 i=1; i<nCount; ++i)
+                while (nIdx>0)
                 {
-                    aInput=aStr.getToken(static_cast<sal_uInt16>(i), '\n');
+                    aInput=aStr.getToken(0, '\n', nIdx);
                     if (!aInput.isEmpty())
                     {
                         aOutput += ";";
commit 088cb5c33fc78606e1db9fef6d33f77e63bf7b24
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 23:06:10 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:53 2018 +0200

    Avoid getTokenCount
    
    Change-Id: I60d11dab9bc04462cf3cc0412a356ec51212fb6e

diff --git a/oox/source/ole/axcontrol.cxx b/oox/source/ole/axcontrol.cxx
index 3525e4f4d9a7..2eab7a0fa861 100644
--- a/oox/source/ole/axcontrol.cxx
+++ b/oox/source/ole/axcontrol.cxx
@@ -47,7 +47,6 @@
 #include <com/sun/star/style/VerticalAlignment.hpp>
 #include <com/sun/star/table/CellAddress.hpp>
 #include <com/sun/star/table/CellRangeAddress.hpp>
-#include <comphelper/string.hxx>
 #include <rtl/tencinfo.h>
 #include <osl/diagnose.h>
 #include <sal/log.hxx>
@@ -2550,30 +2549,32 @@ HtmlSelectModel::HtmlSelectModel()
 bool
 HtmlSelectModel::importBinaryModel( BinaryInputStream& rInStrm )
 {
-    OUString sStringContents = rInStrm.readUnicodeArray( rInStrm.size() );
+    if (rInStrm.size()<=0)
+        return true;
 
-    OUString data = sStringContents;
+    OUString sStringContents = rInStrm.readUnicodeArray( rInStrm.size() );
 
     // replace crlf with lf
-    data = data.replaceAll( "\x0D\x0A" , "\x0A" );
+    OUString data = sStringContents.replaceAll( "\x0D\x0A" , "\x0A" );
+
     std::vector< OUString > listValues;
     std::vector< sal_Int16 > selectedIndices;
 
     // Ultra hacky parser for the info
-    sal_Int32 nTokenCount = comphelper::string::getTokenCount(data, '\n');
-
-    for ( sal_Int32 nToken = 0; nToken < nTokenCount; ++nToken )
+    sal_Int32 nLineIdx {0};
+    // first line will tell us if multiselect is enabled
+    if (data.getToken( 0, '\n', nLineIdx )=="<SELECT MULTIPLE")
+        mnMultiSelect = AX_SELECTION_MULTI;
+    // skip first and last lines, no data there
+    if (nLineIdx>0)
     {
-        OUString sLine( data.getToken( nToken, '\n' ) );
-        if ( !nToken ) // first line will tell us if multiselect is enabled
-        {
-            if ( sLine == "<SELECT MULTIPLE" )
-                mnMultiSelect = AX_SELECTION_MULTI;
-        }
-        // skip first and last lines, no data there
-        else if ( nToken < nTokenCount - 1)
+        for (;;)
         {
-            if ( comphelper::string::getTokenCount(sLine, '>') )
+            OUString sLine( data.getToken( 0, '\n', nLineIdx ) );
+            if (nLineIdx<0)
+                break;  // skip last line
+
+            if ( !sLine.isEmpty() )
             {
                 OUString displayValue  = sLine.getToken( 1, '>' );
                 if ( displayValue.getLength() )
commit 8a5d742accb7ec316bfc66743d9c3cba0fa9a9b4
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 23:01:03 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:52 2018 +0200

    Avoid getTokenCount and use indexed getToken
    
    Change-Id: If4aec143168febe9a0f48831752a4114bdea0cbd

diff --git a/sc/source/core/data/globalx.cxx b/sc/source/core/data/globalx.cxx
index cdd7acac3a71..a4a328313174 100644
--- a/sc/source/core/data/globalx.cxx
+++ b/sc/source/core/data/globalx.cxx
@@ -33,7 +33,6 @@
 
 #include <com/sun/star/i18n/OrdinalSuffix.hpp>
 #include <comphelper/processfactory.hxx>
-#include <comphelper/string.hxx>
 #include <unotools/configmgr.hxx>
 #include <unotools/localedatawrapper.hxx>
 
@@ -52,10 +51,10 @@ void ScGlobal::InitAddIns()
     if (aMultiPath.isEmpty())
         return;
 
-    sal_Int32 nTokens = comphelper::string::getTokenCount(aMultiPath, ';');
-    for (sal_Int32 j = 0; j < nTokens; ++j)
+    sal_Int32 nIdx {0};
+    do
     {
-        OUString aPath = aMultiPath.getToken(j, ';');
+        OUString aPath = aMultiPath.getToken(0, ';', nIdx);
         if (aPath.isEmpty())
             continue;
 
@@ -114,6 +113,7 @@ void ScGlobal::InitAddIns()
             OSL_FAIL( "unexpected exception caught!" );
         }
     }
+    while (nIdx>0);
 }
 
 OUString ScGlobal::GetOrdinalSuffix( sal_Int32 nNumber)
commit 416bedb92a3e4f57f3da243e8befd42e1be101a1
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 22:43:40 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:52 2018 +0200

    Avoid getTokenCount
    
    Change-Id: If9720800a5118d29b1d5d57aa06c21dd4db5b511

diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index e86e2d756e78..64622c674301 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -3942,13 +3942,13 @@ void ScCompiler::AutoCorrectParsedSymbol()
         else if ( (GetCharTableFlags( c1, 0 ) & ScCharFlags::CharValue)
                && (GetCharTableFlags( c2, c2p ) & ScCharFlags::CharValue) )
         {
-            if ( comphelper::string::getTokenCount(aCorrectedSymbol, cx) > 1 )
+            if ( aCorrectedSymbol.indexOf(cx) >= 0 ) // At least two tokens separated by cx
             {   // x => *
                 sal_Unicode c = mxSymbols->getSymbolChar(ocMul);
                 aCorrectedSymbol = aCorrectedSymbol.replaceAll(OUStringLiteral1(cx), OUStringLiteral1(c));
                 bCorrected = true;
             }
-            if ( comphelper::string::getTokenCount(aCorrectedSymbol, cX) > 1 )
+            if ( aCorrectedSymbol.indexOf(cX) >= 0 ) // At least two tokens separated by cX
             {   // X => *
                 sal_Unicode c = mxSymbols->getSymbolChar(ocMul);
                 aCorrectedSymbol = aCorrectedSymbol.replaceAll(OUStringLiteral1(cX), OUStringLiteral1(c));
commit e2821c569e720ecf85e3773b9e411f8297301827
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 22:40:33 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:51 2018 +0200

    Avoid getTokenCount
    
    Change-Id: If4609be33625fd1a9955d393c5c999aef75624ec

diff --git a/sc/source/filter/excel/xecontent.cxx b/sc/source/filter/excel/xecontent.cxx
index 20217b48ef4e..9e97d3bbb2fc 100644
--- a/sc/source/filter/excel/xecontent.cxx
+++ b/sc/source/filter/excel/xecontent.cxx
@@ -25,7 +25,6 @@
 #include <com/sun/star/sheet/XAreaLinks.hpp>
 #include <com/sun/star/sheet/XAreaLink.hpp>
 #include <com/sun/star/sheet/TableValidationVisibility.hpp>
-#include <comphelper/string.hxx>
 #include <sfx2/objsh.hxx>
 #include <tools/urlobj.hxx>
 #include <svl/itemset.hxx>
@@ -1739,18 +1738,19 @@ XclExpDV::XclExpDV( const XclExpRoot& rRoot, sal_uLong nScHandle ) :
                         Data validity is BIFF8 only (important for the XclExpString object).
                         Excel uses the NUL character as string list separator. */
                     mxString1.reset( new XclExpString( XclStrFlags::EightBitLength ) );
-                    sal_Int32 nTokenCnt = comphelper::string::getTokenCount(aString, '\n');
-                    sal_Int32 nStringIx = 0;
-                    for( sal_Int32 nToken = 0; nToken < nTokenCnt; ++nToken )
+                    if (!aString.isEmpty())
                     {
-                        OUString aToken( aString.getToken( 0, '\n', nStringIx ) );
-                        if( nToken > 0 )
+                        sal_Int32 nStringIx = 0;
+                        for(;;)
                         {
+                            const OUString aToken( aString.getToken( 0, '\n', nStringIx ) );
+                            mxString1->Append( aToken );
+                            sFormulaBuf.append( aToken );
+                            if (nStringIx<0)
+                                break;
                             mxString1->Append(OUString(u'\0'));
                             sFormulaBuf.append( ',' );
                         }
-                        mxString1->Append( aToken );
-                        sFormulaBuf.append( aToken );
                     }
                     ::set_flag( mnFlags, EXC_DV_STRINGLIST );
 
@@ -1992,18 +1992,21 @@ XclExpWebQuery::XclExpWebQuery(
     mbEntireDoc( false )
 {
     // comma separated list of HTML table names or indexes
-    sal_Int32 nTokenCnt = comphelper::string::getTokenCount(rSource, ';');
     OUString aNewTables;
     OUString aAppendTable;
-    sal_Int32 nStringIx = 0;
     bool bExitLoop = false;
-    for( sal_Int32 nToken = 0; (nToken < nTokenCnt) && !bExitLoop; ++nToken )
+    if (!rSource.isEmpty())
     {
-        OUString aToken( rSource.getToken( 0, ';', nStringIx ) );
-        mbEntireDoc = ScfTools::IsHTMLDocName( aToken );
-        bExitLoop = mbEntireDoc || ScfTools::IsHTMLTablesName( aToken );
-        if( !bExitLoop && ScfTools::GetHTMLNameFromName( aToken, aAppendTable ) )
-            aNewTables = ScGlobal::addToken( aNewTables, aAppendTable, ',' );
+        sal_Int32 nStringIx = 0;
+        do
+        {
+            OUString aToken( rSource.getToken( 0, ';', nStringIx ) );
+            mbEntireDoc = ScfTools::IsHTMLDocName( aToken );
+            bExitLoop = mbEntireDoc || ScfTools::IsHTMLTablesName( aToken );
+            if( !bExitLoop && ScfTools::GetHTMLNameFromName( aToken, aAppendTable ) )
+                aNewTables = ScGlobal::addToken( aNewTables, aAppendTable, ',' );
+        }
+        while (nStringIx>0 && !bExitLoop);
     }
 
     if( !bExitLoop )    // neither HTML_all nor HTML_tables found
commit 42a4937c8b5e4ff97416966da827d94b8a115bb0
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 22:17:23 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:51 2018 +0200

    Avoid getTokenCount
    
    Change-Id: I3aeef1208a579dd65eabeaadda3e7250cf333177

diff --git a/sc/source/filter/excel/xlformula.cxx b/sc/source/filter/excel/xlformula.cxx
index a4a4e320b4e5..e5b5bc3061c3 100644
--- a/sc/source/filter/excel/xlformula.cxx
+++ b/sc/source/filter/excel/xlformula.cxx
@@ -903,15 +903,16 @@ void XclTokenArrayHelper::ConvertStringToList(
     if( GetString( aString, rScTokArr ) )
     {
         rScTokArr.Clear();
-        sal_Int32 nTokenCnt = comphelper::string::getTokenCount(aString, cStringSep);
+        if (aString.isEmpty())
+            return;
         sal_Int32 nStringIx = 0;
-        for( sal_Int32 nToken = 0; nToken < nTokenCnt; ++nToken )
+        for (;;)
         {
             OUString aToken( aString.getToken( 0, cStringSep, nStringIx ) );
-            aToken = comphelper::string::stripStart(aToken, ' '); // trim leading spaces
-            if( nToken > 0 )
-                rScTokArr.AddOpCode( ocSep );
-            rScTokArr.AddString(rSPool.intern(aToken));
+            rScTokArr.AddString(rSPool.intern(comphelper::string::stripStart(aToken, ' ')));
+            if (nStringIx<0)
+                break;
+            rScTokArr.AddOpCode( ocSep );
         }
     }
 }
commit cfabcee0a7765534b419451ec812838ac6a2a50d
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 22:14:26 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:51 2018 +0200

    Avoid getTokenCount
    
    Change-Id: I261311443edcf943d6f2849acc3042089080dee6

diff --git a/sc/source/filter/html/htmlimp.cxx b/sc/source/filter/html/htmlimp.cxx
index 4957b2d381ad..ba4fc94344b7 100644
--- a/sc/source/filter/html/htmlimp.cxx
+++ b/sc/source/filter/html/htmlimp.cxx
@@ -201,12 +201,14 @@ OUString ScHTMLImport::GetHTMLRangeNameList( const ScDocument* pDoc, const OUStr
 {
     OSL_ENSURE( pDoc, "ScHTMLImport::GetHTMLRangeNameList - missing document" );
 
+    if (rOrigName.isEmpty())
+        return OUString();
+
     OUString aNewName;
     ScRangeName* pRangeNames = pDoc->GetRangeName();
     ScRangeList aRangeList;
-    sal_Int32 nTokenCnt = comphelper::string::getTokenCount(rOrigName, ';');
     sal_Int32 nStringIx = 0;
-    for( sal_Int32 nToken = 0; nToken < nTokenCnt; nToken++ )
+    do
     {
         OUString aToken( rOrigName.getToken( 0, ';', nStringIx ) );
         if( pRangeNames && ScfTools::IsHTMLTablesName( aToken ) )
@@ -233,6 +235,7 @@ OUString ScHTMLImport::GetHTMLRangeNameList( const ScDocument* pDoc, const OUStr
         else
             aNewName = ScGlobal::addToken(aNewName, aToken, ';');
     }
+    while (nStringIx>0);
     return aNewName;
 }
 
commit a9bcbd3dad16c69f1e7ebb52a30611150a49f298
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 22:13:15 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:50 2018 +0200

    Avoid getTokenCount and use indexed getToken
    
    Change-Id: I1a52508c782c980d369a74f70fc8db5cbe1a0296

diff --git a/sc/source/ui/dbgui/validate.cxx b/sc/source/ui/dbgui/validate.cxx
index 688ebe5b7043..78d2c154c319 100644
--- a/sc/source/ui/dbgui/validate.cxx
+++ b/sc/source/ui/dbgui/validate.cxx
@@ -277,12 +277,16 @@ ScConditionMode lclGetCondModeFromPos( sal_uInt16 nLbPos )
 void lclGetFormulaFromStringList( OUString& rFmlaStr, const OUString& rStringList, sal_Unicode cFmlaSep )
 {
     rFmlaStr.clear();
-    sal_Int32 nTokenCnt = comphelper::string::getTokenCount(rStringList, '\n');
-    for( sal_Int32 nToken = 0, nStringIx = 0; nToken < nTokenCnt; ++nToken )
+    if (!rStringList.isEmpty())
     {
-        OUString aToken( rStringList.getToken( 0, '\n', nStringIx ) );
-        ScGlobal::AddQuotes( aToken, '"' );
-        rFmlaStr = ScGlobal::addToken(rFmlaStr, aToken, cFmlaSep);
+        sal_Int32 nIdx {0};
+        do
+        {
+            OUString aToken {rStringList.getToken( 0, '\n', nIdx )};
+            ScGlobal::AddQuotes( aToken, '"' );
+            rFmlaStr = ScGlobal::addToken(rFmlaStr, aToken, cFmlaSep);
+        }
+        while (nIdx>0);
     }
     if( rFmlaStr.isEmpty() )
         rFmlaStr = "\"\"";
commit c8796e9f1fe5a77953dd5089581b2e8569533de9
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 22:10:25 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:50 2018 +0200

    Avoid getTokenCount and use indexed getToken
    
    Change-Id: I1cea711e1e22edfab8f90c30554135727b97a276

diff --git a/sc/source/ui/docshell/arealink.cxx b/sc/source/ui/docshell/arealink.cxx
index c23c9308429a..d0797a453873 100644
--- a/sc/source/ui/docshell/arealink.cxx
+++ b/sc/source/ui/docshell/arealink.cxx
@@ -17,7 +17,6 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
-#include <comphelper/string.hxx>
 #include <sfx2/app.hxx>
 #include <sfx2/docfile.hxx>
 #include <sfx2/fcontnr.hxx>
@@ -286,20 +285,22 @@ bool ScAreaLink::Refresh( const OUString& rNewFile, const OUString& rNewFilter,
         }
     }
 
-    sal_Int32 nTokenCnt = comphelper::string::getTokenCount(aTempArea, ';');
-    sal_Int32 nStringIx = 0;
-    for (sal_Int32 nToken = 0; nToken < nTokenCnt; ++nToken)
+    if (!aTempArea.isEmpty())
     {
-        OUString aToken( aTempArea.getToken( 0, ';', nStringIx ) );
-        ScRange aTokenRange;
-        if( FindExtRange( aTokenRange, &rSrcDoc, aToken ) )
+        sal_Int32 nIdx {0};
+        do
         {
-            aSourceRanges.push_back( aTokenRange);
-            // columns: find maximum
-            nWidth = std::max( nWidth, static_cast<SCCOL>(aTokenRange.aEnd.Col() - aTokenRange.aStart.Col() + 1) );
-            // rows: add row range + 1 empty row
-            nHeight += aTokenRange.aEnd.Row() - aTokenRange.aStart.Row() + 2;
+            ScRange aTokenRange;
+            if( FindExtRange( aTokenRange, &rSrcDoc, aTempArea.getToken( 0, ';', nIdx ) ) )
+            {
+                aSourceRanges.push_back( aTokenRange);
+                // columns: find maximum
+                nWidth = std::max( nWidth, static_cast<SCCOL>(aTokenRange.aEnd.Col() - aTokenRange.aStart.Col() + 1) );
+                // rows: add row range + 1 empty row
+                nHeight += aTokenRange.aEnd.Row() - aTokenRange.aStart.Row() + 2;
+            }
         }
+        while (nIdx>0);
     }
     // remove the last empty row
     if( nHeight > 0 )
commit 0a2be735c37dd7d5c7ecf2aeb8f8fa2b689dba45
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 22:07:09 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:49 2018 +0200

    Avoid getTokenCount and use indexed getToken
    
    Change-Id: I14c22a3f04bd9ee31d7261f48ed64bad2477f8fd

diff --git a/sc/source/ui/docshell/docsh8.cxx b/sc/source/ui/docshell/docsh8.cxx
index 062c327ab9ee..9514e3b3f6ef 100644
--- a/sc/source/ui/docshell/docsh8.cxx
+++ b/sc/source/ui/docshell/docsh8.cxx
@@ -24,7 +24,6 @@
 #include <svl/converter.hxx>
 #include <comphelper/processfactory.hxx>
 #include <comphelper/propertysequence.hxx>
-#include <comphelper/string.hxx>
 #include <comphelper/types.hxx>
 #include <ucbhelper/content.hxx>
 #include <svx/txenctab.hxx>
@@ -470,20 +469,18 @@ void lcl_GetColumnTypes(
         sal_Int32 nPrecision = 0;
         sal_Int32 nDbType = sdbc::DataType::SQLNULL;
         OUString aFieldName;
-        OUString aString;
 
         // Fieldname[,Type[,Width[,Prec]]]
         // Type etc.: L; D; C[,W]; N[,W[,P]]
         if ( bHasFieldNames )
         {
-            aString = rDoc.GetString(nCol, nFirstRow, nTab);
-            aString = aString.toAsciiUpperCase();
-            sal_Int32 nToken = comphelper::string::getTokenCount(aString, ',');
-            if ( nToken > 1 )
+            OUString aString {rDoc.GetString(nCol, nFirstRow, nTab).toAsciiUpperCase()};
+            sal_Int32 nIdx {0};
+            aFieldName = aString.getToken( 0, ',', nIdx);
+            if ( nIdx>0 )
             {
-                aFieldName = aString.getToken( 0, ',' );
                 aString = aString.replaceAll(" ", "");
-                switch ( aString.getToken( 1, ',' )[0] )
+                switch ( aString.getToken( 0, ',', nIdx )[0] )
                 {
                     case 'L' :
                         nDbType = sdbc::DataType::BIT;
@@ -514,12 +511,12 @@ void lcl_GetColumnTypes(
                         bTypeDefined = true;
                         break;
                 }
-                if ( bTypeDefined && !nFieldLen && nToken > 2 )
+                if ( bTypeDefined && !nFieldLen && nIdx>0 )
                 {
-                    nFieldLen = aString.getToken( 2, ',' ).toInt32();
-                    if ( !bPrecDefined && nToken > 3 )
+                    nFieldLen = aString.getToken( 0, ',', nIdx ).toInt32();
+                    if ( !bPrecDefined && nIdx>0 )
                     {
-                        OUString aTmp( aString.getToken( 3, ',' ) );
+                        OUString aTmp( aString.getToken( 0, ',', nIdx ) );
                         if ( CharClass::isAsciiNumeric(aTmp) )
                         {
                             nPrecision = aTmp.toInt32();
@@ -530,8 +527,6 @@ void lcl_GetColumnTypes(
                     }
                 }
             }
-            else
-                aFieldName = aString;
 
             // Check field name and generate valid field name if necessary.
             // First character has to be alphabetical, subsequent characters
commit 7224b69bd52bc3544e2b4d36ccf36965d3c3c45e
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 21:59:56 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:49 2018 +0200

    Early bailout
    
    Change-Id: I34cb0f151b35fe775008d449bf7efb72ae81f29d

diff --git a/sc/source/ui/miscdlgs/anyrefdg.cxx b/sc/source/ui/miscdlgs/anyrefdg.cxx
index cc98f3d8d11e..6de58331021f 100644
--- a/sc/source/ui/miscdlgs/anyrefdg.cxx
+++ b/sc/source/ui/miscdlgs/anyrefdg.cxx
@@ -875,13 +875,15 @@ void ScRefHandler::SwitchToDocument()
 
 bool ScRefHandler::IsDocAllowed(SfxObjectShell* pDocSh) const   // pDocSh may be 0
 {
-    //  default: allow only same document (overridden in function dialog)
-    OUString aCmpName;
-    if ( pDocSh )
-        aCmpName = pDocSh->GetTitle();
-
     //  if aDocName isn't initialized, allow
-    return ( m_aDocName.isEmpty() || m_aDocName == aCmpName );
+    if ( m_aDocName.isEmpty() )
+        return true;
+
+    if ( !pDocSh )
+        return false;
+
+    //  default: allow only same document (overridden in function dialog)
+    return m_aDocName==pDocSh->GetTitle();
 }
 
 bool ScRefHandler::IsRefInputMode() const
commit e3f3ce96d000c86d8f79d64ef99f07b2a60aa7ee
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 20:43:11 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:49 2018 +0200

    OUString: use optimized concatenation, make const
    
    Change-Id: I8b4f6d47852c2a42c55723c3a0757f2c144f6ef2

diff --git a/sc/source/ui/miscdlgs/anyrefdg.cxx b/sc/source/ui/miscdlgs/anyrefdg.cxx
index 9825eeb4bab8..cc98f3d8d11e 100644
--- a/sc/source/ui/miscdlgs/anyrefdg.cxx
+++ b/sc/source/ui/miscdlgs/anyrefdg.cxx
@@ -483,12 +483,10 @@ void ScFormulaReferenceHelper::RefInputStart( formula::RefEdit* pEdit, formula::
         m_sOldDialogText = m_pWindow->GetText();
         if (vcl::Window *pLabel = m_pRefEdit->GetLabelWidgetForShrinkMode())
         {
-            OUString sLabel = pLabel->GetText();
+            const OUString sLabel = pLabel->GetText();
             if (!sLabel.isEmpty())
             {
-                OUString sNewDialogText = m_sOldDialogText;
-                sNewDialogText += ": ";
-                sNewDialogText += comphelper::string::stripEnd(sLabel, ':');
+                const OUString sNewDialogText = m_sOldDialogText + ": " + comphelper::string::stripEnd(sLabel, ':');
                 m_pWindow->SetText( MnemonicGenerator::EraseAllMnemonicChars( sNewDialogText ) );
             }
         }
commit 0e68209fe3e6dec0d6f5ecf919ceecd91d962129
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 19:10:14 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:48 2018 +0200

    Avoid getTokenCount and use indexed getToken
    
    Change-Id: Ib459f491927518266288aaf2d982279dd47ebd39

diff --git a/sc/source/ui/miscdlgs/anyrefdg.cxx b/sc/source/ui/miscdlgs/anyrefdg.cxx
index 4ff02b2c1754..9825eeb4bab8 100644
--- a/sc/source/ui/miscdlgs/anyrefdg.cxx
+++ b/sc/source/ui/miscdlgs/anyrefdg.cxx
@@ -154,16 +154,20 @@ void ScFormulaReferenceHelper::ShowSimpleReference(const OUString& rStr)
 
 bool ScFormulaReferenceHelper::ParseWithNames( ScRangeList& rRanges, const OUString& rStr, const ScDocument* pDoc )
 {
-    bool bError = false;
     rRanges.RemoveAll();
 
+    if (rStr.isEmpty())
+        return true;
+
     ScAddress::Details aDetails(pDoc->GetAddressConvention(), 0, 0);
     ScRangeUtil aRangeUtil;
-    sal_Int32 nTokenCnt = comphelper::string::getTokenCount(rStr, ';');
-    for( sal_Int32 nToken = 0; nToken < nTokenCnt; ++nToken )
+
+    bool bError = false;
+    sal_Int32 nIdx {0};
+    do
     {
         ScRange aRange;
-        OUString aRangeStr( rStr.getToken( nToken, ';' ) );
+        OUString aRangeStr( rStr.getToken( 0, ';', nIdx ) );
 
         ScRefFlags nFlags = aRange.ParseAny( aRangeStr, pDoc, aDetails );
         if ( nFlags & ScRefFlags::VALID )
@@ -179,6 +183,7 @@ bool ScFormulaReferenceHelper::ParseWithNames( ScRangeList& rRanges, const OUStr
         else
             bError = true;
     }
+    while (nIdx>0);
 
     return !bError;
 }
commit 68b3eb1372aa9728673d3c334880d70a75e42b21
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 18:56:56 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:48 2018 +0200

    Avoid getTokenCount and use indexed getToken
    
    Change-Id: Icd6253b09aacfdf63696f4292e1ac4ed8be8242c

diff --git a/sc/source/ui/miscdlgs/linkarea.cxx b/sc/source/ui/miscdlgs/linkarea.cxx
index e8eb369d39bc..d0909c63f34b 100644
--- a/sc/source/ui/miscdlgs/linkarea.cxx
+++ b/sc/source/ui/miscdlgs/linkarea.cxx
@@ -19,7 +19,6 @@
 
 #undef SC_DLLIMPLEMENTATION
 
-#include <comphelper/string.hxx>
 #include <sfx2/app.hxx>
 #include <sfx2/docfile.hxx>
 #include <sfx2/docfilt.hxx>
@@ -149,11 +148,14 @@ void ScLinkedAreaDlg::InitFromOldLink( const OUString& rFile, const OUString& rF
 
     UpdateSourceRanges();
 
-    sal_Int32 nRangeCount = comphelper::string::getTokenCount(rSource, ';');
-    for ( sal_Int32 i=0; i<nRangeCount; i++ )
+    if (!rSource.isEmpty())
     {
-        OUString aRange = rSource.getToken(i,';');
-        m_xLbRanges->select_text(aRange);
+        sal_Int32 nIdx {0};
+        do
+        {
+            m_xLbRanges->select_text(rSource.getToken(0, ';', nIdx));
+        }
+        while (nIdx>0);
     }
 
     bool bDoRefresh = (nRefresh != 0);
commit 78c25a457bf62d38c31021f6fe6446dc16ecdb61
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 18:55:38 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:47 2018 +0200

    Avoid getTokenCount and use indexed getToken
    
    Change-Id: I84141b9863225346d2bedfb702468f37bbeb9f64

diff --git a/sc/source/ui/optdlg/tpusrlst.cxx b/sc/source/ui/optdlg/tpusrlst.cxx
index bc5b96ef428f..89a578dfed16 100644
--- a/sc/source/ui/optdlg/tpusrlst.cxx
+++ b/sc/source/ui/optdlg/tpusrlst.cxx
@@ -296,14 +296,14 @@ void ScTpUserLists::UpdateEntries( size_t nList )
 
 void ScTpUserLists::MakeListStr( OUString& rListStr )
 {
-    OUStringBuffer aStr;
+    if (rListStr.isEmpty())
+        return;
 
-    sal_Int32 nToken = comphelper::string::getTokenCount(rListStr, LF);
+    OUStringBuffer aStr;
 
-    for(sal_Int32 i=0; i<nToken; i++)
+    for(sal_Int32 nIdx=0; nIdx>=0;)
     {
-        OUString aString = comphelper::string::strip(rListStr.getToken(i, LF), ' ');
-        aStr.append(aString);
+        aStr.append(comphelper::string::strip(rListStr.getToken(0, LF, nIdx), ' '));
         aStr.append(cDelimiter);
     }
 
commit e37992d8c00db08b2dbc64c1fccb0b12aa4d6e9f
Author:     Matteo Casalin <matteo.casalin at yahoo.com>
AuthorDate: Sun Aug 12 18:53:09 2018 +0200
Commit:     Matteo Casalin <matteo.casalin at yahoo.com>
CommitDate: Sun Sep 9 21:07:47 2018 +0200

    Avoid getTokenCount and use indexed getToken
    
    Change-Id: I2ad3e6bf35f53e83ccc570f8660a090e340ffa59

diff --git a/sc/source/ui/pagedlg/areasdlg.cxx b/sc/source/ui/pagedlg/areasdlg.cxx
index 276303375b08..02815f104654 100644
--- a/sc/source/ui/pagedlg/areasdlg.cxx
+++ b/sc/source/ui/pagedlg/areasdlg.cxx
@@ -19,7 +19,6 @@
 
 #include <rangelst.hxx>
 
-#include <comphelper/string.hxx>
 #include <sfx2/dispatch.hxx>
 #include <svl/stritem.hxx>
 #include <vcl/weld.hxx>
@@ -356,16 +355,18 @@ bool ScPrintAreasDlg::Impl_CheckRefStrings()
 
         ScAddress aAddr;
         ScRange aRange;
-        sal_Int32 nSepCount = comphelper::string::getTokenCount(aStrPrintArea, sep);
-        for ( sal_Int32 i = 0; i < nSepCount && bPrintAreaOk; ++i )
+        for ( sal_Int32 nIdx = 0; nIdx >= 0; )
         {
-            OUString aOne = aStrPrintArea.getToken(i, sep);
+            const OUString aOne = aStrPrintArea.getToken(0, sep, nIdx);
             ScRefFlags nResult = aRange.Parse( aOne, pDoc, eConv );
             if ((nResult & nValidRange) != nValidRange)
             {
                 ScRefFlags nAddrResult = aAddr.Parse( aOne, pDoc, eConv );
                 if ((nAddrResult & nValidAddr) != nValidAddr)
+                {
                     bPrintAreaOk = false;
+                    break;
+                }
             }
         }
     }


More information about the Libreoffice-commits mailing list