mirror of
				https://github.com/KevinMidboe/motdGOi.git
				synced 2025-10-29 17:50:24 +00:00 
			
		
		
		
	add truecolor support
This commit is contained in:
		
							
								
								
									
										34
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,11 +1,14 @@ | ||||
| # FIGlet for Go | ||||
|  | ||||
| `figlet4go` is a go library forked from [getwe/figlet4go](https://github.com/getwe/figlet4go) which is a port of [FIGlet](http://www.figlet.org/) to Golang.   | ||||
| [](https://goreportcard.com/report/github.com/probandula/figlet4go) | ||||
|  | ||||
| `figlet4go` is a go library forked from  which is a port of [FIGlet](http://www.figlet.org/) to Golang.   | ||||
| With `figlet4go` it's easy to create **ascii text banners** in the command-line or with the given api. | ||||
|  | ||||
|  | ||||
|  | ||||
| [](https://goreportcard.com/report/github.com/probandula/figlet4go) | ||||
|  | ||||
| **This Repository used to be a fork of [getwe/figlet4go](https://github.com/getwe/figlet4go), but changed so much that it's not compatible anymore** | ||||
|  | ||||
| ## Installation | ||||
|  | ||||
| @@ -38,10 +41,10 @@ fmt.Print(renderStr) | ||||
| ``` | ||||
|  | ||||
| ### Colored | ||||
| The colors given in the `[]color.Attribute` slice are repeating if the string is longer than the slice. You have to call the `RenderOpts` instead of the `Render` method to give the Renderer the Options. | ||||
| The colors given in the `[]figlet4go.Color` slice are repeating if the string is longer than the slice. You have to call the `RenderOpts` instead of the `Render` method to give the Renderer the Options.   | ||||
| If you use a `TrueColor` color, you have to ensure that your [terminal supports](https://gist.github.com/XVilka/8346728/) it. | ||||
| ```go | ||||
| import "github.com/probandula/figlet4go" | ||||
| import "github.com/fatih/color" | ||||
|  | ||||
| // ... | ||||
|  | ||||
| @@ -49,10 +52,15 @@ ascii := figlet4go.NewAsciiRender() | ||||
|  | ||||
| // Adding the colors to RenderOptions | ||||
| options := figlet4go.NewRenderOptions() | ||||
| options.FontColor = []color.Attribute{ | ||||
| 	color.FgGreen, | ||||
| 	color.FgYellow, | ||||
| 	color.FgCyan, | ||||
| options.FontColor = []figlet4go.Color{ | ||||
| 	// Colors can be given by default ansi color codes... | ||||
| 	figlet4go.ColorGreen, | ||||
| 	figlet4go.ColorYellow, | ||||
| 	figlet4go.ColorCyan, | ||||
| 	// ...or by an hex string... | ||||
| 	figlet4go.GetTrueColorFromHexString("885DBA"), | ||||
| 	// ...or by an TrueColor object with rgb values | ||||
| 	figlet4go.TrueColor{136, 93, 186}, | ||||
| } | ||||
|  | ||||
| renderStr, _ := ascii.RenderOpts("Hello Colors", options) | ||||
| @@ -67,7 +75,6 @@ import "github.com/probandula/figlet4go" | ||||
|  | ||||
| // ... | ||||
|  | ||||
|  | ||||
| ascii := figlet4go.NewAsciiRender() | ||||
|  | ||||
| options := figlet4go.NewRenderOptions() | ||||
| @@ -76,7 +83,7 @@ options.FontName = "larry3d" | ||||
| // If 'larry3d' wouldn't be included you would have to load your .flf files like that: | ||||
| ascii.LoadFont("/path/to/fonts/") | ||||
|  | ||||
| renderStr, _ := ascii.RenderOpts("Hello Colors", options) | ||||
| renderStr, _ := ascii.RenderOpts("Hello Fonts", options) | ||||
| fmt.Print(renderStr) | ||||
| ``` | ||||
|  | ||||
| @@ -98,7 +105,10 @@ Other fonts can mainly be found on [figlet](http://www.figlet.org). You have to | ||||
|  | ||||
| ## Todo | ||||
| - [x] Cli client | ||||
| - [ ] automatic the perfect char margin | ||||
| - [ ] automatically the perfect char margin | ||||
| - [ ] Linebreak possible? | ||||
| - [x] Colors in the cli client | ||||
| - [ ] No dependencies (fatih/color) | ||||
| - [x] No dependencies (fatih/color) | ||||
| - [x] Truecolor support | ||||
| - [ ] More parsers (HTML) | ||||
| - [ ] Tests | ||||
|   | ||||
							
								
								
									
										15
									
								
								char.go
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								char.go
									
									
									
									
									
								
							| @@ -2,7 +2,6 @@ package figlet4go | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"github.com/fatih/color" | ||||
| ) | ||||
|  | ||||
| // Represents a single ascii character | ||||
| @@ -10,7 +9,7 @@ type asciiChar struct { | ||||
| 	// Slice with the lines of the Char | ||||
| 	Lines []string | ||||
| 	// Color of the char | ||||
| 	Color color.Attribute | ||||
| 	Color Color | ||||
| } | ||||
|  | ||||
| // Creates a new ascii character | ||||
| @@ -28,9 +27,13 @@ func newAsciiChar(font *font, char rune) (*asciiChar, error) { | ||||
|  | ||||
| // Return a line of the char as string with color if set | ||||
| func (char *asciiChar) GetLine(index int) string { | ||||
| 	if char.Color != 0 { | ||||
| 		colorFunc := color.New(char.Color).SprintFunc() | ||||
| 		return colorFunc(char.Lines[index]) | ||||
| 	prefix := "" | ||||
| 	suffix := "" | ||||
|  | ||||
| 	if char.Color != nil { | ||||
| 		prefix = char.Color.getPrefix() | ||||
| 		suffix = char.Color.getSuffix() | ||||
| 	} | ||||
| 	return char.Lines[index] | ||||
|  | ||||
| 	return prefix + char.Lines[index] + suffix | ||||
| } | ||||
|   | ||||
| @@ -3,7 +3,6 @@ package main | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"github.com/fatih/color" | ||||
| 	"github.com/probandula/figlet4go" | ||||
| 	"log" | ||||
| 	"os" | ||||
| @@ -14,7 +13,7 @@ var ( | ||||
| 	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 separated by ';'\n\tPossible colors: black, red, green, yellow, blue, magenta, cyan, white") | ||||
| 	colors   *string = flag.String("colors", "", "Character colors separated by ';'\n\tPossible colors: black, red, green, yellow, blue, magenta, cyan, white, or any hexcode (f.e. '885DBA')") | ||||
| ) | ||||
|  | ||||
| func main() { | ||||
| @@ -52,30 +51,37 @@ func main() { | ||||
|  | ||||
| // Get a slice with colors to give to the RenderOptions | ||||
| // Splits the given string with the separator ";" | ||||
| func getColorSlice(colorStr string) []color.Attribute { | ||||
| func getColorSlice(colorStr string) []figlet4go.Color { | ||||
|  | ||||
| 	givenColors := strings.Split(colorStr, ";") | ||||
|  | ||||
| 	colors := make([]color.Attribute, len(givenColors)) | ||||
| 	colors := make([]figlet4go.Color, len(givenColors)) | ||||
|  | ||||
| 	for i, c := range givenColors { | ||||
| 		switch c { | ||||
| 		case "black": | ||||
| 			colors[i] = color.FgBlack | ||||
| 			colors[i] = figlet4go.ColorBlack | ||||
| 		case "red": | ||||
| 			colors[i] = color.FgRed | ||||
| 			colors[i] = figlet4go.ColorRed | ||||
| 		case "green": | ||||
| 			colors[i] = color.FgGreen | ||||
| 			colors[i] = figlet4go.ColorGreen | ||||
| 		case "yellow": | ||||
| 			colors[i] = color.FgYellow | ||||
| 			colors[i] = figlet4go.ColorYellow | ||||
| 		case "blue": | ||||
| 			colors[i] = color.FgBlue | ||||
| 			colors[i] = figlet4go.ColorBlue | ||||
| 		case "magenta": | ||||
| 			colors[i] = color.FgMagenta | ||||
| 			colors[i] = figlet4go.ColorMagenta | ||||
| 		case "cyan": | ||||
| 			colors[i] = color.FgCyan | ||||
| 			colors[i] = figlet4go.ColorCyan | ||||
| 		case "white": | ||||
| 			colors[i] = color.FgWhite | ||||
| 			colors[i] = figlet4go.ColorWhite | ||||
| 		default: | ||||
| 			// Try to parse the TrueColor from the string | ||||
| 			color, err := figlet4go.GetTrueColorFromHexString(c) | ||||
| 			if err != nil { | ||||
| 				log.Fatal(err) | ||||
| 			} | ||||
| 			colors[i] = color | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|   | ||||
							
								
								
									
										73
									
								
								color.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								color.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| package figlet4go | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"errors" | ||||
| 	"encoding/hex" | ||||
| ) | ||||
|  | ||||
| // Escape char | ||||
| const escape string = "\x1b" | ||||
|  | ||||
| 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} | ||||
| ) | ||||
|  | ||||
| // Every color has a pre- and a suffix | ||||
| type Color interface { | ||||
| 	getPrefix() string | ||||
| 	getSuffix() string | ||||
| } | ||||
|  | ||||
| // Ansi color | ||||
| 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() string { | ||||
| 	return fmt.Sprintf("%v[38;2;%d;%d;%dm", escape, tc.r, tc.g, tc.b) | ||||
| } | ||||
|  | ||||
| // Suffix for ansi color | ||||
| func (tc TrueColor) getSuffix() string { | ||||
| 	return fmt.Sprintf("%v[0m", escape) | ||||
| } | ||||
|  | ||||
| func GetTrueColorFromHexString(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() string { | ||||
| 	return fmt.Sprintf("%v[0;%dm", escape, ac.code) | ||||
| } | ||||
|  | ||||
| // Suffix for ansi color | ||||
| func (ac AnsiColor) getSuffix() string { | ||||
| 	return fmt.Sprintf("%v[0m", escape) | ||||
| } | ||||
| @@ -1,16 +1,12 @@ | ||||
| package figlet4go | ||||
|  | ||||
| import ( | ||||
| 	"github.com/fatih/color" | ||||
| ) | ||||
|  | ||||
| // RenderOptions are used to set color or maybe future | ||||
| // options to the AsciiRenderer | ||||
| type RenderOptions struct { | ||||
| 	// Name of the used font | ||||
| 	FontName string | ||||
| 	// Colors of the font | ||||
| 	FontColor []color.Attribute | ||||
| 	FontColor []Color | ||||
| } | ||||
|  | ||||
| // NewRenderOptions creates new RenderOptions | ||||
|   | ||||
		Reference in New Issue
	
	Block a user