Skip to content

Commit 52cda6f

Browse files
ramseynikic
authored andcommitted
Accommodate changes to canonicalized forms in ICU >= 70.1
Refer to: unicode-org/icu@01e1adc
1 parent 81b3f95 commit 52cda6f

File tree

3 files changed

+371
-3
lines changed

3 files changed

+371
-3
lines changed

ext/intl/locale/locale_methods.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1326,7 +1326,7 @@ PHP_FUNCTION(locale_filter_matches)
13261326
if( token && (token==cur_lang_tag) ){
13271327
/* check if the char. after match is SEPARATOR */
13281328
chrcheck = token + (strlen(cur_loc_range));
1329-
if( isIDSeparator(*chrcheck) || isEndOfTag(*chrcheck) ){
1329+
if( isIDSeparator(*chrcheck) || isKeywordSeparator(*chrcheck) || isEndOfTag(*chrcheck) ){
13301330
efree( cur_lang_tag );
13311331
efree( cur_loc_range );
13321332
if( can_lang_tag){

ext/intl/tests/locale_filter_matches4.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
--TEST--
2-
locale_filter_matches.phpt() ICU >= 67.1
2+
locale_filter_matches.phpt() for ICU >= 67.1 and < 70.1
33
--SKIPIF--
44
<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?>
5-
<?php if (version_compare(INTL_ICU_VERSION, '67.1') < 0) die('skip for ICU >= 67.1'); ?>
5+
<?php if (version_compare(INTL_ICU_VERSION, '67.1') < 0 || version_compare(INTL_ICU_VERSION, '70.1') >= 0) die('skip for ICU >= 67.1 and < 70.1'); ?>
66
--FILE--
77
<?php
88

Lines changed: 368 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,368 @@
1+
--TEST--
2+
locale_filter_matches.phpt() for ICU >= 70.1
3+
--SKIPIF--
4+
<?php
5+
if( !extension_loaded( 'intl' ) ) die('skip');
6+
if (version_compare(INTL_ICU_VERSION, '70.1') < 0) die('skip for ICU >= 70.1');
7+
?>
8+
--FILE--
9+
<?php
10+
11+
/*
12+
* Try parsing different Locales
13+
* with Procedural and Object methods.
14+
*/
15+
16+
function ut_main()
17+
{
18+
$loc_ranges = array(
19+
'de-de',
20+
'sl_IT',
21+
'sl_IT_Nedis',
22+
'jbo',
23+
'art-lojban',
24+
'sl_IT'
25+
);
26+
27+
$lang_tags = array(
28+
'de-DEVA',
29+
'de-DE-1996',
30+
'de-DE',
31+
'zh_Hans',
32+
'de-CH-1996',
33+
'sl_IT',
34+
'sl_IT_nedis-a-kirti-x-xyz',
35+
'sl_IT_rozaj',
36+
'sl_IT_NEDIS_ROJAZ_1901',
37+
'i-enochian',
38+
'sgn-CH-de',
39+
'art-lojban',
40+
'i-lux',
41+
'art-lojban',
42+
'jbo',
43+
'en_sl_IT'
44+
);
45+
46+
$res_str = '';
47+
$isCanonical = false;
48+
foreach($loc_ranges as $loc_range){
49+
foreach($lang_tags as $lang_tag){
50+
$res_str .="--------------\n";
51+
$result= ut_loc_locale_filter_matches( $lang_tag , $loc_range , $isCanonical);
52+
$res_str .= "loc_range:$loc_range matches lang_tag $lang_tag ? ";
53+
if( $result){
54+
$res_str .= "YES\n";
55+
}else{
56+
$res_str .= "NO\n";
57+
}
58+
//canonicalized version
59+
$result= ut_loc_locale_filter_matches( $lang_tag , $loc_range , !($isCanonical));
60+
$can_loc_range = ut_loc_canonicalize($loc_range);
61+
$can_lang_tag = ut_loc_canonicalize($lang_tag);
62+
$res_str .= "loc_range:$can_loc_range canonically matches lang_tag $can_lang_tag ? ";
63+
if( $result){
64+
$res_str .= "YES\n";
65+
}else{
66+
$res_str .= "NO\n";
67+
}
68+
}
69+
}
70+
71+
$res_str .= "\n";
72+
return $res_str;
73+
74+
}
75+
76+
include_once( 'ut_common.inc' );
77+
ut_run();
78+
79+
?>
80+
--EXPECT--
81+
--------------
82+
loc_range:de-de matches lang_tag de-DEVA ? NO
83+
loc_range:de_DE canonically matches lang_tag de_Deva ? NO
84+
--------------
85+
loc_range:de-de matches lang_tag de-DE-1996 ? YES
86+
loc_range:de_DE canonically matches lang_tag de_DE_1996 ? YES
87+
--------------
88+
loc_range:de-de matches lang_tag de-DE ? YES
89+
loc_range:de_DE canonically matches lang_tag de_DE ? YES
90+
--------------
91+
loc_range:de-de matches lang_tag zh_Hans ? NO
92+
loc_range:de_DE canonically matches lang_tag zh_Hans ? NO
93+
--------------
94+
loc_range:de-de matches lang_tag de-CH-1996 ? NO
95+
loc_range:de_DE canonically matches lang_tag de_CH_1996 ? NO
96+
--------------
97+
loc_range:de-de matches lang_tag sl_IT ? NO
98+
loc_range:de_DE canonically matches lang_tag sl_IT ? NO
99+
--------------
100+
loc_range:de-de matches lang_tag sl_IT_nedis-a-kirti-x-xyz ? NO
101+
loc_range:de_DE canonically matches lang_tag sl_IT_NEDIS@a=kirti;x=xyz ? NO
102+
--------------
103+
loc_range:de-de matches lang_tag sl_IT_rozaj ? NO
104+
loc_range:de_DE canonically matches lang_tag sl_IT_ROZAJ ? NO
105+
--------------
106+
loc_range:de-de matches lang_tag sl_IT_NEDIS_ROJAZ_1901 ? NO
107+
loc_range:de_DE canonically matches lang_tag sl_IT_NEDIS_ROJAZ_1901 ? NO
108+
--------------
109+
loc_range:de-de matches lang_tag i-enochian ? NO
110+
loc_range:de_DE canonically matches lang_tag @x=i-enochian ? NO
111+
--------------
112+
loc_range:de-de matches lang_tag sgn-CH-de ? NO
113+
loc_range:de_DE canonically matches lang_tag sgn_CH_DE ? NO
114+
--------------
115+
loc_range:de-de matches lang_tag art-lojban ? NO
116+
loc_range:de_DE canonically matches lang_tag jbo ? NO
117+
--------------
118+
loc_range:de-de matches lang_tag i-lux ? NO
119+
loc_range:de_DE canonically matches lang_tag lb ? NO
120+
--------------
121+
loc_range:de-de matches lang_tag art-lojban ? NO
122+
loc_range:de_DE canonically matches lang_tag jbo ? NO
123+
--------------
124+
loc_range:de-de matches lang_tag jbo ? NO
125+
loc_range:de_DE canonically matches lang_tag jbo ? NO
126+
--------------
127+
loc_range:de-de matches lang_tag en_sl_IT ? NO
128+
loc_range:de_DE canonically matches lang_tag en_SL_IT ? NO
129+
--------------
130+
loc_range:sl_IT matches lang_tag de-DEVA ? NO
131+
loc_range:sl_IT canonically matches lang_tag de_Deva ? NO
132+
--------------
133+
loc_range:sl_IT matches lang_tag de-DE-1996 ? NO
134+
loc_range:sl_IT canonically matches lang_tag de_DE_1996 ? NO
135+
--------------
136+
loc_range:sl_IT matches lang_tag de-DE ? NO
137+
loc_range:sl_IT canonically matches lang_tag de_DE ? NO
138+
--------------
139+
loc_range:sl_IT matches lang_tag zh_Hans ? NO
140+
loc_range:sl_IT canonically matches lang_tag zh_Hans ? NO
141+
--------------
142+
loc_range:sl_IT matches lang_tag de-CH-1996 ? NO
143+
loc_range:sl_IT canonically matches lang_tag de_CH_1996 ? NO
144+
--------------
145+
loc_range:sl_IT matches lang_tag sl_IT ? YES
146+
loc_range:sl_IT canonically matches lang_tag sl_IT ? YES
147+
--------------
148+
loc_range:sl_IT matches lang_tag sl_IT_nedis-a-kirti-x-xyz ? YES
149+
loc_range:sl_IT canonically matches lang_tag sl_IT_NEDIS@a=kirti;x=xyz ? YES
150+
--------------
151+
loc_range:sl_IT matches lang_tag sl_IT_rozaj ? YES
152+
loc_range:sl_IT canonically matches lang_tag sl_IT_ROZAJ ? YES
153+
--------------
154+
loc_range:sl_IT matches lang_tag sl_IT_NEDIS_ROJAZ_1901 ? YES
155+
loc_range:sl_IT canonically matches lang_tag sl_IT_NEDIS_ROJAZ_1901 ? YES
156+
--------------
157+
loc_range:sl_IT matches lang_tag i-enochian ? NO
158+
loc_range:sl_IT canonically matches lang_tag @x=i-enochian ? NO
159+
--------------
160+
loc_range:sl_IT matches lang_tag sgn-CH-de ? NO
161+
loc_range:sl_IT canonically matches lang_tag sgn_CH_DE ? NO
162+
--------------
163+
loc_range:sl_IT matches lang_tag art-lojban ? NO
164+
loc_range:sl_IT canonically matches lang_tag jbo ? NO
165+
--------------
166+
loc_range:sl_IT matches lang_tag i-lux ? NO
167+
loc_range:sl_IT canonically matches lang_tag lb ? NO
168+
--------------
169+
loc_range:sl_IT matches lang_tag art-lojban ? NO
170+
loc_range:sl_IT canonically matches lang_tag jbo ? NO
171+
--------------
172+
loc_range:sl_IT matches lang_tag jbo ? NO
173+
loc_range:sl_IT canonically matches lang_tag jbo ? NO
174+
--------------
175+
loc_range:sl_IT matches lang_tag en_sl_IT ? NO
176+
loc_range:sl_IT canonically matches lang_tag en_SL_IT ? NO
177+
--------------
178+
loc_range:sl_IT_Nedis matches lang_tag de-DEVA ? NO
179+
loc_range:sl_IT_NEDIS canonically matches lang_tag de_Deva ? NO
180+
--------------
181+
loc_range:sl_IT_Nedis matches lang_tag de-DE-1996 ? NO
182+
loc_range:sl_IT_NEDIS canonically matches lang_tag de_DE_1996 ? NO
183+
--------------
184+
loc_range:sl_IT_Nedis matches lang_tag de-DE ? NO
185+
loc_range:sl_IT_NEDIS canonically matches lang_tag de_DE ? NO
186+
--------------
187+
loc_range:sl_IT_Nedis matches lang_tag zh_Hans ? NO
188+
loc_range:sl_IT_NEDIS canonically matches lang_tag zh_Hans ? NO
189+
--------------
190+
loc_range:sl_IT_Nedis matches lang_tag de-CH-1996 ? NO
191+
loc_range:sl_IT_NEDIS canonically matches lang_tag de_CH_1996 ? NO
192+
--------------
193+
loc_range:sl_IT_Nedis matches lang_tag sl_IT ? NO
194+
loc_range:sl_IT_NEDIS canonically matches lang_tag sl_IT ? NO
195+
--------------
196+
loc_range:sl_IT_Nedis matches lang_tag sl_IT_nedis-a-kirti-x-xyz ? YES
197+
loc_range:sl_IT_NEDIS canonically matches lang_tag sl_IT_NEDIS@a=kirti;x=xyz ? YES
198+
--------------
199+
loc_range:sl_IT_Nedis matches lang_tag sl_IT_rozaj ? NO
200+
loc_range:sl_IT_NEDIS canonically matches lang_tag sl_IT_ROZAJ ? NO
201+
--------------
202+
loc_range:sl_IT_Nedis matches lang_tag sl_IT_NEDIS_ROJAZ_1901 ? YES
203+
loc_range:sl_IT_NEDIS canonically matches lang_tag sl_IT_NEDIS_ROJAZ_1901 ? YES
204+
--------------
205+
loc_range:sl_IT_Nedis matches lang_tag i-enochian ? NO
206+
loc_range:sl_IT_NEDIS canonically matches lang_tag @x=i-enochian ? NO
207+
--------------
208+
loc_range:sl_IT_Nedis matches lang_tag sgn-CH-de ? NO
209+
loc_range:sl_IT_NEDIS canonically matches lang_tag sgn_CH_DE ? NO
210+
--------------
211+
loc_range:sl_IT_Nedis matches lang_tag art-lojban ? NO
212+
loc_range:sl_IT_NEDIS canonically matches lang_tag jbo ? NO
213+
--------------
214+
loc_range:sl_IT_Nedis matches lang_tag i-lux ? NO
215+
loc_range:sl_IT_NEDIS canonically matches lang_tag lb ? NO
216+
--------------
217+
loc_range:sl_IT_Nedis matches lang_tag art-lojban ? NO
218+
loc_range:sl_IT_NEDIS canonically matches lang_tag jbo ? NO
219+
--------------
220+
loc_range:sl_IT_Nedis matches lang_tag jbo ? NO
221+
loc_range:sl_IT_NEDIS canonically matches lang_tag jbo ? NO
222+
--------------
223+
loc_range:sl_IT_Nedis matches lang_tag en_sl_IT ? NO
224+
loc_range:sl_IT_NEDIS canonically matches lang_tag en_SL_IT ? NO
225+
--------------
226+
loc_range:jbo matches lang_tag de-DEVA ? NO
227+
loc_range:jbo canonically matches lang_tag de_Deva ? NO
228+
--------------
229+
loc_range:jbo matches lang_tag de-DE-1996 ? NO
230+
loc_range:jbo canonically matches lang_tag de_DE_1996 ? NO
231+
--------------
232+
loc_range:jbo matches lang_tag de-DE ? NO
233+
loc_range:jbo canonically matches lang_tag de_DE ? NO
234+
--------------
235+
loc_range:jbo matches lang_tag zh_Hans ? NO
236+
loc_range:jbo canonically matches lang_tag zh_Hans ? NO
237+
--------------
238+
loc_range:jbo matches lang_tag de-CH-1996 ? NO
239+
loc_range:jbo canonically matches lang_tag de_CH_1996 ? NO
240+
--------------
241+
loc_range:jbo matches lang_tag sl_IT ? NO
242+
loc_range:jbo canonically matches lang_tag sl_IT ? NO
243+
--------------
244+
loc_range:jbo matches lang_tag sl_IT_nedis-a-kirti-x-xyz ? NO
245+
loc_range:jbo canonically matches lang_tag sl_IT_NEDIS@a=kirti;x=xyz ? NO
246+
--------------
247+
loc_range:jbo matches lang_tag sl_IT_rozaj ? NO
248+
loc_range:jbo canonically matches lang_tag sl_IT_ROZAJ ? NO
249+
--------------
250+
loc_range:jbo matches lang_tag sl_IT_NEDIS_ROJAZ_1901 ? NO
251+
loc_range:jbo canonically matches lang_tag sl_IT_NEDIS_ROJAZ_1901 ? NO
252+
--------------
253+
loc_range:jbo matches lang_tag i-enochian ? NO
254+
loc_range:jbo canonically matches lang_tag @x=i-enochian ? NO
255+
--------------
256+
loc_range:jbo matches lang_tag sgn-CH-de ? NO
257+
loc_range:jbo canonically matches lang_tag sgn_CH_DE ? NO
258+
--------------
259+
loc_range:jbo matches lang_tag art-lojban ? NO
260+
loc_range:jbo canonically matches lang_tag jbo ? YES
261+
--------------
262+
loc_range:jbo matches lang_tag i-lux ? NO
263+
loc_range:jbo canonically matches lang_tag lb ? NO
264+
--------------
265+
loc_range:jbo matches lang_tag art-lojban ? NO
266+
loc_range:jbo canonically matches lang_tag jbo ? YES
267+
--------------
268+
loc_range:jbo matches lang_tag jbo ? YES
269+
loc_range:jbo canonically matches lang_tag jbo ? YES
270+
--------------
271+
loc_range:jbo matches lang_tag en_sl_IT ? NO
272+
loc_range:jbo canonically matches lang_tag en_SL_IT ? NO
273+
--------------
274+
loc_range:art-lojban matches lang_tag de-DEVA ? NO
275+
loc_range:jbo canonically matches lang_tag de_Deva ? NO
276+
--------------
277+
loc_range:art-lojban matches lang_tag de-DE-1996 ? NO
278+
loc_range:jbo canonically matches lang_tag de_DE_1996 ? NO
279+
--------------
280+
loc_range:art-lojban matches lang_tag de-DE ? NO
281+
loc_range:jbo canonically matches lang_tag de_DE ? NO
282+
--------------
283+
loc_range:art-lojban matches lang_tag zh_Hans ? NO
284+
loc_range:jbo canonically matches lang_tag zh_Hans ? NO
285+
--------------
286+
loc_range:art-lojban matches lang_tag de-CH-1996 ? NO
287+
loc_range:jbo canonically matches lang_tag de_CH_1996 ? NO
288+
--------------
289+
loc_range:art-lojban matches lang_tag sl_IT ? NO
290+
loc_range:jbo canonically matches lang_tag sl_IT ? NO
291+
--------------
292+
loc_range:art-lojban matches lang_tag sl_IT_nedis-a-kirti-x-xyz ? NO
293+
loc_range:jbo canonically matches lang_tag sl_IT_NEDIS@a=kirti;x=xyz ? NO
294+
--------------
295+
loc_range:art-lojban matches lang_tag sl_IT_rozaj ? NO
296+
loc_range:jbo canonically matches lang_tag sl_IT_ROZAJ ? NO
297+
--------------
298+
loc_range:art-lojban matches lang_tag sl_IT_NEDIS_ROJAZ_1901 ? NO
299+
loc_range:jbo canonically matches lang_tag sl_IT_NEDIS_ROJAZ_1901 ? NO
300+
--------------
301+
loc_range:art-lojban matches lang_tag i-enochian ? NO
302+
loc_range:jbo canonically matches lang_tag @x=i-enochian ? NO
303+
--------------
304+
loc_range:art-lojban matches lang_tag sgn-CH-de ? NO
305+
loc_range:jbo canonically matches lang_tag sgn_CH_DE ? NO
306+
--------------
307+
loc_range:art-lojban matches lang_tag art-lojban ? YES
308+
loc_range:jbo canonically matches lang_tag jbo ? YES
309+
--------------
310+
loc_range:art-lojban matches lang_tag i-lux ? NO
311+
loc_range:jbo canonically matches lang_tag lb ? NO
312+
--------------
313+
loc_range:art-lojban matches lang_tag art-lojban ? YES
314+
loc_range:jbo canonically matches lang_tag jbo ? YES
315+
--------------
316+
loc_range:art-lojban matches lang_tag jbo ? NO
317+
loc_range:jbo canonically matches lang_tag jbo ? YES
318+
--------------
319+
loc_range:art-lojban matches lang_tag en_sl_IT ? NO
320+
loc_range:jbo canonically matches lang_tag en_SL_IT ? NO
321+
--------------
322+
loc_range:sl_IT matches lang_tag de-DEVA ? NO
323+
loc_range:sl_IT canonically matches lang_tag de_Deva ? NO
324+
--------------
325+
loc_range:sl_IT matches lang_tag de-DE-1996 ? NO
326+
loc_range:sl_IT canonically matches lang_tag de_DE_1996 ? NO
327+
--------------
328+
loc_range:sl_IT matches lang_tag de-DE ? NO
329+
loc_range:sl_IT canonically matches lang_tag de_DE ? NO
330+
--------------
331+
loc_range:sl_IT matches lang_tag zh_Hans ? NO
332+
loc_range:sl_IT canonically matches lang_tag zh_Hans ? NO
333+
--------------
334+
loc_range:sl_IT matches lang_tag de-CH-1996 ? NO
335+
loc_range:sl_IT canonically matches lang_tag de_CH_1996 ? NO
336+
--------------
337+
loc_range:sl_IT matches lang_tag sl_IT ? YES
338+
loc_range:sl_IT canonically matches lang_tag sl_IT ? YES
339+
--------------
340+
loc_range:sl_IT matches lang_tag sl_IT_nedis-a-kirti-x-xyz ? YES
341+
loc_range:sl_IT canonically matches lang_tag sl_IT_NEDIS@a=kirti;x=xyz ? YES
342+
--------------
343+
loc_range:sl_IT matches lang_tag sl_IT_rozaj ? YES
344+
loc_range:sl_IT canonically matches lang_tag sl_IT_ROZAJ ? YES
345+
--------------
346+
loc_range:sl_IT matches lang_tag sl_IT_NEDIS_ROJAZ_1901 ? YES
347+
loc_range:sl_IT canonically matches lang_tag sl_IT_NEDIS_ROJAZ_1901 ? YES
348+
--------------
349+
loc_range:sl_IT matches lang_tag i-enochian ? NO
350+
loc_range:sl_IT canonically matches lang_tag @x=i-enochian ? NO
351+
--------------
352+
loc_range:sl_IT matches lang_tag sgn-CH-de ? NO
353+
loc_range:sl_IT canonically matches lang_tag sgn_CH_DE ? NO
354+
--------------
355+
loc_range:sl_IT matches lang_tag art-lojban ? NO
356+
loc_range:sl_IT canonically matches lang_tag jbo ? NO
357+
--------------
358+
loc_range:sl_IT matches lang_tag i-lux ? NO
359+
loc_range:sl_IT canonically matches lang_tag lb ? NO
360+
--------------
361+
loc_range:sl_IT matches lang_tag art-lojban ? NO
362+
loc_range:sl_IT canonically matches lang_tag jbo ? NO
363+
--------------
364+
loc_range:sl_IT matches lang_tag jbo ? NO
365+
loc_range:sl_IT canonically matches lang_tag jbo ? NO
366+
--------------
367+
loc_range:sl_IT matches lang_tag en_sl_IT ? NO
368+
loc_range:sl_IT canonically matches lang_tag en_SL_IT ? NO

0 commit comments

Comments
 (0)