rename character set and rename methods

This commit is contained in:
Henry Schimke
2023-03-04 11:47:39 -06:00
parent c81c6578d0
commit 15859b9f10
29 changed files with 329 additions and 363 deletions

View File

@@ -28,7 +28,7 @@ use std::collections::HashMap;
use crate::common::StringUtils;
use super::CharacterSetECI;
use super::CharacterSet;
#[test]
fn test_random() {
@@ -39,7 +39,7 @@ fn test_random() {
// *byte = r.gen();
// }
assert_eq!(
CharacterSetECI::UTF8,
CharacterSet::UTF8,
StringUtils::guessCharset(&bytes, &HashMap::new()).unwrap()
);
}
@@ -47,13 +47,13 @@ fn test_random() {
#[test]
fn test_short_shift_jis1() {
// 金魚
do_test(&[0x8b, 0xe0, 0x8b, 0x9b], CharacterSetECI::SJIS, "SJIS");
do_test(&[0x8b, 0xe0, 0x8b, 0x9b], CharacterSet::SJIS, "SJIS");
}
#[test]
fn test_short_iso885911() {
// båd
do_test(&[0x62, 0xe5, 0x64], CharacterSetECI::ISO8859_1, "ISO8859_1");
do_test(&[0x62, 0xe5, 0x64], CharacterSet::ISO8859_1, "ISO8859_1");
}
#[test]
@@ -61,7 +61,7 @@ fn test_short_utf8() {
// Español
do_test(
&[0x45, 0x73, 0x70, 0x61, 0xc3, 0xb1, 0x6f, 0x6c],
CharacterSetECI::UTF8,
CharacterSet::UTF8,
"UTF8",
);
}
@@ -71,7 +71,7 @@ fn test_mixed_shift_jis1() {
// Hello 金!
do_test(
&[0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x8b, 0xe0, 0x21],
CharacterSetECI::SJIS,
CharacterSet::SJIS,
"SJIS",
);
}
@@ -81,8 +81,8 @@ fn test_utf16_be() {
// 调压柜
do_test(
&[0xFE, 0xFF, 0x8c, 0x03, 0x53, 0x8b, 0x67, 0xdc],
CharacterSetECI::UnicodeBigUnmarked,
CharacterSetECI::UnicodeBigUnmarked.getCharsetName(),
CharacterSet::UnicodeBigUnmarked,
CharacterSet::UnicodeBigUnmarked.get_charset_name(),
);
}
@@ -91,12 +91,12 @@ fn test_utf16_le() {
// 调压柜
do_test(
&[0xFF, 0xFE, 0x03, 0x8c, 0x8b, 0x53, 0xdc, 0x67],
CharacterSetECI::UTF16LE,
CharacterSetECI::UTF16LE.getCharsetName(),
CharacterSet::UTF16LE,
CharacterSet::UTF16LE.get_charset_name(),
);
}
fn do_test(bytes: &[u8], charset: CharacterSetECI, encoding: &str) {
fn do_test(bytes: &[u8], charset: CharacterSet, encoding: &str) {
let guessedCharset = StringUtils::guessCharset(bytes, &HashMap::new()).unwrap();
let guessedEncoding = StringUtils::guessEncoding(bytes, &HashMap::new()).unwrap();
assert_eq!(charset, guessedCharset);

View File

@@ -26,7 +26,7 @@ use crate::Exceptions;
* @author Sean Owen
*/
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub enum CharacterSetECI {
pub enum CharacterSet {
// Enum name is a Java encoding valid for java.lang and java.io
Cp437, //(new int[]{0,2}),
ISO8859_1, //(new int[]{1,3}, "ISO-8859-1"),
@@ -56,187 +56,152 @@ pub enum CharacterSetECI {
Big5, //(28),
GB18030, //(29, "GB2312", "EUC_CN", "GBK"),
EUC_KR, //(30, "EUC-KR");
// Unknown,
// Binary,
}
impl CharacterSetECI {
// private static final Map<Integer,CharacterSetECI> VALUE_TO_ECI = new HashMap<>();
// private static final Map<String,CharacterSetECI> NAME_TO_ECI = new HashMap<>();
// static {
// for (CharacterSetECI eci : values()) {
// for (int value : eci.values) {
// VALUE_TO_ECI.put(value, eci);
// }
// NAME_TO_ECI.put(eci.name(), eci);
// for (String name : eci.otherEncodingNames) {
// NAME_TO_ECI.put(name, eci);
// }
// }
// }
// private final int[] values;
// private final String[] otherEncodingNames;
// CharacterSetECI(int value) {
// this(new int[] {value});
// }
// CharacterSetECI(int value, String... otherEncodingNames) {
// this.values = new int[] {value};
// this.otherEncodingNames = otherEncodingNames;
// }
// CharacterSetECI(int[] values, String... otherEncodingNames) {
// this.values = values;
// this.otherEncodingNames = otherEncodingNames;
// }
pub fn getValueSelf(&self) -> u32 {
Self::getValue(self)
}
pub fn getValue(&self) -> u32 {
impl CharacterSet {
pub fn get_eci_value(&self) -> u32 {
match self {
CharacterSetECI::Cp437 => 0,
CharacterSetECI::ISO8859_1 => 1,
CharacterSetECI::ISO8859_2 => 4,
CharacterSetECI::ISO8859_3 => 5,
CharacterSetECI::ISO8859_4 => 6,
CharacterSetECI::ISO8859_5 => 7,
CharacterSet::Cp437 => 0,
CharacterSet::ISO8859_1 => 1,
CharacterSet::ISO8859_2 => 4,
CharacterSet::ISO8859_3 => 5,
CharacterSet::ISO8859_4 => 6,
CharacterSet::ISO8859_5 => 7,
// CharacterSetECI::ISO8859_6 => 8,
CharacterSetECI::ISO8859_7 => 9,
CharacterSet::ISO8859_7 => 9,
// CharacterSetECI::ISO8859_8 => 10,
CharacterSetECI::ISO8859_9 => 11,
CharacterSet::ISO8859_9 => 11,
// CharacterSetECI::ISO8859_10 => 12,
// CharacterSetECI::ISO8859_11 => 13,
CharacterSetECI::ISO8859_13 => 15,
CharacterSet::ISO8859_13 => 15,
// CharacterSetECI::ISO8859_14 => 16,
CharacterSetECI::ISO8859_15 => 17,
CharacterSetECI::ISO8859_16 => 18,
CharacterSetECI::SJIS => 20,
CharacterSetECI::Cp1250 => 21,
CharacterSetECI::Cp1251 => 22,
CharacterSetECI::Cp1252 => 23,
CharacterSetECI::Cp1256 => 24,
CharacterSetECI::UnicodeBigUnmarked => 25,
CharacterSetECI::UTF16LE => 100025,
CharacterSetECI::UTF8 => 26,
CharacterSetECI::ASCII => 27,
CharacterSetECI::Big5 => 28,
CharacterSetECI::GB18030 => 29,
CharacterSetECI::EUC_KR => 30,
CharacterSet::ISO8859_15 => 17,
CharacterSet::ISO8859_16 => 18,
CharacterSet::SJIS => 20,
CharacterSet::Cp1250 => 21,
CharacterSet::Cp1251 => 22,
CharacterSet::Cp1252 => 23,
CharacterSet::Cp1256 => 24,
CharacterSet::UnicodeBigUnmarked => 25,
CharacterSet::UTF16LE => 100025,
CharacterSet::UTF8 => 26,
CharacterSet::ASCII => 27,
CharacterSet::Big5 => 28,
CharacterSet::GB18030 => 29,
CharacterSet::EUC_KR => 30,
}
}
pub fn getCharset(&self) -> EncodingRef {
fn get_base_encoder(&self) -> EncodingRef {
let name = match self {
// CharacterSetECI::Cp437 => "CP437",
CharacterSetECI::Cp437 => "cp437",
CharacterSetECI::ISO8859_1 => return encoding::all::ISO_8859_1,
CharacterSetECI::ISO8859_2 => "ISO-8859-2",
CharacterSetECI::ISO8859_3 => "ISO-8859-3",
CharacterSetECI::ISO8859_4 => "ISO-8859-4",
CharacterSetECI::ISO8859_5 => "ISO-8859-5",
CharacterSet::Cp437 => "cp437",
CharacterSet::ISO8859_1 => return encoding::all::ISO_8859_1,
CharacterSet::ISO8859_2 => "ISO-8859-2",
CharacterSet::ISO8859_3 => "ISO-8859-3",
CharacterSet::ISO8859_4 => "ISO-8859-4",
CharacterSet::ISO8859_5 => "ISO-8859-5",
// CharacterSetECI::ISO8859_6 => "ISO-8859-6",
CharacterSetECI::ISO8859_7 => "ISO-8859-7",
CharacterSet::ISO8859_7 => "ISO-8859-7",
// CharacterSetECI::ISO8859_8 => "ISO-8859-8",
CharacterSetECI::ISO8859_9 => "ISO-8859-9",
CharacterSet::ISO8859_9 => "ISO-8859-9",
// CharacterSetECI::ISO8859_10 => "ISO-8859-10",
// CharacterSetECI::ISO8859_11 => "ISO-8859-11",
CharacterSetECI::ISO8859_13 => "ISO-8859-13",
CharacterSet::ISO8859_13 => "ISO-8859-13",
// CharacterSetECI::ISO8859_14 => "ISO-8859-14",
CharacterSetECI::ISO8859_15 => "ISO-8859-15",
CharacterSetECI::ISO8859_16 => "ISO-8859-16",
CharacterSetECI::SJIS => "shift_jis",
CharacterSetECI::Cp1250 => "windows-1250",
CharacterSetECI::Cp1251 => "windows-1251",
CharacterSetECI::Cp1252 => "windows-1252",
CharacterSetECI::Cp1256 => "windows-1256",
CharacterSetECI::UnicodeBigUnmarked => "UTF-16BE",
CharacterSetECI::UTF16LE => "UTF-16LE",
CharacterSetECI::UTF8 => "UTF-8",
CharacterSetECI::ASCII => "US-ASCII",
CharacterSetECI::Big5 => "Big5",
CharacterSetECI::GB18030 => "GB2312",
CharacterSetECI::EUC_KR => "EUC-KR",
CharacterSet::ISO8859_15 => "ISO-8859-15",
CharacterSet::ISO8859_16 => "ISO-8859-16",
CharacterSet::SJIS => "shift_jis",
CharacterSet::Cp1250 => "windows-1250",
CharacterSet::Cp1251 => "windows-1251",
CharacterSet::Cp1252 => "windows-1252",
CharacterSet::Cp1256 => "windows-1256",
CharacterSet::UnicodeBigUnmarked => "UTF-16BE",
CharacterSet::UTF16LE => "UTF-16LE",
CharacterSet::UTF8 => "UTF-8",
CharacterSet::ASCII => "US-ASCII",
CharacterSet::Big5 => "Big5",
CharacterSet::GB18030 => "GB2312",
CharacterSet::EUC_KR => "EUC-KR",
};
encoding::label::encoding_from_whatwg_label(name).unwrap()
}
pub fn getCharsetName(&self) -> &'static str {
pub fn get_charset_name(&self) -> &'static str {
match self {
// CharacterSetECI::Cp437 => "CP437",
CharacterSetECI::Cp437 => "cp437",
CharacterSetECI::ISO8859_1 => "iso-8859-1",
CharacterSetECI::ISO8859_2 => "iso-8859-2",
CharacterSetECI::ISO8859_3 => "iso-8859-3",
CharacterSetECI::ISO8859_4 => "iso-8859-4",
CharacterSetECI::ISO8859_5 => "iso-8859-5",
CharacterSet::Cp437 => "cp437",
CharacterSet::ISO8859_1 => "iso-8859-1",
CharacterSet::ISO8859_2 => "iso-8859-2",
CharacterSet::ISO8859_3 => "iso-8859-3",
CharacterSet::ISO8859_4 => "iso-8859-4",
CharacterSet::ISO8859_5 => "iso-8859-5",
// CharacterSetECI::ISO8859_6 => "ISO-8859-6",
CharacterSetECI::ISO8859_7 => "iso-8859-7",
CharacterSet::ISO8859_7 => "iso-8859-7",
// CharacterSetECI::ISO8859_8 => "ISO-8859-8",
CharacterSetECI::ISO8859_9 => "iso-8859-9",
CharacterSet::ISO8859_9 => "iso-8859-9",
// CharacterSetECI::ISO8859_10 => "ISO-8859-10",
// CharacterSetECI::ISO8859_11 => "ISO-8859-11",
CharacterSetECI::ISO8859_13 => "iso-8859-13",
CharacterSet::ISO8859_13 => "iso-8859-13",
// CharacterSetECI::ISO8859_14 => "ISO-8859-14",
CharacterSetECI::ISO8859_15 => "iso-8859-15",
CharacterSetECI::ISO8859_16 => "iso-8859-16",
CharacterSetECI::SJIS => "shift_jis",
CharacterSetECI::Cp1250 => "windows-1250",
CharacterSetECI::Cp1251 => "windows-1251",
CharacterSetECI::Cp1252 => "windows-1252",
CharacterSetECI::Cp1256 => "windows-1256",
CharacterSetECI::UnicodeBigUnmarked => "utf-16be",
CharacterSetECI::UTF16LE => "utf-16le",
CharacterSetECI::UTF8 => "utf-8",
CharacterSetECI::ASCII => "us-ascii",
CharacterSetECI::Big5 => "big5",
CharacterSetECI::GB18030 => "gb2312",
CharacterSetECI::EUC_KR => "euc-kr",
CharacterSet::ISO8859_15 => "iso-8859-15",
CharacterSet::ISO8859_16 => "iso-8859-16",
CharacterSet::SJIS => "shift_jis",
CharacterSet::Cp1250 => "windows-1250",
CharacterSet::Cp1251 => "windows-1251",
CharacterSet::Cp1252 => "windows-1252",
CharacterSet::Cp1256 => "windows-1256",
CharacterSet::UnicodeBigUnmarked => "utf-16be",
CharacterSet::UTF16LE => "utf-16le",
CharacterSet::UTF8 => "utf-8",
CharacterSet::ASCII => "us-ascii",
CharacterSet::Big5 => "big5",
CharacterSet::GB18030 => "gb2312",
CharacterSet::EUC_KR => "euc-kr",
}
}
/**
* @param charset Java character set object
* @return CharacterSetECI representing ECI for character encoding, or null if it is legal
* but unsupported
*/
pub fn getCharacterSetECI(charset: EncodingRef) -> Option<CharacterSetECI> {
let name = if let Some(nm) = charset.whatwg_name() {
nm
} else {
charset.name()
};
match name {
"cp437" => Some(CharacterSetECI::Cp437),
"iso-8859-1" => Some(CharacterSetECI::ISO8859_1),
"iso-8859-2" => Some(CharacterSetECI::ISO8859_2),
"iso-8859-3" => Some(CharacterSetECI::ISO8859_3),
"iso-8859-4" => Some(CharacterSetECI::ISO8859_4),
"iso-8859-5" => Some(CharacterSetECI::ISO8859_5),
// "iso-8859-6" => Some(CharacterSetECI::ISO8859_6),
"iso-8859-7" => Some(CharacterSetECI::ISO8859_7),
// "iso-8859-8" => Some(CharacterSetECI::ISO8859_8),
"iso-8859-9" => Some(CharacterSetECI::ISO8859_9),
// "iso-8859-10" => Some(CharacterSetECI::ISO8859_10),
// "iso-8859-11" => Some(CharacterSetECI::ISO8859_11),
"iso-8859-13" => Some(CharacterSetECI::ISO8859_13),
// "iso-8859-14" => Some(CharacterSetECI::ISO8859_14),
"iso-8859-15" => Some(CharacterSetECI::ISO8859_15),
"iso-8859-16" => Some(CharacterSetECI::ISO8859_16),
"shift_jis" => Some(CharacterSetECI::SJIS),
"windows-1250" => Some(CharacterSetECI::Cp1250),
"windows-1251" => Some(CharacterSetECI::Cp1251),
"windows-1252" => Some(CharacterSetECI::Cp1252),
"windows-1256" => Some(CharacterSetECI::Cp1256),
"utf-16be" => Some(CharacterSetECI::UnicodeBigUnmarked),
"utf-8" | "utf8" => Some(CharacterSetECI::UTF8),
"us-ascii" => Some(CharacterSetECI::ASCII),
"big5" => Some(CharacterSetECI::Big5),
"gb2312" => Some(CharacterSetECI::GB18030),
"euc-kr" => Some(CharacterSetECI::EUC_KR),
_ => None,
}
}
// /**
// * @param charset Java character set object
// * @return CharacterSetECI representing ECI for character encoding, or null if it is legal
// * but unsupported
// */
// fn get_character_set_eci(charset: EncodingRef) -> Option<CharacterSetECI> {
// let name = if let Some(nm) = charset.whatwg_name() {
// nm
// } else {
// charset.name()
// };
// match name {
// "cp437" => Some(CharacterSetECI::Cp437),
// "iso-8859-1" => Some(CharacterSetECI::ISO8859_1),
// "iso-8859-2" => Some(CharacterSetECI::ISO8859_2),
// "iso-8859-3" => Some(CharacterSetECI::ISO8859_3),
// "iso-8859-4" => Some(CharacterSetECI::ISO8859_4),
// "iso-8859-5" => Some(CharacterSetECI::ISO8859_5),
// // "iso-8859-6" => Some(CharacterSetECI::ISO8859_6),
// "iso-8859-7" => Some(CharacterSetECI::ISO8859_7),
// // "iso-8859-8" => Some(CharacterSetECI::ISO8859_8),
// "iso-8859-9" => Some(CharacterSetECI::ISO8859_9),
// // "iso-8859-10" => Some(CharacterSetECI::ISO8859_10),
// // "iso-8859-11" => Some(CharacterSetECI::ISO8859_11),
// "iso-8859-13" => Some(CharacterSetECI::ISO8859_13),
// // "iso-8859-14" => Some(CharacterSetECI::ISO8859_14),
// "iso-8859-15" => Some(CharacterSetECI::ISO8859_15),
// "iso-8859-16" => Some(CharacterSetECI::ISO8859_16),
// "shift_jis" => Some(CharacterSetECI::SJIS),
// "windows-1250" => Some(CharacterSetECI::Cp1250),
// "windows-1251" => Some(CharacterSetECI::Cp1251),
// "windows-1252" => Some(CharacterSetECI::Cp1252),
// "windows-1256" => Some(CharacterSetECI::Cp1256),
// "utf-16be" => Some(CharacterSetECI::UnicodeBigUnmarked),
// "utf-8" | "utf8" => Some(CharacterSetECI::UTF8),
// "us-ascii" => Some(CharacterSetECI::ASCII),
// "big5" => Some(CharacterSetECI::Big5),
// "gb2312" => Some(CharacterSetECI::GB18030),
// "euc-kr" => Some(CharacterSetECI::EUC_KR),
// _ => None,
// }
// }
/**
* @param value character set ECI value
@@ -244,35 +209,35 @@ impl CharacterSetECI {
* unsupported
* @throws FormatException if ECI value is invalid
*/
pub fn getCharacterSetECIByValue(value: u32) -> Result<CharacterSetECI> {
pub fn get_character_set_by_eci(value: u32) -> Result<CharacterSet> {
match value {
0 | 2 => Ok(CharacterSetECI::Cp437),
1 | 3 => Ok(CharacterSetECI::ISO8859_1),
4 => Ok(CharacterSetECI::ISO8859_2),
5 => Ok(CharacterSetECI::ISO8859_3),
6 => Ok(CharacterSetECI::ISO8859_4),
7 => Ok(CharacterSetECI::ISO8859_5),
0 | 2 => Ok(CharacterSet::Cp437),
1 | 3 => Ok(CharacterSet::ISO8859_1),
4 => Ok(CharacterSet::ISO8859_2),
5 => Ok(CharacterSet::ISO8859_3),
6 => Ok(CharacterSet::ISO8859_4),
7 => Ok(CharacterSet::ISO8859_5),
// 8 => Ok(CharacterSetECI::ISO8859_6),
9 => Ok(CharacterSetECI::ISO8859_7),
9 => Ok(CharacterSet::ISO8859_7),
// 10 => Ok(CharacterSetECI::ISO8859_8),
11 => Ok(CharacterSetECI::ISO8859_9),
11 => Ok(CharacterSet::ISO8859_9),
// 12 => Ok(CharacterSetECI::ISO8859_10),
// 13 => Ok(CharacterSetECI::ISO8859_11),
15 => Ok(CharacterSetECI::ISO8859_13),
15 => Ok(CharacterSet::ISO8859_13),
// 16 => Ok(CharacterSetECI::ISO8859_14),
17 => Ok(CharacterSetECI::ISO8859_15),
18 => Ok(CharacterSetECI::ISO8859_16),
20 => Ok(CharacterSetECI::SJIS),
21 => Ok(CharacterSetECI::Cp1250),
22 => Ok(CharacterSetECI::Cp1251),
23 => Ok(CharacterSetECI::Cp1252),
24 => Ok(CharacterSetECI::Cp1256),
25 => Ok(CharacterSetECI::UnicodeBigUnmarked),
26 => Ok(CharacterSetECI::UTF8),
27 | 170 => Ok(CharacterSetECI::ASCII),
28 => Ok(CharacterSetECI::Big5),
29 => Ok(CharacterSetECI::GB18030),
30 => Ok(CharacterSetECI::EUC_KR),
17 => Ok(CharacterSet::ISO8859_15),
18 => Ok(CharacterSet::ISO8859_16),
20 => Ok(CharacterSet::SJIS),
21 => Ok(CharacterSet::Cp1250),
22 => Ok(CharacterSet::Cp1251),
23 => Ok(CharacterSet::Cp1252),
24 => Ok(CharacterSet::Cp1256),
25 => Ok(CharacterSet::UnicodeBigUnmarked),
26 => Ok(CharacterSet::UTF8),
27 | 170 => Ok(CharacterSet::ASCII),
28 => Ok(CharacterSet::Big5),
29 => Ok(CharacterSet::GB18030),
30 => Ok(CharacterSet::EUC_KR),
_ => Err(Exceptions::not_found_with("Bad ECI Value")),
}
}
@@ -282,66 +247,66 @@ impl CharacterSetECI {
* @return CharacterSetECI representing ECI for character encoding, or null if it is legal
* but unsupported
*/
pub fn getCharacterSetECIByName(name: &str) -> Option<CharacterSetECI> {
pub fn get_character_set_by_name(name: &str) -> Option<CharacterSet> {
match name.to_lowercase().as_str() {
"cp437" => Some(CharacterSetECI::Cp437),
"iso-8859-1" => Some(CharacterSetECI::ISO8859_1),
"iso-8859-2" => Some(CharacterSetECI::ISO8859_2),
"iso-8859-3" => Some(CharacterSetECI::ISO8859_3),
"iso-8859-4" => Some(CharacterSetECI::ISO8859_4),
"iso-8859-5" => Some(CharacterSetECI::ISO8859_5),
"cp437" => Some(CharacterSet::Cp437),
"iso-8859-1" => Some(CharacterSet::ISO8859_1),
"iso-8859-2" => Some(CharacterSet::ISO8859_2),
"iso-8859-3" => Some(CharacterSet::ISO8859_3),
"iso-8859-4" => Some(CharacterSet::ISO8859_4),
"iso-8859-5" => Some(CharacterSet::ISO8859_5),
// "ISO-8859-6" => Some(CharacterSetECI::ISO8859_6),
"iso-8859-7" => Some(CharacterSetECI::ISO8859_7),
"iso-8859-7" => Some(CharacterSet::ISO8859_7),
// "ISO-8859-8" => Some(CharacterSetECI::ISO8859_8),
"iso-8859-9" => Some(CharacterSetECI::ISO8859_9),
"iso-8859-9" => Some(CharacterSet::ISO8859_9),
// "ISO-8859-10" => Some(CharacterSetECI::ISO8859_10),
// "ISO-8859-11" => Some(CharacterSetECI::ISO8859_11),
"iso-8859-13" => Some(CharacterSetECI::ISO8859_13),
"iso-8859-13" => Some(CharacterSet::ISO8859_13),
// "ISO-8859-14" => Some(CharacterSetECI::ISO8859_14),
"iso-8859-15" => Some(CharacterSetECI::ISO8859_15),
"iso-8859-16" => Some(CharacterSetECI::ISO8859_16),
"shift_jis" => Some(CharacterSetECI::SJIS),
"windows-1250" => Some(CharacterSetECI::Cp1250),
"windows-1251" => Some(CharacterSetECI::Cp1251),
"windows-1252" => Some(CharacterSetECI::Cp1252),
"windows-1256" => Some(CharacterSetECI::Cp1256),
"utf-16be" => Some(CharacterSetECI::UnicodeBigUnmarked),
"utf-8" | "utf8" => Some(CharacterSetECI::UTF8),
"us-ascii" => Some(CharacterSetECI::ASCII),
"big5" => Some(CharacterSetECI::Big5),
"gb2312" => Some(CharacterSetECI::GB18030),
"euc-kr" => Some(CharacterSetECI::EUC_KR),
"iso-8859-15" => Some(CharacterSet::ISO8859_15),
"iso-8859-16" => Some(CharacterSet::ISO8859_16),
"shift_jis" => Some(CharacterSet::SJIS),
"windows-1250" => Some(CharacterSet::Cp1250),
"windows-1251" => Some(CharacterSet::Cp1251),
"windows-1252" => Some(CharacterSet::Cp1252),
"windows-1256" => Some(CharacterSet::Cp1256),
"utf-16be" => Some(CharacterSet::UnicodeBigUnmarked),
"utf-8" | "utf8" => Some(CharacterSet::UTF8),
"us-ascii" => Some(CharacterSet::ASCII),
"big5" => Some(CharacterSet::Big5),
"gb2312" => Some(CharacterSet::GB18030),
"euc-kr" => Some(CharacterSet::EUC_KR),
_ => None,
}
}
pub fn encode(&self, input: &str) -> Result<Vec<u8>> {
self.getCharset()
self.get_base_encoder()
.encode(input, encoding::EncoderTrap::Strict)
.map_err(|e| Exceptions::format_with(e.to_string()))
}
pub fn encode_replace(&self, input: &str) -> Result<Vec<u8>> {
self.getCharset()
self.get_base_encoder()
.encode(input, encoding::EncoderTrap::Replace)
.map_err(|e| Exceptions::format_with(e.to_string()))
}
pub fn decode(&self, input: &[u8]) -> Result<String> {
if self == &CharacterSetECI::Cp437 {
if self == &CharacterSet::Cp437 {
use codepage_437::BorrowFromCp437;
use codepage_437::CP437_CONTROL;
Ok(String::borrow_from_cp437(&input, &CP437_CONTROL))
} else {
self.getCharset()
self.get_base_encoder()
.decode(input, encoding::DecoderTrap::Strict)
.map_err(|e| Exceptions::format_with(e.to_string()))
}
}
pub fn decode_replace(&self, input: &[u8]) -> Result<String> {
self.getCharset()
self.get_base_encoder()
.decode(input, encoding::DecoderTrap::Replace)
.map_err(|e| Exceptions::format_with(e.to_string()))
}

View File

@@ -16,14 +16,14 @@
use unicode_segmentation::UnicodeSegmentation;
use super::CharacterSetECI;
use super::CharacterSet;
use once_cell::sync::Lazy;
static ENCODERS: Lazy<Vec<CharacterSetECI>> = Lazy::new(|| {
static ENCODERS: Lazy<Vec<CharacterSet>> = Lazy::new(|| {
let mut enc_vec = Vec::new();
for name in NAMES {
if let Some(enc) = CharacterSetECI::getCharacterSetECIByName(name) {
if let Some(enc) = CharacterSet::get_character_set_by_name(name) {
enc_vec.push(enc);
}
}
@@ -69,7 +69,7 @@ const NAMES: [&str; 20] = [
*/
#[derive(Clone)]
pub struct ECIEncoderSet {
encoders: Vec<CharacterSetECI>,
encoders: Vec<CharacterSet>,
priorityEncoderIndex: Option<usize>,
}
@@ -84,23 +84,23 @@ impl ECIEncoderSet {
*/
pub fn new(
stringToEncodeMain: &str,
priorityCharset: Option<CharacterSetECI>,
priorityCharset: Option<CharacterSet>,
fnc1: Option<&str>,
) -> Self {
// List of encoders that potentially encode characters not in ISO-8859-1 in one byte.
let mut encoders: Vec<CharacterSetECI>;
let mut encoders: Vec<CharacterSet>;
let mut priorityEncoderIndexValue = None;
let mut neededEncoders: Vec<CharacterSetECI> = Vec::new();
let mut neededEncoders: Vec<CharacterSet> = Vec::new();
let stringToEncode = stringToEncodeMain.graphemes(true).collect::<Vec<&str>>();
//we always need the ISO-8859-1 encoder. It is the default encoding
neededEncoders.push(CharacterSetECI::ISO8859_1);
neededEncoders.push(CharacterSet::ISO8859_1);
let mut needUnicodeEncoder = if let Some(pc) = priorityCharset {
//pc.name().starts_with("UTF") || pc.name().starts_with("utf")
pc == CharacterSetECI::UTF8 || pc == CharacterSetECI::UnicodeBigUnmarked
pc == CharacterSet::UTF8 || pc == CharacterSet::UnicodeBigUnmarked
} else {
false
};
@@ -142,7 +142,7 @@ impl ECIEncoderSet {
if neededEncoders.len() == 1 && !needUnicodeEncoder {
//the entire input can be encoded by the ISO-8859-1 encoder
encoders = vec![CharacterSetECI::ISO8859_1];
encoders = vec![CharacterSet::ISO8859_1];
} else {
// we need more than one single byte encoder or we need a Unicode encoder.
// In this case we append a UTF-8 and UTF-16 encoder to the list
@@ -156,8 +156,8 @@ impl ECIEncoderSet {
encoders.push(encoder);
}
encoders.push(CharacterSetECI::UTF8);
encoders.push(CharacterSetECI::UnicodeBigUnmarked);
encoders.push(CharacterSet::UTF8);
encoders.push(CharacterSet::UnicodeBigUnmarked);
}
//Compute priorityEncoderIndex by looking up priorityCharset in encoders
@@ -175,7 +175,7 @@ impl ECIEncoderSet {
}
// }
//invariants
assert_eq!(encoders[0], CharacterSetECI::ISO8859_1);
assert_eq!(encoders[0], CharacterSet::ISO8859_1);
Self {
encoders,
priorityEncoderIndex: priorityEncoderIndexValue,
@@ -192,13 +192,13 @@ impl ECIEncoderSet {
pub fn getCharsetName(&self, index: usize) -> Option<&'static str> {
if index < self.len() {
Some(self.encoders[index].getCharsetName())
Some(self.encoders[index].get_charset_name())
} else {
None
}
}
pub fn getCharset(&self, index: usize) -> Option<CharacterSetECI> {
pub fn getCharset(&self, index: usize) -> Option<CharacterSet> {
if index < self.len() {
Some(self.encoders[index])
} else {
@@ -207,7 +207,7 @@ impl ECIEncoderSet {
}
pub fn getECIValue(&self, encoderIndex: usize) -> u32 {
self.encoders[encoderIndex].getValue()
self.encoders[encoderIndex].get_eci_value()
// CharacterSetECI::getValue(
// &CharacterSetECI::getCharacterSetECI(self.encoders[encoderIndex]).unwrap(),
// )

View File

@@ -25,7 +25,7 @@ use std::fmt;
use crate::common::Result;
use super::CharacterSetECI;
use super::CharacterSet;
/**
* Class that converts a sequence of ECIs and bytes into a string
@@ -35,7 +35,7 @@ use super::CharacterSetECI;
pub struct ECIStringBuilder {
current_bytes: Vec<u8>,
result: String,
current_charset: Option<CharacterSetECI>, //= StandardCharsets.ISO_8859_1;
current_charset: Option<CharacterSet>, //= StandardCharsets.ISO_8859_1;
}
impl ECIStringBuilder {
@@ -43,14 +43,14 @@ impl ECIStringBuilder {
Self {
current_bytes: Vec::new(),
result: String::new(),
current_charset: Some(CharacterSetECI::ISO8859_1),
current_charset: Some(CharacterSet::ISO8859_1),
}
}
pub fn with_capacity(initial_capacity: usize) -> Self {
Self {
current_bytes: Vec::with_capacity(initial_capacity),
result: String::with_capacity(initial_capacity),
current_charset: Some(CharacterSetECI::ISO8859_1),
current_charset: Some(CharacterSet::ISO8859_1),
}
}
@@ -104,7 +104,8 @@ impl ECIStringBuilder {
pub fn appendECI(&mut self, value: u32) -> Result<()> {
self.encodeCurrentBytesIfAny();
self.current_charset = CharacterSetECI::getCharacterSetECIByValue(value).ok();
self.current_charset = CharacterSet::get_character_set_by_eci(value).ok();
// if let Ok(character_set_eci) = CharacterSetECI::getCharacterSetECIByValue(value) {
// // dbg!(
@@ -126,7 +127,7 @@ impl ECIStringBuilder {
/// This function can panic
pub fn encodeCurrentBytesIfAny(&mut self) {
if let Some(encoder) = self.current_charset {
if encoder == CharacterSetECI::UTF8 {
if encoder == CharacterSet::UTF8 {
if !self.current_bytes.is_empty() {
self.result.push_str(
&String::from_utf8(std::mem::take(&mut self.current_bytes)).unwrap(),

View File

@@ -21,7 +21,7 @@ use unicode_segmentation::UnicodeSegmentation;
use crate::common::Result;
use crate::Exceptions;
use super::{CharacterSetECI, ECIEncoderSet, ECIInput};
use super::{CharacterSet, ECIEncoderSet, ECIInput};
//* approximated (latch + 2 codewords)
pub const COST_PER_ECI: usize = 3;
@@ -193,7 +193,7 @@ impl MinimalECIInput {
*/
pub fn new(
stringToEncodeInput: &str,
priorityCharset: Option<CharacterSetECI>,
priorityCharset: Option<CharacterSet>,
fnc1: Option<&str>,
) -> Self {
let stringToEncode = stringToEncodeInput.graphemes(true).collect::<Vec<&str>>();

View File

@@ -16,7 +16,7 @@
use crate::{DecodeHintType, DecodeHintValue, DecodingHintDictionary};
use super::CharacterSetECI;
use super::CharacterSet;
/**
* Common string-related functions.
@@ -48,7 +48,7 @@ const ASSUME_SHIFT_JIS: bool = false;
// static SHIFT_JIS: &'static str = "SJIS";
// static GB2312: &'static str = "GB2312";
pub static SHIFT_JIS_CHARSET: CharacterSetECI = CharacterSetECI::SJIS;
pub static SHIFT_JIS_CHARSET: CharacterSet = CharacterSet::SJIS;
// private static final boolean ASSUME_SHIFT_JIS =
// SHIFT_JIS_CHARSET.equals(PLATFORM_DEFAULT_ENCODING) ||
@@ -64,14 +64,14 @@ impl StringUtils {
*/
pub fn guessEncoding(bytes: &[u8], hints: &DecodingHintDictionary) -> Option<&'static str> {
let c = StringUtils::guessCharset(bytes, hints)?;
if c == CharacterSetECI::SJIS {
if c == CharacterSet::SJIS {
Some("SJIS")
} else if c == CharacterSetECI::UTF8 {
} else if c == CharacterSet::UTF8 {
Some("UTF8")
} else if c == CharacterSetECI::ISO8859_1 {
} else if c == CharacterSet::ISO8859_1 {
Some("ISO8859_1")
} else {
Some(c.getCharsetName())
Some(c.get_charset_name())
}
}
@@ -84,12 +84,12 @@ impl StringUtils {
* or the platform default encoding if
* none of these can possibly be correct
*/
pub fn guessCharset(bytes: &[u8], hints: &DecodingHintDictionary) -> Option<CharacterSetECI> {
pub fn guessCharset(bytes: &[u8], hints: &DecodingHintDictionary) -> Option<CharacterSet> {
if let Some(DecodeHintValue::CharacterSet(cs_name)) =
hints.get(&DecodeHintType::CHARACTER_SET)
{
// if let DecodeHintValue::CharacterSet(cs_name) = hint {
return CharacterSetECI::getCharacterSetECIByName(cs_name);
return CharacterSet::get_character_set_by_name(cs_name);
// }
}
// if hints.contains_key(&DecodeHintType::CHARACTER_SET) {
@@ -101,9 +101,9 @@ impl StringUtils {
&& ((bytes[0] == 0xFE && bytes[1] == 0xFF) || (bytes[0] == 0xFF && bytes[1] == 0xFE))
{
if bytes[0] == 0xFE && bytes[1] == 0xFF {
return Some(CharacterSetECI::UnicodeBigUnmarked);
return Some(CharacterSet::UnicodeBigUnmarked);
} else {
return Some(CharacterSetECI::UTF16LE);
return Some(CharacterSet::UTF16LE);
}
}
@@ -221,7 +221,7 @@ impl StringUtils {
// Easy -- if there is BOM or at least 1 valid not-single byte character (and no evidence it can't be UTF-8), done
if can_be_utf8 && (utf8bom || utf2_bytes_chars + utf3_bytes_chars + utf4_bytes_chars > 0) {
return Some(CharacterSetECI::UTF8);
return Some(CharacterSet::UTF8);
}
// Easy -- if assuming Shift_JIS or >= 3 valid consecutive not-ascii characters (and no evidence it can't be), done
if can_be_shift_jis
@@ -229,7 +229,7 @@ impl StringUtils {
|| sjis_max_katakana_word_length >= 3
|| sjis_max_double_bytes_word_length >= 3)
{
return Some(CharacterSetECI::SJIS); //encoding::label::encoding_from_whatwg_label("SJIS");
return Some(CharacterSet::SJIS); //encoding::label::encoding_from_whatwg_label("SJIS");
}
// Distinguishing Shift_JIS and ISO-8859-1 can be a little tough for short words. The crude heuristic is:
// - If we saw
@@ -240,23 +240,23 @@ impl StringUtils {
return if (sjis_max_katakana_word_length == 2 && sjis_katakana_chars == 2)
|| iso_high_other * 10 >= length
{
Some(CharacterSetECI::SJIS)
Some(CharacterSet::SJIS)
} else {
Some(CharacterSetECI::ISO8859_1)
Some(CharacterSet::ISO8859_1)
};
}
// Otherwise, try in order ISO-8859-1, Shift JIS, UTF-8 and fall back to default platform encoding
if can_be_iso88591 {
return Some(CharacterSetECI::ISO8859_1);
return Some(CharacterSet::ISO8859_1);
}
if can_be_shift_jis {
return Some(CharacterSetECI::SJIS);
return Some(CharacterSet::SJIS);
}
if can_be_utf8 {
return Some(CharacterSetECI::UTF8);
return Some(CharacterSet::UTF8);
}
// Otherwise, we take a wild guess with platform encoding
Some(CharacterSetECI::UTF8)
Some(CharacterSet::UTF8)
}
}