コード例 #1
0
ファイル: HtmlRenderer.cs プロジェクト: joshisa/Ficdown
        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));
            }
        }
コード例 #2
0
        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);
        }