45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package asciigen
|
||
|
||
import (
|
||
"fmt"
|
||
|
||
figure "github.com/common-nighthawk/go-figure"
|
||
)
|
||
|
||
// TextRenderer реализует Renderer для текстовых баннеров.
|
||
type TextRenderer struct {
|
||
text string
|
||
}
|
||
|
||
func NewTextRenderer(text string) *TextRenderer {
|
||
return &TextRenderer{text: text}
|
||
}
|
||
|
||
func (r *TextRenderer) Previews() ([]Variant, error) {
|
||
fonts := defaultFonts()
|
||
variants := make([]Variant, 0, len(fonts))
|
||
|
||
for _, font := range fonts {
|
||
ascii, err := r.render(TextOptions{Font: font})
|
||
if err != nil {
|
||
return nil, fmt.Errorf("шрифт %q: %w", font, err)
|
||
}
|
||
variants = append(variants, Variant{
|
||
ID: font,
|
||
Label: fmt.Sprintf("Шрифт: %s", font),
|
||
Preview: ascii,
|
||
})
|
||
}
|
||
return variants, nil
|
||
}
|
||
|
||
func (r *TextRenderer) Full(variantID string) (string, error) {
|
||
// Для текста превью и полная версия обычно совпадают — FIGlet не теряет
|
||
// детализацию на превью так, как это происходит с картинкой.
|
||
return r.render(TextOptions{Font: variantID})
|
||
}
|
||
|
||
func (r *TextRenderer) render(opts TextOptions) (string, error) {
|
||
fig := figure.NewFigure(r.text, opts.Font, true)
|
||
return fig.String(), nil
|
||
}
|