diff options
-rw-r--r-- | src/gleam_stdlib.erl | 10 | ||||
-rw-r--r-- | test/gleam/string_test.gleam | 48 |
2 files changed, 37 insertions, 21 deletions
diff --git a/src/gleam_stdlib.erl b/src/gleam_stdlib.erl index cab299f..230ca4c 100644 --- a/src/gleam_stdlib.erl +++ b/src/gleam_stdlib.erl @@ -498,9 +498,13 @@ inspect_maybe_utf8_string(Binary, Acc) -> $\n -> <<$\\, $n>>; $\t -> <<$\\, $t>>; $\f -> <<$\\, $f>>; - $\b -> <<$\\, $b>>; - $\v -> <<$\\, $v>>; - $\e -> <<$\\, $e>>; + 127 -> <<$\\, $u, ${, $0, $0, $7, $F, $}>>; + X when X < 32 -> + Hex = integer_to_list(X, 16), + Leading = lists:duplicate(4 - length(Hex), "0"), + Formatted = lists:append(Leading, Hex), + Bin = list_to_binary(Formatted), + <<$\\, $u, ${, Bin/binary, $}>>; Other -> <<Other/utf8>> end, inspect_maybe_utf8_string(Rest, <<Acc/binary, Escaped/binary>>); diff --git a/test/gleam/string_test.gleam b/test/gleam/string_test.gleam index b21b213..9a1a315 100644 --- a/test/gleam/string_test.gleam +++ b/test/gleam/string_test.gleam @@ -688,14 +688,26 @@ pub fn inspect_test() { string.inspect("\f") |> should.equal("\"\\f\"") - string.inspect("\u{08}") - |> should.equal("\"\\b\"") + string.inspect("\u{0008}") + |> should.equal("\"\\u{0008}\"") - string.inspect("\u{0B}") - |> should.equal("\"\\v\"") + string.inspect("\u{000B}") + |> should.equal("\"\\u{000B}\"") - string.inspect("\u{1B}") - |> should.equal("\"\\e\"") + string.inspect("\u{001B}") + |> should.equal("\"\\u{001B}\"") + + string.inspect("\u{0015}") + |> should.equal("\"\\u{0015}\"") + + string.inspect("\u{001F}") + |> should.equal("\"\\u{001F}\"") + + string.inspect("\u{0020}") + |> should.equal("\" \"") + + string.inspect("\u{007F}") + |> should.equal("\"\\u{007F}\"") string.inspect("\r\r") |> should.equal("\"\\r\\r\"") @@ -730,23 +742,23 @@ pub fn inspect_test() { string.inspect("\f\t") |> should.equal("\"\\f\\t\"") - string.inspect("\t\u{08}") - |> should.equal("\"\\t\\b\"") + string.inspect("\t\u{0008}") + |> should.equal("\"\\t\\u{0008}\"") - string.inspect("\u{08}\t") - |> should.equal("\"\\b\\t\"") + string.inspect("\u{0008}\t") + |> should.equal("\"\\u{0008}\\t\"") - string.inspect("\t\u{0B}") - |> should.equal("\"\\t\\v\"") + string.inspect("\t\u{000B}") + |> should.equal("\"\\t\\u{000B}\"") - string.inspect("\u{0B}\t") - |> should.equal("\"\\v\\t\"") + string.inspect("\u{000B}\t") + |> should.equal("\"\\u{000B}\\t\"") - string.inspect("\t\u{1B}") - |> should.equal("\"\\t\\e\"") + string.inspect("\t\u{001B}") + |> should.equal("\"\\t\\u{001B}\"") - string.inspect("\u{1B}\t") - |> should.equal("\"\\e\\t\"") + string.inspect("\u{001B}\t") + |> should.equal("\"\\u{001B}\\t\"") string.inspect("\\\n\\") |> should.equal("\"\\\\\\n\\\\\"") |