using System; using System.Collections.Generic; using FluentValidation; using MfGames.Gallium; using Markdig; using MfGames.Nitride.Contents; namespace MfGames.Nitride.Markdown; [WithProperties] public abstract partial class ConvertMarkdownToBase : IOperation { private readonly IValidator validator; protected ConvertMarkdownToBase(IValidator validator) { this.validator = validator; } /// /// Gets or sets an additional callback to configure additional features /// from the baseline Markdown. /// public Action? ConfigureMarkdown { get; set; } /// public IEnumerable Run(IEnumerable input) { // Validate the inputs. this.validator.ValidateAndThrow(this); // Create the Markdown pipeline used for formatting. var builder = new MarkdownPipelineBuilder(); this.ConfigureMarkdown?.Invoke(builder); MarkdownPipeline options = builder.Build(); // Process the Markdown files (while passing everything on). return input.SelectEntity( ( entity, _, content) => this.Convert(entity, content, options)); } /// /// Converts the Markdown file into HTML. /// /// The entity to convert. /// The content for this entity. /// The markdown pipeline. /// A converted entity. protected abstract Entity Convert( Entity entity, ITextContent markdownContent, MarkdownPipeline options); }