Ejemplo n.º 1
0
        private static MDSlide ParseSlidePart(IList <SlidePart> slideParts, int slideIndex)
        {
            var slidePart = slideParts[slideIndex];

            if (slidePart == null)
            {
                throw new ArgumentNullException("slidePart");
            }
            if (slidePart.Slide == null)
            {
                throw new ArgumentNullException("slidePart.Slide");
            }

            SlideType slideType = GetSlideType(slidePart, slideIndex);
            MDSlide   slide     = AssignSlide(slideType);

            // Extract texts
            var shapes = slidePart.Slide.Descendants <Shape>().Where(s => s.Descendants <Drawing.Paragraph>().Any());

            foreach (Shape shape in shapes)
            {
                if (string.IsNullOrWhiteSpace(shape.InnerText))
                {
                    continue;
                }
                slide.AddShapes(GetShapes(shape));
            }

            // Extract images
            var pictures = slidePart.Slide.Descendants <Picture>().ToList();

            foreach (var picture in pictures)
            {
                string    rId       = picture.BlipFill.Blip.Embed.Value;
                ImagePart imagePart = (ImagePart)slidePart.Slide.SlidePart.GetPartById(rId);
                Image     image     = Image.FromStream(imagePart.GetStream());

                SaveImageToFile(image, slideIndex);
                MDShapeImage mdImage = GetImage(slideIndex, image, picture);
                presentationImageIndex++;

                slide.AddShape(mdImage);
            }

            // Extract graphics
            var graphics = slidePart.Slide.Descendants <GraphicFrame>().ToList();

            foreach (var graphic in graphics)
            {
                // TODO: Find a way to export graphics as images
            }

            return(slide);
        }
Ejemplo n.º 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
            }
        }