Aura.Mabi.Tags.Check C# (CSharp) Method

Check() private method

Returns true if the given string matches the tags of this instance.
private Check ( string tags, int level ) : bool
tags string
level int
return bool
		private bool Check(string tags, int level)
		{
			if (tags == "")
				return true;

			var result = false;
			var length = tags.Length;
			var start = 0;
			var prevOperator = '|';
			var open = 0;

			for (int i = 0; i < length; ++i)
			{
				// End
				if (i == length - 1)
				{
					var val = tags.Substring(start, i - start + 1);
					bool eval;
					if (val[0] == '(')
						eval = Check(val.Substring(1, val.Length - 2), level + 1);
					else
						eval = this.Evaluate(val);
					if (prevOperator == '|') result |= eval; else if (prevOperator == '&') result &= eval; else result ^= eval;
					break;
				}

				// Sub
				if (tags[i] == '(')
				{
					open++;
					continue;
				}
				else if (tags[i] == ')')
				{
					if (open != 0)
					{
						open--;
						continue;
					}
				}

				// Or/And/Xor
				if (open == 0 && (tags[i] == '|' || tags[i] == '&' /*|| tags[i] == '^'*/))
				{
					var val = tags.Substring(start, i - start);
					bool eval;
					if (val[0] == '(')
						eval = Check(val.Substring(1, val.Length - 2), level + 1);
					else
						eval = Evaluate(val);
					if (prevOperator == '|') result |= eval; else if (prevOperator == '&') result &= eval; else result ^= eval;
					prevOperator = tags[i];
					start = i + 1;
					continue;
				}
			}

			return result;
		}