1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
let find_matches ?encoding:_ str =
match String.split_on_char '-' str with
| [] -> assert false
| [ str ] -> List.to_seq [ { S.str; is_match = false } ]
| hd :: tl ->
let dash = { S.str = "-"; is_match = true } in
let rec go acc = function
| [] -> List.to_seq (List.rev acc)
| "" :: r -> go (dash :: acc) r
| str :: r ->
let x = { S.str; is_match = false } in
go (x :: dash :: acc) r in
go [ { S.str = hd; is_match = false } ] tl
let find_matches_on_bstr ?encoding:_ bstr =
match Bstr.split_on_char '-' bstr with
| [] -> assert false
| [ bstr ] ->
let str = Bstr.to_string bstr in
List.to_seq [ { S.str; is_match = false } ]
| hd :: tl ->
let dash = { S.str = "-"; is_match = true } in
let rec go acc = function
| [] -> List.to_seq (List.rev acc)
| bstr :: r when Bstr.is_empty bstr -> go (dash :: acc) r
| bstr :: r ->
let str = Bstr.to_string bstr in
let x = { S.str; is_match = false } in
go (x :: dash :: acc) r in
let hd = Bstr.to_string hd in
go [ { S.str = hd; is_match = false } ] tl