diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/config_file.ml | 33 | ||||
| -rw-r--r-- | src/config_file.mli | 2 |
2 files changed, 35 insertions, 0 deletions
diff --git a/src/config_file.ml b/src/config_file.ml new file mode 100644 index 0000000..5fdf924 --- /dev/null +++ b/src/config_file.ml @@ -0,0 +1,33 @@ +(* strip commponent version string *) +let strip_version s = + let rex = Pcre.regexp ~flags:[`MULTILINE;`DOTALL] "(^//.*)" in + let res = Pcre.split ~max:0 ~rex s in + match res with + | h :: _ -> Ok h + | [] -> Error "Failure stripping version string from config" + +let load_config file = + try + let chan = open_in file in + let s = really_input_string chan (in_channel_length chan) in + let () = close_in chan in + let prep = strip_version s in + let s = match prep with + | Ok s -> s + | Error msg -> raise (Sys_error msg) + in + let config = Parser.from_string s in + Ok config + with + | Sys_error msg -> Error msg + | Util.Syntax_error (opt, msg) -> + begin + match opt with + | None -> + let out = Printf.sprintf "Parse error: %s\n" msg + in Error out + | Some (line, pos) -> + let out = Printf.sprintf "Parse error: %s line %d pos %d\n" msg line pos + in Error out + end + diff --git a/src/config_file.mli b/src/config_file.mli new file mode 100644 index 0000000..607a8b5 --- /dev/null +++ b/src/config_file.mli @@ -0,0 +1,2 @@ + +val load_config : string -> (Config_tree.t, string) result |
