using Markdig;
using Markdig.Syntax;
using Ganss.Xss;
using XFEStudioWebSite.Services.Abstractions;
namespace XFEStudioWebSite.Services;
public class MarkdownService : IMarkdownService
{
private readonly MarkdownPipeline _pipeline;
private readonly HtmlSanitizer _sanitizer;
public MarkdownService()
{
_pipeline = new MarkdownPipelineBuilder()
.UseAdvancedExtensions()
.UseAutoIdentifiers()
// .DisableHtml() // Removed to support HTML tags like <details>
.Build();
_sanitizer = new HtmlSanitizer();
_sanitizer.AllowedTags.Remove("button");
_sanitizer.AllowedTags.Remove("script");
_sanitizer.AllowedTags.Remove("css");
_sanitizer.AllowedAttributes.Add("id");
_sanitizer.AllowedAttributes.Add("class");
_sanitizer.AllowedAttributes.Remove("script");
}
public string RenderHtml(string markdown)
{
if (string.IsNullOrEmpty(markdown))
return string.Empty;
var html = Markdown.ToHtml(markdown, _pipeline);
return _sanitizer.Sanitize(html);
}
public MarkdownDocument Parse(string markdown)
{
if (string.IsNullOrEmpty(markdown))
return Markdown.Parse(string.Empty, _pipeline);
return Markdown.Parse(markdown, _pipeline);
}
}
using Markdig;
using Markdig.Syntax;
using Ganss.Xss;
using XFEStudioWebSite.Services.Abstractions;
namespace XFEStudioWebSite.Services;
public class MarkdownService : IMarkdownService
{
private readonly MarkdownPipeline _pipeline;
private readonly HtmlSanitizer _sanitizer;
public MarkdownService()
{
_pipeline = new MarkdownPipelineBuilder()
.UseAdvancedExtensions()
.UseAutoIdentifiers()
// .DisableHtml() // Removed to support HTML tags like <details>
.Build();
_sanitizer = new HtmlSanitizer();
_sanitizer.AllowedTags.Remove("button");
_sanitizer.AllowedTags.Remove("script");
_sanitizer.AllowedTags.Remove("css");
_sanitizer.AllowedAttributes.Add("id");
_sanitizer.AllowedAttributes.Add("class");
_sanitizer.AllowedAttributes.Remove("script");
}
public string RenderHtml(string markdown)
{
if (string.IsNullOrEmpty(markdown))
return string.Empty;
var html = Markdown.ToHtml(markdown, _pipeline);
return _sanitizer.Sanitize(html);
}
public MarkdownDocument Parse(string markdown)
{
if (string.IsNullOrEmpty(markdown))
return Markdown.Parse(string.Empty, _pipeline);
return Markdown.Parse(markdown, _pipeline);
}
}