1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
(* camlp5r *)
(* pprintf.ml,v *)
(* Copyright (c) INRIA 2007-2017 *)
#load "pa_macro.cmo";
type pr_context = { ind : int; bef : string; aft : string; dang : string };
type pr_fun 'a = pr_context -> 'a -> string;
value tab ind = String.make ind ' ';
value empty_pc = {ind = 0; bef = ""; aft = ""; dang = ""};
value sprint_break nspaces offset pc f g =
Pretty.horiz_vertic
(fun () ->
let sp = String.make nspaces ' ' in
Pretty.sprintf "%s%s%s" (f {(pc) with aft = ""}) sp
(g {(pc) with bef = ""}))
(fun () ->
let s1 = f {(pc) with aft = ""} in
let s2 =
g {(pc) with ind = pc.ind + offset; bef = tab (pc.ind + offset)}
in
Pretty.sprintf "%s\n%s" s1 s2)
;
value sprint_break_all force_newlines pc f fl =
Pretty.horiz_vertic
(fun () ->
if force_newlines then Pretty.sprintf "\n"
else
loop (f (if fl = [] then pc else {(pc) with aft = ""})) fl
where rec loop s =
fun
[ [(sp, off, f) :: fl] ->
let s =
Pretty.sprintf "%s%s%s" s (String.make sp ' ')
(f {(pc) with bef = "";
aft = if fl = [] then pc.aft else ""})
in
loop s fl
| [] -> s ])
(fun () ->
loop (f (if fl = [] then pc else {(pc) with aft = ""})) fl
where rec loop s =
fun
[ [(sp, off, f) :: fl] ->
let s =
Pretty.sprintf "%s\n%s" s
(f {(pc) with ind = pc.ind + off; bef = tab (pc.ind + off);
aft = if fl = [] then pc.aft else ""})
in
loop s fl
| [] -> s ])
;
|