Beispiel #1
0
        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());
        }