diff --git a/src/Markdig.Tests/Specs/PipeTableSpecs.md b/src/Markdig.Tests/Specs/PipeTableSpecs.md index f2d18f13..39c6eaac 100644 --- a/src/Markdig.Tests/Specs/PipeTableSpecs.md +++ b/src/Markdig.Tests/Specs/PipeTableSpecs.md @@ -346,7 +346,8 @@ The first row is considered as a **header row** if it is separated from the regu ```````````````````````````````` -The text alignment is defined by default to be left. +The text alignment is defined by default to be center for header and left for cells. If the left alignment is applied, it will force the column heading to be left aligned. +There is no way to define a different alignment for heading and cells (apart from the default). The text alignment can be changed by using the character `:` with the header column separator: ```````````````````````````````` example @@ -358,19 +359,19 @@ The text alignment can be changed by using the character `:` with the header col - + - + - + @@ -514,7 +515,7 @@ Tests trailing spaces after pipes ```````````````````````````````` example | abc | def | -|---|:---| +|---|---| | cde| ddd| | eee| fff| | fff | fffff | diff --git a/src/Markdig.Tests/Specs/Specs.cs b/src/Markdig.Tests/Specs/Specs.cs index 17ec8c36..3e50b00c 100644 --- a/src/Markdig.Tests/Specs/Specs.cs +++ b/src/Markdig.Tests/Specs/Specs.cs @@ -16929,7 +16929,8 @@ namespace Markdig.Tests TestParser.TestSpec(" a | b \n-------|-------\n 0 | 1 \n 2 | 3 ", "
aa b c
00 1 2
33 4 5
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ab
01
23
", "pipetables|advanced"); } } - // The text alignment is defined by default to be left. + // The text alignment is defined by default to be center for header and left for cells. If the left alignment is applied, it will force the column heading to be left aligned. + // There is no way to define a different alignment for heading and cells (apart from the default). // The text alignment can be changed by using the character `:` with the header column separator: [TestFixture] public partial class TestExtensionsPipeTable @@ -16950,19 +16951,19 @@ namespace Markdig.Tests // // // - // + // // // // // // // - // + // // // // // - // + // // // // @@ -16970,7 +16971,7 @@ namespace Markdig.Tests //
aabc
0012
3345
Console.WriteLine("Example {0}" + Environment.NewLine + "Section: {0}" + Environment.NewLine, 15, "Extensions Pipe Table"); - TestParser.TestSpec(" a | b | c \n:------|:-------:| ----:\n 0 | 1 | 2 \n 3 | 4 | 5 ", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
abc
012
345
", "pipetables|advanced"); + TestParser.TestSpec(" a | b | c \n:------|:-------:| ----:\n 0 | 1 | 2 \n 3 | 4 | 5 ", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
abc
012
345
", "pipetables|advanced"); } } // Test alignment with starting and ending pipes: @@ -17189,7 +17190,7 @@ namespace Markdig.Tests // // The following CommonMark: // | abc | def | - // |---|:---| + // |---|---| // | cde| ddd| // | eee| fff| // | fff | fffff | @@ -17224,7 +17225,7 @@ namespace Markdig.Tests // Console.WriteLine("Example {0}" + Environment.NewLine + "Section: {0}" + Environment.NewLine, 22, "Extensions Pipe Table"); - TestParser.TestSpec("| abc | def | \n|---|:---|\n| cde| ddd| \n| eee| fff|\n| fff | fffff | \n|gggg | ffff | ", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
abcdef
cdeddd
eeefff
ffffffff
ggggffff
", "pipetables|advanced"); + TestParser.TestSpec("| abc | def | \n|---|---|\n| cde| ddd| \n| eee| fff|\n| fff | fffff | \n|gggg | ffff | ", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
abcdef
cdeddd
eeefff
ffffffff
ggggffff
", "pipetables|advanced"); } } // # Extensions diff --git a/src/Markdig/Extensions/Tables/GridTableParser.cs b/src/Markdig/Extensions/Tables/GridTableParser.cs index cfcc2302..bd4642fb 100644 --- a/src/Markdig/Extensions/Tables/GridTableParser.cs +++ b/src/Markdig/Extensions/Tables/GridTableParser.cs @@ -44,7 +44,7 @@ namespace Markdig.Extensions.Tables } // Parse a column alignment - TableColumnAlign columnAlign; + TableColumnAlign? columnAlign; if (!TableHelper.ParseColumnHeader(ref line, '-', out columnAlign)) { return BlockState.None; @@ -89,13 +89,6 @@ namespace Markdig.Extensions.Tables return BlockState.ContinueDiscard; } - private static TableColumnAlign GetAlignment(bool hasLeft, bool hasRight) - { - return hasLeft && hasRight - ? TableColumnAlign.Center - : hasRight ? TableColumnAlign.Right : TableColumnAlign.Left; - } - public override BlockState TryContinue(BlockProcessor processor, Block block) { var gridTable = (Table)block; diff --git a/src/Markdig/Extensions/Tables/GridTableState.cs b/src/Markdig/Extensions/Tables/GridTableState.cs index 86568e6a..a07a13b0 100644 --- a/src/Markdig/Extensions/Tables/GridTableState.cs +++ b/src/Markdig/Extensions/Tables/GridTableState.cs @@ -31,7 +31,7 @@ namespace Markdig.Extensions.Tables Lines.Add(line); } - public void AddColumn(int start, int end, TableColumnAlign align) + public void AddColumn(int start, int end, TableColumnAlign? align) { if (ColumnSlices == null) { @@ -60,7 +60,7 @@ namespace Markdig.Extensions.Tables public int End { get; set; } - public TableColumnAlign Align { get; set; } + public TableColumnAlign? Align { get; set; } public int CurrentColumnSpan { get; set; } diff --git a/src/Markdig/Extensions/Tables/HtmlTableRenderer.cs b/src/Markdig/Extensions/Tables/HtmlTableRenderer.cs index 005d5422..2804d02f 100644 --- a/src/Markdig/Extensions/Tables/HtmlTableRenderer.cs +++ b/src/Markdig/Extensions/Tables/HtmlTableRenderer.cs @@ -91,14 +91,21 @@ namespace Markdig.Extensions.Tables ? i : cell.ColumnIndex; columnIndex = columnIndex >= table.ColumnDefinitions.Count ? table.ColumnDefinitions.Count - 1 : columnIndex; - switch (table.ColumnDefinitions[columnIndex].Alignment) + var alignment = table.ColumnDefinitions[columnIndex].Alignment; + if (alignment.HasValue) { - case TableColumnAlign.Center: - renderer.Write(" style=\"text-align: center;\""); - break; - case TableColumnAlign.Right: - renderer.Write(" style=\"text-align: right;\""); - break; + switch (alignment) + { + case TableColumnAlign.Center: + renderer.Write(" style=\"text-align: center;\""); + break; + case TableColumnAlign.Right: + renderer.Write(" style=\"text-align: right;\""); + break; + case TableColumnAlign.Left: + renderer.Write(" style=\"text-align: left;\""); + break; + } } } renderer.WriteAttributes(cell); diff --git a/src/Markdig/Extensions/Tables/PipeTableParser.cs b/src/Markdig/Extensions/Tables/PipeTableParser.cs index 088e20de..9af420c9 100644 --- a/src/Markdig/Extensions/Tables/PipeTableParser.cs +++ b/src/Markdig/Extensions/Tables/PipeTableParser.cs @@ -453,7 +453,7 @@ namespace Markdig.Extensions.Tables return false; } - private static bool ParseHeaderString(Inline inline, out TableColumnAlign align) + private static bool ParseHeaderString(Inline inline, out TableColumnAlign? align) { align = 0; var literal = inline as LiteralInline; @@ -500,7 +500,7 @@ namespace Markdig.Extensions.Tables } // Check the left side of a `|` delimiter - TableColumnAlign align = TableColumnAlign.Left; + TableColumnAlign? align = null; if (delimiter.PreviousSibling != null && !ParseHeaderString(delimiter.PreviousSibling, out align)) { break; diff --git a/src/Markdig/Extensions/Tables/TableColumnDefinition.cs b/src/Markdig/Extensions/Tables/TableColumnDefinition.cs index 75c515f2..feeb11ba 100644 --- a/src/Markdig/Extensions/Tables/TableColumnDefinition.cs +++ b/src/Markdig/Extensions/Tables/TableColumnDefinition.cs @@ -17,6 +17,6 @@ namespace Markdig.Extensions.Tables /// /// Gets or sets the column alignment. /// - public TableColumnAlign Alignment { get; set; } + public TableColumnAlign? Alignment { get; set; } } } \ No newline at end of file diff --git a/src/Markdig/Extensions/Tables/TableHelper.cs b/src/Markdig/Extensions/Tables/TableHelper.cs index 9f0618d5..e10b364f 100644 --- a/src/Markdig/Extensions/Tables/TableHelper.cs +++ b/src/Markdig/Extensions/Tables/TableHelper.cs @@ -20,7 +20,7 @@ namespace Markdig.Extensions.Tables /// /// true if parsing was successfull /// - public static bool ParseColumnHeader(ref StringSlice slice, char delimiterChar, out TableColumnAlign align) + public static bool ParseColumnHeader(ref StringSlice slice, char delimiterChar, out TableColumnAlign? align) { return ParseColumnHeaderDetect(ref slice, ref delimiterChar, out align); } @@ -34,7 +34,7 @@ namespace Markdig.Extensions.Tables /// /// true if parsing was successfull /// - public static bool ParseColumnHeaderAuto(ref StringSlice slice, out char delimiterChar, out TableColumnAlign align) + public static bool ParseColumnHeaderAuto(ref StringSlice slice, out char delimiterChar, out TableColumnAlign? align) { delimiterChar = '\0'; return ParseColumnHeaderDetect(ref slice, ref delimiterChar, out align); @@ -49,9 +49,9 @@ namespace Markdig.Extensions.Tables /// /// true if parsing was successfull /// - public static bool ParseColumnHeaderDetect(ref StringSlice slice, ref char delimiterChar, out TableColumnAlign align) + public static bool ParseColumnHeaderDetect(ref StringSlice slice, ref char delimiterChar, out TableColumnAlign? align) { - align = TableColumnAlign.Left; + align = null; slice.TrimStart(); var c = slice.CurrentChar; @@ -104,7 +104,7 @@ namespace Markdig.Extensions.Tables align = hasLeft && hasRight ? TableColumnAlign.Center - : hasRight ? TableColumnAlign.Right : TableColumnAlign.Left; + : hasRight ? TableColumnAlign.Right : hasLeft ? TableColumnAlign.Left : (TableColumnAlign?) null; return true; }