From cbb68ca3b16b7af8f07220111fb380a0b4db43ce Mon Sep 17 00:00:00 2001 From: probandula Date: Thu, 3 Nov 2016 09:36:49 +0100 Subject: [PATCH] better parsers --- README.md | 20 +++++++++++++++++++- cmd/figlet4go/figlet4go.go | 17 +++++------------ parser.go | 20 ++++++++++++++++---- render.go | 3 ++- 4 files changed, 42 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 65625fb..d19f5b9 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,22 @@ renderStr, _ := ascii.RenderOpts("Hello Fonts", options) fmt.Print(renderStr) ``` +### Other parser +A Parser can be set through the `GetParser` function with a valid key +```go +import "github.com/probandula/figlet4go" + +// ... + +ascii := figlet4go.NewAsciiRender() + +options := figlet4go.NewRenderOptions() +options.Parser = figlet4go.GetParser("html") + +renderStr, _ := ascii.RenderOpts("Hello Fonts", options) +fmt.Print(renderStr) +``` + ## Parsers There a currently these Parsers available: @@ -119,5 +135,7 @@ Other fonts can mainly be found on [figlet](http://www.figlet.org). You have to - [x] Colors in the cli client - [x] No dependencies (fatih/color) - [x] Truecolor support -- [ ] More parsers (HTML) +- [x] More parsers (HTML) +- [x] Better parsers (maybe stored in a map) +- [ ] Pointer-Value standarization - [ ] Tests diff --git a/cmd/figlet4go/figlet4go.go b/cmd/figlet4go/figlet4go.go index c05d061..69914e0 100644 --- a/cmd/figlet4go/figlet4go.go +++ b/cmd/figlet4go/figlet4go.go @@ -37,7 +37,11 @@ func main() { options.FontName = *font // Set the parser - options.Parser = getParser(*parser) + p, err := figlet4go.GetParser(*parser) + if err != nil { + p, _ = figlet4go.GetParser("terminal") + } + options.Parser = *p // Set colors if *colors != "" { @@ -53,17 +57,6 @@ func main() { fmt.Print(renderStr) } -// Get the parser for given flag argument -func getParser(parserStr string) figlet4go.Parser { - switch parserStr { - case "html": - return figlet4go.ParserHTML - // Terminal parser is default - default: - return figlet4go.ParserTerminal - } -} - // Get a slice with colors to give to the RenderOptions // Splits the given string with the separator ";" func getColorSlice(colorStr string) []figlet4go.Color { diff --git a/parser.go b/parser.go index 682f3f4..8a7d75d 100644 --- a/parser.go +++ b/parser.go @@ -1,5 +1,7 @@ package figlet4go +import "errors" + // Parser stores some output specific stuff type Parser struct { // Name used for switching in colors.go @@ -14,9 +16,19 @@ type Parser struct { Replaces map[string]string } -var ( +var parsers map[string]Parser = map[string]Parser { + // Default terminal parser - ParserTerminal Parser = Parser{"terminal", "", "", "\n", nil} + "terminal": Parser{"terminal", "", "", "\n", nil}, // Parser for HTML code - ParserHTML Parser = Parser{"html", "", "", "
", map[string]string{" ": " "}} -) + "html": Parser{"html", "", "", "
", map[string]string{" ": " "}}, +} + +// GetParser returns a parser by its key +func GetParser(key string) (*Parser, error) { + parser, ok := parsers[key] + if !ok { + return nil, errors.New("Invalid parser key: " + key) + } + return &parser, nil +} \ No newline at end of file diff --git a/render.go b/render.go index 200ca0e..2006bd6 100644 --- a/render.go +++ b/render.go @@ -14,9 +14,10 @@ type RenderOptions struct { // NewRenderOptions creates new RenderOptions // Sets the default font name func NewRenderOptions() *RenderOptions { + p, _ := GetParser("terminal") return &RenderOptions{ FontName: defaultFont, - Parser: ParserTerminal, + Parser: *p, } }