@@ -815,29 +815,48 @@ let pp_set_margin state n =
815815(* * Geometry functions and types *)
816816type geometry = { max_indent :int ; margin : int }
817817
818+ let validate_geometry {margin; max_indent} =
819+ if max_indent < 2 then
820+ Error " max_indent < 2"
821+ else if margin < = max_indent then
822+ Error " margin <= max_indent"
823+ else Ok ()
824+
818825let check_geometry geometry =
819- geometry.max_indent > 1
820- && geometry.margin > geometry.max_indent
826+ match validate_geometry geometry with
827+ | Ok () -> true
828+ | Error _ -> false
821829
822830let pp_get_margin state () = state.pp_margin
823831
832+ let pp_set_full_geometry state {margin; max_indent} =
833+ pp_set_margin state margin;
834+ pp_set_max_indent state max_indent;
835+ ()
836+
824837let pp_set_geometry state ~max_indent ~margin =
825- if max_indent < 2 then
826- raise ( Invalid_argument " Format.pp_set_geometry: max_indent < 2 " )
827- else if margin < = max_indent then
828- raise (Invalid_argument " Format.pp_set_geometry: margin <= max_indent " )
829- else
830- pp_set_margin state margin; pp_set_max_indent state max_indent
838+ let geometry = { max_indent; margin } in
839+ match validate_geometry geometry with
840+ | Error msg ->
841+ raise (Invalid_argument ( " Format.pp_set_geometry: " ^ msg) )
842+ | Ok () ->
843+ pp_set_full_geometry state geometry
831844
832845let pp_safe_set_geometry state ~max_indent ~margin =
833- if check_geometry {max_indent;margin} then
834- pp_set_geometry state ~max_indent ~margin
835- else
836- ()
846+ let geometry = { max_indent; margin } in
847+ match validate_geometry geometry with
848+ | Error _msg ->
849+ ()
850+ | Ok () ->
851+ pp_set_full_geometry state geometry
837852
838853let pp_get_geometry state () =
839854 { margin = pp_get_margin state () ; max_indent = pp_get_max_indent state () }
840855
856+ let pp_update_geometry state update =
857+ let geometry = pp_get_geometry state () in
858+ pp_set_full_geometry state (update geometry)
859+
841860(* Setting a formatter basic output functions. *)
842861let pp_set_formatter_out_functions state {
843862 out_string = f ;
@@ -1123,6 +1142,7 @@ and get_max_indent = pp_get_max_indent std_formatter
11231142and set_geometry = pp_set_geometry std_formatter
11241143and safe_set_geometry = pp_safe_set_geometry std_formatter
11251144and get_geometry = pp_get_geometry std_formatter
1145+ and update_geometry = pp_update_geometry std_formatter
11261146
11271147and set_max_boxes = pp_set_max_boxes std_formatter
11281148and get_max_boxes = pp_get_max_boxes std_formatter
0 commit comments