feat: added the abilty to add or remove the preformat block around tables
This commit is contained in:
parent
e94bbbed41
commit
0649c62685
4 changed files with 63 additions and 5 deletions
|
@ -19,6 +19,7 @@ namespace MfGames.Markdown.Gemini.Tests
|
||||||
new GemtextPipeTableExtension(
|
new GemtextPipeTableExtension(
|
||||||
new GemtextPipeTableOptions()
|
new GemtextPipeTableOptions()
|
||||||
{
|
{
|
||||||
|
OmitPreformatLines = true,
|
||||||
ConfigureTableBuilder = (x) =>
|
ConfigureTableBuilder = (x) =>
|
||||||
x.WithFormat(
|
x.WithFormat(
|
||||||
ConsoleTableBuilderFormat.MarkDown),
|
ConsoleTableBuilderFormat.MarkDown),
|
||||||
|
@ -42,6 +43,39 @@ namespace MfGames.Markdown.Gemini.Tests
|
||||||
Assert.Equal(expected, actual);
|
Assert.Equal(expected, actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void FencedTable()
|
||||||
|
{
|
||||||
|
MarkdownPipeline pipeline = new MarkdownPipelineBuilder()
|
||||||
|
.Use(
|
||||||
|
new GemtextPipeTableExtension(
|
||||||
|
new GemtextPipeTableOptions()
|
||||||
|
{
|
||||||
|
ConfigureTableBuilder = (x) =>
|
||||||
|
x.WithFormat(
|
||||||
|
ConsoleTableBuilderFormat.MarkDown),
|
||||||
|
}))
|
||||||
|
.Build();
|
||||||
|
string input = string.Join(
|
||||||
|
"\n",
|
||||||
|
"aaa|bbb|ccc",
|
||||||
|
"--:|---|:-:",
|
||||||
|
"1|2|3",
|
||||||
|
"4|5|6");
|
||||||
|
string expected = string.Join(
|
||||||
|
"\n",
|
||||||
|
"```",
|
||||||
|
"| aaa | bbb | ccc |",
|
||||||
|
"|-----|-----|-----|",
|
||||||
|
"| 1 | 2 | 3 |",
|
||||||
|
"| 4 | 5 | 6 |",
|
||||||
|
"```",
|
||||||
|
"");
|
||||||
|
string actual = MarkdownGemtext.ToGemtext(input, pipeline);
|
||||||
|
|
||||||
|
Assert.Equal(expected, actual);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void SimpleTable()
|
public void SimpleTable()
|
||||||
{
|
{
|
||||||
|
@ -50,6 +84,7 @@ namespace MfGames.Markdown.Gemini.Tests
|
||||||
new GemtextPipeTableExtension(
|
new GemtextPipeTableExtension(
|
||||||
new GemtextPipeTableOptions()
|
new GemtextPipeTableOptions()
|
||||||
{
|
{
|
||||||
|
OmitPreformatLines = true,
|
||||||
ConfigureTableBuilder = (x) =>
|
ConfigureTableBuilder = (x) =>
|
||||||
x.WithFormat(
|
x.WithFormat(
|
||||||
ConsoleTableBuilderFormat.MarkDown),
|
ConsoleTableBuilderFormat.MarkDown),
|
||||||
|
|
|
@ -59,7 +59,9 @@ namespace MfGames.Markdown.Gemtext.Extensions
|
||||||
}
|
}
|
||||||
|
|
||||||
gemtext.ObjectRenderers.Add(
|
gemtext.ObjectRenderers.Add(
|
||||||
new TableRenderer(this.Options.ConfigureTableBuilder));
|
new TableRenderer(
|
||||||
|
this.Options.OmitPreformatLines,
|
||||||
|
this.Options.ConfigureTableBuilder));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,5 +12,11 @@ namespace MfGames.Markdown.Gemtext.Extensions
|
||||||
/// Gets or sets the table builder to control formatting.
|
/// Gets or sets the table builder to control formatting.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Action<ConsoleTableBuilder>? ConfigureTableBuilder { get; set; }
|
public Action<ConsoleTableBuilder>? ConfigureTableBuilder { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value whether the preformat (backticks) fence should
|
||||||
|
/// not be emitted.
|
||||||
|
/// </summary>
|
||||||
|
public bool OmitPreformatLines { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,16 +13,18 @@ namespace MfGames.Markdown.Gemtext.Renderers.Gemtext.Blocks
|
||||||
{
|
{
|
||||||
private readonly Action<ConsoleTableBuilder>? configureTableBuilder;
|
private readonly Action<ConsoleTableBuilder>? configureTableBuilder;
|
||||||
|
|
||||||
public TableRenderer(Action<ConsoleTableBuilder>? configureTableBuilder)
|
private readonly bool omitPreformat;
|
||||||
|
|
||||||
|
public TableRenderer(
|
||||||
|
bool omitPreformat,
|
||||||
|
Action<ConsoleTableBuilder>? configureTableBuilder)
|
||||||
{
|
{
|
||||||
|
this.omitPreformat = omitPreformat;
|
||||||
this.configureTableBuilder = configureTableBuilder;
|
this.configureTableBuilder = configureTableBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Write(GemtextRenderer renderer, Table table)
|
protected override void Write(GemtextRenderer renderer, Table table)
|
||||||
{
|
{
|
||||||
// Make sure we have plenty of space above us.
|
|
||||||
renderer.EnsureTwoLines();
|
|
||||||
|
|
||||||
// Since Gemtext doesn't have a table format per-se, we are going
|
// Since Gemtext doesn't have a table format per-se, we are going
|
||||||
// to use ConsoleTableEx to make a nicely-formatted table and emit
|
// to use ConsoleTableEx to make a nicely-formatted table and emit
|
||||||
// the lines directly. That should produce the desired result.
|
// the lines directly. That should produce the desired result.
|
||||||
|
@ -62,7 +64,20 @@ namespace MfGames.Markdown.Gemtext.Renderers.Gemtext.Blocks
|
||||||
// Format the final table.
|
// Format the final table.
|
||||||
string formatted = builder.Export().ToString().TrimEnd();
|
string formatted = builder.Export().ToString().TrimEnd();
|
||||||
|
|
||||||
|
// Write out the table including making sure two lines are above it.
|
||||||
|
renderer.EnsureTwoLines();
|
||||||
|
|
||||||
|
if (!this.omitPreformat)
|
||||||
|
{
|
||||||
|
renderer.WriteLine("```");
|
||||||
|
}
|
||||||
|
|
||||||
renderer.WriteLine(formatted);
|
renderer.WriteLine(formatted);
|
||||||
|
|
||||||
|
if (!this.omitPreformat)
|
||||||
|
{
|
||||||
|
renderer.WriteLine("```");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<object> GetCellValues(TableRow row)
|
private static List<object> GetCellValues(TableRow row)
|
||||||
|
|
Reference in a new issue