X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Fpretty.ml;h=b39375a6d3a67f4ec6ef389d554f34dc0a5ff63e;hp=02c413f6950349bccb25cf79e86b29ec3b2e385e;hb=a089738aa464521c0ae79944eb00fc147cc37ac9;hpb=cba2938d929fd5119b1491686ddc224d5af618c6 diff --git a/src/pretty.ml b/src/pretty.ml index 02c413f..b39375a 100644 --- a/src/pretty.ml +++ b/src/pretty.ml @@ -86,6 +86,8 @@ let up_arrow = "↑" let right_arrow = "→" let left_arrow = "←" let epsilon = "ϵ" +let bullet = "•" +let big_sigma = "∑" let cap = "∩" let cup = "∪" let lnot = "¬" @@ -94,6 +96,7 @@ let vee = "∨" let top = "⊤" let bottom = "⊥" let dummy = "☠" +let inverse = "⁻¹" let double_right_arrow = "⇒" let combining_overbar = "\204\133" let combining_underbar = "\204\178" @@ -105,14 +108,8 @@ let overline s = combine_all combining_overbar s let underline s = combine_all combining_underbar s let strike s = combine_all combining_stroke s -let mk_repeater c = - let mk_str i = String.make i c in - let _table = Array.init 16 mk_str in - fun i -> try - if i < 16 then _table.(i) else mk_str i - with e -> print_int i; print_newline(); raise e -let padding = mk_repeater ' ' -let line = mk_repeater '_' +let padding i = String.make i ' ' +let line i = String.make i '_' @@ -125,27 +122,42 @@ let pp_underline = ppf underline let pp_strike = ppf strike let pp_subscript = ppf subscript let pp_superscript = ppf superscript -let dummy_printer fmt () = () +let dummy_printer _ () = () 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