sig
  module Data :
    sig
      type segment =
          [ `Ccurve of Gg.p2 * Gg.p2 * Gg.p2
          | `Close
          | `Earc of bool * bool * float * Gg.size2 * Gg.p2
          | `Line of Gg.p2
          | `Qcurve of Gg.p2 * Gg.p2
          | `Sub of Gg.p2 ]
      type path = Vg.Vgr.Private.Data.segment list
      val of_path : Vg.P.t -> Vg.Vgr.Private.Data.path
      type tr =
          Move of Gg.v2
        | Rot of float
        | Scale of Gg.v2
        | Matrix of Gg.m3
      val tr_to_m3 : Vg.Vgr.Private.Data.tr -> Gg.M3.t
      val inv_tr_to_m3 : Vg.Vgr.Private.Data.tr -> Gg.M3.t
      type blender = [ `Atop | `Copy | `In | `Out | `Over | `Plus | `Xor ]
      type primitive =
          Const of Gg.color
        | Axial of Gg.Color.stops * Gg.p2 * Gg.p2
        | Radial of Gg.Color.stops * Gg.p2 * Gg.p2 * float
        | Raster of Gg.box2 * Gg.raster
      type glyph_run = {
        font : Vg.font;
        text : string option;
        o : Gg.p2;
        blocks : bool * (int * int) list;
        advances : Gg.v2 list;
        glyphs : Vg.glyph list;
      }
      type image =
          Primitive of Vg.Vgr.Private.Data.primitive
        | Cut of Vg.P.area * Vg.Vgr.Private.Data.path *
            Vg.Vgr.Private.Data.image
        | Cut_glyphs of Vg.P.area * Vg.Vgr.Private.Data.glyph_run *
            Vg.Vgr.Private.Data.image
        | Blend of Vg.Vgr.Private.Data.blender * float option *
            Vg.Vgr.Private.Data.image * Vg.Vgr.Private.Data.image
        | Tr of Vg.Vgr.Private.Data.tr * Vg.Vgr.Private.Data.image
      val of_image : Vg.I.t -> Vg.Vgr.Private.Data.image
    end
  module Font :
    sig
      val css_font : unit:string -> Vg.font -> string
      val css_weight : Vg.font -> string
      val css_slant : Vg.font -> string
    end
  module P :
    sig
      val of_data : Vg.Vgr.Private.Data.path -> Vg.P.t
      val earc_params :
        Gg.p2 ->
        large:bool ->
        cw:bool ->
        float -> Gg.v2 -> Gg.p2 -> (Gg.p2 * Gg.m2 * float * float) option
      val miter_limit : Vg.P.outline -> float
    end
  module I : sig val of_data : Vg.Vgr.Private.Data.image -> Vg.I.t end
  type renderer
  type k = Vg.Vgr.Private.renderer -> [ `Ok | `Partial ]
  type render_fun =
      [ `End | `Image of Gg.size2 * Gg.box2 * Vg.Vgr.Private.Data.image ] ->
      Vg.Vgr.Private.k -> Vg.Vgr.Private.k
  type 'a render_target =
      Vg.Vgr.Private.renderer -> '-> bool * Vg.Vgr.Private.render_fun
    constraint 'a = [< Vg.Vgr.dst ]
  val create_target :
    ([< Vg.Vgr.dst ] as 'a) Vg.Vgr.Private.render_target -> 'Vg.Vgr.target
  val renderer : Vg.Vgr.t -> Vg.Vgr.Private.renderer
  val limit : Vg.Vgr.Private.renderer -> int
  val warn : Vg.Vgr.Private.renderer -> Vg.Vgr.warning -> unit
  val partial : Vg.Vgr.Private.k -> Vg.Vgr.Private.renderer -> [> `Partial ]
  val flush :
    Vg.Vgr.Private.k -> Vg.Vgr.Private.renderer -> [ `Ok | `Partial ]
  val writeb :
    int -> Vg.Vgr.Private.k -> Vg.Vgr.Private.renderer -> [ `Ok | `Partial ]
  val writes :
    string ->
    int ->
    int -> Vg.Vgr.Private.k -> Vg.Vgr.Private.renderer -> [ `Ok | `Partial ]
  val writebuf :
    Buffer.t ->
    int ->
    int -> Vg.Vgr.Private.k -> Vg.Vgr.Private.renderer -> [ `Ok | `Partial ]
  val add_xml_data : Buffer.t -> string -> unit
end