let subst conf extra_subst str =
let substitutions = Hashtbl.create (Hashtbl.length metaconf) in
let () =
Hashtbl.iter
(fun name metadata ->
Hashtbl.add substitutions name (metadata.get_print conf))
metaconf;
List.iter (fun (k, v) -> Hashtbl.add substitutions k v) extra_subst
in
let buff = Buffer.create (String.length str) in
Buffer.add_substitute buff
(fun var ->
try
Hashtbl.find substitutions var
with Not_found ->
failwithf "Unknown substitution variable %S in %S." var str)
str;
Buffer.contents buff