Version 2.16.0.9 (dev) not released yet (2026-07-06)
====================================================

**Incompatible changes**
------------------------
- Code 128 now errors on unrecognised extra escape sequences
  (previously just passed them through)
- Aztec error codeword percentages adjusted to be at least advertised values
  (may cause symbol size change, and generation failure if specified)
- Improved Aztec encodation algorithm (may cause symbol size change)
- New Qt Backend method `save_as_memfile()` to save file to memory
- New Qt Backend methods `gs1Raw()` and `setGS1Raw()` for new `GS1RAW_MODE`
  option for processing GS1 input
- New Qt Backend helper methods `setBorderTypeValue()`, `encodedInputMode()`,
  `encodedOutputOptions()`, `ECIValueToECIIndex()` and `ECIIndexToECIValue()`
- CLI now warns if both "--dmre" and "--square" are given
  (previously silently ignored "--dmre")
- New escape sequences `\L` (DLE), `\F` (FS), `\N` (US)

Changes
-------
- backend_qt: add new method `save_as_memfile()` to save as
  `BARCODE_MEMORY_FILE` and use in GUI for pasting to clipboard instead of
  creating temporary file
- CLI: allow "tiff" as filetype (saved as ".tif");
  make args for "--scalexdimdp" and "--scmvv" optional;
  make "--mirror" available in standard non-batch mode;
  add `ZINT_TEST`-only "--test" option to do various internal tests
- GS1SE: exclude GS1_128 from requisite AIs check as may be spread across more
  than one barcode (ticket #348, props Harald Oehlmann and Terry Burton)
- AZTEC: add improved encoding algorithm adapted from ZXing, props Frank Yellin
  and Rustam Abdullaev; previous algorithm available via "--fast" (input_mode
  |= FAST_MODE)
- AZTEC: add new option "--azfull" (`option_3 = ZINT_AZTEC_FULL`) to only
  consider Full symbols (not Compact ones) on automatic sizing
- GS1: new `GS1RAW_MODE` (CLI "--gs1raw") and GS1 Syntax Engine "Unbracketed AI
  element strings" (caret) options for specifying GS1 input (ticket #350, props
  Mario Verbruggen)
- DATAMATRIX: new options "--dmb256" (`option_3 = DM_B256_START`) & "--dmc40"
  (`option_3 = DM_C40_START`) to allow forcing of initial encodation for given
  no. (`option_1`) of initial characters, with 0 meaning all
- AZTEC/DATAMATRIX: add manual FNC1 support
- AUSPOST: support FCC 00 Null (DPID all zeroes) and allow variable length data
  input
- general: new escape sequences `\L` (DLE), `\F` (FS), `\N` (US)
- TELEPEN/TELEPEN_NUM: support AIM-defined Start/Stop characters with option
  "--vers=1" (API `option_2 = 1`)
- TELEPEN_NUM: support switching to Full ASCII mode with DLE
- TELEPEN: support switching to Compressed Numeric Mode with DLE if AIM enabled

Bugs
----
- CODE128: fix not handling FNC1 at end of data when in manual switching mode
  or any FNC1 after manual C mode selected and no other non-C data;
  fix possible shifting before manual FNC1 in 2nd position after single alpha;
  fix not removing manual FNC1 in 1st/2nd position from content segs
- CLI: fix "--scalexdimdp" X-dim inch units being divided instead of multiplied
  on conversion to mm
- DOTCODE: fix not emitting FNC1 (signalling not GS1) if input is just 2 digits
- CMake: set `rpath` of CLI/GUI on macOS install (ticket #346, props Hagen Röwer
  and Bryce Harrison)
- AZTEC: fix ECC to be at least advertised percentages (ticket #347, props
  Francois Grieu)
- CODE32/PZN: fix not restoring `option_2` (props axxel)
- DBAR_EXP_CC/DBAR_EXPSTK_CC: fix separator over finder patterns when linear
  part is greater than 4 codeblocks
- raster/vector: allow for separator height being > twice row height (buffer
  overflow for raster, zero/negative height rects for vector) (ticket #353,
  props Simon Resch)
- raster/vector: fix `BARCODE_BIND_TOP` trumping `BARCODE_BOX`
- raster/vector: EAN/UPC: fix calculation of image/vector height to allow for
  heights smaller than `textoffset` when have add-on (buffer overflow for
  raster, outside vector height for vector)
- ZBarcode_Encode_Segs: allow for multiple (stacked) rows when setting absolute
  minimum height
- CLI: stop looping over data args when have error
- composite: preserve `gs1_verify()` warning (if any)
- GRIDMATRIX: fix byte latch 6 -> 7, & allowing more than one non-digit in
  numeral (both caused misencodation)


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"


Version 2.15.0 (2025-02-25)
===========================

***2.14.0 regression fix***
---------------------------
- CODE128: start code no longer omitted for data starting with numerics followed
  by extended ASCII (Latin-1)

**Incompatible changes**
------------------------
- New `text_length` field in `zint_symbol`

Changes
-------
- iso4217: remove 191 (HRK), 694 (SLL), 931 (CUC); add 926 (VED)
- Add `text_length` (length of `text`) to `zint_symbol`
- PLESSEY: add show default check characters option

Bugs
----
- CODE128: fix 2.14.0 regression (see above), never start in mode C1
- CODE32: ignore `option_2` (check digit options)
- PZN: ignore `option_2` (check digit options) except for indicates PZN7 only
- DPD: exclude DEL from ident tag also
- out_maybe_mkdir: fix `utf8_to_wide()` return (Windows only)
- man page: fix Code 93 `--vers=1` hide -> show default check digits


Version 2.14.0 (2025-02-05)
===========================

**Incompatible changes**
------------------------
- New `memfile` & `memfile_size` fields in `zint_symbol` for use with new output
  option `BARCODE_MEMORY_FILE`
- Buffer length of member `text` (HRT) in `zint_symbol` extended 200 -> 256
  (client buffers may need checking/extending)
- Invalid `input_mode` now returns warning
- Aztec Code symbols that due to input length & user-requested version have less
  than recommended 5% error correction codewords now return warning
- New CODE128-only special extra escapes beginning `\^`
- Add-ons for UPC-A and UPC-E now descend to be level with the main symbol guard
  bars, and the righthand outside digit is now placed 1X less from main symbol
  to avoid touching any add-on
- GS1-128 symbols now warn if READER_INIT option used

Changes
-------
- BMP: lessen heap memory usage by only `malloc()`ing a row
- GIF: lessen heap memory usage by paging; use standard colour char map
- Add `BARCODE_MEMORY_FILE` to `symbol->output_options` to allow outputting to
  in-memory buffer `symbol->memfile` instead of to file `symbol->outfile`,
  ticket #301
- CODE16K (was for CODE128): improve encodation on A/B shifting, props Daniel
  Gredler (Okapi)
- CODE128: add new extra escape `\^1` for manual insertion of FNC1s, ticket
  #324, props Jim Shank;
  new  extra escapes `\^A`, `\^B`, `\^C` and `\^@` for manual switching of
  Code Sets;
  add minimal encodation algorithm, props Alex Geller (ZXing) and Bue Jensen
  (BWIPP);
- library: return warning on invalid `input_mode` reset
- library/CLI: expanded error messages
- GS1: new AIs 7250-7259 (GSCN 22-246);
  iso4217: new ISO 4217 currency code 924;
  new AIs 7041 (GSCN 23-272) (packagetype) and 716 (GSCN-24-157)
- AZTEC: workaround MSVC 2022 optimizer bug in `az_populate_map()` loops,
  ticket #317, props Andre Maute;
  return warning if ECC < 5% (due to bit-stuffing when version given)
- MAXICODE: zero-pad US postcodes that lack "+4" (Annex B.1.4a), from
  OkapiBarcode, props Daniel Gredler;
  add minimal encodation algorithm, props Bue Jensen (BWIPP)
- GUI: use X11 (xcb) as platform instead of Wayland on Linux to avoid various
  weird behaviours;
  in "grpDATF.ui" use "PlainText" rather than "RichText" for tracker ratio
  examples as height of text messing up sometimes
- UPCA/UPCE: descend add-ons to same level as guards and adjust righthand
  outside digit to be 4X/2X instead of 5X/3X away from main symbol so as not to
  touch add-on TODO: revisit when standard clarified
- manual: make explicit that AI "(00)" and "(01)" prefixes added by Zint are
  HRT-only; clarify Codablock F length maximum & add examples
- add DXFILMEDGE (MR #159, props Antoine Mérino)

Bugs
----
- raster/BMP/GIF/PCX/TIF: fix dealing with very large data (use `size_t`)
- raster: add `raster_malloc()` to fail > 1GB (avoids very large output files;
  also lessens to some degree chances of being victim of OOM killer on Linux)
- GUI: printing scale dialog: set maxima on X-dim and resolution to keep scale
  <= 200
- BMP/EMF/PCX/TIF: fix endianness on big-endian machines (note TIF now always
  written as little-endian - simplifies testing)
- ITF14/DPLEIT/DPIDENT: ignore `option_2` (check digit options)
- GUI: scalewindow: fix cropping of initial resolution and bound X-dim <= 10
- GUI: factory reset: reset preview background colour also
- GUI: cliwindow: `#if _WIN32` -> `#ifdef _WIN32`
- QZint: fix legacy width and security level getters/setters, MR #158, props
  Philip Ye
- CODE128: fix extended char latching when exactly 3 extended chars at end
- library: need to check for valid UTF-8 after de-escaping
- MAXICODE: maintain current set between segments
- MSYS2: fix stdout output on Windows under MSYS2 (mailing list, props Frank)
- DATAMATRIX: fix misencodation by only doing special end-of-data processing
  on last segment


Version 2.13.0 (2023-12-18)
===========================

**Incompatible changes**
------------------------
- Buffer lengths of members `fgcolour` and `bgcolour` in `zint_symbol` extended
  10 -> 16 to allow for "C,M,Y,K" comma-separated decimal percentage strings
- CMYK values for EPS (slightly) and TIF (significantly) have changed - now use
  the same RGB -> CMYK formula
- Text (HRT) placement for vector (EMF/EPS/SVG) output changed - for EAN/UPC
  slightly further away from barcode, for all others slightly nearer. Some
  horizontal alignments of EAN/UPC vector text also tweaked
- Text (HRT) for standalone EAN-2 and EAN-5 now at top of symbol
  (was at bottom)
- Text height (font size) for SMALL_TEXT vector output reduced
- For Windows, filenames are now assumed to be UTF-8 encoded. Affects `outfile`
  in `zint_symbol` and all API filename arguments
- Never-used `fontsize` member removed from `zint_symbol`
- Buffer length of member `text` (HRT) in `zint_symbol` extended 128 -> 200
  (client buffers may need checking/extending)
- Font of text of SVG vector output now "OCRB, monospace" (EAN/UPC) or
  "Arimo, Arial, sans-serif" (all others)
  (was "Helvetica, sans-serif" for both)
- Unintended excess horizontal whitespace of Composite symbols removed, and
  quiet zone settings respected exactly, and centring of HRT (if any) now
  relative to linear part of symbol only rather than whole symbol
- Unlikely-to-be-used `bitmap_byte_length` member removed from `zint_symbol`
  (was only set on BMP output to length of BMP pixel array)
- EXCODE39 now defaults to displaying check digit in Human Readable Text (HRT)
- GS1_128 now warns if data > 48 (GS1 General Specifications max)

Changes
-------
- BMP/EMF/EPS/GIF/PCX/PNG/SVG/TIF/TXT: check for errors on writing to output
  file (ticket #275)
- manual/man page: document octal escape; Code 128 subset/mode -> Code Set
- Add special symbology-specific escape sequences (Code 128 only) for manual
  Code Set switching via `input_mode` flag `EXTRA_ESCAPE_MODE` (CLI --extraesc)
  (ticket #204)
- GUI: disable "Reset" colour if default; add "Unset" to Printing Scale dialog
  (allows unsetting of X-dim/resolution settings without having to zap)
- API/CLI/GUI: allow foreground/background colours to be specified as
  comma-separated decimal percentage strings "C,M,Y,K" where "C", "M" etc. are
  0-100 (ticket #281, 3rd point)
- PCX: add alpha support
- GUI: rearrange some Appearance tab inputs (Border Type <-> Width, Show Text
  <-> Font, Text/Font <-> Printing Scale/Size) to flow more naturally;
  save button "Save As..." -> "Save..." and add icon
- Add `text_gap` option to allow adjustment of vertical gap between barcode and
  text (HRT)
- DAFT: up max to 250 chars
- CLI: use own (Wine) version of `CommandLineToArgvW()` to avoid loading
  "shell32.dll"
- EAN/UPC: add quiet zone indicators option (API `output_options`
  `EANUPC_GUARD_WHITESPACE`, CLI `--guardwhitespace`) (ticket #287)
- EAN-2/EAN-5: HRT now at top instead of at bottom for standalones, following
  BWIPP
- EPS/SVG: use new `out_putsf()` func to output floats, avoiding trailing zeroes
  & locale dependency
- EPS: simplify "TR" formula
- SVG: change font from "Helvetica, sans-serif" to "OCRB, monospace" for EAN/UPC
  and "Arimo, Arial, sans-serif" for all others;
  use single "<path>" instead of multiple "<rect>"s to draw boxes (reduces file
  size)
- Add `EMBED_VECTOR_FONT` to `output_options` (CLI `--embedfont`) to enable
  embedding of font in vector output - currently only for SVG output
- GUI: use "OCRB" font for EAN/UPC and "Arimo" for all others (was "Helvetica"
  for both); add preview background colour option (default light grey) so as
  whitespace will show up in contrast (access via preview context menu)
- CODE128/common: add `ZINT_WARN_HRT_TRUNCATED` warning
- QRCODE: better assert(), removing a NOLINT (2 left)
- CLI: add some more barcode synonyms for DBAR
- CMake: don't include png.c unless ZINT_USE_PNG (avoids clang warning)
- vector: reduce SMALL_TEXT font height 6 -> 5 to be more like raster;
  reduce antialiasing allowance for `textoffset`;
  adjust text to baseline using values for Arimo rather than percentage
- manual: expand size/alpha details in Section "5.4 Buffering Symbols in Memory
  (raster)" (cf ticket #291); add BSD info
- EXCODE39: change to display check digit in HRT by default
- CODE39/EXCODE39/LOGMARS: new hidden check digit option
- GUI: move some symbology-specific options into Data Tab so separate tab
  unnecessary
- DATAMATRIX: add `DM_ISO_144` (--dmiso144) option for ISO placement of ECC
  codewords instead of default "de facto"
- manual: add annexes on Qt and Tcl backends
- CODE128: increase no. symbol chars max 60 -> 99
- frontend: truncate overlong `--primary` instead of ignoring
- man page: list size detail for matrix symbols (`--vers`)
- CODE11/C25XXX/CODE39/EXCODE39/HIBC_39/CODE93/CODABAR/PLESSEY/MSI_PLESSEY/FLAT/
  DAFT/TELEPEN/TELEPEN_NUM: increase allowed lengths
- API: add `ZBarcode_Reset()` to fully restore `zint_symbol` to default state

Bugs
----
- CEPNET: fix no HRT (library: `has_hrt()`)
- man page: fix Code 11 check digit info
- CMake: allow ctest to be run without having to install zint or manually set
  LD_LIBRARY_PATH and PATH (ticket #279, props Alexey Dokuchaev)
- GUI: fg/bgcolor text edit: fix right-click context menu not working properly
  by checking for it on FocusOut
- GUI: fix fg/bgcolor icon background not being reset on zap
- EMF/EPS/SVG/GUI: ignore BOLD_TEXT for EAN/UPC
- EMF/EPS/SVG: fix addon bars placement/length when text hidden
- For Windows, assume `outfile` & API filename args are in UTF-8,
  & use xxxW() APIs accordingly, ticket #288, props Marcel
  **Backwards-incompatible change**
- GUI: fix `save_to_file()` `filename.toLatin1()` -> `toUtf8()`
- CLI: batch mode: don't close input if stdin
- EAN/UPC: fix excess 1X to right of add-ons
- Composites: fix excess whitespace; fix quiet zone calcs to allow for linear
  shifting
- GUI: fix not enabling font combo "Small Bold (vector only)" by default
- CODEONE: fix S/T quiet zone 1X bottom (props BWIPP issue #245 doc)
- EAN-2/EAN-5: fix `BARCODE_BIND_TOP/BIND/BOX` output
- library: fix 21-bit Unicode conversion in `escape_char_process()`; fix
  restricting escaped data length by using de-escaped length to check
- AZTEC: fix out-of-bounds crash when user-specified size given, ticket #300,
  props Andre Maute; fix 4-layer compact block max (76 -> 64); fix encoding of
  byte-blocks > 11-bit limit
- CODABLOCKF: fix crash due to `columns` overflow, ticket #300, props Andre
  Maute
- CODEONE: fix out-of-bounds crash in `c1_c40text_cnt()` and looping on latch
  crash in `c1_encode()` and too small buffer for Version T, ticket #300, props
  Andre Maute
- EANX_CC/UPCA_CC: fix crash in `dbar_date()` on not checking length and crash
  in `gs1_verify()` on not checking length, ticket #300, props Andre Maute
- GS1_128_CC: fix divide-by-zero crash in `calc_padding_ccc()`, ticket #300,
  props Andre Maute
- HANXIN: fix incorrect numeric costings (out-by-1) in `hx_in_numeric()`, ticket
  #300 (#16), props Andre Maure
- PDF417: fix out-of-bounds crash in `pdf_text_submode_length()` and
  out-of-bounds crash on overrunning string and codeword buffers, ticket #300,
  props Andre Maute
- QRCODE: fix out-of-bounds crash due to incorrect mode costings for GS1
  percents in `qr_in_alpha()`; fix incorrect numeric costings (out-by-1) in
  `qr_in_numeric()`; ticket #300 (#14, #15; #16), props Andre Maute
- GS1: fix square brackets treated as FNC1 in GS1PARENS_MODE by changing
  internal FNC1 marker '[' -> '\x1D' (GS), ticket #319, props Moli Sojet;
  also fix non-AI square brackets -> round brackets in GS1_128 HRT


Version 2.12.0 (2022-12-12)
===========================

**Incompatible changes**
------------------------
- DOTCODE, QRCODE, RMQR: now return warning if ECI or Structured Append used in
  GS1 mode
- CLI now returns an error if unknown option given or if option is missing its
  argument
  NOTE: previously printed error messages but continued without returning an
  error
- DPD now adds top boundary bar by default and returns warnings if input is not
  compliant
- Legacy and never-used output option BARCODE_NO_ASCII removed (value now used
  by new output option BARCODE_BIND_TOP)
- Symbology BARCODE_CODE128B (Suppress subset C) renamed to BARCODE_CODE128AB
  to more accurately reflect its behaviour (old name still recognised, except in
  Tcl backend)
- Symbology BARCODE_MAILMARK renamed to BARCODE_MAILMARK_4S due to introduction
  of BARCODE_MAILMARK_2D (old name still recognised, except in Tcl backend)
- CLI now expects floating point arguments to be in simple decimal point
  notation (i.e. not scientific notation) with a maximum of 7 significant digits

Changes
-------
- bwipp_dump.ps: convert patch file to cat file as BWIPP now honours `dontdraw`
  for composite symbologies
- DOTCODE, QRCODE, RMQR: return warning if ECI or Structured Append used in GS1
  mode, ticket #271
- CLI: improve `getopt_long_only()` processing, printing own message if bad arg
  and returning error if so rather than continuing to process
- manual: MSE typo -> MSI; adjust SVG scaling for PDF manual; pandoc 2.19.2
- manual/man page/GUI: Code 16k -> Code 16K
- PDF417/MICROPDF417: add optimized encoding, FAST_MODE for previous; formatting
  changes
- common.c/h: add `cnt_digits()`; comments in include; minor fiddling
- API/CLI/Tcl/GUI: new output option BARCODE_BIND_TOP / `--bindtop` / "Bind Top"
- DPD: add top boundary (width 3X) by default, using new BARCODE_BIND_TOP;
  "relabel" option; some compliance checks
- manual: fuller DPD doc; some spelling typos, formatting
- cmake: fixes for static build and install directories, props koprok
- cmake: remove zintconfig.h.in for now as incompatible with MSVC project builds
  (will add back in future if go fully CMake)
- NO_PNG -> ZINT_NO_PNG and new API function `Zint_NoPng()` to determine if no
  PNG support in libzint; replace use in GUI with backend_qt method `noPng()`
- API: add new zint_symbol `dpmm` field for output resolution (BMP/EMF/PCX/PNG/
  TIF only, i.e. excluding EPS, GIF & SVG)
- Add support for specifying scale by X-dimension and resolution with new option
  `--scalexdimdp` for CLI/Tcl & new API function `ZBarcode_Scale_From_XdimDp()`
  (plus `ZBarcode_XdimDp_From_Scale()` and `ZBarcode_Default_Xdim()`) and new
  GUI popup; manual: document
- BMP/EMF/PCX/PNG/TIF: use new `dpmm` resolution field (for EMF following
  Inkscape)
- backend_qt: add `dpmm()`, `vectorWidth()`, `vectorHeight()`, `noPng()`,
  `getVersion()`, `takesGS1AIData()`, & `XdimDp` stuff incl. new `QZintXdimDp`
  struct for passing around scale vars & use in `getAsCLI()`; add comments
- Raise `scale` limit to 200 (from 100) to allow for large dpmm
- output: create directories & subdirectories as necessary for output path using
  new function `out_fopen()` and use in BMP/EMF/EPS/GIF/PCX/PNG/SVG/TIF
- DPLEIT/DPIDENT: format HRT according to (incomplete) documentation, and set
  default height to 72X (from 50X)
- CODE128B renamed to CODE128AB as can use subsets A and/or B
- MAILMARK: better error message if input < 14 characters
- GUI: add "Default" button for DAFT tracker ratio & enable/disable various
  default buttons; use new `takesGS1AIData()` to enable/disable GS1-specific
  checkboxes
- CLI: use new `validate_float()` to parse float options (7 significant digits
  allowed only, no scientific notation)
- CLI: mirror: use -o directory if any (ticket #193)
- QRCODE/UPNQR: add FAST_MODE (try 4 not 8 masks automatically)
- GS1: add new AI 7011 (GSCN 22-163)
- Add new symbology BARCODE_MAILMARK_2D (Royal Mail 2D Mailmark), renaming
  previous BARCODE_MAILMARK (Royal Mail 4-State Mailmark) to BARCODE_MAILMARK_4S
- Add new symbology BARCODE_UPU_S10
- PZN: allow check digit to be given; add space after hyphen in HRT; PZN7 option
- backend_tcl: update TEA
- DATAMATRIX/GRIDMATRIX/PDF417/QR/ULTRA: micro-optimize structapp ID parse
- library/CLI: fiddle with static asserts (make CHAR_BIT sensitive, supposedly)
- win32/README: update building libpng (assembly removed)
- README.linux: document incompatibility of Qt6 >= 6.3
- manual: expand Barcode Studio waffle
- test suite: change range separator to hyphen and allow multiple excludes

Bugs
----
- test suite: fix `test_library` test to allow for running from root;
  fix `test_args` test to allow for re-running (remove junk) (tickets #268,
  #269)
- common.h: define ZINT_IS_C89 as __STDC_VERSION__ not defined by MSVC, and use
  when checking whether to include <alloca.h> (MR #152)
- common.c: ensure `stripf()` not inlined to prevent optimizer undoing effect
  (ticket #269)
- GUI: fix "Border Width" ampersand shortcut
- CODE128: allow for extended latching (double FNC4) spanning intermediate
  CodeC sequence by setting `f_state` only if in CodeA/B & checking before
  adding extended mode switch (cf OkapiBarcode commit [9ce6dcc], props Daniel
  Gredler)
- DATAMATRIX: in FAST_MODE re-process any buffered X12 characters when mode
  changes from X12 (cf OkapiBarcode commit [fb7981e], props Daniel Gredler)
- CODABLOCKF: allow for FNC4 when estimating no. of rows required
- CODE16K: make sure row calculation accurate by dispensing with glyph estimate
  & using actual codeword count
- CODE16K: ensure initial mode selection allows for extended characters
- vector.c: add `z_alloca()` cast for `first_row_rects` (ticket #272)
- MSVC project files: remove incorrect "CompileAsCpp" setting from libzint
  project files (ticket #272)
- bwipp_dump.ps: fix 2/4-track processing; update to latest BWIPP
- PDF417/MICROPDF417: use latch not ps shift for padding when spanning
  Text segments to avoid affecting 1st char of 2nd segment
- GUI: only skip encoded/errored signal processing if active modal ExportDialog
  (wasn't clearing/setting error text bar correctly)
- CODABAR: fix minimum height calc
- EMF: fix indexing of handles (zero-based not 1-based)
- GUI: fix symbology zap (previous technique of clearing and re-loading settings
  without doing a sync no longer works); fix UPCEAN guard descent enable


Version 2.11.1 (2022-08-22)
===========================

**Incompatible changes**
------------------------
 - None

Changes
-------
- GUI: sequence export dialog: add Postfix field for filename (#252)
- eci.c: replace libiconv-adapted code with own implementations so
  as to fully comply with libzint's BSD license
- GUI: CODE39/EXCODE39: show/hide HIBC check digit option
- RMQR: update to ISO/IEC 23941:2022 - R13x77 numeric cclens change 8 -> 7
- QRCODE: use stricter interpretation of ZINT_FULL_MULTIBYTE, excluding
  certain trailing bytes
- GUI: foreground/background colours -> text boxes and icon buttons, add swap
  button, independently movable picker (NULL parent), preview colour changes,
  preview Data Window changes, add clear data (del) buttons, add zap button
  and Factory Reset menu option, various other fixes
- GUI: make acceptable for macOS; add iconset for macOS, install
- manual: update macOS Homebrew install info; add README.macos
- GUI: export window: add no. of sequences to results label
- frontend: batch: for @ use + instead of * on Windows as * not allowed
  in filenames
- Add new symbology BC412 (SEMI T1-95)
- backend: use alloca() (z_alloca()) for both Unix and Windows
- GS1: new AI 4309 with latlong checker, new currency code 925
- GUI: add automatic info feedback to "Automatic" combo item of size/row/height
  comboboxes
- PDF417: encodation now simpler and closer to ISO/IEC 15438:2015 Annex N
  algorithm, props Jeff Skaistis
- Add new symbology CEPNet

Bugs
----
- frontend/test_args.c: don't use WIFEXITED(), WEXITSTATUS() on Windows
- libzint: fix some confusing error messages introduced by segment stuff
- GUI: remove unnecessary tabMain min size (better layout rendering on
  Windows/Fedora)
- library: check symbol->primary for escape sequences also
- GUI: error message GS1_MODE -> GS1 mode
- GUI: sequence window: fix initial clear button status
- GUI: NO_PNG: allow for Qt not parsing #if's in slots
- frontend: batch mode: fix default "~~~~~" output (github issue #65)
- vector: ensure separators don't overlap with other rectangles so that
  they render correctly when have RGBA alpha channel
- GUI: update_preview() after Data Dialog return to ensure preview in sync
- PDF417: fix invalid numeric -> byte shift transitions, MR #151, props Jeff
  Skaistis
- PDF417: fix extraneous text latch after a byte shift, MR #151, props Jeff
  Skaistis


Version 2.11.0 (2022-05-24)
===========================

**Incompatible changes**
------------------------
- Add width to struct zint_vector_circle
  NOTE: backward incompatible drawing of MaxiCode finder (bullseye)
- Check that scale/height/whitespace/border are reasonable values
  NOTE: will return error if values outside ranges
- raster.c: Bug fix for heap-buffer-overflow (#204 ARM-Cortex)
  NOTE: may cause single-pixel changes to height depending on height/scale used
- JAPANPOST: return error if input data would be truncated
  NOTE: previously was silently truncated
- PDF417: return warning if specified cols increased
  NOTE: previously no warning was returned
- Matrix symbols: horizontal boundary bars appear outside any vertical
  whitespace
  NOTE: previously appeared inside vertical whitespace
- ECI 29 now GB 2312 only; GB 18030 is new ECI 32
  NOTE: previously ECI 29 was GB 18030 for HANXIN, GB 2312 otherwise
- HANXIN, QRCODE/RMQR now warn when convert to GB 18030, Shift JIS resp.
  and no ECI given
- GRIDMATRIX no longer attempts Latin-1 conversion when no ECI given
- CLI now returns ZINT_ERROR_INVALID_OPTION (8) on its failed option checks
  and ZINT_WARN_INVALID_OPTION (2) on ignored options
  NOTE: previously returned 1 and 0 respectively

Changes
-------
- RMQR: add ECI support
- CODE93: don't display check characters in HRT (as per standard Figure B1)
  unless option_2 = 1 or vers=1
- GUI: separate out MAXICODE Structured Carrier Message fields
- library.c: Check that scale/height/whitespace/border are reasonable values:
  scale (0.01-100), height (0-2000), whitespace_width/height (0-100),
  border_width (0-100)
- CLI: allow both e.g. '-height' and '--height' (getopt_long_only())
- UPC/EAN: add guard_descent
- Add output_options BARCODE_QUIET_ZONES and BARCODE_NO_QUIET_ZONES
- Allow dummy AI "[]" if GS1NOCHECK_MODE and has data (#204)
- raster.c: improve non-half-integer interpolation performance
- Add Structured Append support for AZTEC, CODEONE, DATAMATRIX, DOTCODE,
  GRIDMATRIX, MAXICODE, MICROPDF417, PDF417, QRCODE, ULTRA
- ULTRA: add revision 2 support (based on BWIPP 2021-09-28 update)
- Add compliant height
- GUI: add Menu, copy to clipboard EMF/GIF/PNG/TIF, errtxt bar and status bar,
  icons (feathericons)
- CODABAR: add show check digit option
- DAFT: max chars 50 -> 100
- CMake: separate no-optimize from ZINT_DEBUG into new ZINT_NOOPT option
- PDF417: add specify rows option
- Add HEIGHTPERROW_MODE input mode flag
- DBAR_EXPSTK: add max rows option
- CODE16K/CODE49: add min rows option
- GUI: add CLI equivalent dialog (#163)
- Add ZBarcode_BarcodeName()
- GUI: data dialog: convert Line Feeds if escaping on input, escape on output
- DATAMATRIX: new algorithm for (near-)optimal encoding, props Alex Geller
- CLI/GUI/Tcl: add --fast option to select faster but less optimal DATAMATRIX
  algorithm (previous default)
- Matrix symbols: change horizontal boundary bars to appear outside any
  vertical whitespace, as they're decorative rather than functional (#247)
- FIM: Add support for FIM E
- Updated ECIs to AIM ITS/04-023:2022 (ECI Part 3: Register)
- HANXIN: removed alternating filler in function information
- GRIDMATRIX/HANXIN/QRCODE/RMQR: warn if auto-conversion (i.e. no ECI given)
  occurs to resp. specialized char sets (GB 2312/GB 18030/Shift JIS)
- Add multiple segments support for AZTEC, CODEONE, DATAMATRIX, DOTCODE,
  GRIDMATRIX, HANXIN, MAXICODE, MICROPDF417, PDF417, QRCODE, RMQR, ULTRA
- MICROQR: check versions M1 and M2 for allowed characters so as to give better
  error messages
- UPNQR: allow mask to be manually specified
- GUI: use non-native QColorDialog on Unix also; no noEXE for CLI equivalent;
  add shortcuts for copy-to-clipboard and CLI equivalent
- CLI: new --version option to print Zint version
- manual: one true source now manual.pmd from which manual.txt is generated
- CLI: man page moved from frontend/zint.1.gz to docs/zint.1.gz, now
  generated from docs/zint.1.pmd
- add README.linux to root dir
- CLI: return ZINT_ERROR_INVALID_OPTION instead of 1 on bad option and
  ZINT_WARN_INVALID_OPTION instead of 0 on ignored option

Bugs
----
- GUI/CLI: fix dev version test
- library.c: error_tag(): check error_number < ZINT_ERROR on WARN_FAIL_ALL
- vector.c: enforce minimum scale >= 0.1 and allow in GUI
- Suppress some pedantic warnings, props codemonkey82 (#204)
- gs1.c: Allow 0-length AI data if GS1NOCHECK_MODE, props codemonkey82 (#204)
- raster.c: avoid distributive multiplication with floats to lessen chances of
  platform variation (#204 ARM-Cortex crash)
- common/emf/output/raster/vector.c: use new stripf() func to workaround
  float variations
- raster.c: Don't add height offset for text if scale < 1.0 (as won't print)
- ISBNX: fix not returning error number (warning) correctly
- *.rc: fix VER_FILEVERSION_STR format (, -> .), props Jeff Skaistis
- PDF417: fix cols/rows calculation to require multiple <= 928 codewords
- raster.c: fix possible blank rows appearing in CODE16K, CODE49, PHARMA_TWO,
  PDF417 & CODABLOCKF due to height/scale rounding, props codemonkey82 (#204)
- library.c: check for stacking symbols >= 200
- DATAMATRIX: fix misencoding of non-encodables in X12 and EDIFACT modes,
  props Alex Geller
- DATAMATRIX: fix misencoding of FNC1/GS in EDIFACT in GS1 mode
- Allow for dot overspill in height of vertical box sides (dotty mode)
- HANXIN: fix gate-posts on codeword limits
- GUI: cater for HiDPI display, props bitaround (#257)
- RMQR: fix ECI encoding (wrong bit length for indicator)
- CLI/tcl: fix version check (need <= 999 for DAFT permille)
- UPNQR: fix required binary mode using mode_preset
- GRIDMATRIX: default char set is GB 2312 only, not Latin-1 with GB 2312 alt
- HANXIN/QRCODE: use Hanzi/Kanji modes when compatible ECIs given


Version 2.10.0 2021-08-14
=========================

**Incompatible changes**
------------------------
- Add halign (horizontal align) to struct zint_vector_string
  NOTE: backward incompatible text drawing for UPC/EAN
- Change height and row_height array to floats
  NOTE: may cause changes in heights

Changes
-------
- Move project history/version from manual.txt and backend/README into this file
- Command line switches -d or -i for code data may now be at any position.
- Add rotation for vector formats
- Change double to float for performance in many internal places
- Ticket 197: optimize raster scaling for 0.5 substeps;
  ignore raster scaling < 0.5 as pixels lost.
- Ticket 197: add output option to bypass time-intensive buffer_plot()
  (OUT_BUFFER_INTERMEDIATE)
- Reduce BMP size by using 1 bit per pixel (except Ultracode)
- New warn_level field, WARN_FAIL_ALL
- Add GS1NOCHECK_MODE to input_mode (note was ZPL compatibility mode
  WARN_ZPL_COMPAT to warn_level)
- Remove version info from zint.h and put in zintconfig.h via zintconfig.h.in
- Add ZBarcode_Cap()
- Add GUI symbology filter, separate settings for each symbology
- Require cmake 3.5, use PNG::PNG and add Qt6 build option
- Make library fully stack-based so reentrant apart from file operations
- Performance improvements (large data) for AZTEC/HANXIN/GRIDMATRIX/PDF417/QR
- Option scmvv for MaxiCode #212; postcode needn't be space-filled
- eci: Add support for all ECIs (Big5, Korean, UCS-2BE)
- CLI: Handle UTF-8 args on Windows; -b <barcode name>
- DATAMATRIX: make EOD encodation strictly ISO 16022 compliant
- png.c: Use palette for file size savings
- tif.c: Use palette/bilevel/LZW to reduce file size, alpha/CMYK support
- Option gs1parens (GS1PARENS_MODE)
- MAXICODE: Rejig raster output to more closely match ISO 16023:2000
- C25STANDARD/C25INTER/C25IATA/C25LOGIC/C25IND: add check digit option (#216)
- Use zint-64.svg for smoother icons, props frhun
- Add whitespace_height to zint_symbol (vertical whitespace)
- AZTEC: optimize populate_map (good for small data) - avoids MSVC bug also
- Various workarounds for other MSVC bugs
- CMake: Windows compatible, backend/tests & frontend/tests now subprojects
  using new zint_add_test.cmake file, static build, new ZINT_USE_PNG and
  ZINT_USE_QT options, getopt moved to subproject and getopt detection,
  sanitizer flag detection, and many other improvements, props Alonso Schaich
- PLESSEY: add options NCR weighted mod-10, hide check digit(s) in HRT
- Fuller error messages; more comments zint.h
- CMake: simplification and modernization, Qt5/6 version, props Null Void (atom)
- POSTNET/PLANET: allow up to 38 chars (ZINT_WARN_NONCOMPLIANT) (see [d7ac9c])
- RMQR: update to new draft ISO/IEC JTC1/SC31N000 (Draft 2019-6-24)
- ULTRA: update max size and min cols based on BWIPP 2021-07-14 update

Bugs
----
- Code16k selects GS1 mode by default in GUI
- Ultracode: use white pixels instead background for white modules.
- EMF: fix Ultracode colours.
- Ultracode: fix count of codewords when using reader init mode
- Databar Limited: add 5 right guard spaces (ISO/IEC 24723:2010 6.2 (e))
- Data Matrix: avoid unnecessary latch in X12 mode at end of data, #208
- Data Matrix: fix eod shift -> 0 pad
- POSTNET/PLANET: remove extra 1 module space
- Aztec: fix bit-stuffing (again!) and Aztec Rune: fix for data >= 128
- EAN composite: allow for check digit + buffer overflow for too long add-on
- Han Xin fix 0xFFE terminator
- GUI: Use UTF-8 for QSettings (non-ASCII was getting garbled on restore)
- DOTCODE: Fix best_mask -> high_score prime test
- CODEONE: various fixes, ECI support
- #218 Prevent buffer overflow in ean_leading_zeroes by checking max lengths
- MAXICODE: fix mask typos for ECI 3/4 bytes
- Fix UPCEAN small font ignored/disabled (introduced [1adba1])
- get_best_eci: check UTF-8 before returning 26
- MAXICODE: fix shifting from sets C/D/E to A/B (only latch available)
- EAN14, NVE18: fix checksum calc for zero-filled input
- png: ULTRA: allow for fgcolour if bind/box (MR #111)
- DOTCODE: allow for max 200 cols in CLI, GUI, Tcl
- CODEONE/DATAMATRIX/MAILMARK/PLESSEY: fix some 32-bit/portability bugs
- CODABAR: fix CALCIUM define address use, props Alonso Schaich
- DATAMATRIX/CODEONE: Use LCM in look ahead tests to avoid floats (#228)
- raster/output: use new isfintf() to test floats integral (CodeQL)
- ZBarcode_Encode: don't reinit symbol->outfile, props Alonso Schaich
- CODEONE: is_last_single_ascii() out-of-bounds, #232 CI-Fuzz, props Jan Schrewe
- library: compat symbology 39 fix; ISBN: "X" check
- backend/CMakeLists.txt: output dir for zintconfig.h, props Andre Maute (#238)
- UPCE/UPCE_CC: allow check digit (same as UPCA/UPCA_CC) so selecting composite
  doesn't give error
- bmp/emf/ps.c: allow for foreground colour in ULTRA
- bmp/gif/pcx.c: allow for BARCODE_STDOUT (fflush/fclose)
- ps.c: fix buffer overflow on colour_to_pscolor() CMYK
- composite: fix buffer overflow for large linear and small composite
- composite: clear errtxt when bumping from CC-A -> CC-B -> CC-C
- CODABLOCKF: prevent cols > 62; fix pTestList buffer overflow
- RMQR: allow for righthand vertical timing pattern in populate_grid()


Version 2.9.1 2020-08-04
========================

Changes
-------
- Ticket 122: Implement transparency support
  - Ticket 129: -nobackground option added
  - -fg and -bg may contain an alpha channel
  - structure zint_symbol may now contain an alpha channel as output
- Added DPD Symbology
- Add support for Unicode escape characters

Bugs
----
- EMF text colour does not change
- Fix QPainterPath dependency for Visual Studio


Version 2.9.0 2020-07-31
========================

Changes
-------
- Dotcode: adapt to AIM DOC Revision 4
- New option "-separator=" for zint to specify the separator height of stacked
  symbologies.
- make internal routines invisible by a static function definition.
- CODE11: make adding check digits an option, selectable to 2 (default as now),
  1 or none
- LOGMARS restrict max length to 30 per MIL-STD-1189 Rev. B; make check digit
  optional
- CODE39/EXCODE39: max length now 85
- VIN code extended to international licence plates
- CODABAR: 3 data characters minimum (plus start/stop), check digit option added
- Channel Code: performance improvement
- QT GUI:
  - GRIDMATRIX/HX/MQR/QRCODE/RMQR: allow separate selection of size/ECC
  - add DAFT and VIN Symbologies
  - Separarator option for DATAMATRIX
  - Ticket 162: parse escape sequences
  - gui element reassigments
- UPC/EAN/ITF-14 Composite: Ticket 72: new option --addongap (default:9) to set
  the gap between code and composite.
- TCL Backend: The following symbology names were renamed:
  - Matrix2of5 -> Standard2of5
  - PDF417Trunc -> PDF417Compact
  - RSS14Stacked -> GS1DataBarStacked
  - RSS14Stacked -> GS1DataBarStacked
  - RSS14StackedOmni -> GS1DataBarSstackedOmni
  - RSS14ExpandedStacked -> GS1DataBarExpandedStacked
  - OneCode -> USPSIntelligentMail
  - EAN128-CC -> GS1-128-CC
  - RSS14-CC -> GS1DataBarOmni-CC
  - RSSLimited-CC -> GS1DataBarLimited-CC
  - RSSExpandedStacked-CC -> GS1DataBarExpanded-CC
  - RSSEXPanded-CC -> GS1DataBarExpanded-CC
  - RSS14Stacked-CC -> GS1DataBarStacked-CC
  - RSS14Omni-CC -> GS1DataBarStackedOmni-CC
  - RSSExpandedStacked-CC -> GS1DataBarExpandedStacked-CC
  ** Potential incompatibility **
- API Symbol names changed but old names preserved in zint.h
  - BARCODE_C25MATRIX -> BARCODE_C25STANDARD
  - BARCODE_EAB128_CC -> BARCODE_GS1_128
  - BARCODE_RSS14 -> BARCODE_DBAR_OMN
  - BARCODE_RSS_LTD -> BARCODE_DBAR_LTD
  - BARCODE_RSS_EXP -> BARCODE_DBAR_EXP
  - BARCODE_PDF417TRUNC -> BARCODE_PDF417COMP
  - BARCODE_RSS14STACK -> BARCODE_DBAR_STK
  - BARCODE_RSS14STACK_OMNI -> BARCODE_DBAR_OMNSTK
  - BARCODE_RSS_EXPSTACK -> BARCODE_DBAR_EXPSTK
  - BARCODE_ONECODE -> BARCODE_USPS_IMAIL
  - BARCODE_EAN128_CC -> BARCODE_GS1_128_CC
  - BARCODE_RSS14_CC -> BARCODE_DBAR_OMN_CC
  - BARCODE_RSS_LTD_CC -> BARCODE_DBAR_LTD_CC
  - BARCODE_RSS_EXP_CC -> BARCODE_DBAR_EXP_CC
  - BARCODE_RSS14STACK_CC -> BARCODE_DBAR_STK_CC
  - BARCODE_RSS_EXPSTACK_CC -> BARCODE_DBAR_EXPSTK_CC

Bugs
----
- Ticket 185 EMF export corrections
  - fine scaling by the use of float arithmetic
  - full header (extension1&2) with correct size field
- Ticket 190: Aztec buffer overrun fixed
- Ticket 191 suppress clang-tidy warnings: raster.c, composite.c, qr.c
- Ultracode internal encoding bugs, ECI 899
- GS1 data: exclude DEL character
- Ticket 192: missing malloc.h include for Windows compilers.
- Correct GS1 AI 253 & 255 length from 14 to 13
- Codablock F changes:
  - FNC4 may not be split over rows.
  - Use Code128 routine for one line Codablock FIM
  - Correct column range to 9 ... 62
  - allow new options: row count and column count, border_width and HIBC mode
  - pad correctly empty and last row
  - separator length correction
- Code128 changes:
  - Correctly encode CodeA charset with control-character only data
  - Improve coding of Extended ASCII (FNC4)
  - Checksum calculation overflow protection
  - EAN128 may reduce length
- Check for incomplete escape sequences on data specification: "\" without
  following character.
- Code16K fixes: remove extended ASCII latch, pad character
- Restructuring to have common code centralized:
  - Code128 routines for Codablock&Code16K
  - output.c has common routines from raster.c and symbologies.
- HIBC_39: restrict max length to 68 otherwise to avoid overrun
- Code One: protect against overrun
- Telepen: allow DEL
- GS1 Databar/ GS1-128 Composite:
  - Separator bar corrections
  - Ticket 200: spurious additional row
  - Correct names in GUI
- Compact PDF417:
  - Add missing stop pattern.
  - Rename in GUI: "PDF417 Truncated" to "Compact PDF417".
- PDF417: Optimize text compaction mode switch.
- Human readable representation: Code128, Code39, Code93 special characters
  are shown by a blank.
- ITF14: Ticket 201: allow bind option


Version 2.8.0 2020-04-10
========================

Changes
-------
(New) Tests for auspost, codablock, composite, dotcode, general, telepen,
  upcean, all output formats
- QR, Han Xin, Grid Matrix: the multi byte compaction schemes (ex: Kanji)
  are used by some decoders as codepage information (Ex: GB2312) and output
  may be translated to UTF-8. This may destroy the data in a not controllable
  manner.
  In consequence, multibyte compaction schemes are disabled by default.
  The new option --fullmultibyte (option_3 = ZINT_FULL_MULTIBYTE) enables this
  optimisation.
- Add new symbology "Ultra Code" with the ability to output colour codes.

Bugs
----
- Ticket 181 penetration test found many bugs:
  - Auspost: null bytes in content caused segfault
  - Codablock: data 0x1a..0x1f caused segfault
  - Dotcode: overrun in binary mode, overrun in codeword_array buffer
      Correct encoding of HT/FS/GS/RS when shifting to code set B
  - empty or unreadable input file
  - telepen: buffer overflow
  - EANUCC: buffer overflow on multiple + (multiple extension bars)
  - Maxicode: index overrun on numeric compaction
  - CodeOne: Simple i indexing not sp + i in C1_ASCII numeric latch loop.
  - Aztec: free memory
- Ticket 183: Databar stacked separator correction
- Ticket 182: Output bitmap type was char, where some targets assigned 0
  if pixel colour >127 (e.g. negative). API change to use unsigned char.
- HanXin: wrong codepage, gb2312 instead gb18030.
- PDF417: corrected alloced sizes to max characters
- Ticket 189: FNC1 encodation fixed (FLG(0) missing after FLG(n))
- PCX format: added missing bytes_per_line if bitmap width is odd.


Version 2.7.1 2020-02-01
========================

Changes
-------
- QR encoding optimized to get smaller code matrix results
- PDF417: remove obsolete codeword number option in qzint.
  Option removed in qtzint.
- Removed annex B (3 digit country codes) and annex C (GS1 General
  Specification) from the manual. This material may be found elsewhere.
- MAC homebrew remark added to the documentation
- Correct cmake file to match BSD-3-clause licence

Bugs
----
- Correct uninitialized warning in gridmatrix.call
- do not export internal functions
- raster painting of UPC-A bound check
- pdf417 documentation corrected: change flag -security to -secure
- Dot Code encoding ECI number corrected
- Corrected postscript plotting error
- Datamatrix: corrected possible buffer overrun in 3 characters to 2 byte
  encodings.
- In 2.7.0 removed interface "ZBarcode_Render" still declared
- vc6 make was missing (trivial) resource.h


Version 2.7.0 2019-12-05
========================

Changes
-------
- Automatic height option added to qzint
- DotCode in line with new specification
- New GS1 AIs 7240, 235, 417, 7040, 8026, updated checks for 7007, 8008
- New Symbology rMQR
- QR and Qridmatrix optimisation for GB2312
- removed depreciated interface for gLabels program. Please use current
  interface.

Fixed bugs
----------
- Many improvements in composite codes
- SVG output corrected for messages containing "<" and "&".
- GS1-128 and RSS may only be used with GS1 contents
- Han Xin chinese character handling


Version 2.6.7 2019-10-07
========================

Changes
-------
Ticket 127: Allow to code ECI 3 if explicitly given for debug purposes.
**Incompatible change**
"--eci 3" now leads to included ECI information.
"--eci 0" may now be used to not include any ECI information.
The default of the parameter changed from 3 to 0.

Fixed bugs
----------
Ticket 146, 165: fix wrong encoding of RSS composite codes


Version 2.6.6 2019-09-18
========================

Fixed bugs
----------
Ticket 161: PDF row size may be set
Ticket 155: PDF numeric compaction
Ticket 164: crash due to call of svg_plot withnull vector
Ticket 119: Crash on bullseye raster drawing
qtzint: Micro-QR version option choice corrected (+1 missing).
Datamatrix: code corruption when ECI was encoded and base256 encoding was
automatically chosen.


Version 2.6.5 2019-09-02
========================

Fixed bugs
----------
backend/main.c was missing
Maxicode bullseye rastering for scale = 0.5
Crash in utf to eci.
eci ISO 8859-16 table missing data line
upce check for 7 digit input (causes crash) and BARCODE_UPCE_CHK -> BARCODE_UPCE
mapping removed
US imail check for invalid barcode identifier and allow 0/5/9/11 length zip
maxicode code set correction
cmake flags for debugging and sanitize options
unit tests for the changes, with a simple test suite based on qrencode/tests


Version 2.6.4 2019-08-30
========================
Fixed bugs: EMF output, maxicode plot/content
Datamatrix DMRE updated to the ISO/IEC29158 version. This is incompatible in the
way that the old -vers numbers for DMRE are re-assigned.
The separator of GS1-datamatrix may be switched from FNC1 to GS.
GS1 field length check AI 8009 and 7230 to 7239 corrected.


Version 2.6.3 2018-02-15
========================
New symbology Royal Mail 4-state Mailmark. Added North America VIN verification.
Bugfixes for TIF and EMF output and escape character handling.


Version 2.6.2 2017-10-22
========================
Further bugfixes in Aztec and DotCode. Expand escape sequence support
to API and GUI. Handle UTF BOM. Bugfix raster images of Maxicode.


Version 2.6.1 2017-08-27
========================
Library bugfixes: EDIFACT unlatch in Data Matrix, Add UPNQR, Improved Aztec
data compression, Detect Code 128 data too long, Make error codes consistent.
GUI improvements: Additional clipboard options, remove border width bug,
remove changing background colour bug, remember more settings and make GUI
more consistent with user expectations. All windows now resizable and more
information given when batch processing.


Version 2.6.0 2017-05-12
========================
Update front end to Qt5. Output to EMF and TIF. Copy to clipboard. Update
to latest draft of DMRE. Usual bugfixes.


Version 2.5.1 2017-04-03
========================
Numerous bugfixes, especially with Data Matrix thanks to extensive testing
by brunt@SF


Version 2.5 2016-11-13
======================
Support for DotCode and Han Xin code. ECI code processing. Output to BMP, GIF
and PCX. Added bold and small text options. Reintroduction of Codablock F.
Many minor fixes and improvements.


Version 2.4.3 2011-05-16
========================
Includes minor bugfixes


Version 2.4.1 2011-04-19 & 2.4.2 2011-05-04
===========================================
A whole host of bugfixes including correction of ECC routines
for Code-1 and addition of batch processing at the command line.


Version 2.4 2010-09-13
======================
Built extensions to the API for integrating with glabels with thanks to
Sam Lown and Jim Evins. Added code optimisation and input from stdin thanks to
Ismael Luceno. Reinstated escape character input. Simplification of Barcode
Studio.


Version 2.3.2 2010-05-29
========================
Corrected many bugs in GS1 DataBar Extended thanks to the careful
study of the code by Pablo Orduña at the PIRAmIDE project. Similarly corrected
some bugs in Maxicode thanks to Monica Swanson at Source Technologies. Also
minor bugfixes for ISBN and Aztec Code, and added some small features like a
--square option in the CLI.


Version 2.3.1 2010-04-07
========================
Removed Codablock F. Redesigned scale function so that human readable
text and Maxicode symbols can be scaled consistently. Corrected encoding bugs
with Code 128/Code 16k and Data Matrix ECC200 ECC 050. Added --notext option to
CLI.


Version 2.3 2009-11-23
======================
Fixed problems with Micro QR Code and rebuilt QR Code support removing
dependence on libqrencode. Improved Kanji character support for QR Code and
Micro QR Code which now auto-detects and automatically converts to Shift-JIS.
Added Grid Matrix symbology with Kanji character support and automatic
conversion to GB 2312. Removed no_qr compile option. Advanced Barcode Studio
version number to match library version number.


Version 2.2.2 2009-09-29
========================
A beta release previewing the new API structure. Better NULL character
support with "nullchar" value removed. Added loading from file and sequence
dialogs in Barcode Studio.


Version 2.2.1 2009-08-06
========================
Data encoding bugfixes for Aztec Code, Data Matrix ECC200, USPS One
Code and PDF417. Symbol plotting bugfixes for MicroPDF417 and 2D components of
composite symbols. Text formatting bugfix for Qt renderer and a couple of
compiler fixes for MSVC PNG image output.


Version 2.2 2009-07-18
======================
Added Code One and GS1 support in Code 49. Changed GUI binary name to
zint-qt and brought GUI up to version 1.0. Made some minor bugfixes to Code 39,
ITF-14, Aztec Code, Code 128 and Code 16K. Added 'rest' button to GUI. Included
.spec file from Radist.


Version 2.1.4 2009-06-19
========================
Many stability improvements including removal of buffer overruns in
Code 39, LOGMARS, PZN, Aztec Code and Composite CC-A. Addition of files for
compiling on MS Windows platform - tested successfully on XP and Vista.


Version 2.1.3 2009-05-19
========================
Many improvements to the QZint GUI which is now renamed "Zint Barcode
Studio 0.2". Added Japanese Postal Barcode, Code 49 and Channel Code and made
corrections to Data Matrix ECC200 (Binary mode data compression terminates too
soon), Aztec Code (Bug when automatically resizing after removing "all 0" and
"all 1" codewords) and Code 128 (Extended ASCII characters become corrupt).


Version 2.1.2 2009-03-01
========================
Added SVG output option. Improved Japanese character support including
Unicode > Shift-JIS capability. Bugfixes for Data Matrix ECC200 (missing
characters at end of string) and Codablock F (K1/K2 check digit and row
indicators above row 6).


Version 2.1.1 2009-02-10
========================
Minor Data Matrix ECC200 bugfix and added HIBC options.


Version 2.1 2009-01-31
======================
Reinstated Korea Post barcodes, harmonised bind and box options, moved
Unicode handling into backend and added input_mode option, added size options
to Data Matrix ECC200, added NULL character handling for Codablock F, Code 128,
Code 16k, Extended Code 39, Code 93, Telepen, Maxicode, Data Matrix ECC200 ECC
200, PDF417 and MicroPDF417. Added GS1 support for Code 16k, Codablock F and
Aztec Code. Added scale and direct to stdout options. Rebuilt Data Matrix ECC200
ECC 200 encoding algorithms to support NULL encoding and GS1 data encoding.


Version 2.0 2008-11-18
======================
Made corrections to Aztec Code and tested output with bcTester. Added
Aztec Runes, Micro QR Code and Data Matrix ECC200 ECC 000-140. Updated e-mail
information.


Version 2.0 beta r2 2008-10-19
==============================
Many corrections and bugfixes. (Code 11, Code 128, EAN-128,
Aztec Code, Codablock F, Code 16k, POSTNET, PLANET, NVE-18, PZN, Data Matrix
ECC200, Maxicode and QR Code)


Version 2.0 beta 2008-09-29
===========================
Added support for Aztec Code, Codablock F, Code 32, EAN-14 and DAFT
Code. Rearranged symbology numbers to match Tbarcode v8. Corrected a never
ending loop bug in EAN-128.


Version 1.6.2 2008-07-28
========================
Added KIX Code support and PNG image rotation. Corrected a bug
affecting extended ASCII support in Code 128 and Code 16k.


Version 1.6.1 2008-07-08
========================
Major restructuring of PNG generating code: Now draws UPCA and EAN
symbols properly and puts human readable text into the image. Also corrected
some nasty 'never ending loop' bugs in Code 128 and check digit bugs in PostNet
and Planet.


Version 1.6 2008-04-22
======================
Data Matrix ECC200, Maxicode and Australia Post now use common
Reed-Solomon functions – this also fixes a bug in Maxicode error correction and
replaces the last of the Lien code. Added PNG output for Maxicode symbols.
Removed some useless code. Updated QR support for libqrencode v2.0.0.


Version 1.5.5 2008-03-09
========================
Added composite symbology support. Corrected errors with GS1-128 and
PDF417/MicroPDF417 byte processing. Transferred licence to GPL version 3.


Version 1.5.4 2007-11-26
========================
Added GS1 DataBar (Reduced Space Symbology) support.


Version 1.5.3 2007-10-10
========================
Made huge corrections to Maxicode support by removing and re-writing
much of John's code. Maxicode now supports extended ASCII and modes 4, 5 and 6.


Version 1.5.2 2007-09-26
========================
Added extended ASCII support to Code 16k. Corrected Code 128 error.
Added Maxicode support by integrating code by John Lien.


Version 1.5.1 2007-09-03
========================
Added formatting code to EPS output of EAN and UPC symbols according
to EN 797:1996. Checked against and, where appropriate, altered or corrected to
comply with ISO 16388 and ISO 15417 including Latin-1 support. Altered default
image settings, added automatic ITF border. Corrected error with USPS OneCode.
Tidied up Code 39 quite a bit, added Mod 43 options.


Version 1.5 2007-08-12
======================
Pulled everything together to make an API. Corrected errors with EAN-13,
PDF417 and LOGMARS. Added EPS output. Added QR Code support using libqrencode.
Corrected ISBN verification error. Re-compiled documentation in HTML form. Put
in place proper error handling routines. --font option removed. Encoding is now
done with a restructured zint_symbol structure. Added make install option and
optional QR Code support to Makefile. Corrected minor problem with 4-State
Codes. Restructured code into fewer source code files. Added MicroPDF417
support.


Version 1.4 2007-06-20
======================
Added NVE-18 support. Corrected some problems with compilation and input
verification. Command line option handling now uses getopt(), and all the
switches have changed. Added –font option.


Version 1.3 2007-06-13
======================
Supports USPS OneCode and LOGMARS. Brought all usage information into
one User Manual document.


Version 1.2 2007-05-28
======================
Supports Data Matrix ECC200 (by absorption of IEC16022 code by Stefan
Schmidt et al). Added reverse colours, FIM, MSI/Plessey Modulo 11 and Modulo
11/10. Corrected Code 16k check digit calculation.


Version 1.1 2007-04-26
======================
Added more derivatives (Code 2 of 5 Matrix, IATA and Data Logic,
Truncated PDF417, Deutsche Post Leitcode and Identcode, Pharmazentralnummer,
Planet) and Flattermarken. Tidied up 2 of 5 code.


Version 1.0 2007-04-20
======================
Corrected problem with escape character codes. Supports PDF417. This
completes the list of features I originally wanted (plus a few more), hence
skip to version 1.0.


Version 0.6 2007-04-01
======================
Added Plessey and some derivative codes (EAN-128, Code 128 subset B,
Auspost Reply, Auspost Routing, Auspost Redirect, ITF-14). Tidied up code
again: separated symbologies into more files and put all lookup tables into
arrays (much reducing the amount of code, especially for Code 39e and Code 93).
Errors now output to stderr. Added proper input verification. Distribution now
packs with HTML pages instead of separate README. Outputs to PNG. Outputs
colour. User variable whitespace and border width. Box option. Fixed EAN add-on
bug. Added whitespace and height options. Project name changed to Zint to avoid
conflict with extant trade name. Added escape character input.


Version 0.5 2007-02-28
======================
Added Australia Post 4-State Barcodes and Pharmacode (1 and 2 track).
4-state codes now draw with correct height/width ratio.


Version 0.4 2007-01-15
======================
Added barcode stacking (now stacks up to 16 barcodes) and Code16k (stub).


Version 0.3 2006-12-30
======================
Added MSI/Plessey Mod 10 check and 2 x Mod 10 check options, Telepen
ASCII and Telepen numeric, Postnet, RM4SCC. Code has been tidied up quite a
bit. Bind option added.


Version 0.2 2006-12-12
======================
Added Code 128 (which is now the default), Code 11, Code 2 of 5, Add-on
codes EAN-2 and EAN-5 parity and MSI/Plessey without check digit.


Version 0.1 (as Zebar) 2006-11-13
=================================
Draws UPC-A. UPC-E, EAN-8, EAN-13, Interlaced 2 of 5,
Codabar, Code 39, Extended Code 39 and Code 93 barcodes and Add-on codes EAN-2
and EAN-5 without parity.

# vim: syntax=off :
