mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-06 08:10:02 +00:00
LibJS+LibUnicode: Make the collation sensitivity default locale-aware
Note this happens to be 'variant' for every locale currently.
This commit is contained in:
parent
78625c746d
commit
ca1257c6f9
Notes:
github-actions[bot]
2024-08-15 11:45:25 +00:00
Author: https://github.com/trflynn89
Commit: ca1257c6f9
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/1078
Reviewed-by: https://github.com/awesomekling
5 changed files with 53 additions and 14 deletions
|
@ -92,6 +92,28 @@ static constexpr UColAttributeValue icu_sensitivity(Sensitivity sensitivity)
|
|||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
static Sensitivity sensitivity_for_collator(icu::Collator const& collator)
|
||||
{
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
|
||||
auto attribute = collator.getAttribute(UCOL_STRENGTH, status);
|
||||
VERIFY(icu_success(status));
|
||||
|
||||
switch (attribute) {
|
||||
case UCOL_PRIMARY:
|
||||
attribute = collator.getAttribute(UCOL_CASE_LEVEL, status);
|
||||
VERIFY(icu_success(status));
|
||||
|
||||
return attribute == UCOL_ON ? Sensitivity::Case : Sensitivity::Base;
|
||||
|
||||
case UCOL_SECONDARY:
|
||||
return Sensitivity::Accent;
|
||||
|
||||
default:
|
||||
return Sensitivity::Variant;
|
||||
}
|
||||
}
|
||||
|
||||
CaseFirst case_first_from_string(StringView case_first)
|
||||
{
|
||||
if (case_first == "upper"sv)
|
||||
|
@ -165,6 +187,11 @@ public:
|
|||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
virtual Sensitivity sensitivity() const override
|
||||
{
|
||||
return sensitivity_for_collator(*m_collator);
|
||||
}
|
||||
|
||||
virtual bool ignore_punctuation() const override
|
||||
{
|
||||
return ignore_punctuation_for_collator(*m_collator);
|
||||
|
@ -178,7 +205,7 @@ NonnullOwnPtr<Collator> Collator::create(
|
|||
StringView locale,
|
||||
Usage usage,
|
||||
StringView collation,
|
||||
Sensitivity sensitivity,
|
||||
Optional<Sensitivity> sensitivity,
|
||||
CaseFirst case_first,
|
||||
bool numeric,
|
||||
Optional<bool> ignore_punctuation)
|
||||
|
@ -198,10 +225,13 @@ NonnullOwnPtr<Collator> Collator::create(
|
|||
VERIFY(icu_success(status));
|
||||
};
|
||||
|
||||
if (!sensitivity.has_value())
|
||||
sensitivity = sensitivity_for_collator(*collator);
|
||||
|
||||
if (!ignore_punctuation.has_value())
|
||||
ignore_punctuation = ignore_punctuation_for_collator(*collator);
|
||||
|
||||
set_attribute(UCOL_STRENGTH, icu_sensitivity(sensitivity));
|
||||
set_attribute(UCOL_STRENGTH, icu_sensitivity(*sensitivity));
|
||||
set_attribute(UCOL_CASE_LEVEL, sensitivity == Sensitivity::Case ? UCOL_ON : UCOL_OFF);
|
||||
set_attribute(UCOL_CASE_FIRST, icu_case_first(case_first));
|
||||
set_attribute(UCOL_NUMERIC_COLLATION, numeric ? UCOL_ON : UCOL_OFF);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue