changeset 48274 | 51772bf1fb0c |
parent 47216 | 71c04702a3d5 |
child 50352 | 25db2c8f3cf8 |
48273:e2065f7505eb | 48274:51772bf1fb0c |
---|---|
25 * Red Hat Author(s): Behdad Esfahbod |
25 * Red Hat Author(s): Behdad Esfahbod |
26 * Google Author(s): Behdad Esfahbod, Roozbeh Pournader |
26 * Google Author(s): Behdad Esfahbod, Roozbeh Pournader |
27 */ |
27 */ |
28 |
28 |
29 #include "hb-private.hh" |
29 #include "hb-private.hh" |
30 |
|
31 #include <string.h> |
|
32 |
|
33 |
30 |
34 |
31 |
35 /* hb_script_t */ |
32 /* hb_script_t */ |
36 |
33 |
37 static hb_tag_t |
34 static hb_tag_t |
199 {"ak", HB_TAG('T','W','I',' ')}, /* Akan [macrolanguage] */ |
196 {"ak", HB_TAG('T','W','I',' ')}, /* Akan [macrolanguage] */ |
200 {"aka", HB_TAG('A','K','A',' ')}, /* Akan */ |
197 {"aka", HB_TAG('A','K','A',' ')}, /* Akan */ |
201 {"alt", HB_TAG('A','L','T',' ')}, /* [Southern] Altai */ |
198 {"alt", HB_TAG('A','L','T',' ')}, /* [Southern] Altai */ |
202 {"am", HB_TAG('A','M','H',' ')}, /* Amharic */ |
199 {"am", HB_TAG('A','M','H',' ')}, /* Amharic */ |
203 {"amf", HB_TAG('H','B','N',' ')}, /* Hammer-Banna */ |
200 {"amf", HB_TAG('H','B','N',' ')}, /* Hammer-Banna */ |
201 {"amw", HB_TAG('S','Y','R',' ')}, /* Western Neo-Aramaic */ |
|
204 {"an", HB_TAG('A','R','G',' ')}, /* Aragonese */ |
202 {"an", HB_TAG('A','R','G',' ')}, /* Aragonese */ |
205 {"ang", HB_TAG('A','N','G',' ')}, /* Old English (ca. 450-1100) */ |
203 {"ang", HB_TAG('A','N','G',' ')}, /* Old English (ca. 450-1100) */ |
206 {"ar", HB_TAG('A','R','A',' ')}, /* Arabic [macrolanguage] */ |
204 {"ar", HB_TAG('A','R','A',' ')}, /* Arabic [macrolanguage] */ |
207 {"arb", HB_TAG('A','R','A',' ')}, /* Standard Arabic */ |
205 {"arb", HB_TAG('A','R','A',' ')}, /* Standard Arabic */ |
208 {"arn", HB_TAG('M','A','P',' ')}, /* Mapudungun */ |
206 {"arn", HB_TAG('M','A','P',' ')}, /* Mapudungun */ |
237 {"bfu", HB_TAG('L','A','H',' ')}, /* Lahuli */ |
235 {"bfu", HB_TAG('L','A','H',' ')}, /* Lahuli */ |
238 {"bfy", HB_TAG('B','A','G',' ')}, /* Baghelkhandi */ |
236 {"bfy", HB_TAG('B','A','G',' ')}, /* Baghelkhandi */ |
239 {"bg", HB_TAG('B','G','R',' ')}, /* Bulgarian */ |
237 {"bg", HB_TAG('B','G','R',' ')}, /* Bulgarian */ |
240 {"bgc", HB_TAG('B','G','C',' ')}, /* Haryanvi */ |
238 {"bgc", HB_TAG('B','G','C',' ')}, /* Haryanvi */ |
241 {"bgq", HB_TAG('B','G','Q',' ')}, /* Bagri */ |
239 {"bgq", HB_TAG('B','G','Q',' ')}, /* Bagri */ |
240 {"bgr", HB_TAG('Q','I','N',' ')}, /* Bawm Chin */ |
|
242 {"bhb", HB_TAG('B','H','I',' ')}, /* Bhili */ |
241 {"bhb", HB_TAG('B','H','I',' ')}, /* Bhili */ |
243 {"bhk", HB_TAG('B','I','K',' ')}, /* Albay Bicolano (retired code) */ |
242 {"bhk", HB_TAG('B','I','K',' ')}, /* Albay Bicolano (retired code) */ |
244 {"bho", HB_TAG('B','H','O',' ')}, /* Bhojpuri */ |
243 {"bho", HB_TAG('B','H','O',' ')}, /* Bhojpuri */ |
245 {"bi", HB_TAG('B','I','S',' ')}, /* Bislama */ |
244 {"bi", HB_TAG('B','I','S',' ')}, /* Bislama */ |
246 {"bik", HB_TAG('B','I','K',' ')}, /* Bikol [macrolanguage] */ |
245 {"bik", HB_TAG('B','I','K',' ')}, /* Bikol [macrolanguage] */ |
268 {"bxr", HB_TAG('R','B','U',' ')}, /* Russian Buriat */ |
267 {"bxr", HB_TAG('R','B','U',' ')}, /* Russian Buriat */ |
269 {"byn", HB_TAG('B','I','L',' ')}, /* Bilen */ |
268 {"byn", HB_TAG('B','I','L',' ')}, /* Bilen */ |
270 {"ca", HB_TAG('C','A','T',' ')}, /* Catalan */ |
269 {"ca", HB_TAG('C','A','T',' ')}, /* Catalan */ |
271 {"cak", HB_TAG('C','A','K',' ')}, /* Kaqchikel */ |
270 {"cak", HB_TAG('C','A','K',' ')}, /* Kaqchikel */ |
272 {"cbk", HB_TAG('C','B','K',' ')}, /* Chavacano */ |
271 {"cbk", HB_TAG('C','B','K',' ')}, /* Chavacano */ |
272 {"cbl", HB_TAG('Q','I','N',' ')}, /* Bualkhaw Chin */ |
|
273 {"cco", HB_TAG('C','C','H','N')}, /* Chinantec */ |
|
273 {"ce", HB_TAG('C','H','E',' ')}, /* Chechen */ |
274 {"ce", HB_TAG('C','H','E',' ')}, /* Chechen */ |
274 {"ceb", HB_TAG('C','E','B',' ')}, /* Cebuano */ |
275 {"ceb", HB_TAG('C','E','B',' ')}, /* Cebuano */ |
276 {"cfm", HB_TAG('H','A','L',' ')}, /* Halam/Falam Chin */ |
|
275 {"cgg", HB_TAG('C','G','G',' ')}, /* Chiga */ |
277 {"cgg", HB_TAG('C','G','G',' ')}, /* Chiga */ |
276 {"ch", HB_TAG('C','H','A',' ')}, /* Chamorro */ |
278 {"ch", HB_TAG('C','H','A',' ')}, /* Chamorro */ |
279 {"chj", HB_TAG('C','C','H','N')}, /* Chinantec */ |
|
277 {"chk", HB_TAG('C','H','K','0')}, /* Chuukese */ |
280 {"chk", HB_TAG('C','H','K','0')}, /* Chuukese */ |
278 {"cho", HB_TAG('C','H','O',' ')}, /* Choctaw */ |
281 {"cho", HB_TAG('C','H','O',' ')}, /* Choctaw */ |
279 {"chp", HB_TAG('C','H','P',' ')}, /* Chipewyan */ |
282 {"chp", HB_TAG('C','H','P',' ')}, /* Chipewyan */ |
283 {"chq", HB_TAG('C','C','H','N')}, /* Chinantec */ |
|
280 {"chr", HB_TAG('C','H','R',' ')}, /* Cherokee */ |
284 {"chr", HB_TAG('C','H','R',' ')}, /* Cherokee */ |
281 {"chy", HB_TAG('C','H','Y',' ')}, /* Cheyenne */ |
285 {"chy", HB_TAG('C','H','Y',' ')}, /* Cheyenne */ |
286 {"chz", HB_TAG('C','C','H','N')}, /* Chinantec */ |
|
287 {"cja", HB_TAG('C','J','A',' ')}, /* Western Cham */ |
|
288 {"cjm", HB_TAG('C','J','M',' ')}, /* Eastern Cham */ |
|
289 {"cka", HB_TAG('Q','I','N',' ')}, /* Khumi Awa Chin */ |
|
282 {"ckb", HB_TAG('K','U','R',' ')}, /* Central Kurdish (Sorani) */ |
290 {"ckb", HB_TAG('K','U','R',' ')}, /* Central Kurdish (Sorani) */ |
283 {"ckt", HB_TAG('C','H','K',' ')}, /* Chukchi */ |
291 {"ckt", HB_TAG('C','H','K',' ')}, /* Chukchi */ |
292 {"cld", HB_TAG('S','Y','R',' ')}, /* Chaldean Neo-Aramaic */ |
|
293 {"cle", HB_TAG('C','C','H','N')}, /* Chinantec */ |
|
294 {"cmr", HB_TAG('Q','I','N',' ')}, /* Mro-Khimi Chin */ |
|
295 {"cnb", HB_TAG('Q','I','N',' ')}, /* Chinbon Chin */ |
|
296 {"cnh", HB_TAG('Q','I','N',' ')}, /* Hakha Chin */ |
|
297 {"cnk", HB_TAG('Q','I','N',' ')}, /* Khumi Chin */ |
|
298 {"cnl", HB_TAG('C','C','H','N')}, /* Chinantec */ |
|
299 {"cnt", HB_TAG('C','C','H','N')}, /* Chinantec */ |
|
300 {"cnw", HB_TAG('Q','I','N',' ')}, /* Ngawn Chin */ |
|
284 {"cop", HB_TAG('C','O','P',' ')}, /* Coptic */ |
301 {"cop", HB_TAG('C','O','P',' ')}, /* Coptic */ |
302 {"cpa", HB_TAG('C','C','H','N')}, /* Chinantec */ |
|
285 {"cpp", HB_TAG('C','P','P',' ')}, /* Creoles */ |
303 {"cpp", HB_TAG('C','P','P',' ')}, /* Creoles */ |
286 {"cr", HB_TAG('C','R','E',' ')}, /* Cree */ |
304 {"cr", HB_TAG('C','R','E',' ')}, /* Cree */ |
287 {"cre", HB_TAG('Y','C','R',' ')}, /* Y-Cree */ |
305 {"cre", HB_TAG('Y','C','R',' ')}, /* Y-Cree */ |
288 {"crh", HB_TAG('C','R','T',' ')}, /* Crimean Tatar */ |
306 {"crh", HB_TAG('C','R','T',' ')}, /* Crimean Tatar */ |
289 {"crj", HB_TAG('E','C','R',' ')}, /* [Southern] East Cree */ |
307 {"crj", HB_TAG('E','C','R',' ')}, /* [Southern] East Cree */ |
290 {"crk", HB_TAG('W','C','R',' ')}, /* West-Cree */ |
308 {"crk", HB_TAG('W','C','R',' ')}, /* West-Cree */ |
291 {"crl", HB_TAG('E','C','R',' ')}, /* [Northern] East Cree */ |
309 {"crl", HB_TAG('E','C','R',' ')}, /* [Northern] East Cree */ |
292 {"crm", HB_TAG('M','C','R',' ')}, /* Moose Cree */ |
310 {"crm", HB_TAG('M','C','R',' ')}, /* Moose Cree */ |
293 {"crx", HB_TAG('C','R','R',' ')}, /* Carrier */ |
311 {"crx", HB_TAG('C','R','R',' ')}, /* Carrier */ |
294 {"cs", HB_TAG('C','S','Y',' ')}, /* Czech */ |
312 {"cs", HB_TAG('C','S','Y',' ')}, /* Czech */ |
313 {"csa", HB_TAG('C','C','H','N')}, /* Chinantec */ |
|
295 {"csb", HB_TAG('C','S','B',' ')}, /* Kashubian */ |
314 {"csb", HB_TAG('C','S','B',' ')}, /* Kashubian */ |
315 {"csh", HB_TAG('Q','I','N',' ')}, /* Asho Chin */ |
|
316 {"cso", HB_TAG('C','C','H','N')}, /* Chinantec */ |
|
317 {"csy", HB_TAG('Q','I','N',' ')}, /* Siyin Chin */ |
|
318 {"ctd", HB_TAG('Q','I','N',' ')}, /* Tedim Chin */ |
|
319 {"cte", HB_TAG('C','C','H','N')}, /* Chinantec */ |
|
296 {"ctg", HB_TAG('C','T','G',' ')}, /* Chittagonian */ |
320 {"ctg", HB_TAG('C','T','G',' ')}, /* Chittagonian */ |
321 {"ctl", HB_TAG('C','C','H','N')}, /* Chinantec */ |
|
297 {"cts", HB_TAG('B','I','K',' ')}, /* Northern Catanduanes Bikol */ |
322 {"cts", HB_TAG('B','I','K',' ')}, /* Northern Catanduanes Bikol */ |
298 {"cu", HB_TAG('C','S','L',' ')}, /* Church Slavic */ |
323 {"cu", HB_TAG('C','S','L',' ')}, /* Church Slavic */ |
324 {"cuc", HB_TAG('C','C','H','N')}, /* Chinantec */ |
|
299 {"cuk", HB_TAG('C','U','K',' ')}, /* San Blas Kuna */ |
325 {"cuk", HB_TAG('C','U','K',' ')}, /* San Blas Kuna */ |
300 {"cv", HB_TAG('C','H','U',' ')}, /* Chuvash */ |
326 {"cv", HB_TAG('C','H','U',' ')}, /* Chuvash */ |
327 {"cvn", HB_TAG('C','C','H','N')}, /* Chinantec */ |
|
301 {"cwd", HB_TAG('D','C','R',' ')}, /* Woods Cree */ |
328 {"cwd", HB_TAG('D','C','R',' ')}, /* Woods Cree */ |
302 {"cy", HB_TAG('W','E','L',' ')}, /* Welsh */ |
329 {"cy", HB_TAG('W','E','L',' ')}, /* Welsh */ |
330 {"czt", HB_TAG('Q','I','N',' ')}, /* Zotung Chin */ |
|
303 {"da", HB_TAG('D','A','N',' ')}, /* Danish */ |
331 {"da", HB_TAG('D','A','N',' ')}, /* Danish */ |
332 {"dao", HB_TAG('Q','I','N',' ')}, /* Daai Chin */ |
|
304 {"dap", HB_TAG('N','I','S',' ')}, /* Nisi (India) */ |
333 {"dap", HB_TAG('N','I','S',' ')}, /* Nisi (India) */ |
305 {"dar", HB_TAG('D','A','R',' ')}, /* Dargwa */ |
334 {"dar", HB_TAG('D','A','R',' ')}, /* Dargwa */ |
306 {"dax", HB_TAG('D','A','X',' ')}, /* Dayi */ |
335 {"dax", HB_TAG('D','A','X',' ')}, /* Dayi */ |
307 {"de", HB_TAG('D','E','U',' ')}, /* German */ |
336 {"de", HB_TAG('D','E','U',' ')}, /* German */ |
308 {"dgo", HB_TAG('D','G','O',' ')}, /* Dogri */ |
337 {"dgo", HB_TAG('D','G','O',' ')}, /* Dogri */ |
341 {"fat", HB_TAG('F','A','T',' ')}, /* Fanti */ |
370 {"fat", HB_TAG('F','A','T',' ')}, /* Fanti */ |
342 {"ff", HB_TAG('F','U','L',' ')}, /* Fulah [macrolanguage] */ |
371 {"ff", HB_TAG('F','U','L',' ')}, /* Fulah [macrolanguage] */ |
343 {"fi", HB_TAG('F','I','N',' ')}, /* Finnish */ |
372 {"fi", HB_TAG('F','I','N',' ')}, /* Finnish */ |
344 {"fil", HB_TAG('P','I','L',' ')}, /* Filipino */ |
373 {"fil", HB_TAG('P','I','L',' ')}, /* Filipino */ |
345 {"fj", HB_TAG('F','J','I',' ')}, /* Fijian */ |
374 {"fj", HB_TAG('F','J','I',' ')}, /* Fijian */ |
346 {"flm", HB_TAG('H','A','L',' ')}, /* Halam */ |
375 {"flm", HB_TAG('H','A','L',' ')}, /* Halam/Falam Chin [retired ISO639 code] */ |
347 {"fo", HB_TAG('F','O','S',' ')}, /* Faroese */ |
376 {"fo", HB_TAG('F','O','S',' ')}, /* Faroese */ |
348 {"fon", HB_TAG('F','O','N',' ')}, /* Fon */ |
377 {"fon", HB_TAG('F','O','N',' ')}, /* Fon */ |
349 {"fr", HB_TAG('F','R','A',' ')}, /* French */ |
378 {"fr", HB_TAG('F','R','A',' ')}, /* French */ |
350 {"frc", HB_TAG('F','R','C',' ')}, /* Cajun French */ |
379 {"frc", HB_TAG('F','R','C',' ')}, /* Cajun French */ |
351 {"frp", HB_TAG('F','R','P',' ')}, /* Arpitan/Francoprovençal */ |
380 {"frp", HB_TAG('F','R','P',' ')}, /* Arpitan/Francoprovençal */ |
363 {"gih", HB_TAG('G','I','H',' ')}, /* Githabul */ |
392 {"gih", HB_TAG('G','I','H',' ')}, /* Githabul */ |
364 {"gil", HB_TAG('G','I','L','0')}, /* Kiribati (Gilbertese) */ |
393 {"gil", HB_TAG('G','I','L','0')}, /* Kiribati (Gilbertese) */ |
365 {"gkp", HB_TAG('G','K','P',' ')}, /* Kpelle (Guinea) */ |
394 {"gkp", HB_TAG('G','K','P',' ')}, /* Kpelle (Guinea) */ |
366 {"gl", HB_TAG('G','A','L',' ')}, /* Galician */ |
395 {"gl", HB_TAG('G','A','L',' ')}, /* Galician */ |
367 {"gld", HB_TAG('N','A','N',' ')}, /* Nanai */ |
396 {"gld", HB_TAG('N','A','N',' ')}, /* Nanai */ |
368 {"gle", HB_TAG('I','R','T',' ')}, /* Irish Traditional */ |
|
369 {"glk", HB_TAG('G','L','K',' ')}, /* Gilaki */ |
397 {"glk", HB_TAG('G','L','K',' ')}, /* Gilaki */ |
370 {"gn", HB_TAG('G','U','A',' ')}, /* Guarani [macrolanguage] */ |
398 {"gn", HB_TAG('G','U','A',' ')}, /* Guarani [macrolanguage] */ |
371 {"gnn", HB_TAG('G','N','N',' ')}, /* Gumatj */ |
399 {"gnn", HB_TAG('G','N','N',' ')}, /* Gumatj */ |
372 {"gno", HB_TAG('G','O','N',' ')}, /* Northern Gondi */ |
400 {"gno", HB_TAG('G','O','N',' ')}, /* Northern Gondi */ |
373 {"gog", HB_TAG('G','O','G',' ')}, /* Gogo */ |
401 {"gog", HB_TAG('G','O','G',' ')}, /* Gogo */ |
388 {"hay", HB_TAG('H','A','Y',' ')}, /* Haya */ |
416 {"hay", HB_TAG('H','A','Y',' ')}, /* Haya */ |
389 {"haz", HB_TAG('H','A','Z',' ')}, /* Hazaragi */ |
417 {"haz", HB_TAG('H','A','Z',' ')}, /* Hazaragi */ |
390 {"he", HB_TAG('I','W','R',' ')}, /* Hebrew */ |
418 {"he", HB_TAG('I','W','R',' ')}, /* Hebrew */ |
391 {"hi", HB_TAG('H','I','N',' ')}, /* Hindi */ |
419 {"hi", HB_TAG('H','I','N',' ')}, /* Hindi */ |
392 {"hil", HB_TAG('H','I','L',' ')}, /* Hiligaynon */ |
420 {"hil", HB_TAG('H','I','L',' ')}, /* Hiligaynon */ |
421 {"hlt", HB_TAG('Q','I','N',' ')}, /* Matu Chin */ |
|
393 {"hmn", HB_TAG('H','M','N',' ')}, /* Hmong */ |
422 {"hmn", HB_TAG('H','M','N',' ')}, /* Hmong */ |
394 {"hnd", HB_TAG('H','N','D',' ')}, /* [Southern] Hindko */ |
423 {"hnd", HB_TAG('H','N','D',' ')}, /* [Southern] Hindko */ |
395 {"hne", HB_TAG('C','H','H',' ')}, /* Chattisgarhi */ |
424 {"hne", HB_TAG('C','H','H',' ')}, /* Chattisgarhi */ |
396 {"hno", HB_TAG('H','N','D',' ')}, /* [Northern] Hindko */ |
425 {"hno", HB_TAG('H','N','D',' ')}, /* [Northern] Hindko */ |
397 {"ho", HB_TAG('H','M','O',' ')}, /* Hiri Motu */ |
426 {"ho", HB_TAG('H','M','O',' ')}, /* Hiri Motu */ |
520 {"lzz", HB_TAG('L','A','Z',' ')}, /* Laz */ |
549 {"lzz", HB_TAG('L','A','Z',' ')}, /* Laz */ |
521 {"mad", HB_TAG('M','A','D',' ')}, /* Madurese */ |
550 {"mad", HB_TAG('M','A','D',' ')}, /* Madurese */ |
522 {"mag", HB_TAG('M','A','G',' ')}, /* Magahi */ |
551 {"mag", HB_TAG('M','A','G',' ')}, /* Magahi */ |
523 {"mai", HB_TAG('M','T','H',' ')}, /* Maithili */ |
552 {"mai", HB_TAG('M','T','H',' ')}, /* Maithili */ |
524 {"mak", HB_TAG('M','K','R',' ')}, /* Makasar */ |
553 {"mak", HB_TAG('M','K','R',' ')}, /* Makasar */ |
525 {"mal", HB_TAG('M','A','L',' ')}, /* Malayalam */ |
|
526 {"mam", HB_TAG('M','A','M',' ')}, /* Mam */ |
554 {"mam", HB_TAG('M','A','M',' ')}, /* Mam */ |
527 {"man", HB_TAG('M','N','K',' ')}, /* Manding/Mandingo [macrolanguage] */ |
555 {"man", HB_TAG('M','N','K',' ')}, /* Manding/Mandingo [macrolanguage] */ |
528 {"mdc", HB_TAG('M','L','E',' ')}, /* Male (Papua New Guinea) */ |
556 {"mdc", HB_TAG('M','L','E',' ')}, /* Male (Papua New Guinea) */ |
529 {"mdf", HB_TAG('M','O','K',' ')}, /* Moksha */ |
557 {"mdf", HB_TAG('M','O','K',' ')}, /* Moksha */ |
530 {"mdr", HB_TAG('M','D','R',' ')}, /* Mandar */ |
558 {"mdr", HB_TAG('M','D','R',' ')}, /* Mandar */ |
551 {"mo", HB_TAG('M','O','L',' ')}, /* Moldavian */ |
579 {"mo", HB_TAG('M','O','L',' ')}, /* Moldavian */ |
552 {"moh", HB_TAG('M','O','H',' ')}, /* Mohawk */ |
580 {"moh", HB_TAG('M','O','H',' ')}, /* Mohawk */ |
553 {"mos", HB_TAG('M','O','S',' ')}, /* Mossi */ |
581 {"mos", HB_TAG('M','O','S',' ')}, /* Mossi */ |
554 {"mpe", HB_TAG('M','A','J',' ')}, /* Majang */ |
582 {"mpe", HB_TAG('M','A','J',' ')}, /* Majang */ |
555 {"mr", HB_TAG('M','A','R',' ')}, /* Marathi */ |
583 {"mr", HB_TAG('M','A','R',' ')}, /* Marathi */ |
584 {"mrh", HB_TAG('Q','I','N',' ')}, /* Mara Chin */ |
|
556 {"mrj", HB_TAG('H','M','A',' ')}, /* High Mari */ |
585 {"mrj", HB_TAG('H','M','A',' ')}, /* High Mari */ |
557 {"ms", HB_TAG('M','L','Y',' ')}, /* Malay [macrolanguage] */ |
586 {"ms", HB_TAG('M','L','Y',' ')}, /* Malay [macrolanguage] */ |
558 {"msc", HB_TAG('M','N','K',' ')}, /* Sankaran Maninka */ |
587 {"msc", HB_TAG('M','N','K',' ')}, /* Sankaran Maninka */ |
559 {"mt", HB_TAG('M','T','S',' ')}, /* Maltese */ |
588 {"mt", HB_TAG('M','T','S',' ')}, /* Maltese */ |
560 {"mtr", HB_TAG('M','A','W',' ')}, /* Mewari */ |
589 {"mtr", HB_TAG('M','A','W',' ')}, /* Mewari */ |
615 {"pap", HB_TAG('P','A','P','0')}, /* Papiamento */ |
644 {"pap", HB_TAG('P','A','P','0')}, /* Papiamento */ |
616 {"pau", HB_TAG('P','A','U',' ')}, /* Palauan */ |
645 {"pau", HB_TAG('P','A','U',' ')}, /* Palauan */ |
617 {"pcc", HB_TAG('P','C','C',' ')}, /* Bouyei */ |
646 {"pcc", HB_TAG('P','C','C',' ')}, /* Bouyei */ |
618 {"pcd", HB_TAG('P','C','D',' ')}, /* Picard */ |
647 {"pcd", HB_TAG('P','C','D',' ')}, /* Picard */ |
619 {"pce", HB_TAG('P','L','G',' ')}, /* [Ruching] Palaung */ |
648 {"pce", HB_TAG('P','L','G',' ')}, /* [Ruching] Palaung */ |
649 {"pck", HB_TAG('Q','I','N',' ')}, /* Paite Chin */ |
|
620 {"pdc", HB_TAG('P','D','C',' ')}, /* Pennsylvania German */ |
650 {"pdc", HB_TAG('P','D','C',' ')}, /* Pennsylvania German */ |
621 {"pes", HB_TAG('F','A','R',' ')}, /* Iranian Persian */ |
651 {"pes", HB_TAG('F','A','R',' ')}, /* Iranian Persian */ |
622 {"phk", HB_TAG('P','H','K',' ')}, /* Phake */ |
652 {"phk", HB_TAG('P','H','K',' ')}, /* Phake */ |
623 {"pi", HB_TAG('P','A','L',' ')}, /* Pali */ |
653 {"pi", HB_TAG('P','A','L',' ')}, /* Pali */ |
624 {"pih", HB_TAG('P','I','H',' ')}, /* Pitcairn-Norfolk */ |
654 {"pih", HB_TAG('P','I','H',' ')}, /* Pitcairn-Norfolk */ |
672 {"scs", HB_TAG('S','L','A',' ')}, /* [North] Slavey */ |
702 {"scs", HB_TAG('S','L','A',' ')}, /* [North] Slavey */ |
673 {"sd", HB_TAG('S','N','D',' ')}, /* Sindhi */ |
703 {"sd", HB_TAG('S','N','D',' ')}, /* Sindhi */ |
674 {"se", HB_TAG('N','S','M',' ')}, /* Northern Sami */ |
704 {"se", HB_TAG('N','S','M',' ')}, /* Northern Sami */ |
675 {"seh", HB_TAG('S','N','A',' ')}, /* Sena */ |
705 {"seh", HB_TAG('S','N','A',' ')}, /* Sena */ |
676 {"sel", HB_TAG('S','E','L',' ')}, /* Selkup */ |
706 {"sel", HB_TAG('S','E','L',' ')}, /* Selkup */ |
707 {"sez", HB_TAG('Q','I','N',' ')}, /* Senthang Chin */ |
|
677 {"sg", HB_TAG('S','G','O',' ')}, /* Sango */ |
708 {"sg", HB_TAG('S','G','O',' ')}, /* Sango */ |
678 {"sga", HB_TAG('S','G','A',' ')}, /* Old Irish (to 900) */ |
709 {"sga", HB_TAG('S','G','A',' ')}, /* Old Irish (to 900) */ |
679 {"sgs", HB_TAG('S','G','S',' ')}, /* Samogitian */ |
710 {"sgs", HB_TAG('S','G','S',' ')}, /* Samogitian */ |
680 {"sgw", HB_TAG('C','H','G',' ')}, /* Sebat Bet Gurage */ |
711 {"sgw", HB_TAG('C','H','G',' ')}, /* Sebat Bet Gurage */ |
681 /*{"sgw", HB_TAG('S','G','W',' ')},*/ /* Sebat Bet Gurage (in SIL fonts) */ |
712 /*{"sgw", HB_TAG('S','G','W',' ')},*/ /* Sebat Bet Gurage (in SIL fonts) */ |
711 {"sw", HB_TAG('S','W','K',' ')}, /* Swahili [macrolanguage] */ |
742 {"sw", HB_TAG('S','W','K',' ')}, /* Swahili [macrolanguage] */ |
712 {"swb", HB_TAG('C','M','R',' ')}, /* Comorian */ |
743 {"swb", HB_TAG('C','M','R',' ')}, /* Comorian */ |
713 {"swh", HB_TAG('S','W','K',' ')}, /* Kiswahili/Swahili */ |
744 {"swh", HB_TAG('S','W','K',' ')}, /* Kiswahili/Swahili */ |
714 {"swv", HB_TAG('M','A','W',' ')}, /* Shekhawati */ |
745 {"swv", HB_TAG('M','A','W',' ')}, /* Shekhawati */ |
715 {"sxu", HB_TAG('S','X','U',' ')}, /* Upper Saxon */ |
746 {"sxu", HB_TAG('S','X','U',' ')}, /* Upper Saxon */ |
747 {"syc", HB_TAG('S','Y','R',' ')}, /* Classical Syriac */ |
|
716 {"syl", HB_TAG('S','Y','L',' ')}, /* Sylheti */ |
748 {"syl", HB_TAG('S','Y','L',' ')}, /* Sylheti */ |
717 {"syr", HB_TAG('S','Y','R',' ')}, /* Syriac [macrolanguage] */ |
749 {"syr", HB_TAG('S','Y','R',' ')}, /* Syriac [macrolanguage] */ |
718 {"szl", HB_TAG('S','Z','L',' ')}, /* Silesian */ |
750 {"szl", HB_TAG('S','Z','L',' ')}, /* Silesian */ |
719 {"ta", HB_TAG('T','A','M',' ')}, /* Tamil */ |
751 {"ta", HB_TAG('T','A','M',' ')}, /* Tamil */ |
720 {"tab", HB_TAG('T','A','B',' ')}, /* Tabasaran */ |
752 {"tab", HB_TAG('T','A','B',' ')}, /* Tabasaran */ |
753 {"tcp", HB_TAG('Q','I','N',' ')}, /* Tawr Chin */ |
|
721 {"tcy", HB_TAG('T','U','L',' ')}, /* Tulu */ |
754 {"tcy", HB_TAG('T','U','L',' ')}, /* Tulu */ |
755 {"tcz", HB_TAG('Q','I','N',' ')}, /* Thado Chin */ |
|
722 {"tdd", HB_TAG('T','D','D',' ')}, /* Tai Nüa */ |
756 {"tdd", HB_TAG('T','D','D',' ')}, /* Tai Nüa */ |
723 {"te", HB_TAG('T','E','L',' ')}, /* Telugu */ |
757 {"te", HB_TAG('T','E','L',' ')}, /* Telugu */ |
724 {"tem", HB_TAG('T','M','N',' ')}, /* Temne */ |
758 {"tem", HB_TAG('T','M','N',' ')}, /* Temne */ |
725 {"tet", HB_TAG('T','E','T',' ')}, /* Tetum */ |
759 {"tet", HB_TAG('T','E','T',' ')}, /* Tetum */ |
726 {"tg", HB_TAG('T','A','J',' ')}, /* Tajik */ |
760 {"tg", HB_TAG('T','A','J',' ')}, /* Tajik */ |
784 {"xwo", HB_TAG('T','O','D',' ')}, /* Written Oirat (Todo) */ |
818 {"xwo", HB_TAG('T','O','D',' ')}, /* Written Oirat (Todo) */ |
785 {"yao", HB_TAG('Y','A','O',' ')}, /* Yao */ |
819 {"yao", HB_TAG('Y','A','O',' ')}, /* Yao */ |
786 {"yap", HB_TAG('Y','A','P',' ')}, /* Yapese */ |
820 {"yap", HB_TAG('Y','A','P',' ')}, /* Yapese */ |
787 {"yi", HB_TAG('J','I','I',' ')}, /* Yiddish [macrolanguage] */ |
821 {"yi", HB_TAG('J','I','I',' ')}, /* Yiddish [macrolanguage] */ |
788 {"yo", HB_TAG('Y','B','A',' ')}, /* Yoruba */ |
822 {"yo", HB_TAG('Y','B','A',' ')}, /* Yoruba */ |
823 {"yos", HB_TAG('Q','I','N',' ')}, /* Yos, deprecated by IANA in favor of Zou [zom] */ |
|
789 {"yso", HB_TAG('N','I','S',' ')}, /* Nisi (China) */ |
824 {"yso", HB_TAG('N','I','S',' ')}, /* Nisi (China) */ |
790 {"za", HB_TAG('Z','H','A',' ')}, /* Chuang/Zhuang [macrolanguage] */ |
825 {"za", HB_TAG('Z','H','A',' ')}, /* Chuang/Zhuang [macrolanguage] */ |
791 {"zea", HB_TAG('Z','E','A',' ')}, /* Zeeuws */ |
826 {"zea", HB_TAG('Z','E','A',' ')}, /* Zeeuws */ |
792 {"zgh", HB_TAG('Z','G','H',' ')}, /* Standard Morrocan Tamazigh */ |
827 {"zgh", HB_TAG('Z','G','H',' ')}, /* Standard Morrocan Tamazigh */ |
793 {"zne", HB_TAG('Z','N','D',' ')}, /* Zande */ |
828 {"zne", HB_TAG('Z','N','D',' ')}, /* Zande */ |
829 {"zom", HB_TAG('Q','I','N',' ')}, /* Zou */ |
|
794 {"zu", HB_TAG('Z','U','L',' ')}, /* Zulu */ |
830 {"zu", HB_TAG('Z','U','L',' ')}, /* Zulu */ |
795 {"zum", HB_TAG('L','R','C',' ')}, /* Kumzari */ |
831 {"zum", HB_TAG('L','R','C',' ')}, /* Kumzari */ |
796 {"zza", HB_TAG('Z','Z','A',' ')}, /* Zazaki */ |
832 {"zza", HB_TAG('Z','Z','A',' ')}, /* Zazaki */ |
797 |
833 |
798 /* The corresponding languages IDs for the following IDs are unclear, |
834 /* The corresponding languages IDs for the following IDs are unclear, |
841 {"zh-hant-mo",HB_TAG('Z','H','H',' ')}, /* Chinese (Macao) */ |
877 {"zh-hant-mo",HB_TAG('Z','H','H',' ')}, /* Chinese (Macao) */ |
842 {"zh-hant", HB_TAG('Z','H','T',' ')}, /* Chinese (Traditional) */ |
878 {"zh-hant", HB_TAG('Z','H','T',' ')}, /* Chinese (Traditional) */ |
843 }; |
879 }; |
844 |
880 |
845 static int |
881 static int |
846 lang_compare_first_component (const char *a, |
882 lang_compare_first_component (const void *pa, |
847 const char *b) |
883 const void *pb) |
848 { |
884 { |
885 const char *a = (const char *) pa; |
|
886 const char *b = (const char *) pb; |
|
849 unsigned int da, db; |
887 unsigned int da, db; |
850 const char *p; |
888 const char *p; |
851 |
889 |
852 p = strchr (a, '-'); |
890 p = strchr (a, '-'); |
853 da = p ? (unsigned int) (p - a) : strlen (a); |
891 da = p ? (unsigned int) (p - a) : strlen (a); |
885 for (i = 0; i < 4 && ISALPHA (s[i]); i++) |
923 for (i = 0; i < 4 && ISALPHA (s[i]); i++) |
886 tag[i] = TOUPPER (s[i]); |
924 tag[i] = TOUPPER (s[i]); |
887 if (i) { |
925 if (i) { |
888 for (; i < 4; i++) |
926 for (; i < 4; i++) |
889 tag[i] = ' '; |
927 tag[i] = ' '; |
890 return HB_TAG_CHAR4 (tag); |
928 return HB_TAG (tag[0], tag[1], tag[2], tag[3]); |
891 } |
929 } |
892 } |
930 } |
893 |
931 |
894 /* |
932 /* |
895 * "fonipa" is a variant tag in BCP-47, meaning the International Phonetic Alphabet. |
933 * "fonipa" is a variant tag in BCP-47, meaning the International Phonetic Alphabet. |
905 */ |
943 */ |
906 if (strstr (lang_str, "-fonnapa")) { |
944 if (strstr (lang_str, "-fonnapa")) { |
907 return HB_TAG('A','P','P','H'); /* Phonetic transcription—Americanist conventions */ |
945 return HB_TAG('A','P','P','H'); /* Phonetic transcription—Americanist conventions */ |
908 } |
946 } |
909 |
947 |
948 /* |
|
949 * "Syre" is a BCP-47 script tag, meaning the Estrangela variant of the Syriac script. |
|
950 * It can be applied to any language. |
|
951 */ |
|
952 if (strstr (lang_str, "-syre")) { |
|
953 return HB_TAG('S','Y','R','E'); /* Estrangela Syriac */ |
|
954 } |
|
955 |
|
956 /* |
|
957 * "Syrj" is a BCP-47 script tag, meaning the Western variant of the Syriac script. |
|
958 * It can be applied to any language. |
|
959 */ |
|
960 if (strstr (lang_str, "-syrj")) { |
|
961 return HB_TAG('S','Y','R','J'); /* Western Syriac */ |
|
962 } |
|
963 |
|
964 /* |
|
965 * "Syrn" is a BCP-47 script tag, meaning the Eastern variant of the Syriac script. |
|
966 * It can be applied to any language. |
|
967 */ |
|
968 if (strstr (lang_str, "-syrn")) { |
|
969 return HB_TAG('S','Y','R','N'); /* Eastern Syriac */ |
|
970 } |
|
971 |
|
910 /* Find a language matching in the first component */ |
972 /* Find a language matching in the first component */ |
911 { |
973 { |
912 const LangTag *lang_tag; |
974 const LangTag *lang_tag; |
913 lang_tag = (LangTag *) bsearch (lang_str, ot_languages, |
975 lang_tag = (LangTag *) bsearch (lang_str, ot_languages, |
914 ARRAY_LENGTH (ot_languages), sizeof (LangTag), |
976 ARRAY_LENGTH (ot_languages), sizeof (LangTag), |
915 (hb_compare_func_t) lang_compare_first_component); |
977 lang_compare_first_component); |
916 if (lang_tag) |
978 if (lang_tag) |
917 return lang_tag->tag; |
979 return lang_tag->tag; |
918 } |
980 } |
919 |
981 |
920 /* Otherwise, check the Chinese ones */ |
982 /* Otherwise, check the Chinese ones */ |
946 } |
1008 } |
947 |
1009 |
948 /** |
1010 /** |
949 * hb_ot_tag_to_language: |
1011 * hb_ot_tag_to_language: |
950 * |
1012 * |
951 * |
1013 * |
952 * |
1014 * |
953 * Return value: (transfer none): |
1015 * Return value: (transfer none): |
954 * |
1016 * |
955 * Since: 0.9.2 |
1017 * Since: 0.9.2 |
956 **/ |
1018 **/ |
958 hb_ot_tag_to_language (hb_tag_t tag) |
1020 hb_ot_tag_to_language (hb_tag_t tag) |
959 { |
1021 { |
960 unsigned int i; |
1022 unsigned int i; |
961 |
1023 |
962 if (tag == HB_OT_TAG_DEFAULT_LANGUAGE) |
1024 if (tag == HB_OT_TAG_DEFAULT_LANGUAGE) |
963 return NULL; |
1025 return nullptr; |
1026 |
|
1027 /* struct LangTag has only room for 3-letter language tags. */ |
|
1028 switch (tag) { |
|
1029 case HB_TAG('A','P','P','H'): /* Phonetic transcription—Americanist conventions */ |
|
1030 return hb_language_from_string ("und-fonnapa", -1); |
|
1031 case HB_TAG('I','P','P','H'): /* Phonetic transcription—IPA conventions */ |
|
1032 return hb_language_from_string ("und-fonipa", -1); |
|
1033 case HB_TAG('S','Y','R',' '): /* Syriac [macrolanguage] */ |
|
1034 return hb_language_from_string ("syr", -1); |
|
1035 case HB_TAG('S','Y','R','E'): /* Estrangela Syriac */ |
|
1036 return hb_language_from_string ("und-Syre", -1); |
|
1037 case HB_TAG('S','Y','R','J'): /* Western Syriac */ |
|
1038 return hb_language_from_string ("und-Syrj", -1); |
|
1039 case HB_TAG('S','Y','R','N'): /* Eastern Syriac */ |
|
1040 return hb_language_from_string ("und-Syrn", -1); |
|
1041 } |
|
964 |
1042 |
965 for (i = 0; i < ARRAY_LENGTH (ot_languages); i++) |
1043 for (i = 0; i < ARRAY_LENGTH (ot_languages); i++) |
966 if (ot_languages[i].tag == tag) |
1044 if (ot_languages[i].tag == tag) |
967 return hb_language_from_string (ot_languages[i].language, -1); |
1045 return hb_language_from_string (ot_languages[i].language, -1); |
968 |
1046 |
972 case HB_TAG('Z','H','H',' '): return hb_language_from_string ("zh-hk", -1); /* Hong Kong */ |
1050 case HB_TAG('Z','H','H',' '): return hb_language_from_string ("zh-hk", -1); /* Hong Kong */ |
973 case HB_TAG('Z','H','S',' '): return hb_language_from_string ("zh-Hans", -1); /* Simplified */ |
1051 case HB_TAG('Z','H','S',' '): return hb_language_from_string ("zh-Hans", -1); /* Simplified */ |
974 case HB_TAG('Z','H','T',' '): return hb_language_from_string ("zh-Hant", -1); /* Traditional */ |
1052 case HB_TAG('Z','H','T',' '): return hb_language_from_string ("zh-Hant", -1); /* Traditional */ |
975 default: break; /* Fall through */ |
1053 default: break; /* Fall through */ |
976 } |
1054 } |
977 } |
|
978 |
|
979 /* struct LangTag has only room for 3-letter language tags. */ |
|
980 switch (tag) { |
|
981 case HB_TAG('A','P','P','H'): /* Phonetic transcription—Americanist conventions */ |
|
982 return hb_language_from_string ("und-fonnapa", -1); |
|
983 case HB_TAG('I','P','P','H'): /* Phonetic transcription—IPA conventions */ |
|
984 return hb_language_from_string ("und-fonipa", -1); |
|
985 } |
1055 } |
986 |
1056 |
987 /* Else return a custom language in the form of "x-hbotABCD" */ |
1057 /* Else return a custom language in the form of "x-hbotABCD" */ |
988 { |
1058 { |
989 unsigned char buf[11] = "x-hbot"; |
1059 unsigned char buf[11] = "x-hbot"; |