add template output mode

This commit is contained in:
2025-12-08 21:53:44 +01:00
parent 2bb0cdb0af
commit db35d08385
11 changed files with 214 additions and 48 deletions

View File

@@ -25,8 +25,10 @@ import (
"log"
"strconv"
"strings"
"text/template"
"codeberg.org/scip/tablizer/cfg"
"github.com/Masterminds/sprig/v3"
"github.com/gookit/color"
"github.com/olekukonko/tablewriter"
"github.com/olekukonko/tablewriter/renderer"
@@ -66,6 +68,8 @@ func printData(writer io.Writer, conf cfg.Config, data *Tabdata) {
printJsonData(writer, data)
case cfg.CSV:
printCSVData(writer, conf, data)
case cfg.Template:
printTemplateData(writer, conf, data)
default:
printASCIIData(writer, conf, data)
}
@@ -388,3 +392,23 @@ func printCSVData(writer io.Writer, conf cfg.Config, data *Tabdata) {
log.Fatal(err)
}
}
func printTemplateData(writer io.Writer, conf cfg.Config, data *Tabdata) {
tmpl, err := template.New("printer").Funcs(sprig.TxtFuncMap()).Parse(conf.Template)
if err != nil {
log.Fatalf("failed to parse template: %s", err)
}
buf := strings.Builder{}
for line, dict := range data.ToMap() {
err = tmpl.Execute(&buf, dict)
if err != nil {
log.Fatalf("failed to execute template in line %d: %s", line, err)
}
buf.WriteString("\n")
}
fmt.Fprintln(writer, buf.String())
}