diff --git a/ChangeLog b/ChangeLog index 84c22649..894c0d3e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21,6 +21,7 @@ Changes border_width (0-100) - CLI: allow both e.g. '-height' and '--height' (getopt_long_only()) - UPC/EAN: add guard_descent +- Add output_options BARCODE_QUIET_ZONES and BARCODE_NO_QUIET_ZONES Bugs ---- diff --git a/backend/code.c b/backend/code.c index 51976e00..1b4ba784 100644 --- a/backend/code.c +++ b/backend/code.c @@ -285,7 +285,7 @@ INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], int length) } } - if (symbol->debug) { + if (symbol->debug & ZINT_DEBUG_PRINT) { printf("Barspaces: %s\n", dest); } diff --git a/backend/library.c b/backend/library.c index 6906a908..2009d14a 100644 --- a/backend/library.c +++ b/backend/library.c @@ -1537,6 +1537,27 @@ unsigned int ZBarcode_Cap(int symbol_id, unsigned int cap_flag) { if ((cap_flag & ZINT_CAP_DOTTY) && is_dotty(symbol_id)) { result |= ZINT_CAP_DOTTY; } + if (cap_flag & ZINT_CAP_QUIET_ZONES) { + switch (symbol_id) { /* See `quiet_zones()` in "output.c" */ + case BARCODE_CODE16K: + case BARCODE_CODE49: + case BARCODE_CODABLOCKF: + case BARCODE_HIBC_BLOCKF: + case BARCODE_ITF14: + 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: + result |= ZINT_CAP_QUIET_ZONES; + break; + } + } if ((cap_flag & ZINT_CAP_FIXED_RATIO) && is_fixed_ratio(symbol_id)) { result |= ZINT_CAP_FIXED_RATIO; } diff --git a/backend/output.c b/backend/output.c index 80c44b09..51f23c88 100644 --- a/backend/output.c +++ b/backend/output.c @@ -69,7 +69,8 @@ INTERNAL int output_check_colour_options(struct zint_symbol *symbol) { } /* Return minimum quiet zones for each symbology */ -static int quiet_zones(const struct zint_symbol *symbol, float *left, float *right, float *top, float *bottom) { +STATIC_UNLESS_ZINT_TEST int quiet_zones(const struct zint_symbol *symbol, const int hide_text, + float *left, float *right, float *top, float *bottom) { int done = 0; *left = *right = *top = *bottom = 0.0f; @@ -78,25 +79,33 @@ static int quiet_zones(const struct zint_symbol *symbol, float *left, float *rig switch (symbol->symbology) { case BARCODE_CODE16K: /* BS EN 12323:2005 Section 4.5 (c) */ - *left = 10.0f; - *right = 1.0f; + if (!(symbol->output_options & BARCODE_NO_QUIET_ZONES)) { + *left = 10.0f; + *right = 1.0f; + } done = 1; break; case BARCODE_CODE49: /* ANSI/AIM BC6-2000 Section 2.4 */ - *left = 10.0f; - *right = 1.0f; + if (!(symbol->output_options & BARCODE_NO_QUIET_ZONES)) { + *left = 10.0f; + *right = 1.0f; + } done = 1; break; case BARCODE_CODABLOCKF: case BARCODE_HIBC_BLOCKF: /* AIM ISS-X-24 Section 4.6.1 */ - *left = *right = 10.0f; + if (!(symbol->output_options & BARCODE_NO_QUIET_ZONES)) { + *left = *right = 10.0f; + } done = 1; break; case BARCODE_ITF14: /* GS1 General Specifications 21.0.1 Section 5.3.2.2 */ - *left = *right = 10.0f; + if (!(symbol->output_options & BARCODE_NO_QUIET_ZONES)) { + *left = *right = 10.0f; + } done = 1; break; case BARCODE_EANX: @@ -106,21 +115,33 @@ static int quiet_zones(const struct zint_symbol *symbol, float *left, float *rig /* GS1 General Specifications 21.0.1 Section 5.2.3.4 */ switch (ustrlen(symbol->text)) { case 13: /* EAN-13 */ - *left = 11.0f; - *right = 7.0f; + if (!(symbol->output_options & BARCODE_NO_QUIET_ZONES)) { + *left = 11.0f; + *right = 7.0f; + } else if (!hide_text) { + *left = 11.0f; /* Need for outside left digit */ + } break; case 16: /* EAN-13/ISBN + 2 digit addon */ case 19: /* EAN-13/ISBN + 5 digit addon */ - *left = 11.0f; - *right = 5.0f; + if (!(symbol->output_options & BARCODE_NO_QUIET_ZONES)) { + *left = 11.0f; + *right = 5.0f; + } else if (!hide_text) { + *left = 11.0f; /* Need for outside left digit */ + } break; case 5: /* EAN-5 addon */ case 2: /* EAN-2 addon */ - *left = 7.0f; - *right = 5.0f; + if (!(symbol->output_options & BARCODE_NO_QUIET_ZONES)) { + *left = 7.0f; + *right = 5.0f; + } break; default: /* EAN-8 (+/- 2/5 digit addon) */ - *left = *right = 7.0f; + if (!(symbol->output_options & BARCODE_NO_QUIET_ZONES)) { + *left = *right = 7.0f; + } break; } done = 1; @@ -129,11 +150,18 @@ static int quiet_zones(const struct zint_symbol *symbol, float *left, float *rig case BARCODE_UPCA_CHK: case BARCODE_UPCA_CC: /* GS1 General Specifications 21.0.1 Section 5.2.3.4 */ - *left = 9.0f; - if (ustrlen(symbol->text) > 12) { /* UPC-A + addon */ - *right = 5.0f; - } else { - *right = 9.0f; + if (!(symbol->output_options & BARCODE_NO_QUIET_ZONES)) { + *left = 9.0f; + if (ustrlen(symbol->text) > 12) { /* UPC-A + addon */ + *right = 5.0f; + } else { + *right = 9.0f; + } + } else if (!hide_text) { + *left = 9.0f; /* Need for outside left digit */ + if (ustrlen(symbol->text) <= 12) { /* No addon */ + *right = 9.0f; /* Need for outside right digit */ + } } done = 1; break; @@ -141,11 +169,18 @@ static int quiet_zones(const struct zint_symbol *symbol, float *left, float *rig case BARCODE_UPCE_CHK: case BARCODE_UPCE_CC: /* GS1 General Specifications 21.0.1 Section 5.2.3.4 */ - *left = 9.0f; - if (ustrlen(symbol->text) > 8) { /* UPC-E + addon */ - *right = 5.0f; - } else { - *right = 7.0f; + if (!(symbol->output_options & BARCODE_NO_QUIET_ZONES)) { + *left = 9.0f; + if (ustrlen(symbol->text) > 8) { /* UPC-E + addon */ + *right = 5.0f; + } else { + *right = 7.0f; + } + } else if (!hide_text) { + *left = 9.0f; /* Need for outside left digit */ + if (ustrlen(symbol->text) <= 8) { /* No addon */ + *right = 7.0f; /* Need for outside right digit */ + } } done = 1; break; @@ -155,14 +190,10 @@ static int quiet_zones(const struct zint_symbol *symbol, float *left, float *rig return done; } - /* Only do others if flag set TODO: finish */ -#if 0 - if (!(symbol->output_options & BARCODE_QUIET_ZONES)) { + /* Only do others if flag set */ + if (!(symbol->output_options & BARCODE_QUIET_ZONES) || (symbol->output_options & BARCODE_NO_QUIET_ZONES)) { return done; } -#else - return done; -#endif switch (symbol->symbology) { case BARCODE_CODE11: @@ -230,7 +261,7 @@ static int quiet_zones(const struct zint_symbol *symbol, float *left, float *rig break; case BARCODE_FLAT: - /* TODO */ + /* TODO: Find doc (application defined according to TEC-IT) */ break; case BARCODE_DBAR_OMN: /* GS1 Databar Omnidirectional */ @@ -255,7 +286,10 @@ static int quiet_zones(const struct zint_symbol *symbol, float *left, float *rig case BARCODE_TELEPEN: case BARCODE_TELEPEN_NUM: - /* TODO */ + /* Appears to be ~10X from diagram in Telepen Barcode Symbology information and History */ + /* TODO: Find better doc */ + *left = *right = 10.0f; + done = 1; break; case BARCODE_POSTNET: @@ -268,7 +302,9 @@ static int quiet_zones(const struct zint_symbol *symbol, float *left, float *rig break; case BARCODE_MSI_PLESSEY: - /* TODO */ + /* TODO Find doc (TEC-IT says 12X so use that for the moment) */ + *left = *right = 12.0f; + done = 1; break; case BARCODE_FIM: @@ -354,7 +390,9 @@ static int quiet_zones(const struct zint_symbol *symbol, float *left, float *rig break; case BARCODE_KOREAPOST: - /* TODO */ + /* TODO Find doc (TEC-IT uses 10X but says not exactly specified - do the same for the moment) */ + *left = *right = 10.0f; + done = 1; break; case BARCODE_USPS_IMAIL: @@ -366,7 +404,9 @@ static int quiet_zones(const struct zint_symbol *symbol, float *left, float *rig break; case BARCODE_PLESSEY: - /* TODO */ + /* TODO Find doc (see MSI_PLESSEY) */ + *left = *right = 12.0f; + done = 1; break; case BARCODE_KIX: @@ -408,7 +448,11 @@ static int quiet_zones(const struct zint_symbol *symbol, float *left, float *rig break; case BARCODE_CODEONE: - /* TODO */ + /* USS Code One AIM 1994 Section 2.2.4 No quiet zone required for Versions A to H */ + if (symbol->option_2 == 9 || symbol->option_2 == 10) { /* Section 2.3.2 Versions S & T */ + *left = *right = 1.0f; + } + done = 1; break; case BARCODE_GRIDMATRIX: @@ -427,12 +471,12 @@ static int quiet_zones(const struct zint_symbol *symbol, float *left, float *rig } /* Set left (x), top (y), right and bottom offsets for whitespace */ -INTERNAL void output_set_whitespace_offsets(const struct zint_symbol *symbol, +INTERNAL void output_set_whitespace_offsets(const struct zint_symbol *symbol, const int hide_text, float *xoffset, float *yoffset, float *roffset, float *boffset, const float scaler, int *xoffset_si, int *yoffset_si, int *roffset_si, int *boffset_si) { float qz_left, qz_right, qz_top, qz_bottom; - quiet_zones(symbol, &qz_left, &qz_right, &qz_top, &qz_bottom); + quiet_zones(symbol, hide_text, &qz_left, &qz_right, &qz_top, &qz_bottom); *xoffset = symbol->whitespace_width + qz_left; *roffset = symbol->whitespace_width + qz_right; diff --git a/backend/output.h b/backend/output.h index fb76629e..fadaf1d2 100644 --- a/backend/output.h +++ b/backend/output.h @@ -38,7 +38,7 @@ extern "C" { #endif /* __cplusplus */ INTERNAL int output_check_colour_options(struct zint_symbol *symbol); -INTERNAL void output_set_whitespace_offsets(const struct zint_symbol *symbol, +INTERNAL void output_set_whitespace_offsets(const struct zint_symbol *symbol, const int hide_text, float *xoffset, float *yoffset, float *roffset, float *boffset, const float scaler, int *xoffset_si, int *yoffset_si, int *roffset_si, int *boffset_si); INTERNAL int output_process_upcean(const struct zint_symbol *symbol, int *p_main_width, int *p_comp_xoffset, diff --git a/backend/png.c b/backend/png.c index 431ed2fe..ef5eb59e 100644 --- a/backend/png.c +++ b/backend/png.c @@ -175,7 +175,9 @@ INTERNAL int png_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf) } /* For Ultracode, have background only if have whitespace/quiet zones */ - if (symbol->whitespace_width > 0 || symbol->whitespace_height > 0) { /* TODO: BARCODE_QUIET_ZONES also */ + if (symbol->whitespace_width > 0 || symbol->whitespace_height > 0 + || ((symbol->output_options & BARCODE_QUIET_ZONES) + && !(symbol->output_options & BARCODE_NO_QUIET_ZONES))) { /* Check whether can re-use white */ if (bg.red == 0xff && bg.green == 0xff && bg.blue == 0xff && bg_alpha == fg_alpha) { map['0'] = 0; /* Re-use white */ diff --git a/backend/raster.c b/backend/raster.c index 87c7340d..bdf699af 100644 --- a/backend/raster.c +++ b/backend/raster.c @@ -680,7 +680,7 @@ static int plot_raster_maxicode(struct zint_symbol *symbol, const int rotate_ang } scaler *= 10.0f; - output_set_whitespace_offsets(symbol, &xoffset, &yoffset, &roffset, &boffset, scaler, + output_set_whitespace_offsets(symbol, 0 /*hide_text*/, &xoffset, &yoffset, &roffset, &boffset, scaler, &xoffset_si, &yoffset_si, &roffset_si, &boffset_si); hex_width = (int) roundf(scaler); /* Short diameter, X in ISO/IEC 16023:2000 Figure 8 (same as W) */ @@ -777,7 +777,7 @@ static int plot_raster_dotty(struct zint_symbol *symbol, const int rotate_angle, dot_radius_s = (symbol->dot_size * scaler) / 2.0f; dot_radius_si = (int) dot_radius_s; - output_set_whitespace_offsets(symbol, &xoffset, &yoffset, &roffset, &boffset, scaler, + output_set_whitespace_offsets(symbol, 0 /*hide_text*/, &xoffset, &yoffset, &roffset, &boffset, scaler, &xoffset_si, &yoffset_si, &roffset_si, &boffset_si); /* TODO: Revisit this overspill stuff, it's hacky */ @@ -917,7 +917,9 @@ static int plot_raster_default(struct zint_symbol *symbol, const int rotate_angl upceanflag = output_process_upcean(symbol, &main_width, &comp_xoffset, addon, &addon_gap); } - output_set_whitespace_offsets(symbol, &xoffset, &yoffset, &roffset, &boffset, si, + hide_text = ((!symbol->show_hrt) || (ustrlen(symbol->text) == 0) || scaler < 1.0f); + + output_set_whitespace_offsets(symbol, hide_text, &xoffset, &yoffset, &roffset, &boffset, si, &xoffset_si, &yoffset_si, &roffset_si, &boffset_si); /* Note font sizes halved as in pixels */ @@ -934,8 +936,6 @@ static int plot_raster_default(struct zint_symbol *symbol, const int rotate_angl guard_descent = 0.0f; } - hide_text = ((!symbol->show_hrt) || (ustrlen(symbol->text) == 0) || scaler < 1.0f); - if (hide_text) { textoffset = guard_descent; } else { diff --git a/backend/tests/CMakeLists.txt b/backend/tests/CMakeLists.txt index 68bc659b..54c1f584 100644 --- a/backend/tests/CMakeLists.txt +++ b/backend/tests/CMakeLists.txt @@ -70,6 +70,7 @@ zint_add_test(library test_library) zint_add_test(mailmark test_mailmark) zint_add_test(maxicode test_maxicode) zint_add_test(medical test_medical) +zint_add_test(output test_output) zint_add_test(pcx test_pcx) zint_add_test(pdf417 test_pdf417) zint_add_test(plessey test_plessey) diff --git a/backend/tests/test_code128.c b/backend/tests/test_code128.c index dca19b8d..c6aa3e9a 100644 --- a/backend/tests/test_code128.c +++ b/backend/tests/test_code128.c @@ -192,10 +192,11 @@ static void test_hrt(int index, int debug) { /* 3*/ { BARCODE_CODE128, UNICODE_MODE, "12345\01167890\037\177", -1, "12345 67890 " }, /* 4*/ { BARCODE_CODE128, UNICODE_MODE, "abcdé", -1, "abcdé" }, /* 5*/ { BARCODE_CODE128, DATA_MODE, "abcd\351", -1, "abcdé" }, - /* 6*/ { BARCODE_CODE128B, UNICODE_MODE, "abcdé", -1, "abcdé" }, - /* 7*/ { BARCODE_CODE128B, DATA_MODE, "abcd\351", -1, "abcdé" }, - /* 8*/ { BARCODE_HIBC_128, UNICODE_MODE, "1234567890", -1, "*+12345678900*" }, - /* 9*/ { BARCODE_HIBC_128, UNICODE_MODE, "a99912345", -1, "*+A999123457*" }, // Converts to upper + /* 6*/ { BARCODE_CODE128, DATA_MODE, "ab\240cd\351", -1, "ab\302\240cdé" }, // NBSP + /* 7*/ { BARCODE_CODE128B, UNICODE_MODE, "abcdé", -1, "abcdé" }, + /* 8*/ { BARCODE_CODE128B, DATA_MODE, "abcd\351", -1, "abcdé" }, + /* 9*/ { BARCODE_HIBC_128, UNICODE_MODE, "1234567890", -1, "*+12345678900*" }, + /* 10*/ { BARCODE_HIBC_128, UNICODE_MODE, "a99912345", -1, "*+A999123457*" }, // Converts to upper // BARCODE_GS1_128, BARCODE_EAN14, BARCODE_NVE18 hrt tested in test_gs1.c }; int data_size = ARRAY_SIZE(data); diff --git a/backend/tests/test_library.c b/backend/tests/test_library.c index fa16de83..55c83a84 100644 --- a/backend/tests/test_library.c +++ b/backend/tests/test_library.c @@ -472,9 +472,9 @@ static void test_cap(int index) { /* 1*/ { BARCODE_CODE128, ZINT_CAP_HRT | ZINT_CAP_STACKABLE | ZINT_CAP_GS1, ZINT_CAP_HRT | ZINT_CAP_STACKABLE }, /* 2*/ { BARCODE_PDF417, ZINT_CAP_HRT | ZINT_CAP_ECI | ZINT_CAP_GS1 | ZINT_CAP_READER_INIT | ZINT_CAP_FULL_MULTIBYTE, ZINT_CAP_ECI | ZINT_CAP_READER_INIT }, /* 3*/ { BARCODE_QRCODE, ZINT_CAP_HRT | ZINT_CAP_ECI | ZINT_CAP_GS1 | ZINT_CAP_DOTTY | ZINT_CAP_READER_INIT | ZINT_CAP_FULL_MULTIBYTE | ZINT_CAP_MASK, ZINT_CAP_ECI | ZINT_CAP_GS1 | ZINT_CAP_DOTTY | ZINT_CAP_FULL_MULTIBYTE | ZINT_CAP_MASK }, - /* 4*/ { BARCODE_EANX_CC, ZINT_CAP_HRT | ZINT_CAP_COMPOSITE | ZINT_CAP_EXTENDABLE | ZINT_CAP_ECI | ZINT_CAP_GS1, ZINT_CAP_HRT | ZINT_CAP_COMPOSITE | ZINT_CAP_EXTENDABLE | ZINT_CAP_GS1 }, - /* 5*/ { BARCODE_HANXIN, ZINT_CAP_DOTTY | ZINT_CAP_FIXED_RATIO | ZINT_CAP_FULL_MULTIBYTE | ZINT_CAP_MASK, ZINT_CAP_DOTTY | ZINT_CAP_FIXED_RATIO | ZINT_CAP_FULL_MULTIBYTE | ZINT_CAP_MASK }, - /* 6*/ { BARCODE_CODE11, ZINT_CAP_DOTTY | ZINT_CAP_FIXED_RATIO | ZINT_CAP_READER_INIT | ZINT_CAP_FULL_MULTIBYTE, 0 }, + /* 4*/ { BARCODE_EANX_CC, ZINT_CAP_HRT | ZINT_CAP_COMPOSITE | ZINT_CAP_EXTENDABLE | ZINT_CAP_ECI | ZINT_CAP_GS1 | ZINT_CAP_QUIET_ZONES, ZINT_CAP_HRT | ZINT_CAP_COMPOSITE | ZINT_CAP_EXTENDABLE | ZINT_CAP_GS1 | ZINT_CAP_QUIET_ZONES }, + /* 5*/ { BARCODE_HANXIN, ZINT_CAP_DOTTY | ZINT_CAP_QUIET_ZONES | ZINT_CAP_FIXED_RATIO | ZINT_CAP_FULL_MULTIBYTE | ZINT_CAP_MASK, ZINT_CAP_DOTTY | ZINT_CAP_FIXED_RATIO | ZINT_CAP_FULL_MULTIBYTE | ZINT_CAP_MASK }, + /* 6*/ { BARCODE_CODE11, ZINT_CAP_DOTTY | ZINT_CAP_FIXED_RATIO | ZINT_CAP_FIXED_RATIO | ZINT_CAP_READER_INIT | ZINT_CAP_FULL_MULTIBYTE, 0 }, /* 7*/ { BARCODE_POSTNET, ZINT_CAP_HRT | ZINT_CAP_STACKABLE | ZINT_CAP_EXTENDABLE | ZINT_CAP_COMPOSITE | ZINT_CAP_ECI | ZINT_CAP_GS1 | ZINT_CAP_DOTTY | ZINT_CAP_FIXED_RATIO | ZINT_CAP_READER_INIT | ZINT_CAP_FULL_MULTIBYTE | ZINT_CAP_MASK, 0 }, /* 8*/ { 0, 0, 0 }, }; diff --git a/backend/tests/test_output.c b/backend/tests/test_output.c new file mode 100644 index 00000000..2148f36f --- /dev/null +++ b/backend/tests/test_output.c @@ -0,0 +1,69 @@ +/* + libzint - the open source barcode library + Copyright (C) 2021 Robin Stuart + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the project nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + */ +/* vim: set ts=4 sw=4 et : */ + +#include "testcommon.h" + +STATIC_UNLESS_ZINT_TEST int quiet_zones(const struct zint_symbol *symbol, const int hide_text, + float *left, float *right, float *top, float *bottom); + +static void test_quiet_zones(void) { + int i, ret; + struct zint_symbol symbol = {0}; + int hide_text = 0; + float left, right, top, bottom; + + testStart("test_quiet_zones"); + + for (i = BARCODE_CODE11; i <= BARCODE_RMQR; i++) { + if (!ZBarcode_ValidID(i)) continue; + symbol.symbology = i; + symbol.output_options = BARCODE_QUIET_ZONES; + ret = quiet_zones(&symbol, hide_text, &left, &right, &top, &bottom); + if (i != BARCODE_FLAT) { // Only one which isn't marked as done + assert_nonzero(ret, "i:%d %s not done\n", i, testUtilBarcodeName(i)); + } + } + + testFinish(); +} + +int main(int argc, char *argv[]) { + + testFunction funcs[] = { /* name, func, has_index, has_generate, has_debug */ + { "test_quiet_zones", test_quiet_zones, 0, 0, 0 }, + }; + + testRun(argc, argv, funcs, ARRAY_SIZE(funcs)); + + testReport(); + + return 0; +} diff --git a/backend/tests/test_raster.c b/backend/tests/test_raster.c index 2adf61fc..706cd074 100644 --- a/backend/tests/test_raster.c +++ b/backend/tests/test_raster.c @@ -1155,6 +1155,376 @@ static void test_guard_descent(int index, int debug) { testFinish(); } +static void test_quiet_zones(int index, int debug) { + + struct item { + int symbology; + int output_options; + int option_2; + int show_hrt; + char *data; + + int ret_raster; + float expected_height; + int expected_rows; + int expected_width; + int expected_bitmap_width; + int expected_bitmap_height; + + int expected_set; + int expected_set_row; + int expected_set_rows; + int expected_set_col; + int expected_set_len; + }; + // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) + struct item data[] = { + /* 0*/ { BARCODE_CODE11, -1, -1, -1, "1234", 0, 50, 1, 62, 124, 116, 1 /*set*/, 0, 100, 0, 2 }, + /* 1*/ { BARCODE_CODE11, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 62, 164, 116, 0 /*set*/, 0, 100, 0, 20 }, + /* 2*/ { BARCODE_CODE11, BARCODE_QUIET_ZONES | BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 62, 124, 116, 1 /*set*/, 0, 100, 0, 2 }, // BARCODE_NO_QUIET_ZONES trumps BARCODE_QUIET_ZONES + /* 3*/ { BARCODE_C25STANDARD, -1, -1, -1, "1234", 0, 50, 1, 57, 114, 116, 1 /*set*/, 0, 100, 0, 8 }, + /* 4*/ { BARCODE_C25STANDARD, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 57, 154, 116, 0 /*set*/, 0, 100, 0, 20 }, + /* 5*/ { BARCODE_C25INTER, -1, -1, -1, "1234", 0, 50, 1, 45, 90, 116, 1 /*set*/, 0, 100, 0, 2 }, + /* 6*/ { BARCODE_C25INTER, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 45, 130, 116, 0 /*set*/, 0, 100, 0, 20 }, + /* 7*/ { BARCODE_C25IATA, -1, -1, -1, "1234", 0, 50, 1, 65, 130, 116, 1 /*set*/, 0, 100, 0, 2 }, + /* 8*/ { BARCODE_C25IATA, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 65, 170, 116, 0 /*set*/, 0, 100, 0, 20 }, + /* 9*/ { BARCODE_C25LOGIC, -1, -1, -1, "1234", 0, 50, 1, 49, 98, 116, 1 /*set*/, 0, 100, 0, 2 }, + /* 10*/ { BARCODE_C25LOGIC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 49, 138, 116, 0 /*set*/, 0, 100, 0, 20 }, + /* 11*/ { BARCODE_C25IND, -1, -1, -1, "1234", 0, 50, 1, 75, 150, 116, 1 /*set*/, 0, 100, 0, 2 }, + /* 12*/ { BARCODE_C25IND, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 75, 190, 116, 0 /*set*/, 0, 100, 0, 20 }, + /* 13*/ { BARCODE_CODE39, -1, -1, -1, "1234", 0, 50, 1, 77, 154, 116, 1 /*set*/, 0, 100, 0, 2 }, + /* 14*/ { BARCODE_CODE39, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 77, 194, 116, 0 /*set*/, 0, 100, 0, 20 }, + /* 15*/ { BARCODE_EXCODE39, -1, -1, -1, "1234", 0, 50, 1, 77, 154, 116, 1 /*set*/, 0, 100, 0, 2 }, + /* 16*/ { BARCODE_EXCODE39, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 77, 194, 116, 0 /*set*/, 0, 100, 0, 20 }, + /* 17*/ { BARCODE_EANX, -1, -1, -1, "023456789012", 0, 50, 1, 95, 226, 116, 0 /*set*/, 0, 110, 212, 14 }, // EAN-13 + /* 18*/ { BARCODE_EANX, BARCODE_QUIET_ZONES, -1, -1, "023456789012", 0, 50, 1, 95, 226, 116, 0 /*set*/, 0, 110, 212, 14 }, + /* 19*/ { BARCODE_EANX, BARCODE_NO_QUIET_ZONES, -1, -1, "023456789012", 0, 50, 1, 95, 212, 116, 1 /*set*/, 0, 110, 210, 2 }, + /* 20*/ { BARCODE_EANX, -1, -1, 0, "023456789012", 0, 50, 1, 95, 226, 110, 0 /*set*/, 0, 110, 212, 14 }, // Hide text + /* 21*/ { BARCODE_EANX, BARCODE_QUIET_ZONES, -1, 0, "023456789012", 0, 50, 1, 95, 226, 110, 0 /*set*/, 0, 110, 212, 14 }, // Hide text + /* 22*/ { BARCODE_EANX, BARCODE_NO_QUIET_ZONES, -1, 0, "023456789012", 0, 50, 1, 95, 190, 110, 1 /*set*/, 0, 110, 188, 2 }, // Hide text + /* 23*/ { BARCODE_EANX, -1, -1, -1, "023456789012+12", 0, 50, 1, 122, 276, 116, 0 /*set*/, 16, 110, 266, 10 }, + /* 24*/ { BARCODE_EANX, BARCODE_QUIET_ZONES, -1, -1, "023456789012+12", 0, 50, 1, 122, 276, 116, 0 /*set*/, 16, 110, 266, 10 }, + /* 25*/ { BARCODE_EANX, BARCODE_NO_QUIET_ZONES, -1, -1, "023456789012+12", 0, 50, 1, 122, 266, 116, 1 /*set*/, 16, 110, 262, 4 }, + /* 26*/ { BARCODE_EANX, -1, -1, 0, "023456789012+12", 0, 50, 1, 122, 276, 110, 0 /*set*/, 16, 110, 266, 10 }, // Hide text + /* 27*/ { BARCODE_EANX, BARCODE_QUIET_ZONES, -1, 0, "023456789012+12", 0, 50, 1, 122, 276, 110, 0 /*set*/, 16, 110, 266, 10 }, // Hide text + /* 28*/ { BARCODE_EANX, BARCODE_NO_QUIET_ZONES, -1, 0, "023456789012+12", 0, 50, 1, 122, 244, 110, 1 /*set*/, 16, 110, 240, 4 }, // Hide text + /* 29*/ { BARCODE_EANX_CHK, -1, -1, -1, "0234567890129+12345", 0, 50, 1, 149, 330, 116, 0 /*set*/, 16, 110, 320, 10 }, + /* 30*/ { BARCODE_EANX_CHK, BARCODE_QUIET_ZONES, -1, -1, "0234567890129+12345", 0, 50, 1, 149, 330, 116, 0 /*set*/, 16, 110, 320, 10 }, + /* 31*/ { BARCODE_EANX_CHK, BARCODE_NO_QUIET_ZONES, -1, -1, "0234567890129+12345", 0, 50, 1, 149, 320, 116, 1 /*set*/, 16, 110, 318, 2 }, + /* 32*/ { BARCODE_EANX, -1, -1, -1, "0234567", 0, 50, 1, 67, 162, 116, 0 /*set*/, 0, 100, 0, 14 }, // EAN-8 + /* 33*/ { BARCODE_EANX, BARCODE_QUIET_ZONES, -1, -1, "0234567", 0, 50, 1, 67, 162, 116, 0 /*set*/, 0, 100, 0, 14 }, // EAN-8 + /* 34*/ { BARCODE_EANX, BARCODE_NO_QUIET_ZONES, -1, -1, "0234567", 0, 50, 1, 67, 134, 116, 1 /*set*/, 0, 100, 0, 2 }, // EAN-8 + /* 35*/ { BARCODE_EANX, -1, -1, -1, "02345", 0, 50, 1, 47, 118, 116, 0 /*set*/, 0, 100, 0, 14 }, // EAN-5 + /* 36*/ { BARCODE_EANX, BARCODE_QUIET_ZONES, -1, -1, "02345", 0, 50, 1, 47, 118, 116, 0 /*set*/, 0, 100, 0, 14 }, // EAN-5 + /* 37*/ { BARCODE_EANX, BARCODE_NO_QUIET_ZONES, -1, -1, "02345", 0, 50, 1, 47, 94, 116, 1 /*set*/, 0, 100, 0, 2 }, // EAN-5 + /* 38*/ { BARCODE_EANX, -1, -1, -1, "02", 0, 50, 1, 20, 64, 116, 0 /*set*/, 0, 100, 0, 14 }, // EAN-2 + /* 39*/ { BARCODE_EANX, BARCODE_QUIET_ZONES, -1, -1, "02", 0, 50, 1, 20, 64, 116, 0 /*set*/, 0, 100, 0, 14 }, // EAN-2 + /* 40*/ { BARCODE_EANX, BARCODE_NO_QUIET_ZONES, -1, -1, "02", 0, 50, 1, 20, 40, 116, 1 /*set*/, 0, 100, 0, 2 }, // EAN-2 + /* 41*/ { BARCODE_GS1_128, -1, -1, -1, "[20]02", 0, 50, 1, 68, 136, 116, 1 /*set*/, 0, 100, 0, 4 }, + /* 42*/ { BARCODE_GS1_128, BARCODE_QUIET_ZONES, -1, -1, "[20]02", 0, 50, 1, 68, 176, 116, 0 /*set*/, 0, 100, 0, 20 }, + /* 43*/ { BARCODE_CODABAR, -1, -1, -1, "A0B", 0, 50, 1, 32, 64, 116, 1 /*set*/, 0, 100, 0, 2 }, + /* 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 }, + /* 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 }, + /* 54*/ { BARCODE_CODE49, -1, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 0 /*set*/, 2, 20, 0, 20 }, + /* 55*/ { BARCODE_CODE49, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 0 /*set*/, 2, 20, 0, 20 }, + /* 56*/ { BARCODE_CODE49, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 140, 44, 1 /*set*/, 2, 20, 0, 2 }, + /* 57*/ { BARCODE_CODE93, -1, -1, -1, "1234", 0, 50, 1, 73, 146, 116, 1 /*set*/, 0, 100, 0, 2 }, + /* 58*/ { BARCODE_CODE93, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 73, 186, 116, 0 /*set*/, 0, 100, 0, 20 }, + /* 59*/ { BARCODE_FLAT, -1, -1, -1, "1234", 0, 50, 1, 36, 72, 100, 1 /*set*/, 0, 100, 0, 2 }, + /* 60*/ { BARCODE_FLAT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 36, 72, 100, 1 /*set*/, 0, 100, 0, 2 }, + /* 61*/ { BARCODE_FLAT, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 36, 72, 100, 1 /*set*/, 0, 100, 0, 2 }, + /* 62*/ { BARCODE_DBAR_OMN, -1, -1, -1, "1234", 0, 50, 1, 96, 192, 116, 0 /*set*/, 0, 100, 0, 2 }, + /* 63*/ { BARCODE_DBAR_OMN, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 96, 192, 116, 0 /*set*/, 0, 100, 0, 2 }, + /* 64*/ { BARCODE_DBAR_OMN, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 96, 192, 116, 0 /*set*/, 0, 100, 0, 2 }, + /* 65*/ { BARCODE_DBAR_LTD, -1, -1, -1, "1234", 0, 50, 1, 79, 158, 116, 0 /*set*/, 0, 100, 0, 2 }, + /* 66*/ { BARCODE_DBAR_LTD, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 79, 158, 116, 0 /*set*/, 0, 100, 0, 2 }, + /* 67*/ { BARCODE_DBAR_LTD, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 79, 158, 116, 0 /*set*/, 0, 100, 0, 2 }, + /* 68*/ { BARCODE_DBAR_EXP, -1, -1, -1, "[20]02", 0, 34, 1, 102, 204, 84, 0 /*set*/, 0, 84, 0, 2 }, + /* 69*/ { BARCODE_DBAR_EXP, BARCODE_QUIET_ZONES, -1, -1, "[20]02", 0, 34, 1, 102, 204, 84, 0 /*set*/, 0, 84, 0, 2 }, + /* 70*/ { BARCODE_DBAR_EXP, BARCODE_NO_QUIET_ZONES, -1, -1, "[20]02", 0, 34, 1, 102, 204, 84, 0 /*set*/, 0, 84, 0, 2 }, + /* 71*/ { BARCODE_TELEPEN, -1, -1, -1, "1234", 0, 50, 1, 112, 224, 116, 1 /*set*/, 0, 100, 0, 2 }, + /* 72*/ { BARCODE_TELEPEN, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 112, 264, 116, 0 /*set*/, 0, 100, 0, 20 }, + /* 73*/ { BARCODE_UPCA, -1, -1, -1, "01457137763", 0, 50, 1, 95, 226, 116, 0 /*set*/, 0, 100, 0, 18 }, + /* 74*/ { BARCODE_UPCA, BARCODE_QUIET_ZONES, -1, -1, "01457137763", 0, 50, 1, 95, 226, 116, 0 /*set*/, 0, 100, 0, 18 }, + /* 75*/ { BARCODE_UPCA, BARCODE_NO_QUIET_ZONES, -1, -1, "01457137763", 0, 50, 1, 95, 226, 116, 0 /*set*/, 0, 100, 0, 18 }, + /* 76*/ { BARCODE_UPCA, -1, -1, 0, "01457137763", 0, 50, 1, 95, 226, 110, 0 /*set*/, 0, 110, 0, 18 }, // Hide text + /* 77*/ { BARCODE_UPCA, BARCODE_QUIET_ZONES, -1, 0, "01457137763", 0, 50, 1, 95, 226, 110, 0 /*set*/, 0, 110, 0, 18 }, // Hide text + /* 78*/ { BARCODE_UPCA, BARCODE_NO_QUIET_ZONES, -1, 0, "01457137763", 0, 50, 1, 95, 190, 110, 1 /*set*/, 0, 110, 0, 2 }, // Hide text + /* 79*/ { BARCODE_UPCA, -1, -1, -1, "01457137763+12", 0, 50, 1, 124, 276, 116, 0 /*set*/, 16, 100, 266, 10 }, + /* 80*/ { BARCODE_UPCA, BARCODE_QUIET_ZONES, -1, -1, "01457137763+12", 0, 50, 1, 124, 276, 116, 0 /*set*/, 16, 100, 266, 10 }, + /* 81*/ { BARCODE_UPCA, BARCODE_NO_QUIET_ZONES, -1, -1, "01457137763+12", 0, 50, 1, 124, 266, 116, 1 /*set*/, 16, 100, 262, 4 }, + /* 82*/ { BARCODE_UPCA, -1, -1, 0, "01457137763+12", 0, 50, 1, 124, 276, 110, 0 /*set*/, 16, 110, 266, 10 }, // Hide text + /* 83*/ { BARCODE_UPCA, BARCODE_QUIET_ZONES, -1, 0, "01457137763+12", 0, 50, 1, 124, 276, 110, 0 /*set*/, 16, 110, 266, 10 }, // Hide text + /* 84*/ { BARCODE_UPCA, BARCODE_NO_QUIET_ZONES, -1, 0, "01457137763+12", 0, 50, 1, 124, 248, 110, 1 /*set*/, 16, 100, 244, 4 }, // Hide text + /* 85*/ { BARCODE_UPCA_CHK, -1, -1, -1, "014571377638+12345", 0, 50, 1, 151, 330, 116, 0 /*set*/, 16, 100, 320, 10 }, + /* 86*/ { BARCODE_UPCA_CHK, BARCODE_QUIET_ZONES, -1, -1, "014571377638+12345", 0, 50, 1, 151, 330, 116, 0 /*set*/, 16, 100, 320, 10 }, + /* 87*/ { BARCODE_UPCA_CHK, BARCODE_NO_QUIET_ZONES, -1, -1, "014571377638+12345", 0, 50, 1, 151, 320, 116, 1 /*set*/, 16, 100, 318, 2 }, + /* 88*/ { BARCODE_UPCA_CHK, -1, -1, 0, "014571377638+12345", 0, 50, 1, 151, 330, 110, 0 /*set*/, 16, 110, 320, 10 }, // Hide text + /* 89*/ { BARCODE_UPCA_CHK, BARCODE_QUIET_ZONES, -1, 0, "014571377638+12345", 0, 50, 1, 151, 330, 110, 0 /*set*/, 16, 110, 320, 10 }, // Hide text + /* 90*/ { BARCODE_UPCA_CHK, BARCODE_NO_QUIET_ZONES, -1, 0, "014571377638+12345", 0, 50, 1, 151, 302, 110, 1 /*set*/, 16, 100, 300, 2 }, // Hide text + /* 91*/ { BARCODE_UPCE, -1, -1, -1, "8145713", 0, 50, 1, 51, 134, 116, 0 /*set*/, 0, 100, 120, 18 }, + /* 92*/ { BARCODE_UPCE, BARCODE_QUIET_ZONES, -1, -1, "8145713", 0, 50, 1, 51, 134, 116, 0 /*set*/, 0, 100, 120, 18 }, + /* 93*/ { BARCODE_UPCE, BARCODE_NO_QUIET_ZONES, -1, -1, "8145713", 0, 50, 1, 51, 134, 116, 0 /*set*/, 0, 100, 120, 18 }, + /* 94*/ { BARCODE_UPCE, -1, -1, 0, "8145713", 0, 50, 1, 51, 134, 110, 0 /*set*/, 0, 100, 120, 18 }, // Hide text + /* 95*/ { BARCODE_UPCE, BARCODE_QUIET_ZONES, -1, 0, "8145713", 0, 50, 1, 51, 134, 110, 0 /*set*/, 0, 100, 120, 18 }, // Hide text + /* 96*/ { BARCODE_UPCE, BARCODE_NO_QUIET_ZONES, -1, 0, "8145713", 0, 50, 1, 51, 102, 110, 1 /*set*/, 0, 110, 100, 2 }, // Hide text + /* 97*/ { BARCODE_UPCE_CHK, -1, -1, -1, "81457132+12", 0, 50, 1, 78, 184, 116, 0 /*set*/, 16, 100, 174, 10 }, + /* 98*/ { BARCODE_UPCE_CHK, BARCODE_QUIET_ZONES, -1, -1, "81457132+12", 0, 50, 1, 78, 184, 116, 0 /*set*/, 16, 100, 174, 10 }, + /* 99*/ { BARCODE_UPCE_CHK, BARCODE_NO_QUIET_ZONES, -1, -1, "81457132+12", 0, 50, 1, 78, 174, 116, 1 /*set*/, 16, 100, 170, 4 }, + /*100*/ { BARCODE_UPCE_CHK, -1, -1, 0, "81457132+12", 0, 50, 1, 78, 184, 110, 0 /*set*/, 16, 110, 174, 10 }, // Hide text + /*101*/ { BARCODE_UPCE_CHK, BARCODE_QUIET_ZONES, -1, 0, "81457132+12", 0, 50, 1, 78, 184, 110, 0 /*set*/, 16, 110, 174, 10 }, // Hide text + /*102*/ { BARCODE_UPCE_CHK, BARCODE_NO_QUIET_ZONES, -1, 0, "81457132+12", 0, 50, 1, 78, 156, 110, 1 /*set*/, 16, 100, 152, 4 }, // Hide text + /*103*/ { BARCODE_UPCE, -1, -1, -1, "8145713+12345", 0, 50, 1, 105, 238, 116, 0 /*set*/, 16, 100, 228, 10 }, + /*104*/ { BARCODE_UPCE, BARCODE_QUIET_ZONES, -1, -1, "8145713+12345", 0, 50, 1, 105, 238, 116, 0 /*set*/, 16, 100, 228, 10 }, + /*105*/ { BARCODE_UPCE, BARCODE_NO_QUIET_ZONES, -1, -1, "8145713+12345", 0, 50, 1, 105, 228, 116, 1 /*set*/, 16, 100, 216, 2 }, + /*106*/ { BARCODE_UPCE, -1, -1, 0, "8145713+12345", 0, 50, 1, 105, 238, 110, 0 /*set*/, 16, 110, 228, 10 }, // Hide text + /*107*/ { BARCODE_UPCE, BARCODE_QUIET_ZONES, -1, 0, "8145713+12345", 0, 50, 1, 105, 238, 110, 0 /*set*/, 16, 110, 228, 10 }, // Hide text + /*108*/ { BARCODE_UPCE, BARCODE_NO_QUIET_ZONES, -1, 0, "8145713+12345", 0, 50, 1, 105, 210, 110, 1 /*set*/, 16, 100, 208, 2 }, // Hide text + /*109*/ { BARCODE_POSTNET, -1, -1, -1, "12345", 0, 12, 2, 63, 126, 24, 1 /*set*/, 0, 24, 0, 2 }, + /*110*/ { BARCODE_POSTNET, BARCODE_QUIET_ZONES, -1, -1, "12345", 0, 12, 2, 63, 146, 30, 0 /*set*/, 0, 30, 0, 10 }, + /*111*/ { BARCODE_MSI_PLESSEY, -1, -1, -1, "1234", 0, 50, 1, 55, 110, 116, 1 /*set*/, 0, 100, 0, 4 }, + /*112*/ { BARCODE_MSI_PLESSEY, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 55, 158, 116, 0 /*set*/, 0, 100, 0, 24 }, + /*113*/ { BARCODE_FIM, -1, -1, -1, "A", 0, 50, 1, 17, 34, 100, 1 /*set*/, 0, 100, 0, 2 }, + /*114*/ { BARCODE_FIM, BARCODE_QUIET_ZONES, -1, -1, "A", 0, 50, 1, 17, 50, 100, 0 /*set*/, 0, 100, 0, 10 }, + /*115*/ { BARCODE_LOGMARS, -1, -1, -1, "1234", 0, 50, 1, 95, 190, 116, 1 /*set*/, 0, 100, 0, 2 }, + /*116*/ { BARCODE_LOGMARS, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 95, 230, 116, 0 /*set*/, 0, 100, 0, 20 }, + /*117*/ { BARCODE_PHARMA, -1, -1, -1, "1234", 0, 50, 1, 38, 76, 100, 1 /*set*/, 0, 100, 0, 2 }, + /*118*/ { BARCODE_PHARMA, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 38, 100, 100, 0 /*set*/, 0, 100, 0, 12 }, + /*119*/ { BARCODE_PZN, -1, -1, -1, "1234", 0, 50, 1, 142, 284, 116, 1 /*set*/, 0, 100, 0, 2 }, + /*120*/ { BARCODE_PZN, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 142, 324, 116, 0 /*set*/, 0, 100, 0, 20 }, + /*121*/ { BARCODE_PHARMA_TWO, -1, -1, -1, "1234", 0, 10, 2, 13, 26, 20, 1 /*set*/, 10, 20, 0, 2 }, + /*122*/ { BARCODE_PHARMA_TWO, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 10, 2, 13, 50, 20, 0 /*set*/, 10, 20, 0, 12 }, + /*123*/ { BARCODE_PDF417, -1, -1, -1, "1234", 0, 18, 6, 103, 206, 36, 1 /*set*/, 0, 36, 0, 16 }, + /*124*/ { BARCODE_PDF417, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 18, 6, 103, 214, 44, 0 /*set*/, 0, 44, 0, 4 }, + /*125*/ { BARCODE_PDF417COMP, -1, -1, -1, "1234", 0, 18, 6, 69, 138, 36, 1 /*set*/, 0, 36, 0, 16 }, + /*126*/ { BARCODE_PDF417COMP, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 18, 6, 69, 146, 44, 0 /*set*/, 0, 44, 0, 4 }, + /*127*/ { BARCODE_MAXICODE, -1, -1, -1, "1234", 0, 165, 33, 30, 299, 298, 1 /*set*/, 21, 25, 0, 9 }, + /*128*/ { BARCODE_MAXICODE, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 165, 33, 30, 319, 318, 0 /*set*/, 0, 318, 0, 9 }, + /*129*/ { BARCODE_MAXICODE, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 165, 33, 30, 319, 318, 0 /*set*/, 0, 9, 0, 319 }, + /*130*/ { BARCODE_QRCODE, -1, -1, -1, "1234", 0, 21, 21, 21, 42, 42, 1 /*set*/, 0, 2, 0, 14 }, + /*131*/ { BARCODE_QRCODE, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 21, 21, 21, 58, 58, 0 /*set*/, 0, 8, 0, 58 }, + /*132*/ { BARCODE_CODE128B, -1, -1, -1, "1234", 0, 50, 1, 79, 158, 116, 1 /*set*/, 0, 100, 0, 4 }, + /*133*/ { BARCODE_CODE128B, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 79, 198, 116, 0 /*set*/, 0, 100, 0, 20 }, + /*134*/ { BARCODE_AUSPOST, -1, -1, -1, "12345678", 0, 8, 3, 73, 146, 16, 1 /*set*/, 0, 10, 0, 2 }, + /*135*/ { BARCODE_AUSPOST, BARCODE_QUIET_ZONES, -1, -1, "12345678", 0, 8, 3, 73, 186, 28, 0 /*set*/, 0, 28, 0, 20 }, + /*136*/ { BARCODE_AUSREPLY, -1, -1, -1, "1234", 0, 8, 3, 73, 146, 16, 1 /*set*/, 0, 10, 0, 2 }, + /*137*/ { BARCODE_AUSREPLY, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 8, 3, 73, 186, 28, 0 /*set*/, 0, 28, 0, 20 }, + /*138*/ { BARCODE_AUSROUTE, -1, -1, -1, "1234", 0, 8, 3, 73, 146, 16, 1 /*set*/, 0, 10, 0, 2 }, + /*139*/ { BARCODE_AUSROUTE, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 8, 3, 73, 186, 28, 0 /*set*/, 0, 28, 0, 20 }, + /*140*/ { BARCODE_AUSREDIRECT, -1, -1, -1, "1234", 0, 8, 3, 73, 146, 16, 1 /*set*/, 0, 10, 0, 2 }, + /*141*/ { BARCODE_AUSREDIRECT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 8, 3, 73, 186, 28, 0 /*set*/, 0, 28, 0, 20 }, + /*142*/ { BARCODE_ISBNX, -1, -1, -1, "123456789X", 0, 50, 1, 95, 226, 116, 0 /*set*/, 16, 110, 212, 14 }, + /*143*/ { BARCODE_ISBNX, BARCODE_QUIET_ZONES, -1, -1, "123456789X", 0, 50, 1, 95, 226, 116, 0 /*set*/, 16, 110, 212, 14 }, + /*144*/ { BARCODE_ISBNX, BARCODE_NO_QUIET_ZONES, -1, -1, "123456789X", 0, 50, 1, 95, 212, 116, 1 /*set*/, 16, 110, 210, 2 }, + /*145*/ { BARCODE_RM4SCC, -1, -1, -1, "1234", 0, 8, 3, 43, 86, 16, 1 /*set*/, 0, 10, 0, 2 }, + /*146*/ { BARCODE_RM4SCC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 8, 3, 43, 98, 28, 0 /*set*/, 0, 28, 0, 6 }, + /*147*/ { BARCODE_DATAMATRIX, -1, -1, -1, "1234", 0, 10, 10, 10, 20, 20, 1 /*set*/, 0, 20, 0, 2 }, + /*148*/ { BARCODE_DATAMATRIX, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 10, 10, 10, 24, 24, 0 /*set*/, 0, 24, 0, 2 }, + /*149*/ { BARCODE_EAN14, -1, -1, -1, "1234", 0, 50, 1, 134, 268, 116, 1 /*set*/, 0, 100, 0, 4 }, + /*150*/ { BARCODE_EAN14, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 134, 308, 116, 0 /*set*/, 0, 100, 0, 20 }, + /*151*/ { BARCODE_VIN, -1, -1, -1, "12345678701234567", 0, 50, 1, 246, 492, 116, 1 /*set*/, 0, 100, 0, 2 }, + /*152*/ { BARCODE_VIN, BARCODE_QUIET_ZONES, -1, -1, "12345678701234567", 0, 50, 1, 246, 532, 116, 0 /*set*/, 0, 100, 0, 20 }, + /*153*/ { BARCODE_CODABLOCKF, -1, -1, -1, "1234", 0, 20, 2, 101, 242, 44, 0 /*set*/, 0, 44, 0, 20 }, + /*154*/ { BARCODE_CODABLOCKF, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 101, 242, 44, 0 /*set*/, 0, 44, 0, 20 }, + /*155*/ { BARCODE_CODABLOCKF, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 101, 202, 44, 1 /*set*/, 0, 44, 0, 4 }, + /*156*/ { BARCODE_NVE18, -1, -1, -1, "1234", 0, 50, 1, 156, 312, 116, 1 /*set*/, 0, 100, 0, 4 }, + /*157*/ { BARCODE_NVE18, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 156, 352, 116, 0 /*set*/, 0, 100, 0, 20 }, + /*158*/ { BARCODE_JAPANPOST, -1, -1, -1, "1234", 0, 8, 3, 133, 266, 16, 1 /*set*/, 0, 16, 0, 2 }, + /*159*/ { BARCODE_JAPANPOST, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 8, 3, 133, 278, 28, 0 /*set*/, 0, 28, 0, 6 }, + /*160*/ { BARCODE_KOREAPOST, -1, -1, -1, "1234", 0, 50, 1, 167, 334, 116, 0 /*set*/, 0, 100, 0, 8 }, + /*161*/ { BARCODE_KOREAPOST, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 167, 374, 116, 0 /*set*/, 0, 100, 0, 28 }, + /*162*/ { BARCODE_DBAR_STK, -1, -1, -1, "1234", 0, 13, 3, 50, 100, 26, 1 /*set*/, 12, 26, 0, 2 }, + /*163*/ { BARCODE_DBAR_STK, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 13, 3, 50, 100, 26, 1 /*set*/, 12, 26, 0, 2 }, + /*164*/ { BARCODE_DBAR_STK, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 13, 3, 50, 100, 26, 1 /*set*/, 12, 26, 0, 2 }, + /*165*/ { BARCODE_DBAR_OMNSTK, -1, -1, -1, "1234", 0, 69, 5, 50, 100, 138, 1 /*set*/, 72, 138, 0, 2 }, + /*166*/ { BARCODE_DBAR_OMNSTK, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 69, 5, 50, 100, 138, 1 /*set*/, 72, 138, 0, 2 }, + /*167*/ { BARCODE_DBAR_OMNSTK, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 69, 5, 50, 100, 138, 1 /*set*/, 72, 138, 0, 2 }, + /*168*/ { BARCODE_DBAR_EXPSTK, -1, -1, -1, "[20]12", 0, 34, 1, 102, 204, 68, 1 /*set*/, 0, 68, 2, 2 }, + /*169*/ { BARCODE_DBAR_EXPSTK, BARCODE_QUIET_ZONES, -1, -1, "[20]12", 0, 34, 1, 102, 204, 68, 1 /*set*/, 0, 68, 2, 2 }, + /*170*/ { BARCODE_DBAR_EXPSTK, BARCODE_NO_QUIET_ZONES, -1, -1, "[20]12", 0, 34, 1, 102, 204, 68, 1 /*set*/, 0, 68, 2, 2 }, + /*171*/ { BARCODE_PLANET, -1, -1, -1, "12345678901", 0, 12, 2, 123, 246, 24, 1 /*set*/, 0, 24, 0, 2 }, + /*172*/ { BARCODE_PLANET, BARCODE_QUIET_ZONES, -1, -1, "12345678901", 0, 12, 2, 123, 266, 30, 0 /*set*/, 0, 30, 0, 10 }, + /*173*/ { BARCODE_MICROPDF417, -1, -1, -1, "1234", 0, 22, 11, 38, 76, 44, 1 /*set*/, 0, 44, 0, 4 }, + /*174*/ { BARCODE_MICROPDF417, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 22, 11, 38, 80, 48, 0 /*set*/, 0, 48, 0, 2 }, + /*175*/ { BARCODE_USPS_IMAIL, -1, -1, -1, "12345678901234567890", 0, 8, 3, 129, 258, 16, 1 /*set*/, 0, 10, 0, 2 }, + /*176*/ { BARCODE_USPS_IMAIL, BARCODE_QUIET_ZONES, -1, -1, "12345678901234567890", 0, 8, 3, 129, 276, 20, 0 /*set*/, 0, 20, 0, 9 }, + /*177*/ { BARCODE_PLESSEY, -1, -1, -1, "1234", 0, 50, 1, 131, 262, 116, 1 /*set*/, 0, 100, 0, 6 }, + /*178*/ { BARCODE_PLESSEY, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 131, 310, 116, 0 /*set*/, 0, 100, 0, 24 }, + /*179*/ { BARCODE_TELEPEN_NUM, -1, -1, -1, "1234", 0, 50, 1, 80, 160, 116, 1 /*set*/, 0, 100, 0, 2 }, + /*180*/ { BARCODE_TELEPEN_NUM, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 80, 200, 116, 0 /*set*/, 0, 100, 0, 20 }, + /*181*/ { BARCODE_ITF14, -1, -1, -1, "1234", 0, 50, 1, 135, 330, 136, 0 /*set*/, 10, 110, 10, 20 }, + /*182*/ { BARCODE_ITF14, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 135, 330, 136, 0 /*set*/, 10, 110, 10, 20 }, + /*183*/ { BARCODE_ITF14, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 135, 290, 136, 1 /*set*/, 0, 120, 10, 2 }, + /*184*/ { BARCODE_KIX, -1, -1, -1, "1234", 0, 8, 3, 31, 62, 16, 1 /*set*/, 6, 10, 0, 2 }, + /*185*/ { BARCODE_KIX, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 8, 3, 31, 74, 28, 0 /*set*/, 0, 28, 0, 6 }, + /*186*/ { BARCODE_AZTEC, -1, -1, -1, "1234", 0, 15, 15, 15, 30, 30, 1 /*set*/, 2, 6, 0, 4 }, + /*187*/ { BARCODE_AZTEC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 15, 15, 15, 30, 30, 1 /*set*/, 2, 6, 0, 4 }, + /*188*/ { BARCODE_AZTEC, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 15, 15, 15, 30, 30, 1 /*set*/, 2, 6, 0, 4 }, + /*189*/ { BARCODE_DAFT, -1, -1, -1, "FADT", 0, 8, 3, 7, 14, 16, 1 /*set*/, 0, 16, 0, 2 }, + /*190*/ { BARCODE_DAFT, BARCODE_QUIET_ZONES, -1, -1, "FADT", 0, 8, 3, 7, 14, 16, 1 /*set*/, 0, 16, 0, 2 }, + /*191*/ { BARCODE_DAFT, BARCODE_NO_QUIET_ZONES, -1, -1, "FADT", 0, 8, 3, 7, 14, 16, 1 /*set*/, 0, 16, 0, 2 }, + /*192*/ { BARCODE_DPD, -1, -1, -1, "1234567890123456789012345678", 0, 50, 1, 189, 378, 116, 1 /*set*/, 0, 100, 0, 4 }, + /*193*/ { BARCODE_DPD, BARCODE_QUIET_ZONES, -1, -1, "1234567890123456789012345678", 0, 50, 1, 189, 428, 116, 0 /*set*/, 0, 100, 0, 24 }, + /*194*/ { BARCODE_MICROQR, -1, -1, -1, "1234", 0, 11, 11, 11, 22, 22, 1 /*set*/, 0, 14, 0, 2 }, + /*195*/ { BARCODE_MICROQR, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 11, 11, 11, 30, 30, 0 /*set*/, 0, 30, 0, 4 }, + /*196*/ { BARCODE_HIBC_128, -1, -1, -1, "1234", 0, 50, 1, 90, 180, 116, 1 /*set*/, 0, 100, 0, 4 }, + /*197*/ { BARCODE_HIBC_128, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 90, 220, 116, 0 /*set*/, 0, 100, 0, 20 }, + /*198*/ { BARCODE_HIBC_39, -1, -1, -1, "1234", 0, 50, 1, 127, 254, 116, 1 /*set*/, 0, 100, 0, 2 }, + /*199*/ { BARCODE_HIBC_39, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 127, 294, 116, 0 /*set*/, 0, 100, 0, 20 }, + /*200*/ { BARCODE_HIBC_DM, -1, -1, -1, "1234", 0, 12, 12, 12, 24, 24, 1 /*set*/, 0, 24, 0, 2 }, + /*201*/ { BARCODE_HIBC_DM, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 12, 12, 12, 28, 28, 0 /*set*/, 0, 28, 0, 2 }, + /*202*/ { BARCODE_HIBC_QR, -1, -1, -1, "1234", 0, 21, 21, 21, 42, 42, 1 /*set*/, 0, 2, 0, 14 }, + /*203*/ { BARCODE_HIBC_QR, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 21, 21, 21, 58, 58, 0 /*set*/, 0, 58, 0, 8 }, + /*204*/ { BARCODE_HIBC_PDF, -1, -1, -1, "1234", 0, 21, 7, 103, 206, 42, 1 /*set*/, 0, 42, 0, 16 }, + /*205*/ { BARCODE_HIBC_PDF, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 21, 7, 103, 214, 50, 0 /*set*/, 0, 50, 0, 4 }, + /*206*/ { BARCODE_HIBC_MICPDF, -1, -1, -1, "1234", 0, 12, 6, 82, 164, 24, 1 /*set*/, 0, 24, 0, 4 }, + /*207*/ { BARCODE_HIBC_MICPDF, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 12, 6, 82, 168, 28, 0 /*set*/, 0, 28, 0, 2 }, + /*208*/ { BARCODE_HIBC_BLOCKF, -1, -1, -1, "1234", 0, 20, 2, 101, 242, 44, 0 /*set*/, 0, 44, 0, 20 }, + /*209*/ { BARCODE_HIBC_BLOCKF, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 101, 242, 44, 0 /*set*/, 0, 44, 0, 20 }, + /*210*/ { BARCODE_HIBC_BLOCKF, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 101, 202, 44, 1 /*set*/, 0, 44, 0, 4 }, + /*211*/ { BARCODE_HIBC_AZTEC, -1, -1, -1, "1234", 0, 15, 15, 15, 30, 30, 1 /*set*/, 8, 10, 0, 2 }, + /*212*/ { BARCODE_HIBC_AZTEC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 15, 15, 15, 30, 30, 1 /*set*/, 8, 10, 0, 2 }, + /*213*/ { BARCODE_HIBC_AZTEC, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 15, 15, 15, 30, 30, 1 /*set*/, 8, 10, 0, 2 }, + /*214*/ { BARCODE_DOTCODE, -1, -1, -1, "1234", 0, 10, 10, 13, 27, 21, 1 /*set*/, 5, 6, 1, 1 }, + /*215*/ { BARCODE_DOTCODE, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 10, 10, 13, 39, 33, 0 /*set*/, 0, 33, 0, 7 }, + /*216*/ { BARCODE_HANXIN, -1, -1, -1, "1234", 0, 23, 23, 23, 46, 46, 1 /*set*/, 0, 2, 0, 14 }, + /*217*/ { BARCODE_HANXIN, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 23, 23, 23, 58, 58, 0 /*set*/, 0, 58, 0, 6 }, + /*218*/ { BARCODE_MAILMARK, -1, -1, -1, "01000000000000000AA00AA0A", 0, 10, 3, 155, 310, 20, 1 /*set*/, 0, 20, 0, 2 }, + /*219*/ { BARCODE_MAILMARK, BARCODE_QUIET_ZONES, -1, -1, "01000000000000000AA00AA0A", 0, 10, 3, 155, 322, 32, 0 /*set*/, 0, 32, 0, 6 }, + /*220*/ { BARCODE_AZRUNE, -1, -1, -1, "123", 0, 11, 11, 11, 22, 22, 1 /*set*/, 0, 6, 0, 4 }, + /*221*/ { BARCODE_AZRUNE, BARCODE_QUIET_ZONES, -1, -1, "123", 0, 11, 11, 11, 22, 22, 1 /*set*/, 0, 6, 0, 4 }, + /*222*/ { BARCODE_AZRUNE, BARCODE_NO_QUIET_ZONES, -1, -1, "123", 0, 11, 11, 11, 22, 22, 1 /*set*/, 0, 6, 0, 4 }, + /*223*/ { BARCODE_CODE32, -1, -1, -1, "1234", 0, 50, 1, 103, 206, 116, 1 /*set*/, 0, 100, 0, 2 }, + /*224*/ { BARCODE_CODE32, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 103, 246, 116, 0 /*set*/, 0, 100, 0, 20 }, + /*225*/ { BARCODE_EANX_CC, -1, -1, -1, "023456789012", 0, 50, 7, 99, 234, 116, 0 /*set*/, 24, 110, 218, 16 }, + /*226*/ { BARCODE_EANX_CC, BARCODE_QUIET_ZONES, -1, -1, "023456789012", 0, 50, 7, 99, 234, 116, 0 /*set*/, 24, 110, 218, 16 }, + /*227*/ { BARCODE_EANX_CC, BARCODE_NO_QUIET_ZONES, -1, -1, "023456789012", 0, 50, 7, 99, 220, 116, 0 /*set*/, 24, 110, 218, 2 }, + /*228*/ { BARCODE_EANX_CC, -1, -1, 0, "023456789012", 0, 50, 7, 99, 234, 110, 0 /*set*/, 24, 110, 0, 28 }, // Hide text + /*229*/ { BARCODE_EANX_CC, BARCODE_QUIET_ZONES, -1, 0, "023456789012", 0, 50, 7, 99, 234, 110, 0 /*set*/, 24, 110, 0, 28 }, // Hide text + /*230*/ { BARCODE_EANX_CC, BARCODE_NO_QUIET_ZONES, -1, 0, "023456789012", 0, 50, 7, 99, 198, 110, 1 /*set*/, 24, 110, 6, 2 }, // Hide text + /*231*/ { BARCODE_GS1_128_CC, -1, -1, -1, "[20]02", 0, 50, 5, 99, 198, 116, 1 /*set*/, 14, 100, 24, 4 }, + /*232*/ { BARCODE_GS1_128_CC, BARCODE_QUIET_ZONES, -1, -1, "[20]02", 0, 50, 5, 99, 238, 116, 0 /*set*/, 14, 100, 24, 20 }, + /*233*/ { BARCODE_DBAR_OMN_CC, -1, -1, -1, "1234", 0, 21, 5, 100, 200, 58, 1 /*set*/, 14, 42, 10, 2 }, + /*234*/ { BARCODE_DBAR_OMN_CC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 21, 5, 100, 204, 58, 0 /*set*/, 14, 42, 10, 2 }, + /*235*/ { BARCODE_DBAR_LTD_CC, -1, -1, -1, "1234", 0, 19, 6, 79, 158, 54, 1 /*set*/, 18, 38, 2, 2 }, + /*236*/ { BARCODE_DBAR_LTD_CC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 19, 6, 79, 162, 54, 0 /*set*/, 18, 38, 2, 2 }, + /*237*/ { BARCODE_DBAR_EXP_CC, -1, -1, -1, "[20]12", 0, 41, 5, 102, 204, 98, 1 /*set*/, 14, 82, 2, 2 }, + /*238*/ { BARCODE_DBAR_EXP_CC, BARCODE_QUIET_ZONES, -1, -1, "[20]12", 0, 41, 5, 102, 208, 98, 0 /*set*/, 14, 82, 2, 2 }, + /*239*/ { BARCODE_UPCA_CC, -1, -1, -1, "01457137763", 0, 50, 7, 99, 234, 116, 1 /*set*/, 24, 100, 212, 2 }, + /*240*/ { BARCODE_UPCA_CC, BARCODE_QUIET_ZONES, -1, -1, "01457137763", 0, 50, 7, 99, 234, 116, 1 /*set*/, 24, 100, 212, 2 }, + /*241*/ { BARCODE_UPCA_CC, BARCODE_NO_QUIET_ZONES, -1, -1, "01457137763", 0, 50, 7, 99, 234, 116, 1 /*set*/, 24, 100, 212, 2 }, + /*242*/ { BARCODE_UPCA_CC, -1, -1, 0, "01457137763", 0, 50, 7, 99, 234, 110, 0 /*set*/, 24, 110, 0, 24 }, // Hide text + /*243*/ { BARCODE_UPCA_CC, BARCODE_QUIET_ZONES, -1, 0, "01457137763", 0, 50, 7, 99, 234, 110, 0 /*set*/, 24, 110, 0, 24 }, // Hide text + /*244*/ { BARCODE_UPCA_CC, BARCODE_NO_QUIET_ZONES, -1, 0, "01457137763", 0, 50, 7, 99, 198, 110, 1 /*set*/, 24, 110, 6, 2 }, // Hide text + /*245*/ { BARCODE_UPCE_CC, -1, -1, -1, "8145713", 0, 50, 9, 55, 142, 116, 1 /*set*/, 32, 100, 124, 2 }, + /*246*/ { BARCODE_UPCE_CC, BARCODE_QUIET_ZONES, -1, -1, "8145713", 0, 50, 9, 55, 142, 116, 1 /*set*/, 32, 100, 124, 2 }, + /*247*/ { BARCODE_UPCE_CC, BARCODE_NO_QUIET_ZONES, -1, -1, "8145713", 0, 50, 9, 55, 142, 116, 1 /*set*/, 32, 100, 124, 2 }, + /*248*/ { BARCODE_UPCE_CC, -1, -1, 0, "8145713", 0, 50, 9, 55, 142, 110, 0 /*set*/, 32, 110, 0, 24 }, // Hide text + /*249*/ { BARCODE_UPCE_CC, BARCODE_QUIET_ZONES, -1, 0, "8145713", 0, 50, 9, 55, 142, 110, 0 /*set*/, 32, 110, 0, 24 }, // Hide text + /*250*/ { BARCODE_UPCE_CC, BARCODE_NO_QUIET_ZONES, -1, 0, "8145713", 0, 50, 9, 55, 110, 110, 1 /*set*/, 32, 110, 6, 2 }, // Hide text + /*251*/ { BARCODE_DBAR_STK_CC, -1, -1, -1, "1234", 0, 24, 9, 56, 112, 48, 1 /*set*/, 34, 48, 0, 2 }, + /*252*/ { BARCODE_DBAR_STK_CC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 24, 9, 56, 116, 48, 0 /*set*/, 34, 48, 0, 2 }, + /*253*/ { BARCODE_DBAR_OMNSTK_CC, -1, -1, -1, "1234", 0, 80, 11, 56, 112, 160, 1 /*set*/, 94, 160, 0, 2 }, + /*254*/ { BARCODE_DBAR_OMNSTK_CC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 80, 11, 56, 116, 160, 0 /*set*/, 94, 160, 0, 2 }, + /*255*/ { BARCODE_DBAR_EXPSTK_CC, -1, -1, -1, "[20]12", 0, 41, 5, 102, 204, 82, 1 /*set*/, 14, 82, 2, 2 }, + /*256*/ { BARCODE_DBAR_EXPSTK_CC, BARCODE_QUIET_ZONES, -1, -1, "[20]12", 0, 41, 5, 102, 208, 82, 0 /*set*/, 14, 82, 2, 2 }, + /*257*/ { BARCODE_CHANNEL, -1, -1, -1, "1234", 0, 50, 1, 27, 54, 116, 1 /*set*/, 0, 100, 0, 2 }, + /*258*/ { BARCODE_CHANNEL, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 27, 60, 116, 0 /*set*/, 0, 100, 0, 2 }, + /*259*/ { BARCODE_CODEONE, -1, -1, -1, "1234", 0, 16, 16, 18, 36, 32, 1 /*set*/, 0, 6, 0, 2 }, // Versions A to H - no quiet zone + /*260*/ { BARCODE_CODEONE, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 16, 16, 18, 36, 32, 1 /*set*/, 0, 6, 0, 2 }, + /*261*/ { BARCODE_CODEONE, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 16, 16, 18, 36, 32, 1 /*set*/, 0, 6, 0, 2 }, + /*262*/ { BARCODE_CODEONE, -1, 9, -1, "1234", 0, 8, 8, 11, 22, 16, 1 /*set*/, 10, 16, 0, 2 }, // Version S (& T) have quiet zones + /*263*/ { BARCODE_CODEONE, BARCODE_QUIET_ZONES, 9, -1, "1234", 0, 8, 8, 11, 26, 16, 0 /*set*/, 0, 16, 0, 2 }, + /*264*/ { BARCODE_GRIDMATRIX, -1, -1, -1, "1234", 0, 18, 18, 18, 36, 36, 1 /*set*/, 0, 2, 0, 12 }, + /*265*/ { BARCODE_GRIDMATRIX, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 18, 18, 18, 60, 60, 0 /*set*/, 0, 60, 0, 12 }, + /*266*/ { BARCODE_UPNQR, -1, -1, -1, "1234", 0, 77, 77, 77, 154, 154, 1 /*set*/, 0, 14, 0, 2 }, + /*267*/ { BARCODE_UPNQR, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 77, 77, 77, 170, 170, 0 /*set*/, 0, 170, 0, 8 }, + /*268*/ { BARCODE_ULTRA, -1, -1, -1, "1234", 0, 13, 13, 15, 30, 26, 1 /*set*/, 0, 2, 0, 30 }, + /*269*/ { BARCODE_ULTRA, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 13, 13, 15, 34, 30, 0 /*set*/, 0, 2, 0, 34 }, + /*270*/ { BARCODE_RMQR, -1, -1, -1, "1234", 0, 11, 11, 27, 54, 22, 1 /*set*/, 0, 14, 0, 2 }, + /*271*/ { BARCODE_RMQR, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 11, 11, 27, 62, 30, 0 /*set*/, 0, 30, 0, 4 }, + }; + int data_size = ARRAY_SIZE(data); + int i, length, ret; + struct zint_symbol *symbol; + + char *text; + static char composite[] = "[20]12"; + + testStart("test_quiet_zones"); + + for (i = 0; i < data_size; i++) { + int row, column; + + if (index != -1 && i != index) continue; + + symbol = ZBarcode_Create(); + assert_nonnull(symbol, "Symbol not created\n"); + + length = testUtilSetSymbol(symbol, data[i].symbology, UNICODE_MODE, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, data[i].output_options, data[i].data, -1, debug); + if (data[i].show_hrt != -1) { + symbol->show_hrt = data[i].show_hrt; + } + + if (is_composite(symbol->symbology)) { + text = composite; + length = (int) strlen(text); + assert_nonzero(strlen(data[i].data) < 128, "i:%d linear data length %d >= 128\n", i, (int) strlen(data[i].data)); + strcpy(symbol->primary, data[i].data); + } else { + text = data[i].data; + } + + ret = ZBarcode_Encode(symbol, (unsigned char *) text, length); + assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 (%s)\n", i, data[i].symbology, ret, symbol->errtxt); + + ret = ZBarcode_Buffer(symbol, 0); + assert_equal(ret, data[i].ret_raster, "i:%d ZBarcode_Buffer(%d) ret %d != %d (%s)\n", i, data[i].symbology, ret, data[i].ret_raster, symbol->errtxt); + assert_nonnull(symbol->bitmap, "i:%d (%d) symbol->bitmap NULL\n", i, data[i].symbology); + + if (index != -1 && (debug & ZINT_DEBUG_TEST_PRINT)) testUtilBitmapPrint(symbol, NULL, NULL); // ZINT_DEBUG_TEST_PRINT 16 + + assert_equal(symbol->height, data[i].expected_height, "i:%d (%d) symbol->height %.8g != %.8g\n", i, data[i].symbology, symbol->height, data[i].expected_height); + assert_equal(symbol->rows, data[i].expected_rows, "i:%d (%d) symbol->rows %d != %d\n", i, data[i].symbology, symbol->rows, data[i].expected_rows); + assert_equal(symbol->width, data[i].expected_width, "i:%d (%d) symbol->width %d != %d\n", i, data[i].symbology, symbol->width, data[i].expected_width); + assert_equal(symbol->bitmap_width, data[i].expected_bitmap_width, "i:%d (%d) symbol->bitmap_width %d != %d\n", i, data[i].symbology, symbol->bitmap_width, data[i].expected_bitmap_width); + assert_equal(symbol->bitmap_height, data[i].expected_bitmap_height, "i:%d (%d) symbol->bitmap_height %d != %d\n", i, data[i].symbology, symbol->bitmap_height, data[i].expected_bitmap_height); + + ret = ZBarcode_Print(symbol, 0); + assert_equal(ret, data[i].ret_raster, "i:%d ZBarcode_Print(%d) ret %d != %d (%s)\n", i, data[i].symbology, ret, data[i].ret_raster, symbol->errtxt); + assert_zero(remove(symbol->outfile), "i:%d remove(%s) != 0\n", i, symbol->outfile); + + assert_nonzero(symbol->bitmap_height >= data[i].expected_set_rows, "i:%d (%d) symbol->bitmap_height %d < expected_set_rows %d\n", + i, data[i].symbology, symbol->bitmap_height, data[i].expected_set_rows); + assert_nonzero(data[i].expected_set_rows > data[i].expected_set_row, "i:%d (%d) expected_set_rows %d < expected_set_row %d\n", + i, data[i].symbology, data[i].expected_set_rows, data[i].expected_set_row); + for (row = data[i].expected_set_row; row < data[i].expected_set_rows; row++) { + int bits_set = 0; + for (column = data[i].expected_set_col; column < data[i].expected_set_col + data[i].expected_set_len; column++) { + if (is_row_column_black(symbol, row, column)) { + bits_set++; + } + } + if (data[i].expected_set) { + assert_equal(bits_set, data[i].expected_set_len, "i:%d (%d) row %d bits_set %d != expected_set_len %d\n", i, data[i].symbology, row, bits_set, data[i].expected_set_len); + } else { + assert_zero(bits_set, "i:%d (%d) row %d bits_set %d != 0\n", i, data[i].symbology, row, bits_set); + } + } + ZBarcode_Delete(symbol); + } + + testFinish(); +} + static void test_buffer_plot(int index, int generate, int debug) { struct item { @@ -1839,11 +2209,11 @@ int main(int argc, char *argv[]) { { "test_code128_utf8", test_code128_utf8, 1, 0, 1 }, { "test_scale", test_scale, 1, 0, 1 }, { "test_guard_descent", test_guard_descent, 1, 0, 1 }, + { "test_quiet_zones", test_quiet_zones, 1, 0, 1 }, { "test_buffer_plot", test_buffer_plot, 1, 1, 1 }, { "test_height", test_height, 1, 1, 1 }, }; - printf("sizeof(zint_symbol) %d\n", (int)sizeof(struct zint_symbol)); testRun(argc, argv, funcs, ARRAY_SIZE(funcs)); testReport(); diff --git a/backend/tests/test_vector.c b/backend/tests/test_vector.c index 7c973b69..bae4a485 100644 --- a/backend/tests/test_vector.c +++ b/backend/tests/test_vector.c @@ -38,6 +38,7 @@ static struct zint_vector_rect *find_rect(struct zint_symbol *symbol, float x, f return NULL; } for (rect = symbol->vector->rectangles; rect != NULL; rect = rect->next) { + //printf("x %.8g, y %.8g, width %.8g, height %.8g\n", rect->x, rect->y, rect->width, rect->height); if (rect->x == x && rect->y == y) { if (height && width) { if (rect->height == height && rect->width == width) { @@ -60,6 +61,28 @@ static struct zint_vector_rect *find_rect(struct zint_symbol *symbol, float x, f return rect; } +static struct zint_vector_circle *find_circle(struct zint_symbol *symbol, float x, float y, float diameter) { + struct zint_vector_circle *circle; + + if (symbol->vector == NULL) { + return NULL; + } + for (circle = symbol->vector->circles; circle != NULL; circle = circle->next) { + //printf("x %.8g, y %.8g, diamter %.8g\n", circle->x, circle->y, circle->diameter); + if (circle->x == x && circle->y == y) { + if (diameter) { + if (circle->diameter == diameter) { + break; + } + } else { + break; + } + } + } + + return circle; +} + static void test_options(int index, int debug) { struct item { @@ -956,6 +979,373 @@ static void test_guard_descent(int index, int debug) { testFinish(); } +static void test_quiet_zones(int index, int debug) { + + struct item { + int symbology; + int output_options; + int option_2; + int show_hrt; + char *data; + int ret; + + float expected_height; + int expected_rows; + int expected_width; + float expected_vector_width; + float expected_vector_height; + float expected_set_x; + float expected_set_y; + float expected_set_width; + float expected_set_height; + }; + // s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<")) + struct item data[] = { + /* 0*/ { BARCODE_CODE11, -1, -1, -1, "1234", 0, 50, 1, 62, 124, 118.9, 0, 0, 2, 100 }, + /* 1*/ { BARCODE_CODE11, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 62, 164, 118.9, 20, 0, 2, 100 }, + /* 2*/ { BARCODE_CODE11, BARCODE_QUIET_ZONES | BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 62, 124, 118.9, 0, 0, 2, 100 }, // BARCODE_NO_QUIET_ZONES trumps BARCODE_QUIET_ZONES + /* 3*/ { BARCODE_C25STANDARD, -1, -1, -1, "1234", 0, 50, 1, 57, 114, 118.9, 0, 0, 8, 100 }, + /* 4*/ { BARCODE_C25STANDARD, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 57, 154, 118.9, 20, 0, 8, 100 }, + /* 5*/ { BARCODE_C25INTER, -1, -1, -1, "1234", 0, 50, 1, 45, 90, 118.9, 0, 0, 2, 100 }, + /* 6*/ { BARCODE_C25INTER, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 45, 130, 118.9, 20, 0, 2, 100 }, + /* 7*/ { BARCODE_C25IATA, -1, -1, -1, "1234", 0, 50, 1, 65, 130, 118.9, 0, 0, 2, 100 }, + /* 8*/ { BARCODE_C25IATA, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 65, 170, 118.9, 20, 0, 2, 100 }, + /* 9*/ { BARCODE_C25LOGIC, -1, -1, -1, "1234", 0, 50, 1, 49, 98, 118.9, 0, 0, 2, 100 }, + /* 10*/ { BARCODE_C25LOGIC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 49, 138, 118.9, 20, 0, 2, 100 }, + /* 11*/ { BARCODE_C25IND, -1, -1, -1, "1234", 0, 50, 1, 75, 150, 118.9, 0, 0, 6, 100 }, + /* 12*/ { BARCODE_C25IND, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 75, 190, 118.9, 20, 0, 6, 100 }, + /* 13*/ { BARCODE_CODE39, -1, -1, -1, "1234", 0, 50, 1, 77, 154, 118.9, 0, 0, 2, 100 }, + /* 14*/ { BARCODE_CODE39, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 77, 194, 118.9, 20, 0, 2, 100 }, + /* 15*/ { BARCODE_EXCODE39, -1, -1, -1, "1234", 0, 50, 1, 77, 154, 118.9, 0, 0, 2, 100 }, + /* 16*/ { BARCODE_EXCODE39, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 77, 194, 118.9, 20, 0, 2, 100 }, + /* 17*/ { BARCODE_EANX, -1, -1, -1, "023456789012", 0, 50, 1, 95, 226, 116.4, 22, 0, 2, 110 }, + /* 18*/ { BARCODE_EANX, BARCODE_QUIET_ZONES, -1, -1, "023456789012", 0, 50, 1, 95, 226, 116.4, 22, 0, 2, 110 }, + /* 19*/ { BARCODE_EANX, BARCODE_NO_QUIET_ZONES, -1, -1, "023456789012", 0, 50, 1, 95, 212, 116.4, 22, 0, 2, 110 }, + /* 20*/ { BARCODE_EANX, -1, -1, 0, "023456789012", 0, 50, 1, 95, 226, 110, 22, 0, 2, 110 }, // Hide text + /* 21*/ { BARCODE_EANX, BARCODE_QUIET_ZONES, -1, 0, "023456789012", 0, 50, 1, 95, 226, 110, 22, 0, 2, 110 }, // Hide text + /* 22*/ { BARCODE_EANX, BARCODE_NO_QUIET_ZONES, -1, 0, "023456789012", 0, 50, 1, 95, 190, 110, 0, 0, 2, 110 }, // Hide text + /* 23*/ { BARCODE_EANX, -1, -1, -1, "023456789012+12", 0, 50, 1, 122, 276, 116.4, 262, 19, 4, 91 }, + /* 24*/ { BARCODE_EANX, BARCODE_QUIET_ZONES, -1, -1, "023456789012+12", 0, 50, 1, 122, 276, 116.4, 262, 19, 4, 91 }, + /* 25*/ { BARCODE_EANX, BARCODE_NO_QUIET_ZONES, -1, -1, "023456789012+12", 0, 50, 1, 122, 266, 116.4, 262, 19, 4, 91 }, + /* 26*/ { BARCODE_EANX, -1, -1, 0, "023456789012+12", 0, 50, 1, 122, 276, 110, 262, 19, 4, 91 }, // Hide text + /* 27*/ { BARCODE_EANX, BARCODE_QUIET_ZONES, -1, 0, "023456789012+12", 0, 50, 1, 122, 276, 110, 262, 19, 4, 91 }, // Hide text + /* 28*/ { BARCODE_EANX, BARCODE_NO_QUIET_ZONES, -1, 0, "023456789012+12", 0, 50, 1, 122, 244, 110, 240, 19, 4, 91 }, // Hide text + /* 29*/ { BARCODE_EANX_CHK, -1, -1, -1, "0234567890129+12345", 0, 50, 1, 149, 330, 116.4, 318, 19, 2, 91 }, + /* 30*/ { BARCODE_EANX_CHK, BARCODE_QUIET_ZONES, -1, -1, "0234567890129+12345", 0, 50, 1, 149, 330, 116.4, 318, 19, 2, 91 }, + /* 31*/ { BARCODE_EANX_CHK, BARCODE_NO_QUIET_ZONES, -1, -1, "0234567890129+12345", 0, 50, 1, 149, 320, 116.4, 318, 19, 2, 91 }, + /* 32*/ { BARCODE_EANX, -1, -1, -1, "0234567", 0, 50, 1, 67, 162, 116.4, 14, 0, 2, 110 }, // EAN-8 + /* 33*/ { BARCODE_EANX, BARCODE_QUIET_ZONES, -1, -1, "0234567", 0, 50, 1, 67, 162, 116.4, 14, 0, 2, 110 }, // EAN-8 + /* 34*/ { BARCODE_EANX, BARCODE_NO_QUIET_ZONES, -1, -1, "0234567", 0, 50, 1, 67, 134, 116.4, 0, 0, 2, 110 }, // EAN-8 + /* 35*/ { BARCODE_EANX, -1, -1, -1, "02345", 0, 50, 1, 47, 118, 116.4, 14, 0, 2, 100 }, // EAN-5 + /* 36*/ { BARCODE_EANX, BARCODE_QUIET_ZONES, -1, -1, "02345", 0, 50, 1, 47, 118, 116.4, 14, 0, 2, 100 }, // EAN-5 + /* 37*/ { BARCODE_EANX, BARCODE_NO_QUIET_ZONES, -1, -1, "02345", 0, 50, 1, 47, 94, 116.4, 0, 0, 2, 100 }, // EAN-5 + /* 38*/ { BARCODE_EANX, -1, -1, -1, "02", 0, 50, 1, 20, 64, 116.4, 14, 0, 2, 100 }, // EAN-2 + /* 39*/ { BARCODE_EANX, BARCODE_QUIET_ZONES, -1, -1, "02", 0, 50, 1, 20, 64, 116.4, 14, 0, 2, 100 }, // EAN-2 + /* 40*/ { BARCODE_EANX, BARCODE_NO_QUIET_ZONES, -1, -1, "02", 0, 50, 1, 20, 40, 116.4, 0, 0, 2, 100 }, // EAN-2 + /* 41*/ { BARCODE_GS1_128, -1, -1, -1, "[20]02", 0, 50, 1, 68, 136, 118.9, 0, 0, 4, 100 }, + /* 42*/ { BARCODE_GS1_128, BARCODE_QUIET_ZONES, -1, -1, "[20]02", 0, 50, 1, 68, 176, 118.9, 20, 0, 4, 100 }, + /* 43*/ { BARCODE_CODABAR, -1, -1, -1, "A0B", 0, 50, 1, 32, 64, 118.9, 0, 0, 2, 100 }, + /* 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 }, + /* 51*/ { BARCODE_CODE16K, -1, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 20, 2, 6, 20 }, + /* 52*/ { BARCODE_CODE16K, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 20, 2, 6, 20 }, + /* 53*/ { BARCODE_CODE16K, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 140, 44, 0, 2, 6, 20 }, + /* 54*/ { BARCODE_CODE49, -1, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 20, 2, 2, 40 }, + /* 55*/ { BARCODE_CODE49, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 20, 2, 2, 40 }, + /* 56*/ { BARCODE_CODE49, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 140, 44, 0, 2, 2, 40 }, + /* 57*/ { BARCODE_CODE93, -1, -1, -1, "1234", 0, 50, 1, 73, 146, 118.9, 0, 0, 2, 100 }, + /* 58*/ { BARCODE_CODE93, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 73, 186, 118.9, 20, 0, 2, 100 }, + /* 59*/ { BARCODE_FLAT, -1, -1, -1, "1234", 0, 50, 1, 36, 72, 100, 0, 0, 2, 100 }, + /* 60*/ { BARCODE_FLAT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 36, 72, 100, 0, 0, 2, 100 }, + /* 61*/ { BARCODE_FLAT, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 36, 72, 100, 0, 0, 2, 100 }, + /* 62*/ { BARCODE_DBAR_OMN, -1, -1, -1, "1234", 0, 50, 1, 96, 192, 118.9, 2, 0, 2, 100 }, + /* 63*/ { BARCODE_DBAR_OMN, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 96, 192, 118.9, 2, 0, 2, 100 }, + /* 64*/ { BARCODE_DBAR_OMN, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 96, 192, 118.9, 2, 0, 2, 100 }, + /* 65*/ { BARCODE_DBAR_LTD, -1, -1, -1, "1234", 0, 50, 1, 79, 158, 118.9, 2, 0, 2, 100 }, + /* 66*/ { BARCODE_DBAR_LTD, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 79, 158, 118.9, 2, 0, 2, 100 }, + /* 67*/ { BARCODE_DBAR_LTD, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 79, 158, 118.9, 2, 0, 2, 100 }, + /* 68*/ { BARCODE_DBAR_EXP, -1, -1, -1, "[20]02", 0, 34, 1, 102, 204, 86.900002, 2, 0, 2, 68 }, + /* 69*/ { BARCODE_DBAR_EXP, BARCODE_QUIET_ZONES, -1, -1, "[20]02", 0, 34, 1, 102, 204, 86.900002, 2, 0, 2, 68 }, + /* 70*/ { BARCODE_DBAR_EXP, BARCODE_NO_QUIET_ZONES, -1, -1, "[20]02", 0, 34, 1, 102, 204, 86.900002, 2, 0, 2, 68 }, + /* 71*/ { BARCODE_TELEPEN, -1, -1, -1, "1234", 0, 50, 1, 112, 224, 118.9, 0, 0, 2, 100 }, + /* 72*/ { BARCODE_TELEPEN, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 112, 264, 118.9, 20, 0, 2, 100 }, + /* 73*/ { BARCODE_UPCA, -1, -1, -1, "01457137763", 0, 50, 1, 95, 226, 116.4, 18, 0, 2, 110 }, + /* 74*/ { BARCODE_UPCA, BARCODE_QUIET_ZONES, -1, -1, "01457137763", 0, 50, 1, 95, 226, 116.4, 18, 0, 2, 110 }, + /* 75*/ { BARCODE_UPCA, BARCODE_NO_QUIET_ZONES, -1, -1, "01457137763", 0, 50, 1, 95, 226, 116.4, 18, 0, 2, 110 }, + /* 76*/ { BARCODE_UPCA, -1, -1, 0, "01457137763", 0, 50, 1, 95, 226, 110, 18, 0, 2, 110 }, // Hide text + /* 77*/ { BARCODE_UPCA, BARCODE_QUIET_ZONES, -1, 0, "01457137763", 0, 50, 1, 95, 226, 110, 18, 0, 2, 110 }, // Hide text + /* 78*/ { BARCODE_UPCA, BARCODE_NO_QUIET_ZONES, -1, 0, "01457137763", 0, 50, 1, 95, 190, 110, 0, 0, 2, 110 }, // Hide text + /* 79*/ { BARCODE_UPCA, -1, -1, -1, "01457137763+12", 0, 50, 1, 124, 276, 116.4, 18, 0, 2, 110 }, + /* 80*/ { BARCODE_UPCA, BARCODE_QUIET_ZONES, -1, -1, "01457137763+12", 0, 50, 1, 124, 276, 116.4, 18, 0, 2, 110 }, + /* 81*/ { BARCODE_UPCA, BARCODE_NO_QUIET_ZONES, -1, -1, "01457137763+12", 0, 50, 1, 124, 266, 116.4, 18, 0, 2, 110 }, + /* 82*/ { BARCODE_UPCA, -1, -1, 0, "01457137763+12", 0, 50, 1, 124, 276, 110, 18, 0, 2, 110 }, // Hide text + /* 83*/ { BARCODE_UPCA, BARCODE_QUIET_ZONES, -1, 0, "01457137763+12", 0, 50, 1, 124, 276, 110, 18, 0, 2, 110 }, // Hide text + /* 84*/ { BARCODE_UPCA, BARCODE_NO_QUIET_ZONES, -1, 0, "01457137763+12", 0, 50, 1, 124, 248, 110, 0, 0, 2, 110 }, // Hide text + /* 85*/ { BARCODE_UPCA_CHK, -1, -1, -1, "014571377638+12345", 0, 50, 1, 151, 330, 116.4, 18, 0, 2, 110 }, + /* 86*/ { BARCODE_UPCA_CHK, BARCODE_QUIET_ZONES, -1, -1, "014571377638+12345", 0, 50, 1, 151, 330, 116.4, 18, 0, 2, 110 }, + /* 87*/ { BARCODE_UPCA_CHK, BARCODE_NO_QUIET_ZONES, -1, -1, "014571377638+12345", 0, 50, 1, 151, 320, 116.4, 18, 0, 2, 110 }, + /* 88*/ { BARCODE_UPCA_CHK, -1, -1, 0, "014571377638+12345", 0, 50, 1, 151, 330, 110, 18, 0, 2, 110 }, // Hide text + /* 89*/ { BARCODE_UPCA_CHK, BARCODE_QUIET_ZONES, -1, 0, "014571377638+12345", 0, 50, 1, 151, 330, 110, 18, 0, 2, 110 }, // Hide text + /* 90*/ { BARCODE_UPCA_CHK, BARCODE_NO_QUIET_ZONES, -1, 0, "014571377638+12345", 0, 50, 1, 151, 302, 110, 0, 0, 2, 110 }, // Hide text + /* 91*/ { BARCODE_UPCE, -1, -1, -1, "8145713", 0, 50, 1, 51, 134, 116.4, 18, 0, 2, 110 }, + /* 92*/ { BARCODE_UPCE, BARCODE_QUIET_ZONES, -1, -1, "8145713", 0, 50, 1, 51, 134, 116.4, 18, 0, 2, 110 }, + /* 93*/ { BARCODE_UPCE, BARCODE_NO_QUIET_ZONES, -1, -1, "8145713", 0, 50, 1, 51, 134, 116.4, 18, 0, 2, 110 }, + /* 94*/ { BARCODE_UPCE, -1, -1, 0, "8145713", 0, 50, 1, 51, 134, 110, 18, 0, 2, 110 }, // Hide text + /* 95*/ { BARCODE_UPCE, BARCODE_QUIET_ZONES, -1, 0, "8145713", 0, 50, 1, 51, 134, 110, 18, 0, 2, 110 }, // Hide text + /* 96*/ { BARCODE_UPCE, BARCODE_NO_QUIET_ZONES, -1, 0, "8145713", 0, 50, 1, 51, 102, 110, 0, 0, 2, 110 }, // Hide text + /* 97*/ { BARCODE_UPCE_CHK, -1, -1, -1, "81457132+12", 0, 50, 1, 78, 184, 116.4, 170, 19, 4, 81 }, + /* 98*/ { BARCODE_UPCE_CHK, BARCODE_QUIET_ZONES, -1, -1, "81457132+12", 0, 50, 1, 78, 184, 116.4, 170, 19, 4, 81 }, + /* 99*/ { BARCODE_UPCE_CHK, BARCODE_NO_QUIET_ZONES, -1, -1, "81457132+12", 0, 50, 1, 78, 174, 116.4, 170, 19, 4, 81 }, + /*100*/ { BARCODE_UPCE_CHK, -1, -1, 0, "81457132+12", 0, 50, 1, 78, 184, 110, 170, 19, 4, 81 }, // Hide text + /*101*/ { BARCODE_UPCE_CHK, BARCODE_QUIET_ZONES, -1, 0, "81457132+12", 0, 50, 1, 78, 184, 110, 170, 19, 4, 81 }, // Hide text + /*102*/ { BARCODE_UPCE_CHK, BARCODE_NO_QUIET_ZONES, -1, 0, "81457132+12", 0, 50, 1, 78, 156, 110, 152, 19, 4, 81 }, // Hide text + /*103*/ { BARCODE_UPCE, -1, -1, -1, "8145713+12345", 0, 50, 1, 105, 238, 116.4, 226, 19, 2, 81 }, + /*104*/ { BARCODE_UPCE, BARCODE_QUIET_ZONES, -1, -1, "8145713+12345", 0, 50, 1, 105, 238, 116.4, 226, 19, 2, 81 }, + /*105*/ { BARCODE_UPCE, BARCODE_NO_QUIET_ZONES, -1, -1, "8145713+12345", 0, 50, 1, 105, 228, 116.4, 226, 19, 2, 81 }, + /*106*/ { BARCODE_UPCE, -1, -1, 0, "8145713+12345", 0, 50, 1, 105, 238, 110, 226, 19, 2, 81 }, // Hide text + /*107*/ { BARCODE_UPCE, BARCODE_QUIET_ZONES, -1, 0, "8145713+12345", 0, 50, 1, 105, 238, 110, 226, 19, 2, 81 }, // Hide text + /*108*/ { BARCODE_UPCE, BARCODE_NO_QUIET_ZONES, -1, 0, "8145713+12345", 0, 50, 1, 105, 210, 110, 208, 19, 2, 81 }, // Hide text + /*109*/ { BARCODE_POSTNET, -1, -1, -1, "12345", 0, 12, 2, 63, 126, 24, 0, 0, 2, 24 }, + /*110*/ { BARCODE_POSTNET, BARCODE_QUIET_ZONES, -1, -1, "12345", 0, 12, 2, 63, 146, 30.4, 10, 3.2, 2, 24 }, + /*111*/ { BARCODE_MSI_PLESSEY, -1, -1, -1, "1234", 0, 50, 1, 55, 110, 118.9, 0, 0, 4, 100 }, + /*112*/ { BARCODE_MSI_PLESSEY, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 55, 158, 118.9, 24, 0, 4, 100 }, + /*113*/ { BARCODE_FIM, -1, -1, -1, "A", 0, 50, 1, 17, 34, 100, 0, 0, 2, 100 }, + /*114*/ { BARCODE_FIM, BARCODE_QUIET_ZONES, -1, -1, "A", 0, 50, 1, 17, 50.955414, 100, 10.585987, 0, 2, 100 }, + /*115*/ { BARCODE_LOGMARS, -1, -1, -1, "1234", 0, 50, 1, 95, 190, 118.9, 0, 0, 2, 100 }, + /*116*/ { BARCODE_LOGMARS, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 95, 230, 118.9, 20, 0, 2, 100 }, + /*117*/ { BARCODE_PHARMA, -1, -1, -1, "1234", 0, 50, 1, 38, 76, 100, 0, 0, 2, 100 }, + /*118*/ { BARCODE_PHARMA, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 38, 100, 100, 12, 0, 2, 100 }, + /*119*/ { BARCODE_PZN, -1, -1, -1, "1234", 0, 50, 1, 142, 284, 118.9, 0, 0, 2, 100 }, + /*120*/ { BARCODE_PZN, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 142, 324, 118.9, 20, 0, 2, 100 }, + /*121*/ { BARCODE_PHARMA_TWO, -1, -1, -1, "1234", 0, 10, 2, 13, 26, 20, 8, 0, 2, 10 }, + /*122*/ { BARCODE_PHARMA_TWO, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 10, 2, 13, 50, 20, 20, 0, 2, 10 }, + /*123*/ { BARCODE_PDF417, -1, -1, -1, "1234", 0, 18, 6, 103, 206, 36, 0, 0, 16, 36 }, + /*124*/ { BARCODE_PDF417, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 18, 6, 103, 214, 44, 4, 4, 16, 36 }, + /*125*/ { BARCODE_PDF417COMP, -1, -1, -1, "1234", 0, 18, 6, 69, 138, 36, 0, 0, 16, 36 }, + /*126*/ { BARCODE_PDF417COMP, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 18, 6, 69, 146, 44, 4, 4, 16, 36 }, + /*127*/ { BARCODE_MAXICODE, -1, -1, -1, "1234", 0, 165, 33, 30, 60, 57.733398, 29, 28.866699, 16.430941, 0 }, + /*128*/ { BARCODE_MAXICODE, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 165, 33, 30, 64, 61.733398, 31, 30.866699, 16.430941, 0 }, + /*129*/ { BARCODE_QRCODE, -1, -1, -1, "1234", 0, 21, 21, 21, 42, 42, 0, 0, 14, 2 }, + /*130*/ { BARCODE_QRCODE, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 21, 21, 21, 58, 58, 8, 8, 14, 2 }, + /*131*/ { BARCODE_CODE128B, -1, -1, -1, "1234", 0, 50, 1, 79, 158, 118.9, 0, 0, 4, 100 }, + /*132*/ { BARCODE_CODE128B, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 79, 198, 118.9, 20, 0, 4, 100 }, + /*133*/ { BARCODE_AUSPOST, -1, -1, -1, "12345678", 0, 8, 3, 73, 146, 16, 0, 0, 2, 10 }, + /*134*/ { BARCODE_AUSPOST, BARCODE_QUIET_ZONES, -1, -1, "12345678", 0, 8, 3, 73, 186, 29.333332, 20, 6.6666665, 2, 10 }, + /*135*/ { BARCODE_AUSREPLY, -1, -1, -1, "1234", 0, 8, 3, 73, 146, 16, 0, 0, 2, 10 }, + /*136*/ { BARCODE_AUSREPLY, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 8, 3, 73, 186, 29.333332, 20, 6.6666665, 2, 10 }, + /*137*/ { BARCODE_AUSROUTE, -1, -1, -1, "1234", 0, 8, 3, 73, 146, 16, 0, 0, 2, 10 }, + /*138*/ { BARCODE_AUSROUTE, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 8, 3, 73, 186, 29.333332, 20, 6.6666665, 2, 10 }, + /*139*/ { BARCODE_AUSREDIRECT, -1, -1, -1, "1234", 0, 8, 3, 73, 146, 16, 0, 0, 2, 10 }, + /*140*/ { BARCODE_AUSREDIRECT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 8, 3, 73, 186, 29.333332, 20, 6.6666665, 2, 10 }, + /*141*/ { BARCODE_ISBNX, -1, -1, -1, "123456789X", 0, 50, 1, 95, 226, 116.4, 22, 0, 2, 110 }, + /*142*/ { BARCODE_ISBNX, BARCODE_QUIET_ZONES, -1, -1, "123456789X", 0, 50, 1, 95, 226, 116.4, 22, 0, 2, 110 }, + /*143*/ { BARCODE_ISBNX, BARCODE_NO_QUIET_ZONES, -1, -1, "123456789X", 0, 50, 1, 95, 212, 116.4, 22, 0, 2, 110 }, + /*144*/ { BARCODE_RM4SCC, -1, -1, -1, "1234", 0, 8, 3, 43, 86, 16, 0, 0, 2, 10 }, + /*145*/ { BARCODE_RM4SCC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 8, 3, 43, 98.283463, 28.283464, 6.1417322, 6.1417322, 2, 10 }, + /*146*/ { BARCODE_DATAMATRIX, -1, -1, -1, "1234", 0, 10, 10, 10, 20, 20, 0, 0, 2, 2 }, + /*147*/ { BARCODE_DATAMATRIX, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 10, 10, 10, 24, 24, 2, 2, 2, 2 }, + /*148*/ { BARCODE_EAN14, -1, -1, -1, "1234", 0, 50, 1, 134, 268, 118.9, 0, 0, 4, 100 }, + /*149*/ { BARCODE_EAN14, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 134, 308, 118.9, 20, 0, 4, 100 }, + /*150*/ { BARCODE_VIN, -1, -1, -1, "12345678701234567", 0, 50, 1, 246, 492, 118.9, 0, 0, 2, 100 }, + /*151*/ { BARCODE_VIN, BARCODE_QUIET_ZONES, -1, -1, "12345678701234567", 0, 50, 1, 246, 532, 118.9, 20, 0, 2, 100 }, + /*152*/ { BARCODE_CODABLOCKF, -1, -1, -1, "1234", 0, 20, 2, 101, 242, 44, 20, 2, 4, 40 }, + /*153*/ { BARCODE_CODABLOCKF, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 101, 242, 44, 20, 2, 4, 40 }, + /*154*/ { BARCODE_CODABLOCKF, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 101, 202, 44, 0, 2, 4, 40 }, + /*155*/ { BARCODE_NVE18, -1, -1, -1, "1234", 0, 50, 1, 156, 312, 118.9, 0, 0, 4, 100 }, + /*156*/ { BARCODE_NVE18, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 156, 352, 118.9, 20, 0, 4, 100 }, + /*157*/ { BARCODE_JAPANPOST, -1, -1, -1, "1234", 0, 8, 3, 133, 266, 16, 0, 0, 2, 16 }, + /*158*/ { BARCODE_JAPANPOST, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 8, 3, 133, 279.33334, 29.333332, 6.6666665, 6.6666665, 2, 16 }, + /*159*/ { BARCODE_KOREAPOST, -1, -1, -1, "1234", 0, 50, 1, 167, 334, 118.9, 8, 0, 2, 100 }, + /*160*/ { BARCODE_KOREAPOST, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 167, 374, 118.9, 28, 0, 2, 100 }, + /*161*/ { BARCODE_DBAR_STK, -1, -1, -1, "1234", 0, 13, 3, 50, 100, 26, 2, 0, 2, 10 }, + /*162*/ { BARCODE_DBAR_STK, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 13, 3, 50, 100, 26, 2, 0, 2, 10 }, + /*163*/ { BARCODE_DBAR_STK, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 13, 3, 50, 100, 26, 2, 0, 2, 10 }, + /*164*/ { BARCODE_DBAR_OMNSTK, -1, -1, -1, "1234", 0, 69, 5, 50, 100, 138, 2, 0, 2, 66 }, + /*165*/ { BARCODE_DBAR_OMNSTK, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 69, 5, 50, 100, 138, 2, 0, 2, 66 }, + /*166*/ { BARCODE_DBAR_OMNSTK, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 69, 5, 50, 100, 138, 2, 0, 2, 66 }, + /*167*/ { BARCODE_DBAR_EXPSTK, -1, -1, -1, "[20]12", 0, 34, 1, 102, 204, 68, 2, 0, 2, 68 }, + /*168*/ { BARCODE_DBAR_EXPSTK, BARCODE_QUIET_ZONES, -1, -1, "[20]12", 0, 34, 1, 102, 204, 68, 2, 0, 2, 68 }, + /*169*/ { BARCODE_DBAR_EXPSTK, BARCODE_NO_QUIET_ZONES, -1, -1, "[20]12", 0, 34, 1, 102, 204, 68, 2, 0, 2, 68 }, + /*170*/ { BARCODE_PLANET, -1, -1, -1, "12345678901", 0, 12, 2, 123, 246, 24, 0, 0, 2, 24 }, + /*171*/ { BARCODE_PLANET, BARCODE_QUIET_ZONES, -1, -1, "12345678901", 0, 12, 2, 123, 266, 30.4, 10, 3.2, 2, 24 }, + /*172*/ { BARCODE_MICROPDF417, -1, -1, -1, "1234", 0, 22, 11, 38, 76, 44, 0, 0, 4, 4 }, + /*173*/ { BARCODE_MICROPDF417, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 22, 11, 38, 80, 48, 2, 2, 4, 4 }, + /*174*/ { BARCODE_USPS_IMAIL, -1, -1, -1, "12345678901234567890", 0, 8, 3, 129, 258, 16, 0, 0, 2, 10 }, + /*175*/ { BARCODE_USPS_IMAIL, BARCODE_QUIET_ZONES, -1, -1, "12345678901234567890", 0, 8, 3, 129, 277.5, 20.056, 9.75, 2.0280001, 2, 10 }, + /*176*/ { BARCODE_PLESSEY, -1, -1, -1, "1234", 0, 50, 1, 131, 262, 118.9, 0, 0, 6, 100 }, + /*177*/ { BARCODE_PLESSEY, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 131, 310, 118.9, 24, 0, 6, 100 }, + /*178*/ { BARCODE_TELEPEN_NUM, -1, -1, -1, "1234", 0, 50, 1, 80, 160, 118.9, 0, 0, 2, 100 }, + /*179*/ { BARCODE_TELEPEN_NUM, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 80, 200, 118.9, 20, 0, 2, 100 }, + /*180*/ { BARCODE_ITF14, -1, -1, -1, "1234", 0, 50, 1, 135, 330, 138.89999, 30, 10, 2, 100 }, + /*181*/ { BARCODE_ITF14, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 135, 330, 138.89999, 30, 10, 2, 100 }, + /*182*/ { BARCODE_ITF14, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 135, 290, 138.89999, 10, 10, 2, 100 }, + /*183*/ { BARCODE_KIX, -1, -1, -1, "1234", 0, 8, 3, 31, 62, 16, 8, 0, 2, 10 }, + /*184*/ { BARCODE_KIX, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 8, 3, 31, 74.283463, 28.283464, 14.141732, 6.1417322, 2, 10 }, + /*185*/ { BARCODE_AZTEC, -1, -1, -1, "1234", 0, 15, 15, 15, 30, 30, 6, 0, 6, 2 }, + /*186*/ { BARCODE_AZTEC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 15, 15, 15, 30, 30, 6, 0, 6, 2 }, + /*187*/ { BARCODE_AZTEC, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 15, 15, 15, 30, 30, 6, 0, 6, 2 }, + /*188*/ { BARCODE_DAFT, -1, -1, -1, "FADT", 0, 8, 3, 7, 14, 16, 0, 0, 2, 16 }, + /*189*/ { BARCODE_DAFT, BARCODE_QUIET_ZONES, -1, -1, "FADT", 0, 8, 3, 7, 14, 16, 0, 0, 2, 16 }, + /*190*/ { BARCODE_DAFT, BARCODE_NO_QUIET_ZONES, -1, -1, "FADT", 0, 8, 3, 7, 14, 16, 0, 0, 2, 16 }, + /*191*/ { BARCODE_DPD, -1, -1, -1, "1234567890123456789012345678", 0, 50, 1, 189, 378, 118.9, 0, 0, 4, 100 }, + /*192*/ { BARCODE_DPD, BARCODE_QUIET_ZONES, -1, -1, "1234567890123456789012345678", 0, 50, 1, 189, 428, 118.9, 25, 0, 4, 100 }, + /*193*/ { BARCODE_MICROQR, -1, -1, -1, "1234", 0, 11, 11, 11, 22, 22, 0, 0, 14, 2 }, + /*194*/ { BARCODE_MICROQR, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 11, 11, 11, 30, 30, 4, 4, 14, 2 }, + /*195*/ { BARCODE_HIBC_128, -1, -1, -1, "1234", 0, 50, 1, 90, 180, 118.9, 0, 0, 4, 100 }, + /*196*/ { BARCODE_HIBC_128, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 90, 220, 118.9, 20, 0, 4, 100 }, + /*197*/ { BARCODE_HIBC_39, -1, -1, -1, "1234", 0, 50, 1, 127, 254, 118.9, 0, 0, 2, 100 }, + /*198*/ { BARCODE_HIBC_39, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 127, 294, 118.9, 20, 0, 2, 100 }, + /*199*/ { BARCODE_HIBC_DM, -1, -1, -1, "1234", 0, 12, 12, 12, 24, 24, 0, 0, 2, 2 }, + /*200*/ { BARCODE_HIBC_DM, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 12, 12, 12, 28, 28, 2, 2, 2, 2 }, + /*201*/ { BARCODE_HIBC_QR, -1, -1, -1, "1234", 0, 21, 21, 21, 42, 42, 0, 0, 14, 2 }, + /*202*/ { BARCODE_HIBC_QR, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 21, 21, 21, 58, 58, 8, 8, 14, 2 }, + /*203*/ { BARCODE_HIBC_PDF, -1, -1, -1, "1234", 0, 21, 7, 103, 206, 42, 0, 0, 16, 42 }, + /*204*/ { BARCODE_HIBC_PDF, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 21, 7, 103, 214, 50, 4, 4, 16, 42 }, + /*205*/ { BARCODE_HIBC_MICPDF, -1, -1, -1, "1234", 0, 12, 6, 82, 164, 24, 0, 0, 4, 4 }, + /*206*/ { BARCODE_HIBC_MICPDF, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 12, 6, 82, 168, 28, 2, 2, 4, 4 }, + /*207*/ { BARCODE_HIBC_BLOCKF, -1, -1, -1, "1234", 0, 20, 2, 101, 242, 44, 20, 2, 4, 40 }, + /*208*/ { BARCODE_HIBC_BLOCKF, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 101, 242, 44, 20, 2, 4, 40 }, + /*209*/ { BARCODE_HIBC_BLOCKF, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 101, 202, 44, 0, 2, 4, 40 }, + /*210*/ { BARCODE_HIBC_AZTEC, -1, -1, -1, "1234", 0, 15, 15, 15, 30, 30, 22, 0, 2, 2 }, + /*211*/ { BARCODE_HIBC_AZTEC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 15, 15, 15, 30, 30, 22, 0, 2, 2 }, + /*212*/ { BARCODE_HIBC_AZTEC, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 15, 15, 15, 30, 30, 22, 0, 2, 2 }, + /*213*/ { BARCODE_DOTCODE, -1, -1, -1, "1234", 0, 10, 10, 13, 26, 20, 5, 1, 1.6, 0 }, + /*214*/ { BARCODE_DOTCODE, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 10, 10, 13, 38, 32, 11, 7, 1.6, 0 }, + /*215*/ { BARCODE_HANXIN, -1, -1, -1, "1234", 0, 23, 23, 23, 46, 46, 0, 0, 14, 2 }, + /*216*/ { BARCODE_HANXIN, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 23, 23, 23, 58, 58, 6, 6, 14, 2 }, + /*217*/ { BARCODE_MAILMARK, -1, -1, -1, "01000000000000000AA00AA0A", 0, 10, 3, 155, 310, 20, 0, 0, 2, 20 }, + /*218*/ { BARCODE_MAILMARK, BARCODE_QUIET_ZONES, -1, -1, "01000000000000000AA00AA0A", 0, 10, 3, 155, 322.28348, 32.283463, 6.1417322, 6.1417322, 2, 20 }, + /*219*/ { BARCODE_AZRUNE, -1, -1, -1, "123", 0, 11, 11, 11, 22, 22, 0, 0, 8, 2 }, + /*220*/ { BARCODE_AZRUNE, BARCODE_QUIET_ZONES, -1, -1, "123", 0, 11, 11, 11, 22, 22, 0, 0, 8, 2 }, + /*221*/ { BARCODE_AZRUNE, BARCODE_NO_QUIET_ZONES, -1, -1, "123", 0, 11, 11, 11, 22, 22, 0, 0, 8, 2 }, + /*222*/ { BARCODE_CODE32, -1, -1, -1, "1234", 0, 50, 1, 103, 206, 118.9, 0, 0, 2, 100 }, + /*223*/ { BARCODE_CODE32, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 103, 246, 118.9, 20, 0, 2, 100 }, + /*224*/ { BARCODE_EANX_CC, -1, -1, -1, "023456789012", 0, 50, 7, 99, 234, 116.4, 32, 24, 2, 86 }, + /*225*/ { BARCODE_EANX_CC, BARCODE_QUIET_ZONES, -1, -1, "023456789012", 0, 50, 7, 99, 234, 116.4, 32, 24, 2, 86 }, + /*226*/ { BARCODE_EANX_CC, BARCODE_NO_QUIET_ZONES, -1, -1, "023456789012", 0, 50, 7, 99, 220, 116.4, 32, 24, 2, 86 }, + /*227*/ { BARCODE_EANX_CC, -1, -1, 0, "023456789012", 0, 50, 7, 99, 234, 110, 32, 24, 2, 86 }, // Hide text + /*228*/ { BARCODE_EANX_CC, BARCODE_QUIET_ZONES, -1, 0, "023456789012", 0, 50, 7, 99, 234, 110, 32, 24, 2, 86 }, // Hide text + /*229*/ { BARCODE_EANX_CC, BARCODE_NO_QUIET_ZONES, -1, 0, "023456789012", 0, 50, 7, 99, 198, 110, 10, 24, 2, 86 }, // Hide text + /*230*/ { BARCODE_GS1_128_CC, -1, -1, -1, "[20]02", 0, 50, 5, 99, 198, 118.9, 24, 14, 4, 86 }, + /*231*/ { BARCODE_GS1_128_CC, BARCODE_QUIET_ZONES, -1, -1, "[20]02", 0, 50, 5, 99, 238, 118.9, 44, 14, 4, 86 }, + /*232*/ { BARCODE_DBAR_OMN_CC, -1, -1, -1, "1234", 0, 21, 5, 100, 200, 60.900002, 10, 14, 2, 28 }, + /*233*/ { BARCODE_DBAR_OMN_CC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 21, 5, 100, 204, 60.900002, 12, 14, 2, 28 }, + /*234*/ { BARCODE_DBAR_LTD_CC, -1, -1, -1, "1234", 0, 19, 6, 79, 158, 56.900002, 2, 18, 2, 20 }, + /*235*/ { BARCODE_DBAR_LTD_CC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 19, 6, 79, 162, 56.900002, 4, 18, 2, 20 }, + /*236*/ { BARCODE_DBAR_EXP_CC, -1, -1, -1, "[20]12", 0, 41, 5, 102, 204, 100.9, 2, 14, 2, 68 }, + /*237*/ { BARCODE_DBAR_EXP_CC, BARCODE_QUIET_ZONES, -1, -1, "[20]12", 0, 41, 5, 102, 208, 100.9, 4, 14, 2, 68 }, + /*238*/ { BARCODE_UPCA_CC, -1, -1, -1, "01457137763", 0, 50, 7, 99, 234, 116.4, 24, 20, 2, 90 }, + /*239*/ { BARCODE_UPCA_CC, BARCODE_QUIET_ZONES, -1, -1, "01457137763", 0, 50, 7, 99, 234, 116.4, 24, 20, 2, 90 }, + /*240*/ { BARCODE_UPCA_CC, BARCODE_NO_QUIET_ZONES, -1, -1, "01457137763", 0, 50, 7, 99, 234, 116.4, 24, 20, 2, 90 }, + /*241*/ { BARCODE_UPCA_CC, -1, -1, 0, "01457137763", 0, 50, 7, 99, 234, 110, 24, 20, 2, 90 }, // Hide text + /*242*/ { BARCODE_UPCA_CC, BARCODE_QUIET_ZONES, -1, 0, "01457137763", 0, 50, 7, 99, 234, 110, 24, 20, 2, 90 }, // Hide text + /*243*/ { BARCODE_UPCA_CC, BARCODE_NO_QUIET_ZONES, -1, 0, "01457137763", 0, 50, 7, 99, 198, 110, 6, 20, 2, 90 }, // Hide text + /*244*/ { BARCODE_UPCE_CC, -1, -1, -1, "8145713", 0, 50, 9, 55, 142, 116.4, 24, 28, 2, 82 }, + /*245*/ { BARCODE_UPCE_CC, BARCODE_QUIET_ZONES, -1, -1, "8145713", 0, 50, 9, 55, 142, 116.4, 24, 28, 2, 82 }, + /*246*/ { BARCODE_UPCE_CC, BARCODE_NO_QUIET_ZONES, -1, -1, "8145713", 0, 50, 9, 55, 142, 116.4, 24, 28, 2, 82 }, + /*247*/ { BARCODE_UPCE_CC, -1, -1, 0, "8145713", 0, 50, 9, 55, 142, 110, 24, 28, 2, 82 }, // Hide text + /*248*/ { BARCODE_UPCE_CC, BARCODE_QUIET_ZONES, -1, 0, "8145713", 0, 50, 9, 55, 142, 110, 24, 28, 2, 82 }, // Hide text + /*249*/ { BARCODE_UPCE_CC, BARCODE_NO_QUIET_ZONES, -1, 0, "8145713", 0, 50, 9, 55, 110, 110, 6, 28, 2, 82 }, // Hide text + /*250*/ { BARCODE_DBAR_STK_CC, -1, -1, -1, "1234", 0, 24, 9, 56, 112, 48, 0, 34, 2, 14 }, + /*251*/ { BARCODE_DBAR_STK_CC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 24, 9, 56, 116, 48, 2, 34, 2, 14 }, + /*252*/ { BARCODE_DBAR_OMNSTK_CC, -1, -1, -1, "1234", 0, 80, 11, 56, 112, 160, 0, 94, 2, 66 }, + /*253*/ { BARCODE_DBAR_OMNSTK_CC, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 80, 11, 56, 116, 160, 2, 94, 2, 66 }, + /*254*/ { BARCODE_DBAR_EXPSTK_CC, -1, -1, -1, "[20]12", 0, 41, 5, 102, 204, 82, 2, 14, 2, 68 }, + /*255*/ { BARCODE_DBAR_EXPSTK_CC, BARCODE_QUIET_ZONES, -1, -1, "[20]12", 0, 41, 5, 102, 208, 82, 4, 14, 2, 68 }, + /*256*/ { BARCODE_CHANNEL, -1, -1, -1, "1234", 0, 50, 1, 27, 54, 118.9, 0, 0, 2, 100 }, + /*257*/ { BARCODE_CHANNEL, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 27, 60, 118.9, 2, 0, 2, 100 }, + /*258*/ { BARCODE_CODEONE, -1, -1, -1, "1234", 0, 16, 16, 18, 36, 32, 0, 0, 2, 2 }, // Versions A to H - no quiet zone + /*259*/ { BARCODE_CODEONE, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 16, 16, 18, 36, 32, 0, 0, 2, 2 }, + /*260*/ { BARCODE_CODEONE, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 16, 16, 18, 36, 32, 0, 0, 2, 2 }, + /*261*/ { BARCODE_CODEONE, -1, 9, -1, "1234", 0, 8, 8, 11, 22, 16, 10, 0, 2, 2 }, // Version S (& T) have quiet zones + /*262*/ { BARCODE_CODEONE, BARCODE_QUIET_ZONES, 9, -1, "1234", 0, 8, 8, 11, 26, 16, 12, 0, 2, 2 }, + /*263*/ { BARCODE_GRIDMATRIX, -1, -1, -1, "123", 0, 18, 18, 18, 36, 36, 0, 0, 12, 2 }, + /*264*/ { BARCODE_GRIDMATRIX, BARCODE_QUIET_ZONES, -1, -1, "123", 0, 18, 18, 18, 60, 60, 12, 12, 12, 2 }, + /*265*/ { BARCODE_UPNQR, -1, -1, -1, "1234", 0, 77, 77, 77, 154, 154, 0, 0, 14, 2 }, + /*266*/ { BARCODE_UPNQR, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 77, 77, 77, 170, 170, 8, 8, 14, 2 }, + /*267*/ { BARCODE_ULTRA, -1, -1, -1, "1234", 0, 13, 13, 15, 30, 26, 0, 0, 30, 2 }, + /*268*/ { BARCODE_ULTRA, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 13, 13, 15, 34, 30, 2, 2, 30, 2 }, + /*269*/ { BARCODE_RMQR, -1, -1, -1, "1234", 0, 11, 11, 27, 54, 22, 0, 0, 14, 2 }, + /*270*/ { BARCODE_RMQR, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 11, 11, 27, 62, 30, 4, 4, 14, 2 }, + }; + int data_size = ARRAY_SIZE(data); + int i, length, ret; + struct zint_symbol *symbol; + + char *text; + static char composite[] = "[20]12"; + + struct zint_vector_rect *rect; + struct zint_vector_circle *circle; + + testStart("test_quiet_zones"); + + for (i = 0; i < data_size; i++) { + + if (index != -1 && i != index) continue; + + symbol = ZBarcode_Create(); + assert_nonnull(symbol, "Symbol not created\n"); + + length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, data[i].option_2, -1, data[i].output_options, data[i].data, -1, debug); + if (data[i].show_hrt != -1) { + symbol->show_hrt = data[i].show_hrt; + } + + if (is_composite(symbol->symbology)) { + text = composite; + length = (int) strlen(text); + assert_nonzero(strlen(data[i].data) < 128, "i:%d linear data length %d >= 128\n", i, (int) strlen(data[i].data)); + strcpy(symbol->primary, data[i].data); + } else { + text = data[i].data; + } + + ret = ZBarcode_Encode(symbol, (unsigned char *) text, length); + assert_zero(ret, "i:%d ZBarcode_Encode(%d) ret %d != 0 %s\n", i, data[i].symbology, ret, symbol->errtxt); + + ret = ZBarcode_Buffer_Vector(symbol, 0); + assert_equal(ret, data[i].ret, "i:%d ZBarcode_Buffer_Vector(%d) ret %d != %d\n", i, data[i].symbology, ret, data[i].ret); + + if (ret < 5) { + assert_nonnull(symbol->vector, "i:%d ZBarcode_Buffer_Vector(%d) vector NULL\n", i, data[i].symbology); + + if (index != -1 && (debug & ZINT_DEBUG_TEST_PRINT)) { // ZINT_DEBUG_TEST_PRINT 16 + sprintf(symbol->outfile, "test_quiet_zones_%d.svg", i); + ZBarcode_Print(symbol, 0); + } + + assert_equal(symbol->height, data[i].expected_height, "i:%d (%d) symbol->height %.8g != %.8g\n", i, data[i].symbology, symbol->height, data[i].expected_height); + assert_equal(symbol->rows, data[i].expected_rows, "i:%d (%d) symbol->rows %d != %d\n", i, data[i].symbology, symbol->rows, data[i].expected_rows); + assert_equal(symbol->width, data[i].expected_width, "i:%d (%d) symbol->width %d != %d\n", i, data[i].symbology, symbol->width, data[i].expected_width); + + assert_equal(symbol->vector->width, data[i].expected_vector_width, "i:%d (%s) symbol->vector->width %.8g != %.8g\n", + i, testUtilBarcodeName(data[i].symbology), symbol->vector->width, data[i].expected_vector_width); + assert_equal(symbol->vector->height, data[i].expected_vector_height, "i:%d (%s) symbol->vector->height %.8g != %.8g\n", + i, testUtilBarcodeName(data[i].symbology), symbol->vector->height, data[i].expected_vector_height); + + if (symbol->symbology == BARCODE_MAXICODE || symbol->symbology == BARCODE_DOTCODE) { + circle = find_circle(symbol, data[i].expected_set_x, data[i].expected_set_y, data[i].expected_set_width); + assert_nonnull(circle, "i:%d (%d) find_circle(%g, %g, %g) NULL\n", + i, data[i].symbology, data[i].expected_set_x, data[i].expected_set_y, data[i].expected_set_width); + } else { + rect = find_rect(symbol, data[i].expected_set_x, data[i].expected_set_y, data[i].expected_set_width, data[i].expected_set_height); + assert_nonnull(rect, "i:%d (%d) find_rect(%g, %g, %g, %g) NULL\n", + i, data[i].symbology, data[i].expected_set_x, data[i].expected_set_y, data[i].expected_set_width, data[i].expected_set_height); + } + } + + ZBarcode_Delete(symbol); + } + + testFinish(); +} + static void test_height(int index, int generate, int debug) { struct item { @@ -1448,6 +1838,7 @@ int main(int argc, char *argv[]) { { "test_noncomposite_string_x", test_noncomposite_string_x, 1, 0, 1 }, { "test_upcean_whitespace_width", test_upcean_whitespace_width, 1, 0, 1 }, { "test_guard_descent", test_guard_descent, 1, 0, 1 }, + { "test_quiet_zones", test_quiet_zones, 1, 0, 1 }, { "test_height", test_height, 1, 1, 1 }, }; diff --git a/backend/tests/testcommon.c b/backend/tests/testcommon.c index f3e16abb..e8cce71b 100644 --- a/backend/tests/testcommon.c +++ b/backend/tests/testcommon.c @@ -646,6 +646,8 @@ const char *testUtilOutputOptionsName(int output_options) { { "BARCODE_DOTTY_MODE", BARCODE_DOTTY_MODE, 256 }, { "GS1_GS_SEPARATOR", GS1_GS_SEPARATOR, 512 }, { "OUT_BUFFER_INTERMEDIATE", OUT_BUFFER_INTERMEDIATE, 1024 }, + { "BARCODE_QUIET_ZONES", BARCODE_QUIET_ZONES, 2048 }, + { "BARCODE_NO_QUIET_ZONES", BARCODE_NO_QUIET_ZONES, 4096 }, }; static int const data_size = ARRAY_SIZE(data); int set = 0; diff --git a/backend/vector.c b/backend/vector.c index 0bb6486d..7f7ba951 100644 --- a/backend/vector.c +++ b/backend/vector.c @@ -453,7 +453,9 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ upceanflag = output_process_upcean(symbol, &main_width, &comp_xoffset, addon, &addon_gap); } - output_set_whitespace_offsets(symbol, &xoffset, &yoffset, &roffset, &boffset, 0 /*scaler*/, + hide_text = ((!symbol->show_hrt) || (ustrlen(symbol->text) == 0)); + + output_set_whitespace_offsets(symbol, hide_text, &xoffset, &yoffset, &roffset, &boffset, 0 /*scaler*/, NULL, NULL, NULL, NULL); /* Note font sizes scaled by 2 so really twice these values */ @@ -471,8 +473,6 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_ guard_descent = 0.0f; } - hide_text = ((!symbol->show_hrt) || (ustrlen(symbol->text) == 0)); - if (hide_text) { textoffset = guard_descent; } else { diff --git a/backend/zint.h b/backend/zint.h index 09539bd8..7ed98133 100644 --- a/backend/zint.h +++ b/backend/zint.h @@ -258,6 +258,9 @@ extern "C" { #define BARCODE_DOTTY_MODE 256 /* Plot a matrix symbol using dots rather than squares */ #define GS1_GS_SEPARATOR 512 /* Use GS instead of FNC1 as GS1 separator (Data Matrix) */ #define OUT_BUFFER_INTERMEDIATE 1024 /* Return ASCII values in bitmap buffer (OUT_BUFFER only) */ +#define BARCODE_QUIET_ZONES 2048 /* Add compliant quiet zones (additional to any specified whitespace) */ + /* Note: CODE16K, CODE49, CODABLOCKF, ITF14, UPC/EAN have default quiet zones */ +#define BARCODE_NO_QUIET_ZONES 4096 /* Disable quiet zones, notably those with defaults as listed above */ /* Input data types (`symbol->input_mode`) */ #define DATA_MODE 0 /* Binary */ @@ -306,6 +309,7 @@ extern "C" { #define ZINT_CAP_ECI 0x0010 /* Supports Extended Channel Interpretations? */ #define ZINT_CAP_GS1 0x0020 /* Supports GS1 data? */ #define ZINT_CAP_DOTTY 0x0040 /* Can be output as dots? */ +#define ZINT_CAP_QUIET_ZONES 0x0080 /* Has default quiet zones? */ #define ZINT_CAP_FIXED_RATIO 0x0100 /* Has fixed width-to-height (aspect) ratio? */ #define ZINT_CAP_READER_INIT 0x0200 /* Supports Reader Initialisation? */ #define ZINT_CAP_FULL_MULTIBYTE 0x0400 /* Supports full-multibyte option? */ diff --git a/backend_qt/qzint.cpp b/backend_qt/qzint.cpp index 588615d2..7a2a644a 100644 --- a/backend_qt/qzint.cpp +++ b/backend_qt/qzint.cpp @@ -62,6 +62,8 @@ namespace Zint { m_gs1parens = false; m_gs1nocheck = false; m_gssep = false; + m_quiet_zones = false; + m_no_quiet_zones = false; m_reader_init = false; m_rotate_angle = 0; m_debug = false; @@ -86,6 +88,12 @@ namespace Zint { m_zintSymbol->height = m_height; m_zintSymbol->whitespace_width = m_whitespace; m_zintSymbol->whitespace_height = m_vwhitespace; + if (m_quiet_zones) { + m_zintSymbol->output_options |= BARCODE_QUIET_ZONES; + } + if (m_no_quiet_zones) { + m_zintSymbol->output_options |= BARCODE_NO_QUIET_ZONES; + } m_zintSymbol->border_width = m_borderWidth; m_zintSymbol->option_1 = m_option_1; m_zintSymbol->option_2 = m_option_2; @@ -314,6 +322,14 @@ namespace Zint { return m_rotate_angle; } + void QZint::setQuietZones(bool quietZones) { + m_quiet_zones = quietZones; + } + + void QZint::setNoQuietZones(bool noQuietZones) { + m_no_quiet_zones = noQuietZones; + } + void QZint::setRotateAngle(int rotateIndex) { if (rotateIndex == 1) { m_rotate_angle = 90; @@ -385,6 +401,10 @@ namespace Zint { return ZBarcode_Cap(symbology ? symbology : m_symbol, ZINT_CAP_GS1); } + bool QZint::hasDefaultQuietZones(int symbology) const { + return ZBarcode_Cap(symbology ? symbology : m_symbol, ZINT_CAP_QUIET_ZONES); + } + bool QZint::isFixedRatio(int symbology) const { return ZBarcode_Cap(symbology ? symbology : m_symbol, ZINT_CAP_FIXED_RATIO); } diff --git a/backend_qt/qzint.h b/backend_qt/qzint.h index 46adb53b..6e4f0142 100644 --- a/backend_qt/qzint.h +++ b/backend_qt/qzint.h @@ -96,6 +96,9 @@ public: void setGSSep(bool gssep); + void setQuietZones(bool quietZones); + void setNoQuietZones(bool noQuietZones); + int rotateAngle() const; void setRotateAngle(int rotateIndex); @@ -124,6 +127,7 @@ public: bool isExtendable(int symbology = 0) const; bool supportsECI(int symbology = 0) const; bool supportsGS1(int symbology = 0) const; + bool hasDefaultQuietZones(int symbology = 0) const; bool isFixedRatio(int symbology = 0) const; bool isDotty(int symbology = 0) const; bool supportsReaderInit(int symbology = 0) const; @@ -180,6 +184,8 @@ private: bool m_gs1parens; bool m_gs1nocheck; bool m_gssep; + bool m_quiet_zones; + bool m_no_quiet_zones; bool m_reader_init; bool m_debug; diff --git a/backend_tcl/zint.c b/backend_tcl/zint.c index b388bc5d..8b965749 100644 --- a/backend_tcl/zint.c +++ b/backend_tcl/zint.c @@ -125,6 +125,8 @@ 2021-09-21 GL - Added -guarddescent option - iHeight check int -> double +2021-09-24 GL +- Added -quietzones and -noquietzones options */ #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) @@ -472,9 +474,11 @@ static char help_message[] = "zint tcl(stub,obj) dll\n" /* cli option --mirror not supported */ " -mode number: set encoding mode (MaxiCode, Composite)\n" " -nobackground bool: set background transparent\n" + " -noquietzones bool: disable default quiet zones\n" " -notext bool: no interpretation line\n" /* cli option --output not supported */ " -primary text: Structured primary data (MaxiCode, Composite)\n" + " -quietzones bool: add compliant quiet zones to whitespace\n" " -reverse bool: Reverse colours (white on black)\n" " -rotate angle: Image rotation by 0,90 or 270 degrees\n" " -rows integer: Codablock F: number of rows\n" @@ -711,18 +715,20 @@ static int Encode(Tcl_Interp *interp, int objc, "-cols", "-dmre", "-dotsize", "-dotty", "-eci", "-fg", "-format", "-fullmultibyte", "-gs1nocheck", "-gs1parens", "-gssep", "-guarddescent", "-height", "-init", "-mask", "-mode", - "-nobackground", "-notext", "-primary", "-reverse", "-rotate", - "-rows", "-scale", "-scmvv", "-secure", "-separator", "-smalltext", - "-square", "-to", "-vers", "-vwhitesp", "-werror", "-whitesp", + "-nobackground", "-noquietzones", "-notext", "-primary", "-quietzones", + "-reverse", "-rotate", "-rows", "-scale", "-scmvv", + "-secure", "-separator", "-smalltext", "-square", + "-to", "-vers", "-vwhitesp", "-werror", "-whitesp", NULL}; enum iOption { iAddonGap, iBarcode, iBG, iBind, iBold, iBorder, iBox, iCols, iDMRE, iDotSize, iDotty, iECI, iFG, iFormat, iFullMultiByte, iGS1NoCheck, iGS1Parens, iGSSep, iGuardDescent, iHeight, iInit, iMask, iMode, - iNoBackground, iNoText, iPrimary, iReverse, iRotate, - iRows, iScale, iSCMvv, iSecure, iSeparator, iSmallText, - iSquare, iTo, iVers, iVWhiteSp, iWError, iWhiteSp + iNoBackground, iNoQuietZones, iNoText, iPrimary, iQuietZones, + iReverse, iRotate, iRows, iScale, iSCMvv, + iSecure, iSeparator, iSmallText, iSquare, + iTo, iVers, iVWhiteSp, iWError, iWhiteSp }; int optionIndex; int intValue; @@ -749,7 +755,9 @@ static int Encode(Tcl_Interp *interp, int objc, case iGSSep: case iInit: case iNoBackground: + case iNoQuietZones: case iNoText: + case iQuietZones: case iSmallText: case iSquare: case iFullMultiByte: @@ -939,9 +947,23 @@ static int Encode(Tcl_Interp *interp, int objc, strcpy(my_symbol->bgcolour, "ffffff00"); } break; + case iNoQuietZones: + if (intValue) { + my_symbol->output_options |= BARCODE_NO_QUIET_ZONES; + } else { + my_symbol->output_options &= ~BARCODE_NO_QUIET_ZONES; + } + break; case iNoText: my_symbol->show_hrt = (intValue?0:1); break; + case iQuietZones: + if (intValue) { + my_symbol->output_options |= BARCODE_QUIET_ZONES; + } else { + my_symbol->output_options &= ~BARCODE_QUIET_ZONES; + } + break; case iSquare: /* DM_SQUARE overwrites DM_DMRE */ if (intValue) diff --git a/docs/manual.txt b/docs/manual.txt index 7cd80353..63384958 100644 --- a/docs/manual.txt +++ b/docs/manual.txt @@ -415,6 +415,14 @@ Horizontal and vertical whitespace can of course be used together: zint -b DATAMATRIX --whitesp 1 --vwhitesp 1 -d "This Text" +A --quietzones option is also available which adds quiet zones compliant with +the symbology's specification. This is in addition to any whitespace specified +with the --whitesp or --vwhitesp switches. + +Note that Codablock-F, Code 16K, Code 49, ITF-14, EAN-13, EAN-8, EAN-5, EAN-2, +ISBN, UPC-A and UPC-E have compliant quiet zones added by default. This can be +disabled with the option --noquietzones. + 4.6 Adding boundary bars and boxes ---------------------------------- Zint allows the symbol to be bound with 'boundary bars' (also known as 'bearer @@ -432,7 +440,7 @@ gives a box with a width 10 times the X-dimension of the symbol. Note that when specifying a box, horizontal whitespace is usually required in order to create a quiet zone between the barcode and the sides of the box. -Codablock-F, Code 16k and Code 49 always have boundary bars, and default to +Codablock-F, Code 16K and Code 49 always have boundary bars, and default to particular horizontal whitespace values. Special considerations apply to ITF-14 - see the specific section 6.1.2.6 for that symbology. @@ -580,7 +588,7 @@ GS1 data can be encoded in a number of symbologies. Application Identifiers should be enclosed in [square brackets] followed by the data to be encoded (see 6.1.11.3). To encode GS1 data use the --gs1 option. GS1 mode is assumed (and doesn't need to be set) for GS1-128, EAN-14, DataBar and Composite symbologies -but is also available for Aztec Code, Code 16k, Code 49, Code One, Data Matrix, +but is also available for Aztec Code, Code 16K, Code 49, Code One, Data Matrix, DotCode, QR Code and Ultracode. HIBC data may also be encoded in the symbologies Code 39, Code 128, Codablock-F, @@ -1407,11 +1415,16 @@ BARCODE_DOTTY_MODE | Plot a matrix symbol using dots rather than squares. GS1_GS_SEPARATOR | Use GS instead of FNC1 as GS1 separator (Data Matrix) OUT_BUFFER_INTERMEDIATE | Return the bitmap buffer as ASCII values instead of | separate colour channels (OUT_BUFFER only). +BARCODE_QUIET_ZONES | Add compliant quiet zones (additional to any + | specified whitespace). [3] +BARCODE_NO_QUIET_ZONES | Disable quiet zones, notably those with defaults. [3] -------------------------------------------------------------------------------- -[2] This flag is always set for Codablock-F, Code 16k and Code 49. Special +[2] This flag is always set for Codablock-F, Code 16K and Code 49. Special considerations apply to ITF-14 - see the specific section 6.1.2.6 for that symbology. +[3] Codablock-F, Code 16K, Code 49, ITF-14, EAN-2 to EAN-13, ISBN, +UPC-A and UPC-E have compliant quiet zones added by default. 5.10 Setting the Input Mode --------------------------- @@ -2012,11 +2025,11 @@ option_2. The height (number of rows) can be set using the --rows= option at the command line or by setting option_1. Zint does not support encoding of GS1 data in Codablock-F symbols. -6.2.3 Code 16k (EN 12323) +6.2.3 Code 16K (EN 12323) ------------------------- -Code 16k uses a Code 128 based system which can stack up to 16 rows in a block. +Code 16K uses a Code 128 based system which can stack up to 16 rows in a block. This gives a maximum data capacity of 77 characters or 154 numerical digits and -includes two modulo-107 check digits. Code 16k also supports extended ASCII +includes two modulo-107 check digits. Code 16K also supports extended ASCII character encoding in the same manner as Code 128. 6.2.4 PDF417 (ISO 15438) @@ -2079,7 +2092,7 @@ dimensional component to make a composite symbol. For symbols with a 2D component the number of columns must be at least 2. 6.2.10 Code 49 -------------- +-------------- Developed in 1987 at Intermec, Code 49 is a cross between UPC and Code 39. It is one of the earliest stacked symbologies and influenced the design of Code 16K a few years later. It supports full 7-bit ASCII input up to a maximum of 49 diff --git a/frontend/main.c b/frontend/main.c index 8b255205..c768d2bd 100644 --- a/frontend/main.c +++ b/frontend/main.c @@ -152,9 +152,11 @@ static void usage(void) { " --mirror Use batch data to determine filename\n" " --mode=NUMBER Set encoding mode (MaxiCode/Composite)\n" " --nobackground Remove background (EMF/EPS/GIF/PNG/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.png\n" " --primary=STRING Set structured 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)\n" @@ -803,8 +805,9 @@ int main(int argc, char **argv) { OPT_ECI, OPT_ESC, OPT_FG, OPT_FILETYPE, OPT_FONTSIZE, OPT_FULLMULTIBYTE, OPT_GS1, OPT_GS1NOCHECK, OPT_GS1PARENS, OPT_GSSEP, OPT_GUARDDESCENT, OPT_HEIGHT, OPT_INIT, OPT_MIRROR, OPT_MASK, OPT_MODE, - OPT_NOBACKGROUND, OPT_NOTEXT, OPT_PRIMARY, OPT_ROTATE, OPT_ROWS, OPT_SCALE, - OPT_SCMVV, OPT_SECURE, OPT_SEPARATOR, OPT_SMALL, OPT_SQUARE, OPT_VERBOSE, OPT_VERS, + OPT_NOBACKGROUND, OPT_NOQUIETZONES, OPT_NOTEXT, OPT_PRIMARY, OPT_QUIETZONES, + OPT_ROTATE, OPT_ROWS, OPT_SCALE, OPT_SCMVV, + OPT_SECURE, OPT_SEPARATOR, OPT_SMALL, OPT_SQUARE, OPT_VERBOSE, OPT_VERS, OPT_VWHITESP, OPT_WERROR, }; int option_index = 0; @@ -846,9 +849,11 @@ int main(int argc, char **argv) { {"mask", 1, NULL, OPT_MASK}, {"mode", 1, NULL, OPT_MODE}, {"nobackground", 0, NULL, OPT_NOBACKGROUND}, + {"noquietzones", 0, NULL, OPT_NOQUIETZONES}, {"notext", 0, NULL, OPT_NOTEXT}, {"output", 1, NULL, 'o'}, {"primary", 1, NULL, OPT_PRIMARY}, + {"quietzones", 0, NULL, OPT_QUIETZONES}, {"reverse", 0, NULL, 'r'}, {"rotate", 1, NULL, OPT_ROTATE}, {"rows", 1, NULL, OPT_ROWS}, @@ -1069,6 +1074,9 @@ int main(int argc, char **argv) { case OPT_NOBACKGROUND: strcpy(my_symbol->bgcolour, "ffffff00"); break; + case OPT_NOQUIETZONES: + my_symbol->output_options |= BARCODE_NO_QUIET_ZONES; + break; case OPT_NOTEXT: my_symbol->show_hrt = 0; break; @@ -1080,6 +1088,9 @@ int main(int argc, char **argv) { fflush(stderr); } break; + case OPT_QUIETZONES: + my_symbol->output_options |= BARCODE_QUIET_ZONES; + break; case OPT_ROTATE: /* Only certain inputs allowed */ if (!validate_int(optarg, &val)) { diff --git a/frontend/tests/test_args.c b/frontend/tests/test_args.c index 95471eec..678abd42 100644 --- a/frontend/tests/test_args.c +++ b/frontend/tests/test_args.c @@ -909,17 +909,19 @@ static void test_other_opts(int index, int debug) { /* 8*/ { BARCODE_CODE128, "1", -1, " --fontsize=", "10", "" }, /* 9*/ { BARCODE_CODE128, "1", -1, " --fontsize=", "101", "Warning 126: Font size out of range (0 to 100), ignoring" }, /* 10*/ { BARCODE_CODE128, "1", -1, " --nobackground", "", "" }, - /* 11*/ { BARCODE_CODE128, "1", -1, " --notext", "", "" }, - /* 12*/ { BARCODE_CODE128, "1", -1, " --reverse", "", "" }, - /* 13*/ { BARCODE_CODE128, "1", -1, " --werror", NULL, "" }, - /* 14*/ { 19, "1", -1, " --werror", NULL, "Error 207: Codabar 18 not supported" }, - /* 15*/ { BARCODE_GS1_128, "[01]12345678901231", -1, "", NULL, "" }, - /* 16*/ { BARCODE_GS1_128, "0112345678901231", -1, "", NULL, "Error 252: Data does not start with an AI" }, - /* 17*/ { BARCODE_GS1_128, "0112345678901231", -1, " --gs1nocheck", NULL, "Error 252: Data does not start with an AI" }, - /* 18*/ { BARCODE_GS1_128, "[00]376104250021234569", -1, "", NULL, "" }, - /* 19*/ { BARCODE_GS1_128, "[00]376104250021234568", -1, "", NULL, "Warning 261: AI (00) position 18: Bad checksum '8', expected '9'" }, - /* 20*/ { BARCODE_GS1_128, "[00]376104250021234568", -1, " --gs1nocheck", NULL, "" }, - /* 21*/ { BARCODE_GS1_128, "[00]376104250021234568", -1, " --werror", NULL, "Error 261: AI (00) position 18: Bad checksum '8', expected '9'" }, + /* 11*/ { BARCODE_CODE128, "1", -1, " --noquietzones", "", "" }, + /* 12*/ { BARCODE_CODE128, "1", -1, " --notext", "", "" }, + /* 13*/ { BARCODE_CODE128, "1", -1, " --quietzones", "", "" }, + /* 14*/ { BARCODE_CODE128, "1", -1, " --reverse", "", "" }, + /* 15*/ { BARCODE_CODE128, "1", -1, " --werror", NULL, "" }, + /* 16*/ { 19, "1", -1, " --werror", NULL, "Error 207: Codabar 18 not supported" }, + /* 17*/ { BARCODE_GS1_128, "[01]12345678901231", -1, "", NULL, "" }, + /* 18*/ { BARCODE_GS1_128, "0112345678901231", -1, "", NULL, "Error 252: Data does not start with an AI" }, + /* 19*/ { BARCODE_GS1_128, "0112345678901231", -1, " --gs1nocheck", NULL, "Error 252: Data does not start with an AI" }, + /* 20*/ { BARCODE_GS1_128, "[00]376104250021234569", -1, "", NULL, "" }, + /* 21*/ { BARCODE_GS1_128, "[00]376104250021234568", -1, "", NULL, "Warning 261: AI (00) position 18: Bad checksum '8', expected '9'" }, + /* 22*/ { BARCODE_GS1_128, "[00]376104250021234568", -1, " --gs1nocheck", NULL, "" }, + /* 23*/ { BARCODE_GS1_128, "[00]376104250021234568", -1, " --werror", NULL, "Error 261: AI (00) position 18: Bad checksum '8', expected '9'" }, }; int data_size = ARRAY_SIZE(data); int i; diff --git a/frontend_qt/CMakeLists.txt b/frontend_qt/CMakeLists.txt index 8cf9571e..45b8160b 100644 --- a/frontend_qt/CMakeLists.txt +++ b/frontend_qt/CMakeLists.txt @@ -16,11 +16,11 @@ else() qt5_wrap_ui(zint-qt_SRCS mainWindow.ui extData.ui extSequence.ui extExport.ui) endif() -# grpAztec.ui grpC39.ui grpCodablockF.ui grpDotCode.ui grpMicroPDF.ui grpRMQR.ui -# grpC11.ui grpC49.ui grpCodeOne.ui grpGrid.ui grpMQR.ui grpUltra.ui -# grpC128.ui grpC93.ui grpDAFT.ui grpHX.ui grpMSICheck.ui grpUPCA.ui -# grpC16k.ui grpChannel.ui grpDBExtend.ui grpLOGMARS.ui grpPDF417.ui grpUPCEAN.ui -# grpC25.ui grpCodabar.ui grpDM.ui grpMaxicode.ui grpQR.ui grpVIN.ui +# grpAztec.ui grpC39.ui grpCodablockF.ui grpDotCode.ui grpMaxicode.ui grpQR.ui grpVIN.ui +# grpC11.ui grpC49.ui grpCodeOne.ui grpGrid.ui grpMicroPDF.ui grpRMQR.ui +# grpC128.ui grpC93.ui grpDAFT.ui grpHX.ui grpMQR.ui grpUltra.ui +# grpC16k.ui grpChannel.ui grpDBExtend.ui grpITF14.ui grpMSICheck.ui grpUPCA.ui +# grpC25.ui grpCodabar.ui grpDM.ui grpLOGMARS.ui grpPDF417.ui grpUPCEAN.ui add_executable(${PROJECT_NAME} ${zint-qt_SRCS} resources.qrc) diff --git a/frontend_qt/grpC16k.ui b/frontend_qt/grpC16k.ui index b74f400a..4a282d3d 100644 --- a/frontend_qt/grpC16k.ui +++ b/frontend_qt/grpC16k.ui @@ -27,6 +27,9 @@ &Row Separator Height: + + Height in X-dimensions of horizontal lines separating rows + cmbC16kRowSepHeight @@ -34,6 +37,9 @@ + + Height in X-dimensions of horizontal lines separating rows + 1 X (default) @@ -72,6 +78,9 @@ S&tandard Mode + + Process data as normal + true @@ -82,11 +91,28 @@ GS&1 Data Mode + + Process data as GS1 General Specifications data, +formatted with Application Identifiers (AIs) + + + + + No Quiet &Zones + + + false + + + Do not add quiet zones to whitespace + + + diff --git a/frontend_qt/grpC49.ui b/frontend_qt/grpC49.ui index 80152dfa..bdab46fb 100644 --- a/frontend_qt/grpC49.ui +++ b/frontend_qt/grpC49.ui @@ -27,6 +27,9 @@ &Row Separator Height: + + Height in X-dimensions of horizontal lines separating rows + cmbC49RowSepHeight @@ -34,6 +37,9 @@ + + Height in X-dimensions of horizontal lines separating rows + 1 X (default) @@ -72,6 +78,9 @@ S&tandard Mode + + Process data as normal + true @@ -82,11 +91,28 @@ GS&1 Data Mode + + Process data as GS1 General Specifications data, +formatted with Application Identifiers (AIs) + + + + + No Quiet &Zones + + + false + + + Do not add quiet zones to whitespace + + + diff --git a/frontend_qt/grpCodablockF.ui b/frontend_qt/grpCodablockF.ui index 7259c1a8..aee8a903 100644 --- a/frontend_qt/grpCodablockF.ui +++ b/frontend_qt/grpCodablockF.ui @@ -27,6 +27,9 @@ Symbol &Width (Columns): + + The number of data characters in a row + cmbCbfWidth @@ -37,6 +40,9 @@ 21 + + The number of data characters in a row + Automatic @@ -344,6 +350,9 @@ Symbol &Height (Rows): + + The number of rows + cmbCbfHeight @@ -354,6 +363,9 @@ 21 + + The number of rows + Automatic @@ -586,6 +598,9 @@ &Row Separator Height: + + Height in X-dimensions of horizontal lines separating rows + cmbCbfRowSepHeight @@ -593,6 +608,9 @@ + + Height in X-dimensions of horizontal lines separating rows + 1 X (default) @@ -631,6 +649,9 @@ S&tandard Mode + + Process data as normal + true @@ -641,11 +662,30 @@ H&IBC Codablock-F + + Process data as a Health Industry Barcode (HIBC) +Labeler Identification Code (LIC) +For Provider Applications Standard (PAS), +preface the data with a slash "/" + + + + + No Quiet &Zones + + + false + + + Do not add quiet zones to whitespace + + + diff --git a/frontend_qt/grpITF14.ui b/frontend_qt/grpITF14.ui new file mode 100644 index 00000000..ec53b2ea --- /dev/null +++ b/frontend_qt/grpITF14.ui @@ -0,0 +1,53 @@ + + + grpITF14 + + + + 0 + 0 + 186 + 123 + + + + + 600 + 16777215 + + + + Form + + + + + + No Quiet &Zones + + + false + + + Do not add quiet zones to whitespace + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + diff --git a/frontend_qt/grpUPCA.ui b/frontend_qt/grpUPCA.ui index 153b0dcb..4d238b14 100644 --- a/frontend_qt/grpUPCA.ui +++ b/frontend_qt/grpUPCA.ui @@ -124,6 +124,19 @@ Default 5 + + + + No Quiet &Zones + + + false + + + Do not add quiet zones to whitespace + + + diff --git a/frontend_qt/grpUPCEAN.ui b/frontend_qt/grpUPCEAN.ui index 3081196b..afdf28ca 100644 --- a/frontend_qt/grpUPCEAN.ui +++ b/frontend_qt/grpUPCEAN.ui @@ -134,6 +134,19 @@ Default 5 + + + + No Quiet &Zones + + + false + + + Do not add quiet zones to whitespace + + + diff --git a/frontend_qt/mainWindow.ui b/frontend_qt/mainWindow.ui index 00c6a5c8..0b2a0091 100644 --- a/frontend_qt/mainWindow.ui +++ b/frontend_qt/mainWindow.ui @@ -1023,7 +1023,21 @@ in X-dimensions - + + + + Add compliant quiet zones to whitespace +(ignored if disabled) + + + Quiet &Zones + + + false + + + + Rotate symbol by degrees @@ -1039,7 +1053,7 @@ in X-dimensions - + Rotate symbol by degrees @@ -1066,7 +1080,7 @@ in X-dimensions - + Use dots instead of squares for matrix symbols @@ -1100,7 +1114,7 @@ in X-dimensions - + false diff --git a/frontend_qt/mainwindow.cpp b/frontend_qt/mainwindow.cpp index 1337eb78..8fdfdb83 100644 --- a/frontend_qt/mainwindow.cpp +++ b/frontend_qt/mainwindow.cpp @@ -179,9 +179,10 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags fl) btype->setCurrentIndex(settings.value("studio/appearance/border_type", 0).toInt()); cmbFontSetting->setCurrentIndex(settings.value("studio/appearance/font_setting", 0).toInt()); chkHRTShow->setChecked(settings.value("studio/appearance/chk_hrt_show", 1).toInt() ? true : false); - chkCMYK->setChecked(settings.value("studio/appearance/cmyk", 0).toInt() ? true : false); + chkCMYK->setChecked(settings.value("studio/appearance/chk_cmyk", 0).toInt() ? true : false); + chkQuietZones->setChecked(settings.value("studio/appearance/chk_quiet_zones", 0).toInt() ? true : false); cmbRotate->setCurrentIndex(settings.value("studio/appearance/rotate", 0).toInt()); - chkDotty->setChecked(settings.value("studio/appearance/dotty", 0).toInt() ? true : false); + chkDotty->setChecked(settings.value("studio/appearance/chk_dotty", 0).toInt() ? true : false); spnDotSize->setValue(settings.value("studio/appearance/dot_size", 4.0 / 5.0).toFloat()); change_options(); @@ -222,6 +223,7 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags fl) connect(chkHRTShow, SIGNAL(stateChanged( int )), SLOT(HRTShow_ui_set())); connect(chkHRTShow, SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(chkCMYK, SIGNAL(stateChanged( int )), SLOT(change_cmyk())); + connect(chkQuietZones, SIGNAL(stateChanged( int )), SLOT(update_preview())); connect(cmbRotate, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(chkDotty, SIGNAL(stateChanged( int )), SLOT(dotty_ui_set())); connect(chkDotty, SIGNAL(stateChanged( int )), SLOT(update_preview())); @@ -273,6 +275,7 @@ MainWindow::~MainWindow() settings.setValue("studio/appearance/font_setting", cmbFontSetting->currentIndex()); settings.setValue("studio/appearance/chk_hrt_show", chkHRTShow->isChecked() ? 1 : 0); settings.setValue("studio/appearance/chk_cmyk", chkCMYK->isChecked() ? 1 : 0); + settings.setValue("studio/appearance/chk_quiet_zones", chkQuietZones->isChecked() ? 1 : 0); settings.setValue("studio/appearance/rotate", cmbRotate->currentIndex()); settings.setValue("studio/appearance/chk_dotty", chkDotty->isChecked() ? 1 : 0); settings.setValue("studio/appearance/dot_size", spnDotSize->value()); @@ -770,6 +773,7 @@ void MainWindow::change_options() btype->setItemText(0, tr("Default (bind)")); connect(m_optionWidget->findChild("cmbC16kRowSepHeight"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC16kStand"), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(m_optionWidget->findChild("chkC16kNoQuietZones"), SIGNAL(clicked( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_CODABAR) { QFile file(":/grpCodabar.ui"); @@ -793,6 +797,7 @@ void MainWindow::change_options() connect(m_optionWidget->findChild("cmbCbfRowSepHeight"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radCbfStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); connect(m_optionWidget->findChild("radCbfHIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(m_optionWidget->findChild("chkCbfNoQuietZones"), SIGNAL(clicked( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_DAFT) { QFile file(":/grpDAFT.ui"); @@ -821,6 +826,13 @@ void MainWindow::change_options() } else if (symbology == BARCODE_ITF14) { btype->setItemText(0, tr("Default (box, non-zero width)")); + QFile file(":/grpITF14.ui"); + if (file.open(QIODevice::ReadOnly)) { + m_optionWidget = uiload.load(&file); + file.close(); + tabMain->insertTab(1, m_optionWidget, tr("ITF-1&4")); + connect(m_optionWidget->findChild("chkITF14NoQuietZones"), SIGNAL(clicked( bool )), SLOT(update_preview())); + } } else if (symbology == BARCODE_QRCODE) { QFile file(":/grpQR.ui"); @@ -932,6 +944,7 @@ void MainWindow::change_options() btype->setItemText(0, tr("Default (bind)")); connect(m_optionWidget->findChild("cmbC49RowSepHeight"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("radC49GS1"), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(m_optionWidget->findChild("chkC49NoQuietZones"), SIGNAL(clicked( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_CODE93) { QFile file(":/grpC93.ui"); @@ -977,6 +990,7 @@ void MainWindow::change_options() } connect(m_optionWidget->findChild("cmbUPCAAddonGap"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("spnUPCAGuardDescent"), SIGNAL(valueChanged( double )), SLOT(update_preview())); + connect(m_optionWidget->findChild("chkUPCANoQuietZones"), SIGNAL(clicked( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_EANX || symbology == BARCODE_EANX_CHK || symbology == BARCODE_EANX_CC || symbology == BARCODE_UPCE || symbology == BARCODE_UPCE_CHK || symbology == BARCODE_UPCE_CC @@ -999,6 +1013,7 @@ void MainWindow::change_options() } connect(m_optionWidget->findChild("cmbUPCEANAddonGap"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(m_optionWidget->findChild("spnUPCEANGuardDescent"), SIGNAL(valueChanged( double )), SLOT(update_preview())); + connect(m_optionWidget->findChild("chkUPCEANNoQuietZones"), SIGNAL(clicked( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_VIN) { QFile file(":/grpVIN.ui"); @@ -1034,6 +1049,7 @@ void MainWindow::change_options() chkRInit->setEnabled(m_bc.bc.supportsReaderInit(symbology)); /* Ditto (HIBC and GS1) */ chkAutoHeight->setEnabled(!m_bc.bc.isFixedRatio(symbology)); chkHRTShow->setEnabled(m_bc.bc.hasHRT(symbology)); + chkQuietZones->setEnabled(!m_bc.bc.hasDefaultQuietZones(symbology)); chkDotty->setEnabled(m_bc.bc.isDotty(symbology)); load_sub_settings(settings, symbology); @@ -1218,6 +1234,7 @@ void MainWindow::update_preview() m_bc.bc.setInputMode(m_bc.bc.inputMode() | ESCAPE_MODE); } m_bc.bc.setGSSep(false); + m_bc.bc.setNoQuietZones(false); m_bc.bc.setDotSize(0.4f / 0.5f); switch (symbology) { @@ -1242,36 +1259,48 @@ void MainWindow::update_preview() break; case BARCODE_EANX: - if(chkComposite->isChecked()) + if (chkComposite->isChecked()) m_bc.bc.setSymbol(BARCODE_EANX_CC); else m_bc.bc.setSymbol(BARCODE_EANX); upcean_addon_gap(m_optionWidget->findChild("cmbUPCEANAddonGap"), m_optionWidget->findChild("lblUPCEANAddonGap"), 7 /*base*/); upcean_guard_descent(m_optionWidget->findChild("spnUPCEANGuardDescent"), m_optionWidget->findChild("lblUPCEANGuardDescent")); + if (get_checkbox_val("chkUPCEANNoQuietZones")) { + m_bc.bc.setNoQuietZones(true); + } break; case BARCODE_ISBNX: m_bc.bc.setSymbol(symbology); upcean_addon_gap(m_optionWidget->findChild("cmbUPCEANAddonGap"), m_optionWidget->findChild("lblUPCEANAddonGap"), 7 /*base*/); upcean_guard_descent(m_optionWidget->findChild("spnUPCEANGuardDescent"), m_optionWidget->findChild("lblUPCEANGuardDescent")); + if (get_checkbox_val("chkUPCEANNoQuietZones")) { + m_bc.bc.setNoQuietZones(true); + } break; case BARCODE_UPCA: - if(chkComposite->isChecked()) + if (chkComposite->isChecked()) m_bc.bc.setSymbol(BARCODE_UPCA_CC); else m_bc.bc.setSymbol(BARCODE_UPCA); upcean_addon_gap(m_optionWidget->findChild("cmbUPCAAddonGap"), m_optionWidget->findChild("lblUPCAAddonGap"), 9 /*base*/); upcean_guard_descent(m_optionWidget->findChild("spnUPCAGuardDescent"), m_optionWidget->findChild("lblUPCAGuardDescent")); + if (get_checkbox_val("chkUPCANoQuietZones")) { + m_bc.bc.setNoQuietZones(true); + } break; case BARCODE_UPCE: - if(chkComposite->isChecked()) + if (chkComposite->isChecked()) m_bc.bc.setSymbol(BARCODE_UPCE_CC); else m_bc.bc.setSymbol(BARCODE_UPCE); upcean_addon_gap(m_optionWidget->findChild("cmbUPCEANAddonGap"), m_optionWidget->findChild("lblUPCEANAddonGap"), 7 /*base*/); upcean_guard_descent(m_optionWidget->findChild("spnUPCEANGuardDescent"), m_optionWidget->findChild("lblUPCEANGuardDescent")); + if (get_checkbox_val("chkUPCEANNoQuietZones")) { + m_bc.bc.setNoQuietZones(true); + } break; case BARCODE_DBAR_OMN: @@ -1426,11 +1455,14 @@ void MainWindow::update_preview() if (item_val) { m_bc.bc.setOption3(item_val + 1); // Zero-based } + if (get_checkbox_val("chkC16kNoQuietZones")) { + m_bc.bc.setNoQuietZones(true); + } break; case BARCODE_CODABAR: m_bc.bc.setSymbol(BARCODE_CODABAR); - if (m_optionWidget->findChild("chkCodabarCheck")->isChecked()) { + if (get_checkbox_val("chkCodabarCheck")) { m_bc.bc.setOption2(1); } break; @@ -1455,6 +1487,9 @@ void MainWindow::update_preview() if (item_val) { m_bc.bc.setOption3(item_val + 1); // Zero-based } + if (get_checkbox_val("chkCbfNoQuietZones")) { + m_bc.bc.setNoQuietZones(true); + } break; case BARCODE_DAFT: @@ -1501,6 +1536,13 @@ void MainWindow::update_preview() } break; + case BARCODE_ITF14: + m_bc.bc.setSymbol(BARCODE_ITF14); + if (get_checkbox_val("chkITF14NoQuietZones")) { + m_bc.bc.setNoQuietZones(true); + } + break; + case BARCODE_QRCODE: if(m_optionWidget->findChild("radQRHIBC")->isChecked()) m_bc.bc.setSymbol(BARCODE_HIBC_QR); @@ -1624,6 +1666,9 @@ void MainWindow::update_preview() if (item_val) { m_bc.bc.setOption3(item_val + 1); // Zero-based } + if (get_checkbox_val("chkC49NoQuietZones")) { + m_bc.bc.setNoQuietZones(true); + } break; case BARCODE_CODE93: @@ -1698,6 +1743,7 @@ void MainWindow::update_preview() m_bc.bc.setBorderWidth(bwidth->value()); m_bc.bc.setWhitespace(spnWhitespace->value()); m_bc.bc.setVWhitespace(spnVWhitespace->value()); + m_bc.bc.setQuietZones(chkQuietZones->isEnabled() && chkQuietZones->isChecked()); m_bc.bc.setFontSetting(cmbFontSetting->currentIndex()); m_bc.bc.setRotateAngle(cmbRotate->currentIndex()); m_bc.bc.setDotty(chkDotty->isEnabled() && chkDotty->isChecked()); @@ -2015,7 +2061,8 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology) { settings.setValue(QString("studio/bc/%1/appearance/font_setting").arg(name), cmbFontSetting->currentIndex()); settings.setValue(QString("studio/bc/%1/appearance/chk_hrt_show").arg(name), chkHRTShow->isChecked() ? 1 : 0); } - settings.setValue(QString("studio/bc/%1/appearance/cmyk").arg(name), chkCMYK->isChecked() ? 1 : 0); + settings.setValue(QString("studio/bc/%1/appearance/chk_cmyk").arg(name), chkCMYK->isChecked() ? 1 : 0); + settings.setValue(QString("studio/bc/%1/appearance/chk_quietzones").arg(name), chkQuietZones->isChecked() ? 1 : 0); settings.setValue(QString("studio/bc/%1/appearance/rotate").arg(name), cmbRotate->currentIndex()); if (symbology == BARCODE_DOTCODE || chkDotty->isEnabled()) { settings.setValue(QString("studio/bc/%1/appearance/chk_dotty").arg(name), chkDotty->isChecked() ? 1 : 0); @@ -2109,6 +2156,7 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology) { case BARCODE_CODE16K: settings.setValue("studio/bc/code16k/row_sep_height", get_combobox_index("cmbC16kRowSepHeight")); settings.setValue("studio/bc/code16k/encoding_mode", get_button_group_index(QStringList() << "radC16kStand" << "radC16kGS1")); + settings.setValue("studio/bc/code16k/chk_no_quiet_zones", get_checkbox_val("chkC16kNoQuietZones")); break; case BARCODE_CODABAR: @@ -2121,6 +2169,7 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology) { settings.setValue("studio/bc/codablockf/height", get_combobox_index("cmbCbfHeight")); settings.setValue("studio/bc/codablockf/row_sep_height", get_combobox_index("cmbCbfRowSepHeight")); settings.setValue("studio/bc/codablockf/encoding_mode", get_button_group_index(QStringList() << "radCbfStand" << "radCbfHIBC")); + settings.setValue("studio/bc/codablockf/chk_no_quiet_zones", get_checkbox_val("chkCbfNoQuietZones")); break; case BARCODE_DAFT: @@ -2136,6 +2185,10 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology) { settings.setValue("studio/bc/datamatrix/chk_gs_sep", get_checkbox_val("chkDMGSSep")); break; + case BARCODE_ITF14: + settings.setValue("studio/bc/itf14/chk_no_quiet_zones", get_checkbox_val("chkITF14NoQuietZones")); + break; + case BARCODE_QRCODE: case BARCODE_HIBC_QR: settings.setValue("studio/bc/qrcode/size", get_combobox_index("cmbQRSize")); @@ -2189,6 +2242,7 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology) { case BARCODE_CODE49: settings.setValue("studio/bc/code49/row_sep_height", get_combobox_index("cmbC49RowSepHeight")); settings.setValue("studio/bc/code49/encoding_mode", get_button_group_index(QStringList() << "radC49Stand" << "radC49GS1")); + settings.setValue("studio/bc/code49/chk_no_quiet_zones", get_checkbox_val("chkC49NoQuietZones")); break; case BARCODE_CODE93: @@ -2211,6 +2265,7 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology) { case BARCODE_UPCA_CC: settings.setValue("studio/bc/upca/addongap", get_combobox_index("cmbUPCAAddonGap")); settings.setValue("studio/bc/upca/guard_descent", QString::number(get_doublespinbox_val("spnUPCAGuardDescent"), 'f', 3 /*precision*/)); + settings.setValue("studio/bc/upca/chk_no_quiet_zones", get_checkbox_val("chkUPCANoQuietZones")); break; case BARCODE_EANX: @@ -2218,6 +2273,7 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology) { case BARCODE_EANX_CC: settings.setValue("studio/bc/eanx/addongap", get_combobox_index("cmbUPCEANAddonGap")); settings.setValue("studio/bc/eanx/guard_descent", QString::number(get_doublespinbox_val("spnUPCEANGuardDescent"), 'f', 3 /*precision*/)); + settings.setValue("studio/bc/eanx/chk_no_quiet_zones", get_checkbox_val("chkUPCEANNoQuietZones")); break; case BARCODE_UPCE: @@ -2225,11 +2281,13 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology) { case BARCODE_UPCE_CC: settings.setValue("studio/bc/upce/addongap", get_combobox_index("cmbUPCEANAddonGap")); settings.setValue("studio/bc/upce/guard_descent", QString::number(get_doublespinbox_val("spnUPCEANGuardDescent"), 'f', 3 /*precision*/)); + settings.setValue("studio/bc/upce/chk_no_quiet_zones", get_checkbox_val("chkUPCEANNoQuietZones")); break; case BARCODE_ISBNX: settings.setValue("studio/bc/isnbx/addongap", get_combobox_index("cmbUPCEANAddonGap")); settings.setValue("studio/bc/isnbx/guard_descent", QString::number(get_doublespinbox_val("spnUPCEANGuardDescent"), 'f', 3 /*precision*/)); + settings.setValue("studio/bc/isnbx/chk_no_quiet_zones", get_checkbox_val("chkUPCEANNoQuietZones")); break; case BARCODE_VIN: @@ -2373,6 +2431,7 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology) { case BARCODE_CODE16K: set_combobox_from_setting(settings, "studio/bc/code16k/row_sep_height", "cmbC16kRowSepHeight"); set_radiobutton_from_setting(settings, "studio/bc/code16k/encoding_mode", QStringList() << "radC16kStand" << "radC16kGS1"); + set_checkbox_from_setting(settings, "studio/bc/code16k/chk_no_quiet_zones", "chkC16kNoQuietZones"); break; case BARCODE_CODABAR: @@ -2385,6 +2444,7 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology) { set_combobox_from_setting(settings, "studio/bc/codablockf/height", "cmbCbfHeight"); set_combobox_from_setting(settings, "studio/bc/codablockf/row_sep_height", "cmbCbfRowSepHeight"); set_radiobutton_from_setting(settings, "studio/bc/codablockf/encoding_mode", QStringList() << "radCbfStand" << "radCbfHIBC"); + set_checkbox_from_setting(settings, "studio/bc/codablockf/chk_no_quiet_zones", "chkCbfNoQuietZones"); break; case BARCODE_DAFT: @@ -2400,6 +2460,10 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology) { set_checkbox_from_setting(settings, "studio/bc/datamatrix/chk_gs_sep", "chkDMGSSep"); break; + case BARCODE_ITF14: + set_checkbox_from_setting(settings, "studio/bc/itf14/chk_no_quiet_zones", "chkITF14NoQuietZones"); + break; + case BARCODE_QRCODE: case BARCODE_HIBC_QR: set_combobox_from_setting(settings, "studio/bc/qrcode/size", "cmbQRSize"); @@ -2453,6 +2517,7 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology) { case BARCODE_CODE49: set_combobox_from_setting(settings, "studio/bc/code49/row_sep_height", "cmbC49RowSepHeight"); set_radiobutton_from_setting(settings, "studio/bc/code49/encoding_mode", QStringList() << "radC49Stand" << "radC49GS1"); + set_checkbox_from_setting(settings, "studio/bc/code49/chk_no_quiet_zones", "chkC49NoQuietZones"); break; case BARCODE_CODE93: @@ -2474,6 +2539,7 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology) { case BARCODE_UPCA_CC: set_combobox_from_setting(settings, "studio/bc/upca/addongap", "cmbUPCAAddonGap"); set_doublespinbox_from_setting(settings, "studio/bc/upca/guard_descent", "spnUPCAGuardDescent", 5.0f); + set_checkbox_from_setting(settings, "studio/bc/upca/chk_no_quiet_zones", "chkUPCANoQuietZones"); break; case BARCODE_EANX: @@ -2481,6 +2547,7 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology) { case BARCODE_EANX_CC: set_combobox_from_setting(settings, "studio/bc/eanx/addongap", "cmbUPCEANAddonGap"); set_doublespinbox_from_setting(settings, "studio/bc/eanx/guard_descent", "spnUPCEANGuardDescent", 5.0f); + set_checkbox_from_setting(settings, "studio/bc/eanx/chk_no_quiet_zones", "chkUPCEANNoQuietZones"); break; case BARCODE_UPCE: @@ -2488,11 +2555,13 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology) { case BARCODE_UPCE_CC: set_combobox_from_setting(settings, "studio/bc/upce/addongap", "cmbUPCEANAddonGap"); set_doublespinbox_from_setting(settings, "studio/bc/upce/guard_descent", "spnUPCEANGuardDescent", 5.0f); + set_checkbox_from_setting(settings, "studio/bc/upce/chk_no_quiet_zones", "chkUPCEANNoQuietZones"); break; case BARCODE_ISBNX: set_combobox_from_setting(settings, "studio/bc/isbnx/addongap", "cmbUPCEANAddonGap"); set_doublespinbox_from_setting(settings, "studio/bc/isbnx/guard_descent", "spnUPCEANGuardDescent", 5.0f); + set_checkbox_from_setting(settings, "studio/bc/isbnx/chk_no_quiet_zones", "chkUPCEANNoQuietZones"); break; case BARCODE_VIN: diff --git a/frontend_qt/resources.qrc b/frontend_qt/resources.qrc index 1e8527f3..039cd02b 100644 --- a/frontend_qt/resources.qrc +++ b/frontend_qt/resources.qrc @@ -18,6 +18,7 @@ grpDotCode.ui grpGrid.ui grpHX.ui + grpITF14.ui grpLOGMARS.ui grpMaxicode.ui grpMicroPDF.ui