2016-02-18 07:11:59 -08:00
|
|
|
(**************************************************************************)
|
|
|
|
(* *)
|
|
|
|
(* OCaml *)
|
|
|
|
(* *)
|
|
|
|
(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
|
|
|
|
(* *)
|
|
|
|
(* Copyright 1996 Institut National de Recherche en Informatique et *)
|
|
|
|
(* en Automatique. *)
|
|
|
|
(* *)
|
|
|
|
(* All rights reserved. This file is distributed under the terms of *)
|
|
|
|
(* the GNU Lesser General Public License version 2.1, with the *)
|
|
|
|
(* special exception on linking described in the file LICENSE. *)
|
|
|
|
(* *)
|
|
|
|
(**************************************************************************)
|
1995-08-09 08:06:35 -07:00
|
|
|
|
2020-07-08 06:13:08 -07:00
|
|
|
(* NOTE:
|
|
|
|
If this file is stringLabels.mli, run tools/unlabel after editing it to
|
|
|
|
generate string.mli.
|
|
|
|
|
|
|
|
If this file is string.mli, do not edit it directly -- edit
|
|
|
|
stringLabels.mli instead.
|
2020-07-07 11:34:14 -07:00
|
|
|
*)
|
|
|
|
|
2008-10-08 06:09:39 -07:00
|
|
|
(** String operations.
|
2012-02-05 01:51:49 -08:00
|
|
|
|
2014-04-29 04:56:17 -07:00
|
|
|
A string is an immutable data structure that contains a
|
|
|
|
fixed-length sequence of (single-byte) characters. Each character
|
|
|
|
can be accessed in constant time through its index.
|
|
|
|
|
2014-05-01 14:54:15 -07:00
|
|
|
Given a string [s] of length [l], we can access each of the [l]
|
2014-04-29 04:56:17 -07:00
|
|
|
characters of [s] via its index in the sequence. Indexes start at
|
|
|
|
[0], and we will call an index valid in [s] if it falls within the
|
|
|
|
range [[0...l-1]] (inclusive). 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]]
|
|
|
|
(inclusive). Note that the character at index [n] is between
|
|
|
|
positions [n] and [n+1].
|
2008-10-08 06:09:39 -07:00
|
|
|
|
|
|
|
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].
|
2012-01-30 07:33:42 -08:00
|
|
|
|
2019-05-02 10:24:53 -07:00
|
|
|
Note: OCaml strings used to be modifiable in place, for instance via
|
|
|
|
the {!String.set} and {!String.blit} functions described below. This
|
|
|
|
usage is only possible when the compiler is put in "unsafe-string"
|
|
|
|
mode by giving the [-unsafe-string] command-line option. This
|
|
|
|
compatibility mode makes the types [string] and [bytes] (see module
|
|
|
|
{!Bytes}) interchangeable so that functions expecting byte sequences
|
|
|
|
can also accept strings as arguments and modify them.
|
|
|
|
|
|
|
|
The distinction between [bytes] and [string] was introduced in OCaml
|
|
|
|
4.02, and the "unsafe-string" compatibility mode was the default
|
|
|
|
until OCaml 4.05. Starting with 4.06, the compatibility mode is
|
|
|
|
opt-in; we intend to remove the option in the future.
|
2020-07-07 11:34:14 -07:00
|
|
|
|
|
|
|
The labeled version of this module, {!StringLabels}, is intended to be used
|
|
|
|
through {!StdLabels} which replaces {!Array}, {!Bytes}, {!List} and
|
|
|
|
{!String} with their labeled counterparts
|
|
|
|
|
|
|
|
For example:
|
|
|
|
{[
|
|
|
|
open StdLabels
|
|
|
|
|
|
|
|
let to_upper = String.map ~f:Char.uppercase_ascii
|
|
|
|
]} *)
|
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"
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [get s n] returns the character at index [n] in string [s].
|
2003-11-21 08:06:08 -08:00
|
|
|
You can also write [s.[n]] instead of [String.get s n].
|
2020-06-30 06:06:45 -07:00
|
|
|
@raise Invalid_argument if [n] not a valid index in [s]. *)
|
2003-11-21 08:06:08 -08:00
|
|
|
|
2016-08-19 07:02:45 -07:00
|
|
|
external set : bytes -> int -> char -> unit = "%string_safe_set"
|
2020-07-07 11:34:14 -07:00
|
|
|
[@@ocaml.deprecated "Use Bytes.set/BytesLabels.set instead."]
|
|
|
|
(** [set s n c] modifies byte sequence [s] in place,
|
2014-04-29 04:56:17 -07:00
|
|
|
replacing the byte at index [n] with [c].
|
2003-11-21 08:06:08 -08:00
|
|
|
You can also write [s.[n] <- c] instead of [String.set s n c].
|
2020-06-30 06:06:45 -07:00
|
|
|
@raise Invalid_argument if [n] is not a valid index in [s].
|
1995-05-04 03:15:53 -07:00
|
|
|
|
2020-07-07 11:34:14 -07:00
|
|
|
@deprecated This is a deprecated alias of {!Bytes.set}. *)
|
2008-10-08 06:09:39 -07:00
|
|
|
|
2016-08-30 06:18:02 -07:00
|
|
|
external create : int -> bytes = "caml_create_string"
|
2020-07-07 11:34:14 -07:00
|
|
|
[@@ocaml.deprecated "Use Bytes.create/BytesLabels.create instead."]
|
|
|
|
(** [create n] returns a fresh byte sequence of length [n].
|
2014-04-29 04:56:17 -07:00
|
|
|
The sequence is uninitialized and contains arbitrary bytes.
|
2020-06-30 06:06:45 -07:00
|
|
|
@raise Invalid_argument if [n < 0] or [n > ]{!Sys.max_string_length}.
|
2014-04-29 04:56:17 -07:00
|
|
|
|
2020-07-07 11:34:14 -07:00
|
|
|
@deprecated This is a deprecated alias of {!Bytes.create}. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val make : int -> char -> string
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [make n c] returns a fresh string of length [n],
|
2001-10-26 16:33:00 -07:00
|
|
|
filled with the character [c].
|
2020-06-30 06:06:45 -07:00
|
|
|
@raise Invalid_argument if [n < 0] or [n > ]{!Sys.max_string_length}. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2014-07-28 06:29:50 -07:00
|
|
|
val init : int -> (int -> char) -> string
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [init n f] returns a string of length [n], with character
|
2014-08-06 08:57:38 -07:00
|
|
|
[i] initialized to the result of [f i] (called in increasing
|
|
|
|
index order).
|
2014-07-28 06:29:50 -07:00
|
|
|
|
2020-06-30 06:06:45 -07:00
|
|
|
@raise Invalid_argument if [n < 0] or [n > ]{!Sys.max_string_length}.
|
2014-08-06 08:57:38 -07:00
|
|
|
@since 4.02.0
|
|
|
|
*)
|
2014-07-28 06:29:50 -07:00
|
|
|
|
2020-07-07 11:34:14 -07:00
|
|
|
val copy : string -> string [@@ocaml.deprecated]
|
2014-08-22 06:45:02 -07:00
|
|
|
(** Return a copy of the given string.
|
|
|
|
|
|
|
|
@deprecated Because strings are immutable, it doesn't make much
|
|
|
|
sense to make identical copies of them. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val sub : string -> int -> int -> string
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [sub s pos len] returns a fresh string of length [len],
|
|
|
|
containing the substring of [s] that starts at position [pos] and
|
2008-10-08 06:09:39 -07:00
|
|
|
has length [len].
|
2020-07-07 11:34:14 -07:00
|
|
|
@raise Invalid_argument if [pos] 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
|
|
|
|
2014-10-15 06:34:58 -07:00
|
|
|
val fill : bytes -> int -> int -> char -> unit
|
2020-07-07 11:34:14 -07:00
|
|
|
[@@ocaml.deprecated "Use Bytes.fill/BytesLabels.fill instead."]
|
|
|
|
(** [fill s pos len c] modifies byte sequence [s] in place,
|
|
|
|
replacing [len] bytes by [c], starting at [pos].
|
|
|
|
@raise Invalid_argument if [pos] and [len] do not
|
|
|
|
designate a valid substring of [s].
|
|
|
|
|
|
|
|
@deprecated This is a deprecated alias of {!Bytes.fill}. *)
|
|
|
|
|
|
|
|
val blit :
|
|
|
|
string -> int -> bytes -> int -> int
|
|
|
|
-> unit
|
|
|
|
(** [blit src src_pos dst dst_pos len] copies [len] bytes
|
|
|
|
from the string [src], starting at index [src_pos],
|
|
|
|
to byte sequence [dst], starting at character number [dst_pos].
|
|
|
|
@raise Invalid_argument if [src_pos] and [len] do not
|
|
|
|
designate a valid range of [src], or if [dst_pos] and [len]
|
|
|
|
do not designate a valid range of [dst]. *)
|
1995-05-04 03:15:53 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val concat : string -> string list -> string
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [concat sep sl] concatenates the list of strings [sl],
|
2014-08-22 06:45:02 -07:00
|
|
|
inserting the separator string [sep] between each.
|
2020-06-30 06:06:45 -07:00
|
|
|
@raise Invalid_argument if the result is longer than
|
2014-08-22 06:45:02 -07:00
|
|
|
{!Sys.max_string_length} bytes. *)
|
1995-05-05 03:05:18 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val iter : (char -> unit) -> string -> unit
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [iter f s] applies function [f] in turn to all
|
2001-10-26 16:33:00 -07:00
|
|
|
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
|
|
|
|
2010-11-05 01:15:36 -07:00
|
|
|
val iteri : (int -> char -> unit) -> string -> unit
|
|
|
|
(** Same as {!String.iter}, but the
|
2011-05-13 06:30:30 -07:00
|
|
|
function is applied to the index of the element as first argument
|
|
|
|
(counting from 0), and the character itself as second argument.
|
2014-04-29 04:56:17 -07:00
|
|
|
@since 4.00.0 *)
|
2010-11-05 01:15:36 -07:00
|
|
|
|
2012-01-06 00:05:00 -08:00
|
|
|
val map : (char -> char) -> string -> string
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [map f s] applies function [f] in turn to all
|
|
|
|
the characters of [s] and stores the results in a new string that
|
|
|
|
is returned.
|
|
|
|
@since 4.00.0 *)
|
2014-08-06 08:57:38 -07:00
|
|
|
|
|
|
|
val mapi : (int -> char -> char) -> string -> string
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [mapi f s] calls [f] with each character of [s] and its
|
2014-08-06 08:57:38 -07:00
|
|
|
index (in increasing index order) and stores the results in a new
|
|
|
|
string that is returned.
|
|
|
|
@since 4.02.0 *)
|
2012-01-06 00:05:00 -08:00
|
|
|
|
2012-03-08 11:52:03 -08:00
|
|
|
val trim : string -> string
|
2012-03-08 14:27:57 -08:00
|
|
|
(** Return a copy of the argument, without leading and trailing
|
|
|
|
whitespace. The characters regarded as whitespace are: [' '],
|
2020-07-07 11:34:14 -07:00
|
|
|
['\012'], ['\n'], ['\r'], and ['\t']. If there is no leading nor
|
2012-03-08 14:27:57 -08:00
|
|
|
trailing whitespace character in the argument, return the original
|
|
|
|
string itself, not a copy.
|
|
|
|
@since 4.00.0 *)
|
2012-03-08 11:52:03 -08: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
|
2015-03-11 11:41:15 -07:00
|
|
|
represented by escape sequences, following the lexical
|
|
|
|
conventions of OCaml.
|
|
|
|
All characters outside the ASCII printable range (32..126) are
|
|
|
|
escaped, as well as backslash and double-quote.
|
2014-08-22 06:45:02 -07:00
|
|
|
|
2015-03-11 11:41:15 -07:00
|
|
|
If there is no special character in the argument that needs
|
|
|
|
escaping, return the original string itself, not a copy.
|
2020-06-30 06:06:45 -07:00
|
|
|
@raise Invalid_argument if the result is longer than
|
2015-03-11 11:41:15 -07:00
|
|
|
{!Sys.max_string_length} bytes.
|
|
|
|
|
|
|
|
The function {!Scanf.unescaped} is a left inverse of [escaped],
|
|
|
|
i.e. [Scanf.unescaped (escaped s) = s] for any string [s] (unless
|
|
|
|
[escape s] fails). *)
|
1995-08-09 06:15:01 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val index : string -> char -> int
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [index s c] returns the index of the first
|
2001-10-26 16:33:00 -07:00
|
|
|
occurrence of character [c] in string [s].
|
2020-06-30 06:06:45 -07:00
|
|
|
@raise Not_found if [c] does not occur in [s]. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2016-11-07 08:11:35 -08:00
|
|
|
val index_opt: string -> char -> int option
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [index_opt s c] returns the index of the first
|
2016-11-07 08:11:35 -08:00
|
|
|
occurrence of character [c] in string [s], or
|
|
|
|
[None] if [c] does not occur in [s].
|
|
|
|
@since 4.05 *)
|
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val rindex : string -> char -> int
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [rindex s c] returns the index of the last
|
2001-10-26 16:33:00 -07:00
|
|
|
occurrence of character [c] in string [s].
|
2020-06-30 06:06:45 -07:00
|
|
|
@raise Not_found if [c] does not occur in [s]. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2016-11-07 08:11:35 -08:00
|
|
|
val rindex_opt: string -> char -> int option
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [index_opt s c] returns the index of the first
|
|
|
|
occurrence of character [c] in string [s], or
|
|
|
|
[None] if [c] does not occur in [s].
|
2016-11-07 08:11:35 -08:00
|
|
|
@since 4.05 *)
|
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val index_from : string -> int -> char -> int
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [index_from s i c] returns the index of the
|
2008-10-08 06:09:39 -07:00
|
|
|
first occurrence of character [c] in string [s] after position [i].
|
|
|
|
[String.index s c] is equivalent to [String.index_from s 0 c].
|
2020-06-30 06:06:45 -07:00
|
|
|
@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
|
|
|
|
2016-11-07 08:11:35 -08:00
|
|
|
val index_from_opt: string -> int -> char -> int option
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [index_from_opt s i c] returns the index of the
|
2016-11-07 08:11:35 -08:00
|
|
|
first occurrence of character [c] in string [s] after position [i]
|
|
|
|
or [None] if [c] does not occur in [s] after position [i].
|
|
|
|
|
|
|
|
[String.index_opt s c] is equivalent to [String.index_from_opt s 0 c].
|
2020-06-30 06:06:45 -07:00
|
|
|
@raise Invalid_argument if [i] is not a valid position in [s].
|
2016-11-07 08:11:35 -08:00
|
|
|
|
|
|
|
@since 4.05
|
|
|
|
*)
|
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val rindex_from : string -> int -> char -> int
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [rindex_from s i c] returns the index of the
|
2008-10-08 06:09:39 -07:00
|
|
|
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].
|
2020-06-30 06:06:45 -07:00
|
|
|
@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
|
|
|
|
2016-11-07 08:11:35 -08:00
|
|
|
val rindex_from_opt: string -> int -> char -> int option
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [rindex_from_opt s i c] returns the index of the
|
2016-11-07 08:11:35 -08:00
|
|
|
last occurrence of character [c] in string [s] before position [i+1]
|
|
|
|
or [None] if [c] does not occur in [s] before position [i+1].
|
|
|
|
|
|
|
|
[String.rindex_opt s c] is equivalent to
|
|
|
|
[String.rindex_from_opt s (String.length s - 1) c].
|
2020-06-30 06:06:45 -07:00
|
|
|
@raise Invalid_argument if [i+1] is not a valid position in [s].
|
2016-11-07 08:11:35 -08:00
|
|
|
|
|
|
|
@since 4.05
|
|
|
|
*)
|
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val contains : string -> char -> bool
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [contains s c] tests if character [c]
|
2001-10-26 16:33:00 -07:00
|
|
|
appears in the string [s]. *)
|
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val contains_from : string -> int -> char -> bool
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [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].
|
2020-06-30 06:06:45 -07:00
|
|
|
@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
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [rcontains_from s stop c] tests if character [c]
|
2008-10-08 06:09:39 -07:00
|
|
|
appears in [s] before position [stop+1].
|
2020-06-30 06:06:45 -07:00
|
|
|
@raise Invalid_argument if [stop < 0] or [stop+1] is not a valid
|
2008-10-08 06:09:39 -07:00
|
|
|
position in [s]. *)
|
1998-11-12 06:53:46 -08:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val uppercase : string -> string
|
2014-12-21 03:46:18 -08:00
|
|
|
[@@ocaml.deprecated "Use String.uppercase_ascii instead."]
|
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
|
2014-12-21 03:46:18 -08:00
|
|
|
Latin-1 (8859-1) character set.
|
|
|
|
@deprecated Functions operating on Latin-1 character set are deprecated. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val lowercase : string -> string
|
2014-12-21 03:46:18 -08:00
|
|
|
[@@ocaml.deprecated "Use String.lowercase_ascii instead."]
|
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
|
2014-12-21 03:46:18 -08:00
|
|
|
Latin-1 (8859-1) character set.
|
|
|
|
@deprecated Functions operating on Latin-1 character set are deprecated. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val capitalize : string -> string
|
2014-12-21 03:46:18 -08:00
|
|
|
[@@ocaml.deprecated "Use String.capitalize_ascii instead."]
|
|
|
|
(** Return a copy of the argument, with the first character set to uppercase,
|
|
|
|
using the ISO Latin-1 (8859-1) character set..
|
|
|
|
@deprecated Functions operating on Latin-1 character set are deprecated. *)
|
2001-10-26 16:33:00 -07:00
|
|
|
|
2001-12-03 14:16:03 -08:00
|
|
|
val uncapitalize : string -> string
|
2014-12-21 03:46:18 -08:00
|
|
|
[@@ocaml.deprecated "Use String.uncapitalize_ascii instead."]
|
|
|
|
(** Return a copy of the argument, with the first character set to lowercase,
|
|
|
|
using the ISO Latin-1 (8859-1) character set..
|
|
|
|
@deprecated Functions operating on Latin-1 character set are deprecated. *)
|
|
|
|
|
|
|
|
val uppercase_ascii : string -> string
|
|
|
|
(** Return a copy of the argument, with all lowercase letters
|
2014-12-21 03:46:23 -08:00
|
|
|
translated to uppercase, using the US-ASCII character set.
|
2020-07-07 11:34:14 -07:00
|
|
|
@since 4.05.0 in labeled module, 4.03.0 in unlabeled *)
|
2014-12-21 03:46:18 -08:00
|
|
|
|
|
|
|
val lowercase_ascii : string -> string
|
|
|
|
(** Return a copy of the argument, with all uppercase letters
|
2014-12-21 03:46:23 -08:00
|
|
|
translated to lowercase, using the US-ASCII character set.
|
2020-07-07 11:34:14 -07:00
|
|
|
@since 4.05.0 in labeled module, 4.03.0 in unlabeled *)
|
2014-12-21 03:46:18 -08:00
|
|
|
|
|
|
|
val capitalize_ascii : string -> string
|
|
|
|
(** Return a copy of the argument, with the first character set to uppercase,
|
2014-12-21 03:46:23 -08:00
|
|
|
using the US-ASCII character set.
|
2020-07-07 11:34:14 -07:00
|
|
|
@since 4.05.0 in labeled module, 4.03.0 in unlabeled *)
|
2014-12-21 03:46:18 -08:00
|
|
|
|
|
|
|
val uncapitalize_ascii : string -> string
|
|
|
|
(** Return a copy of the argument, with the first character set to lowercase,
|
2014-12-21 03:46:23 -08:00
|
|
|
using the US-ASCII character set.
|
2020-07-07 11:34:14 -07:00
|
|
|
@since 4.05.0 in labeled module, 4.03.0 in unlabeled *)
|
2014-12-21 03:46:08 -08:00
|
|
|
|
2020-07-08 06:13:08 -07:00
|
|
|
val starts_with :
|
|
|
|
prefix (* comment thwarts tools/unlabel *) :string -> string -> bool
|
2020-05-04 01:29:37 -07:00
|
|
|
(** [String.starts_with prefix s] tests if [s] starts with [prefix]
|
|
|
|
@since 4.12.0 *)
|
|
|
|
|
2020-07-08 06:13:08 -07:00
|
|
|
val ends_with :
|
|
|
|
suffix (* comment thwarts tools/unlabel *) :string -> string -> bool
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [ends_with suffix s] tests if [s] ends with [suffix]
|
2020-05-04 01:29:37 -07:00
|
|
|
@since 4.12.0 *)
|
|
|
|
|
2016-07-11 05:50:56 -07:00
|
|
|
val split_on_char: char -> string -> string list
|
2020-07-07 11:34:14 -07:00
|
|
|
(** [split_on_char sep s] returns the list of all (possibly empty)
|
2016-06-20 02:36:42 -07:00
|
|
|
substrings of [s] that are delimited by the [sep] character.
|
|
|
|
|
|
|
|
The function's output is specified by the following invariants:
|
|
|
|
|
|
|
|
- The list is not empty.
|
|
|
|
- Concatenating its elements using [sep] as a separator returns a
|
|
|
|
string equal to the input ([String.concat (String.make 1 sep)
|
2016-07-11 05:57:03 -07:00
|
|
|
(String.split_on_char sep s) = s]).
|
2016-06-20 02:36:42 -07:00
|
|
|
- No string in the result contains the [sep] character.
|
|
|
|
|
2020-07-07 11:34:14 -07:00
|
|
|
@since 4.05.0 in labeled module, or 4.04.0 in unlabeled
|
2016-06-20 02:36:42 -07:00
|
|
|
*)
|
|
|
|
|
2020-07-07 11:34:14 -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
|
|
|
|
{!Stdlib.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}. *)
|
|
|
|
|
|
|
|
val equal: t -> t -> bool
|
|
|
|
(** The equal function for strings.
|
|
|
|
@since 4.05.0 in labeled module, or 4.30.0 in unlabeled *)
|
|
|
|
|
|
|
|
|
2018-11-08 08:33:55 -08:00
|
|
|
(** {1 Iterators} *)
|
2018-03-16 10:25:10 -07:00
|
|
|
|
|
|
|
val to_seq : t -> char Seq.t
|
2018-04-01 08:58:40 -07:00
|
|
|
(** Iterate on the string, in increasing index order. Modifications of the
|
2018-03-16 10:25:10 -07:00
|
|
|
string during iteration will be reflected in the iterator.
|
|
|
|
@since 4.07 *)
|
|
|
|
|
|
|
|
val to_seqi : t -> (int * char) Seq.t
|
|
|
|
(** Iterate on the string, in increasing order, yielding indices along chars
|
|
|
|
@since 4.07 *)
|
|
|
|
|
|
|
|
val of_seq : char Seq.t -> t
|
|
|
|
(** Create a string from the generator
|
|
|
|
@since 4.07 *)
|
|
|
|
|
2001-10-30 08:52:04 -08:00
|
|
|
(**/**)
|
1995-05-04 03:15:53 -07:00
|
|
|
|
2012-03-14 09:03:15 -07:00
|
|
|
(* The following is for system use only. Do not call directly. *)
|
|
|
|
|
1995-06-15 01:10:01 -07:00
|
|
|
external unsafe_get : string -> int -> char = "%string_unsafe_get"
|
2016-08-30 06:18:02 -07:00
|
|
|
external unsafe_set : bytes -> int -> char -> unit = "%string_unsafe_set"
|
2014-04-29 04:56:17 -07:00
|
|
|
[@@ocaml.deprecated]
|
2001-12-03 14:16:03 -08:00
|
|
|
external unsafe_blit :
|
2020-07-07 11:34:14 -07:00
|
|
|
string -> int -> bytes -> int -> int ->
|
|
|
|
unit = "caml_blit_string" [@@noalloc]
|
2001-12-03 14:16:03 -08:00
|
|
|
external unsafe_fill :
|
2016-08-30 06:18:02 -07:00
|
|
|
bytes -> int -> int -> char -> unit = "caml_fill_string" [@@noalloc]
|
2014-04-29 04:56:17 -07:00
|
|
|
[@@ocaml.deprecated]
|