XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8
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);
    }
}