Example #1
0
        public static void ExtractPPTXtoMD(string rootDir, string githubName, string language, string destinationDir = null)
        {
            gitHub = githubName;
            lang   = language;

            IList <string> pptxFiles = GetAllPPTXFilesFrom(rootDir);
            DirectoryInfo  mdsDir    = Directory.CreateDirectory(destinationDir ?? (rootDir + @"\.mds"));

            for (int presentationIndex = 0; presentationIndex < pptxFiles.Count; presentationIndex++)
            {
                string filePath = pptxFiles[presentationIndex];

                #region create sub-directorues
                string        lectureDirStr = GetLecturePath(filePath, rootDir);
                DirectoryInfo lectureDir    = mdsDir.CreateSubdirectory(lectureDirStr);
                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");
                }

                imagesRootFolder = slidesDir.ToString();
                #endregion

                #region get and convert slide info
                MDPresentation mdPresentation = new MDPresentation();
                using (PresentationDocument presentationDocument = PresentationDocument.Open(filePath, false))
                {
                    presentationImageIndex = 0;
                    IList <SlidePart> slideParts = GetSlideParts(presentationDocument);
                    for (int slideIndex = 0; slideIndex < slideParts.Count; slideIndex++)
                    {
                        MDSlide mdSlide = ParseSlidePart(slideParts, slideIndex);
                        mdPresentation.StartNewSection(mdSlide.IsTitleSlide);
                        mdPresentation.AddSlide(mdSlide);
                    }
                }
                #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", filePath.Substring(rootDir.Length));
                #endregion
            }
        }
Example #2
0
        // 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
            }
        }