|
Packit |
79f644 |
/*
|
|
Packit |
79f644 |
* Copyright (C) 2001-2006 Bastien Nocera <hadess@hadess.net>
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* encoding list copied from gnome-terminal/encoding.c
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* This program is free software; you can redistribute it and/or
|
|
Packit |
79f644 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
79f644 |
* License as published by the Free Software Foundation; either
|
|
Packit |
79f644 |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* This program is distributed in the hope that it will be useful,
|
|
Packit |
79f644 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
79f644 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
79f644 |
* Lesser General Public License for more details.
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
79f644 |
* License along with this library; if not, write to the Free Software
|
|
Packit |
79f644 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* The Totem project hereby grant permission for non-gpl compatible GStreamer
|
|
Packit |
79f644 |
* plugins to be used and distributed together with GStreamer and Totem. This
|
|
Packit |
79f644 |
* permission are above and beyond the permissions granted by the GPL license
|
|
Packit |
79f644 |
* Totem is covered by.
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
* Monday 7th February 2005: Christian Schaller: Add exception clause.
|
|
Packit |
79f644 |
* See license_change file for details.
|
|
Packit |
79f644 |
*
|
|
Packit |
79f644 |
*/
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
#include "config.h"
|
|
Packit |
79f644 |
#include <glib/gi18n-lib.h>
|
|
Packit |
79f644 |
#include "totem-subtitle-encoding.h"
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
typedef enum
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_CURRENT_LOCALE,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_8859_6,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_IBM_864,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_MAC_ARABIC,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_WINDOWS_1256,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ARMSCII_8,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_8859_4,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_8859_13,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_WINDOWS_1257,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_8859_14,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_8859_2,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_IBM_852,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_MAC_CE,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_WINDOWS_1250,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_GB18030,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_GB2312,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_GBK,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_HZ,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_BIG5,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_BIG5_HKSCS,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_EUC_TW,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_MAC_CROATIAN,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_8859_5,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_IBM_855,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_IR_111,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_KOI8_R,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_MAC_CYRILLIC,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_WINDOWS_1251,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_CP_866,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_MAC_UKRAINIAN,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_KOI8_U,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_GEOSTD8,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_8859_7,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_MAC_GREEK,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_WINDOWS_1253,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_MAC_GUJARATI,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_MAC_GURMUKHI,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_8859_8_I,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_IBM_862,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_MAC_HEBREW,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_WINDOWS_1255,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_8859_8,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_MAC_DEVANAGARI,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_MAC_ICELANDIC,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_EUC_JP,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_2022_JP,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_SHIFT_JIS,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_EUC_KR,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_2022_KR,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_JOHAB,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_UHC,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_8859_10,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_MAC_FARSI,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_8859_16,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_MAC_ROMANIAN,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_8859_3,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_TIS_620,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_8859_9,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_IBM_857,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_MAC_TURKISH,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_WINDOWS_1254,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_UTF_7,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_UTF_8,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_UTF_16,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_UCS_2,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_UCS_4,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_8859_1,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_ISO_8859_15,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_IBM_850,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_MAC_ROMAN,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_WINDOWS_1252,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_TCVN,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_VISCII,
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_WINDOWS_1258,
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
SUBTITLE_ENCODING_LAST
|
|
Packit |
79f644 |
} SubtitleEncodingIndex;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
typedef struct
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
int index;
|
|
Packit |
79f644 |
gboolean valid;
|
|
Packit |
79f644 |
const char *charset;
|
|
Packit |
79f644 |
const char *name;
|
|
Packit |
79f644 |
} SubtitleEncoding;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static SubtitleEncoding encodings[] = {
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_CURRENT_LOCALE, TRUE,
|
|
Packit |
79f644 |
NULL, N_("Current Locale")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_8859_6, FALSE,
|
|
Packit |
79f644 |
"ISO-8859-6", N_("Arabic")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_IBM_864, FALSE,
|
|
Packit |
79f644 |
"IBM864", N_("Arabic")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_MAC_ARABIC, FALSE,
|
|
Packit |
79f644 |
"MAC_ARABIC", N_("Arabic")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_WINDOWS_1256, FALSE,
|
|
Packit |
79f644 |
"WINDOWS-1256", N_("Arabic")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ARMSCII_8, FALSE,
|
|
Packit |
79f644 |
"ARMSCII-8", N_("Armenian")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_8859_4, FALSE,
|
|
Packit |
79f644 |
"ISO-8859-4", N_("Baltic")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_8859_13, FALSE,
|
|
Packit |
79f644 |
"ISO-8859-13", N_("Baltic")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_WINDOWS_1257, FALSE,
|
|
Packit |
79f644 |
"WINDOWS-1257", N_("Baltic")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_8859_14, FALSE,
|
|
Packit |
79f644 |
"ISO-8859-14", N_("Celtic")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_8859_2, FALSE,
|
|
Packit |
79f644 |
"ISO-8859-2", N_("Central European")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_IBM_852, FALSE,
|
|
Packit |
79f644 |
"IBM852", N_("Central European")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_MAC_CE, FALSE,
|
|
Packit |
79f644 |
"MAC_CE", N_("Central European")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_WINDOWS_1250, FALSE,
|
|
Packit |
79f644 |
"WINDOWS-1250", N_("Central European")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_GB18030, FALSE,
|
|
Packit |
79f644 |
"GB18030", N_("Chinese Simplified")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_GB2312, FALSE,
|
|
Packit |
79f644 |
"GB2312", N_("Chinese Simplified")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_GBK, FALSE,
|
|
Packit |
79f644 |
"GBK", N_("Chinese Simplified")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_HZ, FALSE,
|
|
Packit |
79f644 |
"HZ", N_("Chinese Simplified")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_BIG5, FALSE,
|
|
Packit |
79f644 |
"BIG5", N_("Chinese Traditional")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_BIG5_HKSCS, FALSE,
|
|
Packit |
79f644 |
"BIG5-HKSCS", N_("Chinese Traditional")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_EUC_TW, FALSE,
|
|
Packit |
79f644 |
"EUC-TW", N_("Chinese Traditional")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_MAC_CROATIAN, FALSE,
|
|
Packit |
79f644 |
"MAC_CROATIAN", N_("Croatian")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_8859_5, FALSE,
|
|
Packit |
79f644 |
"ISO-8859-5", N_("Cyrillic")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_IBM_855, FALSE,
|
|
Packit |
79f644 |
"IBM855", N_("Cyrillic")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_IR_111, FALSE,
|
|
Packit |
79f644 |
"ISO-IR-111", N_("Cyrillic")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_KOI8_R, FALSE,
|
|
Packit |
79f644 |
"KOI8-R", N_("Cyrillic")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_MAC_CYRILLIC, FALSE,
|
|
Packit |
79f644 |
"MAC-CYRILLIC", N_("Cyrillic")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_WINDOWS_1251, FALSE,
|
|
Packit |
79f644 |
"WINDOWS-1251", N_("Cyrillic")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_CP_866, FALSE,
|
|
Packit |
79f644 |
"CP866", N_("Cyrillic/Russian")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_MAC_UKRAINIAN, FALSE,
|
|
Packit |
79f644 |
"MAC_UKRAINIAN", N_("Cyrillic/Ukrainian")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_KOI8_U, FALSE,
|
|
Packit |
79f644 |
"KOI8-U", N_("Cyrillic/Ukrainian")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_GEOSTD8, FALSE,
|
|
Packit |
79f644 |
"GEORGIAN-PS", N_("Georgian")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_8859_7, FALSE,
|
|
Packit |
79f644 |
"ISO-8859-7", N_("Greek")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_MAC_GREEK, FALSE,
|
|
Packit |
79f644 |
"MAC_GREEK", N_("Greek")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_WINDOWS_1253, FALSE,
|
|
Packit |
79f644 |
"WINDOWS-1253", N_("Greek")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_MAC_GUJARATI, FALSE,
|
|
Packit |
79f644 |
"MAC_GUJARATI", N_("Gujarati")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_MAC_GURMUKHI, FALSE,
|
|
Packit |
79f644 |
"MAC_GURMUKHI", N_("Gurmukhi")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_8859_8_I, FALSE,
|
|
Packit |
79f644 |
"ISO-8859-8-I", N_("Hebrew")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_IBM_862, FALSE,
|
|
Packit |
79f644 |
"IBM862", N_("Hebrew")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_MAC_HEBREW, FALSE,
|
|
Packit |
79f644 |
"MAC_HEBREW", N_("Hebrew")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_WINDOWS_1255, FALSE,
|
|
Packit |
79f644 |
"WINDOWS-1255", N_("Hebrew")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_8859_8, FALSE,
|
|
Packit |
79f644 |
"ISO-8859-8", N_("Hebrew Visual")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_MAC_DEVANAGARI, FALSE,
|
|
Packit |
79f644 |
"MAC_DEVANAGARI", N_("Hindi")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_MAC_ICELANDIC, FALSE,
|
|
Packit |
79f644 |
"MAC_ICELANDIC", N_("Icelandic")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_EUC_JP, FALSE,
|
|
Packit |
79f644 |
"EUC-JP", N_("Japanese")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_2022_JP, FALSE,
|
|
Packit |
79f644 |
"ISO2022JP", N_("Japanese")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_SHIFT_JIS, FALSE,
|
|
Packit |
79f644 |
"SHIFT-JIS", N_("Japanese")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_EUC_KR, FALSE,
|
|
Packit |
79f644 |
"EUC-KR", N_("Korean")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_2022_KR, FALSE,
|
|
Packit |
79f644 |
"ISO2022KR", N_("Korean")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_JOHAB, FALSE,
|
|
Packit |
79f644 |
"JOHAB", N_("Korean")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_UHC, FALSE,
|
|
Packit |
79f644 |
"UHC", N_("Korean")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_8859_10, FALSE,
|
|
Packit |
79f644 |
"ISO-8859-10", N_("Nordic")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_MAC_FARSI, FALSE,
|
|
Packit |
79f644 |
"MAC_FARSI", N_("Persian")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_8859_16, FALSE,
|
|
Packit |
79f644 |
"ISO-8859-16", N_("Romanian")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_MAC_ROMANIAN, FALSE,
|
|
Packit |
79f644 |
"MAC_ROMANIAN", N_("Romanian")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_8859_3, FALSE,
|
|
Packit |
79f644 |
"ISO-8859-3", N_("South European")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_TIS_620, FALSE,
|
|
Packit |
79f644 |
"TIS-620", N_("Thai")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_8859_9, FALSE,
|
|
Packit |
79f644 |
"ISO-8859-9", N_("Turkish")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_IBM_857, FALSE,
|
|
Packit |
79f644 |
"IBM857", N_("Turkish")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_MAC_TURKISH, FALSE,
|
|
Packit |
79f644 |
"MAC_TURKISH", N_("Turkish")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_WINDOWS_1254, FALSE,
|
|
Packit |
79f644 |
"WINDOWS-1254", N_("Turkish")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_UTF_7, FALSE,
|
|
Packit |
79f644 |
"UTF-7", N_("Unicode")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_UTF_8, FALSE,
|
|
Packit |
79f644 |
"UTF-8", N_("Unicode")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_UTF_16, FALSE,
|
|
Packit |
79f644 |
"UTF-16", N_("Unicode")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_UCS_2, FALSE,
|
|
Packit |
79f644 |
"UCS-2", N_("Unicode")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_UCS_4, FALSE,
|
|
Packit |
79f644 |
"UCS-4", N_("Unicode")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_8859_1, FALSE,
|
|
Packit |
79f644 |
"ISO-8859-1", N_("Western")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_ISO_8859_15, FALSE,
|
|
Packit |
79f644 |
"ISO-8859-15", N_("Western")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_IBM_850, FALSE,
|
|
Packit |
79f644 |
"IBM850", N_("Western")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_MAC_ROMAN, FALSE,
|
|
Packit |
79f644 |
"MAC_ROMAN", N_("Western")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_WINDOWS_1252, FALSE,
|
|
Packit |
79f644 |
"WINDOWS-1252", N_("Western")},
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_TCVN, FALSE,
|
|
Packit |
79f644 |
"TCVN", N_("Vietnamese")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_VISCII, FALSE,
|
|
Packit |
79f644 |
"VISCII", N_("Vietnamese")},
|
|
Packit |
79f644 |
{SUBTITLE_ENCODING_WINDOWS_1258, FALSE,
|
|
Packit |
79f644 |
"WINDOWS-1258", N_("Vietnamese")}
|
|
Packit |
79f644 |
};
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static const SubtitleEncoding *
|
|
Packit |
79f644 |
find_encoding_by_charset (const char *charset)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
int i;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
i = 1; /* skip current locale */
|
|
Packit |
79f644 |
while (i < SUBTITLE_ENCODING_LAST) {
|
|
Packit |
79f644 |
if (strcasecmp (charset, encodings[i].charset) == 0)
|
|
Packit |
79f644 |
return &encodings[i];
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
++i;
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (strcasecmp (charset,
|
|
Packit |
79f644 |
encodings[SUBTITLE_ENCODING_CURRENT_LOCALE].charset) == 0)
|
|
Packit |
79f644 |
return &encodings[SUBTITLE_ENCODING_CURRENT_LOCALE];
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
return NULL;
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
subtitle_encoding_init (void)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
int i;
|
|
Packit |
79f644 |
gsize bytes_read, bytes_written;
|
|
Packit |
79f644 |
gchar *converted;
|
|
Packit |
79f644 |
gchar ascii_sample[96];
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_get_charset ((const char **)
|
|
Packit |
79f644 |
&encodings[SUBTITLE_ENCODING_CURRENT_LOCALE].charset);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_assert (G_N_ELEMENTS (encodings) == SUBTITLE_ENCODING_LAST);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* Initialize the sample text with all of the printing ASCII characters
|
|
Packit |
79f644 |
* from space (32) to the tilde (126), 95 in all. */
|
|
Packit |
79f644 |
for (i = 0; i < (int) sizeof (ascii_sample); i++)
|
|
Packit |
79f644 |
ascii_sample[i] = i + 32;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
ascii_sample[sizeof (ascii_sample) - 1] = '\0';
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
i = 0;
|
|
Packit |
79f644 |
while (i < SUBTITLE_ENCODING_LAST) {
|
|
Packit |
79f644 |
bytes_read = 0;
|
|
Packit |
79f644 |
bytes_written = 0;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_assert (encodings[i].index == i);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* Translate the names */
|
|
Packit |
79f644 |
encodings[i].name = _(encodings[i].name);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* Test that the encoding is a proper superset of ASCII (which naive
|
|
Packit |
79f644 |
* apps are going to use anyway) by attempting to validate the text
|
|
Packit |
79f644 |
* using the current encoding. This also flushes out any encodings
|
|
Packit |
79f644 |
* which the underlying GIConv implementation can't support.
|
|
Packit |
79f644 |
*/
|
|
Packit |
79f644 |
converted = g_convert (ascii_sample, sizeof (ascii_sample) - 1,
|
|
Packit |
79f644 |
encodings[i].charset, encodings[i].charset,
|
|
Packit |
79f644 |
&bytes_read, &bytes_written, NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* The encoding is only valid if ASCII passes through cleanly. */
|
|
Packit |
79f644 |
if (i == SUBTITLE_ENCODING_CURRENT_LOCALE)
|
|
Packit |
79f644 |
encodings[i].valid = TRUE;
|
|
Packit |
79f644 |
else
|
|
Packit |
79f644 |
encodings[i].valid =
|
|
Packit |
79f644 |
(bytes_read == (sizeof (ascii_sample) - 1)) &&
|
|
Packit |
79f644 |
(converted != NULL) && (strcmp (converted, ascii_sample) == 0);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
#ifdef DEBUG_ENCODINGS
|
|
Packit |
79f644 |
if (!encodings[i].valid) {
|
|
Packit |
79f644 |
g_print ("Rejecting encoding %s as invalid:\n", encodings[i].charset);
|
|
Packit |
79f644 |
g_print (" input \"%s\"\n", ascii_sample);
|
|
Packit |
79f644 |
g_print (" output \"%s\"\n\n", converted ? converted : "(null)");
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
#endif
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/* Discard the converted string. */
|
|
Packit |
79f644 |
g_free (converted);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
++i;
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static int
|
|
Packit |
79f644 |
subtitle_encoding_get_index (const char *charset)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
const SubtitleEncoding *e;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
e = find_encoding_by_charset (charset);
|
|
Packit |
79f644 |
if (e != NULL)
|
|
Packit |
79f644 |
return e->index;
|
|
Packit |
79f644 |
else
|
|
Packit |
79f644 |
return SUBTITLE_ENCODING_CURRENT_LOCALE;
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static const char *
|
|
Packit |
79f644 |
subtitle_encoding_get_charset (int index_)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
const SubtitleEncoding *e;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
if (index_ >= SUBTITLE_ENCODING_LAST)
|
|
Packit |
79f644 |
e = &encodings[SUBTITLE_ENCODING_CURRENT_LOCALE];
|
|
Packit |
79f644 |
else if (index_ < SUBTITLE_ENCODING_CURRENT_LOCALE)
|
|
Packit |
79f644 |
e = &encodings[SUBTITLE_ENCODING_CURRENT_LOCALE];
|
|
Packit |
79f644 |
else if (!encodings[index_].valid)
|
|
Packit |
79f644 |
e = &encodings[SUBTITLE_ENCODING_CURRENT_LOCALE];
|
|
Packit |
79f644 |
else
|
|
Packit |
79f644 |
e = &encodings[index_];
|
|
Packit |
79f644 |
return e->charset;
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
enum
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
INDEX_COL,
|
|
Packit |
79f644 |
NAME_COL
|
|
Packit |
79f644 |
};
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static gint
|
|
Packit |
79f644 |
compare (GtkTreeModel * model, GtkTreeIter * a, GtkTreeIter * b, gpointer data)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
gchar *str_a, *str_b;
|
|
Packit |
79f644 |
gint result;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gtk_tree_model_get (model, a, NAME_COL, &str_a, -1);
|
|
Packit |
79f644 |
gtk_tree_model_get (model, b, NAME_COL, &str_b, -1);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
result = strcmp (str_a, str_b);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_free (str_a);
|
|
Packit |
79f644 |
g_free (str_b);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
return result;
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
is_encoding_sensitive (GtkCellLayout * cell_layout,
|
|
Packit |
79f644 |
GtkCellRenderer * cell,
|
|
Packit |
79f644 |
GtkTreeModel * tree_model, GtkTreeIter * iter, gpointer data)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
gboolean sensitive;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
sensitive = !gtk_tree_model_iter_has_child (tree_model, iter);
|
|
Packit |
79f644 |
g_object_set (cell, "sensitive", sensitive, NULL);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static GtkTreeModel *
|
|
Packit |
79f644 |
subtitle_encoding_create_store (void)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
gchar *label;
|
|
Packit |
79f644 |
const gchar *lastlang = "";
|
|
Packit |
79f644 |
GtkTreeIter iter, iter2;
|
|
Packit |
79f644 |
GtkTreeStore *store;
|
|
Packit |
79f644 |
int i;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
store = gtk_tree_store_new (2, G_TYPE_INT, G_TYPE_STRING);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
for (i = 0; i < SUBTITLE_ENCODING_LAST; i++) {
|
|
Packit |
79f644 |
if (encodings[i].valid) {
|
|
Packit |
79f644 |
if (strcmp (lastlang, encodings[i].name)) {
|
|
Packit |
79f644 |
lastlang = encodings[i].name;
|
|
Packit |
79f644 |
gtk_tree_store_append (store, &iter, NULL);
|
|
Packit |
79f644 |
gtk_tree_store_set (store, &iter, INDEX_COL,
|
|
Packit |
79f644 |
-1, NAME_COL, lastlang, -1);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
label = g_strdup_printf("%s (%s)", lastlang, encodings[i].charset);
|
|
Packit |
79f644 |
gtk_tree_store_append (store, &iter2, &iter);
|
|
Packit |
79f644 |
gtk_tree_store_set (store, &iter2, INDEX_COL,
|
|
Packit |
79f644 |
encodings[i].index, NAME_COL, label, -1);
|
|
Packit |
79f644 |
g_free(label);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (store),
|
|
Packit |
79f644 |
compare, NULL, NULL);
|
|
Packit |
79f644 |
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
|
|
Packit |
79f644 |
NAME_COL, GTK_SORT_ASCENDING);
|
|
Packit |
79f644 |
return GTK_TREE_MODEL (store);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
static void
|
|
Packit |
79f644 |
subtitle_encoding_combo_render (GtkComboBox * combo)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GtkCellRenderer *renderer;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
renderer = gtk_cell_renderer_text_new ();
|
|
Packit |
79f644 |
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
|
|
Packit |
79f644 |
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
|
|
Packit |
79f644 |
"text", NAME_COL, NULL);
|
|
Packit |
79f644 |
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo),
|
|
Packit |
79f644 |
renderer, is_encoding_sensitive, NULL, NULL);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
const char *
|
|
Packit |
79f644 |
totem_subtitle_encoding_get_selected (GtkComboBox * combo)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GtkTreeModel *model;
|
|
Packit |
79f644 |
GtkTreeIter iter;
|
|
Packit |
79f644 |
gint index_ = -1;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
model = gtk_combo_box_get_model (combo);
|
|
Packit |
79f644 |
if (gtk_combo_box_get_active_iter (combo, &iter)) {
|
|
Packit |
79f644 |
gtk_tree_model_get (model, &iter, INDEX_COL, &index_, -1);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
if (index_ == -1)
|
|
Packit |
79f644 |
return NULL;
|
|
Packit |
79f644 |
return subtitle_encoding_get_charset (index_);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
void
|
|
Packit |
79f644 |
totem_subtitle_encoding_set (GtkComboBox * combo, const char *encoding)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GtkTreeModel *model;
|
|
Packit |
79f644 |
GtkTreeIter iter, iter2;
|
|
Packit |
79f644 |
gint index_, i;
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
g_return_if_fail (encoding != NULL);
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
model = gtk_combo_box_get_model (combo);
|
|
Packit |
79f644 |
index_ = subtitle_encoding_get_index (encoding);
|
|
Packit |
79f644 |
gtk_tree_model_get_iter_first (model, &iter);
|
|
Packit |
79f644 |
do {
|
|
Packit |
79f644 |
if (!gtk_tree_model_iter_has_child (model, &iter))
|
|
Packit |
79f644 |
continue;
|
|
Packit |
79f644 |
if (!gtk_tree_model_iter_children (model, &iter2, &iter))
|
|
Packit |
79f644 |
continue;
|
|
Packit |
79f644 |
do {
|
|
Packit |
79f644 |
gtk_tree_model_get (model, &iter2, INDEX_COL, &i, -1);
|
|
Packit |
79f644 |
if (i == index_)
|
|
Packit |
79f644 |
break;
|
|
Packit |
79f644 |
} while (gtk_tree_model_iter_next (model, &iter2));
|
|
Packit |
79f644 |
if (i == index_)
|
|
Packit |
79f644 |
break;
|
|
Packit |
79f644 |
} while (gtk_tree_model_iter_next (model, &iter));
|
|
Packit |
79f644 |
gtk_combo_box_set_active_iter (combo, &iter2);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
void
|
|
Packit |
79f644 |
totem_subtitle_encoding_init (GtkComboBox *combo)
|
|
Packit |
79f644 |
{
|
|
Packit |
79f644 |
GtkTreeModel *model;
|
|
Packit |
79f644 |
subtitle_encoding_init ();
|
|
Packit |
79f644 |
model = subtitle_encoding_create_store ();
|
|
Packit |
79f644 |
gtk_combo_box_set_model (combo, model);
|
|
Packit |
79f644 |
g_object_unref (model);
|
|
Packit |
79f644 |
subtitle_encoding_combo_render (combo);
|
|
Packit |
79f644 |
}
|
|
Packit |
79f644 |
|
|
Packit |
79f644 |
/*
|
|
Packit |
79f644 |
* vim: sw=2 ts=8 cindent noai bs=2
|
|
Packit |
79f644 |
*/
|