mirror of
				https://github.com/KevinMidboe/motdGOi.git
				synced 2025-10-29 17:50:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			110 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.1 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 {
 | 
						|
		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 {
 | 
						|
	if *str == "" {
 | 
						|
		return errors.New("No string given")
 | 
						|
	}
 | 
						|
	return nil
 | 
						|
}
 |