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")); }
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)); }
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; }
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)); }
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); }
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); }
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); }
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); }
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); }
public IncludeRenderer(RenderingVisitor renderingVisitor) { _renderingVisitor = renderingVisitor; }
public TableRowRenderer(RenderingVisitor renderingVisitor) { _renderingVisitor = renderingVisitor; }
public IfChangedRenderer(RenderingVisitor renderingVisitor) { _renderingVisitor = renderingVisitor; }
public ForRenderer(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; }