mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 11:15:31 -05:00
another fix for CCParse and slices
This commit is contained in:
parent
c7de9389b0
commit
9f1ecdba27
2 changed files with 36 additions and 11 deletions
|
|
@ -774,17 +774,22 @@ let split_1 ~on_char : _ t =
|
||||||
if st.i >= st.j then
|
if st.i >= st.j then
|
||||||
ok st (st, None)
|
ok st (st, None)
|
||||||
else (
|
else (
|
||||||
|
let ret_empty () =
|
||||||
|
let st_done = { st with i = st.j } in
|
||||||
|
(* empty *)
|
||||||
|
ok st_done (st, None)
|
||||||
|
in
|
||||||
match String.index_from st.cs.str st.i on_char with
|
match String.index_from st.cs.str st.i on_char with
|
||||||
| j ->
|
| j ->
|
||||||
|
if j <= st.j then (
|
||||||
let x = { st with j } in
|
let x = { st with j } in
|
||||||
let y = { st with i = min st.j (j + 1) } in
|
let y = { st with i = min st.j (j + 1) } in
|
||||||
let st_done = { st with i = st.j } in
|
let st_done = { st with i = st.j } in
|
||||||
(* empty *)
|
(* empty *)
|
||||||
ok st_done (x, Some y)
|
ok st_done (x, Some y)
|
||||||
| exception Not_found ->
|
) else
|
||||||
let st_done = { st with i = st.j } in
|
ret_empty ()
|
||||||
(* empty *)
|
| exception Not_found -> ret_empty ()
|
||||||
ok st_done (st, None)
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
module Tst = (val Containers_testlib.make ~__FILE__ ())
|
module Tst = (val Containers_testlib.make ~__FILE__ ())
|
||||||
include Tst
|
include Tst
|
||||||
|
module P = CCParse
|
||||||
open CCParse
|
open CCParse
|
||||||
|
|
||||||
module T = struct
|
module T = struct
|
||||||
|
|
@ -38,10 +39,10 @@ let erreq eq x y =
|
||||||
| Ok x, Ok y -> eq x y
|
| Ok x, Ok y -> eq x y
|
||||||
| Error _, Error _ -> true
|
| Error _, Error _ -> true
|
||||||
| _ -> false
|
| _ -> false
|
||||||
;;
|
|
||||||
|
let strquoted = Printf.sprintf "%S";;
|
||||||
|
|
||||||
(* ### start tests ### *)
|
(* ### start tests ### *)
|
||||||
|
|
||||||
eq ~printer:errpptree
|
eq ~printer:errpptree
|
||||||
(Ok (N (L 1, N (L 2, L 3))))
|
(Ok (N (L 1, N (L 2, L 3))))
|
||||||
(parse_string ptree "(1 (2 3))")
|
(parse_string ptree "(1 (2 3))")
|
||||||
|
|
@ -310,7 +311,7 @@ eq
|
||||||
;;
|
;;
|
||||||
|
|
||||||
eq
|
eq
|
||||||
~printer:Q.Print.(errpp (pair (pair string string) string))
|
~printer:Q.Print.(errpp (pair (pair string strquoted) strquoted))
|
||||||
(Ok (("!this is the text between!", "LOL"), " and a lot of other stuff"))
|
(Ok (("!this is the text between!", "LOL"), " and a lot of other stuff"))
|
||||||
(parse_string
|
(parse_string
|
||||||
(string "COUCOU"
|
(string "COUCOU"
|
||||||
|
|
@ -318,3 +319,22 @@ eq
|
||||||
take_if (fun _ -> true) <* eoi >|= fun rest ->
|
take_if (fun _ -> true) <* eoi >|= fun rest ->
|
||||||
(Slice.to_string slice, x), Slice.to_string rest ))
|
(Slice.to_string slice, x), Slice.to_string rest ))
|
||||||
"COUCOU!this is the text between!LOL and a lot of other stuff")
|
"COUCOU!this is the text between!LOL and a lot of other stuff")
|
||||||
|
;;
|
||||||
|
|
||||||
|
eq
|
||||||
|
~printer:Q.Print.(errpp @@ pair (list strquoted) (list strquoted))
|
||||||
|
(Ok ([ "\n lorem"; "\n ipsum"; "\n" ], [ "\n lorem2"; "\n ipsum2"; "" ]))
|
||||||
|
(let parser_complex1 =
|
||||||
|
let ws = skip_white in
|
||||||
|
let s2 = lookahead_ignore @@ string "Section2" in
|
||||||
|
let* slice1, () = ws *> string "Section1" *> take_until_success s2 in
|
||||||
|
let* slice2, () =
|
||||||
|
ws *> string "Section2" *> take_until_success (ws *> eoi)
|
||||||
|
in
|
||||||
|
Printf.printf "slice1: %S\n%!" (Slice.to_string slice1);
|
||||||
|
let* sect1 = recurse slice1 (each_split ~on_char:';' all_str) in
|
||||||
|
let* sect2 = recurse slice2 (each_split ~on_char:';' all_str) in
|
||||||
|
return (sect1, sect2)
|
||||||
|
in
|
||||||
|
parse_string parser_complex1
|
||||||
|
"\nSection1\n lorem;\n ipsum;\nSection2\n lorem2;\n ipsum2;\n")
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue