update Align() method to add '...' at the end when too long | managing special characters
This commit is contained in:
parent
cafd4063a0
commit
340fe26d81
|
@ -36,50 +36,49 @@ func Title(s string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Align prints strings with space padding to align line ends (fixed width)
|
// Align prints strings with space padding to align line ends (fixed width)
|
||||||
func Align(s string) {
|
|
||||||
|
|
||||||
// 1. print string
|
|
||||||
fmt.Printf("%s", s)
|
|
||||||
|
|
||||||
// 2. get actual size
|
|
||||||
size := len(s)
|
|
||||||
|
|
||||||
// 3. remove \033[XYm format characters
|
|
||||||
size -= (len(strings.Split(s, "\033")) - 0) * 6
|
|
||||||
|
|
||||||
// 3. add 1 char for each \033[0m
|
|
||||||
size += len(strings.Split(s, "\033[0m")) - 1
|
|
||||||
|
|
||||||
// 4. print trailing spaces
|
|
||||||
for i := size; i < alignOffset; i++ {
|
|
||||||
fmt.Printf(" ")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// AlignLimited prints strings with space padding to align line ends (fixed width)
|
|
||||||
// also crops the content to add '...' at the end if too long (must have a space
|
// also crops the content to add '...' at the end if too long (must have a space
|
||||||
// at the end)
|
// at the end)
|
||||||
func AlignLimited(s string) {
|
func Align(s string) {
|
||||||
|
|
||||||
// format string
|
// 1. replace tabs with 4 spaces
|
||||||
if len(s) > alignOffset-1 {
|
tabs := strings.Split(s, "\t")
|
||||||
s = fmt.Sprintf("%s... ", s[:alignOffset-4])
|
s = strings.Join(tabs, " ")
|
||||||
|
|
||||||
|
// 1. get real size
|
||||||
|
size := getRealSize(s)
|
||||||
|
|
||||||
|
if size > alignOffset-6 {
|
||||||
|
|
||||||
|
for i, l := 0, len(s); i < l; i++ { // find when real size is right under
|
||||||
|
next := fmt.Sprintf("%s\033[0m… ", s[0:i+1])
|
||||||
|
if getRealSize(next) >= alignOffset-5 {
|
||||||
|
s = next
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
size = getRealSize(s) - 1
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1. print string
|
// 2. print string
|
||||||
fmt.Printf("%s", s)
|
fmt.Printf("%s", s)
|
||||||
|
|
||||||
// 2. get actual size
|
// 3. print trailing spaces
|
||||||
size := len(s)
|
|
||||||
|
|
||||||
// 3. remove \033[XYm format characters
|
|
||||||
size -= (len(strings.Split(s, "\033")) - 0) * 6
|
|
||||||
|
|
||||||
// 3. add 1 char for each \033[0m
|
|
||||||
size += len(strings.Split(s, "\033[0m")) - 1
|
|
||||||
|
|
||||||
// 4. print trailing spaces
|
|
||||||
for i := size; i < alignOffset; i++ {
|
for i := size; i < alignOffset; i++ {
|
||||||
fmt.Printf(" ")
|
fmt.Printf(" ")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getRealSize returns the real size escaping special characters
|
||||||
|
func getRealSize(s string) int {
|
||||||
|
// 1. get actual size
|
||||||
|
size := len(s)
|
||||||
|
|
||||||
|
// 2. remove \033[XYm format characters
|
||||||
|
size -= 7 * len(strings.Split(s, "\033"))
|
||||||
|
|
||||||
|
// 3. compensate 1 char for \033[0m
|
||||||
|
size += len(strings.Split(s, "\033[0m"))
|
||||||
|
|
||||||
|
return size
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue