fix: add proper support for multi-line wrapping

This commit is contained in:
Dan Anglin 2024-02-24 17:46:00 +00:00
parent ae2b5d8036
commit c39b173cd6
Signed by: dananglin
GPG key ID: 0C1D44CFBEE68638
4 changed files with 27 additions and 7 deletions

View file

@ -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:"),

View file

@ -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:"),

View file

@ -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")
}

View file

@ -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
}