1
0

fix wrapping on release state

This commit is contained in:
Arpad Ryszka 2025-11-01 22:54:15 +01:00
parent 0569369ef5
commit cc133e8969
2 changed files with 28 additions and 3 deletions

View File

@ -102,7 +102,7 @@ func wrapIndentEdit(first, rest []rune, firstWidth, restWidth int) func(rune, wr
return ret, state return ret, state
} }
if ws && cl > 0 && cl+wl+il+1 > width { if ws && cl > 0 && cl+il+1 > width {
ret = append(ret, '\n') ret = append(ret, '\n')
state.currentLineLength = 0 state.currentLineLength = 0
state.multipleLines = true state.multipleLines = true
@ -135,7 +135,7 @@ func wrapIndentEdit(first, rest []rune, firstWidth, restWidth int) func(rune, wr
} }
} }
func wrapIndentRelease(first, rest []rune) func(wrapIndentState) []rune { func wrapIndentRelease(first, rest []rune, firstWidth, restWidth int) func(wrapIndentState) []rune {
return func(state wrapIndentState) []rune { return func(state wrapIndentState) []rune {
if len(state.currentWord) == 0 { if len(state.currentWord) == 0 {
return nil return nil
@ -143,8 +143,16 @@ func wrapIndentRelease(first, rest []rune) func(wrapIndentState) []rune {
var ret []rune var ret []rune
indent := first indent := first
width := firstWidth
if state.multipleLines { if state.multipleLines {
indent = rest indent = rest
width = restWidth
}
if width > 0 && state.currentLineLength > 0 &&
state.currentLineLength+len(state.currentWord)+1+len(indent) > width {
ret = append(ret, '\n')
state.currentLineLength = 0
} }
if state.currentLineLength == 0 { if state.currentLineLength == 0 {
@ -163,6 +171,6 @@ func wrapIndentRelease(first, rest []rune) func(wrapIndentState) []rune {
func wrapIndent(first, rest []rune, firstWidth, restWidth int) Editor { func wrapIndent(first, rest []rune, firstWidth, restWidth int) Editor {
return Func( return Func(
wrapIndentEdit(first, rest, firstWidth, restWidth), wrapIndentEdit(first, rest, firstWidth, restWidth),
wrapIndentRelease(first, rest), wrapIndentRelease(first, rest, firstWidth, restWidth),
) )
} }

View File

@ -280,5 +280,22 @@ Walking through the mixed forests of Brandenburg in early autumn, one notices th
t.Fatal(b.String()) t.Fatal(b.String())
} }
}) })
t.Run("wrap on release", func(t *testing.T) {
var b bytes.Buffer
w := textedit.New(&b, textedit.WrapIndent(" ", " ", 15, 15))
w.Write([]byte("Some sample text...\n on multiple lines."))
w.Flush()
const expect = `
Some sample
text... on
multiple
lines.`
if "\n"+b.String() != expect {
t.Fatal("\n" + b.String())
}
})
}) })
} }