mirror of
https://gitee.com/rainbond/Rainbond.git
synced 2024-11-30 18:58:02 +08:00
48 lines
1.4 KiB
Go
48 lines
1.4 KiB
Go
// Copyright 2012 Apcera Inc. All rights reserved.
|
|
|
|
package termtables
|
|
|
|
import "strings"
|
|
|
|
// A Row represents one row of a Table, consisting of some number of Cell
|
|
// items.
|
|
type Row struct {
|
|
cells []*Cell
|
|
}
|
|
|
|
// CreateRow returns a Row where the cells are created as needed to hold each
|
|
// item given; each item can be a Cell or content to go into a Cell created
|
|
// to hold it.
|
|
func CreateRow(items []interface{}) *Row {
|
|
row := &Row{cells: []*Cell{}}
|
|
for _, item := range items {
|
|
row.AddCell(item)
|
|
}
|
|
return row
|
|
}
|
|
|
|
// AddCell adds one item to a row as a new cell, where the item is either a
|
|
// Cell or content to be put into a cell.
|
|
func (r *Row) AddCell(item interface{}) {
|
|
if c, ok := item.(*Cell); ok {
|
|
c.column = len(r.cells)
|
|
r.cells = append(r.cells, c)
|
|
} else {
|
|
r.cells = append(r.cells, createCell(len(r.cells), item, nil))
|
|
}
|
|
}
|
|
|
|
// Render returns a string representing the content of one row of a table, where
|
|
// the Row contains Cells (not Separators) and the representation includes any
|
|
// vertical borders needed.
|
|
func (r *Row) Render(style *renderStyle) string {
|
|
// pre-render and shove into an array... helps with cleanly adding borders
|
|
renderedCells := []string{}
|
|
for _, c := range r.cells {
|
|
renderedCells = append(renderedCells, c.Render(style))
|
|
}
|
|
|
|
// format final output
|
|
return style.BorderY + strings.Join(renderedCells, style.BorderY) + style.BorderY
|
|
}
|