mirror of
https://codeberg.org/scip/tablizer.git
synced 2026-02-04 10:20:59 +01:00
add output colorization support using regexes
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright © 2022-2025 Thomas von Dein
|
||||
Copyright © 2022-2026 Thomas von Dein
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -22,8 +22,8 @@ import (
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
"github.com/lithammer/fuzzysearch/fuzzy"
|
||||
"codeberg.org/scip/tablizer/cfg"
|
||||
"github.com/lithammer/fuzzysearch/fuzzy"
|
||||
)
|
||||
|
||||
/*
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright © 2022 Thomas von Dein
|
||||
Copyright © 2022-2026 Thomas von Dein
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -26,8 +26,8 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gookit/color"
|
||||
"codeberg.org/scip/tablizer/cfg"
|
||||
"github.com/gookit/color"
|
||||
)
|
||||
|
||||
func findindex(s []int, e int) (int, bool) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright © 2022-2025 Thomas von Dein
|
||||
Copyright © 2022-2026 Thomas von Dein
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -23,6 +23,7 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"text/template"
|
||||
@@ -75,8 +76,8 @@ func printData(writer io.Writer, conf cfg.Config, data *Tabdata) {
|
||||
}
|
||||
}
|
||||
|
||||
func output(writer io.Writer, str string) {
|
||||
_, err := fmt.Fprint(writer, str)
|
||||
func output(writer io.Writer, conf cfg.Config, str string) {
|
||||
_, err := fmt.Fprint(writer, colorizeOutput(conf, str))
|
||||
if err != nil {
|
||||
log.Fatalf("failed to print output: %s", err)
|
||||
}
|
||||
@@ -138,7 +139,7 @@ func printOrgmodeData(writer io.Writer, conf cfg.Config, data *Tabdata) {
|
||||
log.Fatalf("Failed to render table: %s", err)
|
||||
}
|
||||
|
||||
output(writer, color.Sprint(colorizeData(conf, tableString.String())))
|
||||
output(writer, conf, color.Sprint(colorizeData(conf, tableString.String())))
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -197,7 +198,7 @@ func printMarkdownData(writer io.Writer, conf cfg.Config, data *Tabdata) {
|
||||
log.Fatalf("Failed to render table: %s", err)
|
||||
}
|
||||
|
||||
output(writer, color.Sprint(colorizeData(conf, tableString.String())))
|
||||
output(writer, conf, color.Sprint(colorizeData(conf, tableString.String())))
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -254,7 +255,7 @@ func printASCIIData(writer io.Writer, conf cfg.Config, data *Tabdata) {
|
||||
log.Fatalf("Failed to render table: %s", err)
|
||||
}
|
||||
|
||||
output(writer, color.Sprint(colorizeData(conf, tableString.String())))
|
||||
output(writer, conf, color.Sprint(colorizeData(conf, tableString.String())))
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -275,7 +276,7 @@ func printExtendedData(writer io.Writer, conf cfg.Config, data *Tabdata) {
|
||||
}
|
||||
}
|
||||
|
||||
output(writer, colorizeData(conf, out))
|
||||
output(writer, conf, colorizeData(conf, out))
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -298,7 +299,7 @@ func printShellData(writer io.Writer, data *Tabdata) {
|
||||
}
|
||||
|
||||
// no colorization here
|
||||
output(writer, out)
|
||||
output(writer, cfg.Config{}, out)
|
||||
}
|
||||
|
||||
func printJsonData(writer io.Writer, data *Tabdata) {
|
||||
@@ -327,7 +328,7 @@ func printJsonData(writer io.Writer, data *Tabdata) {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
output(writer, string(jsonstr))
|
||||
output(writer, cfg.Config{}, string(jsonstr))
|
||||
}
|
||||
|
||||
func printYamlData(writer io.Writer, data *Tabdata) {
|
||||
@@ -364,7 +365,7 @@ func printYamlData(writer io.Writer, data *Tabdata) {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
output(writer, string(yamlstr))
|
||||
output(writer, cfg.Config{}, string(yamlstr))
|
||||
}
|
||||
|
||||
func printCSVData(writer io.Writer, conf cfg.Config, data *Tabdata) {
|
||||
@@ -414,3 +415,23 @@ func printTemplateData(writer io.Writer, conf cfg.Config, data *Tabdata) {
|
||||
log.Fatalf("failed to print output: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func colorizeOutput(conf cfg.Config, input string) string {
|
||||
if len(conf.UseColorizers) > 0 && !conf.NoColor && color.IsConsole(os.Stdout) {
|
||||
for _, colorizer := range conf.UseColorizers {
|
||||
// colorize matching parts of the whole output with given color, if the terminal supports it
|
||||
// color may contain fg:bg or just fg. Color definitions see https://github.com/gookit/color
|
||||
input = colorizer.Search.ReplaceAllStringFunc(input, func(in string) string {
|
||||
col := colorizer.Replace
|
||||
if strings.Contains(col, ":") {
|
||||
parts := strings.Split(col, ":")
|
||||
return color.Sprintf(fmt.Sprintf("<fg=%s;bg=%s>%s</>", parts[0], parts[1], in))
|
||||
}
|
||||
|
||||
return color.Sprintf(fmt.Sprintf("<fg=%s>%s</>", col, in))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return input
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user