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_test.go. All files
@@ -109,6 +109,27 @@ func TestRepeatToFill(t *testing.T) { if RepeatToFill("abcde", 10, 42) != strings.Repeat("abcde", 4)+"abcde"[:2] { t.Error("Expected:", strings.Repeat("abcde", 4)+"abcde"[:2]) }++ // Should not cut a grapheme cluster in half+ for _, test := range []struct {+ str string+ limit int+ expected string+ }{+ {"a\u0301b", 1, "a\u0301"},+ {"a\u0301b", 3, "a\u0301ba\u0301"},+ {"a\u0301b", 4, "a\u0301ba\u0301b"},+ {"a\u4e00", 2, "a"},+ {"a\u4e00", 4, "a\u4e00a"},+ {"-\U0001f468\u200d\U0001f469\u200d\U0001f467", 1, "-"},+ {"-\U0001f468\u200d\U0001f469\u200d\U0001f467", 2, "-"},+ {"-\U0001f468\u200d\U0001f469\u200d\U0001f467", 4, "-\U0001f468\u200d\U0001f469\u200d\U0001f467-"},+ } {+ actual := RepeatToFill(test.str, StringWidth(test.str), test.limit)+ if actual != test.expected {+ t.Errorf("Expected: %q, actual: %q", test.expected, actual)+ }+ } } func TestStringWidth(t *testing.T) {