Beispiel #1
0
		protected T Render(Scriban.Template template, object model)
		{

			var result = template.Render(new { Name = "Yann" });

			var root = new T();
			xmlRenderer.Render(XDocument.Parse(result), root);

			return root;
		}
 public static Scriban.Template ReadTemplate(string path)
 {
     try
     {
         return(CachedData[path]);
     } catch (Exception) {
         // Do nothing.
     }
     Scriban.Template content = Scriban.Template.Parse(File.ReadAllText(path));
     CachedData[path] = content;
     return(content);
 }
Beispiel #3
0
        public BenchRenderers()
        {
            var parsers = new BenchParsers();

            _scribanTemplate    = parsers.TestScriban();
            _dotLiquidTemplate  = parsers.TestDotLiquid();
            _stubbleTemplate    = parsers.TestStubble();
            _stubbleSettings    = new Stubble.Core.Settings.RendererSettingsBuilder().BuildSettings();
            _nustacheTemplate   = parsers.TestNustache();
            _handlebarsTemplate = parsers.TestHandlebars();
            _cottleTemplate     = parsers.TestCottle();
            _fluidTemplate      = parsers.TestFluid();
            _razorTemplate      = parsers.TestRazor();

            const int ProductCount = 500;

            _products          = new List <Product>(ProductCount);
            _scribanProducts   = new List <ScriptObject>();
            _dotLiquidProducts = new List <DotLiquid.Hash>(ProductCount);
            var cottleValues = new List <Cottle.Value>();

            for (int i = 0; i < ProductCount; i++)
            {
                var product = new Product("Name" + i, i, Lorem);
                _products.Add(product);

                var hash = new Hash()
                {
                    ["name"] = product.Name, ["price"] = product.Price, ["description"] = product.Description
                };
                _dotLiquidProducts.Add(hash);

                var obj = new ScriptObject {
                    ["name"] = product.Name, ["price"] = product.Price, ["description"] = product.Description
                };
                _scribanProducts.Add(obj);
                cottleValues.Add(new Cottle.Values.ReflectionValue(product));
            }

            _liquidTemplateContext = new LiquidTemplateContext();

            // For Cottle, we match the behavior of Scriban that is accessing the Truncate function via an reflection invoke
            // In Scriban, we could also have a direct Truncate function, but it is much less practical in terms of declaration
            _cottleStringStore             = new Dictionary <Cottle.Value, Cottle.Value>();
            _cottleStringStore["truncate"] = new Cottle.Functions.NativeFunction((values, store, Output) =>
            {
                if (values.Count != 2)
                {
                    throw new InvalidOperationException("Unexpected number of arguments for truncate function");
                }
                return(StringFunctions.Truncate(values[0].AsString, Convert.ToInt32(values[1].AsNumber)));
            }, 2);
        }
Beispiel #4
0
        public BenchRenderers()
        {
            var parsers = new BenchParsers();

            _scribanTemplate    = parsers.TestScriban();
            _dotLiquidTemplate  = parsers.TestDotLiquid();
            _stubbleTemplate    = parsers.TestStubble();
            _stubbleSettings    = new Stubble.Core.Settings.RendererSettingsBuilder().BuildSettings();
            _nustacheTemplate   = parsers.TestNustache();
            _handlebarsTemplate = parsers.TestHandlebars();
            _cottleTemplate     = parsers.TestCottle();
            _fluidTemplate      = parsers.TestFluid();

            const int ProductCount = 500;

            _products          = new List <Product>(ProductCount);
            _scribanProducts   = new List <ScriptObject>();
            _dotLiquidProducts = new List <DotLiquid.Hash>(ProductCount);
            var cottleProducts = new List <Cottle.Value>();

            for (int i = 0; i < ProductCount; i++)
            {
                var product = new Product("Name" + i, i, Lorem);
                _products.Add(product);

                var hash = new Hash()
                {
                    ["name"] = product.Name, ["price"] = product.Price, ["description"] = product.Description
                };
                _dotLiquidProducts.Add(hash);

                var obj = new ScriptObject {
                    ["name"] = product.Name, ["price"] = product.Price, ["description"] = product.Description
                };
                _scribanProducts.Add(obj);

                var value = new Dictionary <Cottle.Value, Cottle.Value> {
                    ["name"] = product.Name, ["price"] = product.Price, ["description"] = product.Description
                };
                cottleProducts.Add(value);
            }

            _cottleProducts = cottleProducts;

            _templateContext = new TemplateContext();
            _templateContext.BuiltinObject["truncate"] = ((ScriptObject)_templateContext.BuiltinObject["string"])["truncate"];

            // For Cottle, we match the behavior of Scriban that is accessing the Truncate function via an reflection invoke
            // In Scriban, we could also have a direct Truncate function, but it is much less practical in terms of declaration
            _cottleStringStore             = new Dictionary <Cottle.Value, Cottle.Value>();
            _cottleStringStore["truncate"] = new Cottle.Functions.NativeFunction(values => StringFunctions.Truncate(values[0].AsString, Convert.ToInt32(values[1].AsNumber)), 2);
        }
Beispiel #5
0
        public ScribanT(string template, Dictionary <string, object> globalVar = null)
        {
            this.template        = template;
            this.globalVariables = globalVar ?? new Dictionary <string, object>();

            this.xTemplate = Scriban.Template.Parse(template);
            if (xTemplate.HasErrors)
            {
                throw new System.ApplicationException(xTemplate
                                                      .Messages
                                                      .Select(m => m.ToString())
                                                      .Aggregate((f, s) => f + "\n" + s)
                                                      );
            }
        }
Beispiel #6
0
        public static string Render(EngineClass @class, string scope)
        {
            Template template;

            using (StreamReader reader = new StreamReader("Resources/Templates/SimClass.scriban")) {
                template = Template.Parse(reader.ReadToEnd(), "Resources/Templates/SimClass.scriban");
            }

            var scriptObject = new ScriptObject {
                { "class", @class },
                { "scope", scope }
            };

            scriptObject.Import(BaseTemplate.GetScriptObject());

            var context = BaseTemplate.GetTemplateContext();

            context.PushGlobal(scriptObject);

            return(template.Render(context));
        }
Beispiel #7
0
        public BenchRenderers()
        {
            var parsers = new BenchParsers();

            _scribanTemplate    = parsers.TestScriban();
            _dotLiquidTemplate  = parsers.TestDotLiquid();
            _stubbleTemplate    = parsers.TestStubble();
            _stubbleSettings    = new Stubble.Core.Settings.RendererSettingsBuilder().BuildSettings();
            _nustacheTemplate   = parsers.TestNustache();
            _handlebarsTemplate = parsers.TestHandlebars();

            const int ProductCount = 500;

            _products          = new List <Product>(ProductCount);
            _dotLiquidProducts = new List <DotLiquid.Hash>(ProductCount);
            for (int i = 0; i < ProductCount; i++)
            {
                var product = new Product("Name" + i, i, Lorem);
                _products.Add(product);
                _dotLiquidProducts.Add(DotLiquid.Hash.FromAnonymousObject(product));
            }
        }