public void Link()
        {
            List <HtmlTag> tags = MarkdownToHtmlTagConverter.Convert("[Bing](https://www.bing.com/)").ToList();

            Assert.AreEqual(1, tags.Count);

            Assert.AreEqual("p", tags[0].Element);
            Assert.AreEqual(null, tags[0].Text);
            Assert.AreEqual(1, tags[0].Children.Count);
            Assert.AreEqual(0, tags[0].Classes.Count);
            Assert.AreEqual(0, tags[0].Attributes.Count);
            Assert.AreEqual(0, tags[0].Styles.Count);

            Assert.AreEqual("a", tags[0].Children[0].Element);
            Assert.AreEqual(null, tags[0].Children[0].Text);
            Assert.AreEqual(1, tags[0].Children[0].Children.Count);
            Assert.AreEqual(0, tags[0].Children[0].Classes.Count);
            Assert.AreEqual(1, tags[0].Children[0].Attributes.Count);
            Assert.AreEqual(true, tags[0].Children[0].Attributes.ContainsKey("href"));
            Assert.AreEqual("https://www.bing.com/", tags[0].Children[0].Attributes["href"]);
            Assert.AreEqual(0, tags[0].Children[0].Styles.Count);

            Assert.AreEqual(null, tags[0].Children[0].Children[0].Element);
            Assert.AreEqual("Bing", tags[0].Children[0].Children[0].Text);
            Assert.AreEqual(0, tags[0].Children[0].Children[0].Children.Count);
            Assert.AreEqual(0, tags[0].Children[0].Children[0].Classes.Count);
            Assert.AreEqual(0, tags[0].Children[0].Children[0].Attributes.Count);
            Assert.AreEqual(0, tags[0].Children[0].Children[0].Styles.Count);

            var fullHtml = string.Join(string.Empty, tags);

            Assert.AreEqual("<p><a href='https://www.bing.com/'>Bing</a></p>", fullHtml);
        }
        public void ClassAttributeSetCorrectly()
        {
            // Using triple back ticks because it's the only place I can find in Marked.Net where the output HTML includes a class name.
            List <HtmlTag> tags = MarkdownToHtmlTagConverter.Convert("```CSharp\nusing System;\n```").ToList();

            var codeTag = tags[0].Children[0];

            Assert.AreEqual("code", codeTag.Element);
            Assert.AreEqual(0, codeTag.Attributes.Count);
            Assert.AreEqual(1, codeTag.Classes.Count);
            Assert.AreEqual("lang-CSharp", codeTag.Classes[0]);

            var fullHtml = string.Join(string.Empty, tags);

            Assert.AreEqual("<pre><code class='lang-CSharp'>using System;\n</code></pre>", fullHtml);
        }
        public void HorizontalRule()
        {
            List <HtmlTag> tags = MarkdownToHtmlTagConverter.Convert("text\n*********\ntext").ToList();

            Assert.AreEqual(3, tags.Count);

            Assert.AreEqual("p", tags[0].Element);
            Assert.AreEqual(null, tags[0].Text);
            Assert.AreEqual(1, tags[0].Children.Count);
            Assert.AreEqual(0, tags[0].Classes.Count);
            Assert.AreEqual(0, tags[0].Attributes.Count);
            Assert.AreEqual(0, tags[0].Styles.Count);

            Assert.AreEqual(null, tags[0].Children[0].Element);
            Assert.AreEqual("text", tags[0].Children[0].Text);
            Assert.AreEqual(0, tags[0].Children[0].Children.Count);
            Assert.AreEqual(0, tags[0].Children[0].Classes.Count);
            Assert.AreEqual(0, tags[0].Children[0].Attributes.Count);
            Assert.AreEqual(0, tags[0].Children[0].Styles.Count);

            Assert.AreEqual("hr", tags[1].Element);
            Assert.AreEqual(null, tags[1].Text);
            Assert.AreEqual(0, tags[1].Children.Count);
            Assert.AreEqual(0, tags[1].Classes.Count);
            Assert.AreEqual(0, tags[1].Attributes.Count);
            Assert.AreEqual(0, tags[1].Styles.Count);

            Assert.AreEqual("p", tags[2].Element);
            Assert.AreEqual(null, tags[2].Text);
            Assert.AreEqual(1, tags[2].Children.Count);
            Assert.AreEqual(0, tags[2].Classes.Count);
            Assert.AreEqual(0, tags[2].Attributes.Count);
            Assert.AreEqual(0, tags[2].Styles.Count);

            Assert.AreEqual(null, tags[2].Children[0].Element);
            Assert.AreEqual("text", tags[2].Children[0].Text);
            Assert.AreEqual(0, tags[2].Children[0].Children.Count);
            Assert.AreEqual(0, tags[2].Children[0].Classes.Count);
            Assert.AreEqual(0, tags[2].Children[0].Attributes.Count);
            Assert.AreEqual(0, tags[2].Children[0].Styles.Count);

            var fullHtml = string.Join(string.Empty, tags);

            Assert.AreEqual("<p>text</p><hr/><p>text</p>", fullHtml);
        }
        public void ParagraphBreak()
        {
            List <HtmlTag> tags = MarkdownToHtmlTagConverter.Convert("hello\n\nworld").ToList();

            Assert.AreEqual(2, tags.Count);

            Assert.AreEqual("p", tags[0].Element);
            Assert.AreEqual(null, tags[0].Text);
            Assert.AreEqual(1, tags[0].Children.Count);
            Assert.AreEqual(0, tags[0].Classes.Count);
            Assert.AreEqual(0, tags[0].Attributes.Count);
            Assert.AreEqual(0, tags[0].Styles.Count);

            Assert.AreEqual(null, tags[0].Children[0].Element);
            Assert.AreEqual("hello", tags[0].Children[0].Text);
            Assert.AreEqual(0, tags[0].Children[0].Children.Count);
            Assert.AreEqual(0, tags[0].Children[0].Classes.Count);
            Assert.AreEqual(0, tags[0].Children[0].Attributes.Count);
            Assert.AreEqual(0, tags[0].Children[0].Styles.Count);

            Assert.AreEqual("p", tags[1].Element);
            Assert.AreEqual(null, tags[1].Text);
            Assert.AreEqual(1, tags[1].Children.Count);
            Assert.AreEqual(0, tags[1].Classes.Count);
            Assert.AreEqual(0, tags[1].Attributes.Count);
            Assert.AreEqual(0, tags[1].Styles.Count);

            Assert.AreEqual(null, tags[1].Children[0].Element);
            Assert.AreEqual("world", tags[1].Children[0].Text);
            Assert.AreEqual(0, tags[1].Children[0].Children.Count);
            Assert.AreEqual(0, tags[1].Children[0].Classes.Count);
            Assert.AreEqual(0, tags[1].Children[0].Attributes.Count);
            Assert.AreEqual(0, tags[1].Children[0].Styles.Count);

            var fullHtml = string.Join(string.Empty, tags);

            Assert.AreEqual("<p>hello</p><p>world</p>", fullHtml);
        }
        public void BasicString()
        {
            List <HtmlTag> tags = MarkdownToHtmlTagConverter.Convert("hello world <>!@#$%^&*()/\\").ToList();

            Assert.AreEqual(1, tags.Count);

            Assert.AreEqual("p", tags[0].Element);
            Assert.AreEqual(null, tags[0].Text);
            Assert.AreEqual(1, tags[0].Children.Count);
            Assert.AreEqual(0, tags[0].Classes.Count);
            Assert.AreEqual(0, tags[0].Attributes.Count);
            Assert.AreEqual(0, tags[0].Styles.Count);

            Assert.AreEqual(null, tags[0].Children[0].Element);
            Assert.AreEqual("hello world <>!@#$%^&*()/\\", tags[0].Children[0].Text);
            Assert.AreEqual(0, tags[0].Children[0].Children.Count);
            Assert.AreEqual(0, tags[0].Children[0].Classes.Count);
            Assert.AreEqual(0, tags[0].Children[0].Attributes.Count);
            Assert.AreEqual(0, tags[0].Children[0].Styles.Count);

            var fullHtml = string.Join(string.Empty, tags);

            Assert.AreEqual("<p>hello world &lt;&gt;!@#$%^&amp;*()/\\</p>", fullHtml);
        }
Esempio n. 6
0
        protected static HtmlTag TextBlockRender(TypedElement element, RenderContext context)
        {
            TextBlock textBlock = (TextBlock)element;

            int fontSize;

            switch (textBlock.Size)
            {
            case TextSize.Small:
                fontSize = context.Config.FontSizes.Small;
                break;

            case TextSize.Medium:
                fontSize = context.Config.FontSizes.Medium;
                break;

            case TextSize.Large:
                fontSize = context.Config.FontSizes.Large;
                break;

            case TextSize.ExtraLarge:
                fontSize = context.Config.FontSizes.ExtraLarge;
                break;

            case TextSize.Normal:
            default:
                fontSize = context.Config.FontSizes.Normal;
                break;
            }
            int weight = 400;

            switch (textBlock.Weight)
            {
            case TextWeight.Lighter:
                weight = 200;
                break;

            case TextWeight.Bolder:
                weight = 600;
                break;
            }
            var lineHeight = fontSize * 1.2;

            var uiTextBlock = new DivTag()
                              .AddClass($"ac-{element.Type.Replace(".", "").ToLower()}")
                              .Style("text-align", textBlock.HorizontalAlignment.ToString().ToLower())
                              .Style("box-sizing", "border-box")
                              .Style("color", context.GetColor(textBlock.Color, textBlock.IsSubtle))
                              .Style("line-height", $"{lineHeight.ToString("F")}px")
                              .Style("font-size", $"{fontSize}px")
                              .Style("font-weight", $"{weight}");

            if (!String.IsNullOrEmpty(context.Config.FontFamily))
            {
                uiTextBlock = uiTextBlock
                              .Style("font-family", context.Config.FontFamily);
            }

            if (textBlock.MaxLines > 0)
            {
                uiTextBlock = uiTextBlock
                              .Style("max-height", $"{lineHeight * textBlock.MaxLines}px")
                              .Style("overflow", "hidden");
            }

            var setWrapStyleOnParagraph = false;

            if (textBlock.Wrap == false)
            {
                uiTextBlock = uiTextBlock
                              .Style("white-space", "nowrap");
                setWrapStyleOnParagraph = true;
            }
            else
            {
                uiTextBlock = uiTextBlock
                              .Style("word-wrap", "break-word");
            }

            var textTags = MarkdownToHtmlTagConverter.Convert(RendererUtilities.ApplyTextFunctions(textBlock.Text));

            uiTextBlock.Children.AddRange(textTags);

            Action <HtmlTag> setParagraphStyles = null;

            setParagraphStyles = (HtmlTag htmlTag) =>
            {
                if (htmlTag.Element?.ToLowerInvariant() == "p")
                {
                    htmlTag.Style("margin-top", "0px");
                    htmlTag.Style("margin-bottom", "0px");
                    htmlTag.Style("width", "100%");

                    if (setWrapStyleOnParagraph)
                    {
                        htmlTag.Style("text-overflow", "ellipsis");
                        htmlTag.Style("overflow", "hidden");
                    }
                }

                foreach (var child in htmlTag.Children)
                {
                    setParagraphStyles(child);
                }
            };

            setParagraphStyles(uiTextBlock);

            return(uiTextBlock);
        }
        public void BoldAndItalics()
        {
            List <HtmlTag> tags = MarkdownToHtmlTagConverter.Convert("normal1 *italic* normal2 **bold** normal3").ToList();

            Assert.AreEqual(1, tags.Count);

            Assert.AreEqual("p", tags[0].Element);
            Assert.AreEqual(null, tags[0].Text);
            Assert.AreEqual(5, tags[0].Children.Count);
            Assert.AreEqual(0, tags[0].Classes.Count);
            Assert.AreEqual(0, tags[0].Attributes.Count);
            Assert.AreEqual(0, tags[0].Styles.Count);

            Assert.AreEqual(null, tags[0].Children[0].Element);
            Assert.AreEqual("normal1 ", tags[0].Children[0].Text);
            Assert.AreEqual(0, tags[0].Children[0].Children.Count);
            Assert.AreEqual(0, tags[0].Children[0].Classes.Count);
            Assert.AreEqual(0, tags[0].Children[0].Attributes.Count);
            Assert.AreEqual(0, tags[0].Children[0].Styles.Count);

            Assert.AreEqual("em", tags[0].Children[1].Element);
            Assert.AreEqual(null, tags[0].Children[1].Text);
            Assert.AreEqual(1, tags[0].Children[1].Children.Count);
            Assert.AreEqual(0, tags[0].Children[1].Classes.Count);
            Assert.AreEqual(0, tags[0].Children[1].Attributes.Count);
            Assert.AreEqual(0, tags[0].Children[1].Styles.Count);

            Assert.AreEqual(null, tags[0].Children[1].Children[0].Element);
            Assert.AreEqual("italic", tags[0].Children[1].Children[0].Text);
            Assert.AreEqual(0, tags[0].Children[1].Children[0].Children.Count);
            Assert.AreEqual(0, tags[0].Children[1].Children[0].Classes.Count);
            Assert.AreEqual(0, tags[0].Children[1].Children[0].Attributes.Count);
            Assert.AreEqual(0, tags[0].Children[1].Children[0].Styles.Count);

            Assert.AreEqual(null, tags[0].Children[2].Element);
            Assert.AreEqual(" normal2 ", tags[0].Children[2].Text);
            Assert.AreEqual(0, tags[0].Children[2].Children.Count);
            Assert.AreEqual(0, tags[0].Children[2].Classes.Count);
            Assert.AreEqual(0, tags[0].Children[2].Attributes.Count);
            Assert.AreEqual(0, tags[0].Children[2].Styles.Count);

            Assert.AreEqual("strong", tags[0].Children[3].Element);
            Assert.AreEqual(null, tags[0].Children[3].Text);
            Assert.AreEqual(1, tags[0].Children[3].Children.Count);
            Assert.AreEqual(0, tags[0].Children[3].Classes.Count);
            Assert.AreEqual(0, tags[0].Children[3].Attributes.Count);
            Assert.AreEqual(0, tags[0].Children[3].Styles.Count);

            Assert.AreEqual(null, tags[0].Children[3].Children[0].Element);
            Assert.AreEqual("bold", tags[0].Children[3].Children[0].Text);
            Assert.AreEqual(0, tags[0].Children[3].Children[0].Children.Count);
            Assert.AreEqual(0, tags[0].Children[3].Children[0].Classes.Count);
            Assert.AreEqual(0, tags[0].Children[3].Children[0].Attributes.Count);
            Assert.AreEqual(0, tags[0].Children[3].Children[0].Styles.Count);

            Assert.AreEqual(null, tags[0].Children[4].Element);
            Assert.AreEqual(" normal3", tags[0].Children[4].Text);
            Assert.AreEqual(0, tags[0].Children[4].Children.Count);
            Assert.AreEqual(0, tags[0].Children[4].Classes.Count);
            Assert.AreEqual(0, tags[0].Children[4].Attributes.Count);
            Assert.AreEqual(0, tags[0].Children[4].Styles.Count);

            var fullHtml = string.Join(string.Empty, tags);

            Assert.AreEqual("<p>normal1 <em>italic</em> normal2 <strong>bold</strong> normal3</p>", fullHtml);
        }