enbas/internal/utilities/wrap.go
Dan Anglin a7e72ac2c4
chore: split utility functions
Split utility functions into separate files.
2024-05-29 18:33:16 +01:00

55 lines
1 KiB
Go

package utilities
import (
"strings"
"unicode"
)
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
}
leftcursor, rightcursor := 0, 0
var builder strings.Builder
for rightcursor < (len(line) - charLimit) {
rightcursor += charLimit
for !unicode.IsSpace(rune(line[rightcursor-1])) && (rightcursor > leftcursor) {
rightcursor--
}
if rightcursor == leftcursor {
rightcursor = leftcursor + charLimit
}
builder.WriteString(line[leftcursor:rightcursor] + separator)
leftcursor = rightcursor
}
builder.WriteString(line[rightcursor:])
return builder.String()
}