예제 #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));
        }
예제 #2
0
        private string RenderMacro(MacroBlockTag macroBlockTag, IEnumerable <Option <ILiquidValue> > args)
        {
            var macroRenderer      = new MacroRenderer();
            var expressionConstant = (ILiquidValue)macroRenderer.Render(this, macroBlockTag, _templateContext, args.ToList());

            return(ValueCaster.RenderAsString(expressionConstant));
        }
예제 #3
0
 public void DefineMacro(String key, MacroBlockTag macro)
 {
     if (_macroRegistry.ContainsKey(key))
     {
         _macroRegistry[key] = macro;
     }
     else
     {
         _macroRegistry.Add(key, macro);
     }
 }
예제 #4
0
 public void Visit(MacroBlockTag macroBlockTag)
 {
     _result += macroBlockTag.ToString();
 }
예제 #5
0
 public void DefineMacro(string name, MacroBlockTag macro)
 {
     _symbolTables.Last().DefineMacro(name, macro);
 }
예제 #6
0
 public void Visit(MacroBlockTag macroBlockTag)
 {
     _templateContext.SymbolTableStack.DefineMacro(macroBlockTag.Name, macroBlockTag);
 }