ladybird/Userland/Libraries/LibJS/Runtime/Intl/DateTimeFormat.cpp
Timothy Flynn 75b2a09a2f LibJS: Implement a nearly empty Intl.DateTimeFormat object
This adds plumbing for the Intl.DateTimeFormat object, constructor, and
prototype.

Note that unlike other Intl objects, the Intl.DateTimeFormat object has
a LibUnicode structure as a base. This is to prevent wild amounts of
code duplication between LibUnicode, Intl.DateTimeFormat, and other
not-yet-defined Intl structures, because there's 12 fields shared
between them.
2021-11-29 22:48:46 +00:00

54 lines
1.3 KiB
C++

/*
* Copyright (c) 2021, Tim Flynn <trflynn89@pm.me>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibJS/Runtime/Intl/DateTimeFormat.h>
namespace JS::Intl {
Vector<StringView> const& DateTimeFormat::relevant_extension_keys()
{
// 11.3.3 Internal slots, https://tc39.es/ecma402/#sec-intl.datetimeformat-internal-slots
// The value of the [[RelevantExtensionKeys]] internal slot is « "ca", "hc", "nu" ».
static Vector<StringView> relevant_extension_keys { "ca"sv, "hc"sv, "nu"sv };
return relevant_extension_keys;
}
// 11 DateTimeFormat Objects, https://tc39.es/ecma402/#datetimeformat-objects
DateTimeFormat::DateTimeFormat(Object& prototype)
: Object(prototype)
{
}
DateTimeFormat::Style DateTimeFormat::style_from_string(StringView style)
{
if (style == "full"sv)
return Style::Full;
if (style == "long"sv)
return Style::Long;
if (style == "medium"sv)
return Style::Medium;
if (style == "short"sv)
return Style::Short;
VERIFY_NOT_REACHED();
}
StringView DateTimeFormat::style_to_string(Style style)
{
switch (style) {
case Style::Full:
return "full"sv;
case Style::Long:
return "long"sv;
case Style::Medium:
return "medium"sv;
case Style::Short:
return "short"sv;
default:
VERIFY_NOT_REACHED();
}
}
}