non-digit in numeral (both caused misencodation);
replace `gm_macro_matrix[]` array with calculation (marginally
slower but saves ~1.4k);
replace `gm_shift_set[]` use with simple compares (performance);
change GM_CHINESE/etc defines to numbers so can index into new
`gm_shift_set[]` array (simplifies mode switching code);
GM_NUMBER -> GM_NUMERAL, modules -> macromodules_per_dim, various
other renamings to hopefully more explanatory names;
various other changes (mostly performance)
test suite: make use of new zxing-cpp diagnostics2 branch Grid
Matrix decoder
manual: slight clarification of `--gs1nocheck`
BWIPP: latest
new routines `mirror_start()`, `mirror_outfile()` & limit
substitutions on Unix to backslash (Windows remains the same);
restrict "borderwidth", "textgap", "vwhitesp", "whitesp" < 100
CODEONE: fix `ceilf()` -> `C1_MULT_CEIL()` in FAST_MODE encodation
(improves/changes some encodation)
composite: preserve `gs1_verify()` warning using `warn_level` hack;
fix wrong name `zint_dbar_omnstk_set_height()` ->
`zint_dbar_stk_set_height()`;
use new `zint_micropdf_variant()` & `zint_micropdf_expand()`
routines (see below)
MICROPDF417: move variant determination into new shareable routine
`zint_micropdf_variant()` & expansion into `zint_micropdf_expand()`
qzint: add helper methods `setbordertypevalue()`,
`encodedinputmode()`, `encodedoutputoptions()`,
`ecivaluetoeciindex()` and `eciindextoecivalue()`
dbar: for performance pre-calculate `combins()` as array
coverage: add `malloc()`-type failure testing to AZTEC,
CONTENT_SEGS, MEMORY_FILE, raster, Reed-Solomon & vector;
numerous changes to remove unused code and test more branches
common: add `isxdigit()`
general: various code fiddlings
manual: add char names to sequence and batch format char tables;
mention long options can be shortened (& use "--compliantheight"
-> "--compliant");
expand mirror explanation & document substitutions in footnote;
workaround xecjk putting space after double quote when quoting
cjk chars & rejig input mode examples;
workaround html alignment bug in table gs1-enabled symbologies by
adding extra rh dashes to header cols;
add "figure nn: " to txt image tags via sed:
various other small fixes and rephrasings
replace double-slash comments with old-skool slash asterisk ones;
define uint16_t etc for Windows ourselves and remove ms_stdint.h &
stdint_msvc.h as no longer used;
(backend (excepting test suite) now C89 compatible)
LICENSE: move from backend to root and move COPYING to frontend, with
copies in frontend_qt & backend_qt, so in where it applies;
add LICENSE section from manual to root README
GRIDMATRIX, HANXIN, MAXICODE, MICROPDF417, PDF417, QRCODE, RMQR, ULTRA
RMQR: fix ECI encoding (wrong bit length for indicator)
MICROQR: check versions M1 and M2 for allowed characters so as to give
better error messages
DOTCODE: some small optimizations
common.c: add is_chr(), segs_length(), segs_cpy()
CODEONE/CODE128/DOTCODE/GRIDMATRIX/HANXIN/MAXICODE/QRCODE/ULTRA: add
namespace prefixes to static funcs/data
includes: use Z_ prefix, unuse double underscore prefixes (guard defines)
manual.txt: compress some tables using double/treble column sets
- use fixed-length string tables (mostly) instead of (char *) pointer ones
(saves ~40K)
- re-use C128Table for CODABLOCKF and CODE16K
(required removal of Stop character and extra CODE16K-only entry)
- use pointer to destination and copy (memcpy/strcpy(), bin_append_posn())
instead of concatenating (strcat()) (mostly)
- replace last remaining bin_append()s with bin_append_posn();
bin_append() removed
- add length arg to toupper() and expand() (avoids strlen())
- change is_sane() to use table-based flags (avoids an iteration)
- rename lookup() to is_sane_lookup() and change to check and return posns
and use in pointer to destination loops (avoids strcat()s)
- remove special case PHARMA in expand() (dealt with in pharma())
- make #define SILVER/CALCIUM/TECHNETIUM/KRSET etc static strings
- replace strchr() -> posn()
- CODE128: populate destination once in checksum loop; re-use and export
some more routines (c128_set_a/b/c(), c128_put_in_set()) for sharing;
prefix defines (SHIFTA -> C128_SHIFTA etc) and existing exported routines
- use factor XOR toggle trick in checksum calcs (avoids branch)
- raster.c: fill out single 1-pixel row and copy using new draw_bar_line(),
copy_bar_line() routines; similarly in buffer_plot compare previous line &
copy if same (same technique as used to improve non-half-integer scaling,
significant performance increase, (c) codemonkey82);
also done for PNG (BMP/GIF/PCX/TIFF not done)
- raster/vector/output.c: shorten "output_" prefix -> "out_";
sync vector to other raster changes to try to keep source files similar
- 2of5.c: prefix "c25_"
JAPANPOST: return error if input data truncated (backward incompatible)
DAFT: max chars 50 -> 100
common.c: istwodigit() -> is_twodigit()
common.c/emf.c/output.c: use some further stripf()s (MSVC6 float variations)
library.c: new check_output_args() helper
zint.h: add BARCODE_LAST marker and use in library.c
QRCODE: remove a NOLINT (requires clang-tidy-13), one remaining
CMake: separate no-optimize from ZINT_DEBUG into new ZINT_NOOPT option