From c8033695d9db591cb30bdfea5154726c2ff08217 Mon Sep 17 00:00:00 2001 From: gitlost Date: Fri, 2 Dec 2022 21:39:01 +0000 Subject: [PATCH] - 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()` (+ `ZBarcode_XdimDp_From_Scale()` & `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 - 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 - 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) - 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 --- ChangeLog | 39 ++ README.linux | 8 +- backend/2of5.c | 35 +- backend/bmp.c | 10 +- backend/codablock.c | 4 +- backend/code128.c | 7 +- backend/common.c | 2 +- backend/dmatrix.c | 2 +- backend/emf.c | 96 ++- backend/gif.c | 3 +- backend/gridmtx.c | 2 +- backend/library.c | 336 ++++++++-- backend/mailmark.c | 8 +- backend/medical.c | 9 +- backend/output.c | 100 ++- backend/output.h | 3 + backend/pcx.c | 8 +- backend/pdf417.c | 2 +- backend/png.c | 9 +- backend/ps.c | 3 +- backend/qr.c | 4 +- backend/raster.c | 3 +- backend/svg.c | 3 +- backend/tests/README | 12 +- .../tests/data/emf/code128_egrave_bold.emf | Bin 1248 -> 1248 bytes .../data/emf/code128_egrave_bold_100dpi.emf | Bin 0 -> 1248 bytes .../data/emf/code128_egrave_bold_1200dpi.emf | Bin 0 -> 1248 bytes .../data/emf/code128_egrave_bold_150dpi.emf | Bin 0 -> 1248 bytes .../data/emf/code128_egrave_bold_300dpi.emf | Bin 0 -> 1248 bytes .../data/emf/code128_egrave_bold_400dpi.emf | Bin 0 -> 1248 bytes backend/tests/data/emf/code39_rotate_180.emf | Bin 1136 -> 1136 bytes backend/tests/data/emf/code39_rotate_270.emf | Bin 1136 -> 1136 bytes backend/tests/data/emf/code39_rotate_90.emf | Bin 1136 -> 1136 bytes .../data/emf/code39_rotate_90_300dpi.emf | Bin 0 -> 1136 bytes backend/tests/data/emf/ean13_5addon_#185.emf | Bin 1876 -> 1876 bytes .../data/emf/ean13_5addon_ggs_5.2.2.5.2-2.emf | Bin 1876 -> 1876 bytes backend/tests/data/emf/itf14_bold.emf | Bin 1552 -> 1552 bytes backend/tests/data/emf/itf14_bold_600dpi.emf | Bin 0 -> 1552 bytes backend/tests/data/emf/maxicode_#185.emf | Bin 26928 -> 26928 bytes .../tests/data/emf/maxicode_#185_150dpi.emf | Bin 0 -> 26928 bytes .../tests/data/emf/maxicode_#185_600dpi.emf | Bin 0 -> 26928 bytes .../data/emf/maxicode_rotate_90_nobg.emf | Bin 26936 -> 26936 bytes .../emf/maxicode_rotate_90_nobg_300dpi.emf | Bin 0 -> 26936 bytes backend/tests/data/emf/telenum_fg_bg.emf | Bin 1268 -> 1268 bytes .../tests/data/emf/telenum_fg_bg_150dpi.emf | Bin 0 -> 1268 bytes backend/tests/data/emf/ultracode_fg_bg.emf | Bin 2808 -> 2808 bytes .../tests/data/emf/ultracode_fg_bg_box2.emf | Bin 2940 -> 2940 bytes .../data/emf/ultracode_fg_bg_box2_600dpi.emf | Bin 0 -> 2940 bytes .../data/emf/upca_2addon_ggs_5.2.6.6-5.emf | Bin 1860 -> 1860 bytes backend/tests/data/emf/upce_2addon.emf | Bin 1460 -> 1460 bytes backend/tests/data/emf/upce_2addon_150dpi.emf | Bin 0 -> 1460 bytes .../tests/data/emf/upce_2addon_small_bold.emf | Bin 1460 -> 1460 bytes backend/tests/data/print/emf/code128_aim.emf | Bin 956 -> 956 bytes .../tests/data/print/emf/dotcode_aim_fig7.emf | Bin 1212 -> 1212 bytes .../tests/data/print/emf/maxicode_fig_2.emf | Bin 26928 -> 26928 bytes backend/tests/data/print/emf/qr_v1_m.emf | Bin 2148 -> 2148 bytes backend/tests/data/print/emf/ultracode_a.emf | Bin 2688 -> 2688 bytes backend/tests/test_2of5.c | 28 +- backend/tests/test_bmp.c | 13 +- backend/tests/test_code128.c | 20 +- backend/tests/test_eci.c | 6 +- backend/tests/test_emf.c | 57 +- backend/tests/test_gif.c | 13 +- backend/tests/test_library.c | 212 ++++++- backend/tests/test_mailmark.c | 108 ++-- backend/tests/test_output.c | 102 +++ backend/tests/test_pcx.c | 9 +- backend/tests/test_png.c | 13 +- backend/tests/test_print.c | 4 +- backend/tests/test_ps.c | 5 +- backend/tests/test_qr.c | 10 +- backend/tests/test_raster.c | 34 +- backend/tests/test_svg.c | 5 +- backend/tests/test_tif.c | 13 +- backend/tests/test_vector.c | 28 +- backend/tests/testcommon.c | 81 ++- backend/tests/testcommon.h | 11 +- backend/tif.c | 21 +- backend/ultra.c | 2 +- backend/zint.h | 19 +- backend_qt/qzint.cpp | 265 ++++++-- backend_qt/qzint.h | 228 +++++-- backend_qt/tests/test_qzint.cpp | 236 +++++-- backend_tcl/configure.in | 5 +- backend_tcl/demo/demo.tcl | 46 +- backend_tcl/zint.c | 63 +- docs/Makefile | 12 +- docs/images/{code128b.svg => code128ab.svg} | 0 docs/images/dpident.svg | 76 +-- docs/images/dpleit.svg | 86 +-- docs/images/gui_appearance.png | Bin 309483 -> 348361 bytes docs/images/gui_black_eye.png | Bin 713 -> 881 bytes docs/images/gui_delete.png | Bin 0 -> 410 bytes docs/images/gui_scaling.png | Bin 0 -> 439 bytes docs/images/gui_set_printing_scale.png | Bin 0 -> 118495 bytes docs/images/gui_swap.png | Bin 994 -> 334 bytes docs/images/gui_white_eye.png | Bin 952 -> 955 bytes docs/images/gui_zap.png | Bin 0 -> 533 bytes docs/manual.pmd | 272 +++++--- docs/manual.txt | 298 ++++++--- docs/zint.1 | 28 +- docs/zint.1.pmd | 19 +- docs/zint_images.sh | 2 +- frontend/main.c | 589 ++++++++++++------ frontend/tests/test_args.c | 302 ++++----- frontend_qt/CMakeLists.txt | 10 +- frontend_qt/cliwindow.cpp | 10 +- frontend_qt/cliwindow.h | 12 +- frontend_qt/extData.ui | 12 + frontend_qt/extExport.ui | 4 +- frontend_qt/extScale.ui | 350 +++++++++++ frontend_qt/frontend_qt.pro | 3 + frontend_qt/frontend_qt_zintdll.pro | 3 + frontend_qt/frontend_vc8.pro | 5 +- frontend_qt/grpDAFT.ui | 16 + frontend_qt/grpUPCA.ui | 6 +- frontend_qt/grpUPCEAN.ui | 6 +- frontend_qt/mainWindow.ui | 98 ++- frontend_qt/mainwindow.cpp | 323 +++++++--- frontend_qt/mainwindow.h | 33 +- frontend_qt/res/LICENSE_lucide | 15 + frontend_qt/res/scaling.svg | 7 + frontend_qt/resources.qrc | 1 + frontend_qt/scalewindow.cpp | 248 ++++++++ frontend_qt/scalewindow.h | 63 ++ win32/README | 2 +- win32/zint_cmdline_vc6/readme.txt | 4 +- 127 files changed, 4032 insertions(+), 1248 deletions(-) create mode 100644 backend/tests/data/emf/code128_egrave_bold_100dpi.emf create mode 100644 backend/tests/data/emf/code128_egrave_bold_1200dpi.emf create mode 100644 backend/tests/data/emf/code128_egrave_bold_150dpi.emf create mode 100644 backend/tests/data/emf/code128_egrave_bold_300dpi.emf create mode 100644 backend/tests/data/emf/code128_egrave_bold_400dpi.emf create mode 100644 backend/tests/data/emf/code39_rotate_90_300dpi.emf create mode 100644 backend/tests/data/emf/itf14_bold_600dpi.emf create mode 100644 backend/tests/data/emf/maxicode_#185_150dpi.emf create mode 100644 backend/tests/data/emf/maxicode_#185_600dpi.emf create mode 100644 backend/tests/data/emf/maxicode_rotate_90_nobg_300dpi.emf create mode 100644 backend/tests/data/emf/telenum_fg_bg_150dpi.emf create mode 100644 backend/tests/data/emf/ultracode_fg_bg_box2_600dpi.emf create mode 100644 backend/tests/data/emf/upce_2addon_150dpi.emf rename docs/images/{code128b.svg => code128ab.svg} (100%) create mode 100644 docs/images/gui_delete.png create mode 100644 docs/images/gui_scaling.png create mode 100644 docs/images/gui_set_printing_scale.png create mode 100644 docs/images/gui_zap.png create mode 100644 frontend_qt/extScale.ui create mode 100644 frontend_qt/res/LICENSE_lucide create mode 100644 frontend_qt/res/scaling.svg create mode 100644 frontend_qt/scalewindow.cpp create mode 100644 frontend_qt/scalewindow.h diff --git a/ChangeLog b/ChangeLog index 6883f6e6..86625c18 100644 --- a/ChangeLog +++ b/ChangeLog @@ -13,6 +13,10 @@ Version 2.11.1.9 (dev) not released yet 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) +- 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 ------- @@ -36,6 +40,35 @@ Changes (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) +- 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 ---- @@ -65,6 +98,10 @@ Bugs 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) @@ -909,3 +946,5 @@ 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 : diff --git a/README.linux b/README.linux index a9c050b3..4a60932c 100644 --- a/README.linux +++ b/README.linux @@ -73,8 +73,8 @@ e.g. CMAKE_MODULE_PATH=/usr/lib/x86_64-linux-gnu/cmake/Qt5 2.2. Using the Qt Maintenance Tool ---------------------------------- -Alternatively, for a more consistent, dependable, flexible experience, sign up and download the -Qt Maintenance Tool from +Alternatively, for a more consistent experience, sign up and download the Qt Maintenance Tool +from https://www.qt.io/download-qt-installer @@ -82,8 +82,8 @@ On Ubuntu/Debian you may need to install xinerama to run the tool: sudo apt install libxcb-xinerama0 -Launch the tool and install the "Desktop gcc 64-bit" component for either Qt 5.15.2 or Qt 6 -(>= 6.1, and not 6.3.0). +Launch the tool and install the "Desktop gcc 64-bit" component for either Qt 5.15.2 (preferred) +or Qt 6 (>= 6.1, 6.2.4 preferably, and not >= 6.3 which are incompatible). Once Qt is installed you may need to tell CMake where it is: diff --git a/backend/2of5.c b/backend/2of5.c index 58044610..d1d347c2 100644 --- a/backend/2of5.c +++ b/backend/2of5.c @@ -207,7 +207,7 @@ static int c25_inter_common(struct zint_symbol *symbol, unsigned char source[], /* ISO/IEC 16390:2007 Section 4.4 min height 5mm or 15% of symbol width whichever greater where (P = character pairs, N = wide/narrow ratio = 3) width = (P(4N + 6) + N + 6)X = (length / 2) * 18 + 9 */ - /* Taking X = 0.330mm from Annex D.3.1 (application specification) */ + /* Taking min X = 0.330mm from Annex D.3.1 (application specification) */ const float min_height_min = stripf(5.0f / 0.33f); float min_height = stripf((18.0f * (length / 2) + 9.0f) * 0.15f); if (min_height < min_height_min) { @@ -281,8 +281,11 @@ INTERNAL int itf14(struct zint_symbol *symbol, unsigned char source[], int lengt } /* Deutsche Post Leitcode */ +/* Documentation (of a very incomplete and non-technical type): +https://www.deutschepost.de/content/dam/dpag/images/D_d/dialogpost-schwer/dp-dialogpost-schwer-broschuere-072021.pdf +*/ INTERNAL int dpleit(struct zint_symbol *symbol, unsigned char source[], int length) { - int i, error_number; + int i, j, error_number; unsigned int count; int factor; unsigned char localstr[16] = {0}; @@ -311,16 +314,27 @@ INTERNAL int dpleit(struct zint_symbol *symbol, unsigned char source[], int leng localstr[13] = c25_check_digit(count); localstr[14] = '\0'; error_number = c25_inter_common(symbol, localstr, 14, 1 /*dont_set_height*/); - ustrcpy(symbol->text, localstr); + + /* HRT formatting as per DIALOGPOST SCHWER brochure but TEC-IT differs as do examples at + https://www.philaseiten.de/cgi-bin/index.pl?ST=8615&CP=0&F=1#M147 */ + for (i = 0, j = 0; i <= 14; i++) { + symbol->text[j++] = localstr[i]; + if (i == 4 || i == 7 || i == 10) { + symbol->text[j++] = '.'; + } + } /* TODO: Find documentation on BARCODE_DPLEIT dimensions/height */ + /* Based on eyeballing DIALOGPOST SCHWER, using 72X as default */ + (void) set_height(symbol, 0.0f, 72.0f, 0.0f, 1 /*no_errtxt*/); return error_number; } /* Deutsche Post Identcode */ +/* See dpleit() for (sort of) documentation reference */ INTERNAL int dpident(struct zint_symbol *symbol, unsigned char source[], int length) { - int i, error_number, zeroes; + int i, j, error_number, zeroes; unsigned int count; int factor; unsigned char localstr[16] = {0}; @@ -348,9 +362,20 @@ INTERNAL int dpident(struct zint_symbol *symbol, unsigned char source[], int len localstr[11] = c25_check_digit(count); localstr[12] = '\0'; error_number = c25_inter_common(symbol, localstr, 12, 1 /*dont_set_height*/); - ustrcpy(symbol->text, localstr); + + /* HRT formatting as per DIALOGPOST SCHWER brochure but TEC-IT differs as do other examples (see above) */ + for (i = 0, j = 0; i <= 12; i++) { + symbol->text[j++] = localstr[i]; + if (i == 1 || i == 4 || i == 7) { + symbol->text[j++] = '.'; + } else if (i == 3 || i == 10) { + symbol->text[j++] = ' '; + } + } /* TODO: Find documentation on BARCODE_DPIDENT dimensions/height */ + /* Based on eyeballing DIALOGPOST SCHWER, using 72X as default */ + (void) set_height(symbol, 0.0f, 72.0f, 0.0f, 1 /*no_errtxt*/); return error_number; } diff --git a/backend/bmp.c b/backend/bmp.c index 4fa6bc54..32c94f54 100644 --- a/backend/bmp.c +++ b/backend/bmp.c @@ -31,12 +31,14 @@ /* SPDX-License-Identifier: BSD-3-Clause */ #include +#include #include #ifdef _MSC_VER #include #include #endif #include "common.h" +#include "output.h" #include "bmp.h" /* Bitmap header structure */ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf) { @@ -44,6 +46,7 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf) int row_size; int bits_per_pixel; int colour_count; + int resolution; unsigned int data_offset, data_size, file_size; unsigned char *bitmap_file_start, *bmp_posn; unsigned char *bitmap; @@ -157,8 +160,9 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf) info_header.bits_per_pixel = bits_per_pixel; info_header.compression_method = 0; /* BI_RGB */ info_header.image_size = 0; - info_header.horiz_res = 0; - info_header.vert_res = 0; + resolution = symbol->dpmm ? (int) roundf(stripf(symbol->dpmm * 1000.0f)) : 0; /* pixels per metre */ + info_header.horiz_res = resolution; + info_header.vert_res = resolution; info_header.colours = colour_count; info_header.important_colours = colour_count; @@ -194,7 +198,7 @@ INTERNAL int bmp_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf) #endif bmp_file = stdout; } else { - if (!(bmp_file = fopen(symbol->outfile, "wb"))) { + if (!(bmp_file = out_fopen(symbol->outfile, "wb"))) { free(bitmap_file_start); sprintf(symbol->errtxt, "601: Could not open output file (%d: %.30s)", errno, strerror(errno)); return ZINT_ERROR_FILE_ACCESS; diff --git a/backend/codablock.c b/backend/codablock.c index fcfb5319..69ebda7c 100644 --- a/backend/codablock.c +++ b/backend/codablock.c @@ -563,8 +563,8 @@ INTERNAL int codablockf(struct zint_symbol *symbol, unsigned char source[], int } symbol->text[0] = '\0'; /* Disable HRT for compatibility with CODABLOCKF */ if (symbol->output_options & COMPLIANT_HEIGHT) { - /* AIM ISS-X-24 Section 4.5.1 minimum row height 8 (for compatibility with CODABLOCKF, not specced for - CODE128) */ + /* AIM ISS-X-24 Section 4.6.1 minimum row height 8X (for compatibility with CODABLOCKF, not specced + for CODE128) */ error_number = set_height(symbol, 8.0f, 10.0f, 0.0f, 0 /*no_errtxt*/); } else { (void) set_height(symbol, 0.0f, 5.0f, 0.0f, 1 /*no_errtxt*/); diff --git a/backend/code128.c b/backend/code128.c index d9720976..7088c375 100644 --- a/backend/code128.c +++ b/backend/code128.c @@ -448,7 +448,7 @@ INTERNAL int code128(struct zint_symbol *symbol, unsigned char source[], int len indexchaine = 0; mode = c128_parunmodd(source[indexchaine]); - if ((symbol->symbology == BARCODE_CODE128B) && (mode == C128_ABORC)) { + if ((symbol->symbology == BARCODE_CODE128AB) && (mode == C128_ABORC)) { mode = C128_AORB; } @@ -461,7 +461,7 @@ INTERNAL int code128(struct zint_symbol *symbol, unsigned char source[], int len break; } mode = c128_parunmodd(source[indexchaine]); - if ((symbol->symbology == BARCODE_CODE128B) && (mode == C128_ABORC)) { + if ((symbol->symbology == BARCODE_CODE128AB) && (mode == C128_ABORC)) { mode = C128_AORB; } } @@ -1169,7 +1169,8 @@ INTERNAL int dpd(struct zint_symbol *symbol, unsigned char source[], int length) } else if (!is_sane(NEON_F, local_source + length - 6, 3)) { /* 3-digit Service Code */ strcpy(symbol->errtxt, "832: Service Code (characters 6-4 from end) should be numeric"); } else { /* Last 10 characters of Tracking No. */ - strcpy(symbol->errtxt, "833: Last 10 characters of Tracking Number (characters 16-7 from end) should be numeric"); + strcpy(symbol->errtxt, + "833: Last 10 characters of Tracking Number (characters 16-7 from end) should be numeric"); } error_number = ZINT_WARN_NONCOMPLIANT; } diff --git a/backend/common.c b/backend/common.c index bc146193..d1e4b3a1 100644 --- a/backend/common.c +++ b/backend/common.c @@ -262,7 +262,7 @@ INTERNAL int is_stackable(const int symbology) { } switch (symbology) { - case BARCODE_CODE128B: + case BARCODE_CODE128AB: case BARCODE_ISBNX: case BARCODE_EAN14: case BARCODE_NVE18: diff --git a/backend/dmatrix.c b/backend/dmatrix.c index 72e735d2..3aa7dfbc 100644 --- a/backend/dmatrix.c +++ b/backend/dmatrix.c @@ -1686,7 +1686,7 @@ static int dm_encode_segs(struct zint_symbol *symbol, struct zint_seg segs[], co if (symbol->structapp.id[0]) { int id, id_len, id1_err, id2_err; - for (id_len = 0; id_len < 32 && symbol->structapp.id[id_len]; id_len++); + for (id_len = 1; id_len < 7 && symbol->structapp.id[id_len]; id_len++); if (id_len > 6) { /* ID1 * 1000 + ID2 */ strcpy(symbol->errtxt, "722: Structured Append ID too long (6 digit maximum)"); diff --git a/backend/emf.c b/backend/emf.c index 1185e7f1..af9883bf 100644 --- a/backend/emf.c +++ b/backend/emf.c @@ -42,6 +42,7 @@ #include #endif #include "common.h" +#include "output.h" #include "emf.h" /* Multiply truncating to 3 decimal places (avoids rounding differences on various platforms) */ @@ -180,6 +181,16 @@ INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) { int rectangle_bycolour[9] = {0}; int width, height; + int bounds_pxx, bounds_pxy; /* Pixels */ + int frame_cmmx, frame_cmmy; /* Hundredths of a mm, i.e. "centi-millimeters" */ + int device_pxx, device_pxy; /* Pixels */ + int mmx, mmy; /* Millimeters */ + int micronx, microny; /* Micrometers */ + const float dpmm = symbol->dpmm ? stripf(symbol->dpmm) + : ZBarcode_XdimDp_From_Scale(symbol->symbology, symbol->scale, + ZBarcode_Default_Xdim(symbol->symbology), "EMF"); + const int sideways = rotate_angle == 90 || rotate_angle == 270; + int draw_background = 1; int bold; const int output_to_stdout = symbol->output_options & BARCODE_STDOUT; @@ -230,6 +241,8 @@ INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) { emr_ellipse_t *circle; emr_polygon_t *hexagon; + const int ih_ultra_offset = symbol->symbology == BARCODE_ULTRA ? 8 : 0; + if (symbol->vector == NULL) { strcpy(symbol->errtxt, "643: Vector header NULL"); return ZINT_ERROR_INVALID_DATA; @@ -281,39 +294,54 @@ INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) { width = (int) ceilf(symbol->vector->width); height = (int) ceilf(symbol->vector->height); + bounds_pxx = width - 1; /* Following Inkscape, bounds "inclusive-inclusive", so size 1 less */ + bounds_pxy = height - 1; + device_pxx = width; /* device */ + device_pxy = height; + + if (dpmm) { + frame_cmmx = (int) roundf(stripf(width * 100.0f / dpmm)) - 1; /* frame also "inclusive-inclusive" */ + frame_cmmy = (int) roundf(stripf(height * 100.0f / dpmm)) - 1; + mmx = (int) roundf(stripf(width / dpmm)); /* millimeters */ + mmy = (int) roundf(stripf(height / dpmm)); + micronx = (int) roundf(stripf(width * 1000.0f / dpmm)); /* micrometers */ + microny = (int) roundf(stripf(height * 1000.0f / dpmm)); + } else { /* Should only happen if `symbol->scale` zero. */ + frame_cmmx = (int) roundf(stripf(width * 100.0f)) - 1; + frame_cmmy = (int) roundf(stripf(height * 100.0f)) - 1; + mmx = (int) roundf(stripf(width)); + mmy = (int) roundf(stripf(height)); + micronx = (int) roundf(stripf(width * 1000.0f)); + microny = (int) roundf(stripf(height * 1000.0f)); + } + /* Header */ emr_header.type = 0x00000001; /* EMR_HEADER */ emr_header.size = 108; /* Including extensions */ - emr_header.emf_header.bounds.left = 0; - emr_header.emf_header.bounds.right = rotate_angle == 90 || rotate_angle == 270 ? height : width; - emr_header.emf_header.bounds.bottom = rotate_angle == 90 || rotate_angle == 270 ? width : height; - emr_header.emf_header.bounds.top = 0; - emr_header.emf_header.frame.left = 0; - emr_header.emf_header.frame.right = emr_header.emf_header.bounds.right * 30; - emr_header.emf_header.frame.top = 0; - emr_header.emf_header.frame.bottom = emr_header.emf_header.bounds.bottom * 30; + emr_header.emf_header.bounds.left = emr_header.emf_header.bounds.top = 0; + emr_header.emf_header.bounds.right = sideways ? bounds_pxy : bounds_pxx; + emr_header.emf_header.bounds.bottom = sideways ? bounds_pxx : bounds_pxy; + emr_header.emf_header.frame.left = emr_header.emf_header.frame.top = 0; + emr_header.emf_header.frame.right = sideways ? frame_cmmy : frame_cmmx; + emr_header.emf_header.frame.bottom = sideways ? frame_cmmx : frame_cmmy; emr_header.emf_header.record_signature = 0x464d4520; /* ENHMETA_SIGNATURE */ emr_header.emf_header.version = 0x00010000; - if (symbol->symbology == BARCODE_ULTRA) { - emr_header.emf_header.handles = 12; /* Number of graphics objects */ - } else { - emr_header.emf_header.handles = fsize2 != 0.0f ? 5 : 4; - } + emr_header.emf_header.handles = (fsize2 != 0.0f ? 5 : 4) + ih_ultra_offset; /* Number of graphics objects */ emr_header.emf_header.reserved = 0x0000; emr_header.emf_header.n_description = 0; emr_header.emf_header.off_description = 0; emr_header.emf_header.n_pal_entries = 0; - emr_header.emf_header.device.cx = 1000; - emr_header.emf_header.device.cy = 1000; - emr_header.emf_header.millimeters.cx = 300; - emr_header.emf_header.millimeters.cy = 300; + emr_header.emf_header.device.cx = sideways ? device_pxy : device_pxx; + emr_header.emf_header.device.cy = sideways ? device_pxx : device_pxy; + emr_header.emf_header.millimeters.cx = sideways ? mmy : mmx; + emr_header.emf_header.millimeters.cy = sideways ? mmx : mmy; /* HeaderExtension1 */ emr_header.emf_header.cb_pixel_format = 0x0000; /* None set */ emr_header.emf_header.off_pixel_format = 0x0000; /* None set */ emr_header.emf_header.b_open_gl = 0x0000; /* OpenGL not present */ /* HeaderExtension2 */ - emr_header.emf_header.micrometers.cx = 0; - emr_header.emf_header.micrometers.cy = 0; + emr_header.emf_header.micrometers.cx = sideways ? microny : micronx; + emr_header.emf_header.micrometers.cy = sideways ? micronx : microny; bytecount = 108; recordcount = 1; @@ -339,7 +367,7 @@ INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) { /* Create Brushes */ emr_createbrushindirect_bg.type = 0x00000027; /* EMR_CREATEBRUSHINDIRECT */ emr_createbrushindirect_bg.size = 24; - emr_createbrushindirect_bg.ih_brush = 1; + emr_createbrushindirect_bg.ih_brush = 0; emr_createbrushindirect_bg.log_brush.brush_style = 0x0000; /* BS_SOLID */ emr_createbrushindirect_bg.log_brush.color.red = bgred; emr_createbrushindirect_bg.log_brush.color.green = bggrn; @@ -353,7 +381,7 @@ INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) { for (i = 0; i < 9; i++) { emr_createbrushindirect_colour[i].type = 0x00000027; /* EMR_CREATEBRUSHINDIRECT */ emr_createbrushindirect_colour[i].size = 24; - emr_createbrushindirect_colour[i].ih_brush = 2 + i; + emr_createbrushindirect_colour[i].ih_brush = 1 + i; emr_createbrushindirect_colour[i].log_brush.brush_style = 0x0000; /* BS_SOLID */ if (i == 0) { emr_createbrushindirect_colour[i].log_brush.color.red = fgred; @@ -372,7 +400,7 @@ INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) { } else { emr_createbrushindirect_fg.type = 0x00000027; /* EMR_CREATEBRUSHINDIRECT */ emr_createbrushindirect_fg.size = 24; - emr_createbrushindirect_fg.ih_brush = 2; + emr_createbrushindirect_fg.ih_brush = 1; emr_createbrushindirect_fg.log_brush.brush_style = 0x0000; /* BS_SOLID */ emr_createbrushindirect_fg.log_brush.color.red = fgred; emr_createbrushindirect_fg.log_brush.color.green = fggrn; @@ -385,7 +413,7 @@ INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) { emr_selectobject_bgbrush.type = 0x00000025; /* EMR_SELECTOBJECT */ emr_selectobject_bgbrush.size = 12; - emr_selectobject_bgbrush.ih_object = 1; + emr_selectobject_bgbrush.ih_object = emr_createbrushindirect_bg.ih_brush; bytecount += 12; recordcount++; @@ -393,14 +421,14 @@ INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) { for (i = 0; i < 9; i++) { emr_selectobject_colour[i].type = 0x00000025; /* EMR_SELECTOBJECT */ emr_selectobject_colour[i].size = 12; - emr_selectobject_colour[i].ih_object = 2 + i; + emr_selectobject_colour[i].ih_object = emr_createbrushindirect_colour[i].ih_brush; } bytecount += colours_used * 12; recordcount += colours_used; } else { emr_selectobject_fgbrush.type = 0x00000025; /* EMR_SELECTOBJECT */ emr_selectobject_fgbrush.size = 12; - emr_selectobject_fgbrush.ih_object = 2; + emr_selectobject_fgbrush.ih_object = emr_createbrushindirect_fg.ih_brush; bytecount += 12; recordcount++; } @@ -408,7 +436,7 @@ INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) { /* Create Pens */ emr_createpen.type = 0x00000026; /* EMR_CREATEPEN */ emr_createpen.size = 28; - emr_createpen.ih_pen = 11; + emr_createpen.ih_pen = 2 + ih_ultra_offset; emr_createpen.log_pen.pen_style = 0x00000005; /* PS_NULL */ emr_createpen.log_pen.width.x = 1; emr_createpen.log_pen.width.y = 0; /* ignored */ @@ -421,7 +449,7 @@ INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) { emr_selectobject_pen.type = 0x00000025; /* EMR_SELECTOBJECT */ emr_selectobject_pen.size = 12; - emr_selectobject_pen.ih_object = 11; + emr_selectobject_pen.ih_object = emr_createpen.ih_pen; bytecount += 12; recordcount++; @@ -431,8 +459,8 @@ INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) { background.size = 24; background.box.top = 0; background.box.left = 0; - background.box.right = emr_header.emf_header.bounds.right; - background.box.bottom = emr_header.emf_header.bounds.bottom; + background.box.right = width; + background.box.bottom = height; bytecount += 24; recordcount++; } @@ -537,7 +565,7 @@ INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) { memset(&emr_extcreatefontindirectw, 0, sizeof(emr_extcreatefontindirectw)); emr_extcreatefontindirectw.type = 0x00000052; /* EMR_EXTCREATEFONTINDIRECTW */ emr_extcreatefontindirectw.size = 104; - emr_extcreatefontindirectw.ih_fonts = 12; + emr_extcreatefontindirectw.ih_fonts = 3 + ih_ultra_offset; emr_extcreatefontindirectw.elw.height = (int32_t) fsize; emr_extcreatefontindirectw.elw.width = 0; /* automatic */ emr_extcreatefontindirectw.elw.weight = bold ? 700 : 400; @@ -551,20 +579,20 @@ INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) { emr_selectobject_font.type = 0x00000025; /* EMR_SELECTOBJECT */ emr_selectobject_font.size = 12; - emr_selectobject_font.ih_object = 12; + emr_selectobject_font.ih_object = emr_extcreatefontindirectw.ih_fonts; bytecount += 12; recordcount++; if (fsize2) { memcpy(&emr_extcreatefontindirectw2, &emr_extcreatefontindirectw, sizeof(emr_extcreatefontindirectw)); - emr_extcreatefontindirectw2.ih_fonts = 13; + emr_extcreatefontindirectw2.ih_fonts = 4 + ih_ultra_offset; emr_extcreatefontindirectw2.elw.height = (int32_t) fsize2; bytecount += 104; recordcount++; emr_selectobject_font2.type = 0x00000025; /* EMR_SELECTOBJECT */ emr_selectobject_font2.size = 12; - emr_selectobject_font2.ih_object = 13; + emr_selectobject_font2.ih_object = emr_extcreatefontindirectw2.ih_fonts; bytecount += 12; recordcount++; } @@ -684,7 +712,7 @@ INTERNAL int emf_plot(struct zint_symbol *symbol, int rotate_angle) { #endif emf_file = stdout; } else { - if (!(emf_file = fopen(symbol->outfile, "wb"))) { + if (!(emf_file = out_fopen(symbol->outfile, "wb"))) { sprintf(symbol->errtxt, "640: Could not open output file (%d: %.30s)", errno, strerror(errno)); return ZINT_ERROR_FILE_ACCESS; } diff --git a/backend/gif.c b/backend/gif.c index c20096fe..337a60e4 100644 --- a/backend/gif.c +++ b/backend/gif.c @@ -37,6 +37,7 @@ #include #endif #include "common.h" +#include "output.h" /* Limit initial LZW buffer size to this in expectation that compressed data will fit for typical scalings */ #define GIF_LZW_PAGE_SIZE 0x100000 /* Megabyte */ @@ -474,7 +475,7 @@ INTERNAL int gif_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf) #endif gif_file = stdout; } else { - if (!(gif_file = fopen(symbol->outfile, "wb"))) { + if (!(gif_file = out_fopen(symbol->outfile, "wb"))) { sprintf(symbol->errtxt, "611: Could not open output file (%d: %.30s)", errno, strerror(errno)); return ZINT_ERROR_FILE_ACCESS; } diff --git a/backend/gridmtx.c b/backend/gridmtx.c index d5779021..932fe51d 100644 --- a/backend/gridmtx.c +++ b/backend/gridmtx.c @@ -1079,7 +1079,7 @@ INTERNAL int gridmatrix(struct zint_symbol *symbol, struct zint_seg segs[], cons if (symbol->structapp.id[0]) { int id, id_len; - for (id_len = 0; id_len < 32 && symbol->structapp.id[id_len]; id_len++); + for (id_len = 1; id_len < 4 && symbol->structapp.id[id_len]; id_len++); if (id_len > 3) { /* 255 (8 bits) */ strcpy(symbol->errtxt, "538: Structured Append ID too long (3 digit maximum)"); diff --git a/backend/library.c b/backend/library.c index 06e56bf2..2e801ad8 100644 --- a/backend/library.c +++ b/backend/library.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include "common.h" #include "eci.h" @@ -41,12 +42,12 @@ /* It's assumed that int is at least 32 bits, the following will compile-time fail if not * https://stackoverflow.com/a/1980056 */ -typedef char static_assert_int_at_least_32bits[CHAR_BIT != 8 || sizeof(int) < 4 ? -1 : 1]; +typedef char static_assert_int_at_least_32bits[sizeof(int) * CHAR_BIT < 32 ? -1 : 1]; -typedef char static_assert_uint16_is_16bits[sizeof(uint16_t) != 2 ? -1 : 1]; -typedef char static_assert_int32_is_32bits[sizeof(int32_t) != 4 ? -1 : 1]; -typedef char static_assert_uint32_is_32bits[sizeof(uint32_t) != 4 ? -1 : 1]; -typedef char static_assert_uint64_at_least_64bits[sizeof(uint64_t) < 8 ? -1 : 1]; +typedef char static_assert_uint16_is_16bits[sizeof(uint16_t) * CHAR_BIT != 16 ? -1 : 1]; +typedef char static_assert_int32_is_32bits[sizeof(int32_t) * CHAR_BIT != 32 ? -1 : 1]; +typedef char static_assert_uint32_is_32bits[sizeof(uint32_t) * CHAR_BIT != 32 ? -1 : 1]; +typedef char static_assert_uint64_at_least_64bits[sizeof(uint64_t) * CHAR_BIT < 64 ? -1 : 1]; /* Create and initialize a symbol structure */ struct zint_symbol *ZBarcode_Create(void) { @@ -203,8 +204,10 @@ INTERNAL int dpd(struct zint_symbol *symbol, unsigned char source[], int length) INTERNAL int bc412(struct zint_symbol *symbol, unsigned char source[], int length); /* BC412 */ /* Output handlers */ -INTERNAL int plot_raster(struct zint_symbol *symbol, int rotate_angle, int file_type); /* Plot to PNG/BMP/PCX */ -INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_type); /* Plot to EPS/EMF/SVG */ +/* Plot to BMP/GIF/PCX/PNG/TIF */ +INTERNAL int plot_raster(struct zint_symbol *symbol, int rotate_angle, int file_type); +/* Plot to EMF/EPS/SVG */ +INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_type); /* Prefix error message with Error/Warning */ static int error_tag(struct zint_symbol *symbol, int error_number, const char *error_string) { @@ -1047,8 +1050,8 @@ int ZBarcode_Encode_Segs(struct zint_symbol *symbol, const struct zint_seg segs[ } /* Check other symbol fields */ - if ((symbol->scale < 0.01f) || (symbol->scale > 100.0f)) { - return error_tag(symbol, ZINT_ERROR_INVALID_OPTION, "227: Scale out of range (0.01 to 100)"); + if ((symbol->scale < 0.01f) || (symbol->scale > 200.0f)) { + return error_tag(symbol, ZINT_ERROR_INVALID_OPTION, "227: Scale out of range (0.01 to 200)"); } if ((symbol->dot_size < 0.01f) || (symbol->dot_size > 20.0f)) { return error_tag(symbol, ZINT_ERROR_INVALID_OPTION, "221: Dot size out of range (0.01 to 20)"); @@ -1207,6 +1210,33 @@ static int check_output_args(struct zint_symbol *symbol, int rotate_angle) { return 0; } +struct zint_filetypes { const char extension[4]; int is_raster; int filetype; }; +static const struct zint_filetypes filetypes[] = { + { "BMP", 1, OUT_BMP_FILE }, { "EMF", 0, OUT_EMF_FILE }, { "EPS", 0, OUT_EPS_FILE }, + { "GIF", 1, OUT_GIF_FILE }, { "PCX", 1, OUT_PCX_FILE }, { "PNG", 1, OUT_PNG_FILE }, + { "SVG", 0, OUT_SVG_FILE }, { "TIF", 1, OUT_TIF_FILE }, { "TXT", 0, 0 } +}; + +/* Return index of `extension` in `filetypes`, or -1 if not found */ +static int filetype_idx(const char *extension) { + char uc_extension[4] = {0}; + int i; + + if (strlen(extension) != 3) { + return -1; + } + memcpy(uc_extension, extension, 3); + to_upper((unsigned char *) uc_extension, 3); + + for (i = 0; i < ARRAY_SIZE(filetypes); i++) { + if (strcmp(uc_extension, filetypes[i].extension) == 0) { + break; + } + } + + return i == ARRAY_SIZE(filetypes) ? -1 : i; +} + /* Output a previously encoded symbol to file `symbol->outfile` */ int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle) { int error_number; @@ -1218,40 +1248,17 @@ int ZBarcode_Print(struct zint_symbol *symbol, int rotate_angle) { len = (int) strlen(symbol->outfile); if (len > 3) { - char output[4]; - output[0] = symbol->outfile[len - 3]; - output[1] = symbol->outfile[len - 2]; - output[2] = symbol->outfile[len - 1]; - output[3] = '\0'; - to_upper((unsigned char *) output, 3); - - if (!(strcmp(output, "PNG"))) { - error_number = plot_raster(symbol, rotate_angle, OUT_PNG_FILE); - - } else if (!(strcmp(output, "BMP"))) { - error_number = plot_raster(symbol, rotate_angle, OUT_BMP_FILE); - - } else if (!(strcmp(output, "PCX"))) { - error_number = plot_raster(symbol, rotate_angle, OUT_PCX_FILE); - - } else if (!(strcmp(output, "GIF"))) { - error_number = plot_raster(symbol, rotate_angle, OUT_GIF_FILE); - - } else if (!(strcmp(output, "TIF"))) { - error_number = plot_raster(symbol, rotate_angle, OUT_TIF_FILE); - - } else if (!(strcmp(output, "TXT"))) { - error_number = dump_plot(symbol); - - } else if (!(strcmp(output, "EPS"))) { - error_number = plot_vector(symbol, rotate_angle, OUT_EPS_FILE); - - } else if (!(strcmp(output, "SVG"))) { - error_number = plot_vector(symbol, rotate_angle, OUT_SVG_FILE); - - } else if (!(strcmp(output, "EMF"))) { - error_number = plot_vector(symbol, rotate_angle, OUT_EMF_FILE); - + int i = filetype_idx(symbol->outfile + len - 3); + if (i >= 0) { + if (filetypes[i].filetype) { + if (filetypes[i].is_raster) { + error_number = plot_raster(symbol, rotate_angle, filetypes[i].filetype); + } else { + error_number = plot_vector(symbol, rotate_angle, filetypes[i].filetype); + } + } else { + error_number = dump_plot(symbol); + } } else { return error_tag(symbol, ZINT_ERROR_INVALID_OPTION, "225: Unknown output format"); } @@ -1597,7 +1604,7 @@ int ZBarcode_BarcodeName(int symbol_id, char name[32]) { { "BARCODE_MAXICODE", BARCODE_MAXICODE, 57 }, { "BARCODE_QRCODE", BARCODE_QRCODE, 58 }, { "", -1, 59 }, - { "BARCODE_CODE128B", BARCODE_CODE128B, 60 }, + { "BARCODE_CODE128AB", BARCODE_CODE128AB, 60 }, { "", -1, 61 }, { "", -1, 62 }, { "BARCODE_AUSPOST", BARCODE_AUSPOST, 63 }, @@ -1761,7 +1768,7 @@ unsigned int ZBarcode_Cap(int symbol_id, unsigned int cap_flag) { /* Note does not include HIBC versions */ switch (symbol_id) { case BARCODE_CODE128: /* Note does not include GS1_128 or NVE18 */ - case BARCODE_CODE128B: + case BARCODE_CODE128AB: case BARCODE_CODE16K: case BARCODE_CODABLOCKF: case BARCODE_PDF417: @@ -1831,7 +1838,7 @@ unsigned int ZBarcode_Cap(int symbol_id, unsigned int cap_flag) { case BARCODE_C25LOGIC: case BARCODE_C25IND: case BARCODE_CODE128: /* Left to application */ - case BARCODE_CODE128B: + case BARCODE_CODE128AB: case BARCODE_DPLEIT: /* TODO: Find doc */ case BARCODE_DPIDENT: /* TODO: Find doc */ case BARCODE_FLAT: /* TODO: Find doc */ @@ -1856,6 +1863,243 @@ unsigned int ZBarcode_Cap(int symbol_id, unsigned int cap_flag) { return result; } +/* Return default X-dimension in mm for symbology `symbol_id`. Returns 0 on error (invalid `symbol_id`) */ +float ZBarcode_Default_Xdim(int symbol_id) { + float x_dim_mm; + + if (!ZBarcode_ValidID(symbol_id)) { + return 0.0f; + } + switch (symbol_id) { + /* Postal 2/4-track */ + case BARCODE_AUSPOST: + case BARCODE_AUSREPLY: + case BARCODE_AUSROUTE: + case BARCODE_AUSREDIRECT: + /* Australia Post Customer Barcoding Technical Specifications, average of 0.4 to 0.6 mm */ + x_dim_mm = 0.5f; + break; + case BARCODE_CEPNET: + case BARCODE_POSTNET: + case BARCODE_PLANET: + case BARCODE_USPS_IMAIL: + /* USPS-B-3200 Section 2.3.1, height 0.145" (average of 0.125, 0.165) / 6.235 (Zint height), same as + USPS DMM 300 Section 708.4.2.5 using bar pitch (1" / 43) ~ 0.023" */ + x_dim_mm = 0.591f; + break; + case BARCODE_RM4SCC: + case BARCODE_KIX: + case BARCODE_MAILMARK: + /* Royal Mail Mailmark Barcode Definition Document, height 5.1mm / 8 (Zint height) == 0.6375 */ + x_dim_mm = 0.638f; /* Seems better fit to round up to 3 d.p. */ + break; + case BARCODE_JAPANPOST: + x_dim_mm = 0.6f; /* Japan Post Zip/Barcode Manual */ + break; + + /* GS1 (excluding GS1-128, ITF-14, GS1 QRCODE & GS1 DATAMATRIX - see default) */ + case BARCODE_EANX: + case BARCODE_EANX_CHK: + case BARCODE_EANX_CC: + case BARCODE_ISBNX: + case BARCODE_UPCA: + case BARCODE_UPCA_CHK: + case BARCODE_UPCA_CC: + case BARCODE_UPCE: + case BARCODE_UPCE_CHK: + case BARCODE_UPCE_CC: + case BARCODE_DBAR_OMN: + case BARCODE_DBAR_OMN_CC: + case BARCODE_DBAR_LTD: + case BARCODE_DBAR_LTD_CC: + case BARCODE_DBAR_EXP: + case BARCODE_DBAR_EXP_CC: + case BARCODE_DBAR_STK: + case BARCODE_DBAR_STK_CC: + case BARCODE_DBAR_OMNSTK: + case BARCODE_DBAR_OMNSTK_CC: + case BARCODE_DBAR_EXPSTK: + case BARCODE_DBAR_EXPSTK_CC: + x_dim_mm = 0.33f; /* GS1 General Standards 22.0 Section 5.12.3 Table 1 except DBAR_LTD Table 4 */ + break; + + /* Specific */ + case BARCODE_BC412: + x_dim_mm = 0.12f; /* SEMI T1-95 Table 1 */ + break; + case BARCODE_CODABAR: + x_dim_mm = 0.38f; /* EN 798:1996 Appendix D.1 (d), average of 0.33 to 0.43 mm */ + break; + case BARCODE_CODE32: + x_dim_mm = 0.25f; /* Allegato A Caratteristiche tecniche del bollino farmaceutico, 0.25mm */ + break; + case BARCODE_DPD: + x_dim_mm = 0.375f; /* DPD Parcel Label Specification Version 2.4.1 (19.01.2021) Section 4.6.1.2 */ + break; + case BARCODE_FIM: + /* USPS DMM 300 Section 708.9.3, 0.03125" */ + x_dim_mm = 0.79375f; + break; + case BARCODE_LOGMARS: + x_dim_mm = 0.34925f; /* MIL-STD-1189 Rev. B Section 5.2, average of 0.0075" and 0.02" */ + break; + case BARCODE_MAXICODE: + /* ISO/IEC 16023:2000 Table 7, based on L = 25.5mm */ + x_dim_mm = 0.88f; + break; + case BARCODE_PHARMA: + x_dim_mm = 0.5f; /* Laetus Pharmacode Guide Section 1.2, standard 0.5mm */ + break; + case BARCODE_PHARMA_TWO: + x_dim_mm = 1.0f; /* Laetus Pharmacode Guide Section 1.4, standard 1mm */ + break; + case BARCODE_PZN: + x_dim_mm = 0.25f; /* Technical Information regarding PZN, "normal" X 0.25mm */ + break; + case BARCODE_TELEPEN: + case BARCODE_TELEPEN_NUM: + /* Telepen Barcode Symbology information and History, average of between 0.010" and 0.0125" */ + x_dim_mm = 0.28575f; + break; + + /* Stacked (excluding GS1 DataBar) */ + case BARCODE_CODE16K: /* Application-defined */ + case BARCODE_CODE49: /* ANSI/AIM BC6-2000 Appendix D.2.4, C grade if > 0.25mm */ + case BARCODE_CODABLOCKF: /* Application-defined */ + case BARCODE_HIBC_BLOCKF: + case BARCODE_PDF417: /* Maybe 0.27mm following ISO/IEC 15438:2015 Annex S.2.2 example? */ + case BARCODE_PDF417COMP: + case BARCODE_HIBC_PDF: + case BARCODE_MICROPDF417: + case BARCODE_HIBC_MICPDF: + /* Fairly arbitrarily using ISO/IEC 15416:2016 Section 5.3.1 Table 1, aperature diameters 0.125 & 0.250 + (also fits in 0.25 <= X < 0.5 range for aperature 0.2 from ISO/IEC 15415:2011 Annex D Table D.1) */ + x_dim_mm = 0.33f; + break; + + /* Application defined (and hence pretty arbitrary) */ + default: + if (is_fixed_ratio(symbol_id)) { + /* GS1 General Standards 22.0 Section 5.12.3 Table 1 (general retail) */ + x_dim_mm = 0.625f; + } else { + /* GS1 General Standards 22.0 Section 5.12.3.4 GS1-128 Tables 2, 4, 5, 6, 8 */ + x_dim_mm = 0.495f; + } + break; + } + + return x_dim_mm; +} + +/* Return the scale to use for `symbol_id` for non-zero X-dimension `x_dim_mm` at `dpmm` dots per mm for + `filetype`. If `dpmm` zero defaults to 12. If `filetype` NULL/empty, defaults to "GIF". Returns 0 on error */ +float ZBarcode_Scale_From_XdimDp(int symbol_id, float x_dim_mm, float dpmm, const char *filetype) { + int i; + float scale; + + if (!ZBarcode_ValidID(symbol_id)) { + return 0.0f; + } + if (x_dim_mm <= 0.0f || x_dim_mm > 10.0f) { /* 10mm == 0.39" */ + return 0.0f; + } + if (dpmm == 0.0f) { + dpmm = 12.0f; /* ~300 dpi */ + } else if (dpmm < 0.0f || dpmm > 1000.0f) { /* 1000 dpmm == 25400 dpi */ + return 0.0f; + } + if (filetype && *filetype) { + if ((i = filetype_idx(filetype)) < 0 || filetypes[i].filetype == 0) { /* Not found or TXT */ + return 0.0f; + } + } else { + i = filetype_idx("GIF"); /* Default to raster */ + } + + scale = stripf(stripf(x_dim_mm) * stripf(dpmm)); + + if (symbol_id == BARCODE_MAXICODE) { + if (filetypes[i].is_raster) { + scale /= 10.0f; + } else if (filetypes[i].filetype == OUT_EMF_FILE) { + scale /= 40.0f; + } else { + scale /= 2.0f; + } + } else { + if (filetypes[i].is_raster) { + scale = roundf(scale) / 2.0f; /* Half-integer increments */ + } else { + scale /= 2.0f; + } + } + scale = stripf(scale); + + if (scale > 200.0f) { + scale = 200.0f; + } else { + if (filetypes[i].is_raster) { + if (symbol_id == BARCODE_MAXICODE) { + if (scale < 0.2f) { + scale = 0.2f; + } + } else if (scale < 0.5f) { + scale = 0.5f; /* Note if dotty mode needs further bounding to 1.0 */ + } + } else { + if (scale < 0.1f) { + scale = 0.1f; + } + } + } + + return scale; +} + +/* Reverse of `ZBarcode_Scale_From_XdimDp()` above to estimate the X-dimension or dpmm given non-zero `scale` and + non-zero `x_dim_mm_or_dpmm`. Return value bound to dpmm max not X-dimension max. Returns 0 on error */ +float ZBarcode_XdimDp_From_Scale(int symbol_id, float scale, float xdim_mm_or_dpmm, const char *filetype) { + int i; + + if (!ZBarcode_ValidID(symbol_id)) { + return 0.0f; + } + if (scale <= 0.0f || scale > 200.0f) { + return 0.0f; + } + if (xdim_mm_or_dpmm <= 0.0f || xdim_mm_or_dpmm > 1000.0f) { /* 1000 dpmm == 25400 dpi */ + return 0.0f; + } + if (filetype && *filetype) { + if ((i = filetype_idx(filetype)) < 0 || filetypes[i].filetype == 0) { /* Not found or TXT */ + return 0.0f; + } + } else { + i = filetype_idx("GIF"); /* Default to raster */ + } + + if (symbol_id == BARCODE_MAXICODE) { + if (filetypes[i].is_raster) { + scale *= 10.0f; + } else if (filetypes[i].filetype == OUT_EMF_FILE) { + scale *= 40.0f; + } else { + scale *= 2.0f; + } + } else { + scale *= 2.0f; + } + + xdim_mm_or_dpmm = stripf(stripf(scale) / stripf(xdim_mm_or_dpmm)); + + if (xdim_mm_or_dpmm > 1000.0f) { /* Note if X-dimension sought needs to be further bound to <= 10 on return */ + xdim_mm_or_dpmm = 1000.0f; + } + + return xdim_mm_or_dpmm; +} + /* Whether Zint built without PNG support */ int ZBarcode_NoPng(void) { #ifdef ZINT_NO_PNG diff --git a/backend/mailmark.c b/backend/mailmark.c index 03fb8a56..98f9bd1f 100644 --- a/backend/mailmark.c +++ b/backend/mailmark.c @@ -154,13 +154,15 @@ INTERNAL int mailmark(struct zint_symbol *symbol, unsigned char source[], int le ustrcpy(local_source, source); if (length < 22) { + if (length < 14) { + strcpy(symbol->errtxt, "588: Input too short (14 character minimum)"); + return ZINT_ERROR_TOO_LONG; + } for (i = length; i <= 22; i++) { strcat(local_source, " "); } length = 22; - } - - if ((length > 22) && (length < 26)) { + } else if ((length > 22) && (length < 26)) { for (i = length; i <= 26; i++) { strcat(local_source, " "); } diff --git a/backend/medical.c b/backend/medical.c index b35db0d7..8d26dd00 100644 --- a/backend/medical.c +++ b/backend/medical.c @@ -188,7 +188,8 @@ INTERNAL int pharma_two(struct zint_symbol *symbol, unsigned char source[], int if (symbol->output_options & COMPLIANT_HEIGHT) { /* Laetus Pharmacode Guide 1.4 - Two-track height min 8mm / 2mm (X max) = 4, standard 8mm / 1mm = 8, max 12mm / 0.8mm (X min) = 15 */ + Two-track height min 8mm / 2mm (X max) = 4X (2X per row), standard 8mm / 1mm = 8X, + max 12mm / 0.8mm (X min) = 15X */ error_number = set_height(symbol, 2.0f, 8.0f, 15.0f, 0 /*no_errtxt*/); } else { (void) set_height(symbol, 0.0f, 10.0f, 0.0f, 1 /*no_errtxt*/); @@ -270,11 +271,11 @@ INTERNAL int codabar(struct zint_symbol *symbol, unsigned char source[], int len expand(symbol, dest, d - dest); if (symbol->output_options & COMPLIANT_HEIGHT) { - /* BS EN 798:1995 4.4.1 (d) max of 5mm / 0.191mm (X) ~ 26.178 or 15% of width where (taking N = narrow/wide - ratio as 2 and I = X) width = ((2 * N + 5) * C + (N – 1) * (D + 2)) * X + I * (C – 1) + 2Q + /* BS EN 798:1995 4.4.1 (d) max of 5mm / 0.43mm (X max) ~ 11.628 or 15% of width where (taking N = + narrow/wide ratio as 2 and I = X) width = ((2 * N + 5) * C + (N – 1) * (D + 2)) * X + I * (C – 1) + 2Q = ((4 + 5) * C + (D + 2) + C - 1 + 2 * 10) * X = (10 * C + D + 21) * X Length (C) includes start/stop chars */ - const float min_height_min = stripf(5.0f / 0.191f); + const float min_height_min = stripf(5.0f / 0.43f); float min_height = stripf((10.0f * ((add_checksum ? length + 1 : length) + 2.0f) + d_chars + 21.0f) * 0.15f); if (min_height < min_height_min) { min_height = min_height_min; diff --git a/backend/output.c b/backend/output.c index 0506878a..a9601389 100644 --- a/backend/output.c +++ b/backend/output.c @@ -31,8 +31,14 @@ /* SPDX-License-Identifier: BSD-3-Clause */ #include +#include #include -#include +#ifdef _WIN32 +#include +#include +#else +#include /* mkdir(2) */ +#endif #include "common.h" #include "output.h" #include "font.h" @@ -241,7 +247,7 @@ static int out_quiet_zones(const struct zint_symbol *symbol, const int hide_text done = 1; break; case BARCODE_CODE128: - case BARCODE_CODE128B: + case BARCODE_CODE128AB: case BARCODE_HIBC_128: case BARCODE_NVE18: /* ISO/IEC 15417:2007 4.4.2 */ @@ -250,7 +256,7 @@ static int out_quiet_zones(const struct zint_symbol *symbol, const int hide_text break; case BARCODE_DPLEIT: case BARCODE_DPIDENT: - /* Using CODE39 values TODO: Find doc */ + /* Using C25INTER values TODO: Find doc */ *left = *right = 10.0f; done = 1; break; @@ -486,7 +492,7 @@ static int out_quiet_zones(const struct zint_symbol *symbol, const int hide_text #ifdef ZINT_TEST /* Wrapper for direct testing */ INTERNAL int out_quiet_zones_test(const struct zint_symbol *symbol, const int hide_text, float *left, float *right, float *top, float *bottom) { - return out_quiet_zones(symbol, hide_text, left, right, top, bottom); + return out_quiet_zones(symbol, hide_text, left, right, top, bottom); } #endif @@ -742,4 +748,90 @@ INTERNAL void out_upcean_split_text(int upceanflag, unsigned char text[], } } +/* Make a directory; already existing dir okay */ +/* Adapted from https://gist.github.com/JonathonReinhart/8c0d90191c38af2dcadb102c4e202950 and + https://nachtimwald.com/2019/07/10/recursive-create-directory-in-c-revisited/ */ +static int out_maybe_mkdir(const char* path) +{ +#ifdef _WIN32 + DWORD dwAttrib; + + /* Try to make the directory */ + if (CreateDirectory(path, NULL) != 0) { /* Non-zero on success */ + return 0; + } + /* If it fails for any reason but already exists, fail */ + if (GetLastError() != ERROR_ALREADY_EXISTS) { + return -1; + } + /* Check if the existing path is a directory */ + if ((dwAttrib = GetFileAttributes(path)) == (DWORD) -1 || !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) { + return -1; + } +#else + struct stat st; + + /* Try to make the directory */ + if (mkdir(path, 0777) == 0) { + return 0; + } + /* If it fails for any reason but already exists, fail */ + if (errno != EEXIST) { + return -1; + } + /* Check if the existing path is a directory */ + if (stat(path, &st) != 0 || !S_ISDIR(st.st_mode)) { + return -1; + } +#endif + + return 0; +} + +/* Create output file, creating sub-directories if necessary. Returns `fopen()` FILE pointer */ +INTERNAL FILE *out_fopen(const char filename[256], const char *mode) { + FILE *outfile; + + if (!(outfile = fopen(filename, mode))) { + char dirname[256]; + char *d; +#ifdef _WIN32 + char *dirend = strrchr(filename, '\\'); + if (!dirend) { + dirend = strrchr(filename, '/'); + } +#else + char *dirend = strrchr(filename, '/'); +#endif + if (!dirend) { + return outfile; + } + + /* Adapted from https://gist.github.com/JonathonReinhart/8c0d90191c38af2dcadb102c4e202950 */ + /* Remove filename, leaving directories */ + memcpy(dirname, filename, dirend - filename); + dirname[dirend - filename] = '/'; + dirname[dirend - filename + 1] = '\0'; +#if _WIN32 + for (d = dirname; *d; d++) { /* Convert to Unix separators */ + if (*d == '\\') { + *d = '/'; + } + } +#endif + for (d = dirname + 1; *d; d++) { /* Ignore slash at start if any */ + if (*d == '/' && *(d - 1) != '/') { /* Ignore double-slashes */ + *d = '\0'; /* Temporarily truncate */ + if (out_maybe_mkdir(dirname) != 0) { + return NULL; + } + *d = '/'; /* Restore */ + } + } + outfile = fopen(filename, mode); + } + + return outfile; +} + /* vim: set ts=4 sw=4 et : */ diff --git a/backend/output.h b/backend/output.h index ca356ccf..1cf405c5 100644 --- a/backend/output.h +++ b/backend/output.h @@ -37,6 +37,8 @@ extern "C" { #endif /* __cplusplus */ +#include /* For FILE */ + INTERNAL int out_check_colour_options(struct zint_symbol *symbol); INTERNAL void out_set_whitespace_offsets(const struct zint_symbol *symbol, const int hide_text, float *xoffset, float *yoffset, float *roffset, float *boffset, const float scaler, @@ -47,6 +49,7 @@ INTERNAL float out_large_bar_height(struct zint_symbol *symbol, int si, int *row INTERNAL void out_upcean_split_text(int upceanflag, unsigned char text[], unsigned char textpart1[5], unsigned char textpart2[7], unsigned char textpart3[7], unsigned char textpart4[2]); +INTERNAL FILE *out_fopen(const char filename[256], const char *mode); #ifdef __cplusplus } diff --git a/backend/pcx.c b/backend/pcx.c index 3d282b1a..e7b2c1e9 100644 --- a/backend/pcx.c +++ b/backend/pcx.c @@ -31,12 +31,14 @@ /* SPDX-License-Identifier: BSD-3-Clause */ #include +#include #include #ifdef _MSC_VER #include #include #endif #include "common.h" +#include "output.h" #include "pcx.h" /* PCX header structure */ /* ZSoft PCX File Format Technical Reference Manual http://bespin.org/~qz/pc-gpe/pcx.txt */ @@ -68,8 +70,8 @@ INTERNAL int pcx_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf) header.window_ymin = 0; header.window_xmax = symbol->bitmap_width - 1; header.window_ymax = symbol->bitmap_height - 1; - header.horiz_dpi = 300; - header.vert_dpi = 300; + header.horiz_dpi = symbol->dpmm ? (uint16_t) roundf(stripf(symbol->dpmm * 25.4f)) : 300; + header.vert_dpi = header.horiz_dpi; for (i = 0; i < 48; i++) { header.colourmap[i] = 0x00; @@ -98,7 +100,7 @@ INTERNAL int pcx_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf) #endif pcx_file = stdout; } else { - if (!(pcx_file = fopen(symbol->outfile, "wb"))) { + if (!(pcx_file = out_fopen(symbol->outfile, "wb"))) { sprintf(symbol->errtxt, "621: Could not open output file (%d: %.30s)", errno, strerror(errno)); return ZINT_ERROR_FILE_ACCESS; } diff --git a/backend/pdf417.c b/backend/pdf417.c index 13e52cde..15f05f84 100644 --- a/backend/pdf417.c +++ b/backend/pdf417.c @@ -1132,7 +1132,7 @@ static int pdf_initial_segs(struct zint_symbol *symbol, struct zint_seg segs[], if (symbol->structapp.id[0]) { int id_len; - for (id_len = 0; id_len < 32 && symbol->structapp.id[id_len]; id_len++); + for (id_len = 1; id_len < 31 && symbol->structapp.id[id_len]; id_len++); if (id_len > 30) { /* 10 triplets */ strcpy(symbol->errtxt, "742: Structured Append ID too long (30 digit maximum)"); diff --git a/backend/png.c b/backend/png.c index 799bb967..89d7687b 100644 --- a/backend/png.c +++ b/backend/png.c @@ -33,6 +33,7 @@ #ifndef ZINT_NO_PNG #include +#include #include #ifdef _MSC_VER #include @@ -42,6 +43,7 @@ #include #include #include "common.h" +#include "output.h" /* Note if change this need to change "backend/tests/test_png.c" definition also */ struct wpng_error_type { @@ -232,7 +234,7 @@ INTERNAL int png_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf) #endif outfile = stdout; } else { - if (!(outfile = fopen(symbol->outfile, "wb"))) { + if (!(outfile = out_fopen(symbol->outfile, "wb"))) { sprintf(symbol->errtxt, "632: Could not open output file (%d: %.30s)", errno, strerror(errno)); return ZINT_ERROR_FILE_ACCESS; } @@ -279,6 +281,11 @@ INTERNAL int png_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf) png_set_compression_strategy(png_ptr, compression_strategy); } + if (symbol->dpmm) { + int resolution = (int) roundf(stripf(symbol->dpmm * 1000.0f)); /* pixels per metre */ + png_set_pHYs(png_ptr, info_ptr, resolution, resolution, PNG_RESOLUTION_METER); + } + /* set Header block */ png_set_IHDR(png_ptr, info_ptr, symbol->bitmap_width, symbol->bitmap_height, bit_depth, PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE, diff --git a/backend/ps.c b/backend/ps.c index 2cf83e2f..de956259 100644 --- a/backend/ps.c +++ b/backend/ps.c @@ -35,6 +35,7 @@ #include #include #include "common.h" +#include "output.h" static void colour_to_pscolor(int option, int colour, char *output) { *output = '\0'; @@ -174,7 +175,7 @@ INTERNAL int ps_plot(struct zint_symbol *symbol) { if (output_to_stdout) { feps = stdout; } else { - if (!(feps = fopen(symbol->outfile, "w"))) { + if (!(feps = out_fopen(symbol->outfile, "w"))) { sprintf(symbol->errtxt, "645: Could not open output file (%d: %.30s)", errno, strerror(errno)); return ZINT_ERROR_FILE_ACCESS; } diff --git a/backend/qr.c b/backend/qr.c index bf9e569c..e4525cbd 100644 --- a/backend/qr.c +++ b/backend/qr.c @@ -1620,9 +1620,9 @@ INTERNAL int qrcode(struct zint_symbol *symbol, struct zint_seg segs[], const in if (symbol->structapp.id[0]) { int id, id_len; - for (id_len = 0; id_len < 32 && symbol->structapp.id[id_len]; id_len++); + for (id_len = 1; id_len < 4 && symbol->structapp.id[id_len]; id_len++); - if (id_len > 3) { /* 255 */ + if (id_len > 3) { /* Max value 255 */ strcpy(symbol->errtxt, "752: Structured Append ID too long (3 digit maximum)"); return ZINT_ERROR_INVALID_OPTION; } diff --git a/backend/raster.c b/backend/raster.c index ac893a21..d56ecee7 100644 --- a/backend/raster.c +++ b/backend/raster.c @@ -688,7 +688,8 @@ static void draw_bind_box(const struct zint_symbol *symbol, unsigned char *pixel const int width_si = symbol->width * si; draw_bar(pixelbuf, xoffset_si, width_si, ybind_top, bwidth_si, image_width, image_height, DEFAULT_INK); if (!(symbol->output_options & BARCODE_BIND_TOP)) { /* Trumps BARCODE_BOX & BARCODE_BIND */ - draw_bar(pixelbuf, xoffset_si, width_si, ybind_bot, bwidth_si, image_width, image_height, DEFAULT_INK); + draw_bar(pixelbuf, xoffset_si, width_si, ybind_bot, bwidth_si, image_width, image_height, + DEFAULT_INK); } } if (symbol->output_options & BARCODE_BOX) { diff --git a/backend/svg.c b/backend/svg.c index 76c94d13..41171814 100644 --- a/backend/svg.c +++ b/backend/svg.c @@ -36,6 +36,7 @@ #include #include "common.h" +#include "output.h" static void pick_colour(int colour, char colour_code[]) { switch (colour) { @@ -183,7 +184,7 @@ INTERNAL int svg_plot(struct zint_symbol *symbol) { if (symbol->output_options & BARCODE_STDOUT) { fsvg = stdout; } else { - if (!(fsvg = fopen(symbol->outfile, "w"))) { + if (!(fsvg = out_fopen(symbol->outfile, "w"))) { sprintf(symbol->errtxt, "680: Could not open output file (%d: %.30s)", errno, strerror(errno)); return ZINT_ERROR_FILE_ACCESS; } diff --git a/backend/tests/README b/backend/tests/README index 126a33bf..51f62812 100644 --- a/backend/tests/README +++ b/backend/tests/README @@ -62,21 +62,25 @@ To run a single dataset item in a single test function, use '-i ': backend/tests/test_dotcode -f input -i 2 -To run a range of dataset items in a single test function, use '-i ,': +To run a range of dataset items in a single test function, use '-i -': - backend/tests/test_dotcode -f input -i 2,5 + backend/tests/test_dotcode -f input -i 2-5 To exclude a single dataset item in a single test function, use '-x ': backend/tests/test_dotcode -f input -x 4 -This can also take a range, '-x ,': +This can also take a range, '-x -': backend/tests/test_dotcode -f input -x 4,6 +Exclude can be used multiple times (unlike '-i'): + + backend/tests/test_dotcode -f input -x 4 -x 6-8 + The include and exclude options can be used together: - backend/tests/test_dotcode -f input -i 2,7 -x 4 + backend/tests/test_dotcode -f input -i 2-7 -x 4 -x 6 To show debug info (if any), use '-d ': diff --git a/backend/tests/data/emf/code128_egrave_bold.emf b/backend/tests/data/emf/code128_egrave_bold.emf index d27b93092a7f4cb0a99152d8ba63fb383a4f4fe8..b6eb375984d8eeeae9e61151da570a0bd8909afa 100644 GIT binary patch delta 168 zcmaFB`G8Z6k%56B2Z&+dK9Erc;{fU9q6`cT+!NK5EFS=Q#Iit)3?|%QVBjrg zU=Rcf@&GZ&RCOSh0AhxTjpC9Z0T^HdGSq-r28fv^Zj@$Zo_IE$kzsNqqx|F$Mgc~~ U$&QS|n=2R}FflSuj$~;E02k5~F8}}l delta 157 zcmaFB`G8Z6k%56B2Z&+d0gzD+;{a&~DF%j5yc5-w_+BtGFo3WQP>T-ZWJX3YQ9+;r z9v}u8q7K9oAoj#YaY-g10|wZD3^gE@0b=fn8>Ja}CZ0{_1!++QVvu(3$&QT5lN}gE QHdin{U}EH%9LdrS0F}TK%>V!Z diff --git a/backend/tests/data/emf/code128_egrave_bold_100dpi.emf b/backend/tests/data/emf/code128_egrave_bold_100dpi.emf new file mode 100644 index 0000000000000000000000000000000000000000..c52622dba179d537c1e47cbf779c6dd4367578fa GIT binary patch literal 1248 zcma*n%PWLY7zXfXT*ktsl*=eYa*0?;7BW(1F`12sohC8HeTpSQB&IACgF|NMZNxK2tyLw>15@?%NXA5ouc_@U)K86{sh=Ca zP`@;OrG9PvM*Y_KgZiWKC-rCJuj+5c-_<{if2zy>hU|~~=H>gAGvUrlgZ5k5PBU|i pE1vy)6^?2q3}nLc-nN(^w8~4cjeUSy!UzUd;5Oxyf+~L%e2#QEwEDUX24Aou$KVZM{{F92(MK@ zAD0<_G{War`COVb^=Ab*F9VSR&_G^Chv;s)g?6e`Du{C8xa@Hf-bE+rFfFg=uTOHm zKu72c+Sjc-5NN-ES*)OdUOJBrEMm^B{VO}UOWt4P#!|kA_P@pT!tIfFwR@z8Cv2kQ zW1Nd-XrCYa(%`#%9?}N1Fn!*y{Lt`AlBq=8~&*L!|?>kKN-8osT(Yr5!$HT+chr{VEfP^W|G*O^y-X85!6FT)e@pw1A}uTxTfXZVZqZ^P?& z??v*zA$2-AmOCOpuiOcDUz&B?#+;(3X(!(OUj;|2lmSW^`Q1ioX=m1L)O7o0dXIT5 QVGZjjqMq|c-6J96AML1LLjV8( literal 0 HcmV?d00001 diff --git a/backend/tests/data/emf/code128_egrave_bold_150dpi.emf b/backend/tests/data/emf/code128_egrave_bold_150dpi.emf new file mode 100644 index 0000000000000000000000000000000000000000..a48f29bb66e12744c07a81248785345cc64212cb GIT binary patch literal 1248 zcma*n&nv@m7zgn8Y?iVVp%vC7b`VhxD=`kn0Ywf{isZ*6KQAQ#T1$CY>+)5w%D<&5|E zB-bm9pQ&ZMbuT9rYcGR&tRsUCW)W$mu;h;YYiwngT)&i?%g?tn-g|M+!u80t+8()w zLyuQ*F2zS(;_}R-9#`e=`28{%ZVP{loaD`j_!< z^DzjN-Lb3e{_09F}WM*(2UvpwLd3P_g%4FmB( zz{6)D(8*yod3DV5rg>hJTAw!pT)Y7xAE=<0G3N3uOo*|S$z%{@$GWqGtT%J4j^WRs zh;hfq*k5J}m{!KEJ99#=_I%7?4L&-U1#BRJMLYJdHo{qE{if`(xqLh0-iv(}c8*!A zp2J6qCJtCP&&E^@<9cIObNA(XuQ*>y-uz+ldF2W59px$UL*-}Um&&ijZq`{-fNJ7hBBMz2C5SoANI4ZsmRAL(1dg#^Uw*^6dR*!@y1 x$6>Y;%p_xrdp}#bOQm8!DrVl>C==u)`%UZlrvHQ`tY95UY@?k0N;^r8{{T6=QbPa$ literal 0 HcmV?d00001 diff --git a/backend/tests/data/emf/code128_egrave_bold_400dpi.emf b/backend/tests/data/emf/code128_egrave_bold_400dpi.emf new file mode 100644 index 0000000000000000000000000000000000000000..cf242c45114494a3dec47fc532d3d00ca6fea47a GIT binary patch literal 1248 zcma*nODjcD6bJDCxfkUT$?Gc5fp=uYP${Aq5Mn?XaNV1{?#MtckqIBch)ghJ#6+1$ zA|{f7uRta;xc=)}yS6p5YPI(M?R`#rpL6yJ0L(L8#KORR;CjGm39yk1)btGY0s-DK zfHn@Z{E0ZPd*F4Q)XG02!0j^-NdSfPJf_^fff-@CNTpK9V#m3+gtXUltb!S0W-|Tp zVfN>kTmm|neq720zpX?#q5%J`c4p7DM4L*pmvXT~qpuZ=&ce;5zx_mjiw@2gzB)_9Y8pYd_^sPRSh zb>lngN5)Up&yC-yzZ(Bk|27_$!@?+H_4n1R-fg^JeaQHPy8JifKJJ?rmNVhbOR2W2 xSVx%SOcy-+>G)l0vI|Id$$PtE%0FSiP1Ne^$zae#C@4+BF3_e3=%r3N6c9EcTwSQdzp!GUT92HxU{ zS!Rq36Bmk0f((TLHXuU{h-HA7Y2rm`M&^lc(-|2iS2D^^E@2d4WSpGHD7<+FV*nE) J^W>Mz?Eo#z6_o%0 delta 140 zcmeys@qt5)k%56B2Z&*y0mvwaaX>Ub1H&iYiE2uGFPIq^Kv)N;MTc>+BBR*E91}*y zi3`OgnUFNF0oiImECa;c6E8|L@=Sc2&I__e6^MC2qLULDl_w`Kifo?27{J8HGx;TR FI{+5o6yE>< diff --git a/backend/tests/data/emf/code39_rotate_270.emf b/backend/tests/data/emf/code39_rotate_270.emf index 7e416a7e9863647a2ce736080c6c7e8aea3c9f42..1600f02ff8ed8bc5825398a1e43657a490a84369 100644 GIT binary patch delta 162 zcmeys@qt5)k%56B2Z&*y49KX5ae#CKHv>aF&qOsPrE(Ath-HCT0f>! OgE4@Kk$Lh<=5_$}$`!Q$ delta 146 zcmeys@qt5)k%56B2Z&*y9LQ*Zae(wEULe6gQB8^O1v3K!2*6OsltAX^QHWq_D_;zemjo{4YMc|q2w0x=IrbaEo2Fe})i$)Sw$n`bZvFfsB> Ie#zVp0E?d$%K!iX diff --git a/backend/tests/data/emf/code39_rotate_90.emf b/backend/tests/data/emf/code39_rotate_90.emf index 6e3bcf0378605cc561445c6e1e22ddc2038c56d9..c4edf19905507f940abb74a8780e2de1b1ab7803 100644 GIT binary patch delta 162 zcmeys@qt5)k%56B2Z&*y49KX5ae#CKHv>aF&qOsPrE(Ath-HCT0f>! OgE4@Kk$Lh<=5_$}$`!Q$ delta 146 zcmeys@qt5)k%56B2Z&*y9LQ*Zae(wEULe6gQB8^O1v3K!2*6OsltAX^QHWq_D_;zemjo{4YMc|q2w0x=IrbaEo2Fe})i$)Sw$n`bZvFfsB> Ie#zVp0E?d$%K!iX diff --git a/backend/tests/data/emf/code39_rotate_90_300dpi.emf b/backend/tests/data/emf/code39_rotate_90_300dpi.emf new file mode 100644 index 0000000000000000000000000000000000000000..2aaf81397678769ef5f43ad49d48a5565683a06d GIT binary patch literal 1136 zcmaizJ1<006ouD#Ok*M;!W2v<@g5-_(P$7c8VVvYiAN%0f(T-SL=;1z7L`V&=LaaL zR4P9}rB|uPS~L5^o!wZ;x@X_-?0a&~zWc-g?9)N3G2oOAx@-XQ2_QYYkOg8msss8t z$)QSX{N{}AAWc`z0LcOnzW|!ZxfE9cI_WfBQE?I|zEtAJ8I8SkvI5G_QmKS^glml; z@gBOJuA%Gc==>7jcj#KWkB;i*FY&5?O&p+rL3$g<*hM~?`fuFL44qF3vGy}SN6(@< zsa_#RTkttLLl-9kSM8)WI?7dVN#~04p)v&~9G^0tb$s6VisS3Xw;Vq-e&YDK@uK6` z#%~?JGk)**gYhTFpN+pd{$~8$@ekvlj(-{dcKpY9jJ1!}GohbEH9MX(o^o8@N*Tw8 zjgLD%ZG6u01>-r#H;nH&eq>yCSbGRPrruW%hW>1|IK^?9&e1`-aQlN+#5DO!z05LaRVPMGg zW?&EmvUz|QWU4w4O8_y$#71#RkN^y@0U2sQECa+$6E{jTGEY34&I^)N1!9nPrpb-7FK=G9%OG QRK{o)MxMe*gdg diff --git a/backend/tests/data/emf/ean13_5addon_ggs_5.2.2.5.2-2.emf b/backend/tests/data/emf/ean13_5addon_ggs_5.2.2.5.2-2.emf index ca4d94ae92513f577d8bba642b6b5e7c4eb3225b..dd1d681c6722d32b291dfb797cdeba37dfa662eb 100644 GIT binary patch delta 173 zcmcb@cZE-lk%56B2Z&+76DUvu;{a(FQ3i%C_K9jrmR>-aQlN+#5DO!z05LaRVPMGg zW?&EmvUz|QWU4w4O8_y$#71#RkN^y@0U2sQECa+$6E{jTGEY34&I^)N1!9nPrpb-7FK=G9%OG QRK{o)MxMe*gdg diff --git a/backend/tests/data/emf/itf14_bold.emf b/backend/tests/data/emf/itf14_bold.emf index 5bf28f86247c24244470d7fdb5ca26ef67ef91af..a505b69e6be18b667a6ec9cda1281205317d1f9f 100644 GIT binary patch delta 172 zcmbQhGl55qk%56B2Z&+76DZIH;{fUB@(c|5yc5-wEWLm--9V8bAXY+B0b+97GcqK% zF)#=M**riDGF2UjC4iV=VxzbuNB{=dfDAPtmH}d>i5sOEnJ1o2=LN~C0x?KC(_}|R TWk$x$sf@xbjLefOS*HU49jp-8 delta 155 zcmbQhGl55qk%56B2Z&+73n$`k$@W}D^yPtdR{hjxCznhrZ05ZhOBWCr7 z!pLm1)@-oC?DXY)hgo8kWo8#KeYjYX-o3)Q2CTb|(HWVm%Oy5AX?6@=j!cks$dkwr zg+jrw^`3i82=}wd8e|Ew6dBL^Gw&h2?Q6(5mVLo)JRP<^dtk%XfV^WvcHi!XxdUCZ zsPg_j!o6>Q0U3Xm@Lhx&?={rC$Gv}lOUP$f9DJ4jRs08iQ+%7AVDosNa*TcdM)4l{ zi1;-9jran6S^P8ooA^(92|iQYPZneEr&GM2J}T~Oy?#o3hW=K3k-j1RmtKt@McmIN zjD7zu@f-9$@d5f{@#pk;@iqEy@k+cf{@fZ|<9^Q3Tf}qpE8;ilPsC^GAH{#s|A_C< zPvK>X`#F!X_t`3bi+)@DA$?4IlKxKo3w=xcA3cMYJ?^I+WA7&~{)j#<{(}Bme2)G} ze4YMX9FI)H&qIHHcuyU@Klcx~#_n~VasOAj-s|17nD;XTKacdx2PW=a|IimKpus3r(XOQ>RlT5`D?OfYq7R;?eXF=^ZWn7<$%8c literal 0 HcmV?d00001 diff --git a/backend/tests/data/emf/maxicode_#185.emf b/backend/tests/data/emf/maxicode_#185.emf index 000f125471e66cb633dc125234345d4b01d308d3..cdf3165ac4a00155cf9870316134ad9116986277 100644 GIT binary patch delta 190 zcmdmRiE+avMm0tT28J9UhJp1g3=B;`3=q^Ol%aF1POq^g9i^7*nqSe5X%5D)5ML^yg-^k6^KDPnI_&; kW@Oy>w>X`VVRB)H^5h*EJd+n>NC0^|p}ZGh9%H6H0C$Zb4gdfE delta 182 zcmdmRiE+avMpi}!28Nu84~6-FG#D)CVPJ@ApQxr}`GT2&0fcpcYCsqp5CjVH05M2f z9f&1B?1_!yl1xAb2t0W3fPoE2s{yeL5OYu5D9sB}tqQ~-o!k>|Dl;-|{9Bwp`A!DU ZeXm{Rbp-H>ZE#|lSWu{Aihxqb)WLPwMN`4O4+1UcWfGwe`OzwzjSbvo{s{ z)@`Yuruuqw>&>mJGL)zB`qQ8O^gVwl{f(&|sVh_6r``HlO0HLXy4zFhHToW_k+C!N zL`tSte%$YS?`8M&I6p7s!F%zTp?$OHy!NH+WO;vj94+MS`)+ox)hs%%>r&0Sc6yvF zC=2h^>|U!`*Z+CFbs*TR{nO)QL0Nb&9y45jMxV3SO{r%2eDpY4$cy*lF~c?MU}mqw zsb=}S^*CC{i}&I&L;L=WkEQoIo@&%-}Bw2&9?#bbtR*2TMM zHS59YakP*ZPs?M5YnIR1{!FS_Z%mJ)g}iuL9y46C-py?PUaDDVr^nGkUOX+28LnCU zKTdh(f0ClvJ3a2|6r{t`>Ra~xeR+tkATF8s1t0c zVm*!)^5SWE%y7-}Iotb;nzfl8M+Z2wiNSFs^@Yu2~Z z<7go-o|eZ9*Q^~g?+&^bJwsPck8?jl|L(){@|dB0-BysJEq6cLS8&A zj~T96o-uphJDTPB)8l9%FP@gi4A-pZGTXnHYSs(W<7go-o|eZ9?fW^tl-~a3RI_~N z(Bo(!FP@gi4A(5rzWte0v)-5rNrO6^MBlJabOX7#w62VDnG>t*(`@6UK=di%Rlx1?mb&-FN3$cv}tF~c?M?#%Z0 zrfx~ex@USEE#$@1@|fY8^-N~_=To<&Wclu`$I(JwJS~qIu30BC+n-F`l9J^+haN`@ zdGWM7X1HcKH_UcFOUZJ!=y88D_}4)^Esq)6?@T?Bx;15gDAlZk)8l9%FP@gi4A(5b zPy72*&AM-T94+L<)AE?%n)OI#duLIz9-SUX3wiOhJZ89NJ(t=3#Zx$9dGWM7 zX1HcKH|)=(n&oWK<7go-o|eZ9*R1z5+y61utPiHg(L!E4Esq(lSs!M$Kc8yWN7LhI zAupbm#|+mjI(uhSvz$|U94+L<(>A-;+8NIMHF_K^#@xC$5YL6F6eQzkQYzOV}@&% z=hgnLRI|=ZkE4aWcv>DaT(jQJY=1V@taqlz(L!E4Esq(lS+~u6d+?5wdsU_$cVzJA zK|C*y8QS-r(AytPH47@7J>=Jr%b9KOOmCKRU5}%Mym(q3GhDMC$ZWq!HS59Y zakP*ZPs?M5Yu0O-?N6neb#i(fE#$@1@|fY8^=4*!pHZ`XK6)H2Ku=!!_&E%=VwBnssq{94+L<)AE?%nw4?u?^3%`f1m1EsK>bU2SogPOEdGWojx!3CZa-P{c@0#Vz z)8k}8UOX+28Lsckd1mjtYnC%lkE4aWcv>DaT(dkE_U`Fsd1mxDTF8s1sV&{ zM^nx6T}Y3kg}iuL9y46Cp3H3jbgEhYy{O00LS8&Aj~T96z6;wwpK8{#)8l9%FP@gi z4A-pJGuxj|HS5&$I9kYyr{yujHS3Mc_HU({b!K`TE#$@1@|dB0@2|`0?Y~Mj>&xkJ zw2&81%VUQ2&H6gM{dcKmeLFpl7V_e0dCYLlx_ahog1=08wmlnq+&>K773?#^V}|y9 zU)QFWy+73~&z~Mg3wiOhJZ89N(b;=G_`Rv_y@eP8}A*?ZQSb>H+jTF8s14f5g}iuL9y46CE@ig=BGs(R)8l9%FP@gi4A(5rtNk~rW_gzNI9kYyr{yuj zHEUmH_lf7jedNCPZ0K?SI4B!W%VUQ2{e4}Z-u^(US^KBQ(L!E4Esq(lSvO?1_jjvV zouhHG4^qu~e|j7(U zu&j4do0P1#r^nGkUOX+28LnCHX10GXwMof3J3WpT^5SWE%y7+mKePQGQ=62m52nY_ zLS8&Aj~Uwc_vH+-cSdbevYbzd51ve=?t=H!J z|NZm6@9S_l`#Vz2Ix;;@7Tl!pv^<+Z`(~X;Z+|k?EPr40I9j+#;c0m`gZ4X9Po#Vw zvp=0`)~V@nv~ZKc)ADQv*Q^WS>^&#V@~r4_v~ZKc)ADQv*DUw0`Nq^^DZhL7w;uOT zgAWJsv^-{Lzcb}$yftNiDAlZk)8l9%FP@gi4A-pNGTYytYS!WDakP*ZPs?M5_B&JF z*O8RHzg5k059o2Ukhk{;j~T96o+(+Lxn_Cp^f+3`i>Ku=!!_&6%=Z4CHtVbDakP*Z zPs?M5YgWeZ|Gl#-cs%8E+%Y}Q?*Y0F{?U||*~@DawD0@+I=%gOsb+mU zJ&qRg;%RxzaLxMB%zJ}Rr`%sYA3e^$i{X>0er`NwXy5mBb$Z#?q?+X((Bo(!Z|@Nv zGhDNLHnPs7n)Sx?I9kYyr{yujHS5F7_UBX0`e=F_E#$@1@|fY8bt$v`7pZ3X-1InF z$cv}tF~c?M=FGoI9ZWr!^1Jt4QjdFfP&S^H#|-WJyFZ-X{*F|$j!ciEg}iuL9y46C z?#yiOyMMEePLHF7ym(q3GhDM?&uo7>)hwTn9!Cp#@w7Z^WgJAJS~qI+V`IDOxa(PYSzB#akP*ZPs?M5Yu5hE_P#qb>%jClTF8s12X1Hd(nc3cV_-4I5J&qRg z;%RxzaLsx*v;BLiW}TfLM+2b7hJB6p^*&bZ8J`87nKGiJWLG(CUxShh&@@x;TS)snaPj&@;#(u^f z)8o7s_-YD&BIRZFvfr8VGww;*d*+(8cX}Kx=qX zJ&qRg;%RxzaLuB#_iu`3-8?;x7V_eIU30J1_jT*+4+WcbaC)39$cvZ7V}|Sdx-GN) z?WtxRo*qXFdGWM7W@z8{=JrpM7jUOX+28Ln9mWww7f)vROF<7go-o|eZ9 z*R01g+xvH5vyM-XqlLV9S{^gB@6Y&Bdi$4C&GIbkakP-P&pMA8u36ieWx0==^~&@( zTF8s1-A*Dk{TF8s12b7>7f;J$hHKV^ z%=Vw9n)S)_I9kYyr{yujHS1z#`^%|jdH(b`TF8s1do8`RJ z<7gpo&ru#TT(e%vEX((gW;v7fI9kZtGn>Z@*R1W#vR+L!>y_zow2&81yPYz_HOm=p z@BD4n$?0*lkQYzOV}@%MoxSfe&2k3lakP*Z-|L!tt$vPniluSNi__z1dj{cY zd1S#g>qKUIXF#(&|9TuPv6P@7f;J$hHKWj%=RCrn&p|* z<7go-o|eZ9*DTMz{b#9WIT!ReTF8s1tbemXF#)jXVc?oAupbm#|+o39W(C^ zewcDjTsb}N4=MO>DLgNa8QS;$`cZoOy{Tq7OY}He$lEi9#|+mj=ZGw4K(m}NdK@j} z#nbYb;hIHf?>k zlLckrW$~Ed`ZFHMZ0~Gp)*aL1Xdy42md6a&EIRvpQq6Mq>2b7>w`XIsd#(PA4@D#E z;Z(DZO^=fWW#MUg%y4~QFJ-oWIn}J+PLHF7ym(q3GhDN_GuywKYSt^$<7go-o_0HB zhHI8{#QsdGS-yklakP*ZPs?M5YnEr&{*S3@zM39K3wiOhJZ89N-H_SuUp0#Fq&h$9iKA-qr zS5~jp_jUK|?+rG~^QXtjg1mTHJZ8AQulq9FKbUIP{nO)UAupbm#|+mjI{Ra(W^Ja& z(L&x$ik8O=*R01f+aFIg>+$Jvw2&81%VUOX)-##ypHDUG+39h#kQYzOV}@(iiOlvV zQ_Xs9dK@j}#nbYb;hN>yw|^_uEa!qAM+DaT(hpu zY=2FvS^K8P(L!E4Esq(lS+{1kKa^_L!Rc|dkQYzOV}|zq8E;E(e|xG~ho{HULS8&A zj~T96M>E?yo0@gk^f+3`i>Ku=!!?V}-r3YF=aL>r3we89HM`g9&-g$zvNow^Jvcp1 z7L*v8;i}Y* z>2c0_=sI}6GcU83eV@lY>FxKWnzeU&94+L<)AE?%nnh=SU8-5vPLHF7y!c+%+-voH zT|fH+!Dj8B9w!U(;$`ue;rhOA$ZUU8s#!NqkE4aWcv>DaT(b^lws-zE>(KN#TF8s1 z(0#f&fjJ^d-XV4$cv}tF~c?M?#%Z0rkZun^f+3`i>Ku=!!_%^%=Qnan&o`g z<7go-o|eZ9*DN}F=Wnw%)8l9%?-_XMTF8s1 zZ(7st$&wNera_XwozUgt7 zQt&@hcwQbev~QL($^NfX&ANGd94+L<)AE?%nssYt`$MT_IhXV}TFBe;ipLDstRtCa z9Zfasj_Gl!HlDd?#(zvFUNNkQYzOV}@(ivi^mMt_qCnb{?$~o zUYQ<83wiOh+bJ_#vrc8UKa*opKiLogVjP3d+IL@|dB0v#w8Xe<0PY{nO)UAupbm#|+mj-|g&g zN;S)QsmIYmUOX+28LnBLefwjnW^Ja&(L&x$ik8O=*DN~wM^nvuWO^Je8=3Z-O z`X^G4&Hi|>S&vVTlLdM4vUtpJeP2&zwtqU+tf!{O(L!E4Esq(lSubR^cLp@;#p!Xh zJvZ>QJhI@LMQ85}Xx8@hI9kZNo$7VXy;gr;Z_NI!V6)ClkCO#?@v?Z#aD88%S9{M! zvpmas94+L<)Arei_CHVkGr#E`{~zI~XcPbd literal 0 HcmV?d00001 diff --git a/backend/tests/data/emf/maxicode_#185_600dpi.emf b/backend/tests/data/emf/maxicode_#185_600dpi.emf new file mode 100644 index 0000000000000000000000000000000000000000..a5b330fff1adc4d510e786cc56c51dc6220444ba GIT binary patch literal 26928 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 K-y^4gss9HLSE*_M literal 0 HcmV?d00001 diff --git a/backend/tests/data/emf/maxicode_rotate_90_nobg.emf b/backend/tests/data/emf/maxicode_rotate_90_nobg.emf index b2ba16e9abfce944318c81d6117dc1ae6a2d4ed7..24281c11f34a4a31007079436666520b15debd5e 100644 GIT binary patch delta 185 zcmdmSiE+mzMm0tT28J9UhJhv)28Q)O3|p`s6toJd;~8Bp8_{&&^N< O^Ui>IPoX@KOcekjxgGZa diff --git a/backend/tests/data/emf/maxicode_rotate_90_nobg_300dpi.emf b/backend/tests/data/emf/maxicode_rotate_90_nobg_300dpi.emf new file mode 100644 index 0000000000000000000000000000000000000000..0638fa069b981e139c35c378dce247fcc6319808 GIT binary patch literal 26936 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 literal 0 HcmV?d00001 diff --git a/backend/tests/data/emf/telenum_fg_bg.emf b/backend/tests/data/emf/telenum_fg_bg.emf index 10d2991b2991cfc93931b2636fdcb7d5cdf46b3a..d3b113ccd1574f00d6c833a47a2569655d71f3cd 100644 GIT binary patch delta 168 zcmeyu`Gr%Bk%56B2Z&){Kaf!d;{fSxTnr40*(RzfSsnoL%7IuKhy{Td8E9lPFl0GF z#Cd=cAXC+WSOTPIVxzbuNB{&xsxC0F0ckZLmH}d>i5sOEnJ1o2XJnWh$tXWLgi(Nz Uak3+$@a77}A54tQlM7jz0T_D~@&Et; delta 157 zcmeyu`Gr%Bk%56B2Z&+d0FY4*;{fRfF$RWDyc5-w_+BtGFo3WQP>T-ZWJX3YQ9+;r z9v}u8q7K9oAoj#YaY-g10|Z2>E-Ja}CZ0{_1!++QVvu(3$&QT5 UlN}gEHdiqIU}EH%T*%T400)T`n*aa+ diff --git a/backend/tests/data/emf/telenum_fg_bg_150dpi.emf b/backend/tests/data/emf/telenum_fg_bg_150dpi.emf new file mode 100644 index 0000000000000000000000000000000000000000..0ba548b87fb98d2cec2551bd93210725b83b06a7 GIT binary patch literal 1268 zcmaje-795L7zXg?_)5NpI;2QblaHE&LvCD{QBE#snn~P9WR85LoO7Wh9V9m{#-t;W zaPQW?Vg8u8oZ@-5cbVnA@z&E`=eOVXS!=JoQUErXP`4cX3_o~%r~&S)fRE!-Ss;bK z6+j=Imp66CUpc0YX?k-9=vfCI$6maS_fkwZ(;D^tEA@ka^XlqRrFZ@$-o z;Xa4>!K^UlOf3`Fum6n)1uS9{1@tmG)VLuqp@m+iG4OvV9xox`GWIB^Cjmw^EKz; zjBPp3TmQE6UGqKXMe}{AfhAFYQ;_34qTsoqC)4{X3fKt88HKp4ccZ3DgGx|Nk?v0a-9f)`=U%CD{>jD3Tl#ABszILM1^IvQDnaf{fyf+>ERDl@e8t%!xjN+3U7p35?8}e=>G6GO})N pWiDo9WZ(Rga$IJdoWaPmIe<%t5dix5D`5Zt diff --git a/backend/tests/data/emf/ultracode_fg_bg_box2_600dpi.emf b/backend/tests/data/emf/ultracode_fg_bg_box2_600dpi.emf new file mode 100644 index 0000000000000000000000000000000000000000..281097c9d796bc11dfea845f1511fb8e673e6f0d GIT binary patch literal 2940 zcmZA2J8o1_5QO1lWFF=vArUwLi2!gwh=70;BN3335t1N6B8TjN9k2s706Sm@?0^-J z4E@2BDBml!=k$NO>-1wrK3HqLAItONV6CTPdEQ=J>;Bli)7LN8I#_4d);gP)*AuY+ zJe{0pV>idYv3d9H$yy&CuXSsl`j|U0n&BA3n!69D-&~#i)D)fM%VXi@!v8hq9IhU|JiUY`&b`gu zo1VpF7l)OrUb~>#yKrV|X1PlZxS2FhzWSOc&OJTz`0{8*U*F>BGg zyuO=baWeB5lCt3Ns09noMtbHDBMs24NWi*vY|aN5o3<20L#qoKZ@ZFV5O zxm>=So~<+P{^rruXY=UluX*z2Ij67eQeN}qn{9LXJ>Tev@s9N_^u^cLb{Dw3=E=vJ zt4F+gnyZ`dy>se`FWx!7ugeu+I=@qoH_Q6=!?@w zbM@oyZBCyrk7nvrV}Jj`#o$bD;qK$Rhi15VzIbTKb&CL+kQ*-z7)zdr0`ReJN;(YPFQ=BipcZc)EZ|BK3XEV?5>uApDT@Itk!p#*o zo7TkaLadm?Cl)t@@c43iCSn-Y+&u7nr=z29T%R4UHe7$r)x&px&m5=V_LChuY7Fw_Hz2qVdYm`^q`Fl2f& zFaQ-Y@BlH$M0FsR0AhxTjpC9Z0T^HdGSq-r28fv^Zj@$Zo_IE$l?BKXnRqdpQx(Vn knZYpmAfx!?EsPS3jGNCgHZwCaPYz@~&&aY_kxiKq04~QD&j0`b delta 167 zcmX@YcZ83Xk%56BXYxiyVLl)O3?dX57`E|FR8!)6!OXw_!a6`jI*gMU8O1~efl7FQ z7^F=dh$TSmiH+itOh5(=V_LChuY7Fq8v|2qVdYm@~>47&5&X z7zBZA9v}vps1C#uK+G_)QCt!v00V45h8hsd05Q|Vjna(F6VIlzvH*D^6E8+{ssb4x jGZ-cxWE7vgg;9c$ar0S5Zze|O$&xJR8CfR3WH}80BuN;Y delta 166 zcmdnOy@i{Vk%56BXYxiyVLl)O3?_&&Fl^(UsHVjCf|-Ekq}4sCj8<-i&&KZ<~>LZD@GZVHGYoe%Vqv-qJjTZeQr zUHPL2C_4d?Ge9|cF&(2j=sMbz$z)K#hH=H1#M|jcI)_$nzkiYKB%Mo_(7tZJ1J93; zz#fj!LvM1nDQx+nS?iW3kCEXT|1(b;$JahdR@b__X@Adb&n-qvwHWQSq#^I^Z{s-v#{M z@rQsvI{p;!XUAUx{_6Of<93(ymUP$b9@e;e1Is0Pfj05&M$#Px&c=V_LChuY7Fq8v|2qDRWm@~>47z{iZ z7zBZA9v}vps1C#uK+G_)QCt!v00V45h8hsd05Q|Vjna(F6VIlzvH*E}6E8+{ssb4x jGZ-cxWE7vgg;9c$ar0S5Zze|O$&xJR8CfR3WH}80*jE?< delta 166 zcmdnOy@i{Vk%56BXYxiyVLl)O3?_&&Feva&R8!)6!OXw_!a6`jI*gMU8O1~efl7FQ z7^F=dh$TSmiH+itOh5(GSQdzpK}|CQ18*?{ zgCJ0l2Z%wYssphE5Hn0{6qf`EzyKSNp$5bT-ZWJX3YQ9+;r z9v}u8q7K9oAoj#YaY-g10|wZD3^gE@0b=fn8>Ja}CZ0{_1!++QVvu(3$&QT5lN}gE QHdinnU}WT(Y{}dV0EDU&hyVZp diff --git a/backend/tests/data/print/emf/dotcode_aim_fig7.emf b/backend/tests/data/print/emf/dotcode_aim_fig7.emf index 73c1d70efa9d664c0882873e49b63bffd1840c4f..a1fd307a0c8f7ea1654021adac5ae6142ae0a249 100644 GIT binary patch delta 154 zcmdnPxrbAYk%56B2Z&*y5y(h}ae%ZAGXp~b(?m6;iElUzIe-FeNRlAtUU>$FEC~h% zK_Ht4h(QLb12IsDfnj2!xFkpb20)tCfLI2InI>+O<^@Tp0x?J@)5M#~jEo!q?q>!7 DDPRvI delta 144 zcmdnPxrdXLk%56BXW~O)J|GPSHv9|>JGdvRDOtW?W?%qe9iSQz#s&m|f;>PBl2!*| t2@rc?qqrm!kO2d1K!zF+%K$O=#EsItAl0fs4ARLx@uo5()5gF1nE`ZG4}1Us diff --git a/backend/tests/data/print/emf/maxicode_fig_2.emf b/backend/tests/data/print/emf/maxicode_fig_2.emf index 564059759d0136c437d4ae547f5490d17577783f..b9de887ec2cc7e1c1a14988f8d293c6cbb4abc05 100644 GIT binary patch delta 190 zcmdmRiE+avMm0tT28J9UhJp1g3=B;`3=q^Ol%aF1PQFfZ6DGx;e delta 146 zcmaDN@I-)>k%56BXW~O)J|GPSZ&(-@-mpwmQ?h))%)kJ`IzTlbj133^1$lrNB&`m_ w5+L@(MsZ0dAOi;2fDAPtmH}e!i5sPPL8?`O7^IVX;!Wj=H$*lIFov)L05HlB)c^nh diff --git a/backend/tests/data/print/emf/ultracode_a.emf b/backend/tests/data/print/emf/ultracode_a.emf index 7d7c28c4a8e45d1be3b7662d835bdfd100a10330..0493de8ce4848684cde192898d6ef16cb1d5fa9e 100644 GIT binary patch delta 267 zcmY+7O$x#=5QXz>NPmdXE=pQmbWw^3y@1E?2D)?MPTbeEbrEwC$=X|Z06j^aK@0le zW8TcmWV*b|8werx#Hf-CGpY@QXl+xkW;9`5|ShAWizI_Lo9FY*A_ YOX}4QSEXGVNw-1d`|tt8ej8VK1EFjn*8l(j delta 267 zcmZn=Z4gyuWME*(0b&@C0y01t26&hm7xN!E!Q#Uoutfile, debug); + ret = testUtilVerifyIdentify(have_identify, symbol->outfile, debug); assert_zero(ret, "i:%d identify %s ret %d != 0\n", i, symbol->outfile, ret); } if (!(debug & ZINT_DEBUG_TEST_KEEP_OUTFILE)) { @@ -156,7 +156,7 @@ static void test_print(const testCtx *const p_ctx) { char escaped[1024]; int escaped_size = 1024; - int have_identify = testUtilHaveIdentify(); + const char *const have_identify = testUtilHaveIdentify(); testStart("test_print"); @@ -211,7 +211,7 @@ static void test_print(const testCtx *const p_ctx) { ret = testUtilRename(symbol->outfile, expected_file); assert_zero(ret, "i:%d testUtilRename(%s, %s) ret %d != 0 (%d: %s)\n", i, symbol->outfile, expected_file, ret, errno, strerror(errno)); if (have_identify) { - ret = testUtilVerifyIdentify(expected_file, debug); + ret = testUtilVerifyIdentify(have_identify, expected_file, debug); assert_zero(ret, "i:%d %s identify %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret); } } else { @@ -242,10 +242,13 @@ static void test_outfile(const testCtx *const p_ctx) { symbol.bitmap = data; symbol.bitmap_width = symbol.bitmap_height = 1; - strcpy(symbol.outfile, "nosuch_dir/out.bmp"); + strcpy(symbol.outfile, "test_bmp_out.bmp"); + (void) testUtilRmROFile(symbol.outfile); /* In case lying around from previous fail */ + assert_nonzero(testUtilCreateROFile(symbol.outfile), "bmp_pixel_plot testUtilCreateROFile(%s) fail (%d: %s)\n", symbol.outfile, errno, strerror(errno)); ret = bmp_pixel_plot(&symbol, data); assert_equal(ret, ZINT_ERROR_FILE_ACCESS, "bmp_pixel_plot ret %d != ZINT_ERROR_FILE_ACCESS (%d) (%s)\n", ret, ZINT_ERROR_FILE_ACCESS, symbol.errtxt); + assert_zero(testUtilRmROFile(symbol.outfile), "bmp_pixel_plot testUtilRmROFile(%s) != 0 (%d: %s)\n", symbol.outfile, errno, strerror(errno)); symbol.output_options |= BARCODE_STDOUT; diff --git a/backend/tests/test_code128.c b/backend/tests/test_code128.c index b3675a69..b1809fca 100644 --- a/backend/tests/test_code128.c +++ b/backend/tests/test_code128.c @@ -55,10 +55,10 @@ static void test_large(const testCtx *const p_ctx) { /* 4*/ { BARCODE_CODE128, "\351A", 41, ZINT_ERROR_TOO_LONG, -1 }, /* 41 chars (+ 20 shifts) */ /* 5*/ { BARCODE_CODE128, "0", 120, 0, 695 }, /* 6*/ { BARCODE_CODE128, "0", 121, ZINT_ERROR_TOO_LONG, -1 }, - /* 7*/ { BARCODE_CODE128B, "A", 60, 0, 695 }, - /* 8*/ { BARCODE_CODE128B, "A", 61, ZINT_ERROR_TOO_LONG, -1 }, - /* 9*/ { BARCODE_CODE128B, "0", 60, 0, 695 }, - /* 10*/ { BARCODE_CODE128B, "0", 61, ZINT_ERROR_TOO_LONG, -1 }, + /* 7*/ { BARCODE_CODE128AB, "A", 60, 0, 695 }, + /* 8*/ { BARCODE_CODE128AB, "A", 61, ZINT_ERROR_TOO_LONG, -1 }, + /* 9*/ { BARCODE_CODE128AB, "0", 60, 0, 695 }, + /* 10*/ { BARCODE_CODE128AB, "0", 61, ZINT_ERROR_TOO_LONG, -1 }, /* 11*/ { BARCODE_GS1_128, "[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890123456789012345678901234567890[92]1234567890", -1, 0, 706 }, /* 116 nos + 3 FNC1s */ /* 12*/ { BARCODE_GS1_128, "[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890123456789012345678901234567890[92]1234[93]1234", -1, ZINT_ERROR_TOO_LONG, -1 }, /* 116 nos + 4 FNC1s */ /* 13*/ { BARCODE_GS1_128, "A", 161, ZINT_ERROR_TOO_LONG, -1 }, @@ -198,13 +198,13 @@ static void test_hrt(const testCtx *const p_ctx) { struct item data[] = { /* 0*/ { BARCODE_CODE128, UNICODE_MODE, -1, "1234567890", -1, "1234567890" }, /* 1*/ { BARCODE_CODE128, UNICODE_MODE, -1, "\000ABC\000DEF\000", 9, " ABC DEF " }, - /* 2*/ { BARCODE_CODE128B, UNICODE_MODE, -1, "12345\00067890", 11, "12345 67890" }, + /* 2*/ { BARCODE_CODE128AB, UNICODE_MODE, -1, "12345\00067890", 11, "12345 67890" }, /* 3*/ { BARCODE_CODE128, UNICODE_MODE, -1, "12345\01167890\037\177", -1, "12345 67890 " }, /* 4*/ { BARCODE_CODE128, UNICODE_MODE, -1, "abcdé", -1, "abcdé" }, /* 5*/ { BARCODE_CODE128, DATA_MODE, -1, "abcd\351", -1, "abcdé" }, /* 6*/ { BARCODE_CODE128, DATA_MODE, -1, "ab\240cd\351", -1, "ab\302\240cdé" }, /* NBSP */ - /* 7*/ { BARCODE_CODE128B, UNICODE_MODE, -1, "abcdé", -1, "abcdé" }, - /* 8*/ { BARCODE_CODE128B, DATA_MODE, -1, "abcd\351", -1, "abcdé" }, + /* 7*/ { BARCODE_CODE128AB, UNICODE_MODE, -1, "abcdé", -1, "abcdé" }, + /* 8*/ { BARCODE_CODE128AB, DATA_MODE, -1, "abcd\351", -1, "abcdé" }, /* 9*/ { BARCODE_HIBC_128, UNICODE_MODE, -1, "1234567890", -1, "*+12345678900*" }, /* 10*/ { BARCODE_HIBC_128, UNICODE_MODE, -1, "a99912345", -1, "*+A999123457*" }, /* Converts to upper */ /* 11*/ { BARCODE_DPD, UNICODE_MODE, -1, "000393206219912345678101040", -1, "0003 932 0621 9912 3456 78 101 040 9" }, /* DPDAPPD 4.0.2 - Illustration 7 */ @@ -281,7 +281,7 @@ static void test_reader_init(const testCtx *const p_ctx) { struct item data[] = { /* 0*/ { BARCODE_CODE128, UNICODE_MODE, READER_INIT, "A", 0, 1, 57, "(5) 104 96 33 60 106", "StartA FNC3 A" }, /* 1*/ { BARCODE_CODE128, UNICODE_MODE, READER_INIT, "12", 0, 1, 68, "(6) 104 96 99 12 22 106", "StartB FNC3 CodeC 12" }, - /* 2*/ { BARCODE_CODE128B, UNICODE_MODE, READER_INIT, "\0371234", 0, 1, 101, "(9) 103 96 95 17 18 19 20 6 106", "StartA FNC3 US 1 2 3 4" }, + /* 2*/ { BARCODE_CODE128AB, UNICODE_MODE, READER_INIT, "\0371234", 0, 1, 101, "(9) 103 96 95 17 18 19 20 6 106", "StartA FNC3 US 1 2 3 4" }, /* 3*/ { BARCODE_GS1_128, GS1_MODE, READER_INIT, "[90]12", 0, 1, 68, "(6) 105 102 90 12 11 106", "StartC FNC1 90 12 (Reader Initialise not supported by GS1 barcodes (use CODE128))" }, /* 4*/ { BARCODE_EAN14, GS1_MODE, READER_INIT, "12", 0, 1, 134, "(12) 105 102 1 0 0 0 0 0 1 23 12 106", "StartC FNC1 01 00 (5) 01 23 (Reader Initialise not supported by GS1 barcodes (use CODE128))" }, /* 5*/ { BARCODE_NVE18, GS1_MODE, READER_INIT, "12", 0, 1, 156, "(14) 105 102 0 0 0 0 0 0 0 0 1 23 58 106", "StartC FNC1 00 (8) 01 23 (Reader Initialise not supported by GS1 barcodes (use CODE128))" }, @@ -766,13 +766,13 @@ static void test_encode(const testCtx *const p_ctx) { /* 0*/ { BARCODE_CODE128, UNICODE_MODE, -1, "AIM", 0, 1, 68, 1, "ISO/IEC 15417:2007 Figure 1", "11010010000101000110001100010001010111011000101110110001100011101011" }, - /* 1*/ { BARCODE_CODE128B, UNICODE_MODE, -1, "AIM", 0, 1, 68, 1, "128B same", + /* 1*/ { BARCODE_CODE128AB, UNICODE_MODE, -1, "AIM", 0, 1, 68, 1, "128B same", "11010010000101000110001100010001010111011000101110110001100011101011" }, /* 2*/ { BARCODE_CODE128, UNICODE_MODE, -1, "1234567890", 0, 1, 90, 1, "", "110100111001011001110010001011000111000101101100001010011011110110100111100101100011101011" }, - /* 3*/ { BARCODE_CODE128B, UNICODE_MODE, -1, "1234567890", 0, 1, 145, 1, "", + /* 3*/ { BARCODE_CODE128AB, UNICODE_MODE, -1, "1234567890", 0, 1, 145, 1, "", "1101001000010011100110110011100101100101110011001001110110111001001100111010011101101110111010011001110010110010011101100101000110001100011101011" }, /* 4*/ { BARCODE_CODE128, DATA_MODE, -1, "\101\102\103\104\105\106\200\200\200\200\200", 0, 1, 178, 1, "", diff --git a/backend/tests/test_eci.c b/backend/tests/test_eci.c index f7b6ae17..213bafbd 100644 --- a/backend/tests/test_eci.c +++ b/backend/tests/test_eci.c @@ -266,9 +266,9 @@ static void test_reduced_charset_input(const testCtx *const p_ctx) { /*121*/ { BARCODE_MAXICODE, UNICODE_MODE, 29, "齄齄", 0, 29, "U+9F44 in GB2312 but not in Big5" }, /*122*/ { BARCODE_MAXICODE, UNICODE_MODE, 30, "가", 0, 30, "U+AC00 in EUC-KR" }, /*123*/ { BARCODE_MAXICODE, UNICODE_MODE, 30, "가가", 0, 30, "U+AC00 in EUC-KR" }, - /*124*/ { BARCODE_CODE128B, UNICODE_MODE, 0, "é", 0, 0, "" }, - /*125*/ { BARCODE_CODE128B, UNICODE_MODE, 3, "é", ZINT_ERROR_INVALID_OPTION, -1, "Does not support ECI" }, - /*126*/ { BARCODE_CODE128B, UNICODE_MODE, 0, "β", ZINT_ERROR_INVALID_DATA, -1, "β not in ISO 8859-1" }, + /*124*/ { BARCODE_CODE128AB, UNICODE_MODE, 0, "é", 0, 0, "" }, + /*125*/ { BARCODE_CODE128AB, UNICODE_MODE, 3, "é", ZINT_ERROR_INVALID_OPTION, -1, "Does not support ECI" }, + /*126*/ { BARCODE_CODE128AB, UNICODE_MODE, 0, "β", ZINT_ERROR_INVALID_DATA, -1, "β not in ISO 8859-1" }, /*127*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 0, "é", 0, 0, "" }, /*128*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 3, "é", 0, 3, "Supports ECI" }, /*129*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 0, "β", ZINT_WARN_USES_ECI, 9, "" }, diff --git a/backend/tests/test_emf.c b/backend/tests/test_emf.c index abc5e2e8..be931d74 100644 --- a/backend/tests/test_emf.c +++ b/backend/tests/test_emf.c @@ -44,6 +44,7 @@ static void test_print(const testCtx *const p_ctx) { int whitespace_height; int option_1; int option_2; + float dpmm; char *fgcolour; char *bgcolour; int rotate_angle; @@ -52,21 +53,34 @@ static void test_print(const testCtx *const p_ctx) { char *comment; }; struct item data[] = { - /* 0*/ { BARCODE_CODE128, UNICODE_MODE, -1, BOLD_TEXT, -1, -1, -1, -1, "", "", 0, "Égjpqy", "code128_egrave_bold.emf", "" }, - /* 1*/ { BARCODE_TELEPEN, -1, -1, -1, -1, -1, -1, -1, "147AD0", "FC9630", 0, "123", "telenum_fg_bg.emf", "" }, - /* 2*/ { BARCODE_ULTRA, -1, -1, -1, 5, -1, -1, -1, "147AD0", "FC9630", 0, "123", "ultracode_fg_bg.emf", "" }, - /* 3*/ { BARCODE_ULTRA, -1, 2, BARCODE_BOX, 2, 2, -1, -1, "FF0000", "0000FF", 0, "123", "ultracode_fg_bg_box2.emf", "" }, - /* 4*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, "", "", 0, "9780877799306+54321", "ean13_5addon_ggs_5.2.2.5.2-2.emf", "" }, - /* 5*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, "", "", 0, "210987654321+54321", "ean13_5addon_#185.emf", "#185 Byte count, font data, HeaderExtension1/2" }, - /* 6*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, -1, -1, "", "", 0, "012345678905+24", "upca_2addon_ggs_5.2.6.6-5.emf", "" }, - /* 7*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, -1, -1, "", "", 0, "0123456+12", "upce_2addon.emf", "" }, - /* 8*/ { BARCODE_UPCE, -1, -1, SMALL_TEXT | BOLD_TEXT, -1, -1, -1, -1, "", "", 0, "0123456+12", "upce_2addon_small_bold.emf", "" }, - /* 9*/ { BARCODE_ITF14, -1, -1, BOLD_TEXT, -1, -1, -1, -1, "", "", 0, "123", "itf14_bold.emf", "" }, - /* 10*/ { BARCODE_CODE39, -1, -1, -1, -1, -1, -1, -1, "", "", 90, "123", "code39_rotate_90.emf", "" }, - /* 11*/ { BARCODE_CODE39, -1, -1, -1, -1, -1, -1, -1, "", "", 180, "123", "code39_rotate_180.emf", "" }, - /* 12*/ { BARCODE_CODE39, -1, -1, -1, -1, -1, -1, -1, "", "", 270, "123", "code39_rotate_270.emf", "" }, - /* 13*/ { BARCODE_MAXICODE, -1, -1, -1, -1, -1, -1, -1, "E0E0E0", "700070", 0, "THIS IS A 93 CHARACTER CODE SET A MESSAGE THAT FILLS A MODE 4, UNAPPENDED, MAXICODE SYMBOL...", "maxicode_#185.emf", "#185 Maxicode scaling" }, - /* 14*/ { BARCODE_MAXICODE, -1, -1, -1, -1, -1, -1, -1, "", "FFFFFF00", 90, "THIS IS A 93 CHARACTER CODE SET A MESSAGE THAT FILLS A MODE 4, UNAPPENDED, MAXICODE SYMBOL...", "maxicode_rotate_90_nobg.emf", "" }, + /* 0*/ { BARCODE_CODE128, UNICODE_MODE, -1, BOLD_TEXT, -1, -1, -1, -1, 0, "", "", 0, "Égjpqy", "code128_egrave_bold.emf", "" }, + /* 1*/ { BARCODE_CODE128, UNICODE_MODE, -1, BOLD_TEXT, -1, -1, -1, -1, 100.0f / 25.4f, "", "", 0, "Égjpqy", "code128_egrave_bold_100dpi.emf", "" }, + /* 2*/ { BARCODE_CODE128, UNICODE_MODE, -1, BOLD_TEXT, -1, -1, -1, -1, 150.0f / 25.4f, "", "", 0, "Égjpqy", "code128_egrave_bold_150dpi.emf", "" }, + /* 3*/ { BARCODE_CODE128, UNICODE_MODE, -1, BOLD_TEXT, -1, -1, -1, -1, 300.0f / 25.4f, "", "", 0, "Égjpqy", "code128_egrave_bold_300dpi.emf", "" }, + /* 4*/ { BARCODE_CODE128, UNICODE_MODE, -1, BOLD_TEXT, -1, -1, -1, -1, 400.0f / 25.4f, "", "", 0, "Égjpqy", "code128_egrave_bold_400dpi.emf", "" }, + /* 5*/ { BARCODE_CODE128, UNICODE_MODE, -1, BOLD_TEXT, -1, -1, -1, -1, 1200.0f / 25.4f, "", "", 0, "Égjpqy", "code128_egrave_bold_1200dpi.emf", "" }, + /* 6*/ { BARCODE_TELEPEN, -1, -1, -1, -1, -1, -1, -1, 0, "147AD0", "FC9630", 0, "123", "telenum_fg_bg.emf", "" }, + /* 7*/ { BARCODE_TELEPEN, -1, -1, -1, -1, -1, -1, -1, 150.0f / 25.4f, "147AD0", "FC9630", 0, "123", "telenum_fg_bg_150dpi.emf", "" }, + /* 8*/ { BARCODE_ULTRA, -1, -1, -1, 5, -1, -1, -1, 0, "147AD0", "FC9630", 0, "123", "ultracode_fg_bg.emf", "" }, + /* 9*/ { BARCODE_ULTRA, -1, 2, BARCODE_BOX, 2, 2, -1, -1, 0, "FF0000", "0000FF", 0, "123", "ultracode_fg_bg_box2.emf", "" }, + /* 10*/ { BARCODE_ULTRA, -1, 2, BARCODE_BOX, 2, 2, -1, -1, 600.0f / 25.4f, "FF0000", "0000FF", 0, "123", "ultracode_fg_bg_box2_600dpi.emf", "" }, + /* 11*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "9780877799306+54321", "ean13_5addon_ggs_5.2.2.5.2-2.emf", "" }, + /* 12*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "210987654321+54321", "ean13_5addon_#185.emf", "#185 Byte count, font data, HeaderExtension1/2" }, + /* 13*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "012345678905+24", "upca_2addon_ggs_5.2.6.6-5.emf", "" }, + /* 14*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "0123456+12", "upce_2addon.emf", "" }, + /* 15*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, -1, -1, 150.f / 25.4f, "", "", 0, "0123456+12", "upce_2addon_150dpi.emf", "" }, + /* 16*/ { BARCODE_UPCE, -1, -1, SMALL_TEXT | BOLD_TEXT, -1, -1, -1, -1, 0, "", "", 0, "0123456+12", "upce_2addon_small_bold.emf", "" }, + /* 17*/ { BARCODE_ITF14, -1, -1, BOLD_TEXT, -1, -1, -1, -1, 0, "", "", 0, "123", "itf14_bold.emf", "" }, + /* 18*/ { BARCODE_ITF14, -1, -1, BOLD_TEXT, -1, -1, -1, -1, 600.f / 25.4f, "", "", 0, "123", "itf14_bold_600dpi.emf", "" }, + /* 19*/ { BARCODE_CODE39, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 90, "123", "code39_rotate_90.emf", "" }, + /* 20*/ { BARCODE_CODE39, -1, -1, -1, -1, -1, -1, -1, 300.f / 25.4f, "", "", 90, "123", "code39_rotate_90_300dpi.emf", "" }, + /* 21*/ { BARCODE_CODE39, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 180, "123", "code39_rotate_180.emf", "" }, + /* 22*/ { BARCODE_CODE39, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 270, "123", "code39_rotate_270.emf", "" }, + /* 23*/ { BARCODE_MAXICODE, -1, -1, -1, -1, -1, -1, -1, 0, "E0E0E0", "700070", 0, "THIS IS A 93 CHARACTER CODE SET A MESSAGE THAT FILLS A MODE 4, UNAPPENDED, MAXICODE SYMBOL...", "maxicode_#185.emf", "#185 Maxicode scaling" }, + /* 24*/ { BARCODE_MAXICODE, -1, -1, -1, -1, -1, -1, -1, 150.f / 25.4f, "E0E0E0", "700070", 0, "THIS IS A 93 CHARACTER CODE SET A MESSAGE THAT FILLS A MODE 4, UNAPPENDED, MAXICODE SYMBOL...", "maxicode_#185_150dpi.emf", "#185 Maxicode scaling" }, + /* 25*/ { BARCODE_MAXICODE, -1, -1, -1, -1, -1, -1, -1, 600.f / 25.4f, "E0E0E0", "700070", 0, "THIS IS A 93 CHARACTER CODE SET A MESSAGE THAT FILLS A MODE 4, UNAPPENDED, MAXICODE SYMBOL...", "maxicode_#185_600dpi.emf", "#185 Maxicode scaling" }, + /* 26*/ { BARCODE_MAXICODE, -1, -1, -1, -1, -1, -1, -1, 0, "", "FFFFFF00", 90, "THIS IS A 93 CHARACTER CODE SET A MESSAGE THAT FILLS A MODE 4, UNAPPENDED, MAXICODE SYMBOL...", "maxicode_rotate_90_nobg.emf", "" }, + /* 27*/ { BARCODE_MAXICODE, -1, -1, -1, -1, -1, -1, -1, 300.0f, "", "FFFFFF00", 90, "THIS IS A 93 CHARACTER CODE SET A MESSAGE THAT FILLS A MODE 4, UNAPPENDED, MAXICODE SYMBOL...", "maxicode_rotate_90_nobg_300dpi.emf", "" }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -111,6 +125,10 @@ static void test_print(const testCtx *const p_ctx) { if (data[i].whitespace_height != -1) { symbol->whitespace_height = data[i].whitespace_height; } + if (data[i].dpmm) { + symbol->dpmm = data[i].dpmm; + symbol->scale = ZBarcode_Scale_From_XdimDp(symbol->symbology, ZBarcode_Default_Xdim(symbol->symbology), symbol->dpmm, "EMF"); + } if (*data[i].fgcolour) { strcpy(symbol->fgcolour, data[i].fgcolour); } @@ -128,10 +146,10 @@ static void test_print(const testCtx *const p_ctx) { assert_nonzero(testUtilDataPath(expected_file, sizeof(expected_file), data_dir, data[i].expected_file), "i:%d testUtilDataPath == 0\n", i); if (p_ctx->generate) { - printf(" /*%3d*/ { %s, %s, %d, %s, %d, %d, %d, %d, \"%s\", \"%s\", %d, \"%s\", \"%s\", \"%s\" },\n", + printf(" /*%3d*/ { %s, %s, %d, %s, %d, %d, %d, %d, %g, \"%s\", \"%s\", %d, \"%s\", \"%s\", \"%s\" },\n", i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), data[i].border_width, testUtilOutputOptionsName(data[i].output_options), data[i].whitespace_width, data[i].whitespace_height, - data[i].option_1, data[i].option_2, data[i].fgcolour, data[i].bgcolour, data[i].rotate_angle, + data[i].option_1, data[i].option_2, data[i].dpmm, data[i].fgcolour, data[i].bgcolour, data[i].rotate_angle, testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].expected_file, data[i].comment); ret = testUtilRename(symbol->outfile, expected_file); assert_zero(ret, "i:%d testUtilRename(%s, %s) ret %d != 0\n", i, symbol->outfile, expected_file, ret); @@ -170,10 +188,13 @@ static void test_outfile(const testCtx *const p_ctx) { symbol.symbology = BARCODE_CODE128; symbol.vector = &vector; - strcpy(symbol.outfile, "nosuch_dir/out.emf"); + strcpy(symbol.outfile, "test_emf_out.emf"); + (void) testUtilRmROFile(symbol.outfile); /* In case lying around from previous fail */ + assert_nonzero(testUtilCreateROFile(symbol.outfile), "emf_plot testUtilCreateROFile(%s) fail (%d: %s)\n", symbol.outfile, errno, strerror(errno)); ret = emf_plot(&symbol, 0); assert_equal(ret, ZINT_ERROR_FILE_ACCESS, "emf_plot ret %d != ZINT_ERROR_FILE_ACCESS (%d) (%s)\n", ret, ZINT_ERROR_FILE_ACCESS, symbol.errtxt); + assert_zero(testUtilRmROFile(symbol.outfile), "emf_plot testUtilRmROFile(%s) != 0 (%d: %s)\n", symbol.outfile, errno, strerror(errno)); symbol.output_options |= BARCODE_STDOUT; diff --git a/backend/tests/test_gif.c b/backend/tests/test_gif.c index 9acfe03f..e990f9f1 100644 --- a/backend/tests/test_gif.c +++ b/backend/tests/test_gif.c @@ -65,7 +65,7 @@ static void test_pixel_plot(const testCtx *const p_ctx) { char data_buf[19 * 32 + 1]; /* 19 * 32 == 608 */ - int have_identify = testUtilHaveIdentify(); + const char *const have_identify = testUtilHaveIdentify(); testStart("test_pixel_plot"); @@ -100,7 +100,7 @@ static void test_pixel_plot(const testCtx *const p_ctx) { if (ret < ZINT_ERROR) { if (have_identify) { - ret = testUtilVerifyIdentify(symbol->outfile, debug); + ret = testUtilVerifyIdentify(have_identify, symbol->outfile, debug); assert_zero(ret, "i:%d identify %s ret %d != 0\n", i, symbol->outfile, ret); } if (!(debug & ZINT_DEBUG_TEST_KEEP_OUTFILE)) { @@ -184,7 +184,7 @@ static void test_print(const testCtx *const p_ctx) { char escaped[1024]; int escaped_size = 1024; - int have_identify = testUtilHaveIdentify(); + const char *const have_identify = testUtilHaveIdentify(); testStart("test_print"); @@ -251,7 +251,7 @@ static void test_print(const testCtx *const p_ctx) { ret = testUtilRename(symbol->outfile, expected_file); assert_zero(ret, "i:%d testUtilRename(%s, %s) ret %d != 0\n", i, symbol->outfile, expected_file, ret); if (have_identify) { - ret = testUtilVerifyIdentify(expected_file, debug); + ret = testUtilVerifyIdentify(have_identify, expected_file, debug); assert_zero(ret, "i:%d %s identify %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret); } } else { @@ -282,10 +282,13 @@ static void test_outfile(const testCtx *const p_ctx) { symbol.bitmap = data; symbol.bitmap_width = symbol.bitmap_height = 1; - strcpy(symbol.outfile, "nosuch_dir/out.gif"); + strcpy(symbol.outfile, "test_gif_out.gif"); + (void) testUtilRmROFile(symbol.outfile); /* In case lying around from previous fail */ + assert_nonzero(testUtilCreateROFile(symbol.outfile), "gif_pixel_plot testUtilCreateROFile(%s) fail (%d: %s)\n", symbol.outfile, errno, strerror(errno)); ret = gif_pixel_plot(&symbol, data); assert_equal(ret, ZINT_ERROR_FILE_ACCESS, "gif_pixel_plot ret %d != ZINT_ERROR_FILE_ACCESS (%d) (%s)\n", ret, ZINT_ERROR_FILE_ACCESS, symbol.errtxt); + assert_zero(testUtilRmROFile(symbol.outfile), "gif_pixel_plot testUtilRmROFile(%s) != 0 (%d: %s)\n", symbol.outfile, errno, strerror(errno)); symbol.output_options |= BARCODE_STDOUT; diff --git a/backend/tests/test_library.c b/backend/tests/test_library.c index f8af4869..a0eb9bb6 100644 --- a/backend/tests/test_library.c +++ b/backend/tests/test_library.c @@ -29,10 +29,12 @@ */ /* SPDX-License-Identifier: BSD-3-Clause */ -#include "testcommon.h" -#include -#include #include +#include +#include +#include +#include "testcommon.h" +#include "../common.h" static void test_checks(const testCtx *const p_ctx) { int debug = p_ctx->debug; @@ -63,8 +65,8 @@ static void test_checks(const testCtx *const p_ctx) { /* 1*/ { BARCODE_CODE128, -1, "1234", -1, -1, 0, 0, 0, 0, 0, -1, -1, -1, -1, 0, "", -1 }, /* 2*/ { BARCODE_QRCODE, -1, "1234", -1, -1, 3, 0, 0, 0, 0, -1, -1, -1, -1, 0, "", -1 }, /* 3*/ { BARCODE_QRCODE, -1, "1234", -1, -1, 999999 + 1, 0, 0, 0, 0, -1, -1, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 218: Invalid ECI code 1000000", -1 }, - /* 4*/ { BARCODE_CODE128, -1, "1234", -1, -1, -1, 0, 0, 0, 0, 0.009, -1, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 227: Scale out of range (0.01 to 100)", -1 }, - /* 5*/ { BARCODE_CODE128, -1, "1234", -1, -1, -1, 0, 0, 0, 0, 100.01, -1, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 227: Scale out of range (0.01 to 100)", -1 }, + /* 4*/ { BARCODE_CODE128, -1, "1234", -1, -1, -1, 0, 0, 0, 0, 0.009, -1, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 227: Scale out of range (0.01 to 200)", -1 }, + /* 5*/ { BARCODE_CODE128, -1, "1234", -1, -1, -1, 0, 0, 0, 0, 200.01, -1, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 227: Scale out of range (0.01 to 200)", -1 }, /* 6*/ { BARCODE_CODE128, -1, "1234", -1, -1, -1, 0, 0, 0, 0, -1, 20.1, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 221: Dot size out of range (0.01 to 20)", -1 }, /* 7*/ { BARCODE_CODE128, -1, "1234", -1, -1, -1, 0, 0, 0, 0, 0.01, 0.009, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 221: Dot size out of range (0.01 to 20)", -1 }, /* 8*/ { BARCODE_CODE128, -1, "1234", -1, -1, -1, -0.1, 0, 0, 0, -1, -1, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 765: Height out of range (0 to 2000)", -1 }, @@ -1381,6 +1383,204 @@ static void test_clear(const testCtx *const p_ctx) { testFinish(); } +static void test_scale_from_xdimdp(const testCtx *const p_ctx) { + + struct item { + int symbology; + float x_dim; + float dpmm; + int dpi; + char *filetype; + float expected; + }; + /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ + struct item data[] = { + /* 0*/ { BARCODE_EANX, 0.33f, 2, 50, "gif", 0.5f }, + /* 1*/ { BARCODE_EANX, 0.33f, 2, 50, "emf", 0.33000001f }, + /* 2*/ { BARCODE_EANX, 0.33f, 2, 50, "svg", 0.33000001f }, + /* 3*/ { BARCODE_EANX, 0.33f, 3, 76, "gif", 0.5f }, + /* 4*/ { BARCODE_EANX, 0.33f, 3, 76, "svg", 0.495f }, + /* 5*/ { BARCODE_EANX, 0.33f, 4, 100, "gif", 0.5f }, + /* 6*/ { BARCODE_EANX, 0.33f, 4, 100, "svg", 0.66000003f }, + /* 7*/ { BARCODE_EANX, 0.33f, 6, 150, "gif", 1 }, + /* 8*/ { BARCODE_EANX, 0.33f, 6, 150, "svg", 0.99f }, + /* 9*/ { BARCODE_EANX, 0.33f, 8, 200, "gif", 1.5f }, + /* 10*/ { BARCODE_EANX, 0.33f, 8, 200, "svg", 1.32f }, + /* 11*/ { BARCODE_EANX, 0.33f, 12, 300, "gif", 2 }, + /* 12*/ { BARCODE_EANX, 0.33f, 12, 300, "svg", 1.98f }, + /* 13*/ { BARCODE_EANX, 0.33f, 16, 400, "gif", 2.5f }, /* NOTE: scale previously documented as 3.0f */ + /* 14*/ { BARCODE_EANX, 0.33f, 16, 400, "svg", 2.64f }, + /* 15*/ { BARCODE_EANX, 0.33f, 24, 600, "gif", 4 }, + /* 16*/ { BARCODE_EANX, 0.33f, 24, 600, "svg", 3.96f }, + /* 17*/ { BARCODE_EANX, 0.33f, 47, 1200, "gif", 8 }, + /* 18*/ { BARCODE_EANX, 0.33f, 47, 1200, "emf", 7.755f }, + /* 19*/ { BARCODE_EANX, 0.33f, 47, 1200, "svg", 7.755f }, + /* 20*/ { BARCODE_EANX, 0.33f, 94, 2400, "gif", 15.5f }, /* NOTE dpmm previously documented as 95 */ + /* 21*/ { BARCODE_EANX, 0.33f, 94, 2400, "svg", 15.51f }, + /* 22*/ { BARCODE_EANX, 0.33f, 189, 4800, "gif", 31 }, + /* 23*/ { BARCODE_EANX, 0.33f, 189, 4800, "svg", 31.185001f }, + /* 24*/ { BARCODE_EANX, 0.33f, 378, 9600, "gif", 62.5f }, + /* 25*/ { BARCODE_EANX, 0.33f, 378, 9600, "svg", 62.370003f }, + /* 26*/ { BARCODE_MAXICODE, 0.88f, 4, 100, "gif", 0.352f }, + /* 27*/ { BARCODE_MAXICODE, 0.88f, 4, 100, "emf", 0.1f }, /* NOTE scale rounded up to min 0.1 so doesn't round trip */ + /* 28*/ { BARCODE_MAXICODE, 0.88f, 4, 100, "svg", 1.76f }, + /* 29*/ { BARCODE_MAXICODE, 0.88f, 6, 150, "gif", 0.528f }, /* NOTE scale previously documented as 0.5f */ + /* 30*/ { BARCODE_MAXICODE, 0.88f, 6, 150, "emf", 0.132f }, + /* 31*/ { BARCODE_MAXICODE, 0.88f, 6, 150, "svg", 2.6399999 }, + /* 32*/ { BARCODE_MAXICODE, 0.88f, 8, 200, "gif", 0.704f }, /* NOTE scale previously documented as 0.7f */ + /* 33*/ { BARCODE_MAXICODE, 0.88f, 8, 200, "emf", 0.176f }, + /* 34*/ { BARCODE_MAXICODE, 0.88f, 8, 200, "svg", 3.52f }, + /* 35*/ { BARCODE_MAXICODE, 0.88f, 12, 300, "gif", 1.056f }, /* NOTE scale previously documented as 1.0f */ + /* 36*/ { BARCODE_MAXICODE, 0.88f, 12, 300, "emf", 0.264f }, + /* 37*/ { BARCODE_MAXICODE, 0.88f, 12, 300, "svg", 5.2799997f }, + /* 38*/ { BARCODE_MAXICODE, 0.88f, 16, 400, "gif", 1.408f }, /* NOTE scale previously documented as 1.4f */ + /* 39*/ { BARCODE_MAXICODE, 0.88f, 16, 400, "emf", 0.352f }, + /* 40*/ { BARCODE_MAXICODE, 0.88f, 16, 400, "gif", 1.408f }, + /* 41*/ { BARCODE_MAXICODE, 0.88f, 24, 600, "gif", 2.112f }, /* NOTE scale previously documented as 2.1f */ + /* 42*/ { BARCODE_MAXICODE, 0.88f, 24, 600, "emf", 0.528f }, + /* 43*/ { BARCODE_MAXICODE, 0.88f, 24, 600, "svg", 10.559999f }, + /* 44*/ { BARCODE_MAXICODE, 0.88f, 47, 1200, "gif", 4.136f }, /* NOTE scale previously documented as 4.1f */ + /* 45*/ { BARCODE_MAXICODE, 0.88f, 47, 1200, "emf", 1.034f }, + /* 46*/ { BARCODE_MAXICODE, 0.88f, 47, 1200, "svg", 20.68f }, + /* 47*/ { BARCODE_MAXICODE, 0.88f, 94, 2400, "gif", 8.272f }, /* NOTE dpmm previously documented as 95, scale as 8.2f */ + /* 48*/ { BARCODE_MAXICODE, 0.88f, 94, 2400, "emf", 2.0680001f }, + /* 49*/ { BARCODE_MAXICODE, 0.88f, 94, 2400, "svg", 41.360001f }, + /* 50*/ { BARCODE_MAXICODE, 0.88f, 189, 4800, "gif", 16.632f }, /* NOTE scale previously documented as 16.4f */ + /* 51*/ { BARCODE_MAXICODE, 0.88f, 189, 4800, "emf", 4.158f }, + /* 52*/ { BARCODE_MAXICODE, 0.88f, 189, 4800, "svg", 83.159996f }, + /* 53*/ { BARCODE_MAXICODE, 0.88f, 378, 9600, "gif", 33.264f }, + /* 54*/ { BARCODE_MAXICODE, 0.88f, 378, 9600, "emf", 8.316f }, + /* 55*/ { BARCODE_MAXICODE, 0.88f, 378, 9600, "svg", 166.31999f }, + /* 56*/ { BARCODE_PDF417, 0.27f, 2, 50, "gif", 0.5f }, + /* 57*/ { BARCODE_PDF417, 0.27f, 2, 50, "svg", 0.27000001f }, + /* 58*/ { BARCODE_PDF417, 0.27f, 6, 150, "gif", 1 }, + /* 59*/ { BARCODE_PDF417, 0.27f, 6, 150, "svg", 0.81000006f }, + /* 60*/ { BARCODE_PDF417, 0.27f, 12, 300, "gif", 1.5 }, + /* 61*/ { BARCODE_PDF417, 0.27f, 12, 300, "svg", 1.6200001f }, + /* 62*/ { BARCODE_PDF417, 0.27f, 24, 600, "gif", 3 }, + /* 63*/ { BARCODE_PDF417, 0.27f, 24, 600, "emf", 3.2400002f }, + /* 64*/ { BARCODE_PDF417, 0.27f, 24, 600, "svg", 3.2400002f }, + /* 65*/ { BARCODE_PHARMA_TWO, 1, 2, 50, "gif", 1 }, + /* 66*/ { BARCODE_PHARMA_TWO, 1, 2, 50, "svg", 1 }, + /* 67*/ { BARCODE_PHARMA_TWO, 1, 6, 150, "gif", 3 }, + /* 68*/ { BARCODE_PHARMA_TWO, 1, 6, 150, "svg", 3 }, + /* 69*/ { BARCODE_PHARMA_TWO, 1, 8, 200, "gif", 4 }, + /* 70*/ { BARCODE_PHARMA_TWO, 1, 8, 200, "svg", 4 }, + /* 71*/ { BARCODE_PHARMA_TWO, 1, 189, 4800, "gif", 94.5f }, + /* 72*/ { BARCODE_PHARMA_TWO, 1, 189, 4800, "svg", 94.5f }, + /* 73*/ { BARCODE_PHARMA_TWO, 1, 378, 9600, "gif", 189 }, + /* 74*/ { BARCODE_PHARMA_TWO, 1, 378, 9600, "svg", 189 }, + /* 75*/ { BARCODE_PHARMA_TWO, 1, 401, 10200, "gif", 200 }, /* NOTE scale capped to 200 so doesn't round trip */ + /* 76*/ { BARCODE_PHARMA_TWO, 1, 401, 10200, "svg", 200 }, + /* 77*/ { BARCODE_CODE128, 0.5, 12, 300, "gif", 3 }, + /* 78*/ { BARCODE_CODE128, 0, 12, -1, "gif", 0 }, /* x_dim zero */ + /* 79*/ { BARCODE_CODE128, 200.1f, 12, -1, "gif", 0 }, /* x_dim > 200 */ + /* 80*/ { BARCODE_CODE128, 0.5f, -0.1f, -1, "gif", 0 }, /* dpmm neg */ + /* 81*/ { BARCODE_CODE128, 0.5f, 1000.1, -1, "gif", 0 }, /* dpmm > 1000 */ + /* 82*/ { BARCODE_CODE128, 0.5f, 300, -1, "abcd", 0 }, /* filetype unknown */ + /* 83*/ { BARCODE_QRCODE, 10, 31, 800, "gif", 155 }, + }; + int data_size = ARRAY_SIZE(data); + int i; + float ret; + float x_dim_from_scale; + float dpmm_from_dpi; + + testStart("test_scale_from_xdimdp"); + + for (i = 0; i < data_size; i++) { + + if (testContinue(p_ctx, i)) continue; + + ret = ZBarcode_Scale_From_XdimDp(data[i].symbology, data[i].x_dim, data[i].dpmm, data[i].filetype); + assert_equal(ret, data[i].expected, "i:%d ZBarcode_Scale_From_XdimDp(%s, %g, %g, %s) %.8g != %.8g\n", + i, testUtilBarcodeName(data[i].symbology), data[i].dpmm, data[i].x_dim, data[i].filetype, ret, data[i].expected); + + if (ret) { + dpmm_from_dpi = roundf(data[i].dpi / 25.4f); + ret = ZBarcode_Scale_From_XdimDp(data[i].symbology, data[i].x_dim, dpmm_from_dpi, data[i].filetype); + assert_equal(ret, data[i].expected, "i:%d ZBarcode_Scale_From_XdimDp(%s, %g (dpi %d), %g, %s) %.8g != %.8g\n", + i, testUtilBarcodeName(data[i].symbology), dpmm_from_dpi, data[i].dpi, data[i].x_dim, data[i].filetype, ret, data[i].expected); + + if (data[i].expected > 0.1f && data[i].expected < 200.0f /* Can't round trip scales <= 0.1 or >= 200.0f */ + && (data[i].symbology == BARCODE_MAXICODE || strcmp(data[i].filetype, "gif") != 0)) { /* Non-MAXICODE raster rounds to half-increments */ + x_dim_from_scale = ZBarcode_XdimDp_From_Scale(data[i].symbology, ret, data[i].dpmm, data[i].filetype); + x_dim_from_scale = roundf(x_dim_from_scale * 100.0f) / 100.0f; + assert_equal(x_dim_from_scale, data[i].x_dim, "i:%d ZBarcode_XdimDp_From_Scale(%s, %g, %g, %s) %.8g != x_dim %.8g\n", + i, testUtilBarcodeName(data[i].symbology), ret, data[i].x_dim, data[i].filetype, x_dim_from_scale, data[i].x_dim); + } + } + } + + testFinish(); +} + +static void test_xdimdp_from_scale(const testCtx *const p_ctx) { + + struct item { + int symbology; + float scale; + float dpmm; /* Note testing "normal" case that want X-dim, not dpmm */ + int dpi; + char *filetype; + float expected; + }; + /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ + struct item data[] = { + /* 0*/ { BARCODE_EANX, 1, 6, 150, "gif", 0.33333334f }, + /* 1*/ { BARCODE_EANX, 1.32f, 8, 200, "gif", 0.33000001f }, + /* 2*/ { BARCODE_EANX, 1.5f, 8, 200, "gif", 0.375f }, + /* 3*/ { BARCODE_EANX, 1.98f, 12, 300, "gif", 0.33f }, + /* 4*/ { BARCODE_EANX, 2, 12, 300, "gif", 0.33333334f }, + /* 5*/ { BARCODE_EANX, 2, 12, 300, "svg", 0.33333334f }, + /* 6*/ { BARCODE_EANX, 2.64f, 16, 400, "gif", 0.33f }, + /* 7*/ { BARCODE_EANX, 2.5f, 16, 400, "gif", 0.3125f }, + /* 8*/ { BARCODE_EANX, 3.96f, 24, 600, "gif", 0.33f }, + /* 9*/ { BARCODE_EANX, 3.96f, 24, 600, "svg", 0.33f }, + /* 10*/ { BARCODE_EANX, 4, 24, 600, "gif", 0.33333334f }, + /* 11*/ { BARCODE_EANX, 7.755f, 47, 1200, "gif", 0.33f }, + /* 12*/ { BARCODE_EANX, 8, 47, 1200, "gif", 0.34042552f }, + /* 13*/ { BARCODE_EANX, 15.51f, 94, 2400, "gif", 0.33f }, + /* 14*/ { BARCODE_EANX, 15.5f, 94, 2400, "gif", 0.32978722f }, + /* 15*/ { BARCODE_EANX, 31.185001f, 189, 4800, "gif", 0.33f }, + /* 16*/ { BARCODE_EANX, 31, 189, 4800, "gif", 0.32804233f }, + /* 17*/ { BARCODE_MAXICODE, 1, 12, 300, "gif", 0.83333331f }, + /* 18*/ { BARCODE_MAXICODE, 0.264f, 12, 300, "emf", 0.87999994f }, + /* 19*/ { BARCODE_MAXICODE, 5.2799997f, 12, 300, "svg", 0.87999994f }, + /* 20*/ { BARCODE_MAXICODE, 2, 24, 600, "gif", 0.83333331f }, + /* 21*/ { BARCODE_MAXICODE, 0.528f, 24, 600, "emf", 0.87999994f }, + /* 22*/ { BARCODE_MAXICODE, 10.559999f, 24, 600, "svg", 0.87999994f }, + /* 23*/ { BARCODE_CODE128, 0, 12, -1, "gif", 0 }, /* scale zero */ + /* 24*/ { BARCODE_CODE128, 200.01f, 12, -1, "gif", 0 }, /* scale > 200 */ + /* 25*/ { BARCODE_CODE128, 0.5f, 0, -1, "gif", 0 }, /* xdim_mm_or_dpmm zero */ + /* 26*/ { BARCODE_CODE128, 0.5f, 1000.1f, -1, "gif", 0 }, /* xdim_mm_or_dpmm > 1000 */ + }; + int data_size = ARRAY_SIZE(data); + int i; + float ret; + float dpmm_from_dpi; + + testStart("test_xdimdp_from_scale"); + + for (i = 0; i < data_size; i++) { + + if (testContinue(p_ctx, i)) continue; + + ret = ZBarcode_XdimDp_From_Scale(data[i].symbology, data[i].scale, data[i].dpmm, data[i].filetype); + assert_equal(ret, data[i].expected, "i:%d ZBarcode_XdimDp_From_Scale(%s, %g, %g, %s) %.8g != %.8g\n", + i, testUtilBarcodeName(data[i].symbology), data[i].dpmm, data[i].scale, data[i].filetype, ret, data[i].expected); + + if (ret) { + dpmm_from_dpi = roundf(data[i].dpi / 25.4f); + ret = ZBarcode_XdimDp_From_Scale(data[i].symbology, data[i].scale, dpmm_from_dpi, data[i].filetype); + assert_equal(ret, data[i].expected, "i:%d ZBarcode_XdimDp_From_Scale(%s, %g (dpi %d), %g, %s) %.8g != %.8g\n", + i, testUtilBarcodeName(data[i].symbology), dpmm_from_dpi, data[i].dpi, data[i].scale, data[i].filetype, ret, data[i].expected); + } + } + + testFinish(); +} + int main(int argc, char *argv[]) { testFunction funcs[] = { /* name, func */ @@ -1404,6 +1604,8 @@ int main(int argc, char *argv[]) { { "test_strip_bom", test_strip_bom }, { "test_zero_outfile", test_zero_outfile }, { "test_clear", test_clear }, + { "test_scale_from_xdimdp", test_scale_from_xdimdp }, + { "test_xdimdp_from_scale", test_xdimdp_from_scale }, }; testRun(argc, argv, funcs, ARRAY_SIZE(funcs)); diff --git a/backend/tests/test_mailmark.c b/backend/tests/test_mailmark.c index 74f9d4a8..f0cefecf 100644 --- a/backend/tests/test_mailmark.c +++ b/backend/tests/test_mailmark.c @@ -44,59 +44,61 @@ static void test_input(const testCtx *const p_ctx) { struct item data[] = { /* 0*/ { "41038422416563762XY11 ", 0, 3, 155 }, /* 1*/ { "41038422416563762XY11 ", ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 2*/ { "41038422416563762xy11 ", 0, 3, 155 }, /* Case insensitive */ - /* 3*/ { "41038422416563762xy11 .", ZINT_ERROR_INVALID_DATA, -1, -1 }, - /* 4*/ { "0100000000000AA000AA0A", 0, 3, 131, }, /* Length 22, Mailmark C (2 digit chain id) */ - /* 5*/ { "5100000000000AA000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* 1st char format 0-4 only */ - /* 6*/ { "0000000000000AA000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* 2nd char version id 1-4 only */ - /* 7*/ { "01F0000000000AA000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* 3rd char class 0-9A-E only */ - /* 8*/ { "0100A00000000AA000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* 4-5th chars chain id 2 digits */ - /* 9*/ { "010000000000AAA000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* 6-13th chars item id 8 digits */ - /* 10*/ { "0100000000000 A000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* Remaining chars post code */ - /* 11*/ { "0100000000000C1I2JQ3N ", 0, 3, 131, }, /* F N F N L L N L S */ - /* 12*/ { "010000000000091I2JQ3N ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N F N L L N L S bad 1st F */ - /* 13*/ { "0100000000000CAI2JQ3N ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N F N L L N L S bad 1st N */ - /* 14*/ { "0100000000000C1I2IQ3N ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N F N L L N L S bad 1st L */ - /* 15*/ { "0100000000000C1I2IQ3NA", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N F N L L N L S bad S */ - /* 16*/ { "0100000000000KM12JQ3N ", 0, 3, 131, }, /* F F N N L L N L S */ - /* 17*/ { "0100000000000K 12JQ3N ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N L L N L S bad 2nd F (non-numeric otherwise matches last pattern) */ - /* 18*/ { "0100000000000KM1AJQ3N ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N L L N L S bad 2nd N */ - /* 19*/ { "0100000000000KM12JO3N ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N L L N L S bad 2nd L */ - /* 20*/ { "0100000000000KM12JQ3NA", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N L L N L S bad S */ - /* 21*/ { "0100000000000OV123JQ4U", 0, 3, 131, }, /* F F N N N L L N L */ - /* 22*/ { "01000000000009V123JQ4U", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N N L L N L bad 1st F */ - /* 23*/ { "0100000000000OV12AJQ4U", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N N L L N L bad 3rd N */ - /* 24*/ { "0100000000000OV123JQ4V", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N N L L N L bad 3rd L */ - /* 25*/ { "0100000000000CI1K3JQ4U", 0, 3, 131, }, /* F F N F N L L N L */ - /* 26*/ { "0100000000000CI1 3JQ4U", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N F N L L N L bad 3rd F (non-numeric otherwise matches pattern above) */ - /* 27*/ { "0100000000000CIAK3JQ4U", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N F N L L N L bad 1st N */ - /* 28*/ { "0100000000000CI1K3CQ4U", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N F N L L N L bad 1st L */ - /* 29*/ { "0100000000000C12JQ3U ", 0, 3, 131, }, /* F N N L L N L S S */ - /* 30*/ { "0100000000000912JQ3U ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N L L N L S S bad F */ - /* 31*/ { "0100000000000C1AJQ3U ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N L L N L S S bad 2nd N */ - /* 32*/ { "0100000000000C12JO3U ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N L L N L S S bad 2nd L */ - /* 33*/ { "0100000000000C12JQ3UA ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N L L N L S S bad 1st S */ - /* 34*/ { "0100000000000C123JQ4U ", 0, 3, 131, }, /* F N N N L L N L S */ - /* 35*/ { "01000000000009123JQ4U ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N N L L N L S bad F */ - /* 36*/ { "0100000000000C12AJQ4U ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N N L L N L S bad 3rd N */ - /* 37*/ { "0100000000000C123JQ4V ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N N L L N L S bad 3rd L */ - /* 38*/ { "0100000000000C123JQ4U1", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N N L L N L S bad S */ - /* 39*/ { "01000000000000000AA000AA0A", 0, 3, 155, }, /* Length 26, Mailmark L (6 digit chain id) */ - /* 40*/ { "010A0000000000000AA000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* 4-9th chars chain id 6 digits */ - /* 41*/ { "010A0000000000000 A000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* Post code */ - /* 42*/ { "01000000000000000C1I2JQ3N ", 0, 3, 155, }, /* F N F N L L N L S */ - /* 43*/ { "01000000000000000C1 2JQ3N ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N F N L L N L S bad 2nd F */ - /* 44*/ { "01000000000000000KM12JQ3N ", 0, 3, 155, }, /* F F N N L L N L S */ - /* 45*/ { "01000000000000000KM12JQAN ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N L L N L S bad 3rd N */ - /* 46*/ { "01000000000000000OV123JQ4U", 0, 3, 155, }, /* F F N N N L L N L */ - /* 47*/ { "01000000000000000OV123IQ4U", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N N L L N L bad 1st L */ - /* 48*/ { "01000000000000000CI1K3JQ4U", 0, 3, 155, }, /* F F N F N L L N L */ - /* 49*/ { "010000000000000009I1K3JQ4U", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N F N L L N L bad 1st F */ - /* 50*/ { "01000000000000000C12JQ3U ", 0, 3, 155, }, /* F N N L L N L S S */ - /* 51*/ { "01000000000000000C12JQ3U A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N L L N L S S bad 2nd S */ - /* 52*/ { "01000000000000000C123JQ4U ", 0, 3, 155, }, /* F N N N L L N L S */ - /* 53*/ { "01000000000000000C 23JQ4U ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N N L L N L S bad 1st N (non-alpha otherwise matches 2nd pattern) */ - /* 54*/ { "41038422416563762XY1", ZINT_ERROR_INVALID_DATA, -1, -1 }, + /* 2*/ { "4103842241656", ZINT_ERROR_TOO_LONG, -1, -1 }, /* Too short (< 14) */ + /* 3*/ { "41038422416563", ZINT_ERROR_INVALID_DATA, -1, -1 }, + /* 4*/ { "41038422416563762xy11 ", 0, 3, 155 }, /* Case insensitive */ + /* 5*/ { "41038422416563762xy11 .", ZINT_ERROR_INVALID_DATA, -1, -1 }, + /* 6*/ { "0100000000000AA000AA0A", 0, 3, 131, }, /* Length 22, Mailmark C (2 digit chain id) */ + /* 7*/ { "5100000000000AA000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* 1st char format 0-4 only */ + /* 8*/ { "0000000000000AA000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* 2nd char version id 1-4 only */ + /* 9*/ { "01F0000000000AA000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* 3rd char class 0-9A-E only */ + /* 10*/ { "0100A00000000AA000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* 4-5th chars chain id 2 digits */ + /* 11*/ { "010000000000AAA000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* 6-13th chars item id 8 digits */ + /* 12*/ { "0100000000000 A000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* Remaining chars post code */ + /* 13*/ { "0100000000000C1I2JQ3N ", 0, 3, 131, }, /* F N F N L L N L S */ + /* 14*/ { "010000000000091I2JQ3N ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N F N L L N L S bad 1st F */ + /* 15*/ { "0100000000000CAI2JQ3N ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N F N L L N L S bad 1st N */ + /* 16*/ { "0100000000000C1I2IQ3N ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N F N L L N L S bad 1st L */ + /* 17*/ { "0100000000000C1I2IQ3NA", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N F N L L N L S bad S */ + /* 18*/ { "0100000000000KM12JQ3N ", 0, 3, 131, }, /* F F N N L L N L S */ + /* 19*/ { "0100000000000K 12JQ3N ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N L L N L S bad 2nd F (non-numeric otherwise matches last pattern) */ + /* 20*/ { "0100000000000KM1AJQ3N ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N L L N L S bad 2nd N */ + /* 21*/ { "0100000000000KM12JO3N ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N L L N L S bad 2nd L */ + /* 22*/ { "0100000000000KM12JQ3NA", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N L L N L S bad S */ + /* 23*/ { "0100000000000OV123JQ4U", 0, 3, 131, }, /* F F N N N L L N L */ + /* 24*/ { "01000000000009V123JQ4U", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N N L L N L bad 1st F */ + /* 25*/ { "0100000000000OV12AJQ4U", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N N L L N L bad 3rd N */ + /* 26*/ { "0100000000000OV123JQ4V", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N N L L N L bad 3rd L */ + /* 27*/ { "0100000000000CI1K3JQ4U", 0, 3, 131, }, /* F F N F N L L N L */ + /* 28*/ { "0100000000000CI1 3JQ4U", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N F N L L N L bad 3rd F (non-numeric otherwise matches pattern above) */ + /* 29*/ { "0100000000000CIAK3JQ4U", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N F N L L N L bad 1st N */ + /* 30*/ { "0100000000000CI1K3CQ4U", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N F N L L N L bad 1st L */ + /* 31*/ { "0100000000000C12JQ3U ", 0, 3, 131, }, /* F N N L L N L S S */ + /* 32*/ { "0100000000000912JQ3U ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N L L N L S S bad F */ + /* 33*/ { "0100000000000C1AJQ3U ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N L L N L S S bad 2nd N */ + /* 34*/ { "0100000000000C12JO3U ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N L L N L S S bad 2nd L */ + /* 35*/ { "0100000000000C12JQ3UA ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N L L N L S S bad 1st S */ + /* 36*/ { "0100000000000C123JQ4U ", 0, 3, 131, }, /* F N N N L L N L S */ + /* 37*/ { "01000000000009123JQ4U ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N N L L N L S bad F */ + /* 38*/ { "0100000000000C12AJQ4U ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N N L L N L S bad 3rd N */ + /* 39*/ { "0100000000000C123JQ4V ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N N L L N L S bad 3rd L */ + /* 40*/ { "0100000000000C123JQ4U1", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N N L L N L S bad S */ + /* 41*/ { "01000000000000000AA000AA0A", 0, 3, 155, }, /* Length 26, Mailmark L (6 digit chain id) */ + /* 42*/ { "010A0000000000000AA000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* 4-9th chars chain id 6 digits */ + /* 43*/ { "010A0000000000000 A000AA0A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* Post code */ + /* 44*/ { "01000000000000000C1I2JQ3N ", 0, 3, 155, }, /* F N F N L L N L S */ + /* 45*/ { "01000000000000000C1 2JQ3N ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N F N L L N L S bad 2nd F */ + /* 46*/ { "01000000000000000KM12JQ3N ", 0, 3, 155, }, /* F F N N L L N L S */ + /* 47*/ { "01000000000000000KM12JQAN ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N L L N L S bad 3rd N */ + /* 48*/ { "01000000000000000OV123JQ4U", 0, 3, 155, }, /* F F N N N L L N L */ + /* 49*/ { "01000000000000000OV123IQ4U", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N N N L L N L bad 1st L */ + /* 50*/ { "01000000000000000CI1K3JQ4U", 0, 3, 155, }, /* F F N F N L L N L */ + /* 51*/ { "010000000000000009I1K3JQ4U", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F F N F N L L N L bad 1st F */ + /* 52*/ { "01000000000000000C12JQ3U ", 0, 3, 155, }, /* F N N L L N L S S */ + /* 53*/ { "01000000000000000C12JQ3U A", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N L L N L S S bad 2nd S */ + /* 54*/ { "01000000000000000C123JQ4U ", 0, 3, 155, }, /* F N N N L L N L S */ + /* 55*/ { "01000000000000000C 23JQ4U ", ZINT_ERROR_INVALID_DATA, -1, -1 }, /* F N N N L L N L S bad 1st N (non-alpha otherwise matches 2nd pattern) */ + /* 56*/ { "41038422416563762XY1", ZINT_ERROR_INVALID_DATA, -1, -1 }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; diff --git a/backend/tests/test_output.c b/backend/tests/test_output.c index a552f194..d22e05ed 100644 --- a/backend/tests/test_output.c +++ b/backend/tests/test_output.c @@ -30,6 +30,11 @@ /* SPDX-License-Identifier: BSD-3-Clause */ #include "testcommon.h" +#include "../output.h" +#ifdef _WIN32 +#include +#include +#endif INTERNAL int out_quiet_zones_test(const struct zint_symbol *symbol, const int hide_text, float *left, float *right, float *top, float *bottom); @@ -57,10 +62,107 @@ static void test_quiet_zones(const testCtx *const p_ctx) { testFinish(); } +#ifdef _WIN32 +#define TEST_OUT_SEP '\\' +#define TEST_OUT_SEP_STR "\\" +#else +#define TEST_OUT_SEP '/' +#define TEST_OUT_SEP_STR "/" +#endif + +static void test_fopen(const testCtx *const p_ctx) { + struct item { + char dir[32]; + char subdir[32]; + char *filename; + int succeed; + }; + /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ + struct item data[] = { + /* 0*/ { "", "", "out.png", 1 }, + /* 1*/ { "out_test", "", "out.png", 1 }, + /* 2*/ { "out_test_with_subdir", "out_test_subdir", "out.png", 1 }, + /* 3*/ { "out_test_with_subdir", "out_test_subdir", "out.bmp", 1 }, + /* 4*/ { "out_test_with_subdir", "out_test_subdir", "out.emf", 1 }, + /* 5*/ { "out_test_with_subdir", "out_test_subdir", "out.eps", 1 }, + /* 6*/ { "out_test_with_subdir", "out_test_subdir", "out.gif", 1 }, + /* 7*/ { "out_test_with_subdir", "out_test_subdir", "out.pcx", 1 }, + /* 8*/ { "out_test_with_subdir", "out_test_subdir", "out.svg", 1 }, + /* 9*/ { "out_test_with_subdir", "out_test_subdir", "out.tif", 1 }, + /* 10*/ { "out_test/", "", "out.png", 1 }, + /* 11*/ { "out_test//", "", "out.png", 1 }, + /* 12*/ { "out_test/", "/out_test_subdir/", "out.png", 1 }, + /* 13*/ { "out_test\\", "\\out_test_subdir\\", "out.png", 1 }, + }; + int data_size = ARRAY_SIZE(data); + int i, len; + + FILE *ret; + char cwdbuf[1024]; + char outfile[1024 + 256]; + char dirname[1024 + 256]; + char subdirname[1024 + 256]; + int dir_exists, subdir_exists; + + testStart("test_fopen"); + + assert_nonnull(getcwd(cwdbuf, sizeof(cwdbuf)), "getcwd NULL (%d, %s)\n", errno, strerror(errno)); + + for (i = 0; i < data_size; i++) { + + if (testContinue(p_ctx, i)) continue; + + strcpy(outfile, cwdbuf); + len = strlen(outfile); + if (len && outfile[len - 1] != TEST_OUT_SEP) { outfile[len++] = TEST_OUT_SEP; outfile[len] = '\0'; } + dir_exists = subdir_exists = 0; + + if (data[i].dir[0]) { + strcat(outfile, data[i].dir); + strcat(outfile, TEST_OUT_SEP_STR); + strcpy(dirname, outfile); + dir_exists = testUtilDirExists(dirname); + if (data[i].subdir[0]) { + strcat(outfile, data[i].subdir); + strcat(outfile, TEST_OUT_SEP_STR); + strcpy(subdirname, outfile); + subdir_exists = testUtilDirExists(subdirname); + } + } + strcat(outfile, data[i].filename); + + ret = out_fopen(outfile, "w"); + if (data[i].succeed) { + assert_nonnull(ret, "i:%d out_fopen(%s) == NULL (%d: %s)\n", i, outfile, errno, strerror(errno)); + assert_zero(fclose(ret), "i:%d fclose(%s) != 0 (%d: %s)\n", i, outfile, errno, strerror(errno)); + assert_nonzero(testUtilExists(outfile), "i:%d testUtilExists(%s) != 0 (%d: %s)\n", i, outfile, errno, strerror(errno)); + if (data[i].dir[0]) { + assert_nonzero(testUtilDirExists(dirname), "i:%d testUtilDirExists(%s) != 0 (%d: %s)\n", i, dirname, errno, strerror(errno)); + } + assert_zero(remove(outfile), "i:%d remove(%s) != 0 (%d: %s)\n", i, outfile, errno, strerror(errno)); + if (data[i].dir[0]) { + if (data[i].subdir[0] && !subdir_exists) { + assert_zero(testUtilRmDir(subdirname), "i:%d rmdir(%s) != 0 (%d: %s)\n", i, subdirname, errno, strerror(errno)); + } + if (!dir_exists && strcmp(dirname, "/") != 0 && strcmp(dirname, "\\") != 0) { + assert_zero(testUtilRmDir(dirname), "i:%d rmdir(%s) != 0 (%d: %s)\n", i, dirname, errno, strerror(errno)); + } + } + } else { + assert_null(ret, "i:%d out_fopen(%s) == NULL (%d: %s)\n", i, outfile, errno, strerror(errno)); + /* TODO: may have left junk around */ + } + } + + testFinish(); +} + + int main(int argc, char *argv[]) { testFunction funcs[] = { /* name, func */ { "test_quiet_zones", test_quiet_zones }, + { "test_fopen", test_fopen }, }; testRun(argc, argv, funcs, ARRAY_SIZE(funcs)); diff --git a/backend/tests/test_pcx.c b/backend/tests/test_pcx.c index 86545945..60032db8 100644 --- a/backend/tests/test_pcx.c +++ b/backend/tests/test_pcx.c @@ -65,7 +65,7 @@ static void test_print(const testCtx *const p_ctx) { char escaped[1024]; int escaped_size = 1024; - int have_identify = testUtilHaveIdentify(); + const char *const have_identify = testUtilHaveIdentify(); testStart("test_pcx"); @@ -124,7 +124,7 @@ static void test_print(const testCtx *const p_ctx) { ret = testUtilRename(symbol->outfile, expected_file); assert_zero(ret, "i:%d testUtilRename(%s, %s) ret %d != 0 (%d: %s)\n", i, symbol->outfile, expected_file, ret, errno, strerror(errno)); if (have_identify) { - ret = testUtilVerifyIdentify(expected_file, debug); + ret = testUtilVerifyIdentify(have_identify, expected_file, debug); assert_zero(ret, "i:%d %s identify %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret); } } else { @@ -157,10 +157,13 @@ static void test_outfile(const testCtx *const p_ctx) { symbol.bitmap = data; symbol.bitmap_width = symbol.bitmap_height = 1; - strcpy(symbol.outfile, "nosuch_dir/out.pcx"); + strcpy(symbol.outfile, "test_pcx_out.pcx"); + (void) testUtilRmROFile(symbol.outfile); /* In case lying around from previous fail */ + assert_nonzero(testUtilCreateROFile(symbol.outfile), "pcx_pixel_plot testUtilCreateROFile(%s) fail (%d: %s)\n", symbol.outfile, errno, strerror(errno)); ret = pcx_pixel_plot(&symbol, data); assert_equal(ret, ZINT_ERROR_FILE_ACCESS, "pcx_pixel_plot ret %d != ZINT_ERROR_FILE_ACCESS (%d) (%s)\n", ret, ZINT_ERROR_FILE_ACCESS, symbol.errtxt); + assert_zero(testUtilRmROFile(symbol.outfile), "pcx_pixel_plot testUtilRmROFile(%s) != 0 (%d: %s)\n", symbol.outfile, errno, strerror(errno)); symbol.output_options |= BARCODE_STDOUT; diff --git a/backend/tests/test_png.c b/backend/tests/test_png.c index 064ed5ef..390d8bb3 100644 --- a/backend/tests/test_png.c +++ b/backend/tests/test_png.c @@ -63,7 +63,7 @@ static void test_pixel_plot(const testCtx *const p_ctx) { char data_buf[8 * 2 + 1]; - int have_identify = testUtilHaveIdentify(); + const char *const have_identify = testUtilHaveIdentify(); testStart("test_pixel_plot"); @@ -98,7 +98,7 @@ static void test_pixel_plot(const testCtx *const p_ctx) { if (ret < ZINT_ERROR) { if (have_identify) { - ret = testUtilVerifyIdentify(symbol->outfile, debug); + ret = testUtilVerifyIdentify(have_identify, symbol->outfile, debug); assert_zero(ret, "i:%d identify %s ret %d != 0\n", i, symbol->outfile, ret); } if (!(debug & ZINT_DEBUG_TEST_KEEP_OUTFILE)) { @@ -214,7 +214,7 @@ static void test_print(const testCtx *const p_ctx) { int escaped_size = 1024; char *text; - int have_identify = testUtilHaveIdentify(); + const char *const have_identify = testUtilHaveIdentify(); testStart("test_print"); @@ -288,7 +288,7 @@ static void test_print(const testCtx *const p_ctx) { ret = testUtilRename(symbol->outfile, expected_file); assert_zero(ret, "i:%d testUtilRename(%s, %s) ret %d != 0\n", i, symbol->outfile, expected_file, ret); if (have_identify) { - ret = testUtilVerifyIdentify(expected_file, debug); + ret = testUtilVerifyIdentify(have_identify, expected_file, debug); assert_zero(ret, "i:%d %s identify %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret); } } else { @@ -321,10 +321,13 @@ static void test_outfile(const testCtx *const p_ctx) { symbol.bitmap = data; symbol.bitmap_width = symbol.bitmap_height = 1; - strcpy(symbol.outfile, "nosuch_dir/out.png"); + strcpy(symbol.outfile, "test_png_out.png"); + (void) testUtilRmROFile(symbol.outfile); /* In case lying around from previous fail */ + assert_nonzero(testUtilCreateROFile(symbol.outfile), "png_pixel_plot testUtilCreateROFile(%s) fail (%d: %s)\n", symbol.outfile, errno, strerror(errno)); ret = png_pixel_plot(&symbol, data); assert_equal(ret, ZINT_ERROR_FILE_ACCESS, "png_pixel_plot ret %d != ZINT_ERROR_FILE_ACCESS (%d) (%s)\n", ret, ZINT_ERROR_FILE_ACCESS, symbol.errtxt); + assert_zero(testUtilRmROFile(symbol.outfile), "png_pixel_plot testUtilRmROFile(%s) != 0 (%d: %s)\n", symbol.outfile, errno, strerror(errno)); symbol.output_options |= BARCODE_STDOUT; diff --git a/backend/tests/test_print.c b/backend/tests/test_print.c index 4a4cb839..0c33371b 100644 --- a/backend/tests/test_print.c +++ b/backend/tests/test_print.c @@ -67,7 +67,7 @@ static void test_print(const testCtx *const p_ctx) { char escaped[1024]; int escaped_size = 1024; - int have_identify = 0; + const char *have_identify = NULL; int have_libreoffice = 0; int have_ghostscript = 0; int have_vnu = 0; @@ -177,7 +177,7 @@ static void test_print(const testCtx *const p_ctx) { assert_zero(ret, "i:%d %s tiffinfo %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret); } else if (strcmp(exts[j], "txt") != 0) { /* I.e. rasters */ if (have_identify) { - ret = testUtilVerifyIdentify(expected_file, debug); + ret = testUtilVerifyIdentify(have_identify, expected_file, debug); assert_zero(ret, "i:%d %s identify %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret); } } diff --git a/backend/tests/test_ps.c b/backend/tests/test_ps.c index e6be8073..a9154bc1 100644 --- a/backend/tests/test_ps.c +++ b/backend/tests/test_ps.c @@ -224,10 +224,13 @@ static void test_outfile(const testCtx *const p_ctx) { symbol.symbology = BARCODE_CODE128; symbol.vector = &vector; - strcpy(symbol.outfile, "nosuch_dir/out.eps"); + strcpy(symbol.outfile, "test_ps_out.eps"); + (void) testUtilRmROFile(symbol.outfile); /* In case lying around from previous fail */ + assert_nonzero(testUtilCreateROFile(symbol.outfile), "ps_plot testUtilCreateROFile(%s) fail (%d: %s)\n", symbol.outfile, errno, strerror(errno)); ret = ps_plot(&symbol, 0); assert_equal(ret, ZINT_ERROR_FILE_ACCESS, "ps_plot ret %d != ZINT_ERROR_FILE_ACCESS (%d) (%s)\n", ret, ZINT_ERROR_FILE_ACCESS, symbol.errtxt); + assert_zero(testUtilRmROFile(symbol.outfile), "ps_plot testUtilRmROFile(%s) != 0 (%d: %s)\n", symbol.outfile, errno, strerror(errno)); symbol.output_options |= BARCODE_STDOUT; diff --git a/backend/tests/test_qr.c b/backend/tests/test_qr.c index 7384ac29..8006ac1b 100644 --- a/backend/tests/test_qr.c +++ b/backend/tests/test_qr.c @@ -91,10 +91,12 @@ static void test_qr_options(const testCtx *const p_ctx) { /* 38*/ { -1, -1, 4, 1, { 3, 16, "123" }, "12345678901", 0, 0, 21, -1, "" }, /* 39*/ { -1, -1, 4, 1, { 3, 17, "123" }, "12345678901", ZINT_ERROR_INVALID_OPTION, -1, 0, -1, "Error 750: Structured Append count out of range (2-16)" }, /* 40*/ { -1, -1, 4, 1, { 3, 2, "123" }, "12345678901", ZINT_ERROR_INVALID_OPTION, -1, 0, -1, "Error 751: Structured Append index out of range (1-2)" }, - /* 41*/ { -1, -1, 4, 1, { 1, 2, "256" }, "12345678901", ZINT_ERROR_INVALID_OPTION, -1, 0, -1, "Error 754: Structured Append ID '256' out of range (0-255)" }, - /* 42*/ { GS1_MODE, 3, -1, -1, { 0, 0, "" }, "[20]12", ZINT_WARN_NONCOMPLIANT, 0, 21, -1, "Warning 755: Using ECI in GS1 mode not supported by GS1 standards" }, - /* 43*/ { GS1_MODE, -1, -1, -1, { 1, 2, "" }, "[20]12", ZINT_WARN_NONCOMPLIANT, 0, 21, -1, "Warning 756: Using Structured Append in GS1 mode not supported by GS1 standards" }, - /* 44*/ { GS1_MODE, 3, -1, -1, { 1, 2, "" }, "[20]12", ZINT_WARN_NONCOMPLIANT, 0, 21, -1, "Warning 755: Using ECI in GS1 mode not supported by GS1 standards" }, /* ECI trumps Structured Append */ + /* 41*/ { -1, -1, 4, 1, { 1, 2, "1234" }, "12345678901", ZINT_ERROR_INVALID_OPTION, -1, 0, -1, "Error 752: Structured Append ID too long (3 digit maximum)" }, + /* 42*/ { -1, -1, 4, 1, { 1, 2, "12A" }, "12345678901", ZINT_ERROR_INVALID_OPTION, -1, 0, -1, "Error 753: Invalid Structured Append ID (digits only)" }, + /* 43*/ { -1, -1, 4, 1, { 1, 2, "256" }, "12345678901", ZINT_ERROR_INVALID_OPTION, -1, 0, -1, "Error 754: Structured Append ID '256' out of range (0-255)" }, + /* 44*/ { GS1_MODE, 3, -1, -1, { 0, 0, "" }, "[20]12", ZINT_WARN_NONCOMPLIANT, 0, 21, -1, "Warning 755: Using ECI in GS1 mode not supported by GS1 standards" }, + /* 45*/ { GS1_MODE, -1, -1, -1, { 1, 2, "" }, "[20]12", ZINT_WARN_NONCOMPLIANT, 0, 21, -1, "Warning 756: Using Structured Append in GS1 mode not supported by GS1 standards" }, + /* 46*/ { GS1_MODE, 3, -1, -1, { 1, 2, "" }, "[20]12", ZINT_WARN_NONCOMPLIANT, 0, 21, -1, "Warning 755: Using ECI in GS1 mode not supported by GS1 standards" }, /* ECI trumps Structured Append */ }; int data_size = ARRAY_SIZE(data); int i, length, ret; diff --git a/backend/tests/test_raster.c b/backend/tests/test_raster.c index 1886e747..35f38f77 100644 --- a/backend/tests/test_raster.c +++ b/backend/tests/test_raster.c @@ -176,10 +176,10 @@ static void test_buffer(const testCtx *const p_ctx) { /* 51*/ { BARCODE_CODABAR, COMPLIANT_HEIGHT, "A00000000B", "", 50, 1, 102, 204, 116 }, /* 52*/ { BARCODE_CODE128, -1, "1234567890", "", 50, 1, 90, 180, 116 }, /* 53*/ { BARCODE_CODE128, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 90, 180, 116 }, - /* 54*/ { BARCODE_DPLEIT, -1, "1234567890123", "", 50, 1, 135, 270, 116 }, - /* 55*/ { BARCODE_DPLEIT, COMPLIANT_HEIGHT, "1234567890123", "", 50, 1, 135, 270, 116 }, - /* 56*/ { BARCODE_DPIDENT, -1, "12345678901", "", 50, 1, 117, 234, 116 }, - /* 57*/ { BARCODE_DPIDENT, COMPLIANT_HEIGHT, "12345678901", "", 50, 1, 117, 234, 116 }, + /* 54*/ { BARCODE_DPLEIT, -1, "1234567890123", "", 72, 1, 135, 270, 160 }, + /* 55*/ { BARCODE_DPLEIT, COMPLIANT_HEIGHT, "1234567890123", "", 72, 1, 135, 270, 160 }, + /* 56*/ { BARCODE_DPIDENT, -1, "12345678901", "", 72, 1, 117, 234, 160 }, + /* 57*/ { BARCODE_DPIDENT, COMPLIANT_HEIGHT, "12345678901", "", 72, 1, 117, 234, 160 }, /* 58*/ { BARCODE_CODE16K, -1, "1234567890", "", 20, 2, 70, 162, 44 }, /* 59*/ { BARCODE_CODE16K, COMPLIANT_HEIGHT, "1234567890", "", 21, 2, 70, 162, 46 }, /* 60*/ { BARCODE_CODE49, -1, "1234567890", "", 20, 2, 70, 162, 44 }, @@ -244,8 +244,8 @@ static void test_buffer(const testCtx *const p_ctx) { /*119*/ { BARCODE_MAXICODE, COMPLIANT_HEIGHT, "1234567890", "", 165, 33, 30, 299, 298 }, /*120*/ { BARCODE_QRCODE, -1, "1234567890AB", "", 21, 21, 21, 42, 42 }, /*121*/ { BARCODE_QRCODE, COMPLIANT_HEIGHT, "1234567890AB", "", 21, 21, 21, 42, 42 }, - /*122*/ { BARCODE_CODE128B, -1, "1234567890", "", 50, 1, 145, 290, 116 }, - /*123*/ { BARCODE_CODE128B, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 145, 290, 116 }, + /*122*/ { BARCODE_CODE128AB, -1, "1234567890", "", 50, 1, 145, 290, 116 }, + /*123*/ { BARCODE_CODE128AB, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 145, 290, 116 }, /*124*/ { BARCODE_AUSPOST, -1, "12345678901234567890123", "", 8, 3, 133, 266, 16 }, /*125*/ { BARCODE_AUSPOST, COMPLIANT_HEIGHT, "12345678901234567890123", "", 9.5, 3, 133, 266, 19 }, /*126*/ { BARCODE_AUSREPLY, -1, "12345678", "", 8, 3, 73, 146, 16 }, @@ -1477,10 +1477,10 @@ static void test_quiet_zones(const testCtx *const p_ctx) { /* 44*/ { BARCODE_CODABAR, BARCODE_QUIET_ZONES, -1, -1, "A0B", 0, 50, 1, 32, 104, 116, 0 /*set*/, 0, 100, 0, 20 }, /* 45*/ { BARCODE_CODE128, -1, -1, -1, "1234", 0, 50, 1, 57, 114, 116, 1 /*set*/, 0, 100, 0, 4 }, /* 46*/ { BARCODE_CODE128, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 57, 154, 116, 0 /*set*/, 0, 100, 0, 20 }, - /* 47*/ { BARCODE_DPLEIT, -1, -1, -1, "1234", 0, 50, 1, 135, 270, 116, 1 /*set*/, 0, 100, 0, 2 }, - /* 48*/ { BARCODE_DPLEIT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 135, 310, 116, 0 /*set*/, 0, 100, 0, 20 }, - /* 49*/ { BARCODE_DPIDENT, -1, -1, -1, "1234", 0, 50, 1, 117, 234, 116, 1 /*set*/, 0, 100, 0, 2 }, - /* 50*/ { BARCODE_DPIDENT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 117, 274, 116, 0 /*set*/, 0, 100, 0, 20 }, + /* 47*/ { BARCODE_DPLEIT, -1, -1, -1, "1234", 0, 72, 1, 135, 270, 160, 1 /*set*/, 0, 100, 0, 2 }, + /* 48*/ { BARCODE_DPLEIT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 72, 1, 135, 310, 160, 0 /*set*/, 0, 100, 0, 20 }, + /* 49*/ { BARCODE_DPIDENT, -1, -1, -1, "1234", 0, 72, 1, 117, 234, 160, 1 /*set*/, 0, 100, 0, 2 }, + /* 50*/ { BARCODE_DPIDENT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 72, 1, 117, 274, 160, 0 /*set*/, 0, 100, 0, 20 }, /* 51*/ { BARCODE_CODE16K, -1, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 0 /*set*/, 2, 20, 0, 20 }, /* 52*/ { BARCODE_CODE16K, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 0 /*set*/, 2, 20, 0, 20 }, /* 53*/ { BARCODE_CODE16K, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 140, 44, 1 /*set*/, 2, 20, 0, 6 }, @@ -1564,8 +1564,8 @@ static void test_quiet_zones(const testCtx *const p_ctx) { /*131*/ { BARCODE_MAXICODE, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 165, 33, 30, 319, 318, 0 /*set*/, 0, 9, 0, 319 }, /*132*/ { BARCODE_QRCODE, -1, -1, -1, "1234", 0, 21, 21, 21, 42, 42, 1 /*set*/, 0, 2, 0, 14 }, /*133*/ { BARCODE_QRCODE, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 21, 21, 21, 58, 58, 0 /*set*/, 0, 8, 0, 58 }, - /*134*/ { BARCODE_CODE128B, -1, -1, -1, "1234", 0, 50, 1, 79, 158, 116, 1 /*set*/, 0, 100, 0, 4 }, - /*135*/ { BARCODE_CODE128B, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 79, 198, 116, 0 /*set*/, 0, 100, 0, 20 }, + /*134*/ { BARCODE_CODE128AB, -1, -1, -1, "1234", 0, 50, 1, 79, 158, 116, 1 /*set*/, 0, 100, 0, 4 }, + /*135*/ { BARCODE_CODE128AB, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 79, 198, 116, 0 /*set*/, 0, 100, 0, 20 }, /*136*/ { BARCODE_AUSPOST, -1, -1, -1, "12345678", 0, 8, 3, 73, 146, 16, 1 /*set*/, 0, 10, 0, 2 }, /*137*/ { BARCODE_AUSPOST, BARCODE_QUIET_ZONES, -1, -1, "12345678", 0, 8, 3, 73, 186, 28, 0 /*set*/, 0, 28, 0, 20 }, /*138*/ { BARCODE_AUSREPLY, -1, -1, -1, "1234", 0, 8, 3, 73, 146, 16, 1 /*set*/, 0, 10, 0, 2 }, @@ -2045,8 +2045,8 @@ static void test_height(const testCtx *const p_ctx) { /* 50*/ { BARCODE_CODABAR, -1, 1, "A0B", "", 0, 1, 1, 32, 64, 2, "" }, /* 51*/ { BARCODE_CODABAR, -1, 4, "A0B", "", 0, 4, 1, 32, 64, 8, "" }, /* 52*/ { BARCODE_CODABAR, -1, 26, "A0B", "", 0, 26, 1, 32, 64, 52, "" }, - /* 53*/ { BARCODE_CODABAR, COMPLIANT_HEIGHT, 26, "A0B", "", ZINT_WARN_NONCOMPLIANT, 26, 1, 32, 64, 52, "" }, - /* 54*/ { BARCODE_CODABAR, COMPLIANT_HEIGHT, 27, "A0B", "", 0, 27, 1, 32, 64, 54, "" }, + /* 53*/ { BARCODE_CODABAR, COMPLIANT_HEIGHT, 11, "A0B", "", ZINT_WARN_NONCOMPLIANT, 11, 1, 32, 64, 22, "" }, + /* 54*/ { BARCODE_CODABAR, COMPLIANT_HEIGHT, 12, "A0B", "", 0, 12, 1, 32, 64, 24, "" }, /* 55*/ { BARCODE_CODE128, -1, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "" }, /* 56*/ { BARCODE_CODE128, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "" }, /* 57*/ { BARCODE_CODE128, -1, 4, "1234567890", "", 0, 4, 1, 90, 180, 8, "" }, @@ -2188,9 +2188,9 @@ static void test_height(const testCtx *const p_ctx) { /*193*/ { BARCODE_PDF417COMP, -1, 24, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ", "", ZINT_WARN_NONCOMPLIANT, 22.5, 9, 86, 172, 45, "" }, /*194*/ { BARCODE_MAXICODE, -1, 1, "1234567890", "", 0, 16.5, 33, 30, 299, 298, "Fixed size, symbol->height ignored" }, /*195*/ { BARCODE_QRCODE, -1, 1, "ABCD", "", 0, 21, 21, 21, 42, 42, "Fixed width-to-height ratio, symbol->height ignored" }, - /*196*/ { BARCODE_CODE128B, -1, 1, "1234567890", "", 0, 1, 1, 145, 290, 2, "" }, - /*197*/ { BARCODE_CODE128B, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 145, 290, 2, "" }, - /*198*/ { BARCODE_CODE128B, -1, 4, "1234567890", "", 0, 4, 1, 145, 290, 8, "" }, + /*196*/ { BARCODE_CODE128AB, -1, 1, "1234567890", "", 0, 1, 1, 145, 290, 2, "" }, + /*197*/ { BARCODE_CODE128AB, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 145, 290, 2, "" }, + /*198*/ { BARCODE_CODE128AB, -1, 4, "1234567890", "", 0, 4, 1, 145, 290, 8, "" }, /*199*/ { BARCODE_AUSPOST, -1, -1, "12345678901234567890123", "", 0, 8, 3, 133, 266, 16, "" }, /*200*/ { BARCODE_AUSPOST, -1, 1, "12345678901234567890123", "", 0, 2.5, 3, 133, 266, 5, "" }, /*201*/ { BARCODE_AUSPOST, COMPLIANT_HEIGHT, 1, "12345678901234567890123", "", ZINT_WARN_NONCOMPLIANT, 1.5, 3, 133, 266, 3, "" }, diff --git a/backend/tests/test_svg.c b/backend/tests/test_svg.c index 5bbccb6c..9ba33b43 100644 --- a/backend/tests/test_svg.c +++ b/backend/tests/test_svg.c @@ -232,10 +232,13 @@ static void test_outfile(const testCtx *const p_ctx) { symbol.symbology = BARCODE_CODE128; symbol.vector = &vector; - strcpy(symbol.outfile, "nosuch_dir/out.svg"); + strcpy(symbol.outfile, "test_svg_out.svg"); + (void) testUtilRmROFile(symbol.outfile); /* In case lying around from previous fail */ + assert_nonzero(testUtilCreateROFile(symbol.outfile), "svg_plot testUtilCreateROFile(%s) fail (%d: %s)\n", symbol.outfile, errno, strerror(errno)); ret = svg_plot(&symbol, 0); assert_equal(ret, ZINT_ERROR_FILE_ACCESS, "svg_plot ret %d != ZINT_ERROR_FILE_ACCESS (%d) (%s)\n", ret, ZINT_ERROR_FILE_ACCESS, symbol.errtxt); + assert_zero(testUtilRmROFile(symbol.outfile), "svg_plot testUtilRmROFile(%s) != 0 (%d: %s)\n", symbol.outfile, errno, strerror(errno)); symbol.output_options |= BARCODE_STDOUT; diff --git a/backend/tests/test_tif.c b/backend/tests/test_tif.c index 8cf713ef..68da2d56 100644 --- a/backend/tests/test_tif.c +++ b/backend/tests/test_tif.c @@ -96,7 +96,7 @@ static void test_pixel_plot(const testCtx *const p_ctx) { char data_buf[ZINT_MAX_DATA_LEN * 2 + 1]; int have_tiffinfo = testUtilHaveTiffInfo(); - int have_identify = testUtilHaveIdentify(); + const char *const have_identify = testUtilHaveIdentify(); testStart("test_pixel_plot"); @@ -136,7 +136,7 @@ static void test_pixel_plot(const testCtx *const p_ctx) { ret = testUtilVerifyTiffInfo(symbol->outfile, debug); assert_zero(ret, "i:%d tiffinfo %s ret %d != 0\n", i, symbol->outfile, ret); } else if (have_identify && !data[i].no_identify) { - ret = testUtilVerifyIdentify(symbol->outfile, debug); + ret = testUtilVerifyIdentify(have_identify, symbol->outfile, debug); assert_zero(ret, "i:%d identify %s ret %d != 0\n", i, symbol->outfile, ret); } @@ -214,7 +214,7 @@ static void test_print(const testCtx *const p_ctx) { char *text; int have_tiffinfo = testUtilHaveTiffInfo(); - int have_identify = testUtilHaveIdentify(); + const char *const have_identify = testUtilHaveIdentify(); testStart("test_print"); @@ -289,7 +289,7 @@ static void test_print(const testCtx *const p_ctx) { ret = testUtilVerifyTiffInfo(expected_file, debug); assert_zero(ret, "i:%d %s tiffinfo %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret); } else if (have_identify) { - ret = testUtilVerifyIdentify(expected_file, debug); + ret = testUtilVerifyIdentify(have_identify, expected_file, debug); assert_zero(ret, "i:%d %s identify %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret); } } else { @@ -320,10 +320,13 @@ static void test_outfile(const testCtx *const p_ctx) { symbol.bitmap = data; symbol.bitmap_width = symbol.bitmap_height = 1; - strcpy(symbol.outfile, "nosuch_dir/out.tif"); + strcpy(symbol.outfile, "test_tif_out.tif"); + (void) testUtilRmROFile(symbol.outfile); /* In case lying around from previous fail */ + assert_nonzero(testUtilCreateROFile(symbol.outfile), "tif_pixel_plot testUtilCreateROFile(%s) fail (%d: %s)\n", symbol.outfile, errno, strerror(errno)); ret = tif_pixel_plot(&symbol, data); assert_equal(ret, ZINT_ERROR_FILE_ACCESS, "tif_pixel_plot ret %d != ZINT_ERROR_FILE_ACCESS (%d) (%s)\n", ret, ZINT_ERROR_FILE_ACCESS, symbol.errtxt); + assert_zero(testUtilRmROFile(symbol.outfile), "tif_pixel_plot testUtilRmROFile(%s) != 0 (%d: %s)\n", symbol.outfile, errno, strerror(errno)); symbol.output_options |= BARCODE_STDOUT; diff --git a/backend/tests/test_vector.c b/backend/tests/test_vector.c index 45af562a..c4159b65 100644 --- a/backend/tests/test_vector.c +++ b/backend/tests/test_vector.c @@ -188,8 +188,8 @@ static void test_buffer_vector(const testCtx *const p_ctx) { /* 24*/ { BARCODE_GS1_128, "[01]12345678901231", "", 50, 1, 134, 268, 118.900002 }, /* 25*/ { BARCODE_CODABAR, "A00000000B", "", 50, 1, 102, 204, 118.900002 }, /* 26*/ { BARCODE_CODE128, "1234567890", "", 50, 1, 90, 180, 118.900002 }, - /* 27*/ { BARCODE_DPLEIT, "1234567890123", "", 50, 1, 135, 270, 118.900002 }, - /* 28*/ { BARCODE_DPIDENT, "12345678901", "", 50, 1, 117, 234, 118.900002 }, + /* 27*/ { BARCODE_DPLEIT, "1234567890123", "", 72, 1, 135, 270, 162.89999 }, + /* 28*/ { BARCODE_DPIDENT, "12345678901", "", 72, 1, 117, 234, 162.89999 }, /* 29*/ { BARCODE_CODE16K, "1234567890", "", 20, 2, 70, 162, 44 }, /* 30*/ { BARCODE_CODE49, "1234567890", "", 20, 2, 70, 162, 44 }, /* 31*/ { BARCODE_CODE93, "1234567890", "", 50, 1, 127, 254, 118.900002 }, @@ -222,7 +222,7 @@ static void test_buffer_vector(const testCtx *const p_ctx) { /* 58*/ { BARCODE_PDF417COMP, "1234567890", "", 21, 7, 69, 138, 42 }, /* 59*/ { BARCODE_MAXICODE, "1234567890", "", 165, 33, 30, 60, 57.7333984 }, /* 60*/ { BARCODE_QRCODE, "1234567890AB", "", 21, 21, 21, 42, 42 }, - /* 61*/ { BARCODE_CODE128B, "1234567890", "", 50, 1, 145, 290, 118.900002 }, + /* 61*/ { BARCODE_CODE128AB, "1234567890", "", 50, 1, 145, 290, 118.900002 }, /* 62*/ { BARCODE_AUSPOST, "12345678901234567890123", "", 8, 3, 133, 266, 16 }, /* 63*/ { BARCODE_AUSREPLY, "12345678", "", 8, 3, 73, 146, 16 }, /* 64*/ { BARCODE_AUSROUTE, "12345678", "", 8, 3, 73, 146, 16 }, @@ -1175,10 +1175,10 @@ static void test_quiet_zones(const testCtx *const p_ctx) { /* 44*/ { BARCODE_CODABAR, BARCODE_QUIET_ZONES, -1, -1, "A0B", 0, 50, 1, 32, 104, 118.9, 20, 0, 2, 100 }, /* 45*/ { BARCODE_CODE128, -1, -1, -1, "1234", 0, 50, 1, 57, 114, 118.9, 0, 0, 4, 100 }, /* 46*/ { BARCODE_CODE128, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 57, 154, 118.9, 20, 0, 4, 100 }, - /* 47*/ { BARCODE_DPLEIT, -1, -1, -1, "1234", 0, 50, 1, 135, 270, 118.9, 0, 0, 2, 100 }, - /* 48*/ { BARCODE_DPLEIT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 135, 310, 118.9, 20, 0, 2, 100 }, - /* 49*/ { BARCODE_DPIDENT, -1, -1, -1, "1234", 0, 50, 1, 117, 234, 118.9, 0, 0, 2, 100 }, - /* 50*/ { BARCODE_DPIDENT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 117, 274, 118.9, 20, 0, 2, 100 }, + /* 47*/ { BARCODE_DPLEIT, -1, -1, -1, "1234", 0, 72, 1, 135, 270, 162.89999, 0, 0, 2, 144 }, + /* 48*/ { BARCODE_DPLEIT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 72, 1, 135, 310, 162.89999, 20, 0, 2, 144 }, + /* 49*/ { BARCODE_DPIDENT, -1, -1, -1, "1234", 0, 72, 1, 117, 234, 162.89999, 0, 0, 2, 144 }, + /* 50*/ { BARCODE_DPIDENT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 72, 1, 117, 274, 162.89999, 20, 0, 2, 144 }, /* 51*/ { BARCODE_CODE16K, -1, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 20, 2, 6, 19 }, /* 52*/ { BARCODE_CODE16K, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 20, 2, 6, 19 }, /* 53*/ { BARCODE_CODE16K, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 140, 44, 0, 2, 6, 19 }, @@ -1261,8 +1261,8 @@ static void test_quiet_zones(const testCtx *const p_ctx) { /*130*/ { BARCODE_MAXICODE, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 165, 33, 30, 64, 61.733398, 31, 30.866699, 16.430941, 0 }, /*131*/ { BARCODE_QRCODE, -1, -1, -1, "1234", 0, 21, 21, 21, 42, 42, 0, 0, 14, 2 }, /*132*/ { BARCODE_QRCODE, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 21, 21, 21, 58, 58, 8, 8, 14, 2 }, - /*133*/ { BARCODE_CODE128B, -1, -1, -1, "1234", 0, 50, 1, 79, 158, 118.9, 0, 0, 4, 100 }, - /*134*/ { BARCODE_CODE128B, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 79, 198, 118.9, 20, 0, 4, 100 }, + /*133*/ { BARCODE_CODE128AB, -1, -1, -1, "1234", 0, 50, 1, 79, 158, 118.9, 0, 0, 4, 100 }, + /*134*/ { BARCODE_CODE128AB, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 79, 198, 118.9, 20, 0, 4, 100 }, /*135*/ { BARCODE_AUSPOST, -1, -1, -1, "12345678", 0, 8, 3, 73, 146, 16, 0, 0, 2, 10 }, /*136*/ { BARCODE_AUSPOST, BARCODE_QUIET_ZONES, -1, -1, "12345678", 0, 8, 3, 73, 186, 29.333332, 20, 6.6666665, 2, 10 }, /*137*/ { BARCODE_AUSREPLY, -1, -1, -1, "1234", 0, 8, 3, 73, 146, 16, 0, 0, 2, 10 }, @@ -1550,8 +1550,8 @@ static void test_height(const testCtx *const p_ctx) { /* 50*/ { BARCODE_CODABAR, -1, 1, "A0B", "", 0, 1, 1, 32, 64, 2, "" }, /* 51*/ { BARCODE_CODABAR, -1, 4, "A0B", "", 0, 4, 1, 32, 64, 8, "" }, /* 52*/ { BARCODE_CODABAR, -1, 26, "A0B", "", 0, 26, 1, 32, 64, 52, "" }, - /* 53*/ { BARCODE_CODABAR, COMPLIANT_HEIGHT, 26, "A0B", "", ZINT_WARN_NONCOMPLIANT, 26, 1, 32, 64, 52, "" }, - /* 54*/ { BARCODE_CODABAR, COMPLIANT_HEIGHT, 27, "A0B", "", 0, 27, 1, 32, 64, 54, "" }, + /* 53*/ { BARCODE_CODABAR, COMPLIANT_HEIGHT, 11, "A0B", "", ZINT_WARN_NONCOMPLIANT, 11, 1, 32, 64, 22, "" }, + /* 54*/ { BARCODE_CODABAR, COMPLIANT_HEIGHT, 12, "A0B", "", 0, 12, 1, 32, 64, 24, "" }, /* 55*/ { BARCODE_CODE128, -1, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "" }, /* 56*/ { BARCODE_CODE128, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "" }, /* 57*/ { BARCODE_CODE128, -1, 4, "1234567890", "", 0, 4, 1, 90, 180, 8, "" }, @@ -1693,9 +1693,9 @@ static void test_height(const testCtx *const p_ctx) { /*193*/ { BARCODE_PDF417COMP, -1, 24, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ", "", ZINT_WARN_NONCOMPLIANT, 24, 9, 86, 172, 48, "" }, /*194*/ { BARCODE_MAXICODE, -1, 1, "1234567890", "", 0, 16.5, 33, 30, 60, 57.733398, "Fixed size, symbol->height ignored" }, /*195*/ { BARCODE_QRCODE, -1, 1, "ABCD", "", 0, 21, 21, 21, 42, 42, "Fixed width-to-height ratio, symbol->height ignored" }, - /*196*/ { BARCODE_CODE128B, -1, 1, "1234567890", "", 0, 1, 1, 145, 290, 2, "" }, - /*197*/ { BARCODE_CODE128B, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 145, 290, 2, "" }, - /*198*/ { BARCODE_CODE128B, -1, 4, "1234567890", "", 0, 4, 1, 145, 290, 8, "" }, + /*196*/ { BARCODE_CODE128AB, -1, 1, "1234567890", "", 0, 1, 1, 145, 290, 2, "" }, + /*197*/ { BARCODE_CODE128AB, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 145, 290, 2, "" }, + /*198*/ { BARCODE_CODE128AB, -1, 4, "1234567890", "", 0, 4, 1, 145, 290, 8, "" }, /*199*/ { BARCODE_AUSPOST, -1, -1, "12345678901234567890123", "", 0, 8, 3, 133, 266, 16, "" }, /*200*/ { BARCODE_AUSPOST, -1, 1, "12345678901234567890123", "", 0, 2, 3, 133, 266, 4, "" }, /*201*/ { BARCODE_AUSPOST, COMPLIANT_HEIGHT, 1, "12345678901234567890123", "", ZINT_WARN_NONCOMPLIANT, 1.9230771, 3, 133, 266, 3.8461542, "" }, diff --git a/backend/tests/testcommon.c b/backend/tests/testcommon.c index cc8cb7a1..cb4d6e58 100644 --- a/backend/tests/testcommon.c +++ b/backend/tests/testcommon.c @@ -202,7 +202,7 @@ static int validate_int_range(const char src[], int *p_val, int *p_val_end) { for (i = 0; i < length; i++) { if (src[i] < '0' || src[i] > '9') { - if (src[i] != ',') { + if (src[i] != '-') { return 0; } val_end = 0; @@ -236,9 +236,13 @@ void testRun(int argc, char *argv[], testFunction funcs[], int funcs_size) { char *optarg; char *func = NULL; char func_buf[256 + 5]; + int exclude_idx = 0; testCtx ctx; - ctx.index = ctx.index_end = ctx.exclude = ctx.exclude_end = -1; + ctx.index = ctx.index_end = -1; + for (i = 0; i < ZINT_TEST_CTX_EXC_MAX; i++) { + ctx.exclude[i] = ctx.exclude_end[i] = -1; + } ctx.generate = ctx.debug = 0; if (argc) { @@ -303,9 +307,13 @@ void testRun(int argc, char *argv[], testFunction funcs[], int funcs_size) { fprintf(stderr, "testRun: -x exclude value missing, ignored\n"); } else { optarg = argv[++i]; - if (!validate_int_range(optarg, &ctx.exclude, &ctx.exclude_end)) { + if (exclude_idx + 1 == ZINT_TEST_CTX_EXC_MAX) { + fprintf(stderr, "testRun: too many -x exclude values, ignored\n"); + } else if (!validate_int_range(optarg, &ctx.exclude[exclude_idx], &ctx.exclude_end[exclude_idx])) { fprintf(stderr, "testRun: -x exclude value invalid, ignored\n"); - ctx.exclude = ctx.exclude_end = -1; + ctx.exclude[exclude_idx] = ctx.exclude_end[exclude_idx] = -1; + } else { + exclude_idx++; } } } else { @@ -329,6 +337,7 @@ void testRun(int argc, char *argv[], testFunction funcs[], int funcs_size) { /* Call in a dataset loop to determine if a datum should be tested according to -i & -x args */ int testContinue(const testCtx *const p_ctx, const int i) { + int j; if (p_ctx->index != -1) { if (p_ctx->index_end != -1) { if (i < p_ctx->index || (p_ctx->index_end && i > p_ctx->index_end)) { @@ -338,12 +347,12 @@ int testContinue(const testCtx *const p_ctx, const int i) { return 1; } } - if (p_ctx->exclude != -1) { - if (p_ctx->exclude_end != -1) { - if (i >= p_ctx->exclude && (p_ctx->exclude_end == 0 || i <= p_ctx->exclude_end)) { + for (j = 0; j < ZINT_TEST_CTX_EXC_MAX && p_ctx->exclude[j] != -1; j++) { + if (p_ctx->exclude_end[j] != -1) { + if (i >= p_ctx->exclude[j] && (p_ctx->exclude_end[j] == 0 || i <= p_ctx->exclude_end[j])) { return 1; } - } else if (i == p_ctx->exclude) { + } else if (i == p_ctx->exclude[j]) { return 1; } } @@ -1351,7 +1360,7 @@ int testUtilRmDir(const char *dirname) { #endif } -/* Rename a file (Windows compatibility). */ +/* Rename a file (Windows compatibility) */ int testUtilRename(const char *oldpath, const char *newpath) { #ifdef _MSVC int ret = remove(newpath); @@ -1360,6 +1369,37 @@ int testUtilRename(const char *oldpath, const char *newpath) { return rename(oldpath, newpath); } +/* Create read-only file */ +int testUtilCreateROFile(const char *filename) { + FILE *fp = fopen(filename, "w+"); + if (fp == NULL) { + return 0; + } + if (fclose(fp) != 0) { + return 0; + } +#ifdef _WIN32 + if (SetFileAttributesA(filename, GetFileAttributesA(filename) | FILE_ATTRIBUTE_READONLY) == 0) { + return 0; + } +#else + if (chmod(filename, S_IRUSR | S_IRGRP | S_IROTH) != 0) { + return 0; + } +#endif + return 1; +} + +/* Remove read-only file (Windows compatibility) */ +int testUtilRmROFile(const char *filename) { +#ifdef _WIN32 + if (SetFileAttributesA(filename, GetFileAttributesA(filename) & ~FILE_ATTRIBUTE_READONLY) == 0) { + return -1; + } +#endif + return remove(filename); +} + /* Compare 2 PNG files */ int testUtilCmpPngs(const char *png1, const char *png2) { int ret = -1; @@ -1730,12 +1770,19 @@ int testUtilCmpEpss(const char *eps1, const char *eps2) { #endif /* Whether ImageMagick's identify utility available on system */ -int testUtilHaveIdentify(void) { - return system("magick -version " DEV_NULL) == 0; +const char *testUtilHaveIdentify(void) { + static const char *progs[2] = { "magick identify", "identify" }; + if (system("magick -version " DEV_NULL_STDERR) == 0) { + return progs[0]; + } + if (system("identify -version " DEV_NULL_STDERR) == 0) { + return progs[1]; + } + return NULL; } /* Check raster files */ -int testUtilVerifyIdentify(const char *filename, int debug) { +int testUtilVerifyIdentify(const char *const prog, const char *filename, int debug) { char cmd[512 + 128]; if (strlen(filename) > 512) { @@ -1745,12 +1792,12 @@ int testUtilVerifyIdentify(const char *filename, int debug) { if (debug & ZINT_DEBUG_TEST_PRINT) { /* Verbose very noisy though so for quick check just return default output */ if (debug & ZINT_DEBUG_TEST_LESS_NOISY) { - sprintf(cmd, "magick identify %s", filename); + sprintf(cmd, "%s %s", prog, filename); } else { - sprintf(cmd, "magick identify -verbose %s", filename); + sprintf(cmd, "%s -verbose %s", prog, filename); } } else { - sprintf(cmd, "magick identify -verbose %s " DEV_NULL, filename); + sprintf(cmd, "%s -verbose %s " DEV_NULL, prog, filename); } return system(cmd); @@ -1981,7 +2028,7 @@ static const char *testUtilBwippName(int index, const struct zint_symbol *symbol { "maxicode", BARCODE_MAXICODE, 57, 1, 1, 0, 0, 0, }, { "qrcode", BARCODE_QRCODE, 58, 1, 1, 1, 0, 0, }, { "", -1, 59, 0, 0, 0, 0, 0, }, - { "", BARCODE_CODE128B, 60, 0, 0, 0, 0, 0, }, + { "", BARCODE_CODE128AB, 60, 0, 0, 0, 0, 0, }, { "", -1, 61, 0, 0, 0, 0, 0, }, { "", -1, 62, 0, 0, 0, 0, 0, }, { "auspost", BARCODE_AUSPOST, 63, 0, 0, 0, 0, 0, }, @@ -3324,7 +3371,7 @@ static const char *testUtilZXingCPPName(int index, const struct zint_symbol *sym { "MaxiCode", BARCODE_MAXICODE, 57, }, { "QRCode", BARCODE_QRCODE, 58, }, { "", -1, 59, }, - { "Code128", BARCODE_CODE128B, 60, }, + { "Code128", BARCODE_CODE128AB, 60, }, { "", -1, 61, }, { "", -1, 62, }, { "", BARCODE_AUSPOST, 63, }, diff --git a/backend/tests/testcommon.h b/backend/tests/testcommon.h index 3c4ae3c6..6e7f6327 100644 --- a/backend/tests/testcommon.h +++ b/backend/tests/testcommon.h @@ -86,11 +86,12 @@ void testFinish(void); void testSkip(const char *msg); void testReport(void); +#define ZINT_TEST_CTX_EXC_MAX 32 typedef struct s_testCtx { int index; int index_end; - int exclude; - int exclude_end; + int exclude[ZINT_TEST_CTX_EXC_MAX]; + int exclude_end[ZINT_TEST_CTX_EXC_MAX]; int generate; int debug; } testCtx; @@ -163,6 +164,8 @@ int testUtilDirExists(const char *dirname); int testUtilMkDir(const char *dirname); int testUtilRmDir(const char *dirname); int testUtilRename(const char *oldpath, const char *newpath); +int testUtilCreateROFile(const char *filename); +int testUtilRmROFile(const char *filename); int testUtilCmpPngs(const char *file1, const char *file2); int testUtilCmpTxts(const char *txt1, const char *txt2); @@ -170,8 +173,8 @@ int testUtilCmpBins(const char *bin1, const char *bin2); int testUtilCmpSvgs(const char *svg1, const char *svg2); int testUtilCmpEpss(const char *eps1, const char *eps2); -int testUtilHaveIdentify(void); -int testUtilVerifyIdentify(const char *filename, int debug); +const char *testUtilHaveIdentify(void); +int testUtilVerifyIdentify(const char *const prog, const char *filename, int debug); int testUtilHaveLibreOffice(void); int testUtilVerifyLibreOffice(const char *filename, int debug); int testUtilHaveGhostscript(void); diff --git a/backend/tif.c b/backend/tif.c index 7a93e5d9..c64287b5 100644 --- a/backend/tif.c +++ b/backend/tif.c @@ -38,6 +38,7 @@ #include #endif #include "common.h" +#include "output.h" #include "tif.h" #include "tif_lzw.h" @@ -331,7 +332,7 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf) #endif tif_file = stdout; } else { - if (!(tif_file = fopen(symbol->outfile, "wb+"))) { /* '+' as use fseek/ftell() */ + if (!(tif_file = out_fopen(symbol->outfile, "wb+"))) { /* '+' as use fseek/ftell() */ sprintf(symbol->errtxt, "672: Could not open output file (%d: %.30s)", errno, strerror(errno)); return ZINT_ERROR_FILE_ACCESS; } @@ -523,7 +524,11 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf) tags[entries].tag = 0x0128; /* ResolutionUnit */ tags[entries].type = 3; /* SHORT */ tags[entries].count = 1; - tags[entries++].offset = 2; /* Inches */ + if (symbol->dpmm) { + tags[entries++].offset = 3; /* Centimetres */ + } else { + tags[entries++].offset = 2; /* Inches */ + } if (color_map_size) { tags[entries].tag = 0x0140; /* ColorMap */ @@ -571,17 +576,17 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf) total_bytes_put += strip_count * 8; } - /* X Resolution */ - temp32 = 72; + /* XResolution */ + temp32 = symbol->dpmm ? symbol->dpmm : 72; fwrite(&temp32, 4, 1, tif_file); - temp32 = 1; + temp32 = symbol->dpmm ? 10 /*cm*/ : 1; fwrite(&temp32, 4, 1, tif_file); total_bytes_put += 8; - /* Y Resolution */ - temp32 = 72; + /* YResolution */ + temp32 = symbol->dpmm ? symbol->dpmm : 72; fwrite(&temp32, 4, 1, tif_file); - temp32 = 1; + temp32 = symbol->dpmm ? 10 /*cm*/ : 1; fwrite(&temp32, 4, 1, tif_file); total_bytes_put += 8; diff --git a/backend/ultra.c b/backend/ultra.c index f6d53330..75d74987 100644 --- a/backend/ultra.c +++ b/backend/ultra.c @@ -957,7 +957,7 @@ INTERNAL int ultra(struct zint_symbol *symbol, struct zint_seg segs[], const int if (symbol->structapp.id[0]) { int id, id_len; - for (id_len = 0; id_len < 32 && symbol->structapp.id[id_len]; id_len++); + for (id_len = 1; id_len < 6 && symbol->structapp.id[id_len]; id_len++); if (id_len > 5) { /* 282 * 283 + 282 = 80088 */ strcpy(symbol->errtxt, "593: Structured Append ID too long (5 digit maximum)"); diff --git a/backend/zint.h b/backend/zint.h index 9818d4bb..3777ed34 100644 --- a/backend/zint.h +++ b/backend/zint.h @@ -111,6 +111,7 @@ extern "C" { int fontsize; /* Unused */ int input_mode; /* Encoding of input data (see DATA_MODE etc below). Default DATA_MODE */ int eci; /* Extended Channel Interpretation. Default 0 (none) */ + float dpmm; /* Resolution of output in dots per mm (BMP/EMF/PCX/PNG/TIF only). Default 0 (none) */ float dot_size; /* Size of dots used in BARCODE_DOTTY_MODE. Default 0.8 */ float guard_descent; /* Height in X-dimensions that EAN/UPC guard bars descend. Default 5 */ struct zint_structapp structapp; /* Structured Append info. Default structapp.count 0 (none) */ @@ -184,7 +185,8 @@ extern "C" { #define BARCODE_PDF417TRUNC 56 /* Legacy */ #define BARCODE_MAXICODE 57 /* MaxiCode */ #define BARCODE_QRCODE 58 /* QR Code */ -#define BARCODE_CODE128B 60 /* Code 128 (Subset B) */ +#define BARCODE_CODE128AB 60 /* Code 128 (Suppress subset C) */ +#define BARCODE_CODE128B 60 /* Legacy */ #define BARCODE_AUSPOST 63 /* Australia Post Standard Customer */ #define BARCODE_AUSREPLY 66 /* Australia Post Reply Paid */ #define BARCODE_AUSROUTE 67 /* Australia Post Routing */ @@ -322,7 +324,7 @@ extern "C" { #define ZINT_ERROR_USES_ECI 13 /* Error counterpart of warning if WARN_FAIL_ALL set (see below) */ #define ZINT_ERROR_NONCOMPLIANT 14 /* Error counterpart of warning if WARN_FAIL_ALL set */ -/* Warning warn (`symbol->warn_level`) */ +/* Warning level (`symbol->warn_level`) */ #define WARN_DEFAULT 0 /* Default behaviour */ #define WARN_FAIL_ALL 2 /* Treat warning as error */ @@ -443,6 +445,19 @@ extern "C" { ZINT_EXTERN unsigned int ZBarcode_Cap(int symbol_id, unsigned int cap_flag); + /* Return default X-dimension in mm for symbology `symbol_id`. Returns 0 on error (invalid `symbol_id`) */ + ZINT_EXTERN float ZBarcode_Default_Xdim(int symbol_id); + + /* Return the scale to use for `symbol_id` for non-zero X-dimension `x_dim_mm` at `dpmm` dots per mm for + `filetype`. If `dpmm` zero defaults to 12. If `filetype` NULL/empty, defaults to "GIF". Returns 0 on error */ + ZINT_EXTERN float ZBarcode_Scale_From_XdimDp(int symbol_id, float x_dim_mm, float dpmm, const char *filetype); + + /* Reverse of `ZBarcode_Scale_From_XdimDp()` above to estimate the X-dimension or dpmm given non-zero `scale` and + non-zero `x_dim_mm_or_dpmm`. Return value bound to dpmm max not X-dimension max. Returns 0 on error */ + ZINT_EXTERN float ZBarcode_XdimDp_From_Scale(int symbol_id, float scale, float x_dim_mm_or_dpmm, + const char *filetype); + + /* Whether Zint built without PNG support */ ZINT_EXTERN int ZBarcode_NoPng(void); diff --git a/backend_qt/qzint.cpp b/backend_qt/qzint.cpp index a870c09b..2e33319d 100644 --- a/backend_qt/qzint.cpp +++ b/backend_qt/qzint.cpp @@ -105,6 +105,7 @@ namespace Zint { : m_zintSymbol(nullptr), m_symbol(BARCODE_CODE128), m_input_mode(UNICODE_MODE), m_height(0.0f), m_option_1(-1), m_option_2(0), m_option_3(0), + m_dpmm(0.0f), m_scale(1.0f), m_dotty(false), m_dot_size(4.0f / 5.0f), m_guardDescent(5.0f), @@ -122,6 +123,7 @@ namespace Zint { m_reader_init(false), m_warn_level(WARN_DEFAULT), m_debug(false), m_encodedWidth(0), m_encodedRows(0), + m_vectorWidth(0.0f), m_vectorHeight(0.0f), m_error(0), target_size_horiz(0), target_size_vert(0) // Legacy { @@ -133,7 +135,7 @@ namespace Zint { ZBarcode_Delete(m_zintSymbol); } - void QZint::resetSymbol() { + bool QZint::resetSymbol() { m_error = 0; m_lastError.clear(); @@ -142,7 +144,7 @@ namespace Zint { } else if (!(m_zintSymbol = ZBarcode_Create())) { m_error = ZINT_ERROR_MEMORY; m_lastError = QSL("Insufficient memory for Zint structure"); - return; + return false; } m_zintSymbol->symbology = m_symbol; @@ -194,27 +196,32 @@ namespace Zint { m_zintSymbol->input_mode |= GS1NOCHECK_MODE; } m_zintSymbol->eci = m_eci; + m_zintSymbol->dpmm = m_dpmm; m_zintSymbol->dot_size = m_dot_size; m_zintSymbol->guard_descent = m_guardDescent; m_zintSymbol->structapp = m_structapp; m_zintSymbol->warn_level = m_warn_level; m_zintSymbol->debug = m_debug ? ZINT_DEBUG_PRINT : 0; + + return true; } void QZint::encode() { - resetSymbol(); - if (m_segs.empty()) { - QByteArray bstr = m_text.toUtf8(); - /* Note do our own rotation */ - m_error = ZBarcode_Encode_and_Buffer_Vector(m_zintSymbol, (unsigned char *) bstr.data(), bstr.length(), 0); - } else { - struct zint_seg segs[maxSegs]; - std::vector bstrs; - int seg_count = convertSegs(segs, bstrs); - /* Note do our own rotation */ - m_error = ZBarcode_Encode_Segs_and_Buffer_Vector(m_zintSymbol, segs, seg_count, 0); + if (resetSymbol()) { + if (m_segs.empty()) { + QByteArray bstr = m_text.toUtf8(); + /* Note do our own rotation */ + m_error = ZBarcode_Encode_and_Buffer_Vector(m_zintSymbol, (unsigned char *) bstr.data(), + bstr.length(), 0); + } else { + struct zint_seg segs[maxSegs]; + std::vector bstrs; + int seg_count = convertSegs(segs, bstrs); + /* Note do our own rotation */ + m_error = ZBarcode_Encode_Segs_and_Buffer_Vector(m_zintSymbol, segs, seg_count, 0); + } + m_lastError = m_zintSymbol->errtxt; } - m_lastError = m_zintSymbol->errtxt; if (m_error < ZINT_ERROR) { m_borderType = m_zintSymbol->output_options & (BARCODE_BIND | BARCODE_BOX | BARCODE_BIND_TOP); @@ -224,14 +231,17 @@ namespace Zint { m_vwhitespace = m_zintSymbol->whitespace_height; m_encodedWidth = m_zintSymbol->width; m_encodedRows = m_zintSymbol->rows; + m_vectorWidth = m_zintSymbol->vector->width; + m_vectorHeight = m_zintSymbol->vector->height; emit encoded(); } else { - m_encodedWidth = 0; - m_encodedRows = 0; + m_encodedWidth = m_encodedRows = 0; + m_vectorWidth = m_vectorHeight = 0.0f; emit errored(); } } + /* Symbology to use (see BARCODE_XXX) */ int QZint::symbol() const { return m_symbol; } @@ -240,6 +250,7 @@ namespace Zint { m_symbol = symbol; } + /* Input data encoding. Default UNICODE_MODE */ int QZint::inputMode() const { return m_input_mode; } @@ -248,19 +259,23 @@ namespace Zint { m_input_mode = input_mode; } + /* Input data (segment 0 text) */ QString QZint::text() const { return m_text; } + /* Set input data. Note: clears segs */ void QZint::setText(const QString& text) { m_text = text; m_segs.clear(); } + /* Input segments. */ std::vector QZint::segs() const { return m_segs; } + /* Set segments. Note: clears text and sets eci */ void QZint::setSegs(const std::vector& segs) { m_segs = segs; m_text.clear(); @@ -269,6 +284,7 @@ namespace Zint { } } + /* Primary message (Maxicode, Composite) */ QString QZint::primaryMessage() const { return m_primaryMessage; } @@ -277,6 +293,7 @@ namespace Zint { m_primaryMessage = primaryMessage; } + /* Symbol height in X-dimensions */ float QZint::height() const { return m_height; } @@ -285,6 +302,7 @@ namespace Zint { m_height = height; } + /* Symbol-specific options (see "../docs/manual.txt") */ int QZint::option1() const { return m_option_1; } @@ -293,6 +311,7 @@ namespace Zint { m_option_1 = option_1; } + /* Symbol-specific options */ int QZint::option2() const { return m_option_2; } @@ -309,6 +328,7 @@ namespace Zint { m_option_3 = option; } + /* Scale factor when printing barcode, i.e. adjusts X-dimension */ float QZint::scale() const { return m_scale; } @@ -317,6 +337,16 @@ namespace Zint { m_scale = scale; } + /* Resolution of output in dots per mm (BMP/EMF/PCX/PNG/TIF only) */ + float QZint::dpmm() const { + return m_dpmm; + } + + void QZint::setDPMM(float dpmm) { + m_dpmm = dpmm; + } + + /* Dotty mode */ bool QZint::dotty() const { return m_dotty; } @@ -325,6 +355,7 @@ namespace Zint { m_dotty = dotty; } + /* Size of dots used in BARCODE_DOTTY_MODE */ float QZint::dotSize() const { return m_dot_size; } @@ -333,6 +364,7 @@ namespace Zint { m_dot_size = dotSize; } + /* Height in X-dimensions that EAN/UPC guard bars descend */ float QZint::guardDescent() const { return m_guardDescent; } @@ -341,6 +373,7 @@ namespace Zint { m_guardDescent = guardDescent; } + /* Structured Append info */ int QZint::structAppCount() const { return m_structapp.count; } @@ -378,6 +411,7 @@ namespace Zint { memset(&m_structapp, 0, sizeof(m_structapp)); } + /* Foreground colour */ QColor QZint::fgColor() const { return m_fgColor; } @@ -386,6 +420,7 @@ namespace Zint { m_fgColor = fgColor; } + /* Background colour */ QColor QZint::bgColor() const { return m_bgColor; } @@ -394,6 +429,7 @@ namespace Zint { m_bgColor = bgColor; } + /* Use CMYK colour space (Encapsulated PostScript and TIF) */ bool QZint::cmyk() const { return m_cmyk; } @@ -402,6 +438,7 @@ namespace Zint { m_cmyk = cmyk; } + /* Type of border above/below/around barcode */ int QZint::borderType() const { return m_borderType; } @@ -418,6 +455,7 @@ namespace Zint { } } + /* Size of border in X-dimensions */ int QZint::borderWidth() const { return m_borderWidth; } @@ -428,6 +466,7 @@ namespace Zint { m_borderWidth = borderWidth; } + /* Width in X-dimensions of whitespace to left & right of barcode */ int QZint::whitespace() const { return m_whitespace; } @@ -436,6 +475,7 @@ namespace Zint { m_whitespace = whitespace; } + /* Height in X-dimensions of whitespace above & below the barcode */ int QZint::vWhitespace() const { return m_vwhitespace; } @@ -444,6 +484,7 @@ namespace Zint { m_vwhitespace = vWhitespace; } + /* Type of font to use i.e. normal, small, bold or (vector only) small bold */ int QZint::fontSetting() const { return m_fontSetting; } @@ -468,6 +509,7 @@ namespace Zint { } } + /* Show (true) or hide (false) Human Readable Text */ bool QZint::showText() const { return m_show_hrt; } @@ -476,6 +518,7 @@ namespace Zint { m_show_hrt = showText; } + /* Set to true to use GS (Group Separator) instead of FNC1 as GS1 separator (Data Matrix) */ bool QZint::gsSep() const { return m_gssep; } @@ -484,6 +527,8 @@ namespace Zint { m_gssep = gsSep; } + /* Add compliant quiet zones (additional to any specified whitespace) + Note: CODE16K, CODE49, CODABLOCKF, ITF14, EAN/UPC have default quiet zones */ bool QZint::quietZones() const { return m_quiet_zones; } @@ -492,6 +537,7 @@ namespace Zint { m_quiet_zones = quietZones; } + /* Disable quiet zones, notably those with defaults as listed above */ bool QZint::noQuietZones() const { return m_no_quiet_zones; } @@ -500,6 +546,7 @@ namespace Zint { m_no_quiet_zones = noQuietZones; } + /* Warn if height not compliant and use standard height (if any) as default */ bool QZint::compliantHeight() const { return m_compliant_height; } @@ -508,6 +555,7 @@ namespace Zint { m_compliant_height = compliantHeight; } + /* Rotate barcode by angle (degrees 0, 90, 180 and 270) */ int QZint::rotateAngle() const { return m_rotate_angle; } @@ -536,6 +584,7 @@ namespace Zint { } } + /* Extended Channel Interpretation (segment 0 eci) */ int QZint::eci() const { return m_eci; } @@ -552,6 +601,7 @@ namespace Zint { } } + /* Process parentheses as GS1 AI delimiters (instead of square brackets) */ bool QZint::gs1Parens() const { return m_gs1parens; } @@ -560,6 +610,7 @@ namespace Zint { m_gs1parens = gs1Parens; } + /* Do not check validity of GS1 data (except that printable ASCII only) */ bool QZint::gs1NoCheck() const { return m_gs1nocheck; } @@ -568,6 +619,7 @@ namespace Zint { m_gs1nocheck = gs1NoCheck; } + /* Reader Initialisation (Programming) */ bool QZint::readerInit() const { return m_reader_init; } @@ -576,6 +628,7 @@ namespace Zint { m_reader_init = readerInit; } + /* Affects error/warning value returned by Zint API (see `getError()` below) */ int QZint::warnLevel() const { return m_warn_level; } @@ -584,6 +637,7 @@ namespace Zint { m_warn_level = warnLevel; } + /* Debugging flags */ bool QZint::debug() const { return m_debug; } @@ -592,6 +646,7 @@ namespace Zint { m_debug = debug; } + /* Symbol output info set by Zint on successful `render()` */ int QZint::encodedWidth() const { // Read-only, encoded width (no. of modules encoded) return m_encodedWidth; } @@ -600,7 +655,15 @@ namespace Zint { return m_encodedRows; } - /* Legacy */ + float QZint::vectorWidth() const { // Read-only, scaled width + return m_vectorWidth; + } + + float QZint::vectorHeight() const { // Read-only, scaled height + return m_vectorHeight; + } + + /* Legacy property getters/setters */ void QZint::setWidth(int width) { setOption1(width); } int QZint::width() const { return m_option_1; } void QZint::setSecurityLevel(int securityLevel) { setOption2(securityLevel); } @@ -614,6 +677,7 @@ namespace Zint { } QString QZint::error_message() const { return m_lastError; } /* Same as lastError() */ + /* Test capabilities - `ZBarcode_Cap()` */ bool QZint::hasHRT(int symbology) const { return ZBarcode_Cap(symbology ? symbology : m_symbol, ZINT_CAP_HRT); } @@ -670,50 +734,63 @@ namespace Zint { return ZBarcode_Cap(symbology ? symbology : m_symbol, ZINT_CAP_COMPLIANT_HEIGHT); } + /* Whether takes GS1 AI-delimited data */ + bool QZint::takesGS1AIData(int symbology) const { + if (symbology == 0) { + symbology = m_symbol; + } + switch (symbology) { + case BARCODE_GS1_128: + case BARCODE_DBAR_EXP: + case BARCODE_DBAR_EXPSTK: + return true; + break; + default: + return symbology >= BARCODE_EANX_CC && symbology <= BARCODE_DBAR_EXPSTK_CC; + break; + } + } + + /* Error or warning returned by Zint on `render()` or `save_to_file()` */ int QZint::getError() const { return m_error; } + /* Error message returned by Zint on `render()` or `save_to_file()` */ const QString& QZint::lastError() const { return m_lastError; } + /* Whether `lastError()` set */ bool QZint::hasErrors() const { return m_lastError.length(); } - bool QZint::noPng() const { - return ZBarcode_NoPng() == 1; - } - - int QZint::getVersion() const { - return ZBarcode_Version(); - } - bool QZint::save_to_file(const QString& filename) { - resetSymbol(); - strcpy(m_zintSymbol->outfile, filename.toLatin1().left(255)); - if (m_segs.empty()) { - QByteArray bstr = m_text.toUtf8(); - m_error = ZBarcode_Encode_and_Print(m_zintSymbol, (unsigned char *) bstr.data(), bstr.length(), - m_rotate_angle); - } else { - struct zint_seg segs[maxSegs]; - std::vector bstrs; - int seg_count = convertSegs(segs, bstrs); - m_error = ZBarcode_Encode_Segs_and_Print(m_zintSymbol, segs, seg_count, m_rotate_angle); + if (resetSymbol()) { + strcpy(m_zintSymbol->outfile, filename.toLatin1().left(255)); + if (m_segs.empty()) { + QByteArray bstr = m_text.toUtf8(); + m_error = ZBarcode_Encode_and_Print(m_zintSymbol, (unsigned char *) bstr.data(), bstr.length(), + m_rotate_angle); + } else { + struct zint_seg segs[maxSegs]; + std::vector bstrs; + int seg_count = convertSegs(segs, bstrs); + m_error = ZBarcode_Encode_Segs_and_Print(m_zintSymbol, segs, seg_count, m_rotate_angle); + } } if (m_error >= ZINT_ERROR) { m_lastError = m_zintSymbol->errtxt; - m_encodedWidth = 0; - m_encodedRows = 0; + m_encodedWidth = m_encodedRows = 0; + m_vectorWidth = m_vectorHeight = 0.0f; emit errored(); return false; - } else { - return true; } + return true; } + /* Convert `zint_vector_rect->colour` to Qt color */ Qt::GlobalColor QZint::colourToQtColor(int colour) { switch (colour) { case 1: // Cyan @@ -756,7 +833,8 @@ namespace Zint { return i; } - /* Note: legacy argument `mode` is not used */ + /* Encode and display barcode in `paintRect` using `painter`. + Note: legacy argument `mode` is not used */ void QZint::render(QPainter& painter, const QRectF& paintRect, AspectRatioMode /*mode*/) { struct zint_vector_rect *rect; struct zint_vector_hexagon *hex; @@ -923,12 +1001,76 @@ namespace Zint { painter.restore(); } + /* Returns the default X-dimension (`ZBarcode_Default_Xdim()`). + If `symbology` non-zero then used instead of `symbol()` */ + float QZint::defaultXdim(int symbology) const { + return ZBarcode_Default_Xdim(symbology ? symbology : m_symbol); + } + + /* Returns the scale to use for X-dimension `x_dim_mm` at `dpmm` for `filetype`. + If `symbology` non-zero then used instead of `symbol()` */ + float QZint::getScaleFromXdimDp(float x_dim_mm, float dpmm, const QString& fileType, int symbology) const { + return ZBarcode_Scale_From_XdimDp(symbology ? symbology : m_symbol, x_dim_mm, dpmm, fileType.toLatin1()); + } + + /* Reverse of `getScaleFromXdimDp()` above, returning the X-dimension or dot density given the scale `scale`. + If `symbology` non-zero then used instead of `symbol()` */ + float QZint::getXdimDpFromScale(float scale, float x_dim_mm_or_dpmm, const QString& fileType, + int symbology) const { + return ZBarcode_XdimDp_From_Scale(symbology ? symbology : m_symbol, scale, x_dim_mm_or_dpmm, + fileType.toLatin1()); + } + + /* Set `width_x_dim` and `height_x_dim` with estimated size of barcode based on X-dimension `x_dim`. To be called + after a successful `render()`. Returns false if `scale()` zero or render is in error, otherwise true */ + bool QZint::getWidthHeightXdim(float x_dim, float &width_x_dim, float &height_x_dim) const { + + if (m_scale == 0.0f || m_vectorWidth == 0.0f || m_vectorHeight == 0.0f) { + width_x_dim = height_x_dim = 0.0f; + return false; + } + + const float scale = m_scale * 2.0f; + const float width = m_vectorWidth / scale; + const float height = m_vectorHeight / scale; + + if (rotateAngle() == 90 || rotateAngle() == 270) { // Sideways - swop + width_x_dim = (height * x_dim); + height_x_dim = (width * x_dim); + } else { + width_x_dim = (width * x_dim); + height_x_dim = (height * x_dim); + } + + return true; + } + + /* Return the BARCODE_XXX name of `symbology` */ + QString QZint::barcodeName(const int symbology) { + char buf[32]; + if (ZBarcode_BarcodeName(symbology, buf) == 0) { + return QString(buf); + } + return QSL(""); + } + + /* Whether Zint library "libzint" built with PNG support or not */ + bool QZint::noPng() { + return ZBarcode_NoPng() == 1; + } + + /* Version of Zint library "libzint" linked to */ + int QZint::getVersion() { + return ZBarcode_Version(); + } + /* Translate settings into Command Line equivalent. Set `win` to use Windows escaping of data. If `autoHeight` set then `--height=` option will not be emitted. If HEIGHTPERROW_MODE set and non-zero `heightPerRow` given then use that for height instead of internal height */ QString QZint::getAsCLI(const bool win, const bool longOptOnly, const bool barcodeNames, const bool noEXE, - const bool autoHeight, const float heightPerRow, const QString& outfile) const { + const bool autoHeight, const float heightPerRow, const QString& outfile, + const QZintXdimDpVars *xdimdpVars) const { QString cmd(win && !noEXE ? QSL("zint.exe") : QSL("zint")); char name_buf[32]; @@ -1071,7 +1213,9 @@ namespace Zint { arg_int(cmd, "--rows=", option3()); } - if (scale() != 1.0f) { + if (dpmm()) { + arg_scalexdimdp(cmd, "--scalexdimdp", scale(), dpmm(), symbol(), xdimdpVars); + } else if (scale() != 1.0f) { arg_float(cmd, "--scale=", scale()); } @@ -1202,6 +1346,41 @@ namespace Zint { } } } + + void QZint::arg_scalexdimdp(QString& cmd, const char *const opt, const float scale, const float dpmm, + const int symbol, const QZintXdimDpVars *xdimdpVars) { + if (dpmm) { + float resolution = dpmm; + float x_dim; + const char *x_dim_units_str = ""; + const char *resolution_units_str = ""; + if (xdimdpVars && xdimdpVars->set) { + x_dim = xdimdpVars->x_dim; + resolution = xdimdpVars->resolution; + if (xdimdpVars->x_dim_units || xdimdpVars->resolution_units) { + x_dim_units_str = xdimdpVars->x_dim_units ? "in" : "mm"; + resolution_units_str = xdimdpVars->resolution_units ? "dpi" : "dpmm"; + } + } else { + x_dim = ZBarcode_XdimDp_From_Scale(symbol, scale, resolution, nullptr); + } + cmd += QString::asprintf(" %s=%g%s,%g%s", + opt, x_dim, x_dim_units_str, resolution, resolution_units_str); + } + } + + /* Helper to return "GIF"/"SVG"(/"EMF") if `msg` false, "raster"/"vector"(/"EMF") otherwise + (EMF only if `symbol` is MaxiCode) */ + const char *QZintXdimDpVars::getFileType(int symbol, const struct QZintXdimDpVars *vars, bool msg) { + static const char *filetypes[3] = { "GIF", "SVG", "EMF" }; + static const char *msg_types[3] = { "raster", "vector", "EMF" }; + + if (!vars) return ""; + + const int idx = std::max(std::min(symbol == BARCODE_MAXICODE ? vars->filetype_maxicode + : vars->filetype, 2), 0); + return msg ? msg_types[idx] : filetypes[idx]; + } } /* namespace Zint */ /* vim: set ts=4 sw=4 et : */ diff --git a/backend_qt/qzint.h b/backend_qt/qzint.h index efe1fc78..75077beb 100644 --- a/backend_qt/qzint.h +++ b/backend_qt/qzint.h @@ -16,9 +16,15 @@ ***************************************************************************/ /* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * For version, see "../backend/zintconfig.h" + * For documentation, see "../docs/manual.txt" + */ + #ifndef QZINT_H #define QZINT_H +#include #include #include #include "zint.h" @@ -29,148 +35,200 @@ namespace Zint /* QString version of `struct zint_seg` */ class QZintSeg { public: - QString m_text; - int m_eci; + QString m_text; // `seg->source` and `seg->length` + int m_eci; // `seg->eci` QZintSeg(); QZintSeg(const QString& text, const int ECIIndex = 0); // `ECIIndex` is comboBox index (not ECI value) }; +struct QZintXdimDpVars; // Forward reference to Printing Scale settings, see end + /* Interface */ class QZint : public QObject { Q_OBJECT public: - enum AspectRatioMode{ IgnoreAspectRatio = 0, KeepAspectRatio = 1, CenterBarCode = 2 }; /* Legacy - not used */ + /* Legacy - not used */ + enum AspectRatioMode{ IgnoreAspectRatio = 0, KeepAspectRatio = 1, CenterBarCode = 2 }; public: QZint(); ~QZint(); - int symbol() const; /* Symbology */ + /* Symbology to use (see BARCODE_XXX) */ + int symbol() const; // `symbol->symbology` void setSymbol(int symbol); - int inputMode() const; + /* Input data encoding. Default UNICODE_MODE */ + int inputMode() const; // `symbol->input_mode` void setInputMode(int input_mode); + /* Note text/eci and segs are mutally exclusive */ + + /* Input data (segment 0 text) */ QString text() const; - void setText(const QString& text); // Clears segs + /* Set input data. Note: clears segs */ + void setText(const QString& text); + /* Input segments. */ std::vector segs() const; - void setSegs(const std::vector& segs); // Clears text and sets eci + /* Set segments. Note: clears text and sets eci */ + void setSegs(const std::vector& segs); - QString primaryMessage() const; + /* Primary message (Maxicode, Composite) */ + QString primaryMessage() const; // `symbol->primary` void setPrimaryMessage(const QString& primaryMessage); - float height() const; + /* Symbol height in X-dimensions */ + float height() const; // `symbol->height` void setHeight(float height); - int option1() const; + /* Symbol-specific options (see "../docs/manual.txt") */ + int option1() const; // `symbol->option_1` void setOption1(int option_1); - int option2() const; + /* Symbol-specific options */ + int option2() const; // `symbol->option_2` void setOption2(int option); - int option3() const; + /* Symbol-specific options */ + int option3() const; // `symbol->option_3` void setOption3(int option); - float scale() const; + /* Scale factor when printing barcode, i.e. adjusts X-dimension */ + float scale() const; // `symbol->scale` void setScale(float scale); - bool dotty() const; + /* Resolution of output in dots per mm (BMP/EMF/PCX/PNG/TIF only) */ + float dpmm() const; // `symbol->dpmm` + void setDPMM(float dpmm); + + /* Dotty mode */ + bool dotty() const; // `symbol->input_mode | BARCODE_DOTTY_MODE` void setDotty(bool botty); - float dotSize() const; + /* Size of dots used in BARCODE_DOTTY_MODE */ + float dotSize() const; // `symbol->dot_size` void setDotSize(float dot_size); - float guardDescent() const; + /* Height in X-dimensions that EAN/UPC guard bars descend */ + float guardDescent() const; // `symbol->guard_descent` void setGuardDescent(float guardDescent); - int structAppCount() const; - int structAppIndex() const; - QString structAppID() const; + /* Structured Append info */ + int structAppCount() const; // `symbol->structapp.count` + int structAppIndex() const; // `symbol->structapp.index` + QString structAppID() const; // `symbol->structapp.id` void setStructApp(const int count, const int index, const QString& id); void clearStructApp(); - QColor fgColor() const; + /* Foreground colour */ + QColor fgColor() const; // `symbol->fgcolour` void setFgColor(const QColor& fgColor); - QColor bgColor() const; + /* Background colour */ + QColor bgColor() const; // `symbol->bgcolour` void setBgColor(const QColor& bgColor); - bool cmyk() const; + /* Use CMYK colour space (Encapsulated PostScript and TIF) */ + bool cmyk() const; // `symbol->output_options | CMYK_COLOUR` void setCMYK(bool cmyk); - int borderType() const; + /* Type of border above/below/around barcode */ + int borderType() const; // `symbol->output_options | BARCODE_BIND | BARCODE_BOX | BARCODE_BIND_TOP` void setBorderType(int borderTypeIndex); - int borderWidth() const; + /* Size of border in X-dimensions */ + int borderWidth() const; // `symbol->border_width` void setBorderWidth(int borderWidth); - int whitespace() const; + /* Width in X-dimensions of whitespace to left & right of barcode */ + int whitespace() const; // `symbol->whitespace_width` void setWhitespace(int whitespace); - int vWhitespace() const; + /* Height in X-dimensions of whitespace above & below the barcode */ + int vWhitespace() const; // `symbol->whitespace_height` void setVWhitespace(int vWhitespace); - int fontSetting() const; + /* Type of font to use i.e. normal, small, bold or (vector only) small bold */ + int fontSetting() const; // `symbol->output_options | SMALL_TEXT | BOLD_TEXT` void setFontSetting(int fontSettingIndex); // Sets from comboBox index void setFontSettingValue(int fontSetting); // Sets literal value - bool showText() const; + /* Show (true) or hide (false) Human Readable Text */ + bool showText() const; // `symbol->show_hrt` void setShowText(bool showText); - bool gsSep() const; + /* Set to true to use GS (Group Separator) instead of FNC1 as GS1 separator (Data Matrix) */ + bool gsSep() const; // `symbol->output_options | GS1_GS_SEPARATOR` void setGSSep(bool gsSep); - bool quietZones() const; + /* Add compliant quiet zones (additional to any specified whitespace) + Note: CODE16K, CODE49, CODABLOCKF, ITF14, EAN/UPC have default quiet zones */ + bool quietZones() const; // `symbol->output_options | BARCODE_QUIET_ZONES` void setQuietZones(bool quietZones); - bool noQuietZones() const; + /* Disable quiet zones, notably those with defaults as listed above */ + bool noQuietZones() const; // `symbol->output_options | BARCODE_NO_QUIET_ZONES` void setNoQuietZones(bool noQuietZones); - bool compliantHeight() const; + /* Warn if height not compliant and use standard height (if any) as default */ + bool compliantHeight() const; // `symbol->output_options | COMPLIANT_HEIGHT` void setCompliantHeight(bool compliantHeight); + /* Rotate barcode by angle (degrees 0, 90, 180 and 270) */ int rotateAngle() const; void setRotateAngle(int rotateIndex); // Sets from comboBox index void setRotateAngleValue(int rotateAngle); // Sets literal value - int eci() const; + /* Extended Channel Interpretation (segment 0 eci) */ + int eci() const; // `symbol->eci` void setECI(int ECIIndex); // Sets from comboBox index void setECIValue(int eci); // Sets literal value - bool gs1Parens() const; + /* Process parentheses as GS1 AI delimiters (instead of square brackets) */ + bool gs1Parens() const; // `symbol->input_mode | GS1PARENS_MODE` void setGS1Parens(bool gs1Parens); - bool gs1NoCheck() const; + /* Do not check validity of GS1 data (except that printable ASCII only) */ + bool gs1NoCheck() const; // `symbol->input_mode | GS1NOCHECK_MODE` void setGS1NoCheck(bool gs1NoCheck); - bool readerInit() const; + /* Reader Initialisation (Programming) */ + bool readerInit() const; // `symbol->output_options | READER_INIT` void setReaderInit(bool readerInit); - int warnLevel() const; + /* Affects error/warning value returned by Zint API (see `getError()` below) */ + int warnLevel() const; // `symbol->warn_level` void setWarnLevel(int warnLevel); - bool debug() const; + /* Debugging flags */ + bool debug() const; // `symbol->debug` void setDebug(bool debug); + + /* Symbol output info set by Zint on successful `render()` */ int encodedWidth() const; // Read-only, encoded width (no. of modules encoded) int encodedRows() const; // Read-only, no. of rows encoded + float vectorWidth() const; // Read-only, scaled width + float vectorHeight() const; // Read-only, scaled height + /* Legacy property getters/setters */ - void setWidth(int width); /* option_1 */ + void setWidth(int width); /* `symbol->option_1` */ int width() const; - void setSecurityLevel(int securityLevel); /* option_2 */ + void setSecurityLevel(int securityLevel); /* `symbol->option_2` */ int securityLevel() const; void setPdf417CodeWords(int pdf417CodeWords); /* No-op */ int pdf417CodeWords() const; - void setHideText(bool hide); /* setShowText(!hide) */ - void setTargetSize(int width, int height); - QString error_message() const; /* Same as lastError() */ + void setHideText(bool hide); /* `setShowText(!hide)` */ + void setTargetSize(int width, int height); /* No-op */ + QString error_message() const; /* Same as `lastError()` */ - /* Test capabilities - ZBarcode_Cap() */ + + /* Test capabilities - `ZBarcode_Cap()` */ bool hasHRT(int symbology = 0) const; bool isStackable(int symbology = 0) const; bool isExtendable(int symbology = 0) const; @@ -186,20 +244,56 @@ public: bool supportsStructApp(int symbology = 0) const; bool hasCompliantHeight(int symbology = 0) const; + /* Whether takes GS1 AI-delimited data */ + bool takesGS1AIData(int symbology = 0) const; + + + /* Error or warning returned by Zint on `render()` or `save_to_file()` */ int getError() const; - const QString& lastError() const; - bool hasErrors() const; + /* Error message returned by Zint on `render()` or `save_to_file()` */ + const QString& lastError() const; // `symbol->errtxt` - bool save_to_file(const QString& filename); + /* Whether `lastError()` set */ + bool hasErrors() const; // `symbol->errtxt` - /* Note: legacy argument `mode` is not used */ + + /* Encode and print barcode to file `filename`. Only sets `getError()` on error, not on warning */ + bool save_to_file(const QString& filename); // `ZBarcode_Print()` + + /* Encode and display barcode in `paintRect` using `painter`. + Note: legacy argument `mode` is not used */ void render(QPainter& painter, const QRectF& paintRect, AspectRatioMode mode = IgnoreAspectRatio); - /* Whether Zint library "libzint" built with PNG support or not (`ZBarcode_NoPng()`) */ - bool noPng() const; - int getVersion() const; + /* Returns the default X-dimension (`ZBarcode_Default_Xdim()`). + If `symbology` non-zero then used instead of `symbol()` */ + float defaultXdim(int symbology = 0) const; + + /* Returns the scale to use for X-dimension `x_dim_mm` at `dpmm` for `filetype`. + If `symbology` non-zero then used instead of `symbol()` */ + float getScaleFromXdimDp(float x_dim_mm, float dpmm, const QString& fileType, int symbology = 0) const; + // `ZBarcode_Scale_Xdim()` + + /* Reverse of `getScaleFromXdimDp()` above, returning the X-dimension or dot density given the scale `scale`. + If `symbology` non-zero then used instead of `symbol()` */ + float getXdimDpFromScale(float scale, float x_dim_mm_or_dpmm, const QString& fileType, int symbology = 0) const; + // `ZBarcode_XdimDp_From_Scale()` + + /* Set `width_x_dim` and `height_x_dim` with estimated size of barcode based on X-dimension `x_dim`. To be called + after a successful `render()`. Returns false if `scale()` zero or render is in error, otherwise true */ + bool getWidthHeightXdim(float x_dim, float &width_x_dim, float &height_x_dim) const; + + + /* Return the BARCODE_XXX name of `symbology` */ + static QString barcodeName(const int symbology); // `ZBarcode_BarcodeName()` + + /* Whether Zint library "libzint" built with PNG support or not */ + static bool noPng(); // `ZBarcode_NoPng()` + + /* Version of Zint library "libzint" linked to */ + static int getVersion(); // `ZBarcode_Version()` + /* Translate settings into Command Line equivalent. Set `win` to use Windows escaping of data. If `autoHeight` set then `--height=` option will not be emitted. @@ -207,18 +301,20 @@ public: height */ QString getAsCLI(const bool win, const bool longOptOnly = false, const bool barcodeNames = false, const bool noEXE = false, const bool autoHeight = false, const float heightPerRow = 0.0f, - const QString& outfile = "") const; + const QString& outfile = "", const QZintXdimDpVars *xdimdpVars = nullptr) const; signals: - void encoded(); - void errored(); + void encoded(); // Emitted on successful `render()` + void errored(); // Emitted if an error (not warning) occurred on `render()` private: - void resetSymbol(); - void encode(); + bool resetSymbol(); // Reset the symbol structure for encoding using member fields + void encode(); // `ZBarcode_Encode_and_Buffer_Vector()` or `ZBarcode_Encode_Segs_and_Buffer_Vector()` + /* Helper to convert `m_segs` to `struct zint_seg[]` */ int convertSegs(struct zint_seg segs[], std::vector& bstrs); + /* Convert `zint_vector_rect->colour` to Qt color */ static Qt::GlobalColor colourToQtColor(int colour); /* `getAsCLI()` helpers */ @@ -232,6 +328,8 @@ private: static void arg_float(QString& cmd, const char *const opt, const float val, const bool allowZero = false); static void arg_structapp(QString& cmd, const char *const opt, const int count, const int index, const QString& id, const bool win); + static void arg_scalexdimdp(QString& cmd, const char *const opt, const float scale, const float dpmm, + const int symbol, const QZintXdimDpVars *xdimdpVars); private: zint_symbol *m_zintSymbol; @@ -244,6 +342,7 @@ private: int m_option_1; int m_option_2; int m_option_3; + float m_dpmm; float m_scale; bool m_dotty; float m_dot_size; @@ -271,6 +370,8 @@ private: bool m_debug; int m_encodedWidth; int m_encodedRows; + float m_vectorWidth; + float m_vectorHeight; QString m_lastError; int m_error; @@ -278,6 +379,21 @@ private: int target_size_vert; /* Legacy */ }; +/* Printing Scale settings */ +struct QZintXdimDpVars { + double x_dim = 0.0; // X-dimension in `x_dim_units` + int x_dim_units = 0; // 0 for mm, 1 for inches + int resolution = 0; // Dot density in `resolution_units` + int resolution_units = 0; // 0 for dpmm, 1 for dpi + int filetype = 0; // For non-MaxiCode, 0 for GIF (raster), 1 for SVG (vector) + int filetype_maxicode = 0; // For MaxiCode only, 0 for GIF (raster), 1 for SVG (vector), 2 for EMF + int set = 0; // 1 if explicitly set, 0 if just defaults (in which case the struct isn't applicable to `dpmm()`) + + /* Helper to return "GIF"/"SVG"(/"EMF") if `msg` false, "raster"/"vector"(/"EMF") otherwise + (EMF only if `symbol` is MaxiCode) */ + static const char *getFileType(int symbol, const struct QZintXdimDpVars *vars, bool msg = false); +}; + } /* namespace Zint */ /* vim: set ts=4 sw=4 et : */ diff --git a/backend_qt/tests/test_qzint.cpp b/backend_qt/tests/test_qzint.cpp index e4d9734a..3c64e771 100644 --- a/backend_qt/tests/test_qzint.cpp +++ b/backend_qt/tests/test_qzint.cpp @@ -115,6 +115,10 @@ private slots: bc.setScale(scale); QCOMPARE(bc.scale(), scale); + float dpmm = 11.811f; + bc.setDPMM(dpmm); + QCOMPARE(bc.dpmm(), dpmm); + bool dotty = true; bc.setDotty(dotty); QCOMPARE(bc.dotty(), dotty); @@ -260,6 +264,12 @@ private slots: QCOMPARE(bc.encodedWidth(), 0); // Read-only QCOMPARE(bc.encodedRows(), 0); // Read-only + + QCOMPARE(bc.vectorWidth(), 0.0f); // Read-only + QCOMPARE(bc.vectorHeight(), 0.0f); // Read-only + + QCOMPARE(bc.takesGS1AIData(BARCODE_CODE128), false); + QCOMPARE(bc.takesGS1AIData(BARCODE_GS1_128), true); } void setGetECIValueTest_data() @@ -370,10 +380,12 @@ private slots: QTest::addColumn("error_message"); QTest::addColumn("encodedWidth"); QTest::addColumn("encodedRows"); + QTest::addColumn("vectorWidth"); + QTest::addColumn("vectorHeight"); - QTest::newRow("BARCODE_QRCODE") << BARCODE_QRCODE << "1234" << 0 << "" << 21 << 21; + QTest::newRow("BARCODE_QRCODE") << BARCODE_QRCODE << "1234" << 0 << "" << 21 << 21 << 42.0f << 42.0f; if (!m_skipIfFontUsed) { - QTest::newRow("BARCODE_QRCODE no text") << BARCODE_QRCODE << "" << ZINT_ERROR_INVALID_DATA << "Error 778: No input data (segment 0 empty)" << 0 << 0; + QTest::newRow("BARCODE_QRCODE no text") << BARCODE_QRCODE << "" << ZINT_ERROR_INVALID_DATA << "Error 778: No input data (segment 0 empty)" << 0 << 0 << 0.0f << 0.0f; } } @@ -398,6 +410,8 @@ private slots: QFETCH(QString, error_message); QFETCH(int, encodedWidth); QFETCH(int, encodedRows); + QFETCH(float, vectorWidth); + QFETCH(float, vectorHeight); bc.setSymbol(symbology); bc.setText(text); @@ -416,6 +430,8 @@ private slots: QCOMPARE(bc.hasErrors(), getError != 0); QCOMPARE(bc.encodedWidth(), encodedWidth); QCOMPARE(bc.encodedRows(), encodedRows); + QCOMPARE(bc.vectorWidth(), vectorWidth); + QCOMPARE(bc.vectorHeight(), vectorHeight); if (getError) { QCOMPARE(spyEncoded.count(), 0); @@ -476,6 +492,7 @@ private slots: QTest::addColumn("option2"); QTest::addColumn("option3"); QTest::addColumn("scale"); + QTest::addColumn("dpmm"); QTest::addColumn("dotty"); QTest::addColumn("dotSize"); QTest::addColumn("guardDescent"); @@ -503,341 +520,403 @@ private slots: QTest::addColumn("warnLevel"); QTest::addColumn("debug"); + QTest::addColumn("xdimdp_xdim"); + QTest::addColumn("xdimdp_xdim_units"); + QTest::addColumn("xdimdp_resolution"); + QTest::addColumn("xdimdp_resolution_units"); + QTest::addColumn("xdimdp_filetype"); + QTest::addColumn("xdimdp_filetype_maxicode"); + QTest::addColumn("expected_cmd"); QTest::addColumn("expected_win"); QTest::addColumn("expected_longOptOnly"); QTest::addColumn("expected_barcodeNames"); QTest::addColumn("expected_noexe"); + QTest::addColumn("expected_xdimdp"); QTest::newRow("BARCODE_AUSPOST") << true << 0.0f << "" << BARCODE_AUSPOST << DATA_MODE // symbology-inputMode << "12345678" << "" // text-primary - << 30.0f << -1 << 0 << 0 << 1.0f << false << 0.8f // height-dotSize + << 30.0f << -1 << 0 << 0 << 1.0f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << false << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 63 --binary --compliantheight -d '12345678'" << "zint.exe -b 63 --binary --compliantheight -d \"12345678\"" << "zint --barcode=63 --binary --compliantheight --data='12345678'" << "zint -b AUSPOST --binary --compliantheight -d '12345678'" - << "zint -b 63 --binary --compliantheight -d \"12345678\""; + << "zint -b 63 --binary --compliantheight -d \"12345678\"" + << ""; QTest::newRow("BARCODE_AZTEC") << false << 0.0f << "" << BARCODE_AZTEC << UNICODE_MODE // symbology-inputMode << "12345678Ж0%var%" << "" // text-primary - << 0.0f << 1 << 0 << 0 << 4.0f << true << 0.9f // height-dotSize + << 0.0f << 1 << 0 << 0 << 4.0f << 0.0f << true << 0.9f // height-dotSize << 5.0f << 2 << 1 << "as\"dfa'sdf" << QColor(Qt::blue) << QColor(Qt::white) // guardDescent-bgColor << true << 0 << 0 << 2 << 3 << 0 // cmyk-fontSetting << true << false << false << false << false << 0 // showText-rotateAngle << 7 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 92 --cmyk --eci=7 -d '12345678Ж0%var%' --dotsize=0.9 --dotty --fg=0000FF --scale=4" " --secure=1 --structapp='1,2,as\"dfa'\\''sdf' --vwhitesp=3 -w 2" << "zint.exe -b 92 --cmyk --eci=7 -d \"12345678Ж0%var%\" --dotsize=0.9 --dotty --fg=0000FF --scale=4" " --secure=1 --structapp=\"1,2,as\\\"dfa'sdf\" --vwhitesp=3 -w 2" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_C25INTER") << true << 0.0f << "" << BARCODE_C25INTER << UNICODE_MODE // symbology-inputMode << "12345" << "" // text-primary - << 0.0f << -1 << 2 << 0 << 1.0f << false << 0.8f // height-dotSize + << 0.0f << -1 << 2 << 0 << 1.0f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << SMALL_TEXT // cmyk-fontSetting << true << false << false << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 3 --compliantheight -d '12345' --small --vers=2" << "zint.exe -b 3 --compliantheight -d \"12345\" --small --vers=2" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_CHANNEL") << false << 0.0f << "" << BARCODE_CHANNEL << UNICODE_MODE // symbology-inputMode << "453678" << "" // text-primary - << 19.7f << -1 << 7 << 0 << 1.0f << false << 0.8f // height-dotSize + << 19.7f << -1 << 7 << 0 << 1.0f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(255, 255, 255, 0) // guardDescent-bgColor << false << 1 << 2 << 0 << 0 << BOLD_TEXT // cmyk-fontSetting << true << false << true << false << false << 90 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << true // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 140 --bind --bold --border=2 -d '453678' --height=19.7 --nobackground --quietzones" " --rotate=90 --verbose --vers=7" << "zint.exe -b 140 --bind --bold --border=2 -d \"453678\" --height=19.7 --nobackground --quietzones" " --rotate=90 --verbose --vers=7" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_GS1_128_CC") << false << 0.0f << "" << BARCODE_GS1_128_CC << UNICODE_MODE // symbology-inputMode << "[01]12345678901231[15]121212" << "[11]901222[99]ABCDE" // text-primary - << 71.142f << 3 << 0 << 0 << 3.5f << false << 0.8f // height-dotSize + << 71.142f << 3 << 0 << 0 << 3.5f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << false << false << true << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 131 --compliantheight -d '[11]901222[99]ABCDE' --height=71.142 --mode=3 --notext" " --primary='[01]12345678901231[15]121212' --quietzones --scale=3.5" << "zint.exe -b 131 --compliantheight -d \"[11]901222[99]ABCDE\" --height=71.142 --mode=3 --notext" " --primary=\"[01]12345678901231[15]121212\" --quietzones --scale=3.5" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_CODE16K") << false << 11.7f << "" << BARCODE_CODE16K << (UNICODE_MODE | HEIGHTPERROW_MODE) // symbology-inputMode << "12345678901234567890123456789012" << "" // text-primary - << 0.0f << 4 << 0 << 2 << 1.0f << false << 0.8f // height-dotSize + << 0.0f << 4 << 0 << 2 << 1.0f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 1 << 1 << 0 << 0 << SMALL_TEXT // cmyk-fontSetting << true << false << false << true << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 23 --compliantheight -d '12345678901234567890123456789012'" " --height=11.7 --heightperrow --noquietzones --rows=4 --separator=2 --small" << "zint.exe -b 23 --compliantheight -d \"12345678901234567890123456789012\"" " --height=11.7 --heightperrow --noquietzones --rows=4 --separator=2 --small" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_CODE49") << true << 0.0f << "" << BARCODE_CODE49 << UNICODE_MODE // symbology-inputMode << "12345678901234567890" << "" // text-primary - << 30.0f << -1 << 0 << 0 << 1.0f << false << 0.8f // height-dotSize + << 30.0f << -1 << 0 << 0 << 1.0f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << false << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 24 --compliantheight -d '12345678901234567890'" << "zint.exe -b 24 --compliantheight -d \"12345678901234567890\"" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_CODABLOCKF") << true << 0.0f << "" << BARCODE_CODABLOCKF << (DATA_MODE | ESCAPE_MODE) // symbology-inputMode << "T\\n\\xA0t\\\"" << "" // text-primary - << 0.0f << 2 << 5 << 3 << 3.0f << false << 0.8f // height-dotSize + << 0.0f << 2 << 5 << 3 << 3.0f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 2 << 4 << 0 << 0 << 0 // cmyk-fontSetting << true << false << false << false << true << 0 // showText-rotateAngle << 0 << false << false << true << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 74 --binary --border=4 --box --cols=5 --compliantheight -d 'T\\n\\xA0t\\\"' --esc --init" " --rows=2 --scale=3 --separator=3" << "zint.exe -b 74 --binary --border=4 --box --cols=5 --compliantheight -d \"T\\n\\xA0t\\\\\"\" --esc --init" " --rows=2 --scale=3 --separator=3" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_DAFT") << false << 0.0f << "" << BARCODE_DAFT << UNICODE_MODE // symbology-inputMode << "daft" << "" // text-primary - << 9.2f << -1 << 251 << 0 << 1.0f << false << 0.7f // height-dotSize + << 9.2f << -1 << 251 << 0 << 1.0f << 0.0f << false << 0.7f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(0x30, 0x31, 0x32, 0x33) << QColor(0xBF, 0xBE, 0xBD, 0xBC) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << false << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 93 --bg=BFBEBDBC -d 'daft' --fg=30313233 --height=9.2 --vers=251" << "zint.exe -b 93 --bg=BFBEBDBC -d \"daft\" --fg=30313233 --height=9.2 --vers=251" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_DATAMATRIX") << true << 0.0f << "" << BARCODE_DATAMATRIX << GS1_MODE // symbology-inputMode << "[20]12" << "" // text-primary - << 0.0f << -1 << 0 << DM_SQUARE << 1.0f << false << 0.7f // height-dotSize + << 0.0f << -1 << 0 << DM_SQUARE << 1.0f << 0.0f << false << 0.7f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << true << false << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 71 -d '[20]12' --gs1 --gssep --square" << "zint.exe -b 71 -d \"[20]12\" --gs1 --gssep --square" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_DATAMATRIX") << false << 0.0f << "" << BARCODE_DATAMATRIX << (DATA_MODE | ESCAPE_MODE | FAST_MODE) // symbology-inputMode << "ABCDEFGH\\x01I" << "" // text-primary - << 0.0f << -1 << 0 << 0 << 1.0f << false << 0.7f // height-dotSize + << 0.0f << -1 << 0 << 0 << 1.0f << 0.0f << false << 0.7f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << false << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 71 --binary -d 'ABCDEFGH\\x01I' --esc --fast" << "zint.exe -b 71 --binary -d \"ABCDEFGH\\x01I\" --esc --fast" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_DBAR_EXPSTK_CC") << false << 40.8f << "" << BARCODE_DBAR_EXPSTK_CC << (DATA_MODE | HEIGHTPERROW_MODE) // symbology-inputMode << "[91]ABCDEFGHIJKL" << "[11]901222[99]ABCDE" // text-primary - << 0.0f << -1 << 0 << 2 << 1.0f << true << 0.9f // height-dotSize + << 0.0f << -1 << 0 << 2 << 1.0f << 0.0f << true << 0.9f // height-dotSize << 3.0f << 2 << 1 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << false << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 139 --binary --compliantheight -d '[11]901222[99]ABCDE' --height=40.8 --heightperrow" " --primary='[91]ABCDEFGHIJKL' --rows=2" << "zint.exe -b 139 --binary --compliantheight -d \"[11]901222[99]ABCDE\" --height=40.8 --heightperrow" " --primary=\"[91]ABCDEFGHIJKL\" --rows=2" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_DOTCODE") << false << 1.0f << "" << BARCODE_DOTCODE << GS1_MODE // symbology-inputMode << "[20]01" << "" // text-primary - << 30.0f << -1 << 8 << ((0 + 1) << 8) << 1.0f << false << 0.7f // height-dotSize + << 30.0f << -1 << 8 << ((0 + 1) << 8) << 1.0f << 0.0f << false << 0.7f // height-dotSize << 0.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << false << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 115 --cols=8 -d '[20]01' --dotsize=0.7 --gs1 --mask=0" << "zint.exe -b 115 --cols=8 -d \"[20]01\" --dotsize=0.7 --gs1 --mask=0" - << "" << "" << ""; + << "" << "" << "" << ""; + + QTest::newRow("BARCODE_DOTCODE") << false << 1.0f << "" + << BARCODE_DOTCODE << GS1_MODE // symbology-inputMode + << "[20]01" << "" // text-primary + << 30.0f << -1 << 8 << ((0 + 1) << 8) << 1.0f << 0.0f << false << 0.7f // height-dotSize + << 0.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor + << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting + << true << false << false << false << true << 0 // showText-rotateAngle + << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp + << "zint -b 115 --cols=8 -d '[20]01' --dotsize=0.7 --gs1 --mask=0" + << "zint.exe -b 115 --cols=8 -d \"[20]01\" --dotsize=0.7 --gs1 --mask=0" + << "" << "" << "" << ""; + + QTest::newRow("BARCODE_DPD") << true << 0.0f << "" + << BARCODE_DPD << UNICODE_MODE // symbology-inputMode + << "1234567890123456789012345678" << "" // text-primary + << 0.0f << -1 << 0 << 0 << 4.5f << 24.0f << true << 0.8f // height-dotSize + << 0.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor + << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting + << true << false << false << false << true << 0 // showText-rotateAngle + << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.375 << 0 << 600 << 1 << 0 << 0 // xdimdp + << "zint -b 96 --compliantheight -d '1234567890123456789012345678' --scalexdimdp=0.375,24" + << "zint.exe -b 96 --compliantheight -d \"1234567890123456789012345678\" --scalexdimdp=0.375,24" + << "" << "" << "" + << "zint -b 96 --compliantheight -d '1234567890123456789012345678' --scalexdimdp=0.375mm,600dpi"; QTest::newRow("BARCODE_EANX") << true << 0.0f << "" << BARCODE_EANX << UNICODE_MODE // symbology-inputMode << "123456789012+12" << "" // text-primary - << 0.0f << -1 << 8 << 0 << 1.0f << true << 0.8f // height-dotSize + << 0.0f << -1 << 8 << 0 << 1.0f << 0.0f << true << 0.8f // height-dotSize << 0.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << false << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 13 --addongap=8 --compliantheight -d '123456789012+12' --guarddescent=0" << "zint.exe -b 13 --addongap=8 --compliantheight -d \"123456789012+12\" --guarddescent=0" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_GRIDMATRIX") << false << 0.0f << "" << BARCODE_GRIDMATRIX << UNICODE_MODE // symbology-inputMode << "Your Data Here!" << "" // text-primary - << 0.0f << 1 << 5 << 0 << 0.5f << false << 0.8f // height-dotSize + << 0.0f << 1 << 5 << 0 << 0.5f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << true << false << true << 270 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 142 -d 'Your Data Here!' --quietzones --rotate=270 --scale=0.5 --secure=1 --vers=5" << "zint.exe -b 142 -d \"Your Data Here!\" --quietzones --rotate=270 --scale=0.5 --secure=1 --vers=5" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_HANXIN") << false << 0.0f << "" << BARCODE_HANXIN << (UNICODE_MODE | ESCAPE_MODE) // symbology-inputMode << "éβÿ啊\\e\"'" << "" // text-primary - << 30.0f << 2 << 5 << ((0 + 1) << 8) << 1.0f << false << 0.8f // height-dotSize + << 30.0f << 2 << 5 << ((0 + 1) << 8) << 1.0f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << false << false << true << 0 // showText-rotateAngle << 29 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 116 --eci=29 -d 'éβÿ啊\\e\"'\\''' --esc --mask=0 --secure=2 --vers=5" << "zint.exe -b 116 --eci=29 -d \"éβÿ啊\\e\\\"'\" --esc --mask=0 --secure=2 --vers=5" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_HIBC_DM") << false << 10.0f << "" << BARCODE_HIBC_DM << UNICODE_MODE // symbology-inputMode << "1234" << "" // text-primary - << 0.0f << -1 << 8 << DM_DMRE << 1.0f << false << 0.7f // height-dotSize + << 0.0f << -1 << 8 << DM_DMRE << 1.0f << 0.0f << false << 0.7f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << true << false << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 102 -d '1234' --dmre --vers=8" << "zint.exe -b 102 -d \"1234\" --dmre --vers=8" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_HIBC_PDF") << false << 0.0f << "" << BARCODE_HIBC_PDF << (DATA_MODE | HEIGHTPERROW_MODE) // symbology-inputMode << "TEXT" << "" // text-primary - << 3.5f << 3 << 4 << 10 << 10.0f << false << 0.8f // height-dotSize + << 3.5f << 3 << 4 << 10 << 10.0f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 2 << 1 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << true << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 106 --binary --cols=4 -d 'TEXT' --height=3.5 --heightperrow --quietzones" " --rows=10 --scale=10 --secure=3 --structapp=1,2" << "zint.exe -b 106 --binary --cols=4 -d \"TEXT\" --height=3.5 --heightperrow --quietzones" " --rows=10 --scale=10 --secure=3 --structapp=1,2" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_ITF14") << true << 0.0f << "" << BARCODE_ITF14 << UNICODE_MODE // symbology-inputMode << "9212320967145" << "" // text-primary - << 30.0f << -1 << 0 << 0 << 1.0f << false << 0.8f // height-dotSize + << 30.0f << -1 << 0 << 0 << 1.0f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << false << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 89 --compliantheight -d '9212320967145'" << "zint.exe -b 89 --compliantheight -d \"9212320967145\"" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_ITF14") << true << 0.0f << "" << BARCODE_ITF14 << UNICODE_MODE // symbology-inputMode << "9212320967145" << "" // text-primary - << 30.0f << -1 << 0 << 0 << 1.0f << false << 0.8f // height-dotSize + << 30.0f << -1 << 0 << 0 << 1.0f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 1 << 0 << 0 << 0 // cmyk-fontSetting << true << false << false << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 89 --border=1 --compliantheight -d '9212320967145'" << "zint.exe -b 89 --border=1 --compliantheight -d \"9212320967145\"" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_MAXICODE") << true << 0.0f << "" << BARCODE_MAXICODE << (UNICODE_MODE | ESCAPE_MODE) // symbology-inputMode << "152382802840001" << "1Z00004951\\GUPSN\\G06X610\\G159\\G1234567\\G1/1\\G\\GY\\G1 MAIN ST\\GTOWN\\GNY\\R\\E" // text-primary - << 0.0f << -1 << (96 + 1) << 0 << 2.5f << false << 0.8f // height-dotSize + << 0.0f << -1 << (96 + 1) << 0 << 2.5f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << true << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 57 -d '1Z00004951\\GUPSN\\G06X610\\G159\\G1234567\\G1/1\\G\\GY\\G1 MAIN ST\\GTOWN\\GNY\\R\\E'" " --esc --primary='152382802840001' --quietzones --scale=2.5 --scmvv=96" << "zint.exe -b 57 -d \"1Z00004951\\GUPSN\\G06X610\\G159\\G1234567\\G1/1\\G\\GY\\G1 MAIN ST\\GTOWN\\GNY\\R\\E\"" " --esc --primary=\"152382802840001\" --quietzones --scale=2.5 --scmvv=96" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_MICROQR") << false << 0.0f << "" << BARCODE_MICROQR << UNICODE_MODE // symbology-inputMode << "1234" << "" // text-primary - << 30.0f << 2 << 3 << (ZINT_FULL_MULTIBYTE | (3 + 1) << 8) << 1.0f << false << 0.8f // height-dotSize + << 30.0f << 2 << 3 << (ZINT_FULL_MULTIBYTE | (3 + 1) << 8) << 1.0f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << false << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 97 -d '1234' --fullmultibyte --mask=3 --secure=2 --vers=3" << "zint.exe -b 97 -d \"1234\" --fullmultibyte --mask=3 --secure=2 --vers=3" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_QRCODE") << true << 0.0f << "" << BARCODE_QRCODE << GS1_MODE // symbology-inputMode << "(01)12" << "" // text-primary - << 0.0f << 1 << 5 << (ZINT_FULL_MULTIBYTE | (0 + 1) << 8) << 1.0f << false << 0.8f // height-dotSize + << 0.0f << 1 << 5 << (ZINT_FULL_MULTIBYTE | (0 + 1) << 8) << 1.0f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << true << false << true << 0 // showText-rotateAngle << 0 << true << true << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 58 -d '(01)12' --fullmultibyte --gs1 --gs1parens --gs1nocheck --mask=0 --quietzones" " --secure=1 --vers=5" << "zint.exe -b 58 -d \"(01)12\" --fullmultibyte --gs1 --gs1parens --gs1nocheck --mask=0 --quietzones" " --secure=1 --vers=5" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_RMQR") << true << 0.0f << "" << BARCODE_RMQR << UNICODE_MODE // symbology-inputMode << "テ" << "" // text-primary - << 30.0f << -1 << 8 << 0 << 1.0f << false << 0.8f // height-dotSize + << 30.0f << -1 << 8 << 0 << 1.0f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << false << false << true << 180 // showText-rotateAngle << 20 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 145 --eci=20 -d 'テ' --rotate=180 --vers=8" << "zint.exe -b 145 --eci=20 -d \"テ\" --rotate=180 --vers=8" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_ULTRA") << false << 0.0f << "" << BARCODE_ULTRA << (GS1_MODE | GS1PARENS_MODE | GS1NOCHECK_MODE) // symbology-inputMode << "(01)1" << "" // text-primary - << 0.0f << 6 << 2 << 0 << 1.0f << true << 0.8f // height-dotSize + << 0.0f << 6 << 2 << 0 << 1.0f << 0.0f << true << 0.8f // height-dotSize << 5.0f << 2 << 1 << "4" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << false << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 144 -d '(01)1' --gs1 --gs1parens --gs1nocheck --secure=6 --structapp='1,2,4' --vers=2" << "zint.exe -b 144 -d \"(01)1\" --gs1 --gs1parens --gs1nocheck --secure=6 --structapp=\"1,2,4\" --vers=2" - << "" << "" << ""; + << "" << "" << "" << ""; QTest::newRow("BARCODE_UPCE_CC") << true << 0.0f << "out.svg" << BARCODE_UPCE_CC << UNICODE_MODE // symbology-inputMode << "12345670+1234" << "[11]901222[99]ABCDE" // text-primary - << 0.0f << -1 << 0 << 0 << 1.0f << false << 0.8f // height-dotSize + << 0.0f << -1 << 0 << 0 << 1.0f << 0.0f << false << 0.8f // height-dotSize << 6.5f << 0 << 0 << "" << QColor(0xEF, 0x29, 0x29) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << (BOLD_TEXT | SMALL_TEXT) // cmyk-fontSetting << true << false << false << true << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_FAIL_ALL << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 136 --bold --compliantheight -d '[11]901222[99]ABCDE' --fg=EF2929 --guarddescent=6.5" " --noquietzones -o 'out.svg' --primary='12345670+1234' --small --werror" << "zint.exe -b 136 --bold --compliantheight -d \"[11]901222[99]ABCDE\" --fg=EF2929 --guarddescent=6.5" @@ -847,19 +926,21 @@ private slots: << "zint -b UPCE_CC --bold --compliantheight -d '[11]901222[99]ABCDE' --fg=EF2929 --guarddescent=6.5" " --noquietzones -o 'out.svg' --primary='12345670+1234' --small --werror" << "zint -b 136 --bold --compliantheight -d \"[11]901222[99]ABCDE\" --fg=EF2929 --guarddescent=6.5" - " --noquietzones -o \"out.svg\" --primary=\"12345670+1234\" --small --werror"; + " --noquietzones -o \"out.svg\" --primary=\"12345670+1234\" --small --werror" + << ""; QTest::newRow("BARCODE_VIN") << false << 2.0f << "" << BARCODE_VIN << UNICODE_MODE // symbology-inputMode << "12345678701234567" << "" // text-primary - << 20.0f << -1 << 1 << 0 << 1.0f << false << 0.8f // height-dotSize + << 20.0f << -1 << 1 << 0 << 1.0f << 0.0f << false << 0.8f // height-dotSize << 5.0f << 0 << 0 << "" << QColor(Qt::black) << QColor(Qt::white) // guardDescent-bgColor << false << 0 << 0 << 0 << 0 << 0 // cmyk-fontSetting << true << false << false << false << true << 0 // showText-rotateAngle << 0 << false << false << false << WARN_DEFAULT << false // eci-debug + << 0.0 << 0 << 0 << 0 << 0 << 0 // xdimdp << "zint -b 73 -d '12345678701234567' --height=20 --vers=1" << "zint.exe -b 73 -d \"12345678701234567\" --height=20 --vers=1" - << "" << "" << ""; + << "" << "" << "" << ""; } void getAsCLITest() @@ -881,6 +962,7 @@ private slots: QFETCH(int, option2); QFETCH(int, option3); QFETCH(float, scale); + QFETCH(float, dpmm); QFETCH(bool, dotty); QFETCH(float, dotSize); QFETCH(float, guardDescent); @@ -908,11 +990,19 @@ private slots: QFETCH(int, warnLevel); QFETCH(bool, debug); + QFETCH(double, xdimdp_xdim); + QFETCH(int, xdimdp_xdim_units); + QFETCH(int, xdimdp_resolution); + QFETCH(int, xdimdp_resolution_units); + QFETCH(int, xdimdp_filetype); + QFETCH(int, xdimdp_filetype_maxicode); + QFETCH(QString, expected_cmd); QFETCH(QString, expected_win); QFETCH(QString, expected_longOptOnly); QFETCH(QString, expected_barcodeNames); QFETCH(QString, expected_noexe); + QFETCH(QString, expected_xdimdp); bc.setSymbol(symbology); bc.setInputMode(inputMode); @@ -927,6 +1017,7 @@ private slots: bc.setOption2(option2); bc.setOption3(option3); bc.setScale(scale); + bc.setDPMM(dpmm); bc.setDotty(dotty); bc.setDotSize(dotSize); bc.setGuardDescent(guardDescent); @@ -977,6 +1068,16 @@ private slots: autoHeight, heightPerRow, outfile); QCOMPARE(cmd, expected_noexe); } + + if (xdimdp_xdim) { + struct Zint::QZintXdimDpVars vars = { + xdimdp_xdim, xdimdp_xdim_units, xdimdp_resolution, xdimdp_resolution_units, xdimdp_filetype, + xdimdp_filetype_maxicode, 1 /*set*/ + }; + cmd = bc.getAsCLI(false /*win*/, false /*longOptOnly*/, false /*barcodeNames*/, false /*noEXE*/, + autoHeight, heightPerRow, outfile, &vars); + QCOMPARE(cmd, expected_xdimdp); + } } void getAsCLISegsTest() @@ -1017,7 +1118,7 @@ private slots: QCOMPARE(cmd, expected_win); } - void qZintAndLibZintEqual_data() + void qZintAndLibZintEqualTest_data() { QTest::addColumn("symbology"); QTest::addColumn("rotateAngles"); @@ -1030,7 +1131,7 @@ private slots: QTest::newRow("symbology=BARCODE_QRCODE rotateAngles=270 text=Hello%20World") << BARCODE_QRCODE << 270 << "Hello%20World"; } - void qZintAndLibZintEqual() + void qZintAndLibZintEqualTest() { QFETCH(int, symbology); QFETCH(int, rotateAngles); @@ -1064,6 +1165,25 @@ private slots: QFile::remove(fileNameForLibZint); QFile::remove(fileNameForQZint); } + + void barcodeNameTest_data() + { + QTest::addColumn("symbology"); + QTest::addColumn("expected_name"); + + QTest::newRow("BARCODE_MAXICODE") << BARCODE_MAXICODE << "BARCODE_MAXICODE"; + QTest::newRow("BARCODE_CODE128AB") << BARCODE_CODE128AB << "BARCODE_CODE128AB"; + QTest::newRow("BARCODE_CODE128B") << BARCODE_CODE128B << "BARCODE_CODE128AB"; + } + + void barcodeNameTest() + { + QFETCH(int, symbology); + QFETCH(QString, expected_name); + + QString name = Zint::QZint::barcodeName(symbology); + QCOMPARE(name, expected_name); + } }; QTEST_MAIN(TestQZint) diff --git a/backend_tcl/configure.in b/backend_tcl/configure.in index 89df5653..43763cfd 100644 --- a/backend_tcl/configure.in +++ b/backend_tcl/configure.in @@ -14,7 +14,7 @@ # so you can encode the package version directly into the source files. #----------------------------------------------------------------------- -AC_INIT([zint], [2.11.1]) +AC_INIT([zint],[2.11.1]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. @@ -224,4 +224,5 @@ case ${TK_DEFS} in ;; esac -AC_OUTPUT([Makefile]) +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff --git a/backend_tcl/demo/demo.tcl b/backend_tcl/demo/demo.tcl index b61ce7c1..96c1a4cb 100644 --- a/backend_tcl/demo/demo.tcl +++ b/backend_tcl/demo/demo.tcl @@ -31,29 +31,29 @@ proc Generate {} { if {[catch {zint encode [.e get] ::zintimg -barcode [.c get] {*}[.o get]} e]} { tk_messageBox -message $e -title "Zint error" } else { - set w [image width ::zintimg] - set h [image height ::zintimg] - set lw [winfo width .l] - set lh [winfo height .l] - set sx [expr {int(1.0 * $lw / $w)}] - set sy [expr {int(1.0 * $lh / $h)}] - if {$sy < $sx} { - set sx $sy - } - if {$sx <= 0} { - set sx [expr {1.1 * $lw / $w}] - set sy [expr {1.1 * $lh / $h}] - if {$sy < $sx} { - set sx $sy - } - } - ::zintimg blank - ::zintimg configure -width 1 -height 1 - ::zintimg blank - ::zintimg configure -width 0 -height 0 - catch { - zint encode [.e get] ::zintimg -barcode [.c get] -scale $sx {*}[.o get] - } + set w [image width ::zintimg] + set h [image height ::zintimg] + set lw [winfo width .l] + set lh [winfo height .l] + set sx [expr {int(1.0 * $lw / $w)}] + set sy [expr {int(1.0 * $lh / $h)}] + if {$sy < $sx} { + set sx $sy + } + if {$sx <= 0} { + set sx [expr {1.1 * $lw / $w}] + set sy [expr {1.1 * $lh / $h}] + if {$sy < $sx} { + set sx $sy + } + } + ::zintimg blank + ::zintimg configure -width 1 -height 1 + ::zintimg blank + ::zintimg configure -width 0 -height 0 + catch { + zint encode [.e get] ::zintimg -barcode [.c get] -scale $sx {*}[.o get] + } } } pack [label .l -image ::zintimg -bg white] -side top -fill both -expand 1 \ diff --git a/backend_tcl/zint.c b/backend_tcl/zint.c index a2538504..c3ed919c 100644 --- a/backend_tcl/zint.c +++ b/backend_tcl/zint.c @@ -28,6 +28,7 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* SPDX-License-Identifier: BSD-3-Clause */ /* History @@ -151,6 +152,11 @@ - Added BC412 2022-08-20 GL - Added CEPNet +2022-11-10 GL +- Added -bindtop option +2022-12-02 GL +- Added -scalexdimdp option +- Renamed CODE128B to CODE128AB */ #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) @@ -258,7 +264,7 @@ static const char *s_code_list[] = { "PDF417Compact", "MaxiCode", "QR", - "Code128B", + "Code128AB", "AusPost", "AusReply", "AusRoute", @@ -358,7 +364,7 @@ static const int s_code_number[] = { BARCODE_PDF417COMP, BARCODE_MAXICODE, BARCODE_QRCODE, - BARCODE_CODE128B, + BARCODE_CODE128AB, BARCODE_AUSPOST, BARCODE_AUSREPLY, BARCODE_AUSROUTE, @@ -522,6 +528,7 @@ static const char help_message[] = "zint tcl(stub,obj) dll\n" " -rotate angle: Image rotation by 0,90 or 270 degrees\n" " -rows integer: Codablock F, PDF417: number of rows\n" " -scale double: Scale the image to this factor\n" + " -scalexdimdp {xdim ?resolution?}: Scale with X-dimension mm, resolution dpmm\n" " -scmvv integer: Prefix SCM with [)>\\R01\\Gvv (vv is integer) (MaxiCode)\n" " -secure integer: EC Level (Aztec, GridMatrix, HanXin, PDF417, QR, UltraCode)\n" " -segN {eci data}: Set the ECI & data content for segment N where N is 1 to 9\n" @@ -734,6 +741,8 @@ static int Encode(Tcl_Interp *interp, int objc, Tcl_Obj *pSegDataObjs[10] = {0}; Tcl_DString segInputs[10]; struct zint_seg segs[10]; + double xdim = 0.0; + double resolution = 0.0; /*------------------------------------------------------------------------*/ /* >> Check if at least data and object is given and a pair number of */ /* >> options */ @@ -765,7 +774,7 @@ static int Encode(Tcl_Interp *interp, int objc, "-gs1nocheck", "-gs1parens", "-gssep", "-guarddescent", "-height", "-heightperrow", "-init", "-mask", "-mode", "-nobackground", "-noquietzones", "-notext", "-primary", "-quietzones", - "-reverse", "-rotate", "-rows", "-scale", "-scmvv", "-secure", + "-reverse", "-rotate", "-rows", "-scale", "-scalexdimdp", "-scmvv", "-secure", "-seg1", "-seg2", "-seg3", "-seg4", "-seg5", "-seg6", "-seg7", "-seg8", "-seg9", "-separator", "-smalltext", "-square", "-structapp", "-to", "-vers", "-vwhitesp", "-werror", "-whitesp", @@ -777,7 +786,7 @@ static int Encode(Tcl_Interp *interp, int objc, iGS1NoCheck, iGS1Parens, iGSSep, iGuardDescent, iHeight, iHeightPerRow, iInit, iMask, iMode, iNoBackground, iNoQuietZones, iNoText, iPrimary, iQuietZones, - iReverse, iRotate, iRows, iScale, iSCMvv, iSecure, + iReverse, iRotate, iRows, iScale, iScaleXdimDp, iSCMvv, iSecure, iSeg1, iSeg2, iSeg3, iSeg4, iSeg5, iSeg6, iSeg7, iSeg8, iSeg9, iSeparator, iSmallText, iSquare, iStructApp, iTo, iVers, iVWhiteSp, iWError, iWhiteSp @@ -1100,6 +1109,42 @@ static int Encode(Tcl_Interp *interp, int objc, my_symbol->scale = (float)doubleValue; } break; + case iScaleXdimDp: + /* >> Decode the -scalexdimdp parameter as list of xdim ?resolution? */ + { + Tcl_Obj *poParam; + xdim = resolution = 0.0; + if (TCL_OK != Tcl_ListObjLength(interp, + objv[optionPos+1], &lStr)) + { + fError = 1; + } else if ( ! ( lStr == 1 || lStr == 2 ) ) { + Tcl_SetObjResult(interp, + Tcl_NewStringObj( + "option -scalexdimdp not a list of 1 or 2", -1)); + fError = 1; + } else { + if (TCL_OK != Tcl_ListObjIndex(interp, objv[optionPos+1], + 0, &poParam) + || TCL_OK != Tcl_GetDoubleFromObj(interp, poParam, &xdim) + || xdim < 0.0) + { + fError = 1; + } + if (!fError && lStr == 2 && ( + TCL_OK != Tcl_ListObjIndex(interp, objv[optionPos+1], + 1, &poParam) + || TCL_OK != Tcl_GetDoubleFromObj(interp, poParam, &resolution) + || resolution < 0.0)) + { + fError = 1; + } + if (!fError && resolution == 0.0) { + resolution = 12.0; /* Default 12 dpmm (~300 dpi) */ + } + } + } + break; case iBorder: if (intValue < 0 || intValue > 1000) { Tcl_SetObjResult(interp, @@ -1375,6 +1420,16 @@ static int Encode(Tcl_Interp *interp, int objc, my_symbol->option_1 = rows; } } + if (resolution) { + float scale; + if (xdim == 0.0) { + xdim = ZBarcode_Default_Xdim(my_symbol->symbology); + } + scale = ZBarcode_Scale_From_XdimDp(my_symbol->symbology, (float)xdim, (float)resolution, NULL /*filetype*/); + if (scale > 0.0f) { + my_symbol->scale = scale; + } + } /*------------------------------------------------------------------------*/ /* >>> Prepare input dstring and encode it to ECI encoding*/ Tcl_DStringInit(& dsInput); diff --git a/docs/Makefile b/docs/Makefile index 2e29d327..b122be0f 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -19,19 +19,23 @@ IMAGES = \ images/zint.png \ images/zint-qt.png \ images/gui_main.png \ + images/gui_delete.png \ + images/gui_zap.png \ images/gui_menus.png \ images/gui_composite.png \ images/gui_segs.png \ images/gui_aztec.png \ images/gui_appearance.png \ + images/gui_scaling.png \ + images/gui_set_printing_scale.png \ + images/gui_black_eye.png \ + images/gui_white_eye.png \ + images/gui_swap.png \ images/gui_colour.png \ images/gui_data_dialog.png \ images/gui_sequence.png \ images/gui_export.png \ images/gui_cli_equivalent.png \ - images/gui_black_eye.png \ - images/gui_white_eye.png \ - images/gui_swap.png \ images/pdf417_heightperrow.svg \ images/code128_box.svg \ images/qrcode_box.svg \ @@ -77,7 +81,7 @@ IMAGES = \ images/codabar.svg \ images/pharma.svg \ images/code128.svg \ - images/code128b.svg \ + images/code128ab.svg \ images/gs1_128.svg \ images/ean14.svg \ images/nve18.svg \ diff --git a/docs/images/code128b.svg b/docs/images/code128ab.svg similarity index 100% rename from docs/images/code128b.svg rename to docs/images/code128ab.svg diff --git a/docs/images/dpident.svg b/docs/images/dpident.svg index 6f75fd66..4dd360ce 100644 --- a/docs/images/dpident.svg +++ b/docs/images/dpident.svg @@ -1,50 +1,50 @@ - Zint Generated Symbol - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - 912320967127 + 91.23 2.096.712 7 diff --git a/docs/images/dpleit.svg b/docs/images/dpleit.svg index dae8802c..6f74ba3f 100644 --- a/docs/images/dpleit.svg +++ b/docs/images/dpleit.svg @@ -1,55 +1,55 @@ - Zint Generated Symbol - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - 92123209671456 + 92123.209.671.456 diff --git a/docs/images/gui_appearance.png b/docs/images/gui_appearance.png index eac79608653d19d7db059f8f76b7d3436602f99b..3bf525cfbf88c622f1a560aba2b08b724da1e5d7 100644 GIT binary patch literal 348361 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�z!unb-IUr>5zLarbpaoqgp5nB7FD;!O+5lX=Y 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

BrJgYUG9_4 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 literal 309483 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

{Q7>jjhMUt`cB za!1I-n`03L#!=0*g1By3OXlKSRq@2#^ussE2d0MRWgK_Ky#FVJ;Isd_-koiIQcL z7N8>_7ALi`N;w*`)cP}5Pabpfk1oBv3g-ozv@%3?4rw-gwmZv|?yvFHy&QKIZ4$O} zqxsWYvnnM)7%?3A^g1Dq8^cm{lB&Q~Z*iDIV22w47?%DUW&d|B4s8i>gq&V;r;hj zpdf{bro>3u7R7=~s?lKJk7)T3{Xh~ZAe9fy%Vbi;^^}X7^FK4UZ)!YWKX*WYN~lB# zamK~2;5&K6X+A^BvWQtptVDtG(h|#?t5k~_a;CtZ_6zX(1noU~7mwLKI^mgIK>OrV zmN(a!OU22IdUR(sRe2M@lZZ*_>M!H3Q*GxF(m7|;+vTu!&XZP^tLkU`ZDoa(c#Jt? z4C>3*np5L(6@g~y=t&#R8sIn{-G0buBneH4ROK7b-BdF?M1~`xpobfd=o@8}WCG2O zp@`QFX{XJ{RKq4-sA6P7(kMuwOd9Sc2}%)mD&XR3$idct)_IS?!jRBcks33{_;uph z0{Qs`%1a9@WE2WUhzu4fWD3~b4(9pSxU~b?gC#C~k6hqjgqJv@15TS4JiA)ty!;1# z|L`t<_hpskN)lTaXt+dvo=hsv=(0)cRRc%4scri%jpy-gj0nPr{=lbGcNz4Gq!T9P zoJK08pz5!SS@I_eUE>c_Fk%S`>+5*Jq2?&Gzu)5Md!MgQE7VIFO2s0XLY28{nT7cx z`E-o9CeUwa2>gn;C?lf4CyYYEkeP;#`}%@((9>9{I2CKG&n%R&56iGjE*2x% zImfCW)7iS9<94|U14@x3p~!35iAYN$lNIu%d6pIzS(;0s5rLb*tAylo4z0lx4lny0 zANOe&9Q?c>QpW4(N3X|kY2UvYMdS^=Wg#!18}jN$2k9PB%qFnJJ2v%xkEnk{tG309 zoi?NOo3Zw_#X z1r}F|By1C128d`t820G9LmJ&AeY3=dnV>LPpLFpHG|WFbKHl1`{q>t=SLI@Ix1dEG{tgo-LzP?VeSj4idUkoPSHW<9MTf4PeyS0C%!1HV( zkitw>DJ?$)H3r2xm9qwot39rsY_qTCNiD3iv@xQ+SYcF3Q_3dB0HUsA74sw)mPzfr zBxvJRa<3FfN_k~tgAP!Qe}`_Mo!F)f>TB2FTiBB4Se z79gzx!%>M$Hbcs=3C$$2c#3o~P9{BW0B89lw0wqPL6ALZvFnd$`VoTwLUs1&xdBRo zL^4e-pCwnwkyQn80mz6z_{0{&)UWU)s-r9Ws71`9VdIbL*&LtCM;}IM;T5pO9eCxBSx;6 zqOxj|?Obr!>u}ulDGVa=aWMUWVQWC|qQ|h8CcP48F{6`D>KLYpp~lI_{_<>=_c5Mj z6e4|>$Qu#_E{jgC%T|LIeidhajq?05^OXXXf<0lz zg%HKj0*_I(L_hbKv%^=kS_@n{<9Sf(SBx&U>9x8HOGTE}=9ycrQZDHf<5TveL?$u} z2N_bS7#0#|CW((c7r%MQ==>$^<^`wRV^s$D?ub#(qc_ze7!C*>4?lDX!b@u1AqS0s zJKYdJBgTS?KOw{^XT*J@ND}c5w%%AQ_^0n?;1Z6y^sf%N+IzzO_A9pgWxSOKe0Fb< z&G{Tz+rXSK8PQbCWCA;r!j2gz^&Kwv+U!;eH0EMh(U9K3K8@}ogVja;`%iUDTgNa} z6y^QbGrf~x6ybOw!y&kViLPi^ia?(MTwgard;2>}DUg`xW`=BKl>n8`v?}q1a~kz4 zn#U)+*fJ5h6-ui;Hdp6yMg=N`45?(CxEW&L5k(GO=ragR+;|K_HHe9^6pDJYH2B8% z5Fk|)p<(JOF+0LEMl_>1RXPnc@FUjOC|hVffOJAtBGSmkw!U;ZzA zx#}}N3<(1lf7qsXdd_Y$`pJ+lg+(9*dNGC;)6nqooesT=J{j$8~(7luO4K;dG{0i9vB%DbF7&grT8WCW=08yf_?1xK2bAig!%NRCGKVH#!T(@ygY76w5-@4TK`zxbYD( z@(DZ_*Ku)zkRTcZVnX(ip~Jw7@FEC@K7;lMZ{QM!F{Cy-rz*N-jrCuXDH2JAlm$Yj z&^?#1n4@2GDbz3Mc|DpzNYC@gdUd?s3H5H1ZFLoYeudKfBGqz^O2Ha8YLy-`Qt<~J zGRY(5D7L%HhTJym1dnwON4Vikvr?g=#}ZhXJc+nXQU_D{OZsy};Eiy54VuUM>_2_M&dVnC zCv@mV z5km=qoQX}Ui7;Z=cAR7~Nh*~>6QBeUkzK}hs^oLW#CBZTwIRc=JQI0nn4~By- zPP0Z!ce!u`eM3SN5c)&hfkSsF@O@B14}u|{KVsnP#DfrXc75_K95aro8pITVCFFIV zh@a1R{+Rf9Yq$2-Z>p-2NF>I!CEtHtzy!M8E&!=iisj{HHa0d`US6hHEMC9om*zyb zc5AnGYqxf5|GI(a3CO5fY2tJDsb&^Qul2aotWi7K*()*!9a;xY%lGMxTteRm8BI3-3Ywx|nJTfkj%oV%VTkKX{6G@v?;K=u z#8tdz6$ycAXjs_<@k$Xp-N7CBG}ROC^I!1L)lC3v5bqCblkgf-%4{2=#0dmkK>|8P$bm?dA|DtiuydiZrpg07(Ib>98 z;C59~>v0z5V`Pgax~WbYf6X=@dRHbT&`q6GIYWMZj`Z0HomQWNbC1Qe&zdgq1D|%s z;pzgq?i@Kg!+cDmU2%xyxhVIwykKW06zU~e`lbp%76T$Z}?q+=tIhKEk`kl!< zbm(XAlb$aU%Vp5@S&df}go&Zq6w)!ORY|U1=hPi=a;!n?kcnwhAJR(2C_WBUxZd%A0wHcnhzBw;GAljtx+dLu%&&&YM?DkbFnI@NN5rL2qQx}4ey_0w~l^Brnea~w5R zNTt#wGb)xL-pQO2GyW2U5Sr_3UOzAL9aH@_<9YgbEuJR3{yFyiJ?27*ANWMUkWu@R#_G~wTT*k0%;tUuL8XWDO^5Ut_X>gxPd4>Ch7)wcktww}$47yFPZ9I1oGKz?V zxCSrfU(8>{#9v(or*%s`&?uj#k~P!-TLP$3E=zAp)b z83yD#8PCzU!CT-HMIoW8plT{YQLf)01!HEkbaDH28V5U^AD?p498wn|P2PxZh z8>j3%JLK43Kn+4<6y0cACf_4}&U77B72+|SbXp^3J2WDnQ550$0b#F4(7D1L^cbd- zWGh+hObTtH?JH(JP;m1fuE+ln<9Vt_D~Y6d<67VJ!|A_$r0g>2oU!|Ohr=VEwzWic zb%D?B7AWN`R3k?$A7kzFIm&Af7_`o)pC7WfyU*T1owK73PiuQz>{Y0&-(`ON0qgTc z*7F7#Te%reex{#I+3a4wLw)N)bCTnU8_3zHZzpexvw1{iXCr1ie$* zwNrNXFFC&G&~rn)NdYAsv~W*faJAcI>oP+{Mg&rh!Rgt!{Jy}ZXb2;YVx}>T7>U56 zHyjaq4l;@n_#vb2cs(9W>e8-PP@z^>_20DdhY`Bi{s<1-P&KjO+n@<^I6yR>;2i$(GdVk zOG|8QY_PGhL7`BUD*&EBXa;&BhaOLn2p!VtG^tpEbhbo( zp~2<(8I6-I&bANv^KO&62TD4PqQ|M4d5qKo#Y~>nsKxW6GkP02dY(;>fS@^`bJk1eSSnxzr8BL+i>KMaY)h-lO!@Eiim#7x-emW86I zuK@`JNCj0yGdp z6Wi8FrZnuhilR+(f!83geB=D`l$E6zCT6Zgys}0*+r~QRa(>jNoloIqRh(czvp3|t z5vOA>u#(J^H+0h4L|a?R-z1rMi}8G&pb1cQ&@2>H$Mihh(TLDCmc8?;|SRg$mo^9_hpzSb`N5aUkzF2Sfn|LTy--5=O~`Hb&RQ=Fw9asU1uKHr#Q zr4%P0SH}TPMo2<@cf_!MMdR#>dfS5KFZun$yUdqUR4fUxgDzg0k*W^8?H;F;@_Zx-Zc-#9*@5cw|Qutx8EkK-5L@Z!l!p4JpDq8RCv zN!*N3qYlG%omQ*Q$dcF-u>M+Sn74t<>oqW%0=WW1Q!s4}T@MLlgfAsQ5D_{q(Wp=0 zyM(5W8Mn|(a~y}|YbgL3P218h6n{kvCwUcw4ElIPUB}2q|+HBC#g?+EsW!e_Z!9E zaqkKbZ`7oHzQ@tlQyzc6%hSC+qj&~A9wTmm>h|#JEgG$W&M2Zhc`hRPIx5e`Z8_`1 z6AzX`2gO2FbgU>q@x5_zCyEF~gztX*dMtk~<9WJ=6-h8l6e>%sZr)*OE=NM}cApQY zPSkQpYnPm!b$KOcWH#PlJl`mazR7r=_=S-zk*TgRw=&QAyh=GPK?Vfw5O*+7r&6Ml z6zsit&UZhw`N2q_m6xz%7MZk;5GIy54arTf`8*&gD? zaqs^+yA|FBI6mSdBFUIF7>V({Q$Q#`^IJ^8dd)yELAKqJSAgvCkc`_O6pb@n#}8>mqLeJ=Z=Z$4T@|aYZ2CU@X0XY|XF*rBsk)DX-sW z^KZZ6?p%=-15)Z+56xItF_y>7CCOzJV#XWS{Zr4Kl!^W)!Pd+A%g{q6@I?v~i8 z{So)>Eb?df#+e(l2t0JB+ zzLx0!uSDn;rdOpf?x1TncKZ;wu}b&JOZM7}taTzvZAmWKC2Fj2)Y@ZtW0TFM#L(8@ zz^9Zq(FVz}+N+P)U*6`~en|YSL{m+UKL3LGd!Ml|T4mN1jLB6Ep zdJR@OLI1^3DqlQP%#MU;pA6o8(#X1XJS{PQjw2^(AnwV`u%UY3Q~`acY4n(?zxtro+>( zNrYzO)<&sT9BMY07wzjk?YST691t}3*nRSlm*4${@4jDQ#kz&_`G3j1Tl0J|Rc4~3 zlN(5E^#AZv`QOtEjR=(;(Qd7?^z;c2|KTy;txLMKTg=^^V{)`a)fMQSeL719o3e*m z5$E=MF`?q+ z!P|*v_3ESD^Q`HwzokEu&Uo#l_Qu`7t5O?4mMY?2MA&K*_Y$P3k;`dVIf>@jXm$?W zu+V~#u+t+B0lB>=v*s%8gLO_$M%inR zQ3!m>mcZ7;kIn_;={WdE(?;)wgzfGd#vvum61qW5tF7pT9+qa1lNzp}uv{I}x6$o{ zUN5HAN(j0cnJ&-A;ndDABzwDfu+ubwZs{1FgKlL=w~SqyqB=IgTv1ZBE^-p*^I0=2 zbjQIm1(tsO3yoJ^Hox}t{fa(JBUIF)ceKX#@g ze3g@Mf~o>jz3w#6BKS3dWk?)HV9J1YmJno$NWtmj2yxZL!PPfnr=x?ACWdQbxZnY* z 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%0DQ{`53h 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

@^oxw6ojRH+8wNFTH;e1f{f*_JX6I(2*; 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 delta 704 zcmV;x0zdun2FV2>iBL{Q4GJ0x0000DNk~Le0000i0000m2mk;808jhJJ&_?7e*$|+ zL_t(Y$7A^OU{0WcG#3M2z$I-IGWX#hh6l$x-87{HxVd?70&Z>rDQ(a06Au~YbjD~( ziit}|;sFxkVp7_%U2_-$-84CQMF=St;pNnF4`MLTl;jl@;=}I@J|RI~Ni9PLX(=%g zAwE|89%SVc5)qS-Ycv|DP^RFlGj+Wj0P&`V=Ve`&Oqg z12ekfPNEevG4SJX#!C!mkmNy9gAQw?ygR)h6I-MJ0hZ{Vmu<^He?mf%B{qpRJIOH; zO#IvS?AZoR{IZOMvsF!NYYpLS1ug`E8P?Aam|PD zq%B2U)h4ZD%n;(KOwsgi0W8cC$486!^0C@?plN@dVVP#uO47U|L5VH mAVWe;2u^9^uz3&v761V9-(M@P0ED{$0000ze)o^5XOHA2sYYT zd95~ro@Gi4A0Tbg{1kY1M6T@-h-wz{LtqGO%X|R5{PHySfLO-2 zc?%<8q7+{`N@pE-kUgiSMO$i72K41aSLms|SFi!xs|7<~({WK71=N5m6&wRQIU5~| zm5mz(bX8z31!F=Ce2OJ&;)#mKMFg~fRGhCs!*YyY0!U570@r28EBtRP0JALr;moHjjQ{`u07*qoM6N<$ Ef++x+{Qv*} literal 0 HcmV?d00001 diff --git a/docs/images/gui_scaling.png b/docs/images/gui_scaling.png new file mode 100644 index 0000000000000000000000000000000000000000..f008bcf2862b2fb12f84103ac0ae9400cd12878e GIT binary patch literal 439 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ⅅ8M`%m|E7o}Lxi}4!e1jj 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 literal 0 HcmV?d00001 diff --git a/docs/images/gui_swap.png b/docs/images/gui_swap.png index 38236ffc33bf6c2f4ed3320a9d29e4c8ecac964a..064a693cacbefcf864be1c85c5c69c5de6c07ee7 100644 GIT binary patch delta 322 zcmV-I0log>2hIW^iBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^pPPKe*gz` zNliru<_rN14;}={YNP-F0PRUcK~z}7?Uy?a!Y~X#9~^>iNZg=YfJ0PNtUxCYz*Sga z=Snbh0>n(ql1fpPev&j83YI)IwqFw`w&B-h6u{>MSk(BQ0XN_r@~199(W0wz@z~(t z1U!IsK*(v+$Gf6@0-56xEP+(%e*wrVJCHUx*r?z>5T$H2UwKymli{w1;71z(UkHU<=W-HqihQ+w;sSi5WY9M!;2RDz+G+BMB2wmojCqRtPI=u<3Oj6}<^XhS02l8HB^zHNDzxnTb>gUKLA7_;w^7f%<^ UrhZ-x6#xJL07*qoM6N<$f|tXB8vp{Ace+jV)^nxq5VqD~VF z@m8m{Eb942QL-&NUL?SVbUgle{NM42BX>OUm>Zy{9+m2}^&KTH3rW4|$4@%TngpST z$T;-1mIld_&Jy+?ya^!_qSYG}e^mB((Tv5!tG5~|E_GJhNgpnvC=9lN6hh5k2MtjWEvG7@Ut+7ylUM_$$fA`QL(!kkUdP zO4$`e6&yOZf1TR@N{klk0c*f6dXO45oE#ix+B$Y3$SK$n5t7S9G8_#?s_UtLh1Co)ict zw8USFAMr{edObe>sy7Y@QToSSP&6EGvv# zv0NcKm7Y@xvSvq?T~d3t-ov#0*FoAlF+Hjj>v`2-VO3(a?hyzBZ;XYLvZcd{i{ViZ zUaz`stvu%lofR3Cw{r0*D@0fDmZ2@HU_~do9C(ThC6^nH!$8&v#j~jV(u82jFeN*I z>&hXNgnjVG* diff --git a/docs/images/gui_white_eye.png b/docs/images/gui_white_eye.png index 2ef3f8770c66a328a55290200c2003de63e1221d..2a7a197b8496be2ca2a77a7a107a28751f3c12fe 100644 GIT binary patch delta 948 zcmV;l155n42fGI$iBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^pPPKe*gz` zNliru<_rN09x3i@hKv9J16oN$K~z}7?U&C>YgZ7*Ke-7ex@$q9ue8xs3nl?c)y7@v zrY!|6{b8*pO1m!aJw$8&0IU85F`I(A5yTdSM3bQFLZL`%jeWaPVh~I6+J#qhgY!1I zw}<<3FtKk}2kvIh%zWp^nK^Uef1dvD1vX2HpT(YVfPT@4!#MkHF6_+Q~`a zH$Ynaeg!643Gg<7Uf_G+9hKSD)kP!{p}V^qfQyR@3WWlfmzQq+L*Pr`kGn)Z4g6zA z<@5PuYHCUj4-dt%EOC=%S#of2Ad{1m;`8~`Z2S$x+XeqtP3g$Uh@76De@d%VEEXje zi>XfB01K^xFRM|ntgJ}AUYB;MUa!mY^0GS{OSgePwuL)7I%Io$TMJMsl_Z@`OFEsF zv$Hd;-0tqK1OfroiHADy4}m%$fj~g=`FvA@l}bh8@wj+A9>=K1fE z)09vsB!C!(p}iB9Wy#Rckm|%I08i{2Unmr`-e)oyM=_O3J$If=e=VOIgNSf*bE6-bo_~j?h}?OuH`D#p_IzMqK(4Q^Z!JMI8kMW7D{TqN<#JOS zwOUOE2M5&>eEi%coS&c9rf+m~)KLzFLXu1-C7Dc0e}BKjpP8A_>d(&3s^A$l3lG#b zTwh<;W+501YTK}{f3Hv5hHGnUs_X^uin|ma*n`OL_e(C9Yig)ktx6)15W_GWgN9+q z^z^hAJe$qB2hn@FJMu^!#amlj+H{u7WyxeRvbVRVt+|NE&d!c|6n}l&Mg2~FjFy&` z?(`U0mL-dei)zbB!*)ybP2&j_Kw`0&6pO`{!B0+3WO#VkfBhWKx7)H)z*F0Z*Xxyu zi3!Q)^Gz3$TCFD8Y*xm{$K6ps1-`iJO7?nVC3{z8c6N3W4u|RK=>g#U{G8+CV@%U@ z>*s;5fIt81Qu;YiXk#fo0>)p&QtGC+fHB~0;7#D=2EPKFHrDbVfM4$ac^A| delta 945 zcmV;i15W(A2e=0ziBL{Q4GJ0x0000DNk~Le0000i0000m2mk;808jhJJ&_?7e*jBz}pV4#*SFI9|I|(kyL~0{g$&&(9-!<{6C%4EQ7+ zqas~H#b|~Hm;iE)O|hTouKC2Kf7!eY2tJqMq#aG|8f{0)rSm+IWVy0#^^9KTScafe zqKewQcsBBRtB zKVtjh{r!pIvs0@Xe!C)ym2Ez=I(2q<;{JzbeIM7g&AXQeF3!FbbO=O25CPPMm$MfK zM(=KF_5a|8sU^eyfzeQ0f7GFpp&mY@G78kicxZIs?G4c1B_zXC>4i(~YtM@iw_zx6kVBqZ2^ASiBII-R^|^eZgkm5yamzDAZpd&Sn;P@j z>n7J^%L3^o-|2CZ96#+_N(0N1*8*r4Hg$;(xI0aq+nzez#4U_;{^>u12N$Kfe#bj_^%<|D zHf&<`bBESgXedfKl18Tq}lu_NykndwP7bUZguX8+u2svuRGhyeP#X)SKF)oh%u}Q%u3MN zur8OgVS_8ocCC&N#de@pSbH=VxG_C_BQW=9t)RhX-X;J7beIId8v?6mBm zxML2-xGg>LPmSCaQ*i|yDN39oVocRQM$aIl%ESnoEdyxu8rFc|E4x83Y*qlyqur=s zfKt{zH0|R!TdvBIBzKHmtA5S0`Qq+D&oc4#u8A}3?m=(=LNG`8h1g(<0RIaN6#b}( Tz`H#F0000<2SrXqu0mjf{C>|U diff --git a/docs/images/gui_zap.png b/docs/images/gui_zap.png new file mode 100644 index 0000000000000000000000000000000000000000..ee8920ada29100203228ae329eade5ac04a65e58 GIT binary patch literal 533 zcmV+w0_y#VP)Y5Qd+as2~I+ z3aQkjQNc2$1{5TMS{QAt>}>NJthLfAg<4yhAcB&hh<`vU4Sv-ks3}Ba^lT;M7LUu*^t0pyfWZd3?VQ@WBMG3~EaOdOP5HV3dQBK_Doe`OGce-*z~@ToAuu8O z2e1o#)&VKVR=86-CKc2vbF;ufy-wFMsYD_|+{%2ak#vQnL`(vRD?dRg*~(nns~)kT zK>8HpGs=Dfba)j&R{fa#CX8=YDrvrIl<_|;MFGnJqrj`^Wnji@@E*0=yb0r5l~|2x z*s^slT&MzW#CX$Vx%)7t-XPzgm9* XO%uj(!aKRA00000NkvXXu0mjf?GoKu literal 0 HcmV?d00001 diff --git a/docs/manual.pmd b/docs/manual.pmd index 940fedd8..7ef9370f 100644 --- a/docs/manual.pmd +++ b/docs/manual.pmd @@ -1,6 +1,6 @@ % Zint Barcode Generator and Zint Barcode Studio User Manual % Version 2.11.1.9 -% November 2022 +% December 2022 # 1. Introduction @@ -250,6 +250,17 @@ only show barcodes in the drop-down whose names contain the word `"mail"`. Each word entered will match. So typing `"mail post"` will show barcodes whose names contain `"mail"` or `"post"` (or both). +The ellipsis button `"..."` to the right of the data text box invokes the Data +Dialog - see [3.6 Data Dialog] for details. The delete button +![delete](images/gui_delete.png) next to it will clear the data text box and +the ECI (Extended Channel Interpretations) drop-down if set. + +To set the barcode as a Programming Initialisation symbol click the +`"Reader Init"` checkbox. The `"1234.."` button to its right invokes the +Sequence Dialog - see [3.7 Sequence Dialog]. The zap button +![zap](images/gui_zap.png) will clear all data and reset all settings for the +barcode to defaults. + The `"BMP"` and `"SVG"` buttons at the bottom will copy the image to the clipboard in BMP format and SVG format respectively. Further copy-to-clipboard formats are available by clicking the `"Menu"` button, along with @@ -295,23 +306,40 @@ part of a Structured Append sequence of symbols. ![Zint Barcode Studio showing Appearance tab options](images/gui_appearance.png) The Appearance tab can be used to adjust the dimensions and other properties of -the symbol. The `"Height"` value affects the height of symbologies which do not -have a fixed width-to-height ratio, i.e. those other than matrix symbologies. -Boundary bars (`"Border Type"`) can be added and adjusted (`"Border Width"`) and -the size of the saved image (`"Printing Scale"`) can be specified. +the symbol. -## 3.6 Colour Dialog +The `"Height"` value affects the height of symbologies which do not have a fixed +width-to-height ratio, i.e. those other than matrix symbologies. For such +symbologies the `"Automatic Height"` checkbox will be enabled - uncheck this to +manually adjust the height. The `"Compliant Height"` checkbox applies to +symbologies that define a standard height - see [4.4 Adjusting Height]. + +Boundary bars can be added with the `"Border Type"` drop-down and their size +adjusted with `"Border Width"`, and whitespace can be adjusted both horizontally +(first spinbox) and vertically (second spinbox), and also through the +`"Quiet Zones"` checkbox if standard quiet zones are defined for the symbology. + +The size of the saved image can be specified with `"Printing Scale"`, and also +by clicking the ![scaling](images/gui_scaling.png) icon to invoke the "Set +Printing Scale" dialog - see [4.9 Adjusting Image Size] for further details. + +![Adjusting the Print Size](images/gui_set_printing_scale.png) + +The foreground and background colours can be set either using the text boxes +which accept RRGGBBAA hexadecimal values or by clicking the foreground eye +![eye](images/gui_black_eye.png) and background eye +![eye](images/gui_white_eye.png) buttons which invoke a colour picker. ![The colour picker tool](images/gui_colour.png) -A colour dialog is used to adjust the colour of the foreground and background of -the generated image. In the Appearance tab click on the foreground eye -![eye](images/gui_black_eye.png) or background eye -![eye](images/gui_white_eye.png) button respectively. The colours can be reset -to black-on-white using the `"Reset"` button, and exchanged one for the other -using the swap ![swap](images/gui_swap.png) button next to it. +(Note that to change the colours visually, the luminence slider, the long narrow +column on the right, must be adjusted.) -## 3.7 Data Dialog +The colours can be reset to black-on-white using the `"Reset"` button, and +exchanged one for the other using the swap ![swap](images/gui_swap.png) button +next to it. + +## 3.6 Data Dialog ![Entering longer text input](images/gui_data_dialog.png) @@ -329,7 +357,7 @@ box any separate lines in the data will be escaped as `'\n'` and the carriage returns (`CR`) or `CR+LF` pairs, and behaves the same on both Windows and Unix. (For details on escape sequences, see [4.1 Inputting Data].) -## 3.8 Sequence Dialog +## 3.7 Sequence Dialog ![Creating a sequence of barcode symbols](images/gui_sequence.png) @@ -351,7 +379,7 @@ meanings as given below: Table: {#tbl:sequence_format_characters tag=": Sequence Format Characters"} -## 3.9 Export Dialog +## 3.8 Export Dialog ![Setting filenames for an exported sequence of barcode symbols](images/gui_export.png) @@ -361,7 +389,7 @@ Dialog sets the parameters for exporting a sequence of barcode images. Here you can set the filename and the output image format. Note that the symbology, colour and other formatting information are taken from the main window. -## 3.10 CLI Equivalent Dialog +## 3.9 CLI Equivalent Dialog ![CLI Equivalent Dialog](images/gui_cli_equivalent.png) @@ -510,6 +538,13 @@ for the other supported file types: zint -o there.eps -d "This Text" ``` +The filename can contain directories and sub-directories also, which will be +created if they don't already exist: + +```bash +zint -o "dir/subdir/filename.eps" -d "This Text" +``` + ## 4.3 Selecting Barcode Type Selecting which type of barcode you wish to produce (i.e. which symbology to @@ -613,7 +648,7 @@ Value 58 `BARCODE_QRCODE` QR Code - 60 `BARCODE_CODE128B` Code 128 (Subset B) + 60 `BARCODE_CODE128AB` Code 128 (Suppress subset C) 63 `BARCODE_AUSPOST` Australia Post Standard Customer @@ -929,11 +964,11 @@ The scale of the image can be altered using the `--scale` option followed by a multiple of the default X-dimension. The scale is multiplied by 2 (with the exception of MaxiCode) before being applied. The default scale is 1. -For MaxiCode, the scale is multiplied by 10 for raster output, by 20 for EMF +For MaxiCode, the scale is multiplied by 10 for raster output, by 40 for EMF vector output, and by 2 otherwise (non-EMF vector output). For raster output, the default X-dimension is 2 pixels (except for MaxiCode, see -[4.9.2 MaxiCode Raster Scaling] below). For example for PNG images a scale of 5 +[4.9.3 MaxiCode Raster Scaling] below). For example for PNG images a scale of 5 will increase the X-dimension to 10 pixels. Scales for raster output should be given in increments of 0.5, i.e. 0.5, 1, 1.5, 2, 2.5, 3, 3.5, etc., to avoid the X-dimension varying across the symbol due to interpolation. 0.5 increments are @@ -946,63 +981,73 @@ Dots]). The minimum scale for vector output is 0.1, giving a minimum X-dimension of 0.2. -The maximum scale for both raster and vector is 100. +The maximum scale for both raster and vector is 200. -### 4.9.1 Scaling Example +### 4.9.1 Scaling by X-dimension and Resolution + +An alternative way to specify the scale which takes these details into account +is to use the `--scalexdimdp` option, which has the format + +``` +--scalexdimdp=X[,R] +``` + +where `X` is the X-dimension (in mm by default) and `R` is the resolution (in +dpmm, dots per mm, by default). `R` is optional, and defaults to 12 dpmm, and +`X` may be zero, in which case it uses a symbology-specific default. The units +may be given in inches for `X` by appending `"in"`, and in dpi (dots per inch) +for `R` by appending `"dpi"`. For example + +```bash +zint -d "1234" --scalexdimdp=0.013in,300dpi +``` + +Explicit metric units may also be given by appending `"mm"` and `"dpmm"` as +appropriate, and may be mixed with U.S. units: + +```bash +zint -d "1234" --scalexdimdp=0.33mm,300dpi +``` + +### 4.9.2 Scaling Example The GS1 General Specifications Section 5.2.6.6 'Symbol dimensions at nominal size' gives an example of an EAN-13 barcode using the X-dimension of 0.33mm. To -print that example as a PNG at 12 dots per mm (dpmm), the equivalent of 300 dots -per inch (`dpi = dpmm * 25.4`), specify a scale of 2, since `0.33 * 12 = 3.96` -pixels, or 4 pixels rounding to the nearest pixel: +print that example as a PNG at 12 dpmm, the approximate equivalent of 300 dpi +(`dpi = dpmm * 25.4`), specify a scale of 2, since `0.33 * 12 = 3.96` pixels, or +4 pixels rounding to the nearest pixel: ```bash zint -b EANX -d "501234567890" --compliantheight --scale=2 ``` -This will result in output of 38.27mm x 26.08mm (WxH) at 300 dpi. The following -table shows the scale to use (in 0.5 increments) depending on the dpmm desired, -for a target X-dimension of 0.33mm: +This will result in output of 37.29mm x 25.56mm (WxH) at 12 dpmm. The same +result can be achieved using the `--scalexdimdp` option with -dpmm dpi scale ----- ---- ----- - 6 150 1 - 8 200 1.5 - 12 300 2 - 16 400 3 - 24 600 4 - 47 1200 8 - 95 2400 15.5 -189 4800 31 +```bash +zint -b EANX -d "501234567890" --compliantheight --scalexdimdp=0 +``` -Table: {#tbl:scaling_xdim_0_33mm tag=": Scaling for X-dimension 0.33mm"} +as 0.33mm is the default X-dimension for EAN, and 12 dpmm the default +resolution. -### 4.9.2 MaxiCode Raster Scaling +### 4.9.3 MaxiCode Raster Scaling For MaxiCode symbols, which use hexagons, the scale for raster output is -multiplied by 10 before being applied. The minimum scale is 0.2, so the minimum -X-dimension is 2 pixels. +multiplied by 10 before being applied. The 0.5 increment recommended for normal +raster output does not apply. + +The minimum scale is 0.2, so the minimum X-dimension is 2 pixels. However scales +below 0.5 are not recommended and may produce symbols that are not within the +following size ranges. MaxiCode symbols have fixed size ranges of 24.82mm to 27.93mm in width, and -23.71mm to 26.69mm in height, excluding quiet zones. The following table shows -the scale to use depending on the dpmm desired, with dpi equivalents: +23.71mm to 26.69mm in height, excluding quiet zones. The default X-dimension is +0.88mm. For example, to output at the default X-dimension at 600 dpi specify: -dpmm dpi scale ----- ---- ----- - 6 150 0.5 - 8 200 0.7 - 12 300 1 - 16 400 1.4 - 24 600 2.1 - 47 1200 4.1 - 95 2400 8.2 -189 4800 16.4 - -Table: {#tbl:maxicode_raster_scaling tag=": MaxiCode Raster Scaling"} - -Note that the 0.5 increment recommended for normal raster output does not apply. -Scales below 0.5 are not recommended and may produce symbols that are not within -the minimum/maximum size ranges. +```bash +zint -b MAXICODE -d "MaxiCode (19 chars)" --scalexdimdp=0,600dpi +``` ## 4.10 Input Modes @@ -1270,6 +1315,16 @@ Input Filenames Generated Table: {#tbl:batch_filename_examples tag=": Batch Filename Examples"} +The special characters can span directories also, which is useful when creating +a large number of barcodes: + +Input Filenames Generated +-------------------- ------------------------------------------------------ +`-o dir~/file~~~.svg` `dir0/file001.svg`, `dir0/file002.svg`, ... + , `dir0/file999.svg`, `dir1/file000.svg`, ... + +Table: {#tbl:batch_dir_examples tag=": Batch Directory Examples"} + ## 4.12 Direct Output The finished image files can be output directly to stdout for use as part of a @@ -1731,7 +1786,11 @@ Variable Name Type Meaning Default Value `eci` integer Extended Channel 0 (none) Interpretation code. -`dot_size` float Diameter of dots used in 4.0 / 5.0 +`dpmm` float Resolution of output in dots 0 (none) + per mm (BMP/EMF/PCX/PNG/TIF + only). + +`dot_size` float Diameter of dots used in 0.8 dotty mode. `guard_descent` float Height of guard bar 5.0 @@ -2142,7 +2201,53 @@ int main(int argc, char **argv) A maximum of 256 segments may be specified. Use of multiple segments with GS1 data is not currently supported. -## 5.12 Verifying Symbology Availability +## 5.12 Scaling Helpers + +To help with scaling the output, the following three function are available: + +```c +float ZBarcode_Default_Xdim(int symbol_id); + +float ZBarcode_Scale_From_XdimDp(int symbol_id, float x_dim_mm, float dpmm, + const char *filetype) { + +float ZBarcode_XdimDP_From_Scale(int symbol_id, float scale, + float x_dim_mm_or_dpmm, const char *filetype); +``` + +The first `ZBarcode_Default_Xdim()` returns the default X-dimension suggested by +Zint for symbology `symbol_id`. + +The second `ZBarcode_Scale_From_XdimDp()` returns the scale to use to output to +a file of type `filetype` with X-dimension `x_dim_mm` at `dpmm` dots per mm. The +given X-dimension must be non-zero and less than or equal to 10mm, however +`dpmm` may be zero and defaults to 12 dpmm, and `filetype` may be NULL or empty +in which case a GIF filetype is assumed. For raster output (BMP/GIF/PCX/PNG/TIF) +the scale is rounded to half-integer increments. + +For example: + +```c +my_symbol->symbology = BARCODE_RM4SCC; /* Royal Mail 4-State Customer Code */ +my_symbol->dpmm = 600.0f / 25.4f; /* 600 dpi */ +my_symbol->scale = ZBarcode_Scale_From_XdimDp( + my_symbol->symbology, + ZBarcode_Default_Xdim(my_symbol->symbology), + my_symbol->dpmm, "PNG"); /* 7.5 */ +``` + +The third function `ZBarcode_XdimDP_From_Scale()` is the "reverse" of +`ZBarcode_Scale_From_XdimDp()`, returning the X-dimension (in mm) or the dot +density (in dpmm) given a scale `scale`. Both `scale` and `x_dim_mm_or_dpmm` +must be non-zero. The returned value is bound to the maximum value of dpmm +(1000), so must be further bound to 10 on return if the X-dimension is sought. + +Note that the X-dimension to use is application dependent, and varies not only +due to the symbology, resolution and filetype but also due to the type of +scanner used, the intended scanning distance, and what media ("substrates") the +barcode appears on. + +## 5.13 Verifying Symbology Availability An additional function available in the API is: @@ -2180,7 +2285,7 @@ if (ZBarcode_BarcodeName(BARCODE_PDF417, name) == 0) { will print `BARCODE_PDF417`. -## 5.13 Checking Symbology Capabilities +## 5.14 Checking Symbology Capabilities It can be useful for frontend programs to know the capabilities of a symbology. This can be determined using another additional function: @@ -2246,7 +2351,7 @@ if (cap & ZINT_CAP_ECI) { } ``` -## 5.14 Zint Version +## 5.15 Zint Version Whether the Zint library linked to was built with PNG support may be determined with: @@ -2362,16 +2467,16 @@ bind or bindtop) and leaving the border width 0. ![`zint -b DPLEIT -d "9212320967145"`](images/dpleit.svg) Leitcode is based on Interleaved Code 2 of 5 and is used by Deutsche Post for -mailing purposes. Leitcode requires a 13-digit numerical input and includes a -check digit. +routing purposes. Leitcode requires a 13-digit numerical input to which Zint +adds a check digit. #### 6.1.2.8 Deutsche Post Identcode ![`zint -b DPIDENT -d "91232096712"`](images/dpident.svg) Identcode is based on Interleaved Code 2 of 5 and is used by Deutsche Post for -mailing purposes. Identcode requires an 11-digit numerical input and includes a -check digit. +identification purposes. Identcode requires an 11-digit numerical input to which +Zint adds a check digit. \clearpage @@ -2389,7 +2494,7 @@ to draw a UPC-A symbol with the data 72527270270 with an EAN-5 add-on showing the data 12345 use the command: ```bash -zint -b UPCA -d 72527270270+12345 +zint -b UPCA -d "72527270270+12345" ``` or using the API encode a data string with the + character included: @@ -2423,7 +2528,7 @@ encoding by entering a 7-digit article number starting with the digit 1. For example: ```bash -zint -b UPCE -d 1123456 +zint -b UPCE -d "1123456" ``` or @@ -2456,7 +2561,7 @@ data. In addition EAN-2 and EAN-5 add-on symbols can be added to EAN-8 and EAN-13 symbols using the + character as with UPC symbols. For example: ```bash -zint -b EANX -d 54321 +zint -b EANX -d "54321" ``` ![`zint -b EANX --compliantheight -d "54321"`](images/eanx5.svg) @@ -2464,7 +2569,7 @@ zint -b EANX -d 54321 will encode a stand-alone EAN-5, whereas ```bash -zint -b EANX -d 7432365+54321 +zint -b EANX -d "7432365+54321" ``` will encode an EAN-8 symbol with an EAN-5 add-on. As before these results can @@ -2599,7 +2704,7 @@ PZN encodes a 7-digit number to which Zint will add a modulo-11 check digit. --vers=1`](images/logmars.svg) LOGMARS (Logistics Applications of Automated Marking and Reading Symbols) is a -variation of the Code 39 symbology used by the US Department of Defense. +variation of the Code 39 symbology used by the U.S. Department of Defense. LOGMARS encodes the same character set as Standard Code 39. It does not require a check digit but a modulo-43 check digit can be added by setting `--vers=1` (API `option_2 = 1`). @@ -2669,13 +2774,16 @@ the encoding of ISO/IEC 8859-1 (non-English) characters in Code 128 symbols. The ISO/IEC 8859-1 character set is shown in Appendix [A.2 Latin Alphabet No. 1 (ISO/IEC 8859-1)]. -#### 6.1.10.2 Code 128 Subset B +#### 6.1.10.2 Code 128 Suppress Subset C (Subsets A and B only) -![`zint -b CODE128B -d "130170X178"`](images/code128b.svg) +![`zint -b CODE128AB -d "130170X178"`](images/code128ab.svg) It is sometimes advantageous to stop Code 128 from using subset mode C which -compresses numerical data. The `BARCODE_CODE128B` variant (symbology 60) -suppresses mode C in favour of mode B. +compresses numerical data. The `BARCODE_CODE128AB`[^10] variant (symbology 60) +suppresses mode C in favour of modes A and B. + +[^10]: `BARCODE_CODE128AB` previously used the name `BARCODE_CODE128B`, which is +still recognised. #### 6.1.10.3 GS1-128 @@ -3318,10 +3426,10 @@ these will be appended by Zint if not included in the input data. ![`zint -b USPS_IMAIL --compliantheight -d "01234567094987654321-01234"`](images/usps_imail.svg) -Also known as the OneCode barcode and used in the US by the United States Postal -Service (USPS), the Intelligent Mail system replaced the POSTNET and PLANET -symbologies in 2009. Intelligent Mail is a fixed length (65-bar) symbol which -combines routing and customer information in a single symbol. Input data +Also known as the OneCode barcode and used in the U.S. by the United States +Postal Service (USPS), the Intelligent Mail system replaced the POSTNET and +PLANET symbologies in 2009. Intelligent Mail is a fixed length (65-bar) symbol +which combines routing and customer information in a single symbol. Input data consists of a 20-digit tracking code, followed by a dash (`-`), followed by a delivery point zip-code which can be 0, 5, 9 or 11 digits in length. For example all of the following inputs are valid data entries: @@ -3375,7 +3483,7 @@ zint -b RM4SCC --compliantheight -d "W1J0TR01" --square`](images/hibc_dm.svg) Also known as Semacode this symbology was developed in 1989 by Acuity CiMatrix -in partnership with the US DoD and NASA. The symbol can encode a large amount +in partnership with the U.S. DoD and NASA. The symbol can encode a large amount of data in a small area. Data Matrix encodes characters in the Latin-1 set by default but also supports encoding in other character sets using the ECI mechanism. It can also encode GS1 data. The size of the generated symbol can @@ -3727,7 +3835,7 @@ using the `--structapp` option (see [4.16 Structured Append]) (API `structapp`). It does not support specifying an ID. MaxiCode uses a different scaling than other symbols for raster output, see -[4.9.2 MaxiCode Raster Scaling], and also for EMF vector output, when the scale +[4.9.3 MaxiCode Raster Scaling], and also for EMF vector output, when the scale is multiplied by 20 instead of 2. ### 6.6.7 Aztec Code (ISO 24778) diff --git a/docs/manual.txt b/docs/manual.txt index 7cdcae7a..855b87b4 100644 --- a/docs/manual.txt +++ b/docs/manual.txt @@ -1,6 +1,6 @@ Zint Barcode Generator and Zint Barcode Studio User Manual Version 2.11.1.9 -November 2022 +December 2022 ******************************************************************************* * For reference the following is a text-only version of the Zint manual, * @@ -22,11 +22,10 @@ November 2022 - 3.3 Additional ECI/Data Segments Groupbox - 3.4 Symbology-specific Tab - 3.5 Appearance Tab - - 3.6 Colour Dialog - - 3.7 Data Dialog - - 3.8 Sequence Dialog - - 3.9 Export Dialog - - 3.10 CLI Equivalent Dialog + - 3.6 Data Dialog + - 3.7 Sequence Dialog + - 3.8 Export Dialog + - 3.9 CLI Equivalent Dialog - 4. Using the Command Line - 4.1 Inputting Data - 4.2 Directing Output @@ -37,8 +36,9 @@ November 2022 - 4.7 Using Colour - 4.8 Rotating the Symbol - 4.9 Adjusting Image Size - - 4.9.1 Scaling Example - - 4.9.2 MaxiCode Raster Scaling + - 4.9.1 Scaling by X-dimension and Resolution + - 4.9.2 Scaling Example + - 4.9.3 MaxiCode Raster Scaling - 4.10 Input Modes - 4.10.1 Unicode, Data, and GS1 Modes - 4.10.2 Input Modes and ECI @@ -65,9 +65,10 @@ November 2022 - 5.9 Adjusting Other Output Options - 5.10 Setting the Input Mode - 5.11 Multiple Segments - - 5.12 Verifying Symbology Availability - - 5.13 Checking Symbology Capabilities - - 5.14 Zint Version + - 5.12 Scaling Helpers + - 5.13 Verifying Symbology Availability + - 5.14 Checking Symbology Capabilities + - 5.15 Zint Version - 6. Types of Symbology - 6.1 One-Dimensional Symbols - 6.1.1 Code 11 @@ -105,7 +106,7 @@ November 2022 - 6.1.9 Pharmacode - 6.1.10 Code 128 - 6.1.10.1 Standard Code 128 (ISO 15417) - - 6.1.10.2 Code 128 Subset B + - 6.1.10.2 Code 128 Suppress Subset C (Subsets A and B only) - 6.1.10.3 GS1-128 - 6.1.10.4 EAN-14 - 6.1.10.5 NVE-18 (SSCC-18) @@ -415,6 +416,16 @@ only show barcodes in the drop-down whose names contain the word "mail". Each word entered will match. So typing "mail post" will show barcodes whose names contain "mail" or "post" (or both). +The ellipsis button "..." to the right of the data text box invokes the Data +Dialog - see 3.6 Data Dialog for details. The delete button [delete] next to it +will clear the data text box and the ECI (Extended Channel Interpretations) +drop-down if set. + +To set the barcode as a Programming Initialisation symbol click the +"Reader Init" checkbox. The "1234.." button to its right invokes the Sequence +Dialog - see 3.7 Sequence Dialog. The zap button [zap] will clear all data and +reset all settings for the barcode to defaults. + The "BMP" and "SVG" buttons at the bottom will copy the image to the clipboard in BMP format and SVG format respectively. Further copy-to-clipboard formats are available by clicking the "Menu" button, along with "CLI Equivalent", "Save As", @@ -458,22 +469,38 @@ part of a Structured Append sequence of symbols. [Zint Barcode Studio showing Appearance tab options] The Appearance tab can be used to adjust the dimensions and other properties of -the symbol. The "Height" value affects the height of symbologies which do not -have a fixed width-to-height ratio, i.e. those other than matrix symbologies. -Boundary bars ("Border Type") can be added and adjusted ("Border Width") and the -size of the saved image ("Printing Scale") can be specified. +the symbol. -3.6 Colour Dialog +The "Height" value affects the height of symbologies which do not have a fixed +width-to-height ratio, i.e. those other than matrix symbologies. For such +symbologies the "Automatic Height" checkbox will be enabled - uncheck this to +manually adjust the height. The "Compliant Height" checkbox applies to +symbologies that define a standard height - see 4.4 Adjusting Height. + +Boundary bars can be added with the "Border Type" drop-down and their size +adjusted with "Border Width", and whitespace can be adjusted both horizontally +(first spinbox) and vertically (second spinbox), and also through the +"Quiet Zones" checkbox if standard quiet zones are defined for the symbology. + +The size of the saved image can be specified with "Printing Scale", and also by +clicking the [scaling] icon to invoke the “Set Printing Scale” dialog - see 4.9 +Adjusting Image Size for further details. + +[Adjusting the Print Size] + +The foreground and background colours can be set either using the text boxes +which accept RRGGBBAA hexadecimal values or by clicking the foreground eye [eye] +and background eye [eye] buttons which invoke a colour picker. [The colour picker tool] -A colour dialog is used to adjust the colour of the foreground and background of -the generated image. In the Appearance tab click on the foreground eye [eye] or -background eye [eye] button respectively. The colours can be reset to -black-on-white using the "Reset" button, and exchanged one for the other using -the swap [swap] button next to it. +(Note that to change the colours visually, the luminence slider, the long narrow +column on the right, must be adjusted.) -3.7 Data Dialog +The colours can be reset to black-on-white using the "Reset" button, and +exchanged one for the other using the swap [swap] button next to it. + +3.6 Data Dialog [Entering longer text input] @@ -491,7 +518,7 @@ checkbox will be set. This only affects line feeds, not carriage returns (CR) or CR+LF pairs, and behaves the same on both Windows and Unix. (For details on escape sequences, see 4.1 Inputting Data.) -3.8 Sequence Dialog +3.7 Sequence Dialog [Creating a sequence of barcode symbols] @@ -513,7 +540,7 @@ meanings as given below: : Table : Sequence Format Characters: -3.9 Export Dialog +3.8 Export Dialog [Setting filenames for an exported sequence of barcode symbols] @@ -522,7 +549,7 @@ sets the parameters for exporting a sequence of barcode images. Here you can set the filename and the output image format. Note that the symbology, colour and other formatting information are taken from the main window. -3.10 CLI Equivalent Dialog +3.9 CLI Equivalent Dialog [CLI Equivalent Dialog] @@ -652,6 +679,11 @@ the other supported file types: zint -o there.eps -d "This Text" +The filename can contain directories and sub-directories also, which will be +created if they don’t already exist: + + zint -o "dir/subdir/filename.eps" -d "This Text" + 4.3 Selecting Barcode Type Selecting which type of barcode you wish to produce (i.e. which symbology to @@ -751,7 +783,7 @@ underscores are optional. 58 BARCODE_QRCODE QR Code - 60 BARCODE_CODE128B Code 128 (Subset B) + 60 BARCODE_CODE128AB Code 128 (Suppress subset C) 63 BARCODE_AUSPOST Australia Post Standard Customer @@ -1032,11 +1064,11 @@ The scale of the image can be altered using the --scale option followed by a multiple of the default X-dimension. The scale is multiplied by 2 (with the exception of MaxiCode) before being applied. The default scale is 1. -For MaxiCode, the scale is multiplied by 10 for raster output, by 20 for EMF +For MaxiCode, the scale is multiplied by 10 for raster output, by 40 for EMF vector output, and by 2 otherwise (non-EMF vector output). For raster output, the default X-dimension is 2 pixels (except for MaxiCode, see -4.9.2 MaxiCode Raster Scaling below). For example for PNG images a scale of 5 +4.9.3 MaxiCode Raster Scaling below). For example for PNG images a scale of 5 will increase the X-dimension to 10 pixels. Scales for raster output should be given in increments of 0.5, i.e. 0.5, 1, 1.5, 2, 2.5, 3, 3.5, etc., to avoid the X-dimension varying across the symbol due to interpolation. 0.5 increments are @@ -1048,61 +1080,61 @@ minimum scale for raster output in dotty mode is 1 (see 4.14 Working with Dots). The minimum scale for vector output is 0.1, giving a minimum X-dimension of 0.2. -The maximum scale for both raster and vector is 100. +The maximum scale for both raster and vector is 200. -4.9.1 Scaling Example +4.9.1 Scaling by X-dimension and Resolution + +An alternative way to specify the scale which takes these details into account +is to use the --scalexdimdp option, which has the format + + --scalexdimdp=X[,R] + +where X is the X-dimension (in mm by default) and R is the resolution (in dpmm, +dots per mm, by default). R is optional, and defaults to 12 dpmm, and X may be +zero, in which case it uses a symbology-specific default. The units may be given +in inches for X by appending "in", and in dpi (dots per inch) for R by appending +"dpi". For example + + zint -d "1234" --scalexdimdp=0.013in,300dpi + +Explicit metric units may also be given by appending "mm" and "dpmm" as +appropriate, and may be mixed with U.S. units: + + zint -d "1234" --scalexdimdp=0.33mm,300dpi + +4.9.2 Scaling Example The GS1 General Specifications Section 5.2.6.6 ‘Symbol dimensions at nominal size’ gives an example of an EAN-13 barcode using the X-dimension of 0.33mm. To -print that example as a PNG at 12 dots per mm (dpmm), the equivalent of 300 dots -per inch (dpi = dpmm * 25.4), specify a scale of 2, since 0.33 * 12 = 3.96 -pixels, or 4 pixels rounding to the nearest pixel: +print that example as a PNG at 12 dpmm, the approximate equivalent of 300 dpi +(dpi = dpmm * 25.4), specify a scale of 2, since 0.33 * 12 = 3.96 pixels, or 4 +pixels rounding to the nearest pixel: zint -b EANX -d "501234567890" --compliantheight --scale=2 -This will result in output of 38.27mm x 26.08mm (WxH) at 300 dpi. The following -table shows the scale to use (in 0.5 increments) depending on the dpmm desired, -for a target X-dimension of 0.33mm: +This will result in output of 37.29mm x 25.56mm (WxH) at 12 dpmm. The same +result can be achieved using the --scalexdimdp option with - dpmm dpi scale - ------ ------ ------- - 6 150 1 - 8 200 1.5 - 12 300 2 - 16 400 3 - 24 600 4 - 47 1200 8 - 95 2400 15.5 - 189 4800 31 + zint -b EANX -d "501234567890" --compliantheight --scalexdimdp=0 - : Table : Scaling for X-dimension 0.33mm: +as 0.33mm is the default X-dimension for EAN, and 12 dpmm the default +resolution. -4.9.2 MaxiCode Raster Scaling +4.9.3 MaxiCode Raster Scaling For MaxiCode symbols, which use hexagons, the scale for raster output is -multiplied by 10 before being applied. The minimum scale is 0.2, so the minimum -X-dimension is 2 pixels. +multiplied by 10 before being applied. The 0.5 increment recommended for normal +raster output does not apply. + +The minimum scale is 0.2, so the minimum X-dimension is 2 pixels. However scales +below 0.5 are not recommended and may produce symbols that are not within the +following size ranges. MaxiCode symbols have fixed size ranges of 24.82mm to 27.93mm in width, and -23.71mm to 26.69mm in height, excluding quiet zones. The following table shows -the scale to use depending on the dpmm desired, with dpi equivalents: +23.71mm to 26.69mm in height, excluding quiet zones. The default X-dimension is +0.88mm. For example, to output at the default X-dimension at 600 dpi specify: - dpmm dpi scale - ------ ------ ------- - 6 150 0.5 - 8 200 0.7 - 12 300 1 - 16 400 1.4 - 24 600 2.1 - 47 1200 4.1 - 95 2400 8.2 - 189 4800 16.4 - - : Table : MaxiCode Raster Scaling: - -Note that the 0.5 increment recommended for normal raster output does not apply. -Scales below 0.5 are not recommended and may produce symbols that are not within -the minimum/maximum size ranges. + zint -b MAXICODE -d "MaxiCode (19 chars)" --scalexdimdp=0,600dpi 4.10 Input Modes @@ -1348,6 +1380,16 @@ The following table shows some examples to clarify this method: : Table : Batch Filename Examples: +The special characters can span directories also, which is useful when creating +a large number of barcodes: + + Input Filenames Generated + --------------------- ----------------------------------------- + -o dir~/file~~~.svg dir0/file001.svg, dir0/file002.svg, … + , dir0/file999.svg, dir1/file000.svg, … + + : Table : Batch Directory Examples: + 4.12 Direct Output The finished image files can be output directly to stdout for use as part of a @@ -1776,7 +1818,11 @@ encoding stages. The zint_symbol structure consists of the following variables: eci integer Extended Channel 0 (none) Interpretation code. - dot_size float Diameter of dots used in 4.0 / 5.0 + dpmm float Resolution of output in dots 0 (none) + per mm (BMP/EMF/PCX/PNG/TIF + only). + + dot_size float Diameter of dots used in 0.8 dotty mode. guard_descent float Height of guard bar descent 5.0 @@ -2147,7 +2193,49 @@ example: A maximum of 256 segments may be specified. Use of multiple segments with GS1 data is not currently supported. -5.12 Verifying Symbology Availability +5.12 Scaling Helpers + +To help with scaling the output, the following three function are available: + + float ZBarcode_Default_Xdim(int symbol_id); + + float ZBarcode_Scale_From_XdimDp(int symbol_id, float x_dim_mm, float dpmm, + const char *filetype) { + + float ZBarcode_XdimDP_From_Scale(int symbol_id, float scale, + float x_dim_mm_or_dpmm, const char *filetype); + +The first ZBarcode_Default_Xdim() returns the default X-dimension suggested by +Zint for symbology symbol_id. + +The second ZBarcode_Scale_From_XdimDp() returns the scale to use to output to a +file of type filetype with X-dimension x_dim_mm at dpmm dots per mm. The given +X-dimension must be non-zero and less than or equal to 10mm, however dpmm may be +zero and defaults to 12 dpmm, and filetype may be NULL or empty in which case a +GIF filetype is assumed. For raster output (BMP/GIF/PCX/PNG/TIF) the scale is +rounded to half-integer increments. + +For example: + + my_symbol->symbology = BARCODE_RM4SCC; /* Royal Mail 4-State Customer Code */ + my_symbol->dpmm = 600.0f / 25.4f; /* 600 dpi */ + my_symbol->scale = ZBarcode_Scale_From_XdimDp( + my_symbol->symbology, + ZBarcode_Default_Xdim(my_symbol->symbology), + my_symbol->dpmm, "PNG"); /* 7.5 */ + +The third function ZBarcode_XdimDP_From_Scale() is the “reverse” of +ZBarcode_Scale_From_XdimDp(), returning the X-dimension (in mm) or the dot +density (in dpmm) given a scale scale. Both scale and x_dim_mm_or_dpmm must be +non-zero. The returned value is bound to the maximum value of dpmm (1000), so +must be further bound to 10 on return if the X-dimension is sought. + +Note that the X-dimension to use is application dependent, and varies not only +due to the symbology, resolution and filetype but also due to the type of +scanner used, the intended scanning distance, and what media (“substrates”) the +barcode appears on. + +5.13 Verifying Symbology Availability An additional function available in the API is: @@ -2177,7 +2265,7 @@ success. For instance: will print BARCODE_PDF417. -5.13 Checking Symbology Capabilities +5.14 Checking Symbology Capabilities It can be useful for frontend programs to know the capabilities of a symbology. This can be determined using another additional function: @@ -2239,7 +2327,7 @@ For example: printf("PDF417 does not support ECI\n"); } -5.14 Zint Version +5.15 Zint Version Whether the Zint library linked to was built with PNG support may be determined with: @@ -2349,16 +2437,16 @@ bind or bindtop) and leaving the border width 0. [zint -b DPLEIT -d "9212320967145"] Leitcode is based on Interleaved Code 2 of 5 and is used by Deutsche Post for -mailing purposes. Leitcode requires a 13-digit numerical input and includes a -check digit. +routing purposes. Leitcode requires a 13-digit numerical input to which Zint +adds a check digit. 6.1.2.8 Deutsche Post Identcode [zint -b DPIDENT -d "91232096712"] Identcode is based on Interleaved Code 2 of 5 and is used by Deutsche Post for -mailing purposes. Identcode requires an 11-digit numerical input and includes a -check digit. +identification purposes. Identcode requires an 11-digit numerical input to which +Zint adds a check digit. 6.1.3 UPC (Universal Product Code) (ISO 15420) @@ -2372,7 +2460,7 @@ EAN-2 and EAN-5 add-on symbols can be added using the + character. For example, to draw a UPC-A symbol with the data 72527270270 with an EAN-5 add-on showing the data 12345 use the command: - zint -b UPCA -d 72527270270+12345 + zint -b UPCA -d "72527270270+12345" or using the API encode a data string with the + character included: @@ -2401,7 +2489,7 @@ calculated by Zint. EAN-2 and EAN-5 add-on symbols can be added using the + character as with UPC-A. In addition Zint also supports Number System 1 encoding by entering a 7-digit article number starting with the digit 1. For example: - zint -b UPCE -d 1123456 + zint -b UPCE -d "1123456" or @@ -2430,13 +2518,13 @@ Zint will decide which symbology to use depending on the length of the input data. In addition EAN-2 and EAN-5 add-on symbols can be added to EAN-8 and EAN-13 symbols using the + character as with UPC symbols. For example: - zint -b EANX -d 54321 + zint -b EANX -d "54321" [zint -b EANX --compliantheight -d "54321"] will encode a stand-alone EAN-5, whereas - zint -b EANX -d 7432365+54321 + zint -b EANX -d "7432365+54321" will encode an EAN-8 symbol with an EAN-5 add-on. As before these results can be achieved using the API: @@ -2567,9 +2655,9 @@ PZN encodes a 7-digit number to which Zint will add a modulo-11 check digit. [zint -b LOGMARS --compliantheight -d "12345/ABCDE" --vers=1] LOGMARS (Logistics Applications of Automated Marking and Reading Symbols) is a -variation of the Code 39 symbology used by the US Department of Defense. LOGMARS -encodes the same character set as Standard Code 39. It does not require a check -digit but a modulo-43 check digit can be added by setting --vers=1 (API +variation of the Code 39 symbology used by the U.S. Department of Defense. +LOGMARS encodes the same character set as Standard Code 39. It does not require +a check digit but a modulo-43 check digit can be added by setting --vers=1 (API option_2 = 1). 6.1.7.6 Code 32 @@ -2636,13 +2724,13 @@ encoding of ISO/IEC 8859-1 (non-English) characters in Code 128 symbols. The ISO/IEC 8859-1 character set is shown in Appendix A.2 Latin Alphabet No. 1 (ISO/IEC 8859-1). -6.1.10.2 Code 128 Subset B +6.1.10.2 Code 128 Suppress Subset C (Subsets A and B only) -[zint -b CODE128B -d "130170X178"] +[zint -b CODE128AB -d "130170X178"] It is sometimes advantageous to stop Code 128 from using subset mode C which -compresses numerical data. The BARCODE_CODE128B variant (symbology 60) -suppresses mode C in favour of mode B. +compresses numerical data. The BARCODE_CODE128AB[10] variant (symbology 60) +suppresses mode C in favour of modes A and B. 6.1.10.3 GS1-128 @@ -3242,10 +3330,10 @@ these will be appended by Zint if not included in the input data. [zint -b USPS_IMAIL --compliantheight -d "01234567094987654321-01234"] -Also known as the OneCode barcode and used in the US by the United States Postal -Service (USPS), the Intelligent Mail system replaced the POSTNET and PLANET -symbologies in 2009. Intelligent Mail is a fixed length (65-bar) symbol which -combines routing and customer information in a single symbol. Input data +Also known as the OneCode barcode and used in the U.S. by the United States +Postal Service (USPS), the Intelligent Mail system replaced the POSTNET and +PLANET symbologies in 2009. Intelligent Mail is a fixed length (65-bar) symbol +which combines routing and customer information in a single symbol. Input data consists of a 20-digit tracking code, followed by a dash (-), followed by a delivery point zip-code which can be 0, 5, 9 or 11 digits in length. For example all of the following inputs are valid data entries: @@ -3290,8 +3378,8 @@ as [zint -b HIBC_DM -d "/ACMRN123456/V200912190833" --fast --square] Also known as Semacode this symbology was developed in 1989 by Acuity CiMatrix -in partnership with the US DoD and NASA. The symbol can encode a large amount of -data in a small area. Data Matrix encodes characters in the Latin-1 set by +in partnership with the U.S. DoD and NASA. The symbol can encode a large amount +of data in a small area. Data Matrix encodes characters in the Latin-1 set by default but also supports encoding in other character sets using the ECI mechanism. It can also encode GS1 data. The size of the generated symbol can be adjusted using the --vers option (API option_2) as shown in the table below. A @@ -3627,7 +3715,7 @@ using the --structapp option (see 4.16 Structured Append) (API structapp). It does not support specifying an ID. MaxiCode uses a different scaling than other symbols for raster output, see -4.9.2 MaxiCode Raster Scaling, and also for EMF vector output, when the scale is +4.9.3 MaxiCode Raster Scaling, and also for EMF vector output, when the scale is multiplied by 20 instead of 2. 6.6.7 Aztec Code (ISO 24778) @@ -4165,7 +4253,7 @@ defined. Annex B. Man Page ZINT(1) -% ZINT(1) Version 2.11.1.9 % % November 2022 +% ZINT(1) Version 2.11.1.9 % % December 2022 NAME @@ -4478,12 +4566,25 @@ OPTIONS multiplied by 2 (except for MaxiCode) before being applied. The default scale is 1. - For MaxiCode, the scale is multiplied by 10 for raster output, by 20 for EMF + For MaxiCode, the scale is multiplied by 10 for raster output, by 40 for EMF output, and by 2 otherwise. Increments of 0.5 (half-integers) are recommended for non-MaxiCode raster output (BMP, GIF, PCX, PNG and TIF). + See also --scalexdimdp below. + +--scalexdimdp=X[,R] + + Scale the image according to X-dimension X and resolution R, where X is in + mm and R is in dpmm (dots per mm). X and R may be floating-point. R is + optional and defaults to 12 dpmm (approximately 300 dpi). + + The scaling takes into account the output filetype, and deals with all the + details mentioned above. Units may be specified for X by appending “in” + (inch) or “mm”, and for R by appending “dpi” (dots per inch) or “dpmm” - + e.g. --scalexdimdp=0.013in,300dpi. + --scmvv=INTEGER For MaxiCode, prefix the Structured Carrier Message (SCM) with @@ -4728,3 +4829,6 @@ Special considerations apply to ITF-14 - see 6.1.2.6 ITF-14. [9] Codablock-F, Code 16K, Code 49, EAN-2 to EAN-13, ISBN, ITF-14, UPC-A and UPC-E have compliant quiet zones added by default. + +[10] BARCODE_CODE128AB previously used the name BARCODE_CODE128B, which is still +recognised. diff --git a/docs/zint.1 b/docs/zint.1 index c6d18412..fa112e46 100644 --- a/docs/zint.1 +++ b/docs/zint.1 @@ -14,7 +14,7 @@ . ftr VB CB . ftr VBI CBI .\} -.TH "ZINT" "1" "November 2022" "Version 2.11.1.9" "" +.TH "ZINT" "1" "December 2022" "Version 2.11.1.9" "" .hy .SH NAME .PP @@ -348,11 +348,29 @@ for MaxiCode) before being applied. The default scale is 1. .RS .PP -For MaxiCode, the scale is multiplied by 10 for raster output, by 20 for +For MaxiCode, the scale is multiplied by 10 for raster output, by 40 for EMF output, and by 2 otherwise. .PP Increments of 0.5 (half-integers) are recommended for non-MaxiCode raster output (BMP, GIF, PCX, PNG and TIF). +.PP +See also \f[V]--scalexdimdp\f[R] below. +.RE +.TP +\f[V]--scalexdimdp=X[,R]\f[R] +Scale the image according to X-dimension \f[I]X\f[R] and resolution +\f[I]R\f[R], where \f[I]X\f[R] is in mm and \f[I]R\f[R] is in dpmm (dots +per mm). +\f[I]X\f[R] and \f[I]R\f[R] may be floating-point. +\f[I]R\f[R] is optional and defaults to 12 dpmm (approximately 300 dpi). +.RS +.PP +The scaling takes into account the output filetype, and deals with all +the details mentioned above. +Units may be specified for \f[I]X\f[R] by appending \[lq]in\[rq] (inch) +or \[lq]mm\[rq], and for \f[I]R\f[R] by appending \[lq]dpi\[rq] (dots +per inch) or \[lq]dpmm\[rq] - +e.g.\ \f[V]--scalexdimdp=0.013in,300dpi\f[R]. .RE .TP \f[V]--scmvv=INTEGER\f[R] @@ -400,9 +418,9 @@ For Data Matrix symbols, exclude rectangular sizes when considering automatic sizes. .TP \f[V]--structapp=I,C[,ID]\f[R] -Set Structured Append info, where \f[V]I\f[R] is the 1-based index, -\f[V]C\f[R] is the total number of symbols in the sequence, and -\f[V]ID\f[R], which is optional, is the identifier that all symbols in +Set Structured Append info, where \f[I]I\f[R] is the 1-based index, +\f[I]C\f[R] is the total number of symbols in the sequence, and +\f[I]ID\f[R], which is optional, is the identifier that all symbols in the sequence share. Structured Append is supported by Aztec Code, Code One, Data Matrix, DotCode, Grid Matrix, MaxiCode, MicroPDF417, PDF417, QR Code and diff --git a/docs/zint.1.pmd b/docs/zint.1.pmd index 02e83b76..ed3dfad9 100644 --- a/docs/zint.1.pmd +++ b/docs/zint.1.pmd @@ -1,6 +1,6 @@ % ZINT(1) Version 2.11.1.9 % -% November 2022 +% December 2022 # NAME @@ -280,10 +280,21 @@ Paintbrush (`PCX`), Portable Network Format (`PNG`), Scalable Vector Graphic (`S : Adjust the size of the X-dimension. *NUMBER* may be floating-point, and is multiplied by 2 (except for MaxiCode) before being applied. The default scale is 1. - For MaxiCode, the scale is multiplied by 10 for raster output, by 20 for EMF output, and by 2 otherwise. + For MaxiCode, the scale is multiplied by 10 for raster output, by 40 for EMF output, and by 2 otherwise. Increments of 0.5 (half-integers) are recommended for non-MaxiCode raster output (BMP, GIF, PCX, PNG and TIF). + See also `--scalexdimdp` below. + +`--scalexdimdp=X[,R]` + +: Scale the image according to X-dimension *X* and resolution *R*, where *X* is in mm and *R* is in dpmm (dots per + mm). *X* and *R* may be floating-point. *R* is optional and defaults to 12 dpmm (approximately 300 dpi). + + The scaling takes into account the output filetype, and deals with all the details mentioned above. Units may be + specified for *X* by appending "in" (inch) or "mm", and for *R* by appending "dpi" (dots per inch) or "dpmm" - + e.g. `--scalexdimdp=0.013in,300dpi`. + `--scmvv=INTEGER` : For MaxiCode, prefix the Structured Carrier Message (SCM) with `"[)>\R01\Gvv"`, where `vv` is a 2-digit *INTEGER*. @@ -322,8 +333,8 @@ Paintbrush (`PCX`), Portable Network Format (`PNG`), Scalable Vector Graphic (`S `--structapp=I,C[,ID]` -: Set Structured Append info, where `I` is the 1-based index, `C` is the total number of symbols in the sequence, - and `ID`, which is optional, is the identifier that all symbols in the sequence share. Structured Append is +: Set Structured Append info, where *I* is the 1-based index, *C* is the total number of symbols in the sequence, + and *ID*, which is optional, is the identifier that all symbols in the sequence share. Structured Append is supported by Aztec Code, Code One, Data Matrix, DotCode, Grid Matrix, MaxiCode, MicroPDF417, PDF417, QR Code and Ultracode. diff --git a/docs/zint_images.sh b/docs/zint_images.sh index 1f564a19..69a3063c 100755 --- a/docs/zint_images.sh +++ b/docs/zint_images.sh @@ -66,7 +66,7 @@ zint -b VIN -d "2FTPX28L0XCA15511" --vers=1 --scale=$SCALE_LINEAR -o images/vin. zint -b CODABAR --compliantheight -d "A37859B" --scale=$SCALE_LINEAR -o images/codabar.svg zint -b PHARMA --compliantheight -d "130170" --scale=$SCALE_LINEAR -o images/pharma.svg zint -b CODE128 --bind -d "130170X178" --scale=$SCALE_LINEAR -o images/code128.svg -zint -b CODE128B -d "130170X178" --scale=$SCALE_LINEAR -o images/code128b.svg +zint -b CODE128AB -d "130170X178" --scale=$SCALE_LINEAR -o images/code128ab.svg zint -b GS1_128 --compliantheight -d "[01]98898765432106[3202]012345[15]991231" --scale=$SCALE_LINEAR -o images/gs1_128.svg zint -b EAN14 --compliantheight -d "9889876543210" --scale=$SCALE_LINEAR -o images/ean14.svg zint -b NVE18 --compliantheight -d "37612345000001003" --scale=$SCALE_LINEAR -o images/nve18.svg diff --git a/frontend/main.c b/frontend/main.c index 3e86f7e8..d6a0f9e8 100644 --- a/frontend/main.c +++ b/frontend/main.c @@ -37,7 +37,7 @@ /* It's assumed that int is at least 32 bits, the following will compile-time fail if not * https://stackoverflow.com/a/1980056 */ -typedef int static_assert_int_at_least_32bits[CHAR_BIT != 8 || sizeof(int) < 4 ? -1 : 1]; +typedef char static_assert_int_at_least_32bits[sizeof(int) * CHAR_BIT < 32 ? -1 : 1]; #ifndef ARRAY_SIZE #define ARRAY_SIZE(x) ((int) (sizeof(x) / sizeof((x)[0]))) @@ -60,57 +60,57 @@ typedef int static_assert_int_at_least_32bits[CHAR_BIT != 8 || sizeof(int) < 4 ? /* Print list of supported symbologies */ static void types(void) { - printf( " # Name Description # Name Description\n" - " 1 CODE11 Code 11 74 CODABLOCKF Codablock-F\n" - " 2 C25STANDARD Standard 2 of 5 75 NVE18 NVE-18\n" - " 3 C25INTER Interleaved 2 of 5 76 JAPANPOST Japanese Post\n" - " 4 C25IATA IATA 2 of 5 77 KOREAPOST Korea Post\n" - " 6 C25LOGIC Data Logic 2 of 5 79 DBAR_STK GS1 DataBar Stacked\n" - " 7 C25IND Industrial 2 of 5 80 DBAR_OMNSTK GS1 DataBar Stack Omni\n" - " 8 CODE39 Code 39 81 DBAR_EXPSTK GS1 DataBar Exp Stack\n" - " 9 EXCODE39 Extended Code 39 82 PLANET USPS PLANET\n" - "13 EANX EAN-2 to EAN-13 84 MICROPDF417 MicroPDF417\n" - "14 EANX_CHK EAN + Check Digit 85 USPS_IMAIL USPS Intelligent Mail\n" - "16 GS1_128 GS1-128 86 PLESSEY UK Plessey\n" - "18 CODABAR Codabar 87 TELEPEN_NUM Telepen Numeric\n" - "20 CODE128 Code 128 89 ITF14 ITF-14\n" - "21 DPLEIT Deutsche Post Leitcode 90 KIX Dutch Post KIX Code\n" - "22 DPIDENT Deutsche Post Identcode 92 AZTEC Aztec Code\n" - "23 CODE16K Code 16K 93 DAFT DAFT Code\n" - "24 CODE49 Code 49 96 DPD DPD Parcel Code 128\n" - "25 CODE93 Code 93 97 MICROQR Micro QR Code\n" - "28 FLAT Flattermarken 98 HIBC_128 HIBC Code 128\n" - "29 DBAR_OMN GS1 DataBar Omni 99 HIBC_39 HIBC Code 39\n" - "30 DBAR_LTD GS1 DataBar Limited 102 HIBC_DM HIBC Data Matrix\n" - "31 DBAR_EXP GS1 DataBar Expanded 104 HIBC_QR HIBC QR Code\n" - "32 TELEPEN Telepen Alpha 106 HIBC_PDF HIBC PDF417\n" - "34 UPCA UPC-A 108 HIBC_MICPDF HIBC MicroPDF417\n" - "35 UPCA_CHK UPC-A + Check Digit 110 HIBC_BLOCKF HIBC Codablock-F\n" - "37 UPCE UPC-E 112 HIBC_AZTEC HIBC Aztec Code\n" - "38 UPCE_CHK UPC-E + Check Digit 115 DOTCODE DotCode\n" - "40 POSTNET USPS POSTNET 116 HANXIN Han Xin Code\n" - "47 MSI_PLESSEY MSI Plessey 121 MAILMARK Royal Mail Mailmark\n" - "49 FIM Facing Ident Mark 128 AZRUNE Aztec Runes\n" - "50 LOGMARS LOGMARS Code 39 129 CODE32 Code 32\n" - "51 PHARMA Pharmacode One-Track 130 EANX_CC Composite EAN\n" - "52 PZN Pharmazentralnummer 131 GS1_128_CC Composite GS1-128\n" - "53 PHARMA_TWO Pharmacode Two-Track 132 DBAR_OMN_CC Comp DataBar Omni\n" - "54 CEPNET Brazilian CEPNet 133 DBAR_LTD_CC Comp DataBar Limited\n" - "55 PDF417 PDF417 134 DBAR_EXP_CC Comp DataBar Expanded\n" - "56 PDF417COMP Compact PDF417 135 UPCA_CC Composite UPC-A\n" - "57 MAXICODE MaxiCode 136 UPCE_CC Composite UPC-E\n" - "58 QRCODE QR Code 137 DBAR_STK_CC Comp DataBar Stacked\n" - "60 CODE128B Code 128 (Subset B) 138 DBAR_OMNSTK_CC Comp DataBar Stack Omn\n" - "63 AUSPOST AP Standard Customer 139 DBAR_EXPSTK_CC Comp DataBar Exp Stack\n" - "66 AUSREPLY AP Reply Paid 140 CHANNEL Channel Code\n" - "67 AUSROUTE AP Routing 141 CODEONE Code One\n" - "68 AUSREDIRECT AP Redirection 142 GRIDMATRIX Grid Matrix\n" - "69 ISBNX ISBN 143 UPNQR UPN QR Code\n" - "70 RM4SCC Royal Mail 4SCC 144 ULTRA Ultracode\n" - "71 DATAMATRIX Data Matrix 145 RMQR Rectangular Micro QR\n" - "72 EAN14 EAN-14 146 BC412 BC412\n" - "73 VIN Vehicle Information No.\n" - ); + /* Breaking up strings so don't get too long (i.e. 500 or so) */ + fputs(" # Name Description # Name Description\n" + " 1 CODE11 Code 11 74 CODABLOCKF Codablock-F\n" + " 2 C25STANDARD Standard 2 of 5 75 NVE18 NVE-18\n" + " 3 C25INTER Interleaved 2 of 5 76 JAPANPOST Japanese Post\n" + " 4 C25IATA IATA 2 of 5 77 KOREAPOST Korea Post\n", stdout); + fputs(" 6 C25LOGIC Data Logic 2 of 5 79 DBAR_STK GS1 DataBar Stacked\n" + " 7 C25IND Industrial 2 of 5 80 DBAR_OMNSTK GS1 DataBar Stack Omni\n" + " 8 CODE39 Code 39 81 DBAR_EXPSTK GS1 DataBar Exp Stack\n" + " 9 EXCODE39 Extended Code 39 82 PLANET USPS PLANET\n" + "13 EANX EAN-2 to EAN-13 84 MICROPDF417 MicroPDF417\n", stdout); + fputs("14 EANX_CHK EAN + Check Digit 85 USPS_IMAIL USPS Intelligent Mail\n" + "16 GS1_128 GS1-128 86 PLESSEY UK Plessey\n" + "18 CODABAR Codabar 87 TELEPEN_NUM Telepen Numeric\n" + "20 CODE128 Code 128 89 ITF14 ITF-14\n" + "21 DPLEIT Deutsche Post Leitcode 90 KIX Dutch Post KIX Code\n", stdout); + fputs("22 DPIDENT Deutsche Post Identcode 92 AZTEC Aztec Code\n" + "23 CODE16K Code 16K 93 DAFT DAFT Code\n" + "24 CODE49 Code 49 96 DPD DPD Parcel Code 128\n" + "25 CODE93 Code 93 97 MICROQR Micro QR Code\n" + "28 FLAT Flattermarken 98 HIBC_128 HIBC Code 128\n", stdout); + fputs("29 DBAR_OMN GS1 DataBar Omni 99 HIBC_39 HIBC Code 39\n" + "30 DBAR_LTD GS1 DataBar Limited 102 HIBC_DM HIBC Data Matrix\n" + "31 DBAR_EXP GS1 DataBar Expanded 104 HIBC_QR HIBC QR Code\n" + "32 TELEPEN Telepen Alpha 106 HIBC_PDF HIBC PDF417\n" + "34 UPCA UPC-A 108 HIBC_MICPDF HIBC MicroPDF417\n", stdout); + fputs("35 UPCA_CHK UPC-A + Check Digit 110 HIBC_BLOCKF HIBC Codablock-F\n" + "37 UPCE UPC-E 112 HIBC_AZTEC HIBC Aztec Code\n" + "38 UPCE_CHK UPC-E + Check Digit 115 DOTCODE DotCode\n" + "40 POSTNET USPS POSTNET 116 HANXIN Han Xin Code\n" + "47 MSI_PLESSEY MSI Plessey 121 MAILMARK Royal Mail Mailmark\n", stdout); + fputs("49 FIM Facing Ident Mark 128 AZRUNE Aztec Runes\n" + "50 LOGMARS LOGMARS Code 39 129 CODE32 Code 32\n" + "51 PHARMA Pharmacode One-Track 130 EANX_CC Composite EAN\n" + "52 PZN Pharmazentralnummer 131 GS1_128_CC Composite GS1-128\n" + "53 PHARMA_TWO Pharmacode Two-Track 132 DBAR_OMN_CC Comp DataBar Omni\n", stdout); + fputs("54 CEPNET Brazilian CEPNet 133 DBAR_LTD_CC Comp DataBar Limited\n" + "55 PDF417 PDF417 134 DBAR_EXP_CC Comp DataBar Expanded\n" + "56 PDF417COMP Compact PDF417 135 UPCA_CC Composite UPC-A\n" + "57 MAXICODE MaxiCode 136 UPCE_CC Composite UPC-E\n" + "58 QRCODE QR Code 137 DBAR_STK_CC Comp DataBar Stacked\n", stdout); + fputs("60 CODE128AB Code 128 (Suppress C) 138 DBAR_OMNSTK_CC Comp DataBar Stack Omn\n" + "63 AUSPOST AP Standard Customer 139 DBAR_EXPSTK_CC Comp DataBar Exp Stack\n" + "66 AUSREPLY AP Reply Paid 140 CHANNEL Channel Code\n" + "67 AUSROUTE AP Routing 141 CODEONE Code One\n" + "68 AUSREDIRECT AP Redirection 142 GRIDMATRIX Grid Matrix\n", stdout); + fputs("69 ISBNX ISBN 143 UPNQR UPN QR Code\n" + "70 RM4SCC Royal Mail 4SCC 144 ULTRA Ultracode\n" + "71 DATAMATRIX Data Matrix 145 RMQR Rectangular Micro QR\n" + "72 EAN14 EAN-14 146 BC412 BC412\n" + "73 VIN Vehicle Information No.\n", stdout); } /* Output version information */ @@ -141,116 +141,114 @@ static void usage(int no_png) { version(no_png); - printf( "Encode input data in a barcode and save as BMP/EMF/EPS/GIF/PCX%s/SVG/TIF/TXT\n\n" - " -b, --barcode=TYPE Number or name of barcode type. Default is 20 (CODE128)\n" - " --addongap=NUMBER Set add-on gap in multiples of X-dimension for EAN/UPC\n" - " --batch Treat each line of input file as a separate data set\n" - " --bg=COLOUR Specify a background colour (in hex RGB/RGBA)\n" - " --binary Treat input as raw binary data\n" - " --bind Add boundary bars\n" - " --bindtop Add top boundary bar only\n" - " --bold Use bold text\n" - " --border=NUMBER Set width of border in multiples of X-dimension\n" - " --box Add a box around the symbol\n" - " --cmyk Use CMYK colour space in EPS/TIF symbols\n" - " --cols=NUMBER Set the number of data columns in symbol\n" - " --compliantheight Warn if height not compliant, and use standard default\n" - " -d, --data=DATA Set the symbol data content (segment 0)\n" - " --direct Send output to stdout\n" - " --dmre Allow Data Matrix Rectangular Extended\n" - " --dotsize=NUMBER Set radius of dots in dotty mode\n" - " --dotty Use dots instead of squares for matrix symbols\n" - " --dump Dump hexadecimal representation to stdout\n" - " -e, --ecinos Display ECI (Extended Channel Interpretation) table\n" - " --eci=NUMBER Set the ECI code for the data (segment 0)\n" - " --esc Process escape characters in input data\n" - " --fast Use faster encodation (Data Matrix)\n" - " --fg=COLOUR Specify a foreground colour (in hex RGB/RGBA)\n" - " --filetype=TYPE Set output file type BMP/EMF/EPS/GIF/PCX%s/SVG/TIF/TXT\n" - " --fullmultibyte Use multibyte for binary/Latin (QR/Han Xin/Grid Matrix)\n" - " --gs1 Treat input as GS1 compatible data\n" - " --gs1nocheck Do not check validity of GS1 data\n" - " --gs1parens Process parentheses \"()\" as GS1 AI delimiters, not \"[]\"\n" - " --gssep Use separator GS for GS1 (Data Matrix)\n" - " --guarddescent=NUMBER Set height of guard bar descent in X-dims (EAN/UPC)\n" - " -h, --help Display help message\n" - " --height=NUMBER Set height of symbol in multiples of X-dimension\n" - " --heightperrow Treat height as per-row\n" - " -i, --input=FILE Read input data from FILE\n" - " --init Create Reader Initialisation (Programming) symbol\n" - " --mask=NUMBER Set masking pattern to use (QR/Han Xin/DotCode)\n" - " --mirror Use batch data to determine filename\n" - " --mode=NUMBER Set encoding mode (MaxiCode/Composite)\n" - " --nobackground Remove background (EMF/EPS/GIF%s/SVG/TIF only)\n" - " --noquietzones Disable default quiet zones\n" - " --notext Remove human readable text\n" - " -o, --output=FILE Send output to FILE. Default is out.%s\n" - " --primary=STRING Set primary message (MaxiCode/Composite)\n" - " --quietzones Add compliant quiet zones\n" - " -r, --reverse Reverse colours (white on black)\n" - " --rotate=NUMBER Rotate symbol by NUMBER degrees\n" - " --rows=NUMBER Set number of rows (Codablock-F/PDF417)\n" - " --scale=NUMBER Adjust size of X-dimension\n" - " --scmvv=NUMBER Prefix SCM with \"[)>\\R01\\Gvv\" (vv is NUMBER) (MaxiCode)\n" - " --secure=NUMBER Set error correction level (ECC)\n" - " --segN=ECI,DATA Set the ECI & data content for segment N, where N 1 to 9\n" - " --separator=NUMBER Set height of row separator bars (stacked symbologies)\n" - " --small Use small text\n" - " --square Force Data Matrix symbols to be square\n" - " --structapp=I,C[,ID] Set Structured Append info (I index, C count)\n" - " -t, --types Display table of barcode types\n" - " --vers=NUMBER Set symbol version (size, check digits, other options)\n" - " -v, --version Display Zint version\n" - " --vwhitesp=NUMBER Set height of vertical whitespace in multiples of X-dim\n" - " -w, --whitesp=NUMBER Set width of horizontal whitespace in multiples of X-dim\n" - " --werror Convert all warnings into errors\n", - no_png_type, no_png_type, no_png_type, no_png_ext - ); + printf("Encode input data in a barcode and save as BMP/EMF/EPS/GIF/PCX%s/SVG/TIF/TXT\n\n", no_png_type); + fputs( " -b, --barcode=TYPE Number or name of barcode type. Default is 20 (CODE128)\n" + " --addongap=NUMBER Set add-on gap in multiples of X-dimension for EAN/UPC\n" + " --batch Treat each line of input file as a separate data set\n" + " --bg=COLOUR Specify a background colour (in hex RGB/RGBA)\n" + " --binary Treat input as raw binary data\n", stdout); + fputs( " --bind Add boundary bars\n" + " --bindtop Add top boundary bar only\n" + " --bold Use bold text\n" + " --border=NUMBER Set width of border in multiples of X-dimension\n" + " --box Add a box around the symbol\n", stdout); + fputs( " --cmyk Use CMYK colour space in EPS/TIF symbols\n" + " --cols=NUMBER Set the number of data columns in symbol\n" + " --compliantheight Warn if height not compliant, and use standard default\n" + " -d, --data=DATA Set the symbol data content (segment 0)\n" + " --direct Send output to stdout\n", stdout); + fputs( " --dmre Allow Data Matrix Rectangular Extended\n" + " --dotsize=NUMBER Set radius of dots in dotty mode\n" + " --dotty Use dots instead of squares for matrix symbols\n" + " --dump Dump hexadecimal representation to stdout\n" + " -e, --ecinos Display ECI (Extended Channel Interpretation) table\n", stdout); + fputs( " --eci=NUMBER Set the ECI code for the data (segment 0)\n" + " --esc Process escape characters in input data\n" + " --fast Use faster encodation (Data Matrix)\n" + " --fg=COLOUR Specify a foreground colour (in hex RGB/RGBA)\n", stdout); + printf(" --filetype=TYPE Set output file type BMP/EMF/EPS/GIF/PCX%s/SVG/TIF/TXT\n", no_png_type); + fputs( " --fullmultibyte Use multibyte for binary/Latin (QR/Han Xin/Grid Matrix)\n" + " --gs1 Treat input as GS1 compatible data\n" + " --gs1nocheck Do not check validity of GS1 data\n" + " --gs1parens Process parentheses \"()\" as GS1 AI delimiters, not \"[]\"\n" + " --gssep Use separator GS for GS1 (Data Matrix)\n", stdout); + fputs( " --guarddescent=NUMBER Set height of guard bar descent in X-dims (EAN/UPC)\n" + " -h, --help Display help message\n" + " --height=NUMBER Set height of symbol in multiples of X-dimension\n" + " --heightperrow Treat height as per-row\n" + " -i, --input=FILE Read input data from FILE\n", stdout); + fputs( " --init Create Reader Initialisation (Programming) symbol\n" + " --mask=NUMBER Set masking pattern to use (QR/Han Xin/DotCode)\n" + " --mirror Use batch data to determine filename\n" + " --mode=NUMBER Set encoding mode (MaxiCode/Composite)\n", stdout); + printf(" --nobackground Remove background (EMF/EPS/GIF%s/SVG/TIF only)\n", no_png_type); + fputs( " --noquietzones Disable default quiet zones\n" + " --notext Remove human readable text\n", stdout); + printf(" -o, --output=FILE Send output to FILE. Default is out.%s\n", no_png_ext); + fputs( " --primary=STRING Set primary message (MaxiCode/Composite)\n" + " --quietzones Add compliant quiet zones\n" + " -r, --reverse Reverse colours (white on black)\n" + " --rotate=NUMBER Rotate symbol by NUMBER degrees\n" + " --rows=NUMBER Set number of rows (Codablock-F/PDF417)\n", stdout); + fputs( " --scale=NUMBER Adjust size of X-dimension\n" + " --scalexdimdp=X[,R] Adjust size to X-dimension X at resolution R\n" + " --scmvv=NUMBER Prefix SCM with \"[)>\\R01\\Gvv\" (vv is NUMBER) (MaxiCode)\n" + " --secure=NUMBER Set error correction level (ECC)\n" + " --segN=ECI,DATA Set the ECI & data content for segment N, where N 1 to 9\n", stdout); + fputs( " --separator=NUMBER Set height of row separator bars (stacked symbologies)\n" + " --small Use small text\n" + " --square Force Data Matrix symbols to be square\n" + " --structapp=I,C[,ID] Set Structured Append info (I index, C count)\n" + " -t, --types Display table of barcode types\n", stdout); + fputs( " --vers=NUMBER Set symbol version (size, check digits, other options)\n" + " -v, --version Display Zint version\n" + " --vwhitesp=NUMBER Set height of vertical whitespace in multiples of X-dim\n" + " -w, --whitesp=NUMBER Set width of horizontal whitespace in multiples of X-dim\n" + " --werror Convert all warnings into errors\n", stdout); } /* Display supported ECI codes */ static void show_eci(void) { - printf( " 3: ISO/IEC 8859-1 - Latin alphabet No. 1 (default)\n" - " 4: ISO/IEC 8859-2 - Latin alphabet No. 2\n" - " 5: ISO/IEC 8859-3 - Latin alphabet No. 3\n" - " 6: ISO/IEC 8859-4 - Latin alphabet No. 4\n" - " 7: ISO/IEC 8859-5 - Latin/Cyrillic alphabet\n" - " 8: ISO/IEC 8859-6 - Latin/Arabic alphabet\n" - " 9: ISO/IEC 8859-7 - Latin/Greek alphabet\n" - " 10: ISO/IEC 8859-8 - Latin/Hebrew alphabet\n" - " 11: ISO/IEC 8859-9 - Latin alphabet No. 5 (Turkish)\n" - " 12: ISO/IEC 8859-10 - Latin alphabet No. 6 (Nordic)\n" - " 13: ISO/IEC 8859-11 - Latin/Thai alphabet\n" - " 15: ISO/IEC 8859-13 - Latin alphabet No. 7 (Baltic)\n" - " 16: ISO/IEC 8859-14 - Latin alphabet No. 8 (Celtic)\n" - " 17: ISO/IEC 8859-15 - Latin alphabet No. 9\n" - " 18: ISO/IEC 8859-16 - Latin alphabet No. 10\n" - " 20: Shift JIS (JIS X 0208 and JIS X 0201)\n" - " 21: Windows 1250 - Latin 2 (Central Europe)\n" - " 22: Windows 1251 - Cyrillic\n" - " 23: Windows 1252 - Latin 1\n" - " 24: Windows 1256 - Arabic\n" - " 25: UTF-16BE (High order byte first)\n" - " 26: UTF-8\n" - " 27: ASCII (ISO/IEC 646 IRV)\n" - " 28: Big5 (Taiwan) Chinese Character Set\n" - " 29: GB 2312 (PRC) Chinese Character Set\n" - " 30: Korean Character Set EUC-KR (KS X 1001:2002)\n" - " 31: GBK Chinese Character Set\n" - " 32: GB 18030 Chinese Character Set\n" - " 33: UTF-16LE (Low order byte first)\n" - " 34: UTF-32BE (High order bytes first)\n" - " 35: UTF-32LE (Low order bytes first)\n" - "170: ISO/IEC 646 Invariant (ASCII subset)\n" - "899: 8-bit binary data\n" - ); + fputs(" 3: ISO/IEC 8859-1 - Latin alphabet No. 1 (default)\n" + " 4: ISO/IEC 8859-2 - Latin alphabet No. 2\n" + " 5: ISO/IEC 8859-3 - Latin alphabet No. 3\n" + " 6: ISO/IEC 8859-4 - Latin alphabet No. 4\n" + " 7: ISO/IEC 8859-5 - Latin/Cyrillic alphabet\n", stdout); + fputs(" 8: ISO/IEC 8859-6 - Latin/Arabic alphabet\n" + " 9: ISO/IEC 8859-7 - Latin/Greek alphabet\n" + " 10: ISO/IEC 8859-8 - Latin/Hebrew alphabet\n" + " 11: ISO/IEC 8859-9 - Latin alphabet No. 5 (Turkish)\n" + " 12: ISO/IEC 8859-10 - Latin alphabet No. 6 (Nordic)\n", stdout); + fputs(" 13: ISO/IEC 8859-11 - Latin/Thai alphabet\n" + " 15: ISO/IEC 8859-13 - Latin alphabet No. 7 (Baltic)\n" + " 16: ISO/IEC 8859-14 - Latin alphabet No. 8 (Celtic)\n" + " 17: ISO/IEC 8859-15 - Latin alphabet No. 9\n" + " 18: ISO/IEC 8859-16 - Latin alphabet No. 10\n", stdout); + fputs(" 20: Shift JIS (JIS X 0208 and JIS X 0201)\n" + " 21: Windows 1250 - Latin 2 (Central Europe)\n" + " 22: Windows 1251 - Cyrillic\n" + " 23: Windows 1252 - Latin 1\n" + " 24: Windows 1256 - Arabic\n", stdout); + fputs(" 25: UTF-16BE (High order byte first)\n" + " 26: UTF-8\n" + " 27: ASCII (ISO/IEC 646 IRV)\n" + " 28: Big5 (Taiwan) Chinese Character Set\n" + " 29: GB 2312 (PRC) Chinese Character Set\n", stdout); + fputs(" 30: Korean Character Set EUC-KR (KS X 1001:2002)\n" + " 31: GBK Chinese Character Set\n" + " 32: GB 18030 Chinese Character Set\n" + " 33: UTF-16LE (Low order byte first)\n" + " 34: UTF-32BE (High order bytes first)\n", stdout); + fputs(" 35: UTF-32LE (Low order bytes first)\n" + "170: ISO/IEC 646 Invariant (ASCII subset)\n" + "899: 8-bit binary data\n", stdout); } /* Verifies that a string (length <= 9) only uses digits. On success returns value in arg */ -static int validate_int(const char source[], int *p_val) { +static int validate_int(const char source[], int len, int *p_val) { int val = 0; int i; - const int length = (int) strlen(source); + const int length = len == -1 ? (int) strlen(source) : len; if (length > 9) { /* Prevent overflow */ return 0; @@ -267,13 +265,67 @@ static int validate_int(const char source[], int *p_val) { return 1; } +/* Verifies that a string is a simplified form of floating point, max 7 significant decimal digits with + optional decimal point. On success returns val in arg. On failure sets `errbuf` */ +static int validate_float(const char source[], float *p_val, char errbuf[64]) { + static const float fract_muls[7] = { 0.1f, 0.01f, 0.001f, 0.0001f, 0.00001f, 0.000001f, 0.0000001f }; + int val = 0; + const char *dot = strchr(source, '.'); + int int_len = dot ? (int) (dot - source) : (int) strlen(source); + if (int_len > 9) { + strcpy(errbuf, "integer part must be 7 digits maximum"); /* Say 7 not 9 to "manage expections" */ + return 0; + } + if (int_len) { + int tmp_val; + if (!validate_int(source, int_len, &val)) { + strcpy(errbuf, "integer part must be digits only"); + return 0; + } + for (int_len = 0, tmp_val = val; tmp_val; tmp_val /= 10, int_len++); /* log10(val) */ + if (int_len > 7) { + strcpy(errbuf, "integer part must be 7 digits maximum"); + return 0; + } + } + if (dot && *++dot) { + int val2, fract_len; + const char *e; + for (e = dot + strlen(dot) - 1; e > dot && *e == '0'; e--); /* Ignore trailing zeroes */ + fract_len = (int) (e + 1 - dot); + if (fract_len) { + if (fract_len > 7) { + strcpy(errbuf, "fractional part must be 7 digits maximum"); + return 0; + } + if (!validate_int(dot, fract_len, &val2)) { + strcpy(errbuf, "fractional part must be digits only"); + return 0; + } + if (val2 && int_len + fract_len > 7) { + if (val) { + strcpy(errbuf, "7 significant digits maximum"); + } else { + strcpy(errbuf, "fractional part must be 7 digits maximum"); + } + return 0; + } + *p_val = val + val2 * fract_muls[fract_len - 1]; + } else { + *p_val = (float) val; + } + } else { + *p_val = (float) val; + } + return 1; +} + /* Converts an integer value to its hexadecimal character */ static char itoc(const int source) { if ((source >= 0) && (source <= 9)) { return ('0' + source); - } else { - return ('A' + (source - 10)); } + return ('A' - 10 + source); } /* Converts upper case characters to lower case in a string source[] */ @@ -327,7 +379,8 @@ static int get_barcode_name(const char *barcode_name) { { BARCODE_CODABLOCKF, "codablockf" }, { BARCODE_CODE11, "code11" }, { BARCODE_CODE128, "code128" }, - { BARCODE_CODE128B, "code128b" }, + { BARCODE_CODE128AB, "code128ab" }, + { BARCODE_CODE128AB, "code128b" }, /* Synonym */ { BARCODE_CODE16K, "code16k" }, { BARCODE_C25LOGIC, "code2of5datalogic" }, /* Synonym */ { BARCODE_C25IATA, "code2of5iata" }, /* Synonym */ @@ -616,6 +669,87 @@ static int is_raster(const char *filetype, const int no_png) { return 0; } +/* Helper for `validate_scalexdimdp()` to search for units, returning -2 on error, -1 if not found, else index */ +static int validate_units(char *buf, const char *units[], int units_size) { + int i; + char *unit; + + to_lower(buf); + for (i = 0; i < units_size; i++) { + if ((unit = strstr(buf, units[i])) != NULL) { + if (strlen(units[i]) != strlen(unit)) { + return -2; + } + *unit = '\0'; + break; + } + } + if (i == units_size) { + i = -1; + } + return i; +} + +/* Parse and validate argument "xdim[,resolution]" to "--scalexdimdp" */ +static int validate_scalexdimdp(const char *optarg, float *p_x_dim_mm, float *p_dpmm) { + static const char *x_units[] = { "mm", "in" }; + static const char *r_units[] = { "dpmm", "dpi" }; + char x_buf[7 + 1 + 4 + 1] = {0}; /* Allow for 7 digits + dot + 4-char unit + NUL */ + char r_buf[7 + 1 + 4 + 1] = {0}; /* As above */ + int units_i; /* For `validate_units()` */ + char errbuf[64]; /* For `validate_float()` */ + const char *comma = strchr(optarg, ','); + if (comma) { + if (comma == optarg || comma - optarg >= ARRAY_SIZE(x_buf)) { + fprintf(stderr, "Error 174: scalexdimdp X-dim too %s\n", comma == optarg ? "short" : "long"); + return 0; + } + strncpy(x_buf, optarg, comma - optarg); + comma++; + if (!*comma || strlen(comma) >= ARRAY_SIZE(r_buf)) { + fprintf(stderr, "Error 175: scalexdimdp resolution too %s\n", !*comma ? "short" : "long"); + return 0; + } + strcpy(r_buf, comma); + } else { + if (!*optarg || strlen(optarg) >= ARRAY_SIZE(x_buf)) { + fprintf(stderr, "Error 176: scalexdimdp X-dim too %s\n", !*optarg ? "short" : "long"); + return 0; + } + strcpy(x_buf, optarg); + } + if ((units_i = validate_units(x_buf, x_units, ARRAY_SIZE(x_units))) == -2) { + fprintf(stderr, "Error 177: scalexdimdp X-dim units must occur at end\n"); + return 0; + } + if (!validate_float(x_buf, p_x_dim_mm, errbuf)) { + fprintf(stderr, "Error 178: scalexdimdp X-dim invalid floating point (%s)\n", errbuf); + return 0; + } + if (units_i > 0) { /* Ignore mm */ + *p_x_dim_mm /= 25.4f /*in*/; + } + *p_dpmm = 0.0f; + if (comma) { + if ((units_i = validate_units(r_buf, r_units, ARRAY_SIZE(r_units))) == -2) { + fprintf(stderr, "Error 179: scalexdimdp resolution units must occur at end\n"); + return 0; + } + if (!validate_float(r_buf, p_dpmm, errbuf)) { + fprintf(stderr, "Error 180: scalexdimdp resolution invalid floating point (%s)\n", errbuf); + return 0; + } + if (units_i > 0) { /* Ignore dpmm */ + *p_dpmm /= 25.4f /*dpi*/; + } + } + if (*p_dpmm == 0.0f) { + *p_dpmm = 12.0f; /* 300 dpi */ + } + + return 1; +} + /* Parse and validate Structured Append argument "index,count[,ID]" to "--structapp" */ int validate_structapp(const char *optarg, struct zint_structapp *structapp) { char index[10] = {0}, count[10] = {0}; @@ -651,11 +785,11 @@ int validate_structapp(const char *optarg, struct zint_structapp *structapp) { } strcpy(count, comma); } - if (!validate_int(index, &structapp->index)) { + if (!validate_int(index, -1 /*len*/, &structapp->index)) { fprintf(stderr, "Error 160: Invalid Structured Append index (digits only)\n"); return 0; } - if (!validate_int(count, &structapp->count)) { + if (!validate_int(count, -1 /*len*/, &structapp->count)) { fprintf(stderr, "Error 161: Invalid Structured Append count (digits only)\n"); return 0; } @@ -680,7 +814,7 @@ static int validate_seg(const char *optarg, const int N, struct zint_seg segs[10 return 0; } strncpy(eci, optarg, comma - optarg); - if (!validate_int(eci, &segs[N].eci)) { + if (!validate_int(eci, -1 /*len*/, &segs[N].eci)) { fprintf(stderr, "Error 167: Invalid segment ECI (digits only)\n"); return 0; } @@ -991,7 +1125,9 @@ int main(int argc, char **argv) { char *outfile_extension; int data_arg_num = 0; int seg_count = 0; + float x_dim_mm = 0.0f, dpmm = 0.0f; float float_opt; + char errbuf[64]; /* For `validate_float()` */ arg_opt *arg_opts = (arg_opt *) z_alloca(sizeof(arg_opt) * argc); int no_getopt_error = 1; @@ -1022,7 +1158,7 @@ int main(int argc, char **argv) { OPT_GS1, OPT_GS1NOCHECK, OPT_GS1PARENS, OPT_GSSEP, OPT_GUARDDESCENT, OPT_HEIGHT, OPT_HEIGHTPERROW, OPT_INIT, OPT_MIRROR, OPT_MASK, OPT_MODE, OPT_NOBACKGROUND, OPT_NOQUIETZONES, OPT_NOTEXT, OPT_PRIMARY, OPT_QUIETZONES, - OPT_ROTATE, OPT_ROWS, OPT_SCALE, OPT_SCMVV, OPT_SECURE, + OPT_ROTATE, OPT_ROWS, OPT_SCALE, OPT_SCALEXDIM, OPT_SCMVV, OPT_SECURE, OPT_SEG1, OPT_SEG2, OPT_SEG3, OPT_SEG4, OPT_SEG5, OPT_SEG6, OPT_SEG7, OPT_SEG8, OPT_SEG9, OPT_SEPARATOR, OPT_SMALL, OPT_SQUARE, OPT_STRUCTAPP, OPT_VERBOSE, OPT_VERS, OPT_VWHITESP, OPT_WERROR @@ -1079,6 +1215,7 @@ int main(int argc, char **argv) { {"rotate", 1, NULL, OPT_ROTATE}, {"rows", 1, NULL, OPT_ROWS}, {"scale", 1, NULL, OPT_SCALE}, + {"scalexdimdp", 1, NULL, OPT_SCALEXDIM}, {"scmvv", 1, NULL, OPT_SCMVV}, {"secure", 1, NULL, OPT_SECURE}, {"seg1", 1, NULL, OPT_SEG1}, @@ -1108,7 +1245,7 @@ int main(int argc, char **argv) { switch (c) { case OPT_ADDONGAP: - if (!validate_int(optarg, &val)) { + if (!validate_int(optarg, -1 /*len*/, &val)) { fprintf(stderr, "Error 139: Invalid add-on gap value (digits only)\n"); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1146,7 +1283,7 @@ int main(int argc, char **argv) { my_symbol->output_options |= BOLD_TEXT; break; case OPT_BORDER: - if (!validate_int(optarg, &val)) { + if (!validate_int(optarg, -1 /*len*/, &val)) { fprintf(stderr, "Error 107: Invalid border width value (digits only)\n"); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1165,7 +1302,7 @@ int main(int argc, char **argv) { my_symbol->output_options |= CMYK_COLOUR; break; case OPT_COLS: - if (!validate_int(optarg, &val)) { + if (!validate_int(optarg, -1 /*len*/, &val)) { fprintf(stderr, "Error 131: Invalid columns value (digits only)\n"); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1190,13 +1327,16 @@ int main(int argc, char **argv) { } break; case OPT_DOTSIZE: - my_symbol->dot_size = (float) (atof(optarg)); - if (my_symbol->dot_size < 0.01f) { - /* Zero and negative values are not permitted */ + if (!validate_float(optarg, &float_opt, errbuf)) { + fprintf(stderr, "Error 181: Invalid dot radius floating point (%s)\n", errbuf); + return do_exit(ZINT_ERROR_INVALID_OPTION); + } + if (float_opt >= 0.01f) { + my_symbol->dot_size = float_opt; + } else { fprintf(stderr, "Warning 106: Invalid dot radius value (less than 0.01), ignoring\n"); fflush(stderr); warn_number = ZINT_WARN_INVALID_OPTION; - my_symbol->dot_size = 4.0f / 5.0f; } break; case OPT_DOTTY: @@ -1207,7 +1347,7 @@ int main(int argc, char **argv) { strcpy(my_symbol->outfile, "dummy.txt"); break; case OPT_ECI: - if (!validate_int(optarg, &val)) { + if (!validate_int(optarg, -1 /*len*/, &val)) { fprintf(stderr, "Error 138: Invalid ECI value (digits only)\n"); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1230,7 +1370,9 @@ int main(int argc, char **argv) { break; case OPT_FILETYPE: /* Select the type of output file */ - if (!supported_filetype(optarg, no_png, &png_refused)) { + if (supported_filetype(optarg, no_png, &png_refused)) { + strncpy(filetype, optarg, (size_t) 3); + } else { if (png_refused) { fprintf(stderr, "Warning 152: PNG format disabled at compile time, ignoring\n"); } else { @@ -1238,12 +1380,10 @@ int main(int argc, char **argv) { } fflush(stderr); warn_number = ZINT_WARN_INVALID_OPTION; - } else { - strncpy(filetype, optarg, (size_t) 3); } break; case OPT_FONTSIZE: - if (!validate_int(optarg, &val)) { + if (!validate_int(optarg, -1 /*len*/, &val)) { fprintf(stderr, "Error 130: Invalid font size value (digits only)\n"); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1271,7 +1411,10 @@ int main(int argc, char **argv) { my_symbol->output_options |= GS1_GS_SEPARATOR; break; case OPT_GUARDDESCENT: - float_opt = (float) atof(optarg); + if (!validate_float(optarg, &float_opt, errbuf)) { + fprintf(stderr, "Error 182: Invalid guard bar descent floating point (%s)\n", errbuf); + return do_exit(ZINT_ERROR_INVALID_OPTION); + } if (float_opt >= 0.0f && float_opt <= 50.0f) { my_symbol->guard_descent = float_opt; } else { @@ -1282,7 +1425,10 @@ int main(int argc, char **argv) { } break; case OPT_HEIGHT: - float_opt = (float) atof(optarg); + if (!validate_float(optarg, &float_opt, errbuf)) { + fprintf(stderr, "Error 183: Invalid symbol height floating point (%s)\n", errbuf); + return do_exit(ZINT_ERROR_INVALID_OPTION); + } if (float_opt >= 0.5f && float_opt <= 2000.0f) { my_symbol->height = float_opt; } else { @@ -1303,7 +1449,7 @@ int main(int argc, char **argv) { mirror_mode = 1; break; case OPT_MASK: - if (!validate_int(optarg, &val)) { + if (!validate_int(optarg, -1 /*len*/, &val)) { fprintf(stderr, "Error 148: Invalid mask value (digits only)\n"); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1317,7 +1463,7 @@ int main(int argc, char **argv) { } break; case OPT_MODE: - if (!validate_int(optarg, &val)) { + if (!validate_int(optarg, -1 /*len*/, &val)) { fprintf(stderr, "Error 136: Invalid mode value (digits only)\n"); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1352,7 +1498,7 @@ int main(int argc, char **argv) { break; case OPT_ROTATE: /* Only certain inputs allowed */ - if (!validate_int(optarg, &val)) { + if (!validate_int(optarg, -1 /*len*/, &val)) { fprintf(stderr, "Error 117: Invalid rotation value (digits only)\n"); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1374,7 +1520,7 @@ int main(int argc, char **argv) { } break; case OPT_ROWS: - if (!validate_int(optarg, &val)) { + if (!validate_int(optarg, -1 /*len*/, &val)) { fprintf(stderr, "Error 132: Invalid rows value (digits only)\n"); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1387,17 +1533,37 @@ int main(int argc, char **argv) { } break; case OPT_SCALE: - my_symbol->scale = (float) (atof(optarg)); - if (my_symbol->scale < 0.01f) { - /* Zero and negative values are not permitted */ + if (!validate_float(optarg, &float_opt, errbuf)) { + fprintf(stderr, "Error 184: Invalid scale floating point (%s)\n", errbuf); + return do_exit(ZINT_ERROR_INVALID_OPTION); + } + if (float_opt >= 0.01f) { + my_symbol->scale = float_opt; + } else { fprintf(stderr, "Warning 105: Invalid scale value (less than 0.01), ignoring\n"); fflush(stderr); warn_number = ZINT_WARN_INVALID_OPTION; - my_symbol->scale = 1.0f; + } + break; + case OPT_SCALEXDIM: + if (!validate_scalexdimdp(optarg, &x_dim_mm, &dpmm)) { + return do_exit(ZINT_ERROR_INVALID_OPTION); + } + if (x_dim_mm > 10.0f || dpmm > 1000.0f) { + if (x_dim_mm > 10.0f) { + fprintf(stderr, + "Warning 185: scalexdimdp X-dim (%g) out of range (> 10), ignoring\n", x_dim_mm); + } else { + fprintf(stderr, + "Warning 186: scalexdimdp resolution (%g) out of range (> 1000), ignoring\n", dpmm); + } + fflush(stderr); + warn_number = ZINT_WARN_INVALID_OPTION; + x_dim_mm = dpmm = 0.0f; } break; case OPT_SCMVV: - if (!validate_int(optarg, &val)) { + if (!validate_int(optarg, -1 /*len*/, &val)) { fprintf(stderr, "Error 149: Invalid Structured Carrier Message version value (digits only)\n"); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1412,7 +1578,7 @@ int main(int argc, char **argv) { } break; case OPT_SECURE: - if (!validate_int(optarg, &val)) { + if (!validate_int(optarg, -1 /*len*/, &val)) { fprintf(stderr, "Error 134: Invalid ECC value (digits only)\n"); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1452,7 +1618,7 @@ int main(int argc, char **argv) { } break; case OPT_SEPARATOR: - if (!validate_int(optarg, &val)) { + if (!validate_int(optarg, -1 /*len*/, &val)) { fprintf(stderr, "Error 128: Invalid separator value (digits only)\n"); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1481,7 +1647,7 @@ int main(int argc, char **argv) { my_symbol->debug = 1; break; case OPT_VERS: - if (!validate_int(optarg, &val)) { + if (!validate_int(optarg, -1 /*len*/, &val)) { fprintf(stderr, "Error 133: Invalid version value (digits only)\n"); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1494,7 +1660,7 @@ int main(int argc, char **argv) { } break; case OPT_VWHITESP: - if (!validate_int(optarg, &val)) { + if (!validate_int(optarg, -1 /*len*/, &val)) { fprintf(stderr, "Error 153: Invalid vertical whitespace value '%s' (digits only)\n", optarg); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1528,7 +1694,7 @@ int main(int argc, char **argv) { break; case 'b': - if (!validate_int(optarg, &val) && !(val = get_barcode_name(optarg))) { + if (!validate_int(optarg, -1 /*len*/, &val) && !(val = get_barcode_name(optarg))) { fprintf(stderr, "Error 119: Invalid barcode type '%s'\n", optarg); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1536,7 +1702,7 @@ int main(int argc, char **argv) { break; case 'w': - if (!validate_int(optarg, &val)) { + if (!validate_int(optarg, -1 /*len*/, &val)) { fprintf(stderr, "Error 120: Invalid horizontal whitespace value '%s' (digits only)\n", optarg); return do_exit(ZINT_ERROR_INVALID_OPTION); } @@ -1570,7 +1736,7 @@ int main(int argc, char **argv) { input_cnt++; } else { fprintf(stderr, "Warning 143: Can only define one input file in batch mode, ignoring '%s'\n", - optarg); + optarg); fflush(stderr); warn_number = ZINT_WARN_INVALID_OPTION; } @@ -1601,6 +1767,15 @@ int main(int argc, char **argv) { break; } } + if (optind != argc) { + if (optind + 1 == argc) { + fprintf(stderr, "Warning 191: extra argument '%s' ignored\n", argv[optind]); + } else { + fprintf(stderr, "Warning 192: extra arguments beginning with '%s' ignored\n", argv[optind]); + } + fflush(stderr); + warn_number = ZINT_WARN_INVALID_OPTION; + } if (data_arg_num) { const int symbology = my_symbol->symbology; @@ -1648,11 +1823,26 @@ int main(int argc, char **argv) { strcpy(filetype, no_png ? "gif" : "png"); } } + if (dpmm) { /* Allow `x_dim_mm` to be zero */ + if (x_dim_mm == 0.0f) { + x_dim_mm = ZBarcode_Default_Xdim(symbology); + } + float_opt = ZBarcode_Scale_From_XdimDp(symbology, x_dim_mm, dpmm, filetype); + if (float_opt > 0.0f) { + my_symbol->scale = float_opt; + my_symbol->dpmm = dpmm; + } else { + fprintf(stderr, "Warning 187: Invalid scalexdimdp X-dim (%g), resolution (%g) combo, ignoring\n", + x_dim_mm, dpmm); + fflush(stderr); + warn_number = ZINT_WARN_INVALID_OPTION; + } + } if (((symbology != BARCODE_MAXICODE && my_symbol->scale < 0.5f) || my_symbol->scale < 0.2f) && is_raster(filetype, no_png)) { const int min = symbology != BARCODE_MAXICODE ? 5 : 2; fprintf(stderr, "Warning 145: Scaling less than 0.%d will be set to 0.%d for '%s' output\n", min, min, - filetype); + filetype); fflush(stderr); warn_number = ZINT_WARN_INVALID_OPTION; } @@ -1681,11 +1871,26 @@ int main(int argc, char **argv) { if (filetype[0] != '\0') { set_extension(my_symbol->outfile, filetype); } + if (dpmm) { /* Allow `x_dim_mm` to be zero */ + if (x_dim_mm == 0.0f) { + x_dim_mm = ZBarcode_Default_Xdim(symbology); + } + float_opt = ZBarcode_Scale_From_XdimDp(symbology, x_dim_mm, dpmm, get_extension(my_symbol->outfile)); + if (float_opt > 0.0f) { + my_symbol->scale = float_opt; + my_symbol->dpmm = dpmm; + } else { + fprintf(stderr, "Warning 190: Invalid scalexdimdp X-dim (%g), resolution (%g) combo, ignoring\n", + x_dim_mm, dpmm); + fflush(stderr); + warn_number = ZINT_WARN_INVALID_OPTION; + } + } if (((symbology != BARCODE_MAXICODE && my_symbol->scale < 0.5f) || my_symbol->scale < 0.2f) && is_raster(get_extension(my_symbol->outfile), no_png)) { const int min = symbology != BARCODE_MAXICODE ? 5 : 2; fprintf(stderr, "Warning 146: Scaling less than 0.%d will be set to 0.%d for '%s' output\n", min, min, - get_extension(my_symbol->outfile)); + get_extension(my_symbol->outfile)); fflush(stderr); warn_number = ZINT_WARN_INVALID_OPTION; } diff --git a/frontend/tests/test_args.c b/frontend/tests/test_args.c index 684a609e..00f10b54 100644 --- a/frontend/tests/test_args.c +++ b/frontend/tests/test_args.c @@ -162,7 +162,7 @@ static void arg_bool(char *cmd, const char *opt, int val) { static void arg_double(char *cmd, const char *opt, double val) { if (val != -1) { - sprintf(cmd + (int) strlen(cmd), "%s%s%g", strlen(cmd) ? " " : "", opt, val); + sprintf(cmd + (int) strlen(cmd), "%s%s%.8f", strlen(cmd) ? " " : "", opt, val); } } @@ -560,6 +560,7 @@ static void test_input(const testCtx *const p_ctx) { arg_input(cmd, input_filename, data[i].input); arg_data(cmd, "-o ", data[i].outfile); + if (!data[i].expected) printf("++++ Following Error 778 expected, ignore\n"); assert_nonnull(exec(cmd, buf, sizeof(buf) - 1, debug, i, NULL), "i:%d exec(%s) NULL\n", i, cmd); outfile = data[i].expected; @@ -731,6 +732,7 @@ static void test_batch_large(const testCtx *const p_ctx) { strcat(data_buf, "\n"); have_input = arg_input(cmd, input_filename, data_buf); + if (!data[i].expected) printf("++++ Following Error 541 expected, ignore\n"); assert_nonnull(exec(cmd, buf, sizeof(buf) - 1, debug, i, NULL), "i:%d exec(%s) NULL\n", i, cmd); if (data[i].expected) { assert_zero(remove(data[i].expected), "i:%d remove(%s) != 0 (%d: %s)\n", i, data[i].expected, errno, strerror(errno)); @@ -779,38 +781,39 @@ static void test_checks(const testCtx *const p_ctx) { /* 2*/ { 13, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 140: Add-on gap out of range (7 to 12), ignoring" }, /* 3*/ { -1, -2, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Error 107: Invalid border width value (digits only)" }, /* 4*/ { -1, 1001, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 108: Border width out of range (0 to 1000), ignoring" }, - /* 5*/ { -1, -1, -1, 0.009, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 106: Invalid dot radius value (less than 0.01), ignoring" }, - /* 6*/ { -1, -1, -2, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Error 131: Invalid columns value (digits only)" }, - /* 7*/ { -1, -1, 201, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 111: Number of columns out of range (1 to 200), ignoring" }, - /* 8*/ { -1, -1, -1, -1, -2, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Error 138: Invalid ECI value (digits only)" }, - /* 9*/ { -1, -1, -1, -1, 1000000, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 118: ECI code out of range (0 to 999999), ignoring" }, - /* 10*/ { -1, -1, -1, -1, -1, "jpg", -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 142: File type 'jpg' not supported, ignoring" }, - /* 11*/ { -1, -1, -1, -1, -1, NULL, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 110: Symbol height '-2' out of range (0.5 to 2000), ignoring" }, - /* 12*/ { -1, -1, -1, -1, -1, NULL, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 110: Symbol height '0' out of range (0.5 to 2000), ignoring" }, - /* 13*/ { -1, -1, -1, -1, -1, NULL, 2001, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 110: Symbol height '2001' out of range (0.5 to 2000), ignoring" }, - /* 14*/ { -1, -1, -1, -1, -1, NULL, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 135: Guard bar descent '-2' out of range (0 to 50), ignoring" }, - /* 15*/ { -1, -1, -1, -1, -1, NULL, -1, 50.1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 135: Guard bar descent '50.1' out of range (0 to 50), ignoring" }, - /* 16*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Error 148: Invalid mask value (digits only)" }, - /* 17*/ { -1, -1, -1, -1, -1, NULL, -1, -1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 147: Mask value out of range (0 to 7), ignoring" }, - /* 18*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 116: Mode value out of range (0 to 6), ignoring" }, - /* 19*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, "Error 117: Invalid rotation value (digits only)" }, - /* 20*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 137: Invalid rotation parameter (0, 90, 180 or 270 only), ignoring" }, - /* 21*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, "Error 132: Invalid rows value (digits only)" }, - /* 22*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, -1, "Warning 112: Number of rows out of range (1 to 90), ignoring" }, - /* 23*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, "Warning 105: Invalid scale value (less than 0.01), ignoring" }, - /* 24*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, 0.49, -1, -1, -1, -1, -1, -1, "Warning 146: Scaling less than 0.5 will be set to 0.5 for 'gif' output" }, - /* 25*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -2, -1, -1, -1, -1, -1, "Error 149: Invalid Structured Carrier Message version value (digits only)" }, - /* 26*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, 100, -1, -1, -1, -1, -1, "Warning 150: Structured Carrier Message version out of range (0 to 99), ignoring" }, - /* 27*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, -1, -1, -1, "Error 134: Invalid ECC value (digits only)" }, - /* 28*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, 9, -1, -1, -1, -1, "Warning 114: ECC level out of range (0 to 8), ignoring" }, - /* 29*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, -1, -1, "Error 128: Invalid separator value (digits only)" }, - /* 30*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1, -1, "Warning 127: Separator value out of range (0 to 4), ignoring" }, - /* 31*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, -1, "Error 133: Invalid version value (digits only)" }, - /* 32*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1000, -1, -1, "Warning 113: Version value out of range (1 to 999), ignoring" }, - /* 33*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, "Error 153: Invalid vertical whitespace value '-2' (digits only)" }, - /* 34*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1001, -1, "Warning 154: Vertical whitespace value out of range (0 to 1000), ignoring" }, - /* 35*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, "Error 120: Invalid horizontal whitespace value '-2' (digits only)" }, - /* 36*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1001, "Warning 121: Horizontal whitespace value out of range (0 to 1000), ignoring" }, + /* 5*/ { -1, -1, -1, 12345678, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Error 181: Invalid dot radius floating point (integer part must be 7 digits maximum)" }, + /* 6*/ { -1, -1, -1, 0.009, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 106: Invalid dot radius value (less than 0.01), ignoring" }, + /* 7*/ { -1, -1, -2, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Error 131: Invalid columns value (digits only)" }, + /* 8*/ { -1, -1, 201, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 111: Number of columns out of range (1 to 200), ignoring" }, + /* 9*/ { -1, -1, -1, -1, -2, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Error 138: Invalid ECI value (digits only)" }, + /* 10*/ { -1, -1, -1, -1, 1000000, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 118: ECI code out of range (0 to 999999), ignoring" }, + /* 11*/ { -1, -1, -1, -1, -1, "jpg", -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 142: File type 'jpg' not supported, ignoring" }, + /* 12*/ { -1, -1, -1, -1, -1, NULL, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Error 183: Invalid symbol height floating point (integer part must be digits only)" }, + /* 13*/ { -1, -1, -1, -1, -1, NULL, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 110: Symbol height '0' out of range (0.5 to 2000), ignoring" }, + /* 14*/ { -1, -1, -1, -1, -1, NULL, 2001, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 110: Symbol height '2001' out of range (0.5 to 2000), ignoring" }, + /* 15*/ { -1, -1, -1, -1, -1, NULL, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Error 182: Invalid guard bar descent floating point (integer part must be digits only)" }, + /* 16*/ { -1, -1, -1, -1, -1, NULL, -1, 50.1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 135: Guard bar descent '50.1' out of range (0 to 50), ignoring" }, + /* 17*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Error 148: Invalid mask value (digits only)" }, + /* 18*/ { -1, -1, -1, -1, -1, NULL, -1, -1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 147: Mask value out of range (0 to 7), ignoring" }, + /* 19*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 116: Mode value out of range (0 to 6), ignoring" }, + /* 20*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, "Error 117: Invalid rotation value (digits only)" }, + /* 21*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, "Warning 137: Invalid rotation parameter (0, 90, 180 or 270 only), ignoring" }, + /* 22*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, "Error 132: Invalid rows value (digits only)" }, + /* 23*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, -1, "Warning 112: Number of rows out of range (1 to 90), ignoring" }, + /* 24*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, "Error 184: Invalid scale floating point (integer part must be digits only)" }, + /* 25*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, 0.49, -1, -1, -1, -1, -1, -1, "Warning 146: Scaling less than 0.5 will be set to 0.5 for 'gif' output" }, + /* 26*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -2, -1, -1, -1, -1, -1, "Error 149: Invalid Structured Carrier Message version value (digits only)" }, + /* 27*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, 100, -1, -1, -1, -1, -1, "Warning 150: Structured Carrier Message version out of range (0 to 99), ignoring" }, + /* 28*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, -1, -1, -1, "Error 134: Invalid ECC value (digits only)" }, + /* 29*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, 9, -1, -1, -1, -1, "Warning 114: ECC level out of range (0 to 8), ignoring" }, + /* 30*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, -1, -1, "Error 128: Invalid separator value (digits only)" }, + /* 31*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1, -1, "Warning 127: Separator value out of range (0 to 4), ignoring" }, + /* 32*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, -1, "Error 133: Invalid version value (digits only)" }, + /* 33*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1000, -1, -1, "Warning 113: Version value out of range (1 to 999), ignoring" }, + /* 34*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, -1, "Error 153: Invalid vertical whitespace value '-2' (digits only)" }, + /* 35*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1001, -1, "Warning 154: Vertical whitespace value out of range (0 to 1000), ignoring" }, + /* 36*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, "Error 120: Invalid horizontal whitespace value '-2' (digits only)" }, + /* 37*/ { -1, -1, -1, -1, -1, NULL, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1001, "Warning 121: Horizontal whitespace value out of range (0 to 1000), ignoring" }, }; int data_size = ARRAY_SIZE(data); int i; @@ -853,7 +856,7 @@ static void test_checks(const testCtx *const p_ctx) { strcat(cmd, " 2>&1"); assert_nonnull(exec(cmd, buf, sizeof(buf) - 1, debug, i, NULL), "i:%d exec(%s) NULL\n", i, cmd); - assert_zero(strcmp(buf, data[i].expected), "i:%d buf (%s) != expected (%s)\n", i, buf, data[i].expected); + assert_zero(strcmp(buf, data[i].expected), "i:%d buf (%s) != expected (%s) (%s)\n", i, buf, data[i].expected, cmd); if (strncmp(data[i].expected, "Warning", 7) == 0) { assert_zero(remove(outfilename), "i:%d remove(%s) != 0 (%d: %s)\n", i, outfilename, errno, strerror(errno)); @@ -966,115 +969,116 @@ static void test_barcode_symbology(const testCtx *const p_ctx) { /* 88*/ { "MaxiCode", "1", NULL, 0, "BARCODE_MAXICODE (57)," }, /* 89*/ { "QR CODE", "1", NULL, 0, "BARCODE_QRCODE (58)," }, /* 90*/ { "qr", "1", NULL, 0, "BARCODE_QRCODE (58)," }, /* Synonym */ - /* 91*/ { "Code 128 B", "1", NULL, 0, "BARCODE_CODE128B (60)," }, - /* 92*/ { "AUS POST", "12345678901234567890123", NULL, 0, "BARCODE_AUSPOST (63)," }, - /* 93*/ { "AusReply", "12345678", NULL, 0, "BARCODE_AUSREPLY (66)," }, - /* 94*/ { "AUSROUTE", "12345678", NULL, 0, "BARCODE_AUSROUTE (67)," }, - /* 95*/ { "AUS REDIRECT", "12345678", NULL, 0, "BARCODE_AUSREDIRECT (68)," }, - /* 96*/ { "isbnx", "123456789", NULL, 0, "BARCODE_ISBNX (69)," }, - /* 97*/ { "rm4scc", "1", NULL, 0, "BARCODE_RM4SCC (70)," }, - /* 98*/ { "DataMatrix", "1", NULL, 0, "BARCODE_DATAMATRIX (71)," }, - /* 99*/ { "EAN14", "1", NULL, 0, "BARCODE_EAN14 (72)," }, - /*100*/ { "vin", "12345678701234567", NULL, 0, "BARCODE_VIN (73)" }, - /*101*/ { "CodaBlock-F", "1", NULL, 0, "BARCODE_CODABLOCKF (74)," }, - /*102*/ { "NVE18", "1", NULL, 0, "BARCODE_NVE18 (75)," }, - /*103*/ { "Japan Post", "1", NULL, 0, "BARCODE_JAPANPOST (76)," }, - /*104*/ { "Korea Post", "1", NULL, 0, "BARCODE_KOREAPOST (77)," }, - /*105*/ { "DBar Stk", "1", NULL, 0, "BARCODE_DBAR_STK (79)," }, - /*106*/ { "rss14stack", "1", NULL, 0, "BARCODE_DBAR_STK (79)," }, - /*107*/ { "DataBar Stk", "1", NULL, 0, "BARCODE_DBAR_STK (79)," }, - /*108*/ { "DataBar Stacked", "1", NULL, 0, "BARCODE_DBAR_STK (79)," }, - /*109*/ { "DBar Omn Stk", "1", NULL, 0, "BARCODE_DBAR_OMNSTK (80)," }, - /*110*/ { "RSS14STACK OMNI", "1", NULL, 0, "BARCODE_DBAR_OMNSTK (80)," }, - /*111*/ { "DataBar Omn Stk", "1", NULL, 0, "BARCODE_DBAR_OMNSTK (80)," }, - /*112*/ { "DataBar Stacked Omn", "1", NULL, 0, "BARCODE_DBAR_OMNSTK (80)," }, - /*113*/ { "DataBar Stacked Omni", "1", NULL, 0, "BARCODE_DBAR_OMNSTK (80)," }, - /*114*/ { "DBar Exp Stk", "[20]01", NULL, 0, "BARCODE_DBAR_EXPSTK (81)," }, - /*115*/ { "rss_expstack", "[20]01", NULL, 0, "BARCODE_DBAR_EXPSTK (81)," }, - /*116*/ { "DataBar Exp Stk", "[20]01", NULL, 0, "BARCODE_DBAR_EXPSTK (81)," }, - /*117*/ { "DataBar Expanded Stk", "[20]01", NULL, 0, "BARCODE_DBAR_EXPSTK (81)," }, - /*118*/ { "DataBar Expanded Stacked", "[20]01", NULL, 0, "BARCODE_DBAR_EXPSTK (81)," }, - /*119*/ { "planet", "12345678901", NULL, 0, "BARCODE_PLANET (82)," }, - /*120*/ { "MicroPDF417", "1", NULL, 0, "BARCODE_MICROPDF417 (84)," }, - /*121*/ { "USPS IMail", "12345678901234567890", NULL, 0, "BARCODE_USPS_IMAIL (85)," }, - /*122*/ { "OneCode", "12345678901234567890", NULL, 0, "BARCODE_USPS_IMAIL (85)," }, - /*123*/ { "plessey", "1", NULL, 0, "BARCODE_PLESSEY (86)," }, - /*124*/ { "telepen num", "1", NULL, 0, "BARCODE_TELEPEN_NUM (87)," }, - /*125*/ { "ITF14", "1", NULL, 0, "BARCODE_ITF14 (89)," }, - /*126*/ { "KIX", "1", NULL, 0, "BARCODE_KIX (90)," }, - /*127*/ { "Aztec", "1", NULL, 0, "BARCODE_AZTEC (92)," }, - /*128*/ { "Aztec Code", "1", NULL, 0, "BARCODE_AZTEC (92)," }, /* Synonym */ - /*129*/ { "daft", "D", NULL, 0, "BARCODE_DAFT (93)," }, - /*130*/ { "DPD", "0123456789012345678901234567", NULL, 0, "BARCODE_DPD (96)," }, - /*131*/ { "Micro QR", "1", NULL, 0, "BARCODE_MICROQR (97)," }, - /*132*/ { "Micro QR Code", "1", NULL, 0, "BARCODE_MICROQR (97)," }, - /*133*/ { "hibc128", "1", NULL, 0, "BARCODE_HIBC_128 (98)," }, - /*134*/ { "hibccode128", "1", NULL, 0, "BARCODE_HIBC_128 (98)," }, /* Synonym */ - /*135*/ { "hibc39", "1", NULL, 0, "BARCODE_HIBC_39 (99)," }, - /*136*/ { "hibccode39", "1", NULL, 0, "BARCODE_HIBC_39 (99)," }, /* Synonym */ - /*137*/ { "hibcdatamatrix", "1", NULL, 0, "BARCODE_HIBC_DM (102)," }, /* Synonym */ - /*138*/ { "hibcdm", "1", NULL, 0, "BARCODE_HIBC_DM (102)," }, - /*139*/ { "HIBC qr", "1", NULL, 0, "BARCODE_HIBC_QR (104)," }, - /*140*/ { "HIBC QR Code", "1", NULL, 0, "BARCODE_HIBC_QR (104)," }, /* Synonym */ - /*141*/ { "HIBCPDF", "1", NULL, 0, "BARCODE_HIBC_PDF (106)," }, - /*142*/ { "HIBCPDF417", "1", NULL, 0, "BARCODE_HIBC_PDF (106)," }, /* Synonym */ - /*143*/ { "HIBCMICPDF", "1", NULL, 0, "BARCODE_HIBC_MICPDF (108)," }, - /*144*/ { "HIBC Micro PDF", "1", NULL, 0, "BARCODE_HIBC_MICPDF (108)," }, /* Synonym */ - /*145*/ { "HIBC Micro PDF417", "1", NULL, 0, "BARCODE_HIBC_MICPDF (108)," }, /* Synonym */ - /*146*/ { "HIBC BlockF", "1", NULL, 0, "BARCODE_HIBC_BLOCKF (110)," }, - /*147*/ { "HIBC CodaBlock-F", "1", NULL, 0, "BARCODE_HIBC_BLOCKF (110)," }, /* Synonym */ - /*148*/ { "HIBC Aztec", "1", NULL, 0, "BARCODE_HIBC_AZTEC (112)," }, - /*149*/ { "DotCode", "1", NULL, 0, "BARCODE_DOTCODE (115)," }, - /*150*/ { "Han Xin", "1", NULL, 0, "BARCODE_HANXIN (116)," }, - /*151*/ { "Mailmark", "01000000000000000AA00AA0A", NULL, 0, "BARCODE_MAILMARK (121)," }, - /*152*/ { "azrune", "1", NULL, 0, "BARCODE_AZRUNE (128)," }, - /*153*/ { "aztecrune", "1", NULL, 0, "BARCODE_AZRUNE (128)," }, /* Synonym */ - /*154*/ { "aztecrunes", "1", NULL, 0, "BARCODE_AZRUNE (128)," }, /* Synonym */ - /*155*/ { "code32", "1", NULL, 0, "BARCODE_CODE32 (129)," }, - /*156*/ { "eanx cc", "[20]01", "1234567890128", 0, "BARCODE_EANX_CC (130)," }, - /*157*/ { "eancc", "[20]01", "1234567890128", 0, "BARCODE_EANX_CC (130)," }, - /*158*/ { "GS1 128 CC", "[01]12345678901231", "[20]01", 0, "BARCODE_GS1_128_CC (131)," }, - /*159*/ { "EAN128 CC", "[01]12345678901231", "[20]01", 0, "BARCODE_GS1_128_CC (131)," }, - /*160*/ { "dbaromncc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMN_CC (132)," }, - /*161*/ { "rss14 cc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMN_CC (132)," }, - /*162*/ { "databaromncc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMN_CC (132)," }, - /*163*/ { "databaromnicc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMN_CC (132)," }, - /*164*/ { "dbarltdcc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_LTD_CC (133)," }, - /*165*/ { "rss ltd cc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_LTD_CC (133)," }, - /*166*/ { "databarltdcc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_LTD_CC (133)," }, - /*167*/ { "databarlimitedcc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_LTD_CC (133)," }, - /*168*/ { "dbarexpcc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXP_CC (134)," }, - /*169*/ { "rss exp cc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXP_CC (134)," }, - /*170*/ { "databarexpcc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXP_CC (134)," }, - /*171*/ { "databar expanded cc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXP_CC (134)," }, - /*172*/ { "upcacc", "[20]01", "12345678901", 0, "BARCODE_UPCA_CC (135)," }, - /*173*/ { "upcecc", "[20]01", "1234567", 0, "BARCODE_UPCE_CC (136)," }, - /*174*/ { "dbar stk cc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_STK_CC (137)," }, - /*175*/ { "rss14stackcc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_STK_CC (137)," }, - /*176*/ { "databar stk cc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_STK_CC (137)," }, - /*177*/ { "databar stacked cc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_STK_CC (137)," }, - /*178*/ { "dbaromnstkcc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMNSTK_CC (138)," }, - /*179*/ { "BARCODE_RSS14_OMNI_CC", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMNSTK_CC (138)," }, - /*180*/ { "databaromnstkcc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMNSTK_CC (138)," }, - /*181*/ { "databar stacked omncc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMNSTK_CC (138)," }, - /*182*/ { "databar stacked omni cc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMNSTK_CC (138)," }, - /*183*/ { "dbarexpstkcc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXPSTK_CC (139)," }, - /*184*/ { "RSS EXPSTACK CC", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXPSTK_CC (139)," }, - /*185*/ { "databarexpstkcc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXPSTK_CC (139)," }, - /*186*/ { "databar expanded stkcc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXPSTK_CC (139)," }, - /*187*/ { "databar expanded stacked cc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXPSTK_CC (139)," }, - /*188*/ { "Channel", "1", NULL, 0, "BARCODE_CHANNEL (140)," }, - /*189*/ { "Channel Code", "1", NULL, 0, "BARCODE_CHANNEL (140)," }, - /*190*/ { "CodeOne", "1", NULL, 0, "BARCODE_CODEONE (141)," }, - /*191*/ { "Grid Matrix", "1", NULL, 0, "BARCODE_GRIDMATRIX (142)," }, - /*192*/ { "UPN QR", "1", NULL, 0, "BARCODE_UPNQR (143)," }, - /*193*/ { "UPN QR Code", "1", NULL, 0, "BARCODE_UPNQR (143)," }, /* Synonym */ - /*194*/ { "ultra", "1", NULL, 0, "BARCODE_ULTRA (144)," }, - /*195*/ { "ultracode", "1", NULL, 0, "BARCODE_ULTRA (144)," }, /* Synonym */ - /*196*/ { "rMQR", "1", NULL, 0, "BARCODE_RMQR (145)," }, - /*197*/ { "bc412", "1234567", NULL, 0, "BARCODE_BC412 (146)," }, - /*198*/ { "x", "1", NULL, 1, "Error 119: Invalid barcode type 'x'" }, - /*199*/ { "\177", "1", NULL, 1, "Error 119: Invalid barcode type '\177'" }, + /* 91*/ { "Code 128 B", "1", NULL, 0, "BARCODE_CODE128AB (60)," }, + /* 92*/ { "Code 128 aB", "1", NULL, 0, "BARCODE_CODE128AB (60)," }, + /* 93*/ { "AUS POST", "12345678901234567890123", NULL, 0, "BARCODE_AUSPOST (63)," }, + /* 94*/ { "AusReply", "12345678", NULL, 0, "BARCODE_AUSREPLY (66)," }, + /* 95*/ { "AUSROUTE", "12345678", NULL, 0, "BARCODE_AUSROUTE (67)," }, + /* 96*/ { "AUS REDIRECT", "12345678", NULL, 0, "BARCODE_AUSREDIRECT (68)," }, + /* 97*/ { "isbnx", "123456789", NULL, 0, "BARCODE_ISBNX (69)," }, + /* 98*/ { "rm4scc", "1", NULL, 0, "BARCODE_RM4SCC (70)," }, + /* 99*/ { "DataMatrix", "1", NULL, 0, "BARCODE_DATAMATRIX (71)," }, + /*100*/ { "EAN14", "1", NULL, 0, "BARCODE_EAN14 (72)," }, + /*101*/ { "vin", "12345678701234567", NULL, 0, "BARCODE_VIN (73)" }, + /*102*/ { "CodaBlock-F", "1", NULL, 0, "BARCODE_CODABLOCKF (74)," }, + /*103*/ { "NVE18", "1", NULL, 0, "BARCODE_NVE18 (75)," }, + /*104*/ { "Japan Post", "1", NULL, 0, "BARCODE_JAPANPOST (76)," }, + /*105*/ { "Korea Post", "1", NULL, 0, "BARCODE_KOREAPOST (77)," }, + /*106*/ { "DBar Stk", "1", NULL, 0, "BARCODE_DBAR_STK (79)," }, + /*107*/ { "rss14stack", "1", NULL, 0, "BARCODE_DBAR_STK (79)," }, + /*108*/ { "DataBar Stk", "1", NULL, 0, "BARCODE_DBAR_STK (79)," }, + /*109*/ { "DataBar Stacked", "1", NULL, 0, "BARCODE_DBAR_STK (79)," }, + /*110*/ { "DBar Omn Stk", "1", NULL, 0, "BARCODE_DBAR_OMNSTK (80)," }, + /*111*/ { "RSS14STACK OMNI", "1", NULL, 0, "BARCODE_DBAR_OMNSTK (80)," }, + /*112*/ { "DataBar Omn Stk", "1", NULL, 0, "BARCODE_DBAR_OMNSTK (80)," }, + /*113*/ { "DataBar Stacked Omn", "1", NULL, 0, "BARCODE_DBAR_OMNSTK (80)," }, + /*114*/ { "DataBar Stacked Omni", "1", NULL, 0, "BARCODE_DBAR_OMNSTK (80)," }, + /*115*/ { "DBar Exp Stk", "[20]01", NULL, 0, "BARCODE_DBAR_EXPSTK (81)," }, + /*116*/ { "rss_expstack", "[20]01", NULL, 0, "BARCODE_DBAR_EXPSTK (81)," }, + /*117*/ { "DataBar Exp Stk", "[20]01", NULL, 0, "BARCODE_DBAR_EXPSTK (81)," }, + /*118*/ { "DataBar Expanded Stk", "[20]01", NULL, 0, "BARCODE_DBAR_EXPSTK (81)," }, + /*119*/ { "DataBar Expanded Stacked", "[20]01", NULL, 0, "BARCODE_DBAR_EXPSTK (81)," }, + /*120*/ { "planet", "12345678901", NULL, 0, "BARCODE_PLANET (82)," }, + /*121*/ { "MicroPDF417", "1", NULL, 0, "BARCODE_MICROPDF417 (84)," }, + /*122*/ { "USPS IMail", "12345678901234567890", NULL, 0, "BARCODE_USPS_IMAIL (85)," }, + /*123*/ { "OneCode", "12345678901234567890", NULL, 0, "BARCODE_USPS_IMAIL (85)," }, + /*124*/ { "plessey", "1", NULL, 0, "BARCODE_PLESSEY (86)," }, + /*125*/ { "telepen num", "1", NULL, 0, "BARCODE_TELEPEN_NUM (87)," }, + /*126*/ { "ITF14", "1", NULL, 0, "BARCODE_ITF14 (89)," }, + /*127*/ { "KIX", "1", NULL, 0, "BARCODE_KIX (90)," }, + /*128*/ { "Aztec", "1", NULL, 0, "BARCODE_AZTEC (92)," }, + /*129*/ { "Aztec Code", "1", NULL, 0, "BARCODE_AZTEC (92)," }, /* Synonym */ + /*130*/ { "daft", "D", NULL, 0, "BARCODE_DAFT (93)," }, + /*131*/ { "DPD", "0123456789012345678901234567", NULL, 0, "BARCODE_DPD (96)," }, + /*132*/ { "Micro QR", "1", NULL, 0, "BARCODE_MICROQR (97)," }, + /*133*/ { "Micro QR Code", "1", NULL, 0, "BARCODE_MICROQR (97)," }, + /*134*/ { "hibc128", "1", NULL, 0, "BARCODE_HIBC_128 (98)," }, + /*135*/ { "hibccode128", "1", NULL, 0, "BARCODE_HIBC_128 (98)," }, /* Synonym */ + /*136*/ { "hibc39", "1", NULL, 0, "BARCODE_HIBC_39 (99)," }, + /*137*/ { "hibccode39", "1", NULL, 0, "BARCODE_HIBC_39 (99)," }, /* Synonym */ + /*138*/ { "hibcdatamatrix", "1", NULL, 0, "BARCODE_HIBC_DM (102)," }, /* Synonym */ + /*139*/ { "hibcdm", "1", NULL, 0, "BARCODE_HIBC_DM (102)," }, + /*140*/ { "HIBC qr", "1", NULL, 0, "BARCODE_HIBC_QR (104)," }, + /*141*/ { "HIBC QR Code", "1", NULL, 0, "BARCODE_HIBC_QR (104)," }, /* Synonym */ + /*142*/ { "HIBCPDF", "1", NULL, 0, "BARCODE_HIBC_PDF (106)," }, + /*143*/ { "HIBCPDF417", "1", NULL, 0, "BARCODE_HIBC_PDF (106)," }, /* Synonym */ + /*144*/ { "HIBCMICPDF", "1", NULL, 0, "BARCODE_HIBC_MICPDF (108)," }, + /*145*/ { "HIBC Micro PDF", "1", NULL, 0, "BARCODE_HIBC_MICPDF (108)," }, /* Synonym */ + /*146*/ { "HIBC Micro PDF417", "1", NULL, 0, "BARCODE_HIBC_MICPDF (108)," }, /* Synonym */ + /*147*/ { "HIBC BlockF", "1", NULL, 0, "BARCODE_HIBC_BLOCKF (110)," }, + /*148*/ { "HIBC CodaBlock-F", "1", NULL, 0, "BARCODE_HIBC_BLOCKF (110)," }, /* Synonym */ + /*149*/ { "HIBC Aztec", "1", NULL, 0, "BARCODE_HIBC_AZTEC (112)," }, + /*150*/ { "DotCode", "1", NULL, 0, "BARCODE_DOTCODE (115)," }, + /*151*/ { "Han Xin", "1", NULL, 0, "BARCODE_HANXIN (116)," }, + /*152*/ { "Mailmark", "01000000000000000AA00AA0A", NULL, 0, "BARCODE_MAILMARK (121)," }, + /*153*/ { "azrune", "1", NULL, 0, "BARCODE_AZRUNE (128)," }, + /*154*/ { "aztecrune", "1", NULL, 0, "BARCODE_AZRUNE (128)," }, /* Synonym */ + /*155*/ { "aztecrunes", "1", NULL, 0, "BARCODE_AZRUNE (128)," }, /* Synonym */ + /*156*/ { "code32", "1", NULL, 0, "BARCODE_CODE32 (129)," }, + /*157*/ { "eanx cc", "[20]01", "1234567890128", 0, "BARCODE_EANX_CC (130)," }, + /*158*/ { "eancc", "[20]01", "1234567890128", 0, "BARCODE_EANX_CC (130)," }, + /*159*/ { "GS1 128 CC", "[01]12345678901231", "[20]01", 0, "BARCODE_GS1_128_CC (131)," }, + /*160*/ { "EAN128 CC", "[01]12345678901231", "[20]01", 0, "BARCODE_GS1_128_CC (131)," }, + /*161*/ { "dbaromncc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMN_CC (132)," }, + /*162*/ { "rss14 cc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMN_CC (132)," }, + /*163*/ { "databaromncc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMN_CC (132)," }, + /*164*/ { "databaromnicc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMN_CC (132)," }, + /*165*/ { "dbarltdcc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_LTD_CC (133)," }, + /*166*/ { "rss ltd cc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_LTD_CC (133)," }, + /*167*/ { "databarltdcc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_LTD_CC (133)," }, + /*168*/ { "databarlimitedcc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_LTD_CC (133)," }, + /*169*/ { "dbarexpcc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXP_CC (134)," }, + /*170*/ { "rss exp cc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXP_CC (134)," }, + /*171*/ { "databarexpcc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXP_CC (134)," }, + /*172*/ { "databar expanded cc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXP_CC (134)," }, + /*173*/ { "upcacc", "[20]01", "12345678901", 0, "BARCODE_UPCA_CC (135)," }, + /*174*/ { "upcecc", "[20]01", "1234567", 0, "BARCODE_UPCE_CC (136)," }, + /*175*/ { "dbar stk cc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_STK_CC (137)," }, + /*176*/ { "rss14stackcc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_STK_CC (137)," }, + /*177*/ { "databar stk cc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_STK_CC (137)," }, + /*178*/ { "databar stacked cc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_STK_CC (137)," }, + /*179*/ { "dbaromnstkcc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMNSTK_CC (138)," }, + /*180*/ { "BARCODE_RSS14_OMNI_CC", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMNSTK_CC (138)," }, + /*181*/ { "databaromnstkcc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMNSTK_CC (138)," }, + /*182*/ { "databar stacked omncc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMNSTK_CC (138)," }, + /*183*/ { "databar stacked omni cc", "[20]01", "1234567890123", 0, "BARCODE_DBAR_OMNSTK_CC (138)," }, + /*184*/ { "dbarexpstkcc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXPSTK_CC (139)," }, + /*185*/ { "RSS EXPSTACK CC", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXPSTK_CC (139)," }, + /*186*/ { "databarexpstkcc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXPSTK_CC (139)," }, + /*187*/ { "databar expanded stkcc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXPSTK_CC (139)," }, + /*188*/ { "databar expanded stacked cc", "[20]01", "[01]12345678901231", 0, "BARCODE_DBAR_EXPSTK_CC (139)," }, + /*189*/ { "Channel", "1", NULL, 0, "BARCODE_CHANNEL (140)," }, + /*190*/ { "Channel Code", "1", NULL, 0, "BARCODE_CHANNEL (140)," }, + /*191*/ { "CodeOne", "1", NULL, 0, "BARCODE_CODEONE (141)," }, + /*192*/ { "Grid Matrix", "1", NULL, 0, "BARCODE_GRIDMATRIX (142)," }, + /*193*/ { "UPN QR", "1", NULL, 0, "BARCODE_UPNQR (143)," }, + /*194*/ { "UPN QR Code", "1", NULL, 0, "BARCODE_UPNQR (143)," }, /* Synonym */ + /*195*/ { "ultra", "1", NULL, 0, "BARCODE_ULTRA (144)," }, + /*196*/ { "ultracode", "1", NULL, 0, "BARCODE_ULTRA (144)," }, /* Synonym */ + /*197*/ { "rMQR", "1", NULL, 0, "BARCODE_RMQR (145)," }, + /*198*/ { "bc412", "1234567", NULL, 0, "BARCODE_BC412 (146)," }, + /*199*/ { "x", "1", NULL, 1, "Error 119: Invalid barcode type 'x'" }, + /*200*/ { "\177", "1", NULL, 1, "Error 119: Invalid barcode type '\177'" }, }; int data_size = ARRAY_SIZE(data); int i; @@ -1170,6 +1174,18 @@ static void test_other_opts(const testCtx *const p_ctx) { /* 44*/ { -1, NULL, -1, " -h", NULL, "Encode input data in a barcode ", 1 }, /* 45*/ { -1, NULL, -1, " -e", NULL, "3: ISO/IEC 8859-1 ", 1 }, /* 46*/ { -1, NULL, -1, " -t", NULL, "1 CODE11 ", 1 }, + /* 47*/ { BARCODE_EANX, "501234567890", -1, " --scalexdimdp=", "12345678", "Error 178: scalexdimdp X-dim invalid floating point (integer part must be 7 digits maximum)", 0 }, + /* 48*/ { BARCODE_EANX, "501234567890", -1, " --scalexdimdp=", "1234567890123", "Error 176: scalexdimdp X-dim too long", 0 }, + /* 49*/ { BARCODE_EANX, "501234567890", -1, " --scalexdimdp=", "123456.12", "Error 178: scalexdimdp X-dim invalid floating point (7 significant digits maximum)", 0 }, + /* 50*/ { BARCODE_EANX, "501234567890", -1, " --scalexdimdp=", ",12.34", "Error 174: scalexdimdp X-dim too short", 0 }, + /* 51*/ { BARCODE_EANX, "501234567890", -1, " --scalexdimdp=", "12.34,", "Error 175: scalexdimdp resolution too short", 0 }, + /* 52*/ { BARCODE_EANX, "501234567890", -1, " --scalexdimdp=", "12mm1", "Error 177: scalexdimdp X-dim units must occur at end", 0 }, + /* 53*/ { BARCODE_EANX, "501234567890", -1, " --scalexdimdp=", "1inc", "Error 177: scalexdimdp X-dim units must occur at end", 0 }, + /* 54*/ { BARCODE_EANX, "501234567890", -1, " --scalexdimdp=", "1234x", "Error 178: scalexdimdp X-dim invalid floating point (integer part must be digits only)", 0 }, + /* 55*/ { BARCODE_EANX, "501234567890", -1, " --scalexdimdp=", "12.34in,123x", "Error 180: scalexdimdp resolution invalid floating point (integer part must be digits only)", 0 }, + /* 56*/ { BARCODE_EANX, "501234567890", -1, " --scalexdimdp=", "12,123.45678", "Error 180: scalexdimdp resolution invalid floating point (7 significant digits maximum)", 0 }, + /* 57*/ { BARCODE_EANX, "501234567890", -1, " --scalexdimdp=", "10.1,1000", "Warning 185: scalexdimdp X-dim (10.1) out of range (> 10), ignoring", 0 }, + /* 58*/ { BARCODE_EANX, "501234567890", -1, " --scalexdimdp=", "10,1000.1", "Warning 186: scalexdimdp resolution (1000.1) out of range (> 1000), ignoring", 0 }, }; int data_size = ARRAY_SIZE(data); int i; diff --git a/frontend_qt/CMakeLists.txt b/frontend_qt/CMakeLists.txt index f456b2d6..5a63fd27 100644 --- a/frontend_qt/CMakeLists.txt +++ b/frontend_qt/CMakeLists.txt @@ -8,14 +8,14 @@ project(zint-qt) set(CMAKE_AUTORCC ON) set(${PROJECT_NAME}_SRCS barcodeitem.cpp main.cpp mainwindow.cpp - cliwindow.cpp datawindow.cpp sequencewindow.cpp exportwindow.cpp) + cliwindow.cpp datawindow.cpp scalewindow.cpp sequencewindow.cpp exportwindow.cpp) if(USE_QT6) - qt6_wrap_cpp(zint-qt_SRCS mainwindow.h cliwindow.h datawindow.h sequencewindow.h exportwindow.h) - qt6_wrap_ui(zint-qt_SRCS mainWindow.ui extCLI.ui extData.ui extSequence.ui extExport.ui) + qt6_wrap_cpp(zint-qt_SRCS mainwindow.h cliwindow.h datawindow.h scalewindow.h sequencewindow.h exportwindow.h) + qt6_wrap_ui(zint-qt_SRCS mainWindow.ui extCLI.ui extData.ui extScale.ui extSequence.ui extExport.ui) else() - qt5_wrap_cpp(zint-qt_SRCS mainwindow.h cliwindow.h datawindow.h sequencewindow.h exportwindow.h) - qt5_wrap_ui(zint-qt_SRCS mainWindow.ui extCLI.ui extData.ui extSequence.ui extExport.ui) + qt5_wrap_cpp(zint-qt_SRCS mainwindow.h cliwindow.h datawindow.h scalewindow.h sequencewindow.h exportwindow.h) + qt5_wrap_ui(zint-qt_SRCS mainWindow.ui extCLI.ui extData.ui extScale.ui extSequence.ui extExport.ui) endif() # grpAztec.ui grpC39.ui grpCodablockF.ui grpDotCode.ui grpMaxicode.ui grpQR.ui grpUPNQR.ui diff --git a/frontend_qt/cliwindow.cpp b/frontend_qt/cliwindow.cpp index 538521f7..714048fa 100644 --- a/frontend_qt/cliwindow.cpp +++ b/frontend_qt/cliwindow.cpp @@ -16,6 +16,7 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +/* SPDX-License-Identifier: GPL-3.0-or-later */ //#include #include @@ -23,15 +24,15 @@ #include #include "cliwindow.h" -#include "barcodeitem.h" // Shorthand #define QSL QStringLiteral static const int tempMessageTimeout = 2000; -CLIWindow::CLIWindow(BarcodeItem *bc, const bool autoHeight, const double heightPerRow) - : m_bc(bc), m_autoHeight(autoHeight), m_heightPerRow(heightPerRow) +CLIWindow::CLIWindow(BarcodeItem *bc, const bool autoHeight, const double heightPerRow, + const struct Zint::QZintXdimDpVars* xdimdpVars) + : m_bc(bc), m_autoHeight(autoHeight), m_heightPerRow(heightPerRow), m_xdimdpVars(xdimdpVars) { setupUi(this); QSettings settings; @@ -106,7 +107,8 @@ void CLIWindow::generate_cli() chkCLINoEXE->setEnabled(false); } QString cmd = m_bc->bc.getAsCLI(radCLIWin->isChecked(), chkCLILongOpts->isChecked(), - chkCLIBarcodeName->isChecked(), noEXE, m_autoHeight, m_heightPerRow); + chkCLIBarcodeName->isChecked(), noEXE, m_autoHeight, m_heightPerRow, QSL("") /*outfile*/, + m_xdimdpVars); txtCLICmd->setPlainText(cmd); statusBarCLI->clearMessage(); diff --git a/frontend_qt/cliwindow.h b/frontend_qt/cliwindow.h index da688a97..5968cb18 100644 --- a/frontend_qt/cliwindow.h +++ b/frontend_qt/cliwindow.h @@ -1,6 +1,6 @@ /* Zint Barcode Generator - the open source barcode generator - Copyright (C) 2021 Robin Stuart + Copyright (C) 2021-2022 Robin Stuart This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,21 +16,21 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -/* vim: set ts=4 sw=4 et : */ +/* SPDX-License-Identifier: GPL-3.0-or-later */ #ifndef CLIWINDOW_H #define CLIWINDOW_H #include "ui_extCLI.h" - -class BarcodeItem; +#include "barcodeitem.h" class CLIWindow : public QDialog, private Ui::CLIDialog { Q_OBJECT public: - CLIWindow(BarcodeItem *bc, const bool autoHeight, const double heightPerRow); + CLIWindow(BarcodeItem *bc, const bool autoHeight, const double heightPerRow, + const struct Zint::QZintXdimDpVars* xdimdpVars); virtual ~CLIWindow(); private slots: @@ -41,6 +41,8 @@ protected: BarcodeItem *m_bc; bool m_autoHeight; double m_heightPerRow; + const Zint::QZintXdimDpVars *m_xdimdpVars; }; +/* vim: set ts=4 sw=4 et : */ #endif diff --git a/frontend_qt/extData.ui b/frontend_qt/extData.ui index aabbf351..3ad52597 100644 --- a/frontend_qt/extData.ui +++ b/frontend_qt/extData.ui @@ -51,6 +51,9 @@ + + false + &From File... @@ -75,6 +78,9 @@ Note that Line Feeds (0x0A) are not included,<br/> but any present will be + + false + C&lear @@ -98,6 +104,9 @@ Note that Line Feeds (0x0A) are not included,<br/> but any present will be + + false + &OK @@ -109,6 +118,9 @@ Line Feeds (0xA0) will be escaped as "\n" + + false + &Cancel diff --git a/frontend_qt/extExport.ui b/frontend_qt/extExport.ui index 31b2bbf9..b6842011 100644 --- a/frontend_qt/extExport.ui +++ b/frontend_qt/extExport.ui @@ -135,9 +135,9 @@ - + - File &Format: + File &Type: The type of file which you want to create diff --git a/frontend_qt/extScale.ui b/frontend_qt/extScale.ui new file mode 100644 index 00000000..2f54d50b --- /dev/null +++ b/frontend_qt/extScale.ui @@ -0,0 +1,350 @@ + + + ScaleDialog + + + + 0 + 0 + 250 + 200 + + + + Set Printing Scale + + + + :res/zint-qt.ico:res/zint-qt.ico + + + + + + + + + 120 + 16777215 + + + + X-dimension in selected units + + + &X-dimension: + + + spnXdim + + + + + + + X-dimension in selected units + + + + + + 5 + + + 0.001000000000000 + + + 100.000000000000000 + + + 0.010000000000000 + + + 1.000000000000000 + + + + + + + X-dimension units (millimetres or inches) + + + + 80 + 16777215 + + + + + mm + + + + + in + + + + + + + + false + + + + 80 + 16777215 + + + + Reset X-dimension to default (symbology specific) + + + De&fault + + + + 40 + 20 + + + + + + + + + 120 + 16777215 + + + + Resolution (dot density) in selected units + + + &Resolution: + + + spnResolution + + + + + + + Resolution (dot density) in selected units + + + + + + 9999 + + + 1 + + + 12 + + + + + + + Resolution units (dots per mm or dots per inch) + + + + 80 + 16777215 + + + + + dpmm + + + + + dpi + + + + + + + + false + + + + 80 + 16777215 + + + + Reset resolution to default (12 dpmm or 300 dpi) + + + Defau&lt + + + + + + + + 120 + 16777215 + + + + The type of file which will be outputted to + + + File &Type: + + + cmbFileType + + + + + + + The type of file which will be outputted to + + + + Raster (BMP/GIF/PCX/PNG/TIF) + + + + + Vector (excluding EMF) + + + + + Extended Metafile (EMF) + + + + + + + + + 120 + 16777215 + + + + Calculated scale + + + Printing Scale: + + + + + + + Calculated scale + + + + + + + + + + + 120 + 16777215 + + + + Image size (width x height) of barcode + + + Print Size: + + + + + + + Image size (width x height) of barcode + + + + + + + + + + + + Qt::Vertical + + + + 40 + 10 + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + true + + + Close the window and update the Printing Scale + + + &Ok + + + + + + + false + + + Close window without updating the Printing Scale + + + &Close + + + + + + + + + + diff --git a/frontend_qt/frontend_qt.pro b/frontend_qt/frontend_qt.pro index 94c583bd..438eccfd 100644 --- a/frontend_qt/frontend_qt.pro +++ b/frontend_qt/frontend_qt.pro @@ -18,11 +18,13 @@ HEADERS += barcodeitem.h \ datawindow.h \ exportwindow.h \ mainwindow.h \ + scalewindow.h \ sequencewindow.h FORMS += extCLI.ui \ extData.ui \ extExport.ui \ + extScale.ui \ extSequence.ui \ grpAztec.ui \ grpC11.ui \ @@ -64,6 +66,7 @@ SOURCES += barcodeitem.cpp \ exportwindow.cpp \ main.cpp \ mainwindow.cpp \ + scalewindow.cpp \ sequencewindow.cpp TRANSLATIONS = frontend_de.ts diff --git a/frontend_qt/frontend_qt_zintdll.pro b/frontend_qt/frontend_qt_zintdll.pro index 9a6c5a07..05c3732c 100644 --- a/frontend_qt/frontend_qt_zintdll.pro +++ b/frontend_qt/frontend_qt_zintdll.pro @@ -10,12 +10,14 @@ HEADERS += barcodeitem.h \ datawindow.h \ exportwindow.h \ mainwindow.h \ + scalewindow.h \ sequencewindow.h FORMS += extCLI.ui \ extData.ui \ extExport.ui \ extSequence.ui \ + extScale.ui \ grpAztec.ui \ grpC11.ui \ grpC128.ui \ @@ -56,6 +58,7 @@ SOURCES += barcodeitem.cpp \ exportwindow.cpp \ main.cpp \ mainwindow.cpp \ + scalewindow.cpp \ sequencewindow.cpp RESOURCES += resources.qrc diff --git a/frontend_qt/frontend_vc8.pro b/frontend_qt/frontend_vc8.pro index 4317d197..b09a801f 100644 --- a/frontend_qt/frontend_vc8.pro +++ b/frontend_qt/frontend_vc8.pro @@ -7,6 +7,7 @@ CONFIG += warn_on \ FORMS = mainWindow.ui \ extCLI.ui \ + extScale.ui \ extSequence.ui \ extExport.ui \ extData.ui @@ -16,6 +17,7 @@ HEADERS = mainwindow.h \ cliwindow.h \ datawindow.h \ exportwindow.h \ + scalewindow.h \ sequencewindow.h \ qzint.h @@ -25,7 +27,8 @@ SOURCES = main.cpp \ cliwindow.cpp \ datawindow.cpp \ exportwindow.cpp \ - sequencewindow.cpp + scalewindow.cpp \ + sequencewindow.cpp \ qzint.cpp RESOURCES = resources.qrc diff --git a/frontend_qt/grpDAFT.ui b/frontend_qt/grpDAFT.ui index 00b343ad..20d3ab3b 100644 --- a/frontend_qt/grpDAFT.ui +++ b/frontend_qt/grpDAFT.ui @@ -66,6 +66,22 @@ + + + + + 80 + 16777215 + + + + Reset tracker ratio to default 25% + + + De&fault + + + diff --git a/frontend_qt/grpUPCA.ui b/frontend_qt/grpUPCA.ui index 767962d6..4fde6117 100644 --- a/frontend_qt/grpUPCA.ui +++ b/frontend_qt/grpUPCA.ui @@ -25,7 +25,7 @@ - A&dd-on Gap: + Add-o&n Gap: Horizontal space in X-dimensions between @@ -129,13 +129,13 @@ descend below the main bars (default 5X) - + Reset guard bars descent height to default 5X - &Reset + De&fault diff --git a/frontend_qt/grpUPCEAN.ui b/frontend_qt/grpUPCEAN.ui index bec68d3d..57011e09 100644 --- a/frontend_qt/grpUPCEAN.ui +++ b/frontend_qt/grpUPCEAN.ui @@ -25,7 +25,7 @@ - A&dd-on Gap: + Add-o&n Gap: Horizontal space in X-dimensions between @@ -139,13 +139,13 @@ descend below the main bars (default 5X) - + Reset guard bars descent height to default 5X - &Reset + De&fault diff --git a/frontend_qt/mainWindow.ui b/frontend_qt/mainWindow.ui index e9843a78..073a925e 100644 --- a/frontend_qt/mainWindow.ui +++ b/frontend_qt/mainWindow.ui @@ -1603,7 +1603,7 @@ as delimiters for GS1 Application Identifiers - + @@ -1656,7 +1656,7 @@ and use standard height (if any) for default - + false @@ -1707,7 +1707,7 @@ and use standard height (if any) for default - + Width of boundary bars or border in X-dimensions @@ -1742,7 +1742,7 @@ and use standard height (if any) for default - + Add border or box @@ -1788,7 +1788,7 @@ and use standard height (if any) for default - + @@ -1863,7 +1863,46 @@ in X-dimensions + + + + + 22 + 16777215 + + + + Set Printing Scale by X-dimension and resolution + + + + + + + + + Image size (width x height) of barcode at given dot density + + + Print Size: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + Image size (width x height) of barcode at given dot density + + + + + + + Set font characteristics @@ -1880,7 +1919,7 @@ in X-dimensions - + Set font characteristics @@ -1908,7 +1947,7 @@ in X-dimensions - + Show Human Readable Text in image @@ -1922,7 +1961,7 @@ in X-dimensions - + true @@ -1941,7 +1980,7 @@ in X-dimensions - + @@ -1959,7 +1998,7 @@ or "RRGGBBAA" (alpha) - + @@ -1975,7 +2014,7 @@ or "RRGGBBAA" (alpha) - + true @@ -1994,7 +2033,7 @@ or "RRGGBBAA" (alpha) - + @@ -2012,7 +2051,7 @@ or "RRGGBBAA" (alpha) - + @@ -2028,7 +2067,7 @@ or "RRGGBBAA" (alpha) - + true @@ -2047,7 +2086,7 @@ or "RRGGBBAA" (alpha) - + @@ -2063,7 +2102,7 @@ or "RRGGBBAA" (alpha) - + @@ -2080,7 +2119,7 @@ or "RRGGBBAA" (alpha) - + Use CMYK colour space in EPS/TIF output @@ -2093,7 +2132,7 @@ or "RRGGBBAA" (alpha) - + Add compliant quiet zones (if any) to whitespace @@ -2107,7 +2146,7 @@ or "RRGGBBAA" (alpha) - + Rotate symbol by degrees @@ -2123,7 +2162,7 @@ or "RRGGBBAA" (alpha) - + Rotate symbol by degrees @@ -2150,7 +2189,7 @@ or "RRGGBBAA" (alpha) - + Use dots instead of squares for matrix symbols @@ -2164,7 +2203,7 @@ or "RRGGBBAA" (alpha) - + false @@ -2184,7 +2223,7 @@ or "RRGGBBAA" (alpha) - + false @@ -2215,6 +2254,19 @@ or "RRGGBBAA" (alpha) + + + + Qt::Vertical + + + + 40 + 10 + + + + diff --git a/frontend_qt/mainwindow.cpp b/frontend_qt/mainwindow.cpp index b5ab1750..8e15ad5a 100644 --- a/frontend_qt/mainwindow.cpp +++ b/frontend_qt/mainwindow.cpp @@ -36,6 +36,7 @@ #include "mainwindow.h" #include "cliwindow.h" #include "datawindow.h" +#include "scalewindow.h" #include "sequencewindow.h" // Shorthand @@ -190,7 +191,8 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags fl) : QWidget(parent, fl), m_optionWidget(nullptr), m_symbology(0), m_menu(nullptr), m_lblHeightPerRow(nullptr), m_spnHeightPerRow(nullptr), - m_btnHeightPerRowDisable(nullptr), m_btnHeightPerRowDefault(nullptr) + m_btnHeightPerRowDisable(nullptr), m_btnHeightPerRowDefault(nullptr), + m_scaleWindow(nullptr) { // Undocumented command line debug flag m_bc.bc.setDebug(QCoreApplication::arguments().contains(QSL("--verbose"))); @@ -224,6 +226,8 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags fl) mac_hack_vLayouts(this); mac_hack_statusBars(this, "statusBar"); vLayoutTabData->setContentsMargins(QMargins(20, 0, 20, 0)); + tabMain->setMinimumSize(QSize(0, 380)); + tabMain->setMaximumSize(QSize(16777215, 380)); #endif #ifdef _WIN32 tabMain->setMinimumSize(QSize(0, 316)); @@ -235,6 +239,7 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags fl) m_fgcolor_geometry = settings.value(QSL("studio/fgcolor_geometry")).toByteArray(); m_bgcolor_geometry = settings.value(QSL("studio/bgcolor_geometry")).toByteArray(); + btnScale->setIcon(QIcon(QSL(":res/scaling.svg"))); fgcolor->setIcon(QIcon(QSL(":res/black-eye.svg"))); bgcolor->setIcon(QIcon(QSL(":res/white-eye.svg"))); btnReverse->setIcon(QIcon(QSL(":res/shuffle.svg"))); @@ -307,7 +312,7 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags fl) connect(spnVWhitespace, SIGNAL(valueChanged( int )), SLOT(update_preview())); connect(btnMenu, SIGNAL(clicked( bool )), SLOT(menu())); connect(btnSave, SIGNAL(clicked( bool )), SLOT(save())); - connect(spnScale, SIGNAL(valueChanged( double )), SLOT(change_print_scale())); + connect(spnScale, SIGNAL(valueChanged( double )), SLOT(update_preview())); connect(btnExit, SIGNAL(clicked( bool )), SLOT(quit_now())); connect(btnReset, SIGNAL(clicked( bool )), SLOT(reset_colours())); connect(btnReverse, SIGNAL(clicked( bool )), SLOT(reverse_colours())); @@ -324,6 +329,7 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags fl) connect(chkAutoHeight, SIGNAL(toggled( bool )), SLOT(autoheight_ui_set())); connect(chkAutoHeight, SIGNAL(toggled( bool )), SLOT(update_preview())); connect(chkCompliantHeight, SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(btnScale, SIGNAL(clicked( bool )), SLOT(open_scale_dialog())); connect(chkHRTShow, SIGNAL(toggled( bool )), SLOT(HRTShow_ui_set())); connect(chkHRTShow, SIGNAL(toggled( bool )), SLOT(update_preview())); connect(chkCMYK, SIGNAL(toggled( bool )), SLOT(change_cmyk())); @@ -426,6 +432,11 @@ MainWindow::~MainWindow() settings.setValue(QSL("studio/appearance/rotate"), cmbRotate->currentIndex()); settings.setValue(QSL("studio/appearance/chk_dotty"), chkDotty->isChecked() ? 1 : 0); settings.setValue(QSL("studio/appearance/dot_size"), spnDotSize->value()); + // These are "system-wide" + settings.setValue(QSL("studio/xdimdpvars/resolution"), m_xdimdpVars.resolution); + settings.setValue(QSL("studio/xdimdpvars/resolution_units"), m_xdimdpVars.resolution_units); + settings.setValue(QSL("studio/xdimdpvars/filetype"), m_xdimdpVars.filetype); + settings.setValue(QSL("studio/xdimdpvars/filetype_maxicode"), m_xdimdpVars.filetype_maxicode); save_sub_settings(settings, m_bc.bc.symbol()); } @@ -472,13 +483,20 @@ void MainWindow::load_settings(QSettings &settings) cmbRotate->setCurrentIndex(settings.value(QSL("studio/appearance/rotate"), 0).toInt()); chkDotty->setChecked(settings.value(QSL("studio/appearance/chk_dotty"), 0).toInt() ? true : false); spnDotSize->setValue(settings.value(QSL("studio/appearance/dot_size"), 4.0 / 5.0).toFloat()); + // These are "system-wide" + m_xdimdpVars.resolution_units = settings.value(QSL("studio/xdimdpvars/resolution_units"), 0).toInt(); + const int defaultResolution = m_xdimdpVars.resolution_units == 1 ? 300 : 12; // 300dpi or 12dpmm + m_xdimdpVars.resolution = settings.value(QSL("studio/xdimdpvars/resolution"), defaultResolution).toInt(); + m_xdimdpVars.filetype = std::max(std::min(settings.value(QSL("studio/xdimdpvars/filetype"), 0).toInt(), 1), 0); + m_xdimdpVars.filetype_maxicode + = std::max(std::min(settings.value(QSL("studio/xdimdpvars/filetype_maxicode"), 0).toInt(), 2), 0); } QString MainWindow::get_zint_version(void) { QString zint_version; - int lib_version = ZBarcode_Version(); + int lib_version = Zint::QZint::getVersion(); int version_major = lib_version / 10000; int version_minor = (lib_version % 10000) / 100; int version_release = lib_version % 100; @@ -721,7 +739,8 @@ void MainWindow::about() "\"Telepen\" is a Registered Trademark of SB Electronics.
" "\"Mailmark\" is a Registered Trademark of Royal Mail.

" "

With thanks to Harald Oehlmann, Norbert Szabó, Robert Elliott, Milton Neal, " - "Git Lost, Alonso Schaich, Andre Maute and many others at SourceForge.

" + "Git Lost, Alonso Schaich, Andre Maute and many others at " + "
SourceForge.

" "

" #ifndef Q_OS_MACOS "" @@ -859,7 +878,6 @@ void MainWindow::open_data_dialog_seg(const int seg_no) } disconnect(&dlg, SIGNAL(dataChanged(const QString&, bool, int)), this, SLOT(on_dataChanged(const QString&, bool, int))); - update_preview(); } void MainWindow::open_data_dialog() @@ -898,14 +916,22 @@ void MainWindow::zap() #if QT_VERSION < 0x60000 settings.setIniCodec("UTF-8"); #endif - settings.clear(); int symbology = bstyle_items[bstyle->currentIndex()].symbology; + QString name = get_setting_name(symbology); + settings.remove(QSL("studio/bc/%1").arg(name)); + settings.remove(QSL("studio/data")); + settings.remove(QSL("studio/eci")); load_settings(settings); + setColorTxtBtn(m_fgcolor, txt_fgcolor, fgcolor); setColorTxtBtn(m_bgcolor, txt_bgcolor, bgcolor); + m_xdimdpVars.x_dim = 0.0f; + m_xdimdpVars.x_dim_units = 0; + m_xdimdpVars.set = 0; + load_sub_settings(settings, symbology); txtData->setFocus(Qt::OtherFocusReason); @@ -921,10 +947,17 @@ void MainWindow::on_dataChanged(const QString& text, bool escaped, int seg_no) update_preview(); } +void MainWindow::on_scaleChanged(double scale) +{ + spnScale->setValue(scale); + size_msg_ui_set(); +} + void MainWindow::open_cli_dialog() { CLIWindow dlg(&m_bc, chkAutoHeight->isEnabled() && chkAutoHeight->isChecked(), - m_spnHeightPerRow && m_spnHeightPerRow->isEnabled() ? m_spnHeightPerRow->value() : 0.0); + m_spnHeightPerRow && m_spnHeightPerRow->isEnabled() ? m_spnHeightPerRow->value() : 0.0, + &m_xdimdpVars); #ifdef Q_OS_MACOS mac_hack_statusBars(&dlg); @@ -933,6 +966,25 @@ void MainWindow::open_cli_dialog() (void) dlg.exec(); } +void MainWindow::open_scale_dialog() +{ + double originalScale = spnScale->value(); + QString originalSizeMsg = lblSizeMsg->text(); + ScaleWindow dlg(&m_bc, &m_xdimdpVars); + m_scaleWindow = &dlg; + connect(&dlg, SIGNAL(scaleChanged(double)), this, SLOT(on_scaleChanged(double))); + (void) dlg.exec(); + disconnect(&dlg, SIGNAL(scaleChanged(double)), this, SLOT(on_scaleChanged(double))); + if (dlg.Valid) { + m_xdimdpVars = dlg.m_vars; + update_preview(); + } else { // Restore + spnScale->setValue(originalScale); + lblSizeMsg->setText(originalSizeMsg); + } + m_scaleWindow = nullptr; +} + void MainWindow::on_fgcolor_clicked() { color_clicked(m_fgcolor, txt_fgcolor, fgcolor, tr("Set foreground colour"), m_fgcolor_geometry, @@ -1037,6 +1089,9 @@ void MainWindow::autoheight_ui_set() m_btnHeightPerRowDisable->setEnabled(enabled && m_spnHeightPerRow->value()); } if (m_btnHeightPerRowDefault) { + if (enabled && m_spnHeightPerRow->value() == get_height_per_row_default()) { + enabled = false; + } m_btnHeightPerRowDefault->setEnabled(enabled); } } @@ -1163,8 +1218,9 @@ void MainWindow::on_encoded() if (!chkAutoHeight->isEnabled() || chkAutoHeight->isChecked() || !heightb->isEnabled()) { /* setValue() rounds up/down to precision (decimals 3), we want round up only */ float height = (float) (ceil(m_bc.bc.height() * 1000.0f) / 1000.0f); - heightb->setValue(height); + heightb->setValue(height); // This can cause a double-encode unfortunately } + size_msg_ui_set(); if (m_optionWidget) { automatic_info_set(); @@ -1180,6 +1236,7 @@ void MainWindow::on_errored() } enableActions(); errtxtBar_set(); + size_msg_ui_set(); if (m_optionWidget) { automatic_info_set(); } @@ -1238,10 +1295,37 @@ void MainWindow::filter_symbologies() } } -void MainWindow::change_print_scale() +void MainWindow::size_msg_ui_set() { - /* This value is only used when printing (saving) to file */ - m_bc.bc.setScale((float) spnScale->value()); + if (m_bc.bc.getError() < ZINT_ERROR) { + float scale = (float) spnScale->value(); + struct Zint::QZintXdimDpVars *vars = m_scaleWindow ? &m_scaleWindow->m_vars : &m_xdimdpVars; + if (vars->x_dim == 0.0) { + vars->x_dim_units = 0; + vars->x_dim = m_bc.bc.getXdimDpFromScale(scale, get_dpmm(vars), getFileType(vars)); + } else { + // Scale trumps stored X-dimension + double x_dim_mm = vars->x_dim_units == 1 ? vars->x_dim * 25.4 : vars->x_dim; + if (m_bc.bc.getScaleFromXdimDp((float) x_dim_mm, get_dpmm(vars), getFileType(vars)) != scale) { + x_dim_mm = std::min(m_bc.bc.getXdimDpFromScale(scale, get_dpmm(vars), getFileType(vars)), 10.0f); + vars->x_dim = vars->x_dim_units == 1 ? x_dim_mm / 25.4 : x_dim_mm; + } + } + float width_x_dim, height_x_dim; + if (m_bc.bc.getWidthHeightXdim((float) vars->x_dim, width_x_dim, height_x_dim)) { + const char *fmt = vars->x_dim_units == 1 ? "%.3f x %.3f in @ %d %s (%s)" : "%.2f x %.2f mm @ %d %s (%s)"; + const char *resolution_units_str = vars->resolution_units == 1 ? "dpi" : "dpmm"; + lblSizeMsg->setText(QString::asprintf(fmt, width_x_dim, height_x_dim, vars->resolution, + resolution_units_str, getFileType(vars, true /*msg*/))); + } else { + lblSizeMsg->clear(); + } + } else { + lblSizeMsg->clear(); + } + if (m_scaleWindow) { + m_scaleWindow->size_msg_ui_set(); + } } void MainWindow::change_cmyk() @@ -1323,53 +1407,59 @@ void MainWindow::height_per_row_disable() } } +double MainWindow::get_height_per_row_default() +{ + const QString &name = m_btnHeightPerRowDefault->objectName(); + double val = 0.0; + if (name == QSL("btnPDFHeightPerRowDefault")) { + val = 3.0; + } else if (name == QSL("btnMPDFHeightPerRowDefault")) { + val = 2.0; + } else if (name == QSL("btnC16kHeightPerRowDefault")) { + if (chkCompliantHeight->isEnabled() && chkCompliantHeight->isChecked()) { + const int rows = m_bc.bc.encodedRows(); + val = 10.0 + (double)((rows - 1) * (get_cmb_index(QSL("cmbC16kRowSepHeight")) + 1)) / rows; + } else { + val = 10.0; + } + } else if (name == QSL("btnCbfHeightPerRowDefault")) { + // Depends on no. of data cols + const int cols = (m_bc.bc.encodedWidth() - 57) / 11; // 57 = 4 * 11 (start/subset/checks) + 13 (stop char) + val = 0.55 * cols + 3; + if (val < 10.0) { + val = 10.0; + } + } else if (name == QSL("btnC49HeightPerRowDefault")) { + if (chkCompliantHeight->isEnabled() && chkCompliantHeight->isChecked()) { + const int rows = m_bc.bc.encodedRows(); + val = 10.0 + (double)((rows - 1) * (get_cmb_index(QSL("cmbC49RowSepHeight")) + 1)) / rows; + } else { + val = 10.0; + } + } else if (name == QSL("btnDBESHeightPerRowDefault")) { + val = 34.0; + } + return val; +} + void MainWindow::height_per_row_default() { if (m_spnHeightPerRow && m_btnHeightPerRowDefault) { - const QString &name = m_btnHeightPerRowDefault->objectName(); - double val = 0.0; - if (name == QSL("btnPDFHeightPerRowDefault")) { - val = 3.0; - } else if (name == QSL("btnMPDFHeightPerRowDefault")) { - val = 2.0; - } else if (name == QSL("btnC16kHeightPerRowDefault")) { - if (chkCompliantHeight->isEnabled() && chkCompliantHeight->isChecked()) { - const int rows = m_bc.bc.encodedRows(); - val = 10.0 + (double)((rows - 1) * (get_cmb_index(QSL("cmbC16kRowSepHeight")) + 1)) / rows; - } else { - val = 10.0; - } - } else if (name == QSL("btnCbfHeightPerRowDefault")) { - // Depends on no. of data cols - const int cols = (m_bc.bc.encodedWidth() - 57) / 11; // 57 = 4 * 11 (start/subset/checks) + 13 (stop char) - val = 0.55 * cols + 3; - if (val < 10.0) { - val = 10.0; - } - } else if (name == QSL("btnC49HeightPerRowDefault")) { - if (chkCompliantHeight->isEnabled() && chkCompliantHeight->isChecked()) { - const int rows = m_bc.bc.encodedRows(); - val = 10.0 + (double)((rows - 1) * (get_cmb_index(QSL("cmbC49RowSepHeight")) + 1)) / rows; - } else { - val = 10.0; - } - } else if (name == QSL("btnDBESHeightPerRowDefault")) { - val = 34.0; - } + double val = get_height_per_row_default(); if (val) { m_spnHeightPerRow->setValue(val); } } } -void MainWindow::guard_reset_upcean() +void MainWindow::guard_default_upcean() { - guard_reset(QSL("spnUPCEANGuardDescent")); + guard_default(QSL("spnUPCEANGuardDescent")); } -void MainWindow::guard_reset_upca() +void MainWindow::guard_default_upca() { - guard_reset(QSL("spnUPCAGuardDescent")); + guard_default(QSL("spnUPCAGuardDescent")); } void MainWindow::view_context_menu(const QPoint &pos) @@ -1446,6 +1536,10 @@ void MainWindow::change_options() setColorTxtBtn(m_fgcolor, txt_fgcolor, fgcolor); setColorTxtBtn(m_bgcolor, txt_bgcolor, bgcolor); + m_xdimdpVars.x_dim = 0.0f; + m_xdimdpVars.x_dim_units = 0; + m_xdimdpVars.set = 0; + if (symbology == BARCODE_CODE128) { QFile file(QSL(":/grpC128.ui")); if (!file.open(QIODevice::ReadOnly)) @@ -1695,9 +1789,12 @@ void MainWindow::change_options() m_optionWidget = uiload.load(&file); file.close(); load_sub_settings(settings, symbology); - tabMain->insertTab(1, m_optionWidget, tr("DAFT")); + tabMain->insertTab(1, m_optionWidget, tr("D&AFT")); set_smaller_font(QSL("noteTrackerRatios")); + connect(get_widget(QSL("spnDAFTTrackerRatio")), SIGNAL(valueChanged( double )), SLOT(daft_ui_set())); connect(get_widget(QSL("spnDAFTTrackerRatio")), SIGNAL(valueChanged( double )), SLOT(update_preview())); + connect(get_widget(QSL("btnDAFTTrackerDefault")), SIGNAL(clicked( bool )), SLOT(daft_tracker_default())); + daft_ui_set(); } } else if (symbology == BARCODE_DPD) { @@ -1975,7 +2072,7 @@ void MainWindow::change_options() } connect(get_widget(QSL("cmbUPCAAddonGap")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(get_widget(QSL("spnUPCAGuardDescent")), SIGNAL(valueChanged( double )), SLOT(update_preview())); - connect(get_widget(QSL("btnUPCAGuardReset")), SIGNAL(clicked( bool )), SLOT(guard_reset_upca())); + connect(get_widget(QSL("btnUPCAGuardDefault")), SIGNAL(clicked( bool )), SLOT(guard_default_upca())); connect(get_widget(QSL("chkUPCANoQuietZones")), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_EANX || symbology == BARCODE_EANX_CHK || symbology == BARCODE_EANX_CC @@ -2000,7 +2097,7 @@ void MainWindow::change_options() } connect(get_widget(QSL("cmbUPCEANAddonGap")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(get_widget(QSL("spnUPCEANGuardDescent")), SIGNAL(valueChanged( double )), SLOT(update_preview())); - connect(get_widget(QSL("btnUPCEANGuardReset")), SIGNAL(clicked( bool )), SLOT(guard_reset_upcean())); + connect(get_widget(QSL("btnUPCEANGuardDefault")), SIGNAL(clicked( bool )), SLOT(guard_default_upcean())); connect(get_widget(QSL("chkUPCEANNoQuietZones")), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_VIN) { @@ -2232,7 +2329,7 @@ void MainWindow::combobox_item_enabled(QComboBox *comboBox, int index, bool enab } } -void MainWindow::upcean_addon_gap(const QString &comboBoxName, const QString &labelName, int base) +bool MainWindow::upcean_addon_gap(const QString &comboBoxName, const QString &labelName, int base) { QComboBox *comboBox = m_optionWidget->findChild(comboBoxName); QLabel *label = m_optionWidget->findChild(labelName); @@ -2251,26 +2348,38 @@ void MainWindow::upcean_addon_gap(const QString &comboBoxName, const QString &la m_bc.bc.setOption2(item_val + base); } } + return enabled; } -void MainWindow::upcean_guard_descent(const QString &spnBoxName, const QString &labelName) +void MainWindow::upcean_guard_descent(const QString &spnBoxName, const QString &labelName, + const QString &btnDefaultName, bool enabled) { QDoubleSpinBox *spnBox = m_optionWidget->findChild(spnBoxName); QLabel *label = m_optionWidget->findChild(labelName); + QPushButton *btnDefault = m_optionWidget->findChild(btnDefaultName); - bool enabled = txtData->text().length() > 5; if (spnBox) { spnBox->setEnabled(enabled); } if (label) { label->setEnabled(enabled); } + if (btnDefault) { + btnDefault->setEnabled(enabled); + } if (enabled && spnBox) { m_bc.bc.setGuardDescent(spnBox->value()); + if (btnDefault && spnBox->value() == 5.0) { + QWidget *focus = QApplication::focusWidget(); + btnDefault->setEnabled(false); + if (focus == btnDefault) { + spnBox->setFocus(); + } + } } } -void MainWindow::guard_reset(const QString &spnBoxName) +void MainWindow::guard_default(const QString &spnBoxName) { QDoubleSpinBox *spnBox = m_optionWidget->findChild(spnBoxName); if (spnBox && spnBox->value() != 5.0) { @@ -2279,6 +2388,32 @@ void MainWindow::guard_reset(const QString &spnBoxName) } } +void MainWindow::daft_ui_set() +{ + QDoubleSpinBox *spnBox = m_optionWidget->findChild(QSL("spnDAFTTrackerRatio")); + QPushButton *btnDefault = m_optionWidget->findChild(QSL("btnDAFTTrackerDefault")); + if (spnBox && spnBox->value() == 25.0) { + if (btnDefault) { + QWidget *focus = QApplication::focusWidget(); + btnDefault->setEnabled(false); + if (focus == btnDefault) { + spnBox->setFocus(); + } + } + } else if (btnDefault && !btnDefault->isEnabled()) { + btnDefault->setEnabled(true); + } +} + +void MainWindow::daft_tracker_default() +{ + QDoubleSpinBox *spnBox = m_optionWidget->findChild(QSL("spnDAFTTrackerRatio")); + if (spnBox && spnBox->value() != 25.0) { + spnBox->setValue(25.0); + update_preview(); + } +} + void MainWindow::set_gs1_mode(bool gs1_mode) { if (gs1_mode) { @@ -2344,6 +2479,7 @@ void MainWindow::update_preview() m_bc.bc.setOption1(-1); m_bc.bc.setOption2(0); m_bc.bc.setOption3(0); + m_bc.bc.setDPMM(m_xdimdpVars.set ? get_dpmm(&m_xdimdpVars) : 0.0f); chkData->setEnabled(true); if (chkData->isChecked()) { m_bc.bc.setInputMode(DATA_MODE); @@ -2363,7 +2499,7 @@ void MainWindow::update_preview() case BARCODE_CODE128: if (get_rad_val(QSL("radC128CSup"))) - m_bc.bc.setSymbol(BARCODE_CODE128B); + m_bc.bc.setSymbol(BARCODE_CODE128AB); else if (get_rad_val(QSL("radC128EAN"))) m_bc.bc.setSymbol(chkComposite->isChecked() ? BARCODE_GS1_128_CC : BARCODE_GS1_128); else if (get_rad_val(QSL("radC128HIBC"))) @@ -2374,8 +2510,12 @@ void MainWindow::update_preview() case BARCODE_EANX: m_bc.bc.setSymbol(chkComposite->isChecked() ? BARCODE_EANX_CC : BARCODE_EANX); - upcean_addon_gap(QSL("cmbUPCEANAddonGap"), QSL("lblUPCEANAddonGap"), 7 /*base*/); - upcean_guard_descent(QSL("spnUPCEANGuardDescent"), QSL("lblUPCEANGuardDescent")); + { + bool have_addon = upcean_addon_gap(QSL("cmbUPCEANAddonGap"), QSL("lblUPCEANAddonGap"), 7 /*base*/); + bool enable_guard = have_addon || txtData->text().length() > 5; + upcean_guard_descent(QSL("spnUPCEANGuardDescent"), QSL("lblUPCEANGuardDescent"), + QSL("btnUPCEANGuardDefault"), enable_guard); + } if (get_chk_val(QSL("chkUPCEANNoQuietZones"))) { m_bc.bc.setNoQuietZones(true); } @@ -2384,7 +2524,8 @@ void MainWindow::update_preview() case BARCODE_ISBNX: m_bc.bc.setSymbol(symbology); upcean_addon_gap(QSL("cmbUPCEANAddonGap"), QSL("lblUPCEANAddonGap"), 7 /*base*/); - upcean_guard_descent(QSL("spnUPCEANGuardDescent"), QSL("lblUPCEANGuardDescent")); + upcean_guard_descent(QSL("spnUPCEANGuardDescent"), QSL("lblUPCEANGuardDescent"), + QSL("btnUPCEANGuardDefault")); if (get_chk_val(QSL("chkUPCEANNoQuietZones"))) { m_bc.bc.setNoQuietZones(true); } @@ -2393,7 +2534,7 @@ void MainWindow::update_preview() case BARCODE_UPCA: m_bc.bc.setSymbol(chkComposite->isChecked() ? BARCODE_UPCA_CC : BARCODE_UPCA); upcean_addon_gap(QSL("cmbUPCAAddonGap"), QSL("lblUPCAAddonGap"), 9 /*base*/); - upcean_guard_descent(QSL("spnUPCAGuardDescent"), QSL("lblUPCAGuardDescent")); + upcean_guard_descent(QSL("spnUPCAGuardDescent"), QSL("lblUPCAGuardDescent"), QSL("btnUPCAGuardDefault")); if (get_chk_val(QSL("chkUPCANoQuietZones"))) { m_bc.bc.setNoQuietZones(true); } @@ -2402,7 +2543,8 @@ void MainWindow::update_preview() case BARCODE_UPCE: m_bc.bc.setSymbol(chkComposite->isChecked() ? BARCODE_UPCE_CC : BARCODE_UPCE); upcean_addon_gap(QSL("cmbUPCEANAddonGap"), QSL("lblUPCEANAddonGap"), 7 /*base*/); - upcean_guard_descent(QSL("spnUPCEANGuardDescent"), QSL("lblUPCEANGuardDescent")); + upcean_guard_descent(QSL("spnUPCEANGuardDescent"), QSL("lblUPCEANGuardDescent"), + QSL("btnUPCEANGuardDefault")); if (get_chk_val(QSL("chkUPCEANNoQuietZones"))) { m_bc.bc.setNoQuietZones(true); } @@ -2888,8 +3030,8 @@ void MainWindow::update_preview() lblECI->setEnabled(cmbECI->isEnabled()); } btnClearData->setEnabled(!txtData->text().isEmpty()); - chkGS1Parens->setEnabled(m_bc.bc.supportsGS1()); - chkGS1NoCheck->setEnabled(m_bc.bc.supportsGS1()); + chkGS1Parens->setEnabled(m_bc.bc.takesGS1AIData(m_symbology) || (m_bc.bc.inputMode() & 0x07) == GS1_MODE); + chkGS1NoCheck->setEnabled(chkGS1Parens->isEnabled()); chkRInit->setEnabled(m_bc.bc.supportsReaderInit() && (m_bc.bc.inputMode() & 0x07) != GS1_MODE); chkCompliantHeight->setEnabled(m_bc.bc.hasCompliantHeight()); @@ -2926,7 +3068,7 @@ void MainWindow::update_preview() } m_bc.bc.setFgColor(m_fgcolor); m_bc.bc.setBgColor(m_bgcolor); - change_print_scale(); + m_bc.bc.setScale((float) spnScale->value()); change_cmyk(); m_bc.setSize(width - 10, height - 10); m_bc.update(); @@ -2942,7 +3084,7 @@ void MainWindow::createActions() QIcon copyIcon(QIcon::fromTheme(QSL("edit-copy"), QIcon(QSL(":res/copy.svg")))); QIcon cliIcon(QSL(":res/zint_black.ico")); QIcon saveIcon(QIcon::fromTheme(QSL("document-save"), QIcon(QSL(":res/download.svg")))); - QIcon zapIcon(QIcon(QSL(":res/zap.svg"))); + QIcon zapIcon(QSL(":res/zap.svg")); QIcon aboutIcon(QSL(":res/zint-qt.ico")); QIcon helpIcon(QIcon::fromTheme(QSL("help-contents"), QIcon(QSL(":res/help-circle.svg")))); QIcon quitIcon(QIcon::fromTheme(QSL("window-close"), QIcon(QSL(":res/x.svg")))); @@ -3135,7 +3277,7 @@ void MainWindow::errtxtBar_clear() if (!errtxtBarContainer->isHidden()) { errtxtBarContainer->hide(); errtxtBarContainer->update(); - update_preview(); + update_preview(); // This causes a double-encode unfortunately } } @@ -3154,7 +3296,7 @@ void MainWindow::errtxtBar_set() if (errtxtBarContainer->isHidden()) { errtxtBarContainer->show(); errtxtBarContainer->update(); - update_preview(); + update_preview(); // This causes a double-encode unfortunately } } } @@ -3442,9 +3584,8 @@ QWidget *MainWindow::get_widget(const QString &name) /* Return settings subsection name for a symbol */ QString MainWindow::get_setting_name(int symbology) { - char name_buf[32]; switch (symbology) { - case BARCODE_CODE128B: + case BARCODE_CODE128AB: case BARCODE_GS1_128: case BARCODE_GS1_128_CC: case BARCODE_HIBC_128: @@ -3472,6 +3613,21 @@ QString MainWindow::get_setting_name(int symbology) case BARCODE_HIBC_QR: symbology = BARCODE_QRCODE; break; + case BARCODE_DBAR_OMN_CC: + symbology = BARCODE_DBAR_OMN; + break; + case BARCODE_DBAR_OMNSTK_CC: + symbology = BARCODE_DBAR_OMNSTK; + break; + case BARCODE_DBAR_LTD_CC: + symbology = BARCODE_DBAR_LTD; + break; + case BARCODE_DBAR_STK_CC: + symbology = BARCODE_DBAR_STK; + break; + case BARCODE_DBAR_EXP_CC: + symbology = BARCODE_DBAR_EXP; + break; case BARCODE_DBAR_EXPSTK_CC: symbology = BARCODE_DBAR_EXPSTK; break; @@ -3488,11 +3644,7 @@ QString MainWindow::get_setting_name(int symbology) symbology = BARCODE_UPCE; break; } - if (ZBarcode_BarcodeName(symbology, name_buf) != 0) { - return QSL(""); - } - QString name(name_buf + 8); // Strip "BARCODE_" prefix - return name.toLower(); + return Zint::QZint::barcodeName(symbology).mid(8).toLower(); // Strip "BARCODE_" prefix } /* Helper to return index of selected radio button in group, checking for NULL */ @@ -3624,7 +3776,7 @@ void MainWindow::set_spn_from_setting(QSettings &settings, const QString &settin void MainWindow::save_sub_settings(QSettings &settings, int symbology) { QString name = get_setting_name(symbology); - if (!name.isEmpty()) { + if (!name.isEmpty()) { // Should never be empty settings.setValue(QSL("studio/bc/%1/data").arg(name), txtData->text()); if (!grpSegs->isHidden()) { settings.setValue(QSL("studio/bc/%1/data_seg1").arg(name), txtDataSeg1->text()); @@ -3683,11 +3835,14 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology) settings.setValue(QSL("studio/bc/%1/paper/green").arg(name), m_bgcolor.green()); settings.setValue(QSL("studio/bc/%1/paper/blue").arg(name), m_bgcolor.blue()); settings.setValue(QSL("studio/bc/%1/paper/alpha").arg(name), m_bgcolor.alpha()); + settings.setValue(QSL("studio/bc/%1/xdimdpvars/x_dim").arg(name), m_xdimdpVars.x_dim); + settings.setValue(QSL("studio/bc/%1/xdimdpvars/x_dim_units").arg(name), m_xdimdpVars.x_dim_units); + settings.setValue(QSL("studio/bc/%1/xdimdpvars/set").arg(name), m_xdimdpVars.set); } switch (symbology) { case BARCODE_CODE128: - case BARCODE_CODE128B: + case BARCODE_CODE128AB: case BARCODE_GS1_128: case BARCODE_GS1_128_CC: case BARCODE_HIBC_128: @@ -3999,7 +4154,7 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology) void MainWindow::load_sub_settings(QSettings &settings, int symbology) { QString name = get_setting_name(symbology); - if (!name.isEmpty()) { + if (!name.isEmpty()) { // Should never be empty const QString &tdata = settings.value(QSL("studio/bc/%1/data").arg(name), QSL("")).toString(); if (!tdata.isEmpty()) { txtData->setText(tdata); @@ -4071,11 +4226,19 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology) settings.value(QSL("studio/bc/%1/paper/green").arg(name), 0xff).toInt(), settings.value(QSL("studio/bc/%1/paper/blue").arg(name), 0xff).toInt(), settings.value(QSL("studio/bc/%1/paper/alpha").arg(name), 0xff).toInt()); + + m_xdimdpVars.x_dim = settings.value(QSL("studio/bc/%1/xdimdpvars/x_dim").arg(name), 0.0).toFloat(); + m_xdimdpVars.x_dim_units = settings.value(QSL("studio/bc/%1/xdimdpvars/x_dim_units").arg(name), 0).toInt(); + m_xdimdpVars.set = settings.value(QSL("studio/bc/%1/xdimdpvars/set").arg(name), 0).toInt(); + } else { + m_xdimdpVars.x_dim = 0.0; + m_xdimdpVars.x_dim_units = 0; + m_xdimdpVars.set = 0; } switch (symbology) { case BARCODE_CODE128: - case BARCODE_CODE128B: + case BARCODE_CODE128AB: case BARCODE_GS1_128: case BARCODE_GS1_128_CC: case BARCODE_HIBC_128: @@ -4384,4 +4547,14 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology) } } +float MainWindow::get_dpmm(const struct Zint::QZintXdimDpVars* vars) const +{ + return (float) (vars->resolution_units == 1 ? vars->resolution / 25.4 : vars->resolution); +} + +const char *MainWindow::getFileType(const struct Zint::QZintXdimDpVars* vars, bool msg) const +{ + return Zint::QZintXdimDpVars::getFileType(m_bc.bc.symbol(), vars, msg); +} + /* vim: set ts=4 sw=4 et : */ diff --git a/frontend_qt/mainwindow.h b/frontend_qt/mainwindow.h index 84b99ad9..84f04389 100644 --- a/frontend_qt/mainwindow.h +++ b/frontend_qt/mainwindow.h @@ -24,14 +24,16 @@ #include #include -#include "ui_mainWindow.h" -#include "barcodeitem.h" - class QLabel; class QShortcut; class QDoubleSpinBox; class QPushButton; +#include "ui_mainWindow.h" +#include "barcodeitem.h" + +class ScaleWindow; + class MainWindow : public QWidget, private Ui::mainWindow { Q_OBJECT @@ -64,7 +66,6 @@ public slots: void composite_ean_check(); void maxi_scm_ui_set(); void msi_plessey_ui_set(); - void change_print_scale(); void change_cmyk(); void autoheight_ui_set(); void HRTShow_ui_set(); @@ -74,6 +75,7 @@ public slots: void on_encoded(); void on_errored(); void on_dataChanged(const QString& text, bool escaped, int seg_no); + void on_scaleChanged(double scale); void filter_symbologies(); bool save(); @@ -97,6 +99,7 @@ public slots: void clear_composite(); void zap(); void open_cli_dialog(); + void open_scale_dialog(); void copy_to_clipboard_bmp(); void copy_to_clipboard_emf(); @@ -112,8 +115,11 @@ public slots: void height_per_row_disable(); void height_per_row_default(); - void guard_reset_upcean(); - void guard_reset_upca(); + void guard_default_upcean(); + void guard_default_upca(); + + void daft_ui_set(); + void daft_tracker_default(); void view_context_menu(const QPoint &pos); void errtxtBar_context_menu(const QPoint &pos); @@ -134,9 +140,11 @@ protected: virtual bool eventFilter(QObject *watched, QEvent *event) override; void combobox_item_enabled(QComboBox *comboBox, int index, bool enabled); - void upcean_addon_gap(const QString &comboBoxName, const QString &labelName, int base); - void upcean_guard_descent(const QString &spnBoxName, const QString &labelName); - void guard_reset(const QString &spnBoxName); + bool upcean_addon_gap(const QString &comboBoxName, const QString &labelName, int base); + void upcean_guard_descent(const QString &spnBoxName, const QString &labelName, const QString &btnDefaultName, + bool enabled = true); + void guard_default(const QString &spnBoxName); + double get_height_per_row_default(); void set_gs1_mode(bool gs1_mode); void set_smaller_font(const QString &labelName); @@ -187,6 +195,11 @@ protected: void save_sub_settings(QSettings &settings, int symbology); void load_sub_settings(QSettings &settings, int symbology); + void size_msg_ui_set(); + + float get_dpmm(const struct Zint::QZintXdimDpVars *vars) const; + const char *getFileType(const struct Zint::QZintXdimDpVars *vars, bool msg = false) const; + private: QColor m_fgcolor, m_bgcolor; QByteArray m_fgcolor_geometry, m_bgcolor_geometry; @@ -223,6 +236,8 @@ private: QDoubleSpinBox *m_spnHeightPerRow; QPushButton *m_btnHeightPerRowDisable; QPushButton *m_btnHeightPerRowDefault; + struct Zint::QZintXdimDpVars m_xdimdpVars; + ScaleWindow *m_scaleWindow; }; /* vim: set ts=4 sw=4 et : */ diff --git a/frontend_qt/res/LICENSE_lucide b/frontend_qt/res/LICENSE_lucide new file mode 100644 index 00000000..325e8ff0 --- /dev/null +++ b/frontend_qt/res/LICENSE_lucide @@ -0,0 +1,15 @@ +ISC License + +Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT). All other copyright (c) for Lucide are held by Lucide Contributors 2022. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/frontend_qt/res/scaling.svg b/frontend_qt/res/scaling.svg new file mode 100644 index 00000000..e9b7d889 --- /dev/null +++ b/frontend_qt/res/scaling.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/frontend_qt/resources.qrc b/frontend_qt/resources.qrc index 86c6cf5a..0dd1b020 100644 --- a/frontend_qt/resources.qrc +++ b/frontend_qt/resources.qrc @@ -41,6 +41,7 @@ res/download.svg res/help-circle.svg res/menu.svg + res/scaling.svg res/shuffle.svg res/white-eye.svg res/x.svg diff --git a/frontend_qt/scalewindow.cpp b/frontend_qt/scalewindow.cpp new file mode 100644 index 00000000..178cd2e2 --- /dev/null +++ b/frontend_qt/scalewindow.cpp @@ -0,0 +1,248 @@ +/* + Zint Barcode Generator - the open source barcode generator + Copyright (C) 2022 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +/* SPDX-License-Identifier: GPL-3.0-or-later */ + +//#include +#include +#include + +#include +#include "scalewindow.h" + +// Shorthand +#define QSL QStringLiteral + +/* "Standard" dpmm/dpi equivalents */ +static int resolution_standard(int inch, int val) +{ + /* Note toss-up between rounding 2400 dpi to 94 or 95 (~94.48818897637795275591) */ + static int standards[9][2] = { + { 4, 100 }, { 6, 150 }, { 8, 200 }, { 12, 300 }, { 16, 400 }, + { 24, 600 }, { 47, 1200 }, { 94, 2400 }, { 189, 4800 }, + }; + for (int i = 0; i < 8; i++) { + if (standards[i][inch] == val) { + return standards[i][inch ? 0 : 1]; + } + } + return 0; +} + +ScaleWindow::ScaleWindow(BarcodeItem *bc, Zint::QZintXdimDpVars *vars) + : m_bc(bc), Valid(false), m_vars(*vars) +{ + setupUi(this); + + if (m_bc->bc.noPng()) { + cmbFileType->setItemText(0, QSL("Raster (BMP/GIF/PCX/TIF)")); + } + if (m_bc->bc.symbol() != BARCODE_MAXICODE) { + cmbFileType->setItemText(1, QSL("Vector (EMF/EPS/SVG)")); + cmbFileType->removeItem(2); // EMF + } + + QSettings settings; +#if QT_VERSION < 0x60000 + settings.setIniCodec("UTF-8"); +#endif + + QByteArray geometry = settings.value(QSL("studio/scale/window_geometry")).toByteArray(); + restoreGeometry(geometry); + + spnXdim->setValue(m_vars.x_dim); + cmbXdimUnits->setCurrentIndex(m_vars.x_dim_units); + spnResolution->setValue(m_vars.resolution); + cmbResolutionUnits->setCurrentIndex(m_vars.resolution_units); + + if (m_bc->bc.symbol() == BARCODE_MAXICODE) { + cmbFileType->setCurrentIndex(std::min(m_vars.filetype_maxicode, cmbFileType->count() - 1)); + } else { + cmbFileType->setCurrentIndex(std::min(m_vars.filetype, cmbFileType->count() - 1)); + } + + if (cmbXdimUnits->currentIndex() == 1) { // Inches + spnXdim->setSingleStep(0.001); + } else { + spnXdim->setSingleStep(0.01); + } + if (cmbResolutionUnits->currentIndex() == 1) { // Inches + spnResolution->setSingleStep(50); + } else { + spnResolution->setSingleStep(1); + } + + size_msg_ui_set(); + + QIcon closeIcon(QIcon::fromTheme(QSL("window-close"), QIcon(QSL(":res/x.svg")))); + QIcon okIcon(QIcon(QSL(":res/check.svg"))); + btnCancel->setIcon(closeIcon); + btnOK->setIcon(okIcon); + + connect(btnCancel, SIGNAL(clicked( bool )), SLOT(close())); + connect(btnOK, SIGNAL(clicked( bool )), SLOT(okay())); + connect(spnXdim, SIGNAL(valueChanged( double )), SLOT(update_scale())); + connect(cmbXdimUnits, SIGNAL(currentIndexChanged( int )), SLOT(x_dim_units_change())); + connect(btnXdimDefault, SIGNAL(clicked( bool )), SLOT(x_dim_default())); + connect(spnResolution, SIGNAL(valueChanged( int )), SLOT(update_scale())); + connect(cmbResolutionUnits, SIGNAL(currentIndexChanged( int )), SLOT(resolution_units_change())); + connect(btnResolutionDefault, SIGNAL(clicked( bool )), SLOT(resolution_default())); + connect(cmbFileType, SIGNAL(currentIndexChanged( int )), SLOT(update_scale())); +} + +ScaleWindow::~ScaleWindow() +{ + QSettings settings; +#if QT_VERSION < 0x60000 + settings.setIniCodec("UTF-8"); +#endif + settings.setValue(QSL("studio/scale/window_geometry"), saveGeometry()); +} + +void ScaleWindow::size_msg_ui_set() +{ + msgPrintingScale->setText(QString::asprintf("%.2f", m_bc->bc.scale())); + float width_x_dim, height_x_dim; + if (m_bc->bc.getWidthHeightXdim((float) m_vars.x_dim, width_x_dim, height_x_dim)) { + const char *fmt = cmbXdimUnits->currentIndex() == 1 ? "%.3f x %.3f in" : "%.2f x %.2f mm"; + msgWidthHeight->setText(QString::asprintf(fmt, width_x_dim, height_x_dim)); + } else { + msgWidthHeight->clear(); + } + + bool defaultDisable; + QWidget *focus = QApplication::focusWidget(); + + // This doesn't work well due to rounding errors TODO: fix + defaultDisable = m_bc->bc.defaultXdim() == (float) get_x_dim_mm(); + btnXdimDefault->setEnabled(!defaultDisable); + if (focus == btnXdimDefault && defaultDisable) { + spnXdim->setFocus(); + } + + defaultDisable = (cmbResolutionUnits->currentIndex() == 0 && spnResolution->value() == 12) + || (cmbResolutionUnits->currentIndex() == 1 && spnResolution->value() == 300); + btnResolutionDefault->setEnabled(!defaultDisable); + if (focus == btnResolutionDefault && defaultDisable) { + spnResolution->setFocus(); + } +} + +void ScaleWindow::okay() +{ + if (update_vars()) { + Valid = true; + m_vars.set = 1; + } + close(); +} + +void ScaleWindow::update_scale() +{ + float scale = update_vars(); + if (scale) { + // Need up-to-date `vectorWidth()` and `vectorHeight()` to estimate size including borders, whitespace & text, + // so tell main window to encode and it will update UI here via `size_msg_ui_set()` + emit scaleChanged(scale); + } +} + +void ScaleWindow::x_dim_units_change() +{ + if (cmbXdimUnits->currentIndex() == 1) { // Inches + spnXdim->setValue(spnXdim->value() / 25.4); + spnXdim->setSingleStep(0.001); + } else { + spnXdim->setValue(spnXdim->value() * 25.4); + spnXdim->setSingleStep(0.01); + } + update_scale(); +} + +void ScaleWindow::x_dim_default() +{ + if (cmbXdimUnits->currentIndex() == 1) { // Inches + spnXdim->setValue(m_bc->bc.defaultXdim() / 25.4); + } else { + spnXdim->setValue(m_bc->bc.defaultXdim()); + } + update_scale(); +} + +void ScaleWindow::resolution_units_change() +{ + int value; + if (cmbResolutionUnits->currentIndex() == 1) { // Inches + if ((value = resolution_standard(0, spnResolution->value()))) { + spnResolution->setValue(value); + } else { + spnResolution->setValue((int) roundf(spnResolution->value() * 25.4f)); + } + spnResolution->setSingleStep(50); + } else { + if ((value = resolution_standard(1, spnResolution->value()))) { + spnResolution->setValue(value); + } else { + spnResolution->setValue((int) roundf(spnResolution->value() / 25.4f)); + } + spnResolution->setSingleStep(1); + } + update_scale(); +} + +void ScaleWindow::resolution_default() +{ + spnResolution->setValue(cmbResolutionUnits->currentIndex() == 1 ? 300 : 12); + update_scale(); +} + +float ScaleWindow::get_x_dim_mm() const +{ + return (float) (cmbXdimUnits->currentIndex() == 1 ? spnXdim->value() * 25.4 : spnXdim->value()); + +} + +float ScaleWindow::get_dpmm() const +{ + return (float) (cmbResolutionUnits->currentIndex() == 1 ? spnResolution->value() / 25.4 : spnResolution->value()); +} + +const char *ScaleWindow::getFileType() const +{ + static const char *filetypes[3] = { "GIF", "SVG", "EMF" }; + return filetypes[std::max(std::min(cmbFileType->currentIndex(), 2), 0)]; +} + +double ScaleWindow::update_vars() +{ + double scale = (double) m_bc->bc.getScaleFromXdimDp(get_x_dim_mm(), get_dpmm(), getFileType()); + if (scale != 0.0) { + m_vars.x_dim = spnXdim->value(); + m_vars.x_dim_units = cmbXdimUnits->currentIndex(); + m_vars.resolution = spnResolution->value(); + m_vars.resolution_units = cmbResolutionUnits->currentIndex(); + if (m_bc->bc.symbol() == BARCODE_MAXICODE) { + m_vars.filetype_maxicode = cmbFileType->currentIndex(); + } else { + m_vars.filetype = cmbFileType->currentIndex(); + } + } + return scale; +} + +/* vim: set ts=4 sw=4 et : */ diff --git a/frontend_qt/scalewindow.h b/frontend_qt/scalewindow.h new file mode 100644 index 00000000..01833288 --- /dev/null +++ b/frontend_qt/scalewindow.h @@ -0,0 +1,63 @@ +/* + Zint Barcode Generator - the open source barcode generator + Copyright (C) 2022 Robin Stuart + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +/* SPDX-License-Identifier: GPL-3.0-or-later */ + +#ifndef SCALEWINDOW_H +#define SCALEWINDOW_H + +#include "ui_extScale.h" +#include "barcodeitem.h" + +class ScaleWindow : public QDialog, private Ui::ScaleDialog +{ + Q_OBJECT + +private: + BarcodeItem *m_bc; + +public: + ScaleWindow(BarcodeItem *bc, struct Zint::QZintXdimDpVars *vars); + ~ScaleWindow(); + + bool Valid; + + struct Zint::QZintXdimDpVars m_vars; + +signals: + void scaleChanged(double scale); + +public slots: + void size_msg_ui_set(); +private slots: + void okay(); + void update_scale(); + void x_dim_units_change(); + void x_dim_default(); + void resolution_units_change(); + void resolution_default(); + +private: + float get_x_dim_mm() const; + float get_dpmm() const; + const char *getFileType() const; + double update_vars(); +}; + +/* vim: set ts=4 sw=4 et : */ +#endif diff --git a/win32/README b/win32/README index ddb1743c..55109ef5 100644 --- a/win32/README +++ b/win32/README @@ -31,7 +31,7 @@ First build zlib: cd zlib nmake -f win32\Makefile.msc clean - nmake -f win32\Makefile.msc LOC="-DASMV -DASMINF=" OBJA="inffas32.obj match686.obj" + nmake -f win32\Makefile.msc cd .. diff --git a/win32/zint_cmdline_vc6/readme.txt b/win32/zint_cmdline_vc6/readme.txt index b30ac566..f9d77890 100644 --- a/win32/zint_cmdline_vc6/readme.txt +++ b/win32/zint_cmdline_vc6/readme.txt @@ -13,13 +13,13 @@ $ZR is the zint root folder (this file is in $ZR\win32\zint_cmdline_vc6) (if not available in the Start Menu, open a Command Prompt and run "C:\Program Files (x86)\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT") -a) zlib (current version: 1.2.11) +a) zlib (current version: 1.2.13) * put zlib to $ZR\..\zlib cd $ZR\..\zlib nmake -f win32\Makefile.msc -> generates zlib.lib, zlib1.dll -b) lpng (current version: 1.6.37) +b) lpng (current version: 1.6.39) * put libpng to $ZR\..\lpng cd $ZR\..\lpng nmake -f scripts\makefile.vcwin32