Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Linq;
- using Aspose.Html;
- using Newtonsoft.Json;
- namespace Aspose.DocMaker
- {
- class Program
- {
- private const string Path = @"D:\Github\Aspose.PDF.Docs";
- private const string Theme = @"D:\Github\Aspose.PDF.Docs\template\demo01";
- private static readonly License License = new License();
- static void Main()
- {
- License.SetLicense(@"C:\Keys\Aspose.Total.Product.Family.lic");
- var inputPath = System.IO.Path.Combine(Path, "input");
- var outputPath = System.IO.Path.Combine(Path, "output");
- ScanFolders(inputPath);
- RenderStaticPages(inputPath, outputPath);
- }
- private static void RenderStaticPages(string inputPath, string outputPath)
- {
- InputConfig inputConfig;
- if (System.IO.Directory.Exists(outputPath))
- System.IO.Directory.CreateDirectory(outputPath);
- var inputConfigFile = System.IO.Path.Combine(inputPath, "index.json");
- if (System.IO.File.Exists(inputConfigFile))
- {
- var json = System.IO.File.ReadAllText(inputConfigFile);
- inputConfig = JsonConvert.DeserializeObject<InputConfig>(json);
- }
- else
- {
- inputConfig = new InputConfig();
- }
- var indexTemplate = System.IO.Path.Combine(Theme, "index.html");
- var outputIndexFile = System.IO.Path.Combine(outputPath, "index.html");
- var document = new HTMLDocument(indexTemplate);
- var menuPlaceholder = document.GetElementById("aspose-menu-placeholder");
- foreach (var folder in inputConfig.Folders.OrderBy(f => f.Order))
- {
- if (document.GetElementById("aspose-menu-item") is HTMLTemplateElement menuItemTemplate)
- {
- var menuNode = menuItemTemplate.Content.CloneNode(true) as Html.Dom.DocumentFragment;
- var titleElements = menuNode?.QuerySelectorAll(".aspose-menu-item-title").Cast<HTMLElement>();
- if (titleElements != null)
- foreach (var element in titleElements)
- {
- element.InnerHTML = folder.Title;
- }
- var anchorElements = menuNode?.QuerySelectorAll(".aspose-menu-item-href").Cast<HTMLAnchorElement>();
- if (anchorElements != null)
- foreach (var element in anchorElements)
- {
- element.Href =$"{folder.Name}/index.html";
- }
- menuPlaceholder.AppendChild(menuNode);
- }
- RenderStaticPages(
- System.IO.Path.Combine(inputPath, folder.Name),
- System.IO.Path.Combine(outputPath, folder.Name));
- }
- var pageTemplateFileName = System.IO.Path.Combine(Theme, "page.html");
- var pageDocument = new Aspose.Html.HTMLDocument(pageTemplateFileName);
- var contentPlaceholder = pageDocument.GetElementById("aspose-content-placeholder");
- foreach (var page in inputConfig.Pages)
- {
- var markdownFileName = System.IO.Path.Combine(inputPath, page.Name + ".md");
- var pageFileName = System.IO.Path.Combine(outputPath, page.Name + ".html");
- var markdownContent = Aspose.Html.Converters.Converter.ConvertMarkdown(markdownFileName);
- pageDocument.Title = page.Title;
- contentPlaceholder.InnerHTML = markdownContent.GetElementsByTagName("body")[0].InnerHTML;
- var tables = pageDocument.GetElementsByTagName("table");
- foreach (var element in tables)
- {
- element.ClassName = "table table-bordered";
- }
- pageDocument.Save(pageFileName);
- pageDocument.Title = string.Empty;
- if (document.GetElementById("aspose-menu-item") is HTMLTemplateElement menuItemTemplate)
- {
- var menuNode = menuItemTemplate.Content.CloneNode(true) as Aspose.Html.Dom.DocumentFragment;
- var titleElements = menuNode?.QuerySelectorAll(".aspose-menu-item-title").Cast<HTMLElement>();
- if (titleElements != null)
- foreach (var element in titleElements)
- {
- element.InnerHTML = page.Title;
- }
- var anchorElements = menuNode?.QuerySelectorAll(".aspose-menu-item-href").Cast<HTMLAnchorElement>();
- if (anchorElements != null)
- foreach (var element in anchorElements)
- {
- element.Href = $"{page.Name}.html";
- }
- menuPlaceholder.AppendChild(menuNode);
- }
- }
- document.Save(outputIndexFile);
- }
- private static void ScanFolders(string inputPath)
- {
- var inputConfigFile = System.IO.Path.Combine(inputPath, "index.json");
- InputConfig inputConfig;
- if (System.IO.File.Exists(inputConfigFile))
- {
- var json = System.IO.File.ReadAllText(inputConfigFile);
- inputConfig = JsonConvert.DeserializeObject<InputConfig>(json);
- }
- else
- {
- inputConfig = new InputConfig();
- }
- foreach (var folder in System.IO.Directory.GetDirectories(inputPath))
- {
- ScanFolders(folder);
- var folderName = System.IO.Path.GetFileName(folder.TrimEnd(System.IO.Path.DirectorySeparatorChar));
- if (!inputConfig.Folders.Any(f => f.Name.Equals(folderName)))
- inputConfig.Folders.Add(new Folder() { Name = folderName, Order = 1000, Title = folderName });
- }
- foreach (var file in System.IO.Directory.GetFiles(inputPath, "*.md"))
- {
- var pageFileName = System.IO.Path.GetFileNameWithoutExtension(file);
- if (!inputConfig.Pages.Any(f =>f.Name.StartsWith(pageFileName)))
- inputConfig.Pages.Add(new Page() { Name = pageFileName, Order = 1000, Title = pageFileName });
- }
- System.IO.File.WriteAllText(inputConfigFile, JsonConvert.SerializeObject(inputConfig, Formatting.Indented));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement