ladybird/Userland/Libraries/LibJS/Runtime/Intl/PluralRules.h
Timothy Flynn 5e2ee4447e LibJS+LibLocale: Replace plural rules selection with ICU
This uses ICU for all of the Intl.PluralRules prototypes, which lets us
remove all data from our plural rules generator.

Plural rules depend directly on internal data from the number formatter,
so rather than creating a separate Locale::PluralRules class (which will
make accessing that data awkward), this adds plural rules APIs to the
existing Locale::NumberFormat.
2024-06-15 06:57:16 +02:00

37 lines
1.1 KiB
C++

/*
* Copyright (c) 2022-2024, Tim Flynn <trflynn89@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/StringView.h>
#include <LibJS/Runtime/Completion.h>
#include <LibJS/Runtime/Intl/NumberFormat.h>
#include <LibJS/Runtime/Object.h>
#include <LibLocale/PluralRules.h>
namespace JS::Intl {
class PluralRules final : public NumberFormatBase {
JS_OBJECT(PluralRules, NumberFormatBase);
JS_DECLARE_ALLOCATOR(PluralRules);
public:
virtual ~PluralRules() override = default;
::Locale::PluralForm type() const { return m_type; }
StringView type_string() const { return ::Locale::plural_form_to_string(m_type); }
void set_type(StringView type) { m_type = ::Locale::plural_form_from_string(type); }
private:
explicit PluralRules(Object& prototype);
::Locale::PluralForm m_type { ::Locale::PluralForm::Cardinal }; // [[Type]]
};
::Locale::PluralCategory resolve_plural(PluralRules const&, Value number);
ThrowCompletionOr<::Locale::PluralCategory> resolve_plural_range(VM&, PluralRules const&, Value start, Value end);
}