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 }