📜  markdig c# (1)

📅  最后修改于: 2023-12-03 14:44:09.612000             🧑  作者: Mango

Markdig C#介绍

简介

Markdig是一款支持.NET平台的Markdown处理程序库,它可以将Markdown文本转换为HTML或其他格式,并提供了可定制的渲染函数和扩展插件支持,以满足开发人员对Markdown格式的不同需求。它的主要优势是高性能、低内存占用和易于使用。

功能特点

Markdig提供以下的功能支持:

  • 支持Markdown 1.0、1.1、1.2与CommonMark规范
  • 支持自定义渲染函数,可扩展渲染器
  • 支持自定义语法,可扩展解析器
  • 支持基于流的处理方式,内存占用低
  • 支持折叠段落、代码高亮等特殊处理
  • 支持与ASP.NET Core和Blazor框架集成使用
安装与使用

Markdig可以通过NuGet包管理器安装,也可以直接从官网下载最新版本。

// 引入命名空间
using Markdig;

// Markdown文本转为HTML
var html = Markdown.ToHtml(markdownText);

// 指定渲染选项
var pipeline = new MarkdownPipelineBuilder()
                .UseAdvancedExtensions()
                .Build();
var html = Markdown.ToHtml(markdownText, pipeline);
自定义渲染函数

Markdig可以由用户自定义渲染函数,以实现不同的输出效果。以下是一个自定义Link渲染函数的示例:

public class MyCustomRenderer : IMarkdownRenderer
{
    private readonly IMarkdownRenderer _renderer;

    public MyCustomRenderer(IMarkdownRenderer renderer)
    {
        _renderer = renderer;
    }

    public void Write(string value)
    {
        _renderer.Write(value);
    }

    // 格式化渲染函数
    public void Render(LinkInline linkInline)
    {
        Write("<a href=\"");
        Write(linkInline.Url);
        Write("\"");

        if (!string.IsNullOrEmpty(linkInline.Title))
        {
            Write(" title=\"");
            Write(Escape(linkInline.Title, '"'));
            Write("\"");
        }

        Write(">");
        Write(linkInline.Label);
        Write("</a>");
    }
}

// 使用自定义渲染函数
var pipeline = new MarkdownPipelineBuilder()
                .UseCustomRenderer<MyCustomRenderer>()
                .Build();
var html = Markdown.ToHtml(markdownText, pipeline);
自定义语法

Markdig同样可以由用户自定义Markdown语法,以满足不同的应用场景。

以下是一个自定义引用语法的示例:

// 定义语法规则
public class MyCustomExtension : IMarkdownExtension
{
    private readonly string _start;

    public MyCustomExtension(string start)
    {
        _start = start;
    }

    public void Setup(MarkdownPipelineBuilder pipeline)
    {
        // 添加语法解析规则
        pipeline.BlockParsers.Insert(0, new MyCustomParser(_start));
    }

    public void Setup(MarkdownPipeline pipeline, IMarkdownRenderer renderer)
    {
    }
}

// 定义语法解析器
public class MyCustomParser : BlockParser
{
    private readonly string _start;

    public MyCustomParser(string start)
    {
        _start = start;
    }

    public override BlockState TryOpen(BlockProcessor processor)
    {
        // 判断是否符合语法规则
        var slice = processor.CurrentMarkdown.Slice;
        if (slice.StartsWith(_start))
        {
            // 创建块
            var block = new MyCustomBlock(this) { Line = processor.Line };
            block.Lines.Append(slice.SliceToEnd(_start.Length));
            processor.NewBlocks.Push(block);

            return BlockState.Continue;
        }

        return BlockState.None;
    }

    public override BlockState TryContinue(BlockProcessor processor, Block block)
    {
        if (processor.IsCodeIndent)
        {
            block.Lines.Append(processor.Line);
            return BlockState.Continue;
        }

        return BlockState.BreakDiscard;
    }
}

// 定义块结构
public class MyCustomBlock : Block
{
    public MyCustomBlock(BlockParser parser) : base(parser)
    {
        Type = "MyCustomBlock";
    }
}

// 使用自定义语法
var pipeline = new MarkdownPipelineBuilder()
                .Use(new MyCustomExtension("|"))
                .Build();
var html = Markdown.ToHtml("|My custom text");
总结

Markdig是一个高性能、低内存占用的Markdown处理程序库,它提供了丰富的功能特点,支持用户自定义渲染函数和语法规则,可以轻松地实现丰富的Markdown解析和渲染效果。