mfgames-cil/src/MfGames.Markdown.Gemtext/Extensions/SetBlockLinkHandling.cs

60 lines
1.9 KiB
C#

using Markdig;
using Markdig.Renderers;
using MfGames.Markdown.Gemtext.Renderers;
namespace MfGames.Markdown.Gemtext.Extensions;
/// <summary>
/// Extension method to control how links are processed inside blocks.
/// </summary>
/// <seealso cref="IMarkdownExtension" />
public class SetBlockLinkHandling : IMarkdownExtension
{
public SetBlockLinkHandling(
BlockLinkHandling? blockLinkHandling = null,
EndLinkInlineFormatting? endLinkInlineFormatting = null,
int? nextFootnoteNumber = null
)
{
this.BlockLinkHandling = blockLinkHandling;
this.EndLinkInlineFormatting = endLinkInlineFormatting;
this.NextFootnoteNumber = nextFootnoteNumber;
}
/// <summary>
/// Gets or sets how block links are handled. If this is null, then no
/// change is made to the current renderer.
/// </summary>
public BlockLinkHandling? BlockLinkHandling { get; set; }
/// <summary>
/// Gets or sets how links are formatted if they are gathered to the
/// end of the paragraph or document. If this is null, then no change
/// will be made.
/// </summary>
public EndLinkInlineFormatting? EndLinkInlineFormatting { get; set; }
/// <summary>
/// Gets or sets the next footnote number. If this is null, then no
/// change will be made.
/// </summary>
public int? NextFootnoteNumber { get; set; }
/// <inheritdoc />
public void Setup(MarkdownPipelineBuilder pipeline) { }
/// <inheritdoc />
public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer)
{
if (renderer is not GemtextRenderer gemtext)
{
return;
}
gemtext.BlockLinkHandling = this.BlockLinkHandling ?? gemtext.BlockLinkHandling;
gemtext.EndLinkInlineFormatting =
this.EndLinkInlineFormatting ?? gemtext.EndLinkInlineFormatting;
gemtext.NextFootnoteNumber = this.NextFootnoteNumber ?? gemtext.NextFootnoteNumber;
}
}