decodeRow method
Implementation
U1DResult? decodeRow(UBitArray row) {
final Int32List counters = Int32List(6);
final List<int>? start = _findAsteriskPattern(row, counters);
if (start == null) return null;
int nextStart = row.getNextSet(start[1]);
final int end = row.size;
final StringBuffer result = StringBuffer();
int lastStart;
String decodedChar;
do {
try {
U1DReader.recordPattern(row, nextStart, counters);
} catch (_) {
return null;
}
final int pattern = _toPattern(counters);
if (pattern < 0) return null;
final int index = UCode93Patterns.characterEncodings.indexOf(pattern);
if (index < 0) return null;
decodedChar = UCode93Patterns.alphabet[index];
result.write(decodedChar);
lastStart = nextStart;
for (final int counter in counters) {
nextStart += counter;
}
nextStart = row.getNextSet(nextStart);
} while (decodedChar != "*" && nextStart < end);
String raw = result.toString();
if (!raw.endsWith("*")) return null;
raw = raw.substring(0, raw.length - 1);
if (raw.length < 2) return null;
if (!_checkChecksum(raw, 20, 15)) return null;
raw = raw.substring(0, raw.length - 2);
final String? text = _decodeExtended(raw);
if (text == null || text.isEmpty) return null;
int lastPatternSize = 0;
for (final int counter in counters) {
lastPatternSize += counter;
}
return U1DResult(UCodeFormat.code93, text, (start[1] + start[0]) / 2, lastStart + lastPatternSize / 2);
}