File: Renderer\EmphasisInlineRenderer.cs
Web Access
Project: src\src\Graphics\src\Text.Markdig\Graphics.Text.Markdig.csproj (Microsoft.Maui.Graphics.Text.Markdig)
using Markdig.Syntax.Inlines;
using Microsoft.Maui.Graphics.Text;
 
namespace Microsoft.Maui.Graphics.Text.Renderer
{
	public class EmphasisInlineRenderer : AttributedTextObjectRenderer<EmphasisInline>
	{
		protected override void Write(AttributedTextRenderer renderer, EmphasisInline obj)
		{
			var start = renderer.Count;
			renderer.WriteChildren(obj);
			var length = renderer.Count - start;
 
			var bold = IsBold(obj);
			var underline = IsUnderline(obj);
			var italic = IsItalic(obj);
			var strikethrough = IsStrikethrough(obj);
			var subscript = IsSubscript(obj);
			var superscript = IsSuperscript(obj);
 
			if (length > 0 && (bold || italic || strikethrough || subscript || superscript || underline))
			{
				var attributes = new TextAttributes();
				attributes.SetBold(bold);
				attributes.SetItalic(italic);
				attributes.SetStrikethrough(strikethrough);
				attributes.SetSubscript(subscript);
				attributes.SetSuperscript(superscript);
				attributes.SetUnderline(underline);
				renderer.AddTextRun(start, length, attributes);
			}
		}
 
		public bool IsUnderline(EmphasisInline obj)
		{
			if (obj.DelimiterChar == '_')
				return obj.DelimiterCount == 2;
 
			return false;
		}
 
		public bool IsBold(EmphasisInline obj)
		{
			if (obj.DelimiterChar == '*')
				return obj.DelimiterCount == 2;
 
			return false;
		}
 
		public bool IsItalic(EmphasisInline obj)
		{
			if (obj.DelimiterChar == '*')
				return obj.DelimiterCount != 2;
 
			return false;
		}
 
		public bool IsStrikethrough(EmphasisInline obj)
		{
			if (obj.DelimiterChar == '~')
				return obj.DelimiterCount == 2;
 
			return false;
		}
 
		public bool IsSubscript(EmphasisInline obj)
		{
			if (obj.DelimiterChar == '~')
				return obj.DelimiterCount != 2;
 
			return false;
		}
 
		public bool IsSuperscript(EmphasisInline obj)
		{
			if (obj.DelimiterChar == '^')
				return obj.DelimiterCount != 2;
 
			return false;
		}
	}
}