sig
  type t
  type style =
      Rect
    | Circle
    | RoundRect
    | Patatoid
    | Patatoid2
    | Ellipse
    | RoundBox
    | Custom of
        (Mlpost.Num.t ->
         Mlpost.Num.t -> Mlpost.Num.t * Mlpost.Num.t * Mlpost.Path.t)
  type 'a box_creator =
      ?dx:Mlpost.Num.t ->
      ?dy:Mlpost.Num.t ->
      ?name:string ->
      ?stroke:Mlpost.Color.t option ->
      ?pen:Mlpost.Pen.t -> ?fill:Mlpost.Color.t -> '-> Mlpost.Box.t
  val empty :
    ?width:Mlpost.Num.t ->
    ?height:Mlpost.Num.t ->
    ?style:Mlpost.Box.style ->
    ?name:string ->
    ?stroke:Mlpost.Color.t option ->
    ?pen:Mlpost.Pen.t -> ?fill:Mlpost.Color.t -> unit -> Mlpost.Box.t
  val empty_from_box :
    ?style:Mlpost.Box.style ->
    ?name:string ->
    ?stroke:Mlpost.Color.t option ->
    ?pen:Mlpost.Pen.t -> ?fill:Mlpost.Color.t -> Mlpost.Box.t -> Mlpost.Box.t
  val pic :
    ?style:Mlpost.Box.style -> Mlpost.Picture.t Mlpost.Box.box_creator
  val path : ?style:Mlpost.Box.style -> Mlpost.Path.t Mlpost.Box.box_creator
  val tex : ?style:Mlpost.Box.style -> string Mlpost.Box.box_creator
  val box : ?style:Mlpost.Box.style -> Mlpost.Box.t Mlpost.Box.box_creator
  val circle : Mlpost.Box.t Mlpost.Box.box_creator
  val ellipse : Mlpost.Box.t Mlpost.Box.box_creator
  val rect : Mlpost.Box.t Mlpost.Box.box_creator
  val round_rect : Mlpost.Box.t Mlpost.Box.box_creator
  val patatoid : Mlpost.Box.t Mlpost.Box.box_creator
  val patatoid2 : Mlpost.Box.t Mlpost.Box.box_creator
  val round_box : Mlpost.Box.t Mlpost.Box.box_creator
  val bpath : Mlpost.Box.t -> Mlpost.Path.t
  val ctr : Mlpost.Box.t -> Mlpost.Point.t
  val north : Mlpost.Box.t -> Mlpost.Point.t
  val south : Mlpost.Box.t -> Mlpost.Point.t
  val west : Mlpost.Box.t -> Mlpost.Point.t
  val east : Mlpost.Box.t -> Mlpost.Point.t
  val north_west : Mlpost.Box.t -> Mlpost.Point.t
  val south_west : Mlpost.Box.t -> Mlpost.Point.t
  val north_east : Mlpost.Box.t -> Mlpost.Point.t
  val south_east : Mlpost.Box.t -> Mlpost.Point.t
  type vposition =
      [ `Bot
      | `Bottom
      | `Center
      | `Custom of Mlpost.Box.t -> Mlpost.Num.t
      | `North
      | `South
      | `Top ]
  type hposition =
      [ `Center
      | `Custom of Mlpost.Box.t -> Mlpost.Num.t
      | `East
      | `Left
      | `Right
      | `West ]
  type position =
      [ `Bot
      | `Bottom
      | `Bottomleft
      | `Bottomright
      | `Center
      | `Custom of Mlpost.Box.t -> Mlpost.Point.t
      | `East
      | `Left
      | `Lowerleft
      | `Lowerright
      | `Lowleft
      | `Lowright
      | `North
      | `Northeast
      | `Northwest
      | `Right
      | `South
      | `Southeast
      | `Southwest
      | `Top
      | `Topleft
      | `Topright
      | `Upleft
      | `Upperleft
      | `Upperright
      | `Upright
      | `West ]
  val corner : Mlpost.Box.position -> Mlpost.Box.t -> Mlpost.Point.t
  val height : Mlpost.Box.t -> Mlpost.Num.t
  val width : Mlpost.Box.t -> Mlpost.Num.t
  val shift : Point.t -> t -> t
  val center : Mlpost.Point.t -> Mlpost.Box.t -> Mlpost.Box.t
  val draw : ?debug:bool -> Mlpost.Box.t -> Mlpost.Command.t
  val group :
    ?style:Mlpost.Box.style -> Mlpost.Box.t list Mlpost.Box.box_creator
  val halign :
    ?pos:Mlpost.Box.vposition ->
    Mlpost.Num.t -> Mlpost.Box.t list -> Mlpost.Box.t list
  val valign :
    ?pos:Mlpost.Box.hposition ->
    Mlpost.Num.t -> Mlpost.Box.t list -> Mlpost.Box.t list
  val hbox :
    ?padding:Mlpost.Num.t ->
    ?pos:Mlpost.Box.position ->
    ?style:Mlpost.Box.style ->
    ?min_width:Mlpost.Num.t ->
    ?same_width:bool -> Mlpost.Box.t list Mlpost.Box.box_creator
  val hbox_list :
    ?padding:Mlpost.Num.t ->
    ?pos:Mlpost.Box.position ->
    ?min_width:Mlpost.Num.t ->
    ?same_width:bool -> Mlpost.Box.t list -> Mlpost.Box.t list
  val vbox :
    ?padding:Mlpost.Num.t ->
    ?pos:Mlpost.Box.position ->
    ?style:Mlpost.Box.style ->
    ?min_height:Mlpost.Num.t ->
    ?same_height:bool -> Mlpost.Box.t list Mlpost.Box.box_creator
  val vbox_list :
    ?padding:Mlpost.Num.t ->
    ?pos:Mlpost.Box.position ->
    ?min_height:Mlpost.Num.t ->
    ?same_height:bool -> Mlpost.Box.t list -> Mlpost.Box.t list
  val tabular :
    ?hpadding:Mlpost.Num.t ->
    ?vpadding:Mlpost.Num.t ->
    ?pos:Mlpost.Command.position ->
    ?style:Mlpost.Box.style ->
    ?name:string ->
    ?stroke:Mlpost.Color.t option ->
    ?pen:Mlpost.Pen.t ->
    ?fill:Mlpost.Color.t -> Mlpost.Box.t array array -> Mlpost.Box.t
  val tabularl :
    ?hpadding:Mlpost.Num.t ->
    ?vpadding:Mlpost.Num.t ->
    ?pos:Mlpost.Command.position ->
    ?style:Mlpost.Box.style ->
    ?name:string ->
    ?stroke:Mlpost.Color.t option ->
    ?pen:Mlpost.Pen.t ->
    ?fill:Mlpost.Color.t -> Mlpost.Box.t list list -> Mlpost.Box.t
  val tabulari :
    ?hpadding:Mlpost.Num.t ->
    ?vpadding:Mlpost.Num.t ->
    ?pos:Mlpost.Command.position ->
    ?style:Mlpost.Box.style ->
    ?name:string ->
    ?stroke:Mlpost.Color.t option ->
    ?pen:Mlpost.Pen.t ->
    ?fill:Mlpost.Color.t ->
    int -> int -> (int -> int -> Mlpost.Box.t) -> Mlpost.Box.t
  val hplace :
    ?padding:Mlpost.Num.t ->
    ?pos:Mlpost.Box.position ->
    ?min_width:Mlpost.Num.t ->
    ?same_width:bool -> Mlpost.Box.t list -> Mlpost.Box.t list
  val vplace :
    ?padding:Mlpost.Num.t ->
    ?pos:Mlpost.Box.position ->
    ?min_height:Mlpost.Num.t ->
    ?same_height:bool -> Mlpost.Box.t list -> Mlpost.Box.t list
  val hblock :
    ?padding:Mlpost.Num.t ->
    ?pos:Mlpost.Command.position ->
    ?name:string ->
    ?stroke:Mlpost.Color.t option ->
    ?pen:Mlpost.Pen.t ->
    ?min_width:Mlpost.Num.t ->
    ?same_width:bool -> Mlpost.Box.t list -> Mlpost.Box.t
  val vblock :
    ?padding:Mlpost.Num.t ->
    ?pos:Mlpost.Command.position ->
    ?name:string ->
    ?stroke:Mlpost.Color.t option ->
    ?pen:Mlpost.Pen.t ->
    ?min_height:Mlpost.Num.t ->
    ?same_height:bool -> Mlpost.Box.t list -> Mlpost.Box.t
  val grid :
    ?hpadding:Mlpost.Num.t ->
    ?vpadding:Mlpost.Num.t ->
    ?pos:Mlpost.Command.position ->
    ?stroke:Mlpost.Color.t option ->
    ?pen:Mlpost.Pen.t -> Mlpost.Box.t array array -> Mlpost.Box.t
  val gridl :
    ?hpadding:Mlpost.Num.t ->
    ?vpadding:Mlpost.Num.t ->
    ?pos:Mlpost.Command.position ->
    ?stroke:Mlpost.Color.t option ->
    ?pen:Mlpost.Pen.t -> Mlpost.Box.t list list -> Mlpost.Box.t
  val gridi :
    ?hpadding:Mlpost.Num.t ->
    ?vpadding:Mlpost.Num.t ->
    ?pos:Mlpost.Command.position ->
    ?stroke:Mlpost.Color.t option ->
    ?pen:Mlpost.Pen.t ->
    int -> int -> (int -> int -> Mlpost.Box.t) -> Mlpost.Box.t
  val nth : int -> Mlpost.Box.t -> Mlpost.Box.t
  val get : string -> Mlpost.Box.t -> Mlpost.Box.t
  val sub : Mlpost.Box.t -> Mlpost.Box.t -> Mlpost.Box.t
  val elts : Mlpost.Box.t -> Mlpost.Box.t array
  val setp : string -> Mlpost.Point.t -> Mlpost.Box.t -> Mlpost.Box.t
  val getp : string -> Mlpost.Box.t -> Mlpost.Point.t
  val getpx : string -> Mlpost.Box.t -> Mlpost.Num.t
  val getpy : string -> Mlpost.Box.t -> Mlpost.Num.t
  val get_fill : Mlpost.Box.t -> Mlpost.Color.t option
  val set_fill : Mlpost.Color.t -> Mlpost.Box.t -> Mlpost.Box.t
  val get_stroke : Mlpost.Box.t -> Mlpost.Color.t option
  val set_stroke : Mlpost.Color.t -> Mlpost.Box.t -> Mlpost.Box.t
  val clear_stroke : Mlpost.Box.t -> Mlpost.Box.t
  val get_name : Mlpost.Box.t -> string
  val set_name : string -> Mlpost.Box.t -> Mlpost.Box.t
  val get_pen : Mlpost.Box.t -> Mlpost.Pen.t option
  val set_pen : Mlpost.Pen.t -> Mlpost.Box.t -> Mlpost.Box.t
  val set_height :
    Mlpost.Command.vposition -> Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
  val set_width :
    Mlpost.Command.hposition -> Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
  val set_height2 :
    Mlpost.Box.vposition ->
    Mlpost.Num.t ->
    Mlpost.Box.vposition -> Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
  val set_width2 :
    Mlpost.Box.hposition ->
    Mlpost.Num.t ->
    Mlpost.Box.hposition -> Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
  val set_size :
    Mlpost.Command.position ->
    width:Mlpost.Num.t -> height:Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
  val same_height :
    ?pos:Mlpost.Box.vposition -> Mlpost.Box.t list -> Mlpost.Box.t list
  val same_width :
    ?pos:Mlpost.Box.hposition -> Mlpost.Box.t list -> Mlpost.Box.t list
  val same_size :
    ?pos:Mlpost.Box.position -> Mlpost.Box.t list -> Mlpost.Box.t list
  val shadow : Mlpost.Box.t -> Mlpost.Box.t
  val cpath :
    ?style:Mlpost.Path.joint ->
    ?outd:Mlpost.Path.direction ->
    ?ind:Mlpost.Path.direction ->
    ?sep:Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t -> Mlpost.Path.t
  val cpath_left :
    ?style:Mlpost.Path.joint ->
    ?outd:Mlpost.Path.direction ->
    ?ind:Mlpost.Path.direction ->
    Mlpost.Box.t -> Mlpost.Point.t -> Mlpost.Path.t
  val cpath_right :
    ?style:Mlpost.Path.joint ->
    ?outd:Mlpost.Path.direction ->
    ?ind:Mlpost.Path.direction ->
    Mlpost.Point.t -> Mlpost.Box.t -> Mlpost.Path.t
  val transform : Mlpost.Transform.t -> Mlpost.Box.t -> Mlpost.Box.t
  val scale : Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
  val rotate : float -> Mlpost.Box.t -> Mlpost.Box.t
  val shift : Mlpost.Point.t -> Mlpost.Box.t -> Mlpost.Box.t
  val yscale : Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
  val xscale : Mlpost.Num.t -> Mlpost.Box.t -> Mlpost.Box.t
end