Version 2.16.0 (2025-12-19)
===========================
**Incompatible changes**
------------------------
- In `UNICODE_MODE`, ECI 899 Binary input now interpreted as UTF-8 (previously
treated as-is, i.e. as binary bytes - this now requires `DATA_MODE`)
- Buffer length of member `errtxt` in `zint_symbol` extended 100 -> 160
(client buffers may need checking/extending)
- New `content_segs` & `content_seg_count` fields in `zint_symbol` for use with
new output option `BARCODE_CONTENT_SEGS`
- Symbol structure members `option_1`, `option_2` and `option_3` now updated
after `ZBarcode_Encode()` and variants are called, and there are three new
methods in the Qt Backend to access to them
- New Qt Backend method `isBindable()` for new flag `ZINT_CAP_BINDABLE`
- New Qt Backend methods `gs1SyntaxEngine()`, `setGS1SyntaxEngine()` and
`haveGS1SyntaxEngine()` to access newly added GS1 Syntax Engine support
- GS1 Composites now return warning if CC type upped from requested due to size
of composite data
- EAN-8 with add-on now returns warning that it's non-standard
- UPC-E now returns warning if first digit of 7 digits ignored (not '0' or '1')
- For GS1 Composite, no primary (linear component) now returns
`ZINT_ERROR_INVALID_DATA` (previously returned `ZINT_ERROR_INVALID_OPTION`)
- The distributed Windows binary "zint.exe" is now built with Microsoft Visual
Studio 2015 and requires the Visual C runtime DLL "VCRUNTIME140.dll"
(previously it was built with Visual Studio 6.0)
Changes
-------
- Add new `BARCODE_CONTENT_SEGS` option for `output_options` which sets new
fields `content_segs` and `content_seg_count` with encoded data
(pre-converted, i.e. UTF-8 unless input mode is `DATA_MODE`)
- Add API funcs `ZBarcode_UTF8_To_ECI()` and `ZBarcode_Dest_Len_ECI()`
- Set `option_1`, `option_2`, `option_3` to values used in encodation, and add
new access methods `encodedOption1()` etc. to Qt Backend, and use in GUI to
provide better feedback
- AZTEC: give more precise warnings in low ECC situations, and indicate via
`option_1` by setting to -1 (min 3 words), 0 (<5% + 3 words)
- Better warning messages on non-compliant heights
- composite: warn if CC type upped from requested
- gs1: csumalpha: improve warning, report both chars (ticket #332, props Harald
Oehlmann)
- New `ZBarcode_Cap()` flag `ZINT_CAP_BINDABLE`, differentiated from
`ZINT_CAP_STACKABLE`, and new Qt Backend method `isBindable()`
- DOTCODE: now pads rows if given number of columns instead of failing if rows
below min (5)
- EAN-8 + add-on: warn as non-compliant
- UPC-E: warn if first digit of 7 (or 8 if check digit given) not '0' or '1'
- Extend `errtxt` buffer 100 -> 160
- Add new symbologies `BARCODE_EAN8`, `BARCODE_EAN_2ADDON`,
`BARCODE_EAN_5ADDON`, `BARCODE_EAN13`, `BARCODE_EAN8_CC` and
`BARCODE_EAN13_CC` as replacements for `BARCODE_EANX`, `BARCODE_EANX_CHK` and
`BARCODE_EANX_CC` and use in CLI/GUI (`BARCODE_EANX` etc. marked as legacy)
- For EAN/UPC accept space as alternative add-on separator to '+', and accept
GTIN-13 format with & without 2-digit or 5-digit add-on (no separator)
- GS1PARENS_MODE: allow parentheses in AI data if backslashed (necessary for
opening parentheses, optional for closing ones)
- Prefix all `INTERNAL` funcs/tables with `zint_`, except for those in
"backend/common.h", which are prefixed by `z_` - makes symbol clashes more
unlikely when zint is statically linked (ticket #337, props Ulrich Becker)
- Add support for GS1 Syntax Engine with new `input_mode` flag
`GS1SYNTAXENGINE_MODE` (CLI --gs1strict, GUI "GS1 Strict" checkbox)
- GS1_MODE: allow GS1 Digital Link URIs (no validation unless
`GS1SYNTAXENGINE_MODE` set)
- CLI: --gs1parens, --gs1nocheck and --gs1strict now imply --gs1
- GS1: new AIs 717 (GSCN 25-199) and 8040-3 (GSCN 25-047)
Bugs
----
- CODABLOCKF: fix misencodation of extended ASCII 0xB0-0xB9 when followed by
digit (ignore 2nd byte of FNC4 when categorizing Code C characters)
- AZTEC: fix GS1 mode with Structured Append (wasn't outputting initial FNC1)
- ECI: ECI 899 in UNICODE_MODE wasn't being converted from UTF-8, which was
inconsistent
- set_height: fix non-compliance false positives by using epsilon in checks
- UPU_S10: fix Service Indicator warning re "H" (ticket #331, props Milton Neal)
- 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`)
- MAILMARK_2D: fix postcode validation: no limited alphanumerics, spaced-out
DPS "outward"-only allowed, all-blank DPS allowed (ticket #334, props Milton
Neal)
- DOTCODE: fix padding allowance to cover cases with large no. of columns
requested and little data, to prevent buffer overflow
- manual/man page: fix DATAMATRIX Sizes tables "28 12x26" -> "27 12x26"