260913.1 · 961793cf39a1d406d6982586d14e8ba4445a6054
Fix --gap-line cutting a grapheme cluster
RepeatToFill filled the remaining width rune by rune, so a cluster could be split at the right edge. Iterate grapheme clusters instead.
Fix #4920
reading declarations
Changes to src/util/util.go. All files
@@ -105,16 +105,18 @@ func RepeatToFill(str string, length int, limit int) string { rest := limit % length output := strings.Repeat(str, times) if rest > 0 {- for _, r := range str {- rest -= uniseg.StringWidth(string(r))- if rest < 0 {- break- }- output += string(r)- if rest == 0 {+ // Iterate over grapheme clusters so that we don't cut a cluster in half+ end := 0+ graphemes := uniseg.NewGraphemes(str)+ for rest > 0 && graphemes.Next() {+ width := graphemes.Width()+ if width > rest { break }+ rest -= width+ _, end = graphemes.Positions() }+ output += str[:end] } return output }