Packages
gleam_stdlib
0.14.0
1.0.3
1.0.2
1.0.1
1.0.0
0.71.0
0.70.0
0.69.0
0.68.1
0.68.0
0.67.1
0.67.0
0.65.0
0.64.0
0.63.2
0.63.1
0.63.0
0.62.1
0.62.0
0.61.0
0.60.0
0.59.0
0.58.0
0.57.0
0.56.0
0.55.0
0.54.0
0.53.0
0.52.0
0.51.0
0.50.0
0.49.0
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.0
0.42.0
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.1
0.35.0
0.34.0
0.33.1
0.33.0
0.32.1
0.32.0
0.31.0
0.30.2
0.30.1
0.30.0
0.29.2
0.29.1
0.29.0
0.28.2
0.28.1
0.28.0
0.27.0
0.26.1
0.26.0
0.25.0
0.24.0
0.23.0
0.22.3
0.22.2
0.22.1
0.22.0
0.21.0
0.20.0
0.19.3
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.18.0-rc1
0.17.1
0.17.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.1
0.10.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.4.0-rc1
0.3.1
0.3.0
0.2.0
retired
A standard library for the Gleam programming language
Current section
Files
Jump to
Current section
Files
gen/src/gleam@string.erl
-module(gleam@string).
-compile(no_auto_import).
-export([is_empty/1, length/1, reverse/1, replace/3, lowercase/1, uppercase/1, compare/2, slice/3, drop_left/2, drop_right/2, contains/2, starts_with/2, ends_with/2, split/2, split_once/2, append/2, concat/1, repeat/2, join/2, pad_left/3, pad_right/3, trim/1, trim_left/1, trim_right/1, pop_grapheme/1, to_graphemes/1, utf_codepoint/1]).
-export_type([direction/0]).
-type direction() :: leading | trailing | both.
-spec is_empty(binary()) -> boolean().
is_empty(Str) ->
Str =:= <<""/utf8>>.
-spec length(binary()) -> integer().
length(A) ->
string:length(A).
-spec reverse(binary()) -> binary().
reverse(String) ->
gleam@string_builder:to_string(
gleam@string_builder:reverse(gleam@string_builder:from_string(String))
).
-spec replace(binary(), binary(), binary()) -> binary().
replace(String, Pattern, Substitute) ->
gleam@string_builder:to_string(
gleam@string_builder:replace(
gleam@string_builder:from_string(String),
Pattern,
Substitute
)
).
-spec lowercase(binary()) -> binary().
lowercase(A) ->
string:lowercase(A).
-spec uppercase(binary()) -> binary().
uppercase(A) ->
string:uppercase(A).
-spec compare(binary(), binary()) -> gleam@order:order().
compare(A, B) ->
gleam_stdlib:compare_strings(A, B).
-spec slice(binary(), integer(), integer()) -> binary().
slice(String, Idx, Len) ->
case Len < 0 of
true ->
<<""/utf8>>;
false ->
case Idx < 0 of
true ->
Translated_idx = string:length(String) + Idx,
case Translated_idx < 0 of
true ->
<<""/utf8>>;
false ->
string:slice(String, Translated_idx, Len)
end;
false ->
string:slice(String, Idx, Len)
end
end.
-spec drop_left(binary(), integer()) -> binary().
drop_left(String, Num_graphemes) ->
case Num_graphemes < 0 of
true ->
String;
false ->
slice(String, Num_graphemes, string:length(String) - Num_graphemes)
end.
-spec drop_right(binary(), integer()) -> binary().
drop_right(String, Num_graphemes) ->
case Num_graphemes < 0 of
true ->
String;
false ->
slice(String, 0, string:length(String) - Num_graphemes)
end.
-spec contains(binary(), binary()) -> boolean().
contains(Haystack, Needle) ->
gleam@result:is_error(gleam@dynamic:atom(string:find(Haystack, Needle))).
-spec starts_with(binary(), binary()) -> boolean().
starts_with(A, B) ->
gleam_stdlib:string_starts_with(A, B).
-spec ends_with(binary(), binary()) -> boolean().
ends_with(A, B) ->
gleam_stdlib:string_ends_with(A, B).
-spec split(binary(), binary()) -> list(binary()).
split(X, Substring) ->
gleam@list:map(
gleam@string_builder:split(
gleam@string_builder:from_string(X),
Substring
),
fun gleam@string_builder:to_string/1
).
-spec split_once(binary(), binary()) -> {ok, {binary(), binary()}} |
{error, nil}.
split_once(X, Substring) ->
case string:split(X, Substring) of
[First, Rest] ->
{ok, {First, Rest}};
_ ->
{error, nil}
end.
-spec append(binary(), binary()) -> binary().
append(First, Second) ->
gleam@string_builder:to_string(
gleam@string_builder:append(
gleam@string_builder:from_string(First),
Second
)
).
-spec concat(list(binary())) -> binary().
concat(Strings) ->
gleam@string_builder:to_string(gleam@string_builder:from_strings(Strings)).
-spec repeat(binary(), integer()) -> binary().
repeat(String, Times) ->
concat(gleam@iterator:take(gleam@iterator:repeat(String), Times)).
-spec join(list(binary()), binary()) -> binary().
join(Strings, Separator) ->
concat(gleam@list:intersperse(Strings, Separator)).
-spec pad_left(binary(), integer(), binary()) -> binary().
pad_left(String, Length, Pad_string) ->
gleam_stdlib:string_pad(String, Length, leading, Pad_string).
-spec pad_right(binary(), integer(), binary()) -> binary().
pad_right(String, Length, Pad_string) ->
gleam_stdlib:string_pad(String, Length, trailing, Pad_string).
-spec trim(binary()) -> binary().
trim(String) ->
string:trim(String, both).
-spec trim_left(binary()) -> binary().
trim_left(String) ->
string:trim(String, leading).
-spec trim_right(binary()) -> binary().
trim_right(String) ->
string:trim(String, trailing).
-spec pop_grapheme(binary()) -> {ok, {binary(), binary()}} | {error, nil}.
pop_grapheme(A) ->
gleam_stdlib:string_pop_grapheme(A).
-spec to_graphemes(binary()) -> list(binary()).
to_graphemes(String) ->
case gleam_stdlib:string_pop_grapheme(String) of
{ok, {Grapheme, Rest}} ->
[Grapheme | to_graphemes(Rest)];
_ ->
[]
end.
-spec utf_codepoint(integer()) -> {ok, integer()} | {error, nil}.
utf_codepoint(Value) ->
case Value of
I when I > 1114111 ->
{error, nil};
65534 ->
{error, nil};
65535 ->
{error, nil};
I@1 when (I@1 >= 55296) andalso (I@1 =< 57343) ->
{error, nil};
I@2 ->
{ok, gleam_stdlib:identity(I@2)}
end.