1234567891011121314151617181920212223242526272829303132333435363738394041424344454647(** Very small tooling for format printers. *)includeFormattype'at=Format.formatter->'a->unit(* Only in the stdlib since 4.02, so we copy. *)letreclist?(pp_sep=pp_print_cut)ppppf=function|[]->()|[v]->ppppfv|v::vs->ppppfv;pp_sepppf();list~pp_sepppppfvs(* want this name to make sure we don't use pp_print_list from stdlib
accidentally *)letpp_print_list=listletstr=pp_print_stringletsexpfmtsppx=fprintffmt"@[<3>(%s@ %a)@]"sppxletpairpp1pp2fmt(v1,v2)=pp1fmtv1;pp_print_spacefmt();pp2fmtv2lettriplepp1pp2pp3fmt(v1,v2,v3)=pp1fmtv1;pp_print_spacefmt();pp2fmtv2;pp_print_spacefmt();pp3fmtv3letint=pp_print_intletoptintfmt=function|None->()|Somei->fprintffmt"@ %d"iletquotefmts=Format.fprintffmt"\"%s\""sletpp_olistpp_elemfmt=Format.fprintffmt"@[<3>[@ %a@ ]@]"(pp_print_list~pp_sep:(funfmt()->fprintffmt";@ ")pp_elem)letpp_str_list=pp_olistquoteletto_to_stringppx=letb=Buffer.create16inletfmt=Format.formatter_of_bufferbinppfmtx;Buffer.contentsb