Esempio n. 1
0
        public string Render(dynamic dmodel)
        {
            try
            {
                var xmodel = new Scriban.Runtime.ScriptObject();
                xmodel.Import(new { model = dmodel }, renamer: member => member.Name);
                var xfn = new Scriban.Runtime.ScriptObject();;
                xfn.Import(typeof(HlidacStatu.Lib.Render.ScribanT.Functions)
                           , renamer: member => member.Name);
                var context = new Scriban.TemplateContext {
                    MemberRenamer = member => member.Name, LoopLimit = 65000
                };
                context.PushCulture(System.Globalization.CultureInfo.CurrentCulture);
                context.PushGlobal(xmodel);
                context.PushGlobal(xfn);
                var scriptObjGlobalVariables = new ScriptObject();

                foreach (var kv in this.globalVariables)
                {
                    scriptObjGlobalVariables[kv.Key] = kv.Value;
                }

                context.PushGlobal(scriptObjGlobalVariables);

                var res = xTemplate.Render(context);
                return(res);
            }
            catch (Exception e)
            {
                HlidacStatu.Util.Consts.Logger.Error($"ScribanT render error\nTemplate {this.template}\n\n"
                                                     + Newtonsoft.Json.JsonConvert.SerializeObject(dmodel)
                                                     , e);
                throw;
            }
        }
Esempio n. 2
0
        public static string RenderJson(string json, string content)
        {
            var expando     = JsonConvert.DeserializeObject <ExpandoObject>(json);
            var sObject     = BuildScriptObject(expando);
            var templateCtx = new Scriban.TemplateContext();

            templateCtx.PushGlobal(sObject);
            var template = Scriban.Template.Parse(content);
            var result   = template.Render(templateCtx);

            return(result);
        }
Esempio n. 3
0
        public string Generate(Type recordType)
        {
            var             typeInfo     = new TypeInfo(recordType);
            ISet <TypeInfo> dependencies = new HashSet <TypeInfo>();

            typeInfo.CollectDependencies(dependencies);
            var scriptObject = new ScriptObject();

            scriptObject["type"]         = typeInfo;
            scriptObject["dependencies"] = dependencies;
            var context = new Scriban.TemplateContext();

            context.PushGlobal(scriptObject);
            return(template.Render(context));
        }
Esempio n. 4
0
        static void Main(string[] args)
        {
            string text;

            text = @"{{&nbsp;<span blah=""blu>p""\r\nbing=""go"">'Block &nbsp;<br> 1'" + "\r\n" + @"|string.downcase}}";
            //text = @"{{&nbsp;'Block 1'}}";
            //text = @"{{'nbsp'}}";

            text = @"{{
x 
= 1;
y=
2<br/>
x+y
}}
";

            var lexerOptions = new Scriban.Parsing.LexerOptions()
            {
                IgnoreHtmlNoise = true
            };
            var template = Scriban.Template.Parse(text, lexerOptions: lexerOptions);
            var errors   = template.Messages.Select(x => x.Message).ToList();

            string res = "";

            if (!template.HasErrors)
            {
                var context = new Scriban.TemplateContext();
                res = template.Render(context);
            }
            else
            {
                foreach (var error in errors)
                {
                    res += error + "\r\n";
                }
            }

            Console.WriteLine(res);
            Console.ReadLine();
        }
Esempio n. 5
0
            public string Render(DataSet ds, dynamic dmodel, string qs = "",
                                 IReadOnlyDictionary <string, IReadOnlyCollection <string> > highlightingData = null)
            {
                string template = GetTemplateHeader(ds.DatasetId, qs) + this.body;
                var    xTemp    = Scriban.Template.Parse(template);

                if (xTemp.HasErrors)
                {
                    throw new System.ApplicationException(xTemp
                                                          .Messages
                                                          .Select(m => m.ToString())
                                                          .Aggregate((f, s) => f + "\n" + s)
                                                          );
                }

                var xmodel = new Scriban.Runtime.ScriptObject();

                xmodel.Import(new { model = dmodel }, renamer: member => member.Name);
                var xfn = new Scriban.Runtime.ScriptObject();;

                xfn.Import(typeof(HlidacStatu.Lib.Data.External.DataSets.Registration.Template.Functions)
                           , renamer: member => member.Name);
                var context = new Scriban.TemplateContext {
                    MemberRenamer = member => member.Name
                };

                context.PushCulture(System.Globalization.CultureInfo.CurrentCulture);
                context.PushGlobal(xmodel);
                context.PushGlobal(xfn);
                var scriptObjGlobalVariables = new ScriptObject();

                // Notice: MyObject is not imported but accessible through
                // the variable myobject
                scriptObjGlobalVariables["highlightingData"] = highlightingData;
                context.PushGlobal(scriptObjGlobalVariables);

                var res = xTemp.Render(context);

                return(res);
            }
        public static string RenderTemplate(string tmplName, ScriptObject scriptObject)
        {
            var templateContext = new Scriban.TemplateContext {
                MemberRenamer   = m => m.Name,
                StrictVariables = true,
                RegexTimeOut    = new TimeSpan(0, 0, seconds: 1),
            };

            templateContext.PushGlobal(scriptObject);

            var tmplFile = ResolveResource(Path.Combine("support", tmplName));

            if (!tmplFile.Exists)
            {
                throw new ArgumentException($"Cannot find template '{tmplFile.FullName}'");
            }
            var template = Scriban.Template.Parse(
                File.ReadAllText(tmplFile.FullName),
                sourceFilePath: tmplFile.FullName);

            return(template.Render(templateContext));
        }
Esempio n. 7
0
            public string Render(DataSet ds, dynamic dmodel)
            {
                string template = "{{func fn_DatasetItemUrl" + "\n"
                                  + $"    ret ('https://www.hlidacstatu.cz/data/Detail/{ds.DatasetId}/' + $0)"
                                  + "\n"
                                  + "end}}";

                template = template + "\n\n" + this.body;
                var xTemp = Scriban.Template.Parse(template);

                if (xTemp.HasErrors)
                {
                    throw new System.ApplicationException(xTemp
                                                          .Messages
                                                          .Select(m => m.ToString())
                                                          .Aggregate((f, s) => f + "\n" + s)
                                                          );
                }

                var xmodel = new Scriban.Runtime.ScriptObject();

                xmodel.Import(new { model = dmodel }, renamer: member => member.Name);
                var xfn = new Scriban.Runtime.ScriptObject();;

                xfn.Import(typeof(HlidacStatu.Lib.Data.External.DataSets.Registration.Template.Functions)
                           , renamer: member => member.Name);
                var context = new Scriban.TemplateContext {
                    MemberRenamer = member => member.Name
                };

                context.PushCulture(System.Globalization.CultureInfo.CurrentCulture);
                context.PushGlobal(xmodel);
                context.PushGlobal(xfn);
                var res = xTemp.Render(context);

                return(res);
            }