[Libreoffice-commits] core.git: vcl/source

Khaled Hosny khaledhosny at eglug.org
Fri Dec 16 14:59:17 UTC 2016


 vcl/source/gdi/CommonSalLayout.cxx |   45 +++++++++----------------------------
 1 file changed, 12 insertions(+), 33 deletions(-)

New commits:
commit 0c49ab77067413901f8e2956fbdbc45671384b73
Author: Khaled Hosny <khaledhosny at eglug.org>
Date:   Wed Dec 14 17:51:33 2016 +0200

    Simplify CommonSalLayout::ParseFeatures()
    
    Use OString::getToken() instead of manually tokenizing the string.
    
    Change-Id: I2647dc2be1343de8ae0adf581260f5e06364ef79
    Reviewed-on: https://gerrit.libreoffice.org/32015
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Khaled Hosny <khaledhosny at eglug.org>

diff --git a/vcl/source/gdi/CommonSalLayout.cxx b/vcl/source/gdi/CommonSalLayout.cxx
index af8ebfa..956bad0 100644
--- a/vcl/source/gdi/CommonSalLayout.cxx
+++ b/vcl/source/gdi/CommonSalLayout.cxx
@@ -131,50 +131,29 @@ static hb_unicode_funcs_t* getUnicodeFuncs()
 }
 #endif
 
-void CommonSalLayout::ParseFeatures(const OUString& name)
+void CommonSalLayout::ParseFeatures(const OUString& aName)
 {
-    int nFeatures = 0;
-    int nStart = name.indexOf(FontSelectPatternAttributes::FEAT_PREFIX);
-    if (nStart < 0)
+    if (aName.indexOf(FontSelectPatternAttributes::FEAT_PREFIX) < 0)
         return;
-    OString oName = OUStringToOString(name, RTL_TEXTENCODING_ASCII_US);
-    for (int nNext = nStart; nNext > 0; nNext = name.indexOf(FontSelectPatternAttributes::FEAT_SEPARATOR, nNext + 1))
+
+    OString sName = OUStringToOString(aName, RTL_TEXTENCODING_ASCII_US);
+    sName = sName.getToken(1, FontSelectPatternAttributes::FEAT_PREFIX);
+    sal_Int32 nIndex = 0;
+    do
     {
-        if (name.match("lang=", nNext + 1))
+        OString sToken = sName.getToken(0, FontSelectPatternAttributes::FEAT_SEPARATOR, nIndex);
+        if (sToken.startsWith("lang="))
         {
-            int endamp = name.indexOf(FontSelectPatternAttributes::FEAT_SEPARATOR, nNext+1);
-            int enddelim = name.indexOf(' ', nNext+1);
-            int end = name.getLength();
-            if (endamp < 0)
-            {
-                if (enddelim > 0)
-                    end = enddelim;
-            }
-            else if (enddelim < 0 || endamp < enddelim)
-                end = endamp;
-            else
-                end = enddelim;
-            msLanguage = oName.copy(nNext + 6, end - nNext - 6);
+            msLanguage = sToken.getToken(1, '=');
         }
         else
-            ++nFeatures;
-    }
-    if (nFeatures == 0)
-        return;
-
-    maFeatures.reserve(nFeatures);
-    for (int nThis = nStart, nNext = name.indexOf(FontSelectPatternAttributes::FEAT_SEPARATOR, nStart + 1);
-         nThis > 0;
-         nThis = nNext, nNext = name.indexOf(FontSelectPatternAttributes::FEAT_SEPARATOR, nNext + 1))
-    {
-        if (!name.match("lang=", nThis + 1))
         {
-            int end = nNext > 0 ? nNext : name.getLength();
             hb_feature_t aFeature;
-            if (hb_feature_from_string(oName.getStr() + nThis + 1, end - nThis - 1, &aFeature))
+            if (hb_feature_from_string(sToken.getStr(), sToken.getLength(), &aFeature))
                 maFeatures.push_back(aFeature);
         }
     }
+    while (nIndex >= 0);
 }
 
 #if defined(_WIN32)


More information about the Libreoffice-commits mailing list