/* GStreamer Quicktime/ISO demuxer language utility functions
 * Copyright (C) 2010 Tim-Philipp Müller <tim centricular net>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 */

#include "qtdemux.h"
#include "qtdemux_lang.h"

#include <string.h>

/* http://developer.apple.com/mac/library/documentation/QuickTime/QTFF/QTFFChap4/qtff4.html */

static const gchar qt_lang_map[][4] = {

/* 000 English
 * 001 French
 * 002 German
 * 003 Italian
 * 004 Dutch
 * 005 Swedish
 * 006 Spanish
 * 007 Danish
 * 008 Portuguese
 * 009 Norwegian
 */
  "eng", "fre", "deu", "ita", "nld", "swe", "spa", "dan", "por", "nor",

/* 010 Hebrew
 * 011 Japanese
 * 012 Arabic
 * 013 Finnish
 * 014 Greek
 * 015 Icelandic
 * 016 Maltese
 * 017 Turkish
 * 018 Croatian
 * 019 Traditional Chinese (ISO 639-2 can't express script differences, so zho)
 */
  "heb", "jpn", "ara", "fin", "ell", "isl", "mlt", "tur", "hrv", "zho",

/* 020 Urdu
 * 021 Hindi
 * 022 Thai
 * 023 Korean
 * 024 Lithuanian
 * 025 Polish
 * 026 Hungarian
 * 027 Estonian
 * 028 Latvian / Lettish
 * 029 Lappish / Saamish (used code for Nothern Sami)
 */
  "urd", "hin", "tha", "kor", "lit", "pol", "hun", "est", "lav", "sme",

/* 030 Faeroese
 * 031 Farsi
 * 032 Russian
 * 033 Simplified Chinese (ISO 639-2 can't express script differences, so zho)
 * 034 Flemish (no ISO 639-2 code, used Dutch code)
 * 035 Irish
 * 036 Albanian
 * 037 Romanian
 * 038 Czech
 * 039 Slovak
 */
  "fao", "fas", "rus", "zho", "nld", "gle", "sqi", "ron", "ces", "slk",

/* 040 Slovenian
 * 041 Yiddish
 * 042 Serbian
 * 043 Macedonian
 * 044 Bulgarian
 * 045 Ukrainian
 * 046 Byelorussian
 * 047 Uzbek
 * 048 Kazakh
 * 049 Azerbaijani
 */
  "slv", "yid", "srp", "mkd", "bul", "ukr", "bel", "uzb", "kaz", "aze",

/* 050 AzerbaijanAr (presumably script difference? used aze here)
 * 051 Armenian
 * 052 Georgian
 * 053 Moldavian
 * 054 Kirghiz
 * 055 Tajiki
 * 056 Turkmen
 * 057 Mongolian
 * 058 MongolianCyr (presumably script difference? used mon here)
 * 059 Pashto
 */

  "aze", "hye", "kat", "mol", "kir", "tgk", "tuk", "mon", "mon", "pus",


/* 060 Kurdish
 * 061 Kashmiri
 * 062 Sindhi
 * 063 Tibetan
 * 064 Nepali
 * 065 Sanskrit
 * 066 Marathi
 * 067 Bengali
 * 068 Assamese
 * 069 Gujarati
 */
  "kur", "kas", "snd", "bod", "nep", "san", "mar", "ben", "asm", "guj",

/* 070 Punjabi
 * 071 Oriya
 * 072 Malayalam
 * 073 Kannada
 * 074 Tamil
 * 075 Telugu
 * 076 Sinhalese
 * 077 Burmese
 * 078 Khmer
 * 079 Lao
 */
  "pan", "ori", "mal", "kan", "tam", "tel", "sin", "mya", "khm", "lao",

/* 080 Vietnamese
 * 081 Indonesian
 * 082 Tagalog
 * 083 MalayRoman
 * 084 MalayArabic
 * 085 Amharic
 * 087 Galla (same as Oromo?)
 * 087 Oromo
 * 088 Somali
 * 089 Swahili
 */
  "vie", "ind", "tgl", "msa", "msa", "amh", "orm", "orm", "som", "swa",

/* 090 Ruanda
 * 091 Rundi
 * 092 Chewa
 * 093 Malagasy
 * 094 Esperanto
 * 095 ---
 * 096 ---
 * 097 ---
 * 098 ---
 * 099 ---
 */
  "kin", "run", "nya", "mlg", "ep", "und", "und", "und", "und", "und",

/* 100-109 ---
 * 110-119 ---
 */
  "und", "und", "und", "und", "und", "und", "und", "und", "und", "und",
  "und", "und", "und", "und", "und", "und", "und", "und", "und", "und",

/* 120-127 ---
 * 128 Welsh
 * 129 Basque
 */
  "und", "und", "und", "und", "und", "und", "und", "und", "cym", "eus",

/* 130 Catalan
 * 131 Latin
 * 132 Quechua
 * 133 Guarani
 * 134 Aymara
 * 135 Tatar
 * 136 Uighur
 * 137 Dzongkha
 * 138 JavaneseRom
 */
  "cat", "lat", "que", "grn", "aym", "tat", "uig", "dzo", "jav"
};

/* map quicktime language code to ISO-639-2T id, returns "und" if unknown */
void
qtdemux_lang_map_qt_code_to_iso (gchar id[4], guint16 qt_lang_code)
{
  const gchar *iso_code;

  g_assert (qt_lang_code < 0x400);

  if (qt_lang_code < G_N_ELEMENTS (qt_lang_map))
    iso_code = qt_lang_map[qt_lang_code];
  else
    iso_code = "und";

  GST_DEBUG ("mapped quicktime language code %u to ISO 639-2T code '%s'",
      qt_lang_code, iso_code);

  memcpy (id, iso_code, 4);

  g_assert (id[3] == '\0');
}
