1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374open!ImportmoduleColor=structtypet=[`Black|`Red|`Green|`Yellow|`Blue|`Magenta|`Cyan|`White|`Bright_black|`Bright_red|`Bright_green|`Bright_yellow|`Bright_blue|`Bright_magenta|`Bright_cyan|`Bright_white]endtypet={bold:bool;dim:bool;underline:bool;color:Color.toption}(* This is what the style will be after the terminal is reset. *)letdefault={bold=false;dim=false;underline=false;color=None}letreset="\x1b[0m"letis_default{bold;dim;underline;color}=(notbold)&&(notdim)&&(notunderline)&&Option.is_nonecolor;;letescape{bold;dim;underline;color}=leteffects=List.concat[(ifboldthen[";1"]else[]);(ifdimthen[";2"]else[]);(ifunderlinethen[";4"]else[])]inletcolor_code=match(color:Color.toption)with|None->0|Some`Black->30|Some`Red->31|Some`Green->32|Some`Yellow->33|Some`Blue->34|Some`Magenta->35|Some`Cyan->36|Some`White->37|Some`Bright_black->90|Some`Bright_red->91|Some`Bright_green->92|Some`Bright_yellow->93|Some`Bright_blue->94|Some`Bright_magenta->95|Some`Bright_cyan->96|Some`Bright_white->97inPrintf.sprintf"\x1b[%d%sm"color_code(String.concat~sep:""effects);;letpp_with_styletppf~f=ifnot(is_defaultt)thenFormat.pp_print_stringppf(escapet);fppf;ifnot(is_defaultt)thenFormat.pp_print_stringppfreset;;