From c39b173cd6ff12abb5954da3044fcd54bbda4f6e Mon Sep 17 00:00:00 2001 From: Dan Anglin Date: Sat, 24 Feb 2024 17:46:00 +0000 Subject: [PATCH] fix: add proper support for multi-line wrapping --- internal/model/account.go | 2 +- internal/model/status.go | 2 +- internal/model/timeline.go | 2 +- internal/utilities/utilities.go | 28 ++++++++++++++++++++++++---- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/internal/model/account.go b/internal/model/account.go index 8884338..1dae43f 100644 --- a/internal/model/account.go +++ b/internal/model/account.go @@ -102,7 +102,7 @@ func (a Account) String() string { utilities.FieldFormat("Following:"), a.FollowingCount, utilities.FieldFormat("Statuses:"), a.StatusCount, utilities.HeaderFormat("BIOGRAPHY:"), - utilities.WrapLine(utilities.StripHTMLTags(a.Note), "\n ", 80), + utilities.WrapLines(utilities.StripHTMLTags(a.Note), "\n ", 80), utilities.HeaderFormat("METADATA:"), metadata, utilities.HeaderFormat("ACCOUNT URL:"), diff --git a/internal/model/status.go b/internal/model/status.go index 15a1364..48a5bca 100644 --- a/internal/model/status.go +++ b/internal/model/status.go @@ -182,7 +182,7 @@ func (s Status) String() string { utilities.DisplayNameFormat(s.Account.DisplayName), s.Account.Username, utilities.HeaderFormat("CONTENT:"), - s.Text, + utilities.WrapLines(s.Text, "\n ", 80), utilities.HeaderFormat("STATUS ID:"), s.ID, utilities.HeaderFormat("CREATED AT:"), diff --git a/internal/model/timeline.go b/internal/model/timeline.go index 9d136dc..7f3480f 100644 --- a/internal/model/timeline.go +++ b/internal/model/timeline.go @@ -20,7 +20,7 @@ func (t Timeline) String() string { for _, status := range t.Statuses { builder.WriteString(utilities.DisplayNameFormat(status.Account.DisplayName) + " (@" + status.Account.Username + ")\n\n") - builder.WriteString(utilities.WrapLine(status.Text, "\n", 80) + "\n\n") + builder.WriteString(utilities.WrapLines(status.Text, "\n", 80) + "\n\n") builder.WriteString(utilities.FieldFormat("ID:") + " " + status.ID + "\t" + utilities.FieldFormat("Created at:") + " " + utilities.FormatTime(status.CreatedAt) + "\n") builder.WriteString(separator + "\n") } diff --git a/internal/utilities/utilities.go b/internal/utilities/utilities.go index 69f5e56..d595ed3 100644 --- a/internal/utilities/utilities.go +++ b/internal/utilities/utilities.go @@ -10,10 +10,10 @@ import ( ) const ( - reset = "\033[0m" - boldblue = "\033[34;1m" + reset = "\033[0m" + boldblue = "\033[34;1m" boldmagenta = "\033[35;1m" - green = "\033[32m" + green = "\033[32m" ) func StripHTMLTags(text string) string { @@ -32,7 +32,27 @@ func StripHTMLTags(text string) string { } } -func WrapLine(line, separator string, charLimit int) string { +func WrapLines(text, separator string, charLimit int) string { + lines := strings.Split(text, "\n") + + if len(lines) == 1 { + return wrapLine(lines[0], separator, charLimit) + } + + var builder strings.Builder + + for i, line := range lines { + builder.WriteString(wrapLine(line, separator, charLimit)) + + if i < len(lines)-1 { + builder.WriteString(separator) + } + } + + return builder.String() +} + +func wrapLine(line, separator string, charLimit int) string { if len(line) <= charLimit { return line }