mirror of
https://github.com/bloxstraplabs/bloxstrap.git
synced 2025-04-21 10:01:27 -07:00
Fix newlines not rendering in markdown blocks
This commit is contained in:
parent
289b9dec77
commit
0aaeb9d20c
@ -17,7 +17,10 @@ namespace Bloxstrap.UI.Elements.Controls
|
|||||||
[Localizability(LocalizationCategory.Text)]
|
[Localizability(LocalizationCategory.Text)]
|
||||||
class MarkdownTextBlock : TextBlock
|
class MarkdownTextBlock : TextBlock
|
||||||
{
|
{
|
||||||
private static MarkdownPipeline _markdownPipeline;
|
private static readonly MarkdownPipeline _markdownPipeline = new MarkdownPipelineBuilder()
|
||||||
|
.UseEmphasisExtras(Markdig.Extensions.EmphasisExtras.EmphasisExtraOptions.Marked) // enable '==' support
|
||||||
|
.UseSoftlineBreakAsHardlineBreak()
|
||||||
|
.Build();
|
||||||
|
|
||||||
public static readonly DependencyProperty MarkdownTextProperty =
|
public static readonly DependencyProperty MarkdownTextProperty =
|
||||||
DependencyProperty.Register(nameof(MarkdownText), typeof(string), typeof(MarkdownTextBlock),
|
DependencyProperty.Register(nameof(MarkdownText), typeof(string), typeof(MarkdownTextBlock),
|
||||||
@ -70,9 +73,7 @@ namespace Bloxstrap.UI.Elements.Controls
|
|||||||
var textInline = linkInline.FirstChild;
|
var textInline = linkInline.FirstChild;
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(url))
|
if (string.IsNullOrEmpty(url))
|
||||||
{
|
|
||||||
return GetWpfInlineFromMarkdownInline(textInline);
|
return GetWpfInlineFromMarkdownInline(textInline);
|
||||||
}
|
|
||||||
|
|
||||||
var childInline = GetWpfInlineFromMarkdownInline(textInline);
|
var childInline = GetWpfInlineFromMarkdownInline(textInline);
|
||||||
|
|
||||||
@ -82,6 +83,10 @@ namespace Bloxstrap.UI.Elements.Controls
|
|||||||
CommandParameter = url
|
CommandParameter = url
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
else if (inline is LineBreakInline)
|
||||||
|
{
|
||||||
|
return new LineBreak();
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -89,7 +94,8 @@ namespace Bloxstrap.UI.Elements.Controls
|
|||||||
private void AddMarkdownInline(Markdig.Syntax.Inlines.Inline? inline)
|
private void AddMarkdownInline(Markdig.Syntax.Inlines.Inline? inline)
|
||||||
{
|
{
|
||||||
var wpfInline = GetWpfInlineFromMarkdownInline(inline);
|
var wpfInline = GetWpfInlineFromMarkdownInline(inline);
|
||||||
if (wpfInline != null)
|
|
||||||
|
if (wpfInline is not null)
|
||||||
Inlines.Add(wpfInline);
|
Inlines.Add(wpfInline);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,26 +107,28 @@ namespace Bloxstrap.UI.Elements.Controls
|
|||||||
if (dependencyPropertyChangedEventArgs.NewValue is not string rawDocument)
|
if (dependencyPropertyChangedEventArgs.NewValue is not string rawDocument)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
MarkdownDocument document = Markdown.Parse(rawDocument, _markdownPipeline);
|
var document = Markdown.Parse(rawDocument, _markdownPipeline);
|
||||||
|
|
||||||
markdownTextBlock.Inlines.Clear();
|
markdownTextBlock.Inlines.Clear();
|
||||||
|
|
||||||
if (document.FirstOrDefault() is not ParagraphBlock paragraphBlock || paragraphBlock.Inline == null)
|
var lastBlock = document.Last();
|
||||||
return;
|
|
||||||
|
|
||||||
for (int i = 0; i < paragraphBlock.Inline.Count(); i++)
|
// matt was evidently very tired on the night he was first writing this
|
||||||
|
// https://github.com/pizzaboxer/bloxstrap/blob/289b9dec77cf35b2cc6504019bc9c7701626be1f/Bloxstrap/UI/Elements/Controls/MarkdownTextBlock.cs#L111
|
||||||
|
foreach (var block in document)
|
||||||
{
|
{
|
||||||
var inline = paragraphBlock.Inline.ElementAt(i);
|
if (block is not ParagraphBlock paragraphBlock || paragraphBlock.Inline is null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
foreach (var inline in paragraphBlock.Inline)
|
||||||
markdownTextBlock.AddMarkdownInline(inline);
|
markdownTextBlock.AddMarkdownInline(inline);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static MarkdownTextBlock()
|
if (block != lastBlock)
|
||||||
{
|
{
|
||||||
_markdownPipeline = new MarkdownPipelineBuilder()
|
markdownTextBlock.AddMarkdownInline(new LineBreakInline());
|
||||||
.UseEmphasisExtras(Markdig.Extensions.EmphasisExtras.EmphasisExtraOptions.Marked) // enable '==' support
|
markdownTextBlock.AddMarkdownInline(new LineBreakInline());
|
||||||
.Build();
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user