Ejemplo n.º 1
0
        private IList <Block> ParseBlockList(IList <Clause> clauseList, ref int i)
        {
            var blockList = new List <Block>();
            var encounteredBlockDelimiter = false;

            while (i < clauseList.Count && !encounteredBlockDelimiter)
            {
                switch (clauseList[i])
                {
                case TextClause _:
                    var textBlock = ParseTextBlock(clauseList, ref i);
                    blockList.Add(textBlock);
                    break;

                case IfClause _:
                    var ifBlock = ParseIfBlock(clauseList, ref i);
                    blockList.Add(ifBlock);
                    break;

                case ForClause _:
                    var forBlock = ParseForBlock(clauseList, ref i);
                    blockList.Add(forBlock);
                    break;

                case ElseIfClause _:
                case ElseClause _:
                case EndIfClause _:
                case EndForClause _:
                    encounteredBlockDelimiter = true;
                    break;

                case ExpressionClause c:
                    var expressionBlock = new ExpressionBlock(c.Start, c.End,
                                                              c.Expression);
                    i++;
                    blockList.Add(expressionBlock);
                    break;

                default:
                    throw ThrowHelper(clauseList[i].Start, ParsingError.UnknownClause);
                }
            }

            return(blockList);
        }
Ejemplo n.º 2
0
        private void RenderExpression(Context ctx, ExpressionBlock b)
        {
            var v = Evaluate(ctx, b.Expression);

            ctx.Writer.Write(v.StringValue);
        }