fix wrapping on release state
This commit is contained in:
parent
0569369ef5
commit
cc133e8969
14
indent.go
14
indent.go
@ -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),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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())
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user