code: func (t *Tabulate) wrapCellData() []*TabulateRow {
  	var arr []*TabulateRow
  	var cleanSplit bool
  	var addr int
  	if len(t.Data) == 0 {
  		return arr
  	}
  	next := t.Data[0]
  	for index := 0; index <= len(t.Data); index++ {
  		elements := next.Elements
  		new_elements := make([]string, len(elements))
  
  		for i, e := range elements {
  			if runewidth.StringWidth(e) > t.MaxSize {
  				elements[i] = runewidth.Truncate(e, t.MaxSize, "")
  				cleanSplit, elements[i] = t.splitElement(e)
  				if cleanSplit {
  					//remove the next rune
  					r, w := utf8.DecodeRuneInString(e[len(elements[i]):])
  					if r != 0 && r != 1 {
  						addr = w
  					}
  				} else {
  					addr = 0
  				}
  				new_elements[i] = e[len(elements[i])+addr:]
  				next.Continuos = true
  			}
  		}
  
  		if next.Continuos {
  			arr = append(arr, next)
  			next = &TabulateRow{Elements: new_elements}
  			index--
  		} else if index+1 < len(t.Data) {
  			arr = append(arr, next)
  			next = t.Data[index+1]
  		} else if index >= len(t.Data) {
  			arr = append(arr, next)
  		}
  
  	}
  	return arr
  }
docs: // If string size is larger than t.MaxSize, then split it to multiple cells (downwards)