5#ifndef V8_OBJECTS_INTL_OBJECTS_H_
6#define V8_OBJECTS_INTL_OBJECTS_H_
18#include "unicode/locid.h"
19#include "unicode/uversion.h"
21#ifndef V8_INTL_SUPPORT
22#error Internationalization is expected to be enabled.
25#define V8_MINIMUM_ICU_VERSION 73
31class RelativeDateTimeFormatter;
32class SimpleDateFormat;
33class DateIntervalFormat;
37class StringEnumeration;
41class LocalizedNumberFormatter;
47#define ICU_EXTERNAL_POINTER_TAG_LIST(V) \
48 V(icu::UnicodeString, kIcuUnicodeStringTag) \
49 V(icu::BreakIterator, kIcuBreakIteratorTag) \
50 V(icu::Locale, kIcuLocaleTag) \
51 V(icu::SimpleDateFormat, kIcuSimpleDateFormatTag) \
52 V(icu::DateIntervalFormat, kIcuDateIntervalFormatTag) \
53 V(icu::RelativeDateTimeFormatter, kIcuRelativeDateTimeFormatterTag) \
54 V(icu::ListFormatter, kIcuListFormatterTag) \
55 V(icu::Collator, kIcuCollatorTag) \
56 V(icu::PluralRules, kIcuPluralRulesTag) \
57 V(icu::number::LocalizedNumberFormatter, kIcuLocalizedNumberFormatterTag)
59#undef ICU_EXTERNAL_POINTER_TAG_LIST
72 std::vector<NumberFormatSpan>* regions);
88 void Add(int32_t field, int32_t
start, int32_t limit);
106 const std::vector<std::string>& locales,
const char* path,
107 const char* validate_key);
118 Isolate* isolate,
const char* method_name,
119 const std::set<std::string>& available_locales,
127 bool only_return_one_result =
false);
151 const char* method_name);
157 template <
class IsolateT>
226 int mnfd_default,
int mxfd_default,
227 bool notation_is_compact,
const char* service);
231 Isolate* isolate,
const icu::UnicodeString&
string);
235 Isolate* isolate,
const icu::UnicodeString&
string, int32_t begin,
245 const icu::UnicodeString& text,
292 const char* method_name);
297 const char* method_name, std::unique_ptr<
char[]>*
result);
301 const std::string& value);
305 const std::string& value);
323 Isolate* isolate,
const std::set<std::string>& available_locales,
324 const std::vector<std::string>& requested_locales,
MatcherOption options,
325 const std::set<std::string>& relevant_extension_keys);
336 static const char*
key() {
return nullptr; }
337 static const char*
path() {
return nullptr; }
340 template <
typename C = SkipResourceCheck>
344 UErrorCode status = U_ZERO_ERROR;
345 UEnumeration* uenum =
346 uloc_openAvailableByType(ULOC_AVAILABLE_WITH_LEGACY_ALIASES, &status);
347 DCHECK(U_SUCCESS(status));
349 std::vector<std::string> all_locales;
351 while ((loc = uenum_next(uenum,
nullptr, &status)) !=
nullptr) {
352 DCHECK(U_SUCCESS(status));
353 std::string locstr(loc);
354 std::replace(locstr.begin(), locstr.end(),
'_',
'-');
356 if (locstr ==
"en-US-POSIX") locstr =
"en-US-u-va-posix";
357 all_locales.push_back(locstr);
363 const std::set<std::string>&
Get()
const {
return set_; }
372 icu::BreakIterator* break_iterator);
399 Isolate* isolate,
const char* unicode_key,
400 icu::StringEnumeration* enumeration,
401 const std::function<
bool(
const char*)>& removes,
bool sort);
411 const icu::TimeZone& tz);
413 const std::string&
id);
433 Isolate* isolate, int32_t time_zone_index,
439 Isolate* isolate, int32_t time_zone_index,
455 Isolate* isolate, int32_t time_zone_index,
466 const char* service);
std::set< std::string > set_
const std::set< std::string > & Get() const
static void AddElement(Isolate *isolate, DirectHandle< JSArray > array, int index, DirectHandle< String > field_type_string, DirectHandle< String > value)
static V8_WARN_UNUSED_RESULT MaybeDirectHandle< String > NumberToLocaleString(Isolate *isolate, Handle< Object > num, DirectHandle< Object > locales, DirectHandle< Object > options, const char *method_name)
static base::TimezoneCache * CreateTimeZoneCache()
static bool IsValidCalendar(const icu::Locale &locale, const std::string &value)
static bool IsWellFormedCurrency(const std::string &value)
static V8_WARN_UNUSED_RESULT MaybeDirectHandle< String > StringLocaleConvertCase(Isolate *isolate, DirectHandle< String > s, bool is_upper, DirectHandle< Object > locales)
static std::string GetNumberingSystem(const icu::Locale &icu_locale)
static V8_WARN_UNUSED_RESULT MaybeDirectHandle< Object > LegacyUnwrapReceiver(Isolate *isolate, DirectHandle< JSReceiver > receiver, DirectHandle< JSFunction > constructor, bool has_initialized_slot)
static const std::set< std::string > & GetAvailableLocales()
V8_EXPORT_PRIVATE static V8_WARN_UNUSED_RESULT int CompareStrings(Isolate *isolate, const icu::Collator &collator, DirectHandle< String > s1, DirectHandle< String > s2, CompareStringsOptions compare_strings_options=CompareStringsOptions::kNone)
static V8_WARN_UNUSED_RESULT MaybeHandle< String > ToString(Isolate *isolate, const icu::UnicodeString &string)
static V8_WARN_UNUSED_RESULT MaybeHandle< String > ConvertToLower(Isolate *isolate, DirectHandle< String > s)
static V8_WARN_UNUSED_RESULT MaybeDirectHandle< String > Normalize(Isolate *isolate, DirectHandle< String > string, DirectHandle< Object > form_input)
static const int kAsciiCollationWeightsLength
static DirectHandleVector< BigInt > GetTimeZonePossibleOffsetNanoseconds(Isolate *isolate, int32_t time_zone_index, DirectHandle< BigInt > nanosecond_epoch)
static int32_t GetTimeZoneIndex(Isolate *isolate, DirectHandle< String > identifier)
static Tagged< String > ConvertOneByteToLower(Tagged< String > src, Tagged< String > dst)
static Maybe< int > AddNumberElements(Isolate *isolate, const icu::FormattedValue &formatted, DirectHandle< JSArray > result, int start_index, DirectHandle< String > unit)
static bool RemoveCollation(const char *collation)
static Maybe< std::vector< std::string > > CanonicalizeLocaleList(Isolate *isolate, DirectHandle< Object > locales, bool only_return_one_result=false)
static DirectHandle< Object > GetTimeZoneOffsetTransitionNanoseconds(Isolate *isolate, int32_t time_zone_index, DirectHandle< BigInt > nanosecond_epoch, Transition transition)
static bool IsValidCollation(const icu::Locale &locale, const std::string &value)
static const std::set< std::string > & GetAvailableLocalesForDateFormat()
static DirectHandle< String > DefaultTimeZone(Isolate *isolate)
static Maybe< ResolvedLocale > ResolveLocale(Isolate *isolate, const std::set< std::string > &available_locales, const std::vector< std::string > &requested_locales, MatcherOption options, const std::set< std::string > &relevant_extension_keys)
static V8_WARN_UNUSED_RESULT MaybeDirectHandle< JSReceiver > CoerceOptionsToObject(Isolate *isolate, DirectHandle< Object > options, const char *service)
static V8_WARN_UNUSED_RESULT MaybeDirectHandle< JSArray > ToJSArray(Isolate *isolate, const char *unicode_key, icu::StringEnumeration *enumeration, const std::function< bool(const char *)> &removes, bool sort)
static std::set< std::string > SanctionedSimpleUnits()
static V8_WARN_UNUSED_RESULT bool IsValidTimeZoneName(Isolate *isolate, const std::string &id)
static const uint8_t * ToLatin1LowerTable()
static V8_WARN_UNUSED_RESULT std::optional< int > StringLocaleCompare(Isolate *isolate, DirectHandle< String > s1, DirectHandle< String > s2, DirectHandle< Object > locales, DirectHandle< Object > options, const char *method_name)
static icu::UnicodeString ToICUUnicodeString(Isolate *isolate, DirectHandle< String > string, int offset=0)
static V8_EXPORT_PRIVATE CompareStringsOptions CompareStringsOptionsFor(IsolateT *isolate, DirectHandle< Object > locales, DirectHandle< Object > options)
static V8_WARN_UNUSED_RESULT bool IsValidTimeZoneName(const icu::TimeZone &tz)
static std::set< std::string > BuildLocaleSet(const std::vector< std::string > &locales, const char *path, const char *validate_key)
static V8_WARN_UNUSED_RESULT std::string TimeZoneIdFromIndex(int32_t index)
static V8_WARN_UNUSED_RESULT MaybeHandle< String > CanonicalizeTimeZoneName(Isolate *isolate, DirectHandle< String > identifier)
static int64_t GetTimeZoneOffsetNanoseconds(Isolate *isolate, int32_t time_zone_index, DirectHandle< BigInt > nanosecond_epoch)
static V8_WARN_UNUSED_RESULT Maybe< MatcherOption > GetLocaleMatcher(Isolate *isolate, DirectHandle< JSReceiver > options, const char *method_name)
static V8_WARN_UNUSED_RESULT MaybeDirectHandle< JSArray > AvailableCalendars(Isolate *isolate)
static bool IsWellFormedCalendar(const std::string &value)
static Maybe< std::string > ToLanguageTag(const icu::Locale &locale)
static V8_WARN_UNUSED_RESULT MaybeDirectHandle< String > FormattedToString(Isolate *isolate, const icu::FormattedValue &formatted)
static V8_WARN_UNUSED_RESULT Maybe< NumberFormatDigitOptions > SetNumberFormatDigitOptions(Isolate *isolate, DirectHandle< JSReceiver > options, int mnfd_default, int mxfd_default, bool notation_is_compact, const char *service)
static const uint8_t * AsciiCollationWeightsL1()
static bool IsValidNumberingSystem(const std::string &value)
static V8_WARN_UNUSED_RESULT MaybeDirectHandle< JSArray > GetCanonicalLocales(Isolate *isolate, DirectHandle< Object > locales)
static V8_WARN_UNUSED_RESULT MaybeDirectHandle< String > ConvertToUpper(Isolate *isolate, DirectHandle< String > s)
static DirectHandle< String > SourceString(Isolate *isolate, FormatRangeSource source)
static V8_WARN_UNUSED_RESULT MaybeDirectHandle< JSArray > SupportedValuesOf(Isolate *isolate, DirectHandle< Object > key)
static DirectHandle< Managed< icu::UnicodeString > > SetTextToBreakIterator(Isolate *isolate, DirectHandle< String > text, icu::BreakIterator *break_iterator)
static const uint8_t * AsciiCollationWeightsL3()
static V8_WARN_UNUSED_RESULT MaybeDirectHandle< JSObject > SupportedLocalesOf(Isolate *isolate, const char *method_name, const std::set< std::string > &available_locales, DirectHandle< Object > locales_in, DirectHandle< Object > options_in)
static DirectHandle< String > NumberFieldToType(Isolate *isolate, const NumberFormatSpan &part, const icu::UnicodeString &text, bool is_nan)
#define ICU_EXTERNAL_POINTER_TAG_LIST(V)
ZoneVector< RpoNumber > & result
#define ASSIGN_EXTERNAL_POINTER_TAG_FOR_MANAGED(CppType, Tag)
V8_EXPORT_PRIVATE std::vector< NumberFormatSpan > FlattenRegionsToParts(std::vector< NumberFormatSpan > *regions)
#define DCHECK(condition)
#define V8_EXPORT_PRIVATE
std::map< std::string, std::string > extensions
static const char * path()
static const char * key()
#define V8_WARN_UNUSED_RESULT