protected override void Write(RenderFragmentMarkdownRenderer renderer, EmphasisInline obj)
 {
     renderer.WriteElementStart(obj.DelimiterCount == 2 ? "strong" : "em")
     .WriteAttributes(obj.TryGetAttributes())
     .WriteChildren(obj);
     renderer.WriteElementEnd();
 }
        protected override void Write(RenderFragmentMarkdownRenderer renderer, QuoteBlock obj)
        {
            renderer.WriteElementStart("blockquote")
            .WriteAttributes(obj.TryGetAttributes());

            var oldImplicitParagraph = renderer.ImplicitParagraph;

            renderer.ImplicitParagraph = false;
            renderer.WriteChildren(obj);
            renderer.ImplicitParagraph = oldImplicitParagraph;

            renderer.WriteElementEnd();
        }
        protected override void Write(RenderFragmentMarkdownRenderer renderer, ListBlock obj)
        {
            renderer.WriteElementStart(obj.IsOrdered ? "ol" : "ul")
            .WriteAttributes(obj.TryGetAttributes());

            foreach (ListItemBlock item in obj)
            {
                var oldImplicitParagraph = renderer.ImplicitParagraph;
                renderer.ImplicitParagraph = !obj.IsLoose;

                renderer.WriteElementStart("li").WriteAttributes(item.TryGetAttributes());
                renderer.WriteChildren(item);
                renderer.WriteElementEnd();

                renderer.ImplicitParagraph = oldImplicitParagraph;
            }
        }
        protected override void Write(RenderFragmentMarkdownRenderer renderer, LinkInline obj)
        {
            string url = obj.GetDynamicUrl?.Invoke() ?? obj.Url;

            renderer.WriteElementStart(obj.IsImage ? "img" : "a")
            .WriteAttribute(obj.IsImage ? "src" : "href", url);

            if (obj.IsImage)
            {
                renderer.WriteAttribute("alt", "** Image **");                 // Don't wanna bother implementing this yet. It would require creating a nested HTML renderer + StringWriter.
            }

            if (!string.IsNullOrEmpty(obj.Title))
            {
                renderer.WriteAttribute("title", obj.Title);
            }

            if (!obj.IsImage)
            {
                renderer.WriteChildren(obj);
            }

            renderer.WriteElementEnd();
        }