/// <summary> /// Constructs a new instance of the chunk generator for this language with the specified settings /// </summary> public override RazorChunkGenerator CreateChunkGenerator( string className, string rootNamespaceName, string sourceFileName, RazorEngineHost host) { return new RazorChunkGenerator(className, rootNamespaceName, sourceFileName, host); }
/// <summary> /// Generates code for a razor template in the specified namespace. /// </summary> /// <param name="cshtmlFilePath">Full path to razor template.</param> /// <param name="rootNamespace">Root namespace for razor-generated class.</param> private void GenerateCodeFile(string cshtmlFilePath, string rootNamespace) { var basePath = Path.GetDirectoryName(cshtmlFilePath); var fileName = Path.GetFileName(cshtmlFilePath); var fileNameNoExtension = Path.GetFileNameWithoutExtension(fileName); var codeLang = new CSharpRazorCodeLanguage(); var host = new RazorEngineHost(codeLang); host.GeneratedClassContext = new GeneratedClassContext( executeMethodName: GeneratedClassContext.DefaultExecuteMethodName, writeMethodName: GeneratedClassContext.DefaultWriteMethodName, writeLiteralMethodName: GeneratedClassContext.DefaultWriteLiteralMethodName, writeToMethodName: "WriteTo", writeLiteralToMethodName: "WriteLiteralTo", templateTypeName: "HelperResult", defineSectionMethodName: "DefineSection", generatedTagHelperContext: new GeneratedTagHelperContext()); var engine = new RazorTemplateEngine(host); using (var fileStream = File.OpenText(cshtmlFilePath)) { var code = engine.GenerateCode( input: fileStream, className: fileNameNoExtension, rootNamespace: rootNamespace, sourceFileName: fileName); var source = code.GeneratedCode; source = CopyrightHeader + "\r\n\r\n" + source; var startIndex = 0; while (startIndex < source.Length) { var startMatch = @"<%$ include: "; var endMatch = @" %>"; startIndex = source.IndexOf(startMatch, startIndex); if (startIndex == -1) { break; } var endIndex = source.IndexOf(endMatch, startIndex); if (endIndex == -1) { break; } var includeFileName = source.Substring(startIndex + startMatch.Length, endIndex - (startIndex + startMatch.Length)); Console.WriteLine(" Inlining file {0}", includeFileName); var replacement = File.ReadAllText(Path.Combine(basePath, includeFileName)) .Replace("\"", "\\\"") .Replace("\r\n", "\\r\\n"); source = source.Substring(0, startIndex) + replacement + source.Substring(endIndex + endMatch.Length); startIndex = startIndex + replacement.Length; } File.WriteAllText(Path.Combine(basePath, string.Format("{0}.cs", fileNameNoExtension)), source); } }
/// <summary> /// Constructs a new RazorTemplateEngine with the specified host /// </summary> /// <param name="host">The host which defines the environment in which the generated template code will live</param> public RazorTemplateEngine(RazorEngineHost host) { if (host == null) { throw new ArgumentNullException("host"); } Host = host; }
/// <summary> /// Constructs the editor parser. One instance should be used per active editor. This /// instance _can_ be shared among reparses, but should _never_ be shared between documents. /// </summary> /// <param name="host">The <see cref="RazorEngineHost"/> which defines the environment in which the generated code will live. <see cref="F:RazorEngineHost.DesignTimeMode"/> should be set if design-time code mappings are desired</param> /// <param name="sourceFileName">The physical path to use in line pragmas</param> public RazorEditorParser(RazorEngineHost host, string sourceFileName) { if (host == null) { throw new ArgumentNullException("host"); } if (String.IsNullOrEmpty(sourceFileName)) { throw new ArgumentException(CommonResources.Argument_Cannot_Be_Null_Or_Empty, "sourceFileName"); } Host = host; FileName = sourceFileName; _parser = new BackgroundParser(host, sourceFileName); _parser.ResultsReady += (sender, args) => OnDocumentParseComplete(args); _parser.Start(); }
static void Main(string[] args) { const string rootNamespace = "RazorOnConsole"; var viewPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Views\Index.cshtml"); var basePath = Path.GetDirectoryName(viewPath); var fileName = Path.GetFileName(viewPath); var fileNameNoExtension = Path.GetFileNameWithoutExtension(fileName); using (var file = File.Create(fileNameNoExtension + ".html")) { new Index { Model = "foobarfoo" }.ExecuteAsync(file).Wait(); } var codeLang = new CSharpRazorCodeLanguage(); var host = new RazorEngineHost(codeLang) { DefaultBaseClass = "RazorOnConsole.Views.BaseView", GeneratedClassContext = new GeneratedClassContext( executeMethodName: GeneratedClassContext.DefaultExecuteMethodName, writeMethodName: GeneratedClassContext.DefaultWriteMethodName, writeLiteralMethodName: GeneratedClassContext.DefaultWriteLiteralMethodName, writeToMethodName: "WriteTo", writeLiteralToMethodName: "WriteLiteralTo", templateTypeName: "HelperResult", defineSectionMethodName: "DefineSection", generatedTagHelperContext: new GeneratedTagHelperContext()) }; host.NamespaceImports.Add("System"); var engine = new RazorTemplateEngine(host); using (var fileStream = File.OpenText(viewPath)) { GeneratorResults code = engine.GenerateCode( input: fileStream, className: fileNameNoExtension, rootNamespace: rootNamespace, sourceFileName: fileName); string source = code.GeneratedCode; File.WriteAllText(Path.Combine(basePath, @"..\..\..\", "Views", string.Format("{0}.cs", fileNameNoExtension)), source); } }
/// <summary> /// Constructs the code generator. Must return a new instance on EVERY call to ensure thread-safety /// </summary> public abstract RazorCodeGenerator CreateCodeGenerator(string className, string rootNamespaceName, string sourceFileName, RazorEngineHost host);
/// <summary> /// Constructs a new RazorTemplateEngine with the specified host /// </summary> /// <param name="host"> /// The host which defines the environment in which the generated template code will live. /// </param> public RazorTemplateEngine([NotNull] RazorEngineHost host) { Host = host; }
/// <summary> /// Constructs the code generator. Must return a new instance on EVERY call to ensure thread-safety /// </summary> public abstract RazorCodeGenerator CreateCodeGenerator(string className, string rootNamespaceName, string sourceFileName, RazorEngineHost host);
private static string GetRazorSyntaxTree() { var viewPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Views\Index.cshtml"); var fileName = Path.GetFileName(viewPath); var fileNameNoExtension = Path.GetFileNameWithoutExtension(fileName); var className = MainClassNamePrefix + fileNameNoExtension; var codeLang = new CSharpRazorCodeLanguage(); var host = new RazorEngineHost(codeLang) { DefaultBaseClass = typeof(BaseView).FullName, GeneratedClassContext = new GeneratedClassContext( executeMethodName: GeneratedClassContext.DefaultExecuteMethodName, writeMethodName: GeneratedClassContext.DefaultWriteMethodName, writeLiteralMethodName: GeneratedClassContext.DefaultWriteLiteralMethodName, writeToMethodName: "WriteTo", writeLiteralToMethodName: "WriteLiteralTo", templateTypeName: "HelperResult", defineSectionMethodName: "DefineSection", generatedTagHelperContext: new GeneratedTagHelperContext()) }; host.NamespaceImports.Add("System"); var engine = new RazorTemplateEngine(host); using (var fileStream = File.OpenText(viewPath)) { GeneratorResults code = engine.GenerateCode( input: fileStream, className: className, rootNamespace: RootNamespace, sourceFileName: fileName); return code.GeneratedCode; } }