vcl/source/text/textlayout.cxx |   97 +++++++++++++++++------------------------
 1 file changed, 42 insertions(+), 55 deletions(-)

New commits:
commit 183973ece62c0eefbd841dcf99f7fb8716f0fca1
Author:     Chris Sherlock <chris.sherloc...@gmail.com>
AuthorDate: Tue Oct 17 18:06:59 2023 +1100
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Mon Nov 6 07:21:23 2023 +0100

    vcl: flatten TextLayoutHelper::GetNewsEllipsisString()
    
    Change-Id: Ie94ce7c75ab96b8f7186f9f0c455dfa3a9f1683f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158072
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/vcl/source/text/textlayout.cxx b/vcl/source/text/textlayout.cxx
index db2226842d09..95e5d54a4b3c 100644
--- a/vcl/source/text/textlayout.cxx
+++ b/vcl/source/text/textlayout.cxx
@@ -144,76 +144,63 @@ namespace vcl
         OUString aTempLastStr1 = "..." + aLastStr;
 
         if (GetTextWidth(aTempLastStr1, 0, aTempLastStr1.getLength()) > 
nMaxWidth)
+            return GetEllipsisString(aStr, nMaxWidth, 
DrawTextFlags::EndEllipsis);
+
+        sal_Int32 nFirstContent = 0;
+        while (nFirstContent < nLastContent)
+        {
+            nFirstContent++;
+            if (ImplIsCharIn(aStr[nFirstContent], pSepChars))
+                break;
+        }
+
+        while ((nFirstContent < nLastContent) && 
ImplIsCharIn(aStr[nFirstContent], pSepChars))
         {
-            aStr = GetEllipsisString(aStr, nMaxWidth, 
DrawTextFlags::EndEllipsis);
+            nFirstContent++;
         }
-        else
+
+        if (nFirstContent >= nLastContent)
+            return GetEllipsisString(aStr, nMaxWidth, nStyle | 
DrawTextFlags::EndEllipsis);
+
+        if (nFirstContent > 4)
+            nFirstContent = 4;
+
+        OUString aFirstStr = OUString::Concat(aStr.subView(0, nFirstContent)) 
+ "...";
+        OUString aTempStr = aFirstStr + aLastStr;
+
+        if (GetTextWidth(aTempStr, 0, aTempStr.getLength() ) > nMaxWidth)
+            return GetEllipsisString(aStr, nMaxWidth, nStyle | 
DrawTextFlags::EndEllipsis);
+
+        do
         {
-            sal_Int32 nFirstContent = 0;
+            aStr = aTempStr;
+
+            if (nLastContent > aStr.getLength())
+                nLastContent = aStr.getLength();
+
             while (nFirstContent < nLastContent)
             {
-                nFirstContent++;
-                if (ImplIsCharIn( aStr[nFirstContent], pSepChars))
+                nLastContent--;
+                if (ImplIsCharIn(aStr[nLastContent], pSepChars))
                     break;
-            }
 
-            while ((nFirstContent < nLastContent) && 
ImplIsCharIn(aStr[nFirstContent], pSepChars))
-            {
-                nFirstContent++;
             }
 
-            // MEM continue here
-            if (nFirstContent >= nLastContent)
+            while ((nFirstContent < nLastContent) && 
ImplIsCharIn(aStr[nLastContent-1], pSepChars))
             {
-                aStr = GetEllipsisString(aStr, nMaxWidth, nStyle | 
DrawTextFlags::EndEllipsis);
+                nLastContent--;
             }
-            else
-            {
-                if (nFirstContent > 4)
-                    nFirstContent = 4;
 
-                OUString aFirstStr = OUString::Concat(aStr.subView(0, 
nFirstContent)) + "...";
-                OUString aTempStr = aFirstStr + aLastStr;
+            if (nFirstContent < nLastContent)
+            {
+                std::u16string_view aTempLastStr = aStr.subView(nLastContent);
+                aTempStr = aFirstStr + aTempLastStr;
 
-                if (GetTextWidth(aTempStr, 0, aTempStr.getLength() ) > 
nMaxWidth)
-                {
-                    aStr = GetEllipsisString(aStr, nMaxWidth, nStyle | 
DrawTextFlags::EndEllipsis);
-                }
-                else
-                {
-                    do
-                    {
-                        aStr = aTempStr;
-
-                        if (nLastContent > aStr.getLength())
-                            nLastContent = aStr.getLength();
-
-                        while (nFirstContent < nLastContent)
-                        {
-                            nLastContent--;
-                            if (ImplIsCharIn(aStr[nLastContent], pSepChars))
-                                break;
-
-                        }
-
-                        while ((nFirstContent < nLastContent) && 
ImplIsCharIn(aStr[nLastContent-1], pSepChars))
-                        {
-                            nLastContent--;
-                        }
-
-                        if (nFirstContent < nLastContent)
-                        {
-                            std::u16string_view aTempLastStr = 
aStr.subView(nLastContent);
-                            aTempStr = aFirstStr + aTempLastStr;
-
-                            if (GetTextWidth(aTempStr, 0, 
aTempStr.getLength()) > nMaxWidth)
-                                break;
-                        }
-                    }
-                    while (nFirstContent < nLastContent);
-                }
+                if (GetTextWidth(aTempStr, 0, aTempStr.getLength()) > 
nMaxWidth)
+                    break;
             }
         }
+        while (nFirstContent < nLastContent);
 
         return aStr;
     }

Reply via email to