in src/PSDocs/Processor/Markdown/MarkdownProcessor.cs [209:335]
private static void Table(MarkdownProcessorContext context, Table table)
{
if (table.Headers == null || table.Headers.Count == 0)
return;
var lastHeader = table.Headers.Count - 1;
var useEdgePipe = context.Option.Markdown.UseEdgePipes == EdgePipeOption.Always
|| table.Headers.Count == 1;
var padColumn = context.Option.Markdown.ColumnPadding == ColumnPadding.Single
|| context.Option.Markdown.ColumnPadding == ColumnPadding.MatchHeader;
// Write table headers
for (var i = 0; i < table.Headers.Count; i++)
{
StartColumn(context, i, lastHeader, useEdgePipe, padColumn, padColumn);
context.Write(table.Headers[i].Label);
if (i < lastHeader)
{
var padding = 0;
// Pad column
if (table.Headers[i].Width > 0 && (table.Headers[i].Width - table.Headers[i].Label.Length) > 0)
{
padding = table.Headers[i].Width - table.Headers[i].Label.Length;
}
context.WriteSpace(padding);
}
}
if (padColumn && useEdgePipe)
context.WriteSpace();
context.WriteLine(useEdgePipe ? "|" : string.Empty);
// Write table header separator
for (var i = 0; i < table.Headers.Count; i++)
{
StartColumn(context, i, lastHeader, useEdgePipe, padColumn, padColumn);
switch (table.Headers[i].Alignment)
{
case Alignment.Left:
context.Write(":");
context.Write('-', table.Headers[i].Label.Length - 1);
break;
case Alignment.Right:
context.Write('-', table.Headers[i].Label.Length - 1);
context.Write(":");
break;
case Alignment.Center:
context.Write(":");
context.Write('-', table.Headers[i].Label.Length - 2);
context.Write(":");
break;
default:
context.Write('-', table.Headers[i].Label.Length);
break;
}
if (i < lastHeader)
{
var padding = 0;
// Pad column
if (table.Headers[i].Width > 0 && (table.Headers[i].Width - table.Headers[i].Label.Length) > 0)
{
padding = table.Headers[i].Width - table.Headers[i].Label.Length;
}
context.WriteSpace(padding);
}
}
if (padColumn && useEdgePipe)
{
context.WriteSpace();
}
context.WriteLine(useEdgePipe ? "|" : string.Empty);
// Write table rows
for (var r = 0; r < table.Rows.Count; r++)
{
for (var c = 0; c < table.Rows[r].Length; c++)
{
var text = WrapText(context, table.Rows[r][c]);
StartColumn(context, c, lastHeader, useEdgePipe, padBeforePipe: padColumn, padAfterPipe: padColumn && (c < lastHeader || !string.IsNullOrEmpty(text)));
context.Write(text);
if (c < lastHeader)
{
var padding = 0;
// Pad column using column width
if (table.Headers[c].Width > 0 && (table.Headers[c].Width - text.Length) > 0)
{
padding = table.Headers[c].Width - text.Length;
}
// Pad column matching header
else if (context.Option.Markdown.ColumnPadding == ColumnPadding.MatchHeader)
{
if ((table.Headers[c].Label.Length - text.Length) > 0)
{
padding = table.Headers[c].Label.Length - text.Length;
}
}
context.WriteSpace(padding);
}
}
if (padColumn && useEdgePipe)
{
context.WriteSpace();
}
context.WriteLine(useEdgePipe ? "|" : string.Empty);
}
context.LineBreak();
}