/* * Copyright (c) 2021, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include namespace JS::Intl { class ListFormat final : public Object { JS_OBJECT(ListFormat, Object); public: enum class Type { Invalid, Conjunction, Disjunction, Unit, }; virtual ~ListFormat() override = default; DeprecatedString const& locale() const { return m_locale; } void set_locale(DeprecatedString locale) { m_locale = move(locale); } Type type() const { return m_type; } void set_type(StringView type); StringView type_string() const; ::Locale::Style style() const { return m_style; } void set_style(StringView style) { m_style = ::Locale::style_from_string(style); } StringView style_string() const { return ::Locale::style_to_string(m_style); } private: explicit ListFormat(Object& prototype); DeprecatedString m_locale; // [[Locale]] Type m_type { Type::Invalid }; // [[Type]] ::Locale::Style m_style { ::Locale::Style::Long }; // [[Style]] }; using Placeables = HashMap>>; Vector deconstruct_pattern(StringView pattern, Placeables); Vector create_parts_from_list(ListFormat const&, Vector const& list); DeprecatedString format_list(ListFormat const&, Vector const& list); Array* format_list_to_parts(VM&, ListFormat const&, Vector const& list); ThrowCompletionOr> string_list_from_iterable(VM&, Value iterable); }