basic/source/runtime/runtime.cxx |   95 ++++++++++++---------------------------
 1 file changed, 30 insertions(+), 65 deletions(-)

New commits:
commit f2482fd96eff00b806fae385096531f63f5f2bf5
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Tue Apr 2 23:57:16 2024 +0500
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Wed Apr 3 04:35:10 2024 +0200

    Simplify VBALikeToRegexp a bit
    
    This cleans up some unnecessary escaping both
    inside and outside [] groups.
    
    Change-Id: I5abcf0fce634f0d8809bf4d318f61b8c8f69a318
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165703
    Tested-by: Mike Kaganski <mike.kagan...@collabora.com>
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/basic/source/runtime/runtime.cxx b/basic/source/runtime/runtime.cxx
index 20bbedc9d6f0..b2f493689c0b 100644
--- a/basic/source/runtime/runtime.cxx
+++ b/basic/source/runtime/runtime.cxx
@@ -1436,99 +1436,64 @@ void SbiRuntime::StepGE()       { StepCompare( SbxGE ); 
    }
 
 namespace
 {
-    bool NeedEsc(sal_Unicode cCode)
+    OUString VBALikeToRegexp(std::u16string_view sIn)
     {
-        if(!rtl::isAscii(cCode))
-        {
-            return false;
-        }
-        switch(cCode)
-        {
-        case '.':
-        case '^':
-        case '$':
-        case '+':
-        case '\':
-        case '|':
-        case '{':
-        case '}':
-        case '(':
-        case ')':
-            return true;
-        default:
-            return false;
-        }
-    }
-
-    OUString VBALikeToRegexp(const OUString &rIn)
-    {
-        OUStringBuffer sResult;
-        const sal_Unicode *start = rIn.getStr();
-        const sal_Unicode *end = start + rIn.getLength();
-
-        int seenright = 0;
-
-        sResult.append("\A"); // Match at the beginning of the input
+        OUStringBuffer sResult("\A"); // Match at the beginning of the input
 
-        while (start < end)
+        for (auto start = sIn.begin(), end = sIn.end(); start < end;)
         {
-            switch (*start)
+            switch (auto ch = *start++)
             {
             case '?':
                 sResult.append('.');
-                start++;
                 break;
             case '*':
                 sResult.append(".*");
-                start++;
                 break;
             case '#':
                 sResult.append("[0-9]");
-                start++;
-                break;
-            case ']':
-                sResult.append('\');
-                sResult.append(*start++);
                 break;
             case '[':
-                sResult.append(*start++);
-                seenright = 0;
-                if (start < end && *start == '!')
+                sResult.append(ch);
+                if (start < end)
                 {
-                    sResult.append('^');
-                    start++;
+                    if (*start == '!')
+                    {
+                        sResult.append('^');
+                        ++start;
+                    }
+                    else if (*start == '^')
+                        sResult.append('\');
                 }
-                while (start < end && !seenright)
+                for (bool seenright = false; start < end && !seenright; 
++start)
                 {
                     switch (*start)
                     {
                     case '[':
-                    case '?':
-                    case '*':
+                    case '\':
                         sResult.append('\');
-                        sResult.append(*start);
                         break;
                     case ']':
-                        sResult.append(*start);
-                        seenright = 1;
-                        break;
-                    default:
-                        if (NeedEsc(*start))
-                        {
-                            sResult.append('\');
-                        }
-                        sResult.append(*start);
+                        seenright = true;
                         break;
                     }
-                    start++;
+                    sResult.append(*start);
                 }
                 break;
+            case '.':
+            case '^':
+            case '$':
+            case '+':
+            case '\':
+            case '|':
+            case '{':
+            case '}':
+            case '(':
+            case ')':
+                sResult.append('\');
+                [[fallthrough]];
             default:
-                if (NeedEsc(*start))
-                {
-                    sResult.append('\');
-                }
-                sResult.append(*start++);
+                sResult.append(ch);
             }
         }
 

Reply via email to