mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-03-21 17:34:57 -05:00
Add regex support for "find and replace" variable action
This commit is contained in:
parent
668bba16ea
commit
8ba246a349
|
|
@ -883,7 +883,7 @@ AdvSceneSwitcher.action.variable.currentSegmentValue="Current value:"
|
|||
AdvSceneSwitcher.action.variable.entry="{{actions}}{{variables}}{{variables2}}{{strValue}}{{numValue}}{{segmentIndex}}{{mathExpression}}{{envVariableName}}{{scenes}}{{tempVars}}{{sceneItemIndex}}"
|
||||
AdvSceneSwitcher.action.variable.entry.substringIndex="Substring start:{{subStringStart}}Substring size:{{subStringSize}}"
|
||||
AdvSceneSwitcher.action.variable.entry.substringRegex="Assign value of{{regexMatchIdx}}match using regular expression:"
|
||||
AdvSceneSwitcher.action.variable.entry.findAndReplace="{{findStr}}{{replaceStr}}"
|
||||
AdvSceneSwitcher.action.variable.entry.findAndReplace="{{findStr}}{{findRegex}}{{replaceStr}}"
|
||||
AdvSceneSwitcher.action.variable.entry.userInput.customPrompt="{{useCustomPrompt}}Use custom prompt{{inputPrompt}}"
|
||||
AdvSceneSwitcher.action.variable.entry.userInput.placeholder="{{useInputPlaceholder}}Fill with placeholder{{inputPlaceholder}}"
|
||||
AdvSceneSwitcher.action.projector="Projector"
|
||||
|
|
|
|||
|
|
@ -648,7 +648,6 @@ AdvSceneSwitcher.action.variable.conditionNoVariableSupport="不支持从 %1 条
|
|||
AdvSceneSwitcher.action.variable.currentSegmentValue="当前值:"
|
||||
AdvSceneSwitcher.action.variable.entry.substringIndex="子字符串开始:{{subStringStart}} 子字符串大小:{{subStringSize}}"
|
||||
AdvSceneSwitcher.action.variable.entry.substringRegex="使用正则表达式为 {{regexMatchIdx}} 匹配的值:"
|
||||
AdvSceneSwitcher.action.variable.entry.findAndReplace="{{findStr}}{{replaceStr}}"
|
||||
AdvSceneSwitcher.action.projector="投影仪"
|
||||
AdvSceneSwitcher.action.projector.type.source="源"
|
||||
AdvSceneSwitcher.action.projector.type.scene="场景"
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ void MacroActionVariable::HandleIndexSubString(Variable *var)
|
|||
void MacroActionVariable::HandleRegexSubString(Variable *var)
|
||||
{
|
||||
const auto curValue = var->Value();
|
||||
auto regex = _regex.GetRegularExpression(_regexPattern);
|
||||
auto regex = _subStringRegex.GetRegularExpression(_regexPattern);
|
||||
if (!regex.isValid()) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -123,8 +123,23 @@ void MacroActionVariable::HandleRegexSubString(Variable *var)
|
|||
void MacroActionVariable::HandleFindAndReplace(Variable *var)
|
||||
{
|
||||
auto value = var->Value();
|
||||
ReplaceAll(value, _findStr, _replaceStr);
|
||||
var->SetValue(value);
|
||||
if (!_findRegex.Enabled()) {
|
||||
ReplaceAll(value, _findStr, _replaceStr);
|
||||
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());
|
||||
}
|
||||
|
||||
void MacroActionVariable::HandleMathExpression(Variable *var)
|
||||
|
|
@ -253,7 +268,7 @@ bool MacroActionVariable::PerformAction()
|
|||
return true;
|
||||
}
|
||||
case Type::SUBSTRING: {
|
||||
if (_regex.Enabled()) {
|
||||
if (_subStringRegex.Enabled()) {
|
||||
HandleRegexSubString(var.get());
|
||||
return true;
|
||||
}
|
||||
|
|
@ -348,9 +363,10 @@ bool MacroActionVariable::Save(obs_data_t *obj) const
|
|||
obs_data_set_int(obj, "subStringSize", _subStringSize);
|
||||
obs_data_set_string(obj, "regexPattern", _regexPattern.c_str());
|
||||
obs_data_set_int(obj, "regexMatchIdx", _regexMatchIdx);
|
||||
_findRegex.Save(obj, "findRegex");
|
||||
_findStr.Save(obj, "findStr");
|
||||
_replaceStr.Save(obj, "replaceStr");
|
||||
_regex.Save(obj);
|
||||
_subStringRegex.Save(obj);
|
||||
_mathExpression.Save(obj, "mathExpression");
|
||||
obs_data_set_bool(obj, "useCustomPrompt", _useCustomPrompt);
|
||||
_inputPrompt.Save(obj, "inputPrompt");
|
||||
|
|
@ -376,9 +392,10 @@ bool MacroActionVariable::Load(obs_data_t *obj)
|
|||
_segmentIdxLoadValue = obs_data_get_int(obj, "segmentIdx");
|
||||
_subStringStart = obs_data_get_int(obj, "subStringStart");
|
||||
_subStringSize = obs_data_get_int(obj, "subStringSize");
|
||||
_regex.Load(obj);
|
||||
_subStringRegex.Load(obj);
|
||||
_regexPattern = obs_data_get_string(obj, "regexPattern");
|
||||
_regexMatchIdx = obs_data_get_int(obj, "regexMatchIdx");
|
||||
_findRegex.Load(obj, "findRegex");
|
||||
_findStr.Load(obj, "findStr");
|
||||
_replaceStr.Load(obj, "replaceStr");
|
||||
_mathExpression.Load(obj, "mathExpression");
|
||||
|
|
@ -502,10 +519,11 @@ MacroActionVariableEdit::MacroActionVariableEdit(
|
|||
_subStringRegexEntryLayout(new QHBoxLayout()),
|
||||
_subStringStart(new QSpinBox()),
|
||||
_subStringSize(new QSpinBox()),
|
||||
_regex(new RegexConfigWidget(parent)),
|
||||
_substringRegex(new RegexConfigWidget(parent)),
|
||||
_regexPattern(new ResizingPlainTextEdit(this, 10, 1, 1)),
|
||||
_regexMatchIdx(new QSpinBox()),
|
||||
_findReplaceLayout(new QHBoxLayout()),
|
||||
_findRegex(new RegexConfigWidget()),
|
||||
_findStr(new VariableTextEdit(this, 10, 1, 1)),
|
||||
_replaceStr(new VariableTextEdit(this, 10, 1, 1)),
|
||||
_mathExpression(new VariableLineEdit(this)),
|
||||
|
|
@ -561,13 +579,16 @@ MacroActionVariableEdit::MacroActionVariableEdit(
|
|||
SLOT(SubStringStartChanged(int)));
|
||||
QWidget::connect(_subStringSize, SIGNAL(valueChanged(int)), this,
|
||||
SLOT(SubStringSizeChanged(int)));
|
||||
QWidget::connect(_regex,
|
||||
QWidget::connect(_substringRegex,
|
||||
SIGNAL(RegexConfigChanged(const RegexConfig &)), this,
|
||||
SLOT(RegexChanged(const RegexConfig &)));
|
||||
SLOT(SubStringRegexChanged(const RegexConfig &)));
|
||||
QWidget::connect(_regexPattern, SIGNAL(textChanged()), this,
|
||||
SLOT(RegexPatternChanged()));
|
||||
QWidget::connect(_regexMatchIdx, SIGNAL(valueChanged(int)), this,
|
||||
SLOT(RegexMatchIdxChanged(int)));
|
||||
QWidget::connect(_findRegex,
|
||||
SIGNAL(RegexConfigChanged(const RegexConfig &)), this,
|
||||
SLOT(FindRegexChanged(const RegexConfig &)));
|
||||
QWidget::connect(_findStr, SIGNAL(textChanged()), this,
|
||||
SLOT(FindStrValueChanged()));
|
||||
QWidget::connect(_replaceStr, SIGNAL(textChanged()), this,
|
||||
|
|
@ -604,6 +625,7 @@ MacroActionVariableEdit::MacroActionVariableEdit(
|
|||
{"{{subStringStart}}", _subStringStart},
|
||||
{"{{subStringSize}}", _subStringSize},
|
||||
{"{{regexMatchIdx}}", _regexMatchIdx},
|
||||
{"{{findRegex}}", _findRegex},
|
||||
{"{{findStr}}", _findStr},
|
||||
{"{{replaceStr}}", _replaceStr},
|
||||
{"{{mathExpression}}", _mathExpression},
|
||||
|
|
@ -644,7 +666,7 @@ MacroActionVariableEdit::MacroActionVariableEdit(
|
|||
_placeholderLayout, widgetPlaceholders);
|
||||
|
||||
auto regexConfigLayout = new QHBoxLayout;
|
||||
regexConfigLayout->addWidget(_regex);
|
||||
regexConfigLayout->addWidget(_substringRegex);
|
||||
regexConfigLayout->addStretch();
|
||||
|
||||
_substringLayout->addLayout(_subStringIndexEntryLayout);
|
||||
|
|
@ -694,7 +716,8 @@ void MacroActionVariableEdit::UpdateEntryData()
|
|||
: MacroSegmentSelection::Type::ACTION);
|
||||
_subStringStart->setValue(_entryData->_subStringStart + 1);
|
||||
_subStringSize->setValue(_entryData->_subStringSize);
|
||||
_regex->SetRegexConfig(_entryData->_regex);
|
||||
_substringRegex->SetRegexConfig(_entryData->_subStringRegex);
|
||||
_findRegex->SetRegexConfig(_entryData->_findRegex);
|
||||
_regexPattern->setPlainText(
|
||||
QString::fromStdString(_entryData->_regexPattern));
|
||||
_regexMatchIdx->setValue(_entryData->_regexMatchIdx + 1);
|
||||
|
|
@ -903,14 +926,14 @@ void MacroActionVariableEdit::SubStringSizeChanged(int val)
|
|||
_entryData->_subStringSize = val;
|
||||
}
|
||||
|
||||
void MacroActionVariableEdit::RegexChanged(const RegexConfig &conf)
|
||||
void MacroActionVariableEdit::SubStringRegexChanged(const RegexConfig &conf)
|
||||
{
|
||||
if (_loading || !_entryData) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto lock = LockContext();
|
||||
_entryData->_regex = conf;
|
||||
_entryData->_subStringRegex = conf;
|
||||
|
||||
SetWidgetVisibility();
|
||||
}
|
||||
|
|
@ -949,6 +972,18 @@ void MacroActionVariableEdit::FindStrValueChanged()
|
|||
updateGeometry();
|
||||
}
|
||||
|
||||
void MacroActionVariableEdit::FindRegexChanged(const RegexConfig &conf)
|
||||
{
|
||||
if (_loading || !_entryData) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto lock = LockContext();
|
||||
_entryData->_findRegex = conf;
|
||||
adjustSize();
|
||||
updateGeometry();
|
||||
}
|
||||
|
||||
void MacroActionVariableEdit::ReplaceStrValueChanged()
|
||||
{
|
||||
if (_loading || !_entryData) {
|
||||
|
|
@ -1113,7 +1148,7 @@ void MacroActionVariableEdit::SetWidgetVisibility()
|
|||
_entryData->_type ==
|
||||
MacroActionVariable::Type::SUBSTRING);
|
||||
if (_entryData->_type == MacroActionVariable::Type::SUBSTRING) {
|
||||
bool showRegex = _entryData->_regex.Enabled();
|
||||
bool showRegex = _entryData->_subStringRegex.Enabled();
|
||||
SetLayoutVisible(_subStringIndexEntryLayout, !showRegex);
|
||||
SetLayoutVisible(_subStringRegexEntryLayout, showRegex);
|
||||
_regexPattern->setVisible(showRegex);
|
||||
|
|
|
|||
|
|
@ -55,9 +55,10 @@ public:
|
|||
double _numValue = 0;
|
||||
int _subStringStart = 0;
|
||||
int _subStringSize = 0;
|
||||
RegexConfig _regex = RegexConfig::PartialMatchRegexConfig();
|
||||
RegexConfig _subStringRegex = RegexConfig::PartialMatchRegexConfig();
|
||||
std::string _regexPattern = ".*";
|
||||
int _regexMatchIdx = 0;
|
||||
RegexConfig _findRegex;
|
||||
StringVariable _findStr = obs_module_text(
|
||||
"AdvSceneSwitcher.action.variable.findAndReplace.find");
|
||||
StringVariable _replaceStr = obs_module_text(
|
||||
|
|
@ -120,10 +121,11 @@ private slots:
|
|||
void MacroSegmentOrderChanged();
|
||||
void SubStringStartChanged(int val);
|
||||
void SubStringSizeChanged(int val);
|
||||
void RegexChanged(const RegexConfig &conf);
|
||||
void SubStringRegexChanged(const RegexConfig &conf);
|
||||
void RegexPatternChanged();
|
||||
void RegexMatchIdxChanged(int val);
|
||||
void FindStrValueChanged();
|
||||
void FindRegexChanged(const RegexConfig &conf);
|
||||
void ReplaceStrValueChanged();
|
||||
void MathExpressionChanged();
|
||||
void UseCustomPromptChanged(int);
|
||||
|
|
@ -155,10 +157,11 @@ private:
|
|||
QHBoxLayout *_subStringRegexEntryLayout;
|
||||
QSpinBox *_subStringStart;
|
||||
QSpinBox *_subStringSize;
|
||||
RegexConfigWidget *_regex;
|
||||
RegexConfigWidget *_substringRegex;
|
||||
ResizingPlainTextEdit *_regexPattern;
|
||||
QSpinBox *_regexMatchIdx;
|
||||
QHBoxLayout *_findReplaceLayout;
|
||||
RegexConfigWidget *_findRegex;
|
||||
VariableTextEdit *_findStr;
|
||||
VariableTextEdit *_replaceStr;
|
||||
VariableLineEdit *_mathExpression;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user