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()); }