fix ansi parsing encapsulation

This commit is contained in:
atagen 2024-12-03 14:28:08 +11:00
parent 92e539754c
commit c5f8eea2c5
2 changed files with 8 additions and 5 deletions

View file

@ -37,8 +37,6 @@ let ansi_sgr =
let capture_ansi = both ansi_values ansi_sgr
let ansi_parse =
ansi_escape *> capture_ansi
type parser_state_colour = ParsingFg | ParsingBg
@ -94,8 +92,13 @@ let parse_ansi_intermediate (codes, terminator) : chunk =
in
Ansi final
let raw_ansi_parse =
ansi_escape *> capture_ansi
let ansi_parse = raw_ansi_parse >>| parse_ansi_intermediate
let%test "ansi_parse" =
parse_string ~consume:Angstrom.Consume.Prefix ansi_parse "\x1b[35;23;12m"
parse_string ~consume:Angstrom.Consume.Prefix raw_ansi_parse "\x1b[35;23;12m"
|> function
| Ok (d, t) -> d = [ 35; 23; 12 ] && t = Some 'm'
| _ -> false
@ -108,7 +111,7 @@ let%test "ansi_intermediate_parse" =
let%test "ansi_full" =
let final =
parse_string ~consume:Angstrom.Consume.Prefix ansi_parse
parse_string ~consume:Angstrom.Consume.Prefix raw_ansi_parse
"\x1b[38;5;25;24;23;1;0m"
|> function
| Ok (raw, term) -> parse_ansi_intermediate (raw, term)