sig
  module type Type =
    sig
      type t
      val get :
        CamomileLibrary.Type.SubText.Type.t ->
        int -> CamomileLibrary.Type.UChar.t
      val init :
        int ->
        (int -> CamomileLibrary.Type.UChar.t) ->
        CamomileLibrary.Type.SubText.Type.t
      val length : CamomileLibrary.Type.SubText.Type.t -> int
      type index
      val look :
        CamomileLibrary.Type.SubText.Type.t ->
        CamomileLibrary.Type.SubText.Type.index ->
        CamomileLibrary.Type.UChar.t
      val nth :
        CamomileLibrary.Type.SubText.Type.t ->
        int -> CamomileLibrary.Type.SubText.Type.index
      val first :
        CamomileLibrary.Type.SubText.Type.t ->
        CamomileLibrary.Type.SubText.Type.index
      val last :
        CamomileLibrary.Type.SubText.Type.t ->
        CamomileLibrary.Type.SubText.Type.index
      val next :
        CamomileLibrary.Type.SubText.Type.t ->
        CamomileLibrary.Type.SubText.Type.index ->
        CamomileLibrary.Type.SubText.Type.index
      val prev :
        CamomileLibrary.Type.SubText.Type.t ->
        CamomileLibrary.Type.SubText.Type.index ->
        CamomileLibrary.Type.SubText.Type.index
      val move :
        CamomileLibrary.Type.SubText.Type.t ->
        CamomileLibrary.Type.SubText.Type.index ->
        int -> CamomileLibrary.Type.SubText.Type.index
      val out_of_range :
        CamomileLibrary.Type.SubText.Type.t ->
        CamomileLibrary.Type.SubText.Type.index -> bool
      val compare_index :
        CamomileLibrary.Type.SubText.Type.t ->
        CamomileLibrary.Type.SubText.Type.index ->
        CamomileLibrary.Type.SubText.Type.index -> int
      val iter :
        (CamomileLibrary.Type.UChar.t -> unit) ->
        CamomileLibrary.Type.SubText.Type.t -> unit
      val compare :
        CamomileLibrary.Type.SubText.Type.t ->
        CamomileLibrary.Type.SubText.Type.t -> int
      module Buf :
        sig
          type buf
          val create : int -> CamomileLibrary.Type.SubText.Type.Buf.buf
          val contents :
            CamomileLibrary.Type.SubText.Type.Buf.buf ->
            CamomileLibrary.Type.SubText.Type.t
          val clear : CamomileLibrary.Type.SubText.Type.Buf.buf -> unit
          val reset : CamomileLibrary.Type.SubText.Type.Buf.buf -> unit
          val add_char :
            CamomileLibrary.Type.SubText.Type.Buf.buf ->
            CamomileLibrary.Type.UChar.t -> unit
          val add_string :
            CamomileLibrary.Type.SubText.Type.Buf.buf ->
            CamomileLibrary.Type.SubText.Type.t -> unit
          val add_buffer :
            CamomileLibrary.Type.SubText.Type.Buf.buf ->
            CamomileLibrary.Type.SubText.Type.Buf.buf -> unit
        end
      type ur_text
      type ur_index
      val refer :
        CamomileLibrary.Type.SubText.Type.ur_text ->
        CamomileLibrary.Type.SubText.Type.ur_index ->
        CamomileLibrary.Type.SubText.Type.ur_index ->
        CamomileLibrary.Type.SubText.Type.t
      val excerpt :
        CamomileLibrary.Type.SubText.Type.t ->
        CamomileLibrary.Type.SubText.Type.ur_text
      val context :
        CamomileLibrary.Type.SubText.Type.t ->
        CamomileLibrary.Type.SubText.Type.ur_text *
        CamomileLibrary.Type.SubText.Type.ur_index *
        CamomileLibrary.Type.SubText.Type.ur_index
      val ur_index_of :
        CamomileLibrary.Type.SubText.Type.t ->
        CamomileLibrary.Type.SubText.Type.index ->
        CamomileLibrary.Type.SubText.Type.ur_index
    end
  module Make :
    functor (Text : UnicodeString.Type->
      sig
        type t
        val get : t -> int -> UChar.t
        val init : int -> (int -> UChar.t) -> t
        val length : t -> int
        type index
        val look : t -> index -> UChar.t
        val nth : t -> int -> index
        val first : t -> index
        val last : t -> index
        val next : t -> index -> index
        val prev : t -> index -> index
        val move : t -> index -> int -> index
        val out_of_range : t -> index -> bool
        val compare_index : t -> index -> index -> int
        val iter : (UChar.t -> unit) -> t -> unit
        val compare : t -> t -> int
        module Buf :
          sig
            type buf
            val create : int -> buf
            val contents : buf -> t
            val clear : buf -> unit
            val reset : buf -> unit
            val add_char : buf -> UChar.t -> unit
            val add_string : buf -> t -> unit
            val add_buffer : buf -> buf -> unit
          end
        type ur_text = Text.t
        type ur_index = Text.index
        val refer : ur_text -> ur_index -> ur_index -> t
        val excerpt : t -> ur_text
        val context : t -> ur_text * ur_index * ur_index
        val ur_index_of : t -> index -> ur_index
      end
end