aboutsummaryrefslogblamecommitdiffstats
path: root/util/text/left_padded.go
blob: 24bd4d09268f3be98c205ac8a49e367aa89ad756 (plain) (tree)
1
2
3
4
5
6
7
8
9
            

        
               
             
                                       
                 

 

                                                                              
                                                              
                                   
 
                                               
                                         
                                      
                                                                           

                                                                     

         

                                             
                          
         
 














                                                        
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()
}