Example #1
0
        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);
        }
Example #2
0
        //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);
        }