/// <summary> /// Generate HTML from a template. /// </summary> /// <param name="filename">Path and filename</param> /// <param name="args">Variables used in the template. Should be specified as "name, value, name, value" where name is variable name and value is variable contents.</param> /// <exception cref="InvalidOperationException"></exception> /// <exception cref="CompilerException"></exception> /// <exception cref="ArgumentException"></exception> /// <example> /// <code> /// string html = cache.Generate("views\\users\\view.haml", new TemplateArguments("user", dbUser, "isAdmin", dbUser.IsAdmin), null); /// </code> /// </example> public string Render(string filename, TemplateArguments args) { if (args == null) { args = new TemplateArguments(); } // Generate a new proper filename (the generator gets saved aswell) : todo, this works perfectly but isnt so good looking, is it? GetGeneratorForWildCard(ref filename); // Generate a name identifying the template string templateName = "TemplateClass" + filename.GetHashCode() + args.GetHashCode(); templateName = templateName.Replace('-', 'N'); TemplateInfoImp info; lock (_compiledTemplates) { if (_compiledTemplates.ContainsKey(templateName)) { info = _compiledTemplates[templateName]; } else { info = new TemplateInfoImp { Filename = filename, Template = null, CompiledWhen = DateTime.MinValue }; _compiledTemplates.Add(templateName, info); } } lock (info) { if (!CheckTemplate(info) || info.Template == null) { string code = GenerateCode(ref filename); info.Template = Compile(filename, code, args, templateName); info.CompiledWhen = DateTime.Now; info.Filename = filename; } return(info.Template.Invoke(args, this)); } }
/// <summary> /// Generate HTML from a template. /// </summary> /// <param name="filename">Path and filename</param> /// <param name="args">Variables used in the template. Should be specified as "name, value, name, value" where name is variable name and value is variable contents.</param> /// <exception cref="InvalidOperationException"></exception> /// <exception cref="CompilerException"></exception> /// <exception cref="ArgumentException"></exception> /// <example> /// <code> /// string html = cache.Generate("views\\users\\view.haml", new TemplateArguments("user", dbUser, "isAdmin", dbUser.IsAdmin), null); /// </code> /// </example> public string Render(string filename, TemplateArguments args) { if (args == null) args = new TemplateArguments(); // Generate a new proper filename (the generator gets saved aswell) : todo, this works perfectly but isnt so good looking, is it? GetGeneratorForWildCard(ref filename); // Generate a name identifying the template string templateName = "TemplateClass" + filename.GetHashCode() + args.GetHashCode(); templateName = templateName.Replace('-', 'N'); TemplateInfoImp info; lock (_compiledTemplates) { if (_compiledTemplates.ContainsKey(templateName)) info = _compiledTemplates[templateName]; else { info = new TemplateInfoImp(); info.Filename = filename; info.Template = null; info.CompiledWhen = DateTime.MinValue; _compiledTemplates.Add(templateName, info); } } lock (info) { if (!CheckTemplate(info) || info.Template == null) { string code = GenerateCode(ref filename); info.Template = Compile(filename, code, args, templateName); info.CompiledWhen = DateTime.Now; info.Filename = filename; } return info.Template.Invoke(args, this); } }
/// <summary> /// Generate HTML from a template. /// </summary> /// <param name="filename">Path and filename</param> /// <param name="args">Variables used in the template. Should be specified as "name, value, name, value" where name is variable name and value is variable contents.</param> /// <exception cref="InvalidOperationException"></exception> /// <exception cref="CompilerException"></exception> /// <exception cref="ArgumentException"></exception> /// <example> /// <code> /// string html = cache.Generate("views\\users\\view.haml", new TemplateArguments("user", dbUser, "isAdmin", dbUser.IsAdmin), null); /// </code> /// </example> public string Render(string filename, TemplateArguments args) { if (args == null) args = new TemplateArguments(); GetGeneratorForWildCard(ref filename); string templateName = "TemplateClass" + filename.GetHashCode() + args.GetHashCode(); templateName = templateName.Replace('-', 'N'); TemplateInfoImp info; lock (_compiledTemplates) { if (_compiledTemplates.ContainsKey(templateName)) info = _compiledTemplates[templateName]; else { info = new TemplateInfoImp { Filename = filename, Template = null, CompiledWhen = DateTime.MinValue }; _compiledTemplates.Add(templateName, info); } } lock (info) { if (!CheckTemplate(info) || info.Template == null) { string code = GenerateCode(ref filename); info.Template = Compile(filename, code, args, templateName); info.CompiledWhen = DateTime.Now; info.Filename = filename; } return info.Template.Invoke(args, this); } }