mirror of
https://github.com/MichaelMure/git-bug.git
synced 2024-12-15 18:23:08 +03:00
43 lines
971 B
Go
43 lines
971 B
Go
package text
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"github.com/mattn/go-runewidth"
|
|
"strings"
|
|
)
|
|
|
|
// LeftPadMaxLine pads a string on the left by a specified amount and pads the
|
|
// string on the right to fill the maxLength
|
|
func LeftPadMaxLine(text string, length, leftPad int) string {
|
|
var rightPart string = text
|
|
|
|
scrWidth := runewidth.StringWidth(text)
|
|
// truncate and ellipse if needed
|
|
if scrWidth+leftPad > length {
|
|
rightPart = runewidth.Truncate(text, length-leftPad, "…")
|
|
} else if scrWidth+leftPad < length {
|
|
rightPart = runewidth.FillRight(text, length-leftPad)
|
|
}
|
|
|
|
return fmt.Sprintf("%s%s",
|
|
strings.Repeat(" ", leftPad),
|
|
rightPart,
|
|
)
|
|
}
|
|
|
|
// LeftPad left pad each line of the given text
|
|
func LeftPad(text string, leftPad int) string {
|
|
var result bytes.Buffer
|
|
|
|
pad := strings.Repeat(" ", leftPad)
|
|
|
|
for _, line := range strings.Split(text, "\n") {
|
|
result.WriteString(pad)
|
|
result.WriteString(line)
|
|
result.WriteString("\n")
|
|
}
|
|
|
|
return result.String()
|
|
}
|