}
ret_len = grapheme_ascii_check(string, string_len);
-
- if ( ret_len >= 0 )
+
+ if ( ret_len >= 0 )
RETURN_LONG(ret_len);
/* convert the string to UTF-16. */
efree( ustring );
RETURN_NULL();
}
-
+
ret_len = grapheme_split_string(ustring, ustring_len, NULL, 0 TSRMLS_CC );
efree( ustring );
long loffset = 0;
int32_t offset = 0;
int ret_pos, uchar_pos;
-
+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", (char **)&haystack, &haystack_len, (char **)&needle, &needle_len, &loffset) == FAILURE) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
"grapheme_strpos: unable to parse input param", 0 TSRMLS_CC );
-
+
RETURN_FALSE;
}
if ( OUTSIDE_STRING(loffset, haystack_len) ) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_strpos: Offset not contained in string", 1 TSRMLS_CC );
-
+
RETURN_FALSE;
}
- /* we checked that it will fit: */
+ /* we checked that it will fit: */
offset = (int32_t) loffset;
/* the offset is 'grapheme count offset' so it still might be invalid - we'll check it later */
if (needle_len == 0) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_strpos: Empty delimiter", 1 TSRMLS_CC );
-
+
RETURN_FALSE;
}
/* quick check to see if the string might be there
- * I realize that 'offset' is 'grapheme count offset' but will work in spite of that
+ * I realize that 'offset' is 'grapheme count offset' but will work in spite of that
*/
found = (unsigned char *)php_memnstr((char *)haystack + offset, (char *)needle, needle_len, (char *)haystack + haystack_len);
int32_t offset = 0;
int ret_pos, uchar_pos;
int is_ascii;
-
+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", (char **)&haystack, &haystack_len, (char **)&needle, &needle_len, &loffset) == FAILURE) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
"grapheme_stripos: unable to parse input param", 0 TSRMLS_CC );
-
+
RETURN_FALSE;
}
if ( OUTSIDE_STRING(loffset, haystack_len) ) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_stripos: Offset not contained in string", 1 TSRMLS_CC );
-
+
RETURN_FALSE;
}
-
+
/* we checked that it will fit: */
offset = (int32_t) loffset;
/* the offset is 'grapheme count offset' so it still might be invalid - we'll check it later */
if (needle_len == 0) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_stripos: Empty delimiter", 1 TSRMLS_CC );
-
+
RETURN_FALSE;
}
int32_t offset = 0;
int32_t ret_pos;
int is_ascii;
-
+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", (char **)&haystack, &haystack_len, (char **)&needle, &needle_len, &loffset) == FAILURE) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
"grapheme_strrpos: unable to parse input param", 0 TSRMLS_CC );
-
+
RETURN_FALSE;
}
if ( OUTSIDE_STRING(loffset, haystack_len) ) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_strpos: Offset not contained in string", 1 TSRMLS_CC );
-
+
RETURN_FALSE;
}
-
+
/* we checked that it will fit: */
offset = (int32_t) loffset;
/* the offset is 'grapheme count offset' so it still might be invalid - we'll check it later */
if (needle_len == 0) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_strpos: Empty delimiter", 1 TSRMLS_CC );
-
+
RETURN_FALSE;
}
is_ascii = grapheme_ascii_check(haystack, haystack_len) >= 0;
if ( is_ascii ) {
-
+
ret_pos = grapheme_strrpos_ascii(haystack, haystack_len, needle, needle_len, offset);
-
+
if ( ret_pos >= 0 ) {
RETURN_LONG(ret_pos);
} else {
RETURN_FALSE;
}
-
+
}
/* }}} */
int32_t offset = 0;
int32_t ret_pos;
int is_ascii;
-
+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", (char **)&haystack, &haystack_len, (char **)&needle, &needle_len, &loffset) == FAILURE) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
"grapheme_strrpos: unable to parse input param", 0 TSRMLS_CC );
-
+
RETURN_FALSE;
}
if ( OUTSIDE_STRING(loffset, haystack_len) ) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_strpos: Offset not contained in string", 1 TSRMLS_CC );
-
+
RETURN_FALSE;
}
/* we checked that it will fit: */
offset = (int32_t) loffset;
-
+
/* the offset is 'grapheme count offset' so it still might be invalid - we'll check it later */
if (needle_len == 0) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_strpos: Empty delimiter", 1 TSRMLS_CC );
-
+
RETURN_FALSE;
}
php_strtolower((char *)haystack_dup, haystack_len);
ret_pos = grapheme_strrpos_ascii(haystack_dup, haystack_len, needle_dup, needle_len, offset);
-
+
efree(haystack_dup);
efree(needle_dup);
} else {
RETURN_FALSE;
}
-
+
}
/* }}} */
int32_t (*iter_func)(UBreakIterator *);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|l", (char **)&str, &str_len, &lstart, &length) == FAILURE) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
"grapheme_substr: unable to parse input param", 0 TSRMLS_CC );
-
+
RETURN_FALSE;
}
if ( OUTSIDE_STRING(lstart, str_len) ) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_substr: start not contained in string", 1 TSRMLS_CC );
-
+
RETURN_FALSE;
}
if( U_FAILURE(status) ) {
RETURN_FALSE;
}
-
+
ubrk_setText(bi, ustr, ustr_len, &status);
if ( start < 0 ) {
}
if ( 0 != start || sub_str_start_pos >= ustr_len ) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_substr: start not contained in string", 1 TSRMLS_CC );
-
+
efree(ustr);
ubrk_close(bi);
RETURN_FALSE;
length += iter_val;
}
-
+
if ( UBRK_DONE == sub_str_end_pos && length < 0) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_substr: length not contained in string", 1 TSRMLS_CC );
-
+
efree(ustr);
ubrk_close(bi);
RETURN_FALSE;
zend_bool part = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|b", (char **)&haystack, &haystack_len, (char **)&needle, &needle_len, &part) == FAILURE) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
"grapheme_strstr: unable to parse input param", 0 TSRMLS_CC );
-
+
RETURN_FALSE;
}
if (needle_len == 0) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "grapheme_strpos: Empty delimiter", 1 TSRMLS_CC );
-
+
RETURN_FALSE;
}
if ( !f_ignore_case ) {
/* ASCII optimization: quick check to see if the string might be there
- * I realize that 'offset' is 'grapheme count offset' but will work in spite of that
+ * I realize that 'offset' is 'grapheme count offset' but will work in spite of that
*/
found = (unsigned char *)php_memnstr((char *)haystack, (char *)needle, needle_len, (char *)haystack + haystack_len);
if (part) {
RETURN_STRINGL(((char *)haystack), ret_pos, 1);
- }
+ }
else {
RETURN_STRINGL(((char *)haystack) + ret_pos, haystack_len - ret_pos, 1);
}
size--;
}
- /* pos is one past the last UChar - and represent the number of code units to
+ /* pos is one past the last UChar - and represent the number of code units to
advance in the utf-8 buffer
*/
zval *next = NULL; /* return offset of next part of the string */
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|llz", (char **)&str, &str_len, &size, &extract_type, &lstart, &next) == FAILURE) {
-
+
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
"grapheme_extract: unable to parse input param", 0 TSRMLS_CC );
-
+
RETURN_FALSE;
}
if ( NULL != next ) {
if ( !PZVAL_IS_REF(next) ) {
- intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
+ intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
"grapheme_extract: 'next' was not passed by reference", 0 TSRMLS_CC );
-
+
RETURN_FALSE;
}
else {
/* initialize next */
- ZVAL_LONG(next, start);
+ ZVAL_LONG(next, lstart);
}
}
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
"grapheme_extract: unknown extract type param", 0 TSRMLS_CC );
-
+
RETURN_FALSE;
}
if ( pstr >= str_end ) {
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
"grapheme_extract: invalid input string", 0 TSRMLS_CC );
-
+
RETURN_FALSE;
}
}
/* if the string is all ASCII up to size+1 - or str_len whichever is first - then we are done.
(size + 1 because the size-th character might be the beginning of a grapheme cluster)
*/
-
+
if ( -1 != grapheme_ascii_check(pstr, size + 1 < str_len ? size + 1 : str_len ) ) {
- long nsize = ( size < str_len ? size : str_len );
+ long nsize = ( size < str_len ? size : str_len );
if ( NULL != next ) {
ZVAL_LONG(next, start+nsize);
}
-9999999999999,
9999999999999,
1.2,
- 9999999999999999999999999999999999999999999999
);
$coll = ut_coll_create( 'en_US' );
Locale of type -9999999999999 is false
Locale of type 9999999999999 is false
Locale of type 1.2 is 'en_US'
-Locale of type 1.0E+46 is false
collator_get_sort_key()
--SKIPIF--
<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
+--XFAIL--
+Sort keys are not fixed, comparing them to fixed strings doesn't work.
--FILE--
<?php
// Regular strings keys
$test_params = array(
- 'abc', 'abd', 'aaa',
+ 'abc', 'abd', 'aaa',
'аа', 'а', 'z',
'', null , '3',
'y' , 'i' , 'k'
// Sort a non-ASCII array using ru_RU locale.
$test_params = array(
- 'абг', 'абв', 'жжж', 'эюя'
+ 'абг', 'абв', 'жжж', 'эюя'
);
$res_str .= sort_arrays( 'ru_RU', $test_params );
key: _+%01%05%01%05%00
source: z
key: %5B%01%05%01%05%00
-source:
+source:
key: %01%01%00
-source:
+source:
key: %01%01%00
source: 3
key: %26%80%01%05%01%05%00
'CN'
);
$timestamp_entry = 0;
-
+
$res_str = '';
$fmt = ut_datefmt_create( "en_US", IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'America/San_Francisco' , IntlDateFormatter::GREGORIAN );
-----------
Trying to set timezone_id= America/New_York
After call to set_timezone_id : timezone_id= America/New_York
-Formatting timestamp=0 resulted in Wednesday, December 31, 1969 7:00:00 PM ET
-Formatting timestamp=3600 resulted in Wednesday, December 31, 1969 8:00:00 PM ET
+Formatting timestamp=0 resulted in Wednesday, December 31, 1969 7:00:00 PM Eastern Standard Time
+Formatting timestamp=3600 resulted in Wednesday, December 31, 1969 8:00:00 PM Eastern Standard Time
-----------
Trying to set timezone_id= America/Los_Angeles
After call to set_timezone_id : timezone_id= America/Los_Angeles
-Formatting timestamp=0 resulted in Wednesday, December 31, 1969 4:00:00 PM PT
-Formatting timestamp=3600 resulted in Wednesday, December 31, 1969 5:00:00 PM PT
+Formatting timestamp=0 resulted in Wednesday, December 31, 1969 4:00:00 PM Pacific Standard Time
+Formatting timestamp=3600 resulted in Wednesday, December 31, 1969 5:00:00 PM Pacific Standard Time
-----------
Trying to set timezone_id= America/Chicago
After call to set_timezone_id : timezone_id= America/Chicago
-Formatting timestamp=0 resulted in Wednesday, December 31, 1969 6:00:00 PM CT
-Formatting timestamp=3600 resulted in Wednesday, December 31, 1969 7:00:00 PM CT
+Formatting timestamp=0 resulted in Wednesday, December 31, 1969 6:00:00 PM Central Standard Time
+Formatting timestamp=3600 resulted in Wednesday, December 31, 1969 7:00:00 PM Central Standard Time
-----------
Trying to set timezone_id= CN
After call to set_timezone_id : timezone_id= CN
* Format a number using misc locales/patterns.
*/
-/*
+/*
* TODO: doesn't pass on ICU 3.6 because 'ru' and 'de' locales changed
* currency and percent formatting.
*/
foreach( $styles as $style => $pattern )
{
$fmt = ut_nfmt_create( $locale, $style, $pattern );
-
+
if(!$fmt) {
$str_res .= "Bad formatter!\n";
continue;
'\$1,234,567.89'
'123,456,789%'
'1.23456789123457E6'
-'one million, two hundred and thirty-four thousand, five hundred and sixty-seven point eight nine one two three four five seven'
-'1,234,567th'
+'one million,? two hundred (and )?thirty-four thousand,? five hundred (and )?sixty-seven point eight nine one two three four five seven'
+'1,234,567(th|ᵗʰ)'
'342:56:07'
'#####.###'
Bad formatter!
Locale is: ru_UA
'1234567,89123457'
'1 234 567,891'
-'1 234 567,89 грн.'
-'123 456 789 ?%'
+'1 234 567,89 ?(грн\.|₴)'
+'123 456 789 ?%'
'1,23456789123457E6'
-'миллион два Ñ\81Ñ\82о Ñ\82Ñ\80идÑ\86аÑ\82Ñ\8c Ñ\87еÑ\82Ñ\8bÑ\80е Ñ\82Ñ\8bÑ\81Ñ\8fÑ\87а пÑ\8fÑ\82Ñ\8c Ñ\81Ñ\82о Ñ\88еÑ\81Ñ\82Ñ\8cдеÑ\81Ñ\8fÑ\82 восемь'
-'1 234 567'
+'один миллион дваÑ\81Ñ\82и Ñ\82Ñ\80идÑ\86аÑ\82Ñ\8c Ñ\87еÑ\82Ñ\8bÑ\80е Ñ\82Ñ\8bÑ\81Ñ\8fÑ\87 пÑ\8fÑ\82Ñ\8cÑ\81оÑ\82 Ñ\88еÑ\81Ñ\82Ñ\8cдеÑ\81Ñ\8fÑ\82 Ñ\81емÑ\8c запÑ\8fÑ\82аÑ\8f воÑ\81емÑ\8c девÑ\8fÑ\82Ñ\8c один два Ñ\82Ñ\80и Ñ\87еÑ\82Ñ\8bÑ\80е пÑ\8fÑ\82Ñ\8c семь'
+'1 234 567.?'
'1 234 567'
'#####.###'
Bad formatter!
Locale is: de
'1234567,89123457'
'1.234.567,891'
-'(¤ )?1.234.567,89( ¤)?'
-'123.456.789 ?%'
+'(¤ )?1.234.567,89( ¤)?'
+'123\.456\.789 %'
'1,23456789123457E6'
-'eine Million zweihundertvierunddreißigtausendfünfhundertsiebenundsechzig komma acht neun eins zwei drei vier fünf sieben'
-'1.234.567'
+'eine Million zweihundertvierunddreißigtausendfünfhundertsiebenundsechzig Komma acht neun eins zwei drei vier fünf sieben'
+'1.234.567.?'
'1.234.567'
'#####.###'
Bad formatter!
Locale is: fr
'1234567,89123457'
'1 234 567,891'
-'1 234 567,89 ¤'
+'1 234 567,89 ¤'
'123 456 789 ?%'
'1,23456789123457E6'
-'un million deux cents trente-quatre mille cinq cents soixante-sept virgule huit neuf un deux trois quatre cinq sept'
-'1 234 567'
+'un million deux-cent-trente-quatre-mille-cinq-cent-soixante-sept virgule huit neuf un deux trois quatre cinq sept'
+'1 234 567ᵉ?'
'1 234 567'
'#####.###'
Bad formatter!
'¤1,234,567.89'
'123,456,789%'
'1.23456789123457E6'
-'one million, two hundred and thirty-four thousand, five hundred and sixty-seven point eight nine one two three four five seven'
-'1,234,567th'
+'one million,? two hundred (and )?thirty-four thousand,? five hundred (and )?sixty-seven point eight nine one two three four five seven'
+'1,234,567(th|ᵗʰ)'
'342:56:07'
'#####.###'
Bad formatter!
\ No newline at end of file
/*
* Format a number using misc currencies/locales.
*/
-/*
+/*
* TODO: doesn't pass on ICU 3.6 because 'ru' and 'uk' locales changed
* currency formatting.
*/
ut_run();
?>
---EXPECTREGEX--
+--EXPECT--
en_UK: '£1,234,567.89'
-en_US: '\$1,234,567.89'
-ru: '1 234 567,89 ?р.'
-uk: '(грн. )?1 234 567,89( грн.)?'
-en: 'UAH1,234,567.89'
\ No newline at end of file
+en_US: '$1,234,567.89'
+ru: '1 234 567,89 р.'
+uk: '1 234 567,89 ₴'
+en: '₴1,234,567.89'
\ No newline at end of file
function grapheme_strlen($string) {}
-"hindi" in devanagari strlen 5
-"ab" + "hindi" + "cde" strlen 10
+"hindi" in devanagari strlen 3
+"ab" + "hindi" + "cde" strlen 8
"" strlen 0
char_a_ring_nfd strlen 1
char_a_ring_nfd + "bc" strlen 3
disp_locale=de : display_name=i-enochian
-----------------
locale='zh-hakka'
-disp_locale=en : display_name=Chinese #HAKKA#
-disp_locale=fr : display_name=chinois #HAKKA#
-disp_locale=de : display_name=Chinesisch #HAKKA#
+disp_locale=en : display_name=Chinese( #HAKKA#)?
+disp_locale=fr : display_name=chinois( #HAKKA#)?
+disp_locale=de : display_name=Chinesisch( #HAKKA#)?
-----------------
locale='zh-wuu'
disp_locale=en : display_name=Chinese #WUU#
-----------------
locale='zh-Hant'
disp_locale=en : display_name=Chinese #Traditional Han#
-disp_locale=fr : display_name=chinois #idéogrammes han #variante traditionnelle##
+disp_locale=fr : display_name=chinois #idéogrammes han (#variante traditionnelle#|traditionnels)#
disp_locale=de : display_name=Chinesisch #Traditionelle Chinesische Schrift#
-----------------
locale='zh-Hans'
disp_locale=en : display_name=Chinese #Simplified Han#
-disp_locale=fr : display_name=chinois #idéogrammes han #variante simplifiée##
+disp_locale=fr : display_name=chinois #idéogrammes han (#variante simplifiée#|simplifiés)#
disp_locale=de : display_name=Chinesisch #Vereinfachte Chinesische Schrift#
-----------------
locale='sr-Cyrl'
-----------------
locale='zh-Hans-CN'
disp_locale=en : display_name=Chinese #Simplified Han, China#
-disp_locale=fr : display_name=chinois #idéogrammes han #variante simplifiée#, Chine#
+disp_locale=fr : display_name=chinois #idéogrammes han (#variante simplifiée#|simplifiés), Chine#
disp_locale=de : display_name=Chinesisch #Vereinfachte Chinesische Schrift, China#
-----------------
locale='sr-Latn-CS'
disp_locale=de : display_name=Serbisch #Lateinisch, Serbien und Montenegro#
-----------------
locale='sl-rozaj'
-disp_locale=en : display_name=Slovenian #ROZAJ#
-disp_locale=fr : display_name=slovène #ROZAJ#
-disp_locale=de : display_name=Slowenisch #(ROZAJ|Resianisch)#
+disp_locale=en : display_name=Slovenian( #ROZAJ#)?
+disp_locale=fr : display_name=slovène( #ROZAJ#)?
+disp_locale=de : display_name=Slowenisch( #(ROZAJ|Resianisch)#)?
-----------------
locale='sl-nedis'
-disp_locale=en : display_name=Slovenian #NEDIS#
-disp_locale=fr : display_name=slovène #NEDIS#
-disp_locale=de : display_name=Slowenisch #NEDIS#
+disp_locale=en : display_name=Slovenian( #NEDIS#)?
+disp_locale=fr : display_name=slovène( #NEDIS#)?
+disp_locale=de : display_name=Slowenisch( #NEDIS#)?
-----------------
locale='de-CH-1901'
disp_locale=en : display_name=German #Switzerland, Traditional German orthography#
disp_locale=fr : display_name=allemand #Suisse, orthographe allemande traditionnelle#
-disp_locale=de : display_name=Deutsch #Schweiz, (1901|alte deutsche Rechtschreibung)#
+disp_locale=de : display_name=Deutsch #Schweiz, (1901|[aA]lte deutsche Rechtschreibung)#
-----------------
locale='sl-IT-nedis'
disp_locale=en : display_name=Slovenian #Italy, Natisone dialect#
disp_locale=de : display_name=Deutsch #Schweiz, X_PHONEBK#
-----------------
locale='az-Arab-x-AZE-derbend'
-disp_locale=en : display_name=Azerbaijani #Arabic, X, AZE_DERBEND#
-disp_locale=fr : display_name=azéri #arabe, X, AZE_DERBEND#
-disp_locale=de : display_name=Aserbaidschanisch #Arabisch, X, AZE_DERBEND#
+disp_locale=en : display_name=Azerbaijani #Arabic(, X, AZE_DERBEND)?#
+disp_locale=fr : display_name=azéri #arabe(, X, AZE_DERBEND)?#
+disp_locale=de : display_name=Aserbaidschanisch #Arabisch(, X, AZE_DERBEND)?#
-----------------
locale='zh-min'
disp_locale=en : display_name=Chinese #MIN#
disp_locale=de : display_name=Chinesisch #China, A_MYEXT_X_PRIVATE#
-----------------
locale='en-a-myExt-b-another'
-disp_locale=en : display_name=English #A, MYEXT_B_ANOTHER#
-disp_locale=fr : display_name=anglais #A, MYEXT_B_ANOTHER#
-disp_locale=de : display_name=Englisch #A, MYEXT_B_ANOTHER#
+disp_locale=en : display_name=English( #A, MYEXT_B_ANOTHER#)?
+disp_locale=fr : display_name=anglais( #A, MYEXT_B_ANOTHER#)?
+disp_locale=de : display_name=Englisch( #A, MYEXT_B_ANOTHER#)?
-----------------
locale='de-419-DE'
disp_locale=en : display_name=German #Latin America and the Caribbean, DE#
disp_locale=de : display_name=a #Deutschland#
-----------------
locale='ar-a-aaa-b-bbb-a-ccc'
-disp_locale=en : display_name=Arabic #A, AAA_B_BBB_A_CCC#
-disp_locale=fr : display_name=arabe #A, AAA_B_BBB_A_CCC#
-disp_locale=de : display_name=Arabisch #A, AAA_B_BBB_A_CCC#
+disp_locale=en : display_name=Arabic( #A, AAA_B_BBB_A_CCC#)?
+disp_locale=fr : display_name=arabe( #A, AAA_B_BBB_A_CCC#)?
+disp_locale=de : display_name=Arabisch( #A, AAA_B_BBB_A_CCC#)?
-----------------
disp_locale=de : display_region=Serbien und Montenegro
-----------------
locale='sl-rozaj'
-disp_locale=en : display_region=ROZAJ
-disp_locale=fr : display_region=ROZAJ
-disp_locale=de : display_region=ROZAJ
+disp_locale=en : display_region=
+disp_locale=fr : display_region=
+disp_locale=de : display_region=
-----------------
locale='sl-nedis'
-disp_locale=en : display_region=NEDIS
-disp_locale=fr : display_region=NEDIS
-disp_locale=de : display_region=NEDIS
+disp_locale=en : display_region=
+disp_locale=fr : display_region=
+disp_locale=de : display_region=
-----------------
locale='de-CH-1901'
disp_locale=en : display_region=Switzerland
disp_locale=de : display_region=Schweiz
-----------------
locale='az-Arab-x-AZE-derbend'
-disp_locale=en : display_region=X
-disp_locale=fr : display_region=X
-disp_locale=de : display_region=X
+disp_locale=en : display_region=X?
+disp_locale=fr : display_region=X?
+disp_locale=de : display_region=X?
-----------------
locale='zh-min'
disp_locale=en : display_region=
disp_locale=de : display_region=China
-----------------
locale='en-a-myExt-b-another'
-disp_locale=en : display_region=A
-disp_locale=fr : display_region=A
-disp_locale=de : display_region=A
+disp_locale=en : display_region=A?
+disp_locale=fr : display_region=A?
+disp_locale=de : display_region=A?
-----------------
locale='de-419-DE'
disp_locale=en : display_region=Latin America and the Caribbean
disp_locale=de : display_region=Deutschland
-----------------
locale='ar-a-aaa-b-bbb-a-ccc'
-disp_locale=en : display_region=A
-disp_locale=fr : display_region=A
-disp_locale=de : display_region=A
+disp_locale=en : display_region=A?
+disp_locale=fr : display_region=A?
+disp_locale=de : display_region=A?
-----------------
ut_run();
?>
---EXPECT--
+--EXPECTREGEX--
locale='uk-ua_CALIFORNIA@currency=;currency=GRN'
disp_locale=en : display_script=
disp_locale=fr : display_script=
-----------------
locale='zh-Hant'
disp_locale=en : display_script=Traditional Han
-disp_locale=fr : display_script=idéogrammes han (variante traditionnelle)
+disp_locale=fr : display_script=idéogrammes han (\(variante traditionnelle\)|traditionnels)
disp_locale=de : display_script=Traditionelle Chinesische Schrift
-----------------
locale='zh-Hans'
disp_locale=en : display_script=Simplified Han
-disp_locale=fr : display_script=idéogrammes han (variante simplifiée)
+disp_locale=fr : display_script=idéogrammes han (\(variante simplifiée\)|simplifiés)
disp_locale=de : display_script=Vereinfachte Chinesische Schrift
-----------------
locale='sr-Cyrl'
-----------------
locale='zh-Hans-CN'
disp_locale=en : display_script=Simplified Han
-disp_locale=fr : display_script=idéogrammes han (variante simplifiée)
+disp_locale=fr : display_script=idéogrammes han (\(variante simplifiée\)|simplifiés)
disp_locale=de : display_script=Vereinfachte Chinesische Schrift
-----------------
locale='sr-Latn-CS'
locale='de-CH-1901'
disp_locale=en : display_variant=Traditional German orthography
disp_locale=fr : display_variant=orthographe allemande traditionnelle
-disp_locale=de : display_variant=(1901|alte deutsche Rechtschreibung)
+disp_locale=de : display_variant=(1901|[Aa]lte deutsche Rechtschreibung)
-----------------
locale='sl-IT-nedis'
disp_locale=en : display_variant=Natisone dialect
disp_locale=de : display_variant=X_PHONEBK
-----------------
locale='az-Arab-x-AZE-derbend'
-disp_locale=en : display_variant=AZE_DERBEND
-disp_locale=fr : display_variant=AZE_DERBEND
-disp_locale=de : display_variant=AZE_DERBEND
+disp_locale=en : display_variant=(AZE_DERBEND)?
+disp_locale=fr : display_variant=(AZE_DERBEND)?
+disp_locale=de : display_variant=(AZE_DERBEND)?
-----------------
locale='zh-min'
disp_locale=en : display_variant=
disp_locale=de : display_variant=A_MYEXT_X_PRIVATE
-----------------
locale='en-a-myExt-b-another'
-disp_locale=en : display_variant=MYEXT_B_ANOTHER
-disp_locale=fr : display_variant=MYEXT_B_ANOTHER
-disp_locale=de : display_variant=MYEXT_B_ANOTHER
+disp_locale=en : display_variant=(MYEXT_B_ANOTHER)?
+disp_locale=fr : display_variant=(MYEXT_B_ANOTHER)?
+disp_locale=de : display_variant=(MYEXT_B_ANOTHER)?
-----------------
locale='de-419-DE'
disp_locale=en : display_variant=DE
disp_locale=de : display_variant=
-----------------
locale='ar-a-aaa-b-bbb-a-ccc'
-disp_locale=en : display_variant=AAA_B_BBB_A_CCC
-disp_locale=fr : display_variant=AAA_B_BBB_A_CCC
-disp_locale=de : display_variant=AAA_B_BBB_A_CCC
+disp_locale=en : display_variant=(AAA_B_BBB_A_CCC)?
+disp_locale=fr : display_variant=(AAA_B_BBB_A_CCC)?
+disp_locale=de : display_variant=(AAA_B_BBB_A_CCC)?
-----------------
sr-Latn: region=''
zh-Hans-CN: region='CN'
sr-Latn-CS: region='CS'
-sl-rozaj: region='ROZAJ'
-sl-nedis: region='NEDIS'
+sl-rozaj: region=''
+sl-nedis: region=''
de-CH-1901: region='CH'
sl-IT-nedis: region='IT'
sl-Latn-IT-nedis: region='IT'
en-US: region='US'
es-419: region='419'
de-CH-x-phonebk: region='CH'
-az-Arab-x-AZE-derbend: region='X'
+az-Arab-x-AZE-derbend: region=''
zh-min: region=''
zh-min-nan-Hant-CN: region='MIN'
x-whatever: region=''
sr-Qaaa-CS: region='CS'
en-US-u-islamCal: region='US'
zh-CN-a-myExt-x-private: region='CN'
-en-a-myExt-b-another: region='A'
+en-a-myExt-b-another: region=''
de-419-DE: region='419'
a-DE: region='DE'
-ar-a-aaa-b-bbb-a-ccc: region='A'
+ar-a-aaa-b-bbb-a-ccc: region=''
language : 'sr' , script : 'Latn' , region : 'CS' ,
---------------------
sl-rozaj:
-language : 'sl' , region : 'ROZAJ' ,
+language : 'sl' ,
---------------------
sl-nedis:
-language : 'sl' , region : 'NEDIS' ,
+language : 'sl' ,
---------------------
de-CH-1901:
language : 'de' , region : 'CH' , variant0 : '1901' ,