From b74d5a423deeb0a9e504f6f3dece6b3472152bc4 Mon Sep 17 00:00:00 2001 From: Kenneth Myhra Date: Fri, 3 Feb 2023 21:49:54 +0100 Subject: [PATCH] LibWeb: Add convert string into scalar value from Infra spec --- Userland/Libraries/LibWeb/Infra/Strings.cpp | 15 +++++++++++++++ Userland/Libraries/LibWeb/Infra/Strings.h | 2 ++ 2 files changed, 17 insertions(+) diff --git a/Userland/Libraries/LibWeb/Infra/Strings.cpp b/Userland/Libraries/LibWeb/Infra/Strings.cpp index 973982833b..9a95fb9750 100644 --- a/Userland/Libraries/LibWeb/Infra/Strings.cpp +++ b/Userland/Libraries/LibWeb/Infra/Strings.cpp @@ -1,6 +1,7 @@ /* * Copyright (c) 2022, Linus Groh * Copyright (c) 2022, networkException + * Copyright (c) 2023, Kenneth Myhra * * SPDX-License-Identifier: BSD-2-Clause */ @@ -65,4 +66,18 @@ bool is_code_unit_prefix(StringView potential_prefix, StringView input) } } +// https://infra.spec.whatwg.org/#scalar-value-string +ErrorOr convert_to_scalar_value_string(StringView string) +{ + // To convert a string into a scalar value string, replace any surrogates with U+FFFD. + StringBuilder scalar_value_builder; + auto utf8_view = Utf8View { string }; + for (u32 code_point : utf8_view) { + if (is_unicode_surrogate(code_point)) + code_point = 0xFFFD; + TRY(scalar_value_builder.try_append(code_point)); + } + return scalar_value_builder.to_string(); +} + } diff --git a/Userland/Libraries/LibWeb/Infra/Strings.h b/Userland/Libraries/LibWeb/Infra/Strings.h index 17670b8fb6..a3f6fa3d8f 100644 --- a/Userland/Libraries/LibWeb/Infra/Strings.h +++ b/Userland/Libraries/LibWeb/Infra/Strings.h @@ -1,6 +1,7 @@ /* * Copyright (c) 2022, Linus Groh * Copyright (c) 2022, networkException + * Copyright (c) 2023, Kenneth Myhra * * SPDX-License-Identifier: BSD-2-Clause */ @@ -13,5 +14,6 @@ namespace Web::Infra { DeprecatedString strip_and_collapse_whitespace(StringView string); bool is_code_unit_prefix(StringView potential_prefix, StringView input); +ErrorOr convert_to_scalar_value_string(StringView string); }