aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorinoas <mail@inoas.com>2022-05-17 18:31:37 +0000
committerGitHub <noreply@github.com>2022-05-17 19:31:37 +0100
commitf9d57db847ff2a8471c9136bd309c870b610d04d (patch)
tree640efa9eca0636e357a7265b6db81df9be2a29c6 /src
parent81fbb692283a0fff2334d8f3f9f5249c5fda7172 (diff)
downloadgleam_stdlib-f9d57db847ff2a8471c9136bd309c870b610d04d.tar.gz
gleam_stdlib-f9d57db847ff2a8471c9136bd309c870b610d04d.zip
javascript tests and fixes for string.reverse() / string.slice() / string.to_graphemes() (#298)
Diffstat (limited to 'src')
-rw-r--r--src/gleam/string.gleam32
1 files changed, 26 insertions, 6 deletions
diff --git a/src/gleam/string.gleam b/src/gleam/string.gleam
index 37baed4..45d4d31 100644
--- a/src/gleam/string.gleam
+++ b/src/gleam/string.gleam
@@ -73,10 +73,25 @@ if javascript {
/// ```
///
pub fn reverse(string: String) -> String {
- string
- |> string_builder.from_string
- |> string_builder.reverse
- |> string_builder.to_string
+ do_reverse(string)
+}
+
+if erlang {
+ fn do_reverse(string: String) -> String {
+ string
+ |> string_builder.from_string
+ |> string_builder.reverse
+ |> string_builder.to_string
+ }
+}
+
+if javascript {
+ fn do_reverse(string: String) -> String {
+ string
+ |> to_graphemes
+ |> list.reverse
+ |> concat
+ }
}
/// Creates a new `String` by replacing all occurrences of a given substring.
@@ -233,8 +248,13 @@ if erlang {
}
if javascript {
- external fn do_slice(String, Int, Int) -> String =
- "../gleam_stdlib.mjs" "slice_string"
+ fn do_slice(string: String, idx: Int, len: Int) -> String {
+ string
+ |> to_graphemes
+ |> list.drop(idx)
+ |> list.take(len)
+ |> concat
+ }
}
/// Drops contents of the first `String` that occur before the second `String`.