Пример #1
0
        public LiquidString Render(
            RenderingVisitor renderingVisitor,
            MacroBlockTag macroBlocktag,
            ITemplateContext templateContext,
            IList <Option <ILiquidValue> > args)
        {
            var macroScope = new SymbolTable();

            var i = 0;

            foreach (var varName in macroBlocktag.Args.Take(args.Count))
            {
                macroScope.DefineLocalVariable(varName, args[i]);
                i++;
            }
            templateContext.SymbolTableStack.Push(macroScope);

            String hiddenText = "";

            renderingVisitor.PushTextAccumulator(str => hiddenText += str);
            renderingVisitor.StartWalking(macroBlocktag.LiquidBlock);
            renderingVisitor.PopTextAccumulator();

            templateContext.SymbolTableStack.Pop();

            return(LiquidString.Create(hiddenText));
        }
            public LiquidString Render(
                RenderingVisitor renderingVisitor,
                ITemplateContext templateContext,
                TreeNode <IASTNode> liquidBlock,
                IList <Option <ILiquidValue> > args)
            {
                var localBlockScope = new SymbolTable();

                templateContext.SymbolTableStack.Push(localBlockScope);
                LiquidString result;

                try
                {
                    // normally you would need to verify that arg0 and arg1 exists and are the correct value types.
                    String varname = args[0].Value.ToString();

                    var iterableFactory = new ArrayValueCreator(
                        new TreeNode <LiquidExpression>(
                            new LiquidExpression {
                        Expression = args[1].Value
                    }));

                    var iterable = iterableFactory.Eval(templateContext).ToList();

                    result = IterateBlock(renderingVisitor, varname, templateContext, iterable, liquidBlock);
                }
                finally
                {
                    templateContext.SymbolTableStack.Pop();
                }
                return(LiquidString.Create("START CUSTOM FOR LOOP" + result.StringVal + "END CUSTOM FOR LOOP"));
            }
Пример #3
0
        public void It_Should_Throw_An_Exception_When_No_Accumulator()
        {
            // Arrange
            var renderingVisitor = new RenderingVisitor(new TemplateContext());
            var rawTextNode      = new RawBlockTag("HELLO");

            // Act
            renderingVisitor.Visit(rawTextNode);
        }
            private static String EvalLiquidBlock(RenderingVisitor renderingVisitor, TreeNode <IASTNode> liquidBlock)
            {
                String          result      = "";
                Action <String> accumulator = str => result += str;

                renderingVisitor.PushTextAccumulator(accumulator);
                renderingVisitor.StartWalking(liquidBlock);
                renderingVisitor.PopTextAccumulator();
                return(result);
            }
            public LiquidString Render(
                RenderingVisitor renderingVisitor,
                ITemplateContext templatecontext,
                TreeNode <IASTNode> liquidBlock,
                IList <Option <ILiquidValue> > args)
            {
                var result = EvalLiquidBlock(renderingVisitor, liquidBlock);

                return(Reverse(result));
            }
        public void It_Should_Throw_An_Exception_When_No_Accumulator()
        {
            // Arrange
            var renderingVisitor = new RenderingVisitor(new TemplateContext());
            var rawTextNode = new RawBlockTag("HELLO");

            // Act
            renderingVisitor.Visit(rawTextNode);
          
        }
Пример #7
0
        private void renderedControl1_InitializeRender(object sender, RenderEventArgs e)
        {
            _render = e.Render;
            _renderingVisitor = new RenderingVisitor(_render);
            _simulator = new DigitalRuneSimulator();
            _simulator.AddForceEffect(new GravityForceEffect());

            Samples.SetSimpleScene(_simulator);

            _previousTickCount = Environment.TickCount;
            _startTickCount = _previousTickCount;
        }
Пример #8
0
        public string Render(Module module)
        {
            var entryPointLocator = new EntryPointLocator();

            entryPointLocator.Visit(module);

            var visitor = new RenderingVisitor(entryPointLocator.EntryPointDeclarations, new CSharpWriter());

            visitor.Visit(module);

            var code = visitor.Writer.GenerateCode();

            return(code);
        }
            private LiquidString IterateBlock(
                RenderingVisitor renderingVisitor,
                String varname,
                ITemplateContext templateContext,
                List <ILiquidValue> iterable,
                TreeNode <IASTNode> liquidBlock)
            {
                String result = "";

                renderingVisitor.PushTextAccumulator(str => result += str);
                foreach (var item in iterable)
                {
                    templateContext.SymbolTableStack.Define(varname, item.ToOption());
                    renderingVisitor.StartWalking(liquidBlock);
                }
                renderingVisitor.PopTextAccumulator();
                return(LiquidString.Create(result));
            }
        public void It_Should_Render_A_Raw_Text_Node()
        {
            // Arrange
            String result = "";
            const string blocktext = "HELLO";

            var renderingVisitor = new RenderingVisitor(new TemplateContext());
            renderingVisitor.PushTextAccumulator(str => result += str);

            var rawTextNode = new RawBlockTag(blocktext);
           
            // Act
            renderingVisitor.Visit(rawTextNode);

            // Assert
            Assert.That(result, Is.EqualTo(blocktext));

        }
Пример #11
0
        public void It_Should_Render_A_Raw_Text_Node()
        {
            // Arrange
            String       result    = "";
            const string blocktext = "HELLO";

            var renderingVisitor = new RenderingVisitor(new TemplateContext());

            renderingVisitor.PushTextAccumulator(str => result += str);

            var rawTextNode = new RawBlockTag(blocktext);

            // Act
            renderingVisitor.Visit(rawTextNode);

            // Assert
            Assert.That(result, Is.EqualTo(blocktext));
        }
Пример #12
0
        private static string Render(ITemplateContext templateContext, LiquidAST liquidAst, Action <LiquidError> onError = null)
        {
            if (onError == null)
            {
                onError = error => { };
            }
            String result           = "";
            var    renderingVisitor = new RenderingVisitor(templateContext);

            renderingVisitor.StartWalking(liquidAst.RootNode, str => result += str);
            if (renderingVisitor.HasErrors)
            {
                foreach (var error in renderingVisitor.RenderingErrors)
                {
                    onError(error);
                }
                //throw new LiquidRendererException(renderingVisitor.RenderingErrors);
            }
            return(result);
        }
Пример #13
0
        public void It_Should_Render_An_Error_When_Include_Contains_Parsing_Errors()
        {
            // Arrange
            var ctx = CreateContext(new Dictionary <String, String>
            {
                { "test", "problem: {% unterminated" }
            }).WithAllFilters();

            const String template = "{% include 'test' %}";

            // Act

            var    ast = new LiquidASTGenerator().Generate(template);
            var    renderingVisitor = new RenderingVisitor(ctx);
            String result           = "";

            renderingVisitor.StartWalking(ast.LiquidAST.RootNode, x => result += x);
            //Console.WriteLine("RESULT: " + result);
            Assert.Contains("missing TAGEND", result);
        }
Пример #14
0
        public void It_Should_Accumulate_Errors_When_Include_Contains_Rendering_Errors()
        {
            // Arrange
            var ctx = CreateContext(new Dictionary <String, String>
            {
                { "test", "problem: {{ 1 | divided_by: 0 }}" }
            }).WithAllFilters();
            //var defaultAstGenerator = ctx.ASTGenerator;
            //ctx.WithASTGenerator(str => { called = true; return defaultAstGenerator(str); });

            const String template = "{% include 'test' %}";

            // Act

            var    ast = new LiquidASTGenerator().Generate(template);
            var    renderingVisitor = new RenderingVisitor(ctx);
            String result           = "";

            renderingVisitor.StartWalking(ast.LiquidAST.RootNode, x => result += x);
            //Console.WriteLine(result);
            Assert.True(renderingVisitor.HasErrors);
        }
Пример #15
0
        public void It_Should_Accumulate_Errors_When_Include_Contains_Parsing_Errors()
        {
            // Arrange
            var ctx = CreateContext(new Dictionary <String, String>
            {
                { "test", "problem: {% unterminated" }
            }).WithAllFilters();

            const String template = "{% include 'test' %}";

            // Act

            var liquidParsingResult = new LiquidASTGenerator().Generate(template);

            Assert.False(liquidParsingResult.HasParsingErrors);

            var    renderingVisitor = new RenderingVisitor(ctx);
            String result           = "";

            renderingVisitor.StartWalking(liquidParsingResult.LiquidAST.RootNode, x => result += x);
            //Console.WriteLine(result);
            Assert.True(renderingVisitor.HasErrors);
        }
Пример #16
0
        public StringValue Render(
            RenderingVisitor renderingVisitor,
            MacroBlockTag macroBlocktag,
            ITemplateContext templateContext, 
            IList<Option<IExpressionConstant>> args)
        {
            var macroScope = new SymbolTable();

            var i = 0;
            foreach (var varName in macroBlocktag.Args.Take(args.Count))
            {
                macroScope.DefineLocalVariable(varName, args[i].HasValue? args[i].Value : null);
                i++;
            }
            templateContext.SymbolTableStack.Push(macroScope);

            //String result = "";
            //var subRenderer = new RenderingVisitor(evaluator, templateContext, str => result += str);

            //evaluator.StartVisiting(subRenderer, macroBlocktag.LiquidBlock);
            String hiddenText = "";

            renderingVisitor.PushTextAccumulator(str => hiddenText += str);
            renderingVisitor.StartWalking(macroBlocktag.LiquidBlock);
            renderingVisitor.PopTextAccumulator();

            templateContext.SymbolTableStack.Pop();
            
//            foreach (var error in subRenderer.Errors)
//            {
//                errorAccumulator.Add(error);
//            }
            return new StringValue(hiddenText);



        }
Пример #17
0
 public IncludeRenderer(RenderingVisitor renderingVisitor)
 {
     _renderingVisitor = renderingVisitor;
 }
Пример #18
0
 public TableRowRenderer(RenderingVisitor renderingVisitor)
 {
     _renderingVisitor = renderingVisitor;
 }
Пример #19
0
 public IfChangedRenderer(RenderingVisitor renderingVisitor)
 {
     _renderingVisitor = renderingVisitor;
 }
Пример #20
0
 public ForRenderer(RenderingVisitor renderingVisitor)
 {
     _renderingVisitor = renderingVisitor;
 }
Пример #21
0
 public TableRowRenderer(RenderingVisitor renderingVisitor)
 {
     _renderingVisitor = renderingVisitor;
 }
Пример #22
0
 public IfChangedRenderer(RenderingVisitor renderingVisitor)
 {
     _renderingVisitor = renderingVisitor;
 }
Пример #23
0
 public IncludeRenderer(RenderingVisitor renderingVisitor)
 {
     _renderingVisitor = renderingVisitor;
 }
 private StringValue IterateBlock(
     RenderingVisitor renderingVisitor,
     String varname,
     ITemplateContext templateContext,
     List<IExpressionConstant> iterable,
     TreeNode<IASTNode> liquidBlock)
 {
     String result = "";
     renderingVisitor.PushTextAccumulator(str => result += str);
     foreach (var item in iterable)
     {
         templateContext.SymbolTableStack.Define(varname, item);
         renderingVisitor.StartWalking(liquidBlock);
     }
     renderingVisitor.PopTextAccumulator();
     return new StringValue(result);
 }
            public StringValue Render(
                RenderingVisitor renderingVisitor,
                ITemplateContext templateContext,
                TreeNode<IASTNode> liquidBlock,
                IList<Option<IExpressionConstant>> args)
            {
                var localBlockScope = new SymbolTable();
                templateContext.SymbolTableStack.Push(localBlockScope);
                StringValue result;

                try
                {
                    // normally you would need to verify that arg0 and arg1 exists and are the correct value types.
                    String varname = args[0].Value.ToString();

                    var iterableFactory = new ArrayValueCreator(
                        new TreeNode<LiquidExpression>(
                            new LiquidExpression { Expression = args[1].Value }));

                    var iterable = iterableFactory.Eval(templateContext).ToList();

                    result = IterateBlock(renderingVisitor, varname, templateContext, iterable, liquidBlock);
                }
                finally
                {
                    templateContext.SymbolTableStack.Pop();
                }
                return new StringValue("START CUSTOM FOR LOOP" + result.StringVal + "END CUSTOM FOR LOOP");

            }
 private static String EvalLiquidBlock(RenderingVisitor renderingVisitor, TreeNode<IASTNode> liquidBlock)
 {
     String result = "";
     Action<String> accumulator = str => result += str;
     renderingVisitor.PushTextAccumulator(accumulator);
     renderingVisitor.StartWalking(liquidBlock);
     renderingVisitor.PopTextAccumulator();
     return result;
 }
            public StringValue Render(
                    RenderingVisitor renderingVisitor,
                    ITemplateContext templatecontext,
                    TreeNode<IASTNode> liquidBlock,
                    IList<Option<IExpressionConstant>> args)
            {
                var result = EvalLiquidBlock(renderingVisitor, liquidBlock);

                return Reverse(result);
            }
 private static string Render(ITemplateContext templateContext, LiquidAST liquidAst)
 {
     String result = "";
     var renderingVisitor = new RenderingVisitor(templateContext);
     renderingVisitor.StartWalking(liquidAst.RootNode, str => result += str);
     if (renderingVisitor.HasErrors)
     {
         throw new LiquidRendererException(renderingVisitor.Errors);
     }
     return result;
 }
Пример #29
0
 public ForRenderer(RenderingVisitor renderingVisitor)
 {
     _renderingVisitor = renderingVisitor;
 }