Слегка стилизованная текстовая библиотека для WPF?
Кто-нибудь знает библиотеку форматирования текста со слегка размеченным текстом до стилизованного текста (например, что-то вроде Markdown# или Textile.NET), но которая создает собственный документ XAML (или, скорее, модель FlowDocument или аналогичную, которая может быть отображается непосредственно в приложении WPF), чтобы избежать использования веб-браузера?
Бонусные баллы за что-то легкое. Я надеюсь на то, что будет терпеть очень частые обновления в исходном тексте.
В качестве альтернативы, есть ли легкий элемент управления рендерингом HTML, который можно использовать в WPF? (Я не считаю стандартный WebBrowser легким.)
1 ответ
Я не знаю такой библиотеки, но у меня есть некоторые мысли для вас, которые могут быть полезны.
Первый большой вопрос в моей голове - почему вы хотите использовать что-то примитивное, например Markdown, когда вы можете использовать RichTextBox. Уценка требуется для Stackru и подобных сайтов из-за ограничений браузера. Но если ваше приложение WPF, это не проблема.
Одно из предположений о том, почему вы можете захотеть сделать это, заключается в том, что вы хотите, чтобы ваши документы были редактируемыми как в WPF, так и в веб-приложении с наименьшим общим знаменателем. В этом случае вам понадобится механизм, который в любом случае отображает уценку в HTML, так почему бы не использовать этот же механизм для преобразования уценки в XAML?
Преобразование произвольного HTML в XAML очень сложно, но преобразование вида HTML, который выполнил бы конвертер Markdown, - это совсем другой вопрос. Большинство конверторов в стиле Markdown выделяют только несколько простых HTML-тегов, каждый из которых легко конвертируется в эквивалентный XAML.
Если вы используете конвертер Markdown-to-HTML, он сделает всю тяжелую работу за вас (анализ текста и т. Д.) И предоставит вам XML-подобный документ (точнее, HTML), который сравнительно легко разобрать., Кроме того, если вы используете конвертер Markdown-to-HTML в другом месте, вы будете уверены, что ваш синтаксический анализатор Markdown проанализирует ваш синтаксис Markdown в точности как для HTML, так и для XAML, потому что он будет одинаковым в каждом случае.
Так что в основном я думаю:
string html = MarkdownEngine.MarkdownToHtml(markdown);
string xaml = MarkdownHtmlToXamlTranslator.HtmlToXaml(html);
Где вы разрабатываете свою реализацию MarkdownHtmlToXamlTranslator вокруг того, что фактически выдает механизм уценки. Это может быть очень простой XSLT, или вы можете использовать LINQ to XML вместе с методами построения XDocument. В любом случае это должен быть очень маленький кусочек кода.