mirror of
https://github.com/starovoid/rxing.git
synced 2026-07-26 04:12:34 +00:00
move to using Eci enum
Decouples the Eci and CharacterSet concepts within the library. Character sets can now exist independently from Eci encodation schemes.
This commit is contained in:
181
src/common/eci.rs
Normal file
181
src/common/eci.rs
Normal file
@@ -0,0 +1,181 @@
|
||||
use std::fmt::Display;
|
||||
|
||||
use super::CharacterSet;
|
||||
|
||||
#[derive(Copy,Clone,Debug,PartialEq, Eq)]
|
||||
pub enum Eci {
|
||||
Unknown = -1,
|
||||
Cp437 = 2, // obsolete
|
||||
ISO8859_1 = 3,
|
||||
ISO8859_2 = 4,
|
||||
ISO8859_3 = 5,
|
||||
ISO8859_4 = 6,
|
||||
ISO8859_5 = 7,
|
||||
ISO8859_6 = 8,
|
||||
ISO8859_7 = 9,
|
||||
ISO8859_8 = 10,
|
||||
ISO8859_9 = 11,
|
||||
ISO8859_10 = 12,
|
||||
ISO8859_11 = 13,
|
||||
ISO8859_13 = 15,
|
||||
ISO8859_14 = 16,
|
||||
ISO8859_15 = 17,
|
||||
ISO8859_16 = 18,
|
||||
Shift_JIS = 20,
|
||||
Cp1250 = 21,
|
||||
Cp1251 = 22,
|
||||
Cp1252 = 23,
|
||||
Cp1256 = 24,
|
||||
UTF16BE = 25,
|
||||
UTF8 = 26,
|
||||
ASCII = 27,
|
||||
Big5 = 28,
|
||||
GB2312 = 29,
|
||||
EUC_KR = 30,
|
||||
GB18030 = 32,
|
||||
UTF16LE = 33,
|
||||
UTF32BE = 34,
|
||||
UTF32LE = 35,
|
||||
ISO646_Inv = 170,
|
||||
Binary = 899,
|
||||
}
|
||||
|
||||
impl Eci {
|
||||
pub fn can_encode(self) -> bool {
|
||||
(self as i32) >= 899
|
||||
}
|
||||
}
|
||||
|
||||
impl From<u32> for Eci {
|
||||
fn from(value: u32) -> Self {
|
||||
(value as i32).into()
|
||||
}
|
||||
}
|
||||
|
||||
impl From<i32> for Eci {
|
||||
fn from(value: i32) -> Self {
|
||||
match value {
|
||||
0 | 2 => Eci::Cp437,
|
||||
1 | 3 => Eci::ISO8859_1,
|
||||
4 => Eci::ISO8859_2,
|
||||
5 => Eci::ISO8859_3,
|
||||
6 => Eci::ISO8859_4,
|
||||
7 => Eci::ISO8859_5,
|
||||
8 => Eci::ISO8859_6,
|
||||
9 => Eci::ISO8859_7,
|
||||
10 => Eci::ISO8859_8,
|
||||
11 => Eci::ISO8859_9,
|
||||
12 => Eci::ISO8859_10,
|
||||
13 => Eci::ISO8859_11,
|
||||
15 => Eci::ISO8859_13,
|
||||
16 => Eci::ISO8859_14,
|
||||
17 => Eci::ISO8859_15,
|
||||
18 => Eci::ISO8859_16,
|
||||
20 => Eci::Shift_JIS,
|
||||
21 => Eci::Cp1250,
|
||||
22 => Eci::Cp1251,
|
||||
23 => Eci::Cp1252,
|
||||
24 => Eci::Cp1256,
|
||||
25 => Eci::UTF16BE,
|
||||
26 => Eci::UTF8,
|
||||
27 => Eci::ASCII,
|
||||
28 => Eci::Big5,
|
||||
29 => Eci::GB18030,
|
||||
30 => Eci::EUC_KR,
|
||||
32 => Eci::GB18030,
|
||||
33 => Eci::UTF16LE,
|
||||
34 => Eci::UTF32BE,
|
||||
35 => Eci::UTF32LE,
|
||||
170 => Eci::ASCII,
|
||||
898 => Eci::Binary,
|
||||
_ => Eci::Unknown,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<CharacterSet> for Eci {
|
||||
fn from(value: CharacterSet) -> Self {
|
||||
match value {
|
||||
CharacterSet::Cp437 => Eci::Cp437,
|
||||
CharacterSet::ISO8859_1 => Eci::ISO8859_1,
|
||||
CharacterSet::ISO8859_2 => Eci::ISO8859_2,
|
||||
CharacterSet::ISO8859_3 => Eci::ISO8859_3,
|
||||
CharacterSet::ISO8859_4 => Eci::ISO8859_4,
|
||||
CharacterSet::ISO8859_5 => Eci::ISO8859_5,
|
||||
CharacterSet::ISO8859_7 => Eci::ISO8859_7,
|
||||
CharacterSet::ISO8859_9 => Eci::ISO8859_9,
|
||||
CharacterSet::ISO8859_13 => Eci::ISO8859_13,
|
||||
CharacterSet::ISO8859_15 => Eci::ISO8859_15,
|
||||
CharacterSet::ISO8859_16 => Eci::ISO8859_16,
|
||||
CharacterSet::Shift_JIS => Eci::Shift_JIS,
|
||||
CharacterSet::Cp1250 => Eci::Cp1250,
|
||||
CharacterSet::Cp1251 => Eci::Cp1251,
|
||||
CharacterSet::Cp1252 => Eci::Cp1252,
|
||||
CharacterSet::Cp1256 => Eci::Cp1256,
|
||||
CharacterSet::UTF16BE => Eci::UTF16BE,
|
||||
CharacterSet::UTF8 => Eci::UTF8,
|
||||
CharacterSet::ASCII => Eci::ASCII,
|
||||
CharacterSet::Big5 => Eci::Big5,
|
||||
CharacterSet::GB2312 => Eci::GB2312,
|
||||
CharacterSet::GB18030 => Eci::GB18030,
|
||||
CharacterSet::EUC_KR => Eci::EUC_KR,
|
||||
CharacterSet::UTF16LE => Eci::UTF16LE,
|
||||
CharacterSet::UTF32BE => Eci::UTF32BE,
|
||||
CharacterSet::UTF32LE => Eci::UTF32LE,
|
||||
CharacterSet::Binary => Eci::Binary,
|
||||
CharacterSet::ISO8859_6 => Eci::ISO8859_6,
|
||||
CharacterSet::ISO8859_8 => Eci::ISO8859_8,
|
||||
CharacterSet::ISO8859_10 => Eci::ISO8859_10,
|
||||
CharacterSet::ISO8859_11 =>Eci::ISO8859_11,
|
||||
CharacterSet::ISO8859_14 => Eci::ISO8859_14,
|
||||
_=>Eci::Unknown,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Eci> for CharacterSet {
|
||||
fn from(value: Eci) -> Self {
|
||||
match value {
|
||||
Eci::Cp437 => CharacterSet::Cp437,
|
||||
Eci::ISO8859_1 => CharacterSet::ISO8859_1,
|
||||
Eci::ISO8859_2 => CharacterSet::ISO8859_2,
|
||||
Eci::ISO8859_3 => CharacterSet::ISO8859_3,
|
||||
Eci::ISO8859_4 => CharacterSet::ISO8859_4,
|
||||
Eci::ISO8859_5 => CharacterSet::ISO8859_5,
|
||||
Eci::ISO8859_6 => CharacterSet::ISO8859_6,
|
||||
Eci::ISO8859_7 => CharacterSet::ISO8859_7,
|
||||
Eci::ISO8859_8 => CharacterSet::ISO8859_8,
|
||||
Eci::ISO8859_9 => CharacterSet::ISO8859_9,
|
||||
Eci::ISO8859_10 => CharacterSet::ISO8859_10,
|
||||
Eci::ISO8859_11 => CharacterSet::ISO8859_11,
|
||||
Eci::ISO8859_13 => CharacterSet::ISO8859_13,
|
||||
Eci::ISO8859_14 => CharacterSet::ISO8859_14,
|
||||
Eci::ISO8859_15 => CharacterSet::ISO8859_15,
|
||||
Eci::ISO8859_16 => CharacterSet::ISO8859_16,
|
||||
Eci::Shift_JIS => CharacterSet::Shift_JIS,
|
||||
Eci::Cp1250 => CharacterSet::Cp1250,
|
||||
Eci::Cp1251 => CharacterSet::Cp1251,
|
||||
Eci::Cp1252 => CharacterSet::Cp1252,
|
||||
Eci::Cp1256 => CharacterSet::Cp1256,
|
||||
Eci::UTF16BE => CharacterSet::UTF16BE,
|
||||
Eci::UTF8 => CharacterSet::UTF8,
|
||||
Eci::ASCII => CharacterSet::ASCII,
|
||||
Eci::Big5 => CharacterSet::Big5,
|
||||
Eci::GB2312 => CharacterSet::GB2312,
|
||||
Eci::EUC_KR => CharacterSet::EUC_KR,
|
||||
Eci::GB18030 => CharacterSet::GB18030,
|
||||
Eci::UTF16LE => CharacterSet::UTF16LE,
|
||||
Eci::UTF32BE => CharacterSet::UTF32BE,
|
||||
Eci::UTF32LE => CharacterSet::UTF32LE,
|
||||
Eci::ISO646_Inv => CharacterSet::ASCII,
|
||||
Eci::Binary => CharacterSet::Binary,
|
||||
_ => CharacterSet::Unknown,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for Eci {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f,"{}", *self as i32)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user