private string RenderContentForExtension(SourceFile source, string content, string extension, DocumentFile contextDocument, string documentContent, LayoutFile contextLayout) { RenderingEngine engine; if (this.Transaction.Engines.TryGetValue(extension, out engine)) { var backupContent = contextDocument.Content; try { contextDocument.Content = documentContent; dynamic data = new DynamicRenderDocument(contextDocument, contextLayout, this.Transaction.Site); var result = engine.Render(source, content, data); return result; } finally { contextDocument.Content = backupContent; } } else { Console.WriteLine("Cannot find a rendering engine for extension: {0}", extension); return null; } }
public void CanReadDynamicRenderingData() { var sitePath = @"C:\site\"; var documentsPath = sitePath + @"documents\"; var layoutsPath = sitePath + @"layouts\"; var outputPath = sitePath + @"build\"; var document = new DocumentFile(documentsPath + "foo.html.md", documentsPath, outputPath + "foo.html", outputPath, String.Empty, String.Empty, null, null, null); var layout = new LayoutFile(layoutsPath + "default.cshtml", layoutsPath, String.Empty, null, null); var config = new SiteConfig() { OutputPath = outputPath, Url = "http://example.com", RootUrl = String.Empty, }; var site = new Site(config, Enumerable.Empty<DataFile>(), new[] { document }, Enumerable.Empty<StaticFile>(), new LayoutFileCollection(new[] { layout })); dynamic data = new DynamicRenderDocument(document, layout, site); Assert.Equal(outputPath, data.Site.OutputPath); Assert.Single(data.Site.Documents); foreach (var d in data.Site.Documents) { Assert.Equal(outputPath + "foo.html", d.OutputPath); } }
private string RenderContentForExtension(SourceFile source, string content, string extension, DocumentFile contextDocument, string documentContent, LayoutFile contextLayout) { RenderingEngine engine; if (this.Transaction.Engines.TryGetValue(extension, out engine)) { var backupContent = contextDocument.Content; try { contextDocument.Content = documentContent; var data = new DynamicRenderDocument(contextDocument, contextLayout, this.Transaction.Site); var result = engine.Render(source, content, data); return result; } catch (RuntimeBinderException e) { Console.WriteLine("{0} : error TS0101: Internal failure while processing template. This almost always indicates a failure in a Razor template @Include() by this file. Additional detail: {1}", source.SourcePath, e.Message); return String.Empty; } finally { contextDocument.Content = backupContent; } } else { Console.WriteLine("Cannot find a rendering engine for extension: {0}", extension); return null; } }