fixed alternating highlighting, now looks reasonable

This commit is contained in:
2023-11-22 10:30:40 +01:00
parent 3c910ca08f
commit 811173ddb4
3 changed files with 46 additions and 15 deletions

View File

@@ -55,8 +55,10 @@ type Config struct {
FIXME: make configurable somehow, config file or ENV
see https://github.com/gookit/color.
*/
ColorStyle color.Style
HighlightStyle color.Style
ColorStyle color.Style
HighlightStyle color.Style
NoHighlightStyle color.Style
HighlightHdrStyle color.Style
NoColor bool
@@ -114,7 +116,9 @@ func Colors() map[color.Level]map[string]color.Color {
color.LevelRgb: {
// FIXME: maybe use something nicer
"bg": color.BgLightGreen, "fg": color.FgWhite,
"hlbg": color.BgBlue, "hlfg": color.FgWhite,
"hlbg": color.BgHiGreen, "hlfg": color.FgWhite,
"nohlbg": color.BgWhite, "nohlfg": color.FgLightGreen,
"hdrbg": color.BgBlue, "hdrfg": color.FgWhite,
},
}
}
@@ -128,6 +132,8 @@ func (c *Config) DetermineColormode() {
colors := Colors()
c.ColorStyle = color.New(colors[level]["bg"], colors[level]["fg"])
c.HighlightStyle = color.New(colors[level]["hlbg"], colors[level]["hlfg"])
c.NoHighlightStyle = color.New(colors[level]["nohlbg"], colors[level]["nohlfg"])
c.HighlightHdrStyle = color.New(colors[level]["hdrbg"], colors[level]["hdrfg"])
}
}

View File

@@ -154,24 +154,42 @@ func trimRow(row []string) []string {
}
func colorizeData(c cfg.Config, output string) string {
if len(c.Pattern) > 0 && !c.NoColor && color.IsConsole(os.Stdout) {
r := regexp.MustCompile("(" + c.Pattern + ")")
return r.ReplaceAllStringFunc(output, func(in string) string {
return c.ColorStyle.Sprint(in)
})
} else if c.UseHighlight && color.IsConsole(os.Stdout) {
if c.UseHighlight && color.IsConsole(os.Stdout) {
highlight := true
colorized := ""
first := true
for _, line := range strings.Split(output, "\n") {
if highlight {
line = c.HighlightStyle.Sprint(line)
if first {
// we need to add two spaces to the header line
// because tablewriter omits them for some reason
// in pprint mode. This doesn't matter as long as
// we don't use colorization. But with colors the
// missing spaces can be seen.
if c.OutputMode == cfg.Ascii {
line = line + " "
}
line = c.HighlightHdrStyle.Sprint(line)
first = false
} else {
line = c.HighlightStyle.Sprint(line)
}
} else {
line = c.NoHighlightStyle.Sprint(line)
}
highlight = !highlight
colorized += line + "\n"
}
return colorized
} else if len(c.Pattern) > 0 && !c.NoColor && color.IsConsole(os.Stdout) {
r := regexp.MustCompile("(" + c.Pattern + ")")
return r.ReplaceAllStringFunc(output, func(in string) string {
return c.ColorStyle.Sprint(in)
})
} else {
return output
}

View File

@@ -20,15 +20,16 @@ package lib
import (
"encoding/csv"
"fmt"
"github.com/gookit/color"
"github.com/olekukonko/tablewriter"
"github.com/tlinden/tablizer/cfg"
"gopkg.in/yaml.v3"
"io"
"log"
"regexp"
"strconv"
"strings"
"github.com/gookit/color"
"github.com/olekukonko/tablewriter"
"github.com/tlinden/tablizer/cfg"
"gopkg.in/yaml.v3"
)
func printData(w io.Writer, c cfg.Config, data *Tabdata) {
@@ -148,9 +149,15 @@ func printAsciiData(w io.Writer, c cfg.Config, data *Tabdata) {
table.SetRowSeparator("")
table.SetHeaderLine(false)
table.SetBorder(false)
table.SetTablePadding("\t") // pad with tabs
table.SetNoWhiteSpace(true)
if !c.UseHighlight {
// the tabs destroy the highlighting
table.SetTablePadding("\t") // pad with tabs
} else {
table.SetTablePadding(" ")
}
table.Render()
output(w, color.Sprint(colorizeData(c, tableString.String())))
}