sig
  type fpoint = float * float
  type winding_rule = EvenOdd | NonZero
  type segment =
      Straight of Pdfgraphics.fpoint * Pdfgraphics.fpoint
    | Bezier of Pdfgraphics.fpoint * Pdfgraphics.fpoint *
        Pdfgraphics.fpoint * Pdfgraphics.fpoint
  type hole = Hole | Not_hole
  type closure = Closed | Open
  type subpath =
      Pdfgraphics.hole * Pdfgraphics.closure * Pdfgraphics.segment list
  type path = Pdfgraphics.winding_rule * Pdfgraphics.subpath list
  val string_of_path : Pdfgraphics.path -> string
  type tiling = Tiling
  type function_shading = {
    funshading_domain : float * float * float * float;
    funshading_matrix : Pdftransform.transform_matrix;
    funshading_function : Pdffun.t;
  }
  type radial_shading = {
    radialshading_coords : float * float * float * float * float * float;
    radialshading_domain : float * float;
    radialshading_function : Pdffun.t list;
    radialshading_extend : bool * bool;
  }
  type axial_shading = {
    axialshading_coords : float * float * float * float;
    axialshading_domain : float * float;
    axialshading_function : Pdffun.t list;
    axialshading_extend : bool * bool;
  }
  type shading_kind =
      FunctionShading of Pdfgraphics.function_shading
    | AxialShading of Pdfgraphics.axial_shading
    | RadialShading of Pdfgraphics.radial_shading
    | FreeFormGouraudShading
    | LatticeFormGouraudShading
    | CoonsPatchMesh
    | TensorProductPatchMesh
  type shading = {
    shading_colourspace : Pdf.pdfobject;
    shading_background : Pdf.pdfobject option;
    shading_bbox : Pdf.pdfobject option;
    shading_antialias : bool;
    shading_matrix : Pdftransform.transform_matrix;
    shading_extgstate : Pdf.pdfobject;
    shading : Pdfgraphics.shading_kind;
  }
  type pattern =
      ColouredTilingPattern of Pdfgraphics.tiling
    | UncolouredTilingPattern of Pdfgraphics.tiling
    | ShadingPattern of Pdfgraphics.shading
  type colvals =
      Floats of float list
    | Named of (string * float list)
    | Pattern of Pdfgraphics.pattern
  type transparency_attributes = {
    fill_transparency : float;
    line_transparency : float;
  }
  type path_attributes = {
    path_transform : Pdftransform.transform_matrix;
    path_fill : (Pdfspace.t * Pdfgraphics.colvals) option;
    path_line : (Pdfspace.t * Pdfgraphics.colvals) option;
    path_linewidth : float;
    path_joinstyle : int;
    path_capstyle : int;
    path_dash : float list * float;
    path_mitrelimit : float;
    path_transparency : Pdfgraphics.transparency_attributes;
    path_intent : string;
  }
  type text_attributes = { textmode : int; }
  type textblock_attributes = {
    textblock_transform : Pdftransform.transform_matrix;
  }
  type textblock = Pdfgraphics.text_attributes * Pdfops.t
  type image_attributes = {
    image_transform : Pdftransform.transform_matrix;
    image_transparency : float;
    image_softmask : Pdfgraphics.softmask option;
  }
  and softmask_subtype = Alpha | Luminosity
  and transparency_group = {
    tr_group_colourspace : Pdf.pdfobject option;
    isolated : bool;
    knockout : bool;
    tr_graphic : Pdfgraphics.t;
  }
  and softmask = {
    softmask_subtype : Pdfgraphics.softmask_subtype;
    transparency_group : Pdfgraphics.transparency_group;
    softmask_bbox : float * float * float * float;
    backdrop : float list option;
    softmask_transfer : Pdffun.t option;
  }
  and fontname = string * Pdf.pdfobject
  and graphic_elt =
      Path of (Pdfgraphics.path * Pdfgraphics.path_attributes)
    | Text of Pdfgraphics.textblock list * Pdfgraphics.textblock_attributes
    | MCPoint of string
    | MCPointProperties of string * Pdf.pdfobject
    | MCSection of string * Pdfgraphics.graphic_elt list
    | MCSectionProperties of string * Pdf.pdfobject *
        Pdfgraphics.graphic_elt list
    | Image of Pdfgraphics.image_attributes * int
    | GraphicInlineImage of Pdf.pdfobject * Pdfio.bytes *
        Pdftransform.transform_matrix
    | Clip of Pdfgraphics.path * Pdfgraphics.graphic_elt list
    | Shading of Pdfgraphics.path option * Pdfgraphics.shading *
        Pdftransform.transform_matrix
  and t = {
    elements : Pdfgraphics.graphic_elt list;
    fonts : Pdfgraphics.fontname list;
    resources : Pdf.pdfobject;
  }
  val bbox_of_graphic : Pdfgraphics.t -> float * float * float * float
  val graphic_of_page : Pdf.t -> Pdfpage.t -> Pdfgraphics.t
  val graphic_of_ops : Pdfops.t list -> Pdfgraphics.t
  val page_of_graphic :
    Pdf.t -> float * float * float * float -> Pdfgraphics.t -> Pdfpage.t
  val string_of_graphic : Pdfgraphics.t -> string
  val ops_of_simple_graphic : Pdfgraphics.t -> Pdfops.t list
  val streams_of_simple_graphic : Pdfgraphics.t -> Pdf.pdfobject list
  val transform_graphic :
    Pdftransform.transform_matrix -> Pdfgraphics.t -> Pdfgraphics.t
end