diff --git a/src/hwylterm/bbansi.nim b/src/hwylterm/bbansi.nim index ce1fa0a..2145df5 100644 --- a/src/hwylterm/bbansi.nim +++ b/src/hwylterm/bbansi.nim @@ -341,12 +341,18 @@ func `&`*(x: BbString, y: BbString): Bbstring = for span in y.spans: result.spans.add shift(span, i) -func add*(x: var Bbstring, y :Bbstring) = +func add*(x: var Bbstring, y: Bbstring) = let i = x.plain.len x.plain.add y.plain for span in y.spans: x.spans.add shift(span, i) +# TODO: squash "like" spans for efficiency? +func add*(x: var Bbstring, y: string) = + let i = x.plain.len + x.plain.add y + x.spans.add BbSpan(styles: @[], slice:[i, i + y.len - 1 ]) + func bbEscape*(s: string): string {.inline.} = s.replace("[", "[[").replace("\\", "\\\\") diff --git a/tests/tbbansi.nim b/tests/tbbansi.nim index 7c4e276..74d9a89 100644 --- a/tests/tbbansi.nim +++ b/tests/tbbansi.nim @@ -92,5 +92,13 @@ suite "strutils": check (bb"[red]red").align(10) == bb" [red]red" check (bb"[red]red").alignLeft(10) == bb"[red]red[/] " + test "add": + var x = bb("[red]red") + x.add bb("[yellow]yellow") + check bb"[red]red[/][yellow]yellow[/]" == x + + var y = bb("[red]red") + y.add "yellow" + check bb"[red]red[/]yellow" == y