Remove encoding detection according to LANG
This code is left over from the 90's, and should not get used anymore. In all relevant cases we will use UTF-8 or iconv nowadays. Change-Id: Ie3776f671de33f782fa77f6359bf6e105bd9c1b8 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
5af9ecafd9
commit
e41129c859
@ -127,109 +127,6 @@ static bool nameMatch(const QByteArray &name, const QByteArray &test)
|
||||
}
|
||||
|
||||
#if !defined(Q_OS_WIN32) && !defined(Q_OS_WINCE)
|
||||
|
||||
/* locale names mostly copied from XFree86 */
|
||||
static const char * const iso8859_2locales[] = {
|
||||
"croatian", "cs", "cs_CS", "cs_CZ","cz", "cz_CZ", "czech", "hr",
|
||||
"hr_HR", "hu", "hu_HU", "hungarian", "pl", "pl_PL", "polish", "ro",
|
||||
"ro_RO", "rumanian", "serbocroatian", "sh", "sh_SP", "sh_YU", "sk",
|
||||
"sk_SK", "sl", "sl_CS", "sl_SI", "slovak", "slovene", "sr_SP", 0 };
|
||||
|
||||
static const char * const iso8859_3locales[] = {
|
||||
"eo", 0 };
|
||||
|
||||
static const char * const iso8859_4locales[] = {
|
||||
"ee", "ee_EE", 0 };
|
||||
|
||||
static const char * const iso8859_5locales[] = {
|
||||
"mk", "mk_MK", "sp", "sp_YU", 0 };
|
||||
|
||||
static const char * const cp_1251locales[] = {
|
||||
"be", "be_BY", "bg", "bg_BG", "bulgarian", 0 };
|
||||
|
||||
static const char * const pt_154locales[] = {
|
||||
"ba_RU", "ky", "ky_KG", "kk", "kk_KZ", 0 };
|
||||
|
||||
static const char * const iso8859_6locales[] = {
|
||||
"ar_AA", "ar_SA", "arabic", 0 };
|
||||
|
||||
static const char * const iso8859_7locales[] = {
|
||||
"el", "el_GR", "greek", 0 };
|
||||
|
||||
static const char * const iso8859_8locales[] = {
|
||||
"hebrew", "he", "he_IL", "iw", "iw_IL", 0 };
|
||||
|
||||
static const char * const iso8859_9locales[] = {
|
||||
"tr", "tr_TR", "turkish", 0 };
|
||||
|
||||
static const char * const iso8859_13locales[] = {
|
||||
"lt", "lt_LT", "lv", "lv_LV", 0 };
|
||||
|
||||
static const char * const iso8859_15locales[] = {
|
||||
"et", "et_EE",
|
||||
// Euro countries
|
||||
"br_FR", "ca_ES", "de", "de_AT", "de_BE", "de_DE", "de_LU", "en_IE",
|
||||
"es", "es_ES", "eu_ES", "fi", "fi_FI", "finnish", "fr", "fr_FR",
|
||||
"fr_BE", "fr_LU", "french", "ga_IE", "gl_ES", "it", "it_IT", "oc_FR",
|
||||
"nl", "nl_BE", "nl_NL", "pt", "pt_PT", "sv_FI", "wa_BE",
|
||||
0 };
|
||||
|
||||
static const char * const koi8_ulocales[] = {
|
||||
"uk", "uk_UA", "ru_UA", "ukrainian", 0 };
|
||||
|
||||
static const char * const tis_620locales[] = {
|
||||
"th", "th_TH", "thai", 0 };
|
||||
|
||||
// static const char * const tcvnlocales[] = {
|
||||
// "vi", "vi_VN", 0 };
|
||||
|
||||
static bool try_locale_list(const char * const locale[], const QByteArray &lang)
|
||||
{
|
||||
int i;
|
||||
for(i=0; locale[i] && lang != locale[i]; i++)
|
||||
;
|
||||
return locale[i] != 0;
|
||||
}
|
||||
|
||||
// For the probably_koi8_locales we have to look. the standard says
|
||||
// these are 8859-5, but almost all Russian users use KOI8-R and
|
||||
// incorrectly set $LANG to ru_RU. We'll check tolower() to see what
|
||||
// it thinks ru_RU means.
|
||||
|
||||
// If you read the history, it seems that many Russians blame ISO and
|
||||
// Perestroika for the confusion.
|
||||
//
|
||||
// The real bug is that some programs break if the user specifies
|
||||
// ru_RU.KOI8-R.
|
||||
|
||||
static const char * const probably_koi8_rlocales[] = {
|
||||
"ru", "ru_SU", "ru_RU", "russian", 0 };
|
||||
|
||||
static QTextCodec * ru_RU_hack(const char * i)
|
||||
{
|
||||
QTextCodec * ru_RU_codec = 0;
|
||||
|
||||
QByteArray origlocale(setlocale(LC_CTYPE, i));
|
||||
// unicode koi8r latin5 name
|
||||
// 0x044E 0xC0 0xEE CYRILLIC SMALL LETTER YU
|
||||
// 0x042E 0xE0 0xCE CYRILLIC CAPITAL LETTER YU
|
||||
int latin5 = tolower(0xCE);
|
||||
int koi8r = tolower(0xE0);
|
||||
if (koi8r == 0xC0 && latin5 != 0xEE) {
|
||||
ru_RU_codec = QTextCodec::codecForName("KOI8-R");
|
||||
} else if (koi8r != 0xC0 && latin5 == 0xEE) {
|
||||
ru_RU_codec = QTextCodec::codecForName("ISO 8859-5");
|
||||
} else {
|
||||
// something else again... let's assume... *throws dice*
|
||||
ru_RU_codec = QTextCodec::codecForName("KOI8-R");
|
||||
qWarning("QTextCodec: Using KOI8-R, probe failed (%02x %02x %s)",
|
||||
koi8r, latin5, i);
|
||||
}
|
||||
setlocale(LC_CTYPE, origlocale.constData());
|
||||
|
||||
return ru_RU_codec;
|
||||
}
|
||||
|
||||
static QTextCodec *checkForCodec(const QByteArray &name) {
|
||||
QTextCodec *c = QTextCodec::codecForName(name);
|
||||
if (!c) {
|
||||
@ -337,45 +234,6 @@ static QTextCodec *setupLocaleMapper()
|
||||
// 5. "@euro"
|
||||
if ((!globalData->codecForLocale && ctype.contains("@euro")) || lang.contains("@euro"))
|
||||
globalData->codecForLocale = checkForCodec("ISO 8859-15");
|
||||
|
||||
// 6. guess locale from ctype unless ctype is "C"
|
||||
// 7. guess locale from lang
|
||||
const QByteArray &try_by_name = (!ctype.isEmpty() && ctype != "C") ? lang : ctype;
|
||||
|
||||
// Now do the guessing.
|
||||
if (!lang.isEmpty() && !globalData->codecForLocale && !try_by_name.isEmpty()) {
|
||||
if (try_locale_list(iso8859_15locales, lang))
|
||||
globalData->codecForLocale = QTextCodec::codecForName("ISO 8859-15");
|
||||
else if (try_locale_list(iso8859_2locales, lang))
|
||||
globalData->codecForLocale = QTextCodec::codecForName("ISO 8859-2");
|
||||
else if (try_locale_list(iso8859_3locales, lang))
|
||||
globalData->codecForLocale = QTextCodec::codecForName("ISO 8859-3");
|
||||
else if (try_locale_list(iso8859_4locales, lang))
|
||||
globalData->codecForLocale = QTextCodec::codecForName("ISO 8859-4");
|
||||
else if (try_locale_list(iso8859_5locales, lang))
|
||||
globalData->codecForLocale = QTextCodec::codecForName("ISO 8859-5");
|
||||
else if (try_locale_list(iso8859_6locales, lang))
|
||||
globalData->codecForLocale = QTextCodec::codecForName("ISO 8859-6");
|
||||
else if (try_locale_list(iso8859_7locales, lang))
|
||||
globalData->codecForLocale = QTextCodec::codecForName("ISO 8859-7");
|
||||
else if (try_locale_list(iso8859_8locales, lang))
|
||||
globalData->codecForLocale = QTextCodec::codecForName("ISO 8859-8-I");
|
||||
else if (try_locale_list(iso8859_9locales, lang))
|
||||
globalData->codecForLocale = QTextCodec::codecForName("ISO 8859-9");
|
||||
else if (try_locale_list(iso8859_13locales, lang))
|
||||
globalData->codecForLocale = QTextCodec::codecForName("ISO 8859-13");
|
||||
else if (try_locale_list(tis_620locales, lang))
|
||||
globalData->codecForLocale = QTextCodec::codecForName("ISO 8859-11");
|
||||
else if (try_locale_list(koi8_ulocales, lang))
|
||||
globalData->codecForLocale = QTextCodec::codecForName("KOI8-U");
|
||||
else if (try_locale_list(cp_1251locales, lang))
|
||||
globalData->codecForLocale = QTextCodec::codecForName("CP 1251");
|
||||
else if (try_locale_list(pt_154locales, lang))
|
||||
globalData->codecForLocale = QTextCodec::codecForName("PT 154");
|
||||
else if (try_locale_list(probably_koi8_rlocales, lang))
|
||||
globalData->codecForLocale = ru_RU_hack(lang.constData());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// If everything failed, we default to 8859-1
|
||||
|
Loading…
Reference in New Issue
Block a user