-let valid_key_rex_raw = "\\w+(\\.\\w+)*"
-let config_line_raw = sprintf "\\s*(%s)\\s*=\\s*\"(.*)\"\\s*" valid_key_rex_raw
-let comment_rex = Pcre.regexp "^\\s*(#|$)"
-let valid_key_rex = Pcre.regexp ("^" ^ valid_key_rex_raw ^ "$")
-let config_line_rex = Pcre.regexp ("^" ^ config_line_raw ^ "$")
-
-let is_comment s = Pcre.pmatch ~rex:comment_rex s
-
-let escape = String.escaped
-let unescape =
- let lexer = lazy (Genlex.make_lexer []) in
- fun s ->
- let tok_stream = Lazy.force lexer (Stream.of_string ("\"" ^ s ^ "\"")) in
- match Stream.peek tok_stream with
- | Some (Genlex.String s) -> s
- | _ -> raise Unescape_failure
+ (* as \\w but:
+ * - no sequences of '_' longer than 1 are permitted
+ * - no uppercase letter are permitted
+ *)
+(*
+let valid_step_rex_raw = "[a-z0-9]+(_[a-z0-9]+)*"
+let valid_key_rex_raw =
+ sprintf "^%s(\\.%s)*$" valid_step_rex_raw valid_step_rex_raw
+let valid_key_rex = Pcre.regexp valid_key_rex_raw
+let dot_rex = Pcre.regexp "\\."
+let spaces_rex = Pcre.regexp "\\s+"
+let heading_spaces_rex = Pcre.regexp "^\\s+"
+*)
+let valid_step_rex_raw = "[a-z0-9]+\\(_[a-z0-9]+\\)*"
+let valid_key_rex_raw =
+ sprintf "%s\(\\.%s\)*" valid_step_rex_raw valid_step_rex_raw
+let valid_key_rex = Str.regexp ("^" ^ valid_key_rex_raw ^ "$")
+let interpolated_key_rex = Str.regexp ("\\$(" ^ valid_key_rex_raw ^ ")")
+let dot_rex = Str.regexp "\\."
+let spaces_rex = Str.regexp "[ \t\n\r]+"
+let heading_spaces_rex = Str.regexp "^[ \t\n\r]+"
+
+ (* escapes for xml configuration file *)
+let (escape, unescape) =
+ let (in_enc, out_enc) = (`Enc_utf8, `Enc_utf8) in
+ (Netencoding.Html.encode ~in_enc ~out_enc (),
+ Netencoding.Html.decode ~in_enc ~out_enc ~entity_base:`Xml ())