encodation in certain cases (and no pessimizations found so far),
props lyngklip (BWIPP);
fix extended char latching when exactly 3 extended chars at end;
count code set C (not digits) in loop deciding when to
shift/latch to extended for better estimate
AZTEC: return warning if ECC < 5% (due to bit-stuffing when version
given); return error if > 22 layers (Zint 26) for Reader
Initialisation symbol requested for better error message
AZTEC/HANXIN/QRCODE: consolidate different ECC data size tables
into one indexed by ECC
DBAR_EXP: check for reduced length <= 77 up front for better error
message
HANXIN: use `malloc()` rather than `z_alloca()` for large binary
array
QRCODE: `ecc_level` now 0-based (not 1-based)
MICROQR: consolidate different version end routines into one
`microqr_end()` and use new `microqr_data` table to simplify code
MICROPDF417: use table for max codewords per column
library: centralize all error messages using new `errtxt()`,
`errtxtf()`, `errtxt_adj()` funcs that protect `symbol->errtxt`
from overflow, & try to make error messages more consistent
thru-out, adding more feedback info to many, & use positional
args "%n$" in prep for l10n (maybe);
`is_sane/is_sane_lookup()` -> `not_sane/not_sane_lookup()`,
returning 1-based position (zero on failure) instead of bool;
`long` ints -> plain `int` (except those dealing with `ftell()`,
`fread()` etc) as depend on int being 32-bits already
GUI: in "grpDATF.ui" use "PlainText" rather than "RichText" for
tracker ratio examples as height of text messing up sometimes
manual: clarify Codablock-F length maximum & add examples
docs: README: pandoc 3.5, Ubuntu 24.04
CMake: use "-Wpedantic" for Clang only as GNU complains about
`errtxtf()` positional args "%n$"
CODE49: Better error message on ZINT_ERROR_TOO_LONG
manual: Use floating pt notation for floating pt args on options
backend/tools/data: Remove overlooked "GB2312.TXT" from git
raster: `size2` -> `prev_size`; one line `malloc()`s
C25/CODE128: some code fiddling
tests/PNG: Add some more text examples
from ZXing (props Alex Geller) - about 25-60% slower depending on
data & stack heavy but does improve some outcomes when FNC1s
present (GS1_MODE or manual) although not much else it appears
(the previous algorithm was very good), but has a logical clarity
the other lacked - funcs `c128_dxsmooth()` etc shared with
CODE16K now moved there and renamed as `c16k_`;
also fix extended char latching when exactly 4 extended chars
at end
also manual code set switching now honoured exactly even if
immediate shift required;
manual: make explicit that AI "(00)" and "(01)" prefixes added by
Zint are HRT-only
general: add `extern "C"` wrappers to a few header files
ticket #324, props Jim Shank;
also improve encodation for a few limited cases;
also some code fiddling
BWIPP: update to latest
raster: check for overflow on `size + size2` in `raster_malloc()`
vector: put `malloc()`s on one line for grep ease
docs: pandoc-3.3, clang-tidy-20
`iso3166list` linter and adjusting all others to allow for
multiple optional linters (by checking `data_len` vs `offset`)
library: change invalid `input_mode` reset to return warning;
split func table into 2 - func declarations without prototype
will be error in C23;
make invalid symbology check a separate function using a table
and call near beginning of `ZBarcode_Encode_Segs()`;
in `ZBarcode_BarcodeName()` save some bytes by simplifying
name table and removing "BARCODE_" prefix from entries
output: fix pack logic to use pragma by default (actually more
portable than `__attribute__`)
common.h: remove C99 detection which was artifice of specifying
"-std=", and rejig layout to be more logical
BWIPP: update to latest version
general: change `ZINT_VERSION_BUILD` tests to `#if`s
general: further fiddling with some tables to save a few bytes
CLI: change function arg `optarg` -> `arg` so doesn't shadow
global
general: library now compilable with Comp Cert C (though as it
doesn't support `alloca()` will have multiple memory leaks)
[f3a982c1dd])
AZTEC/CODE16K/CODEONE/DATAMATRIX/DBAR_EXP/GRIDMATRIX/HANXIN
/MAILMARK_4S/PDF417/MSI_PLESSEY/QRCODE/RMQR/TIF/ULTRA/USPS_IMAIL:
lessen storage of some tables by using least integral size
required (saves ~3K); reformat some tables, comments
AUSPOST/AZTEC: remove unnecessary int casts on array indexing
CODE11/CODE39: move start/stop chars into one entry in tables to
save a few bytes; some reformatting, comments
CODEONE: add `c1_` prefixes
common: more precise compiler/version checks
composite: add `cc_` prefixes; UINT -> unsigned short; use
`sizeof()` instead of `strlen()` for `in_linear_comp` static;
some reformatting, comments
EMF: use table instead of string for `ultra_chars[]`
GIF: remove unnecessary cast
library: use `sizeof()` instead of `strlen()` for static;
add `consts` to `escape_char_process()` & use unsigned for `ch`
DBAR: use `dbar_`, `dbar_ltd_`, `dbar_exp_` prefixes
docs: update pandoc version
test `ferror()` also in `fm_err()` if `err` zero and file
NetBSD: add instructions and some workarounds (`getopt_long_only()`
in particular)
qzint: check `__GNUC__` version for "-Wstringop-truncation"
suppression
outputting to in-memory buffer `symbol->memfile` instead of to
file `symbol->outfile`, ticket #301
Add "README.clang-tidy" and ".clang-tidy" options file
Suppress some warnings
2017 -> 2022 (2017 moved to "vs2017") and simplifying lpng
build (use "nmake" - "libpng16_static.lib" -> "libpng.lib");
update various ".sln", ".vcxproj" & "*.pro" files
update_version.php: update copyright year also in "*.rc" files
manual: note Ultracode 2023 now released but not yet supported
whjitespace at bottom of CODABLOCKF/CODE16K/CODE49 if BIND_TOP
set); add left/right fudge to guard whitespace placements so
appear closer to edge for SVG/qzint (undone by EMF/EPS)
`qr_in_numeric()`/`hx_in_numeric()` (restrict to 3, not 4),
ticket #300 (#16), props Andre Maute
manual: "Maxicode" -> "MaxiCode"; add max capacities for matrix
barcodes
MSI_PLESSEY/FLAT/DAFT/TELEPEN/TELEPEN_NUM: increase allowed
lengths to max or near-max possible in 1152 modules for most
(all?) variable length input linear barcodes
USPS_IMAIL: suppress bogus clang-tidy warning re garbage value
(doesn't take `strlen()` into account?)
rename `ZINT_CAP_EXTENDABLE` -> `ZINT_CAP_EANUPC`
(`ZINT_CAP_EXTENDABLE` marked as legacy)
CODE128: increase no. symbol chars max 60 -> 99
EAN-2/EAN-5: fix `BARCODE_BIND_TOP/BIND/BOX` output
GS1_128: warn if data > 48 (GS1 General Specifications max)
common: `is_extendable()` -> `is_ucpean()`
raster: add `ZFONT_HALIGN_CENTRE/LEFT/RIGHT` flags and process
in `draw_string()` (for drawing EAN/UPC outside digits), and
for `ZFONT_HALIGN_CENTRE` round when calculating centre
(shifts some texts 1 pixel left)
raster/vector: use offsets into `symbol->text` for EAN/UPC
instead of `out_upcean_split_text()` (removed)
BMP/EMF/GIF/PCX/PNG/PS/SVG/TIF: use new `out_colour_get_rgb()`
routine (replaces `colour_to_XXX()`)
general: simplify/fix some `error_number` handling/returning
frontend: truncate overlong `--primary` instead of ignoring;
negative floating pt option (for `--textgap`)
man page: list size detail for matrix symbols (`--vers`)
manual: further fiddling with scaling text; some typos
and remove *.TXT from backend/tools/data, adding GB2312.TXT
README
manual: try to make scaling info more exact, and re-iterate no text
printed for raster with scale < 1;
move CLI HRT section up;
add one-page docs/manual.html to git - should do same for 3.1M
manual.pdf??
other: remove some no longer used backend/tools, readme-cmake
(was only set on BMP output to length of BMP pixel array)
EXCODE39: change to display check digit in HRT by default
CODE39/EXCODE39/LOGMARS: new hidden check digit option
(`option_2 = 2`)
qr.c: suppress bogus gcc-13 warning (only appears on optimize)
GUI: move some symbology-specific options into Data Tab so
separate tab unnecessary (those with few options and no
Composite/ECI), namely: all C25XXX, CODE39/EXCODE39/LOGMARS,
MSI_PLESSEY, CODABAR, DAFT, DPD, MAILMARK_2D, ITF-14, PZN,
UPNQR, CHANNEL, CODE93 and VIN, adjusting grp uis.
change Data dialog button (ellipsis) QToolButton -> QPushButton
& vice versa zap/clear/eye/swap/scale buttons QPushButton ->
QToolButton for better mac compat (also makes sense);
remove some mac hacks that no longer seem necessary;
use folder icon for Export dialog directory button
manual: document new Symbology-specific groupbox & CODE39/etc
hidden check digit option; add annexes on Qt and Tcl backends;
narrow some tables for better txt output;
remove echoed image tags in txt (pandoc 3.1.5 regression?);
add one-page HTML output to Makefile; also tex output (debug);
add class attributes to images to aid HTML styling;
various other fiddlings
manual: expand size/alpha details in Section "5.4 Buffering Symbols
in Memory (raster)" (cf ticket #291);
add BSD info (TODO: NetBSD);
variable -> member (struct zint_symbol)
frontend: fix missing static on `validate_structapp()`
test suite: update to latest BWIPP (PDF417 needed adjusting)
Changelog: trim some more uninteresting changes
GUI: fix Text Gap suffix, add "in X-dimensions" to tooltip;
save/restore Preview Background color dialog geometry &
dynamically show colour in preview on changing
manual: Composite -> GS1 Composite; add some verbiage re Symbology
tab & Sequence Dialog
reduce antialiasing allowance for `textoffset`;
adjust text to baseline using values for Arimo rather than
percentage
GUI: fix not enabling font combo "Small Bold (vector only)" by
default
raster/vector: rename `text_height` -> `font_height`
remove legacy "T" prefix from def commands; reinstate previous R
(TR) def so as to use I (TB) copy to save file size, & for ULTRA
pre-group rects by colour to enable use; adjust H (TH) def so
can use new J copy to save file size; various other fiddles
manual: Royal Mail Mailmark - put Destination+DPS & RTS in tables
for readability
add missing Table caption "Micro QR ECC Levels";
update README for pandoc-3.1.3;
remove TODO Windows instructions which never worked and likely
never will
Allow `--embedfont` for non-EAN/UPC SVG also (& update GUI)
SVG: add "fonts/normal_woff2.h"; use array syntax for it &
"fonts/upcean_woff2.h" to avoid large strings
GUI: embed Arimo (via "fonts/normal_ttf.h"), same as OCRB
Change textgap max 5X -> 10X
README: make list of barcodes 2-col table for readability
win32/README: note Visual Studio 2022 re CMake
`EANUPC_GUARD_WHITESPACE`, CLI `--guardwhitespace`) (ticket #287)
EAN-2/EAN-5: HRT now at top instead of at bottom for standalones,
following BWIPP
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
CLI: use own (Wine) version of `CommandLineToArgvW()` to avoid
loading "shell32.dll"
Move "font.h" -> "raster_font.h"
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 "OCR-B, monospace";
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 of EAN/UPC
GUI: use "OCR-B" font for EAN/UPC and "Arimo" for all others (was
"Helvetica" for both); paint background of screen preview light
grey so as contrasts with whitespace and quiet zones
EMF: prefix funcs with `emf_`; simplify string `halign` handling
large: rename `large_int` -> `large_uint`
CODE128/common: move `c128_hrt_cpy_iso8859_1()` to
`hrt_cpy_iso8859_1()` and add `ZINT_WARN_HRT_TRUNCATED` warning
(for future use)
Various symbologies: replace `printf()` with `fputs()`
(symbol->debug)
QRCODE: better assert(), removing a NOLINT (2 left)
CLI: add some more barcode synonyms for DBAR
common: various fiddlings
CMake: don't include png.c unless ZINT_USE_PNG (avoids clang
warning)
barcode and text
- EMF/EPS/SVG/GUI: ignore BOLD_TEXT for EAN/UPC
- DAFT: up max to 250 chars
- EMF/EPS/SVG: fix addon bars placement/length when text hidden
- Qt backend: use `QFontMetrics::horizontalAdvance()` rather than
`boundingRect()` to calc text width (seems to be more accurate)
- library: make printf/sprintf() format arg always literal string
- output: fix errtxt nos clash;
use array for `out_upcean_split_text()` text parts
- raster/vector: smallify addon text printing logic
- frontend: warn if output file and direct options both given;
add TODO note about `CommandLineToArgvW()` loading shell32.dll
- manual: put HRT options in own section
-> 16 to allow for "C,M,Y,K" comma-separated decimal percentage
strings
- API/CLI/GUI: allow foreground/background colours to be specified
as comma-separated decimal "C,M,Y,K" strings where "C", "M" etc.
are percentages (0-100) (ticket #281, 3rd point)
- output.c: new funcs `out_colour_get_rgb()` & `out_colour_get_cmyk()`
and use in bmp/emf/gif etc.
- PCX: add alpha support
- GUI: fix fg/gbcolor icon background not being reset on zap
- GUI: Rearrange some Appearance tab inputs (Border Type <-> Width,
Show Text <-> Font, Text/Font <-> Printing Scale/Size) to flow
more naturally (hopefully)
- GUI: save button "Save As..." -> "Save..." and add icon
- CLI: add --bgcolor/colour & --fgcolor/colour synonyms
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)
- library: guard against out-of-bounds rows (negative)
- test suite: fix some clang-tidy warnings; slight coverage
improvements