summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2024-04-02 23:57:16 +0500
committerMike Kaganski <mike.kaganski@collabora.com>2024-04-03 04:35:10 +0200
commitf2482fd96eff00b806fae385096531f63f5f2bf5 (patch)
tree25c42cc361f0612cd4ea4087452ed973c2a2e574
parentediteng: use text scaling that better mimics MSO text scaling (diff)
downloadcore-f2482fd96eff00b806fae385096531f63f5f2bf5.tar.gz
core-f2482fd96eff00b806fae385096531f63f5f2bf5.zip
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.kaganski@collabora.com> Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
-rw-r--r--basic/source/runtime/runtime.cxx95
1 files changed, 30 insertions, 65 deletions
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);
}
}