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}