fix ansi parsing encapsulation
This commit is contained in:
parent
92e539754c
commit
c5f8eea2c5
11
lib/ansi.ml
11
lib/ansi.ml
@ -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)
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user