public static bool TryRender(TextTableData data, TextTableRenderOptions options, out string result)
 {
     try
     {
         result = Render(data, options);
         return(true);
     }
     catch
     {
         result = string.Empty;
     }
     return(false);
 }
        public static string Render(TextTableData data, TextTableRenderOptions options)
        {
            var columns_width = data.
                                Columns.
                                Select(c => c.Width).
                                ToArray();
            var ow = (options.PaddingLeft > 0 ? options.PaddingLeft : 0) +
                     (options.PaddingRight > 0 ? options.PaddingRight : 0);

            for (int i = 0; i < columns_width.Length; i++)
            {
                columns_width[i] += ow;
            }
            // Обновление ширины столбцов при необходимости
            if (options.MaxCellWidth > 0)
            {
                for (int i = 0; i < columns_width.Length; i++)
                {
                    if (columns_width[i] > options.MaxCellWidth)
                    {
                        columns_width[i] = options.MaxCellWidth;
                    }
                }
            }
            else if (options.MaxTableWidth > 0)
            {
                int index = 0;
                while (GetTableWidth(options, columns_width) > options.MaxTableWidth)
                {
                    for (int i = 0; i < columns_width.Length; i++)
                    {
                        if (columns_width[i] > columns_width[index])
                        {
                            index = i;
                        }
                    }
                    columns_width[index]--;
                }
            }
            var table_width = GetTableWidth(options, columns_width);

            var table = new StringBuilder();
            // Отрисовка таблицы
            var rows = data.Rows.ToArray();

            for (int i = 0; i < rows.Length; i++)
            {
                DrawRowSeparator(table, options, table_width, i, i == 0, false, columns_width);
                var row_render = RenderRow(rows[i], options, columns_width);
                foreach (var line in row_render)
                {
                    int c = 0;
                    for (; c < columns_width.Length; c++)
                    {
                        DrawColumnSeparator(table, options, c);
                        table.Append(line[c]);
                    }
                    DrawColumnSeparator(table, options, c);
                    table.AppendLine();
                }
            }
            DrawRowSeparator(table, options, table_width, data.Rows.Count(), false, true, columns_width);
            return(table.ToString());
        }