first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 21:52:23 +03:00
commit 880f412e2c
2662 changed files with 866266 additions and 0 deletions

View File

@@ -0,0 +1,71 @@
package runtime
import (
"bytes"
"strconv"
)
// rewriteSGRParams converts colon-separated SGR sub-parameters to semicolon-
// separated equivalents. Each semicolon-delimited group is processed:
//
// - 4:x -> 4 (underline style -> basic underline)
// - 38:2:cs:r:g:b -> 38;2;r;g;b (fg true-color, drop colorspace)
// - 48:2:cs:r:g:b -> 48;2;r;g;b (bg true-color, drop colorspace)
// - 38:5:n -> 38;5;n (fg 256-color)
// - 48:5:n -> 48;5;n (bg 256-color)
// - 58:... -> (dropped - underline color, unsupported by vt10x)
// - other:x -> other (keep first sub-param only)
func rewriteSGRParams(params []byte) []byte {
parts := bytes.Split(params, []byte{';'})
var out [][]byte
for _, part := range parts {
if !bytes.ContainsRune(part, ':') {
out = append(out, part)
continue
}
subs := bytes.Split(part, []byte{':'})
if len(subs) == 0 {
continue
}
code, err := strconv.Atoi(string(subs[0]))
if err != nil {
out = append(out, subs[0])
continue
}
switch code {
case 4: // underline style -> basic underline
out = append(out, []byte("4"))
case 38, 48: // fg/bg color
if len(subs) >= 2 {
switch string(subs[1]) {
case "2": // true-color: code:2[:cs]:r:g:b
// Find r,g,b - skip optional colorspace id.
if len(subs) >= 6 {
// code:2:cs:r:g:b
out = append(out, subs[0], []byte("2"), subs[3], subs[4], subs[5])
} else if len(subs) >= 5 {
// code:2:r:g:b (no colorspace)
out = append(out, subs[0], []byte("2"), subs[2], subs[3], subs[4])
} else {
out = append(out, subs[0])
}
case "5": // 256-color: code:5:n
if len(subs) >= 3 {
out = append(out, subs[0], []byte("5"), subs[2])
} else {
out = append(out, subs[0])
}
default:
out = append(out, subs[0])
}
} else {
out = append(out, subs[0])
}
case 58: // underline color - not supported by vt10x, drop entirely
continue
default:
out = append(out, subs[0])
}
}
return bytes.Join(out, []byte{';'})
}