diff --git a/Userland/Libraries/LibWeb/Infra/Strings.cpp b/Userland/Libraries/LibWeb/Infra/Strings.cpp index 3f381c84264..130ffaba765 100644 --- a/Userland/Libraries/LibWeb/Infra/Strings.cpp +++ b/Userland/Libraries/LibWeb/Infra/Strings.cpp @@ -106,4 +106,18 @@ ErrorOr convert_to_scalar_value_string(StringView string) return scalar_value_builder.to_string(); } +// https://infra.spec.whatwg.org/#ascii-lowercase +ErrorOr to_ascii_lower_case(StringView string) +{ + // To ASCII lowercase a string, replace all ASCII upper alphas in the string with their + // corresponding code point in ASCII lower alpha. + StringBuilder string_builder; + auto utf8_view = Utf8View { string }; + for (u32 code_point : utf8_view) { + code_point = to_ascii_lowercase(code_point); + TRY(string_builder.try_append(code_point)); + } + return string_builder.to_string(); +} + } diff --git a/Userland/Libraries/LibWeb/Infra/Strings.h b/Userland/Libraries/LibWeb/Infra/Strings.h index f44f6d98655..78d80307598 100644 --- a/Userland/Libraries/LibWeb/Infra/Strings.h +++ b/Userland/Libraries/LibWeb/Infra/Strings.h @@ -17,5 +17,6 @@ bool is_ascii_case_insensitive_match(StringView a, StringView b); 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); +ErrorOr to_ascii_lower_case(StringView string); }