let spaces_rex = Str.regexp "[ \t\n\r]+"
let heading_spaces_rex = Str.regexp "^[ \t\n\r]+"
+let split s =
+ (* trailing blanks are removed per default by split *)
+ Str.split spaces_rex (Str.global_replace heading_spaces_rex "" s)
+let merge l = String.concat " " l
+
(* escapes for xml configuration file *)
let (escape, unescape) =
let (in_enc, out_enc) = (`Enc_utf8, `Enc_utf8) in
value_is_valid ~key ~value;
Hashtbl.replace registry key value
+let unset = Hashtbl.remove registry
+
let env_var_of_key key =
(* Pcre.replace ~rex:dot_rex ~templ:"__" (String.uppercase key) *)
Str.global_replace dot_rex "__" (String.uppercase key)
let set = set' registry
-let string_list_of_string s =
- (* trailing blanks are removed per default by split *)
-(* Pcre.split ~res:spaces_rex (Pcre.replace ~rex:heading_spaces_rex s) *)
- Str.split spaces_rex (Str.global_replace heading_spaces_rex "" s)
-let string_of_string_list l = String.concat " " l
-
let mk_get_set type_name (from_string: string -> 'a) (to_string: 'a -> string) =
let getter key =
let value = get key in
let (get_string, set_string) = (get, set)
let (get_int, set_int) = mk_get_set "int" int_of_string string_of_int
let (get_float, set_float) = mk_get_set "float" float_of_string string_of_float
-let (get_string_list, set_string_list) =
- mk_get_set "string list" string_list_of_string string_of_string_list
+let (get_bool, set_bool) = mk_get_set "bool" bool_of_string string_of_bool
+let (get_string_list, set_string_list) = mk_get_set "string list" split merge
+
+let get_opt getter key =
+ try
+ Some (getter key)
+ with Key_not_found _ -> None
+let set_opt setter ~key ~value =
+ match value with
+ | None -> unset key
+ | Some value -> setter ~key ~value
(*
let save_to =