fix eci w/o priority charset setting

This commit is contained in:
Henry Schimke
2022-11-05 12:00:52 -05:00
parent 76ec49ac83
commit a4c640822c
5 changed files with 45 additions and 45 deletions

View File

@@ -42,14 +42,14 @@ pub enum CharacterSetECI {
ISO8859_3, //(5, "ISO-8859-3"), ISO8859_3, //(5, "ISO-8859-3"),
ISO8859_4, //(6, "ISO-8859-4"), ISO8859_4, //(6, "ISO-8859-4"),
ISO8859_5, //(7, "ISO-8859-5"), ISO8859_5, //(7, "ISO-8859-5"),
ISO8859_6, //(8, "ISO-8859-6"), //ISO8859_6, //(8, "ISO-8859-6"),
ISO8859_7, //(9, "ISO-8859-7"), ISO8859_7, //(9, "ISO-8859-7"),
ISO8859_8, //(10, "ISO-8859-8"), //ISO8859_8, //(10, "ISO-8859-8"),
ISO8859_9, //(11, "ISO-8859-9"), ISO8859_9, //(11, "ISO-8859-9"),
ISO8859_10, //(12, "ISO-8859-10"), // ISO8859_10, //(12, "ISO-8859-10"),
ISO8859_11, //(13, "ISO-8859-11"), // ISO8859_11, //(13, "ISO-8859-11"),
ISO8859_13, //(15, "ISO-8859-13"), ISO8859_13, //(15, "ISO-8859-13"),
ISO8859_14, //(16, "ISO-8859-14"), // ISO8859_14, //(16, "ISO-8859-14"),
ISO8859_15, //(17, "ISO-8859-15"), ISO8859_15, //(17, "ISO-8859-15"),
ISO8859_16, //(18, "ISO-8859-16"), ISO8859_16, //(18, "ISO-8859-16"),
SJIS, //(20, "Shift_JIS"), SJIS, //(20, "Shift_JIS"),
@@ -108,14 +108,14 @@ impl CharacterSetECI {
CharacterSetECI::ISO8859_3 => 5, CharacterSetECI::ISO8859_3 => 5,
CharacterSetECI::ISO8859_4 => 6, CharacterSetECI::ISO8859_4 => 6,
CharacterSetECI::ISO8859_5 => 7, CharacterSetECI::ISO8859_5 => 7,
CharacterSetECI::ISO8859_6 => 8, // CharacterSetECI::ISO8859_6 => 8,
CharacterSetECI::ISO8859_7 => 9, CharacterSetECI::ISO8859_7 => 9,
CharacterSetECI::ISO8859_8 => 10, // CharacterSetECI::ISO8859_8 => 10,
CharacterSetECI::ISO8859_9 => 11, CharacterSetECI::ISO8859_9 => 11,
CharacterSetECI::ISO8859_10 => 12, // CharacterSetECI::ISO8859_10 => 12,
CharacterSetECI::ISO8859_11 => 13, // CharacterSetECI::ISO8859_11 => 13,
CharacterSetECI::ISO8859_13 => 15, CharacterSetECI::ISO8859_13 => 15,
CharacterSetECI::ISO8859_14 => 16, // CharacterSetECI::ISO8859_14 => 16,
CharacterSetECI::ISO8859_15 => 17, CharacterSetECI::ISO8859_15 => 17,
CharacterSetECI::ISO8859_16 => 18, CharacterSetECI::ISO8859_16 => 18,
CharacterSetECI::SJIS => 20, CharacterSetECI::SJIS => 20,
@@ -141,14 +141,14 @@ impl CharacterSetECI {
CharacterSetECI::ISO8859_3 => "ISO-8859-3", CharacterSetECI::ISO8859_3 => "ISO-8859-3",
CharacterSetECI::ISO8859_4 => "ISO-8859-4", CharacterSetECI::ISO8859_4 => "ISO-8859-4",
CharacterSetECI::ISO8859_5 => "ISO-8859-5", CharacterSetECI::ISO8859_5 => "ISO-8859-5",
CharacterSetECI::ISO8859_6 => "ISO-8859-6", // CharacterSetECI::ISO8859_6 => "ISO-8859-6",
CharacterSetECI::ISO8859_7 => "ISO-8859-7", CharacterSetECI::ISO8859_7 => "ISO-8859-7",
CharacterSetECI::ISO8859_8 => "ISO-8859-8", // CharacterSetECI::ISO8859_8 => "ISO-8859-8",
CharacterSetECI::ISO8859_9 => "ISO-8859-9", CharacterSetECI::ISO8859_9 => "ISO-8859-9",
CharacterSetECI::ISO8859_10 => "ISO-8859-10", // CharacterSetECI::ISO8859_10 => "ISO-8859-10",
CharacterSetECI::ISO8859_11 => "ISO-8859-11", // CharacterSetECI::ISO8859_11 => "ISO-8859-11",
CharacterSetECI::ISO8859_13 => "ISO-8859-13", CharacterSetECI::ISO8859_13 => "ISO-8859-13",
CharacterSetECI::ISO8859_14 => "ISO-8859-14", // CharacterSetECI::ISO8859_14 => "ISO-8859-14",
CharacterSetECI::ISO8859_15 => "ISO-8859-15", CharacterSetECI::ISO8859_15 => "ISO-8859-15",
CharacterSetECI::ISO8859_16 => "ISO-8859-16", CharacterSetECI::ISO8859_16 => "ISO-8859-16",
CharacterSetECI::SJIS => "Shift_JIS", CharacterSetECI::SJIS => "Shift_JIS",
@@ -184,14 +184,14 @@ impl CharacterSetECI {
"iso-8859-3" => Some(CharacterSetECI::ISO8859_3), "iso-8859-3" => Some(CharacterSetECI::ISO8859_3),
"iso-8859-4" => Some(CharacterSetECI::ISO8859_4), "iso-8859-4" => Some(CharacterSetECI::ISO8859_4),
"iso-8859-5" => Some(CharacterSetECI::ISO8859_5), "iso-8859-5" => Some(CharacterSetECI::ISO8859_5),
"iso-8859-6" => Some(CharacterSetECI::ISO8859_6), // "iso-8859-6" => Some(CharacterSetECI::ISO8859_6),
"iso-8859-7" => Some(CharacterSetECI::ISO8859_7), "iso-8859-7" => Some(CharacterSetECI::ISO8859_7),
"iso-8859-8" => Some(CharacterSetECI::ISO8859_8), // "iso-8859-8" => Some(CharacterSetECI::ISO8859_8),
"iso-8859-9" => Some(CharacterSetECI::ISO8859_9), "iso-8859-9" => Some(CharacterSetECI::ISO8859_9),
"iso-8859-10" => Some(CharacterSetECI::ISO8859_10), // "iso-8859-10" => Some(CharacterSetECI::ISO8859_10),
"iso-8859-11" => Some(CharacterSetECI::ISO8859_11), // "iso-8859-11" => Some(CharacterSetECI::ISO8859_11),
"iso-8859-13" => Some(CharacterSetECI::ISO8859_13), "iso-8859-13" => Some(CharacterSetECI::ISO8859_13),
"iso-8859-14" => Some(CharacterSetECI::ISO8859_14), // "iso-8859-14" => Some(CharacterSetECI::ISO8859_14),
"iso-8859-15" => Some(CharacterSetECI::ISO8859_15), "iso-8859-15" => Some(CharacterSetECI::ISO8859_15),
"iso-8859-16" => Some(CharacterSetECI::ISO8859_16), "iso-8859-16" => Some(CharacterSetECI::ISO8859_16),
"shift_jis" => Some(CharacterSetECI::SJIS), "shift_jis" => Some(CharacterSetECI::SJIS),
@@ -223,14 +223,14 @@ impl CharacterSetECI {
5 => Ok(CharacterSetECI::ISO8859_3), 5 => Ok(CharacterSetECI::ISO8859_3),
6 => Ok(CharacterSetECI::ISO8859_4), 6 => Ok(CharacterSetECI::ISO8859_4),
7 => Ok(CharacterSetECI::ISO8859_5), 7 => Ok(CharacterSetECI::ISO8859_5),
8 => Ok(CharacterSetECI::ISO8859_6), // 8 => Ok(CharacterSetECI::ISO8859_6),
9 => Ok(CharacterSetECI::ISO8859_7), 9 => Ok(CharacterSetECI::ISO8859_7),
10 => Ok(CharacterSetECI::ISO8859_8), // 10 => Ok(CharacterSetECI::ISO8859_8),
11 => Ok(CharacterSetECI::ISO8859_9), 11 => Ok(CharacterSetECI::ISO8859_9),
12 => Ok(CharacterSetECI::ISO8859_10), // 12 => Ok(CharacterSetECI::ISO8859_10),
13 => Ok(CharacterSetECI::ISO8859_11), // 13 => Ok(CharacterSetECI::ISO8859_11),
15 => Ok(CharacterSetECI::ISO8859_13), 15 => Ok(CharacterSetECI::ISO8859_13),
16 => Ok(CharacterSetECI::ISO8859_14), // 16 => Ok(CharacterSetECI::ISO8859_14),
17 => Ok(CharacterSetECI::ISO8859_15), 17 => Ok(CharacterSetECI::ISO8859_15),
18 => Ok(CharacterSetECI::ISO8859_16), 18 => Ok(CharacterSetECI::ISO8859_16),
20 => Ok(CharacterSetECI::SJIS), 20 => Ok(CharacterSetECI::SJIS),
@@ -261,14 +261,14 @@ impl CharacterSetECI {
"ISO-8859-3" => Some(CharacterSetECI::ISO8859_3), "ISO-8859-3" => Some(CharacterSetECI::ISO8859_3),
"ISO-8859-4" => Some(CharacterSetECI::ISO8859_4), "ISO-8859-4" => Some(CharacterSetECI::ISO8859_4),
"ISO-8859-5" => Some(CharacterSetECI::ISO8859_5), "ISO-8859-5" => Some(CharacterSetECI::ISO8859_5),
"ISO-8859-6" => Some(CharacterSetECI::ISO8859_6), // "ISO-8859-6" => Some(CharacterSetECI::ISO8859_6),
"ISO-8859-7" => Some(CharacterSetECI::ISO8859_7), "ISO-8859-7" => Some(CharacterSetECI::ISO8859_7),
"ISO-8859-8" => Some(CharacterSetECI::ISO8859_8), // "ISO-8859-8" => Some(CharacterSetECI::ISO8859_8),
"ISO-8859-9" => Some(CharacterSetECI::ISO8859_9), "ISO-8859-9" => Some(CharacterSetECI::ISO8859_9),
"ISO-8859-10" => Some(CharacterSetECI::ISO8859_10), // "ISO-8859-10" => Some(CharacterSetECI::ISO8859_10),
"ISO-8859-11" => Some(CharacterSetECI::ISO8859_11), // "ISO-8859-11" => Some(CharacterSetECI::ISO8859_11),
"ISO-8859-13" => Some(CharacterSetECI::ISO8859_13), "ISO-8859-13" => Some(CharacterSetECI::ISO8859_13),
"ISO-8859-14" => Some(CharacterSetECI::ISO8859_14), // "ISO-8859-14" => Some(CharacterSetECI::ISO8859_14),
"ISO-8859-15" => Some(CharacterSetECI::ISO8859_15), "ISO-8859-15" => Some(CharacterSetECI::ISO8859_15),
"ISO-8859-16" => Some(CharacterSetECI::ISO8859_16), "ISO-8859-16" => Some(CharacterSetECI::ISO8859_16),
"Shift_JIS" => Some(CharacterSetECI::SJIS), "Shift_JIS" => Some(CharacterSetECI::SJIS),

View File

@@ -114,7 +114,7 @@ impl ECIEncoderSet {
//we always need the ISO-8859-1 encoder. It is the default encoding //we always need the ISO-8859-1 encoder. It is the default encoding
neededEncoders.push(encoding::all::ISO_8859_1); neededEncoders.push(encoding::all::ISO_8859_1);
let mut needUnicodeEncoder = if let Some(pc) = priorityCharset { let mut needUnicodeEncoder = if let Some(pc) = priorityCharset {
pc.name().starts_with("UTF") pc.name().starts_with("UTF") || pc.name().starts_with("utf")
} else { } else {
false false
}; };

View File

@@ -351,8 +351,8 @@ impl MinimalECIInput {
} }
let mut intsAL: Vec<u16> = Vec::new(); let mut intsAL: Vec<u16> = Vec::new();
let mut current = edges[inputLength][minimalJ as usize].clone(); let mut current = edges[inputLength][minimalJ as usize].clone();
while current.is_some() { while let Some(c) = current {
let c = current.unwrap().clone(); //let c = current.unwrap().clone();
if c.isFNC1() { if c.isFNC1() {
intsAL.splice(0..0, [1000]); intsAL.splice(0..0, [1000]);
} else { } else {
@@ -361,11 +361,12 @@ impl MinimalECIInput {
.iter() .iter()
.map(|x| *x as u16) .map(|x| *x as u16)
.collect(); .collect();
let mut i = bytes.len() as i32 - 1; let mut i = bytes.len() as isize - 1;
while i >= 0 { while i >= 0 {
// for (int i = bytes.length - 1; i >= 0; i--) { // for (int i = bytes.length - 1; i >= 0; i--) {
intsAL.splice(0..0, [bytes[i as usize]]); // intsAL.splice(0..0, [bytes[i as usize]]);
i = -1; intsAL.insert(0, bytes[i as usize]);
i -= 1;
} }
} }
let previousEncoderIndex = if c.previous.is_none() { let previousEncoderIndex = if c.previous.is_none() {
@@ -374,10 +375,11 @@ impl MinimalECIInput {
c.previous.clone().unwrap().encoderIndex c.previous.clone().unwrap().encoderIndex
}; };
if previousEncoderIndex != c.encoderIndex { if previousEncoderIndex != c.encoderIndex {
intsAL.splice( // intsAL.splice(
0..0, // 0..0,
[256 as u16 + encoderSet.getECIValue(c.encoderIndex) as u16], // [256 as u16 + encoderSet.getECIValue(c.encoderIndex) as u16],
); // );
intsAL.insert(0, 256 as u16 + encoderSet.getECIValue(c.encoderIndex) as u16);
} }
current = c.previous.clone(); current = c.previous.clone();
} }

View File

@@ -524,11 +524,11 @@ fn testSizes() {
#[test] #[test]
fn testECIs() { fn testECIs() {
let mut visualized = visualize(&minimal_encoder::encodeHighLevel("that particularly stands out to me is \u{0625}\u{0650}\u{062C}\u{064E}\u{0651}\u{0627}\u{0635} (\u{02BE}\u{0101}\u{1E63}) \"pear\", suggested to have originated from Hebrew \u{05D0}\u{05B7}\u{05D2}\u{05B8}\u{05BC}\u{05E1} (ag\u{00E1}s)").expect("encode")); let visualized = visualize(&minimal_encoder::encodeHighLevel("that particularly stands out to me is \u{0625}\u{0650}\u{062C}\u{064E}\u{0651}\u{0627}\u{0635} (\u{02BE}\u{0101}\u{1E63}) \"pear\", suggested to have originated from Hebrew \u{05D0}\u{05B7}\u{05D2}\u{05B8}\u{05BC}\u{05E1} (ag\u{00E1}s)").expect("encode"));
assert_eq!("239 209 151 206 214 92 122 140 35 158 144 162 52 205 55 171 137 23 67 206 218 175 147 113 15 254 116 33 241 25 231 186 14 212 64 253 151 252 159 33 41 241 27 231 83 171 53 209 35 25 134 6 42 33 35 239 184 31 193 234 7 252 205 101 127 241 209 34 24 5 22 23 221 148 179 239 128 140 92 187 106 204 198 59 19 25 114 248 118 36 254 231 106 196 19 239 101 27 107 69 189 112 236 156 252 16 174 125 24 10 125 116 42 129", assert_eq!("239 209 151 206 214 92 122 140 35 158 144 162 52 205 55 171 137 23 67 206 218 175 147 113 15 254 116 33 241 25 231 186 14 212 64 253 151 252 159 33 41 241 27 231 83 171 53 209 35 25 134 6 42 33 35 239 184 31 193 234 7 252 205 101 127 241 209 34 24 5 22 23 221 148 179 239 128 140 92 187 106 204 198 59 19 25 114 248 118 36 254 231 106 196 19 239 101 27 107 69 189 112 236 156 252 16 174 125 24 10 125 116 42 129",
visualized); visualized);
visualized = visualize(&minimal_encoder::encodeHighLevelWithDetails("that particularly stands out to me is \u{0625}\u{0650}\u{062C}\u{064E}\u{0651}\u{0627}\u{0635} (\u{02BE}\u{0101}\u{1E63}) \"pear\", suggested to have originated from Hebrew \u{05D0}\u{05B7}\u{05D2}\u{05B8}\u{05BC}\u{05E1} (ag\u{00E1}s)", Some(encoding::all::UTF_8), None , SymbolShapeHint::FORCE_NONE).expect("encode")); let visualized = visualize(&minimal_encoder::encodeHighLevelWithDetails("that particularly stands out to me is \u{0625}\u{0650}\u{062C}\u{064E}\u{0651}\u{0627}\u{0635} (\u{02BE}\u{0101}\u{1E63}) \"pear\", suggested to have originated from Hebrew \u{05D0}\u{05B7}\u{05D2}\u{05B8}\u{05BC}\u{05E1} (ag\u{00E1}s)", Some(encoding::all::UTF_8), None , SymbolShapeHint::FORCE_NONE).expect("encode"));
assert_eq!("241 27 239 209 151 206 214 92 122 140 35 158 144 162 52 205 55 171 137 23 67 206 218 175 147 113 15 254 116 33 231 202 33 131 77 154 119 225 163 238 206 28 249 93 36 150 151 53 108 246 145 228 217 71 199 42 33 35 239 184 31 193 234 7 252 205 101 127 241 209 34 24 5 22 23 221 148 179 239 128 140 92 187 106 204 198 59 19 25 114 248 118 36 254 231 43 133 212 175 38 220 44 6 125 49 172 93 189 209 111 61 217 203 62 116 42 129 1 151 46 196 91 241 137 32 182 77 227 122 18 168 63 213 108 4 154 49 199 94 244 140 35 185 80", assert_eq!("241 27 239 209 151 206 214 92 122 140 35 158 144 162 52 205 55 171 137 23 67 206 218 175 147 113 15 254 116 33 231 202 33 131 77 154 119 225 163 238 206 28 249 93 36 150 151 53 108 246 145 228 217 71 199 42 33 35 239 184 31 193 234 7 252 205 101 127 241 209 34 24 5 22 23 221 148 179 239 128 140 92 187 106 204 198 59 19 25 114 248 118 36 254 231 43 133 212 175 38 220 44 6 125 49 172 93 189 209 111 61 217 203 62 116 42 129 1 151 46 196 91 241 137 32 182 77 227 122 18 168 63 213 108 4 154 49 199 94 244 140 35 185 80",
visualized); visualized);
} }

View File

@@ -1302,7 +1302,7 @@ impl RXingResult {
size += Self::prepend(&Edge::getBytes1(254), &mut bytesAL); size += Self::prepend(&Edge::getBytes1(254), &mut bytesAL);
} }
let mut hold_current = Some(solution.clone()); let mut hold_current = Some(solution.clone());
while let Some(current) = hold_current { while let Some(current) = hold_current { // Fails on i = 77 should be 151 is 144
size += Self::prepend(&current.getDataBytes()?, &mut bytesAL); size += Self::prepend(&current.getDataBytes()?, &mut bytesAL);
if current.previous.is_none() if current.previous.is_none()
@@ -1320,9 +1320,7 @@ impl RXingResult {
randomizePostfixLength.push(bytesAL.len()); randomizePostfixLength.push(bytesAL.len());
randomizeLengths.push(size); randomizeLengths.push(size);
} }
//if Edge::getPreviousStartMode(current.previous.clone()) != current.getMode() {
Self::prepend(&current.getLatchBytes()?, &mut bytesAL); Self::prepend(&current.getLatchBytes()?, &mut bytesAL);
//}
size = 0; size = 0;
} }