private int Parse()

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