From b11c892158772f508e494b2726a5d4db1bb74d23 Mon Sep 17 00:00:00 2001 From: citrons Date: Sat, 31 May 2025 17:16:38 -0500 Subject: text input box --- tui/builder.go | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 tui/builder.go (limited to 'tui/builder.go') diff --git a/tui/builder.go b/tui/builder.go new file mode 100644 index 0000000..e969cec --- /dev/null +++ b/tui/builder.go @@ -0,0 +1,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 +} -- cgit v1.2.3