protected void GenerateHtml(ResolvedStory story, string outPath, bool debug) { _logger.Debug("Generating HTML..."); var index = FillTemplate(IndexTemplate ?? Template.Index, new Dictionary <string, string> { { "Language", _language }, { "Title", story.Name }, { "Description", Markdown.ToHtml(story.Description) }, { "FirstScene", string.Format("{0}.html", story.FirstPage) } }); File.WriteAllText(Path.Combine(outPath, "index.html"), index); foreach (var page in story.Pages) { File.WriteAllText(Path.Combine(outPath, "styles.css"), StylesTemplate ?? Template.Styles); var content = page.Content; foreach (var anchor in Utilities.GetInstance(Warnings, page.Name).ParseAnchors(page.Content)) { var newAnchor = string.Format("[{0}]({1}.html)", anchor.Text, anchor.Href.Target); content = content.Replace(anchor.Original, newAnchor); } if (debug) { content += string.Format("\n\n### State Debug\n\n{0}", string.Join("\n", page.ActiveToggles.Select(t => string.Format("- {0}", t)).ToArray())); } var scene = FillTemplate(SceneTemplate ?? Template.Scene, new Dictionary <string, string> { { "Language", _language }, { "Title", story.Name }, { "Content", Markdown.ToHtml(content) } }); File.WriteAllText(Path.Combine(outPath, string.Format("{0}.html", page.Name)), scene); } if (!string.IsNullOrWhiteSpace(ImageDir)) { var dirname = ImageDir.Substring(ImageDir.LastIndexOf(Path.DirectorySeparatorChar) + 1); Directory.CreateDirectory(Path.Combine(outPath, dirname)); CopyFilesRecursively(ImageDir, Path.Combine(outPath, dirname)); } }
public override void Render(Model.Parser.ResolvedStory story, string outPath, bool debug = false) { _logger.Debug("Generating epub..."); var temppath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); Directory.CreateDirectory(temppath); base.Render(story, temppath, debug); var chapters = new List <Chapter> { new Chapter(Path.Combine(temppath, "index.html"), "index.html", "Title Page") }; chapters.AddRange(from file in Directory.GetFiles(temppath) select Path.GetFileName(file) into fname where fname != "index.html" && fname != "styles.css" select new Chapter(Path.Combine(temppath, fname), fname, fname.Replace(".html", string.Empty))); var epub = new Epub(Story.Name, _author, chapters); epub.BookId = _bookId; epub.Language = _language; epub.AddResourceFile(new ResourceFile("styles.css", Path.Combine(temppath, "styles.css"), "text/css")); if (!string.IsNullOrWhiteSpace(ImageDir)) { var dirname = ImageDir.Substring(ImageDir.LastIndexOf(Path.DirectorySeparatorChar) + 1); var tempimgdir = Path.Combine(temppath, dirname); foreach (var img in Directory.GetFiles(tempimgdir)) { var fname = Path.GetFileName(img); epub.AddResourceFile(new ResourceFile(fname, Path.Combine(tempimgdir, fname), MimeHelper.GetMimeType(img))); } } var builder = new EPubBuilder(new FixedFileSystemManager(), Guid.NewGuid().ToString()); var built = builder.Build(epub); File.Move(built, outPath); Directory.Delete(temppath, true); }