sig
  type svg
  type css
  type filter
  val new_svg_document :
    width:int -> height:int -> ?unit:string -> unit -> Svg.svg
  val finish_svg : Svg.svg -> unit
  val add_comment : Svg.svg -> s:string -> unit -> unit
  val add_newline : Svg.svg -> unit
  val get_svg_document : Svg.svg -> string
  val write_svg_file : Svg.svg -> filename:string -> unit
  val print_svg_document : Svg.svg -> unit
  val add_line :
    Svg.svg ->
    x1:int ->
    y1:int ->
    x2:int ->
    y2:int ->
    ?css:string ->
    ?style:string ->
    ?stroke:string ->
    ?stroke_width:float ->
    ?stroke_opacity:float -> ?filter:Svg.filter -> unit -> unit
  val add_polyline :
    Svg.svg ->
    points:(int * int) list ->
    ?css:string ->
    ?style:string ->
    ?stroke:string ->
    ?stroke_width:float ->
    ?stroke_opacity:float ->
    ?fill:string -> ?fill_opacity:float -> ?filter:Svg.filter -> unit -> unit
  val add_rect :
    Svg.svg ->
    x:int ->
    y:int ->
    width:int ->
    height:int ->
    ?rx:float ->
    ?ry:float ->
    ?fill:string ->
    ?fill_opacity:float ->
    ?stroke:string ->
    ?stroke_width:float ->
    ?stroke_opacity:float ->
    ?style:string -> ?css:string -> ?filter:Svg.filter -> unit -> unit
  val add_circle :
    Svg.svg ->
    cx:float ->
    cy:float ->
    r:float ->
    ?fill:string ->
    ?fill_opacity:float ->
    ?stroke:string ->
    ?stroke_width:float ->
    ?stroke_opacity:float ->
    ?style:string ->
    ?css:string -> ?id:string -> ?filter:Svg.filter -> unit -> unit
  val add_ellipse :
    Svg.svg ->
    cx:float ->
    cy:float ->
    rx:float ->
    ry:float ->
    ?fill:string ->
    ?fill_opacity:float ->
    ?stroke:string ->
    ?stroke_width:float ->
    ?stroke_opacity:float ->
    ?style:string ->
    ?css:string -> ?id:string -> ?filter:Svg.filter -> unit -> unit
  val add_triangle :
    Svg.svg ->
    p1:int * int ->
    p2:int * int ->
    p3:int * int ->
    ?fill:string ->
    ?fill_opacity:float ->
    ?stroke:string ->
    ?stroke_width:float ->
    ?stroke_opacity:float ->
    ?style:string ->
    ?css:string -> ?id:string -> ?filter:Svg.filter -> unit -> unit
  val add_text :
    Svg.svg ->
    x:int ->
    y:int ->
    text:string ->
    ?css:string ->
    ?style:string ->
    ?text_anchor:string ->
    ?font_family:string ->
    ?font_size:float ->
    ?font_weight:string ->
    ?font_style:string ->
    ?fill:string ->
    ?fill_opacity:float ->
    ?stroke:string ->
    ?stroke_width:float ->
    ?stroke_opacity:float -> ?filter:Svg.filter -> unit -> unit
  val begin_group :
    Svg.svg ->
    ?translate:float * float ->
    ?scale:float * float ->
    ?rotate:float * int * int ->
    ?skew_x:float -> ?skew_y:float -> unit -> unit
  val end_group : Svg.svg -> unit
  type path
  val empty_path : Svg.path
  val move_to : Svg.path -> x:float -> y:float -> Svg.path
  val line_to : Svg.path -> x:float -> y:float -> Svg.path
  val h_line : Svg.path -> x:float -> Svg.path
  val v_line : Svg.path -> y:float -> Svg.path
  val cubic_curve :
    Svg.path ->
    x1:float ->
    y1:float -> x2:float -> y2:float -> x:float -> y:float -> Svg.path
  val quad_curve :
    Svg.path -> x1:float -> y1:float -> x:float -> y:float -> Svg.path
  val close_path : Svg.path -> Svg.path
  val add_path :
    Svg.svg ->
    path:Svg.path ->
    ?fill:string ->
    ?fill_opacity:float ->
    ?stroke:string ->
    ?stroke_width:float ->
    ?stroke_opacity:float ->
    ?style:string -> ?css:string -> ?id:string -> unit -> unit
  module Relative :
    sig
      val move_to : Svg.path -> x:float -> y:float -> Svg.path
      val line_to : Svg.path -> x:float -> y:float -> Svg.path
      val h_line : Svg.path -> x:float -> Svg.path
      val v_line : Svg.path -> y:float -> Svg.path
      val cubic_curve :
        Svg.path ->
        x1:float ->
        y1:float -> x2:float -> y2:float -> x:float -> y:float -> Svg.path
      val quad_curve :
        Svg.path -> x1:float -> y1:float -> x:float -> y:float -> Svg.path
      val close_path : Svg.path -> Svg.path
    end
  val add_blur_filter : Svg.svg -> stdDeviation:float -> unit -> Svg.filter
  val add_linear_gradient :
    Svg.svg ->
    p1:int * int ->
    p2:int * int -> stops:(float * string * float) list -> unit -> string
  val new_css : unit -> Svg.css
  val fill : string
  val fill_opacity : string
  val stroke : string
  val stroke_width : string
  val stroke_opacity : string
  val text_anchor : string
  val font_family : string
  val font_size : string
  val font_weight : string
  val font_style : string
  val letter_spacing : string
  val word_spacing : string
  val css_add :
    Svg.css -> selector:string -> styles:(string * string) list -> unit
  val add_css_to_svg : Svg.css -> Svg.svg -> unit
  val to_style : styles:(string * string) list -> string
end