public static ConsoleTableBuilder WithMetadataRow(this ConsoleTableBuilder builder, MetaRowPositions position, Func <ConsoleTableBuilder, string> contentGenerator) { switch (position) { case MetaRowPositions.Top: if (builder.TopMetadataRows == null) { builder.TopMetadataRows = new List <KeyValuePair <MetaRowPositions, Func <ConsoleTableBuilder, string> > >(); } builder.TopMetadataRows.Add(new KeyValuePair <MetaRowPositions, Func <ConsoleTableBuilder, string> >(position, contentGenerator)); break; case MetaRowPositions.Bottom: if (builder.BottomMetadataRows == null) { builder.BottomMetadataRows = new List <KeyValuePair <MetaRowPositions, Func <ConsoleTableBuilder, string> > >(); } builder.BottomMetadataRows.Add(new KeyValuePair <MetaRowPositions, Func <ConsoleTableBuilder, string> >(position, contentGenerator)); break; default: break; } return(builder); }
//private static StringBuilder CreateTableForDefaultFormat(ConsoleTableBuilder builder) //{ // var strBuilder = new StringBuilder(); // BuildMetaRowsFormat(builder, strBuilder, MetaRowPositions.Top); // // create the string format with padding // var format = builder.Format('|'); // if (format == string.Empty) // { // return strBuilder; // } // // find the longest formatted line // var maxRowLength = Math.Max(0, builder.Rows.Any() ? builder.Rows.Max(row => string.Format(format, row.ToArray()).Length) : 0); // // add each row // var results = builder.Rows.Select(row => string.Format(format, row.ToArray())).ToList(); // // create the divider // var divider = new string('-', maxRowLength); // // header // if (builder.Column != null && builder.Column.Any() && builder.Column.Max(x => (x ?? string.Empty).ToString().Length) > 0) // { // strBuilder.AppendLine(divider); // strBuilder.AppendLine(string.Format(format, builder.Column.ToArray())); // } // foreach (var row in results) // { // strBuilder.AppendLine(divider); // strBuilder.AppendLine(row); // } // strBuilder.AppendLine(divider); // BuildMetaRowsFormat(builder, strBuilder, MetaRowPositions.Bottom); // return strBuilder; //} //private static StringBuilder CreateTableForMinimalFormat(ConsoleTableBuilder builder) //{ // var strBuilder = new StringBuilder(); // BuildMetaRowsFormat(builder, strBuilder, MetaRowPositions.Top); // // create the string format with padding // var format = builder.Format('\0').Trim(); // if (format == string.Empty) // { // return strBuilder; // } // var skipFirstRow = false; // var columnHeaders = string.Empty; // if (builder.Column != null && builder.Column.Any() && builder.Column.Max(x => (x ?? string.Empty).ToString().Length) > 0) // { // skipFirstRow = false; // columnHeaders = string.Format(format, builder.Column.ToArray()); // } // else // { // skipFirstRow = true; // columnHeaders = string.Format(format, builder.Rows.First().ToArray()); // } // // create the divider // var divider = Regex.Replace(columnHeaders, @"[^|]", '-'.ToString()); // strBuilder.AppendLine(columnHeaders); // strBuilder.AppendLine(divider); // // add each row // var results = builder.Rows.Skip(skipFirstRow ? 1 : 0).Select(row => string.Format(format, row.ToArray())).ToList(); // results.ForEach(row => strBuilder.AppendLine(row)); // BuildMetaRowsFormat(builder, strBuilder, MetaRowPositions.Bottom); // return strBuilder; //} //private static StringBuilder CreateTableForMarkdownFormat(ConsoleTableBuilder builder) //{ // var strBuilder = new StringBuilder(); // BuildMetaRowsFormat(builder, strBuilder, MetaRowPositions.Top); // // create the string format with padding // var format = builder.Format('|'); // if (format == string.Empty) // { // return strBuilder; // } // var skipFirstRow = false; // var columnHeaders = string.Empty; // if (builder.Column != null && builder.Column.Any() && builder.Column.Max(x => (x ?? string.Empty).ToString().Length) > 0) // { // skipFirstRow = false; // columnHeaders = string.Format(format, builder.Column.ToArray()); // } // else // { // skipFirstRow = true; // columnHeaders = string.Format(format, builder.Rows.First().ToArray()); // } // // create the divider // var divider = Regex.Replace(columnHeaders, @"[^|]", '-'.ToString()); // strBuilder.AppendLine(columnHeaders); // strBuilder.AppendLine(divider); // // add each row // var results = builder.Rows.Skip(skipFirstRow ? 1 : 0).Select(row => string.Format(format, row.ToArray())).ToList(); // results.ForEach(row => strBuilder.AppendLine(row)); // BuildMetaRowsFormat(builder, strBuilder, MetaRowPositions.Bottom); // return strBuilder; //} //private static StringBuilder CreateTableForAlternativeFormat(ConsoleTableBuilder builder) //{ // var strBuilder = new StringBuilder(); // BuildMetaRowsFormat(builder, strBuilder, MetaRowPositions.Top); // // create the string format with padding // var format = builder.Format('|'); // if (format == string.Empty) // { // return strBuilder; // } // var skipFirstRow = false; // var columnHeaders = string.Empty; // if (builder.Column != null && builder.Column.Any() && builder.Column.Max(x => (x ?? string.Empty).ToString().Length) > 0) // { // skipFirstRow = false; // columnHeaders = string.Format(format, builder.Column.ToArray()); // } // else // { // skipFirstRow = true; // columnHeaders = string.Format(format, builder.Rows.First().ToArray()); // } // // create the divider // var divider = Regex.Replace(columnHeaders, @"[^|]", '-'.ToString()); // var dividerPlus = divider.Replace("|", "+"); // strBuilder.AppendLine(dividerPlus); // strBuilder.AppendLine(columnHeaders); // // add each row // var results = builder.Rows.Skip(skipFirstRow ? 1 : 0).Select(row => string.Format(format, row.ToArray())).ToList(); // foreach (var row in results) // { // strBuilder.AppendLine(dividerPlus); // strBuilder.AppendLine(row); // } // strBuilder.AppendLine(dividerPlus); // BuildMetaRowsFormat(builder, strBuilder, MetaRowPositions.Bottom); // return strBuilder; //} private static List <string> BuildMetaRowsFormat(ConsoleTableBuilder builder, MetaRowPositions position) { var result = new List <string>(); switch (position) { case MetaRowPositions.Top: if (builder.TopMetadataRows.Any()) { foreach (var item in builder.TopMetadataRows) { if (item.Value != null) { result.Add(item.Value.Invoke(builder)); } } } break; case MetaRowPositions.Bottom: if (builder.BottomMetadataRows.Any()) { foreach (var item in builder.BottomMetadataRows) { if (item.Value != null) { result.Add(item.Value.Invoke(builder)); } } } break; default: break; } return(result); }
private static StringBuilder BuildMetaRowsFormat(ConsoleTableBuilder builder, StringBuilder stringBuilder, MetaRowPositions position) { switch (position) { case MetaRowPositions.Top: if (builder.TopMetadataRows.Any()) { foreach (var item in builder.TopMetadataRows) { stringBuilder.AppendLine(item.Value); } } break; case MetaRowPositions.Bottom: if (builder.BottomMetadataRows.Any()) { foreach (var item in builder.BottomMetadataRows) { stringBuilder.AppendLine(item.Value); } } break; default: break; } return(stringBuilder); }