refactor: add a clean termstyle file for styling
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
package output
|
||||
|
||||
import "fmt"
|
||||
|
||||
const (
|
||||
ansiBold = "\x1b[1m"
|
||||
ansiItalic = "\x1b[3m"
|
||||
ansiReset = "\x1b[0m"
|
||||
)
|
||||
|
||||
type Style struct {
|
||||
bold bool
|
||||
italic bool
|
||||
fg *uint32
|
||||
bg *uint32
|
||||
}
|
||||
|
||||
func NewStyle() Style {
|
||||
return Style{}
|
||||
}
|
||||
|
||||
func (s Style) Bold() Style {
|
||||
s.bold = true
|
||||
return s
|
||||
}
|
||||
|
||||
func (s Style) Italic() Style {
|
||||
s.italic = true
|
||||
return s
|
||||
}
|
||||
|
||||
func (s Style) FG(rgb uint32) Style {
|
||||
s.fg = &rgb
|
||||
return s
|
||||
}
|
||||
|
||||
func (s Style) BG(rgb uint32) Style {
|
||||
s.bg = &rgb
|
||||
return s
|
||||
}
|
||||
|
||||
func (s Style) Apply(text string) string {
|
||||
if !s.bold && !s.italic && s.fg == nil && s.bg == nil {
|
||||
return text
|
||||
}
|
||||
|
||||
style := ""
|
||||
if s.bold {
|
||||
style += ansiBold
|
||||
}
|
||||
if s.italic {
|
||||
style += ansiItalic
|
||||
}
|
||||
if s.fg != nil {
|
||||
style += ansiFG(*s.fg)
|
||||
}
|
||||
if s.bg != nil {
|
||||
style += ansiBG(*s.bg)
|
||||
}
|
||||
|
||||
return style + text + ansiReset
|
||||
}
|
||||
|
||||
func ansiFG(rgb uint32) string {
|
||||
return fmt.Sprintf("\x1b[38;2;%d;%d;%dm", byte(rgb>>16), byte(rgb>>8), byte(rgb))
|
||||
}
|
||||
|
||||
func ansiBG(rgb uint32) string {
|
||||
return fmt.Sprintf("\x1b[48;2;%d;%d;%dm", byte(rgb>>16), byte(rgb>>8), byte(rgb))
|
||||
}
|
||||
Reference in New Issue
Block a user