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); } }