private void ParseAnimationOptions(AnimationRootNode rootNode) { while (tokenStream.HasMoreTokens && !AdvanceIfTokenType(StyleTokenType.BracesClose)) { StyleToken typeToken = tokenStream.Current; string optionName = AssertTokenTypeAndAdvance(StyleTokenType.Identifier).ToLower(); bool typeFound = false; for (int index = 0; index < s_AnimationOptionNames.Length; index++) { string name = s_AnimationOptionNames[index].Item1; if (name == optionName) { AssertTokenTypeAndAdvance(StyleTokenType.EqualSign); StyleToken variableToken = tokenStream.Current; AnimationOptionNode optionNode = StyleASTNodeFactory.AnimationOptionNode(s_AnimationOptionNames[index].Item2, ParsePropertyValue()); optionNode.WithLocation(variableToken); rootNode.AddOptionNode(optionNode); typeFound = true; break; } } if (!typeFound) { throw new ParseException(typeToken, $"{optionName} is not a supported animation option. Valid values are: {FormatOptionList(s_AnimationOptionNames)}\n"); } AssertTokenTypeAndAdvance(StyleTokenType.EndStatement); } }