示例#1
0
        public void TestFrontMatter()
        {
            var options = new ParserOptions() {Mode = ScriptMode.FrontMatter};
            var template = ParseTemplate(@"{{ 
variable = 1
name = 'yes'
}}
This is after the frontmatter: {{ name }}
{{
variable + 1
}}", options);

            // Make sure that we have a front matter
            Assert.NotNull(template.Page.FrontMatter);

            var context = new TemplateContext();

            // Evaluate front-matter
            var frontResult = context.Evaluate(template.Page.FrontMatter);
            Assert.Null(frontResult);
            
            // Evaluate page-content
            context.Evaluate(template.Page);
            var pageResult = context.Output.ToString();
            Assert.AreEqual(@"This is after the frontmatter: yes
2", pageResult);
        }
示例#2
0
        public void TestScriptOnly()
        {
            var options = new ParserOptions() { Mode = ScriptMode.ScriptOnly };
            var template = ParseTemplate(@"
variable = 1
name = 'yes'
", options);

            var context = new TemplateContext();

            template.Render(context);

            var outputStr = context.Output.ToString();
            Assert.AreEqual(string.Empty, outputStr);

            var global = context.CurrentGlobal;
            object value;
            Assert.True(global.TryGetValue("name", out value));
            Assert.AreEqual("yes", value);

            Assert.True(global.TryGetValue("variable", out value));
            Assert.AreEqual(1, value);
        }
示例#3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TemplateContext" /> class.
        /// </summary>
        /// <param name="builtin">The builtin object used to expose builtin functions, default is <see cref="GetDefaultBuiltinObject"/>.</param>
        public TemplateContext(ScriptObject builtin)
        {
            BuiltinObject = builtin ?? GetDefaultBuiltinObject();
            EnableOutput = true;
            LoopLimit = 1000;
            RecursiveLimit = 100;
            MemberRenamer = StandardMemberRenamer.Default;

            TemplateLoaderParserOptions = new ParserOptions();

            outputs = new Stack<StringBuilder>();
            outputs.Push(new StringBuilder());

            globalStores = new Stack<IScriptObject>();
            localStores = new Stack<ScriptObject>();
            loopStores = new Stack<ScriptObject>();
            availableStores = new Stack<ScriptObject>();

            sourceFiles = new Stack<string>();

            memberAccessors = new Dictionary<Type, IMemberAccessor>();
            listAccessors = new Dictionary<Type, IListAccessor>();
            loops = new Stack<ScriptLoopStatementBase>();
            PipeArguments = new Stack<ScriptExpression>();

            BlockDelegates = new Stack<ScriptBlockStatement>();

            isFunctionCallDisabled = false;

            CachedTemplates = new Dictionary<string, Template>();

            Tags = new Dictionary<object, object>();

            // Ensure that builtin is registered first
            PushGlobal(BuiltinObject);
        }
示例#4
0
 /// <summary>
 /// Parses the specified scripting text into a <see cref="Template"/> .
 /// </summary>
 /// <param name="text">The scripting text.</param>
 /// <param name="sourceFilePath">The source file path. Optional, used for better error reporting if the source file has a location on the disk</param>
 /// <param name="options">The templating parsing options.</param>
 /// <returns>A template</returns>
 public static Template Parse(string text, string sourceFilePath = null, ParserOptions options = null)
 {
     var template = new Template(options, sourceFilePath);
     template.ParseInternal(text, sourceFilePath);
     return template;
 }
示例#5
0
 private Template(ParserOptions options, string sourceFilePath)
 {
     this.options = options == null ? new ParserOptions() : options.Clone();
     Messages = new List<LogMessage>();
     this.SourceFilePath = sourceFilePath;
 }
示例#6
0
 private static Template ParseTemplate(string text, ParserOptions options = null)
 {
     var template = Template.Parse(text, "text", options);
     foreach (var message in template.Messages)
     {
         Console.WriteLine(message);
     }
     Assert.False(template.HasErrors);
     return template;
 }