Srender renders the BigText as a string.
()
| 72 | |
| 73 | // Srender renders the BigText as a string. |
| 74 | func (p BigTextPrinter) Srender() (string, error) { |
| 75 | var ret strings.Builder |
| 76 | |
| 77 | if RawOutput { |
| 78 | for _, letter := range p.Letters { |
| 79 | ret.WriteString(letter.String) |
| 80 | } |
| 81 | return ret.String(), nil |
| 82 | } |
| 83 | |
| 84 | var bigLetters Letters |
| 85 | for _, l := range p.Letters { |
| 86 | if val, ok := p.BigCharacters[l.String]; ok { |
| 87 | bigLetters = append(bigLetters, Letter{ |
| 88 | String: val, |
| 89 | Style: l.Style, |
| 90 | RGB: l.RGB, |
| 91 | }) |
| 92 | } |
| 93 | } |
| 94 | |
| 95 | var maxHeight int |
| 96 | |
| 97 | for _, l := range bigLetters { |
| 98 | h := strings.Count(l.String, "\n") |
| 99 | if h > maxHeight { |
| 100 | maxHeight = h |
| 101 | } |
| 102 | } |
| 103 | |
| 104 | for i := 0; i <= maxHeight; i++ { |
| 105 | for _, letter := range bigLetters { |
| 106 | var letterLine string |
| 107 | letterLines := strings.Split(letter.String, "\n") |
| 108 | maxLetterWidth := internal.GetStringMaxWidth(letter.String) |
| 109 | if len(letterLines) > i { |
| 110 | letterLine = letterLines[i] |
| 111 | } |
| 112 | letterLineLength := runewidth.StringWidth(letterLine) |
| 113 | if letterLineLength < maxLetterWidth { |
| 114 | letterLine += strings.Repeat(" ", maxLetterWidth-letterLineLength) |
| 115 | } |
| 116 | |
| 117 | if letter.RGB != (RGB{}) && (color.IsSupportRGBColor() || internal.RunsInCi()) { |
| 118 | ret.WriteString(letter.RGB.Sprint(letterLine)) |
| 119 | } else { |
| 120 | ret.WriteString(letter.Style.Sprint(letterLine)) |
| 121 | } |
| 122 | } |
| 123 | ret.WriteByte('\n') |
| 124 | } |
| 125 | |
| 126 | return ret.String(), nil |
| 127 | } |
| 128 | |
| 129 | // Render prints the BigText to the terminal. |
| 130 | func (p BigTextPrinter) Render() error { |
no test coverage detected