@@ -1,3 +1,4 @@
1+// Package logo renders a Crush wordmark in a stylized way.
1package logo
2package logo
@@ -42,7 +43,14 @@ func Render(version string, compact bool, o Opts) string {
45− crush := renderWord(1, !compact, letterC, letterR, letterU, letterS, letterH)
47+ crush := renderWord(spacing, !compact,
46 crushWidth := lipgloss.Width(crush)
54 crushWidth := lipgloss.Width(crush)
47 b := new(strings.Builder)
55 b := new(strings.Builder)
48 for r := range strings.SplitSeq(crush, "\n") {
56 for r := range strings.SplitSeq(crush, "\n") {
@@ -252,6 +260,42 @@ func letterS(stretch bool) string {
263+// letterSStylized renders the letter S in a stylized way, more so than
264+// [letterS]. It takes an integer that determines how many cells to stretch the
265+// letter. If the stretch is less than 1, it defaults to no stretching.
266+func letterSStylized(stretch bool) string {
267+ // Here's what we're making:
273+ left := heredoc.Doc(`
278+ center := heredoc.Doc(`
283+ right := heredoc.Doc(`
287+ return joinLetterform(
289+ stretchLetterformPart(center, letterformProps{
255// letterU renders the letter U in a stylized way. It takes an integer that
299// letterU renders the letter U in a stylized way. It takes an integer that
256// determines how many cells to stretch the letter. If the stretch is less than
300// determines how many cells to stretch the letter. If the stretch is less than
257// 1, it defaults to no stretching.
301// 1, it defaults to no stretching.