From 897188de471dbc5bdc72b3cdd1272a5ac2c94731 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20H=C3=B6glinger-Stelzer?= Date: Wed, 24 Oct 2018 00:32:33 +0200 Subject: [PATCH] Added Markdown renderer --- DerpingDrivers/MainWindow.xaml | 5 +-- DerpingDrivers/MainWindow.xaml.cs | 53 ++++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/DerpingDrivers/MainWindow.xaml b/DerpingDrivers/MainWindow.xaml index e4aff22..64c3b26 100644 --- a/DerpingDrivers/MainWindow.xaml +++ b/DerpingDrivers/MainWindow.xaml @@ -60,10 +60,7 @@ - + \ No newline at end of file diff --git a/DerpingDrivers/MainWindow.xaml.cs b/DerpingDrivers/MainWindow.xaml.cs index 6977f8a..6fc4a29 100644 --- a/DerpingDrivers/MainWindow.xaml.cs +++ b/DerpingDrivers/MainWindow.xaml.cs @@ -1,5 +1,12 @@ -using DerpingDrivers.Util; +using System.IO; +using System.Reflection; +using System.Text; +using System.Windows.Documents; +using System.Xaml; +using DerpingDrivers.Util; using MahApps.Metro.Controls; +using Markdig; +using Markdig.Wpf; namespace DerpingDrivers { @@ -49,5 +56,49 @@ namespace DerpingDrivers public string SummaryText => "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."; + + public FlowDocument SummaryDocument + { + get + { + var markdown = "*None available*"; + + // Convert Markdown to XAML + var xaml = Markdig.Wpf.Markdown.ToXaml(markdown, BuildPipeline()); + + // Render XAML for FlowDocument Control + using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(xaml))) + { + var reader = new XamlXmlReader(stream, new MyXamlSchemaContext()); + + if (System.Windows.Markup.XamlReader.Load(reader) is FlowDocument document) + { + return document; + } + } + + return null; + } + } + + private static MarkdownPipeline BuildPipeline() + { + return new MarkdownPipelineBuilder() + .UseSupportedExtensions() + .Build(); + } + } + + internal class MyXamlSchemaContext : XamlSchemaContext + { + public override bool TryGetCompatibleXamlNamespace(string xamlNamespace, out string compatibleNamespace) + { + if (xamlNamespace.Equals("clr-namespace:Markdig.Wpf")) + { + compatibleNamespace = $"clr-namespace:Markdig.Wpf;assembly={Assembly.GetAssembly(typeof(Markdig.Wpf.Styles)).FullName}"; + return true; + } + return base.TryGetCompatibleXamlNamespace(xamlNamespace, out compatibleNamespace); + } } } \ No newline at end of file