mirror of
https://github.com/starovoid/rxing.git
synced 2026-07-27 04:42:35 +00:00
rename character set and rename methods
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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()))
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
// )
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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>>();
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user