Files
motdGOi/cmd/motdGO/main.go

127 lines
2.7 KiB
Go

package main
import (
"flag"
"fmt"
"github.com/kevinmidboe/motdGO"
"log"
"os"
"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 separated by ';'\n\tPossible colors: black, red, green, yellow, blue, magenta, cyan, white, or any hexcode (f.e. '885DBA')")
parser *string = flag.String("parser", "terminal", "Parser to use\tPossible parsers: terminal, html")
file *string = flag.String("file", "", "File to write to")
)
func main() {
// Parse the flags
flag.Parse()
// Validate and log the error
validate()
// Create objects
ascii := motdGO.NewAsciiRender()
options := motdGO.NewRenderOptions()
// Load fonts
if *fontpath != "" {
ascii.LoadFont(*fontpath)
}
// Set the font
options.FontName = *font
// Set the parser
p, err := motdGO.GetParser(*parser)
if err != nil {
p, _ = motdGO.GetParser("terminal")
}
options.Parser = *p
// Set colors
if *colors != "" {
options.FontColor = getColorSlice(*colors)
}
// Render the string
renderStr, err := ascii.RenderOpts(*str, options)
formattedStr := strings.ReplaceAll(renderStr, "L", "_")
if err != nil {
log.Fatal(err)
}
// Write to file if given
if *file != "" {
// Create file
f, err := os.Create(*file)
defer f.Close()
if err != nil {
log.Fatal(err)
}
// Write to file
b, err := f.WriteString(formattedStr)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Wrote %d bytes to %s\n", b, *file)
return
}
// Default is printing
fmt.Print(formattedStr)
}
// Get a slice with colors to give to the RenderOptions
// Splits the given string with the separator ";"
func getColorSlice(colorStr string) []motdGO.Color {
givenColors := strings.Split(colorStr, ";")
colors := make([]motdGO.Color, len(givenColors))
for i, c := range givenColors {
switch c {
case "black":
colors[i] = motdGO.ColorBlack
case "red":
colors[i] = motdGO.ColorRed
case "green":
colors[i] = motdGO.ColorGreen
case "yellow":
colors[i] = motdGO.ColorYellow
case "blue":
colors[i] = motdGO.ColorBlue
case "magenta":
colors[i] = motdGO.ColorMagenta
case "cyan":
colors[i] = motdGO.ColorCyan
case "white":
colors[i] = motdGO.ColorWhite
default:
// Try to parse the TrueColor from the string
color, err := motdGO.NewTrueColorFromHexString(c)
if err != nil {
log.Fatal(err)
}
colors[i] = color
}
}
return colors
}
// Validate if all required options are given
// flag.Parse() must be called before this
func validate() {
if *str == "" {
flag.Usage()
os.Exit(1)
}
}