Esempio n. 1
0
        /// <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));
            }
        }
Esempio n. 2
0
		/// <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);
            }
        }
Esempio n. 3
0
        /// <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);
            }
        }