Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
(*s Tree structures. *)
module type Tree = sig
type t
val decomp : t -> string * t list
end
(*s Pretty-print functor. *)
module Make(T : Tree) = struct
open Format
(* [print_node] prints one node and [print_sons] its children.
[pref] is the prefix to output at the beginning of line
and [start] is the branching drawing (["+-"] the first time,
and then ["|-"]). *)
let print fmt t =
let rec print_node pref t =
let (s, sons) = T.decomp t in
pp_print_string fmt s;
if sons <> [] then
let w = String.length s in
let pref' = pref ^ String.make (w + 1) ' ' in
match sons with
| [t'] -> pp_print_string fmt "---"; print_node pref' t'
| _ -> pp_print_string fmt "-"; print_sons pref' "+-" sons
and print_sons pref start = function
| [] ->
assert false
| [s] ->
pp_print_string fmt "`-"; print_node (pref ^ " ") s
| s :: sons ->
pp_print_string fmt start; print_node (pref ^ "| ") s;
pp_force_newline fmt (); pp_print_string fmt pref;
print_sons pref "|-" sons
in
print_node "" t
end