public virtual void AddShape(IMDShape mdShape) { if (mdShape is MDShapeTitle) { this.Titles.Add(mdShape); } else { this.Shapes.AddLast(mdShape); } }
public override void AddShape(IMDShape mdShape) { if (mdShape is MDShapeTitle) { this.Titles.Add(mdShape); } else if (mdShape is MDShapeImage) { this.Shapes.AddLast(mdShape); } else { this.signature.Add(mdShape.GetLine()); } }
// open at your own risk public static void ExtractWebPageToMD(string baseUrl, string[] pages, string githubName, string language, string destinationDir) { gitHub = githubName; lang = language; for (int i = 0; i < pages.Length; i++) { #region get and convert slide info string page = pages[i]; string url = baseUrl + page + ".html"; string html = GetHTML(url).Result; HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); var doc = htmlDoc.DocumentNode; MDPresentation mdPresentation = new MDPresentation(); var headings = doc.SelectNodes("//h1"); IMDShape shape = null; int slideLength = 0; for (int j = 0; j < headings.Count; j++) { var heading = headings[j]; mdPresentation.StartNewSection(true); IMDSlide slide; if (mdPresentation.Sections.Count == 1 && mdPresentation.Sections.First().Slides.Count == 0) { slide = new MDSlidePresentationTitle(); slide.AddShape(new MDShapeTitle(heading.InnerText)); slide.AddShape(new MDShapeText("TypeScript OOP", 0)); slide.AddShape(new MDShapeText("Telerik Software Academy", 0)); slide.AddShape(new MDShapeText("http://academy.telerik.com", 0)); mdPresentation.AddSlide(slide); slide = new MDSlide(); slide.AddShape(new MDShapeTitle("Table of Contents")); for (int k = 1; k < headings.Count; k++) { if (k != 0 && k % 10 == 0) { mdPresentation.AddSlide(slide); slide = new MDSlide(); slide.AddShape(new MDShapeTitle("Table of Contents")); } slide.AddShape(new MDShapeText(string.Format("[{0}](#{1})", headings[k].InnerText, headings[k].InnerText.ToLower().Replace(' ', '-')), 0)); } mdPresentation.AddSlide(slide); } else if (mdPresentation.Sections.Count > 1 && mdPresentation.Sections.Last().Slides.Count == 0) { slide = new MDSlideSection(); slide.AddShape(new MDShapeTitle(heading.InnerText)); slide.CssId = headings[j].InnerText.ToLower().Replace(' ', '-'); mdPresentation.AddSlide(slide); slide = new MDSlide(); } else { slide = new MDSlide(); slide.AddShape(new MDShapeTitle(heading.InnerText)); } slide = new MDSlide(); slide.AddShape(new MDShapeTitle(heading.InnerText)); slideLength = 0; var tag = heading; while (tag.NextSibling != null && tag.NextSibling.Name != "h1") { // start new slide if current is too long if (slideLength > 350) { mdPresentation.AddSlide(slide); slide = new MDSlide(); slide.AddShape(new MDShapeTitle(heading.InnerText, false, true)); slideLength = 0; } tag = tag.NextSibling; if (tag.Name == "p") { shape = new MDShapeText(tag.InnerText, 0); } else if (tag.Name == "pre") { shape = new MDShapeMultiCode(lang); shape.AddLine(tag.InnerText, 0); } slideLength += tag.InnerText.Length; slide.AddShape(shape); } mdPresentation.AddSlide(slide); } mdPresentation.StartNewSection(true); mdPresentation.AddSlide(new MDSlideQuestions(headings[0].InnerText)); #endregion #region create sub-directorues DirectoryInfo mdsDir = Directory.CreateDirectory(destinationDir); string lectureSubDir = page.ToLower().Replace(' ', '-'); DirectoryInfo lectureDir = mdsDir.CreateSubdirectory(string.Format("{0:d2}. {1}", i + 1, lectureSubDir)); DirectoryInfo slidesDir = lectureDir; var demosDir = lectureDir.GetDirectories().FirstOrDefault(x => x.Name.Equals("demos", StringComparison.CurrentCultureIgnoreCase)); var homeworkDir = lectureDir.GetDirectories().FirstOrDefault(x => x.Name.Equals("homework", StringComparison.CurrentCultureIgnoreCase)); if (demosDir == null) { demosDir = lectureDir.CreateSubdirectory("demos"); } if (homeworkDir == null) { homeworkDir = lectureDir.CreateSubdirectory("homework"); } #endregion #region add all files //AddTableOfContentsREADME(lectureDir); AddLocalServerFiles(slidesDir); File.WriteAllLines(slidesDir + @"\README.md", mdPresentation.ToStringArray()); Console.WriteLine("Added files for presentation:\n{0}\n", page); #endregion } }