this is a test only for wraplines rune tests
This commit is contained in:
parent
98cfd120ca
commit
38c9721817
67
cui/cui.go
67
cui/cui.go
|
@ -7,6 +7,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strings"
|
"strings"
|
||||||
|
"unicode/utf8"
|
||||||
)
|
)
|
||||||
|
|
||||||
var shapes = map[string]string{
|
var shapes = map[string]string{
|
||||||
|
@ -88,14 +89,14 @@ func Clear(dir string) {
|
||||||
func wrapLines(s []string, consolewidth int) []string {
|
func wrapLines(s []string, consolewidth int) []string {
|
||||||
out := []string{}
|
out := []string{}
|
||||||
for _, ln := range s {
|
for _, ln := range s {
|
||||||
if len(ln) <= consolewidth {
|
if len([]rune(ln)) <= consolewidth {
|
||||||
out = append(out, ln)
|
out = append(out, ln)
|
||||||
} else {
|
} else {
|
||||||
words := strings.SplitAfter(ln, " ")
|
words := strings.SplitAfter(ln, " ")
|
||||||
var subout bytes.Buffer
|
var subout bytes.Buffer
|
||||||
for i, wd := range words {
|
for i, wd := range words {
|
||||||
sublen := subout.Len()
|
sublen := subout.Len()
|
||||||
wdlen := len(wd)
|
wdlen := len([]rune(wd))
|
||||||
if sublen+wdlen <= consolewidth {
|
if sublen+wdlen <= consolewidth {
|
||||||
subout.WriteString(wd)
|
subout.WriteString(wd)
|
||||||
if i == len(words)-1 {
|
if i == len(words)-1 {
|
||||||
|
@ -171,3 +172,65 @@ func HandleAlternateScreen(opt string) {
|
||||||
// to run
|
// to run
|
||||||
_ = cmd.Run()
|
_ = cmd.Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func wrapLines2(s []string, consolewidth int) []string {
|
||||||
|
out := []string{}
|
||||||
|
for _, ln := range s {
|
||||||
|
if utf8.RuneCountInString(ln) <= consolewidth {
|
||||||
|
out = append(out, ln)
|
||||||
|
} else {
|
||||||
|
words := strings.SplitAfter(ln, " ")
|
||||||
|
var subout bytes.Buffer
|
||||||
|
for i, wd := range words {
|
||||||
|
sublen := subout.Len()
|
||||||
|
wdlen := utf8.RuneCountInString(wd)
|
||||||
|
if sublen+wdlen <= consolewidth {
|
||||||
|
subout.WriteString(wd)
|
||||||
|
if i == len(words)-1 {
|
||||||
|
out = append(out, subout.String())
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out = append(out, subout.String())
|
||||||
|
subout.Reset()
|
||||||
|
subout.WriteString(wd)
|
||||||
|
if i == len(words)-1 {
|
||||||
|
out = append(out, subout.String())
|
||||||
|
subout.Reset()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
func wrapLines3(s []string, consolewidth int) []string {
|
||||||
|
out := []string{}
|
||||||
|
for _, ln := range s {
|
||||||
|
if len(ln) <= consolewidth {
|
||||||
|
out = append(out, ln)
|
||||||
|
} else {
|
||||||
|
words := strings.SplitAfter(ln, " ")
|
||||||
|
var subout bytes.Buffer
|
||||||
|
for i, wd := range words {
|
||||||
|
sublen := subout.Len()
|
||||||
|
wdlen := len(wd)
|
||||||
|
if sublen+wdlen <= consolewidth {
|
||||||
|
subout.WriteString(wd)
|
||||||
|
if i == len(words)-1 {
|
||||||
|
out = append(out, subout.String())
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out = append(out, subout.String())
|
||||||
|
subout.Reset()
|
||||||
|
subout.WriteString(wd)
|
||||||
|
if i == len(words)-1 {
|
||||||
|
out = append(out, subout.String())
|
||||||
|
subout.Reset()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
|
@ -81,3 +81,27 @@ func Benchmark_wrapLines(b *testing.B) {
|
||||||
wrapLines(teststring, 20)
|
wrapLines(teststring, 20)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
func Benchmark_wrapLines2(b *testing.B) {
|
||||||
|
teststring := []string{
|
||||||
|
"0123456789",
|
||||||
|
"a really long line that will prolly be wrapped",
|
||||||
|
"a l i n e w i t h a l o t o f w o r d s",
|
||||||
|
"onehugelongwordaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
}
|
||||||
|
b.ResetTimer()
|
||||||
|
for n := 0; n < b.N; n++ {
|
||||||
|
wrapLines2(teststring, 20)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func Benchmark_wrapLines3(b *testing.B) {
|
||||||
|
teststring := []string{
|
||||||
|
"0123456789",
|
||||||
|
"a really long line that will prolly be wrapped",
|
||||||
|
"a l i n e w i t h a l o t o f w o r d s",
|
||||||
|
"onehugelongwordaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
}
|
||||||
|
b.ResetTimer()
|
||||||
|
for n := 0; n < b.N; n++ {
|
||||||
|
wrapLines3(teststring, 20)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue