Работа с Markdown в C# (.NET): лучшие библиотеки и примеры использования
Markdown — это легковесный язык разметки, который позволяет форматировать текст с помощью простых символов. Он широко используется для написания документации, README-файлов, постов в блогах и сообщений на форумах. В экосистеме C# (.NET) существует несколько мощных библиотек для парсинга, конвертации и генерации Markdown. В этой статье мы рассмотрим основные инструменты и покажем, как с ними работать.
Популярные библиотеки для работы с Markdown в C#
Наиболее востребованные решения в .NET:
- Markdig — современная, быстрая и полностью совместимая со спецификацией CommonMark библиотека. Поддерживает расширения (таблицы, зачеркивание, emoji, диаграммы и др.).
- MarkdownSharp — легковесный парсер от Stack Overflow. Простой, но не поддерживает CommonMark и многие расширения.
- CommonMark.NET — официальная реализация спецификации CommonMark. Хорошо подходит для строгой совместимости.
В этом руководстве мы сосредоточимся на Markdig, так как он является де-факто стандартом для современных .NET-проектов.
Установка Markdig
Добавьте пакет через NuGet Package Manager или .NET CLI:
dotnet add package Markdig
Или через Package Manager Console:
Install-Package Markdig
Базовое использование: конвертация Markdown в HTML
Самый простой сценарий — преобразовать Markdown-строку в HTML. Markdig делает это в одну строку:
using Markdig;
string markdown = "# Заголовок 1\n\nЭто **жирный текст** и *курсив*.\n\n- Элемент списка 1\n- Элемент списка 2";
string html = Markdown.ToHtml(markdown);
Console.WriteLine(html);
Результат:
<h1>Заголовок 1</h1>
<p>Это <strong>жирный текст</strong> и <em>курсив</em>.</p>
<ul>
<li>Элемент списка 1</li>
<li>Элемент списка 2</li>
</ul>
Работа с расширениями Markdig
Markdig поддерживает множество расширений. Чтобы их использовать, нужно создать pipeline:
using Markdig;
using Markdig.Extensions.Tables;
var pipeline = new MarkdownPipelineBuilder()
.UseAdvancedExtensions() // включает все основные расширения
.Build();
string markdown = "| Заголовок 1 | Заголовок 2 |\n|-------------|-------------|\n| Ячейка 1 | Ячейка 2 |";
string html = Markdown.ToHtml(markdown, pipeline);
Console.WriteLine(html);
Этот код сгенерирует HTML-таблицу. Можно подключать отдельные расширения: .UseTables(), .UseEmojiAndSmiley(), .UseTaskLists() и другие.
Конвертация HTML обратно в Markdown
Обратное преобразование (HTML → Markdown) не входит в стандартную поставку Markdig, но можно использовать библиотеку ReverseMarkdown:
dotnet add package ReverseMarkdown
using ReverseMarkdown;
var converter = new Converter();
string html = "<h1>Привет, мир!</h1><p>Это <strong>важно</strong></p>";
string markdown = converter.Convert(html);
Console.WriteLine(markdown);
Работа с файлами Markdown
Часто Markdown хранится в файлах. Пример чтения и конвертации:
using Markdig;
string filePath = "document.md";
string markdownContent = File.ReadAllText(filePath);
string htmlContent = Markdown.ToHtml(markdownContent);
File.WriteAllText("output.html", htmlContent);
Создание расширенного HTML с пользовательским pipeline
Вы можете тонко настроить pipeline для конкретных задач:
var pipeline = new MarkdownPipelineBuilder()
.UseYamlFrontMatter() // поддержка YAML метаданных
.UseEmojiAndSmiley() // поддержка эмодзи :smile:
.UseTaskLists() // чекбоксы [x] и [ ]
.UseAutoLinks() // автоматическое создание ссылок
.UsePipeTables() // таблицы с помощью |
.Build();
string markdown = @"
---
title: Пример
author: PythonLib
---
# Статья
Привет! :wave:
- [x] Сделать задачу 1
- [ ] Сделать задачу 2
Посетите https://pythonlib.ru
";
string html = Markdown.ToHtml(markdown, pipeline);