mirror of
				https://github.com/KevinMidboe/motdGOi.git
				synced 2025-10-29 17:50:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	"errors"
 | |
| 	"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")
 | |
| 	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() {
 | |
| 	// Parse the flags
 | |
| 	flag.Parse()
 | |
| 
 | |
| 	// Validate and log the error
 | |
| 	err := validate()
 | |
| 	if err != nil {
 | |
| 		log.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	// Create objects
 | |
| 	ascii := figlet4go.NewAsciiRender()
 | |
| 	options := figlet4go.NewRenderOptions()
 | |
| 
 | |
| 	// Load fonts
 | |
| 	if *fontpath != "" {
 | |
| 		ascii.LoadFont(*fontpath)
 | |
| 	}
 | |
| 
 | |
| 	// Set the font
 | |
| 	options.FontName = *font
 | |
| 
 | |
| 	// Set colors
 | |
| 	if *colors != "" {
 | |
| 		options.FontColor = getColorSlice(*colors)
 | |
| 	}
 | |
| 
 | |
| 	// Render the string
 | |
| 	renderStr, err := ascii.RenderOpts(*str, options)
 | |
| 	if err != nil {
 | |
| 		log.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	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 {
 | |
| 		switch c {
 | |
| 		case "black":
 | |
| 			colors[i] = color.FgBlack
 | |
| 		case "red":
 | |
| 			colors[i] = color.FgRed
 | |
| 		case "green":
 | |
| 			colors[i] = color.FgGreen
 | |
| 		case "yellow":
 | |
| 			colors[i] = color.FgYellow
 | |
| 		case "blue":
 | |
| 			colors[i] = color.FgBlue
 | |
| 		case "magenta":
 | |
| 			colors[i] = color.FgMagenta
 | |
| 		case "cyan":
 | |
| 			colors[i] = color.FgCyan
 | |
| 		case "white":
 | |
| 			colors[i] = color.FgWhite
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return colors
 | |
| }
 | |
| 
 | |
| // Validate if all required options are given
 | |
| // flag.Parse() must be called before this
 | |
| func validate() error {
 | |
| 	if *str == "" {
 | |
| 		return errors.New("No string given")
 | |
| 	}
 | |
| 	return nil
 | |
| }
 |