sig
  type point = {
    mutable char : CamomileLibrary.UChar.t;
    mutable bold : bool;
    mutable underline : bool;
    mutable blink : bool;
    mutable reverse : bool;
    mutable foreground : LTerm_style.color;
    mutable background : LTerm_style.color;
  }
  type matrix = LTerm_draw.point array array
  val make_matrix : LTerm_geom.size -> LTerm_draw.matrix
  val set_style : LTerm_draw.point -> LTerm_style.t -> unit
  type context
  val context : LTerm_draw.matrix -> LTerm_geom.size -> LTerm_draw.context
  exception Out_of_bounds
  val size : LTerm_draw.context -> LTerm_geom.size
  val sub : LTerm_draw.context -> LTerm_geom.rect -> LTerm_draw.context
  val clear : LTerm_draw.context -> unit
  val fill :
    LTerm_draw.context ->
    ?style:LTerm_style.t -> CamomileLibrary.UChar.t -> unit
  val fill_style : LTerm_draw.context -> LTerm_style.t -> unit
  val point : LTerm_draw.context -> int -> int -> LTerm_draw.point
  val draw_char :
    LTerm_draw.context ->
    int -> int -> ?style:LTerm_style.t -> CamomileLibrary.UChar.t -> unit
  val draw_string :
    LTerm_draw.context ->
    int -> int -> ?style:LTerm_style.t -> string -> unit
  val draw_styled :
    LTerm_draw.context ->
    int -> int -> ?style:LTerm_style.t -> LTerm_text.t -> unit
  val draw_string_aligned :
    LTerm_draw.context ->
    int ->
    LTerm_geom.horz_alignment -> ?style:LTerm_style.t -> string -> unit
  val draw_styled_aligned :
    LTerm_draw.context ->
    int ->
    LTerm_geom.horz_alignment -> ?style:LTerm_style.t -> LTerm_text.t -> unit
  type connection = Blank | Light | Heavy
  type piece = {
    top : LTerm_draw.connection;
    bottom : LTerm_draw.connection;
    left : LTerm_draw.connection;
    right : LTerm_draw.connection;
  }
  val draw_piece :
    LTerm_draw.context ->
    int -> int -> ?style:LTerm_style.t -> LTerm_draw.piece -> unit
  val draw_hline :
    LTerm_draw.context ->
    int ->
    int -> int -> ?style:LTerm_style.t -> LTerm_draw.connection -> unit
  val draw_vline :
    LTerm_draw.context ->
    int ->
    int -> int -> ?style:LTerm_style.t -> LTerm_draw.connection -> unit
  val draw_frame :
    LTerm_draw.context ->
    LTerm_geom.rect -> ?style:LTerm_style.t -> LTerm_draw.connection -> unit
end