5d6cc2892d2e0cc335a3898e5b89ff0a80a32572 — Chris Waldon 5 months ago 0b45657
text: consume io.Reader in shaper

io.Reader is actually a more efficient interface than io.RuneReader,
as we can pull bytes out and check for cache hits without doing
redundant rune<->string conversions. This isn't implemented yet,

Signed-off-by: Chris Waldon <christopher.waldon.dev@gmail.com>
2 files changed, 8 insertions(+), 1 deletions(-)

M text/shaper.go
M text/shaper_test.go
M text/shaper.go => text/shaper.go +7 -0
@@ 3,6 3,7 @@
package text

import (

@@ 182,6 183,12 @@ func (l *Shaper) Layout(params Parameters, minWidth, maxWidth int, lc system.Loc
	l.layoutText(params, minWidth, maxWidth, lc, txt, "")

// Layout text from an io.Reader according to a set of options. Results can be retrieved by
// iteratively calling NextGlyph.
func (l *Shaper) LayoutReader(params Parameters, minWidth, maxWidth int, lc system.Locale, txt io.Reader) {
	l.layoutText(params, minWidth, maxWidth, lc, bufio.NewReader(txt), "")

// LayoutString is Layout for strings.
func (l *Shaper) LayoutString(params Parameters, minWidth, maxWidth int, lc system.Locale, str string) {
	l.layoutText(params, minWidth, maxWidth, lc, nil, str)

M text/shaper_test.go => text/shaper_test.go +1 -1
@@ 113,7 113,7 @@ func TestShapingNewlineHandling(t *testing.T) {

				Alignment: Middle,
				PxPerEm:   fixed.I(10),
			}, 200, 200, english, strings.NewReader(tc.textInput))