/*
 * Copyright © 2018  Google, Inc.
 *
 *  This is part of HarfBuzz, a text shaping library.
 *
 * Permission is hereby granted, without written agreement and without
 * license or royalty fees, to use, copy, modify, and distribute this
 * software and its documentation for any purpose, provided that the
 * above copyright notice and the following two paragraphs appear in
 * all copies of this software.
 *
 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
 * DAMAGE.
 *
 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 *
 * Google Author(s): Behdad Esfahbod
 */

#ifndef HB_OT_NAME_LANGUAGE_STATIC_HH
#define HB_OT_NAME_LANGUAGE_STATIC_HH

#include "hb-ot-name-language.hh"

/* Following two tables were generated by joining FreeType, FontConfig,
 * 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
{
  int cmp (unsigned int key) const
  { return key < code ? -1 : key > code ? +1 : 0; }

  uint16_t	code;
  char		lang[6];
};

static const hb_ot_language_map_t
_hb_ms_language_map[] =
{
  {0x0001,	"ar"},	/* ??? */
  {0x0004,	"zh"},	/* ??? */
  {0x0009,	"en"},	/* ??? */
  {0x0401,	"ar"},	/* Arabic (Saudi Arabia) */
  {0x0402,	"bg"},	/* Bulgarian (Bulgaria) */
  {0x0403,	"ca"},	/* 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,	"ko"},	/* Korean (Korea) */
  {0x0413,	"nl"},	/* Dutch (Netherlands) */
  {0x0414,	"no"},	/* Norwegian (Bokmal) (Norway) */
  {0x0415,	"pl"},	/* Polish (Poland) */
  {0x0416,	"pt"},	/* Portuguese (Brazil) */
  {0x0417,	"rm"},	/* 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,	"sl"},	/* Slovenian (Slovenia) */
  {0x0425,	"et"},	/* Estonian (Estonia) */
  {0x0426,	"lv"},	/* Latvian (Latvia) */
  {0x0427,	"lt"},	/* Lithuanian (Lithuania) */
  {0x0428,	"tg"},	/* Tajik (Cyrillic) (Tajikistan) */
  {0x0429,	"fa"},	/* Persian (Iran) */
  {0x042A,	"vi"},	/* Vietnamese (Vietnam) */
  {0x042B,	"hy"},	/* Armenian (Armenia) */
  {0x042C,	"az"},	/* Azeri (Latin) (Azerbaijan) */
  {0x042D,	"eu"},	/* Basque (Basque) */
  {0x042E,	"hsb"},	/* Upper Sorbian (Germany) */
  {0x042F,	"mk"},	/* Macedonian (FYROM) (Former Yugoslav Republic of Macedonia) */
  {0x0430,	"st"},	/* ??? */
  {0x0431,	"ts"},	/* ??? */
  {0x0432,	"tn"},	/* Setswana (South Africa) */
  {0x0433,	"ven"},	/* ??? */
  {0x0434,	"xh"},	/* isiXhosa (South Africa) */
  {0x0435,	"zu"},	/* 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,	"kk"},	/* Kazakh (Kazakhstan) */
  {0x0440,	"ky"},	/* Kyrgyz (Kyrgyzstan) */
  {0x0441,	"sw"},	/* Kiswahili (Kenya) */
  {0x0442,	"tk"},	/* Turkmen (Turkmenistan) */
  {0x0443,	"uz"},	/* Uzbek (Latin) (Uzbekistan) */
  {0x0444,	"tt"},	/* Tatar (Russia) */
  {0x0445,	"bn"},	/* Bengali (India) */
  {0x0446,	"pa"},	/* Punjabi (India) */
  {0x0447,	"gu"},	/* Gujarati (India) */
  {0x0448,	"or"},	/* 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,	"bo"},	/* Tibetan (PRC) */
  {0x0452,	"cy"},	/* Welsh (United Kingdom) */
  {0x0453,	"km"},	/* Khmer (Cambodia) */
  {0x0454,	"lo"},	/* Lao (Lao P.D.R.) */
  {0x0455,	"my"},	/* ??? */
  {0x0456,	"gl"},	/* Galician (Galician) */
  {0x0457,	"kok"},	/* Konkani (India) */
  {0x0458,	"mni"},	/* ??? */
  {0x0459,	"sd"},	/* ??? */
  {0x045A,	"syr"},	/* Syriac (Syria) */
  {0x045B,	"si"},	/* 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,	"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"},	/* ??? */
  {0x0473,	"ti"},	/* ??? */
  {0x0474,	"gn"},	/* ??? */
  {0x0475,	"haw"},	/* ??? */
  {0x0476,	"la"},	/* ??? */
  {0x0477,	"so"},	/* ??? */
  {0x0478,	"ii"},	/* Yi (PRC) */
  {0x0479,	"pap"},	/* ??? */
  {0x047A,	"arn"},	/* Mapudungun (Chile) */
  {0x047C,	"moh"},	/* Mohawk (Mohawk) */
  {0x047E,	"br"},	/* Breton (France) */
  {0x0480,	"ug"},	/* Uighur (PRC) */
  {0x0481,	"mi"},	/* Maori (New Zealand) */
  {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) */
  {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,	"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,	"mn"},	/* Mongolian (Traditional) (People’s Republic of China) */
  {0x0851,	"dz"},	/* ??? */
  {0x085D,	"iu"},	/* Inuktitut (Latin) (Canada) */
  {0x085F,	"tzm"},	/* 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,	"es"},	/* Spanish (Modern Sort) (Spain) */
  {0x0C0C,	"fr"},	/* French (Canada) */
  {0x0C1A,	"sr"},	/* Serbian (Cyrillic) (Serbia) */
  {0x0C3B,	"se"},	/* 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,	"hr"},	/* Croatian (Latin) (Bosnia and Herzegovina) */
  {0x103B,	"smj"},	/* Sami (Lule) (Norway) */
  {0x1401,	"ar"},	/* Arabic (Algeria) */
//{0x1404,	""},	/* Chinese (Macao S.A.R.) */
  {0x1407,	"de"},	/* German (Liechtenstein) */
  {0x1409,	"en"},	/* English (New Zealand) */
  {0x140A,	"es"},	/* Spanish (Costa Rica) */
  {0x140C,	"fr"},	/* 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,	"sma"},	/* 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,	"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,	"smn"},	/* 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 */
//{ 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,	"az"},	/* Azerbaijani (Arabic script) */
  { 51,	"hy"},	/* Armenian */
  { 52,	"ka"},	/* Georgian */
  { 53,	"mo"},	/* Moldavian */
  { 54,	"ky"},	/* Kirghiz */
  { 55,	"tg"},	/* Tajiki */
  { 56,	"tk"},	/* Turkmen */
  { 57,	"mn"},	/* Mongolian (Mongolian script) */
  { 58,	"mn"},	/* 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) */
};


static hb_language_t
_hb_ot_name_language_for (unsigned int code,
			  const hb_ot_language_map_t *array,
			  unsigned int len)
{
#ifdef HB_NO_OT_NAME_LANGUAGE
  return HB_LANGUAGE_INVALID;
#endif
  auto *entry = hb_bsearch (code, array, len);

  if (entry)
    return hb_language_from_string (entry->lang, -1);

  return HB_LANGUAGE_INVALID;
}

hb_language_t
_hb_ot_name_language_for_ms_code (unsigned int code)
{
  return _hb_ot_name_language_for (code,
				   _hb_ms_language_map,
				   ARRAY_LENGTH (_hb_ms_language_map));
}

hb_language_t
_hb_ot_name_language_for_mac_code (unsigned int code)
{
  return _hb_ot_name_language_for (code,
				   _hb_mac_language_map,
				   ARRAY_LENGTH (_hb_mac_language_map));
}

#endif /* HB_OT_NAME_LANGUAGE_STATIC_HH */
