encoder test pass

This commit is contained in:
Henry
2022-09-26 20:49:25 -05:00
parent f203325b6d
commit a228f6300a
4 changed files with 26 additions and 79 deletions

View File

@@ -14,28 +14,6 @@
* limitations under the License. * limitations under the License.
*/ */
// package com.google.zxing.aztec.encoder;
// import com.google.zxing.BarcodeFormat;
// import com.google.zxing.EncodeHintType;
// import com.google.zxing.FormatException;
// import com.google.zxing.RXingResultPoint;
// import com.google.zxing.aztec.AztecDetectorRXingResult;
// import com.google.zxing.aztec.AztecWriter;
// import com.google.zxing.aztec.decoder.Decoder;
// import com.google.zxing.common.BitArray;
// import com.google.zxing.common.BitMatrix;
// import com.google.zxing.common.DecoderRXingResult;
// import org.junit.Assert;
// import org.junit.Test;
// import java.nio.charset.Charset;
// import java.nio.charset.StandardCharsets;
// import java.util.EnumMap;
// import java.util.Map;
// import java.util.Random;
// import java.util.regex.Pattern;
use std::collections::HashMap; use std::collections::HashMap;
use encoding::EncodingRef; use encoding::EncodingRef;
@@ -168,8 +146,24 @@ fn testAztecWriter() {
testWriter("Espa\u{00F1}ol", None, 25, true, 1); // Without ECI (implicit ISO-8859-1) testWriter("Espa\u{00F1}ol", None, 25, true, 1); // Without ECI (implicit ISO-8859-1)
testWriter("Espa\u{00F1}ol", Some(ISO_8859_1), 25, true, 1); // Explicit ISO-8859-1 testWriter("Espa\u{00F1}ol", Some(ISO_8859_1), 25, true, 1); // Explicit ISO-8859-1
testWriter("\u{20AC} 1 sample data.", Some(WINDOWS_1252), 25, true, 2); // ISO-8859-1 can't encode Euro; Windows-1252 can testWriter("\u{20AC} 1 sample data.", Some(WINDOWS_1252), 25, true, 2); // ISO-8859-1 can't encode Euro; Windows-1252 can
testWriter("\u{20AC} 1 sample data.", Some(WINDOWS_1252), 5, true, 2); // ISO-8859-1 can't encode Euro; Windows-1252 can
testWriter("\u{20AC} 1 sample data.", Some(ISO_8859_15), 25, true, 2); testWriter("\u{20AC} 1 sample data.", Some(ISO_8859_15), 25, true, 2);
testWriter("\u{20AC} 1 sample data.", Some(ISO_8859_15), 0, true, 2); testWriter("\u{20AC} 1 sample data.", Some(ISO_8859_15), 0, true, 2);
testWriter(
"\u{20AC} 1 sample data.",
Some(encoding::all::UTF_16BE),
0,
true,
3,
);
testWriter("Espa\u{00F1}ol", Some(UTF_8), 25, true, 2);
testWriter("\u{20AC} 1 sample data", Some(UTF_8), 0, true, 2);
testWriter("\u{20AC} 1 sample data. ", Some(UTF_8), 0, true, 2);
testWriter("\u{20AC} 1 sample data .", Some(UTF_8), 0, true, 2);
testWriter("\u{20AC} 1 sample data-.", Some(UTF_8), 0, true, 2);
testWriter("\u{20AC} 1 sample datA.", Some(UTF_8), 0, true, 2);
testWriter("\u{20AC} 1 sample dat1.", Some(UTF_8), 0, true, 2);
testWriter("\u{20AC} 1 sample data.", Some(UTF_8), 0, true, 2);
testWriter("\u{20AC} 1 sample data.", Some(UTF_8), 25, true, 2); testWriter("\u{20AC} 1 sample data.", Some(UTF_8), 25, true, 2);
testWriter("\u{20AC} 1 sample data.", Some(UTF_8), 100, true, 3); testWriter("\u{20AC} 1 sample data.", Some(UTF_8), 100, true, 3);
testWriter("\u{20AC} 1 sample data.", Some(UTF_8), 300, true, 4); testWriter("\u{20AC} 1 sample data.", Some(UTF_8), 300, true, 4);
@@ -756,7 +750,7 @@ fn testWriter(
assert_eq!(layers, aztec.getLayers(), "Unexpected nr. of layers"); assert_eq!(layers, aztec.getLayers(), "Unexpected nr. of layers");
let matrix2 = aztec.getMatrix(); let matrix2 = aztec.getMatrix();
assert_eq!(&matrix, matrix2); assert_eq!(&matrix, matrix2);
let mut r = AztecDetectorRXingResult::new( let mut r = AztecDetectorRXingResult::new(
matrix.clone(), matrix.clone(),
NO_POINTS, NO_POINTS,
@@ -767,7 +761,7 @@ fn testWriter(
let mut res = decoder::decode(&r).expect("should decode"); let mut res = decoder::decode(&r).expect("should decode");
assert_eq!(data, res.getText()); assert_eq!(data, res.getText());
// Check error correction by introducing up to eccPercent/2 errors // Check error correction by introducing up to eccPercent/2 errors
let ec_words = aztec.getCodeWords() * ecc_percent / 100 / 2; let ec_words = aztec.getCodeWords() * ecc_percent / 100 / 2;
let mut random = getPseudoRandom(); let mut random = getPseudoRandom();

View File

@@ -122,7 +122,8 @@ fn get_encoded_data(corrected_bits: &[bool]) -> Result<String, Exceptions> {
let mut encdr: &'static dyn encoding::Encoding = encoding::all::ISO_8859_1; let mut encdr: &'static dyn encoding::Encoding = encoding::all::ISO_8859_1;
let mut index = 0; let mut index = 0;
while index < end_index {
'main: while index < end_index {
if shift_table == Table::BINARY { if shift_table == Table::BINARY {
if end_index - index < 5 { if end_index - index < 5 {
break; break;
@@ -139,8 +140,8 @@ fn get_encoded_data(corrected_bits: &[bool]) -> Result<String, Exceptions> {
for _char_count in 0..length { for _char_count in 0..length {
// for (int charCount = 0; charCount < length; charCount++) { // for (int charCount = 0; charCount < length; charCount++) {
if end_index - index < 8 { if end_index - index < 8 {
index = end_index; // Force outer loop to exit //index = end_index; // Force outer loop to exit
break; break 'main;
} }
let code = read_code(corrected_bits, index, 8); let code = read_code(corrected_bits, index, 8);
decoded_bytes.push(code as u8); decoded_bytes.push(code as u8);
@@ -163,18 +164,12 @@ fn get_encoded_data(corrected_bits: &[bool]) -> Result<String, Exceptions> {
let mut n = read_code(corrected_bits, index, 3); let mut n = read_code(corrected_bits, index, 3);
index += 3; index += 3;
// flush bytes, FLG changes state // flush bytes, FLG changes state
// try {
result.push_str( result.push_str(
&encdr &encdr
.decode(&decoded_bytes, encoding::DecoderTrap::Strict) .decode(&decoded_bytes, encoding::DecoderTrap::Strict)
.unwrap(), .unwrap(),
); );
// result.push_str(&String::from_utf8(decoded_bytes.clone()).unwrap());
// result.append(decodedBytes.toString(encoding.name()));
// } catch (UnsupportedEncodingException uee) {
// throw new IllegalStateException(uee);
// }
decoded_bytes.clear(); decoded_bytes.clear();
match n { match n {
0 => result.push(29 as char), // translate FNC1 as ASCII 29 0 => result.push(29 as char), // translate FNC1 as ASCII 29
@@ -208,35 +203,8 @@ fn get_encoded_data(corrected_bits: &[bool]) -> Result<String, Exceptions> {
)); ));
} }
encdr = CharacterSetECI::getCharset(&charset_eci?); encdr = CharacterSetECI::getCharset(&charset_eci?);
// encdr = charsetECI?::getCharset();
} }
} }
// switch (n) {
// case 0:
// result.append(29 as char); // translate FNC1 as ASCII 29
// break;
// case 7:
// throw FormatException.getFormatInstance(); // FLG(7) is reserved and illegal
// default:
// // ECI is decimal integer encoded as 1-6 codes in DIGIT mode
// int eci = 0;
// if (endIndex - index < 4 * n) {
// break;
// }
// while (n-- > 0) {
// int nextDigit = readCode(correctedBits, index, 4);
// index += 4;
// if (nextDigit < 2 || nextDigit > 11) {
// throw FormatException.getFormatInstance(); // Not a decimal digit
// }
// eci = eci * 10 + (nextDigit - 2);
// }
// CharacterSetECI charsetECI = CharacterSetECI.getCharacterSetECIByValue(eci);
// if (charsetECI == null) {
// throw FormatException.getFormatInstance();
// }
// encoding = charsetECI.getCharset();
// }
// Go back to whatever mode we had been in // Go back to whatever mode we had been in
shift_table = latch_table; shift_table = latch_table;
} else if str.starts_with("CTRL_") { } else if str.starts_with("CTRL_") {
@@ -251,6 +219,7 @@ fn get_encoded_data(corrected_bits: &[bool]) -> Result<String, Exceptions> {
} }
} else { } else {
// Though stored as a table of strings for convenience, codes actually represent 1 or 2 *bytes*. // Though stored as a table of strings for convenience, codes actually represent 1 or 2 *bytes*.
// let b = encoding::all::ASCII.encode(str, encoding::EncoderTrap::Strict).unwrap();
let b = str.as_bytes(); let b = str.as_bytes();
//let b = str.getBytes(StandardCharsets.US_ASCII); //let b = str.getBytes(StandardCharsets.US_ASCII);
//decodedBytes.write(b, 0, b.length); //decodedBytes.write(b, 0, b.length);
@@ -430,7 +399,7 @@ fn correct_bits(
// next codewordSize-1 bits are all zeros or all ones // next codewordSize-1 bits are all zeros or all ones
corrected_bits.splice( corrected_bits.splice(
index..index + codeword_size - 1, index..index + codeword_size - 1,
vec![data_word > 1; codeword_size], vec![data_word > 1; codeword_size-1],
); );
// Arrays.fill(correctedBits, index, index + codewordSize - 1, dataWord > 1); // Arrays.fill(correctedBits, index, index + codewordSize - 1, dataWord > 1);
index += codeword_size - 1; index += codeword_size - 1;

View File

@@ -278,22 +278,7 @@ impl HighLevelEncoder {
b':' if next_char == b' ' => 5, b':' if next_char == b' ' => 5,
_ => 0, _ => 0,
}; };
// switch (text[index]) {
// case '\r':
// pairCode = nextChar == '\n' ? 2 : 0;
// break;
// case '.' :
// pairCode = nextChar == ' ' ? 3 : 0;
// break;
// case ',' :
// pairCode = nextChar == ' ' ? 4 : 0;
// break;
// case ':' :
// pairCode = nextChar == ' ' ? 5 : 0;
// break;
// default:
// pairCode = 0;
// }
if pair_code > 0 { if pair_code > 0 {
// We have one of the four special PUNCT pairs. Treat them specially. // We have one of the four special PUNCT pairs. Treat them specially.
// Get a new set of states for the two new characters. // Get a new set of states for the two new characters.

View File

@@ -87,7 +87,6 @@ impl State {
let eci_digits = encoding::all::ISO_8859_1 let eci_digits = encoding::all::ISO_8859_1
.encode(&format!("{}", eci), encoding::EncoderTrap::Strict) .encode(&format!("{}", eci), encoding::EncoderTrap::Strict)
.unwrap(); .unwrap();
dbg!(format!("{}", eci));
// let eciDigits = Integer.toString(eci).getBytes(StandardCharsets.ISO_8859_1); // let eciDigits = Integer.toString(eci).getBytes(StandardCharsets.ISO_8859_1);
token.add(eci_digits.len() as i32, 3); // 1-6: number of ECI digits token.add(eci_digits.len() as i32, 3); // 1-6: number of ECI digits
for eci_digit in &eci_digits { for eci_digit in &eci_digits {