blob: a63fedb9bf9b5872a95a9e5c5f8303fbebd0e792 (
plain) (
tree)
|
|
package text
import (
"bytes"
"strings"
"github.com/mattn/go-runewidth"
)
// LeftPadMaxLine pads a line on the left by a specified amount and pads the
// string on the right to fill the maxLength.
// If the given string is too long, it is truncated with an ellipsis.
// Handle properly terminal color escape code
func LeftPadMaxLine(line string, length, leftPad int) string {
cleaned, escapes := ExtractTermEscapes(line)
scrWidth := runewidth.StringWidth(cleaned)
// truncate and ellipse if needed
if scrWidth+leftPad > length {
cleaned = runewidth.Truncate(cleaned, length-leftPad, "…")
} else if scrWidth+leftPad < length {
cleaned = runewidth.FillRight(cleaned, length-leftPad)
}
rightPart := ApplyTermEscapes(cleaned, escapes)
pad := strings.Repeat(" ", leftPad)
return pad + rightPart
}
// LeftPad left pad each line of the given text
func LeftPadLines(text string, leftPad int) string {
var result bytes.Buffer
pad := strings.Repeat(" ", leftPad)
lines := strings.Split(text, "\n")
for i, line := range lines {
result.WriteString(pad)
result.WriteString(line)
// no additional line break at the end
if i < len(lines)-1 {
result.WriteString("\n")
}
}
return result.String()
}
|