| 1 | /* | 
| 2 |  * Copyright © 2018  Google, Inc. | 
| 3 |  * | 
| 4 |  *  This is part of HarfBuzz, a text shaping library. | 
| 5 |  * | 
| 6 |  * Permission is hereby granted, without written agreement and without | 
| 7 |  * license or royalty fees, to use, copy, modify, and distribute this | 
| 8 |  * software and its documentation for any purpose, provided that the | 
| 9 |  * above copyright notice and the following two paragraphs appear in | 
| 10 |  * all copies of this software. | 
| 11 |  * | 
| 12 |  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR | 
| 13 |  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES | 
| 14 |  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN | 
| 15 |  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH | 
| 16 |  * DAMAGE. | 
| 17 |  * | 
| 18 |  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, | 
| 19 |  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND | 
| 20 |  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS | 
| 21 |  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO | 
| 22 |  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. | 
| 23 |  * | 
| 24 |  * Google Author(s): Behdad Esfahbod | 
| 25 |  */ | 
| 26 |  | 
| 27 | #ifndef HB_OT_NAME_LANGUAGE_STATIC_HH | 
| 28 | #define HB_OT_NAME_LANGUAGE_STATIC_HH | 
| 29 |  | 
| 30 | #include "hb-ot-name-language.hh" | 
| 31 |  | 
| 32 | /* Following two tables were generated by joining FreeType, FontConfig, | 
| 33 |  * and OpenType specification language lists, then filled in missing | 
| 34 |  * entries using: | 
| 35 |  * https://docs.microsoft.com/en-us/windows/desktop/intl/language-identifier-constants-and-strings | 
| 36 |  */ | 
| 37 |  | 
| 38 | struct hb_ot_language_map_t | 
| 39 | { | 
| 40 |   int cmp (unsigned int key) const | 
| 41 |   { return key < code ? -1 : key > code ? +1 : 0; } | 
| 42 |  | 
| 43 |   uint16_t	code; | 
| 44 |   char		lang[6]; | 
| 45 | }; | 
| 46 |  | 
| 47 | static const hb_ot_language_map_t | 
| 48 | hb_ms_language_map[] = | 
| 49 | { | 
| 50 |   {0x0001,	"ar" },	/* ??? */ | 
| 51 |   {0x0004,	"zh" },	/* ??? */ | 
| 52 |   {0x0009,	"en" },	/* ??? */ | 
| 53 |   {0x0401,	"ar" },	/* Arabic (Saudi Arabia) */ | 
| 54 |   {0x0402,	"bg" },	/* Bulgarian (Bulgaria) */ | 
| 55 |   {0x0403,	"ca" },	/* Catalan (Catalan) */ | 
| 56 |   {0x0404,	"zh-tw" },	/* Chinese (Taiwan) */ | 
| 57 |   {0x0405,	"cs" },	/* Czech (Czech Republic) */ | 
| 58 |   {0x0406,	"da" },	/* Danish (Denmark) */ | 
| 59 |   {0x0407,	"de" },	/* German (Germany) */ | 
| 60 |   {0x0408,	"el" },	/* Greek (Greece) */ | 
| 61 |   {0x0409,	"en" },	/* English (United States) */ | 
| 62 |   {0x040A,	"es" },	/* Spanish (Traditional Sort) (Spain) */ | 
| 63 |   {0x040B,	"fi" },	/* Finnish (Finland) */ | 
| 64 |   {0x040C,	"fr" },	/* French (France) */ | 
| 65 |   {0x040D,	"he" },	/* Hebrew (Israel) */ | 
| 66 |   {0x040E,	"hu" },	/* Hungarian (Hungary) */ | 
| 67 |   {0x040F,	"is" },	/* Icelandic (Iceland) */ | 
| 68 |   {0x0410,	"it" },	/* Italian (Italy) */ | 
| 69 |   {0x0411,	"ja" },	/* Japanese (Japan) */ | 
| 70 |   {0x0412,	"ko" },	/* Korean (Korea) */ | 
| 71 |   {0x0413,	"nl" },	/* Dutch (Netherlands) */ | 
| 72 |   {0x0414,	"no" },	/* Norwegian (Bokmal) (Norway) */ | 
| 73 |   {0x0415,	"pl" },	/* Polish (Poland) */ | 
| 74 |   {0x0416,	"pt" },	/* Portuguese (Brazil) */ | 
| 75 |   {0x0417,	"rm" },	/* Romansh (Switzerland) */ | 
| 76 |   {0x0418,	"ro" },	/* Romanian (Romania) */ | 
| 77 |   {0x0419,	"ru" },	/* Russian (Russia) */ | 
| 78 |   {0x041A,	"hr" },	/* Croatian (Croatia) */ | 
| 79 |   {0x041B,	"sk" },	/* Slovak (Slovakia) */ | 
| 80 |   {0x041C,	"sq" },	/* Albanian (Albania) */ | 
| 81 |   {0x041D,	"sv" },	/* Swedish (Sweden) */ | 
| 82 |   {0x041E,	"th" },	/* Thai (Thailand) */ | 
| 83 |   {0x041F,	"tr" },	/* Turkish (Turkey) */ | 
| 84 |   {0x0420,	"ur" },	/* Urdu (Islamic Republic of Pakistan) */ | 
| 85 |   {0x0421,	"id" },	/* Indonesian (Indonesia) */ | 
| 86 |   {0x0422,	"uk" },	/* Ukrainian (Ukraine) */ | 
| 87 |   {0x0423,	"be" },	/* Belarusian (Belarus) */ | 
| 88 |   {0x0424,	"sl" },	/* Slovenian (Slovenia) */ | 
| 89 |   {0x0425,	"et" },	/* Estonian (Estonia) */ | 
| 90 |   {0x0426,	"lv" },	/* Latvian (Latvia) */ | 
| 91 |   {0x0427,	"lt" },	/* Lithuanian (Lithuania) */ | 
| 92 |   {0x0428,	"tg" },	/* Tajik (Cyrillic) (Tajikistan) */ | 
| 93 |   {0x0429,	"fa" },	/* Persian (Iran) */ | 
| 94 |   {0x042A,	"vi" },	/* Vietnamese (Vietnam) */ | 
| 95 |   {0x042B,	"hy" },	/* Armenian (Armenia) */ | 
| 96 |   {0x042C,	"az" },	/* Azeri (Latin) (Azerbaijan) */ | 
| 97 |   {0x042D,	"eu" },	/* Basque (Basque) */ | 
| 98 |   {0x042E,	"hsb" },	/* Upper Sorbian (Germany) */ | 
| 99 |   {0x042F,	"mk" },	/* Macedonian (FYROM) (Former Yugoslav Republic of Macedonia) */ | 
| 100 |   {0x0430,	"st" },	/* ??? */ | 
| 101 |   {0x0431,	"ts" },	/* ??? */ | 
| 102 |   {0x0432,	"tn" },	/* Setswana (South Africa) */ | 
| 103 |   {0x0433,	"ven" },	/* ??? */ | 
| 104 |   {0x0434,	"xh" },	/* isiXhosa (South Africa) */ | 
| 105 |   {0x0435,	"zu" },	/* isiZulu (South Africa) */ | 
| 106 |   {0x0436,	"af" },	/* Afrikaans (South Africa) */ | 
| 107 |   {0x0437,	"ka" },	/* Georgian (Georgia) */ | 
| 108 |   {0x0438,	"fo" },	/* Faroese (Faroe Islands) */ | 
| 109 |   {0x0439,	"hi" },	/* Hindi (India) */ | 
| 110 |   {0x043A,	"mt" },	/* Maltese (Malta) */ | 
| 111 |   {0x043B,	"se" },	/* Sami (Northern) (Norway) */ | 
| 112 |   {0x043C,	"ga" },	/* ??? */ | 
| 113 |   {0x043D,	"yi" },	/* ??? */ | 
| 114 |   {0x043E,	"ms" },	/* Malay (Malaysia) */ | 
| 115 |   {0x043F,	"kk" },	/* Kazakh (Kazakhstan) */ | 
| 116 |   {0x0440,	"ky" },	/* Kyrgyz (Kyrgyzstan) */ | 
| 117 |   {0x0441,	"sw" },	/* Kiswahili (Kenya) */ | 
| 118 |   {0x0442,	"tk" },	/* Turkmen (Turkmenistan) */ | 
| 119 |   {0x0443,	"uz" },	/* Uzbek (Latin) (Uzbekistan) */ | 
| 120 |   {0x0444,	"tt" },	/* Tatar (Russia) */ | 
| 121 |   {0x0445,	"bn" },	/* Bengali (India) */ | 
| 122 |   {0x0446,	"pa" },	/* Punjabi (India) */ | 
| 123 |   {0x0447,	"gu" },	/* Gujarati (India) */ | 
| 124 |   {0x0448,	"or" },	/* Odia (formerly Oriya) (India) */ | 
| 125 |   {0x0449,	"ta" },	/* Tamil (India) */ | 
| 126 |   {0x044A,	"te" },	/* Telugu (India) */ | 
| 127 |   {0x044B,	"kn" },	/* Kannada (India) */ | 
| 128 |   {0x044C,	"ml" },	/* Malayalam (India) */ | 
| 129 |   {0x044D,	"as" },	/* Assamese (India) */ | 
| 130 |   {0x044E,	"mr" },	/* Marathi (India) */ | 
| 131 |   {0x044F,	"sa" },	/* Sanskrit (India) */ | 
| 132 |   {0x0450,	"mn" },	/* Mongolian (Cyrillic) (Mongolia) */ | 
| 133 |   {0x0451,	"bo" },	/* Tibetan (PRC) */ | 
| 134 |   {0x0452,	"cy" },	/* Welsh (United Kingdom) */ | 
| 135 |   {0x0453,	"km" },	/* Khmer (Cambodia) */ | 
| 136 |   {0x0454,	"lo" },	/* Lao (Lao P.D.R.) */ | 
| 137 |   {0x0455,	"my" },	/* ??? */ | 
| 138 |   {0x0456,	"gl" },	/* Galician (Galician) */ | 
| 139 |   {0x0457,	"kok" },	/* Konkani (India) */ | 
| 140 |   {0x0458,	"mni" },	/* ??? */ | 
| 141 |   {0x0459,	"sd" },	/* ??? */ | 
| 142 |   {0x045A,	"syr" },	/* Syriac (Syria) */ | 
| 143 |   {0x045B,	"si" },	/* Sinhala (Sri Lanka) */ | 
| 144 |   {0x045C,	"chr" },	/* ??? */ | 
| 145 |   {0x045D,	"iu" },	/* Inuktitut (Canada) */ | 
| 146 |   {0x045E,	"am" },	/* Amharic (Ethiopia) */ | 
| 147 |   {0x0460,	"ks" },	/* ??? */ | 
| 148 |   {0x0461,	"ne" },	/* Nepali (Nepal) */ | 
| 149 |   {0x0462,	"fy" },	/* Frisian (Netherlands) */ | 
| 150 |   {0x0463,	"ps" },	/* Pashto (Afghanistan) */ | 
| 151 |   {0x0464,	"phi" },	/* Filipino (Philippines) */ | 
| 152 |   {0x0465,	"div" },	/* Divehi (Maldives) */ | 
| 153 |   {0x0468,	"ha" },	/* Hausa (Latin) (Nigeria) */ | 
| 154 |   {0x046A,	"yo" },	/* Yoruba (Nigeria) */ | 
| 155 |   {0x046B,	"quz" },	/* Quechua (Bolivia) */ | 
| 156 |   {0x046C,	"nso" },	/* Sesotho sa Leboa (South Africa) */ | 
| 157 |   {0x046D,	"ba" },	/* Bashkir (Russia) */ | 
| 158 |   {0x046E,	"lb" },	/* Luxembourgish (Luxembourg) */ | 
| 159 |   {0x046F,	"kl" },	/* Greenlandic (Greenland) */ | 
| 160 |   {0x0470,	"ibo" },	/* Igbo (Nigeria) */ | 
| 161 |   {0x0471,	"kau" },	/* ??? */ | 
| 162 |   {0x0472,	"om" },	/* ??? */ | 
| 163 |   {0x0473,	"ti" },	/* ??? */ | 
| 164 |   {0x0474,	"gn" },	/* ??? */ | 
| 165 |   {0x0475,	"haw" },	/* ??? */ | 
| 166 |   {0x0476,	"la" },	/* ??? */ | 
| 167 |   {0x0477,	"so" },	/* ??? */ | 
| 168 |   {0x0478,	"ii" },	/* Yi (PRC) */ | 
| 169 |   {0x0479,	"pap" },	/* ??? */ | 
| 170 |   {0x047A,	"arn" },	/* Mapudungun (Chile) */ | 
| 171 |   {0x047C,	"moh" },	/* Mohawk (Mohawk) */ | 
| 172 |   {0x047E,	"br" },	/* Breton (France) */ | 
| 173 |   {0x0480,	"ug" },	/* Uighur (PRC) */ | 
| 174 |   {0x0481,	"mi" },	/* Maori (New Zealand) */ | 
| 175 |   {0x0482,	"oc" },	/* Occitan (France) */ | 
| 176 |   {0x0483,	"co" },	/* Corsican (France) */ | 
| 177 |   {0x0484,	"gsw" },	/* Alsatian (France) */ | 
| 178 |   {0x0485,	"sah" },	/* Yakut (Russia) */ | 
| 179 |   {0x0486,	"qut" },	/* K'iche (Guatemala) */ | 
| 180 |   {0x0487,	"rw" },	/* Kinyarwanda (Rwanda) */ | 
| 181 |   {0x0488,	"wo" },	/* Wolof (Senegal) */ | 
| 182 |   {0x048C,	"fa" },	/* Dari (Afghanistan) */ | 
| 183 |   {0x0801,	"ar" },	/* Arabic (Iraq) */ | 
| 184 |   {0x0804,	"zh-cn" },	/* Chinese (People’s Republic of China) */ | 
| 185 |   {0x0807,	"de" },	/* German (Switzerland) */ | 
| 186 |   {0x0809,	"en" },	/* English (United Kingdom) */ | 
| 187 |   {0x080A,	"es" },	/* Spanish (Mexico) */ | 
| 188 |   {0x080C,	"fr" },	/* French (Belgium) */ | 
| 189 |   {0x0810,	"it" },	/* Italian (Switzerland) */ | 
| 190 |   {0x0812,	"ko" },	/* ??? */ | 
| 191 |   {0x0813,	"nl" },	/* Dutch (Belgium) */ | 
| 192 |   {0x0814,	"nn" },	/* Norwegian (Nynorsk) (Norway) */ | 
| 193 |   {0x0816,	"pt" },	/* Portuguese (Portugal) */ | 
| 194 |   {0x0818,	"mo" },	/* ??? */ | 
| 195 |   {0x0819,	"ru" },	/* ??? */ | 
| 196 |   {0x081A,	"sr" },	/* Serbian (Latin) (Serbia) */ | 
| 197 |   {0x081D,	"sv" },	/* Sweden (Finland) */ | 
| 198 |   {0x0820,	"ur" },	/* ??? */ | 
| 199 |   {0x0827,	"lt" },	/* ??? */ | 
| 200 |   {0x082C,	"az" },	/* Azeri (Cyrillic) (Azerbaijan) */ | 
| 201 |   {0x082E,	"dsb" },	/* Lower Sorbian (Germany) */ | 
| 202 | //{0x083B,	""},	/* Sami (Northern) (Sweden) */ | 
| 203 |   {0x083C,	"gd" },	/* Irish (Ireland) */ | 
| 204 |   {0x083E,	"ms" },	/* Malay (Brunei Darussalam) */ | 
| 205 |   {0x0843,	"uz" },	/* Uzbek (Cyrillic) (Uzbekistan) */ | 
| 206 |   {0x0845,	"bn" },	/* Bengali (Bangladesh) */ | 
| 207 |   {0x0846,	"ar" },	/* ??? */ | 
| 208 |   {0x0850,	"mn" },	/* Mongolian (Traditional) (People’s Republic of China) */ | 
| 209 |   {0x0851,	"dz" },	/* ??? */ | 
| 210 |   {0x085D,	"iu" },	/* Inuktitut (Latin) (Canada) */ | 
| 211 |   {0x085F,	"tzm" },	/* Tamazight (Latin) (Algeria) */ | 
| 212 |   {0x0861,	"ne" },	/* ??? */ | 
| 213 | //{0x086B,	""},	/* Quechua (Ecuador) */ | 
| 214 |   {0x0873,	"ti" },	/* ??? */ | 
| 215 |   {0x0C01,	"ar" },	/* Arabic (Egypt) */ | 
| 216 |   {0x0C04,	"zh-hk" },	/* Chinese (Hong Kong S.A.R.) */ | 
| 217 |   {0x0C07,	"de" },	/* German (Austria) */ | 
| 218 |   {0x0C09,	"en" },	/* English (Australia) */ | 
| 219 |   {0x0C0A,	"es" },	/* Spanish (Modern Sort) (Spain) */ | 
| 220 |   {0x0C0C,	"fr" },	/* French (Canada) */ | 
| 221 |   {0x0C1A,	"sr" },	/* Serbian (Cyrillic) (Serbia) */ | 
| 222 |   {0x0C3B,	"se" },	/* Sami (Northern) (Finland) */ | 
| 223 | //{0x0C6B,	""},	/* Quechua (Peru) */ | 
| 224 |   {0x1001,	"ar" },	/* Arabic (Libya) */ | 
| 225 |   {0x1004,	"zh-sg" },	/* Chinese (Singapore) */ | 
| 226 |   {0x1007,	"de" },	/* German (Luxembourg) */ | 
| 227 |   {0x1009,	"en" },	/* English (Canada) */ | 
| 228 |   {0x100A,	"es" },	/* Spanish (Guatemala) */ | 
| 229 |   {0x100C,	"fr" },	/* French (Switzerland) */ | 
| 230 |   {0x101A,	"hr" },	/* Croatian (Latin) (Bosnia and Herzegovina) */ | 
| 231 |   {0x103B,	"smj" },	/* Sami (Lule) (Norway) */ | 
| 232 |   {0x1401,	"ar" },	/* Arabic (Algeria) */ | 
| 233 | //{0x1404,	""},	/* Chinese (Macao S.A.R.) */ | 
| 234 |   {0x1407,	"de" },	/* German (Liechtenstein) */ | 
| 235 |   {0x1409,	"en" },	/* English (New Zealand) */ | 
| 236 |   {0x140A,	"es" },	/* Spanish (Costa Rica) */ | 
| 237 |   {0x140C,	"fr" },	/* French (Luxembourg) */ | 
| 238 |   {0x141A,	"bs" },	/* Bosnian (Latin) (Bosnia and Herzegovina) */ | 
| 239 | //{0x143B,	""},	/* Sami (Lule) (Sweden) */ | 
| 240 |   {0x1801,	"ar" },	/* Arabic (Morocco) */ | 
| 241 |   {0x1809,	"en" },	/* English (Ireland) */ | 
| 242 |   {0x180A,	"es" },	/* Spanish (Panama) */ | 
| 243 |   {0x180C,	"fr" },	/* French (Principality of Monaco) */ | 
| 244 | //{0x181A,	""},	/* Serbian (Latin) (Bosnia and Herzegovina) */ | 
| 245 |   {0x183B,	"sma" },	/* Sami (Southern) (Norway) */ | 
| 246 |   {0x1C01,	"ar" },	/* Arabic (Tunisia) */ | 
| 247 |   {0x1C09,	"en" },	/* English (South Africa) */ | 
| 248 |   {0x1C0A,	"es" },	/* Spanish (Dominican Republic) */ | 
| 249 |   {0x1C0C,	"fr" },	/* ??? */ | 
| 250 | //{0x1C1A,	""},	/* Serbian (Cyrillic) (Bosnia and Herzegovina) */ | 
| 251 | //{0x1C3B,	""},	/* Sami (Southern) (Sweden) */ | 
| 252 |   {0x2001,	"ar" },	/* Arabic (Oman) */ | 
| 253 |   {0x2009,	"en" },	/* English (Jamaica) */ | 
| 254 |   {0x200A,	"es" },	/* Spanish (Venezuela) */ | 
| 255 |   {0x200C,	"fr" },	/* ??? */ | 
| 256 |   {0x201A,	"bs" },	/* Bosnian (Cyrillic) (Bosnia and Herzegovina) */ | 
| 257 |   {0x203B,	"sms" },	/* Sami (Skolt) (Finland) */ | 
| 258 |   {0x2401,	"ar" },	/* Arabic (Yemen) */ | 
| 259 |   {0x2409,	"en" },	/* English (Caribbean) */ | 
| 260 |   {0x240A,	"es" },	/* Spanish (Colombia) */ | 
| 261 |   {0x240C,	"fr" },	/* ??? */ | 
| 262 |   {0x243B,	"smn" },	/* Sami (Inari) (Finland) */ | 
| 263 |   {0x2801,	"ar" },	/* Arabic (Syria) */ | 
| 264 |   {0x2809,	"en" },	/* English (Belize) */ | 
| 265 |   {0x280A,	"es" },	/* Spanish (Peru) */ | 
| 266 |   {0x280C,	"fr" },	/* ??? */ | 
| 267 |   {0x2C01,	"ar" },	/* Arabic (Jordan) */ | 
| 268 |   {0x2C09,	"en" },	/* English (Trinidad and Tobago) */ | 
| 269 |   {0x2C0A,	"es" },	/* Spanish (Argentina) */ | 
| 270 |   {0x2C0C,	"fr" },	/* ??? */ | 
| 271 |   {0x3001,	"ar" },	/* Arabic (Lebanon) */ | 
| 272 |   {0x3009,	"en" },	/* English (Zimbabwe) */ | 
| 273 |   {0x300A,	"es" },	/* Spanish (Ecuador) */ | 
| 274 |   {0x300C,	"fr" },	/* ??? */ | 
| 275 |   {0x3401,	"ar" },	/* Arabic (Kuwait) */ | 
| 276 |   {0x3409,	"en" },	/* English (Republic of the Philippines) */ | 
| 277 |   {0x340A,	"es" },	/* Spanish (Chile) */ | 
| 278 |   {0x340C,	"fr" },	/* ??? */ | 
| 279 |   {0x3801,	"ar" },	/* Arabic (U.A.E.) */ | 
| 280 |   {0x380A,	"es" },	/* Spanish (Uruguay) */ | 
| 281 |   {0x380C,	"fr" },	/* ??? */ | 
| 282 |   {0x3C01,	"ar" },	/* Arabic (Bahrain) */ | 
| 283 |   {0x3C09,	"en" },	/* ??? */ | 
| 284 |   {0x3C0A,	"es" },	/* Spanish (Paraguay) */ | 
| 285 |   {0x3C0C,	"fr" },	/* ??? */ | 
| 286 |   {0x4001,	"ar" },	/* Arabic (Qatar) */ | 
| 287 |   {0x4009,	"en" },	/* English (India) */ | 
| 288 |   {0x400A,	"es" },	/* Spanish (Bolivia) */ | 
| 289 |   {0x4409,	"en" },	/* English (Malaysia) */ | 
| 290 |   {0x440A,	"es" },	/* Spanish (El Salvador) */ | 
| 291 |   {0x4809,	"en" },	/* English (Singapore) */ | 
| 292 |   {0x480A,	"es" },	/* Spanish (Honduras) */ | 
| 293 |   {0x4C0A,	"es" },	/* Spanish (Nicaragua) */ | 
| 294 |   {0x500A,	"es" },	/* Spanish (Puerto Rico) */ | 
| 295 |   {0x540A,	"es" },	/* Spanish (United States) */ | 
| 296 |   {0xE40A,	"es" },	/* ??? */ | 
| 297 |   {0xE40C,	"fr" },	/* ??? */ | 
| 298 | }; | 
| 299 |  | 
| 300 | static const hb_ot_language_map_t | 
| 301 | hb_mac_language_map[] = | 
| 302 | { | 
| 303 |   {  0,	"en" },	/* English */ | 
| 304 |   {  1,	"fr" },	/* French */ | 
| 305 |   {  2,	"de" },	/* German */ | 
| 306 |   {  3,	"it" },	/* Italian */ | 
| 307 |   {  4,	"nl" },	/* Dutch */ | 
| 308 |   {  5,	"sv" },	/* Swedish */ | 
| 309 |   {  6,	"es" },	/* Spanish */ | 
| 310 |   {  7,	"da" },	/* Danish */ | 
| 311 |   {  8,	"pt" },	/* Portuguese */ | 
| 312 |   {  9,	"no" },	/* Norwegian */ | 
| 313 |   { 10,	"he" },	/* Hebrew */ | 
| 314 |   { 11,	"ja" },	/* Japanese */ | 
| 315 |   { 12,	"ar" },	/* Arabic */ | 
| 316 |   { 13,	"fi" },	/* Finnish */ | 
| 317 |   { 14,	"el" },	/* Greek */ | 
| 318 |   { 15,	"is" },	/* Icelandic */ | 
| 319 |   { 16,	"mt" },	/* Maltese */ | 
| 320 |   { 17,	"tr" },	/* Turkish */ | 
| 321 |   { 18,	"hr" },	/* Croatian */ | 
| 322 |   { 19,	"zh-tw" },	/* Chinese (Traditional) */ | 
| 323 |   { 20,	"ur" },	/* Urdu */ | 
| 324 |   { 21,	"hi" },	/* Hindi */ | 
| 325 |   { 22,	"th" },	/* Thai */ | 
| 326 |   { 23,	"ko" },	/* Korean */ | 
| 327 |   { 24,	"lt" },	/* Lithuanian */ | 
| 328 |   { 25,	"pl" },	/* Polish */ | 
| 329 |   { 26,	"hu" },	/* Hungarian */ | 
| 330 |   { 27,	"et" },	/* Estonian */ | 
| 331 |   { 28,	"lv" },	/* Latvian */ | 
| 332 | //{ 29,	""},	/* Sami */ | 
| 333 |   { 30,	"fo" },	/* Faroese */ | 
| 334 |   { 31,	"fa" },	/* Farsi/Persian */ | 
| 335 |   { 32,	"ru" },	/* Russian */ | 
| 336 |   { 33,	"zh-cn" },	/* Chinese (Simplified) */ | 
| 337 |   { 34,	"nl" },	/* Flemish */ | 
| 338 |   { 35,	"ga" },	/* Irish Gaelic */ | 
| 339 |   { 36,	"sq" },	/* Albanian */ | 
| 340 |   { 37,	"ro" },	/* Romanian */ | 
| 341 |   { 38,	"cs" },	/* Czech */ | 
| 342 |   { 39,	"sk" },	/* Slovak */ | 
| 343 |   { 40,	"sl" },	/* Slovenian */ | 
| 344 |   { 41,	"yi" },	/* Yiddish */ | 
| 345 |   { 42,	"sr" },	/* Serbian */ | 
| 346 |   { 43,	"mk" },	/* Macedonian */ | 
| 347 |   { 44,	"bg" },	/* Bulgarian */ | 
| 348 |   { 45,	"uk" },	/* Ukrainian */ | 
| 349 |   { 46,	"be" },	/* Byelorussian */ | 
| 350 |   { 47,	"uz" },	/* Uzbek */ | 
| 351 |   { 48,	"kk" },	/* Kazakh */ | 
| 352 |   { 49,	"az" },	/* Azerbaijani (Cyrillic script) */ | 
| 353 |   { 50,	"az" },	/* Azerbaijani (Arabic script) */ | 
| 354 |   { 51,	"hy" },	/* Armenian */ | 
| 355 |   { 52,	"ka" },	/* Georgian */ | 
| 356 |   { 53,	"mo" },	/* Moldavian */ | 
| 357 |   { 54,	"ky" },	/* Kirghiz */ | 
| 358 |   { 55,	"tg" },	/* Tajiki */ | 
| 359 |   { 56,	"tk" },	/* Turkmen */ | 
| 360 |   { 57,	"mn" },	/* Mongolian (Mongolian script) */ | 
| 361 |   { 58,	"mn" },	/* Mongolian (Cyrillic script) */ | 
| 362 |   { 59,	"ps" },	/* Pashto */ | 
| 363 |   { 60,	"ku" },	/* Kurdish */ | 
| 364 |   { 61,	"ks" },	/* Kashmiri */ | 
| 365 |   { 62,	"sd" },	/* Sindhi */ | 
| 366 |   { 63,	"bo" },	/* Tibetan */ | 
| 367 |   { 64,	"ne" },	/* Nepali */ | 
| 368 |   { 65,	"sa" },	/* Sanskrit */ | 
| 369 |   { 66,	"mr" },	/* Marathi */ | 
| 370 |   { 67,	"bn" },	/* Bengali */ | 
| 371 |   { 68,	"as" },	/* Assamese */ | 
| 372 |   { 69,	"gu" },	/* Gujarati */ | 
| 373 |   { 70,	"pa" },	/* Punjabi */ | 
| 374 |   { 71,	"or" },	/* Oriya */ | 
| 375 |   { 72,	"ml" },	/* Malayalam */ | 
| 376 |   { 73,	"kn" },	/* Kannada */ | 
| 377 |   { 74,	"ta" },	/* Tamil */ | 
| 378 |   { 75,	"te" },	/* Telugu */ | 
| 379 |   { 76,	"si" },	/* Sinhalese */ | 
| 380 |   { 77,	"my" },	/* Burmese */ | 
| 381 |   { 78,	"km" },	/* Khmer */ | 
| 382 |   { 79,	"lo" },	/* Lao */ | 
| 383 |   { 80,	"vi" },	/* Vietnamese */ | 
| 384 |   { 81,	"id" },	/* Indonesian */ | 
| 385 |   { 82,	"tl" },	/* Tagalog */ | 
| 386 |   { 83,	"ms" },	/* Malay (Roman script) */ | 
| 387 |   { 84,	"ms" },	/* Malay (Arabic script) */ | 
| 388 |   { 85,	"am" },	/* Amharic */ | 
| 389 |   { 86,	"ti" },	/* Tigrinya */ | 
| 390 |   { 87,	"om" },	/* Galla */ | 
| 391 |   { 88,	"so" },	/* Somali */ | 
| 392 |   { 89,	"sw" },	/* Swahili */ | 
| 393 |   { 90,	"rw" },	/* Kinyarwanda/Ruanda */ | 
| 394 |   { 91,	"rn" },	/* Rundi */ | 
| 395 |   { 92,	"ny" },	/* Nyanja/Chewa */ | 
| 396 |   { 93,	"mg" },	/* Malagasy */ | 
| 397 |   { 94,	"eo" },	/* Esperanto */ | 
| 398 |   {128,	"cy" },	/* Welsh */ | 
| 399 |   {129,	"eu" },	/* Basque */ | 
| 400 |   {130,	"ca" },	/* Catalan */ | 
| 401 |   {131,	"la" },	/* Latin */ | 
| 402 |   {132,	"qu" },	/* Quechua */ | 
| 403 |   {133,	"gn" },	/* Guarani */ | 
| 404 |   {134,	"ay" },	/* Aymara */ | 
| 405 |   {135,	"tt" },	/* Tatar */ | 
| 406 |   {136,	"ug" },	/* Uighur */ | 
| 407 |   {137,	"dz" },	/* Dzongkha */ | 
| 408 |   {138,	"jw" },	/* Javanese (Roman script) */ | 
| 409 |   {139,	"su" },	/* Sundanese (Roman script) */ | 
| 410 |   {140,	"gl" },	/* Galician */ | 
| 411 |   {141,	"af" },	/* Afrikaans */ | 
| 412 |   {142,	"br" },	/* Breton */ | 
| 413 |   {143,	"iu" },	/* Inuktitut */ | 
| 414 |   {144,	"gd" },	/* Scottish Gaelic */ | 
| 415 |   {145,	"gv" },	/* Manx Gaelic */ | 
| 416 |   {146,	"ga" },	/* Irish Gaelic (with dot above) */ | 
| 417 |   {147,	"to" },	/* Tongan */ | 
| 418 |   {148,	"el" },	/* Greek (polytonic) */ | 
| 419 |   {149,	"ik" },	/* Greenlandic */ | 
| 420 |   {150,	"az" },	/* Azerbaijani (Roman script) */ | 
| 421 | }; | 
| 422 |  | 
| 423 |  | 
| 424 | static hb_language_t | 
| 425 | _hb_ot_name_language_for (unsigned int code, | 
| 426 | 			  const hb_ot_language_map_t *array, | 
| 427 | 			  unsigned int len) | 
| 428 | { | 
| 429 | #ifdef HB_NO_OT_NAME_LANGUAGE | 
| 430 |   return HB_LANGUAGE_INVALID; | 
| 431 | #endif | 
| 432 |   auto *entry = hb_bsearch (code, array, len); | 
| 433 |  | 
| 434 |   if (entry) | 
| 435 |     return hb_language_from_string (entry->lang, -1); | 
| 436 |  | 
| 437 |   return HB_LANGUAGE_INVALID; | 
| 438 | } | 
| 439 |  | 
| 440 | hb_language_t | 
| 441 | _hb_ot_name_language_for_ms_code (unsigned int code) | 
| 442 | { | 
| 443 |   return _hb_ot_name_language_for (code, | 
| 444 | 				   hb_ms_language_map, | 
| 445 | 				   ARRAY_LENGTH (hb_ms_language_map)); | 
| 446 | } | 
| 447 |  | 
| 448 | hb_language_t | 
| 449 | _hb_ot_name_language_for_mac_code (unsigned int code) | 
| 450 | { | 
| 451 |   return _hb_ot_name_language_for (code, | 
| 452 | 				   hb_mac_language_map, | 
| 453 | 				   ARRAY_LENGTH (hb_mac_language_map)); | 
| 454 | } | 
| 455 |  | 
| 456 | #endif /* HB_OT_NAME_LANGUAGE_STATIC_HH */ | 
| 457 |  |