X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Fpretty.ml;h=b39375a6d3a67f4ec6ef389d554f34dc0a5ff63e;hp=6d1dd468e52e01e7be068f32e5075b1c7682cd7e;hb=a089738aa464521c0ae79944eb00fc147cc37ac9;hpb=9a127b83fbb1171ebd36e6f42780093412a5e91a diff --git a/src/pretty.ml b/src/pretty.ml index 6d1dd46..b39375a 100644 --- a/src/pretty.ml +++ b/src/pretty.ml @@ -128,21 +128,36 @@ let pp_print_list ?(sep=dummy_printer) printer fmt l = match l with [] -> () | [ e ] -> printer fmt e - | e :: es -> printer fmt e; List.iter + | e :: es -> printer fmt e; + List.iter (fun x -> sep fmt (); fprintf fmt "%a" printer x) es + +let pp_print_range ?(sep=dummy_printer) printer fmt (first, last) = + for i = first to last - 1 do + printer fmt i; + sep fmt (); + done; + if first <= last then printer fmt last + let pp_print_array ?(sep=dummy_printer) printer fmt a = - pp_print_list ~sep:sep printer fmt (Array.to_list a) + pp_print_range ~sep:sep (fun fmt i -> printer fmt a.(i)) fmt + (0, (Array.length a - 1)) -let print_list ?(sep=" ") printer fmt l = +let with_printer (f : ?sep:('a) -> 'b) strsep pr fmt = let sep_printer fmt () = - pp_print_string fmt sep + pp_print_string fmt strsep in - pp_print_list ~sep:sep_printer printer fmt l + fun x -> f ~sep:sep_printer pr fmt x -let print_array ?(sep=" ") printer fmt a = - print_list ~sep:sep printer fmt (Array.to_list a) +let print_list ?(sep=" ") printer fmt l = + with_printer pp_print_list sep printer fmt l + +let print_array ?(sep=" ") printer fmt a = + with_printer pp_print_array sep printer fmt a +let print_range ?(sep=" ") printer fmt r = + with_printer pp_print_range sep printer fmt r