1use crate::decoders;
2use crate::macros::generate_id_table;
3use crate::{Decoder, Error, Result};
4
5pub fn get_decoder(encoding_id: u16, language_id: u16) -> Result<Decoder> {
6 get_decoder_from_language_id(language_id).or(get_decoder_from_encoding_id(encoding_id))
7}
8
9fn get_decoder_from_language_id(language_id: u16) -> Result<Decoder> {
10 match LanguageId::try_from(language_id)? {
11 _ => Err(Error::UnsupportedLanguage),
12 }
13}
14
15fn get_decoder_from_encoding_id(encoding_id: u16) -> Result<Decoder> {
16 match EncodingId::try_from(encoding_id)? {
17 EncodingId::Roman => Ok(decoders::mac_roman_decode),
18 EncodingId::Japanese => Ok(decoders::shift_jis_decode),
19 EncodingId::ChineseTraditional => Ok(decoders::big5_decode),
20 EncodingId::Korean => Ok(decoders::euc_kr_decode),
21 EncodingId::Arabic => Ok(decoders::iso_8859_6_decode),
22 EncodingId::Hebrew => Ok(decoders::iso_8859_8_decode),
23 EncodingId::Greek => Ok(decoders::iso_8859_7_decode),
24 EncodingId::Russian => Ok(decoders::cyrillic_decode),
25 EncodingId::ChineseSimplified => Ok(decoders::gbk_decode),
26 _ => Err(Error::UnsupportedEncoding),
27 }
28}
29
30generate_id_table!(EncodingId, Error::UnsupportedEncoding, {
32 Roman: 0,
33 Japanese: 1,
34 ChineseTraditional: 2,
35 Korean: 3,
36 Arabic: 4,
37 Hebrew: 5,
38 Greek: 6,
39 Russian: 7,
40 RSymbol: 8,
41 Devanagari: 9,
42 Gurmukhi: 10,
43 Gujarati: 11,
44 Oriya: 12,
45 Bengali: 13,
46 Tamil: 14,
47 Telugu: 15,
48 Kannada: 16,
49 Malayalam: 17,
50 Sinhalese: 18,
51 Burmese: 19,
52 Khmer: 20,
53 Thai: 21,
54 Laotian: 22,
55 Georgian: 23,
56 Armenian: 24,
57 ChineseSimplified: 25,
58 Tibetan: 26,
59 Mongolian: 27,
60 Geez: 28,
61 Slavic: 29,
62 Vietnamese: 30,
63 Sindhi: 31,
64 Uninterpreted: 32,
65});
66
67generate_id_table! (LanguageId, Error::UnsupportedLanguage, {
69 English: 0,
70 French: 1,
71 German: 2,
72 Italian: 3,
73 Dutch: 4,
74 Swedish: 5,
75 Spanish: 6,
76 Danish: 7,
77 Portuguese: 8,
78 Norwegian: 9,
79 Hebrew: 10,
80 Japanese: 11,
81 Arabic: 12,
82 Finnish: 13,
83 Greek: 14,
84 Icelandic: 15,
85 Maltese: 16,
86 Turkish: 17,
87 Croatian: 18,
88 ChineseTraditional: 19,
89 Urdu: 20,
90 Hindi: 21,
91 Thai: 22,
92 Korean: 23,
93 Lithuanian: 24,
94 Polish: 25,
95 Hungarian: 26,
96 Estonian: 27,
97 Latvian: 28,
98 Sami: 29,
99 Faroese: 30,
100 FarsiPersian: 31,
101 Russian: 32,
102 ChineseSimplified: 33,
103 Flemish: 34,
104 IrishGaelic: 35,
105 Albanian: 36,
106 Romanian: 37,
107 Czech: 38,
108 Slovak: 39,
109 Slovenian: 40,
110 Yiddish: 41,
111 Serbian: 42,
112 Macedonian: 43,
113 Bulgarian: 44,
114 Ukrainian: 45,
115 Byelorussian: 46,
116 Uzbek: 47,
117 Kazakh: 48,
118 AzerbaijaniCyrillicScript: 49,
119 AzerbaijaniArabicScript: 50,
120 Armenian: 51,
121 Georgian: 52,
122 Moldavian: 53,
123 Kirghiz: 54,
124 Tajiki: 55,
125 Turkmen: 56,
126 MongolianMongolianScript: 57,
127 MongolianCyrillicScript: 58,
128 Pashto: 59,
129 Kurdish: 60,
130 Kashmiri: 61,
131 Sindhi: 62,
132 Tibetan: 63,
133 Nepali: 64,
134 Sanskrit: 65,
135 Marathi: 66,
136 Bengali: 67,
137 Assamese: 68,
138 Gujarati: 69,
139 Punjabi: 70,
140 Oriya: 71,
141 Malayalam: 72,
142 Kannada: 73,
143 Tamil: 74,
144 Telugu: 75,
145 Sinhalese: 76,
146 Burmese: 77,
147 Khmer: 78,
148 Lao: 79,
149 Vietnamese: 80,
150 Indonesian: 81,
151 Tagalog: 82,
152 MalayRomanScript: 83,
153 MalayArabicScript: 84,
154 Amharic: 85,
155 Tigrinya: 86,
156 Galla: 87,
157 Somali: 88,
158 Swahili: 89,
159 KinyarwandaRuanda: 90,
160 Rundi: 91,
161 NyanjaChewa: 92,
162 Malagasy: 93,
163 Esperanto: 94,
164 Welsh: 128,
165 Basque: 129,
166 Catalan: 130,
167 Latin: 131,
168 Quechua: 132,
169 Guarani: 133,
170 Aymara: 134,
171 Tatar: 135,
172 Uighur: 136,
173 Dzongkha: 137,
174 JavaneseRomanScript: 138,
175 SundaneseRomanScript: 139,
176 Galician: 140,
177 Afrikaans: 141,
178 Breton: 142,
179 Inuktitut: 143,
180 ScottishGaelic: 144,
181 ManxGaelic: 145,
182 IrishGaelicWithDotAbove: 146,
183 Tongan: 147,
184 GreekPolytonic: 148,
185 Greenlandic: 149,
186 AzerbaijaniRomanScript: 150,
187});