open UPervasives

module type Type = sig
  type t = string
  val get : string -> int -> uchar
  val next : string -> int -> int
  val prev : string -> int -> int
  val move : string -> int -> int -> int
  val nth : string -> int -> int
  val set : unit
  val make : int -> uchar -> string
  val init : int -> (int -> uchar) -> string
  val length : string -> int
  val bytelength : string -> int
  val copy : string -> string
  val sub : string -> int -> int -> string
  val concat : string -> string list -> string
  val iter : (uchar -> unit) -> string -> unit
  val escaped : string -> string
  val index : string -> uchar -> int
  val rindex : string -> uchar -> int
  val index_from : string -> int -> uchar -> int
  val rindex_from : string -> int -> uchar -> int
  val contain : string -> uchar -> bool
  val contain_from : string -> int -> uchar -> bool
  val rcontain_from : string -> int -> uchar -> bool
  val nfd : string -> string
  val nfkd : string -> string
  val nfc : string -> string
  val nfkc : string -> string
  val uppercase : ?locale:string -> string -> string
  val lowercase : ?locale:string -> string -> string
  val titlecase : ?locale:string -> string -> string
  val capitalize : ?locale:string -> string -> string
  val uncapitalize : ?locale:string -> string -> string
  val compare : string -> string -> int
val compare_col : 
    ?locale:string 
  -> ?strength:int
    -> ?variable:
	[ `Blanked | `Non_ignorable | `Shifted | `Shift_Trimmed ]
      -> string -> string -> int
val search_col :
    ?locale:string
  -> ?strength:int 
    -> ?variable: 
	[ `Blanked | `Non_ignorable | `Shifted | `Shift_Trimmed ]
      -> string -> string -> int -> int * int
end
