X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Flibrary%2FcoercGraph.ml;h=40d6281252c58de143736f3e6aaaa9248c13d570;hb=cdb7b3dcac3ff13a18ce67878ab7aec2302a9a77;hp=6d7a670efc688d641f2927ce62e03af1600f6076;hpb=bdf989481462c1185c9cbbfdd4b31d13aa4352b3;p=helm.git diff --git a/helm/software/components/library/coercGraph.ml b/helm/software/components/library/coercGraph.ml index 6d7a670ef..40d628125 100644 --- a/helm/software/components/library/coercGraph.ml +++ b/helm/software/components/library/coercGraph.ml @@ -117,24 +117,33 @@ let target_of t = with Invalid_argument _ -> assert false (* t must be a coercion *) let generate_dot_file () = + let module Pp = GraphvizPp.Dot in + let buf = Buffer.create 10240 in + let fmt = Format.formatter_of_buffer buf in + Pp.header ~node_attrs:["fontsize", "9"; "width", ".4"; "height", ".4"] + ~edge_attrs:["fontsize", "10"] fmt; let l = CoercDb.to_list () in - let preamble = " - digraph pippo { - node [fontsize=9, width=.4, height=.4]; - edge [fontsize=10]; - \n" - in - let conclusion = " } \n" in - let data = List.fold_left - (fun acc (src,tgt,cl) -> - List.fold_left - (fun acc c -> - acc ^ CoercDb.name_of_carr src ^ " -> " ^ - CoercDb.name_of_carr tgt ^ "[label=\"" ^ UriManager.name_of_uri c ^ - "\"];\n") - acc cl) - "" l - in - preamble ^ data ^ conclusion - + let pp_description carr = + match CoercDb.uri_of_carr carr with + | None -> () + | Some uri -> + Pp.node (CoercDb.name_of_carr carr) + ~attrs:["href", UriManager.string_of_uri uri] fmt in + List.iter + (fun (src, tgt, cl) -> + let src_name = CoercDb.name_of_carr src in + let tgt_name = CoercDb.name_of_carr tgt in + pp_description src; + pp_description tgt; + List.iter + (fun c -> + Pp.edge src_name tgt_name + ~attrs:[ "label", UriManager.name_of_uri c; + "href", UriManager.string_of_uri c ] + fmt) + cl) + l; + Pp.trailer fmt; + Buffer.contents buf + (* EOF *)