コード例 #1
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);
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: yzbai/scriban
        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);
        }