public TemplateReturnInfo RenderFile2(StringBuilder sb, IDictionary options, string filename, string refererFilename)
        {
            if (filename[0] == '/' || string.IsNullOrEmpty(refererFilename))
            {
                refererFilename = _viewDir;
            }
            //else refererFilename = Path.GetDirectoryName(refererFilename);
            string filename2 = Utils.TranslateUrl(filename, refererFilename);

            Console.WriteLine(filename2);
            ITemplateOutput tpl;

            if (_cache.TryGetValue(filename2, out tpl) == false)
            {
                string tplcode = File.Exists(filename2) == false?string.Concat("文件不存在 ", filename) : Utils.ReadTextFile(filename2);

                tpl = Parser(tplcode, _usings, options);
                lock (_cache_lock) {
                    if (_cache.ContainsKey(filename2) == false)
                    {
                        _cache.Add(filename2, tpl);
                    }
                }
            }
            try {
                return(tpl.OuTpUt(sb, options, filename2, this));
            } catch (Exception ex) {
                TemplateReturnInfo ret = sb == null ?
                                         new TemplateReturnInfo {
                    Sb = new StringBuilder(), Blocks = new Dictionary <string, int[]>()
                } :
                new TemplateReturnInfo {
                    Sb = sb, Blocks = new Dictionary <string, int[]>()
                };
                ret.Sb.Append(refererFilename);
                ret.Sb.Append(" -> ");
                ret.Sb.Append(filename);
                ret.Sb.Append("\r\n");
                ret.Sb.Append(ex.Message);
                ret.Sb.Append("\r\n");
                ret.Sb.Append(ex.StackTrace);
                return(ret);
            }
        }
Exemple #2
0
        public string RenderFile(string filename, IDictionary options)
        {
            TemplateReturnInfo ret = this.RenderFile2(null, options, filename, null);

            return(ret.Sb.ToString());
        }