sig
  type warning =
      [ `Other of string
      | `Textless_glyph_cut of Vg.I.t
      | `Unsupported_cut of Vg.P.area * Vg.I.t
      | `Unsupported_glyph_cut of Vg.P.area * Vg.I.t ]
  val pp_warning : Format.formatter -> Vg.Vgr.warning -> unit
  type warn = Vg.Vgr.warning -> unit
  val xmp :
    ?title:string ->
    ?authors:string list ->
    ?subjects:string list ->
    ?description:string ->
    ?rights:string ->
    ?creator_tool:string -> ?create_date:float -> unit -> string
  type renderable = Gg.size2 * Gg.box2 * Vg.image
  type dst_stored =
      [ `Buffer of Buffer.t | `Channel of Pervasives.out_channel | `Manual ]
  type dst =
      [ `Buffer of Buffer.t
      | `Channel of Pervasives.out_channel
      | `Manual
      | `Other ]
  type 'a target constraint 'a = [< Vg.Vgr.dst ]
  type t = Vg.renderer
  val create :
    ?limit:int ->
    ?warn:Vg.Vgr.warn ->
    ([< Vg.Vgr.dst ] as 'a) Vg.Vgr.target -> '-> Vg.renderer
  val render :
    Vg.renderer ->
    [< `Await | `End | `Image of Vg.Vgr.renderable ] -> [ `Ok | `Partial ]
  val renderer_dst : Vg.renderer -> Vg.Vgr.dst
  val renderer_limit : Vg.renderer -> int
  module Manual :
    sig
      val dst : Vg.renderer -> bytes -> int -> int -> unit
      val dst_rem : Vg.renderer -> int
    end
  module Private :
    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
end