mirror of
https://github.com/KevinMidboe/motdGO.git
synced 2025-10-29 09:40:23 +00:00
130 lines
2.5 KiB
Go
130 lines
2.5 KiB
Go
package figlet4go
|
|
|
|
import (
|
|
"encoding/hex"
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
// Escape char
|
|
const escape string = "\x1b"
|
|
|
|
// Terminal AnsiColors
|
|
var (
|
|
ColorBlack AnsiColor = AnsiColor{30}
|
|
ColorRed AnsiColor = AnsiColor{31}
|
|
ColorGreen AnsiColor = AnsiColor{32}
|
|
ColorYellow AnsiColor = AnsiColor{33}
|
|
ColorBlue AnsiColor = AnsiColor{34}
|
|
ColorMagenta AnsiColor = AnsiColor{35}
|
|
ColorCyan AnsiColor = AnsiColor{36}
|
|
ColorWhite AnsiColor = AnsiColor{37}
|
|
)
|
|
|
|
// TrueColor lookalikes for displaying AnsiColor f.e. with the HTML parser
|
|
// Colors based on http://clrs.cc/
|
|
// "TrueColorForAnsiColor"
|
|
var tcfac map[AnsiColor]TrueColor = map[AnsiColor]TrueColor{
|
|
ColorBlack: {0, 0, 0},
|
|
ColorRed: {255, 65, 54},
|
|
ColorGreen: {149, 189, 64},
|
|
ColorYellow: {255, 220, 0},
|
|
ColorBlue: {0, 116, 217},
|
|
ColorMagenta: {177, 13, 201},
|
|
ColorCyan: {105, 206, 245},
|
|
ColorWhite: {255, 255, 255},
|
|
}
|
|
|
|
// Color has a pre- and a suffix
|
|
type Color interface {
|
|
getPrefix(p Parser) string
|
|
getSuffix(p Parser) string
|
|
}
|
|
|
|
// AnsiColor representation
|
|
type AnsiColor struct {
|
|
code int
|
|
}
|
|
|
|
// TrueColor with rgb Attributes
|
|
type TrueColor struct {
|
|
r int
|
|
g int
|
|
b int
|
|
}
|
|
|
|
// Prefix for ansi color
|
|
func (tc TrueColor) getPrefix(p Parser) string {
|
|
switch p.Name {
|
|
|
|
case "terminal":
|
|
return fmt.Sprintf("%v[38;2;%d;%d;%dm", escape, tc.r, tc.g, tc.b)
|
|
|
|
case "html":
|
|
return fmt.Sprintf("<span style='color: rgb(%d,%d,%d);'>", tc.r, tc.g, tc.b)
|
|
}
|
|
|
|
return ""
|
|
}
|
|
|
|
// Suffix for ansi color
|
|
func (tc TrueColor) getSuffix(p Parser) string {
|
|
switch p.Name {
|
|
|
|
case "terminal":
|
|
return fmt.Sprintf("%v[0m", escape)
|
|
|
|
case "html":
|
|
return "</span>"
|
|
}
|
|
|
|
return ""
|
|
}
|
|
|
|
// NewTrueColorFromHexString returns a Truecolor object based on a hexadezimal string
|
|
func NewTrueColorFromHexString(c string) (*TrueColor, error) {
|
|
rgb, err := hex.DecodeString(c)
|
|
if err != nil {
|
|
return nil, errors.New("Invalid color given (" + c + ")")
|
|
}
|
|
|
|
return &TrueColor{
|
|
int(rgb[0]),
|
|
int(rgb[1]),
|
|
int(rgb[2]),
|
|
}, nil
|
|
}
|
|
|
|
// Prefix for ansi color
|
|
func (ac AnsiColor) getPrefix(p Parser) string {
|
|
switch p.Name {
|
|
|
|
case "terminal":
|
|
return fmt.Sprintf("%v[0;%dm", escape, ac.code)
|
|
|
|
case "html":
|
|
// Get the TrueColor for the AnsiColor
|
|
tc := tcfac[ac]
|
|
return tc.getPrefix(p)
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
// Suffix for ansi color
|
|
func (ac AnsiColor) getSuffix(p Parser) string {
|
|
switch p.Name {
|
|
|
|
case "terminal":
|
|
return fmt.Sprintf("%v[0m", escape)
|
|
|
|
case "html":
|
|
// Get the TrueColor for the AnsiColor
|
|
tc := tcfac[ac]
|
|
return tc.getSuffix(p)
|
|
}
|
|
|
|
return ""
|
|
}
|