[name] Fill out most missing language codes
authorBehdad Esfahbod <behdad@behdad.org>
Wed, 24 Oct 2018 20:20:19 +0000 (13:20 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Sat, 27 Oct 2018 04:22:26 +0000 (21:22 -0700)
src/hb-ot-name-language.cc

index 8b79d4d..0e37e0a 100644 (file)
 #include "hb-ot-name-language.hh"
 
 /* Following two tables were generated by joining FreeType, FontConfig,
- * and OpenType specification language lists. */
+ * and OpenType specification language lists, then filled in missing
+ * entries using:
+ * https://docs.microsoft.com/en-us/windows/desktop/intl/language-identifier-constants-and-strings
+ */
 
 struct hb_ot_language_map_t
 {
@@ -50,7 +53,7 @@ hb_ms_language_map[] =
   {0x0009,     "en"},  /* ??? */
   {0x0401,     "ar"},  /* Arabic (Saudi Arabia) */
   {0x0402,     "bg"},  /* Bulgarian (Bulgaria) */
-//{0x0403,     ""},    /* Catalan (Catalan) */
+  {0x0403,     "ca"},  /* Catalan (Catalan) */
   {0x0404,     "zh-tw"},       /* Chinese (Taiwan) */
   {0x0405,     "cs"},  /* Czech (Czech Republic) */
   {0x0406,     "da"},  /* Danish (Denmark) */
@@ -65,12 +68,12 @@ hb_ms_language_map[] =
   {0x040F,     "is"},  /* Icelandic (Iceland) */
   {0x0410,     "it"},  /* Italian (Italy) */
   {0x0411,     "ja"},  /* Japanese (Japan) */
-//{0x0412,     ""},    /* Korean (Korea) */
+  {0x0412,     "ko"},  /* Korean (Korea) */
   {0x0413,     "nl"},  /* Dutch (Netherlands) */
   {0x0414,     "no"},  /* Norwegian (Bokmal) (Norway) */
   {0x0415,     "pl"},  /* Polish (Poland) */
   {0x0416,     "pt"},  /* Portuguese (Brazil) */
-//{0x0417,     ""},    /* Romansh (Switzerland) */
+  {0x0417,     "rm"},  /* Romansh (Switzerland) */
   {0x0418,     "ro"},  /* Romanian (Romania) */
   {0x0419,     "ru"},  /* Russian (Russia) */
   {0x041A,     "hr"},  /* Croatian (Croatia) */
@@ -83,24 +86,24 @@ hb_ms_language_map[] =
   {0x0421,     "id"},  /* Indonesian (Indonesia) */
   {0x0422,     "uk"},  /* Ukrainian (Ukraine) */
   {0x0423,     "be"},  /* Belarusian (Belarus) */
-//{0x0424,     ""},    /* Slovenian (Slovenia) */
+  {0x0424,     "sl"},  /* Slovenian (Slovenia) */
   {0x0425,     "et"},  /* Estonian (Estonia) */
   {0x0426,     "lv"},  /* Latvian (Latvia) */
   {0x0427,     "lt"},  /* Lithuanian (Lithuania) */
   {0x0428,     "tg"},  /* Tajik (Cyrillic) (Tajikistan) */
-  {0x0429,     "fa"},  /* ??? */
+  {0x0429,     "fa"},  /* Persian (Iran) */
   {0x042A,     "vi"},  /* Vietnamese (Vietnam) */
   {0x042B,     "hy"},  /* Armenian (Armenia) */
   {0x042C,     "az"},  /* Azeri (Latin) (Azerbaijan) */
-//{0x042D,     ""},    /* Basque (Basque) */
-//{0x042E,     ""},    /* Upper Sorbian (Germany) */
+  {0x042D,     "eu"},  /* Basque (Basque) */
+  {0x042E,     "hsb"}, /* Upper Sorbian (Germany) */
   {0x042F,     "mk"},  /* Macedonian (FYROM) (Former Yugoslav Republic of Macedonia) */
   {0x0430,     "st"},  /* ??? */
   {0x0431,     "ts"},  /* ??? */
-//{0x0432,     ""},    /* Setswana (South Africa) */
+  {0x0432,     "tn"},  /* Setswana (South Africa) */
   {0x0433,     "ven"}, /* ??? */
-//{0x0434,     ""},    /* isiXhosa (South Africa) */
-//{0x0435,     ""},    /* isiZulu (South Africa) */
+  {0x0434,     "xh"},  /* isiXhosa (South Africa) */
+  {0x0435,     "zu"},  /* isiZulu (South Africa) */
   {0x0436,     "af"},  /* Afrikaans (South Africa) */
   {0x0437,     "ka"},  /* Georgian (Georgia) */
   {0x0438,     "fo"},  /* Faroese (Faroe Islands) */
@@ -110,16 +113,16 @@ hb_ms_language_map[] =
   {0x043C,     "ga"},  /* ??? */
   {0x043D,     "yi"},  /* ??? */
   {0x043E,     "ms"},  /* Malay (Malaysia) */
-//{0x043F,     ""},    /* Kazakh (Kazakhstan) */
-//{0x0440,     ""},    /* Kyrgyz (Kyrgyzstan) */
-//{0x0441,     ""},    /* Kiswahili (Kenya) */
+  {0x043F,     "kk"},  /* Kazakh (Kazakhstan) */
+  {0x0440,     "ky"},  /* Kyrgyz (Kyrgyzstan) */
+  {0x0441,     "sw"},  /* Kiswahili (Kenya) */
   {0x0442,     "tk"},  /* Turkmen (Turkmenistan) */
   {0x0443,     "uz"},  /* Uzbek (Latin) (Uzbekistan) */
-//{0x0444,     ""},    /* Tatar (Russia) */
+  {0x0444,     "tt"},  /* Tatar (Russia) */
   {0x0445,     "bn"},  /* Bengali (India) */
   {0x0446,     "pa"},  /* Punjabi (India) */
   {0x0447,     "gu"},  /* Gujarati (India) */
-//{0x0448,     ""},    /* Odia (formerly Oriya) (India) */
+  {0x0448,     "or"},  /* Odia (formerly Oriya) (India) */
   {0x0449,     "ta"},  /* Tamil (India) */
   {0x044A,     "te"},  /* Telugu (India) */
   {0x044B,     "kn"},  /* Kannada (India) */
@@ -128,17 +131,17 @@ hb_ms_language_map[] =
   {0x044E,     "mr"},  /* Marathi (India) */
   {0x044F,     "sa"},  /* Sanskrit (India) */
   {0x0450,     "mn"},  /* Mongolian (Cyrillic) (Mongolia) */
-//{0x0451,     ""},    /* Tibetan (PRC) */
-//{0x0452,     ""},    /* Welsh (United Kingdom) */
+  {0x0451,     "bo"},  /* Tibetan (PRC) */
+  {0x0452,     "cy"},  /* Welsh (United Kingdom) */
   {0x0453,     "km"},  /* Khmer (Cambodia) */
   {0x0454,     "lo"},  /* Lao (Lao P.D.R.) */
   {0x0455,     "my"},  /* ??? */
-//{0x0456,     ""},    /* Galician (Galician) */
+  {0x0456,     "gl"},  /* Galician (Galician) */
   {0x0457,     "kok"}, /* Konkani (India) */
   {0x0458,     "mni"}, /* ??? */
   {0x0459,     "sd"},  /* ??? */
   {0x045A,     "syr"}, /* Syriac (Syria) */
-//{0x045B,     ""},    /* Sinhala (Sri Lanka) */
+  {0x045B,     "si"},  /* Sinhala (Sri Lanka) */
   {0x045C,     "chr"}, /* ??? */
   {0x045D,     "iu"},  /* Inuktitut (Canada) */
   {0x045E,     "am"},  /* Amharic (Ethiopia) */
@@ -150,11 +153,11 @@ hb_ms_language_map[] =
   {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) */
+  {0x046B,     "quz"}, /* Quechua (Bolivia) */
+  {0x046C,     "nso"}, /* Sesotho sa Leboa (South Africa) */
+  {0x046D,     "ba"},  /* Bashkir (Russia) */
+  {0x046E,     "lb"},  /* Luxembourgish (Luxembourg) */
+  {0x046F,     "kl"},  /* Greenlandic (Greenland) */
   {0x0470,     "ibo"}, /* Igbo (Nigeria) */
   {0x0471,     "kau"}, /* ??? */
   {0x0472,     "om"},  /* ??? */
@@ -163,21 +166,21 @@ hb_ms_language_map[] =
   {0x0475,     "haw"}, /* ??? */
   {0x0476,     "la"},  /* ??? */
   {0x0477,     "so"},  /* ??? */
-//{0x0478,     ""},    /* Yi (PRC) */
+  {0x0478,     "ii"},  /* Yi (PRC) */
   {0x0479,     "pap"}, /* ??? */
-//{0x047A,     ""},    /* Mapudungun (Chile) */
-//{0x047C,     ""},    /* Mohawk (Mohawk) */
-//{0x047E,     ""},    /* Breton (France) */
-//{0x0480,     ""},    /* Uighur (PRC) */
+  {0x047A,     "arn"}, /* Mapudungun (Chile) */
+  {0x047C,     "moh"}, /* Mohawk (Mohawk) */
+  {0x047E,     "br"},  /* Breton (France) */
+  {0x0480,     "ug"},  /* 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) */
+  {0x0482,     "oc"},  /* Occitan (France) */
+  {0x0483,     "co"},  /* Corsican (France) */
+  {0x0484,     "gsw"}, /* Alsatian (France) */
+  {0x0485,     "sah"}, /* Yakut (Russia) */
+  {0x0486,     "qut"}, /* K'iche (Guatemala) */
+  {0x0487,     "rw"},  /* Kinyarwanda (Rwanda) */
+  {0x0488,     "wo"},  /* Wolof (Senegal) */
+  {0x048C,     "fa"},  /* Dari (Afghanistan) */
   {0x0801,     "ar"},  /* Arabic (Iraq) */
   {0x0804,     "zh-cn"},       /* Chinese (People’s Republic of China) */
   {0x0807,     "de"},  /* German (Switzerland) */
@@ -196,17 +199,17 @@ hb_ms_language_map[] =
   {0x0820,     "ur"},  /* ??? */
   {0x0827,     "lt"},  /* ??? */
   {0x082C,     "az"},  /* Azeri (Cyrillic) (Azerbaijan) */
-//{0x082E,     ""},    /* Lower Sorbian (Germany) */
+  {0x082E,     "dsb"}, /* 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) */
+  {0x0850,     "mn"},  /* Mongolian (Traditional) (People’s Republic of China) */
   {0x0851,     "dz"},  /* ??? */
-//{0x085D,     ""},    /* Inuktitut (Latin) (Canada) */
-//{0x085F,     ""},    /* Tamazight (Latin) (Algeria) */
+  {0x085D,     "iu"},  /* Inuktitut (Latin) (Canada) */
+  {0x085F,     "tzm"}, /* Tamazight (Latin) (Algeria) */
   {0x0861,     "ne"},  /* ??? */
 //{0x086B,     ""},    /* Quechua (Ecuador) */
   {0x0873,     "ti"},  /* ??? */
@@ -214,10 +217,10 @@ hb_ms_language_map[] =
   {0x0C04,     "zh-hk"},       /* Chinese (Hong Kong S.A.R.) */
   {0x0C07,     "de"},  /* German (Austria) */
   {0x0C09,     "en"},  /* English (Australia) */
-//{0x0C0A,     ""},    /* Spanish (Modern Sort) (Spain) */
+  {0x0C0A,     "es"},  /* Spanish (Modern Sort) (Spain) */
   {0x0C0C,     "fr"},  /* French (Canada) */
   {0x0C1A,     "sr"},  /* Serbian (Cyrillic) (Serbia) */
-//{0x0C3B,     ""},    /* Sami (Northern) (Finland) */
+  {0x0C3B,     "se"},  /* Sami (Northern) (Finland) */
 //{0x0C6B,     ""},    /* Quechua (Peru) */
   {0x1001,     "ar"},  /* Arabic (Libya) */
   {0x1004,     "zh-sg"},       /* Chinese (Singapore) */
@@ -225,15 +228,14 @@ hb_ms_language_map[] =
   {0x1009,     "en"},  /* English (Canada) */
   {0x100A,     "es"},  /* Spanish (Guatemala) */
   {0x100C,     "fr"},  /* French (Switzerland) */
-//{0x101A,     ""},    /* Croatian (Latin) (Bosnia and Herzegovina) */
-//{0x103B,     ""},    /* Sami (Lule) (Norway) */
+  {0x101A,     "hr"},  /* Croatian (Latin) (Bosnia and Herzegovina) */
+  {0x103B,     "smj"}, /* Sami (Lule) (Norway) */
   {0x1401,     "ar"},  /* Arabic (Algeria) */
 //{0x1404,     ""},    /* Chinese (Macao S.A.R.) */
-//{0x1407,     ""},    /* German (Liechtenstein) */
+  {0x1407,     "de"},  /* German (Liechtenstein) */
   {0x1409,     "en"},  /* English (New Zealand) */
   {0x140A,     "es"},  /* Spanish (Costa Rica) */
-  {0x140C,     "fr"},  /* ??? */
-//{0x140c,     ""},    /* French (Luxembourg) */
+  {0x140C,     "fr"},  /* French (Luxembourg) */
   {0x141A,     "bs"},  /* Bosnian (Latin) (Bosnia and Herzegovina) */
 //{0x143B,     ""},    /* Sami (Lule) (Sweden) */
   {0x1801,     "ar"},  /* Arabic (Morocco) */
@@ -241,7 +243,7 @@ hb_ms_language_map[] =
   {0x180A,     "es"},  /* Spanish (Panama) */
   {0x180C,     "fr"},  /* French (Principality of Monaco) */
 //{0x181A,     ""},    /* Serbian (Latin) (Bosnia and Herzegovina) */
-//{0x183B,     ""},    /* Sami (Southern) (Norway) */
+  {0x183B,     "sma"}, /* Sami (Southern) (Norway) */
   {0x1C01,     "ar"},  /* Arabic (Tunisia) */
   {0x1C09,     "en"},  /* English (South Africa) */
   {0x1C0A,     "es"},  /* Spanish (Dominican Republic) */
@@ -252,13 +254,13 @@ hb_ms_language_map[] =
   {0x2009,     "en"},  /* English (Jamaica) */
   {0x200A,     "es"},  /* Spanish (Venezuela) */
   {0x200C,     "fr"},  /* ??? */
-//{0x201A,     ""},    /* Bosnian (Cyrillic) (Bosnia and Herzegovina) */
-//{0x203B,     ""},    /* Sami (Skolt) (Finland) */
+  {0x201A,     "bs"},  /* Bosnian (Cyrillic) (Bosnia and Herzegovina) */
+  {0x203B,     "sms"}, /* Sami (Skolt) (Finland) */
   {0x2401,     "ar"},  /* Arabic (Yemen) */
   {0x2409,     "en"},  /* English (Caribbean) */
   {0x240A,     "es"},  /* Spanish (Colombia) */
   {0x240C,     "fr"},  /* ??? */
-//{0x243B,     ""},    /* Sami (Inari) (Finland) */
+  {0x243B,     "smn"}, /* Sami (Inari) (Finland) */
   {0x2801,     "ar"},  /* Arabic (Syria) */
   {0x2809,     "en"},  /* English (Belize) */
   {0x280A,     "es"},  /* Spanish (Peru) */
@@ -349,15 +351,15 @@ hb_mac_language_map[] =
   { 47,        "uz"},  /* Uzbek */
   { 48,        "kk"},  /* Kazakh */
   { 49,        "az"},  /* Azerbaijani (Cyrillic script) */
-  { 50,        "ar"},  /* Azerbaijani (Arabic script) */
+  { 50,        "az"},  /* 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) */
+  { 57,        "mn"},  /* Mongolian (Mongolian script) */
+  { 58,        "mn"},  /* Mongolian (Cyrillic script) */
   { 59,        "ps"},  /* Pashto */
   { 60,        "ku"},  /* Kurdish */
   { 61,        "ks"},  /* Kashmiri */