[name] Rebuild language list, include missing entries
authorBehdad Esfahbod <behdad@behdad.org>
Wed, 24 Oct 2018 05:44:36 +0000 (22:44 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Sat, 27 Oct 2018 04:22:26 +0000 (21:22 -0700)
src/hb-ot-name-language.cc

index 19ffc00..8b79d4d 100644 (file)
@@ -26,6 +26,9 @@
 
 #include "hb-ot-name-language.hh"
 
+/* Following two tables were generated by joining FreeType, FontConfig,
+ * and OpenType specification language lists. */
+
 struct hb_ot_language_map_t
 {
   static int cmp (const void *key, const void *item)
@@ -42,275 +45,378 @@ struct hb_ot_language_map_t
 static const hb_ot_language_map_t
 hb_ms_language_map[] =
 {
-  {0x0401,     "ar"}, /* Arabic (Saudi Arabia) */
-  {0x0402,     "bg"}, /* Bulgarian (Bulgaria) */
-  {0x0404,     "zh-tw"}, /* Chinese (Taiwan) */
-  {0x0405,     "cs"}, /* Czech (Czech Republic) */
-  {0x0406,     "da"}, /* Danish (Denmark) */
-  {0x0407,     "de"}, /* German (Germany) */
-  {0x0408,     "el"}, /* Greek (Greece) */
-  {0x0409,     "en"}, /* English (United States) */
-  {0x040A,     "es"}, /* Spanish (Traditional Sort) (Spain) */
-  {0x040B,     "fi"}, /* Finnish (Finland) */
-  {0x040C,     "fr"}, /* French (France) */
-  {0x040D,     "he"}, /* Hebrew (Israel) */
-  {0x040E,     "hu"}, /* Hungarian (Hungary) */
-  {0x040F,     "is"}, /* Icelandic (Iceland) */
-  {0x0410,     "it"}, /* Italian (Italy) */
-  {0x0411,     "ja"}, /* Japanese (Japan) */
-  {0x0413,     "nl"}, /* Dutch (Netherlands) */
-  {0x0414,     "no"}, /* Norwegian (Bokmal) (Norway) */
-  {0x0415,     "pl"}, /* Polish (Poland) */
-  {0x0416,     "pt"}, /* Portuguese (Brazil) */
-  {0x0418,     "ro"}, /* Romanian (Romania) */
-  {0x0419,     "ru"}, /* Russian (Russia) */
-  {0x041A,     "hr"}, /* Croatian (Croatia) */
-  {0x041B,     "sk"}, /* Slovak (Slovakia) */
-  {0x041C,     "sq"}, /* Albanian (Albania) */
-  {0x041D,     "sv"}, /* Swedish (Sweden) */
-  {0x041E,     "th"}, /* Thai (Thailand) */
-  {0x041F,     "tr"}, /* Turkish (Turkey) */
-  {0x0420,     "ur"}, /* Urdu (Islamic Republic of Pakistan) */
-  {0x0421,     "id"}, /* Indonesian (Indonesia) */
-  {0x0422,     "uk"}, /* Ukrainian (Ukraine) */
-  {0x0423,     "be"}, /* Belarusian (Belarus) */
-  {0x0425,     "et"}, /* Estonian (Estonia) */
-  {0x0426,     "lv"}, /* Latvian (Latvia) */
-  {0x0427,     "lt"}, /* Lithuanian (Lithuania) */
-  {0x0428,     "tg"}, /* Tajik (Cyrillic) (Tajikistan) */
-  {0x042A,     "vi"}, /* Vietnamese (Vietnam) */
-  {0x042B,     "hy"}, /* Armenian (Armenia) */
-  {0x042C,     "az"}, /* Azeri (Latin) (Azerbaijan) */
-  {0x042F,     "mk"}, /* Macedonian (FYROM) (Former Yugoslav Republic of Macedonia) */
-  {0x0436,     "af"}, /* Afrikaans (South Africa) */
-  {0x0437,     "ka"}, /* Georgian (Georgia) */
-  {0x0438,     "fo"}, /* Faroese (Faroe Islands) */
-  {0x0439,     "hi"}, /* Hindi (India) */
-  {0x043A,     "mt"}, /* Maltese (Malta) */
-  {0x043E,     "ms"}, /* Malay (Malaysia) */
-  {0x0442,     "tk"}, /* Turkmen (Turkmenistan) */
-  {0x0443,     "uz"}, /* Uzbek (Latin) (Uzbekistan) */
-  {0x0445,     "bn"}, /* Bengali (India) */
-  {0x0446,     "pa"}, /* Punjabi (India) */
-  {0x0447,     "gu"}, /* Gujarati (India) */
-  {0x0449,     "ta"}, /* Tamil (India) */
-  {0x044A,     "te"}, /* Telugu (India) */
-  {0x044B,     "kn"}, /* Kannada (India) */
-  {0x044C,     "ml"}, /* Malayalam (India) */
-  {0x044D,     "as"}, /* Assamese (India) */
-  {0x044E,     "mr"}, /* Marathi (India) */
-  {0x044F,     "sa"}, /* Sanskrit (India) */
-  {0x0450,     "mn"}, /* Mongolian (Cyrillic) (Mongolia) */
-  {0x0453,     "km"}, /* Khmer (Cambodia) */
-  {0x0454,     "lo"}, /* Lao (Lao P.D.R.) */
-  {0x0457,     "kok"}, /* Konkani (India) */
-  {0x045A,     "syr"}, /* Syriac (Syria) */
-  {0x045D,     "iu"}, /* Inuktitut (Canada) */
-  {0x045E,     "am"}, /* Amharic (Ethiopia) */
-  {0x0461,     "ne"}, /* Nepali (Nepal) */
-  {0x0462,     "fy"}, /* Frisian (Netherlands) */
-  {0x0463,     "ps"}, /* Pashto (Afghanistan) */
-  {0x0464,     "phi"}, /* Filipino (Philippines) */
-  {0x0465,     "div"}, /* Divehi (Maldives) */
-  {0x0468,     "ha"}, /* Hausa (Latin) (Nigeria) */
-  {0x046A,     "yo"}, /* Yoruba (Nigeria) */
-  {0x0470,     "ibo"}, /* Igbo (Nigeria) */
-  {0x0481,     "mi"}, /* Maori (New Zealand) */
-  {0x0801,     "ar"}, /* Arabic (Iraq) */
-  {0x0804,     "zh-cn"}, /* Chinese (People’s Republic of China) */
-  {0x0807,     "de"}, /* German (Switzerland) */
-  {0x0809,     "en"}, /* English (United Kingdom) */
-  {0x080A,     "es"}, /* Spanish (Mexico) */
-  {0x080C,     "fr"}, /* French (Belgium) */
-  {0x0810,     "it"}, /* Italian (Switzerland) */
-  {0x0813,     "nl"}, /* Dutch (Belgium) */
-  {0x0814,     "nn"}, /* Norwegian (Nynorsk) (Norway) */
-  {0x0816,     "pt"}, /* Portuguese (Portugal) */
-  {0x081A,     "sr"}, /* Serbian (Latin) (Serbia) */
-  {0x081D,     "sv"}, /* Sweden (Finland) */
-  {0x082C,     "az"}, /* Azeri (Cyrillic) (Azerbaijan) */
-  {0x083E,     "ms"}, /* Malay (Brunei Darussalam) */
-  {0x0843,     "uz"}, /* Uzbek (Cyrillic) (Uzbekistan) */
-  {0x0845,     "bn"}, /* Bengali (Bangladesh) */
-  {0x0C01,     "ar"}, /* Arabic (Egypt) */
-  {0x0C04,     "zh-hk"}, /* Chinese (Hong Kong S.A.R.) */
-  {0x0C07,     "de"}, /* German (Austria) */
-  {0x0C09,     "en"}, /* English (Australia) */
-  {0x0C0C,     "fr"}, /* French (Canada) */
-  {0x0C1A,     "sr"}, /* Serbian (Cyrillic) (Serbia) */
-  {0x1001,     "ar"}, /* Arabic (Libya) */
-  {0x1004,     "zh-sg"}, /* Chinese (Singapore) */
-  {0x1007,     "de"}, /* German (Luxembourg) */
-  {0x1009,     "en"}, /* English (Canada) */
-  {0x100A,     "es"}, /* Spanish (Guatemala) */
-  {0x100C,     "fr"}, /* French (Switzerland) */
-  {0x1401,     "ar"}, /* Arabic (Algeria) */
-  {0x1409,     "en"}, /* English (New Zealand) */
-  {0x140A,     "es"}, /* Spanish (Costa Rica) */
-  {0x141A,     "bs"}, /* Bosnian (Latin) (Bosnia and Herzegovina) */
-  {0x1801,     "ar"}, /* Arabic (Morocco) */
-  {0x1809,     "en"}, /* English (Ireland) */
-  {0x180A,     "es"}, /* Spanish (Panama) */
-  {0x180C,     "fr"}, /* French (Principality of Monaco) */
-  {0x1C01,     "ar"}, /* Arabic (Tunisia) */
-  {0x1C09,     "en"}, /* English (South Africa) */
-  {0x1C0A,     "es"}, /* Spanish (Dominican Republic) */
-  {0x2001,     "ar"}, /* Arabic (Oman) */
-  {0x2009,     "en"}, /* English (Jamaica) */
-  {0x200A,     "es"}, /* Spanish (Venezuela) */
-  {0x2401,     "ar"}, /* Arabic (Yemen) */
-  {0x2409,     "en"}, /* English (Caribbean) */
-  {0x240A,     "es"}, /* Spanish (Colombia) */
-  {0x2801,     "ar"}, /* Arabic (Syria) */
-  {0x2809,     "en"}, /* English (Belize) */
-  {0x280A,     "es"}, /* Spanish (Peru) */
-  {0x2C01,     "ar"}, /* Arabic (Jordan) */
-  {0x2C09,     "en"}, /* English (Trinidad and Tobago) */
-  {0x2C0A,     "es"}, /* Spanish (Argentina) */
-  {0x3001,     "ar"}, /* Arabic (Lebanon) */
-  {0x3009,     "en"}, /* English (Zimbabwe) */
-  {0x300A,     "es"}, /* Spanish (Ecuador) */
-  {0x3401,     "ar"}, /* Arabic (Kuwait) */
-  {0x3409,     "en"}, /* English (Republic of the Philippines) */
-  {0x340A,     "es"}, /* Spanish (Chile) */
-  {0x3801,     "ar"}, /* Arabic (U.A.E.) */
-  {0x380A,     "es"}, /* Spanish (Uruguay) */
-  {0x3C01,     "ar"}, /* Arabic (Bahrain) */
-  {0x3C0A,     "es"}, /* Spanish (Paraguay) */
-  {0x4001,     "ar"}, /* Arabic (Qatar) */
-  {0x4009,     "en"}, /* English (India) */
-  {0x400A,     "es"}, /* Spanish (Bolivia) */
-  {0x4409,     "en"}, /* English (Malaysia) */
-  {0x440A,     "es"}, /* Spanish (El Salvador) */
-  {0x4809,     "en"}, /* English (Singapore) */
-  {0x480A,     "es"}, /* Spanish (Honduras) */
-  {0x4C0A,     "es"}, /* Spanish (Nicaragua) */
-  {0x500A,     "es"}, /* Spanish (Puerto Rico) */
-  {0x540A,     "es"}, /* Spanish (United States) */
+  {0x0001,     "ar"},  /* ??? */
+  {0x0004,     "zh"},  /* ??? */
+  {0x0009,     "en"},  /* ??? */
+  {0x0401,     "ar"},  /* Arabic (Saudi Arabia) */
+  {0x0402,     "bg"},  /* Bulgarian (Bulgaria) */
+//{0x0403,     ""},    /* Catalan (Catalan) */
+  {0x0404,     "zh-tw"},       /* Chinese (Taiwan) */
+  {0x0405,     "cs"},  /* Czech (Czech Republic) */
+  {0x0406,     "da"},  /* Danish (Denmark) */
+  {0x0407,     "de"},  /* German (Germany) */
+  {0x0408,     "el"},  /* Greek (Greece) */
+  {0x0409,     "en"},  /* English (United States) */
+  {0x040A,     "es"},  /* Spanish (Traditional Sort) (Spain) */
+  {0x040B,     "fi"},  /* Finnish (Finland) */
+  {0x040C,     "fr"},  /* French (France) */
+  {0x040D,     "he"},  /* Hebrew (Israel) */
+  {0x040E,     "hu"},  /* Hungarian (Hungary) */
+  {0x040F,     "is"},  /* Icelandic (Iceland) */
+  {0x0410,     "it"},  /* Italian (Italy) */
+  {0x0411,     "ja"},  /* Japanese (Japan) */
+//{0x0412,     ""},    /* Korean (Korea) */
+  {0x0413,     "nl"},  /* Dutch (Netherlands) */
+  {0x0414,     "no"},  /* Norwegian (Bokmal) (Norway) */
+  {0x0415,     "pl"},  /* Polish (Poland) */
+  {0x0416,     "pt"},  /* Portuguese (Brazil) */
+//{0x0417,     ""},    /* Romansh (Switzerland) */
+  {0x0418,     "ro"},  /* Romanian (Romania) */
+  {0x0419,     "ru"},  /* Russian (Russia) */
+  {0x041A,     "hr"},  /* Croatian (Croatia) */
+  {0x041B,     "sk"},  /* Slovak (Slovakia) */
+  {0x041C,     "sq"},  /* Albanian (Albania) */
+  {0x041D,     "sv"},  /* Swedish (Sweden) */
+  {0x041E,     "th"},  /* Thai (Thailand) */
+  {0x041F,     "tr"},  /* Turkish (Turkey) */
+  {0x0420,     "ur"},  /* Urdu (Islamic Republic of Pakistan) */
+  {0x0421,     "id"},  /* Indonesian (Indonesia) */
+  {0x0422,     "uk"},  /* Ukrainian (Ukraine) */
+  {0x0423,     "be"},  /* Belarusian (Belarus) */
+//{0x0424,     ""},    /* Slovenian (Slovenia) */
+  {0x0425,     "et"},  /* Estonian (Estonia) */
+  {0x0426,     "lv"},  /* Latvian (Latvia) */
+  {0x0427,     "lt"},  /* Lithuanian (Lithuania) */
+  {0x0428,     "tg"},  /* Tajik (Cyrillic) (Tajikistan) */
+  {0x0429,     "fa"},  /* ??? */
+  {0x042A,     "vi"},  /* Vietnamese (Vietnam) */
+  {0x042B,     "hy"},  /* Armenian (Armenia) */
+  {0x042C,     "az"},  /* Azeri (Latin) (Azerbaijan) */
+//{0x042D,     ""},    /* Basque (Basque) */
+//{0x042E,     ""},    /* Upper Sorbian (Germany) */
+  {0x042F,     "mk"},  /* Macedonian (FYROM) (Former Yugoslav Republic of Macedonia) */
+  {0x0430,     "st"},  /* ??? */
+  {0x0431,     "ts"},  /* ??? */
+//{0x0432,     ""},    /* Setswana (South Africa) */
+  {0x0433,     "ven"}, /* ??? */
+//{0x0434,     ""},    /* isiXhosa (South Africa) */
+//{0x0435,     ""},    /* isiZulu (South Africa) */
+  {0x0436,     "af"},  /* Afrikaans (South Africa) */
+  {0x0437,     "ka"},  /* Georgian (Georgia) */
+  {0x0438,     "fo"},  /* Faroese (Faroe Islands) */
+  {0x0439,     "hi"},  /* Hindi (India) */
+  {0x043A,     "mt"},  /* Maltese (Malta) */
+  {0x043B,     "se"},  /* Sami (Northern) (Norway) */
+  {0x043C,     "ga"},  /* ??? */
+  {0x043D,     "yi"},  /* ??? */
+  {0x043E,     "ms"},  /* Malay (Malaysia) */
+//{0x043F,     ""},    /* Kazakh (Kazakhstan) */
+//{0x0440,     ""},    /* Kyrgyz (Kyrgyzstan) */
+//{0x0441,     ""},    /* Kiswahili (Kenya) */
+  {0x0442,     "tk"},  /* Turkmen (Turkmenistan) */
+  {0x0443,     "uz"},  /* Uzbek (Latin) (Uzbekistan) */
+//{0x0444,     ""},    /* Tatar (Russia) */
+  {0x0445,     "bn"},  /* Bengali (India) */
+  {0x0446,     "pa"},  /* Punjabi (India) */
+  {0x0447,     "gu"},  /* Gujarati (India) */
+//{0x0448,     ""},    /* Odia (formerly Oriya) (India) */
+  {0x0449,     "ta"},  /* Tamil (India) */
+  {0x044A,     "te"},  /* Telugu (India) */
+  {0x044B,     "kn"},  /* Kannada (India) */
+  {0x044C,     "ml"},  /* Malayalam (India) */
+  {0x044D,     "as"},  /* Assamese (India) */
+  {0x044E,     "mr"},  /* Marathi (India) */
+  {0x044F,     "sa"},  /* Sanskrit (India) */
+  {0x0450,     "mn"},  /* Mongolian (Cyrillic) (Mongolia) */
+//{0x0451,     ""},    /* Tibetan (PRC) */
+//{0x0452,     ""},    /* Welsh (United Kingdom) */
+  {0x0453,     "km"},  /* Khmer (Cambodia) */
+  {0x0454,     "lo"},  /* Lao (Lao P.D.R.) */
+  {0x0455,     "my"},  /* ??? */
+//{0x0456,     ""},    /* Galician (Galician) */
+  {0x0457,     "kok"}, /* Konkani (India) */
+  {0x0458,     "mni"}, /* ??? */
+  {0x0459,     "sd"},  /* ??? */
+  {0x045A,     "syr"}, /* Syriac (Syria) */
+//{0x045B,     ""},    /* Sinhala (Sri Lanka) */
+  {0x045C,     "chr"}, /* ??? */
+  {0x045D,     "iu"},  /* Inuktitut (Canada) */
+  {0x045E,     "am"},  /* Amharic (Ethiopia) */
+  {0x0460,     "ks"},  /* ??? */
+  {0x0461,     "ne"},  /* Nepali (Nepal) */
+  {0x0462,     "fy"},  /* Frisian (Netherlands) */
+  {0x0463,     "ps"},  /* Pashto (Afghanistan) */
+  {0x0464,     "phi"}, /* Filipino (Philippines) */
+  {0x0465,     "div"}, /* Divehi (Maldives) */
+  {0x0468,     "ha"},  /* Hausa (Latin) (Nigeria) */
+  {0x046A,     "yo"},  /* Yoruba (Nigeria) */
+//{0x046B,     ""},    /* Quechua (Bolivia) */
+//{0x046C,     ""},    /* Sesotho sa Leboa (South Africa) */
+//{0x046D,     ""},    /* Bashkir (Russia) */
+//{0x046E,     ""},    /* Luxembourgish (Luxembourg) */
+//{0x046F,     ""},    /* Greenlandic (Greenland) */
+  {0x0470,     "ibo"}, /* Igbo (Nigeria) */
+  {0x0471,     "kau"}, /* ??? */
+  {0x0472,     "om"},  /* ??? */
+  {0x0473,     "ti"},  /* ??? */
+  {0x0474,     "gn"},  /* ??? */
+  {0x0475,     "haw"}, /* ??? */
+  {0x0476,     "la"},  /* ??? */
+  {0x0477,     "so"},  /* ??? */
+//{0x0478,     ""},    /* Yi (PRC) */
+  {0x0479,     "pap"}, /* ??? */
+//{0x047A,     ""},    /* Mapudungun (Chile) */
+//{0x047C,     ""},    /* Mohawk (Mohawk) */
+//{0x047E,     ""},    /* Breton (France) */
+//{0x0480,     ""},    /* Uighur (PRC) */
+  {0x0481,     "mi"},  /* Maori (New Zealand) */
+//{0x0482,     ""},    /* Occitan (France) */
+//{0x0483,     ""},    /* Corsican (France) */
+//{0x0484,     ""},    /* Alsatian (France) */
+//{0x0485,     ""},    /* Yakut (Russia) */
+//{0x0486,     ""},    /* K'iche (Guatemala) */
+//{0x0487,     ""},    /* Kinyarwanda (Rwanda) */
+//{0x0488,     ""},    /* Wolof (Senegal) */
+//{0x048C,     ""},    /* Dari (Afghanistan) */
+  {0x0801,     "ar"},  /* Arabic (Iraq) */
+  {0x0804,     "zh-cn"},       /* Chinese (People’s Republic of China) */
+  {0x0807,     "de"},  /* German (Switzerland) */
+  {0x0809,     "en"},  /* English (United Kingdom) */
+  {0x080A,     "es"},  /* Spanish (Mexico) */
+  {0x080C,     "fr"},  /* French (Belgium) */
+  {0x0810,     "it"},  /* Italian (Switzerland) */
+  {0x0812,     "ko"},  /* ??? */
+  {0x0813,     "nl"},  /* Dutch (Belgium) */
+  {0x0814,     "nn"},  /* Norwegian (Nynorsk) (Norway) */
+  {0x0816,     "pt"},  /* Portuguese (Portugal) */
+  {0x0818,     "mo"},  /* ??? */
+  {0x0819,     "ru"},  /* ??? */
+  {0x081A,     "sr"},  /* Serbian (Latin) (Serbia) */
+  {0x081D,     "sv"},  /* Sweden (Finland) */
+  {0x0820,     "ur"},  /* ??? */
+  {0x0827,     "lt"},  /* ??? */
+  {0x082C,     "az"},  /* Azeri (Cyrillic) (Azerbaijan) */
+//{0x082E,     ""},    /* Lower Sorbian (Germany) */
+//{0x083B,     ""},    /* Sami (Northern) (Sweden) */
+  {0x083C,     "gd"},  /* Irish (Ireland) */
+  {0x083E,     "ms"},  /* Malay (Brunei Darussalam) */
+  {0x0843,     "uz"},  /* Uzbek (Cyrillic) (Uzbekistan) */
+  {0x0845,     "bn"},  /* Bengali (Bangladesh) */
+  {0x0846,     "ar"},  /* ??? */
+//{0x0850,     ""},    /* Mongolian (Traditional) (People’s Republic of China) */
+  {0x0851,     "dz"},  /* ??? */
+//{0x085D,     ""},    /* Inuktitut (Latin) (Canada) */
+//{0x085F,     ""},    /* Tamazight (Latin) (Algeria) */
+  {0x0861,     "ne"},  /* ??? */
+//{0x086B,     ""},    /* Quechua (Ecuador) */
+  {0x0873,     "ti"},  /* ??? */
+  {0x0C01,     "ar"},  /* Arabic (Egypt) */
+  {0x0C04,     "zh-hk"},       /* Chinese (Hong Kong S.A.R.) */
+  {0x0C07,     "de"},  /* German (Austria) */
+  {0x0C09,     "en"},  /* English (Australia) */
+//{0x0C0A,     ""},    /* Spanish (Modern Sort) (Spain) */
+  {0x0C0C,     "fr"},  /* French (Canada) */
+  {0x0C1A,     "sr"},  /* Serbian (Cyrillic) (Serbia) */
+//{0x0C3B,     ""},    /* Sami (Northern) (Finland) */
+//{0x0C6B,     ""},    /* Quechua (Peru) */
+  {0x1001,     "ar"},  /* Arabic (Libya) */
+  {0x1004,     "zh-sg"},       /* Chinese (Singapore) */
+  {0x1007,     "de"},  /* German (Luxembourg) */
+  {0x1009,     "en"},  /* English (Canada) */
+  {0x100A,     "es"},  /* Spanish (Guatemala) */
+  {0x100C,     "fr"},  /* French (Switzerland) */
+//{0x101A,     ""},    /* Croatian (Latin) (Bosnia and Herzegovina) */
+//{0x103B,     ""},    /* Sami (Lule) (Norway) */
+  {0x1401,     "ar"},  /* Arabic (Algeria) */
+//{0x1404,     ""},    /* Chinese (Macao S.A.R.) */
+//{0x1407,     ""},    /* German (Liechtenstein) */
+  {0x1409,     "en"},  /* English (New Zealand) */
+  {0x140A,     "es"},  /* Spanish (Costa Rica) */
+  {0x140C,     "fr"},  /* ??? */
+//{0x140c,     ""},    /* French (Luxembourg) */
+  {0x141A,     "bs"},  /* Bosnian (Latin) (Bosnia and Herzegovina) */
+//{0x143B,     ""},    /* Sami (Lule) (Sweden) */
+  {0x1801,     "ar"},  /* Arabic (Morocco) */
+  {0x1809,     "en"},  /* English (Ireland) */
+  {0x180A,     "es"},  /* Spanish (Panama) */
+  {0x180C,     "fr"},  /* French (Principality of Monaco) */
+//{0x181A,     ""},    /* Serbian (Latin) (Bosnia and Herzegovina) */
+//{0x183B,     ""},    /* Sami (Southern) (Norway) */
+  {0x1C01,     "ar"},  /* Arabic (Tunisia) */
+  {0x1C09,     "en"},  /* English (South Africa) */
+  {0x1C0A,     "es"},  /* Spanish (Dominican Republic) */
+  {0x1C0C,     "fr"},  /* ??? */
+//{0x1C1A,     ""},    /* Serbian (Cyrillic) (Bosnia and Herzegovina) */
+//{0x1C3B,     ""},    /* Sami (Southern) (Sweden) */
+  {0x2001,     "ar"},  /* Arabic (Oman) */
+  {0x2009,     "en"},  /* English (Jamaica) */
+  {0x200A,     "es"},  /* Spanish (Venezuela) */
+  {0x200C,     "fr"},  /* ??? */
+//{0x201A,     ""},    /* Bosnian (Cyrillic) (Bosnia and Herzegovina) */
+//{0x203B,     ""},    /* Sami (Skolt) (Finland) */
+  {0x2401,     "ar"},  /* Arabic (Yemen) */
+  {0x2409,     "en"},  /* English (Caribbean) */
+  {0x240A,     "es"},  /* Spanish (Colombia) */
+  {0x240C,     "fr"},  /* ??? */
+//{0x243B,     ""},    /* Sami (Inari) (Finland) */
+  {0x2801,     "ar"},  /* Arabic (Syria) */
+  {0x2809,     "en"},  /* English (Belize) */
+  {0x280A,     "es"},  /* Spanish (Peru) */
+  {0x280C,     "fr"},  /* ??? */
+  {0x2C01,     "ar"},  /* Arabic (Jordan) */
+  {0x2C09,     "en"},  /* English (Trinidad and Tobago) */
+  {0x2C0A,     "es"},  /* Spanish (Argentina) */
+  {0x2C0C,     "fr"},  /* ??? */
+  {0x3001,     "ar"},  /* Arabic (Lebanon) */
+  {0x3009,     "en"},  /* English (Zimbabwe) */
+  {0x300A,     "es"},  /* Spanish (Ecuador) */
+  {0x300C,     "fr"},  /* ??? */
+  {0x3401,     "ar"},  /* Arabic (Kuwait) */
+  {0x3409,     "en"},  /* English (Republic of the Philippines) */
+  {0x340A,     "es"},  /* Spanish (Chile) */
+  {0x340C,     "fr"},  /* ??? */
+  {0x3801,     "ar"},  /* Arabic (U.A.E.) */
+  {0x380A,     "es"},  /* Spanish (Uruguay) */
+  {0x380C,     "fr"},  /* ??? */
+  {0x3C01,     "ar"},  /* Arabic (Bahrain) */
+  {0x3C09,     "en"},  /* ??? */
+  {0x3C0A,     "es"},  /* Spanish (Paraguay) */
+  {0x3C0C,     "fr"},  /* ??? */
+  {0x4001,     "ar"},  /* Arabic (Qatar) */
+  {0x4009,     "en"},  /* English (India) */
+  {0x400A,     "es"},  /* Spanish (Bolivia) */
+  {0x4409,     "en"},  /* English (Malaysia) */
+  {0x440A,     "es"},  /* Spanish (El Salvador) */
+  {0x4809,     "en"},  /* English (Singapore) */
+  {0x480A,     "es"},  /* Spanish (Honduras) */
+  {0x4C0A,     "es"},  /* Spanish (Nicaragua) */
+  {0x500A,     "es"},  /* Spanish (Puerto Rico) */
+  {0x540A,     "es"},  /* Spanish (United States) */
+  {0xE40A,     "es"},  /* ??? */
+  {0xE40C,     "fr"},  /* ??? */
 };
 
 static const hb_ot_language_map_t
 hb_mac_language_map[] =
 {
-  {0,  "en"}, /* English */
-  {1,  "fr"}, /* French */
-  {2,  "de"}, /* German */
-  {3,  "it"}, /* Italian */
-  {4,  "nl"}, /* Dutch */
-  {5,  "sv"}, /* Swedish */
-  {6,  "es"}, /* Spanish */
-  {7,  "da"}, /* Danish */
-  {8,  "pt"}, /* Portuguese */
-  {9,  "no"}, /* Norwegian */
-  {10, "he"}, /* Hebrew */
-  {11, "ja"}, /* Japanese */
-  {12, "ar"}, /* Arabic */
-  {13, "fi"}, /* Finnish */
-  {14, "el"}, /* Greek */
-  {15, "is"}, /* Icelandic */
-  {16, "mt"}, /* Maltese */
-  {17, "tr"}, /* Turkish */
-  {18, "hr"}, /* Croatian */
-  {19, "zh-tw"}, /* Chinese (Traditional) */
-  {20, "ur"}, /* Urdu */
-  {21, "hi"}, /* Hindi */
-  {22, "th"}, /* Thai */
-  {23, "ko"}, /* Korean */
-  {24, "lt"}, /* Lithuanian */
-  {25, "pl"}, /* Polish */
-  {26, "hu"}, /* Hungarian */
-  {27, "et"}, /* Estonian */
-  {28, "lv"}, /* Latvian */
-  {30, "fo"}, /* Faroese */
-  {31, "fa"}, /* Farsi/Persian */
-  {32, "ru"}, /* Russian */
-  {33, "zh-cn"}, /* Chinese (Simplified) */
-  {34, "nl"}, /* Flemish */
-  {35, "ga"}, /* Irish Gaelic */
-  {36, "sq"}, /* Albanian */
-  {37, "ro"}, /* Romanian */
-  {38, "cs"}, /* Czech */
-  {39, "sk"}, /* Slovak */
-  {40, "sl"}, /* Slovenian */
-  {41, "yi"}, /* Yiddish */
-  {42, "sr"}, /* Serbian */
-  {43, "mk"}, /* Macedonian */
-  {44, "bg"}, /* Bulgarian */
-  {45, "uk"}, /* Ukrainian */
-  {46, "be"}, /* Byelorussian */
-  {47, "uz"}, /* Uzbek */
-  {48, "kk"}, /* Kazakh */
-  {49, "az"}, /* Azerbaijani (Cyrillic script) */
-  {49, "az"}, /* Azerbaijani (Cyrillic script) */
-  {50, "ar"}, /* Azerbaijani (Arabic script) */
-  {51, "hy"}, /* Armenian */
-  {52, "ka"}, /* Georgian */
-  {53, "mo"}, /* Moldavian */
-  {54, "ky"}, /* Kirghiz */
-  {55, "tg"}, /* Tajiki */
-  {56, "tk"}, /* Turkmen */
-  {57, "mo"}, /* Mongolian (Mongolian script) */
-  {57, "mo"}, /* Mongolian (Mongolian script) */
-  {58, "mo"}, /* Mongolian (Cyrillic script) */
-  {59, "ps"}, /* Pashto */
-  {60, "ku"}, /* Kurdish */
-  {61, "ks"}, /* Kashmiri */
-  {62, "sd"}, /* Sindhi */
-  {63, "bo"}, /* Tibetan */
-  {64, "ne"}, /* Nepali */
-  {65, "sa"}, /* Sanskrit */
-  {66, "mr"}, /* Marathi */
-  {67, "bn"}, /* Bengali */
-  {68, "as"}, /* Assamese */
-  {69, "gu"}, /* Gujarati */
-  {70, "pa"}, /* Punjabi */
-  {71, "or"}, /* Oriya */
-  {72, "ml"}, /* Malayalam */
-  {73, "kn"}, /* Kannada */
-  {74, "ta"}, /* Tamil */
-  {75, "te"}, /* Telugu */
-  {76, "si"}, /* Sinhalese */
-  {77, "my"}, /* Burmese */
-  {78, "km"}, /* Khmer */
-  {79, "lo"}, /* Lao */
-  {80, "vi"}, /* Vietnamese */
-  {81, "id"}, /* Indonesian */
-  {82, "tl"}, /* Tagalog */
-  {83, "ms"}, /* Malay (Roman script) */
-  {84, "ms"}, /* Malay (Arabic script) */
-  {85, "am"}, /* Amharic */
-  {86, "ti"}, /* Tigrinya */
-  {87, "om"}, /* Galla */
-  {88, "so"}, /* Somali */
-  {89, "sw"}, /* Swahili */
-  {90, "rw"}, /* Kinyarwanda/Ruanda */
-  {91, "rn"}, /* Rundi */
-  {92, "ny"}, /* Nyanja/Chewa */
-  {93, "mg"}, /* Malagasy */
-  {94, "eo"}, /* Esperanto */
-  {128,        "cy"}, /* Welsh */
-  {129,        "eu"}, /* Basque */
-  {130,        "ca"}, /* Catalan */
-  {131,        "la"}, /* Latin */
-  {132,        "qu"}, /* Quechua */
-  {133,        "gn"}, /* Guarani */
-  {134,        "ay"}, /* Aymara */
-  {135,        "tt"}, /* Tatar */
-  {136,        "ug"}, /* Uighur */
-  {137,        "dz"}, /* Dzongkha */
-  {138,        "jw"}, /* Javanese (Roman script) */
-  {139,        "su"}, /* Sundanese (Roman script) */
-  {140,        "gl"}, /* Galician */
-  {141,        "af"}, /* Afrikaans */
-  {142,        "br"}, /* Breton */
-  {143,        "iu"}, /* Inuktitut */
-  {144,        "gd"}, /* Scottish Gaelic */
-  {145,        "gv"}, /* Manx Gaelic */
-  {146,        "ga"}, /* Irish Gaelic (with dot above) */
-  {147,        "to"}, /* Tongan */
-  {148,        "el"}, /* Greek (polytonic) */
-  {149,        "ik"}, /* Greenlandic */
-  {150,        "az"}, /* Azerbaijani (Roman script) */
+  {  0,        "en"},  /* English */
+  {  1,        "fr"},  /* French */
+  {  2,        "de"},  /* German */
+  {  3,        "it"},  /* Italian */
+  {  4,        "nl"},  /* Dutch */
+  {  5,        "sv"},  /* Swedish */
+  {  6,        "es"},  /* Spanish */
+  {  7,        "da"},  /* Danish */
+  {  8,        "pt"},  /* Portuguese */
+  {  9,        "no"},  /* Norwegian */
+  { 10,        "he"},  /* Hebrew */
+  { 11,        "ja"},  /* Japanese */
+  { 12,        "ar"},  /* Arabic */
+  { 13,        "fi"},  /* Finnish */
+  { 14,        "el"},  /* Greek */
+  { 15,        "is"},  /* Icelandic */
+  { 16,        "mt"},  /* Maltese */
+  { 17,        "tr"},  /* Turkish */
+  { 18,        "hr"},  /* Croatian */
+  { 19,        "zh-tw"},       /* Chinese (Traditional) */
+  { 20,        "ur"},  /* Urdu */
+  { 21,        "hi"},  /* Hindi */
+  { 22,        "th"},  /* Thai */
+  { 23,        "ko"},  /* Korean */
+  { 24,        "lt"},  /* Lithuanian */
+  { 25,        "pl"},  /* Polish */
+  { 26,        "hu"},  /* Hungarian */
+  { 27,        "et"},  /* Estonian */
+  { 28,        "lv"},  /* Latvian */
+//{ 29,        ""},    /* Sami */
+  { 30,        "fo"},  /* Faroese */
+  { 31,        "fa"},  /* Farsi/Persian */
+  { 32,        "ru"},  /* Russian */
+  { 33,        "zh-cn"},       /* Chinese (Simplified) */
+  { 34,        "nl"},  /* Flemish */
+  { 35,        "ga"},  /* Irish Gaelic */
+  { 36,        "sq"},  /* Albanian */
+  { 37,        "ro"},  /* Romanian */
+  { 38,        "cs"},  /* Czech */
+  { 39,        "sk"},  /* Slovak */
+  { 40,        "sl"},  /* Slovenian */
+  { 41,        "yi"},  /* Yiddish */
+  { 42,        "sr"},  /* Serbian */
+  { 43,        "mk"},  /* Macedonian */
+  { 44,        "bg"},  /* Bulgarian */
+  { 45,        "uk"},  /* Ukrainian */
+  { 46,        "be"},  /* Byelorussian */
+  { 47,        "uz"},  /* Uzbek */
+  { 48,        "kk"},  /* Kazakh */
+  { 49,        "az"},  /* Azerbaijani (Cyrillic script) */
+  { 50,        "ar"},  /* Azerbaijani (Arabic script) */
+  { 51,        "hy"},  /* Armenian */
+  { 52,        "ka"},  /* Georgian */
+  { 53,        "mo"},  /* Moldavian */
+  { 54,        "ky"},  /* Kirghiz */
+  { 55,        "tg"},  /* Tajiki */
+  { 56,        "tk"},  /* Turkmen */
+  { 57,        "mo"},  /* Mongolian (Mongolian script) */
+  { 58,        "mo"},  /* Mongolian (Cyrillic script) */
+  { 59,        "ps"},  /* Pashto */
+  { 60,        "ku"},  /* Kurdish */
+  { 61,        "ks"},  /* Kashmiri */
+  { 62,        "sd"},  /* Sindhi */
+  { 63,        "bo"},  /* Tibetan */
+  { 64,        "ne"},  /* Nepali */
+  { 65,        "sa"},  /* Sanskrit */
+  { 66,        "mr"},  /* Marathi */
+  { 67,        "bn"},  /* Bengali */
+  { 68,        "as"},  /* Assamese */
+  { 69,        "gu"},  /* Gujarati */
+  { 70,        "pa"},  /* Punjabi */
+  { 71,        "or"},  /* Oriya */
+  { 72,        "ml"},  /* Malayalam */
+  { 73,        "kn"},  /* Kannada */
+  { 74,        "ta"},  /* Tamil */
+  { 75,        "te"},  /* Telugu */
+  { 76,        "si"},  /* Sinhalese */
+  { 77,        "my"},  /* Burmese */
+  { 78,        "km"},  /* Khmer */
+  { 79,        "lo"},  /* Lao */
+  { 80,        "vi"},  /* Vietnamese */
+  { 81,        "id"},  /* Indonesian */
+  { 82,        "tl"},  /* Tagalog */
+  { 83,        "ms"},  /* Malay (Roman script) */
+  { 84,        "ms"},  /* Malay (Arabic script) */
+  { 85,        "am"},  /* Amharic */
+  { 86,        "ti"},  /* Tigrinya */
+  { 87,        "om"},  /* Galla */
+  { 88,        "so"},  /* Somali */
+  { 89,        "sw"},  /* Swahili */
+  { 90,        "rw"},  /* Kinyarwanda/Ruanda */
+  { 91,        "rn"},  /* Rundi */
+  { 92,        "ny"},  /* Nyanja/Chewa */
+  { 93,        "mg"},  /* Malagasy */
+  { 94,        "eo"},  /* Esperanto */
+  {128,        "cy"},  /* Welsh */
+  {129,        "eu"},  /* Basque */
+  {130,        "ca"},  /* Catalan */
+  {131,        "la"},  /* Latin */
+  {132,        "qu"},  /* Quechua */
+  {133,        "gn"},  /* Guarani */
+  {134,        "ay"},  /* Aymara */
+  {135,        "tt"},  /* Tatar */
+  {136,        "ug"},  /* Uighur */
+  {137,        "dz"},  /* Dzongkha */
+  {138,        "jw"},  /* Javanese (Roman script) */
+  {139,        "su"},  /* Sundanese (Roman script) */
+  {140,        "gl"},  /* Galician */
+  {141,        "af"},  /* Afrikaans */
+  {142,        "br"},  /* Breton */
+  {143,        "iu"},  /* Inuktitut */
+  {144,        "gd"},  /* Scottish Gaelic */
+  {145,        "gv"},  /* Manx Gaelic */
+  {146,        "ga"},  /* Irish Gaelic (with dot above) */
+  {147,        "to"},  /* Tongan */
+  {148,        "el"},  /* Greek (polytonic) */
+  {149,        "ik"},  /* Greenlandic */
+  {150,        "az"},  /* Azerbaijani (Roman script) */
 };