From 9ddb15d7d4e57cb40d0b05c086b4f44c5fb38e52 Mon Sep 17 00:00:00 2001 From: probandula Date: Wed, 26 Oct 2016 20:01:16 +0200 Subject: [PATCH] color support for cli client --- README.md | 2 +- cmd/figlet4go/figlet4go.go | 67 ++++++++++++++++++++++++++++++++++---- 2 files changed, 61 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 01c4b9e..7f790da 100644 --- a/README.md +++ b/README.md @@ -83,4 +83,4 @@ Other fonts can mainly be found on [figlet](http://www.figlet.org). You have to - [x] Cli client - [ ] automatic the perfect char margin - [ ] Linebreak possible? -- [ ] Colors in the cli client \ No newline at end of file +- [x] Colors in the cli client \ No newline at end of file diff --git a/cmd/figlet4go/figlet4go.go b/cmd/figlet4go/figlet4go.go index 5c24b7f..7c5a25c 100644 --- a/cmd/figlet4go/figlet4go.go +++ b/cmd/figlet4go/figlet4go.go @@ -1,18 +1,20 @@ package main import ( - "fmt" - "flag" - "log" "errors" - _"github.com/fatih/color" + "flag" + "fmt" + "github.com/fatih/color" "github.com/probandula/figlet4go" + "log" + "strings" ) var ( - str *string = flag.String("str", "", "String to be converted with FIGlet") - font *string = flag.String("font", "", "Font name to use") + str *string = flag.String("str", "", "String to be converted with FIGlet") + font *string = flag.String("font", "", "Font name to use") fontpath *string = flag.String("fontpath", "", "Font path to load fonts from") + colors *string = flag.String("colors", "", "Character colors seperated by ';'\n\tPossible colors: black, red, green, yellow, blue, magenta, cyan, white") ) func main() { @@ -37,6 +39,10 @@ func main() { // Set the font options.FontName = *font + // Set colors + if *colors != "" { + options.FontColor = getColorSlice(*colors) + } // Render the string renderStr, err := ascii.RenderOpts(*str, options) @@ -47,6 +53,53 @@ func main() { fmt.Println(renderStr) } +// Get a slice with colors to give to the RenderOptions +// Splits the given string with the seperator ";" +func getColorSlice(colorStr string) []color.Attribute { + + givenColors := strings.Split(colorStr, ";") + + colors := make([]color.Attribute, len(givenColors)) + + for i, c := range givenColors { + if c == "black" { + colors[i] = color.FgBlack + continue + } + if c == "red" { + colors[i] = color.FgRed + continue + } + if c == "green" { + colors[i] = color.FgGreen + continue + } + if c == "yellow" { + colors[i] = color.FgYellow + continue + } + if c == "blue" { + colors[i] = color.FgBlue + continue + } + if c == "magenta" { + colors[i] = color.FgMagenta + continue + } + if c == "cyan" { + colors[i] = color.FgCyan + continue + } + if c == "white" { + colors[i] = color.FgWhite + continue + } + } + + return colors + +} + // Validate if all required options are given // flag.Parse() must be called before this func validate() error { @@ -54,4 +107,4 @@ func validate() error { return errors.New("No string given") } return nil -} \ No newline at end of file +}