code: 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")
  }
docs: // String returns the string representation of the row