/***************************************************************************
 *   Copyright (C) 2004-2007 by Georgy Yunaev, gyunaev@ulduzsoft.com       *
 *   Please do not use email address above for bug reports; see            *
 *   the README file                                                       *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program 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 General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.             *
 ***************************************************************************/

#include "libchmfileimpl.h"
#include "libchmtextencoding.h"

static const LCHMTextEncoding text_encoding_table [] = 
{
	{	"Afrikaans",0,			0x0436,	1252,	0,		"CP1252"	},
	{	"Albanian",	0,			0x041C,	1250,	238,	"CP1250"	},
	{	"Arabic",	"Algeria",	0x1401,	1256,	0,		"CP1256"	},
	{	"Arabic",	"Bahrain",	0x3C01,	1256,	0,		"CP1256"	},
	{	"Arabic",	"Egypt",	0x0C01,	1256,	0,		"CP1256"	},
	{	"Arabic",	"Iraq",		0x0801,	1256,	0,		"CP1256"	},
	{	"Arabic",	"Jordan",	0x2C01,	1256,	0,		"CP1256"	},
	{	"Arabic",	"Kuwait",	0x3401,	1256,	0,		"CP1256"	},
	{	"Arabic",	"Lebanon",	0x3001,	1256,	0,		"CP1256"	},
	{	"Arabic",	"Libya",	0x1001,	1256,	0,		"CP1256"	},
	{	"Arabic",	"Morocco",	0x1801,	1256,	0,		"CP1256"	},
	{	"Arabic",	"Oman",		0x2001,	1256,	0,		"CP1256"	},
	{	"Arabic",	"Qatar",	0x4001,	1256,	0,		"CP1256"	},
	{	"Arabic",	"Saudi Arabia",	0x0401,	1256,	0,	"CP1256"	},
	{	"Arabic",	"Syria",	0x2801,	1256,	0,		"CP1256"	},
	{	"Arabic",	"Tunisia",	0x1C01,	1256,	0,		"CP1256"	},
	{	"Arabic",	"United Arab Emirates",	0x3801,	1256,	178,	"CP1256"	},
	{	"Arabic",	"Yemen",	0x2401,	1256,	0,		"CP1256"	},
	{	"Armenian",	0,			0x042B,	0,		0,		"Latin1"	},
	{	"Azeri",	"Cyrillic",	0x082C,	1251,	0,		"CP1251"	},
	{	"Azeri",	"Latin",	0x042C,	1254,	162,	"CP1254"	},
	{	"Basque",	0,			0x042D,	1252,	0,		"CP1252"	},
	{	"Belarusian",	0,		0x0423,	1251,	0,		"CP1251"	},
	{	"Bulgarian",	0,		0x0402,	1251,	0,		"CP1251"	},
	{	"Catalan",	0,	0x0403,	1252,	0,	"CP1252"	},
	{	"Chinese",	"China",	0x0804,	936,	134,	"GBK"		},
	{	"Chinese",	"Hong Kong SAR",	0x0C04,	950,	136,	"Big5"	},
	{	"Chinese",	"Macau SAR",	0x1404,	950,	136,	"Big5"	},
	{	"Chinese",	"Singapore",	0x1004,	936,	134,	"GB2313"	},
	{	"Chinese",	"Taiwan",	0x0404,	950,	136,	"Big5"	}, // traditional
	{	"Chinese",	"Taiwan - Big5-HKSCS",	0x0404,	950,	136,	"Big5-HKSCS"	},
	{	"Chinese",	"Taiwan - GB18030",	0x0404,	950,	136,	"GB18030"	},
	{	"Croatian",	0,	0x041A,	1250,	238,	"CP1250"	},
	{	"Czech",	0,	0x0405,	1250,	238,	"CP1250"	},
	{	"Danish",	0,	0x0406,	1252,	0,	"CP1252"	},
	{	"Dutch",	"Belgium",	0x0813,	1252,	0,	"CP1252"	},
	{	"Dutch",	"The Netherlands",	0x0413,	1252,	0,	"CP1252"	},
	{	"English",	"Australia",	0x0C09,	1252,	0,	"CP1252"	},
	{	"English",	"Belize",	0x2809,	1252,	0,	"CP1252"	},
	{	"English",	"Canada",	0x1009,	1252,	0,	"CP1252"	},
	{	"English",	"Caribbean",	0x2409,	1252,	0,	"CP1252"	},
	{	"English",	"Ireland",	0x1809,	1252,	0,	"CP1252"	},
	{	"English",	"Jamaica",	0x2009,	1252,	0,	"CP1252"	},
	{	"English",	"New Zealand",	0x1409,	1252,	0,	"CP1252"	},
	{	"English",	"Phillippines",	0x3409,	1252,	0,	"CP1252"	},
	{	"English",	"South Africa",	0x1C09,	1252,	0,	"CP1252"	},
	{	"English",	"Trinidad",	0x2C09,	1252,	0,	"CP1252"	},
	{	"English",	"United Kingdom",	0x0809,	1252,	0,	"CP1252"	},
	{	"English",	"United States",	0x0409,	1252,	0,	"CP1252"	},
	{	"Estonian",	0,	0x0425,	1257,	186,	"CP1257"	},
	{	"FYRO Macedonian",	0,	0x042F,	1251,	0,		"CP1251"	},
	{	"Faroese",	0,	0x0438,	1252,	0,	"CP1252"	},
	{	"Farsi",	0,	0x0429,	1256,	178,	"CP1256"	},
	{	"Finnish",	0,	0x040B,	1252,	0,	"CP1252"	},
	{	"French",	"Belgium",	0x080C,	1252,	0,	"CP1252"	},
	{	"French",	"Canada",	0x0C0C,	1252,	0,	"CP1252"	},
	{	"French",	"France",	0x040C,	1252,	0,	"CP1252"	},
	{	"French",	"Luxembourg",	0x140C,	1252,	0,	"CP1252"	},
	{	"French",	"Switzerland",	0x100C,	1252,	0,	"CP1252"	},
	{	"German",	"Austria",	0x0C07,	1252,	0,	"CP1252"	},
	{	"German",	"Germany",	0x0407,	1252,	0,	"CP1252"	},
	{	"German",	"Liechtenstein",	0x1407,	1252,	0,	"CP1252"	},
	{	"German",	"Luxembourg",	0x1007,	1252,	0,	"CP1252"	},
	{	"German",	"Switzerland",	0x0807,	1252,	0,	"CP1252"	},
	{	"Greek",	0,	0x0408,	1253,	161,	"CP1253"	},
	{	"Hebrew",	0,	0x040D,	1255,	177,	"CP1255"	},
	{	"Hindi",	0,	0x0439,	0,	0,	"Latin1"	},
	{	"Hungarian",	0,	0x040E,	1250,	238,	"CP1250"	},
	{	"Icelandic",	0,	0x040F,	1252,	0,	"CP1252"	},
	{	"Indonesian",	0,	0x0421,	1252,	0,	"CP1252"	},
	{	"Italian",	"Italy",	0x0410,	1252,	0,	"CP1252"	},
	{	"Italian",	"Switzerland",	0x0810,	1252,	0,	"CP1252"	},
	{	"Japanese",	"Shift-JIS",	0x0411,	932,	128,	"Shift-JIS"	},
	{	"Japanese",	"JIS7",	0x0411,	932,	128,	"JIS7"	},
	{	"Japanese",	"eucJP",	0x0411,	932,	128,	"eucJP"	},
	{	"Korean",	0,	0x0412,	949,	129,	"eucKR"	},
	{	"Latvian",	0,	0x0426,	1257,	186,	"CP1257"	},
	{	"Lithuanian",	0,	0x0427,	1257,	186,	"CP1257"	},
	{	"Malay",	"Brunei",	0x083E,	1252,	0,	"CP1252"	},
	{	"Malay",	"Malaysia",	0x043E,	1252,	0,	"CP1252"	},
	{	"Maltese",	0,	0x043A,	0,	0,	"Latin1"	},
	{	"Marathi",	0,	0x044E,	0,	0,	"Latin1"	},
	{	"Norwegian",	"Bokmal",	0x0414,	1252,	0,	"CP1252"	},
	{	"Norwegian",	"Nynorsk",	0x0814,	1252,	0,	"CP1252"	},
	{	"Polish",	0,	0x0415,	1250,	238,	"CP1250"	},
	{	"Portuguese",	"Brazil",	0x0416,	1252,	0,	"CP1252"	},
	{	"Portuguese",	"Portugal",	0x0816,	1252,	0,	"CP1252"	},
	{	"Romanian",	"Romania",	0x0418,	1250,	238,	"CP1250"	},
	{	"Russian",	"Cyrillic",	0x0419,	1251,	204,	"CP1251"	},
	{	"Russian",	"KOI-8",	0x7001,	2251,	204,	"KOI8-R"	},
	{	"Russian",	"KOI-8 (TOC 1251)",	0x7002,	3251,	0,	"CP1251/KOI8-R"	},
	{	"Russian",	"Cyrillic (TOC KOI8)",	0x7003,	3251,	0,	"KOI8-R/CP1251"	},
	{	"Sanskrit",	0,	0x044F,	0,	0,	"Latin1"	},
	{	"Serbian",	"Cyrillic",	0x0C1A,	1251,	0,		"CP1251"	},
	{	"Serbian",	"Latin",	0x081A,	1250,	238,	"CP1250"	},
	{	"Setsuana",	0,	0x0432,	1252,	0,	"CP1252"	},
	{	"Slovak",	0,	0x041B,	1250,	238,	"CP1250"	},
	{	"Slovenian",	0,	0x0424,	1250,	238,	"CP1250"	},
	{	"Spanish",	"Argentina",	0x2C0A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Bolivia",	0x400A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Chile",	0x340A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Colombia",	0x240A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Costa Rica",	0x140A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Dominican Republic",	0x1C0A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Ecuador",	0x300A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"El Salvador",	0x440A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Guatemala",	0x100A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Honduras",	0x480A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Mexico",	0x080A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Nicaragua",	0x4C0A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Panama",	0x180A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Paraguay",	0x3C0A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Peru",	0x280A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Puerto Rico",	0x500A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Spain",	0x0C0A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Uruguay",	0x380A,	1252,	0,	"CP1252"	},
	{	"Spanish",	"Venezuela",	0x200A,	1252,	0,	"CP1252"	},
	{	"Swahili",	0,	0x0441,	1252,	0,	"CP1252"	},
	{	"Swedish",	"Finland",	0x081D,	1252,	0,	"CP1252"	},
	{	"Swedish",	"Sweden",	0x041D,	1252,	0,	"CP1252"	},
	{	"Tamil",	0,	0x0449,	0,	0,	"TSCII"	},
	{	"Tatar",	0,	0x0444,	1251,	204,	"CP1251"	},
	{	"Thai",	0,	0x041E,	874,	222,	"TIS-620"	},
	{	"Turkish",	0,	0x041F,	1254,	162,	"CP1254"	},
	{	"Ukrainian",	"Cyrillic",	0x0422,	1251,	0,	"CP1251"	},
	{	"Ukrainian",	"KOI-8",	0x8422,	2251,	204,	"KOI8-U"	},
	{	"Unicode",	"UTF-8",	0x7010,	0,	0,	"UTF-8"	},
	{	"Unicode",	"UTF-16",	0x7011,	0,	0,	"UTF-16"	},
	{	"Urdu",	0,	0x0420,	1256,	178,	"CP1256"	},
	{	"Uzbek",	"Cyrillic",	0x0843,	1251,	0,	"CP1251"	},
	{	"Uzbek",	"Latin",	0x0443,	1254,	162,	"CP1254"	},
	{	"Vietnamese",	0,	0x042A,	1258,	163,	"CP1258"	},
	{	"Xhosa",	0,	0x0434,	1252,	0,	"CP1252"	},
	{	"Zulu",	0,	0x0435,	1252,	0,	"CP1252"	},
	{	0,		0,	0,		0,	0,	0	}
};


const LCHMTextEncoding * LCHMFileImpl::getTextEncodingTable()
{
	return text_encoding_table;
}

const LCHMTextEncoding * LCHMFileImpl::lookupByLCID( short lcid )
{
	for ( const LCHMTextEncoding * t = text_encoding_table; t->language; t++ )
		if ( t->winlcid == lcid )
			return t;
			
	return 0;
}

/*
const LCHMTextEncoding * LCHMFileImpl::lookupByWinCharset( int charset )
{
	for ( const text_encoding_t * t = text_encoding_table; t->charset; t++ )
		if ( t->wincharset == charset )
			return t;
			
	return 0;
}
*/

int LCHMFileImpl::getEncodingIndex( const LCHMTextEncoding * enc)
{
	for ( int i = 0; text_encoding_table[i].language; i++ )
		if ( (text_encoding_table + i) == enc )
			return i;
			
	return -1;
}