pkg/table: Use RuneCountInString for string length

when calculating table cell widths and alignments.
pull/112/head
afh 3 years ago
parent c79d601bbf
commit 235675d597

@ -3,35 +3,39 @@ package align
import (
"fmt"
"strings"
"unicode/utf8"
)
// AlignLeft align left
func AlignLeft(s string, n int) string {
if len(s) > n {
slen := utf8.RuneCountInString(s)
if slen > n {
return s[:n]
}
return fmt.Sprintf("%s%s", s, strings.Repeat(" ", n-len(s)))
return fmt.Sprintf("%s%s", s, strings.Repeat(" ", n-slen))
}
// AlignRight align right
func AlignRight(s string, n int) string {
if len(s) > n {
slen := utf8.RuneCountInString(s)
if slen > n {
return s[:n]
}
return fmt.Sprintf("%s%s", strings.Repeat(" ", n-len(s)), s)
return fmt.Sprintf("%s%s", strings.Repeat(" ", n-slen), s)
}
// AlignCenter align center
func AlignCenter(s string, n int) string {
if len(s) > n {
slen := utf8.RuneCountInString(s)
if slen > n {
return s[:n]
}
pad := (n - len(s)) / 2
pad := (n - slen) / 2
lpad := pad
rpad := n - len(s) - lpad
rpad := n - slen - lpad
return fmt.Sprintf("%s%s%s", strings.Repeat(" ", lpad), s, strings.Repeat(" ", rpad))
}

@ -5,6 +5,7 @@ import (
"io"
"sort"
"strings"
"unicode/utf8"
"github.com/miguelmota/cointop/pkg/pad"
"github.com/miguelmota/cointop/pkg/table/align"
@ -129,7 +130,7 @@ func (t *Table) normalizeColWidthPerc() {
// Format format table
func (t *Table) Format() *Table {
for _, c := range t.cols {
c.width = len(c.name) + 1
c.width = utf8.RuneCountInString(c.name) + 1
if c.minWidth > c.width {
c.width = c.minWidth
}
@ -151,8 +152,9 @@ func (t *Table) Format() *Table {
r.strValues[j] = fmt.Sprintf("%v", v)
}
if len(r.strValues[j]) > t.cols[j].width {
t.cols[j].width = len(r.strValues[j])
runeCount := utf8.RuneCountInString(r.strValues[j])
if runeCount > t.cols[j].width {
t.cols[j].width = runeCount
}
}
}

Loading…
Cancel
Save