aboutsummaryrefslogtreecommitdiffstats
path: root/util/text/text.go
diff options
context:
space:
mode:
authorYang Zhang <yang_zhang@iapcm.ac.cn>2018-12-31 08:53:11 +0800
committerYang Zhang <yang_zhang@iapcm.ac.cn>2018-12-31 08:53:11 +0800
commita0ae5fc5349063fb9b0a3de04be555b3757c1f4b (patch)
tree134626c3186b0ff0493c41aded97d3525809e289 /util/text/text.go
parentf22f9b7083ff65fb7abe00ea2fb7343a1b68c59d (diff)
downloadgit-bug-a0ae5fc5349063fb9b0a3de04be555b3757c1f4b.tar.gz
Fix incorrect wrap of mixed wide and ascii chars
Diffstat (limited to 'util/text/text.go')
-rw-r--r--util/text/text.go14
1 files changed, 11 insertions, 3 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
}