in FixAntenna/NetCore/Validation/Validators/Condition/ConditionValidateParser.cs [83:148]
private int Parse(int startPos)
{
//skip whitespaces
while (startPos < _condition.Length && char.IsWhiteSpace(_condition[startPos]))
{
startPos++;
}
if (StartWith(_condition, Utils.Constants.FalseWord, 0))
{
_stack.Add(new FalseValidateOperator(_isGroupCondition));
return startPos + Utils.Constants.FalseWord.Length;
}
if (StartWith(_condition, Utils.Constants.ExisttagWord, startPos))
{
return BuildExistTagCondition(startPos);
}
if (StartWith(_condition, Utils.Constants.TagIdent, startPos))
{
return BuildComparisonOperator(startPos, _condition);
}
if (StartWith(_condition, Utils.Constants.GroupIdent, startPos))
{
_isGroupCondition = true;
return BuildGroupComparisonOperator(startPos);
}
if (StartWith(_condition, Utils.Constants.OrWord, startPos))
{
return BuildOrOperator(startPos);
}
if (StartWith(_condition, Utils.Constants.AndWord, startPos))
{
return BuildAndOperator(startPos);
}
if (StartWith(_condition, Utils.Constants.NotWord, startPos))
{
return BuildNotOperator(startPos);
}
if (_condition[startPos] == '(')
{
//detected block
var endPos = Parse(startPos + 1);
var foundPos = _condition.IndexOf(")", endPos, StringComparison.Ordinal);
while (_condition.Substring(endPos, foundPos - endPos).Trim().Length > 0)
{
endPos = Parse(endPos);
foundPos = _condition.IndexOf(")", endPos, StringComparison.Ordinal);
}
if (foundPos == -1)
{
throw new ConditionParserException("Invalid condition: " + _condition);
}
return foundPos + 1;
}
throw new ConditionParserException("Invalid condition: " + _condition);
}