refactor: impl From<TextScriptEncoding> for &Encoding

This commit is contained in:
poly000 2024-03-24 03:26:34 +08:00
parent 07174e3d1c
commit ef1b819881
No known key found for this signature in database
2 changed files with 43 additions and 37 deletions

View File

@ -65,43 +65,7 @@ pub fn put_string(buffer: &mut Vec<u8>, out: &mut Vec<u8>, encoding: TextScriptE
let mut tmp_buf = Vec::new();
let encoding = match encoding {
TextScriptEncoding::ShiftJIS => encoding_rs::SHIFT_JIS,
TextScriptEncoding::UTF8 => encoding_rs::UTF_8,
TextScriptEncoding::UTF16BE => encoding_rs::UTF_16BE,
TextScriptEncoding::UTF16LE => encoding_rs::UTF_16LE,
TextScriptEncoding::ISO_2022_JP => encoding_rs::ISO_2022_JP,
TextScriptEncoding::ISO_8859_2 => encoding_rs::ISO_8859_2,
TextScriptEncoding::ISO_8859_3 => encoding_rs::ISO_8859_3,
TextScriptEncoding::ISO_8859_4 => encoding_rs::ISO_8859_4,
TextScriptEncoding::ISO_8859_5 => encoding_rs::ISO_8859_5,
TextScriptEncoding::ISO_8859_6 => encoding_rs::ISO_8859_6,
TextScriptEncoding::ISO_8859_7 => encoding_rs::ISO_8859_7,
TextScriptEncoding::ISO_8859_8 => encoding_rs::ISO_8859_8,
TextScriptEncoding::ISO_8859_8_I => encoding_rs::ISO_8859_8_I,
TextScriptEncoding::ISO_8859_10 => encoding_rs::ISO_8859_10,
TextScriptEncoding::ISO_8859_13 => encoding_rs::ISO_8859_13,
TextScriptEncoding::ISO_8859_14 => encoding_rs::ISO_8859_14,
TextScriptEncoding::ISO_8859_15 => encoding_rs::ISO_8859_15,
TextScriptEncoding::ISO_8859_16 => encoding_rs::ISO_8859_16,
TextScriptEncoding::KOI8_R => encoding_rs::KOI8_R,
TextScriptEncoding::KOI8_U => encoding_rs::KOI8_U,
TextScriptEncoding::MACINTOSH => encoding_rs::MACINTOSH,
TextScriptEncoding::EUC_JP => encoding_rs::EUC_JP,
TextScriptEncoding::EUC_KR => encoding_rs::EUC_KR,
TextScriptEncoding::GB18030 => encoding_rs::GB18030,
TextScriptEncoding::GBK => encoding_rs::GBK,
TextScriptEncoding::BIG5 => encoding_rs::BIG5,
TextScriptEncoding::WINDOWS_1250 => encoding_rs::WINDOWS_1250,
TextScriptEncoding::WINDOWS_1251 => encoding_rs::WINDOWS_1251,
TextScriptEncoding::WINDOWS_1252 => encoding_rs::WINDOWS_1252,
TextScriptEncoding::WINDOWS_1253 => encoding_rs::WINDOWS_1253,
TextScriptEncoding::WINDOWS_1254 => encoding_rs::WINDOWS_1254,
TextScriptEncoding::WINDOWS_1255 => encoding_rs::WINDOWS_1255,
TextScriptEncoding::WINDOWS_1256 => encoding_rs::WINDOWS_1256,
TextScriptEncoding::WINDOWS_1257 => encoding_rs::WINDOWS_1257,
TextScriptEncoding::WINDOWS_1258 => encoding_rs::WINDOWS_1258,
};
let encoding: &encoding_rs::Encoding = encoding.into();
let decoded_text = encoding.decode_without_bom_handling(&buffer).0;
for chr in decoded_text.chars() {

View File

@ -134,6 +134,48 @@ impl From<&str> for TextScriptEncoding {
}
}
impl From<TextScriptEncoding> for &'static encoding_rs::Encoding {
fn from(value: TextScriptEncoding) -> Self {
match value {
TextScriptEncoding::ShiftJIS => encoding_rs::SHIFT_JIS,
TextScriptEncoding::UTF8 => encoding_rs::UTF_8,
TextScriptEncoding::UTF16BE => encoding_rs::UTF_16BE,
TextScriptEncoding::UTF16LE => encoding_rs::UTF_16LE,
TextScriptEncoding::ISO_2022_JP => encoding_rs::ISO_2022_JP,
TextScriptEncoding::ISO_8859_2 => encoding_rs::ISO_8859_2,
TextScriptEncoding::ISO_8859_3 => encoding_rs::ISO_8859_3,
TextScriptEncoding::ISO_8859_4 => encoding_rs::ISO_8859_4,
TextScriptEncoding::ISO_8859_5 => encoding_rs::ISO_8859_5,
TextScriptEncoding::ISO_8859_6 => encoding_rs::ISO_8859_6,
TextScriptEncoding::ISO_8859_7 => encoding_rs::ISO_8859_7,
TextScriptEncoding::ISO_8859_8 => encoding_rs::ISO_8859_8,
TextScriptEncoding::ISO_8859_8_I => encoding_rs::ISO_8859_8_I,
TextScriptEncoding::ISO_8859_10 => encoding_rs::ISO_8859_10,
TextScriptEncoding::ISO_8859_13 => encoding_rs::ISO_8859_13,
TextScriptEncoding::ISO_8859_14 => encoding_rs::ISO_8859_14,
TextScriptEncoding::ISO_8859_15 => encoding_rs::ISO_8859_15,
TextScriptEncoding::ISO_8859_16 => encoding_rs::ISO_8859_16,
TextScriptEncoding::KOI8_R => encoding_rs::KOI8_R,
TextScriptEncoding::KOI8_U => encoding_rs::KOI8_U,
TextScriptEncoding::MACINTOSH => encoding_rs::MACINTOSH,
TextScriptEncoding::EUC_JP => encoding_rs::EUC_JP,
TextScriptEncoding::EUC_KR => encoding_rs::EUC_KR,
TextScriptEncoding::GB18030 => encoding_rs::GB18030,
TextScriptEncoding::GBK => encoding_rs::GBK,
TextScriptEncoding::BIG5 => encoding_rs::BIG5,
TextScriptEncoding::WINDOWS_1250 => encoding_rs::WINDOWS_1250,
TextScriptEncoding::WINDOWS_1251 => encoding_rs::WINDOWS_1251,
TextScriptEncoding::WINDOWS_1252 => encoding_rs::WINDOWS_1252,
TextScriptEncoding::WINDOWS_1253 => encoding_rs::WINDOWS_1253,
TextScriptEncoding::WINDOWS_1254 => encoding_rs::WINDOWS_1254,
TextScriptEncoding::WINDOWS_1255 => encoding_rs::WINDOWS_1255,
TextScriptEncoding::WINDOWS_1256 => encoding_rs::WINDOWS_1256,
TextScriptEncoding::WINDOWS_1257 => encoding_rs::WINDOWS_1257,
TextScriptEncoding::WINDOWS_1258 => encoding_rs::WINDOWS_1258,
}
}
}
impl TextScriptEncoding {
pub fn invalid_encoding(encoding: TextScriptEncoding, state: &SharedGameState) -> bool {
if state.loc.encoding.as_ref().is_some_and(|s| TextScriptEncoding::from(s.as_str()) == encoding) {