From 0e9875e6b5c21a41635221ce450a0dfb7d40fb1e Mon Sep 17 00:00:00 2001 From: Przemek Pawlas <3606072+Destroy666x@users.noreply.github.com> Date: Sat, 28 Sep 2024 15:32:26 +0200 Subject: [PATCH] Allow using regex capture groups in replacement --- data/locale/en-US.ini | 1 + lib/macro/macro-action-variable.cpp | 16 ++++++---------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 6b97ade3..e8bd2ac4 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -1078,6 +1078,7 @@ AdvSceneSwitcher.action.variable.askForValuePrompt="Assign value to variable:" AdvSceneSwitcher.action.variable.mathExpression.example="( 1 + 2 * 3 ) / 4" AdvSceneSwitcher.action.variable.findAndReplace.find="Text to find" AdvSceneSwitcher.action.variable.findAndReplace.replace="Text to replace with" +AdvSceneSwitcher.action.variable.findAndReplace.replace.tooltip="Using \1, \2, etc. to represent first, second, etc. capture groups is supported." AdvSceneSwitcher.action.variable.subString.begin="Beginning" AdvSceneSwitcher.action.variable.subString.all="All" AdvSceneSwitcher.action.variable.invalidSelection="Invalid selection!" diff --git a/lib/macro/macro-action-variable.cpp b/lib/macro/macro-action-variable.cpp index 9040d46c..2b770b5c 100644 --- a/lib/macro/macro-action-variable.cpp +++ b/lib/macro/macro-action-variable.cpp @@ -150,18 +150,12 @@ void MacroActionVariable::HandleFindAndReplace(Variable *var) var->SetValue(value); return; } - QString resultString = QString::fromStdString(value); + QString replacement = QString::fromStdString(_replaceStr); auto regex = _findRegex.GetRegularExpression(_findStr); - auto matchIterator = regex.globalMatch(QString::fromStdString(value)); - int offset = 0; - while (matchIterator.hasNext()) { - QRegularExpressionMatch match = matchIterator.next(); - resultString.replace(match.capturedStart() + offset, - match.capturedLength(), replacement); - offset += replacement.length() - match.capturedLength(); - } - var->SetValue(resultString.toStdString()); + auto result = QString::fromStdString(value); + result = result.replace(regex, replacement); + var->SetValue(result.toStdString()); } void MacroActionVariable::HandleMathExpression(Variable *var) @@ -739,6 +733,8 @@ MacroActionVariableEdit::MacroActionVariableEdit( _regexMatchIdx->setMinimum(1); _regexMatchIdx->setMaximum(999); _regexMatchIdx->setSuffix("."); + _replaceStr->setToolTip(obs_module_text( + "AdvSceneSwitcher.action.variable.findAndReplace.replace.tooltip")); _inputPrompt->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); _sceneItemIndex->setMinimum(1);