#![no_std]
extern crate encoding_rs;
#[cfg(test)]
mod tests;
use encoding_rs::*;
pub fn to_encoding(code_page: u16) -> Option<&'static Encoding> {
CODE_PAGES
.iter()
.position(|&x| x == code_page)
.map(|i| ENCODINGS[i])
}
pub fn to_encoding_no_replacement(code_page: u16) -> Option<&'static Encoding> {
let opt_encoding = to_encoding(code_page);
if opt_encoding == Some(REPLACEMENT) {
None
} else {
opt_encoding
}
}
pub fn from_encoding(encoding: &'static Encoding) -> Option<u16> {
if encoding == REPLACEMENT {
None
} else {
ENCODINGS
.iter()
.position(|&x| x == encoding)
.map(|i| CODE_PAGES[i])
}
}
static CODE_PAGES: [u16; 51] = [
65001, 1200, 1252, 1251, 936, 932, 949, 1250, 1256, 1254, 950, 874, 1255, 1253, 1257, 1258,
20932, 28592, 28605, 28597, 20866, 54936, 28595, 38598, 28594, 28596, 50221, 21866, 28603,
28593, 1201, 866, 28600, 28598, 10000, 10017, 28604, 28606, 951, 20936, 20949, 28591, 28599,
28601, 50220, 50222, 50225, 50227, 51936, 51949, 52936,
];
static ENCODINGS: [&'static Encoding; 51] = [
&UTF_8_INIT,
&UTF_16LE_INIT,
&WINDOWS_1252_INIT,
&WINDOWS_1251_INIT,
&GBK_INIT,
&SHIFT_JIS_INIT,
&EUC_KR_INIT,
&WINDOWS_1250_INIT,
&WINDOWS_1256_INIT,
&WINDOWS_1254_INIT,
&BIG5_INIT,
&WINDOWS_874_INIT,
&WINDOWS_1255_INIT,
&WINDOWS_1253_INIT,
&WINDOWS_1257_INIT,
&WINDOWS_1258_INIT,
&EUC_JP_INIT,
&ISO_8859_2_INIT,
&ISO_8859_15_INIT,
&ISO_8859_7_INIT,
&KOI8_R_INIT,
&GB18030_INIT,
&ISO_8859_5_INIT,
&ISO_8859_8_I_INIT,
&ISO_8859_4_INIT,
&ISO_8859_6_INIT,
&ISO_2022_JP_INIT,
&KOI8_U_INIT,
&ISO_8859_13_INIT,
&ISO_8859_3_INIT,
&UTF_16BE_INIT,
&IBM866_INIT,
&ISO_8859_10_INIT,
&ISO_8859_8_INIT,
&MACINTOSH_INIT,
&X_MAC_CYRILLIC_INIT,
&ISO_8859_14_INIT,
&ISO_8859_16_INIT,
&BIG5_INIT,
&GBK_INIT,
&EUC_KR_INIT,
&WINDOWS_1252_INIT,
&WINDOWS_1254_INIT,
&WINDOWS_874_INIT,
&ISO_2022_JP_INIT,
&ISO_2022_JP_INIT,
&REPLACEMENT_INIT,
&REPLACEMENT_INIT,
&GBK_INIT,
&EUC_KR_INIT,
&REPLACEMENT_INIT,
];