using System.ComponentModel; using Humanizer; using Markdig.Renderers; using Markdig.Renderers.Html; namespace OliverBooth.Markdown.Timestamp; /// /// Represents a Markdown object renderer that renders elements. /// public sealed class TimestampRenderer : HtmlObjectRenderer { /// protected override void Write(HtmlRenderer renderer, TimestampInline obj) { DateTimeOffset timestamp = obj.Timestamp; TimestampFormat format = obj.Format; renderer.Write(""); switch (format) { case TimestampFormat.LongDate: renderer.Write(timestamp.ToString("d MMMM yyyy")); break; case TimestampFormat.LongDateShortTime: renderer.Write(timestamp.ToString(@"d MMMM yyyy \a\t HH:mm")); break; case TimestampFormat.LongDateTime: renderer.Write(timestamp.ToString(@"dddd, d MMMM yyyy \a\t HH:mm")); break; case TimestampFormat.Relative: renderer.Write(timestamp.Humanize()); break; case var _ when !Enum.IsDefined(format): throw new InvalidEnumArgumentException(nameof(format), (int)format, typeof(TimestampFormat)); default: renderer.Write(timestamp.ToString(((char)format).ToString())); break; } renderer.Write(""); } }