// String returns the string value of table func (t *Table) String() string { if len(t.Rows) == 0 { return "" } // determine the width for each column (cell in a row) colwidths := make([]uint, 0) for _, row := range t.Rows { for i, cell := range row.Cells { // resize colwidth array if i+1 > len(colwidths) { colwidths = append(colwidths, 0) } cellwidth := cell.LineWidth() if t.MaxColWidth != 0 && cellwidth > t.MaxColWidth { cellwidth = t.MaxColWidth } if cellwidth > colwidths[i] { colwidths[i] = cellwidth } } } lines := make([]string, 0) for _, row := range t.Rows { row.Separator = t.Separator for i, cell := range row.Cells { cell.Width = colwidths[i] cell.Wrap = t.Wrap } lines = append(lines, row.String()) } return strutil.Join(lines, "\n") }
// String returns the string representation of the row func (r *Row) String() string { // get the max number of lines for each cell var lc int // line count for _, cell := range r.Cells { if clc := len(strings.Split(cell.String(), "\n")); clc > lc { lc = clc } } // allocate a two-dimentional array of cells for each line and add size them cells := make([][]*Cell, lc) for x := 0; x < lc; x++ { cells[x] = make([]*Cell, len(r.Cells)) for y := 0; y < len(r.Cells); y++ { cells[x][y] = &Cell{Width: r.Cells[y].Width} } } // insert each line in a cell as new cell in the cells array for y, cell := range r.Cells { lines := strings.Split(cell.String(), "\n") for x, line := range lines { cells[x][y].Data = line } } // format each line lines := make([]string, lc) for x := range lines { line := make([]string, len(cells[x])) for y := range cells[x] { line[y] = cells[x][y].String() } lines[x] = strutil.Join(line, r.Separator) } return strutil.Join(lines, "\n") }
// String returns the string value of table func (t *Table) String() string { t.mtx.RLock() defer t.mtx.RUnlock() if len(t.Rows) == 0 { return "" } // determine the width for each column (cell in a row) var colwidths []uint for _, row := range t.Rows { for i, cell := range row.Cells { // resize colwidth array if i+1 > len(colwidths) { colwidths = append(colwidths, 0) } cellwidth := cell.LineWidth() if t.MaxColWidth != 0 && cellwidth > t.MaxColWidth { cellwidth = t.MaxColWidth } if cellwidth > colwidths[i] { colwidths[i] = cellwidth } } } var lines []string for _, row := range t.Rows { row.Separator = t.Separator for i, cell := range row.Cells { cell.Width = colwidths[i] cell.Wrap = t.Wrap cell.RightAlign = t.rightAlign[i] } lines = append(lines, row.String()) } return strutil.Join(lines, "\n") }