aboutsummaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
Diffstat (limited to 'util')
-rw-r--r--util/text/text.go14
-rw-r--r--util/text/text_test.go13
2 files changed, 23 insertions, 4 deletions
diff --git a/util/text/text.go b/util/text/text.go
index 0447bde1..f8062bc6 100644
--- a/util/text/text.go
+++ b/util/text/text.go
@@ -151,10 +151,18 @@ func softwrapLine(s string, w int) string {
var chunks []string
var word string
wordType := NONE
+ flushWord := func() {
+ chunks = append(chunks, word)
+ word = ""
+ wordType = NONE
+ }
for _, r := range []rune(newStr) {
// A WIDE_CHAR itself constitutes a group.
thisType := runeType(r)
if thisType == WIDE_CHAR {
+ if wordType != NONE {
+ flushWord()
+ }
chunks = append(chunks, string(r))
continue
}
@@ -162,7 +170,7 @@ func softwrapLine(s string, w int) string {
// char with different type or end of string.
if thisType != wordType {
if wordType != NONE {
- chunks = append(chunks, word)
+ flushWord()
}
word = string(r)
wordType = thisType
@@ -171,7 +179,7 @@ func softwrapLine(s string, w int) string {
}
}
if word != "" {
- chunks = append(chunks, word)
+ flushWord()
}
var line string = ""
@@ -187,7 +195,7 @@ func softwrapLine(s string, w int) string {
line += chunks[len(chunks)-1]
chunks = chunks[:len(chunks)-1]
width += wl
- if width == w && len(chunks) > 0{
+ if width == w && len(chunks) > 0 {
line += "\n"
width = 0
}
diff --git a/util/text/text_test.go b/util/text/text_test.go
index 480b1f1f..374ced16 100644
--- a/util/text/text_test.go
+++ b/util/text/text_test.go
@@ -5,7 +5,6 @@ import (
"testing"
)
-
func TestWrap(t *testing.T) {
cases := []struct {
Input, Output string
@@ -102,6 +101,18 @@ func TestWrap(t *testing.T) {
"一只敏捷的\x1b[31m狐\n狸跳过\x1b[0m了一只\n懒狗。",
12,
},
+ // Handle mixed wide and short characters
+ {
+ "敏捷 A quick 的狐狸 fox 跳过 jumps over a lazy 了一只懒狗 dog。",
+ "敏捷 A quick\n的狐狸 fox\n跳过 jumps\nover a lazy\n了一只懒狗\ndog。",
+ 12,
+ },
+ // Handle mixed wide and short characters with color
+ {
+ "敏捷 A \x1b31mquick 的狐狸 fox 跳\x1b0m过 jumps over a lazy 了一只懒狗 dog。",
+ "敏捷 A \x1b31mquick\n的狐狸 fox\n跳\x1b0m过 jumps\nover a lazy\n了一只懒狗\ndog。",
+ 12,
+ },
}
for i, tc := range cases {