+()
+;;
+
+let generate_dot_file status fmt =
+ let module Pp = GraphvizPp.Dot in
+ let h_db, _ = status#uhint_db in
+ let names = ref [] in
+ let id = ref 0 in
+ let mangle l =
+ try List.assoc l !names
+ with Not_found ->
+ incr id;
+ names := (l,"node"^string_of_int!id) :: !names;
+ List.assoc l !names
+ in
+ let nodes = ref [] in
+ let edges = ref [] in
+ HDB.iter h_db (fun _key dataset ->
+ List.iter
+ (fun (precedence, l,r, hint) ->
+ let l =
+ Str.global_substitute (Str.regexp "\n") (fun _ -> "")
+ (NCicPp.ppterm
+ ~margin:max_int ~metasenv:[] ~context:[] ~subst:[] l)
+ in
+ let r =
+ Str.global_substitute (Str.regexp "\n") (fun _ -> "")
+ (NCicPp.ppterm
+ ~margin:max_int ~metasenv:[] ~context:[] ~subst:[] r)
+ in
+ let shint = "???" (*
+ string_of_int precedence ^ "..." ^
+ Str.global_substitute (Str.regexp "\n") (fun _ -> "")
+ (NCicPp.ppterm
+ ~margin:max_int ~metasenv:[] ~context:[] ~subst:[] hint)*)
+ in
+ nodes := (mangle l,l) :: (mangle r,r) :: !nodes;
+ edges := (mangle l, mangle r, shint, precedence, hint) :: !edges)
+ (HintSet.elements dataset);
+ );
+ List.iter (fun x, l -> Pp.node x ~attrs:["label",l] fmt) !nodes;
+ List.iter (fun x, y, l, _, _ ->
+ Pp.raw (Printf.sprintf "%s -- %s [ label=\"%s\" ];\n" x y "?") fmt)
+ !edges;
+ edges := List.sort (fun (_,_,_,p1,_) (_,_,_,p2,_) -> p1 - p2) !edges;
+ List.iter (fun x, y, _, p, l -> pp_hint l p) !edges;