1995-08-09 08:06:35 -07:00
|
|
|
(***********************************************************************)
|
|
|
|
(* *)
|
1996-04-30 07:53:58 -07:00
|
|
|
(* Objective Caml *)
|
1995-08-09 08:06:35 -07:00
|
|
|
(* *)
|
|
|
|
(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
|
|
|
|
(* *)
|
1996-04-30 07:53:58 -07:00
|
|
|
(* Copyright 1996 Institut National de Recherche en Informatique et *)
|
1999-11-17 10:59:06 -08:00
|
|
|
(* en Automatique. All rights reserved. This file is distributed *)
|
2001-12-07 05:41:02 -08:00
|
|
|
(* under the terms of the GNU Library General Public License, with *)
|
|
|
|
(* the special exception on linking described in file ../LICENSE. *)
|
1995-08-09 08:06:35 -07:00
|
|
|
(* *)
|
|
|
|
(***********************************************************************)
|
|
|
|
|
|
|
|
(* $Id$ *)
|
|
|
|
|
2008-10-08 06:09:39 -07:00
|
|
|
(** String operations.
|
|
|
|
Given a string [s] of length [l], we call character number in [s]
|
|
|
|
the index of a character in [s]. Indexes start at [0], and we will
|
|
|
|
call a character number valid in [s] if it falls within the range
|
|
|
|
[[0...l-1]]. A position is the point between two characters or at
|
|
|
|
the beginning or end of the string. We call a position valid
|
|
|
|
in [s] if it falls within the range [[0...l]]. Note that character
|
|
|
|
number [n] is between positions [n] and [n+1].
|
|
|
|
|
|
|
|
Two parameters [start] and [len] are said to designate a valid
|
|
|
|
substring of [s] if [len >= 0] and [start] and [start+len] are
|
|
|
|
valid positions in [s].
|
|
|
|
*)
|
1995-05-04 03:15:53 -07:00
|
|
|
|
1995-07-10 02:48:27 -07:00
|
|
|
external length : string -> int = "%string_length"
|
2001-12-03 14:16:03 -08:00
|
|
|
(** Return the length (number of characters) of the given string. *)
|
1995-05-04 03:15:53 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
external get : string -> int -> char = "%string_safe_get"
|
2001-10-26 16:33:00 -07:00
|
|
|
(** [String.get s n] returns character number [n] in string [s].
|
2003-11-21 08:06:08 -08:00
|
|
|
You can also write [s.[n]] instead of [String.get s n].
|
|
|
|
|
2008-10-08 06:09:39 -07:00
|
|
|
Raise [Invalid_argument] if [n] not a valid character number in [s]. *)
|
2003-11-21 08:06:08 -08:00
|
|
|
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
external set : string -> int -> char -> unit = "%string_safe_set"
|
2001-10-26 16:33:00 -07:00
|
|
|
(** [String.set s n c] modifies string [s] in place,
|
|
|
|
replacing the character number [n] by [c].
|
2003-11-21 08:06:08 -08:00
|
|
|
You can also write [s.[n] <- c] instead of [String.set s n c].
|
2008-10-08 06:09:39 -07:00
|
|
|
|
|
|
|
Raise [Invalid_argument] if [n] is not a valid character number in [s]. *)
|
1995-05-04 03:15:53 -07:00
|
|
|
|
2003-12-16 10:09:44 -08:00
|
|
|
external create : int -> string = "caml_create_string"
|
2001-10-26 16:33:00 -07:00
|
|
|
(** [String.create n] returns a fresh string of length [n].
|
|
|
|
The string initially contains arbitrary characters.
|
2008-10-08 06:09:39 -07:00
|
|
|
|
|
|
|
Raise [Invalid_argument] if [n < 0] or [n > ]{!Sys.max_string_length}. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val make : int -> char -> string
|
2001-10-26 16:33:00 -07:00
|
|
|
(** [String.make n c] returns a fresh string of length [n],
|
|
|
|
filled with the character [c].
|
2008-10-08 06:09:39 -07:00
|
|
|
|
2001-10-26 16:33:00 -07:00
|
|
|
Raise [Invalid_argument] if [n < 0] or [n > ]{!Sys.max_string_length}.*)
|
|
|
|
|
1995-05-04 03:15:53 -07:00
|
|
|
val copy : string -> string
|
2001-12-03 14:16:03 -08:00
|
|
|
(** Return a copy of the given string. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val sub : string -> int -> int -> string
|
2001-10-26 16:33:00 -07:00
|
|
|
(** [String.sub s start len] returns a fresh string of length [len],
|
2008-10-08 06:09:39 -07:00
|
|
|
containing the substring of [s] that starts at position [start] and
|
|
|
|
has length [len].
|
|
|
|
|
2001-10-26 16:33:00 -07:00
|
|
|
Raise [Invalid_argument] if [start] and [len] do not
|
2008-10-08 06:09:39 -07:00
|
|
|
designate a valid substring of [s]. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val fill : string -> int -> int -> char -> unit
|
2001-10-26 16:33:00 -07:00
|
|
|
(** [String.fill s start len c] modifies string [s] in place,
|
2008-10-08 06:09:39 -07:00
|
|
|
replacing [len] characters by [c], starting at [start].
|
|
|
|
|
2001-10-26 16:33:00 -07:00
|
|
|
Raise [Invalid_argument] if [start] and [len] do not
|
|
|
|
designate a valid substring of [s]. *)
|
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val blit : string -> int -> string -> int -> int -> unit
|
2001-10-26 16:33:00 -07:00
|
|
|
(** [String.blit src srcoff dst dstoff len] copies [len] characters
|
|
|
|
from string [src], starting at character number [srcoff], to
|
|
|
|
string [dst], starting at character number [dstoff]. It works
|
|
|
|
correctly even if [src] and [dst] are the same string,
|
2008-10-08 06:09:39 -07:00
|
|
|
and the source and destination intervals overlap.
|
|
|
|
|
2001-10-26 16:33:00 -07:00
|
|
|
Raise [Invalid_argument] if [srcoff] and [len] do not
|
|
|
|
designate a valid substring of [src], or if [dstoff] and [len]
|
|
|
|
do not designate a valid substring of [dst]. *)
|
1995-05-04 03:15:53 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val concat : string -> string list -> string
|
2001-12-04 13:30:02 -08:00
|
|
|
(** [String.concat sep sl] concatenates the list of strings [sl],
|
2001-10-26 16:33:00 -07:00
|
|
|
inserting the separator string [sep] between each. *)
|
1995-05-05 03:05:18 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val iter : (char -> unit) -> string -> unit
|
2001-10-26 16:33:00 -07:00
|
|
|
(** [String.iter f s] applies function [f] in turn to all
|
|
|
|
the characters of [s]. It is equivalent to
|
2004-11-24 16:06:06 -08:00
|
|
|
[f s.[0]; f s.[1]; ...; f s.[String.length s - 1]; ()]. *)
|
2001-09-06 01:52:32 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val escaped : string -> string
|
2001-10-26 16:33:00 -07:00
|
|
|
(** Return a copy of the argument, with special characters
|
|
|
|
represented by escape sequences, following the lexical
|
|
|
|
conventions of Objective Caml. If there is no special
|
|
|
|
character in the argument, return the original string itself,
|
|
|
|
not a copy. *)
|
1995-08-09 06:15:01 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val index : string -> char -> int
|
2008-10-08 06:09:39 -07:00
|
|
|
(** [String.index s c] returns the character number of the first
|
2001-10-26 16:33:00 -07:00
|
|
|
occurrence of character [c] in string [s].
|
2008-10-08 06:09:39 -07:00
|
|
|
|
2001-10-26 16:33:00 -07:00
|
|
|
Raise [Not_found] if [c] does not occur in [s]. *)
|
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val rindex : string -> char -> int
|
2008-10-08 06:09:39 -07:00
|
|
|
(** [String.rindex s c] returns the character number of the last
|
2001-10-26 16:33:00 -07:00
|
|
|
occurrence of character [c] in string [s].
|
2008-10-08 06:09:39 -07:00
|
|
|
|
2001-10-26 16:33:00 -07:00
|
|
|
Raise [Not_found] if [c] does not occur in [s]. *)
|
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val index_from : string -> int -> char -> int
|
2008-10-08 06:09:39 -07:00
|
|
|
(** [String.index_from s i c] returns the character number of the
|
|
|
|
first occurrence of character [c] in string [s] after position [i].
|
|
|
|
[String.index s c] is equivalent to [String.index_from s 0 c].
|
|
|
|
|
|
|
|
Raise [Invalid_argument] if [i] is not a valid position in [s].
|
|
|
|
Raise [Not_found] if [c] does not occur in [s] after position [i]. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val rindex_from : string -> int -> char -> int
|
2008-10-08 06:09:39 -07:00
|
|
|
(** [String.rindex_from s i c] returns the character number of the
|
|
|
|
last occurrence of character [c] in string [s] before position [i+1].
|
2001-10-26 16:33:00 -07:00
|
|
|
[String.rindex s c] is equivalent to
|
2008-10-08 06:09:39 -07:00
|
|
|
[String.rindex_from s (String.length s - 1) c].
|
|
|
|
|
|
|
|
Raise [Invalid_argument] if [i+1] is not a valid position in [s].
|
|
|
|
Raise [Not_found] if [c] does not occur in [s] before position [i+1]. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val contains : string -> char -> bool
|
2001-10-26 16:33:00 -07:00
|
|
|
(** [String.contains s c] tests if character [c]
|
|
|
|
appears in the string [s]. *)
|
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val contains_from : string -> int -> char -> bool
|
2001-10-26 16:33:00 -07:00
|
|
|
(** [String.contains_from s start c] tests if character [c]
|
2008-10-08 06:09:39 -07:00
|
|
|
appears in [s] after position [start].
|
|
|
|
[String.contains s c] is equivalent to
|
|
|
|
[String.contains_from s 0 c].
|
|
|
|
|
|
|
|
Raise [Invalid_argument] if [start] is not a valid position in [s]. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val rcontains_from : string -> int -> char -> bool
|
2001-10-26 16:33:00 -07:00
|
|
|
(** [String.rcontains_from s stop c] tests if character [c]
|
2008-10-08 06:09:39 -07:00
|
|
|
appears in [s] before position [stop+1].
|
|
|
|
|
|
|
|
Raise [Invalid_argument] if [stop < 0] or [stop+1] is not a valid
|
|
|
|
position in [s]. *)
|
1998-11-12 06:53:46 -08:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val uppercase : string -> string
|
2001-10-26 16:33:00 -07:00
|
|
|
(** Return a copy of the argument, with all lowercase letters
|
|
|
|
translated to uppercase, including accented letters of the ISO
|
|
|
|
Latin-1 (8859-1) character set. *)
|
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val lowercase : string -> string
|
2001-10-26 16:33:00 -07:00
|
|
|
(** Return a copy of the argument, with all uppercase letters
|
|
|
|
translated to lowercase, including accented letters of the ISO
|
|
|
|
Latin-1 (8859-1) character set. *)
|
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val capitalize : string -> string
|
2004-02-20 02:09:30 -08:00
|
|
|
(** Return a copy of the argument, with the first character set to uppercase. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val uncapitalize : string -> string
|
2004-02-20 02:09:30 -08:00
|
|
|
(** Return a copy of the argument, with the first character set to lowercase. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2002-06-26 02:13:59 -07:00
|
|
|
type t = string
|
|
|
|
(** An alias for the type of strings. *)
|
|
|
|
|
|
|
|
val compare: t -> t -> int
|
|
|
|
(** The comparison function for strings, with the same specification as
|
|
|
|
{!Pervasives.compare}. Along with the type [t], this function [compare]
|
|
|
|
allows the module [String] to be passed as argument to the functors
|
|
|
|
{!Set.Make} and {!Map.Make}. *)
|
1996-10-31 08:03:04 -08:00
|
|
|
|
2001-10-30 08:52:04 -08:00
|
|
|
(**/**)
|
1995-05-04 03:15:53 -07:00
|
|
|
|
1995-06-15 01:10:01 -07:00
|
|
|
external unsafe_get : string -> int -> char = "%string_unsafe_get"
|
|
|
|
external unsafe_set : string -> int -> char -> unit = "%string_unsafe_set"
|
2001-12-03 14:16:03 -08:00
|
|
|
external unsafe_blit :
|
2003-12-16 10:09:44 -08:00
|
|
|
string -> int -> string -> int -> int -> unit = "caml_blit_string" "noalloc"
|
2001-12-03 14:16:03 -08:00
|
|
|
external unsafe_fill :
|
2003-12-16 10:09:44 -08:00
|
|
|
string -> int -> int -> char -> unit = "caml_fill_string" "noalloc"
|