Работа с Markdown в C# (.NET): обзор библиотек и инструментов
Markdown — это легковесный язык разметки, который широко используется для форматирования текста в документации, README-файлах, блогах и чатах. В экосистеме C# (.NET) существует несколько мощных библиотек, которые позволяют парсить, обрабатывать и конвертировать Markdown в HTML и другие форматы. В этой статье мы рассмотрим наиболее популярные инструменты, их возможности и примеры использования.
Зачем нужна обработка Markdown в C#?
Современные веб-приложения, системы управления контентом (CMS) и редакторы кода все чаще используют Markdown как основной формат ввода. В C# (.NET) это может быть полезно для:
- Генерации статического контента (документация, блоги)
- Реализации WYSIWYG-редакторов с Markdown-поддержкой
- Импорта/экспорта данных из внешних систем (GitHub, Reddit, Stack Overflow)
- Конвертации Markdown в PDF, DOCX или LaTeX через промежуточный HTML
Основные библиотеки для C# (.NET)
1. Markdig
Markdig — это самая популярная и производительная библиотека для работы с Markdown в .NET. Она поддерживает CommonMark, GFM (GitHub Flavored Markdown) и множество расширений: таблицы, списки задач, автозамену ссылок, математические формулы (через MathJax) и многое другое.
Установка:
// Через NuGet Package Manager
Install-Package Markdig
// Или через .NET CLI
dotnet add package Markdig
Пример использования:
using Markdig;
string markdown = @"
# Заголовок первого уровня
**Жирный текст** и *курсив*.
- Элемент списка 1
- Элемент списка 2
> Цитата
```csharp
Console.WriteLine(""Hello, World!"");
```";
// Конвертация в HTML с расширениями GFM
string html = Markdown.ToHtml(markdown);
Console.WriteLine(html);
Расширенные возможности:
// Настройка конвейера с дополнительными расширениями
var pipeline = new MarkdownPipelineBuilder()
.UseAdvancedExtensions() // Включает все популярные расширения
.UseMathematics() // Поддержка LaTeX-формул
.UseEmojiAndSmiley() // Эмодзи :smile:
.Build();
string htmlWithExtensions = Markdown.ToHtml(markdown, pipeline);
2. CommonMark.NET
CommonMark.NET — это строгая реализация спецификации CommonMark (стандарт Markdown). Библиотека легковесна, не имеет зависимостей и идеально подходит для проектов, где важна совместимость с эталонной реализацией.
Установка:
Install-Package CommonMark.NET
Пример использования:
using CommonMark;
string markdown = "Привет, **мир**!";
string html = CommonMarkConverter.Convert(markdown);
// Результат: <p>Привет, <strong>мир</strong>!</p>
3. MarkdownSharp
MarkdownSharp — это порт оригинального Markdown-процессора на C# от Jeff Atwood (сооснователь Stack Overflow). Библиотека устарела, но все еще используется в старых проектах. Поддерживает только базовый синтаксис без расширений.
Install-Package MarkdownSharp
using MarkdownSharp;
var markdown = new Markdown();
string html = markdown.Transform("**Hello**");
Дополнительные инструменты
4. HtmlSanitizer (для безопасного вывода)
При конвертации Markdown в HTML и последующем выводе на веб-страницу важно очистить результат от потенциально опасных тегов (XSS-атаки). Используйте библиотеку HtmlSanitizer:
Install-Package HtmlSanitizer
using Ganss.XSS;
var sanitizer = new HtmlSanitizer();
string rawHtml = Markdown.ToHtml("<script>alert('xss')</script>");
string safeHtml = sanitizer.Sanitize(rawHtml);
5. ReverseMarkdown (HTML → Markdown)
Если вам нужно преобразовать HTML обратно в Markdown, используйте ReverseMarkdown:
Install-Package ReverseMarkdown
using ReverseMarkdown;
var converter = new Converter();
string markdown = converter.Convert("<p>Hello <strong>World</strong></p>");
// Результат: Hello **World**