1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 00:35:08 +00:00

AK+LibUnicode: Provide Unicode-aware caseless String matching

The Unicode spec defines much more complicated caseless matching
algorithms in its Collation spec. This implements the "basic" case
folding comparison.
This commit is contained in:
Timothy Flynn 2023-01-17 11:30:10 -05:00 committed by Linus Groh
parent 8f2589b3b0
commit 537fcaf59e
3 changed files with 79 additions and 0 deletions

View file

@ -33,4 +33,19 @@ ErrorOr<String> String::to_titlecase(Optional<StringView> const& locale) const
return builder.to_string();
}
ErrorOr<String> String::to_casefold() const
{
StringBuilder builder;
TRY(Unicode::Detail::build_casefold_string(code_points(), builder));
return builder.to_string();
}
// https://www.unicode.org/versions/Unicode15.0.0/ch03.pdf#G34145
ErrorOr<bool> String::equals_ignoring_case(String const& other) const
{
// A string X is a caseless match for a string Y if and only if:
// toCasefold(X) = toCasefold(Y)
return TRY(to_casefold()) == TRY(other.to_casefold());
}
}