LibJS+LibUnicode: Fully implement Intl.Collator with ICU

We were never able to implement anything other than a basic, locale-
unaware collator with the JSON export of the CLDR as it did not have
collation data. We can now use ICU to implement collation.
This commit is contained in:
Timothy Flynn 2024-08-14 14:46:19 -04:00 committed by Andreas Kling
commit eb7e3583c9
Notes: github-actions[bot] 2024-08-15 11:45:44 +00:00
11 changed files with 384 additions and 142 deletions

View file

@ -0,0 +1,62 @@
/*
* Copyright (c) 2024, Tim Flynn <trflynn89@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/NonnullOwnPtr.h>
#include <AK/StringView.h>
namespace Unicode {
enum class Usage {
Sort,
Search,
};
Usage usage_from_string(StringView);
StringView usage_to_string(Usage);
enum class Sensitivity {
Base,
Accent,
Case,
Variant,
};
Sensitivity sensitivity_from_string(StringView);
StringView sensitivity_to_string(Sensitivity);
enum class CaseFirst {
Upper,
Lower,
False,
};
CaseFirst case_first_from_string(StringView);
StringView case_first_to_string(CaseFirst);
class Collator {
public:
static NonnullOwnPtr<Collator> create(
StringView locale,
Usage,
StringView collation,
Sensitivity,
CaseFirst,
bool numeric,
bool ignore_punctuation);
virtual ~Collator() = default;
enum class Order {
Before,
Equal,
After,
};
virtual Order compare(StringView, StringView) const = 0;
protected:
Collator() = default;
};
}