private string[] GetTextLineParts(TextColumnsDataSpecs specs, int rowIndex, int lineIndex) { var rowTextArray = new string[ColumnsCount]; for (var columnIndex = 0; columnIndex < ColumnsCount; columnIndex++) { var columnData = specs.LinesMatrix[columnIndex]; var columnAlignment = GetColumnAlignment(columnIndex); var columnWidth = specs.ColumnWidths[columnIndex]; if (rowIndex >= columnData.Length) { rowTextArray[columnIndex] = new string(' ', columnWidth); continue; } var rowData = columnData[rowIndex]; var rowAlignment = GetRowAlignment(rowIndex); if ( (rowAlignment == TextRowAlignment.Top && lineIndex >= rowData.Length) || (rowAlignment == TextRowAlignment.Bottom && lineIndex < specs.RowHeights[rowIndex] - rowData.Length) ) { rowTextArray[columnIndex] = new string(' ', columnWidth); continue; } var lineText = rowAlignment == TextRowAlignment.Top ? rowData[lineIndex] : rowData[lineIndex - (specs.RowHeights[rowIndex] - rowData.Length)]; rowTextArray[columnIndex] = columnAlignment == TextColumnAlignment.Right ? lineText.PadLeft(columnWidth) : lineText.PadRight(columnWidth); } return(rowTextArray); }
public string GenerateText() { var tableSpecs = new TextColumnsDataSpecs(_columnsData); var s = new StringBuilder(); for (var rowIndex = 0; rowIndex < tableSpecs.RowsCount; rowIndex++) { var rowHeight = tableSpecs.RowHeights[rowIndex]; for (var lineIndex = 0; lineIndex < rowHeight; lineIndex++) { s.AppendLine( GetTextLineParts(tableSpecs, rowIndex, lineIndex) .Concatenate(ColumnSeparator ?? string.Empty) ); } } s.Length -= Environment.NewLine.Length; return(s.ToString()); }