コード例 #1
0
ファイル: Template.cs プロジェクト: zoujiaqing/Obsidian
 private Template(JinjaEnvironment environment, ExpressionData templateNode, string?templateName, string?templatePath)
 {
     TemplateNode = templateNode;
     Environment  = environment;
     TemplateName = templateName;
     TemplatePath = templatePath;
 }
コード例 #2
0
        internal override bool TryGetSource(JinjaEnvironment environment, string templateName, [NotNullWhen(true)] out TemplateInfo?templateInfo)
        {
            templateInfo = default;
            var upToDate = false;
            var path     = FindFile(templateName);

            if (path == null)
            {
                return(false);
            }
            var templateContents = File.ReadAllText(path.FullName, Encoding);

            if (_TemplateContentsCache.ContainsKey(templateName))
            {
                if (_TemplateContentsCache[templateName] == templateContents)
                {
                    upToDate = true;
                }
                else
                {
                    _TemplateContentsCache[templateName] = templateContents;
                }
            }
            else
            {
                _TemplateContentsCache.Add(templateName, templateContents);
            }
            templateInfo = new TemplateInfo(templateContents, path.FullName, upToDate);
            return(true);
        }
コード例 #3
0
ファイル: Template.cs プロジェクト: zoujiaqing/Obsidian
        internal static Template FromBlockNode(string templateName, JinjaEnvironment environment, BlockNode blockNode, IDictionary <string, object?> variableTemplate)
        {
            var rootScope = Scope.CreateRootScope("GLOBALS", variableTemplate);
            var expr      = NewASTCompiler.ToExpression(templateName, environment, blockNode, out var newcompiler, rootScope);

            return(new Template(environment, ExpressionData.CreateCompiled(expr, rootScope), blockNode.Name, null));
        }
コード例 #4
0
ファイル: BaseLoader.cs プロジェクト: zoujiaqing/Obsidian
 internal TemplateInfo GetSource(JinjaEnvironment environment, string templateName)
 {
     if (TryGetSource(environment, templateName, out var templateInfo) == false || templateInfo == null)
     {
         throw new TemplateNotFoundException(templateName);
     }
     return(templateInfo.Value);
 }
コード例 #5
0
ファイル: Template.cs プロジェクト: zoujiaqing/Obsidian
        //internal static Template LoadTemplate(JinjaEnvironment environment, string templateText, IDictionary<string, object?> variableTemplate, string? templateName, string? templatePath)
        //{
        //    var expr = ToExpression(environment, templateText, variableTemplate, out var compiler);
        //    return new Template(environment, compiler.Compile(expr), templateName, templatePath);
        //}
        internal static Template LoadTemplate(JinjaEnvironment environment, string templateText, IScope scope, string?templateName, string?templatePath)
        {
            var expr = ToExpression(templateName, environment, templateText, scope);

            var debug = expr.ToString("C#");
            var test  = new VariableSetterWalker();
            var x     = test.Visit(expr);

            ;

            return(new Template(environment, ExpressionData.CreateCompiled(expr, scope), templateName, templatePath));
        }
コード例 #6
0
ファイル: Template.cs プロジェクト: zoujiaqing/Obsidian
        internal static Template LoadTemplate(JinjaEnvironment environment, string templateText, IDictionary <string, object?> variableTemplate, string?templateName, string?templatePath)
        {
            var rootScope = Scope.CreateRootScope("GLOBALS", variableTemplate);
            var expr      = ToExpression(templateName, environment, templateText, rootScope);

            var debug = expr.ToString("C#");
            var test  = new VariableSetterWalker();
            var x     = test.Visit(expr);

            ;

            return(new Template(environment, ExpressionData.CreateCompiled(expr, rootScope), templateName, templatePath));
        }
コード例 #7
0
ファイル: BaseLoader.cs プロジェクト: zoujiaqing/Obsidian
        public virtual ITemplate Load(JinjaEnvironment environment, string name, IDictionary <string, object?> variableTemplate)
        {
            environment      = environment ?? throw new ArgumentNullException(nameof(environment));
            name             = name ?? throw new ArgumentNullException(nameof(name));
            variableTemplate = variableTemplate ?? throw new ArgumentNullException(nameof(variableTemplate));
            var templateInfo = GetSource(environment, name);

            if (_TemplateCache.ContainsKey(name) == false || templateInfo.UpToDate == false)
            {
                var template = environment.GetTemplate(name, templateInfo, variableTemplate);
                _TemplateCache.Upsert(name, template);
            }
            return(_TemplateCache[name]);
        }
コード例 #8
0
ファイル: Template.cs プロジェクト: zoujiaqing/Obsidian
        //internal static Expression ToExpression(JinjaEnvironment environment, string templateText, IDictionary<string, object?> variableTemplate, out ASTCompiler compiler)
        //{
        //    var lexer = new Lexer(environment);
        //    var tokens = lexer.Tokenize(templateText).ToArray();
        //    var parsed = Parser.Parse(tokens).ToArray();
        //    var environmentTrimmed = EnvironmentTrimming.EnvironmentTrim(parsed, environment.Settings).ToArray();
        //    var templateNode = ASTGenerator.ParseTemplate(environmentTrimmed);
        //    var commentsRemoved = templateNode.Transform(CommentRemoverTransformer.Instance);
        //    var controlledWhiteSpace = WhiteSpaceController.ControlWhiteSpace(commentsRemoved);
        //    var containerAssembled = controlledWhiteSpace.Transform(TemplateContainerAssembler.Instance);

        //    var finished = NewASTCompiler.ToExpression(environment, containerAssembled, variableTemplate, out var newcompiler);
        //    throw new NotImplementedException();
        //}
        internal static Expression ToExpression(string templateName, JinjaEnvironment environment, string templateText, IScope rootScope)
        {
            var lexer                = new Lexer(environment);
            var tokens               = lexer.Tokenize(templateText).ToArray();
            var parsed               = Parser.Parse(tokens).ToArray();
            var environmentTrimmed   = EnvironmentTrimming.EnvironmentTrim(parsed, environment.Settings).ToArray();
            var templateNode         = ASTGenerator.ParseTemplate(environmentTrimmed);
            var commentsRemoved      = templateNode.Transform(CommentRemoverTransformer.Instance);
            var controlledWhiteSpace = WhiteSpaceController.ControlWhiteSpace(commentsRemoved);
            var containerAssembled   = controlledWhiteSpace.Transform(TemplateContainerAssembler.Instance);

            var finished = NewASTCompiler.ToExpression(templateName, environment, containerAssembled, out var newcompiler, rootScope);

            return(finished);
        }
コード例 #9
0
ファイル: BaseLoader.cs プロジェクト: zoujiaqing/Obsidian
 internal abstract bool TryGetSource(JinjaEnvironment environment, string templateName, [NotNullWhen(true)] out TemplateInfo?templateInfo);