public string Run(RazorRenderer razorRenderer, Site site, object model) { this.InitGatsbyRazorTemplate(razorRenderer, site); this.Model = new DynamicValue(model); return this.ExecuteTemplate(); }
public string Run(string content, SiteContent page, RazorRenderer razorRenderer, Site site) { this.Content = content; this.Model = new DynamicValue(page); this.InitGatsbyRazorTemplate(razorRenderer, site); return this.ExecuteTemplate(); }
public string LayoutContent(string layoutName, string content, SiteContent page, Site site) { if (!this.layouts.ContainsKey(layoutName)) throw new GatsbyException(string.Format("Layout \"{0}\" was not found.", layoutName)); var layout = this.layouts[layoutName]; try { content = layout.Run(content, page, this, site); } catch (Exception ex) { throw new GatsbyException(string.Format("Failed while rendering layout \"{0}\":\n\t{1}", layoutName, ex.Message)); } if (string.IsNullOrEmpty(layout.Parent)) return content; return this.LayoutContent(layout.Parent, content, page, site); }
internal override void Run( Config config, MarkdownTransformer markdownTransformer, string relativePath, RazorRenderer razorRenderer, Site site) { base.Run(config, markdownTransformer, relativePath, razorRenderer, site); if (!string.IsNullOrEmpty(config.ExcerptSeparator)) { if (this.Content.Contains(config.ExcerptSeparator)) { this.Excerpt = this.Content.Substring(0, this.Content.IndexOf(config.ExcerptSeparator)); } else { this.Excerpt = this.Content; } } }
public Post RenderPost(Config config, SourceFilePath path, Site site) { Post post = null; try { post = this.compiler.Compile<Post>(File.ReadAllText(path.AbsolutePath)); post.Run(config, this.markdownTransformer, path.RelativePath, this, site); } catch (RazorCompilationException ex) { throw new GatsbyException(string.Format("Failed while compiling post {0}:\n\t{1}", path.AbsolutePath, string.Join("\n\t", ex.Errors))); } return post; }
public List<Generator> RenderPaginator(Config config, SourceFilePath path, Site site) { List<Generator> pagintors = new List<Generator>(); RazorTemplateFactory<Generator> factory = null; try { factory = this.compiler.CompileFactory<Generator>(File.ReadAllText(path.AbsolutePath)); } catch (RazorCompilationException ex) { throw new GatsbyException(string.Format("Failed while compiling paginator {0}:\n\t{1}", path.AbsolutePath, string.Join("\n\t", ex.Errors))); } int pageNumber = 1; while (true) { var template = factory.Create(); template.PageNumber = pageNumber; template.Run(config, this.markdownTransformer, path.RelativePath, this, site); pagintors.Add(template); if (template.GeneratorFinished) break; pageNumber++; } return pagintors; }
public string RenderInclude(string includeName, Site site, object model) { if (!this.includes.ContainsKey(includeName)) throw new GatsbyException(string.Format("Include \"{0}\" was not found.", includeName)); var include = this.includes[includeName]; string output = null; try { output = include.Run(this, site, model); } catch (Exception ex) { throw new GatsbyException(string.Format("Failed while rendering include \"{0}\":\n\t{1}", includeName, ex.Message)); } return output; }
public void Build(Config config) { SourceFiles sourceFiles = this.sourceFileEnumerator.Enumerate(config); if (Directory.Exists(config.Destination)) Directory.Delete(config.Destination, true); Directory.CreateDirectory(config.Destination); this.pluginCompiler.RegisterAssemblyResolver(); try { Site site = new Site(config); foreach (var path in sourceFiles.Plugins) { string pluginPath = Path.Combine(config.Destination, Path.GetFileNameWithoutExtension(path.AbsolutePath) + ".dll"); this.pluginCompiler.Compile(path, pluginPath, site.Plugins); this.razorRenderer.AddPluginPath(pluginPath); } this.razorRenderer.LoadIncludes(sourceFiles.Includes); this.razorRenderer.LoadLayouts(sourceFiles.Layouts); foreach (var path in sourceFiles.Posts) { var post = this.razorRenderer.RenderPost(config, path, site); this.SetDefaultsForContent(post); site.Posts.Add(post); } site.Posts.Sort((x, y) => x.Date.CompareTo(y.Date) * -1); foreach (var path in sourceFiles.Pages) { var page = this.razorRenderer.RenderPage(config, path, site); this.SetDefaultsForContent(page); site.Pages.Add(page); } site.Plugins.BeforeGenerators(site); foreach (var path in sourceFiles.Generators) { var pages = this.razorRenderer.RenderPaginator(config, path, site); foreach (var page in pages) this.SetDefaultsForContent(page); site.GeneratorPages.AddRange(pages); } site.Plugins.AfterGenerators(site); foreach (var post in site.Posts) { this.WriteContent(config, post, site); } foreach (var page in site.Pages) { this.WriteContent(config, page, site); } foreach (var page in site.GeneratorPages) { this.WriteContent(config, page, site); } foreach (var staticFile in sourceFiles.StaticFiles) { string destination = Path.Combine(config.Destination, staticFile.RelativePath); string directory = Path.GetDirectoryName(destination); if (!string.IsNullOrEmpty(directory)) Directory.CreateDirectory(directory); File.Copy(staticFile.AbsolutePath, destination); } this.pluginCompiler.DeleteAll(); } finally { this.pluginCompiler.UnregisterAssemblyResolver(); } }
private void WriteContent(Config config, SiteContent page, Site site) { string content = page.Content; if (!string.IsNullOrEmpty(page.Layout)) content = this.razorRenderer.LayoutContent(page.Layout, content, page, site); string destination = Path.Combine(config.Destination, page.Permalink); string directory = Path.GetDirectoryName(destination); if (!string.IsNullOrEmpty(directory)) Directory.CreateDirectory(directory); File.WriteAllText(destination, content); }
internal virtual void Run( Config config, MarkdownTransformer markdownTransformer, string relativePath, RazorRenderer razorRenderer, Site site) { if (this.Content != null) throw new InvalidOperationException("Template has already been run."); this.RelativePath = relativePath; this.InitGatsbyRazorTemplate(razorRenderer, site); try { this.Content = this.ExecuteTemplate(); } catch (Exception ex) { } if (this.IsMarkdown) this.Content = markdownTransformer.Transform(this.Content); }
internal void InitGatsbyRazorTemplate(RazorRenderer razorRenderer, Site site) { this.razorRenderer = razorRenderer; this.Site = site; }