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(); }
private static void Text(MarkdownProcessorContext context, Text text) { context.WriteLine(text.Content); context.LineBreak(); }
private static void Include(MarkdownProcessorContext context, Include include) { context.WriteLine(include.Content); }
private static void String(MarkdownProcessorContext context, string node) { context.WriteLine(node); }