blob: e969cec352d31a0320dcc37b273df3ae8ca166fa (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
package tui
import (
"github.com/rivo/uniseg"
)
type builder struct {
runs []textRun
width int
}
func (b *builder) add(s string, style *Style) {
b.width += uniseg.StringWidth(s)
if len(b.runs) == 0 || style != b.runs[len(b.runs) - 1].style {
b.runs = append(b.runs, textRun {s, style, false})
} else {
run := b.runs[len(b.runs) - 1]
run.text += s
b.runs[len(b.runs) - 1] = run
}
}
func (b *builder) addRun(run textRun) {
b.width += uniseg.StringWidth(run.text)
b.runs = append(b.runs, run)
}
func (b *builder) addRuns(runs []textRun) {
for _, run := range runs {
b.addRun(run)
}
}
func (b *builder) flush() []textRun {
runs := b.runs
b.width = 0
b.runs = nil
return runs
}
|