1package ansiext
2
3import (
4 "strings"
5
6 "github.com/charmbracelet/x/ansi"
7)
8
9// Escape replaces control characters with their Unicode Control Picture
10// representations to ensure they are displayed correctly in the UI.
11func Escape(content string) string {
12 var sb strings.Builder
13 sb.Grow(len(content))
14 for _, r := range content {
15 switch {
16 case r >= 0 && r <= 0x1f: // Control characters 0x00-0x1F
17 sb.WriteRune('\u2400' + r)
18 case r == ansi.DEL:
19 sb.WriteRune('\u2421')
20 default:
21 sb.WriteRune(r)
22 }
23 }
24 return sb.String()
25}