- CODABLOCKF: fix misencodation of extended ASCII 0xB0-0xB9 when

followed by digit (ignore 2nd byte of FNC4 when categorizing
  Code C characters)
- New `ZBarcode_Cap()` flag `ZINT_CAP_BINDABLE`, differentiated
  from `ZINT_CAP_STACKABLE`, and new Qt Backend method
  `isBindable()`
- CLI: fix `separator` check to use new `ZINT_CAP_BINDABLE` instead
  of `ZINT_CAP_STACKABLE`
- ZBarcode_Cap: add missing symbologies to `ZINT_CAP_BINDABLE` (was
  `ZINT_CAP_STACKABLE`)
- DOTCODE: pad rows if given number of columns instead of failing
  if rows below min (5)
- DBAR/composites: ensure stacked symbologies and composites are
  not stacked (set `symbol->rows` to 0)
- test suite: move `test_perf` routines into single test
  "test_perf";
  new "test_random" (based on "test_bwipp") to test various
  symbologies with random binary - discovered CODABLOCKF bug;
  expand "test_bwipp"
manual: Feeback: mention AZTEC -1 meaning min & MICROPDF417:
  doc new `ZINT_CAP_BINDABLE`
general: various code fiddlings and re-formattings
This commit is contained in:
gitlost 2025-04-03 16:08:15 +01:00
parent 2370fbfbb7
commit a74871a7de
60 changed files with 3509 additions and 3267 deletions

View file

@ -195,14 +195,10 @@ static int c1_look_ahead_test(const unsigned char source[], const int length, co
}
switch (current_mode) {
case C1_C40: c40_count = 0; /* Step J2 */
break;
case C1_TEXT: text_count = 0; /* Step J3 */
break;
case C1_EDI: edi_count = 0; /* Missing in spec */
break;
case C1_BYTE: byte_count = 0; /* Step J4 */
break;
case C1_C40: c40_count = 0; break; /* Step J2 */
case C1_TEXT: text_count = 0; break; /* Step J3 */
case C1_EDI: edi_count = 0; break; /* Missing in spec */
case C1_BYTE: byte_count = 0; break; /* Step J4 */
}
for (sp = position; sp < length; sp++) {
@ -579,16 +575,20 @@ static int c1_encode(struct zint_symbol *symbol, unsigned char source[], int len
if (current_mode != next_mode) {
/* Change mode */
switch (next_mode) {
case C1_C40: target[tp++] = 230;
case C1_C40:
target[tp++] = 230;
if (debug_print) fputs("->C40 ", stdout);
break;
case C1_TEXT: target[tp++] = 239;
case C1_TEXT:
target[tp++] = 239;
if (debug_print) fputs("->Text ", stdout);
break;
case C1_EDI: target[tp++] = 238;
case C1_EDI:
target[tp++] = 238;
if (debug_print) fputs("->EDI ", stdout);
break;
case C1_BYTE: target[tp++] = 231;
case C1_BYTE:
target[tp++] = 231;
if (debug_print) fputs("->Byte ", stdout);
byte_start = tp;
target[tp++] = 0; /* Byte count holder (may be expanded to 2 codewords) */