/*
 * Copyright © 2009  Red Hat, Inc.
 * Copyright © 2011  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.
 *
 * Red Hat Author(s): Behdad Esfahbod
 * Google Author(s): Behdad Esfahbod
 */

#include "hb-private.hh"
#include "hb-ot.h"

#include <string.h>



/* hb_script_t */

static hb_tag_t
hb_ot_old_tag_from_script (hb_script_t script)
{
  switch ((hb_tag_t) script) {
    case HB_SCRIPT_INVALID:		return HB_OT_TAG_DEFAULT_SCRIPT;

    /* KATAKANA and HIRAGANA both map to 'kana' */
    case HB_SCRIPT_HIRAGANA:		return HB_TAG('k','a','n','a');

    /* Spaces at the end are preserved, unlike ISO 15924 */
    case HB_SCRIPT_LAO:			return HB_TAG('l','a','o',' ');
    case HB_SCRIPT_YI:			return HB_TAG('y','i',' ',' ');
    /* Unicode-5.0 additions */
    case HB_SCRIPT_NKO:			return HB_TAG('n','k','o',' ');
    /* Unicode-5.1 additions */
    case HB_SCRIPT_VAI:			return HB_TAG('v','a','i',' ');
    /* Unicode-5.2 additions */
    /* Unicode-6.0 additions */
  }

  /* Else, just change first char to lowercase and return */
  return ((hb_tag_t) script) | 0x20000000;
}

static hb_script_t
hb_ot_old_tag_to_script (hb_tag_t tag)
{
  if (unlikely (tag == HB_OT_TAG_DEFAULT_SCRIPT))
    return HB_SCRIPT_INVALID;

  /* This side of the conversion is fully algorithmic. */

  /* Any spaces at the end of the tag are replaced by repeating the last
   * letter.  Eg 'nko ' -> 'Nkoo' */
  if (unlikely ((tag & 0x0000FF00) == 0x00002000))
    tag |= (tag >> 8) & 0x0000FF00; /* Copy second letter to third */
  if (unlikely ((tag & 0x000000FF) == 0x00000020))
    tag |= (tag >> 8) & 0x000000FF; /* Copy third letter to fourth */

  /* Change first char to uppercase and return */
  return (hb_script_t) (tag & ~0x20000000);
}

static hb_tag_t
hb_ot_new_tag_from_script (hb_script_t script)
{
  switch ((hb_tag_t) script) {
    case HB_SCRIPT_BENGALI:		return HB_TAG('b','n','g','2');
    case HB_SCRIPT_DEVANAGARI:		return HB_TAG('d','e','v','2');
    case HB_SCRIPT_GUJARATI:		return HB_TAG('g','j','r','2');
    case HB_SCRIPT_GURMUKHI:		return HB_TAG('g','u','r','2');
    case HB_SCRIPT_KANNADA:		return HB_TAG('k','n','d','2');
    case HB_SCRIPT_MALAYALAM:		return HB_TAG('m','l','m','2');
    case HB_SCRIPT_ORIYA:		return HB_TAG('o','r','y','2');
    case HB_SCRIPT_TAMIL:		return HB_TAG('t','m','l','2');
    case HB_SCRIPT_TELUGU:		return HB_TAG('t','e','l','2');
  }

  return HB_OT_TAG_DEFAULT_SCRIPT;
}

static hb_script_t
hb_ot_new_tag_to_script (hb_tag_t tag)
{
  switch (tag) {
    case HB_TAG('b','n','g','2'):	return HB_SCRIPT_BENGALI;
    case HB_TAG('d','e','v','2'):	return HB_SCRIPT_DEVANAGARI;
    case HB_TAG('g','j','r','2'):	return HB_SCRIPT_GUJARATI;
    case HB_TAG('g','u','r','2'):	return HB_SCRIPT_GURMUKHI;
    case HB_TAG('k','n','d','2'):	return HB_SCRIPT_KANNADA;
    case HB_TAG('m','l','m','2'):	return HB_SCRIPT_MALAYALAM;
    case HB_TAG('o','r','y','2'):	return HB_SCRIPT_ORIYA;
    case HB_TAG('t','m','l','2'):	return HB_SCRIPT_TAMIL;
    case HB_TAG('t','e','l','2'):	return HB_SCRIPT_TELUGU;
  }

  return HB_SCRIPT_UNKNOWN;
}

/*
 * Complete list at:
 * https://www.microsoft.com/typography/otspec/scripttags.htm
 * https://www.microsoft.com/typography/otspec160/scripttagsProposed.htm
 *
 * Most of the script tags are the same as the ISO 15924 tag but lowercased.
 * So we just do that, and handle the exceptional cases in a switch.
 */

void
hb_ot_tags_from_script (hb_script_t  script,
			hb_tag_t    *script_tag_1,
			hb_tag_t    *script_tag_2)
{
  hb_tag_t new_tag;

  *script_tag_2 = HB_OT_TAG_DEFAULT_SCRIPT;
  *script_tag_1 = hb_ot_old_tag_from_script (script);

  new_tag = hb_ot_new_tag_from_script (script);
  if (unlikely (new_tag != HB_OT_TAG_DEFAULT_SCRIPT)) {
    *script_tag_2 = *script_tag_1;
    *script_tag_1 = new_tag;
  }
}

hb_script_t
hb_ot_tag_to_script (hb_tag_t tag)
{
  if (unlikely ((tag & 0x000000FF) == '2'))
    return hb_ot_new_tag_to_script (tag);

  return hb_ot_old_tag_to_script (tag);
}


/* hb_language_t */

typedef struct {
  char language[6];
  hb_tag_t tag;
} LangTag;

/*
 * Complete list at:
 * http://www.microsoft.com/typography/otspec/languagetags.htm
 *
 * Generated by intersecting the OpenType language tag list from
 * Draft OpenType 1.5 spec, with with the ISO 639-3 codes from
 * 2008/08/04, matching on name, and finally adjusted manually.
 *
 * Many items still missing.  Those are commented out at the end.
 * Keep sorted for bsearch.
 */

static const LangTag ot_languages[] = {
  {"aa",	HB_TAG('A','F','R',' ')},	/* Afar */
  {"ab",	HB_TAG('A','B','K',' ')},	/* Abkhazian */
  {"abq",	HB_TAG('A','B','A',' ')},	/* Abaza */
  {"ady",	HB_TAG('A','D','Y',' ')},	/* Adyghe */
  {"af",	HB_TAG('A','F','K',' ')},	/* Afrikaans */
  {"aiw",	HB_TAG('A','R','I',' ')},	/* Aari */
  {"am",	HB_TAG('A','M','H',' ')},	/* Amharic */
  {"ar",	HB_TAG('A','R','A',' ')},	/* Arabic */
  {"arn",	HB_TAG('M','A','P',' ')},	/* Mapudungun */
  {"as",	HB_TAG('A','S','M',' ')},	/* Assamese */
  {"av",	HB_TAG('A','V','R',' ')},	/* Avaric */
  {"awa",	HB_TAG('A','W','A',' ')},	/* Awadhi */
  {"ay",	HB_TAG('A','Y','M',' ')},	/* Aymara */
  {"az",	HB_TAG('A','Z','E',' ')},	/* Azerbaijani */
  {"ba",	HB_TAG('B','S','H',' ')},	/* Bashkir */
  {"bal",	HB_TAG('B','L','I',' ')},	/* Baluchi */
  {"bcq",	HB_TAG('B','C','H',' ')},	/* Bench */
  {"bem",	HB_TAG('B','E','M',' ')},	/* Bemba (Zambia) */
  {"bfq",	HB_TAG('B','A','D',' ')},	/* Badaga */
  {"bft",	HB_TAG('B','L','T',' ')},	/* Balti */
  {"bg",	HB_TAG('B','G','R',' ')},	/* Bulgarian */
  {"bhb",	HB_TAG('B','H','I',' ')},	/* Bhili */
  {"bho",	HB_TAG('B','H','O',' ')},	/* Bhojpuri */
  {"bik",	HB_TAG('B','I','K',' ')},	/* Bikol */
  {"bin",	HB_TAG('E','D','O',' ')},	/* Bini */
  {"bm",	HB_TAG('B','M','B',' ')},	/* Bambara */
  {"bn",	HB_TAG('B','E','N',' ')},	/* Bengali */
  {"bo",	HB_TAG('T','I','B',' ')},	/* Tibetan */
  {"br",	HB_TAG('B','R','E',' ')},	/* Breton */
  {"brh",	HB_TAG('B','R','H',' ')},	/* Brahui */
  {"bs",	HB_TAG('B','O','S',' ')},	/* Bosnian */
  {"btb",	HB_TAG('B','T','I',' ')},	/* Beti (Cameroon) */
  {"ca",	HB_TAG('C','A','T',' ')},	/* Catalan */
  {"ce",	HB_TAG('C','H','E',' ')},	/* Chechen */
  {"ceb",	HB_TAG('C','E','B',' ')},	/* Cebuano */
  {"chp",	HB_TAG('C','H','P',' ')},	/* Chipewyan */
  {"chr",	HB_TAG('C','H','R',' ')},	/* Cherokee */
  {"cop",	HB_TAG('C','O','P',' ')},	/* Coptic */
  {"cr",	HB_TAG('C','R','E',' ')},	/* Cree */
  {"crh",	HB_TAG('C','R','T',' ')},	/* Crimean Tatar */
  {"crm",	HB_TAG('M','C','R',' ')},	/* Moose Cree */
  {"crx",	HB_TAG('C','R','R',' ')},	/* Carrier */
  {"cs",	HB_TAG('C','S','Y',' ')},	/* Czech */
  {"cu",	HB_TAG('C','S','L',' ')},	/* Church Slavic */
  {"cv",	HB_TAG('C','H','U',' ')},	/* Chuvash */
  {"cwd",	HB_TAG('D','C','R',' ')},	/* Woods Cree */
  {"cy",	HB_TAG('W','E','L',' ')},	/* Welsh */
  {"da",	HB_TAG('D','A','N',' ')},	/* Danish */
  {"dap",	HB_TAG('N','I','S',' ')},	/* Nisi (India) */
  {"dar",	HB_TAG('D','A','R',' ')},	/* Dargwa */
  {"de",	HB_TAG('D','E','U',' ')},	/* German */
  {"din",	HB_TAG('D','N','K',' ')},	/* Dinka */
  {"dng",	HB_TAG('D','U','N',' ')},	/* Dungan */
  {"doi",	HB_TAG('D','G','R',' ')},	/* Dogri */
  {"dsb",	HB_TAG('L','S','B',' ')},	/* Lower Sorbian */
  {"dv",	HB_TAG('D','I','V',' ')},	/* Dhivehi */
  {"dz",	HB_TAG('D','Z','N',' ')},	/* Dzongkha */
  {"ee",	HB_TAG('E','W','E',' ')},	/* Ewe */
  {"efi",	HB_TAG('E','F','I',' ')},	/* Efik */
  {"el",	HB_TAG('E','L','L',' ')},	/* Modern Greek (1453-) */
  {"en",	HB_TAG('E','N','G',' ')},	/* English */
  {"eo",	HB_TAG('N','T','O',' ')},	/* Esperanto */
  {"eot",	HB_TAG('B','T','I',' ')},	/* Beti (Côte d'Ivoire) */
  {"es",	HB_TAG('E','S','P',' ')},	/* Spanish */
  {"et",	HB_TAG('E','T','I',' ')},	/* Estonian */
  {"eu",	HB_TAG('E','U','Q',' ')},	/* Basque */
  {"eve",	HB_TAG('E','V','N',' ')},	/* Even */
  {"evn",	HB_TAG('E','V','K',' ')},	/* Evenki */
  {"fa",	HB_TAG('F','A','R',' ')},	/* Persian */
  {"ff",	HB_TAG('F','U','L',' ')},	/* Fulah */
  {"fi",	HB_TAG('F','I','N',' ')},	/* Finnish */
  {"fil",	HB_TAG('P','I','L',' ')},	/* Filipino */
  {"fj",	HB_TAG('F','J','I',' ')},	/* Fijian */
  {"fo",	HB_TAG('F','O','S',' ')},	/* Faroese */
  {"fon",	HB_TAG('F','O','N',' ')},	/* Fon */
  {"fr",	HB_TAG('F','R','A',' ')},	/* French */
  {"fur",	HB_TAG('F','R','L',' ')},	/* Friulian */
  {"fy",	HB_TAG('F','R','I',' ')},	/* Western Frisian */
  {"ga",	HB_TAG('I','R','I',' ')},	/* Irish */
  {"gaa",	HB_TAG('G','A','D',' ')},	/* Ga */
  {"gag",	HB_TAG('G','A','G',' ')},	/* Gagauz */
  {"gbm",	HB_TAG('G','A','W',' ')},	/* Garhwali */
  {"gd",	HB_TAG('G','A','E',' ')},	/* Scottish Gaelic */
  {"gl",	HB_TAG('G','A','L',' ')},	/* Galician */
  {"gld",	HB_TAG('N','A','N',' ')},	/* Nanai */
  {"gn",	HB_TAG('G','U','A',' ')},	/* Guarani */
  {"gon",	HB_TAG('G','O','N',' ')},	/* Gondi */
  {"grt",	HB_TAG('G','R','O',' ')},	/* Garo */
  {"gu",	HB_TAG('G','U','J',' ')},	/* Gujarati */
  {"guk",	HB_TAG('G','M','Z',' ')},	/* Gumuz */
  {"gv",	HB_TAG('M','N','X',' ')},	/* Manx Gaelic */
  {"ha",	HB_TAG('H','A','U',' ')},	/* Hausa */
  {"har",	HB_TAG('H','R','I',' ')},	/* Harari */
  {"he",	HB_TAG('I','W','R',' ')},	/* Hebrew */
  {"hi",	HB_TAG('H','I','N',' ')},	/* Hindi */
  {"hil",	HB_TAG('H','I','L',' ')},	/* Hiligaynon */
  {"hoc",	HB_TAG('H','O',' ',' ')},	/* Ho */
  {"hr",	HB_TAG('H','R','V',' ')},	/* Croatian */
  {"hsb",	HB_TAG('U','S','B',' ')},	/* Upper Sorbian */
  {"ht",	HB_TAG('H','A','I',' ')},	/* Haitian */
  {"hu",	HB_TAG('H','U','N',' ')},	/* Hungarian */
  {"hy",	HB_TAG('H','Y','E',' ')},	/* Armenian */
  {"id",	HB_TAG('I','N','D',' ')},	/* Indonesian */
  {"ig",	HB_TAG('I','B','O',' ')},	/* Igbo */
  {"igb",	HB_TAG('E','B','I',' ')},	/* Ebira */
  {"inh",	HB_TAG('I','N','G',' ')},	/* Ingush */
  {"is",	HB_TAG('I','S','L',' ')},	/* Icelandic */
  {"it",	HB_TAG('I','T','A',' ')},	/* Italian */
  {"iu",	HB_TAG('I','N','U',' ')},	/* Inuktitut */
  {"ja",	HB_TAG('J','A','N',' ')},	/* Japanese */
  {"jv",	HB_TAG('J','A','V',' ')},	/* Javanese */
  {"ka",	HB_TAG('K','A','T',' ')},	/* Georgian */
  {"kam",	HB_TAG('K','M','B',' ')},	/* Kamba (Kenya) */
  {"kbd",	HB_TAG('K','A','B',' ')},	/* Kabardian */
  {"kdr",	HB_TAG('K','R','M',' ')},	/* Karaim */
  {"kdt",	HB_TAG('K','U','Y',' ')},	/* Kuy */
  {"kfr",	HB_TAG('K','A','C',' ')},	/* Kachchi */
  {"kfy",	HB_TAG('K','M','N',' ')},	/* Kumaoni */
  {"kha",	HB_TAG('K','S','I',' ')},	/* Khasi */
  {"khw",	HB_TAG('K','H','W',' ')},	/* Khowar */
  {"ki",	HB_TAG('K','I','K',' ')},	/* Kikuyu */
  {"kk",	HB_TAG('K','A','Z',' ')},	/* Kazakh */
  {"kl",	HB_TAG('G','R','N',' ')},	/* Kalaallisut */
  {"kln",	HB_TAG('K','A','L',' ')},	/* Kalenjin */
  {"km",	HB_TAG('K','H','M',' ')},	/* Central Khmer */
  {"kmw",	HB_TAG('K','M','O',' ')},	/* Komo (Democratic Republic of Congo) */
  {"kn",	HB_TAG('K','A','N',' ')},	/* Kannada */
  {"ko",	HB_TAG('K','O','R',' ')},	/* Korean */
  {"koi",	HB_TAG('K','O','P',' ')},	/* Komi-Permyak */
  {"kok",	HB_TAG('K','O','K',' ')},	/* Konkani */
  {"kpe",	HB_TAG('K','P','L',' ')},	/* Kpelle */
  {"kpv",	HB_TAG('K','O','Z',' ')},	/* Komi-Zyrian */
  {"kpy",	HB_TAG('K','Y','K',' ')},	/* Koryak */
  {"kqy",	HB_TAG('K','R','T',' ')},	/* Koorete */
  {"kr",	HB_TAG('K','N','R',' ')},	/* Kanuri */
  {"kri",	HB_TAG('K','R','I',' ')},	/* Krio */
  {"krl",	HB_TAG('K','R','L',' ')},	/* Karelian */
  {"kru",	HB_TAG('K','U','U',' ')},	/* Kurukh */
  {"ks",	HB_TAG('K','S','H',' ')},	/* Kashmiri */
  {"ku",	HB_TAG('K','U','R',' ')},	/* Kurdish */
  {"kum",	HB_TAG('K','U','M',' ')},	/* Kumyk */
  {"kvd",	HB_TAG('K','U','I',' ')},	/* Kui (Indonesia) */
  {"kxu",	HB_TAG('K','U','I',' ')},	/* Kui (India) */
  {"ky",	HB_TAG('K','I','R',' ')},	/* Kirghiz */
  {"la",	HB_TAG('L','A','T',' ')},	/* Latin */
  {"lad",	HB_TAG('J','U','D',' ')},	/* Ladino */
  {"lb",	HB_TAG('L','T','Z',' ')},	/* Luxembourgish */
  {"lbe",	HB_TAG('L','A','K',' ')},	/* Lak */
  {"lbj",	HB_TAG('L','D','K',' ')},	/* Ladakhi */
  {"lif",	HB_TAG('L','M','B',' ')},	/* Limbu */
  {"lld",	HB_TAG('L','A','D',' ')},	/* Ladin */
  {"ln",	HB_TAG('L','I','N',' ')},	/* Lingala */
  {"lo",	HB_TAG('L','A','O',' ')},	/* Lao */
  {"lt",	HB_TAG('L','T','H',' ')},	/* Lithuanian */
  {"luo",	HB_TAG('L','U','O',' ')},	/* Luo (Kenya and Tanzania) */
  {"luw",	HB_TAG('L','U','O',' ')},	/* Luo (Cameroon) */
  {"lv",	HB_TAG('L','V','I',' ')},	/* Latvian */
  {"lzz",	HB_TAG('L','A','Z',' ')},	/* Laz */
  {"mai",	HB_TAG('M','T','H',' ')},	/* Maithili */
  {"mdc",	HB_TAG('M','L','E',' ')},	/* Male (Papua New Guinea) */
  {"mdf",	HB_TAG('M','O','K',' ')},	/* Moksha */
  {"mdy",	HB_TAG('M','L','E',' ')},	/* Male (Ethiopia) */
  {"men",	HB_TAG('M','D','E',' ')},	/* Mende (Sierra Leone) */
  {"mg",	HB_TAG('M','L','G',' ')},	/* Malagasy */
  {"mi",	HB_TAG('M','R','I',' ')},	/* Maori */
  {"mk",	HB_TAG('M','K','D',' ')},	/* Macedonian */
  {"ml",	HB_TAG('M','L','R',' ')},	/* Malayalam */
  {"mn",	HB_TAG('M','N','G',' ')},	/* Mongolian */
  {"mnc",	HB_TAG('M','C','H',' ')},	/* Manchu */
  {"mni",	HB_TAG('M','N','I',' ')},	/* Manipuri */
  {"mnk",	HB_TAG('M','N','D',' ')},	/* Mandinka */
  {"mns",	HB_TAG('M','A','N',' ')},	/* Mansi */
  {"mnw",	HB_TAG('M','O','N',' ')},	/* Mon */
  {"mo",	HB_TAG('M','O','L',' ')},	/* Moldavian */
  {"moh",	HB_TAG('M','O','H',' ')},	/* Mohawk */
  {"mpe",	HB_TAG('M','A','J',' ')},	/* Majang */
  {"mr",	HB_TAG('M','A','R',' ')},	/* Marathi */
  {"ms",	HB_TAG('M','L','Y',' ')},	/* Malay */
  {"mt",	HB_TAG('M','T','S',' ')},	/* Maltese */
  {"mwr",	HB_TAG('M','A','W',' ')},	/* Marwari */
  {"my",	HB_TAG('B','R','M',' ')},	/* Burmese */
  {"mym",	HB_TAG('M','E','N',' ')},	/* Me'en */
  {"myv",	HB_TAG('E','R','Z',' ')},	/* Erzya */
  {"nb",	HB_TAG('N','O','R',' ')},	/* Norwegian Bokmål */
  {"nco",	HB_TAG('S','I','B',' ')},	/* Sibe */
  {"ne",	HB_TAG('N','E','P',' ')},	/* Nepali */
  {"new",	HB_TAG('N','E','W',' ')},	/* Newari */
  {"ng",	HB_TAG('N','D','G',' ')},	/* Ndonga */
  {"ngl",	HB_TAG('L','M','W',' ')},	/* Lomwe */
  {"niu",	HB_TAG('N','I','U',' ')},	/* Niuean */
  {"niv",	HB_TAG('G','I','L',' ')},	/* Gilyak */
  {"nl",	HB_TAG('N','L','D',' ')},	/* Dutch */
  {"nn",	HB_TAG('N','Y','N',' ')},	/* Norwegian Nynorsk */
  {"no",	HB_TAG('N','O','R',' ')},	/* Norwegian (deprecated) */
  {"nog",	HB_TAG('N','O','G',' ')},	/* Nogai */
  {"nqo",	HB_TAG('N','K','O',' ')},	/* N'Ko */
  {"nsk",	HB_TAG('N','A','S',' ')},	/* Naskapi */
  {"ny",	HB_TAG('C','H','I',' ')},	/* Nyanja */
  {"oc",	HB_TAG('O','C','I',' ')},	/* Occitan (post 1500) */
  {"oj",	HB_TAG('O','J','B',' ')},	/* Ojibwa */
  {"om",	HB_TAG('O','R','O',' ')},	/* Oromo */
  {"or",	HB_TAG('O','R','I',' ')},	/* Oriya */
  {"os",	HB_TAG('O','S','S',' ')},	/* Ossetian */
  {"pa",	HB_TAG('P','A','N',' ')},	/* Panjabi */
  {"pi",	HB_TAG('P','A','L',' ')},	/* Pali */
  {"pl",	HB_TAG('P','L','K',' ')},	/* Polish */
  {"plp",	HB_TAG('P','A','P',' ')},	/* Palpa */
  {"prs",	HB_TAG('D','R','I',' ')},	/* Dari */
  {"ps",	HB_TAG('P','A','S',' ')},	/* Pushto */
  {"pt",	HB_TAG('P','T','G',' ')},	/* Portuguese */
  {"raj",	HB_TAG('R','A','J',' ')},	/* Rajasthani */
  {"ria",	HB_TAG('R','I','A',' ')},	/* Riang (India) */
  {"ril",	HB_TAG('R','I','A',' ')},	/* Riang (Myanmar) */
  {"ro",	HB_TAG('R','O','M',' ')},	/* Romanian */
  {"rom",	HB_TAG('R','O','Y',' ')},	/* Romany */
  {"ru",	HB_TAG('R','U','S',' ')},	/* Russian */
  {"rue",	HB_TAG('R','S','Y',' ')},	/* Rusyn */
  {"sa",	HB_TAG('S','A','N',' ')},	/* Sanskrit */
  {"sah",	HB_TAG('Y','A','K',' ')},	/* Yakut */
  {"sat",	HB_TAG('S','A','T',' ')},	/* Santali */
  {"sck",	HB_TAG('S','A','D',' ')},	/* Sadri */
  {"sd",	HB_TAG('S','N','D',' ')},	/* Sindhi */
  {"se",	HB_TAG('N','S','M',' ')},	/* Northern Sami */
  {"seh",	HB_TAG('S','N','A',' ')},	/* Sena */
  {"sel",	HB_TAG('S','E','L',' ')},	/* Selkup */
  {"sg",	HB_TAG('S','G','O',' ')},	/* Sango */
  {"shn",	HB_TAG('S','H','N',' ')},	/* Shan */
  {"si",	HB_TAG('S','N','H',' ')},	/* Sinhala */
  {"sid",	HB_TAG('S','I','D',' ')},	/* Sidamo */
  {"sjd",	HB_TAG('K','S','M',' ')},	/* Kildin Sami */
  {"sk",	HB_TAG('S','K','Y',' ')},	/* Slovak */
  {"skr",	HB_TAG('S','R','K',' ')},	/* Seraiki */
  {"sl",	HB_TAG('S','L','V',' ')},	/* Slovenian */
  {"sm",	HB_TAG('S','M','O',' ')},	/* Samoan */
  {"sma",	HB_TAG('S','S','M',' ')},	/* Southern Sami */
  {"smj",	HB_TAG('L','S','M',' ')},	/* Lule Sami */
  {"smn",	HB_TAG('I','S','M',' ')},	/* Inari Sami */
  {"sms",	HB_TAG('S','K','S',' ')},	/* Skolt Sami */
  {"snk",	HB_TAG('S','N','K',' ')},	/* Soninke */
  {"so",	HB_TAG('S','M','L',' ')},	/* Somali */
  {"sq",	HB_TAG('S','Q','I',' ')},	/* Albanian */
  {"sr",	HB_TAG('S','R','B',' ')},	/* Serbian */
  {"srr",	HB_TAG('S','R','R',' ')},	/* Serer */
  {"suq",	HB_TAG('S','U','R',' ')},	/* Suri */
  {"sv",	HB_TAG('S','V','E',' ')},	/* Swedish */
  {"sva",	HB_TAG('S','V','A',' ')},	/* Svan */
  {"sw",	HB_TAG('S','W','K',' ')},	/* Swahili */
  {"swb",	HB_TAG('C','M','R',' ')},	/* Comorian */
  {"syr",	HB_TAG('S','Y','R',' ')},	/* Syriac */
  {"ta",	HB_TAG('T','A','M',' ')},	/* Tamil */
  {"tcy",	HB_TAG('T','U','L',' ')},	/* Tulu */
  {"te",	HB_TAG('T','E','L',' ')},	/* Telugu */
  {"tg",	HB_TAG('T','A','J',' ')},	/* Tajik */
  {"th",	HB_TAG('T','H','A',' ')},	/* Thai */
  {"ti",	HB_TAG('T','G','Y',' ')},	/* Tigrinya */
  {"tig",	HB_TAG('T','G','R',' ')},	/* Tigre */
  {"tk",	HB_TAG('T','K','M',' ')},	/* Turkmen */
  {"tn",	HB_TAG('T','N','A',' ')},	/* Tswana */
  {"tnz",	HB_TAG('T','N','G',' ')},	/* Tonga (Thailand) */
  {"to",	HB_TAG('T','N','G',' ')},	/* Tonga (Tonga Islands) */
  {"tog",	HB_TAG('T','N','G',' ')},	/* Tonga (Nyasa) */
  {"toi",	HB_TAG('T','N','G',' ')},	/* Tonga (Zambia) */
  {"tr",	HB_TAG('T','R','K',' ')},	/* Turkish */
  {"ts",	HB_TAG('T','S','G',' ')},	/* Tsonga */
  {"tt",	HB_TAG('T','A','T',' ')},	/* Tatar */
  {"tw",	HB_TAG('T','W','I',' ')},	/* Twi */
  {"ty",	HB_TAG('T','H','T',' ')},	/* Tahitian */
  {"udm",	HB_TAG('U','D','M',' ')},	/* Udmurt */
  {"ug",	HB_TAG('U','Y','G',' ')},	/* Uighur */
  {"uk",	HB_TAG('U','K','R',' ')},	/* Ukrainian */
  {"unr",	HB_TAG('M','U','N',' ')},	/* Mundari */
  {"ur",	HB_TAG('U','R','D',' ')},	/* Urdu */
  {"uz",	HB_TAG('U','Z','B',' ')},	/* Uzbek */
  {"ve",	HB_TAG('V','E','N',' ')},	/* Venda */
  {"vi",	HB_TAG('V','I','T',' ')},	/* Vietnamese */
  {"wbm",	HB_TAG('W','A',' ',' ')},	/* Wa */
  {"wbr",	HB_TAG('W','A','G',' ')},	/* Wagdi */
  {"wo",	HB_TAG('W','L','F',' ')},	/* Wolof */
  {"xal",	HB_TAG('K','L','M',' ')},	/* Kalmyk */
  {"xh",	HB_TAG('X','H','S',' ')},	/* Xhosa */
  {"xom",	HB_TAG('K','M','O',' ')},	/* Komo (Sudan) */
  {"xsl",	HB_TAG('S','S','L',' ')},	/* South Slavey */
  {"yi",	HB_TAG('J','I','I',' ')},	/* Yiddish */
  {"yo",	HB_TAG('Y','B','A',' ')},	/* Yoruba */
  {"yso",	HB_TAG('N','I','S',' ')},	/* Nisi (China) */
  {"zne",	HB_TAG('Z','N','D',' ')},	/* Zande */
  {"zu",	HB_TAG('Z','U','L',' ')} 	/* Zulu */

  /* I couldn't find the language id for these */

/*{"??",	HB_TAG('A','G','W',' ')},*/	/* Agaw */
/*{"??",	HB_TAG('A','L','S',' ')},*/	/* Alsatian */
/*{"??",	HB_TAG('A','L','T',' ')},*/	/* Altai */
/*{"??",	HB_TAG('A','R','K',' ')},*/	/* Arakanese */
/*{"??",	HB_TAG('A','T','H',' ')},*/	/* Athapaskan */
/*{"??",	HB_TAG('B','A','G',' ')},*/	/* Baghelkhandi */
/*{"??",	HB_TAG('B','A','L',' ')},*/	/* Balkar */
/*{"??",	HB_TAG('B','A','U',' ')},*/	/* Baule */
/*{"??",	HB_TAG('B','B','R',' ')},*/	/* Berber */
/*{"??",	HB_TAG('B','C','R',' ')},*/	/* Bible Cree */
/*{"??",	HB_TAG('B','E','L',' ')},*/	/* Belarussian */
/*{"??",	HB_TAG('B','I','L',' ')},*/	/* Bilen */
/*{"??",	HB_TAG('B','K','F',' ')},*/	/* Blackfoot */
/*{"??",	HB_TAG('B','L','N',' ')},*/	/* Balante */
/*{"??",	HB_TAG('B','M','L',' ')},*/	/* Bamileke */
/*{"??",	HB_TAG('B','R','I',' ')},*/	/* Braj Bhasha */
/*{"??",	HB_TAG('C','H','G',' ')},*/	/* Chaha Gurage */
/*{"??",	HB_TAG('C','H','H',' ')},*/	/* Chattisgarhi */
/*{"??",	HB_TAG('C','H','K',' ')},*/	/* Chukchi */
/*{"??",	HB_TAG('D','J','R',' ')},*/	/* Djerma */
/*{"??",	HB_TAG('D','N','G',' ')},*/	/* Dangme */
/*{"??",	HB_TAG('E','C','R',' ')},*/	/* Eastern Cree */
/*{"??",	HB_TAG('F','A','N',' ')},*/	/* French Antillean */
/*{"??",	HB_TAG('F','L','E',' ')},*/	/* Flemish */
/*{"??",	HB_TAG('F','N','E',' ')},*/	/* Forest Nenets */
/*{"??",	HB_TAG('F','T','A',' ')},*/	/* Futa */
/*{"??",	HB_TAG('G','A','R',' ')},*/	/* Garshuni */
/*{"??",	HB_TAG('G','E','Z',' ')},*/	/* Ge'ez */
/*{"??",	HB_TAG('H','A','L',' ')},*/	/* Halam */
/*{"??",	HB_TAG('H','A','R',' ')},*/	/* Harauti */
/*{"??",	HB_TAG('H','A','W',' ')},*/	/* Hawaiin */
/*{"??",	HB_TAG('H','B','N',' ')},*/	/* Hammer-Banna */
/*{"??",	HB_TAG('H','M','A',' ')},*/	/* High Mari */
/*{"??",	HB_TAG('H','N','D',' ')},*/	/* Hindko */
/*{"??",	HB_TAG('I','J','O',' ')},*/	/* Ijo */
/*{"??",	HB_TAG('I','L','O',' ')},*/	/* Ilokano */
/*{"??",	HB_TAG('I','R','T',' ')},*/	/* Irish Traditional */
/*{"??",	HB_TAG('J','U','L',' ')},*/	/* Jula */
/*{"??",	HB_TAG('K','A','R',' ')},*/	/* Karachay */
/*{"??",	HB_TAG('K','E','B',' ')},*/	/* Kebena */
/*{"??",	HB_TAG('K','G','E',' ')},*/	/* Khutsuri Georgian */
/*{"??",	HB_TAG('K','H','A',' ')},*/	/* Khakass */
/*{"??",	HB_TAG('K','H','K',' ')},*/	/* Khanty-Kazim */
/*{"??",	HB_TAG('K','H','S',' ')},*/	/* Khanty-Shurishkar */
/*{"??",	HB_TAG('K','H','V',' ')},*/	/* Khanty-Vakhi */
/*{"??",	HB_TAG('K','I','S',' ')},*/	/* Kisii */
/*{"??",	HB_TAG('K','K','N',' ')},*/	/* Kokni */
/*{"??",	HB_TAG('K','M','S',' ')},*/	/* Komso */
/*{"??",	HB_TAG('K','O','D',' ')},*/	/* Kodagu */
/*{"??",	HB_TAG('K','O','H',' ')},*/	/* Korean Old Hangul */
/*{"??",	HB_TAG('K','O','N',' ')},*/	/* Kikongo */
/*{"??",	HB_TAG('K','R','K',' ')},*/	/* Karakalpak */
/*{"??",	HB_TAG('K','R','N',' ')},*/	/* Karen */
/*{"??",	HB_TAG('K','U','L',' ')},*/	/* Kulvi */
/*{"??",	HB_TAG('L','A','H',' ')},*/	/* Lahuli */
/*{"??",	HB_TAG('L','A','M',' ')},*/	/* Lambani */
/*{"??",	HB_TAG('L','C','R',' ')},*/	/* L-Cree */
/*{"??",	HB_TAG('L','E','Z',' ')},*/	/* Lezgi */
/*{"??",	HB_TAG('L','M','A',' ')},*/	/* Low Mari */
/*{"??",	HB_TAG('L','U','B',' ')},*/	/* Luba */
/*{"??",	HB_TAG('L','U','G',' ')},*/	/* Luganda */
/*{"??",	HB_TAG('L','U','H',' ')},*/	/* Luhya */
/*{"??",	HB_TAG('M','A','K',' ')},*/	/* Makua */
/*{"??",	HB_TAG('M','A','L',' ')},*/	/* Malayalam Traditional */
/*{"??",	HB_TAG('M','B','N',' ')},*/	/* Mbundu */
/*{"??",	HB_TAG('M','I','Z',' ')},*/	/* Mizo */
/*{"??",	HB_TAG('M','L','N',' ')},*/	/* Malinke */
/*{"??",	HB_TAG('M','N','K',' ')},*/	/* Maninka */
/*{"??",	HB_TAG('M','O','R',' ')},*/	/* Moroccan */
/*{"??",	HB_TAG('N','A','G',' ')},*/	/* Naga-Assamese */
/*{"??",	HB_TAG('N','C','R',' ')},*/	/* N-Cree */
/*{"??",	HB_TAG('N','D','B',' ')},*/	/* Ndebele */
/*{"??",	HB_TAG('N','G','R',' ')},*/	/* Nagari */
/*{"??",	HB_TAG('N','H','C',' ')},*/	/* Norway House Cree */
/*{"??",	HB_TAG('N','K','L',' ')},*/	/* Nkole */
/*{"??",	HB_TAG('N','T','A',' ')},*/	/* Northern Tai */
/*{"??",	HB_TAG('O','C','R',' ')},*/	/* Oji-Cree */
/*{"??",	HB_TAG('P','A','A',' ')},*/	/* Palestinian Aramaic */
/*{"??",	HB_TAG('P','G','R',' ')},*/	/* Polytonic Greek */
/*{"??",	HB_TAG('P','L','G',' ')},*/	/* Palaung */
/*{"??",	HB_TAG('Q','I','N',' ')},*/	/* Chin */
/*{"??",	HB_TAG('R','B','U',' ')},*/	/* Russian Buriat */
/*{"??",	HB_TAG('R','C','R',' ')},*/	/* R-Cree */
/*{"??",	HB_TAG('R','M','S',' ')},*/	/* Rhaeto-Romanic */
/*{"??",	HB_TAG('R','U','A',' ')},*/	/* Ruanda */
/*{"??",	HB_TAG('S','A','Y',' ')},*/	/* Sayisi */
/*{"??",	HB_TAG('S','E','K',' ')},*/	/* Sekota */
/*{"??",	HB_TAG('S','I','G',' ')},*/	/* Silte Gurage */
/*{"??",	HB_TAG('S','L','A',' ')},*/	/* Slavey */
/*{"??",	HB_TAG('S','O','G',' ')},*/	/* Sodo Gurage */
/*{"??",	HB_TAG('S','O','T',' ')},*/	/* Sotho */
/*{"??",	HB_TAG('S','W','A',' ')},*/	/* Swadaya Aramaic */
/*{"??",	HB_TAG('S','W','Z',' ')},*/	/* Swazi */
/*{"??",	HB_TAG('S','X','T',' ')},*/	/* Sutu */
/*{"??",	HB_TAG('T','A','B',' ')},*/	/* Tabasaran */
/*{"??",	HB_TAG('T','C','R',' ')},*/	/* TH-Cree */
/*{"??",	HB_TAG('T','G','N',' ')},*/	/* Tongan */
/*{"??",	HB_TAG('T','M','N',' ')},*/	/* Temne */
/*{"??",	HB_TAG('T','N','E',' ')},*/	/* Tundra Nenets */
/*{"??",	HB_TAG('T','O','D',' ')},*/	/* Todo */
/*{"??",	HB_TAG('T','U','A',' ')},*/	/* Turoyo Aramaic */
/*{"??",	HB_TAG('T','U','V',' ')},*/	/* Tuvin */
/*{"??",	HB_TAG('W','C','R',' ')},*/	/* West-Cree */
/*{"??",	HB_TAG('X','B','D',' ')},*/	/* Tai Lue */
/*{"??",	HB_TAG('Y','C','R',' ')},*/	/* Y-Cree */
/*{"??",	HB_TAG('Y','I','C',' ')},*/	/* Yi Classic */
/*{"??",	HB_TAG('Y','I','M',' ')},*/	/* Yi Modern */
/*{"??",	HB_TAG('Z','H','P',' ')},*/	/* Chinese Phonetic */
};

static const LangTag ot_languages_zh[] = {
  {"zh-cn",	HB_TAG('Z','H','S',' ')},	/* Chinese (China) */
  {"zh-hk",	HB_TAG('Z','H','H',' ')},	/* Chinese (Hong Kong) */
  {"zh-mo",	HB_TAG('Z','H','T',' ')},	/* Chinese (Macao) */
  {"zh-sg",	HB_TAG('Z','H','S',' ')},	/* Chinese (Singapore) */
  {"zh-tw",	HB_TAG('Z','H','T',' ')} 	/* Chinese (Taiwan) */
};

static int
lang_compare_first_component (const char *a,
			      const char *b)
{
  unsigned int da, db;
  const char *p;

  p = strchr (a, '-');
  da = p ? (unsigned int) (p - a) : strlen (a);

  p = strchr (b, '-');
  db = p ? (unsigned int) (p - b) : strlen (b);

  return strncmp (a, b, MAX (da, db));
}

static hb_bool_t
lang_matches (const char *lang_str, const char *spec)
{
  unsigned int len = strlen (spec);

  return strncmp (lang_str, spec, len) == 0 &&
	 (lang_str[len] == '\0' || lang_str[len] == '-');
}

hb_tag_t
hb_ot_tag_from_language (hb_language_t language)
{
  const char *lang_str, *s;
  const LangTag *lang_tag;

  if (language == HB_LANGUAGE_INVALID)
    return HB_OT_TAG_DEFAULT_LANGUAGE;

  lang_str = hb_language_to_string (language);

  s = strstr (lang_str, "x-hbot");
  if (s) {
    char tag[4];
    int i;
    s += 6;
    for (i = 0; i < 4 && ISALPHA (s[i]); i++)
      tag[i] = TOUPPER (s[i]);
    if (i) {
      for (; i < 4; i++)
	tag[i] = ' ';
      return HB_TAG_CHAR4 (tag);
    }
  }

  /* Find a language matching in the first component */
  lang_tag = (LangTag *) bsearch (lang_str, ot_languages,
				  ARRAY_LENGTH (ot_languages), sizeof (LangTag),
				  (hb_compare_func_t) lang_compare_first_component);
  if (lang_tag)
    return lang_tag->tag;

  /* Otherwise, check the Chinese ones */
  if (0 == lang_compare_first_component (lang_str, "zh"))
  {
    unsigned int i;

    for (i = 0; i < ARRAY_LENGTH (ot_languages_zh); i++)
    {
      lang_tag = &ot_languages_zh[i];
      if (lang_matches (lang_tag->language, lang_str))
	return lang_tag->tag;
    }

    /* Otherwise just return 'ZHS ' */
    return HB_TAG('Z','H','S',' ');
  }

  s = strchr (lang_str, '-');
  if (!s)
    s = lang_str + strlen (lang_str);
  if (s - lang_str == 3) {
    /* Assume it's ISO-639-3 and upper-case and use it. */
    return hb_tag_from_string (lang_str, s - lang_str) & ~0x20202000;
  }

  return HB_OT_TAG_DEFAULT_LANGUAGE;
}

hb_language_t
hb_ot_tag_to_language (hb_tag_t tag)
{
  unsigned int i;

  if (tag == HB_OT_TAG_DEFAULT_LANGUAGE)
    return NULL;

  for (i = 0; i < ARRAY_LENGTH (ot_languages); i++)
    if (ot_languages[i].tag == tag)
      return hb_language_from_string (ot_languages[i].language, -1);

  /* If tag starts with ZH, it's Chinese */
  if ((tag & 0xFFFF0000)  == 0x5A480000) {
    switch (tag) {
      case HB_TAG('Z','H','H',' '): return hb_language_from_string ("zh-hk", -1); /* Hong Kong */
      default: {
        /* Encode the tag... */
	unsigned char buf[14] = "zh-x-hbot";
	buf[9] = tag >> 24;
	buf[10] = (tag >> 16) & 0xFF;
	buf[11] = (tag >> 8) & 0xFF;
	buf[12] = tag & 0xFF;
	if (buf[12] == 0x20)
	  buf[12] = '\0';
	buf[13] = '\0';
	return hb_language_from_string ((char *) buf, -1);
      }
    }
  }

  /* Else return a custom language in the form of "x-hbotABCD" */
  {
    unsigned char buf[11] = "x-hbot";
    buf[6] = tag >> 24;
    buf[7] = (tag >> 16) & 0xFF;
    buf[8] = (tag >> 8) & 0xFF;
    buf[9] = tag & 0xFF;
    if (buf[9] == 0x20)
      buf[9] = '\0';
    buf[10] = '\0';
    return hb_language_from_string ((char *) buf, -1);
  }
}


