示例#1
0
 protected MergeTextTemplateEngine(Guid?verticalId, string mimeType, string text, MergeSettings settings)
 {
     _verticalId = verticalId;
     _mimeType   = mimeType;
     _text       = text;
     _settings   = settings;
 }
示例#2
0
        private static Assembly CreateAssembly(string code, string mimeType, MergeSettings settings)
        {
            // Create an in-memory assembly from the source code.

            CompilerParameters parameters = new CompilerParameters();

            parameters.GenerateExecutable      = false;
            parameters.GenerateInMemory        = true;
            parameters.IncludeDebugInformation = false;
            AddReferences(parameters, mimeType, settings);

            // Compile the code.

            CodeDomProvider provider = new CSharpCodeProvider();
            CompilerResults results  = provider.CompileAssemblyFromSource(parameters, code);

            // Look for errors.

            if (results.Errors.Count > 0)
            {
                throw new ApplicationException("Compile Error: " + results.Errors[0].ErrorText);
            }

            // Return the compiled assembly.

            return(results.CompiledAssembly);
        }
示例#3
0
        public static string Parse(string text, string mimeType, string method, TemplateProperties properties, MergeSettings settings)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new StreamWriter(stream, System.Text.Encoding.UTF8))
                {
                    WriteUsings(writer, mimeType, settings.Usings);

                    // Class declaration.

                    writer.Write(@"
using System;

namespace LinkMe.Utility.Templates.Generated
{
    public class Engine
    {
");

                    // Fields.

                    WriteFields(writer, settings.Fields);

                    // Methods.

                    WriteMethods(writer, settings.Methods);

                    // The actual merge method.

                    writer.Write(@"
        public static string ");

                    writer.Write(method);
                    writer.Write("(");

                    WriteParameters(writer, properties);

                    writer.Write(@")
        {
            using (MemoryStream stream = new MemoryStream())
            {
                using (StreamWriter writer = new StreamWriter(stream, System.Text.Encoding.UTF8))
                {
");

                    writer.Write(@"                    // Start of template.

");

                    WriteText(writer, text, mimeType);

                    writer.Write(@"                    // End of template.

");

                    writer.Write(@"
                    writer.Flush();
                    stream.Position = 0;
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        return reader.ReadToEnd();
                    }
                }
            }
        }
    }
}");

                    writer.Flush();
                    stream.Position = 0;
                    using (var reader = new StreamReader(stream))
                    {
                        return(reader.ReadToEnd());
                    }
                }
            }
        }
示例#4
0
        private static void AddReferences(CompilerParameters parameters, string mimeType, MergeSettings settings)
        {
            // Add standard references.

            parameters.ReferencedAssemblies.Add("mscorlib.dll");
            parameters.ReferencedAssemblies.Add("System.dll");
            parameters.ReferencedAssemblies.Add("System.Xml.dll");

            if (mimeType == MediaTypeNames.Text.Html)
            {
                if (!settings.References.Contains("System.Web.dll"))
                {
                    parameters.ReferencedAssemblies.Add("System.Web.dll");
                }
            }

            // Add any aditional references that are needed.

            foreach (string reference in settings.References)
            {
                parameters.ReferencedAssemblies.Add(reference);
            }
        }
示例#5
0
        public static MethodInfo Compile(string code, string mimeType, string method, MergeSettings settings)
        {
            if (code == null)
            {
                throw new ArgumentNullException("code");
            }
            if (method == null)
            {
                throw new ArgumentNullException("method");
            }

            // Create the assembly and then find the method.

            Assembly assembly = CreateAssembly(code, mimeType, settings);

            return(GetMethodInfo(assembly, method));
        }