From 07d9f1840494924dd6ca713493dd3d630e9ad721 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 5 Feb 2025 00:30:29 +0200 Subject: initial generic table --- internal/table/render.go | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 internal/table/render.go (limited to 'internal/table/render.go') diff --git a/internal/table/render.go b/internal/table/render.go new file mode 100644 index 0000000..edac866 --- /dev/null +++ b/internal/table/render.go @@ -0,0 +1,57 @@ +package table + +import ( + "fmt" + "strings" +) + +type render struct { + tab *Table + lineLen int + separator string +} + +func newRender(tab *Table) render { + r := render{ + tab: tab, + lineLen: len(tab.lengths) + 1, + } + + var separator strings.Builder + + for _, len := range tab.lengths { + separator.WriteString("+") + separator.WriteString(strings.Repeat("-", len+2)) + r.lineLen += len + 3 + } + + separator.WriteString("+\n") + r.separator = separator.String() + + return r +} + +func (r render) String() string { + var sb strings.Builder + + sb.WriteString(r.separator) + r.writeRow(&sb, r.tab.headers) + + sb.WriteString(r.separator) + for _, row := range r.tab.rows { + r.writeRow(&sb, row) + } + sb.WriteString(r.separator) + + return sb.String() +} + +func (r render) writeRow(sb *strings.Builder, row []string) { + for i, col := range row { + sb.WriteString(fmt.Sprintf("| %s ", col)) + for j := len(col); j < r.tab.lengths[i]; j++ { + sb.WriteString(" ") + } + } + sb.WriteString("|\n") +} -- cgit v1.2.3