123456789101112131415161718192021222324252627282930313233343536373839404142434445464748openCommonletregexp_comment_line="#.*"(*****************************************************************************)(* Helpers *)(*****************************************************************************)letcat_and_filter_commentsfile=letxs=Common.catfileinletxs=xs|>List.map(Str.global_replace(Str.regexpregexp_comment_line)"")inletxs=xs|>Common.excludeCommon2.is_blank_stringinxs(*****************************************************************************)(* csv *)(*****************************************************************************)(* hierarchy ? header of section like in kernel_files.meta ? *)(*
(* split by header of section *)
..
let xs = xs +> Common.split_list_regexp "^[^ ]" in
let group = xs +> List.map (fun s ->
assert (s =~ "^[ ]+\\([^ ]+\\) *: *\\(.*\\)");
let (dir, email) = matched2 s in
let emails = Common.split "[ ,]+" email in
(dir, emails)
) in
Subsystem ((dir, emails), group)
*)(*****************************************************************************)lettitle_colon_elems_space_separatedfile=letxs=cat_and_filter_commentsfileinxs|>List.map(funs->assert(s=~"^\\([^ ]+\\):\\(.*\\)");let(title,elems_str)=matched2sinletelems=Common.split"[ \t]+"elems_strintitle,elems)