diff options
author | inoas <mail@inoas.com> | 2022-05-17 18:31:37 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-17 19:31:37 +0100 |
commit | f9d57db847ff2a8471c9136bd309c870b610d04d (patch) | |
tree | 640efa9eca0636e357a7265b6db81df9be2a29c6 /src | |
parent | 81fbb692283a0fff2334d8f3f9f5249c5fda7172 (diff) | |
download | gleam_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.gleam | 32 |
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`. |