idTech4.UI.idWindow.ParseExpressionPriority C# (CSharp) Method

ParseExpressionPriority() private method

private ParseExpressionPriority ( idScriptParser parser, int priority, idWindowVariable var = null, int component ) : int
parser idTech4.Text.idScriptParser
priority int
var idWindowVariable
component int
return int
		private int ParseExpressionPriority(idScriptParser parser, int priority, idWindowVariable var = null, int component = 0)
		{
			if(priority == 0)
			{
				return ParseTerm(parser, var, component);
			}

			idToken token;
			string tokenValue;
			int a = ParseExpressionPriority(parser, priority - 1, var, component);

			if((token = parser.ReadToken()) == null)
			{
				// we won't get EOF in a real file, but we can when parsing from generated strings
				return a;
			}

			tokenValue = token.ToString();

			if(priority == 1)
			{
				if(tokenValue == "*")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.Multiply, priority);
				}
				else if(tokenValue == "/")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.Divide, priority);
				}
				else if(tokenValue == "%")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.Modulo, priority);
				}
			}
			else if(priority == 2)
			{
				if(tokenValue == "+")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.Add, priority);
				}
				else if(tokenValue == "-")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.Subtract, priority);
				}
			}
			else if(priority == 3)
			{
				if(tokenValue == ">")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.GreaterThan, priority);
				}
				else if(tokenValue == ">=")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.GreaterThanOrEqual, priority);
				}
				else if(tokenValue == "<")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.LessThan, priority);
				}
				else if(tokenValue == "<=")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.LessThanOrEqual, priority);
				}
				else if(tokenValue == "==")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.Equal, priority);
				}
				else if(tokenValue == "!=")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.NotEqual, priority);
				}
			}
			else if(priority == 4)
			{
				if(tokenValue == "&&")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.And, priority);
				}
				else if(tokenValue == "||")
				{
					return ParseEmitOperation(parser, a, WindowExpressionOperationType.Or, priority);
				}
				else if(tokenValue == "?")
				{
					WindowExpressionOperation op;
					int o = ParseEmitOperation(parser, a, WindowExpressionOperationType.Conditional, priority, out op);

					if((token = parser.ReadToken()) == null)
					{
						return o;
					}
					else if(token.ToString() == ":")
					{
						a = ParseExpressionPriority(parser, priority - 1, var);
						op.D = a;
					}

					return priority;
				}
			}

			// assume that anything else terminates the expression
			// not too robust error checking...
			parser.UnreadToken(token);

			return a;
		}