CharacterSetECI Port

This commit is contained in:
Henry Schimke
2022-09-01 15:15:12 -05:00
parent 1b734c44b5
commit ff95c933f5
2 changed files with 281 additions and 133 deletions

View File

@@ -1,133 +0,0 @@
/*
* Copyright 2008 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.zxing.common;
import com.google.zxing.FormatException;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
/**
* Encapsulates a Character Set ECI, according to "Extended Channel Interpretations" 5.3.1.1
* of ISO 18004.
*
* @author Sean Owen
*/
public enum CharacterSetECI {
// 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"),
ISO8859_2(4, "ISO-8859-2"),
ISO8859_3(5, "ISO-8859-3"),
ISO8859_4(6, "ISO-8859-4"),
ISO8859_5(7, "ISO-8859-5"),
// ISO8859_6(8, "ISO-8859-6"),
ISO8859_7(9, "ISO-8859-7"),
// ISO8859_8(10, "ISO-8859-8"),
ISO8859_9(11, "ISO-8859-9"),
// ISO8859_10(12, "ISO-8859-10"),
// ISO8859_11(13, "ISO-8859-11"),
ISO8859_13(15, "ISO-8859-13"),
// ISO8859_14(16, "ISO-8859-14"),
ISO8859_15(17, "ISO-8859-15"),
ISO8859_16(18, "ISO-8859-16"),
SJIS(20, "Shift_JIS"),
Cp1250(21, "windows-1250"),
Cp1251(22, "windows-1251"),
Cp1252(23, "windows-1252"),
Cp1256(24, "windows-1256"),
UnicodeBigUnmarked(25, "UTF-16BE", "UnicodeBig"),
UTF8(26, "UTF-8"),
ASCII(new int[] {27, 170}, "US-ASCII"),
Big5(28),
GB18030(29, "GB2312", "EUC_CN", "GBK"),
EUC_KR(30, "EUC-KR");
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;
}
public int getValue() {
return values[0];
}
public Charset getCharset() {
return Charset.forName(name());
}
/**
* @param charset Java character set object
* @return CharacterSetECI representing ECI for character encoding, or null if it is legal
* but unsupported
*/
public static CharacterSetECI getCharacterSetECI(Charset charset) {
return NAME_TO_ECI.get(charset.name());
}
/**
* @param value character set ECI value
* @return {@code CharacterSetECI} representing ECI of given value, or null if it is legal but
* unsupported
* @throws FormatException if ECI value is invalid
*/
public static CharacterSetECI getCharacterSetECIByValue(int value) throws FormatException {
if (value < 0 || value >= 900) {
throw FormatException.getFormatInstance();
}
return VALUE_TO_ECI.get(value);
}
/**
* @param name character set ECI encoding name
* @return CharacterSetECI representing ECI for character encoding, or null if it is legal
* but unsupported
*/
public static CharacterSetECI getCharacterSetECIByName(String name) {
return NAME_TO_ECI.get(name);
}
}

View File

@@ -2373,3 +2373,284 @@ impl GridSampler for DefaultGridSampler {
return Ok(bits);
}
}
/*
* Copyright 2008 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// package com.google.zxing.common;
// import com.google.zxing.FormatException;
// import java.nio.charset.Charset;
// import java.util.HashMap;
// import java.util.Map;
/**
* Encapsulates a Character Set ECI, according to "Extended Channel Interpretations" 5.3.1.1
* of ISO 18004.
*
* @author Sean Owen
*/
pub enum CharacterSetECI {
// 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"),
ISO8859_2,//(4, "ISO-8859-2"),
ISO8859_3,//(5, "ISO-8859-3"),
ISO8859_4,//(6, "ISO-8859-4"),
ISO8859_5,//(7, "ISO-8859-5"),
ISO8859_6,//(8, "ISO-8859-6"),
ISO8859_7,//(9, "ISO-8859-7"),
ISO8859_8,//(10, "ISO-8859-8"),
ISO8859_9,//(11, "ISO-8859-9"),
ISO8859_10,//(12, "ISO-8859-10"),
ISO8859_11,//(13, "ISO-8859-11"),
ISO8859_13,//(15, "ISO-8859-13"),
ISO8859_14,//(16, "ISO-8859-14"),
ISO8859_15,//(17, "ISO-8859-15"),
ISO8859_16,//(18, "ISO-8859-16"),
SJIS,//(20, "Shift_JIS"),
Cp1250,//(21, "windows-1250"),
Cp1251,//(22, "windows-1251"),
Cp1252,//(23, "windows-1252"),
Cp1256,//(24, "windows-1256"),
UnicodeBigUnmarked,//(25, "UTF-16BE", "UnicodeBig"),
UTF8,//(26, "UTF-8"),
ASCII,//(new int[] {27, 170}, "US-ASCII"),
Big5,//(28),
GB18030,//(29, "GB2312", "EUC_CN", "GBK"),
EUC_KR,//(30, "EUC-KR");
}
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 getValue(cs_eci: &CharacterSetECI) -> u32{
match cs_eci {
CharacterSetECI::Cp437 => 0,
CharacterSetECI::ISO8859_1 => 1,
CharacterSetECI::ISO8859_2 => 4,
CharacterSetECI::ISO8859_3 => 5,
CharacterSetECI::ISO8859_4 => 6,
CharacterSetECI::ISO8859_5 => 7,
CharacterSetECI::ISO8859_6 => 8,
CharacterSetECI::ISO8859_7 => 9,
CharacterSetECI::ISO8859_8 => 10,
CharacterSetECI::ISO8859_9 => 11,
CharacterSetECI::ISO8859_10 => 12,
CharacterSetECI::ISO8859_11 => 13,
CharacterSetECI::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::UTF8 => 26,
CharacterSetECI::ASCII => 27,
CharacterSetECI::Big5 => 28,
CharacterSetECI::GB18030 => 29,
CharacterSetECI::EUC_KR => 30,
}
}
pub fn getCharset(cs_eci: &CharacterSetECI) -> &'static dyn Encoding {
let name = match cs_eci {
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",
CharacterSetECI::ISO8859_6 => "ISO-8859-6",
CharacterSetECI::ISO8859_7 => "ISO-8859-7",
CharacterSetECI::ISO8859_8 => "ISO-8859-8",
CharacterSetECI::ISO8859_9 => "ISO-8859-9",
CharacterSetECI::ISO8859_10 => "ISO-8859-10",
CharacterSetECI::ISO8859_11 => "ISO-8859-11",
CharacterSetECI::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::UTF8 => "UTF-8",
CharacterSetECI::ASCII => "US-ASCII",
CharacterSetECI::Big5 => "Big5",
CharacterSetECI::GB18030 => "GB2312",
CharacterSetECI::EUC_KR => "EUC-KR",
};
encoding::label::encoding_from_whatwg_label(name).unwrap()
}
/**
* @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:&'static dyn Encoding) -> Option<CharacterSetECI> {
match charset.whatwg_name().unwrap() {
"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" => 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
* @return {@code CharacterSetECI} representing ECI of given value, or null if it is legal but
* unsupported
* @throws FormatException if ECI value is invalid
*/
pub fn getCharacterSetECIByValue( value:u32) -> Result<CharacterSetECI,Exceptions> {
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),
8 => Ok(CharacterSetECI::ISO8859_6),
9 => Ok(CharacterSetECI::ISO8859_7),
10 => Ok(CharacterSetECI::ISO8859_8),
11 => Ok(CharacterSetECI::ISO8859_9),
12 => Ok(CharacterSetECI::ISO8859_10),
13 => Ok(CharacterSetECI::ISO8859_11),
15 => Ok(CharacterSetECI::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),
_ => Err(Exceptions::NotFoundException("Bad ECI Value".to_owned()))
}
}
/**
* @param name character set ECI encoding name
* @return CharacterSetECI representing ECI for character encoding, or null if it is legal
* but unsupported
*/
pub fn getCharacterSetECIByName( name: &str) -> Option<CharacterSetECI> {
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" => Some(CharacterSetECI::UTF8),
"US-ASCII" => Some(CharacterSetECI::ASCII),
"Big5" => Some(CharacterSetECI::Big5),
"GB2312" => Some(CharacterSetECI::GB18030),
"EUC-KR" => Some(CharacterSetECI::EUC_KR),
_ => None,
}
}
}