Skip to content

Commit 1e82613

Browse files
authored
Feat: Add <br/> support in the Markdown syntax (#149)
1 parent bdbcdea commit 1e82613

16 files changed

Lines changed: 376 additions & 68 deletions

File tree

src/InfiniLore.InfiniBlazor.Core.Markdown.Components/Config/InfiniBlazorMarkdownConfigExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public static InfiniBlazorMarkdownConfig WithDefaultEditorComponents(this Infini
4747
config.RegisterMdBlazorComponent<HighlightMdSyntaxNode, MdInfiniHighlight>();
4848
config.RegisterMdBlazorComponent<WrapperMdSyntaxNode, MdInfiniWrapper>();
4949
config.RegisterMdBlazorComponent<FrontMatterMdSyntaxNode, MdInfiniFrontMatter>();
50+
config.RegisterMdBlazorComponent<BreakMdSyntaxNode, MdInfiniBreak>();
5051
// config.RegisterBlazorComponent<NewLineMdSyntaxNode, MdInfiniNewLine>(); // Not implemented well yet, only as an example
5152

5253
return config;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
@* ------------------------------------------------------------------------------------------------------------------ *@
2+
@* Imports
3+
@* ------------------------------------------------------------------------------------------------------------------ *@
4+
@using InfiniLore.InfiniBlazor.Markdown.Parsers.Blazor
5+
@using InfiniLore.InfiniBlazor.Markdown.Syntax.Nodes
6+
7+
@namespace InfiniLore.InfiniBlazor.Markdown.MdBlazorComponents
8+
@* ------------------------------------------------------------------------------------------------------------------ *@
9+
@* Descriptors
10+
@* ------------------------------------------------------------------------------------------------------------------ *@
11+
@inherits InfiniBlazorMdComponentBase<BreakMdSyntaxNode>
12+
@* ------------------------------------------------------------------------------------------------------------------ *@
13+
@* Html
14+
@* ------------------------------------------------------------------------------------------------------------------ *@
15+
<br/>
16+
17+
@* ------------------------------------------------------------------------------------------------------------------ *@
18+
@* Code
19+
@* ------------------------------------------------------------------------------------------------------------------ *@
20+
@code {
21+
22+
}

src/InfiniLore.InfiniBlazor.Core.Markdown/Parsers/Json/JsonMdSyntaxTreeParser.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public JsonMdSyntaxTreeParser() {
6868
RegisterVisitor<HighlightMdSyntaxNode, HighlightJsonMdSyntaxNodeVisitor>();
6969
RegisterVisitor<WrapperMdSyntaxNode, WrapperJsonMdSyntaxNodeVisitor>();
7070
RegisterVisitor<FrontMatterMdSyntaxNode, FrontMatterJsonMdSyntaxNodeVisitor>();
71+
RegisterVisitor<BreakMdSyntaxNode, BreakJsonMdSyntaxNodeVisitor>();
7172
}
7273

7374
private void RegisterVisitor<TNode, TVisitor>() where TNode : MdSyntaxNode<TNode>, new() where TVisitor : JsonMdSyntaxNodeVisitor<TNode>, new() {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// ---------------------------------------------------------------------------------------------------------------------
2+
// Imports
3+
// ---------------------------------------------------------------------------------------------------------------------
4+
using InfiniLore.InfiniBlazor.Markdown.Syntax.Nodes;
5+
6+
namespace InfiniLore.InfiniBlazor.Markdown.Parsers.Json.NodeVisitors;
7+
// ---------------------------------------------------------------------------------------------------------------------
8+
// Code
9+
// ---------------------------------------------------------------------------------------------------------------------
10+
public sealed class BreakJsonMdSyntaxNodeVisitor : JsonMdSyntaxNodeVisitor<BreakMdSyntaxNode>;

src/InfiniLore.InfiniBlazor.Core.Markdown/Parsers/Markdown/Deserializer/MdStringMdSyntaxDeserializerFactory.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ public static IMdStringMdSyntaxDeserializer Create(IServiceProvider provider) {
5454
.Register<FootnoteDescriptionMdSyntaxNode, FootnoteDescriptionSyntaxNodeDeserializer>(instance)
5555
.Register<HighlightMdSyntaxNode, HighlightSyntaxNodeDeserializer>(instance)
5656
.Register<WrapperMdSyntaxNode, WrapperSyntaxNodeDeserializer>(instance)
57-
.Register<FrontMatterMdSyntaxNode, FrontMatterSyntaxNodeDeserializer>(instance);
57+
.Register<FrontMatterMdSyntaxNode, FrontMatterSyntaxNodeDeserializer>(instance)
58+
.Register<BreakMdSyntaxNode, BreakSyntaxNodeDeserializer>(instance);
5859

5960
instance.Deserializers = deserializers.ToFrozenDictionary();
6061
return instance;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// ---------------------------------------------------------------------------------------------------------------------
2+
// Imports
3+
// ---------------------------------------------------------------------------------------------------------------------
4+
using InfiniLore.InfiniBlazor.Markdown.Syntax.Nodes;
5+
using System.Text;
6+
7+
namespace InfiniLore.InfiniBlazor.Markdown.Parsers.Markdown.Deserializer.NodeDeserializers;
8+
// ---------------------------------------------------------------------------------------------------------------------
9+
// Code
10+
// ---------------------------------------------------------------------------------------------------------------------
11+
public sealed class BreakSyntaxNodeDeserializer : MdStringMdSyntaxNodeDeserializerBase<BreakMdSyntaxNode> {
12+
13+
protected override void Deserialize(BreakMdSyntaxNode node, StringBuilder builder) {
14+
builder.Append("<br/>");
15+
}
16+
}

src/InfiniLore.InfiniBlazor.Core.Markdown/Parsers/Markdown/Serializer/MdStringMdSyntaxSerializer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public sealed class MdStringMdSyntaxSerializer(ILogger<MdStringMdSyntaxSerialize
4848
[MdRegexGroupNames.Highlight] = HighlightSyntaxNodeSerializer.Serialize,
4949
[MdRegexGroupNames.Wrapper] = WrapperSyntaxNodeSerializer.Serialize,
5050
[MdRegexGroupNames.Frontmatter] = FrontmatterSyntaxNodeSerializer.Serialize,
51+
[MdRegexGroupNames.Break] = BreakSyntaxNodeSerializer.Serialize,
5152
}.ToFrozenDictionary();
5253

5354
// -----------------------------------------------------------------------------------------------------------------
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// ---------------------------------------------------------------------------------------------------------------------
2+
// Imports
3+
// ---------------------------------------------------------------------------------------------------------------------
4+
using InfiniLore.InfiniBlazor.Markdown.Syntax.Nodes;
5+
using System.Text.RegularExpressions;
6+
7+
namespace InfiniLore.InfiniBlazor.Markdown.Parsers.Markdown.Serializer.NodeSerializers;
8+
// ---------------------------------------------------------------------------------------------------------------------
9+
// Code
10+
// ---------------------------------------------------------------------------------------------------------------------
11+
public static class BreakSyntaxNodeSerializer {
12+
// -----------------------------------------------------------------------------------------------------------------
13+
// Methods
14+
// -----------------------------------------------------------------------------------------------------------------
15+
public static void Serialize(IMdSyntaxFragmentStack stack, IMdSyntaxNode parentNode, Match match) {
16+
BreakMdSyntaxNode node = BreakMdSyntaxNode.Pool.Get();
17+
parentNode.AddChildNode(node);
18+
}
19+
}

src/InfiniLore.InfiniBlazor.Core.Markdown/Parsers/Markdown/Serializer/RegexLib/MdRegexGroupNames.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public static class MdRegexGroupNames {
99
public const string BlockQuote = "blockQuote";
1010
public const string Bold = "bold";
1111
public const string BoldContent = "b";
12+
public const string Break = "break";
1213
public const string Callout = "callout";
1314
public const string CalloutBody = "clBody";
1415
public const string CalloutMod = "clMod";

src/InfiniLore.InfiniBlazor.Core.Markdown/Parsers/Markdown/Serializer/RegexLib/MdRegexLib.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public static partial class MdRegexLib {
3636
| (?<user>\@(?<uName>[\p{L}\p{N}\-_\/\.]+))
3737
| (?<footnoteRef>\[\^(?<frId>[\d\p{L}\p{N}]+)\])
3838
| (?<wrapper><(?<wMods>\|.*?)>(?<w>.*)</>)
39+
| (?<break><[Bb][Rr]/?>)
3940
""", RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture | RegexOptions.Compiled)]
4041
public static partial Regex SinglelineStructuresRegex { get; }
4142

0 commit comments

Comments
 (0)