diff options
| author | Paul Buetow <paul@buetow.org> | 2025-02-05 00:30:29 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-02-05 00:30:29 +0200 |
| commit | 07d9f1840494924dd6ca713493dd3d630e9ad721 (patch) | |
| tree | 1abb8c8788fc3224e405428d6ff3f27d1fc1a295 /internal/table/render.go | |
| parent | 35204effbd09bc14e9e2e93b2f99f0f5a0009b23 (diff) | |
initial generic table
Diffstat (limited to 'internal/table/render.go')
| -rw-r--r-- | internal/table/render.go | 57 |
1 files changed, 57 insertions, 0 deletions
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") +} |
