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)

View File

@ -8,7 +8,7 @@ let is_text c = not (is_sep c || is_delim c || c = '\x1b')
let sep = take_while is_sep >>| fun s -> Separator s
let delim = take_while is_delim >>| fun s -> Delimiter s
let text = take_while is_text >>| fun s -> Text s
let ansi = Ansi.ansi_parse >>| Ansi.parse_ansi_intermediate
let ansi = Ansi.ansi_parse
let culr_parse =
peek_char_fail >>= function