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