@@ -3156,6 +3156,76 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc)
3156
3156
#endif
3157
3157
}
3158
3158
3159
+ #ifdef INTL_ICU
3160
+ template <bool minimize>
3161
+ static JavascriptString *MinMaxImpl (JavascriptString *langtag, ScriptContext *scriptContext)
3162
+ {
3163
+ UErrorCode status = U_ZERO_ERROR;
3164
+ char localeID[ULOC_FULLNAME_CAPACITY] = { 0 };
3165
+ LangtagToLocaleID (langtag, localeID);
3166
+
3167
+ char minmaxLocaleID[ULOC_FULLNAME_CAPACITY] = { 0 };
3168
+ int32_t minmaxLocaleIDLength = 0 ;
3169
+ if (minimize)
3170
+ {
3171
+ minmaxLocaleIDLength = uloc_minimizeSubtags (localeID, minmaxLocaleID, ULOC_FULLNAME_CAPACITY, &status);
3172
+ INTL_TRACE (" Minimizing localeID %S to %S" , localeID, minmaxLocaleID);
3173
+ }
3174
+ else
3175
+ {
3176
+ minmaxLocaleIDLength = uloc_addLikelySubtags (localeID, minmaxLocaleID, ULOC_FULLNAME_CAPACITY, &status);
3177
+ INTL_TRACE (" Maximizing localeID %S to %S" , localeID, minmaxLocaleID);
3178
+ }
3179
+ ICU_ASSERT (status, minmaxLocaleIDLength < ULOC_FULLNAME_CAPACITY);
3180
+
3181
+ char minmaxLangtag[ULOC_FULLNAME_CAPACITY] = { 0 };
3182
+ int minmaxLangtagLength = uloc_toLanguageTag (minmaxLocaleID, minmaxLangtag, ULOC_FULLNAME_CAPACITY, true , &status);
3183
+ ICU_ASSERT (status, minmaxLangtagLength > 0 );
3184
+
3185
+ // allocate maximizedLangtagLength + 1 to leave room for null terminator
3186
+ char16 *minmaxLangtag16 = RecyclerNewArrayLeaf (scriptContext->GetRecycler (), char16, minmaxLangtagLength + 1 );
3187
+ charcount_t minmaxLangtag16Length = 0 ;
3188
+ HRESULT hr = utf8::NarrowStringToWideNoAlloc (
3189
+ minmaxLangtag,
3190
+ minmaxLangtagLength,
3191
+ minmaxLangtag16,
3192
+ minmaxLangtagLength + 1 ,
3193
+ &minmaxLangtag16Length
3194
+ );
3195
+ AssertOrFailFast (hr == S_OK && ((int )minmaxLangtag16Length) == minmaxLangtagLength);
3196
+
3197
+ return JavascriptString::NewWithBuffer (minmaxLangtag16, minmaxLangtagLength, scriptContext);
3198
+ }
3199
+ #endif
3200
+
3201
+ Var IntlEngineInterfaceExtensionObject::EntryIntl_MinimizeLocale (RecyclableObject *function, CallInfo callInfo, ...)
3202
+ {
3203
+ #ifdef INTL_ICU
3204
+ EngineInterfaceObject_CommonFunctionProlog (function, callInfo);
3205
+
3206
+ INTL_CHECK_ARGS (args.Info .Count == 2 && JavascriptString::Is (args.Values [1 ]));
3207
+
3208
+ return MinMaxImpl<true >(JavascriptString::UnsafeFromVar (args.Values [1 ]), scriptContext);
3209
+ #else
3210
+ AssertOrFailFastMsg (false , " Intl-WinGlob should not be using MinimizeLocale" );
3211
+ return nullptr ;
3212
+ #endif
3213
+ }
3214
+
3215
+ Var IntlEngineInterfaceExtensionObject::EntryIntl_MaximizeLocale (RecyclableObject *function, CallInfo callInfo, ...)
3216
+ {
3217
+ #ifdef INTL_ICU
3218
+ EngineInterfaceObject_CommonFunctionProlog (function, callInfo);
3219
+
3220
+ INTL_CHECK_ARGS (args.Info .Count == 2 && JavascriptString::Is (args.Values [1 ]));
3221
+
3222
+ return MinMaxImpl<false >(JavascriptString::UnsafeFromVar (args.Values [1 ]), scriptContext);
3223
+ #else
3224
+ AssertOrFailFastMsg (false , " Intl-WinGlob should not be using MaximizeLocale" );
3225
+ return nullptr ;
3226
+ #endif
3227
+ }
3228
+
3159
3229
/*
3160
3230
* This function registers built in functions when Intl initializes.
3161
3231
* Call with (Function : toRegister, integer : id)
0 commit comments