summaryrefslogtreecommitdiff
path: root/internal/table/render.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-02-05 00:30:29 +0200
committerPaul Buetow <paul@buetow.org>2025-02-05 00:30:29 +0200
commit07d9f1840494924dd6ca713493dd3d630e9ad721 (patch)
tree1abb8c8788fc3224e405428d6ff3f27d1fc1a295 /internal/table/render.go
parent35204effbd09bc14e9e2e93b2f99f0f5a0009b23 (diff)
initial generic table
Diffstat (limited to 'internal/table/render.go')
-rw-r--r--internal/table/render.go57
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")
+}