sig
  module Annot :
    sig
      type layer_info = { innermost : bool; outermost : bool; }
      type tag =
          [ `Start of string | `Stop ] *
          (Stdlib.Lexing.position * Caml2html.Annot.layer_info)
      type filter = [ `All | `Innermost | `Outermost ]
      val parse :
        impl_file:string -> annot_file:string -> Caml2html.Annot.tag list
      val guess_annot_file : string -> string option
      val from_file :
        impl_file:string ->
        annot_file:string -> Caml2html.Annot.tag list option
    end
  module Plugin :
    sig
      type handler =
          [ `Command of string | `Function of string -> string option ]
      val add : string -> Caml2html.Plugin.handler -> unit
      val remove : string -> unit
      val exists : string -> bool
      val find : string -> Caml2html.Plugin.handler
      val count_newlines : string -> int
      val expand : string -> string -> string option
      val register_command : string -> unit
    end
  module Input :
    sig
      type token =
          [ `Comment of string
          | `Construct of string
          | `Keyword of string
          | `Newline
          | `Quotation of string
          | `Special_comment of string * string
          | `Start_annot of Caml2html.Annot.layer_info * string
          | `Stop_annot of Caml2html.Annot.layer_info
          | `String of string
          | `Tab
          | `Token of string ]
      val parse :
        ?annot:Caml2html.Annot.tag list ->
        Stdlib.Lexing.lexbuf -> Caml2html.Input.token list
      val string :
        ?filename:string ->
        ?annot:Caml2html.Annot.tag list ->
        string -> Caml2html.Input.token list
      val channel :
        ?filename:string ->
        ?annot:Caml2html.Annot.tag list ->
        Stdlib.in_channel -> Caml2html.Input.token list
      val file :
        ?annot:Caml2html.Annot.tag list ->
        string -> Caml2html.Input.token list
    end
  module Output :
    sig
      val version : string
      type class_definition = string list * (string * string) list
      val default_default_style : Caml2html.Output.class_definition list
      val default_style : string
      val key_color1 : string option
      val key_color2 : string option
      val key_color3 : string option
      val key_color4 : string option
      val key_color5 : string option
      val construct_color : string option * string option * string
      val comment_color : string option * string option * string
      val string_color : string option * string option * string
      val alpha_keyword_color : string option * string option * string
      val nonalpha_keyword_color : string option * string option * string
      val default_keyword_color_list :
        (string * (string option * string option * string)) list
      val default_keyword_colors :
        (string, string option * string option * string) Stdlib.Hashtbl.t
      val all_colors : (string option * string option * string) list
      val make_css :
        ?default:Caml2html.Output.class_definition list ->
        ?colors:(string option * string option * string) list ->
        string -> unit
      type style = [ `Inhead of string | `Inline | `Url of string ]
      type param = {
        line_numbers : bool;
        title : bool;
        body_only : bool;
        tab_size : int;
        footnote : bool;
        style : Caml2html.Output.style;
        html_comments : bool;
        charset : string;
        annot_filter : Caml2html.Annot.filter;
        no_annot : bool;
        ie7 : bool;
      }
      val default_param : Caml2html.Output.param
      val ocaml :
        ?nbsp:bool ->
        ?keyword_colors:(string, string option * string option * string)
                        Stdlib.Hashtbl.t ->
        ?param:Caml2html.Output.param ->
        Stdlib.Buffer.t -> Caml2html.Input.token list -> unit
      val ocamlcode :
        ?annot:Caml2html.Annot.tag list ->
        ?keyword_colors:(string, string option * string option * string)
                        Stdlib.Hashtbl.t ->
        ?param:Caml2html.Output.param ->
        ?tag_open:string -> ?tag_close:string -> string -> string
      val ocamlpre :
        ?annot:Caml2html.Annot.tag list ->
        ?keyword_colors:(string, string option * string option * string)
                        Stdlib.Hashtbl.t ->
        ?param:Caml2html.Output.param ->
        ?tag_open:string -> ?tag_close:string -> string -> string
      val ocaml_file :
        ?filename:string ->
        ?keyword_colors:(string, string option * string option * string)
                        Stdlib.Hashtbl.t ->
        param:Caml2html.Output.param ->
        Stdlib.Buffer.t -> Caml2html.Input.token list -> unit
      val begin_document :
        ?param:Caml2html.Output.param ->
        Stdlib.Buffer.t -> string list -> unit
      val end_document :
        ?param:Caml2html.Output.param -> Stdlib.Buffer.t -> unit
      val handle_file :
        ?keyword_colors:(string, string option * string option * string)
                        Stdlib.Hashtbl.t ->
        ?param:Caml2html.Output.param -> Stdlib.Buffer.t -> string -> unit
      val save_file : ?dir:string -> Stdlib.Buffer.t -> string -> unit
      val ocaml_document :
        ?dir:string ->
        ?keyword_colors:(string, string option * string option * string)
                        Stdlib.Hashtbl.t ->
        ?param:Caml2html.Output.param -> string list -> string -> unit
    end
  module Output_latex :
    sig
      type class_definition = string list * (string * string) list
      val default_style : string
      val key_color1 : string option
      val key_color2 : string option
      val key_color3 : string option
      val key_color4 : string option
      val key_color5 : string option
      val construct_color : string option * string
      val comment_color : string option * string
      val string_color : string option * string
      val alpha_keyword_color : string option * string
      val nonalpha_keyword_color : string option * string
      val default_keyword_color_list :
        (string * (string option * string)) list
      val default_keyword_colors :
        (string, string option * string) Stdlib.Hashtbl.t
      val all_colors : (string option * string) list
      val make_defs_file :
        ?colors:(string option * string) list -> string -> unit
      type param = {
        line_numbers : bool;
        title : bool;
        body_only : bool;
        tab_size : int;
        latex_comments : bool;
        defs : string;
      }
      val default_param : Caml2html.Output_latex.param
      val ocaml :
        ?keyword_colors:(string, string option * string) Stdlib.Hashtbl.t ->
        ?param:Caml2html.Output_latex.param ->
        Stdlib.Buffer.t -> Caml2html.Input.token list -> unit
      val ocaml_file :
        ?filename:string ->
        ?keyword_colors:(string, string option * string) Stdlib.Hashtbl.t ->
        param:Caml2html.Output_latex.param ->
        Stdlib.Buffer.t -> Caml2html.Input.token list -> unit
      val begin_document :
        ?param:Caml2html.Output_latex.param ->
        Stdlib.Buffer.t -> string list -> unit
      val end_document :
        ?param:Caml2html.Output_latex.param -> Stdlib.Buffer.t -> unit
      val handle_file :
        ?keyword_colors:(string, string option * string) Stdlib.Hashtbl.t ->
        ?param:Caml2html.Output_latex.param ->
        Stdlib.Buffer.t -> string -> unit
      val save_file : ?dir:string -> Stdlib.Buffer.t -> string -> unit
      val ocaml_document :
        ?dir:string ->
        ?keyword_colors:(string, string option * string) Stdlib.Hashtbl.t ->
        ?param:Caml2html.Output_latex.param -> string list -> string -> unit
    end
end