internal static IEnumerable <ASTNode> ParseUntilFailure(JinjaEnvironment environment, Lexer lexer, ILookaroundEnumerator <ParsingNode> enumerator) { do { ASTNode?astNode = default; switch (enumerator.Current.NodeType) { case ParsingNodeType.Statement: StatementNode.TryParse(environment, lexer, enumerator, out astNode); break; case ParsingNodeType.NewLine: astNode = new NewLineNode(enumerator.Current); break; case ParsingNodeType.Comment: astNode = new CommentNode(enumerator.Current); break; case ParsingNodeType.WhiteSpace: astNode = WhiteSpaceNode.Parse(enumerator); break; case ParsingNodeType.Expression: if (ExpressionNode.TryParse(environment, enumerator, out astNode) == false) { throw new NotImplementedException(); } break; case ParsingNodeType.Output: astNode = new OutputNode(enumerator.Current); break; } if (astNode == default) { yield break; } yield return(astNode); } while (enumerator.MoveNext()); }