From 72eac41c3425c4b1c93acc7bddd953f69808d7a6 Mon Sep 17 00:00:00 2001 From: gitlost Date: Sat, 9 Oct 2021 00:13:39 +0100 Subject: [PATCH] Add compliant height, using ZINT_COMPLIANT_HEIGHT flag for back-compatibility Rename barcode funcs to same as BARCODE_XXX name library: barcode funcs array for dispatch, used for ZBarcode_ValidID() also general: change is_sane() comparison to nonzero from ZINT_ERROR_INVALID_OPTION MAILMARK: fuller error messages CODABAR: add option to show check character in HRT zint.h: use 0xNNNN for OR-able defines GUI: add guard descent height reset button, add Zint version to window title, static get_zint_version() method, use QStringLiteral (QSL shorthand), use SIGNAL(toggled()), add errtxt "popup" and status bar, add icons, add saveAs shortcut, add main menu, context menus and actions, add help, reset_view() -> reset_colours(), add copy to clipboard as EMF/GIF/PNG/TIF, lessen triggering of update_preview(), shorten names of getters/setters, simplify/shorten some update_preview() logic in switch, CODEONE disable structapp for Version S qzint.cpp: add on_errored signal, add missing getters, add test --- ChangeLog | 7 +- backend/2of5.c | 85 +- backend/auspost.c | 58 +- backend/aztec.c | 2 +- backend/codablock.c | 41 +- backend/code.c | 175 +- backend/code1.c | 12 +- backend/code128.c | 82 +- backend/code16k.c | 23 +- backend/code49.c | 25 +- backend/common.c | 10 +- backend/composite.c | 63 +- backend/dmatrix.c | 6 +- backend/gridmtx.c | 2 +- backend/hanxin.c | 2 +- backend/imail.c | 34 +- backend/library.c | 380 ++-- backend/mailmark.c | 52 +- backend/medical.c | 127 +- backend/output.c | 2 +- backend/pdf417.c | 10 +- backend/plessey.c | 19 +- backend/postal.c | 234 +- backend/qr.c | 2 +- backend/rss.c | 182 +- backend/telepen.c | 79 +- backend/tests/test_auspost.c | 4 +- backend/tests/test_code1.c | 3 +- backend/tests/test_library.c | 96 +- backend/tests/test_medical.c | 11 +- backend/tests/test_raster.c | 1386 +++++++----- backend/tests/test_vector.c | 1154 ++++++---- backend/tests/testcommon.c | 1 + backend/ultra.c | 2 +- backend/upcean.c | 203 +- backend/vector.c | 2 - backend/zint.h | 97 +- backend_qt/CMakeLists.txt | 3 + backend_qt/qzint.cpp | 166 +- backend_qt/qzint.h | 52 +- backend_qt/tests/CMakeLists.txt | 22 + backend_qt/tests/test_qzint.cpp | 403 ++++ backend_tcl/zint.c | 21 +- docs/manual.txt | 10 +- frontend/main.c | 9 +- frontend/tests/test_args.c | 74 +- frontend_qt/barcodeitem.cpp | 2 +- frontend_qt/grpAztec.ui | 3 + frontend_qt/grpC11.ui | 12 + frontend_qt/grpC16k.ui | 6 +- frontend_qt/grpC25.ui | 79 +- frontend_qt/grpC39.ui | 72 +- frontend_qt/grpC49.ui | 6 +- frontend_qt/grpC93.ui | 3 +- frontend_qt/grpChannel.ui | 22 + frontend_qt/grpCodabar.ui | 46 +- frontend_qt/grpCodablockF.ui | 6 +- frontend_qt/grpCodeOne.ui | 20 +- frontend_qt/grpDAFT.ui | 2 +- frontend_qt/grpDotCode.ui | 3 - frontend_qt/grpGrid.ui | 6 +- frontend_qt/grpHX.ui | 24 +- frontend_qt/grpMQR.ui | 24 +- frontend_qt/grpMSICheck.ui | 3 +- frontend_qt/grpMicroPDF.ui | 2 +- frontend_qt/grpPDF417.ui | 5 +- frontend_qt/grpQR.ui | 6 +- frontend_qt/grpRMQR.ui | 3 +- frontend_qt/grpUPCA.ui | 95 +- frontend_qt/grpUPCEAN.ui | 97 +- frontend_qt/grpVIN.ui | 4 + frontend_qt/main.cpp | 2 + frontend_qt/mainWindow.ui | 109 +- frontend_qt/mainwindow.cpp | 3088 ++++++++++++++------------ frontend_qt/mainwindow.h | 130 +- frontend_qt/res/LICENSE_feathericons | 21 + frontend_qt/res/copy.svg | 1 + frontend_qt/res/download.svg | 1 + frontend_qt/res/help-circle.svg | 1 + frontend_qt/res/menu.svg | 1 + frontend_qt/res/x.svg | 1 + frontend_qt/resources.qrc | 5 + 82 files changed, 5570 insertions(+), 3774 deletions(-) create mode 100644 backend_qt/tests/CMakeLists.txt create mode 100644 backend_qt/tests/test_qzint.cpp create mode 100644 frontend_qt/res/LICENSE_feathericons create mode 100644 frontend_qt/res/copy.svg create mode 100644 frontend_qt/res/download.svg create mode 100644 frontend_qt/res/help-circle.svg create mode 100644 frontend_qt/res/menu.svg create mode 100644 frontend_qt/res/x.svg diff --git a/ChangeLog b/ChangeLog index ca4fe260..220dec46 100644 --- a/ChangeLog +++ b/ChangeLog @@ -27,6 +27,10 @@ Changes - Add Structured Append support for AZTEC, CODEONE, DATAMATRIX, DOTCODE, GRIDMATRIX, MAXICODE, MICROPDF417, PDF417, QRCODE, ULTRA - ULTRA: add revision 2 support (based on BWIPP 2021-09-28 update) +- Add compliant height +- GUI: add Menu, copy to clipboard EMF/GIF/PNG/TIF, errtxt bar and status bar, + icons (feathericons) +- CODABAR: add show check digit option Bugs ---- @@ -41,7 +45,8 @@ Bugs platform variation (#204 ARM-Cortex crash) - raster/vector.c: use new stripf() func to workaround gcc 32-bit float variations -- raster.c: Don't allow for text if scale < 1.0 +- raster.c: Don't add height offset for text if scale < 1.0 (as won't print) +- ISBNX: fix not returning error number (warning) correctly Version 2.10.0 2021-08-14 diff --git a/backend/2of5.c b/backend/2of5.c index cb817017..64d6aa84 100644 --- a/backend/2of5.c +++ b/backend/2of5.c @@ -64,7 +64,7 @@ static char check_digit(const unsigned int count) { static int c25_common(struct zint_symbol *symbol, const unsigned char source[], int length, const int max, const char *table[10], const char *start_stop[2], const int error_base) { - int i, error_number; + int i; char dest[512]; /* Largest destination 6 + (80 + 1) * 6 + 5 + 1 = 498 */ unsigned char temp[80 + 1 + 1]; /* Largest maximum 80 */ int have_checkdigit = symbol->option_2 == 1 || symbol->option_2 == 2; @@ -74,11 +74,10 @@ static int c25_common(struct zint_symbol *symbol, const unsigned char source[], sprintf(symbol->errtxt, "%d: Input too long (%d character maximum)", error_base, max); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { /* errtxt 302: 304: 306: 308: */ sprintf(symbol->errtxt, "%d: Invalid character in data (digits only)", error_base + 1); - return error_number; + return ZINT_ERROR_INVALID_DATA; } ustrcpy(temp, source); @@ -107,46 +106,44 @@ static int c25_common(struct zint_symbol *symbol, const unsigned char source[], symbol->text[length - 1] = '\0'; } - return error_number; + return 0; } /* Code 2 of 5 Standard (Code 2 of 5 Matrix) */ -INTERNAL int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int c25standard(struct zint_symbol *symbol, unsigned char source[], int length) { return c25_common(symbol, source, length, 80, C25MatrixTable, C25MatrixStartStop, 301); } /* Code 2 of 5 Industrial */ -INTERNAL int industrial_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int c25ind(struct zint_symbol *symbol, unsigned char source[], int length) { return c25_common(symbol, source, length, 45, C25IndustTable, C25IndustStartStop, 303); } /* Code 2 of 5 IATA */ -INTERNAL int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int c25iata(struct zint_symbol *symbol, unsigned char source[], int length) { return c25_common(symbol, source, length, 45, C25IndustTable, C25IataLogicStartStop, 305); } /* Code 2 of 5 Data Logic */ -INTERNAL int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int c25logic(struct zint_symbol *symbol, unsigned char source[], int length) { return c25_common(symbol, source, length, 80, C25MatrixTable, C25IataLogicStartStop, 307); } /* Common to Interleaved, ITF-14, DP Leitcode, DP Identcode */ static int c25inter_common(struct zint_symbol *symbol, unsigned char source[], int length, const int dont_set_height) { - int i, j, error_number; + int i, j, error_number = 0; char bars[7], spaces[7], mixed[14], dest[512]; /* 4 + (90 + 2) * 5 + 3 + 1 = 468 */ unsigned char temp[90 + 2 + 1]; int have_checkdigit = symbol->option_2 == 1 || symbol->option_2 == 2; - float height; if (length > 90) { strcpy(symbol->errtxt, "309: Input too long (90 character maximum)"); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "310: Invalid character in data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } temp[0] = '\0'; @@ -199,26 +196,29 @@ static int c25inter_common(struct zint_symbol *symbol, unsigned char source[], i } if (!dont_set_height) { -#ifdef COMPLIANT_HEIGHTS - /* ISO/IEC 16390:2007 Section 4.4 min height 5mm or 15% of symbol width whichever greater where - (P = character pairs, N = wide/narrow ratio = 3) width = (P(4N + 6) + N + 6)X = (length / 2) * 18 + 9 */ - height = (float) ((18.0 * (length / 2) + 9.0) * 0.15); - if (height < (float) (5.0 / 0.33)) { /* Taking X = 0.330mm from Annex D.3.1 (application specification) */ - height = (float) (5.0 / 0.33); + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* ISO/IEC 16390:2007 Section 4.4 min height 5mm or 15% of symbol width whichever greater where + (P = character pairs, N = wide/narrow ratio = 3) + width = (P(4N + 6) + N + 6)X = (length / 2) * 18 + 9 */ + /* Taking X = 0.330mm from Annex D.3.1 (application specification) */ + const float min_height_min = stripf(5.0f / 0.33f); + float min_height = stripf((18.0f * (length / 2) + 9.0f) * 0.15f); + if (min_height < min_height_min) { + min_height = min_height_min; + } + /* Using 50 as default as none recommended */ + error_number = set_height(symbol, min_height, min_height > 50.0f ? min_height : 50.0f, 0.0f, + 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); } - /* Using 50 as default as none recommended */ - error_number = set_height(symbol, height, height > 50.0f ? height : 50.0f, 0.0f, 0 /*no_errtxt*/); -#else - height = 50.0f; - (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); -#endif } return error_number; } /* Code 2 of 5 Interleaved ISO/IEC 16390:2007 */ -INTERNAL int interleaved_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int c25inter(struct zint_symbol *symbol, unsigned char source[], int length) { return c25inter_common(symbol, source, length, 0 /*dont_set_height*/); } @@ -232,10 +232,9 @@ INTERNAL int itf14(struct zint_symbol *symbol, unsigned char source[], int lengt return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "312: Invalid character in data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } /* Add leading zeros as required */ @@ -261,14 +260,14 @@ INTERNAL int itf14(struct zint_symbol *symbol, unsigned char source[], int lengt } if (error_number < ZINT_ERROR) { -#ifdef COMPLIANT_HEIGHTS - /* GS1 General Specifications 21.0.1 5.12.3.2 table 2, including footnote (**): (note bind/box additional to - symbol->height), same as GS1-128: "in case of further space constraints" - height 5.8mm / 1.016mm (X max) ~ 5.7; default 31.75mm / 0.495mm ~ 64.14 */ - warn_number = set_height(symbol, (float) (5.8 / 1.016), (float) (31.75 / 0.495), 0.0f, 0 /*no_errtxt*/); -#else - (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* GS1 General Specifications 21.0.1 5.12.3.2 table 2, including footnote (**): (note bind/box additional + to symbol->height), same as GS1-128: "in case of further space constraints" + height 5.8mm / 1.016mm (X max) ~ 5.7; default 31.75mm / 0.495mm ~ 64.14 */ + warn_number = set_height(symbol, stripf(5.8f / 1.016f), stripf(31.75f / 0.495f), 0.0f, 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); + } } return error_number ? error_number : warn_number; @@ -286,10 +285,9 @@ INTERNAL int dpleit(struct zint_symbol *symbol, unsigned char source[], int leng strcpy(symbol->errtxt, "313: Input wrong length (13 character maximum)"); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "314: Invalid character in data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } zeroes = 13 - length; @@ -325,10 +323,9 @@ INTERNAL int dpident(struct zint_symbol *symbol, unsigned char source[], int len strcpy(symbol->errtxt, "315: Input wrong length (11 character maximum)"); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "316: Invalid character in data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } zeroes = 11 - length; diff --git a/backend/auspost.c b/backend/auspost.c index 74ef8ee0..f9a52d3f 100644 --- a/backend/auspost.c +++ b/backend/auspost.c @@ -88,7 +88,7 @@ static void rs_error(char data_pattern[]) { INTERNAL int daft_set_height(struct zint_symbol *symbol, float min_height, float max_height); /* Handles Australia Posts's 4 State Codes */ -INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int auspost(struct zint_symbol *symbol, unsigned char source[], int length) { /* Customer Standard Barcode, Barcode 2 or Barcode 3 system determined automatically (i.e. the FCC doesn't need to be specified by the user) dependent on the length of the input string */ @@ -108,10 +108,9 @@ INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[], char localstr[30]; /* Check input immediately to catch nuls */ - error_number = is_sane(GDSET, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(GDSET, source, length) != 0) { strcpy(symbol->errtxt, "404: Invalid character in data (alphanumerics, space and \"#\" only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } strcpy(localstr, ""); @@ -127,23 +126,25 @@ INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[], break; case 16: strcpy(fcc, "59"); - error_number = is_sane(NEON, source, length); + if (is_sane(NEON, source, length) != 0) { + strcpy(symbol->errtxt, "402: Invalid character in data (digits only for length 16)"); + return ZINT_ERROR_INVALID_DATA; + } break; case 18: strcpy(fcc, "62"); break; case 23: strcpy(fcc, "62"); - error_number = is_sane(NEON, source, length); + if (is_sane(NEON, source, length) != 0) { + strcpy(symbol->errtxt, "406: Invalid character in data (digits only for length 23)"); + return ZINT_ERROR_INVALID_DATA; + } break; default: strcpy(symbol->errtxt, "401: Auspost input is wrong length (8, 13, 16, 18 or 23 characters only)"); return ZINT_ERROR_TOO_LONG; } - if (error_number == ZINT_ERROR_INVALID_DATA) { - strcpy(symbol->errtxt, "402: Invalid character in data (digits only for lengths 16 and 23)"); - return error_number; - } } else { int zeroes; if (length > 8) { @@ -174,10 +175,9 @@ INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[], /* Verify that the first 8 characters are numbers */ memcpy(dpid, localstr, 8); dpid[8] = '\0'; - error_number = is_sane(NEON, (unsigned char *) dpid, 8); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, (unsigned char *) dpid, 8) != 0) { strcpy(symbol->errtxt, "405: Invalid character in DPID (first 8 characters) (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } /* Start character */ @@ -238,21 +238,23 @@ INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[], writer += 2; } -#ifdef COMPLIANT_HEIGHTS - /* Australia Post Customer Barcoding Technical Specifications (Revised Aug 2012) Dimensions, placement and - printing p.12 - https://auspost.com.au/content/dam/auspost_corp/media/documents/customer-barcode-technical-specifications-aug2012.pdf - X 0.5mm (average of 0.4mm - 0.6mm), min height 4.2mm / 0.6mm (X max) = 7, max 5.6mm / 0.4mm (X min) = 14 - Tracker 1.3mm (average of 1mm - 1.6mm), Ascender/Descender 3.15mm (average of 2.6mm - 3.7mm) less T = 1.85mm - */ - symbol->row_height[0] = 1.85f / 0.5f; /* 3.7 */ - symbol->row_height[1] = 1.3f / 0.5f; /* 2.6 */ - error_number = daft_set_height(symbol, 7.0f, 14.0f); /* Note using max X for minimum and min X for maximum */ -#else - symbol->row_height[0] = 3.0f; - symbol->row_height[1] = 2.0f; - error_number = daft_set_height(symbol, 0.0f, 0.0f); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* Australia Post Customer Barcoding Technical Specifications (Revised Aug 2012) Dimensions, placement and + printing p.12 + (https://auspost.com.au/content/dam/auspost_corp/media/documents/ + customer-barcode-technical-specifications-aug2012.pdf) + X 0.5mm (average of 0.4mm - 0.6mm), min height 4.2mm / 0.6mm (X max) = 7, max 5.6mm / 0.4mm (X min) = 14 + Tracker 1.3mm (average of 1mm - 1.6mm) + Ascender/Descender 3.15mm (average of 2.6mm - 3.7mm) less T = 1.85mm + */ + symbol->row_height[0] = 3.7f; /* 1.85f / 0.5f */ + symbol->row_height[1] = 2.6f; /* 1.3f / 0.5f */ + error_number = daft_set_height(symbol, 7.0f, 14.0f); /* Note using max X for minimum and min X for maximum */ + } else { + symbol->row_height[0] = 3.0f; + symbol->row_height[1] = 2.0f; + error_number = daft_set_height(symbol, 0.0f, 0.0f); + } symbol->rows = 3; symbol->width = writer - 1; diff --git a/backend/aztec.c b/backend/aztec.c index fd0223ee..9bfdd244 100644 --- a/backend/aztec.c +++ b/backend/aztec.c @@ -1445,7 +1445,7 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], int lengt } /* Encodes Aztec runes as specified in ISO/IEC 24778:2008 Annex A */ -INTERNAL int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int azrune(struct zint_symbol *symbol, unsigned char source[], int length) { unsigned int input_value; int error_number, i, y, x, r; char binary_string[28]; diff --git a/backend/codablock.c b/backend/codablock.c index e31ad786..f16c1d27 100644 --- a/backend/codablock.c +++ b/backend/codablock.c @@ -39,7 +39,7 @@ #include #include "common.h" -INTERNAL int code_128(struct zint_symbol *symbol, unsigned char source[], int length); +INTERNAL int code128(struct zint_symbol *symbol, unsigned char source[], int length); #define uchar unsigned char @@ -601,7 +601,7 @@ static void SumASCII(uchar **ppOutPos, int Sum, int CharacterSet) /* Main function called by zint framework */ -INTERNAL int codablock(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int codablockf(struct zint_symbol *symbol, unsigned char source[], int length) { int charCur, dataLength; int error_number; int rows, columns, useColumns; @@ -613,7 +613,6 @@ INTERNAL int codablock(struct zint_symbol *symbol, unsigned char source[], int l int emptyColumns; char dest[1000]; int r, c; - float min_row_height = 0.0f; #ifdef _MSC_VER CharacterSetTable *T; unsigned char *data; @@ -627,20 +626,20 @@ INTERNAL int codablock(struct zint_symbol *symbol, unsigned char source[], int l /* option1: rows <= 0: automatic, 1..44 */ rows = symbol->option_1; if (rows == 1) { - error_number = code_128(symbol, source, length); /* Only returns errors, not warnings */ + error_number = code128(symbol, source, length); /* Only returns errors, not warnings */ if (error_number < ZINT_ERROR) { symbol->output_options |= BARCODE_BIND; if (symbol->border_width == 0) { /* Allow override if non-zero */ symbol->border_width = 1; /* AIM ISS-X-24 Section 4.6.1 b) (note change from previous default 2) */ } symbol->text[0] = '\0'; /* Disable HRT for compatibility with CODABLOCKF */ -#ifdef COMPLIANT_HEIGHTS - /* AIM ISS-X-24 Section 4.5.1 minimum row height 8 (for compatibility with CODABLOCKF, not specced for - CODE128) */ - error_number = set_height(symbol, 8.0f, 10.0f, 0.0f, 0 /*no_errtxt*/); -#else - (void) set_height(symbol, 0.0f, 5.0f, 0.0f, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* AIM ISS-X-24 Section 4.5.1 minimum row height 8 (for compatibility with CODABLOCKF, not specced for + CODE128) */ + error_number = set_height(symbol, 8.0f, 10.0f, 0.0f, 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 5.0f, 0.0f, 1 /*no_errtxt*/); + } } return error_number; } @@ -961,17 +960,17 @@ INTERNAL int codablock(struct zint_symbol *symbol, unsigned char source[], int l expand(symbol, dest); } -#ifdef COMPLIANT_HEIGHTS - /* AIM ISS-X-24 Section 4.6.1 minimum row height; use 10 * rows as default for back-compatibility */ - min_row_height = (float) (0.55 * useColumns + 3.0); - if (min_row_height < 8.0f) { - min_row_height = 8.0f; + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* AIM ISS-X-24 Section 4.6.1 minimum row height; use 10 * rows as default */ + float min_row_height = stripf(0.55f * useColumns + 3.0f); + if (min_row_height < 8.0f) { + min_row_height = 8.0f; + } + error_number = set_height(symbol, min_row_height, (min_row_height > 10.0f ? min_row_height : 10.0f) * rows, + 0.0f, 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 10.0f * rows, 0.0f, 1 /*no_errtxt*/); } - error_number = set_height(symbol, min_row_height, (min_row_height > 10.0f ? min_row_height : 10.0f) * rows, 0.0f, - 0 /*no_errtxt*/); -#else - (void) set_height(symbol, min_row_height, 10.0f * rows, 0.0f, 1 /*no_errtxt*/); -#endif symbol->output_options |= BARCODE_BIND; diff --git a/backend/code.c b/backend/code.c index e4affb36..f05cf163 100644 --- a/backend/code.c +++ b/backend/code.c @@ -1,7 +1,8 @@ /* code.c - Handles Code 11, 39, 39+, 93, PZN, Channel and VIN */ /* LOGMARS MIL-STD-1189 Rev. B https://apps.dtic.mil/dtic/tr/fulltext/u2/a473534.pdf */ /* PZN https://www.ifaffm.de/mandanten/1/documents/04_ifa_coding_system/IFA_Info_Code_39_EN.pdf */ -/* PZN https://www.ifaffm.de/mandanten/1/documents/04_ifa_coding_system/IFA-Info_Check_Digit_Calculations_PZN_PPN_UDI_EN.pdf */ +/* PZN https://www.ifaffm.de/mandanten/1/documents/04_ifa_coding_system/ + IFA-Info_Check_Digit_Calculations_PZN_PPN_UDI_EN.pdf */ /* libzint - the open source barcode library @@ -98,11 +99,11 @@ static const char *C93Table[47] = { }; /* *********************** CODE 11 ******************** */ -INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int length) { /* Code 11 */ +INTERNAL int code11(struct zint_symbol *symbol, unsigned char source[], int length) { /* Code 11 */ int i; int h, c_digit, c_weight, c_count, k_digit, k_weight, k_count; - int weight[122], error_number; + int weight[122], error_number = 0; char dest[750]; /* 6 + 121 * 6 + 2 * 6 + 5 + 1 == 750 */ char checkstr[3]; int num_check_digits; @@ -114,10 +115,9 @@ INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int len strcpy(symbol->errtxt, "320: Input too long (121 character maximum)"); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(SODIUM, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(SODIUM, source, length) != 0) { strcpy(symbol->errtxt, "321: Invalid character in data (digits and \"-\" only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } if (symbol->option_2 < 0 || symbol->option_2 > 2) { @@ -215,13 +215,12 @@ INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int len } /* Code 39 */ -INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int code39(struct zint_symbol *symbol, unsigned char source[], int length) { int i; int counter; - int error_number; + int error_number = 0; char dest[880]; /* 10 (Start) + 85 * 10 + 10 (Check) + 9 (Stop) + 1 = 880 */ char localstr[2] = {0}; - float height; counter = 0; @@ -242,10 +241,9 @@ INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], int length) return ZINT_ERROR_TOO_LONG; } to_upper(source); - error_number = is_sane(SILVER, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(SILVER, source, length) != 0) { strcpy(symbol->errtxt, "324: Invalid character in data (alphanumerics, space and \"-.$/+%\" only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } /* Start character */ @@ -291,26 +289,27 @@ INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], int length) expand(symbol, dest); -#ifdef COMPLIANT_HEIGHTS - if (symbol->symbology == BARCODE_LOGMARS) { - /* MIL-STD-1189 Rev. B Section 5.2 - Min height 0.25" / 0.04" (X max) = 6.25 - Default height 0.625" (average of 0.375" - 0.875") / 0.01375" (average of 0.0075" - 0.02") ~ 45.45 */ - height = (float) (0.625 / 0.01375); - error_number = set_height(symbol, 6.25f, height, (float) (0.875 / 0.0075), 0 /*no_errtxt*/); - } else if (symbol->symbology == BARCODE_CODE39 || symbol->symbology == BARCODE_EXCODE39 - || symbol->symbology == BARCODE_HIBC_39) { - /* ISO/IEC 16388:2007 4.4 (e) recommended min height 5.0mm or 15% of width excluding quiet zones; - as X left to application specification use - width = (C + 2) * (3 * N + 6) * X + (C + 1) * I = (C + 2) * 9 + C + 1) * X = (10 * C + 19) */ - height = (float) ((10.0 * (symbol->option_2 == 1 ? length + 1 : length) + 19.0) * 0.15); - /* Using 50 as default as none recommended */ - error_number = set_height(symbol, height, height > 50.0f ? height : 50.0f, 0.0f, 0 /*no_errtxt*/); + if (symbol->output_options & COMPLIANT_HEIGHT) { + if (symbol->symbology == BARCODE_LOGMARS) { + /* MIL-STD-1189 Rev. B Section 5.2 + Min height 0.25" / 0.04" (X max) = 6.25 + Default height 0.625" (average of 0.375" - 0.875") / 0.01375" (average of 0.0075" - 0.02") ~ 45.45 */ + error_number = set_height(symbol, 6.25f, stripf(0.625f / 0.01375f), stripf(0.875f / 0.0075f), + 0 /*no_errtxt*/); + } else if (symbol->symbology == BARCODE_CODE39 || symbol->symbology == BARCODE_EXCODE39 + || symbol->symbology == BARCODE_HIBC_39) { + /* ISO/IEC 16388:2007 4.4 (e) recommended min height 5.0mm or 15% of width excluding quiet zones; + as X left to application specification use + width = (C + 2) * (3 * N + 6) * X + (C + 1) * I = (C + 2) * 9 + C + 1) * X = (10 * C + 19); + use 50 as default as none recommended */ + const float min_height = stripf((10.0f * (symbol->option_2 == 1 ? length + 1 : length) + 19.0f) * 0.15f); + error_number = set_height(symbol, min_height, min_height > 50.0f ? min_height : 50.0f, 0.0f, + 0 /*no_errtxt*/); + } + // PZN and CODE32 set their own heights + } else { + (void) set_height(symbol, 0.0f, 50.f, 0.0f, 1 /*no_errtxt*/); } -#else - height = 50.0f; - (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); -#endif if (symbol->symbology == BARCODE_CODE39) { ustrcpy(symbol->text, "*"); @@ -325,7 +324,7 @@ INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], int length) } /* Pharmazentral Nummer (PZN) */ -INTERNAL int pharmazentral(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int pzn(struct zint_symbol *symbol, unsigned char source[], int length) { int i, error_number, zeroes; unsigned int count, check_digit; @@ -335,10 +334,9 @@ INTERNAL int pharmazentral(struct zint_symbol *symbol, unsigned char source[], i strcpy(symbol->errtxt, "325: Input wrong length (7 character maximum)"); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "326: Invalid character in data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } localstr[0] = '-'; @@ -364,29 +362,29 @@ INTERNAL int pharmazentral(struct zint_symbol *symbol, unsigned char source[], i } localstr[8] = itoc(check_digit); localstr[9] = '\0'; - error_number = c39(symbol, (unsigned char *) localstr, 9); + error_number = code39(symbol, (unsigned char *) localstr, 9); ustrcpy(symbol->text, "PZN "); ustrcat(symbol->text, localstr); -#ifdef COMPLIANT_HEIGHTS - /* Technical Information regarding PZN Coding V 2.1 (25 Feb 2019) Code size - https://www.ifaffm.de/mandanten/1/documents/04_ifa_coding_system/IFA_Info_Code_39_EN.pdf - "normal" X 0.25mm (0.187mm - 0.45mm), height 8mm - 20mm for 0.25mm X, 10mm mentioned so use that as default, - 10mm / 0.25mm = 40 */ - if (error_number < ZINT_ERROR) { - error_number = set_height(symbol, (float) (8.0 / 0.45), 40.0f, (float) (20.0 / 0.187), 0 /*no_errtxt*/); + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* Technical Information regarding PZN Coding V 2.1 (25 Feb 2019) Code size + https://www.ifaffm.de/mandanten/1/documents/04_ifa_coding_system/IFA_Info_Code_39_EN.pdf + "normal" X 0.25mm (0.187mm - 0.45mm), height 8mm - 20mm for 0.25mm X, 10mm mentioned so use that + as default, 10mm / 0.25mm = 40 */ + if (error_number < ZINT_ERROR) { + error_number = set_height(symbol, stripf(8.0f / 0.45f), 40.0f, stripf(20.0f / 0.187f), 0 /*no_errtxt*/); + } + } else { + if (error_number < ZINT_ERROR) { + (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); + } } -#else - if (error_number < ZINT_ERROR) { - (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); - } -#endif return error_number; } /* Extended Code 39 - ISO/IEC 16388:2007 Annex A */ -INTERNAL int ec39(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int excode39(struct zint_symbol *symbol, unsigned char source[], int length) { unsigned char buffer[85 * 2 + 1] = {0}; int i; @@ -408,21 +406,21 @@ INTERNAL int ec39(struct zint_symbol *symbol, unsigned char source[], int length } /* Then sends the buffer to the C39 function */ - error_number = c39(symbol, buffer, (int) ustrlen(buffer)); + error_number = code39(symbol, buffer, (int) ustrlen(buffer)); for (i = 0; i < length; i++) symbol->text[i] = source[i] >= ' ' && source[i] != 0x7F ? source[i] : ' '; - symbol->text[length] = '\0'; + symbol->text[length] = '\0'; /* Chops off check digit */ return error_number; } /* Code 93 is an advancement on Code 39 and the definition is a lot tighter */ -INTERNAL int c93(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int code93(struct zint_symbol *symbol, unsigned char source[], int length) { /* SILVER includes the extra characters a, b, c and d to represent Code 93 specific shift characters 1, 2, 3 and 4 respectively. These characters are never used by - c39() and ec39() */ + `code39()` and `excode39()` */ int i; int h, weight, c, k, error_number = 0; @@ -430,7 +428,6 @@ INTERNAL int c93(struct zint_symbol *symbol, unsigned char source[], int length) char buffer[216]; /* 107*2 (107 full ASCII) + 1 = 215 */ char dest[668]; /* 6 (Start) + 107*6 + 2*6 (Checks) + 7 (Stop) + 1 (NUL) = 668 */ char set_copy[] = SILVER; - float height; /* Suppresses clang-tidy clang-analyzer-core.CallAndMessage warning */ assert(length > 0); @@ -503,19 +500,15 @@ INTERNAL int c93(struct zint_symbol *symbol, unsigned char source[], int length) strcat(dest, "1111411"); expand(symbol, dest); -#ifdef COMPLIANT_HEIGHTS - /* ANSI/AIM BC5-1995 Section 2.6 minimum height 0.2" or 15% of symbol length, whichever is greater - 0.2" / 0.0075" (min X) = ~26.66; symbol length = (9 * (C + 4) + 1) * X + 2 * Q = symbol->width + 20 */ - height = (float) ((symbol->width + 20) * 0.15); - if (height < 0.2f / 0.0075f) { - height = 0.2f / 0.0075f; + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* ANSI/AIM BC5-1995 Section 2.6 minimum height 0.2" or 15% of symbol length, whichever is greater + no max X given so for min height use symbol length = (9 * (C + 4) + 1) * X + 2 * Q = symbol->width + 20; + use 40 as default height based on figures in spec */ + float min_height = stripf((symbol->width + 20) * 0.15f); + error_number = set_height(symbol, min_height, min_height > 40.0f ? min_height : 40.0f, 0.0f, 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); } - /* Using 50 as default for back-compatibility */ - error_number = set_height(symbol, height, height > 50.0f ? height : 50.0f, 0.0f, 0 /*no_errtxt*/); -#else - height = 50.0f; - (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); -#endif if (symbol->option_2 == 1) { symbol->text[length] = set_copy[c]; @@ -578,12 +571,18 @@ static void CHNCHR(int channels, long target_value, int B[8], int S[8]) { /* Use of initial pre-calculations taken from Barcode Writer in Pure PostScript (BWIPP) * Copyright (c) 2004-2020 Terry Burton (MIT/X-Consortium license) */ static channel_precalc initial_precalcs[6] = { - { 0, { 1, 1, 1, 1, 1, 2, 1, 2, }, { 1, 1, 1, 1, 1, 1, 1, 3, }, { 1, 1, 1, 1, 1, 3, 2, }, { 1, 1, 1, 1, 1, 3, 3, }, }, - { 0, { 1, 1, 1, 1, 2, 1, 1, 3, }, { 1, 1, 1, 1, 1, 1, 1, 4, }, { 1, 1, 1, 1, 4, 3, 3, }, { 1, 1, 1, 1, 4, 4, 4, }, }, - { 0, { 1, 1, 1, 2, 1, 1, 2, 3, }, { 1, 1, 1, 1, 1, 1, 1, 5, }, { 1, 1, 1, 5, 4, 4, 4, }, { 1, 1, 1, 5, 5, 5, 5, }, }, - { 0, { 1, 1, 2, 1, 1, 2, 1, 4, }, { 1, 1, 1, 1, 1, 1, 1, 6, }, { 1, 1, 6, 5, 5, 5, 4, }, { 1, 1, 6, 6, 6, 6, 6, }, }, - { 0, { 1, 2, 1, 1, 2, 1, 1, 5, }, { 1, 1, 1, 1, 1, 1, 1, 7, }, { 1, 7, 6, 6, 6, 5, 5, }, { 1, 7, 7, 7, 7, 7, 7, }, }, - { 0, { 2, 1, 1, 2, 1, 1, 2, 5, }, { 1, 1, 1, 1, 1, 1, 1, 8, }, { 8, 7, 7, 7, 6, 6, 6, }, { 8, 8, 8, 8, 8, 8, 8, }, }, + { 0, { 1, 1, 1, 1, 1, 2, 1, 2, }, { 1, 1, 1, 1, 1, 1, 1, 3, }, { 1, 1, 1, 1, 1, 3, 2, }, + { 1, 1, 1, 1, 1, 3, 3, }, }, + { 0, { 1, 1, 1, 1, 2, 1, 1, 3, }, { 1, 1, 1, 1, 1, 1, 1, 4, }, { 1, 1, 1, 1, 4, 3, 3, }, + { 1, 1, 1, 1, 4, 4, 4, }, }, + { 0, { 1, 1, 1, 2, 1, 1, 2, 3, }, { 1, 1, 1, 1, 1, 1, 1, 5, }, { 1, 1, 1, 5, 4, 4, 4, }, + { 1, 1, 1, 5, 5, 5, 5, }, }, + { 0, { 1, 1, 2, 1, 1, 2, 1, 4, }, { 1, 1, 1, 1, 1, 1, 1, 6, }, { 1, 1, 6, 5, 5, 5, 4, }, + { 1, 1, 6, 6, 6, 6, 6, }, }, + { 0, { 1, 2, 1, 1, 2, 1, 1, 5, }, { 1, 1, 1, 1, 1, 1, 1, 7, }, { 1, 7, 6, 6, 6, 5, 5, }, + { 1, 7, 7, 7, 7, 7, 7, }, }, + { 0, { 2, 1, 1, 2, 1, 1, 2, 5, }, { 1, 1, 1, 1, 1, 1, 1, 8, }, { 8, 7, 7, 7, 6, 6, 6, }, + { 8, 8, 8, 8, 8, 8, 8, }, }, }; int bmax[7], smax[7]; long value = 0; @@ -655,24 +654,22 @@ nb0: if (++B[0] <= bmax[0]) goto lb0; } /* Channel Code - According to ANSI/AIM BC12-1998 */ -INTERNAL int channel_code(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int channel(struct zint_symbol *symbol, unsigned char source[], int length) { static int max_ranges[] = { -1, -1, -1, 26, 292, 3493, 44072, 576688, 7742862 }; int S[8] = {0}, B[8] = {0}; long target_value = 0; char pattern[30]; int channels, i; - int error_number, zeroes; + int error_number = 0, zeroes; char hrt[9]; - float height; if (length > 7) { strcpy(symbol->errtxt, "333: Input too long (7 character maximum)"); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "334: Invalid character in data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } if ((symbol->option_2 < 3) || (symbol->option_2 > 8)) { @@ -735,17 +732,15 @@ INTERNAL int channel_code(struct zint_symbol *symbol, unsigned char source[], in expand(symbol, pattern); -#ifdef COMPLIANT_HEIGHTS - /* ANSI/AIM BC12-1998 gives min height as 5mm or 15% of length but X left as application specification so use - 15% of length where - length = (3 (quiet zones) + 9 (finder) + 4 * channels - 2) * X */ - height = (float) ((10 + 4 * channels) * 0.15); - /* Using 50 as default for back-compatibility */ - error_number = set_height(symbol, height > 50.0f ? height : 50.0f, height, 0.0f, 0 /*no_errtxt*/); -#else - height = 50.0f; - (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* ANSI/AIM BC12-1998 gives min height as 5mm or 15% of length; X left as application specification so use + length = 1X (left qz) + (9 (finder) + 4 * 8 - 2) * X + 2X (right qz); + use 20 as default based on figures in spec */ + const float min_height = stripf((1 + 9 + 4 * channels - 2 + 2) * 0.15f); + error_number = set_height(symbol, min_height, 20.0f, 0.0f, 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); + } return error_number; } @@ -771,7 +766,7 @@ INTERNAL int vin(struct zint_symbol *symbol, unsigned char source[], int length) } // Check input characters, I, O and Q are not allowed - if (is_sane(ARSENIC, source, length) == ZINT_ERROR_INVALID_DATA) { + if (is_sane(ARSENIC, source, length) != 0) { sprintf(symbol->errtxt, "337: Invalid character in data (\"%s\" only)", ARSENIC); return ZINT_ERROR_INVALID_DATA; } diff --git a/backend/code1.c b/backend/code1.c index b04b5afe..f0f1cf74 100644 --- a/backend/code1.c +++ b/backend/code1.c @@ -957,7 +957,7 @@ static void block_copy(struct zint_symbol *symbol, char datagrid[136][120], cons } } -INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int codeone(struct zint_symbol *symbol, unsigned char source[], int length) { int size = 1, i, j; char datagrid[136][120]; @@ -972,6 +972,10 @@ INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int le } if (symbol->structapp.count) { + if (symbol->option_2 == 9) { /* Version S */ + strcpy(symbol->errtxt, "714: Structured Append not available for Version S"); + return ZINT_ERROR_INVALID_OPTION; + } if ((symbol->input_mode & 0x07) == GS1_MODE) { strcpy(symbol->errtxt, "710: Cannot have Structured Append and GS1 mode at the same time"); return ZINT_ERROR_INVALID_OPTION; @@ -997,15 +1001,11 @@ INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int le unsigned int data[30], ecc[15]; int block_width; - if (symbol->structapp.count) { /* Version S */ - strcpy(symbol->errtxt, "714: Structured Append not supported for Version S"); - return ZINT_ERROR_INVALID_OPTION; - } if (length > 18) { strcpy(symbol->errtxt, "514: Input data too long for Version S"); return ZINT_ERROR_TOO_LONG; } - if (is_sane(NEON, source, length) == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "515: Invalid input data (Version S encodes numeric input only)"); return ZINT_ERROR_INVALID_DATA; } diff --git a/backend/code128.c b/backend/code128.c index 75c0451e..147f10da 100644 --- a/backend/code128.c +++ b/backend/code128.c @@ -300,7 +300,7 @@ STATIC_UNLESS_ZINT_TEST int hrt_cpy_iso8859_1(struct zint_symbol *symbol, const } /* Handle Code 128, 128B and HIBC 128 */ -INTERNAL int code_128(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int code128(struct zint_symbol *symbol, unsigned char source[], int length) { int i, j, k, values[C128_MAX] = {0}, bar_characters, read, total_sum; int error_number, indexchaine, indexliste, f_state; int sourcelen; @@ -705,7 +705,7 @@ INTERNAL int code_128(struct zint_symbol *symbol, unsigned char source[], int le } /* Handle EAN-128 (Now known as GS1-128), and composite version if `cc_mode` set */ -INTERNAL int ean_128_cc(struct zint_symbol *symbol, unsigned char source[], int length, const int cc_mode, +INTERNAL int gs1_128_cc(struct zint_symbol *symbol, unsigned char source[], int length, const int cc_mode, const int cc_rows) { int i, j, values[C128_MAX] = {0}, bar_characters, read, total_sum; int error_number, warn_number = 0, indexchaine, indexliste; @@ -1014,23 +1014,26 @@ INTERNAL int ean_128_cc(struct zint_symbol *symbol, unsigned char source[], int } } -#ifdef COMPLIANT_HEIGHTS - /* GS1 General Specifications 21.0.1 5.12.3.2 table 2, including footnote (**): - same as ITF-14: "in case of further space constraints" height 5.8mm / 1.016mm (X max) ~ 5.7; - default 31.75mm / 0.495mm ~ 64.14 */ - if (symbol->symbology == BARCODE_GS1_128_CC) { - /* Pass back via temporary linear structure */ - symbol->height = symbol->height ? (float) (5.8 / 1.016) : (float) (31.75 / 0.495); + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* GS1 General Specifications 21.0.1 5.12.3.2 table 2, including footnote (**): + same as ITF-14: "in case of further space constraints" height 5.8mm / 1.016mm (X max) ~ 5.7; + default 31.75mm / 0.495mm ~ 64.14 */ + const float min_height = stripf(5.8f / 1.016f); + const float default_height = stripf(31.75f / 0.495f); + if (symbol->symbology == BARCODE_GS1_128_CC) { + /* Pass back via temporary linear structure */ + symbol->height = symbol->height ? min_height : default_height; + } else { + warn_number = set_height(symbol, min_height, default_height, 0.0f, 0 /*no_errtxt*/); + } } else { - warn_number = set_height(symbol, (float) (5.8 / 1.016), (float) (31.75 / 0.495), 0.0f, 0 /*no_errtxt*/); + const float height = 50.0f; + if (symbol->symbology == BARCODE_GS1_128_CC) { + symbol->height = height - cc_rows * (cc_mode == 3 ? 3 : 2) - 1.0f; + } else { + (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); + } } -#else - if (symbol->symbology == BARCODE_GS1_128_CC) { - symbol->height = 50.0f - cc_rows * (cc_mode == 3 ? 3 : 2) - 1.0f; - } else { - (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); - } -#endif for (i = 0; i < length; i++) { if (source[i] == '[') { @@ -1046,12 +1049,12 @@ INTERNAL int ean_128_cc(struct zint_symbol *symbol, unsigned char source[], int } /* Handle EAN-128 (Now known as GS1-128) */ -INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], int length) { - return ean_128_cc(symbol, source, length, 0 /*cc_mode*/, 0 /*cc_rows*/); +INTERNAL int gs1_128(struct zint_symbol *symbol, unsigned char source[], int length) { + return gs1_128_cc(symbol, source, length, 0 /*cc_mode*/, 0 /*cc_rows*/); } /* Add check digit if encoding an NVE18 symbol */ -INTERNAL int nve_18(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int nve18(struct zint_symbol *symbol, unsigned char source[], int length) { int i, count, check_digit; int error_number, zeroes; unsigned char ean128_equiv[23]; @@ -1061,10 +1064,9 @@ INTERNAL int nve_18(struct zint_symbol *symbol, unsigned char source[], int leng return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "346: Invalid character in data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } zeroes = 17 - length; @@ -1083,13 +1085,13 @@ INTERNAL int nve_18(struct zint_symbol *symbol, unsigned char source[], int leng ean128_equiv[21] = itoc(check_digit); ean128_equiv[22] = '\0'; - error_number = ean_128(symbol, ean128_equiv, 22); + error_number = gs1_128(symbol, ean128_equiv, 22); return error_number; } /* EAN-14 - A version of EAN-128 */ -INTERNAL int ean_14(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int ean14(struct zint_symbol *symbol, unsigned char source[], int length) { int i, count, check_digit; int error_number, zeroes; unsigned char ean128_equiv[19]; @@ -1099,10 +1101,9 @@ INTERNAL int ean_14(struct zint_symbol *symbol, unsigned char source[], int leng return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "348: Invalid character in data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } zeroes = 13 - length; @@ -1121,7 +1122,7 @@ INTERNAL int ean_14(struct zint_symbol *symbol, unsigned char source[], int leng ean128_equiv[17] = itoc(check_digit); ean128_equiv[18] = '\0'; - error_number = ean_128(symbol, ean128_equiv, 18); + error_number = gs1_128(symbol, ean128_equiv, 18); return error_number; } @@ -1129,7 +1130,7 @@ INTERNAL int ean_14(struct zint_symbol *symbol, unsigned char source[], int leng /* DPD (Deutsher Paket Dienst) Code */ /* Specification at ftp://dpd.at/Datenspezifikationen/EN/gbs_V4.0.2_hauptdokument.pdf * or https://docplayer.net/33728877-Dpd-parcel-label-specification.html */ -INTERNAL int dpd_parcel(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int dpd(struct zint_symbol *symbol, unsigned char source[], int length) { int error_number = 0; int i, p; unsigned char identifier; @@ -1144,10 +1145,9 @@ INTERNAL int dpd_parcel(struct zint_symbol *symbol, unsigned char source[], int identifier = source[0]; to_upper(source + 1); - error_number = is_sane(KRSET, source + 1, length - 1); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(KRSET, source + 1, length - 1) != 0) { strcpy(symbol->errtxt, "300: Invalid character in DPD data (alphanumerics only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } if ((identifier < 32) || (identifier > 127)) { @@ -1155,16 +1155,16 @@ INTERNAL int dpd_parcel(struct zint_symbol *symbol, unsigned char source[], int return ZINT_ERROR_INVALID_DATA; } - error_number = code_128(symbol, source, length); /* Only returns errors, not warnings */ + error_number = code128(symbol, source, length); /* Only returns errors, not warnings */ if (error_number < ZINT_ERROR) { -#ifdef COMPLIANT_HEIGHTS - /* Specification DPD and primetime Parcel Despatch 4.0.2 Section 5.5.1 - 25mm / 0.4mm (X max) = 62.5 min, 25mm / 0.375 (X) ~ 66.66 default */ - error_number = set_height(symbol, 62.5f, (float) (25.0 / 0.375), 0.0f, 0 /*no_errtxt*/); -#else - (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* Specification DPD and primetime Parcel Despatch 4.0.2 Section 5.5.1 + 25mm / 0.4mm (X max) = 62.5 min, 25mm / 0.375 (X) ~ 66.66 default */ + error_number = set_height(symbol, 62.5f, stripf(25.0f / 0.375f), 0.0f, 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); + } cd = mod; diff --git a/backend/code16k.c b/backend/code16k.c index e62d2ce4..a4de2bbe 100644 --- a/backend/code16k.c +++ b/backend/code16k.c @@ -119,8 +119,6 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], int len int error_number = 0, first_sum, second_sum; int input_length; int gs1, c_count; - int separator; - float min_row_height = 0.0f; /* Suppresses clang-analyzer-core.UndefinedBinaryOperatorResult warning on fset which is fully set */ assert(length > 0); @@ -490,16 +488,17 @@ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], int len symbol->rows = rows; symbol->width = 70; -#ifdef COMPLIANT_HEIGHTS - separator = symbol->option_3 >= 1 && symbol->option_3 <= 4 ? symbol->option_3 : 1; - /* BS EN 12323:2005 Section 4.5 (d) minimum 8X; use 10 * rows as default for back-compatibility */ - min_row_height = 8.0f + separator; - error_number = set_height(symbol, min_row_height, (min_row_height > 10.0f ? min_row_height : 10.0f) * rows, 0.0f, - 0 /*no_errtxt*/); -#else - (void)&separator; - (void) set_height(symbol, min_row_height, 10.0f * rows, 0.0f, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* BS EN 12323:2005 Section 4.5 (d) minimum 8X; use 10X as default + Section 4.5 (b) H = X[r(h + g) + g] = rows * row_height + (rows - 1) * separator as borders not included + in symbol->height (added on) */ + const int separator = symbol->option_3 >= 1 && symbol->option_3 <= 4 ? symbol->option_3 : 1; + const float min_row_height = stripf((8.0f * rows + separator * (rows - 1)) / rows); + const float default_height = 10.0f * rows + separator * (rows - 1); + error_number = set_height(symbol, min_row_height, default_height, 0.0f, 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 10.0f * rows, 0.0f, 1 /*no_errtxt*/); + } symbol->output_options |= BARCODE_BIND; diff --git a/backend/code49.c b/backend/code49.c index c046129a..50f69aaf 100644 --- a/backend/code49.c +++ b/backend/code49.c @@ -39,7 +39,7 @@ /* "!" represents Shift 1 and "&" represents Shift 2, "*" represents FNC1 */ -INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int code49(struct zint_symbol *symbol, unsigned char source[], int length) { int i, j, rows, M, x_count, y_count, z_count, posn_val, local_value; char intermediate[170] = ""; int codewords[170], codeword_count; @@ -49,8 +49,6 @@ INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], int len char pattern[80]; int gs1; int h, len; - int separator; - float min_row_height = 0.0f; int error_number = 0; if (length > 81) { @@ -351,16 +349,17 @@ INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], int len symbol->rows = rows; symbol->width = (int) strlen(pattern); -#ifdef COMPLIANT_HEIGHTS - separator = symbol->option_3 >= 1 && symbol->option_3 <= 4 ? symbol->option_3 : 1; - /* ANSI/AIM BC6-2000 Section 2.6 minimum 8X; use 10 * rows as default for back-compatibility */ - min_row_height = 8.0f + separator; - error_number = set_height(symbol, min_row_height, (min_row_height > 10.0f ? min_row_height : 10.0f) * rows, 0.0f, - 0 /*no_errtxt*/); -#else - (void)&separator; - (void) set_height(symbol, min_row_height, 10.0f * rows, 0.0f, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* ANSI/AIM BC6-2000 Section 2.6 minimum 8X; use 10X as default + Formula 2 H = ((h + g)r + g)X = rows * row_height + (rows - 1) * separator as borders not included + in symbol->height (added on) */ + const int separator = symbol->option_3 >= 1 && symbol->option_3 <= 4 ? symbol->option_3 : 1; + const float min_row_height = stripf((8.0f * rows + separator * (rows - 1)) / rows); + const float default_height = 10.0f * rows + separator * (rows - 1); + error_number = set_height(symbol, min_row_height, default_height, 0.0f, 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 10.0f * rows, 0.0f, 1 /*no_errtxt*/); + } symbol->output_options |= BARCODE_BIND; diff --git a/backend/common.c b/backend/common.c index 8fc5a763..dc45dd01 100644 --- a/backend/common.c +++ b/backend/common.c @@ -406,11 +406,11 @@ INTERNAL int set_height(struct zint_symbol *symbol, const float min_row_height, if (zero_count) { if (symbol->height) { - row_height = (symbol->height - fixed_height) / zero_count; + row_height = stripf((symbol->height - fixed_height) / zero_count); } else if (default_height) { - row_height = default_height / zero_count; + row_height = stripf(default_height / zero_count); } else { - row_height = min_row_height; + row_height = stripf(min_row_height); } if (row_height < 0.5f) { /* Absolute minimum */ row_height = 0.5f; @@ -421,9 +421,9 @@ INTERNAL int set_height(struct zint_symbol *symbol, const float min_row_height, strcpy(symbol->errtxt, "247: Height not compliant with standards"); } } - symbol->height = row_height * zero_count + fixed_height; + symbol->height = stripf(row_height * zero_count + fixed_height); } else { - symbol->height = fixed_height; /* Ignore any given height */ + symbol->height = stripf(fixed_height); /* Ignore any given height */ } if (max_height && symbol->height > max_height) { error_number = ZINT_WARN_NONCOMPLIANT; diff --git a/backend/composite.c b/backend/composite.c index 5d37781f..2febeedf 100644 --- a/backend/composite.c +++ b/backend/composite.c @@ -63,18 +63,18 @@ #define UINT unsigned short #include "composite.h" -INTERNAL int ean_128_cc(struct zint_symbol *symbol, unsigned char source[], int length, const int cc_mode, +INTERNAL int gs1_128_cc(struct zint_symbol *symbol, unsigned char source[], int length, const int cc_mode, const int cc_rows); INTERNAL int eanx_cc(struct zint_symbol *symbol, unsigned char source[], int length, const int cc_rows); INTERNAL int ean_leading_zeroes(struct zint_symbol *symbol, const unsigned char source[], unsigned char local_source[], int *p_with_addon); -INTERNAL int rss14_stk_set_height(struct zint_symbol *symbol, const int first_row); -INTERNAL int rss14_cc(struct zint_symbol *symbol, unsigned char source[], int length, const int cc_rows); -INTERNAL int rsslimited_cc(struct zint_symbol *symbol, unsigned char source[], int length, const int cc_rows); -INTERNAL int rssexpanded_cc(struct zint_symbol *symbol, unsigned char source[], int length, const int cc_rows); -INTERNAL int rss_date(const unsigned char source[], const int src_posn); +INTERNAL int dbar_omnstk_set_height(struct zint_symbol *symbol, const int first_row); +INTERNAL int dbar_omn_cc(struct zint_symbol *symbol, unsigned char source[], int length, const int cc_rows); +INTERNAL int dbar_ltd_cc(struct zint_symbol *symbol, unsigned char source[], int length, const int cc_rows); +INTERNAL int dbar_exp_cc(struct zint_symbol *symbol, unsigned char source[], int length, const int cc_rows); +INTERNAL int dbar_date(const unsigned char source[], const int src_posn); static int _min(const int first, const int second) { @@ -889,7 +889,7 @@ static int cc_binary_string(struct zint_symbol *symbol, const unsigned char sour if ((source[0] == '1') && ((source[1] == '0') || (source[1] == '1') || (source[1] == '7'))) { /* Source starts (10), (11) or (17) */ - if (source[1] == '0' || rss_date(source, 2) >= 0) { /* Check date valid if (11) or (17) */ + if (source[1] == '0' || dbar_date(source, 2) >= 0) { /* Check date valid if (11) or (17) */ encoding_method = 2; } } else if ((source[0] == '9') && (source[1] == '0')) { @@ -913,7 +913,7 @@ static int cc_binary_string(struct zint_symbol *symbol, const unsigned char sour } else { /* Production Date (11) or Expiration Date (17) */ - bp = bin_append_posn(rss_date(source, 2), 16, binary_string, bp); + bp = bin_append_posn(dbar_date(source, 2), 16, binary_string, bp); if (source[1] == '1') { /* Production Date AI 11 */ @@ -1257,7 +1257,7 @@ static int linear_dummy_run(int input_mode, unsigned char *source, const int len dummy = ZBarcode_Create(); dummy->symbology = BARCODE_GS1_128_CC; dummy->input_mode = input_mode; - error_number = ean_128_cc(dummy, source, length, 3 /*cc_mode*/, 0 /*cc_rows*/); + error_number = gs1_128_cc(dummy, source, length, 3 /*cc_mode*/, 0 /*cc_rows*/); linear_width = dummy->width; if (error_number >= ZINT_ERROR) { strcpy(errtxt, dummy->errtxt); @@ -1434,6 +1434,7 @@ INTERNAL int composite(struct zint_symbol *symbol, unsigned char source[], int l linear->symbology = symbol->symbology; linear->input_mode = symbol->input_mode; + linear->output_options = symbol->output_options; linear->option_2 = symbol->option_2; /* If symbol->height given minimum row height will be returned, else default height */ linear->height = symbol->height; @@ -1450,16 +1451,16 @@ INTERNAL int composite(struct zint_symbol *symbol, unsigned char source[], int l break; case BARCODE_GS1_128_CC: /* GS1-128 needs to know which type of 2D component is used */ - error_number = ean_128_cc(linear, (unsigned char *) symbol->primary, pri_len, cc_mode, symbol->rows); + error_number = gs1_128_cc(linear, (unsigned char *) symbol->primary, pri_len, cc_mode, symbol->rows); break; case BARCODE_DBAR_OMN_CC: - error_number = rss14_cc(linear, (unsigned char *) symbol->primary, pri_len, symbol->rows); + error_number = dbar_omn_cc(linear, (unsigned char *) symbol->primary, pri_len, symbol->rows); break; case BARCODE_DBAR_LTD_CC: - error_number = rsslimited_cc(linear, (unsigned char *) symbol->primary, pri_len, symbol->rows); + error_number = dbar_ltd_cc(linear, (unsigned char *) symbol->primary, pri_len, symbol->rows); break; case BARCODE_DBAR_EXP_CC: - error_number = rssexpanded_cc(linear, (unsigned char *) symbol->primary, pri_len, symbol->rows); + error_number = dbar_exp_cc(linear, (unsigned char *) symbol->primary, pri_len, symbol->rows); break; case BARCODE_UPCA_CC: error_number = eanx_cc(linear, (unsigned char *) symbol->primary, pri_len, symbol->rows); @@ -1468,13 +1469,13 @@ INTERNAL int composite(struct zint_symbol *symbol, unsigned char source[], int l error_number = eanx_cc(linear, (unsigned char *) symbol->primary, pri_len, symbol->rows); break; case BARCODE_DBAR_STK_CC: - error_number = rss14_cc(linear, (unsigned char *) symbol->primary, pri_len, symbol->rows); + error_number = dbar_omn_cc(linear, (unsigned char *) symbol->primary, pri_len, symbol->rows); break; case BARCODE_DBAR_OMNSTK_CC: - error_number = rss14_cc(linear, (unsigned char *) symbol->primary, pri_len, symbol->rows); + error_number = dbar_omn_cc(linear, (unsigned char *) symbol->primary, pri_len, symbol->rows); break; case BARCODE_DBAR_EXPSTK_CC: - error_number = rssexpanded_cc(linear, (unsigned char *) symbol->primary, pri_len, symbol->rows); + error_number = dbar_exp_cc(linear, (unsigned char *) symbol->primary, pri_len, symbol->rows); break; } @@ -1605,23 +1606,23 @@ INTERNAL int composite(struct zint_symbol *symbol, unsigned char source[], int l symbol->width += top_shift; } symbol->rows += linear->rows; -#ifdef COMPLIANT_HEIGHTS - if (symbol->symbology == BARCODE_DBAR_STK_CC) { - /* Databar Stacked needs special treatment due to asymmetric rows */ - warn_number = rss14_stk_set_height(symbol, symbol->rows - linear->rows + 1 /*first_row*/); + if (symbol->output_options & COMPLIANT_HEIGHT) { + if (symbol->symbology == BARCODE_DBAR_STK_CC) { + /* Databar Stacked needs special treatment due to asymmetric rows */ + warn_number = dbar_omnstk_set_height(symbol, symbol->rows - linear->rows + 1 /*first_row*/); + } else { + /* If symbol->height given then min row height was returned, else default height */ + warn_number = set_height(symbol, symbol->height ? linear->height : 0.0f, + symbol->height ? 0.0f : linear->height, 0.0f, 0 /*no_errtxt*/); + } } else { - /* If symbol->height given then min row height was returned, else default height */ - warn_number = set_height(symbol, symbol->height ? linear->height : 0.0f, - symbol->height ? 0.0f : linear->height, 0.0f, 0 /*no_errtxt*/); + if (symbol->symbology == BARCODE_DBAR_STK_CC) { + (void) dbar_omnstk_set_height(symbol, symbol->rows - linear->rows + 1 /*first_row*/); + } else { + (void) set_height(symbol, symbol->height ? linear->height : 0.0f, symbol->height ? 0.0f : linear->height, + 0.0f, 1 /*no_errtxt*/); + } } -#else - if (symbol->symbology == BARCODE_DBAR_STK_CC) { - (void) rss14_stk_set_height(symbol, symbol->rows - linear->rows + 1 /*first_row*/); - } else { - (void) set_height(symbol, symbol->height ? linear->height : 0.0f, symbol->height ? 0.0f : linear->height, - 0.0f, 1 /*no_errtxt*/); - } -#endif ustrcpy(symbol->text, linear->text); diff --git a/backend/dmatrix.c b/backend/dmatrix.c index 8250fe7f..44680a5f 100644 --- a/backend/dmatrix.c +++ b/backend/dmatrix.c @@ -1144,7 +1144,7 @@ static void add_tail(unsigned char target[], int tp, const int tail_length) { } } -static int data_matrix_200(struct zint_symbol *symbol, const unsigned char source[], int inputlen) { +static int datamatrix_200(struct zint_symbol *symbol, const unsigned char source[], int inputlen) { int i, skew = 0; unsigned char binary[2200]; int binlen; @@ -1266,12 +1266,12 @@ static int data_matrix_200(struct zint_symbol *symbol, const unsigned char sourc return error_number; } -INTERNAL int dmatrix(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int datamatrix(struct zint_symbol *symbol, unsigned char source[], int length) { int error_number; if (symbol->option_1 <= 1) { /* ECC 200 */ - error_number = data_matrix_200(symbol, source, length); + error_number = datamatrix_200(symbol, source, length); } else { /* ECC 000 - 140 */ strcpy(symbol->errtxt, "524: Older Data Matrix standards are no longer supported"); diff --git a/backend/gridmtx.c b/backend/gridmtx.c index 44a504cc..1f78960a 100644 --- a/backend/gridmtx.c +++ b/backend/gridmtx.c @@ -1006,7 +1006,7 @@ static void place_layer_id(char *grid, int size, int layers, int modules, int ec } } -INTERNAL int grid_matrix(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int gridmatrix(struct zint_symbol *symbol, unsigned char source[], int length) { int size, modules, error_number; int auto_layers, min_layers, layers, auto_ecc_level, min_ecc_level, ecc_level; int x, y, i; diff --git a/backend/hanxin.c b/backend/hanxin.c index f7d9d1a6..3b7f6c25 100644 --- a/backend/hanxin.c +++ b/backend/hanxin.c @@ -1448,7 +1448,7 @@ static void hx_apply_bitmask(unsigned char *grid, const int size, const int vers } /* Han Xin Code - main */ -INTERNAL int han_xin(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int hanxin(struct zint_symbol *symbol, unsigned char source[], int length) { int est_binlen; int ecc_level = symbol->option_1; int i, j, j_max, version; diff --git a/backend/imail.c b/backend/imail.c index 79a9cbfe..be2db805 100644 --- a/backend/imail.c +++ b/backend/imail.c @@ -244,7 +244,7 @@ static unsigned short USPS_MSB_Math_CRC11GenerateFrameCheckSequence(unsigned cha INTERNAL int daft_set_height(struct zint_symbol *symbol, float min_height, float max_height); -INTERNAL int imail(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int usps_imail(struct zint_symbol *symbol, unsigned char source[], int length) { char data_pattern[200]; int error_number; int i, j, read; @@ -434,22 +434,22 @@ INTERNAL int imail(struct zint_symbol *symbol, unsigned char source[], int lengt read += 2; } -#ifdef COMPLIANT_HEIGHTS - /* USPS-B-3200 Section 2.3.1 - Using bar pitch as X (1" / 43) ~ 0.023" based on 22 bars + 21 spaces per inch (bar width 0.015" - 0.025"), - height 0.125" - 0.165" - Tracker 0.048" (average of 0.039" - 0.057") - Ascender/descender 0.0965" (average of 0.082" - 0.111") less T = 0.0485" - */ - symbol->row_height[0] = 0.0485f * 43; /* 2.0855 */ - symbol->row_height[1] = 0.048f * 43; /* 2.064 */ - /* Note using max X for minimum and min X for maximum */ - error_number = daft_set_height(symbol, 0.125f * 39 /*4.875*/, 0.165f * 47 /*7.755*/); -#else - symbol->row_height[0] = 3.0f; - symbol->row_height[1] = 2.0f; - daft_set_height(symbol, 0.0f, 0.0f); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* USPS-B-3200 Section 2.3.1 + Using bar pitch as X (1" / 43) ~ 0.023" based on 22 bars + 21 spaces per inch (bar width 0.015" - 0.025"), + height 0.125" - 0.165" + Tracker 0.048" (average of 0.039" - 0.057") + Ascender/descender 0.0965" (average of 0.082" - 0.111") less T = 0.0485" + */ + symbol->row_height[0] = stripf(0.0485f * 43); /* 2.0855 */ + symbol->row_height[1] = stripf(0.048f * 43); /* 2.064 */ + /* Note using max X for minimum and min X for maximum */ + error_number = daft_set_height(symbol, stripf(0.125f * 39) /*4.875*/, stripf(0.165f * 47) /*7.755*/); + } else { + symbol->row_height[0] = 3.0f; + symbol->row_height[1] = 2.0f; + (void) daft_set_height(symbol, 0.0f, 0.0f); + } symbol->rows = 3; symbol->width = read - 1; return error_number; diff --git a/backend/library.c b/backend/library.c index bd4098d0..67830bad 100644 --- a/backend/library.c +++ b/backend/library.c @@ -132,80 +132,75 @@ void ZBarcode_Delete(struct zint_symbol *symbol) { } INTERNAL int eanx(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN system barcodes */ -INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 3 from 9 (or Code 39) */ -/* Pharmazentral Nummer (PZN) */ -INTERNAL int pharmazentral(struct zint_symbol *symbol, unsigned char source[], int length); +INTERNAL int code39(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 3 from 9 (or Code 39) */ +INTERNAL int pzn(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmazentral Nummer (PZN) */ /* Extended Code 3 from 9 (or Code 39+) */ -INTERNAL int ec39(struct zint_symbol *symbol, unsigned char source[], int length); +INTERNAL int excode39(struct zint_symbol *symbol, unsigned char source[], int length); /* Codabar - a simple substitution cipher */ INTERNAL int codabar(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Standard (& Matrix) */ -INTERNAL int matrix_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); -/* Code 2 of 5 Industrial */ -INTERNAL int industrial_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); -INTERNAL int iata_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 IATA */ -/* Code 2 of 5 Interleaved */ -INTERNAL int interleaved_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); -/* Code 2 of 5 Data Logic */ -INTERNAL int logic_two_of_five(struct zint_symbol *symbol, unsigned char source[], int length); +INTERNAL int c25standard(struct zint_symbol *symbol, unsigned char source[], int length); +INTERNAL int c25ind(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Industrial */ +INTERNAL int c25iata(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 IATA */ +INTERNAL int c25inter(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Interleaved */ +INTERNAL int c25logic(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 2 of 5 Data Logic */ INTERNAL int itf14(struct zint_symbol *symbol, unsigned char source[], int length); /* ITF-14 */ INTERNAL int dpleit(struct zint_symbol *symbol, unsigned char source[], int length); /* Deutsche Post Leitcode */ INTERNAL int dpident(struct zint_symbol *symbol, unsigned char source[], int length); /* Deutsche Post Identcode */ /* Code 93 - a re-working of Code 39+, generates 2 check digits */ -INTERNAL int c93(struct zint_symbol *symbol, unsigned char source[], int length); -INTERNAL int code_128(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 128 and NVE-18 */ -INTERNAL int ean_128(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN-128 (GS1-128) */ -INTERNAL int code_11(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 11 */ -INTERNAL int msi_handle(struct zint_symbol *symbol, unsigned char source[], int length); /* MSI Plessey */ +INTERNAL int code93(struct zint_symbol *symbol, unsigned char source[], int length); +INTERNAL int code128(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 128 and NVE-18 */ +INTERNAL int gs1_128(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN-128 (GS1-128) */ +INTERNAL int code11(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 11 */ +INTERNAL int msi_plessey(struct zint_symbol *symbol, unsigned char source[], int length); /* MSI Plessey */ INTERNAL int telepen(struct zint_symbol *symbol, unsigned char source[], int length); /* Telepen ASCII */ INTERNAL int telepen_num(struct zint_symbol *symbol, unsigned char source[], int length); /* Telepen Numeric */ INTERNAL int plessey(struct zint_symbol *symbol, unsigned char source[], int length); /* Plessey Code */ -INTERNAL int pharma_one(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmacode One Track */ -INTERNAL int flattermarken(struct zint_symbol *symbol, unsigned char source[], int length); /* Flattermarken */ +INTERNAL int pharma(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmacode One Track */ +INTERNAL int flat(struct zint_symbol *symbol, unsigned char source[], int length); /* Flattermarken */ INTERNAL int fim(struct zint_symbol *symbol, unsigned char source[], int length); /* Facing Identification Mark */ INTERNAL int pharma_two(struct zint_symbol *symbol, unsigned char source[], int length); /* Pharmacode Two Track */ -INTERNAL int post_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* Postnet */ -INTERNAL int planet_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* PLANET */ +INTERNAL int postnet(struct zint_symbol *symbol, unsigned char source[], int length); /* Postnet */ +INTERNAL int planet(struct zint_symbol *symbol, unsigned char source[], int length); /* PLANET */ /* Intelligent Mail (aka USPS OneCode) */ -INTERNAL int imail(struct zint_symbol *symbol, unsigned char source[], int length); -INTERNAL int royal_plot(struct zint_symbol *symbol, unsigned char source[], int length); /* RM4SCC */ -/* Australia Post 4-state */ -INTERNAL int australia_post(struct zint_symbol *symbol, unsigned char source[], int length); +INTERNAL int usps_imail(struct zint_symbol *symbol, unsigned char source[], int length); +INTERNAL int rm4scc(struct zint_symbol *symbol, unsigned char source[], int length); /* RM4SCC */ +INTERNAL int auspost(struct zint_symbol *symbol, unsigned char source[], int length); /* Australia Post 4-state */ INTERNAL int code16k(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 16k */ -INTERNAL int pdf417enc(struct zint_symbol *symbol, unsigned char source[], int length); /* PDF417 */ -INTERNAL int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], int length); /* Micro PDF417 */ +INTERNAL int pdf417(struct zint_symbol *symbol, unsigned char source[], int length); /* PDF417 */ +INTERNAL int micropdf417(struct zint_symbol *symbol, unsigned char chaine[], int length); /* Micro PDF417 */ INTERNAL int maxicode(struct zint_symbol *symbol, unsigned char source[], int length); /* Maxicode */ -INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS-14 */ -INTERNAL int rsslimited(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS Limited */ -INTERNAL int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS Expanded */ +INTERNAL int dbar_omn(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS-14 */ +INTERNAL int dbar_ltd(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS Limited */ +INTERNAL int dbar_exp(struct zint_symbol *symbol, unsigned char source[], int length); /* RSS Expanded */ INTERNAL int composite(struct zint_symbol *symbol, unsigned char source[], int length); /* Composite Symbology */ -INTERNAL int kix_code(struct zint_symbol *symbol, unsigned char source[], int length); /* TNT KIX Code */ +INTERNAL int kix(struct zint_symbol *symbol, unsigned char source[], int length); /* TNT KIX Code */ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], int length); /* Aztec Code */ INTERNAL int code32(struct zint_symbol *symbol, unsigned char source[], int length); /* Italian Pharmacode */ -INTERNAL int daft_code(struct zint_symbol *symbol, unsigned char source[], int length); /* DAFT Code */ -INTERNAL int ean_14(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN-14 */ -INTERNAL int nve_18(struct zint_symbol *symbol, unsigned char source[], int length); /* NVE-18 */ +INTERNAL int daft(struct zint_symbol *symbol, unsigned char source[], int length); /* DAFT Code */ +INTERNAL int ean14(struct zint_symbol *symbol, unsigned char source[], int length); /* EAN-14 */ +INTERNAL int nve18(struct zint_symbol *symbol, unsigned char source[], int length); /* NVE-18 */ INTERNAL int microqr(struct zint_symbol *symbol, unsigned char source[], int length); /* Micro QR Code */ -INTERNAL int aztec_runes(struct zint_symbol *symbol, unsigned char source[], int length); /* Aztec Runes */ -INTERNAL int korea_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Korea Post */ -INTERNAL int japan_post(struct zint_symbol *symbol, unsigned char source[], int length); /* Japanese Post */ -INTERNAL int code_49(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 49 */ -INTERNAL int channel_code(struct zint_symbol *symbol, unsigned char source[], int length); /* Channel Code */ -INTERNAL int code_one(struct zint_symbol *symbol, unsigned char source[], int length); /* Code One */ -INTERNAL int grid_matrix(struct zint_symbol *symbol, unsigned char source[], int length); /* Grid Matrix */ -INTERNAL int han_xin(struct zint_symbol *symbol, unsigned char source[], int length); /* Han Xin */ +INTERNAL int azrune(struct zint_symbol *symbol, unsigned char source[], int length); /* Aztec Runes */ +INTERNAL int koreapost(struct zint_symbol *symbol, unsigned char source[], int length); /* Korea Post */ +INTERNAL int japanpost(struct zint_symbol *symbol, unsigned char source[], int length); /* Japanese Post */ +INTERNAL int code49(struct zint_symbol *symbol, unsigned char source[], int length); /* Code 49 */ +INTERNAL int channel(struct zint_symbol *symbol, unsigned char source[], int length); /* Channel Code */ +INTERNAL int codeone(struct zint_symbol *symbol, unsigned char source[], int length); /* Code One */ +INTERNAL int gridmatrix(struct zint_symbol *symbol, unsigned char source[], int length); /* Grid Matrix */ +INTERNAL int hanxin(struct zint_symbol *symbol, unsigned char source[], int length); /* Han Xin */ INTERNAL int dotcode(struct zint_symbol *symbol, unsigned char source[], int length); /* DotCode */ -INTERNAL int codablock(struct zint_symbol *symbol, unsigned char source[], int length); /* Codablock */ +INTERNAL int codablockf(struct zint_symbol *symbol, unsigned char source[], int length); /* Codablock */ INTERNAL int upnqr(struct zint_symbol *symbol, unsigned char source[], int length); /* UPNQR */ -INTERNAL int qr_code(struct zint_symbol *symbol, unsigned char source[], int length); /* QR Code */ -INTERNAL int dmatrix(struct zint_symbol *symbol, unsigned char source[], int length); /* Data Matrix (IEC16022) */ +INTERNAL int qrcode(struct zint_symbol *symbol, unsigned char source[], int length); /* QR Code */ +INTERNAL int datamatrix(struct zint_symbol *symbol, unsigned char source[], int length); /* Data Matrix (IEC16022) */ /* VIN Code (Vehicle Identification Number) */ INTERNAL int vin(struct zint_symbol *symbol, unsigned char source[], int length); /* Royal Mail 4-state Mailmark */ INTERNAL int mailmark(struct zint_symbol *symbol, unsigned char source[], int length); -INTERNAL int ultracode(struct zint_symbol *symbol, unsigned char source[], int length); /* Ultracode */ +INTERNAL int ultra(struct zint_symbol *symbol, unsigned char source[], int length); /* Ultracode */ INTERNAL int rmqr(struct zint_symbol *symbol, unsigned char source[], int length); /* rMQR */ -INTERNAL int dpd_parcel(struct zint_symbol *symbol, unsigned char source[], int length); /* DPD Code */ +INTERNAL int dpd(struct zint_symbol *symbol, unsigned char source[], int length); /* DPD Code */ INTERNAL int plot_raster(struct zint_symbol *symbol, int rotate_angle, int file_type); /* Plot to PNG/BMP/PCX */ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_type); /* Plot to EPS/EMF/SVG */ @@ -299,7 +294,7 @@ static int dump_plot(struct zint_symbol *symbol) { /* Process health industry bar code data */ static int hibc(struct zint_symbol *symbol, unsigned char source[], int length) { int i; - int counter, error_number; + int counter, error_number = 0; char to_process[113], check_digit; /* without "+" and check: max 110 characters in HIBC 2.6 */ @@ -308,10 +303,9 @@ static int hibc(struct zint_symbol *symbol, unsigned char source[], int length) return ZINT_ERROR_TOO_LONG; } to_upper(source); - error_number = is_sane(TECHNETIUM, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(TECHNETIUM, source, length) != 0) { strcpy(symbol->errtxt, "203: Invalid character in data (alphanumerics, space and \"-.$/+%\" only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } counter = 41; @@ -355,35 +349,35 @@ static int hibc(struct zint_symbol *symbol, unsigned char source[], int length) switch (symbol->symbology) { case BARCODE_HIBC_128: - error_number = code_128(symbol, (unsigned char *) to_process, length); + error_number = code128(symbol, (unsigned char *) to_process, length); ustrcpy(symbol->text, "*"); ustrcat(symbol->text, to_process); ustrcat(symbol->text, "*"); break; case BARCODE_HIBC_39: symbol->option_2 = 0; - error_number = c39(symbol, (unsigned char *) to_process, length); + error_number = code39(symbol, (unsigned char *) to_process, length); ustrcpy(symbol->text, "*"); ustrcat(symbol->text, to_process); ustrcat(symbol->text, "*"); break; case BARCODE_HIBC_DM: - error_number = dmatrix(symbol, (unsigned char *) to_process, length); + error_number = datamatrix(symbol, (unsigned char *) to_process, length); break; case BARCODE_HIBC_QR: - error_number = qr_code(symbol, (unsigned char *) to_process, length); + error_number = qrcode(symbol, (unsigned char *) to_process, length); break; case BARCODE_HIBC_PDF: - error_number = pdf417enc(symbol, (unsigned char *) to_process, length); + error_number = pdf417(symbol, (unsigned char *) to_process, length); break; case BARCODE_HIBC_MICPDF: - error_number = micro_pdf417(symbol, (unsigned char *) to_process, length); + error_number = micropdf417(symbol, (unsigned char *) to_process, length); break; case BARCODE_HIBC_AZTEC: error_number = aztec(symbol, (unsigned char *) to_process, length); break; case BARCODE_HIBC_BLOCKF: - error_number = codablock(symbol, (unsigned char *) to_process, length); + error_number = codablockf(symbol, (unsigned char *) to_process, length); break; } @@ -542,6 +536,41 @@ static int has_hrt(const int symbology) { return 1; } +/* Used for dispatching barcodes and for whether symbol id valid */ +typedef int (*barcode_func_t)(struct zint_symbol *, unsigned char *, int); +static const barcode_func_t barcode_funcs[146] = { + NULL, code11, c25standard, c25inter, c25iata, /*0-4*/ + NULL, c25logic, c25ind, code39, excode39, /*5-9*/ + NULL, NULL, NULL, eanx, eanx, /*10-14*/ + NULL, gs1_128, NULL, codabar, NULL, /*15-19*/ + code128, dpleit, dpident, code16k, code49, /*20-24*/ + code93, NULL, NULL, flat, dbar_omn, /*25-29*/ + dbar_ltd, dbar_exp, telepen, NULL, eanx, /*30-34*/ + eanx, NULL, eanx, eanx, NULL, /*35-39*/ + postnet, NULL, NULL, NULL, NULL, /*40-44*/ + NULL, NULL, msi_plessey, NULL, fim, /*45-49*/ + code39, pharma, pzn, pharma_two, NULL, /*50-54*/ + pdf417, pdf417, maxicode, qrcode, NULL, /*55-59*/ + code128, NULL, NULL, auspost, NULL, /*60-64*/ + NULL, auspost, auspost, auspost, eanx, /*65-69*/ + rm4scc, datamatrix, ean14, vin, codablockf, /*70-74*/ + nve18, japanpost, koreapost, NULL, dbar_omn, /*75-79*/ + dbar_omn, dbar_exp, planet, NULL, micropdf417, /*80-84*/ + usps_imail, plessey, telepen_num, NULL, itf14, /*85-89*/ + kix, NULL, aztec, daft, NULL, /*90-94*/ + NULL, dpd, microqr, hibc, hibc, /*95-99*/ + NULL, NULL, hibc, NULL, hibc, /*100-104*/ + NULL, hibc, NULL, hibc, NULL, /*105-109*/ + hibc, NULL, hibc, NULL, NULL, /*110-114*/ + dotcode, hanxin, NULL, NULL, NULL, /*115-119*/ + NULL, mailmark, NULL, NULL, NULL, /*120-124*/ + NULL, NULL, NULL, azrune, code32, /*125-129*/ + composite, composite, composite, composite, composite, /*130-134*/ + composite, composite, composite, composite, composite, /*135-139*/ + channel, codeone, gridmatrix, upnqr, ultra, /*140-144*/ + rmqr, +}; + static int reduced_charset(struct zint_symbol *symbol, unsigned char *source, int length); static int extended_or_reduced_charset(struct zint_symbol *symbol, unsigned char *source, const int length) { @@ -549,17 +578,13 @@ static int extended_or_reduced_charset(struct zint_symbol *symbol, unsigned char switch (symbol->symbology) { /* These are the "elite" standards which have support for specific character sets */ - case BARCODE_QRCODE: error_number = qr_code(symbol, source, length); - break; - case BARCODE_MICROQR: error_number = microqr(symbol, source, length); - break; - case BARCODE_GRIDMATRIX: error_number = grid_matrix(symbol, source, length); - break; - case BARCODE_HANXIN: error_number = han_xin(symbol, source, length); - break; - case BARCODE_UPNQR: error_number = upnqr(symbol, source, length); - break; - case BARCODE_RMQR: error_number = rmqr(symbol, source, length); + case BARCODE_QRCODE: + case BARCODE_MICROQR: + case BARCODE_GRIDMATRIX: + case BARCODE_HANXIN: + case BARCODE_UPNQR: + case BARCODE_RMQR: + error_number = (*barcode_funcs[symbol->symbology])(symbol, source, length); break; default: error_number = reduced_charset(symbol, source, length); break; @@ -568,8 +593,8 @@ static int extended_or_reduced_charset(struct zint_symbol *symbol, unsigned char return error_number; } +/* These are the "norm" standards which only support Latin-1 at most, though a few support ECI */ static int reduced_charset(struct zint_symbol *symbol, unsigned char *source, int length) { - /* These are the "norm" standards which only support Latin-1 at most, though a few support ECI */ int error_number = 0; unsigned char *preprocessed = source; @@ -594,169 +619,7 @@ static int reduced_charset(struct zint_symbol *symbol, unsigned char *source, in } } - switch (symbol->symbology) { - case BARCODE_C25STANDARD: error_number = matrix_two_of_five(symbol, preprocessed, length); - break; - case BARCODE_C25IND: error_number = industrial_two_of_five(symbol, preprocessed, length); - break; - case BARCODE_C25INTER: error_number = interleaved_two_of_five(symbol, preprocessed, length); - break; - case BARCODE_C25IATA: error_number = iata_two_of_five(symbol, preprocessed, length); - break; - case BARCODE_C25LOGIC: error_number = logic_two_of_five(symbol, preprocessed, length); - break; - case BARCODE_DPLEIT: error_number = dpleit(symbol, preprocessed, length); - break; - case BARCODE_DPIDENT: error_number = dpident(symbol, preprocessed, length); - break; - case BARCODE_UPCA: - case BARCODE_UPCA_CHK: - case BARCODE_UPCE: - case BARCODE_UPCE_CHK: - case BARCODE_EANX: - case BARCODE_EANX_CHK: - case BARCODE_ISBNX: - error_number = eanx(symbol, preprocessed, length); - break; - case BARCODE_GS1_128: error_number = ean_128(symbol, preprocessed, length); - break; - case BARCODE_CODE39: error_number = c39(symbol, preprocessed, length); - break; - case BARCODE_PZN: error_number = pharmazentral(symbol, preprocessed, length); - break; - case BARCODE_EXCODE39: error_number = ec39(symbol, preprocessed, length); - break; - case BARCODE_CODABAR: error_number = codabar(symbol, preprocessed, length); - break; - case BARCODE_CODE93: error_number = c93(symbol, preprocessed, length); - break; - case BARCODE_LOGMARS: error_number = c39(symbol, preprocessed, length); - break; - case BARCODE_CODE128: - case BARCODE_CODE128B: - error_number = code_128(symbol, preprocessed, length); - break; - case BARCODE_NVE18: error_number = nve_18(symbol, preprocessed, length); - break; - case BARCODE_CODE11: error_number = code_11(symbol, preprocessed, length); - break; - case BARCODE_MSI_PLESSEY: error_number = msi_handle(symbol, preprocessed, length); - break; - case BARCODE_TELEPEN: error_number = telepen(symbol, preprocessed, length); - break; - case BARCODE_TELEPEN_NUM: error_number = telepen_num(symbol, preprocessed, length); - break; - case BARCODE_PHARMA: error_number = pharma_one(symbol, preprocessed, length); - break; - case BARCODE_PLESSEY: error_number = plessey(symbol, preprocessed, length); - break; - case BARCODE_ITF14: error_number = itf14(symbol, preprocessed, length); - break; - case BARCODE_FLAT: error_number = flattermarken(symbol, preprocessed, length); - break; - case BARCODE_FIM: error_number = fim(symbol, preprocessed, length); - break; - case BARCODE_POSTNET: error_number = post_plot(symbol, preprocessed, length); - break; - case BARCODE_PLANET: error_number = planet_plot(symbol, preprocessed, length); - break; - case BARCODE_RM4SCC: error_number = royal_plot(symbol, preprocessed, length); - break; - case BARCODE_AUSPOST: - case BARCODE_AUSREPLY: - case BARCODE_AUSROUTE: - case BARCODE_AUSREDIRECT: - error_number = australia_post(symbol, preprocessed, length); - break; - case BARCODE_CODE16K: error_number = code16k(symbol, preprocessed, length); - break; - case BARCODE_PHARMA_TWO: error_number = pharma_two(symbol, preprocessed, length); - break; - case BARCODE_USPS_IMAIL: error_number = imail(symbol, preprocessed, length); - break; - case BARCODE_DBAR_OMN: - case BARCODE_DBAR_STK: - case BARCODE_DBAR_OMNSTK: - error_number = rss14(symbol, preprocessed, length); - break; - case BARCODE_DBAR_LTD: error_number = rsslimited(symbol, preprocessed, length); - break; - case BARCODE_DBAR_EXP: - case BARCODE_DBAR_EXPSTK: - error_number = rssexpanded(symbol, preprocessed, length); - break; - case BARCODE_EANX_CC: - case BARCODE_GS1_128_CC: - case BARCODE_DBAR_OMN_CC: - case BARCODE_DBAR_LTD_CC: - case BARCODE_DBAR_EXP_CC: - case BARCODE_UPCA_CC: - case BARCODE_UPCE_CC: - case BARCODE_DBAR_STK_CC: - case BARCODE_DBAR_OMNSTK_CC: - case BARCODE_DBAR_EXPSTK_CC: - error_number = composite(symbol, preprocessed, length); - break; - case BARCODE_KIX: error_number = kix_code(symbol, preprocessed, length); - break; - case BARCODE_CODE32: error_number = code32(symbol, preprocessed, length); - break; - case BARCODE_DAFT: error_number = daft_code(symbol, preprocessed, length); - break; - case BARCODE_EAN14: - error_number = ean_14(symbol, preprocessed, length); - break; - case BARCODE_AZRUNE: error_number = aztec_runes(symbol, preprocessed, length); - break; - case BARCODE_KOREAPOST: error_number = korea_post(symbol, preprocessed, length); - break; - case BARCODE_HIBC_128: - case BARCODE_HIBC_39: - case BARCODE_HIBC_DM: - case BARCODE_HIBC_QR: - case BARCODE_HIBC_PDF: - case BARCODE_HIBC_MICPDF: - case BARCODE_HIBC_AZTEC: - case BARCODE_HIBC_BLOCKF: - error_number = hibc(symbol, preprocessed, length); - break; - case BARCODE_JAPANPOST: error_number = japan_post(symbol, preprocessed, length); - break; - case BARCODE_CODE49: error_number = code_49(symbol, preprocessed, length); - break; - case BARCODE_CHANNEL: error_number = channel_code(symbol, preprocessed, length); - break; - case BARCODE_CODEONE: error_number = code_one(symbol, preprocessed, length); - break; - case BARCODE_DATAMATRIX: error_number = dmatrix(symbol, preprocessed, length); - break; - case BARCODE_PDF417: - case BARCODE_PDF417COMP: - error_number = pdf417enc(symbol, preprocessed, length); - break; - case BARCODE_MICROPDF417: error_number = micro_pdf417(symbol, preprocessed, length); - break; - case BARCODE_MAXICODE: error_number = maxicode(symbol, preprocessed, length); - break; - case BARCODE_AZTEC: error_number = aztec(symbol, preprocessed, length); - break; - case BARCODE_DOTCODE: error_number = dotcode(symbol, preprocessed, length); - break; - case BARCODE_CODABLOCKF: error_number = codablock(symbol, preprocessed, length); - break; - case BARCODE_VIN: error_number = vin(symbol, preprocessed, length); - break; - case BARCODE_MAILMARK: error_number = mailmark(symbol, preprocessed, length); - break; - case BARCODE_ULTRA: error_number = ultracode(symbol, preprocessed, length); - break; - case BARCODE_DPD: error_number = dpd_parcel(symbol, preprocessed, length); - break; - default: /* Should never happen */ - strcpy(symbol->errtxt, "001: Internal error"); /* Not reached */ - error_number = ZINT_ERROR_ENCODING_PROBLEM; - break; - } + error_number = (*barcode_funcs[symbol->symbology])(symbol, preprocessed, length); return error_number; } @@ -1484,31 +1347,14 @@ int ZBarcode_Encode_File_and_Buffer_Vector(struct zint_symbol *symbol, const cha return error_number; } +/* Checks whether a symbology is supported */ int ZBarcode_ValidID(int symbol_id) { - /* Checks whether a symbology is supported */ - static const unsigned char ids[146] = { - 0, 1, 2, 3, 4, 0, 6, 7, 8, 9, - 0, 0, 0, 13, 14, 0, 16, 0, 18, 0, - 20, 21, 22, 23, 24, 25, 0, 0, 28, 29, - 30, 31, 32, 0, 34, 35, 0, 37, 38, 0, - 40, 0, 0, 0, 0, 0, 0, 47, 0, 49, - 50, 51, 52, 53, 0, 55, 56, 57, 58, 0, - 60, 0, 0, 63, 0, 0, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 0, 79, - 80, 81, 82, 0, 84, 85, 86, 87, 0, 89, - 90, 0, 92, 93, 0, 0, 96, 97, 98, 99, - 0, 0, 102, 0, 104, 0, 106, 0, 108, 0, - 110, 0, 112, 0, 0, 115, 116, 0, 0, 0, - 0, 121, 0, 0, 0, 0, 0, 0, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, - }; if (symbol_id <= 0 || symbol_id > 145) { return 0; } - return ids[symbol_id] != 0; + return barcode_funcs[symbol_id] != NULL; } /* Return the capability flags for symbology `symbol_id` that match `cap_flag` */ @@ -1628,6 +1474,36 @@ unsigned int ZBarcode_Cap(int symbol_id, unsigned int cap_flag) { break; } } + if ((cap_flag & ZINT_CAP_COMPLIANT_HEIGHT) && !is_fixed_ratio(symbol_id)) { + switch (symbol_id) { + /* These don't have a compliant height defined */ + case BARCODE_CODE11: /* TODO: Find doc */ + case BARCODE_C25STANDARD: /* For C25 only have doc for C25INTER */ + case BARCODE_C25IATA: + case BARCODE_C25LOGIC: + case BARCODE_C25IND: + case BARCODE_CODE128: /* Left to application */ + case BARCODE_CODE128B: + case BARCODE_DPLEIT: /* TODO: Find doc */ + case BARCODE_DPIDENT: /* TODO: Find doc */ + case BARCODE_FLAT: /* TODO: Find doc */ + case BARCODE_MSI_PLESSEY: /* TODO: Find doc */ + case BARCODE_PDF417: /* Has compliant height but already warns & uses for default */ + case BARCODE_PDF417COMP: + case BARCODE_VIN: /* Spec unlikely */ + case BARCODE_KOREAPOST: /* TODO: Find doc */ + case BARCODE_MICROPDF417: /* See PDF417 */ + case BARCODE_PLESSEY: /* TODO: Find doc */ + case BARCODE_DAFT: /* Generic */ + case BARCODE_HIBC_128: /* See CODE128 */ + case BARCODE_HIBC_PDF: /* See PDF417 */ + case BARCODE_HIBC_MICPDF: /* See PDF417 */ + break; + default: + result |= ZINT_CAP_COMPLIANT_HEIGHT; + break; + } + } return result; } diff --git a/backend/mailmark.c b/backend/mailmark.c index 3821f212..79a92610 100644 --- a/backend/mailmark.c +++ b/backend/mailmark.c @@ -33,9 +33,11 @@ /* * Developed in accordance with "Royal Mail Mailmark barcode C encoding and deconding instructions" - * (https://www.royalmail.com/sites/default/files/Mailmark-4-state-barcode-C-encoding-and-decoding-instructions-Sept-2015.pdf) + * (https://www.royalmail.com/sites/default/files/ + * Mailmark-4-state-barcode-C-encoding-and-decoding-instructions-Sept-2015.pdf) * and "Royal Mail Mailmark barcode L encoding and decoding" - * (https://www.royalmail.com/sites/default/files/Mailmark-4-state-barcode-L-encoding-and-decoding-instructions-Sept-2015.pdf) + * (https://www.royalmail.com/sites/default/files/ + * Mailmark-4-state-barcode-L-encoding-and-decoding-instructions-Sept-2015.pdf) * */ @@ -182,21 +184,21 @@ INTERNAL int mailmark(struct zint_symbol *symbol, unsigned char source[], int le // Format is in the range 0-4 format = ctoi(local_source[0]); if ((format < 0) || (format > 4)) { - strcpy(symbol->errtxt, "582: Format out of range (0 to 4)"); + strcpy(symbol->errtxt, "582: Format (1st character) out of range (0 to 4)"); return ZINT_ERROR_INVALID_DATA; } // Version ID is in the range 1-4 version_id = ctoi(local_source[1]) - 1; if ((version_id < 0) || (version_id > 3)) { - strcpy(symbol->errtxt, "583: Version ID out of range (1 to 4)"); + strcpy(symbol->errtxt, "583: Version ID (2nd character) out of range (1 to 4)"); return ZINT_ERROR_INVALID_DATA; } // Class is in the range 0-9,A-E mail_class = ctoi(local_source[2]); if ((mail_class < 0) || (mail_class > 14)) { - strcpy(symbol->errtxt, "584: Class out of range (0 to 9 and A to E)"); + strcpy(symbol->errtxt, "584: Class (3rd character) out of range (0 to 9 and A to E)"); return ZINT_ERROR_INVALID_DATA; } @@ -207,7 +209,7 @@ INTERNAL int mailmark(struct zint_symbol *symbol, unsigned char source[], int le supply_chain_id *= 10; supply_chain_id += ctoi(local_source[i]); } else { - strcpy(symbol->errtxt, "585: Invalid Supply Chain ID (digits only)"); + sprintf(symbol->errtxt, "585: Invalid Supply Chain ID at character %d (digits only)", i); return ZINT_ERROR_INVALID_DATA; } } @@ -219,7 +221,7 @@ INTERNAL int mailmark(struct zint_symbol *symbol, unsigned char source[], int le item_id *= 10; item_id += ctoi(local_source[i]); } else { - strcpy(symbol->errtxt, "586: Invalid Item ID (digits only)"); + sprintf(symbol->errtxt, "586: Invalid Item ID at character %d (digits only)", i); return ZINT_ERROR_INVALID_DATA; } } @@ -273,7 +275,7 @@ INTERNAL int mailmark(struct zint_symbol *symbol, unsigned char source[], int le // Verify postcode type if (postcode_type != 7) { if (verify_postcode(postcode, postcode_type) != 0) { - strcpy(symbol->errtxt, "587: Invalid postcode"); + sprintf(symbol->errtxt, "587: Invalid postcode \"%s\"", postcode); return ZINT_ERROR_INVALID_DATA; } } @@ -487,22 +489,24 @@ INTERNAL int mailmark(struct zint_symbol *symbol, unsigned char source[], int le j += 2; } -#ifdef COMPLIANT_HEIGHTS - /* Royal Mail Mailmark Barcode Definition Document (15 Sept 2015) Section 3.5.1 - https://www.royalmail.com/sites/default/files/Royal-Mail-Mailmark-barcode-definition-document-September-2015.pdf - Using bar pitch as X (25.4mm / 42.3) ~ 0.6mm based on 21.2 bars + 21.1 spaces per 25.4mm (bar width 0.38-63mm) - Using recommended 1.9mm and 1.3mm heights for Ascender/Descenders and Trackers resp. as defaults - Min height 4.22mm * 39 (max pitch) / 25.4mm ~ 6.47, max height 5.84mm * 47 (min pitch) / 25.4mm ~ 10.8 - */ - symbol->row_height[0] = (float) ((1.9 * 42.3) / 25.4); /* ~3.16 */ - symbol->row_height[1] = (float) ((1.3 * 42.3) / 25.4); /* ~2.16 */ - /* Note using max X for minimum and min X for maximum */ - error_number = daft_set_height(symbol, (float) ((4.22 * 39) / 25.4), (float) ((5.84 * 47) / 25.4)); -#else - symbol->row_height[0] = 4.0f; - symbol->row_height[1] = 2.0f; - daft_set_height(symbol, 0.0f, 0.0f); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* Royal Mail Mailmark Barcode Definition Document (15 Sept 2015) Section 3.5.1 + (https://www.royalmail.com/sites/default/files/ + Royal-Mail-Mailmark-barcode-definition-document-September-2015.pdf) + Using bar pitch as X (25.4mm / 42.3) ~ 0.6mm based on 21.2 bars + 21.1 spaces per 25.4mm (bar width + 0.38mm - 0.63mm) + Using recommended 1.9mm and 1.3mm heights for Ascender/Descenders and Trackers resp. as defaults + Min height 4.22mm * 39 (max pitch) / 25.4mm ~ 6.47, max height 5.84mm * 47 (min pitch) / 25.4mm ~ 10.8 + */ + symbol->row_height[0] = stripf((1.9f * 42.3f) / 25.4f); /* ~3.16 */ + symbol->row_height[1] = stripf((1.3f * 42.3f) / 25.4f); /* ~2.16 */ + /* Note using max X for minimum and min X for maximum */ + error_number = daft_set_height(symbol, stripf((4.22f * 39) / 25.4f), stripf((5.84f * 47) / 25.4f)); + } else { + symbol->row_height[0] = 4.0f; + symbol->row_height[1] = 2.0f; + (void) daft_set_height(symbol, 0.0f, 0.0f); + } symbol->rows = 3; symbol->width = j - 1; diff --git a/backend/medical.c b/backend/medical.c index 63b0c25a..a488c7d6 100644 --- a/backend/medical.c +++ b/backend/medical.c @@ -34,7 +34,7 @@ #include #include "common.h" -INTERNAL int c39(struct zint_symbol *symbol, unsigned char source[], int length); +INTERNAL int code39(struct zint_symbol *symbol, unsigned char source[], int length); /* Codabar table checked against EN 798:1995 */ @@ -47,7 +47,7 @@ static const char *CodaTable[20] = { "21212111", "11212121", "11221211", "12121121", "11121221", "11122211" }; -INTERNAL int pharma_one(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int pharma(struct zint_symbol *symbol, unsigned char source[], int length) { /* "Pharmacode can represent only a single integer from 3 to 131070. Unlike other commonly used one-dimensional barcode schemes, pharmacode does not store the data in a form corresponding to the human-readable digits; the number is encoded in binary, rather @@ -62,7 +62,7 @@ INTERNAL int pharma_one(struct zint_symbol *symbol, unsigned char source[], int (http://www.gomaro.ch/ftproot/Laetus_PHARMA-CODE.pdf) */ unsigned long int tester; - int counter, error_number, h; + int counter, error_number = 0, h; char inter[18] = {0}; /* 131070 -> 17 bits */ char dest[64]; /* 17 * 2 + 1 */ @@ -70,10 +70,9 @@ INTERNAL int pharma_one(struct zint_symbol *symbol, unsigned char source[], int strcpy(symbol->errtxt, "350: Input too long (6 character maximum)"); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "351: Invalid character in data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } tester = atoi((char *) source); @@ -105,12 +104,12 @@ INTERNAL int pharma_one(struct zint_symbol *symbol, unsigned char source[], int expand(symbol, dest); -#ifdef COMPLIANT_HEIGHTS - /* Laetus Pharmacode Guide 1.2 Standard one-track height 8mm / 0.5mm (X) */ - error_number = set_height(symbol, 16.0f, 0.0f, 0.0f, 0 /*no_errtxt*/); -#else - (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* Laetus Pharmacode Guide 1.2 Standard one-track height 8mm / 0.5mm (X) */ + error_number = set_height(symbol, 16.0f, 0.0f, 0.0f, 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); + } return error_number; } @@ -173,10 +172,9 @@ INTERNAL int pharma_two(struct zint_symbol *symbol, unsigned char source[], int strcpy(symbol->errtxt, "354: Input too long (8 character maximum"); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "355: Invalid character in data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } error_number = pharma_two_calc(symbol, source, height_pattern); if (error_number != 0) { @@ -197,13 +195,13 @@ INTERNAL int pharma_two(struct zint_symbol *symbol, unsigned char source[], int symbol->rows = 2; symbol->width = writer - 1; -#ifdef COMPLIANT_HEIGHTS - /* Laetus Pharmacode Guide 1.4 - Two-track height min 8mm / 2mm (X max) = 4, standard 8mm / 1mm = 8, max 12mm / 0.8mm (X min) = 15 */ - error_number = set_height(symbol, 2.0f, 8.0f, 15.0f, 0 /*no_errtxt*/); -#else - (void) set_height(symbol, 0.0f, 10.0f, 0.0f, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* Laetus Pharmacode Guide 1.4 + Two-track height min 8mm / 2mm (X max) = 4, standard 8mm / 1mm = 8, max 12mm / 0.8mm (X min) = 15 */ + error_number = set_height(symbol, 2.0f, 8.0f, 15.0f, 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 10.0f, 0.0f, 1 /*no_errtxt*/); + } return error_number; } @@ -211,11 +209,11 @@ INTERNAL int pharma_two(struct zint_symbol *symbol, unsigned char source[], int /* The Codabar system consisting of simple substitution */ INTERNAL int codabar(struct zint_symbol *symbol, unsigned char source[], int length) { - int i, error_number; + static const char calcium[] = CALCIUM; + int i, error_number = 0; char dest[512]; - int add_checksum, count = 0, checksum; + int add_checksum, count = 0, checksum = 0; int d_chars = 0; - float height; strcpy(dest, ""); @@ -244,21 +242,23 @@ INTERNAL int codabar(struct zint_symbol *symbol, unsigned char source[], int len } /* And must not use A, B, C or D otherwise (BS EN 798:1995 4.3.2) */ - error_number = is_sane(CALCIUM_INNER, source + 1, length - 2); - if (error_number) { - if (is_sane(CALCIUM, source + 1, length - 2) == 0) { + if (is_sane(CALCIUM_INNER, source + 1, length - 2) != 0) { + if (is_sane(calcium, source + 1, length - 2) == 0) { strcpy(symbol->errtxt, "363: Cannot contain \"A\", \"B\", \"C\" or \"D\""); } else { - sprintf(symbol->errtxt, "357: Invalid character in data (\"%s\" only)", CALCIUM); + sprintf(symbol->errtxt, "357: Invalid character in data (\"%s\" only)", calcium); } - return error_number; + return ZINT_ERROR_INVALID_DATA; } - add_checksum = symbol->option_2 == 1; + /* Add check character: 1 don't show to HRT, 2 do show to HRT + (unfortunately to maintain back-compatibility, this is reverse of C25) */ + add_checksum = symbol->option_2 == 1 || symbol->option_2 == 2; for (i = 0; i < length; i++) { - static const char calcium[] = CALCIUM; if (add_checksum) { + /* BS EN 798:1995 A.3 suggests using ISO 7064 algorithm but leaves it application defined. + Following BWIPP and TEC-IT, use this simple mod-16 algorithm (not in ISO 7064) */ count += strchr(calcium, source[i]) - calcium; if (i + 1 == length) { checksum = count % 16; @@ -266,7 +266,7 @@ INTERNAL int codabar(struct zint_symbol *symbol, unsigned char source[], int len checksum = 16 - checksum; } if (symbol->debug & ZINT_DEBUG_PRINT) { - printf("Codabar: %s, count %d, checksum %d\n", source, count, checksum); + printf("Codabar: %s, count %d, checksum %d (%c)\n", source, count, checksum, calcium[checksum]); } strcat(dest, CodaTable[checksum]); } @@ -279,23 +279,29 @@ INTERNAL int codabar(struct zint_symbol *symbol, unsigned char source[], int len expand(symbol, dest); -#ifdef COMPLIANT_HEIGHTS - /* BS EN 798:1995 4.4.1 (d) max of 5mm / 0.191mm (X) ~ 26.178 or 15% of width where (taking N = narrow/wide ratio - as 2 and I = X) width = ((2 * N + 5) * C + (N – 1) * (D + 2)) * X + I * (C – 1) + 2Q - = ((4 + 5) * C + (D + 2) + C - 1 + 2 * 10) * X = (10 * C + D + 21) * X - Length (C) includes start/stop chars */ - height = (float) ((10.0 * ((add_checksum ? length + 1 : length) + 2.0) + d_chars + 21.0) * 0.15); - if (height < (float) (5.0 / 0.191)) { - height = (float) (5.0 / 0.191); + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* BS EN 798:1995 4.4.1 (d) max of 5mm / 0.191mm (X) ~ 26.178 or 15% of width where (taking N = narrow/wide + ratio as 2 and I = X) width = ((2 * N + 5) * C + (N – 1) * (D + 2)) * X + I * (C – 1) + 2Q + = ((4 + 5) * C + (D + 2) + C - 1 + 2 * 10) * X = (10 * C + D + 21) * X + Length (C) includes start/stop chars */ + const float min_height_min = stripf(5.0f / 0.191f); + float min_height = stripf((10.0f * ((add_checksum ? length + 1 : length) + 2.0f) + d_chars + 21.0f) * 0.15f); + if (min_height < min_height_min) { + min_height = min_height_min; + } + /* Using 50 as default as none recommended */ + error_number = set_height(symbol, min_height, min_height > 50.0f ? min_height : 50.0f, 0.0f, 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); } - /* Using 50 as default as none recommended */ - error_number = set_height(symbol, height, height > 50.0f ? height : 50.0f, 0.0f, 0 /*no_errtxt*/); -#else - height = 50.0f; - (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); -#endif ustrcpy(symbol->text, source); + if (symbol->option_2 == 2) { + symbol->text[length - 1] = calcium[checksum]; /* Place before final A/B/C/D character (BS EN 798:1995 A.3) */ + symbol->text[length] = source[length - 1]; + symbol->text[length + 1] = '\0'; + } + return error_number; } @@ -312,10 +318,9 @@ INTERNAL int code32(struct zint_symbol *symbol, unsigned char source[], int leng strcpy(symbol->errtxt, "360: Input too long (8 character maximum)"); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "361: Invalid character in data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } /* Add leading zeros as required */ @@ -361,20 +366,22 @@ INTERNAL int code32(struct zint_symbol *symbol, unsigned char source[], int leng } risultante[6] = '\0'; /* Plot the barcode using Code 39 */ - error_number = c39(symbol, (unsigned char *) risultante, (int) strlen(risultante)); + error_number = code39(symbol, (unsigned char *) risultante, (int) strlen(risultante)); if (error_number != 0) { /* Should never happen */ return error_number; /* Not reached */ } -#ifdef COMPLIANT_HEIGHTS - /* Allegato A Caratteristiche tecniche del bollino farmaceutico - https://www.gazzettaufficiale.it/do/atto/serie_generale/caricaPdf?cdimg=14A0566800100010110001&dgu=2014-07-18&art.dataPubblicazioneGazzetta=2014-07-18&art.codiceRedazionale=14A05668&art.num=1&art.tiposerie=SG - X given as 0.250mm; height (and quiet zones) left to ISO/IEC 16388:2007 (Code 39) - So min height 5mm = 5mm / 0.25mm = 20 > 15% of width, i.e. (10 * 8 + 19) * 0.15 = 14.85 */ - error_number = set_height(symbol, 20.0f, 20.0f, 0.0f, 0 /*no_errtxt*/); /* Use as default also */ -#else - (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* Allegato A Caratteristiche tecniche del bollino farmaceutico + (https://www.gazzettaufficiale.it/do/atto/serie_generale/caricaPdf?cdimg=14A0566800100010110001 + &dgu=2014-07-18&art.dataPubblicazioneGazzetta=2014-07-18&art.codiceRedazionale=14A05668&art.num=1 + &art.tiposerie=SG) + X given as 0.250mm; height (and quiet zones) left to ISO/IEC 16388:2007 (Code 39) + So min height 5mm = 5mm / 0.25mm = 20 > 15% of width, i.e. (10 * 8 + 19) * 0.15 = 14.85 */ + error_number = set_height(symbol, 20.0f, 20.0f, 0.0f, 0 /*no_errtxt*/); /* Use as default also */ + } else { + (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); + } /* Override the normal text output with the Pharmacode number */ ustrcpy(symbol->text, "A"); diff --git a/backend/output.c b/backend/output.c index 51f23c88..b0a563cb 100644 --- a/backend/output.c +++ b/backend/output.c @@ -611,7 +611,7 @@ INTERNAL float output_large_bar_height(struct zint_symbol *symbol, int si) { if (zero_count) { large_bar_height = (symbol->height - fixed_height) / zero_count; if (large_bar_height <= 0.0f) { /* Shouldn't happen but protect against memory access violations */ - large_bar_height = 0.01f; /* Token positive value */ + large_bar_height = 0.0078125f; /* Token positive value (exact float 2**-6) */ symbol->height = large_bar_height * zero_count + fixed_height; } if (si && !isfintf(large_bar_height * si)) { diff --git a/backend/pdf417.c b/backend/pdf417.c index 65fd4acf..4eda92cb 100644 --- a/backend/pdf417.c +++ b/backend/pdf417.c @@ -508,7 +508,7 @@ static void numbprocess(int *chainemc, int *mclength, const unsigned char chaine } } -/* Initial processing of data, shared by `pdf417enc()` and `micro_pdf417()` */ +/* Initial processing of data, shared by `pdf417()` and `micropdf417()` */ static int pdf417_initial(struct zint_symbol *symbol, unsigned char chaine[], const int length, const int is_micro, int chainemc[PDF417_MAX_LEN], int *p_mclength, int structapp_cws[18], int *p_structapp_cp) { int i, indexchaine, indexliste, mode; @@ -661,7 +661,7 @@ static int pdf417_initial(struct zint_symbol *symbol, unsigned char chaine[], co } /* 366 */ -static int pdf417(struct zint_symbol *symbol, unsigned char chaine[], const int length) { +static int pdf417_enc(struct zint_symbol *symbol, unsigned char chaine[], const int length) { int i, k, j, longueur, loop, mccorrection[520] = {0}, offset; int total, chainemc[PDF417_MAX_LEN], mclength, c1, c2, c3, dummy[35]; char pattern[580]; @@ -872,7 +872,7 @@ static int pdf417(struct zint_symbol *symbol, unsigned char chaine[], const int } /* 345 */ -INTERNAL int pdf417enc(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int pdf417(struct zint_symbol *symbol, unsigned char source[], int length) { int codeerr, error_number; error_number = 0; @@ -895,7 +895,7 @@ INTERNAL int pdf417enc(struct zint_symbol *symbol, unsigned char source[], int l } /* 349 */ - codeerr = pdf417(symbol, source, length); + codeerr = pdf417_enc(symbol, source, length); /* 352 */ if (codeerr != 0) { @@ -907,7 +907,7 @@ INTERNAL int pdf417enc(struct zint_symbol *symbol, unsigned char source[], int l } /* like PDF417 only much smaller! */ -INTERNAL int micro_pdf417(struct zint_symbol *symbol, unsigned char chaine[], int length) { +INTERNAL int micropdf417(struct zint_symbol *symbol, unsigned char chaine[], int length) { int i, k, j, longueur, mccorrection[50] = {0}, offset; int total, chainemc[PDF417_MAX_LEN], mclength, error_number = 0; char pattern[580]; diff --git a/backend/plessey.c b/backend/plessey.c index f904d60a..70322c8d 100644 --- a/backend/plessey.c +++ b/backend/plessey.c @@ -55,16 +55,15 @@ INTERNAL int plessey(struct zint_symbol *symbol, unsigned char source[], int len unsigned char *checkptr; static const char grid[9] = {1, 1, 1, 1, 0, 1, 0, 0, 1}; char dest[554]; /* 8 + 65 * 8 + 8 * 2 + 9 + 1 = 554 */ - int error_number; + int error_number = 0; if (length > 65) { strcpy(symbol->errtxt, "370: Input too long (65 character maximum)"); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(SSET, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(SSET, source, length) != 0) { strcpy(symbol->errtxt, "371: Invalid character in data (digits and \"ABCDEF\" only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } if (!(checkptr = (unsigned char *) calloc(1, length * 4 + 8))) { @@ -155,7 +154,8 @@ static char msi_check_digit_mod11(const unsigned char source[], const int length } /* Plain MSI Plessey - does not calculate any check character */ -static void msi_plessey(struct zint_symbol *symbol, const unsigned char source[], const int length, char dest[]) { +static void msi_plessey_nomod(struct zint_symbol *symbol, const unsigned char source[], const int length, + char dest[]) { int i; @@ -290,8 +290,8 @@ static void msi_plessey_mod1110(struct zint_symbol *symbol, const unsigned char } } -INTERNAL int msi_handle(struct zint_symbol *symbol, unsigned char source[], int length) { - int error_number; +INTERNAL int msi_plessey(struct zint_symbol *symbol, unsigned char source[], int length) { + int error_number = 0; char dest[550]; /* 2 + 65 * 8 + 3 * 8 + 3 + 1 = 550 */ int check_option = symbol->option_2; int no_checktext = 0; @@ -300,8 +300,7 @@ INTERNAL int msi_handle(struct zint_symbol *symbol, unsigned char source[], int strcpy(symbol->errtxt, "372: Input too long (65 character maximum)"); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, length); - if (error_number != 0) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "377: Invalid character in data (digits only)"); return ZINT_ERROR_INVALID_DATA; } @@ -318,7 +317,7 @@ INTERNAL int msi_handle(struct zint_symbol *symbol, unsigned char source[], int strcpy(dest, "21"); switch (check_option) { - case 0: msi_plessey(symbol, source, length, dest); + case 0: msi_plessey_nomod(symbol, source, length, dest); break; case 1: msi_plessey_mod10(symbol, source, length, no_checktext, dest); break; diff --git a/backend/postal.c b/backend/postal.c index d6b59b14..7204b531 100644 --- a/backend/postal.c +++ b/backend/postal.c @@ -95,41 +95,39 @@ static int usps_set_height(struct zint_symbol *symbol, const int no_errtxt) { int error_number = 0; float h_ratio; /* Half ratio */ -#ifdef COMPLIANT_HEIGHTS - symbol->row_height[0] = 0.075f * 43; /* 3.225 */ - symbol->row_height[1] = 0.05f * 43; /* 2.15 */ -#else - symbol->row_height[0] = 6.0f; - symbol->row_height[1] = 6.0f; -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + symbol->row_height[0] = stripf(0.075f * 43); /* 3.225 */ + symbol->row_height[1] = stripf(0.05f * 43); /* 2.15 */ + } else { + symbol->row_height[0] = 6.0f; + symbol->row_height[1] = 6.0f; + } if (symbol->height) { h_ratio = symbol->row_height[1] / (symbol->row_height[0] + symbol->row_height[1]); /* 0.4 */ - symbol->row_height[1] = symbol->height * h_ratio; + symbol->row_height[1] = stripf(symbol->height * h_ratio); if (symbol->row_height[1] < 0.5f) { /* Absolute minimum */ symbol->row_height[1] = 0.5f; - symbol->row_height[0] = 0.5f / h_ratio - 0.5f; /* 0.75 */ + symbol->row_height[0] = stripf(0.5f / h_ratio - 0.5f); /* 0.75 */ } else { - symbol->row_height[0] = symbol->height - symbol->row_height[1]; + symbol->row_height[0] = stripf(symbol->height - symbol->row_height[1]); } } - symbol->height = symbol->row_height[0] + symbol->row_height[1]; + symbol->height = stripf(symbol->row_height[0] + symbol->row_height[1]); -#ifdef COMPLIANT_HEIGHTS - if (symbol->height < 4.6f || symbol->height > 9.0f) { - error_number = ZINT_WARN_NONCOMPLIANT; - if (!no_errtxt) { - strcpy(symbol->errtxt, "498: Height not compliant with standards"); + if (symbol->output_options & COMPLIANT_HEIGHT) { + if (symbol->height < 4.6f || symbol->height > 9.0f) { + error_number = ZINT_WARN_NONCOMPLIANT; + if (!no_errtxt) { + strcpy(symbol->errtxt, "498: Height not compliant with standards"); + } } } -#else - (void)&no_errtxt; -#endif return error_number; } /* Handles the PostNet system used for Zip codes in the US */ -static int postnet(struct zint_symbol *symbol, unsigned char source[], char dest[], int length) { +static int postnet_enc(struct zint_symbol *symbol, unsigned char source[], char dest[], int length) { int i, sum, check_digit; int error_number = 0; @@ -141,7 +139,7 @@ static int postnet(struct zint_symbol *symbol, unsigned char source[], char dest strcpy(symbol->errtxt, "479: Input length is not standard (5, 9 or 11 characters)"); error_number = ZINT_WARN_NONCOMPLIANT; } - if (is_sane(NEON, source, length) == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "481: Invalid character in data (digits only)"); return ZINT_ERROR_INVALID_DATA; } @@ -165,13 +163,13 @@ static int postnet(struct zint_symbol *symbol, unsigned char source[], char dest } /* Puts PostNet barcodes into the pattern matrix */ -INTERNAL int post_plot(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int postnet(struct zint_symbol *symbol, unsigned char source[], int length) { char height_pattern[256]; /* 5 + 38 * 5 + 5 + 5 + 1 = 206 */ unsigned int loopey, h; int writer; int error_number, warn_number; - error_number = postnet(symbol, source, height_pattern, length); + error_number = postnet_enc(symbol, source, height_pattern, length); if (error_number >= ZINT_ERROR) { return error_number; } @@ -193,7 +191,7 @@ INTERNAL int post_plot(struct zint_symbol *symbol, unsigned char source[], int l } /* Handles the PLANET system used for item tracking in the US */ -static int planet(struct zint_symbol *symbol, unsigned char source[], char dest[], int length) { +static int planet_enc(struct zint_symbol *symbol, unsigned char source[], char dest[], int length) { int i, sum, check_digit; int error_number = 0; @@ -205,7 +203,7 @@ static int planet(struct zint_symbol *symbol, unsigned char source[], char dest[ strcpy(symbol->errtxt, "478: Input length is not standard (11 or 13 characters)"); error_number = ZINT_WARN_NONCOMPLIANT; } - if (is_sane(NEON, source, length) == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "483: Invalid character in data (digits only)"); return ZINT_ERROR_INVALID_DATA; } @@ -229,13 +227,13 @@ static int planet(struct zint_symbol *symbol, unsigned char source[], char dest[ } /* Puts PLANET barcodes into the pattern matrix */ -INTERNAL int planet_plot(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int planet(struct zint_symbol *symbol, unsigned char source[], int length) { char height_pattern[256]; /* 5 + 38 * 5 + 5 + 5 + 1 = 206 */ unsigned int loopey, h; int writer; int error_number, warn_number; - error_number = planet(symbol, source, height_pattern, length); + error_number = planet_enc(symbol, source, height_pattern, length); if (error_number >= ZINT_ERROR) { return error_number; } @@ -257,18 +255,17 @@ INTERNAL int planet_plot(struct zint_symbol *symbol, unsigned char source[], int } /* Korean Postal Authority */ -INTERNAL int korea_post(struct zint_symbol *symbol, unsigned char source[], int length) { - int total, loop, check, zeroes, error_number; +INTERNAL int koreapost(struct zint_symbol *symbol, unsigned char source[], int length) { + int total, loop, check, zeroes, error_number = 0; char localstr[8], dest[80]; if (length > 6) { strcpy(symbol->errtxt, "484: Input too long (6 character maximum)"); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "485: Invalid character in data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } zeroes = 6 - length; memset(localstr, '0', zeroes); @@ -333,14 +330,14 @@ INTERNAL int fim(struct zint_symbol *symbol, unsigned char source[], int length) expand(symbol, dest); -#ifdef COMPLIANT_HEIGHTS - /* USPS Domestic Mail Manual (USPS DMM 300) Jan 8, 2006 (updated 2011) 708.9.3 - X 0.03125" (1/32) +- 0.008" so X max 0.03925", height 0.625" (5/8) +- 0.125" (1/8) */ - error_number = set_height(symbol, (float) (0.5 / 0.03925), 20.0f /*0.625 / 0.03125*/, (float) (0.75 / 0.02415), - 0 /*no_errtxt*/); -#else - (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* USPS Domestic Mail Manual (USPS DMM 300) Jan 8, 2006 (updated 2011) 708.9.3 + X 0.03125" (1/32) +- 0.008" so X max 0.03925", height 0.625" (5/8) +- 0.125" (1/8) */ + error_number = set_height(symbol, stripf(0.5f / 0.03925f), 20.0f /*0.625 / 0.03125*/, + stripf(0.75f / 0.02415f), 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); + } return error_number; } @@ -352,36 +349,34 @@ INTERNAL int daft_set_height(struct zint_symbol *symbol, float min_height, float float t_ratio; /* Tracker ratio */ if (symbol->height) { - t_ratio = symbol->row_height[1] / (symbol->row_height[0] * 2 + symbol->row_height[1]); - symbol->row_height[1] = symbol->height * t_ratio; + t_ratio = stripf(symbol->row_height[1] / stripf(symbol->row_height[0] * 2 + symbol->row_height[1])); + symbol->row_height[1] = stripf(symbol->height * t_ratio); if (symbol->row_height[1] < 0.5f) { /* Absolute minimum */ symbol->row_height[1] = 0.5f; - symbol->row_height[0] = 0.25f / t_ratio - 0.25f; + symbol->row_height[0] = stripf(0.25f / t_ratio - 0.25f); } else { - symbol->row_height[0] = (symbol->height - symbol->row_height[1]) / 2.0f; + symbol->row_height[0] = stripf(stripf(symbol->height - symbol->row_height[1]) / 2.0f); } if (symbol->row_height[0] < 0.5f) { symbol->row_height[0] = 0.5f; - symbol->row_height[1] = t_ratio / (1.0f - t_ratio); + symbol->row_height[1] = stripf(t_ratio / (1.0f - t_ratio)); } } symbol->row_height[2] = symbol->row_height[0]; - symbol->height = symbol->row_height[0] + symbol->row_height[1] + symbol->row_height[2]; + symbol->height = stripf(stripf(symbol->row_height[0] + symbol->row_height[1]) + symbol->row_height[2]); -#ifdef COMPLIANT_HEIGHTS - if ((min_height && symbol->height < min_height) || (max_height && symbol->height > max_height)) { - error_number = ZINT_WARN_NONCOMPLIANT; - strcpy(symbol->errtxt, "499: Height not compliant with standards"); + if (symbol->output_options & COMPLIANT_HEIGHT) { + if ((min_height && symbol->height < min_height) || (max_height && symbol->height > max_height)) { + error_number = ZINT_WARN_NONCOMPLIANT; + strcpy(symbol->errtxt, "499: Height not compliant with standards"); + } } -#else - (void)min_height; (void)max_height; -#endif return error_number; } /* Handles the 4 State barcodes used in the UK by Royal Mail */ -static char rm4scc(unsigned char source[], char dest[], int length) { +static char rm4scc_enc(unsigned char source[], char dest[], int length) { int i; int top, bottom, row, column, check_digit; char values[3], set_copy[] = KRSET; @@ -418,11 +413,11 @@ static char rm4scc(unsigned char source[], char dest[], int length) { } /* Puts RM4SCC into the data matrix */ -INTERNAL int royal_plot(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int rm4scc(struct zint_symbol *symbol, unsigned char source[], int length) { char height_pattern[210]; int loopey, h; int writer; - int error_number; + int error_number = 0; strcpy(height_pattern, ""); if (length > 50) { @@ -430,12 +425,11 @@ INTERNAL int royal_plot(struct zint_symbol *symbol, unsigned char source[], int return ZINT_ERROR_TOO_LONG; } to_upper(source); - error_number = is_sane(KRSET, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(KRSET, source, length) != 0) { strcpy(symbol->errtxt, "489: Invalid character in data (alphanumerics only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } - /*check = */rm4scc(source, height_pattern, length); + /*check = */rm4scc_enc(source, height_pattern, length); writer = 0; h = (int) strlen(height_pattern); @@ -450,21 +444,22 @@ INTERNAL int royal_plot(struct zint_symbol *symbol, unsigned char source[], int writer += 2; } -#ifdef COMPLIANT_HEIGHTS - /* Royal Mail Know How User's Manual Appendix C: using CBC - https://web.archive.org/web/20120120060743/http://www.royalmail.com/sites/default/files/docs/pdf/Know How 2006 PIP vs 1.6a Accepted Changes.pdf - Bar pitch and min/maxes same as Mailmark, so using recommendations from Royal Mail Mailmark Barcode Definition - Document (15 Sept 2015) Section 3.5.1 - */ - symbol->row_height[0] = (float) ((1.9 * 42.3) / 25.4); /* ~3.16 */ - symbol->row_height[1] = (float) ((1.3 * 42.3) / 25.4); /* ~2.16 */ - /* Note using max X for minimum and min X for maximum */ - error_number = daft_set_height(symbol, (float) ((4.22 * 39) / 25.4), (float) ((5.84 * 47) / 25.4)); -#else - symbol->row_height[0] = 3.0f; - symbol->row_height[1] = 2.0f; - error_number = daft_set_height(symbol, 0.0f, 0.0f); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* Royal Mail Know How User's Manual Appendix C: using CBC + (https://web.archive.org/web/20120120060743/ + http://www.royalmail.com/sites/default/files/docs/pdf/Know How 2006 PIP vs 1.6a Accepted Changes.pdf) + Bar pitch and min/maxes same as Mailmark, so using recommendations from + Royal Mail Mailmark Barcode Definition Document (15 Sept 2015) Section 3.5.1 + */ + symbol->row_height[0] = stripf((1.9f * 42.3f) / 25.4f); /* ~3.16 */ + symbol->row_height[1] = stripf((1.3f * 42.3f) / 25.4f); /* ~2.16 */ + /* Note using max X for minimum and min X for maximum */ + error_number = daft_set_height(symbol, stripf((4.22f * 39) / 25.4f), stripf((5.84f * 47) / 25.4f)); + } else { + symbol->row_height[0] = 3.0f; + symbol->row_height[1] = 2.0f; + (void) daft_set_height(symbol, 0.0f, 0.0f); + } symbol->rows = 3; symbol->width = writer - 1; @@ -474,11 +469,11 @@ INTERNAL int royal_plot(struct zint_symbol *symbol, unsigned char source[], int /* Handles Dutch Post TNT KIX symbols The same as RM4SCC but without check digit Specification at http://www.tntpost.nl/zakelijk/klantenservice/downloads/kIX_code/download.aspx */ -INTERNAL int kix_code(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int kix(struct zint_symbol *symbol, unsigned char source[], int length) { char height_pattern[75], localstr[20]; int loopey; int writer, i, h; - int error_number; + int error_number = 0; strcpy(height_pattern, ""); if (length > 18) { @@ -486,10 +481,9 @@ INTERNAL int kix_code(struct zint_symbol *symbol, unsigned char source[], int le return ZINT_ERROR_TOO_LONG; } to_upper(source); - error_number = is_sane(KRSET, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(KRSET, source, length) != 0) { strcpy(symbol->errtxt, "491: Invalid character in data (alphanumerics only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } ustrcpy(localstr, source); @@ -512,17 +506,17 @@ INTERNAL int kix_code(struct zint_symbol *symbol, unsigned char source[], int le writer += 2; } -#ifdef COMPLIANT_HEIGHTS - /* Dimensions same as RM4SCC */ - symbol->row_height[0] = (float) ((1.9 * 42.3) / 25.4); /* ~3.16 */ - symbol->row_height[1] = (float) ((1.3 * 42.3) / 25.4); /* ~2.16 */ - /* Note using max X for minimum and min X for maximum */ - error_number = daft_set_height(symbol, (float) ((4.22 * 39) / 25.4), (float) ((5.84 * 47) / 25.4)); -#else - symbol->row_height[0] = 3.0f; - symbol->row_height[1] = 2.0f; - error_number = daft_set_height(symbol, 0.0f, 0.0f); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* Dimensions same as RM4SCC */ + symbol->row_height[0] = stripf((1.9f * 42.3f) / 25.4f); /* ~3.16 */ + symbol->row_height[1] = stripf((1.3f * 42.3f) / 25.4f); /* ~2.16 */ + /* Note using max X for minimum and min X for maximum */ + error_number = daft_set_height(symbol, stripf((4.22f * 39) / 25.4f), stripf((5.84f * 47) / 25.4f)); + } else { + symbol->row_height[0] = 3.0f; + symbol->row_height[1] = 2.0f; + (void) daft_set_height(symbol, 0.0f, 0.0f); + } symbol->rows = 3; symbol->width = writer - 1; @@ -530,10 +524,10 @@ INTERNAL int kix_code(struct zint_symbol *symbol, unsigned char source[], int le } /* Handles DAFT Code symbols */ -INTERNAL int daft_code(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int daft(struct zint_symbol *symbol, unsigned char source[], int length) { char height_pattern[100]; unsigned int loopey, h; - int writer, i, error_number; + int writer, i; strcpy(height_pattern, ""); if (length > 50) { @@ -541,11 +535,10 @@ INTERNAL int daft_code(struct zint_symbol *symbol, unsigned char source[], int l return ZINT_ERROR_TOO_LONG; } to_upper(source); - error_number = is_sane(DAFTSET, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(DAFTSET, source, length) != 0) { strcpy(symbol->errtxt, "493: Invalid character in data (\"D\", \"A\", \"F\" and \"T\" only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } for (i = 0; i < length; i++) { @@ -578,12 +571,12 @@ INTERNAL int daft_code(struct zint_symbol *symbol, unsigned char source[], int l /* Allow ratio of tracker to be specified in thousandths */ if (symbol->option_2 >= 50 && symbol->option_2 <= 900) { - float t_ratio = symbol->option_2 / 1000.0f; + const float t_ratio = symbol->option_2 / 1000.0f; if (symbol->height < 0.5f) { symbol->height = 8.0f; } - symbol->row_height[1] = symbol->height * t_ratio; - symbol->row_height[0] = (float) ((symbol->height - symbol->row_height[1]) / 2.0); + symbol->row_height[1] = stripf(symbol->height * t_ratio); + symbol->row_height[0] = stripf((symbol->height - symbol->row_height[1]) / 2.0); } else { symbol->row_height[0] = 3.0f; symbol->row_height[1] = 2.0f; @@ -594,22 +587,21 @@ INTERNAL int daft_code(struct zint_symbol *symbol, unsigned char source[], int l symbol->rows = 3; symbol->width = writer - 1; - return error_number; + return 0; } /* Flattermarken - Not really a barcode symbology! */ -INTERNAL int flattermarken(struct zint_symbol *symbol, unsigned char source[], int length) { - int loop, error_number; +INTERNAL int flat(struct zint_symbol *symbol, unsigned char source[], int length) { + int loop, error_number = 0; char dest[512]; /* 90 * 4 + 1 ~ */ if (length > 90) { strcpy(symbol->errtxt, "494: Input too long (90 character maximum)"); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, length); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, length) != 0) { strcpy(symbol->errtxt, "495: Invalid character in data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } *dest = '\0'; for (loop = 0; loop < length; loop++) { @@ -624,8 +616,8 @@ INTERNAL int flattermarken(struct zint_symbol *symbol, unsigned char source[], i } /* Japanese Postal Code (Kasutama Barcode) */ -INTERNAL int japan_post(struct zint_symbol *symbol, unsigned char source[], int length) { - int error_number, h; +INTERNAL int japanpost(struct zint_symbol *symbol, unsigned char source[], int length) { + int error_number = 0, h; char pattern[69]; int writer, loopey, inter_posn, i, sum, check; char check_char; @@ -645,7 +637,7 @@ INTERNAL int japan_post(struct zint_symbol *symbol, unsigned char source[], int ustrcpy(local_source, source); to_upper(local_source); - if (is_sane(SHKASUTSET, local_source, length) == ZINT_ERROR_INVALID_DATA) { + if (is_sane(SHKASUTSET, local_source, length) != 0) { strcpy(symbol->errtxt, "497: Invalid character in data (alphanumerics and \"-\" only)"); return ZINT_ERROR_INVALID_DATA; } @@ -722,19 +714,19 @@ INTERNAL int japan_post(struct zint_symbol *symbol, unsigned char source[], int symbol->rows = 3; symbol->width = writer - 1; -#ifdef COMPLIANT_HEIGHTS - /* Japan Post Zip/Barcode Manual pp.11-12 https://www.post.japanpost.jp/zipcode/zipmanual/p11.html - X 0.6mm (0.5mm - 0.7mm) - Tracker height 1.2mm (1.05mm - 1.35mm) / 0.6mm = 2, - Ascender/descender = 1.2mm (Full 3.6mm (3.4mm - 3.6mm, max preferred) less T divided by 2) / 0.6mm = 2 */ - symbol->row_height[0] = 2.0f; - symbol->row_height[1] = 2.0f; - error_number = daft_set_height(symbol, (float) (3.4 / 0.7) /*~4.857*/, 3.6f / 0.5f /*7.2*/); -#else - symbol->row_height[0] = 3.0f; - symbol->row_height[1] = 2.0f; - error_number = daft_set_height(symbol, 0.0f, 0.0f); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* Japan Post Zip/Barcode Manual pp.11-12 https://www.post.japanpost.jp/zipcode/zipmanual/p11.html + X 0.6mm (0.5mm - 0.7mm) + Tracker height 1.2mm (1.05mm - 1.35mm) / 0.6mm = 2, + Ascender/descender = 1.2mm (Full 3.6mm (3.4mm - 3.6mm, max preferred) less T divided by 2) / 0.6mm = 2 */ + symbol->row_height[0] = 2.0f; + symbol->row_height[1] = 2.0f; + error_number = daft_set_height(symbol, stripf(3.4f / 0.7f) /*~4.857*/, stripf(3.6f / 0.5f) /*7.2*/); + } else { + symbol->row_height[0] = 3.0f; + symbol->row_height[1] = 2.0f; + (void) daft_set_height(symbol, 0.0f, 0.0f); + } return error_number; } diff --git a/backend/qr.c b/backend/qr.c index 1b74f4ef..65ec479f 100644 --- a/backend/qr.c +++ b/backend/qr.c @@ -1538,7 +1538,7 @@ static int getBinaryLength(const int version, char inputMode[], const unsigned i return count; } -INTERNAL int qr_code(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int qrcode(struct zint_symbol *symbol, unsigned char source[], int length) { int i, j, est_binlen, prev_est_binlen; int ecc_level, autosize, version, max_cw, target_codewords, blocks, size; int bitmask, gs1; diff --git a/backend/rss.c b/backend/rss.c index 17a33653..cac8d13b 100644 --- a/backend/rss.c +++ b/backend/rss.c @@ -158,7 +158,7 @@ static void getRSSwidths(int widths[], int val, int n, const int elements, const } /* Set GTIN-14 human readable text */ -static void rss_set_gtin14_hrt(struct zint_symbol *symbol, const unsigned char *source, const int src_len) { +static void dbar_set_gtin14_hrt(struct zint_symbol *symbol, const unsigned char *source, const int src_len) { int i; unsigned char *hrt = symbol->text + 4; @@ -175,7 +175,7 @@ static void rss_set_gtin14_hrt(struct zint_symbol *symbol, const unsigned char * } /* Expand from a width pattern to a bit pattern */ -static int rss_expand(struct zint_symbol *symbol, int writer, int *p_latch, const int width) { +static int dbar_expand(struct zint_symbol *symbol, int writer, int *p_latch, const int width) { int j; int latch = *p_latch; @@ -194,7 +194,7 @@ static int rss_expand(struct zint_symbol *symbol, int writer, int *p_latch, cons } /* Adjust top/bottom separator for finder patterns */ -static void rss14_finder_adjust(struct zint_symbol *symbol, const int separator_row, const int above_below, +static void dbar_omn_finder_adjust(struct zint_symbol *symbol, const int separator_row, const int above_below, const int finder_start) { int i, finder_end; int module_row = separator_row + above_below; @@ -219,7 +219,7 @@ static void rss14_finder_adjust(struct zint_symbol *symbol, const int separator_ } /* Top/bottom separator for DataBar */ -static void rss14_separator(struct zint_symbol *symbol, int width, const int separator_row, const int above_below, +static void dbar_omn_separator(struct zint_symbol *symbol, int width, const int separator_row, const int above_below, const int finder_start, const int finder2_start, const int bottom_finder_value_3) { int i, finder_end, finder_value_3_set; int module_row = separator_row + above_below; @@ -242,16 +242,16 @@ static void rss14_separator(struct zint_symbol *symbol, int width, const int sep } } else { if (finder_start) { - rss14_finder_adjust(symbol, separator_row, above_below, finder_start); + dbar_omn_finder_adjust(symbol, separator_row, above_below, finder_start); } if (finder2_start) { - rss14_finder_adjust(symbol, separator_row, above_below, finder2_start); + dbar_omn_finder_adjust(symbol, separator_row, above_below, finder2_start); } } } /* Set Databar Stacked height, maintaining 5:7 ratio of the 2 main row heights */ -INTERNAL int rss14_stk_set_height(struct zint_symbol *symbol, const int first_row) { +INTERNAL int dbar_omnstk_set_height(struct zint_symbol *symbol, const int first_row) { int error_number = 0; float fixed_height = 0.0f; int second_row = first_row + 2; /* 2 row separator */ @@ -263,33 +263,33 @@ INTERNAL int rss14_stk_set_height(struct zint_symbol *symbol, const int first_ro } } if (symbol->height) { - symbol->row_height[first_row] = (symbol->height - fixed_height) * symbol->row_height[first_row] / - (symbol->row_height[first_row] + symbol->row_height[second_row]); + symbol->row_height[first_row] = stripf((symbol->height - fixed_height) * symbol->row_height[first_row] / + (symbol->row_height[first_row] + symbol->row_height[second_row])); if (symbol->row_height[first_row] < 0.5f) { /* Absolute minimum */ symbol->row_height[first_row] = 0.5f; symbol->row_height[second_row] = 0.7f; } else { - symbol->row_height[second_row] = symbol->height - fixed_height - symbol->row_height[first_row]; + symbol->row_height[second_row] = stripf(symbol->height - fixed_height - symbol->row_height[first_row]); if (symbol->row_height[second_row] < 0.7f) { symbol->row_height[second_row] = 0.7f; } } } - symbol->height = symbol->row_height[first_row] + symbol->row_height[second_row] + fixed_height; + symbol->height = stripf(stripf(symbol->row_height[first_row] + symbol->row_height[second_row]) + fixed_height); -#ifdef COMPLIANT_HEIGHTS - if (symbol->row_height[first_row] < 5.0f || symbol->row_height[second_row] < 7.0f) { - error_number = ZINT_WARN_NONCOMPLIANT; - strcpy(symbol->errtxt, "379: Height not compliant with standards"); + if (symbol->output_options & COMPLIANT_HEIGHT) { + if (symbol->row_height[first_row] < 5.0f || symbol->row_height[second_row] < 7.0f) { + error_number = ZINT_WARN_NONCOMPLIANT; + strcpy(symbol->errtxt, "379: Height not compliant with standards"); + } } -#endif return error_number; } /* GS1 DataBar Omnidirectional/Truncated/Stacked, allowing for composite if `cc_rows` set */ -INTERNAL int rss14_cc(struct zint_symbol *symbol, unsigned char source[], int src_len, const int cc_rows) { - int error_number, i; +INTERNAL int dbar_omn_cc(struct zint_symbol *symbol, unsigned char source[], int src_len, const int cc_rows) { + int error_number = 0, i; large_int accum; uint64_t left_pair, right_pair; int data_character[4] = {0}, data_group[4] = {0}, v_odd[4], v_even[4]; @@ -304,10 +304,9 @@ INTERNAL int rss14_cc(struct zint_symbol *symbol, unsigned char source[], int sr strcpy(symbol->errtxt, "380: Input too long (14 character maximum)"); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, src_len); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, src_len) != 0) { strcpy(symbol->errtxt, "381: Invalid character in data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } if (src_len == 14) { /* Verify check digit */ @@ -405,7 +404,7 @@ INTERNAL int rss14_cc(struct zint_symbol *symbol, unsigned char source[], int sr v_odd[2] = (data_character[2] - g_sum_table[data_group[2]]) / t_table[data_group[2]]; v_even[2] = (data_character[2] - g_sum_table[data_group[2]]) % t_table[data_group[2]]; - /* Use RSS subset width algorithm */ + /* Use DataBar subset width algorithm */ for (i = 0; i < 4; i++) { if ((i == 0) || (i == 2)) { getRSSwidths(widths, v_odd[i], modules_odd[data_group[i]], 4, widest_odd[data_group[i]], 1); @@ -477,42 +476,42 @@ INTERNAL int rss14_cc(struct zint_symbol *symbol, unsigned char source[], int sr writer = 0; latch = 0; for (i = 0; i < 46; i++) { - writer = rss_expand(symbol, writer, &latch, total_widths[i]); + writer = dbar_expand(symbol, writer, &latch, total_widths[i]); } if (symbol->width < writer) { symbol->width = writer; } if (symbol->symbology == BARCODE_DBAR_OMN_CC) { /* separator pattern for composite symbol */ - rss14_separator(symbol, 96, separator_row, 1 /*above*/, 18, 63, 0 /*bottom_finder_value_3*/); + dbar_omn_separator(symbol, 96, separator_row, 1 /*above*/, 18, 63, 0 /*bottom_finder_value_3*/); } symbol->rows = symbol->rows + 1; /* Set human readable text */ - rss_set_gtin14_hrt(symbol, source, src_len); + dbar_set_gtin14_hrt(symbol, source, src_len); -#ifdef COMPLIANT_HEIGHTS - /* Minimum height is 13X for truncated symbol ISO/IEC 24724:2011 5.3.1 - Default height is 33X for DataBar Omnidirectional ISO/IEC 24724:2011 5.2 */ - if (symbol->symbology == BARCODE_DBAR_OMN_CC) { - symbol->height = symbol->height ? 13.0f : 33.0f; /* Pass back min row or default height */ + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* Minimum height is 13X for truncated symbol ISO/IEC 24724:2011 5.3.1 + Default height is 33X for DataBar Omnidirectional ISO/IEC 24724:2011 5.2 */ + if (symbol->symbology == BARCODE_DBAR_OMN_CC) { + symbol->height = symbol->height ? 13.0f : 33.0f; /* Pass back min row or default height */ + } else { + error_number = set_height(symbol, 13.0f, 33.0f, 0.0f, 0 /*no_errtxt*/); + } } else { - error_number = set_height(symbol, 13.0f, 33.0f, 0.0f, 0 /*no_errtxt*/); + if (symbol->symbology == BARCODE_DBAR_OMN_CC) { + symbol->height = 14.0f; /* 14X truncated min row height used (should be 13X) */ + } else { + (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); + } } -#else - if (symbol->symbology == BARCODE_DBAR_OMN_CC) { - symbol->height = 14.0f; /* 14X truncated min row height used (should be 13X) */ - } else { - (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); - } -#endif } else if ((symbol->symbology == BARCODE_DBAR_STK) || (symbol->symbology == BARCODE_DBAR_STK_CC)) { /* top row */ writer = 0; latch = 0; for (i = 0; i < 23; i++) { - writer = rss_expand(symbol, writer, &latch, total_widths[i]); + writer = dbar_expand(symbol, writer, &latch, total_widths[i]); } set_module(symbol, symbol->rows, writer); unset_module(symbol, symbol->rows, writer + 1); @@ -525,7 +524,7 @@ INTERNAL int rss14_cc(struct zint_symbol *symbol, unsigned char source[], int sr writer = 2; latch = 1; for (i = 23; i < 46; i++) { - writer = rss_expand(symbol, writer, &latch, total_widths[i]); + writer = dbar_expand(symbol, writer, &latch, total_widths[i]); } symbol->row_height[symbol->rows] = 7.0f; /* ISO/IEC 24724:2011 5.3.2.1 set to 7X */ @@ -549,15 +548,15 @@ INTERNAL int rss14_cc(struct zint_symbol *symbol, unsigned char source[], int sr if (symbol->symbology == BARCODE_DBAR_STK_CC) { /* separator pattern for composite symbol */ - rss14_separator(symbol, 50, separator_row, 1 /*above*/, 18, 0, 0 /*bottom_finder_value_3*/); + dbar_omn_separator(symbol, 50, separator_row, 1 /*above*/, 18, 0, 0 /*bottom_finder_value_3*/); } symbol->rows = symbol->rows + 1; if (symbol->width < 50) { symbol->width = 50; } - if (symbol->symbology != BARCODE_DBAR_STK_CC) { /* Composite calls rss14_stk_set_height() itself */ - error_number = rss14_stk_set_height(symbol, 0 /*first_row*/); + if (symbol->symbology != BARCODE_DBAR_STK_CC) { /* Composite calls dbar_omnstk_set_height() itself */ + error_number = dbar_omnstk_set_height(symbol, 0 /*first_row*/); } } else if ((symbol->symbology == BARCODE_DBAR_OMNSTK) || (symbol->symbology == BARCODE_DBAR_OMNSTK_CC)) { @@ -565,7 +564,7 @@ INTERNAL int rss14_cc(struct zint_symbol *symbol, unsigned char source[], int sr writer = 0; latch = 0; for (i = 0; i < 23; i++) { - writer = rss_expand(symbol, writer, &latch, total_widths[i]); + writer = dbar_expand(symbol, writer, &latch, total_widths[i]); } set_module(symbol, symbol->rows, writer); unset_module(symbol, symbol->rows, writer + 1); @@ -577,7 +576,7 @@ INTERNAL int rss14_cc(struct zint_symbol *symbol, unsigned char source[], int sr writer = 2; latch = 1; for (i = 23; i < 46; i++) { - writer = rss_expand(symbol, writer, &latch, total_widths[i]); + writer = dbar_expand(symbol, writer, &latch, total_widths[i]); } /* middle separator */ @@ -587,12 +586,12 @@ INTERNAL int rss14_cc(struct zint_symbol *symbol, unsigned char source[], int sr symbol->row_height[symbol->rows - 2] = 1; /* top separator */ - rss14_separator(symbol, 50, symbol->rows - 3, -1 /*below*/, 18, 0, 0 /*bottom_finder_value_3*/); + dbar_omn_separator(symbol, 50, symbol->rows - 3, -1 /*below*/, 18, 0, 0 /*bottom_finder_value_3*/); symbol->row_height[symbol->rows - 3] = 1; /* bottom separator */ /* 17 == 2 (guard) + 15 (inner char); +2 to skip over finder elements 4 & 5 (right to left) */ - rss14_separator(symbol, 50, symbol->rows - 1, 1 /*above*/, 17 + 2, 0, c_right == 3); + dbar_omn_separator(symbol, 50, symbol->rows - 1, 1 /*above*/, 17 + 2, 0, c_right == 3); symbol->row_height[symbol->rows - 1] = 1; if (symbol->width < 50) { symbol->width = 50; @@ -600,7 +599,7 @@ INTERNAL int rss14_cc(struct zint_symbol *symbol, unsigned char source[], int sr if (symbol->symbology == BARCODE_DBAR_OMNSTK_CC) { /* separator pattern for composite symbol */ - rss14_separator(symbol, 50, separator_row, 1 /*above*/, 18, 0, 0 /*bottom_finder_value_3*/); + dbar_omn_separator(symbol, 50, separator_row, 1 /*above*/, 18, 0, 0 /*bottom_finder_value_3*/); } symbol->rows = symbol->rows + 1; @@ -608,11 +607,11 @@ INTERNAL int rss14_cc(struct zint_symbol *symbol, unsigned char source[], int sr if (symbol->symbology == BARCODE_DBAR_OMNSTK_CC) { symbol->height = symbol->height ? 33.0f : 66.0f; /* Pass back min row or default height */ } else { -#ifdef COMPLIANT_HEIGHTS - error_number = set_height(symbol, 33.0f, 66.0f, 0.0f, 0 /*no_errtxt*/); -#else - (void) set_height(symbol, 0.0f, 66.0f, 0.0f, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + error_number = set_height(symbol, 33.0f, 66.0f, 0.0f, 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 66.0f, 0.0f, 1 /*no_errtxt*/); + } } } @@ -620,13 +619,13 @@ INTERNAL int rss14_cc(struct zint_symbol *symbol, unsigned char source[], int sr } /* GS1 DataBar Omnidirectional/Truncated/Stacked */ -INTERNAL int rss14(struct zint_symbol *symbol, unsigned char source[], int src_len) { - return rss14_cc(symbol, source, src_len, 0 /*cc_rows*/); +INTERNAL int dbar_omn(struct zint_symbol *symbol, unsigned char source[], int src_len) { + return dbar_omn_cc(symbol, source, src_len, 0 /*cc_rows*/); } /* GS1 DataBar Limited, allowing for composite if `cc_rows` set */ -INTERNAL int rsslimited_cc(struct zint_symbol *symbol, unsigned char source[], int src_len, const int cc_rows) { - int error_number, i; +INTERNAL int dbar_ltd_cc(struct zint_symbol *symbol, unsigned char source[], int src_len, const int cc_rows) { + int error_number = 0, i; large_int accum; uint64_t left_character, right_character; int left_group, right_group, left_odd, left_even, right_odd, right_even; @@ -642,10 +641,9 @@ INTERNAL int rsslimited_cc(struct zint_symbol *symbol, unsigned char source[], i strcpy(symbol->errtxt, "382: Input too long (14 character maximum)"); return ZINT_ERROR_TOO_LONG; } - error_number = is_sane(NEON, source, src_len); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, src_len) != 0) { strcpy(symbol->errtxt, "383: Invalid character in data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } if (src_len == 14) { /* Verify check digit */ @@ -778,7 +776,7 @@ INTERNAL int rsslimited_cc(struct zint_symbol *symbol, unsigned char source[], i writer = 0; latch = 0; for (i = 0; i < 47; i++) { - writer = rss_expand(symbol, writer, &latch, total_widths[i]); + writer = dbar_expand(symbol, writer, &latch, total_widths[i]); } if (symbol->width < writer) { symbol->width = writer; @@ -795,29 +793,29 @@ INTERNAL int rsslimited_cc(struct zint_symbol *symbol, unsigned char source[], i } /* Set human readable text */ - rss_set_gtin14_hrt(symbol, source, src_len); + dbar_set_gtin14_hrt(symbol, source, src_len); /* ISO/IEC 24724:2011 6.2 10X minimum height, use as default also */ if (symbol->symbology == BARCODE_DBAR_LTD_CC) { symbol->height = 10.0f; /* Pass back min row == default height */ } else { -#ifdef COMPLIANT_HEIGHTS - error_number = set_height(symbol, 10.0f, 10.0f, 0.0f, 0 /*no_errtxt*/); -#else - (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + error_number = set_height(symbol, 10.0f, 10.0f, 0.0f, 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); + } } return error_number; } /* GS1 DataBar Limited */ -INTERNAL int rsslimited(struct zint_symbol *symbol, unsigned char source[], int src_len) { - return rsslimited_cc(symbol, source, src_len, 0 /*cc_rows*/); +INTERNAL int dbar_ltd(struct zint_symbol *symbol, unsigned char source[], int src_len) { + return dbar_ltd_cc(symbol, source, src_len, 0 /*cc_rows*/); } -/* Check and convert date to RSS date value */ -INTERNAL int rss_date(const unsigned char source[], const int src_posn) { +/* Check and convert date to DataBar date value */ +INTERNAL int dbar_date(const unsigned char source[], const int src_posn) { int yy = to_int(source + src_posn, 2); int mm = to_int(source + src_posn + 2, 2); int dd = to_int(source + src_posn + 4, 2); @@ -831,7 +829,7 @@ INTERNAL int rss_date(const unsigned char source[], const int src_posn) { } /* Handles all data encodation from section 7.2.5 of ISO/IEC 24724 */ -static int rssexp_binary_string(struct zint_symbol *symbol, const unsigned char source[], char binary_string[], +static int dbar_exp_binary_string(struct zint_symbol *symbol, const unsigned char source[], char binary_string[], int cols_per_row, int *p_bp) { int encoding_method, i, j, read_posn, debug = (symbol->debug & ZINT_DEBUG_PRINT), mode = NUMERIC; char last_digit = '\0'; @@ -884,7 +882,7 @@ static int rssexp_binary_string(struct zint_symbol *symbol, const unsigned char } else if ((length == 34) && (source[26] == '1') && (source[27] == '1' || source[27] == '3' || source[27] == '5' || source[27] == '7') - && rss_date(source, 28) >= 0) { + && dbar_date(source, 28) >= 0) { /* (01), (310x) and (11) - metric weight and production date */ /* (01), (310x) and (13) - metric weight and packaging date */ @@ -915,7 +913,7 @@ static int rssexp_binary_string(struct zint_symbol *symbol, const unsigned char } else if ((length == 34) && (source[26] == '1') && (source[27] == '1' || source[27] == '3' || source[27] == '5' || source[27] == '7') - && rss_date(source, 28) >= 0) { + && dbar_date(source, 28) >= 0) { /* (01), (320x) and (11) - English weight and production date */ /* (01), (320x) and (13) - English weight and packaging date */ @@ -1045,7 +1043,7 @@ static int rssexp_binary_string(struct zint_symbol *symbol, const unsigned char if (length == 34) { /* Date information is included */ - group_val = rss_date(source, 28); + group_val = dbar_date(source, 28); } else { group_val = 38400; } @@ -1172,7 +1170,7 @@ static int rssexp_binary_string(struct zint_symbol *symbol, const unsigned char } /* Separator for DataBar Expanded Stacked and DataBar Expanded Composite */ -static void rssexp_separator(struct zint_symbol *symbol, int width, const int cols, const int separator_row, +static void dbar_exp_separator(struct zint_symbol *symbol, int width, const int cols, const int separator_row, const int above_below, const int special_case_row, const int left_to_right, const int odd_last_row, int *p_v2_latch) { int i, i_start, i_end, j, k; @@ -1239,7 +1237,7 @@ static void rssexp_separator(struct zint_symbol *symbol, int width, const int co } /* GS1 DataBar Expanded, setting linkage for composite if `cc_rows` set */ -INTERNAL int rssexpanded_cc(struct zint_symbol *symbol, unsigned char source[], int src_len, const int cc_rows) { +INTERNAL int dbar_exp_cc(struct zint_symbol *symbol, unsigned char source[], int src_len, const int cc_rows) { int error_number, warn_number = 0; int i, j, k, p, codeblocks, data_chars, vs, group, v_odd, v_even; int latch; @@ -1298,7 +1296,7 @@ INTERNAL int rssexpanded_cc(struct zint_symbol *symbol, unsigned char source[], } } - error_number = rssexp_binary_string(symbol, reduced, binary_string, cols_per_row, &bp); + error_number = dbar_exp_binary_string(symbol, reduced, binary_string, cols_per_row, &bp); if (error_number != 0) { return error_number; } @@ -1431,7 +1429,7 @@ INTERNAL int rssexpanded_cc(struct zint_symbol *symbol, unsigned char source[], writer = 0; latch = 0; for (i = 0; i < pattern_width; i++) { - writer = rss_expand(symbol, writer, &latch, elements[i]); + writer = dbar_expand(symbol, writer, &latch, elements[i]); } if (symbol->width < writer) { symbol->width = writer; @@ -1534,7 +1532,7 @@ INTERNAL int rssexpanded_cc(struct zint_symbol *symbol, unsigned char source[], writer = 0; for (i = 0; i < elements_in_sub; i++) { - writer = rss_expand(symbol, writer, &latch, sub_elements[i]); + writer = dbar_expand(symbol, writer, &latch, sub_elements[i]); } if (symbol->width < writer) { symbol->width = writer; @@ -1550,14 +1548,14 @@ INTERNAL int rssexpanded_cc(struct zint_symbol *symbol, unsigned char source[], symbol->row_height[symbol->rows - 2] = 1; /* bottom separator pattern (above current row) */ - rssexp_separator(symbol, writer, reader, symbol->rows - 1, 1 /*above*/, special_case_row, + dbar_exp_separator(symbol, writer, reader, symbol->rows - 1, 1 /*above*/, special_case_row, left_to_right, odd_last_row, &v2_latch); symbol->row_height[symbol->rows - 1] = 1; } if (current_row != stack_rows) { /* top separator pattern (below current row) */ - rssexp_separator(symbol, writer, reader, symbol->rows + 1, -1 /*below*/, 0 /*special_case_row*/, + dbar_exp_separator(symbol, writer, reader, symbol->rows + 1, -1 /*below*/, 0 /*special_case_row*/, left_to_right, 0 /*odd_last_row*/, &v2_latch); symbol->row_height[symbol->rows + 1] = 1; } @@ -1569,7 +1567,7 @@ INTERNAL int rssexpanded_cc(struct zint_symbol *symbol, unsigned char source[], if (symbol->symbology == BARCODE_DBAR_EXP_CC || symbol->symbology == BARCODE_DBAR_EXPSTK_CC) { /* Composite separator */ - rssexp_separator(symbol, symbol->width, 4, separator_row, 1 /*above*/, 0 /*special_case_row*/, + dbar_exp_separator(symbol, symbol->width, 4, separator_row, 1 /*above*/, 0 /*special_case_row*/, 1 /*left_to_right*/, 0 /*odd_last_row*/, NULL); } @@ -1578,21 +1576,21 @@ INTERNAL int rssexpanded_cc(struct zint_symbol *symbol, unsigned char source[], if (symbol->symbology == BARCODE_DBAR_EXP_CC || symbol->symbology == BARCODE_DBAR_EXPSTK_CC) { symbol->height = symbol->height ? 34.0f : 34.0f * stack_rows; /* Pass back min row or default height */ } else { -#ifdef COMPLIANT_HEIGHTS - if (warn_number) { - (void) set_height(symbol, 34.0f, 34.0f * stack_rows, 0.0f, 0 /*no_errtxt*/); + if (symbol->output_options & COMPLIANT_HEIGHT) { + if (warn_number) { + (void) set_height(symbol, 34.0f, 34.0f * stack_rows, 0.0f, 0 /*no_errtxt*/); + } else { + warn_number = set_height(symbol, 34.0f, 34.0f * stack_rows, 0.0f, 0 /*no_errtxt*/); + } } else { - warn_number = set_height(symbol, 34.0f, 34.0f * stack_rows, 0.0f, 0 /*no_errtxt*/); + (void) set_height(symbol, 0.0f, 34.0f * stack_rows, 0.0f, 1 /*no_errtxt*/); } -#else - (void) set_height(symbol, 0.0f, 34.0f * stack_rows, 0.0f, 1 /*no_errtxt*/); -#endif } return error_number ? error_number : warn_number; } /* GS1 DataBar Expanded */ -INTERNAL int rssexpanded(struct zint_symbol *symbol, unsigned char source[], int src_len) { - return rssexpanded_cc(symbol, source, src_len, 0 /*cc_rows*/); +INTERNAL int dbar_exp(struct zint_symbol *symbol, unsigned char source[], int src_len) { + return dbar_exp_cc(symbol, source, src_len, 0 /*cc_rows*/); } diff --git a/backend/telepen.c b/backend/telepen.c index 3d3d28cc..00895d0b 100644 --- a/backend/telepen.c +++ b/backend/telepen.c @@ -40,22 +40,38 @@ #include "common.h" static char *TeleTable[] = { - "31313131", "1131313111", "33313111", "1111313131", "3111313111", "11333131", "13133131", "111111313111", - "31333111", "1131113131", "33113131", "1111333111", "3111113131", "1113133111", "1311133111", "111111113131", - "3131113111", "11313331", "333331", "111131113111", "31113331", "1133113111", "1313113111", "1111113331", - "31131331", "113111113111", "3311113111", "1111131331", "311111113111", "1113111331", "1311111331", "11111111113111", - "31313311", "1131311131", "33311131", "1111313311", "3111311131", "11333311", "13133311", "111111311131", - "31331131", "1131113311", "33113311", "1111331131", "3111113311", "1113131131", "1311131131", "111111113311", - "3131111131", "1131131311", "33131311", "111131111131", "3111131311", "1133111131", "1313111131", "111111131311", - "3113111311", "113111111131", "3311111131", "111113111311", "311111111131", "111311111311", "131111111311", "11111111111131", - "3131311111", "11313133", "333133", "111131311111", "31113133", "1133311111", "1313311111", "1111113133", - "313333", "113111311111", "3311311111", "11113333", "311111311111", "11131333", "13111333", "11111111311111", - "31311133", "1131331111", "33331111", "1111311133", "3111331111", "11331133", "13131133", "111111331111", - "3113131111", "1131111133", "33111133", "111113131111", "3111111133", "111311131111", "131111131111", "111111111133", - "31311313", "113131111111", "3331111111", "1111311313", "311131111111", "11331313", "13131313", "11111131111111", - "3133111111", "1131111313", "33111313", "111133111111", "3111111313", "111313111111", "131113111111", "111111111313", - "313111111111", "1131131113", "33131113", "11113111111111", "3111131113", "113311111111", "131311111111", "111111131113", - "3113111113", "11311111111111", "331111111111", "111113111113", "31111111111111", "111311111113", "131111111113", "1111111111111111", + "31313131", "1131313111", "33313111", "1111313131", + "3111313111", "11333131", "13133131", "111111313111", + "31333111", "1131113131", "33113131", "1111333111", + "3111113131", "1113133111", "1311133111", "111111113131", + "3131113111", "11313331", "333331", "111131113111", + "31113331", "1133113111", "1313113111", "1111113331", + "31131331", "113111113111", "3311113111", "1111131331", + "311111113111", "1113111331", "1311111331", "11111111113111", + "31313311", "1131311131", "33311131", "1111313311", + "3111311131", "11333311", "13133311", "111111311131", + "31331131", "1131113311", "33113311", "1111331131", + "3111113311", "1113131131", "1311131131", "111111113311", + "3131111131", "1131131311", "33131311", "111131111131", + "3111131311", "1133111131", "1313111131", "111111131311", + "3113111311", "113111111131", "3311111131", "111113111311", + "311111111131", "111311111311", "131111111311", "11111111111131", + "3131311111", "11313133", "333133", "111131311111", + "31113133", "1133311111", "1313311111", "1111113133", + "313333", "113111311111", "3311311111", "11113333", + "311111311111", "11131333", "13111333", "11111111311111", + "31311133", "1131331111", "33331111", "1111311133", + "3111331111", "11331133", "13131133", "111111331111", + "3113131111", "1131111133", "33111133", "111113131111", + "3111111133", "111311131111", "131111131111", "111111111133", + "31311313", "113131111111", "3331111111", "1111311313", + "311131111111", "11331313", "13131313", "11111131111111", + "3133111111", "1131111313", "33111313", "111133111111", + "3111111313", "111313111111", "131113111111", "111111111313", + "313111111111", "1131131113", "33131113", "11113111111111", + "3111131113", "113311111111", "131311111111", "111111131113", + "3113111113", "11311111111111", "331111111111", "111113111113", + "31111111111111", "111311111113", "131111111113", "1111111111111111", }; INTERNAL int telepen(struct zint_symbol *symbol, unsigned char source[], int src_len) { @@ -97,13 +113,13 @@ INTERNAL int telepen(struct zint_symbol *symbol, unsigned char source[], int src expand(symbol, dest); -#ifdef COMPLIANT_HEIGHTS - /* Default height from various Telepen docs is based on default 26pt at X 0.01125" (average of 0.01" - 0.0125") - = (26 / 72) / 0.01125 ~ 32; no min height specified */ - (void) set_height(symbol, 0.0f, 32.0f, 0, 1 /*no_errtxt*/); -#else - (void) set_height(symbol, 0.0f, 50.0f, 0, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* Default height from various Telepen docs is based on default 26pt at X 0.01125" + (average of 0.01" - 0.0125") = (26 / 72) / 0.01125 ~ 32; no min height specified */ + (void) set_height(symbol, 0.0f, 32.0f, 0, 1 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 50.0f, 0, 1 /*no_errtxt*/); + } for (i = 0; i < src_len; i++) { if (source[i] == '\0') { @@ -118,7 +134,7 @@ INTERNAL int telepen(struct zint_symbol *symbol, unsigned char source[], int src INTERNAL int telepen_num(struct zint_symbol *symbol, unsigned char source[], int src_len) { int count, check_digit, glyph; - int error_number; + int error_number = 0; int i; char dest[521]; /* 12 (start) + 30 * 16 (max for DELs) + 16 (check digit) + 12 (stop) + 1 = 521 */ unsigned char temp[64]; @@ -131,10 +147,9 @@ INTERNAL int telepen_num(struct zint_symbol *symbol, unsigned char source[], int } ustrcpy(temp, source); to_upper(temp); - error_number = is_sane(SODIUM, temp, src_len); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(SODIUM, temp, src_len) != 0) { strcpy(symbol->errtxt, "393: Invalid character in data (digits and \"X\" only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } /* Add a leading zero if required */ @@ -178,11 +193,11 @@ INTERNAL int telepen_num(struct zint_symbol *symbol, unsigned char source[], int expand(symbol, dest); -#ifdef COMPLIANT_HEIGHTS - (void) set_height(symbol, 0.0f, 32.0f, 0, 1 /*no_errtxt*/); /* Same as alphanumeric Telepen */ -#else - (void) set_height(symbol, 0.0f, 50.0f, 0, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + (void) set_height(symbol, 0.0f, 32.0f, 0, 1 /*no_errtxt*/); /* Same as alphanumeric Telepen */ + } else { + (void) set_height(symbol, 0.0f, 50.0f, 0, 1 /*no_errtxt*/); + } ustrcpy(symbol->text, temp); return error_number; diff --git a/backend/tests/test_auspost.c b/backend/tests/test_auspost.c index 730c0301..f9c6b2c0 100644 --- a/backend/tests/test_auspost.c +++ b/backend/tests/test_auspost.c @@ -150,10 +150,10 @@ static void test_input(int index, int debug) { /* 3*/ { BARCODE_AUSPOST, "12345678ABcd!", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 404: Invalid character in data (alphanumerics, space and \"#\" only)" }, /* 4*/ { BARCODE_AUSPOST, "12345678ABcd#", 0, 3, 103, "" }, /* 5*/ { BARCODE_AUSPOST, "1234567890123456", 0, 3, 103, "" }, - /* 6*/ { BARCODE_AUSPOST, "123456789012345A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 402: Invalid character in data (digits only for lengths 16 and 23)" }, + /* 6*/ { BARCODE_AUSPOST, "123456789012345A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 402: Invalid character in data (digits only for length 16)" }, /* 7*/ { BARCODE_AUSPOST, "12345678ABCDefgh #", 0, 3, 133, "" }, // Length 18 /* 8*/ { BARCODE_AUSPOST, "12345678901234567890123", 0, 3, 133, "" }, - /* 9*/ { BARCODE_AUSPOST, "1234567890123456789012A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 402: Invalid character in data (digits only for lengths 16 and 23)" }, + /* 9*/ { BARCODE_AUSPOST, "1234567890123456789012A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 406: Invalid character in data (digits only for length 23)" }, /* 10*/ { BARCODE_AUSPOST, "1234567", ZINT_ERROR_TOO_LONG, -1, -1, "Error 401: Auspost input is wrong length (8, 13, 16, 18 or 23 characters only)" }, // No leading zeroes added /* 11*/ { BARCODE_AUSREPLY, "12345678", 0, 3, 73, "" }, /* 12*/ { BARCODE_AUSREPLY, "1234567", 0, 3, 73, "" }, // Leading zeroes added diff --git a/backend/tests/test_code1.c b/backend/tests/test_code1.c index cf37b800..f315436c 100644 --- a/backend/tests/test_code1.c +++ b/backend/tests/test_code1.c @@ -270,7 +270,8 @@ static void test_input(int index, int debug) { /* 32*/ { -1, -1, -1, { 0, 2, "" }, "123456789012ABCDEFGHI", -1, ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 712: Structured Append index out of range (1-2)", }, /* 33*/ { -1, -1, -1, { 3, 2, "" }, "123456789012ABCDEFGHI", -1, ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 712: Structured Append index out of range (1-2)", }, /* 34*/ { -1, -1, -1, { 1, 2, "1" }, "123456789012ABCDEFGHI", -1, ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 713: Structured Append ID not available for Code One", }, - /* 35*/ { -1, -1, 9, { 1, 2, "" }, "123456789012ABCDEFGHI", -1, ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 714: Structured Append not supported for Version S", }, + /* 35*/ { -1, -1, 9, { 1, 2, "" }, "123456789012ABCDEFGHI", -1, ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 714: Structured Append not available for Version S", }, + /* 36*/ { -1, -1, 9, { 3, 2, "" }, "123456789012ABCDEFGHI", -1, ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 714: Structured Append not available for Version S", }, // Trumps other checking }; int data_size = ARRAY_SIZE(data); int i, length, ret; diff --git a/backend/tests/test_library.c b/backend/tests/test_library.c index 67d93950..2ba465b2 100644 --- a/backend/tests/test_library.c +++ b/backend/tests/test_library.c @@ -471,10 +471,10 @@ static void test_cap(int index) { /* 0*/ { BARCODE_CODE128, ZINT_CAP_HRT, ZINT_CAP_HRT }, /* 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_STRUCTAPP, ZINT_CAP_ECI | ZINT_CAP_GS1 | ZINT_CAP_DOTTY | ZINT_CAP_FULL_MULTIBYTE | ZINT_CAP_MASK | ZINT_CAP_STRUCTAPP }, - /* 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 }, + /* 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_STRUCTAPP | ZINT_CAP_COMPLIANT_HEIGHT, ZINT_CAP_ECI | ZINT_CAP_GS1 | ZINT_CAP_DOTTY | ZINT_CAP_FULL_MULTIBYTE | ZINT_CAP_MASK | ZINT_CAP_STRUCTAPP }, + /* 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_COMPLIANT_HEIGHT, ZINT_CAP_HRT | ZINT_CAP_COMPOSITE | ZINT_CAP_EXTENDABLE | ZINT_CAP_GS1 | ZINT_CAP_QUIET_ZONES | ZINT_CAP_COMPLIANT_HEIGHT }, /* 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 }, + /* 6*/ { BARCODE_CODE11, ZINT_CAP_DOTTY | ZINT_CAP_FIXED_RATIO | ZINT_CAP_FIXED_RATIO | ZINT_CAP_READER_INIT | ZINT_CAP_FULL_MULTIBYTE | ZINT_CAP_COMPLIANT_HEIGHT, 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 | ZINT_CAP_STRUCTAPP, 0 }, /* 8*/ { 0, 0, 0 }, }; @@ -495,6 +495,95 @@ static void test_cap(int index) { testFinish(); } +static void test_cap_compliant_height() { + int symbol_id; + int ret; + + testStart("test_cap_compliant_height"); + + for (symbol_id = 1; symbol_id <= BARCODE_RMQR; symbol_id++) { + if (!ZBarcode_ValidID(symbol_id)) continue; + + ret = ZBarcode_Cap(symbol_id, ZINT_CAP_COMPLIANT_HEIGHT); + + switch (symbol_id) { + //case BARCODE_CODE11: /* TODO: Find doc */ + case BARCODE_C25INTER: + case BARCODE_CODE39: + case BARCODE_EXCODE39: + case BARCODE_EANX: + case BARCODE_EANX_CHK: + case BARCODE_GS1_128: + case BARCODE_CODABAR: + //case BARCODE_DPLEIT: /* TODO: Find doc */ + //case BARCODE_DPIDENT: /* TODO: Find doc */ + case BARCODE_CODE16K: + case BARCODE_CODE49: + case BARCODE_CODE93: + //case BARCODE_FLAT: /* TODO: Find doc */ + case BARCODE_DBAR_OMN: + case BARCODE_DBAR_LTD: + case BARCODE_DBAR_EXP: + case BARCODE_TELEPEN: + case BARCODE_UPCA: + case BARCODE_UPCA_CHK: + case BARCODE_UPCE: + case BARCODE_UPCE_CHK: + case BARCODE_POSTNET: + //case BARCODE_MSI_PLESSEY: /* TODO: Find doc */ + case BARCODE_FIM: + case BARCODE_LOGMARS: + case BARCODE_PHARMA: + case BARCODE_PZN: + case BARCODE_PHARMA_TWO: + case BARCODE_AUSPOST: + case BARCODE_AUSREPLY: + case BARCODE_AUSROUTE: + case BARCODE_AUSREDIRECT: + case BARCODE_ISBNX: + case BARCODE_RM4SCC: + case BARCODE_EAN14: + //case BARCODE_VIN: /* Spec unlikely */ + case BARCODE_CODABLOCKF: + case BARCODE_NVE18: + case BARCODE_JAPANPOST: + //case BARCODE_KOREAPOST: /* TODO: Find doc */ + case BARCODE_DBAR_STK: + case BARCODE_DBAR_OMNSTK: + case BARCODE_DBAR_EXPSTK: + case BARCODE_PLANET: + case BARCODE_USPS_IMAIL: + //case BARCODE_PLESSEY: /* TODO: Find doc */ + case BARCODE_TELEPEN_NUM: + case BARCODE_ITF14: + case BARCODE_KIX: + case BARCODE_DPD: + case BARCODE_HIBC_39: + case BARCODE_HIBC_BLOCKF: + case BARCODE_MAILMARK: + case BARCODE_CODE32: + case BARCODE_EANX_CC: + case BARCODE_GS1_128_CC: + case BARCODE_DBAR_OMN_CC: + case BARCODE_DBAR_LTD_CC: + case BARCODE_DBAR_EXP_CC: + case BARCODE_UPCA_CC: + case BARCODE_UPCE_CC: + case BARCODE_DBAR_STK_CC: + case BARCODE_DBAR_OMNSTK_CC: + case BARCODE_DBAR_EXPSTK_CC: + case BARCODE_CHANNEL: + assert_equal(ret, ZINT_CAP_COMPLIANT_HEIGHT, "symbol_id %d (%s) ret 0x%X != ZINT_CAP_COMPLIANT_HEIGHT\n", symbol_id, testUtilBarcodeName(symbol_id), ret); + break; + default: + assert_zero(ret, "symbol_id %d (%s) ret 0x%X non-zero\n", symbol_id, testUtilBarcodeName(symbol_id), ret); + break; + } + } + + testFinish(); +} + static void test_encode_file_empty(void) { int ret; struct zint_symbol *symbol; @@ -950,6 +1039,7 @@ int main(int argc, char *argv[]) { { "test_input_mode", test_input_mode, 1, 0, 1 }, { "test_escape_char_process", test_escape_char_process, 1, 1, 1 }, { "test_cap", test_cap, 1, 0, 0 }, + { "test_cap_compliant_height", test_cap_compliant_height, 0, 0, 0 }, { "test_encode_file_empty", test_encode_file_empty, 0, 0, 0 }, { "test_encode_file_too_large", test_encode_file_too_large, 0, 0, 0 }, { "test_encode_file_unreadable", test_encode_file_unreadable, 0, 0, 0 }, diff --git a/backend/tests/test_medical.c b/backend/tests/test_medical.c index 4756d721..bfbbd2cd 100644 --- a/backend/tests/test_medical.c +++ b/backend/tests/test_medical.c @@ -103,10 +103,13 @@ static void test_hrt(int index, int debug) { /* 0*/ { BARCODE_CODABAR, -1, "A1234B", "A1234B" }, /* 1*/ { BARCODE_CODABAR, -1, "a1234c", "A1234C" }, // Converts to upper /* 2*/ { BARCODE_CODABAR, 1, "A1234B", "A1234B" }, // Check not included - /* 3*/ { BARCODE_PHARMA, -1, "123456", "" }, // None - /* 4*/ { BARCODE_PHARMA_TWO, -1, "123456", "" }, // None - /* 5*/ { BARCODE_CODE32, -1, "123456", "A001234564" }, - /* 6*/ { BARCODE_CODE32, -1, "12345678", "A123456788" }, + /* 3*/ { BARCODE_CODABAR, 2, "A1234B", "A12345B" }, // Check included + /* 4*/ { BARCODE_CODABAR, 1, "A123456A", "A123456A" }, // Check not included + /* 5*/ { BARCODE_CODABAR, 2, "A123456A", "A123456$A" }, // Check included + /* 6*/ { BARCODE_PHARMA, -1, "123456", "" }, // None + /* 7*/ { BARCODE_PHARMA_TWO, -1, "123456", "" }, // None + /* 8*/ { BARCODE_CODE32, -1, "123456", "A001234564" }, + /* 9*/ { BARCODE_CODE32, -1, "12345678", "A123456788" }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; diff --git a/backend/tests/test_raster.c b/backend/tests/test_raster.c index a973fca6..059f90ee 100644 --- a/backend/tests/test_raster.c +++ b/backend/tests/test_raster.c @@ -109,6 +109,7 @@ static void test_buffer(int index, int generate, int debug) { struct item { int symbology; + int output_options; char *data; char *composite; @@ -119,134 +120,262 @@ static void test_buffer(int index, int generate, int debug) { int expected_bitmap_height; }; struct item data[] = { - /* 0*/ { BARCODE_CODE11, "1234567890", "", 50, 1, 108, 216, 116 }, - /* 1*/ { BARCODE_C25STANDARD, "1234567890", "", 50, 1, 117, 234, 116 }, - /* 2*/ { BARCODE_C25INTER, "1234567890", "", 50, 1, 99, 198, 116 }, - /* 3*/ { BARCODE_C25IATA, "1234567890", "", 50, 1, 149, 298, 116 }, - /* 4*/ { BARCODE_C25LOGIC, "1234567890", "", 50, 1, 109, 218, 116 }, - /* 5*/ { BARCODE_C25IND, "1234567890", "", 50, 1, 159, 318, 116 }, - /* 6*/ { BARCODE_CODE39, "1234567890", "", 50, 1, 155, 310, 116 }, - /* 7*/ { BARCODE_EXCODE39, "1234567890", "", 50, 1, 155, 310, 116 }, - /* 8*/ { BARCODE_EANX, "123456789012", "", 50, 1, 95, 226, 116 }, - /* 9*/ { BARCODE_EANX_CHK, "1234567890128", "", 50, 1, 95, 226, 116 }, - /* 10*/ { BARCODE_EANX, "123456789012+12", "", 50, 1, 122, 276, 116 }, - /* 11*/ { BARCODE_EANX_CHK, "1234567890128+12", "", 50, 1, 122, 276, 116 }, - /* 12*/ { BARCODE_EANX, "123456789012+12345", "", 50, 1, 149, 330, 116 }, - /* 13*/ { BARCODE_EANX_CHK, "1234567890128+12345", "", 50, 1, 149, 330, 116 }, - /* 14*/ { BARCODE_EANX, "1234567", "", 50, 1, 67, 162, 116 }, - /* 15*/ { BARCODE_EANX_CHK, "12345670", "", 50, 1, 67, 162, 116 }, - /* 16*/ { BARCODE_EANX, "1234567+12", "", 50, 1, 94, 216, 116 }, - /* 17*/ { BARCODE_EANX_CHK, "12345670+12", "", 50, 1, 94, 216, 116 }, - /* 18*/ { BARCODE_EANX, "1234567+12345", "", 50, 1, 121, 270, 116 }, - /* 19*/ { BARCODE_EANX_CHK, "12345670+12345", "", 50, 1, 121, 270, 116 }, - /* 20*/ { BARCODE_EANX, "1234", "", 50, 1, 47, 118, 116 }, - /* 21*/ { BARCODE_EANX_CHK, "1234", "", 50, 1, 47, 118, 116 }, - /* 22*/ { BARCODE_EANX, "12", "", 50, 1, 20, 64, 116 }, - /* 23*/ { BARCODE_EANX_CHK, "12", "", 50, 1, 20, 64, 116 }, - /* 24*/ { BARCODE_GS1_128, "[01]12345678901231", "", 50, 1, 134, 268, 116 }, - /* 25*/ { BARCODE_CODABAR, "A00000000B", "", 50, 1, 102, 204, 116 }, - /* 26*/ { BARCODE_CODE128, "1234567890", "", 50, 1, 90, 180, 116 }, - /* 27*/ { BARCODE_DPLEIT, "1234567890123", "", 50, 1, 135, 270, 116 }, - /* 28*/ { BARCODE_DPIDENT, "12345678901", "", 50, 1, 117, 234, 116 }, - /* 29*/ { BARCODE_CODE16K, "1234567890", "", 20, 2, 70, 162, 44 }, - /* 30*/ { BARCODE_CODE49, "1234567890", "", 20, 2, 70, 162, 44 }, - /* 31*/ { BARCODE_CODE93, "1234567890", "", 50, 1, 127, 254, 116 }, - /* 32*/ { BARCODE_FLAT, "1234567890", "", 50, 1, 90, 180, 100 }, - /* 33*/ { BARCODE_DBAR_OMN, "1234567890123", "", 50, 1, 96, 192, 116 }, - /* 34*/ { BARCODE_DBAR_LTD, "1234567890123", "", 50, 1, 79, 158, 116 }, - /* 35*/ { BARCODE_DBAR_EXP, "[01]12345678901231", "", 34, 1, 134, 268, 84 }, - /* 36*/ { BARCODE_TELEPEN, "1234567890", "", 50, 1, 208, 416, 116 }, - /* 37*/ { BARCODE_UPCA, "12345678901", "", 50, 1, 95, 226, 116 }, - /* 38*/ { BARCODE_UPCA_CHK, "123456789012", "", 50, 1, 95, 226, 116 }, - /* 39*/ { BARCODE_UPCA, "12345678901+12", "", 50, 1, 124, 276, 116 }, - /* 40*/ { BARCODE_UPCA_CHK, "123456789012+12", "", 50, 1, 124, 276, 116 }, - /* 41*/ { BARCODE_UPCA, "12345678901+12345", "", 50, 1, 151, 330, 116 }, - /* 42*/ { BARCODE_UPCA_CHK, "123456789012+12345", "", 50, 1, 151, 330, 116 }, - /* 43*/ { BARCODE_UPCE, "1234567", "", 50, 1, 51, 134, 116 }, - /* 44*/ { BARCODE_UPCE_CHK, "12345670", "", 50, 1, 51, 134, 116 }, - /* 45*/ { BARCODE_UPCE, "1234567+12", "", 50, 1, 78, 184, 116 }, - /* 46*/ { BARCODE_UPCE_CHK, "12345670+12", "", 50, 1, 78, 184, 116 }, - /* 47*/ { BARCODE_UPCE, "1234567+12345", "", 50, 1, 105, 238, 116 }, - /* 48*/ { BARCODE_UPCE_CHK, "12345670+12345", "", 50, 1, 105, 238, 116 }, - /* 49*/ { BARCODE_POSTNET, "12345678901", "", 12, 2, 123, 246, 24 }, - /* 50*/ { BARCODE_MSI_PLESSEY, "1234567890", "", 50, 1, 127, 254, 116 }, - /* 51*/ { BARCODE_FIM, "A", "", 50, 1, 17, 34, 100 }, - /* 52*/ { BARCODE_LOGMARS, "1234567890", "", 50, 1, 191, 382, 116 }, - /* 53*/ { BARCODE_PHARMA, "123456", "", 50, 1, 58, 116, 100 }, - /* 54*/ { BARCODE_PZN, "123456", "", 50, 1, 142, 284, 116 }, - /* 55*/ { BARCODE_PHARMA_TWO, "12345678", "", 10, 2, 29, 58, 20 }, - /* 56*/ { BARCODE_PDF417, "1234567890", "", 21, 7, 103, 206, 42 }, - /* 57*/ { BARCODE_PDF417COMP, "1234567890", "", 21, 7, 69, 138, 42 }, - /* 58*/ { BARCODE_MAXICODE, "1234567890", "", 165, 33, 30, 299, 298 }, - /* 59*/ { BARCODE_QRCODE, "1234567890AB", "", 21, 21, 21, 42, 42 }, - /* 60*/ { BARCODE_CODE128B, "1234567890", "", 50, 1, 145, 290, 116 }, - /* 61*/ { BARCODE_AUSPOST, "12345678901234567890123", "", 8, 3, 133, 266, 16 }, - /* 62*/ { BARCODE_AUSREPLY, "12345678", "", 8, 3, 73, 146, 16 }, - /* 63*/ { BARCODE_AUSROUTE, "12345678", "", 8, 3, 73, 146, 16 }, - /* 64*/ { BARCODE_AUSREDIRECT, "12345678", "", 8, 3, 73, 146, 16 }, - /* 65*/ { BARCODE_ISBNX, "123456789", "", 50, 1, 95, 226, 116 }, - /* 66*/ { BARCODE_ISBNX, "123456789+12", "", 50, 1, 122, 276, 116 }, - /* 67*/ { BARCODE_ISBNX, "123456789+12345", "", 50, 1, 149, 330, 116 }, - /* 68*/ { BARCODE_RM4SCC, "1234567890", "", 8, 3, 91, 182, 16 }, - /* 69*/ { BARCODE_DATAMATRIX, "ABC", "", 10, 10, 10, 20, 20 }, - /* 70*/ { BARCODE_EAN14, "1234567890123", "", 50, 1, 134, 268, 116 }, - /* 71*/ { BARCODE_VIN, "12345678701234567", "", 50, 1, 246, 492, 116 }, - /* 72*/ { BARCODE_CODABLOCKF, "1234567890", "", 20, 2, 101, 242, 44 }, - /* 73*/ { BARCODE_NVE18, "12345678901234567", "", 50, 1, 156, 312, 116 }, - /* 74*/ { BARCODE_JAPANPOST, "1234567890", "", 8, 3, 133, 266, 16 }, - /* 75*/ { BARCODE_KOREAPOST, "123456", "", 50, 1, 167, 334, 116 }, - /* 76*/ { BARCODE_DBAR_STK, "1234567890123", "", 13, 3, 50, 100, 26 }, - /* 77*/ { BARCODE_DBAR_OMNSTK, "1234567890123", "", 69, 5, 50, 100, 138 }, - /* 78*/ { BARCODE_DBAR_EXPSTK, "[01]12345678901231", "", 71, 5, 102, 204, 142 }, - /* 79*/ { BARCODE_PLANET, "12345678901", "", 12, 2, 123, 246, 24 }, - /* 80*/ { BARCODE_MICROPDF417, "1234567890", "", 12, 6, 82, 164, 24 }, - /* 81*/ { BARCODE_USPS_IMAIL, "12345678901234567890", "", 8, 3, 129, 258, 16 }, - /* 82*/ { BARCODE_PLESSEY, "1234567890", "", 50, 1, 227, 454, 116 }, - /* 83*/ { BARCODE_TELEPEN_NUM, "1234567890", "", 50, 1, 128, 256, 116 }, - /* 84*/ { BARCODE_ITF14, "1234567890", "", 50, 1, 135, 330, 136 }, - /* 85*/ { BARCODE_KIX, "123456ABCDE", "", 8, 3, 87, 174, 16 }, - /* 86*/ { BARCODE_AZTEC, "1234567890AB", "", 15, 15, 15, 30, 30 }, - /* 87*/ { BARCODE_DAFT, "DAFTDAFTDAFTDAFT", "", 8, 3, 31, 62, 16 }, - /* 88*/ { BARCODE_DPD, "0123456789012345678901234567", "", 50, 1, 189, 378, 116 }, - /* 89*/ { BARCODE_MICROQR, "12345", "", 11, 11, 11, 22, 22 }, - /* 90*/ { BARCODE_HIBC_128, "1234567890", "", 50, 1, 123, 246, 116 }, - /* 91*/ { BARCODE_HIBC_39, "1234567890", "", 50, 1, 223, 446, 116 }, - /* 92*/ { BARCODE_HIBC_DM, "ABC", "", 12, 12, 12, 24, 24 }, - /* 93*/ { BARCODE_HIBC_QR, "1234567890AB", "", 21, 21, 21, 42, 42 }, - /* 94*/ { BARCODE_HIBC_PDF, "1234567890", "", 24, 8, 103, 206, 48 }, - /* 95*/ { BARCODE_HIBC_MICPDF, "1234567890", "", 28, 14, 38, 76, 56 }, - /* 96*/ { BARCODE_HIBC_BLOCKF, "1234567890", "", 30, 3, 101, 242, 64 }, - /* 97*/ { BARCODE_HIBC_AZTEC, "1234567890AB", "", 19, 19, 19, 38, 38 }, - /* 98*/ { BARCODE_DOTCODE, "ABC", "", 11, 11, 16, 33, 23 }, - /* 99*/ { BARCODE_HANXIN, "1234567890AB", "", 23, 23, 23, 46, 46 }, - /*100*/ { BARCODE_MAILMARK, "01000000000000000AA00AA0A", "", 10, 3, 155, 310, 20 }, - /*101*/ { BARCODE_AZRUNE, "255", "", 11, 11, 11, 22, 22 }, - /*102*/ { BARCODE_CODE32, "12345678", "", 50, 1, 103, 206, 116 }, - /*103*/ { BARCODE_EANX_CC, "123456789012", "[20]01", 50, 7, 99, 234, 116 }, - /*104*/ { BARCODE_EANX_CC, "123456789012+12", "[20]01", 50, 7, 126, 284, 116 }, - /*105*/ { BARCODE_EANX_CC, "123456789012+12345", "[20]01", 50, 7, 153, 338, 116 }, - /*106*/ { BARCODE_EANX_CC, "1234567", "[20]01", 50, 8, 72, 172, 116 }, - /*107*/ { BARCODE_EANX_CC, "1234567+12", "[20]01", 50, 8, 99, 226, 116 }, - /*108*/ { BARCODE_EANX_CC, "1234567+12345", "[20]01", 50, 8, 126, 280, 116 }, - /*109*/ { BARCODE_GS1_128_CC, "[01]12345678901231", "[20]01", 50, 5, 145, 290, 116 }, - /*110*/ { BARCODE_DBAR_OMN_CC, "1234567890123", "[20]01", 21, 5, 100, 200, 58 }, - /*111*/ { BARCODE_DBAR_LTD_CC, "1234567890123", "[20]01", 19, 6, 79, 158, 54 }, - /*112*/ { BARCODE_DBAR_EXP_CC, "[01]12345678901231", "[20]01", 41, 5, 134, 268, 98 }, - /*113*/ { BARCODE_UPCA_CC, "12345678901", "[20]01", 50, 7, 99, 234, 116 }, - /*114*/ { BARCODE_UPCA_CC, "12345678901+12", "[20]01", 50, 7, 128, 284, 116 }, - /*115*/ { BARCODE_UPCA_CC, "12345678901+12345", "[20]01", 50, 7, 155, 338, 116 }, - /*116*/ { BARCODE_UPCE_CC, "1234567", "[20]01", 50, 9, 55, 142, 116 }, - /*117*/ { BARCODE_UPCE_CC, "1234567+12", "[20]01", 50, 9, 82, 192, 116 }, - /*118*/ { BARCODE_UPCE_CC, "1234567+12345", "[20]01", 50, 9, 109, 246, 116 }, - /*119*/ { BARCODE_DBAR_STK_CC, "1234567890123", "[20]01", 24, 9, 56, 112, 48 }, - /*120*/ { BARCODE_DBAR_OMNSTK_CC, "1234567890123", "[20]01", 80, 11, 56, 112, 160 }, - /*121*/ { BARCODE_DBAR_EXPSTK_CC, "[01]12345678901231", "[20]01", 78, 9, 102, 204, 156 }, - /*122*/ { BARCODE_CHANNEL, "01", "", 50, 1, 19, 38, 116 }, - /*123*/ { BARCODE_CODEONE, "12345678901234567890", "", 16, 16, 18, 36, 32 }, - /*124*/ { BARCODE_GRIDMATRIX, "ABC", "", 18, 18, 18, 36, 36 }, - /*125*/ { BARCODE_UPNQR, "1234567890AB", "", 77, 77, 77, 154, 154 }, - /*126*/ { BARCODE_ULTRA, "1234567890", "", 13, 13, 18, 36, 26 }, - /*127*/ { BARCODE_RMQR, "12345", "", 11, 11, 27, 54, 22 }, + /* 0*/ { BARCODE_CODE11, -1, "1234567890", "", 50, 1, 108, 216, 116 }, + /* 1*/ { BARCODE_CODE11, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 108, 216, 116 }, + /* 2*/ { BARCODE_C25STANDARD, -1, "1234567890", "", 50, 1, 117, 234, 116 }, + /* 3*/ { BARCODE_C25STANDARD, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 117, 234, 116 }, + /* 4*/ { BARCODE_C25INTER, -1, "1234567890", "", 50, 1, 99, 198, 116 }, + /* 5*/ { BARCODE_C25INTER, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 99, 198, 116 }, + /* 6*/ { BARCODE_C25IATA, -1, "1234567890", "", 50, 1, 149, 298, 116 }, + /* 7*/ { BARCODE_C25IATA, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 149, 298, 116 }, + /* 8*/ { BARCODE_C25LOGIC, -1, "1234567890", "", 50, 1, 109, 218, 116 }, + /* 9*/ { BARCODE_C25LOGIC, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 109, 218, 116 }, + /* 10*/ { BARCODE_C25IND, -1, "1234567890", "", 50, 1, 159, 318, 116 }, + /* 11*/ { BARCODE_C25IND, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 159, 318, 116 }, + /* 12*/ { BARCODE_CODE39, -1, "1234567890", "", 50, 1, 155, 310, 116 }, + /* 13*/ { BARCODE_CODE39, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 155, 310, 116 }, + /* 14*/ { BARCODE_EXCODE39, -1, "1234567890", "", 50, 1, 155, 310, 116 }, + /* 15*/ { BARCODE_EXCODE39, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 155, 310, 116 }, + /* 16*/ { BARCODE_EANX, -1, "123456789012", "", 50, 1, 95, 226, 116 }, + /* 17*/ { BARCODE_EANX, COMPLIANT_HEIGHT, "123456789012", "", 69, 1, 95, 226, 154 }, + /* 18*/ { BARCODE_EANX_CHK, -1, "1234567890128", "", 50, 1, 95, 226, 116 }, + /* 19*/ { BARCODE_EANX_CHK, COMPLIANT_HEIGHT, "1234567890128", "", 69, 1, 95, 226, 154 }, + /* 20*/ { BARCODE_EANX, -1, "123456789012+12", "", 50, 1, 122, 276, 116 }, + /* 21*/ { BARCODE_EANX, COMPLIANT_HEIGHT, "123456789012+12", "", 69, 1, 122, 276, 154 }, + /* 22*/ { BARCODE_EANX_CHK, -1, "1234567890128+12", "", 50, 1, 122, 276, 116 }, + /* 23*/ { BARCODE_EANX_CHK, COMPLIANT_HEIGHT, "1234567890128+12", "", 69, 1, 122, 276, 154 }, + /* 24*/ { BARCODE_EANX, -1, "123456789012+12345", "", 50, 1, 149, 330, 116 }, + /* 25*/ { BARCODE_EANX, COMPLIANT_HEIGHT, "123456789012+12345", "", 69, 1, 149, 330, 154 }, + /* 26*/ { BARCODE_EANX_CHK, -1, "1234567890128+12345", "", 50, 1, 149, 330, 116 }, + /* 27*/ { BARCODE_EANX_CHK, COMPLIANT_HEIGHT, "1234567890128+12345", "", 69, 1, 149, 330, 154 }, + /* 28*/ { BARCODE_EANX, -1, "1234567", "", 50, 1, 67, 162, 116 }, + /* 29*/ { BARCODE_EANX, COMPLIANT_HEIGHT, "1234567", "", 55, 1, 67, 162, 126 }, + /* 30*/ { BARCODE_EANX_CHK, -1, "12345670", "", 50, 1, 67, 162, 116 }, + /* 31*/ { BARCODE_EANX_CHK, COMPLIANT_HEIGHT, "12345670", "", 55, 1, 67, 162, 126 }, + /* 32*/ { BARCODE_EANX, -1, "1234567+12", "", 50, 1, 94, 216, 116 }, + /* 33*/ { BARCODE_EANX, COMPLIANT_HEIGHT, "1234567+12", "", 55, 1, 94, 216, 126 }, + /* 34*/ { BARCODE_EANX_CHK, -1, "12345670+12", "", 50, 1, 94, 216, 116 }, + /* 35*/ { BARCODE_EANX_CHK, COMPLIANT_HEIGHT, "12345670+12", "", 55, 1, 94, 216, 126 }, + /* 36*/ { BARCODE_EANX, -1, "1234567+12345", "", 50, 1, 121, 270, 116 }, + /* 37*/ { BARCODE_EANX, COMPLIANT_HEIGHT, "1234567+12345", "", 55, 1, 121, 270, 126 }, + /* 38*/ { BARCODE_EANX_CHK, -1, "12345670+12345", "", 50, 1, 121, 270, 116 }, + /* 39*/ { BARCODE_EANX_CHK, COMPLIANT_HEIGHT, "12345670+12345", "", 55, 1, 121, 270, 126 }, + /* 40*/ { BARCODE_EANX, -1, "1234", "", 50, 1, 47, 118, 116 }, + /* 41*/ { BARCODE_EANX, COMPLIANT_HEIGHT, "1234", "", 66.5, 1, 47, 118, 149 }, + /* 42*/ { BARCODE_EANX_CHK, -1, "1234", "", 50, 1, 47, 118, 116 }, + /* 43*/ { BARCODE_EANX_CHK, COMPLIANT_HEIGHT, "1234", "", 66.5, 1, 47, 118, 149 }, + /* 44*/ { BARCODE_EANX, -1, "12", "", 50, 1, 20, 64, 116 }, + /* 45*/ { BARCODE_EANX, COMPLIANT_HEIGHT, "12", "", 66.5, 1, 20, 64, 149 }, + /* 46*/ { BARCODE_EANX_CHK, -1, "12", "", 50, 1, 20, 64, 116 }, + /* 47*/ { BARCODE_EANX_CHK, COMPLIANT_HEIGHT, "12", "", 66.5, 1, 20, 64, 149 }, + /* 48*/ { BARCODE_GS1_128, -1, "[01]12345678901231", "", 50, 1, 134, 268, 116 }, + /* 49*/ { BARCODE_GS1_128, COMPLIANT_HEIGHT, "[01]12345678901231", "", 64, 1, 134, 268, 144 }, + /* 50*/ { BARCODE_CODABAR, -1, "A00000000B", "", 50, 1, 102, 204, 116 }, + /* 51*/ { BARCODE_CODABAR, COMPLIANT_HEIGHT, "A00000000B", "", 50, 1, 102, 204, 116 }, + /* 52*/ { BARCODE_CODE128, -1, "1234567890", "", 50, 1, 90, 180, 116 }, + /* 53*/ { BARCODE_CODE128, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 90, 180, 116 }, + /* 54*/ { BARCODE_DPLEIT, -1, "1234567890123", "", 50, 1, 135, 270, 116 }, + /* 55*/ { BARCODE_DPLEIT, COMPLIANT_HEIGHT, "1234567890123", "", 50, 1, 135, 270, 116 }, + /* 56*/ { BARCODE_DPIDENT, -1, "12345678901", "", 50, 1, 117, 234, 116 }, + /* 57*/ { BARCODE_DPIDENT, COMPLIANT_HEIGHT, "12345678901", "", 50, 1, 117, 234, 116 }, + /* 58*/ { BARCODE_CODE16K, -1, "1234567890", "", 20, 2, 70, 162, 44 }, + /* 59*/ { BARCODE_CODE16K, COMPLIANT_HEIGHT, "1234567890", "", 21, 2, 70, 162, 46 }, + /* 60*/ { BARCODE_CODE49, -1, "1234567890", "", 20, 2, 70, 162, 44 }, + /* 61*/ { BARCODE_CODE49, COMPLIANT_HEIGHT, "1234567890", "", 21, 2, 70, 162, 46 }, + /* 62*/ { BARCODE_CODE93, -1, "1234567890", "", 50, 1, 127, 254, 116 }, + /* 63*/ { BARCODE_CODE93, COMPLIANT_HEIGHT, "1234567890", "", 40, 1, 127, 254, 96 }, + /* 64*/ { BARCODE_FLAT, -1, "1234567890", "", 50, 1, 90, 180, 100 }, + /* 65*/ { BARCODE_FLAT, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 90, 180, 100 }, + /* 66*/ { BARCODE_DBAR_OMN, -1, "1234567890123", "", 50, 1, 96, 192, 116 }, + /* 67*/ { BARCODE_DBAR_OMN, COMPLIANT_HEIGHT, "1234567890123", "", 33, 1, 96, 192, 82 }, + /* 68*/ { BARCODE_DBAR_LTD, -1, "1234567890123", "", 50, 1, 79, 158, 116 }, + /* 69*/ { BARCODE_DBAR_LTD, COMPLIANT_HEIGHT, "1234567890123", "", 10, 1, 79, 158, 36 }, + /* 70*/ { BARCODE_DBAR_EXP, -1, "[01]12345678901231", "", 34, 1, 134, 268, 84 }, + /* 71*/ { BARCODE_DBAR_EXP, COMPLIANT_HEIGHT, "[01]12345678901231", "", 34, 1, 134, 268, 84 }, + /* 72*/ { BARCODE_TELEPEN, -1, "1234567890", "", 50, 1, 208, 416, 116 }, + /* 73*/ { BARCODE_TELEPEN, COMPLIANT_HEIGHT, "1234567890", "", 32, 1, 208, 416, 80 }, + /* 74*/ { BARCODE_UPCA, -1, "12345678901", "", 50, 1, 95, 226, 116 }, + /* 75*/ { BARCODE_UPCA, COMPLIANT_HEIGHT, "12345678901", "", 69, 1, 95, 226, 154 }, + /* 76*/ { BARCODE_UPCA_CHK, -1, "123456789012", "", 50, 1, 95, 226, 116 }, + /* 77*/ { BARCODE_UPCA_CHK, COMPLIANT_HEIGHT, "123456789012", "", 69, 1, 95, 226, 154 }, + /* 78*/ { BARCODE_UPCA, -1, "12345678901+12", "", 50, 1, 124, 276, 116 }, + /* 79*/ { BARCODE_UPCA, COMPLIANT_HEIGHT, "12345678901+12", "", 69, 1, 124, 276, 154 }, + /* 80*/ { BARCODE_UPCA_CHK, -1, "123456789012+12", "", 50, 1, 124, 276, 116 }, + /* 81*/ { BARCODE_UPCA_CHK, COMPLIANT_HEIGHT, "123456789012+12", "", 69, 1, 124, 276, 154 }, + /* 82*/ { BARCODE_UPCA, -1, "12345678901+12345", "", 50, 1, 151, 330, 116 }, + /* 83*/ { BARCODE_UPCA, COMPLIANT_HEIGHT, "12345678901+12345", "", 69, 1, 151, 330, 154 }, + /* 84*/ { BARCODE_UPCA_CHK, -1, "123456789012+12345", "", 50, 1, 151, 330, 116 }, + /* 85*/ { BARCODE_UPCA_CHK, COMPLIANT_HEIGHT, "123456789012+12345", "", 69, 1, 151, 330, 154 }, + /* 86*/ { BARCODE_UPCE, -1, "1234567", "", 50, 1, 51, 134, 116 }, + /* 87*/ { BARCODE_UPCE, COMPLIANT_HEIGHT, "1234567", "", 69, 1, 51, 134, 154 }, + /* 88*/ { BARCODE_UPCE_CHK, -1, "12345670", "", 50, 1, 51, 134, 116 }, + /* 89*/ { BARCODE_UPCE_CHK, COMPLIANT_HEIGHT, "12345670", "", 69, 1, 51, 134, 154 }, + /* 90*/ { BARCODE_UPCE, -1, "1234567+12", "", 50, 1, 78, 184, 116 }, + /* 91*/ { BARCODE_UPCE, COMPLIANT_HEIGHT, "1234567+12", "", 69, 1, 78, 184, 154 }, + /* 92*/ { BARCODE_UPCE_CHK, -1, "12345670+12", "", 50, 1, 78, 184, 116 }, + /* 93*/ { BARCODE_UPCE_CHK, COMPLIANT_HEIGHT, "12345670+12", "", 69, 1, 78, 184, 154 }, + /* 94*/ { BARCODE_UPCE, -1, "1234567+12345", "", 50, 1, 105, 238, 116 }, + /* 95*/ { BARCODE_UPCE, COMPLIANT_HEIGHT, "1234567+12345", "", 69, 1, 105, 238, 154 }, + /* 96*/ { BARCODE_UPCE_CHK, -1, "12345670+12345", "", 50, 1, 105, 238, 116 }, + /* 97*/ { BARCODE_UPCE_CHK, COMPLIANT_HEIGHT, "12345670+12345", "", 69, 1, 105, 238, 154 }, + /* 98*/ { BARCODE_POSTNET, -1, "12345678901", "", 12, 2, 123, 246, 24 }, + /* 99*/ { BARCODE_POSTNET, COMPLIANT_HEIGHT, "12345678901", "", 5, 2, 123, 246, 10 }, + /*100*/ { BARCODE_MSI_PLESSEY, -1, "1234567890", "", 50, 1, 127, 254, 116 }, + /*101*/ { BARCODE_MSI_PLESSEY, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 127, 254, 116 }, + /*102*/ { BARCODE_FIM, -1, "A", "", 50, 1, 17, 34, 100 }, + /*103*/ { BARCODE_FIM, COMPLIANT_HEIGHT, "A", "", 20, 1, 17, 34, 40 }, + /*104*/ { BARCODE_LOGMARS, -1, "1234567890", "", 50, 1, 191, 382, 116 }, + /*105*/ { BARCODE_LOGMARS, COMPLIANT_HEIGHT, "1234567890", "", 45.5, 1, 191, 382, 107 }, + /*106*/ { BARCODE_PHARMA, -1, "123456", "", 50, 1, 58, 116, 100 }, + /*107*/ { BARCODE_PHARMA, COMPLIANT_HEIGHT, "123456", "", 16, 1, 58, 116, 32 }, + /*108*/ { BARCODE_PZN, -1, "123456", "", 50, 1, 142, 284, 116 }, + /*109*/ { BARCODE_PZN, COMPLIANT_HEIGHT, "123456", "", 40, 1, 142, 284, 96 }, + /*110*/ { BARCODE_PHARMA_TWO, -1, "12345678", "", 10, 2, 29, 58, 20 }, + /*111*/ { BARCODE_PHARMA_TWO, COMPLIANT_HEIGHT, "12345678", "", 8, 2, 29, 58, 16 }, + /*112*/ { BARCODE_PDF417, -1, "1234567890", "", 21, 7, 103, 206, 42 }, + /*113*/ { BARCODE_PDF417, COMPLIANT_HEIGHT, "1234567890", "", 21, 7, 103, 206, 42 }, + /*114*/ { BARCODE_PDF417COMP, -1, "1234567890", "", 21, 7, 69, 138, 42 }, + /*115*/ { BARCODE_PDF417COMP, COMPLIANT_HEIGHT, "1234567890", "", 21, 7, 69, 138, 42 }, + /*116*/ { BARCODE_MAXICODE, -1, "1234567890", "", 165, 33, 30, 299, 298 }, + /*117*/ { BARCODE_MAXICODE, COMPLIANT_HEIGHT, "1234567890", "", 165, 33, 30, 299, 298 }, + /*118*/ { BARCODE_QRCODE, -1, "1234567890AB", "", 21, 21, 21, 42, 42 }, + /*119*/ { BARCODE_QRCODE, COMPLIANT_HEIGHT, "1234567890AB", "", 21, 21, 21, 42, 42 }, + /*120*/ { BARCODE_CODE128B, -1, "1234567890", "", 50, 1, 145, 290, 116 }, + /*121*/ { BARCODE_CODE128B, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 145, 290, 116 }, + /*122*/ { BARCODE_AUSPOST, -1, "12345678901234567890123", "", 8, 3, 133, 266, 16 }, + /*123*/ { BARCODE_AUSPOST, COMPLIANT_HEIGHT, "12345678901234567890123", "", 9.5, 3, 133, 266, 19 }, + /*124*/ { BARCODE_AUSREPLY, -1, "12345678", "", 8, 3, 73, 146, 16 }, + /*125*/ { BARCODE_AUSREPLY, COMPLIANT_HEIGHT, "12345678", "", 9.5, 3, 73, 146, 19 }, + /*126*/ { BARCODE_AUSROUTE, -1, "12345678", "", 8, 3, 73, 146, 16 }, + /*127*/ { BARCODE_AUSROUTE, COMPLIANT_HEIGHT, "12345678", "", 9.5, 3, 73, 146, 19 }, + /*128*/ { BARCODE_AUSREDIRECT, -1, "12345678", "", 8, 3, 73, 146, 16 }, + /*129*/ { BARCODE_AUSREDIRECT, COMPLIANT_HEIGHT, "12345678", "", 9.5, 3, 73, 146, 19 }, + /*130*/ { BARCODE_ISBNX, -1, "123456789", "", 50, 1, 95, 226, 116 }, + /*131*/ { BARCODE_ISBNX, COMPLIANT_HEIGHT, "123456789", "", 69, 1, 95, 226, 154 }, + /*132*/ { BARCODE_ISBNX, -1, "123456789+12", "", 50, 1, 122, 276, 116 }, + /*133*/ { BARCODE_ISBNX, COMPLIANT_HEIGHT, "123456789+12", "", 69, 1, 122, 276, 154 }, + /*134*/ { BARCODE_ISBNX, -1, "123456789+12345", "", 50, 1, 149, 330, 116 }, + /*135*/ { BARCODE_ISBNX, COMPLIANT_HEIGHT, "123456789+12345", "", 69, 1, 149, 330, 154 }, + /*136*/ { BARCODE_RM4SCC, -1, "1234567890", "", 8, 3, 91, 182, 16 }, + /*137*/ { BARCODE_RM4SCC, COMPLIANT_HEIGHT, "1234567890", "", 8, 3, 91, 182, 16 }, + /*138*/ { BARCODE_DATAMATRIX, -1, "ABC", "", 10, 10, 10, 20, 20 }, + /*139*/ { BARCODE_DATAMATRIX, COMPLIANT_HEIGHT, "ABC", "", 10, 10, 10, 20, 20 }, + /*140*/ { BARCODE_EAN14, -1, "1234567890123", "", 50, 1, 134, 268, 116 }, + /*141*/ { BARCODE_EAN14, COMPLIANT_HEIGHT, "1234567890123", "", 64, 1, 134, 268, 144 }, + /*142*/ { BARCODE_VIN, -1, "12345678701234567", "", 50, 1, 246, 492, 116 }, + /*143*/ { BARCODE_VIN, COMPLIANT_HEIGHT, "12345678701234567", "", 50, 1, 246, 492, 116 }, + /*144*/ { BARCODE_CODABLOCKF, -1, "1234567890", "", 20, 2, 101, 242, 44 }, + /*145*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, "1234567890", "", 20, 2, 101, 242, 44 }, + /*146*/ { BARCODE_NVE18, -1, "12345678901234567", "", 50, 1, 156, 312, 116 }, + /*147*/ { BARCODE_NVE18, COMPLIANT_HEIGHT, "12345678901234567", "", 64, 1, 156, 312, 144 }, + /*148*/ { BARCODE_JAPANPOST, -1, "1234567890", "", 8, 3, 133, 266, 16 }, + /*149*/ { BARCODE_JAPANPOST, COMPLIANT_HEIGHT, "1234567890", "", 6, 3, 133, 266, 12 }, + /*150*/ { BARCODE_KOREAPOST, -1, "123456", "", 50, 1, 167, 334, 116 }, + /*151*/ { BARCODE_KOREAPOST, COMPLIANT_HEIGHT, "123456", "", 50, 1, 167, 334, 116 }, + /*152*/ { BARCODE_DBAR_STK, -1, "1234567890123", "", 13, 3, 50, 100, 26 }, + /*153*/ { BARCODE_DBAR_STK, COMPLIANT_HEIGHT, "1234567890123", "", 13, 3, 50, 100, 26 }, + /*154*/ { BARCODE_DBAR_OMNSTK, -1, "1234567890123", "", 69, 5, 50, 100, 138 }, + /*155*/ { BARCODE_DBAR_OMNSTK, COMPLIANT_HEIGHT, "1234567890123", "", 69, 5, 50, 100, 138 }, + /*156*/ { BARCODE_DBAR_EXPSTK, -1, "[01]12345678901231", "", 71, 5, 102, 204, 142 }, + /*157*/ { BARCODE_DBAR_EXPSTK, COMPLIANT_HEIGHT, "[01]12345678901231", "", 71, 5, 102, 204, 142 }, + /*158*/ { BARCODE_PLANET, -1, "12345678901", "", 12, 2, 123, 246, 24 }, + /*159*/ { BARCODE_PLANET, COMPLIANT_HEIGHT, "12345678901", "", 5, 2, 123, 246, 10 }, + /*160*/ { BARCODE_MICROPDF417, -1, "1234567890", "", 12, 6, 82, 164, 24 }, + /*161*/ { BARCODE_MICROPDF417, COMPLIANT_HEIGHT, "1234567890", "", 12, 6, 82, 164, 24 }, + /*162*/ { BARCODE_USPS_IMAIL, -1, "12345678901234567890", "", 8, 3, 129, 258, 16 }, + /*163*/ { BARCODE_USPS_IMAIL, COMPLIANT_HEIGHT, "12345678901234567890", "", 6, 3, 129, 258, 12 }, + /*164*/ { BARCODE_PLESSEY, -1, "1234567890", "", 50, 1, 227, 454, 116 }, + /*165*/ { BARCODE_PLESSEY, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 227, 454, 116 }, + /*166*/ { BARCODE_TELEPEN_NUM, -1, "1234567890", "", 50, 1, 128, 256, 116 }, + /*167*/ { BARCODE_TELEPEN_NUM, COMPLIANT_HEIGHT, "1234567890", "", 32, 1, 128, 256, 80 }, + /*168*/ { BARCODE_ITF14, -1, "1234567890", "", 50, 1, 135, 330, 136 }, + /*169*/ { BARCODE_ITF14, COMPLIANT_HEIGHT, "1234567890", "", 64, 1, 135, 330, 164 }, + /*170*/ { BARCODE_KIX, -1, "123456ABCDE", "", 8, 3, 87, 174, 16 }, + /*171*/ { BARCODE_KIX, COMPLIANT_HEIGHT, "123456ABCDE", "", 8, 3, 87, 174, 16 }, + /*172*/ { BARCODE_AZTEC, -1, "1234567890AB", "", 15, 15, 15, 30, 30 }, + /*173*/ { BARCODE_AZTEC, COMPLIANT_HEIGHT, "1234567890AB", "", 15, 15, 15, 30, 30 }, + /*174*/ { BARCODE_DAFT, -1, "DAFTDAFTDAFTDAFT", "", 8, 3, 31, 62, 16 }, + /*175*/ { BARCODE_DAFT, COMPLIANT_HEIGHT, "DAFTDAFTDAFTDAFT", "", 8, 3, 31, 62, 16 }, + /*176*/ { BARCODE_DPD, -1, "0123456789012345678901234567", "", 50, 1, 189, 378, 116 }, + /*177*/ { BARCODE_DPD, COMPLIANT_HEIGHT, "0123456789012345678901234567", "", 66.5, 1, 189, 378, 149 }, + /*178*/ { BARCODE_MICROQR, -1, "12345", "", 11, 11, 11, 22, 22 }, + /*179*/ { BARCODE_MICROQR, COMPLIANT_HEIGHT, "12345", "", 11, 11, 11, 22, 22 }, + /*180*/ { BARCODE_HIBC_128, -1, "1234567890", "", 50, 1, 123, 246, 116 }, + /*181*/ { BARCODE_HIBC_128, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 123, 246, 116 }, + /*182*/ { BARCODE_HIBC_39, -1, "1234567890", "", 50, 1, 223, 446, 116 }, + /*183*/ { BARCODE_HIBC_39, COMPLIANT_HEIGHT, "1234567890", "", 50, 1, 223, 446, 116 }, + /*184*/ { BARCODE_HIBC_DM, -1, "ABC", "", 12, 12, 12, 24, 24 }, + /*185*/ { BARCODE_HIBC_DM, COMPLIANT_HEIGHT, "ABC", "", 12, 12, 12, 24, 24 }, + /*186*/ { BARCODE_HIBC_QR, -1, "1234567890AB", "", 21, 21, 21, 42, 42 }, + /*187*/ { BARCODE_HIBC_QR, COMPLIANT_HEIGHT, "1234567890AB", "", 21, 21, 21, 42, 42 }, + /*188*/ { BARCODE_HIBC_PDF, -1, "1234567890", "", 24, 8, 103, 206, 48 }, + /*189*/ { BARCODE_HIBC_PDF, COMPLIANT_HEIGHT, "1234567890", "", 24, 8, 103, 206, 48 }, + /*190*/ { BARCODE_HIBC_MICPDF, -1, "1234567890", "", 28, 14, 38, 76, 56 }, + /*191*/ { BARCODE_HIBC_MICPDF, COMPLIANT_HEIGHT, "1234567890", "", 28, 14, 38, 76, 56 }, + /*192*/ { BARCODE_HIBC_BLOCKF, -1, "1234567890", "", 30, 3, 101, 242, 64 }, + /*193*/ { BARCODE_HIBC_BLOCKF, COMPLIANT_HEIGHT, "1234567890", "", 30, 3, 101, 242, 64 }, + /*194*/ { BARCODE_HIBC_AZTEC, -1, "1234567890AB", "", 19, 19, 19, 38, 38 }, + /*195*/ { BARCODE_HIBC_AZTEC, COMPLIANT_HEIGHT, "1234567890AB", "", 19, 19, 19, 38, 38 }, + /*196*/ { BARCODE_DOTCODE, -1, "ABC", "", 11, 11, 16, 33, 23 }, + /*197*/ { BARCODE_DOTCODE, COMPLIANT_HEIGHT, "ABC", "", 11, 11, 16, 33, 23 }, + /*198*/ { BARCODE_HANXIN, -1, "1234567890AB", "", 23, 23, 23, 46, 46 }, + /*199*/ { BARCODE_HANXIN, COMPLIANT_HEIGHT, "1234567890AB", "", 23, 23, 23, 46, 46 }, + /*200*/ { BARCODE_MAILMARK, -1, "01000000000000000AA00AA0A", "", 10, 3, 155, 310, 20 }, + /*201*/ { BARCODE_MAILMARK, COMPLIANT_HEIGHT, "01000000000000000AA00AA0A", "", 8, 3, 155, 310, 16 }, + /*202*/ { BARCODE_AZRUNE, -1, "255", "", 11, 11, 11, 22, 22 }, + /*203*/ { BARCODE_AZRUNE, COMPLIANT_HEIGHT, "255", "", 11, 11, 11, 22, 22 }, + /*204*/ { BARCODE_CODE32, -1, "12345678", "", 50, 1, 103, 206, 116 }, + /*205*/ { BARCODE_CODE32, COMPLIANT_HEIGHT, "12345678", "", 20, 1, 103, 206, 56 }, + /*206*/ { BARCODE_EANX_CC, -1, "123456789012", "[20]01", 50, 7, 99, 234, 116 }, + /*207*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, "123456789012", "[20]01", 81, 7, 99, 234, 178 }, + /*208*/ { BARCODE_EANX_CC, -1, "123456789012+12", "[20]01", 50, 7, 126, 284, 116 }, + /*209*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, "123456789012+12", "[20]01", 81, 7, 126, 284, 178 }, + /*210*/ { BARCODE_EANX_CC, -1, "123456789012+12345", "[20]01", 50, 7, 153, 338, 116 }, + /*211*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, "123456789012+12345", "[20]01", 81, 7, 153, 338, 178 }, + /*212*/ { BARCODE_EANX_CC, -1, "1234567", "[20]01", 50, 8, 72, 172, 116 }, + /*213*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, "1234567", "[20]01", 69, 8, 72, 172, 154 }, + /*214*/ { BARCODE_EANX_CC, -1, "1234567+12", "[20]01", 50, 8, 99, 226, 116 }, + /*215*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, "1234567+12", "[20]01", 69, 8, 99, 226, 154 }, + /*216*/ { BARCODE_EANX_CC, -1, "1234567+12345", "[20]01", 50, 8, 126, 280, 116 }, + /*217*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, "1234567+12345", "[20]01", 69, 8, 126, 280, 154 }, + /*218*/ { BARCODE_GS1_128_CC, -1, "[01]12345678901231", "[20]01", 50, 5, 145, 290, 116 }, + /*219*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, "[01]12345678901231", "[20]01", 71, 5, 145, 290, 158 }, + /*220*/ { BARCODE_DBAR_OMN_CC, -1, "1234567890123", "[20]01", 21, 5, 100, 200, 58 }, + /*221*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, "1234567890123", "[20]01", 40, 5, 100, 200, 96 }, + /*222*/ { BARCODE_DBAR_LTD_CC, -1, "1234567890123", "[20]01", 19, 6, 79, 158, 54 }, + /*223*/ { BARCODE_DBAR_LTD_CC, COMPLIANT_HEIGHT, "1234567890123", "[20]01", 19, 6, 79, 158, 54 }, + /*224*/ { BARCODE_DBAR_EXP_CC, -1, "[01]12345678901231", "[20]01", 41, 5, 134, 268, 98 }, + /*225*/ { BARCODE_DBAR_EXP_CC, COMPLIANT_HEIGHT, "[01]12345678901231", "[20]01", 41, 5, 134, 268, 98 }, + /*226*/ { BARCODE_UPCA_CC, -1, "12345678901", "[20]01", 50, 7, 99, 234, 116 }, + /*227*/ { BARCODE_UPCA_CC, COMPLIANT_HEIGHT, "12345678901", "[20]01", 81, 7, 99, 234, 178 }, + /*228*/ { BARCODE_UPCA_CC, -1, "12345678901+12", "[20]01", 50, 7, 128, 284, 116 }, + /*229*/ { BARCODE_UPCA_CC, COMPLIANT_HEIGHT, "12345678901+12", "[20]01", 81, 7, 128, 284, 178 }, + /*230*/ { BARCODE_UPCA_CC, -1, "12345678901+12345", "[20]01", 50, 7, 155, 338, 116 }, + /*231*/ { BARCODE_UPCA_CC, COMPLIANT_HEIGHT, "12345678901+12345", "[20]01", 81, 7, 155, 338, 178 }, + /*232*/ { BARCODE_UPCE_CC, -1, "1234567", "[20]01", 50, 9, 55, 142, 116 }, + /*233*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, "1234567", "[20]01", 85, 9, 55, 142, 186 }, + /*234*/ { BARCODE_UPCE_CC, -1, "1234567+12", "[20]01", 50, 9, 82, 192, 116 }, + /*235*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, "1234567+12", "[20]01", 85, 9, 82, 192, 186 }, + /*236*/ { BARCODE_UPCE_CC, -1, "1234567+12345", "[20]01", 50, 9, 109, 246, 116 }, + /*237*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, "1234567+12345", "[20]01", 85, 9, 109, 246, 186 }, + /*238*/ { BARCODE_DBAR_STK_CC, -1, "1234567890123", "[20]01", 24, 9, 56, 112, 48 }, + /*239*/ { BARCODE_DBAR_STK_CC, COMPLIANT_HEIGHT, "1234567890123", "[20]01", 24, 9, 56, 112, 48 }, + /*240*/ { BARCODE_DBAR_OMNSTK_CC, -1, "1234567890123", "[20]01", 80, 11, 56, 112, 160 }, + /*241*/ { BARCODE_DBAR_OMNSTK_CC, COMPLIANT_HEIGHT, "1234567890123", "[20]01", 80, 11, 56, 112, 160 }, + /*242*/ { BARCODE_DBAR_EXPSTK_CC, -1, "[01]12345678901231", "[20]01", 78, 9, 102, 204, 156 }, + /*243*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, "[01]12345678901231", "[20]01", 78, 9, 102, 204, 156 }, + /*244*/ { BARCODE_CHANNEL, -1, "01", "", 50, 1, 19, 38, 116 }, + /*245*/ { BARCODE_CHANNEL, COMPLIANT_HEIGHT, "01", "", 20, 1, 19, 38, 56 }, + /*246*/ { BARCODE_CODEONE, -1, "12345678901234567890", "", 16, 16, 18, 36, 32 }, + /*247*/ { BARCODE_CODEONE, COMPLIANT_HEIGHT, "12345678901234567890", "", 16, 16, 18, 36, 32 }, + /*248*/ { BARCODE_GRIDMATRIX, -1, "ABC", "", 18, 18, 18, 36, 36 }, + /*249*/ { BARCODE_GRIDMATRIX, COMPLIANT_HEIGHT, "ABC", "", 18, 18, 18, 36, 36 }, + /*250*/ { BARCODE_UPNQR, -1, "1234567890AB", "", 77, 77, 77, 154, 154 }, + /*251*/ { BARCODE_UPNQR, COMPLIANT_HEIGHT, "1234567890AB", "", 77, 77, 77, 154, 154 }, + /*252*/ { BARCODE_ULTRA, -1, "1234567890", "", 13, 13, 18, 36, 26 }, + /*253*/ { BARCODE_ULTRA, COMPLIANT_HEIGHT, "1234567890", "", 13, 13, 18, 36, 26 }, + /*254*/ { BARCODE_RMQR, -1, "12345", "", 11, 11, 27, 54, 22 }, + /*255*/ { BARCODE_RMQR, COMPLIANT_HEIGHT, "12345", "", 11, 11, 27, 54, 22 }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -264,17 +393,13 @@ static void test_buffer(int index, int generate, int debug) { symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); - symbol->symbology = data[i].symbology; - symbol->input_mode = UNICODE_MODE; - symbol->debug |= debug; - if (strlen(data[i].composite)) { text = data[i].composite; strcpy(symbol->primary, data[i].data); } else { text = data[i].data; } - length = (int) strlen(text); + length = testUtilSetSymbol(symbol, data[i].symbology, UNICODE_MODE, -1 /*eci*/, -1 /*option_1*/, -1, -1, data[i].output_options, text, -1, debug); ret = ZBarcode_Encode(symbol, (unsigned char *) text, length); assert_zero(ret, "i:%d ZBarcode_Encode(%s) ret %d != 0 (%s)\n", i, testUtilBarcodeName(data[i].symbology), ret, symbol->errtxt); @@ -286,8 +411,9 @@ static void test_buffer(int index, int generate, int debug) { if (index != -1 && (debug & ZINT_DEBUG_TEST_PRINT)) testUtilBitmapPrint(symbol, NULL, NULL); // ZINT_DEBUG_TEST_PRINT 16 if (generate) { - printf(" /*%3d*/ { %s, \"%s\", \"%s\", %.8g, %d, %d, %d, %d },\n", - i, testUtilBarcodeName(data[i].symbology), data[i].data, data[i].composite, + printf(" /*%3d*/ { %s, %s, \"%s\", \"%s\", %.8g, %d, %d, %d, %d },\n", + i, testUtilBarcodeName(data[i].symbology), testUtilOutputOptionsName(data[i].output_options), + data[i].data, data[i].composite, symbol->height, symbol->rows, symbol->width, symbol->bitmap_width, symbol->bitmap_height); } else { assert_equal(symbol->height, data[i].expected_height, "i:%d (%s) symbol->height %.8g != %.8g\n", i, testUtilBarcodeName(data[i].symbology), symbol->height, data[i].expected_height); @@ -1730,6 +1856,7 @@ static void test_height(int index, int generate, int debug) { struct item { int symbology; + int output_options; float height; char *data; char *composite; @@ -1744,408 +1871,585 @@ static void test_height(int index, int generate, int debug) { const char *comment; }; struct item data[] = { - /* 0*/ { BARCODE_CODE11, 1, "1234567890", "", 0, 1, 1, 108, 216, 2, "" }, - /* 1*/ { BARCODE_CODE11, 4, "1234567890", "", 0, 4, 1, 108, 216, 8, "" }, - /* 2*/ { BARCODE_CODE11, 10, "1234567890", "", 0, 10, 1, 108, 216, 20, "" }, - /* 3*/ { BARCODE_C25STANDARD, 1, "1234567890", "", 0, 1, 1, 117, 234, 2, "" }, - /* 4*/ { BARCODE_C25STANDARD, 4, "1234567890", "", 0, 4, 1, 117, 234, 8, "" }, - /* 5*/ { BARCODE_C25STANDARD, 11, "1234567890", "", 0, 11, 1, 117, 234, 22, "" }, - /* 6*/ { BARCODE_C25INTER, 1, "1234567890", "", 0, 1, 1, 99, 198, 2, "" }, - /* 7*/ { BARCODE_C25INTER, 4, "1234567890", "", 0, 4, 1, 99, 198, 8, "" }, - /* 8*/ { BARCODE_C25INTER, 15, "1234567890", "", 0, 15, 1, 99, 198, 30, "" }, - /* 9*/ { BARCODE_C25IATA, 1, "1234567890", "", 0, 1, 1, 149, 298, 2, "" }, - /* 10*/ { BARCODE_C25IATA, 4, "1234567890", "", 0, 4, 1, 149, 298, 8, "" }, - /* 11*/ { BARCODE_C25IATA, 30, "1234567890", "", 0, 30, 1, 149, 298, 60, "" }, - /* 12*/ { BARCODE_C25LOGIC, 1, "1234567890", "", 0, 1, 1, 109, 218, 2, "" }, - /* 13*/ { BARCODE_C25LOGIC, 4, "1234567890", "", 0, 4, 1, 109, 218, 8, "" }, - /* 14*/ { BARCODE_C25LOGIC, 41, "1234567890", "", 0, 41, 1, 109, 218, 82, "" }, - /* 15*/ { BARCODE_C25IND, 1, "1234567890", "", 0, 1, 1, 159, 318, 2, "" }, - /* 16*/ { BARCODE_C25IND, 4, "1234567890", "", 0, 4, 1, 159, 318, 8, "" }, - /* 17*/ { BARCODE_C25IND, 21, "1234567890", "", 0, 21, 1, 159, 318, 42, "" }, - /* 18*/ { BARCODE_CODE39, 1, "1234567890", "", 0, 1, 1, 155, 310, 2, "" }, - /* 19*/ { BARCODE_CODE39, 4, "1", "", 0, 4, 1, 38, 76, 8, "" }, - /* 20*/ { BARCODE_CODE39, 17, "1234567890", "", 0, 17, 1, 155, 310, 34, "" }, - /* 21*/ { BARCODE_EXCODE39, 1, "1234567890", "", 0, 1, 1, 155, 310, 2, "" }, - /* 22*/ { BARCODE_EXCODE39, 4, "1234567890", "", 0, 4, 1, 155, 310, 8, "" }, - /* 23*/ { BARCODE_EXCODE39, 17, "1234567890", "", 0, 17, 1, 155, 310, 34, "" }, - /* 24*/ { BARCODE_EANX, 1, "123456789012", "", 0, 1, 1, 95, 226, 12, "EAN-13" }, - /* 25*/ { BARCODE_EANX, 4, "123456789012", "", 0, 4, 1, 95, 226, 18, "" }, - /* 26*/ { BARCODE_EANX, 69, "123456789012", "", 0, 69, 1, 95, 226, 148, "" }, - /* 27*/ { BARCODE_EANX, 55, "1234567", "", 0, 55, 1, 67, 162, 120, "EAN-8" }, - /* 28*/ { BARCODE_EANX, 66, "12345", "", 0, 66, 1, 47, 118, 132, "EAN-8" }, - /* 29*/ { BARCODE_EANX_CHK, 1, "1234567890128", "", 0, 1, 1, 95, 226, 12, "EAN-13" }, - /* 30*/ { BARCODE_EANX_CHK, 69, "1234567890128", "", 0, 69, 1, 95, 226, 148, "" }, - /* 31*/ { BARCODE_GS1_128, 1, "[01]12345678901231", "", 0, 1, 1, 134, 268, 2, "" }, - /* 32*/ { BARCODE_GS1_128, 4, "[01]12345678901231", "", 0, 4, 1, 134, 268, 8, "" }, - /* 33*/ { BARCODE_GS1_128, 5, "[01]12345678901231", "", 0, 5, 1, 134, 268, 10, "" }, - /* 34*/ { BARCODE_GS1_128, 50, "[01]12345678901231", "", 0, 50, 1, 134, 268, 100, "" }, - /* 35*/ { BARCODE_CODABAR, 1, "A0B", "", 0, 1, 1, 32, 64, 2, "" }, - /* 36*/ { BARCODE_CODABAR, 4, "A0B", "", 0, 4, 1, 32, 64, 8, "" }, - /* 37*/ { BARCODE_CODABAR, 26, "A0B", "", 0, 26, 1, 32, 64, 52, "" }, - /* 38*/ { BARCODE_CODE128, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "" }, - /* 39*/ { BARCODE_CODE128, 4, "1234567890", "", 0, 4, 1, 90, 180, 8, "" }, - /* 40*/ { BARCODE_CODE128, 7, "1234567890", "", 0, 7, 1, 90, 180, 14, "" }, - /* 41*/ { BARCODE_DPLEIT, 1, "1234567890123", "", 0, 1, 1, 135, 270, 2, "" }, - /* 42*/ { BARCODE_DPLEIT, 4, "1234567890123", "", 0, 4, 1, 135, 270, 8, "" }, - /* 43*/ { BARCODE_DPIDENT, 1, "12345678901", "", 0, 1, 1, 117, 234, 2, "" }, - /* 44*/ { BARCODE_DPIDENT, 4, "12345678901", "", 0, 4, 1, 117, 234, 8, "" }, - /* 45*/ { BARCODE_CODE16K, -1, "1234567890", "", 0, 20, 2, 70, 162, 44, "2 rows" }, - /* 46*/ { BARCODE_CODE16K, 1, "1234567890", "", 0, 1, 2, 70, 162, 6, "" }, - /* 47*/ { BARCODE_CODE16K, 4, "1234567890", "", 0, 4, 2, 70, 162, 12, "" }, - /* 48*/ { BARCODE_CODE16K, 17, "1234567890", "", 0, 17, 2, 70, 162, 38, "" }, - /* 49*/ { BARCODE_CODE16K, 40, "1234567890", "", 0, 40, 2, 70, 162, 84, "" }, - /* 50*/ { BARCODE_CODE16K, -1, "12345678901234567890123456789012345678901234567890", "", 0, 60, 6, 70, 162, 124, "6 rows" }, - /* 51*/ { BARCODE_CODE16K, 30, "12345678901234567890123456789012345678901234567890", "", 0, 30, 6, 70, 162, 64, "" }, - /* 52*/ { BARCODE_CODE16K, 120, "12345678901234567890123456789012345678901234567890", "", 0, 120, 6, 70, 162, 244, "" }, - /* 53*/ { BARCODE_CODE49, -1, "1234567890", "", 0, 20, 2, 70, 162, 44, "2 rows" }, - /* 54*/ { BARCODE_CODE49, 1, "1234567890", "", 0, 1, 2, 70, 162, 6, "" }, - /* 55*/ { BARCODE_CODE49, 4, "1234567890", "", 0, 4, 2, 70, 162, 12, "" }, - /* 56*/ { BARCODE_CODE49, 18, "1234567890", "", 0, 18, 2, 70, 162, 40, "" }, - /* 57*/ { BARCODE_CODE49, 40, "1234567890", "", 0, 40, 2, 70, 162, 84, "" }, - /* 58*/ { BARCODE_CODE49, -1, "12345678901234567890", "", 0, 30, 3, 70, 162, 64, "3 rows" }, - /* 59*/ { BARCODE_CODE49, 15, "12345678901234567890", "", 0, 15, 3, 70, 162, 34, "" }, - /* 60*/ { BARCODE_CODE49, 45, "12345678901234567890", "", 0, 45, 3, 70, 162, 94, "" }, - /* 61*/ { BARCODE_CODE93, 1, "1234567890", "", 0, 1, 1, 127, 254, 2, "" }, - /* 62*/ { BARCODE_CODE93, 4, "1234567890", "", 0, 4, 1, 127, 254, 8, "" }, - /* 63*/ { BARCODE_CODE93, 26, "1234567890", "", 0, 26, 1, 127, 254, 52, "" }, - /* 64*/ { BARCODE_FLAT, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "" }, - /* 65*/ { BARCODE_FLAT, 4, "1234567890", "", 0, 4, 1, 90, 180, 8, "" }, - /* 66*/ { BARCODE_DBAR_OMN, 1, "1234567890123", "", 0, 1, 1, 96, 192, 2, "" }, - /* 67*/ { BARCODE_DBAR_OMN, 4, "1234567890123", "", 0, 4, 1, 96, 192, 8, "" }, - /* 68*/ { BARCODE_DBAR_OMN, 12, "1234567890123", "", 0, 12, 1, 96, 192, 24, "" }, - /* 69*/ { BARCODE_DBAR_OMN, 33, "1234567890123", "", 0, 33, 1, 96, 192, 66, "" }, - /* 70*/ { BARCODE_DBAR_LTD, 1, "1234567890123", "", 0, 1, 1, 79, 158, 2, "" }, - /* 71*/ { BARCODE_DBAR_LTD, 4, "1234567890123", "", 0, 4, 1, 79, 158, 8, "" }, - /* 72*/ { BARCODE_DBAR_LTD, 9, "1234567890123", "", 0, 9, 1, 79, 158, 18, "" }, - /* 73*/ { BARCODE_DBAR_LTD, 10, "1234567890123", "", 0, 10, 1, 79, 158, 20, "" }, - /* 74*/ { BARCODE_DBAR_EXP, 1, "[01]12345678901231", "", 0, 1, 1, 134, 268, 2, "" }, - /* 75*/ { BARCODE_DBAR_EXP, 33, "[01]12345678901231", "", 0, 33, 1, 134, 268, 66, "" }, - /* 76*/ { BARCODE_DBAR_EXP, 34, "[01]12345678901231", "", 0, 34, 1, 134, 268, 68, "" }, - /* 77*/ { BARCODE_TELEPEN, 1, "1234567890", "", 0, 1, 1, 208, 416, 2, "" }, - /* 78*/ { BARCODE_TELEPEN, 4, "1234567890", "", 0, 4, 1, 208, 416, 8, "" }, - /* 79*/ { BARCODE_UPCA, 1, "12345678901", "", 0, 1, 1, 95, 226, 12, "" }, - /* 80*/ { BARCODE_UPCA, 4, "12345678901", "", 0, 4, 1, 95, 226, 18, "" }, - /* 81*/ { BARCODE_UPCA, 69, "12345678901", "", 0, 69, 1, 95, 226, 148, "" }, - /* 82*/ { BARCODE_UPCA_CHK, 1, "123456789012", "", 0, 1, 1, 95, 226, 12, "" }, - /* 83*/ { BARCODE_UPCE, 1, "1234567", "", 0, 1, 1, 51, 134, 12, "" }, - /* 84*/ { BARCODE_UPCE, 4, "1234567", "", 0, 4, 1, 51, 134, 18, "" }, - /* 85*/ { BARCODE_UPCE, 69, "1234567", "", 0, 69, 1, 51, 134, 148, "" }, - /* 86*/ { BARCODE_UPCE_CHK, 1, "12345670", "", 0, 1, 1, 51, 134, 12, "" }, - /* 87*/ { BARCODE_POSTNET, -1, "12345678901", "", 0, 12, 2, 123, 246, 24, "" }, - /* 88*/ { BARCODE_POSTNET, 1, "12345678901", "", 0, 1, 2, 123, 246, 2, "" }, - /* 89*/ { BARCODE_POSTNET, 4, "12345678901", "", 0, 4, 2, 123, 246, 8, "" }, - /* 90*/ { BARCODE_POSTNET, 9, "12345678901", "", 0, 9, 2, 123, 246, 18, "" }, - /* 91*/ { BARCODE_POSTNET, 20, "12345678901", "", 0, 20, 2, 123, 246, 40, "" }, - /* 92*/ { BARCODE_MSI_PLESSEY, 1, "1234567890", "", 0, 1, 1, 127, 254, 2, "" }, - /* 93*/ { BARCODE_MSI_PLESSEY, 4, "1234567890", "", 0, 4, 1, 127, 254, 8, "" }, - /* 94*/ { BARCODE_FIM, 1, "A", "", 0, 1, 1, 17, 34, 2, "" }, - /* 95*/ { BARCODE_FIM, 4, "A", "", 0, 4, 1, 17, 34, 8, "" }, - /* 96*/ { BARCODE_FIM, 12, "A", "", 0, 12, 1, 17, 34, 24, "" }, - /* 97*/ { BARCODE_LOGMARS, 1, "1234567890", "", 0, 1, 1, 191, 382, 2, "" }, - /* 98*/ { BARCODE_LOGMARS, 4, "1234567890", "", 0, 4, 1, 191, 382, 8, "" }, - /* 99*/ { BARCODE_LOGMARS, 6, "1234567890", "", 0, 6, 1, 191, 382, 12, "" }, - /*100*/ { BARCODE_LOGMARS, 45, "1234567890", "", 0, 45, 1, 191, 382, 90, "" }, - /*101*/ { BARCODE_PHARMA, 1, "123456", "", 0, 1, 1, 58, 116, 2, "" }, - /*102*/ { BARCODE_PHARMA, 4, "123456", "", 0, 4, 1, 58, 116, 8, "" }, - /*103*/ { BARCODE_PHARMA, 15, "123456", "", 0, 15, 1, 58, 116, 30, "" }, - /*104*/ { BARCODE_PHARMA, 16, "123456", "", 0, 16, 1, 58, 116, 32, "" }, - /*105*/ { BARCODE_PZN, 1, "123456", "", 0, 1, 1, 142, 284, 2, "" }, - /*106*/ { BARCODE_PZN, 4, "123456", "", 0, 4, 1, 142, 284, 8, "" }, - /*107*/ { BARCODE_PZN, 17, "123456", "", 0, 17, 1, 142, 284, 34, "" }, - /*108*/ { BARCODE_PZN, 106, "123456", "", 0, 106, 1, 142, 284, 212, "" }, - /*109*/ { BARCODE_PHARMA_TWO, -1, "12345678", "", 0, 10, 2, 29, 58, 20, "" }, - /*110*/ { BARCODE_PHARMA_TWO, 1, "12345678", "", 0, 1, 2, 29, 58, 2, "" }, - /*111*/ { BARCODE_PHARMA_TWO, 4, "12345678", "", 0, 4, 2, 29, 58, 8, "" }, - /*112*/ { BARCODE_PHARMA_TWO, 15, "12345678", "", 0, 15, 2, 29, 58, 30, "" }, - /*113*/ { BARCODE_PHARMA_TWO, 20, "12345678", "", 0, 20, 2, 29, 58, 40, "" }, - /*114*/ { BARCODE_PHARMA_TWO, 30, "12345678", "", 0, 30, 2, 29, 58, 60, "" }, - /*115*/ { BARCODE_PDF417, 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 4, 8, 120, 240, 8, "8 rows" }, - /*116*/ { BARCODE_PDF417, 4, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 4, 8, 120, 240, 8, "" }, - /*117*/ { BARCODE_PDF417, 23, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 24, 8, 120, 240, 48, "" }, - /*118*/ { BARCODE_PDF417, 24, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 24, 8, 120, 240, 48, "" }, - /*119*/ { BARCODE_PDF417, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 36, 12, 120, 240, 72, "12 rows" }, - /*120*/ { BARCODE_PDF417, 12, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 12, 12, 120, 240, 24, "" }, - /*121*/ { BARCODE_PDF417COMP, 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ", "", ZINT_WARN_NONCOMPLIANT, 4.5, 9, 86, 172, 9, "9 rows" }, - /*122*/ { BARCODE_PDF417COMP, 24, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ", "", ZINT_WARN_NONCOMPLIANT, 22.5, 9, 86, 172, 45, "" }, - /*123*/ { BARCODE_MAXICODE, 1, "1234567890", "", 0, 16.5, 33, 30, 299, 298, "Fixed size, symbol->height ignored" }, - /*124*/ { BARCODE_QRCODE, 1, "ABCD", "", 0, 21, 21, 21, 42, 42, "Fixed width-to-height ratio, symbol->height ignored" }, - /*125*/ { BARCODE_CODE128B, 1, "1234567890", "", 0, 1, 1, 145, 290, 2, "" }, - /*126*/ { BARCODE_CODE128B, 4, "1234567890", "", 0, 4, 1, 145, 290, 8, "" }, - /*127*/ { BARCODE_AUSPOST, -1, "12345678901234567890123", "", 0, 8, 3, 133, 266, 16, "" }, - /*128*/ { BARCODE_AUSPOST, 1, "12345678901234567890123", "", 0, 2.5, 3, 133, 266, 5, "" }, - /*129*/ { BARCODE_AUSPOST, 4, "12345678901234567890123", "", 0, 4, 3, 133, 266, 8, "" }, - /*130*/ { BARCODE_AUSPOST, 7, "12345678901234567890123", "", 0, 7, 3, 133, 266, 14, "" }, - /*131*/ { BARCODE_AUSPOST, 14, "12345678901234567890123", "", 0, 14.5, 3, 133, 266, 29, "" }, - /*132*/ { BARCODE_AUSREPLY, 14, "12345678", "", 0, 14.5, 3, 73, 146, 29, "" }, - /*133*/ { BARCODE_AUSROUTE, 7, "12345678", "", 0, 7, 3, 73, 146, 14, "" }, - /*134*/ { BARCODE_AUSREDIRECT, 14, "12345678", "", 0, 14.5, 3, 73, 146, 29, "" }, - /*135*/ { BARCODE_ISBNX, 1, "123456789", "", 0, 1, 1, 95, 226, 12, "" }, - /*136*/ { BARCODE_ISBNX, 4, "123456789", "", 0, 4, 1, 95, 226, 18, "" }, - /*137*/ { BARCODE_ISBNX, 69, "123456789", "", 0, 69, 1, 95, 226, 148, "" }, - /*138*/ { BARCODE_RM4SCC, -1, "1234567890", "", 0, 8, 3, 91, 182, 16, "" }, - /*139*/ { BARCODE_RM4SCC, 1, "1234567890", "", 0, 2.5, 3, 91, 182, 5, "" }, - /*140*/ { BARCODE_RM4SCC, 4, "1234567890", "", 0, 4, 3, 91, 182, 8, "" }, - /*141*/ { BARCODE_RM4SCC, 6, "1234567890", "", 0, 6.5, 3, 91, 182, 13, "" }, - /*142*/ { BARCODE_RM4SCC, 11, "1234567890", "", 0, 11, 3, 91, 182, 22, "" }, - /*143*/ { BARCODE_RM4SCC, 16, "1234567890", "", 0, 16, 3, 91, 182, 32, "" }, - /*144*/ { BARCODE_DATAMATRIX, 1, "ABCD", "", 0, 12, 12, 12, 24, 24, "Fixed width-to-height ratio, symbol->height ignored" }, - /*145*/ { BARCODE_EAN14, 1, "1234567890123", "", 0, 1, 1, 134, 268, 2, "" }, - /*146*/ { BARCODE_EAN14, 4, "1234567890123", "", 0, 4, 1, 134, 268, 8, "" }, - /*147*/ { BARCODE_EAN14, 5, "1234567890123", "", 0, 5, 1, 134, 268, 10, "" }, - /*148*/ { BARCODE_VIN, 1, "12345678701234567", "", 0, 1, 1, 246, 492, 2, "" }, - /*149*/ { BARCODE_VIN, 4, "12345678701234567", "", 0, 4, 1, 246, 492, 8, "" }, - /*150*/ { BARCODE_CODABLOCKF, -1, "1234567890", "", 0, 20, 2, 101, 242, 44, "2 rows" }, - /*151*/ { BARCODE_CODABLOCKF, 1, "1234567890", "", 0, 1, 2, 101, 242, 6, "" }, - /*152*/ { BARCODE_CODABLOCKF, 4, "1234567890", "", 0, 4, 2, 101, 242, 12, "" }, - /*153*/ { BARCODE_CODABLOCKF, 30, "1234567890", "", 0, 30, 2, 101, 242, 64, "" }, - /*154*/ { BARCODE_CODABLOCKF, -1, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 110, 11, 156, 352, 224, "11 rows, 14 cols" }, - /*155*/ { BARCODE_CODABLOCKF, 88, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 88, 11, 156, 352, 180, "" }, - /*156*/ { BARCODE_CODABLOCKF, 220, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 220, 11, 156, 352, 444, "" }, - /*157*/ { BARCODE_CODABLOCKF, -1, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv", "", 0, 110, 11, 167, 374, 224, "11 rows, 15 cols" }, - /*158*/ { BARCODE_CODABLOCKF, 88, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv", "", 0, 88, 11, 167, 374, 180, "" }, - /*159*/ { BARCODE_NVE18, 1, "12345678901234567", "", 0, 1, 1, 156, 312, 2, "" }, - /*160*/ { BARCODE_NVE18, 4, "12345678901234567", "", 0, 4, 1, 156, 312, 8, "" }, - /*161*/ { BARCODE_NVE18, 6, "12345678901234567", "", 0, 6, 1, 156, 312, 12, "" }, - /*162*/ { BARCODE_JAPANPOST, -1, "1234567890", "", 0, 8, 3, 133, 266, 16, "" }, - /*163*/ { BARCODE_JAPANPOST, 1, "1234567890", "", 0, 2.5, 3, 133, 266, 5, "" }, - /*164*/ { BARCODE_JAPANPOST, 4, "1234567890", "", 0, 4, 3, 133, 266, 8, "" }, - /*165*/ { BARCODE_JAPANPOST, 7, "1234567890", "", 0, 7, 3, 133, 266, 14, "" }, - /*166*/ { BARCODE_JAPANPOST, 16, "1234567890", "", 0, 16, 3, 133, 266, 32, "" }, - /*167*/ { BARCODE_KOREAPOST, 1, "123456", "", 0, 1, 1, 167, 334, 2, "" }, - /*168*/ { BARCODE_KOREAPOST, 4, "123456", "", 0, 4, 1, 167, 334, 8, "" }, - /*169*/ { BARCODE_DBAR_STK, -1, "1234567890123", "", 0, 13, 3, 50, 100, 26, "" }, - /*170*/ { BARCODE_DBAR_STK, 1, "1234567890123", "", 0, 2, 3, 50, 100, 4, "" }, - /*171*/ { BARCODE_DBAR_STK, 4, "1234567890123", "", 0, 4.5, 3, 50, 100, 9, "" }, - /*172*/ { BARCODE_DBAR_STK, 12, "1234567890123", "", 0, 12, 3, 50, 100, 24, "" }, - /*173*/ { BARCODE_DBAR_STK, 13, "1234567890123", "", 0, 13, 3, 50, 100, 26, "" }, - /*174*/ { BARCODE_DBAR_STK, 24, "1234567890123", "", 0, 24, 3, 50, 100, 48, "" }, - /*175*/ { BARCODE_DBAR_STK, 26, "1234567890123", "", 0, 26, 3, 50, 100, 52, "" }, - /*176*/ { BARCODE_DBAR_OMNSTK, -1, "1234567890123", "", 0, 69, 5, 50, 100, 138, "" }, - /*177*/ { BARCODE_DBAR_OMNSTK, 1, "1234567890123", "", 0, 4, 5, 50, 100, 8, "" }, - /*178*/ { BARCODE_DBAR_OMNSTK, 4, "1234567890123", "", 0, 4, 5, 50, 100, 8, "" }, - /*179*/ { BARCODE_DBAR_OMNSTK, 68, "1234567890123", "", 0, 68, 5, 50, 100, 136, "" }, - /*180*/ { BARCODE_DBAR_OMNSTK, 69, "1234567890123", "", 0, 69, 5, 50, 100, 138, "" }, - /*181*/ { BARCODE_DBAR_OMNSTK, 150, "1234567890123", "", 0, 150, 5, 50, 100, 300, "" }, - /*182*/ { BARCODE_DBAR_EXPSTK, -1, "[01]12345678901231", "", 0, 71, 5, 102, 204, 142, "2 rows" }, - /*183*/ { BARCODE_DBAR_EXPSTK, 1, "[01]12345678901231", "", 0, 4, 5, 102, 204, 8, "" }, - /*184*/ { BARCODE_DBAR_EXPSTK, 4, "[01]12345678901231", "", 0, 4, 5, 102, 204, 8, "" }, - /*185*/ { BARCODE_DBAR_EXPSTK, 71, "[01]12345678901231", "", 0, 71, 5, 102, 204, 142, "" }, - /*186*/ { BARCODE_DBAR_EXPSTK, 76, "[01]12345678901231", "", 0, 76, 5, 102, 204, 152, "" }, - /*187*/ { BARCODE_DBAR_EXPSTK, -1, "[01]09501101530003[3920]123456789012345", "", 0, 108, 9, 102, 204, 216, "3 rows" }, - /*188*/ { BARCODE_DBAR_EXPSTK, 1, "[01]09501101530003[3920]123456789012345", "", 0, 7.5, 9, 102, 204, 15, "" }, - /*189*/ { BARCODE_DBAR_EXPSTK, 54, "[01]09501101530003[3920]123456789012345", "", 0, 54, 9, 102, 204, 108, "" }, - /*190*/ { BARCODE_DBAR_EXPSTK, 90, "[01]09501101530003[3920]123456789012345", "", 0, 90, 9, 102, 204, 180, "" }, - /*191*/ { BARCODE_DBAR_EXPSTK, 160, "[01]09501101530003[3920]123456789012345", "", 0, 160.5, 9, 102, 204, 321, "" }, - /*192*/ { BARCODE_PLANET, -1, "12345678901", "", 0, 12, 2, 123, 246, 24, "" }, - /*193*/ { BARCODE_PLANET, 1, "12345678901", "", 0, 1, 2, 123, 246, 2, "" }, - /*194*/ { BARCODE_PLANET, 4, "12345678901", "", 0, 4, 2, 123, 246, 8, "" }, - /*195*/ { BARCODE_PLANET, 9, "12345678901", "", 0, 9, 2, 123, 246, 18, "" }, - /*196*/ { BARCODE_PLANET, 24, "12345678901", "", 0, 24, 2, 123, 246, 48, "" }, - /*197*/ { BARCODE_MICROPDF417, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 20, 10, 82, 164, 40, "10 rows" }, - /*198*/ { BARCODE_MICROPDF417, 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 5, 10, 82, 164, 10, "" }, - /*199*/ { BARCODE_MICROPDF417, 4, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 5, 10, 82, 164, 10, "" }, - /*200*/ { BARCODE_MICROPDF417, 19, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 20, 10, 82, 164, 40, "" }, - /*201*/ { BARCODE_MICROPDF417, 30, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 30, 10, 82, 164, 60, "" }, - /*202*/ { BARCODE_MICROPDF417, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 40, 20, 55, 110, 80, "20 rows" }, - /*203*/ { BARCODE_MICROPDF417, 20, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 20, 20, 55, 110, 40, "" }, - /*204*/ { BARCODE_USPS_IMAIL, -1, "12345678901234567890", "", 0, 8, 3, 129, 258, 16, "" }, - /*205*/ { BARCODE_USPS_IMAIL, 1, "12345678901234567890", "", 0, 2.5, 3, 129, 258, 5, "" }, - /*206*/ { BARCODE_USPS_IMAIL, 4, "12345678901234567890", "", 0, 4, 3, 129, 258, 8, "" }, - /*207*/ { BARCODE_USPS_IMAIL, 7, "12345678901234567890", "", 0, 7, 3, 129, 258, 14, "" }, - /*208*/ { BARCODE_PLESSEY, 1, "1234567890", "", 0, 1, 1, 227, 454, 2, "" }, - /*209*/ { BARCODE_PLESSEY, 4, "1234567890", "", 0, 4, 1, 227, 454, 8, "" }, - /*210*/ { BARCODE_TELEPEN_NUM, 1, "1234567890", "", 0, 1, 1, 128, 256, 2, "" }, - /*211*/ { BARCODE_TELEPEN_NUM, 4, "1234567890", "", 0, 4, 1, 128, 256, 8, "" }, - /*212*/ { BARCODE_ITF14, 1, "1234567890", "", 0, 1, 1, 135, 330, 22, "" }, - /*213*/ { BARCODE_ITF14, 4, "1234567890", "", 0, 4, 1, 135, 330, 28, "" }, - /*214*/ { BARCODE_ITF14, 64, "1234567890", "", 0, 64, 1, 135, 330, 148, "" }, - /*215*/ { BARCODE_KIX, -1, "1234567890", "", 0, 8, 3, 79, 158, 16, "" }, - /*216*/ { BARCODE_KIX, 1, "1234567890", "", 0, 2.5, 3, 79, 158, 5, "" }, - /*217*/ { BARCODE_KIX, 4, "1234567890", "", 0, 4, 3, 79, 158, 8, "" }, - /*218*/ { BARCODE_KIX, 6, "1234567890", "", 0, 6.5, 3, 79, 158, 13, "" }, - /*219*/ { BARCODE_KIX, 10, "1234567890", "", 0, 10.5, 3, 79, 158, 21, "" }, - /*220*/ { BARCODE_KIX, 16, "1234567890", "", 0, 16, 3, 79, 158, 32, "" }, - /*221*/ { BARCODE_AZTEC, 1, "1234567890AB", "", 0, 15, 15, 15, 30, 30, "Fixed width-to-height ratio, symbol->height ignored" }, - /*222*/ { BARCODE_DAFT, -1, "DAFTDAFTDAFTDAFT", "", 0, 8, 3, 31, 62, 16, "" }, - /*223*/ { BARCODE_DAFT, 1, "DAFTDAFTDAFTDAFT", "", 0, 2.5, 3, 31, 62, 5, "" }, - /*224*/ { BARCODE_DAFT, 4, "DAFTDAFTDAFTDAFT", "", 0, 4, 3, 31, 62, 8, "" }, - /*225*/ { BARCODE_DAFT, 6, "DAFTDAFTDAFTDAFT", "", 0, 6.5, 3, 31, 62, 13, "" }, - /*226*/ { BARCODE_DAFT, 12, "DAFTDAFTDAFTDAFT", "", 0, 12, 3, 31, 62, 24, "" }, - /*227*/ { BARCODE_DAFT, 16, "DAFTDAFTDAFTDAFT", "", 0, 16, 3, 31, 62, 32, "" }, - /*228*/ { BARCODE_DPD, 1, "0123456789012345678901234567", "", 0, 1, 1, 189, 378, 2, "" }, - /*229*/ { BARCODE_DPD, 4, "0123456789012345678901234567", "", 0, 4, 1, 189, 378, 8, "" }, - /*230*/ { BARCODE_DPD, 62, "0123456789012345678901234567", "", 0, 62, 1, 189, 378, 124, "" }, - /*231*/ { BARCODE_MICROQR, 1, "12345", "", 0, 11, 11, 11, 22, 22, "Fixed width-to-height ratio, symbol->height ignored" }, - /*232*/ { BARCODE_HIBC_128, 1, "1234567890", "", 0, 1, 1, 123, 246, 2, "" }, - /*233*/ { BARCODE_HIBC_128, 4, "1234567890", "", 0, 4, 1, 123, 246, 8, "" }, - /*234*/ { BARCODE_HIBC_39, 1, "1234567890", "", 0, 1, 1, 223, 446, 2, "" }, - /*235*/ { BARCODE_HIBC_39, 4, "1234567890", "", 0, 4, 1, 223, 446, 8, "" }, - /*236*/ { BARCODE_HIBC_DM, 1, "ABC", "", 0, 12, 12, 12, 24, 24, "Fixed width-to-height ratio, symbol->height ignored" }, - /*237*/ { BARCODE_HIBC_QR, 1, "1234567890AB", "", 0, 21, 21, 21, 42, 42, "Fixed width-to-height ratio, symbol->height ignored" }, - /*238*/ { BARCODE_HIBC_PDF, -1, "ABCDEF", "", 0, 21, 7, 103, 206, 42, "7 rows" }, - /*239*/ { BARCODE_HIBC_PDF, 1, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 3.5, 7, 103, 206, 7, "" }, - /*240*/ { BARCODE_HIBC_PDF, 4, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 3.5, 7, 103, 206, 7, "" }, - /*241*/ { BARCODE_HIBC_PDF, 36, "ABCDEF", "", 0, 35, 7, 103, 206, 70, "" }, - /*242*/ { BARCODE_HIBC_MICPDF, -1, "ABCDEF", "", 0, 12, 6, 82, 164, 24, "6 rows" }, - /*243*/ { BARCODE_HIBC_MICPDF, 1, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 3, 6, 82, 164, 6, "" }, - /*244*/ { BARCODE_HIBC_MICPDF, 4, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 3, 6, 82, 164, 6, "" }, - /*245*/ { BARCODE_HIBC_MICPDF, 47, "ABCDEF", "", 0, 48, 6, 82, 164, 96, "" }, - /*246*/ { BARCODE_HIBC_BLOCKF, -1, "1234567890", "", 0, 30, 3, 101, 242, 64, "3 rows" }, - /*247*/ { BARCODE_HIBC_BLOCKF, 1, "1234567890", "", 0, 1.5, 3, 101, 242, 7, "" }, - /*248*/ { BARCODE_HIBC_BLOCKF, 4, "1234567890", "", 0, 4.5, 3, 101, 242, 13, "" }, - /*249*/ { BARCODE_HIBC_BLOCKF, 23, "1234567890", "", 0, 22.5, 3, 101, 242, 49, "" }, - /*250*/ { BARCODE_HIBC_BLOCKF, 60, "1234567890", "", 0, 60, 3, 101, 242, 124, "" }, - /*251*/ { BARCODE_HIBC_AZTEC, 1, "1234567890AB", "", 0, 19, 19, 19, 38, 38, "Fixed width-to-height ratio, symbol->height ignored" }, - /*252*/ { BARCODE_DOTCODE, 1, "ABC", "", 0, 11, 11, 16, 33, 23, "Fixed width-to-height ratio, symbol->height ignored" }, - /*253*/ { BARCODE_HANXIN, 1, "1234567890AB", "", 0, 23, 23, 23, 46, 46, "Fixed width-to-height ratio, symbol->height ignored" }, - /*254*/ { BARCODE_MAILMARK, -1, "01000000000000000AA00AA0A", "", 0, 10, 3, 155, 310, 20, "" }, - /*255*/ { BARCODE_MAILMARK, 1, "01000000000000000AA00AA0A", "", 0, 2.5, 3, 155, 310, 5, "" }, - /*256*/ { BARCODE_MAILMARK, 4, "01000000000000000AA00AA0A", "", 0, 4, 3, 155, 310, 8, "" }, - /*257*/ { BARCODE_MAILMARK, 6, "01000000000000000AA00AA0A", "", 0, 6, 3, 155, 310, 12, "" }, - /*258*/ { BARCODE_MAILMARK, 10, "01000000000000000AA00AA0A", "", 0, 10, 3, 155, 310, 20, "" }, - /*259*/ { BARCODE_MAILMARK, 15, "01000000000000000AA00AA0A", "", 0, 15, 3, 155, 310, 30, "" }, - /*260*/ { BARCODE_MAILMARK, 20, "01000000000000000AA00AA0A", "", 0, 20, 3, 155, 310, 40, "" }, - /*261*/ { BARCODE_AZRUNE, 1, "1", "", 0, 11, 11, 11, 22, 22, "Fixed width-to-height ratio, symbol->height ignored" }, - /*262*/ { BARCODE_CODE32, 1, "12345678", "", 0, 1, 1, 103, 206, 2, "" }, - /*263*/ { BARCODE_CODE32, 4, "12345678", "", 0, 4, 1, 103, 206, 8, "" }, - /*264*/ { BARCODE_CODE32, 19, "12345678", "", 0, 19, 1, 103, 206, 38, "" }, - /*265*/ { BARCODE_EANX_CC, -1, "123456789012", "[20]01", 0, 50, 7, 99, 234, 110, "EAN-13, CC-A 3 rows" }, - /*266*/ { BARCODE_EANX_CC, 1, "123456789012", "[20]01", 0, 12.5, 7, 99, 234, 35, "" }, - /*267*/ { BARCODE_EANX_CC, 4, "123456789012", "[20]01", 0, 12.5, 7, 99, 234, 35, "" }, - /*268*/ { BARCODE_EANX_CC, 81, "123456789012", "[20]01", 0, 81, 7, 99, 234, 172, "" }, - /*269*/ { BARCODE_EANX_CC, -1, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 50, 9, 99, 234, 110, "EAN-13, CC-A 5 rows" }, - /*270*/ { BARCODE_EANX_CC, 1, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 16.5, 9, 99, 234, 43, "" }, - /*271*/ { BARCODE_EANX_CC, 4, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 16.5, 9, 99, 234, 43, "" }, - /*272*/ { BARCODE_EANX_CC, 20, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 20, 9, 99, 234, 50, "" }, - /*273*/ { BARCODE_EANX_CC, -1, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 50, 11, 99, 234, 110, "EAN-13, CC-A 7 rows" }, - /*274*/ { BARCODE_EANX_CC, 1, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 20.5, 11, 99, 234, 51, "" }, - /*275*/ { BARCODE_EANX_CC, 4, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 20.5, 11, 99, 234, 51, "" }, - /*276*/ { BARCODE_EANX_CC, 40, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 40, 11, 99, 234, 90, "" }, - /*277*/ { BARCODE_EANX_CC, -1, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 50, 14, 99, 234, 110, "EAN-13, CC-B 10 rows" }, - /*278*/ { BARCODE_EANX_CC, 1, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 26.5, 14, 99, 234, 63, "" }, - /*279*/ { BARCODE_EANX_CC, 30, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 30, 14, 99, 234, 70, "" }, - /*280*/ { BARCODE_EANX_CC, -1, "1234567", "[20]01[90]123456789012345678901234", 0, 50, 10, 72, 172, 110, "EAN-8, CC-A 4 rows" }, - /*281*/ { BARCODE_EANX_CC, 1, "1234567", "[20]01[90]123456789012345678901234", 0, 18.5, 10, 72, 172, 47, "" }, - /*282*/ { BARCODE_EANX_CC, 4, "1234567", "[20]01[90]123456789012345678901234", 0, 18.5, 10, 72, 172, 47, "" }, - /*283*/ { BARCODE_EANX_CC, 69, "1234567", "[20]01[90]123456789012345678901234", 0, 69, 10, 72, 172, 148, "" }, - /*284*/ { BARCODE_EANX_CC, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 50, 24, 82, 192, 110, "EAN-8, CC-B 15 rows" }, - /*285*/ { BARCODE_EANX_CC, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 46.5, 24, 82, 192, 103, "" }, - /*286*/ { BARCODE_EANX_CC, 32, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 46.5, 24, 82, 192, 103, "" }, - /*287*/ { BARCODE_GS1_128_CC, -1, "[01]12345678901231", "[20]01", 0, 50, 5, 145, 290, 100, "CC-A 3 rows" }, - /*288*/ { BARCODE_GS1_128_CC, 1, "[01]12345678901231", "[20]01", 0, 7.5, 5, 145, 290, 15, "" }, - /*289*/ { BARCODE_GS1_128_CC, 4, "[01]12345678901231", "[20]01", 0, 7.5, 5, 145, 290, 15, "" }, - /*290*/ { BARCODE_GS1_128_CC, 12, "[01]12345678901231", "[20]01", 0, 12, 5, 145, 290, 24, "" }, - /*291*/ { BARCODE_GS1_128_CC, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 50, 9, 145, 290, 100, "CC-A 7 rows" }, - /*292*/ { BARCODE_GS1_128_CC, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 15.5, 9, 145, 290, 31, "" }, - /*293*/ { BARCODE_GS1_128_CC, 52, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 52, 9, 145, 290, 104, "" }, - /*294*/ { BARCODE_GS1_128_CC, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 50, 12, 145, 290, 100, "CC-B 10 rows" }, - /*295*/ { BARCODE_GS1_128_CC, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 21.5, 12, 145, 290, 43, "" }, - /*296*/ { BARCODE_GS1_128_CC, 40, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 40, 12, 145, 290, 80, "" }, - /*297*/ { BARCODE_GS1_128_CC, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", 0, 91.5, 32, 154, 308, 183, "CC-C 30 rows" }, - /*298*/ { BARCODE_GS1_128_CC, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", 0, 91.5, 32, 154, 308, 183, "" }, - /*299*/ { BARCODE_GS1_128_CC, 100, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", 0, 100, 32, 154, 308, 200, "" }, - /*300*/ { BARCODE_DBAR_OMN_CC, -1, "1234567890123", "[20]01[90]1234567890", 0, 21, 5, 100, 200, 42, "CC-A 3 rows" }, - /*301*/ { BARCODE_DBAR_OMN_CC, 1, "1234567890123", "[20]01[90]1234567890", 0, 7.5, 5, 100, 200, 15, "" }, - /*302*/ { BARCODE_DBAR_OMN_CC, 4, "1234567890123", "[20]01[90]1234567890", 0, 7.5, 5, 100, 200, 15, "" }, - /*303*/ { BARCODE_DBAR_OMN_CC, -1, "1234567890123", "[20]01[90]12345678901234567890", 0, 23, 6, 100, 200, 46, "CC-A 4 rows" }, - /*304*/ { BARCODE_DBAR_OMN_CC, 1, "1234567890123", "[20]01[90]12345678901234567890", 0, 9.5, 6, 100, 200, 19, "" }, - /*305*/ { BARCODE_DBAR_OMN_CC, 4, "1234567890123", "[20]01[90]12345678901234567890", 0, 9.5, 6, 100, 200, 19, "" }, - /*306*/ { BARCODE_DBAR_OMN_CC, 20, "1234567890123", "[20]01[90]12345678901234567890", 0, 20, 6, 100, 200, 40, "" }, - /*307*/ { BARCODE_DBAR_OMN_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 35, 12, 100, 200, 70, "CC-B 10 rows" }, - /*308*/ { BARCODE_DBAR_OMN_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 21.5, 12, 100, 200, 43, "" }, - /*309*/ { BARCODE_DBAR_OMN_CC, 40, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 40, 12, 100, 200, 80, "" }, - /*310*/ { BARCODE_DBAR_OMN_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", 0, 39, 14, 100, 200, 78, "CC-B 12 rows" }, - /*311*/ { BARCODE_DBAR_OMN_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", 0, 25.5, 14, 100, 200, 51, "" }, - /*312*/ { BARCODE_DBAR_OMN_CC, 36, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", 0, 36, 14, 100, 200, 72, "" }, - /*313*/ { BARCODE_DBAR_LTD_CC, -1, "1234567890123", "[20]01", 0, 19, 6, 79, 158, 38, "CC-A 4 rows" }, - /*314*/ { BARCODE_DBAR_LTD_CC, 1, "1234567890123", "[20]01", 0, 9.5, 6, 79, 158, 19, "" }, - /*315*/ { BARCODE_DBAR_LTD_CC, 4, "1234567890123", "[20]01", 0, 9.5, 6, 79, 158, 19, "" }, - /*316*/ { BARCODE_DBAR_LTD_CC, 18, "1234567890123", "[20]01", 0, 18, 6, 79, 158, 36, "" }, - /*317*/ { BARCODE_DBAR_LTD_CC, 19, "1234567890123", "[20]01", 0, 19, 6, 79, 158, 38, "" }, - /*318*/ { BARCODE_DBAR_LTD_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890", 0, 25, 9, 79, 158, 50, "CC-A 7 rows" }, - /*319*/ { BARCODE_DBAR_LTD_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890", 0, 15.5, 9, 79, 158, 31, "" }, - /*320*/ { BARCODE_DBAR_LTD_CC, 26, "1234567890123", "[20]01[90]123456789012345678901234567890", 0, 26, 9, 79, 158, 52, "" }, - /*321*/ { BARCODE_DBAR_LTD_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 51, 22, 88, 176, 102, "CC-B 20 rows" }, - /*322*/ { BARCODE_DBAR_LTD_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 41.5, 22, 88, 176, 83, "" }, - /*323*/ { BARCODE_DBAR_LTD_CC, 50, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 50, 22, 88, 176, 100, "" }, - /*324*/ { BARCODE_DBAR_EXP_CC, -1, "[01]12345678901231", "[20]01", 0, 41, 5, 134, 268, 82, "CC-A 3 rows" }, - /*325*/ { BARCODE_DBAR_EXP_CC, 1, "[01]12345678901231", "[20]01", 0, 7.5, 5, 134, 268, 15, "" }, - /*326*/ { BARCODE_DBAR_EXP_CC, 4, "[01]12345678901231", "[20]01", 0, 7.5, 5, 134, 268, 15, "" }, - /*327*/ { BARCODE_DBAR_EXP_CC, 40, "[01]12345678901231", "[20]01", 0, 40, 5, 134, 268, 80, "" }, - /*328*/ { BARCODE_DBAR_EXP_CC, 41, "[01]12345678901231", "[20]01", 0, 41, 5, 134, 268, 82, "" }, - /*329*/ { BARCODE_DBAR_EXP_CC, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", 0, 45, 7, 134, 268, 90, "CC-A 5 rows" }, - /*330*/ { BARCODE_DBAR_EXP_CC, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", 0, 11.5, 7, 134, 268, 23, "" }, - /*331*/ { BARCODE_DBAR_EXP_CC, 50, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", 0, 50, 7, 134, 268, 100, "" }, - /*332*/ { BARCODE_DBAR_EXP_CC, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 55, 12, 134, 268, 110, "CC-B 10 rows" }, - /*333*/ { BARCODE_DBAR_EXP_CC, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 21.5, 12, 134, 268, 43, "" }, - /*334*/ { BARCODE_DBAR_EXP_CC, 46, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 46, 12, 134, 268, 92, "" }, - /*335*/ { BARCODE_UPCA_CC, -1, "12345678901", "[20]01", 0, 50, 7, 99, 234, 110, "CC-A 3 rows" }, - /*336*/ { BARCODE_UPCA_CC, 1, "12345678901", "[20]01", 0, 12.5, 7, 99, 234, 35, "" }, - /*337*/ { BARCODE_UPCA_CC, 4, "12345678901", "[20]01", 0, 12.5, 7, 99, 234, 35, "" }, - /*338*/ { BARCODE_UPCA_CC, 81, "12345678901", "[20]01", 0, 81, 7, 99, 234, 172, "" }, - /*339*/ { BARCODE_UPCA_CC, -1, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 50, 10, 99, 234, 110, "CC-A 6 rows" }, - /*340*/ { BARCODE_UPCA_CC, 1, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 18.5, 10, 99, 234, 47, "" }, - /*341*/ { BARCODE_UPCA_CC, 4, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 18.5, 10, 99, 234, 47, "" }, - /*342*/ { BARCODE_UPCA_CC, -1, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", 0, 50, 16, 99, 234, 110, "CC-B 12 rows" }, - /*343*/ { BARCODE_UPCA_CC, 1, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", 0, 30.5, 16, 99, 234, 71, "" }, - /*344*/ { BARCODE_UPCA_CC, 51, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", 0, 51, 16, 99, 234, 112, "" }, - /*345*/ { BARCODE_UPCE_CC, -1, "1234567", "[20]01[90]123456789012345678", 0, 50, 11, 55, 142, 110, "CC-A 7 rows" }, - /*346*/ { BARCODE_UPCE_CC, 1, "1234567", "[20]01[90]123456789012345678", 0, 20.5, 11, 55, 142, 51, "" }, - /*347*/ { BARCODE_UPCE_CC, 4, "1234567", "[20]01[90]123456789012345678", 0, 20.5, 11, 55, 142, 51, "" }, - /*348*/ { BARCODE_UPCE_CC, 85, "1234567", "[20]01[90]123456789012345678", 0, 85, 11, 55, 142, 180, "" }, - /*349*/ { BARCODE_UPCE_CC, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 50, 16, 55, 142, 110, "CC-A 12 rows" }, - /*350*/ { BARCODE_UPCE_CC, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 30.5, 16, 55, 142, 71, "" }, - /*351*/ { BARCODE_UPCE_CC, 49, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 49, 16, 55, 142, 108, "" }, - /*352*/ { BARCODE_UPCE_CC, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 50, 21, 55, 142, 110, "CC-B 17 rows" }, - /*353*/ { BARCODE_UPCE_CC, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 40.5, 21, 55, 142, 91, "" }, - /*354*/ { BARCODE_UPCE_CC, 4, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 40.5, 21, 55, 142, 91, "" }, - /*355*/ { BARCODE_UPCE_CC, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", 0, 52.5, 27, 55, 142, 115, "CC-B 23 rows" }, - /*356*/ { BARCODE_UPCE_CC, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", 0, 52.5, 27, 55, 142, 115, "" }, - /*357*/ { BARCODE_UPCE_CC, 52, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", 0, 52.5, 27, 55, 142, 115, "" }, - /*358*/ { BARCODE_DBAR_STK_CC, -1, "1234567890123", "[20]01", 0, 24, 9, 56, 112, 48, "CC-A 5 rows" }, - /*359*/ { BARCODE_DBAR_STK_CC, 1, "1234567890123", "[20]01", 0, 13, 9, 56, 112, 26, "" }, - /*360*/ { BARCODE_DBAR_STK_CC, 4, "1234567890123", "[20]01", 0, 13, 9, 56, 112, 26, "" }, - /*361*/ { BARCODE_DBAR_STK_CC, 24, "1234567890123", "[20]01", 0, 24, 9, 56, 112, 48, "" }, - /*362*/ { BARCODE_DBAR_STK_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 38, 16, 56, 112, 76, "CC-A 12 rows" }, - /*363*/ { BARCODE_DBAR_STK_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 27, 16, 56, 112, 54, "" }, - /*364*/ { BARCODE_DBAR_STK_CC, 25, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 27, 16, 56, 112, 54, "" }, - /*365*/ { BARCODE_DBAR_STK_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 48, 21, 56, 112, 96, "CC-B 17 rows" }, - /*366*/ { BARCODE_DBAR_STK_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 37, 21, 56, 112, 74, "" }, - /*367*/ { BARCODE_DBAR_STK_CC, 59, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 59, 21, 56, 112, 118, "" }, - /*368*/ { BARCODE_DBAR_OMNSTK_CC, -1, "1234567890123", "[20]01[90]1234567890123456", 0, 82, 12, 56, 112, 164, "CC-A 6 rows" }, - /*369*/ { BARCODE_DBAR_OMNSTK_CC, 1, "1234567890123", "[20]01[90]1234567890123456", 0, 17, 12, 56, 112, 34, "" }, - /*370*/ { BARCODE_DBAR_OMNSTK_CC, 4, "1234567890123", "[20]01[90]1234567890123456", 0, 17, 12, 56, 112, 34, "" }, - /*371*/ { BARCODE_DBAR_OMNSTK_CC, 80, "1234567890123", "[20]01[90]1234567890123456", 0, 80, 12, 56, 112, 160, "" }, - /*372*/ { BARCODE_DBAR_OMNSTK_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567", 0, 94, 18, 56, 112, 188, "CC-A 12 rows" }, - /*373*/ { BARCODE_DBAR_OMNSTK_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567", 0, 29, 18, 56, 112, 58, "" }, - /*374*/ { BARCODE_DBAR_OMNSTK_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 104, 23, 56, 112, 208, "CC-B 17 rows" }, - /*375*/ { BARCODE_DBAR_OMNSTK_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 39, 23, 56, 112, 78, "" }, - /*376*/ { BARCODE_DBAR_OMNSTK_CC, 4, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 39, 23, 56, 112, 78, "" }, - /*377*/ { BARCODE_DBAR_OMNSTK_CC, 52, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 52, 23, 56, 112, 104, "" }, - /*378*/ { BARCODE_DBAR_EXPSTK_CC, -1, "[01]12345678901231", "[20]01", 0, 78, 9, 102, 204, 156, "3 rows, CC-A 3 rows" }, - /*379*/ { BARCODE_DBAR_EXPSTK_CC, 1, "[01]12345678901231", "[20]01", 0, 11, 9, 102, 204, 22, "" }, - /*380*/ { BARCODE_DBAR_EXPSTK_CC, 4, "[01]12345678901231", "[20]01", 0, 11, 9, 102, 204, 22, "" }, - /*381*/ { BARCODE_DBAR_EXPSTK_CC, 77, "[01]12345678901231", "[20]01", 0, 77, 9, 102, 204, 154, "" }, - /*382*/ { BARCODE_DBAR_EXPSTK_CC, 78, "[01]12345678901231", "[20]01", 0, 78, 9, 102, 204, 156, "" }, - /*383*/ { BARCODE_DBAR_EXPSTK_CC, -1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", 0, 189, 21, 102, 204, 378, "5 rows, CC-A 3 rows" }, - /*384*/ { BARCODE_DBAR_EXPSTK_CC, 1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", 0, 21.5, 21, 102, 204, 43, "" }, - /*385*/ { BARCODE_DBAR_EXPSTK_CC, 190, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", 0, 189, 21, 102, 204, 378, "" }, - /*386*/ { BARCODE_DBAR_EXPSTK_CC, -1, "[01]12345678901231", "[20]01[90]12345678901234567890", 0, 80, 10, 102, 204, 160, "3 rows, CC-A 4 rows" }, - /*387*/ { BARCODE_DBAR_EXPSTK_CC, 1, "[01]12345678901231", "[20]01[90]12345678901234567890", 0, 13, 10, 102, 204, 26, "" }, - /*388*/ { BARCODE_DBAR_EXPSTK_CC, 38, "[01]12345678901231", "[20]01[90]12345678901234567890", 0, 38, 10, 102, 204, 76, "" }, - /*389*/ { BARCODE_DBAR_EXPSTK_CC, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 92, 16, 102, 204, 184, "3 rows, CC-B 10 rows" }, - /*390*/ { BARCODE_DBAR_EXPSTK_CC, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 25, 16, 102, 204, 50, "" }, - /*391*/ { BARCODE_DBAR_EXPSTK_CC, 4, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 25, 16, 102, 204, 50, "" }, - /*392*/ { BARCODE_DBAR_EXPSTK_CC, 47, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 47, 16, 102, 204, 94, "" }, - /*393*/ { BARCODE_DBAR_EXPSTK_CC, -1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 203, 28, 102, 204, 406, "5 rows, CC-B 10 rows" }, - /*394*/ { BARCODE_DBAR_EXPSTK_CC, 1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 35.5, 28, 102, 204, 71, "" }, - /*395*/ { BARCODE_CHANNEL, 1, "1", "", 0, 1, 1, 19, 38, 2, "" }, - /*396*/ { BARCODE_CHANNEL, 4, "123", "", 0, 4, 1, 23, 46, 8, "" }, - /*397*/ { BARCODE_CODEONE, 1, "12345678901234567890", "", 0, 16, 16, 18, 36, 32, "Fixed height, symbol->height ignored" }, - /*398*/ { BARCODE_GRIDMATRIX, 1, "ABC", "", 0, 18, 18, 18, 36, 36, "Fixed width-to-height ratio, symbol->height ignored" }, - /*399*/ { BARCODE_UPNQR, 1, "1234567890AB", "", 0, 77, 77, 77, 154, 154, "Fixed width-to-height ratio, symbol->height ignored" }, - /*400*/ { BARCODE_ULTRA, 1, "1234567890", "", 0, 13, 13, 18, 36, 26, "Fixed width-to-height ratio, symbol->height ignored" }, - /*401*/ { BARCODE_RMQR, 1, "12345", "", 0, 11, 11, 27, 54, 22, "Fixed width-to-height ratio, symbol->height ignored" }, + /* 0*/ { BARCODE_CODE11, -1, 1, "1234567890", "", 0, 1, 1, 108, 216, 2, "" }, + /* 1*/ { BARCODE_CODE11, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 108, 216, 2, "TODO: Find doc" }, + /* 2*/ { BARCODE_CODE11, -1, 4, "1234567890", "", 0, 4, 1, 108, 216, 8, "" }, + /* 3*/ { BARCODE_CODE11, -1, 10, "1234567890", "", 0, 10, 1, 108, 216, 20, "" }, + /* 4*/ { BARCODE_C25STANDARD, -1, 1, "1234567890", "", 0, 1, 1, 117, 234, 2, "" }, + /* 5*/ { BARCODE_C25STANDARD, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 117, 234, 2, "No doc for C25 except C25INTER" }, + /* 6*/ { BARCODE_C25STANDARD, -1, 4, "1234567890", "", 0, 4, 1, 117, 234, 8, "" }, + /* 7*/ { BARCODE_C25STANDARD, -1, 11, "1234567890", "", 0, 11, 1, 117, 234, 22, "" }, + /* 8*/ { BARCODE_C25INTER, -1, 1, "1234567890", "", 0, 1, 1, 99, 198, 2, "" }, + /* 9*/ { BARCODE_C25INTER, -1, 15, "1234567890", "", 0, 15, 1, 99, 198, 30, "" }, + /* 10*/ { BARCODE_C25INTER, COMPLIANT_HEIGHT, 15, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 15, 1, 99, 198, 30, "Min height data-length dependent" }, + /* 11*/ { BARCODE_C25INTER, COMPLIANT_HEIGHT, 15.5, "1234567890", "", 0, 15.5, 1, 99, 198, 31, "" }, + /* 12*/ { BARCODE_C25INTER, COMPLIANT_HEIGHT, 17.5, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 17.5, 1, 117, 234, 35, "Min height data-length dependent" }, + /* 13*/ { BARCODE_C25INTER, COMPLIANT_HEIGHT, 17.75, "12345678901", "", 0, 18, 1, 117, 234, 36, "" }, + /* 14*/ { BARCODE_C25IATA, -1, 1, "1234567890", "", 0, 1, 1, 149, 298, 2, "" }, + /* 15*/ { BARCODE_C25IATA, -1, 4, "1234567890", "", 0, 4, 1, 149, 298, 8, "" }, + /* 16*/ { BARCODE_C25IATA, -1, 30, "1234567890", "", 0, 30, 1, 149, 298, 60, "" }, + /* 17*/ { BARCODE_C25LOGIC, -1, 1, "1234567890", "", 0, 1, 1, 109, 218, 2, "" }, + /* 18*/ { BARCODE_C25LOGIC, -1, 4, "1234567890", "", 0, 4, 1, 109, 218, 8, "" }, + /* 19*/ { BARCODE_C25LOGIC, -1, 41, "1234567890", "", 0, 41, 1, 109, 218, 82, "" }, + /* 20*/ { BARCODE_C25IND, -1, 1, "1234567890", "", 0, 1, 1, 159, 318, 2, "" }, + /* 21*/ { BARCODE_C25IND, -1, 4, "1234567890", "", 0, 4, 1, 159, 318, 8, "" }, + /* 22*/ { BARCODE_C25IND, -1, 21, "1234567890", "", 0, 21, 1, 159, 318, 42, "" }, + /* 23*/ { BARCODE_CODE39, -1, 1, "1234567890", "", 0, 1, 1, 155, 310, 2, "" }, + /* 24*/ { BARCODE_CODE39, -1, 4, "1", "", 0, 4, 1, 38, 76, 8, "" }, + /* 25*/ { BARCODE_CODE39, COMPLIANT_HEIGHT, 4, "1", "", ZINT_WARN_NONCOMPLIANT, 4, 1, 38, 76, 8, "Min height data-length dependent" }, + /* 26*/ { BARCODE_CODE39, COMPLIANT_HEIGHT, 4.4, "1", "", 0, 4.5, 1, 38, 76, 9, "" }, + /* 27*/ { BARCODE_CODE39, -1, 17, "1234567890", "", 0, 17, 1, 155, 310, 34, "" }, + /* 28*/ { BARCODE_CODE39, COMPLIANT_HEIGHT, 17, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 17, 1, 155, 310, 34, "Min height data-length dependent" }, + /* 29*/ { BARCODE_CODE39, COMPLIANT_HEIGHT, 17.85, "1234567890", "", 0, 18, 1, 155, 310, 36, "" }, + /* 30*/ { BARCODE_EXCODE39, -1, 1, "1234567890", "", 0, 1, 1, 155, 310, 2, "" }, + /* 31*/ { BARCODE_EXCODE39, -1, 17.8, "1234567890", "", 0, 18, 1, 155, 310, 36, "" }, + /* 32*/ { BARCODE_EXCODE39, COMPLIANT_HEIGHT, 17.8, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 18, 1, 155, 310, 36, "" }, + /* 33*/ { BARCODE_EXCODE39, COMPLIANT_HEIGHT, 17.9, "1234567890", "", 0, 18, 1, 155, 310, 36, "" }, + /* 34*/ { BARCODE_EANX, -1, 1, "123456789012", "", 0, 1, 1, 95, 226, 12, "EAN-13" }, + /* 35*/ { BARCODE_EANX, -1, 69, "123456789012", "", 0, 69, 1, 95, 226, 148, "" }, + /* 36*/ { BARCODE_EANX, COMPLIANT_HEIGHT, 69, "123456789012", "", ZINT_WARN_NONCOMPLIANT, 69, 1, 95, 226, 148, "" }, + /* 37*/ { BARCODE_EANX, COMPLIANT_HEIGHT, 69.25, "123456789012", "", 0, 69.5, 1, 95, 226, 149, "" }, + /* 38*/ { BARCODE_EANX, -1, 55, "1234567", "", 0, 55, 1, 67, 162, 120, "EAN-8" }, + /* 39*/ { BARCODE_EANX, COMPLIANT_HEIGHT, 55, "1234567", "", ZINT_WARN_NONCOMPLIANT, 55, 1, 67, 162, 120, "EAN-8" }, + /* 40*/ { BARCODE_EANX, COMPLIANT_HEIGHT, 55.25, "1234567", "", 0, 55.5, 1, 67, 162, 121, "EAN-8" }, + /* 41*/ { BARCODE_EANX_CHK, -1, 1, "1234567890128", "", 0, 1, 1, 95, 226, 12, "EAN-13" }, + /* 42*/ { BARCODE_EANX_CHK, -1, 69, "1234567890128", "", 0, 69, 1, 95, 226, 148, "" }, + /* 43*/ { BARCODE_EANX_CHK, COMPLIANT_HEIGHT, 69, "1234567890128", "", ZINT_WARN_NONCOMPLIANT, 69, 1, 95, 226, 148, "" }, + /* 44*/ { BARCODE_EANX_CHK, COMPLIANT_HEIGHT, 69.25, "1234567890128", "", 0, 69.5, 1, 95, 226, 149, "" }, + /* 45*/ { BARCODE_GS1_128, -1, 1, "[01]12345678901231", "", 0, 1, 1, 134, 268, 2, "" }, + /* 46*/ { BARCODE_GS1_128, -1, 5.7, "[01]12345678901231", "", 0, 5.5, 1, 134, 268, 11, "" }, + /* 47*/ { BARCODE_GS1_128, COMPLIANT_HEIGHT, 5.7, "[01]12345678901231", "", ZINT_WARN_NONCOMPLIANT, 5.5, 1, 134, 268, 11, "" }, + /* 48*/ { BARCODE_GS1_128, COMPLIANT_HEIGHT, 5.725, "[01]12345678901231", "", 0, 5.5, 1, 134, 268, 11, "Note considered compliant even though rendered height same as before" }, + /* 49*/ { BARCODE_GS1_128, -1, 50, "[01]12345678901231", "", 0, 50, 1, 134, 268, 100, "" }, + /* 50*/ { BARCODE_CODABAR, -1, 1, "A0B", "", 0, 1, 1, 32, 64, 2, "" }, + /* 51*/ { BARCODE_CODABAR, -1, 4, "A0B", "", 0, 4, 1, 32, 64, 8, "" }, + /* 52*/ { BARCODE_CODABAR, -1, 26, "A0B", "", 0, 26, 1, 32, 64, 52, "" }, + /* 53*/ { BARCODE_CODABAR, COMPLIANT_HEIGHT, 26, "A0B", "", ZINT_WARN_NONCOMPLIANT, 26, 1, 32, 64, 52, "" }, + /* 54*/ { BARCODE_CODABAR, COMPLIANT_HEIGHT, 27, "A0B", "", 0, 27, 1, 32, 64, 54, "" }, + /* 55*/ { BARCODE_CODE128, -1, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "" }, + /* 56*/ { BARCODE_CODE128, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "" }, + /* 57*/ { BARCODE_CODE128, -1, 4, "1234567890", "", 0, 4, 1, 90, 180, 8, "" }, + /* 58*/ { BARCODE_CODE128, -1, 7, "1234567890", "", 0, 7, 1, 90, 180, 14, "" }, + /* 59*/ { BARCODE_DPLEIT, -1, 1, "1234567890123", "", 0, 1, 1, 135, 270, 2, "" }, + /* 60*/ { BARCODE_DPLEIT, COMPLIANT_HEIGHT, 1, "1234567890123", "", 0, 1, 1, 135, 270, 2, "TODO: Find doc" }, + /* 61*/ { BARCODE_DPLEIT, -1, 4, "1234567890123", "", 0, 4, 1, 135, 270, 8, "" }, + /* 62*/ { BARCODE_DPIDENT, -1, 1, "12345678901", "", 0, 1, 1, 117, 234, 2, "" }, + /* 63*/ { BARCODE_DPIDENT, COMPLIANT_HEIGHT, 1, "12345678901", "", 0, 1, 1, 117, 234, 2, "TODO: Find doc" }, + /* 64*/ { BARCODE_DPIDENT, -1, 4, "12345678901", "", 0, 4, 1, 117, 234, 8, "" }, + /* 65*/ { BARCODE_CODE16K, -1, -1, "1234567890", "", 0, 20, 2, 70, 162, 44, "2 rows" }, + /* 66*/ { BARCODE_CODE16K, -1, 1, "1234567890", "", 0, 1, 2, 70, 162, 6, "" }, + /* 67*/ { BARCODE_CODE16K, -1, 4, "1234567890", "", 0, 4, 2, 70, 162, 12, "" }, + /* 68*/ { BARCODE_CODE16K, -1, 16.75, "1234567890", "", 0, 17, 2, 70, 162, 38, "" }, + /* 69*/ { BARCODE_CODE16K, COMPLIANT_HEIGHT, 16.75, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 17, 2, 70, 162, 38, "" }, + /* 70*/ { BARCODE_CODE16K, COMPLIANT_HEIGHT, 17, "1234567890", "", 0, 17, 2, 70, 162, 38, "" }, + /* 71*/ { BARCODE_CODE16K, -1, -1, "12345678901234567890123456789012345678901234567890", "", 0, 60, 6, 70, 162, 124, "6 rows" }, + /* 72*/ { BARCODE_CODE16K, -1, 52.5, "12345678901234567890123456789012345678901234567890", "", 0, 54, 6, 70, 162, 112, "" }, + /* 73*/ { BARCODE_CODE16K, COMPLIANT_HEIGHT, 52.5, "12345678901234567890123456789012345678901234567890", "", ZINT_WARN_NONCOMPLIANT, 54, 6, 70, 162, 112, "" }, + /* 74*/ { BARCODE_CODE16K, COMPLIANT_HEIGHT, 53, "12345678901234567890123456789012345678901234567890", "", 0, 54, 6, 70, 162, 112, "" }, + /* 75*/ { BARCODE_CODE49, -1, -1, "1234567890", "", 0, 20, 2, 70, 162, 44, "2 rows" }, + /* 76*/ { BARCODE_CODE49, -1, 1, "1234567890", "", 0, 1, 2, 70, 162, 6, "" }, + /* 77*/ { BARCODE_CODE49, -1, 16.75, "1234567890", "", 0, 17, 2, 70, 162, 38, "" }, + /* 78*/ { BARCODE_CODE49, COMPLIANT_HEIGHT, 16.75, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 17, 2, 70, 162, 38, "" }, + /* 79*/ { BARCODE_CODE49, COMPLIANT_HEIGHT, 17, "1234567890", "", 0, 17, 2, 70, 162, 38, "" }, + /* 80*/ { BARCODE_CODE49, -1, -1, "12345678901234567890", "", 0, 30, 3, 70, 162, 64, "3 rows" }, + /* 81*/ { BARCODE_CODE49, -1, 25.75, "12345678901234567890", "", 0, 25.5, 3, 70, 162, 55, "" }, + /* 82*/ { BARCODE_CODE49, COMPLIANT_HEIGHT, 25.75, "12345678901234567890", "", ZINT_WARN_NONCOMPLIANT, 25.5, 3, 70, 162, 55, "" }, + /* 83*/ { BARCODE_CODE49, COMPLIANT_HEIGHT, 26, "12345678901234567890", "", 0, 25.5, 3, 70, 162, 55, "" }, + /* 84*/ { BARCODE_CODE93, -1, 1, "1234567890", "", 0, 1, 1, 127, 254, 2, "" }, + /* 85*/ { BARCODE_CODE93, -1, 9.9, "1", "", 0, 10, 1, 46, 92, 20, "" }, + /* 86*/ { BARCODE_CODE93, COMPLIANT_HEIGHT, 9.9, "1", "", ZINT_WARN_NONCOMPLIANT, 10, 1, 46, 92, 20, "Min height data-length dependent" }, + /* 87*/ { BARCODE_CODE93, COMPLIANT_HEIGHT, 10, "1", "", 0, 10, 1, 46, 92, 20, "" }, + /* 88*/ { BARCODE_CODE93, COMPLIANT_HEIGHT, 22, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 22, 1, 127, 254, 44, "Min height data-length dependent" }, + /* 89*/ { BARCODE_CODE93, COMPLIANT_HEIGHT, 22.1, "1234567890", "", 0, 22, 1, 127, 254, 44, "" }, + /* 90*/ { BARCODE_FLAT, -1, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "" }, + /* 91*/ { BARCODE_FLAT, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "TODO: Find doc" }, + /* 92*/ { BARCODE_FLAT, -1, 4, "1234567890", "", 0, 4, 1, 90, 180, 8, "" }, + /* 93*/ { BARCODE_DBAR_OMN, -1, 1, "1234567890123", "", 0, 1, 1, 96, 192, 2, "" }, + /* 94*/ { BARCODE_DBAR_OMN, -1, 12.9, "1234567890123", "", 0, 13, 1, 96, 192, 26, "" }, + /* 95*/ { BARCODE_DBAR_OMN, COMPLIANT_HEIGHT, 12.9, "1234567890123", "", ZINT_WARN_NONCOMPLIANT, 13, 1, 96, 192, 26, "" }, + /* 96*/ { BARCODE_DBAR_OMN, COMPLIANT_HEIGHT, 13, "1234567890123", "", 0, 13, 1, 96, 192, 26, "" }, + /* 97*/ { BARCODE_DBAR_LTD, -1, 1, "1234567890123", "", 0, 1, 1, 79, 158, 2, "" }, + /* 98*/ { BARCODE_DBAR_LTD, -1, 9, "1234567890123", "", 0, 9, 1, 79, 158, 18, "" }, + /* 99*/ { BARCODE_DBAR_LTD, COMPLIANT_HEIGHT, 9, "1234567890123", "", ZINT_WARN_NONCOMPLIANT, 9, 1, 79, 158, 18, "" }, + /*100*/ { BARCODE_DBAR_LTD, COMPLIANT_HEIGHT, 10, "1234567890123", "", 0, 10, 1, 79, 158, 20, "" }, + /*101*/ { BARCODE_DBAR_EXP, -1, 1, "[01]12345678901231", "", 0, 1, 1, 134, 268, 2, "" }, + /*102*/ { BARCODE_DBAR_EXP, -1, 33, "[01]12345678901231", "", 0, 33, 1, 134, 268, 66, "" }, + /*103*/ { BARCODE_DBAR_EXP, COMPLIANT_HEIGHT, 33, "[01]12345678901231", "", ZINT_WARN_NONCOMPLIANT, 33, 1, 134, 268, 66, "" }, + /*104*/ { BARCODE_DBAR_EXP, COMPLIANT_HEIGHT, 34, "[01]12345678901231", "", 0, 34, 1, 134, 268, 68, "" }, + /*105*/ { BARCODE_TELEPEN, -1, 1, "1234567890", "", 0, 1, 1, 208, 416, 2, "" }, + /*106*/ { BARCODE_TELEPEN, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 208, 416, 2, "No known min" }, + /*107*/ { BARCODE_TELEPEN, -1, 4, "1234567890", "", 0, 4, 1, 208, 416, 8, "" }, + /*108*/ { BARCODE_UPCA, -1, 1, "12345678901", "", 0, 1, 1, 95, 226, 12, "" }, + /*109*/ { BARCODE_UPCA, -1, 69, "12345678901", "", 0, 69, 1, 95, 226, 148, "" }, + /*110*/ { BARCODE_UPCA, COMPLIANT_HEIGHT, 69, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 69, 1, 95, 226, 148, "" }, + /*111*/ { BARCODE_UPCA, COMPLIANT_HEIGHT, 69.25, "12345678901", "", 0, 69.5, 1, 95, 226, 149, "" }, + /*112*/ { BARCODE_UPCA_CHK, -1, 1, "123456789012", "", 0, 1, 1, 95, 226, 12, "" }, + /*113*/ { BARCODE_UPCA_CHK, COMPLIANT_HEIGHT, 69, "123456789012", "", ZINT_WARN_NONCOMPLIANT, 69, 1, 95, 226, 148, "" }, + /*114*/ { BARCODE_UPCA_CHK, COMPLIANT_HEIGHT, 69.5, "123456789012", "", 0, 69.5, 1, 95, 226, 149, "" }, + /*115*/ { BARCODE_UPCE, -1, 1, "1234567", "", 0, 1, 1, 51, 134, 12, "" }, + /*116*/ { BARCODE_UPCE, -1, 69, "1234567", "", 0, 69, 1, 51, 134, 148, "" }, + /*117*/ { BARCODE_UPCE, COMPLIANT_HEIGHT, 69, "1234567", "", ZINT_WARN_NONCOMPLIANT, 69, 1, 51, 134, 148, "" }, + /*118*/ { BARCODE_UPCE, COMPLIANT_HEIGHT, 69.25, "1234567", "", 0, 69.5, 1, 51, 134, 149, "" }, + /*119*/ { BARCODE_UPCE_CHK, -1, 1, "12345670", "", 0, 1, 1, 51, 134, 12, "" }, + /*120*/ { BARCODE_UPCE_CHK, COMPLIANT_HEIGHT, 69.24, "12345670", "", ZINT_WARN_NONCOMPLIANT, 69, 1, 51, 134, 148, "" }, + /*121*/ { BARCODE_UPCE_CHK, COMPLIANT_HEIGHT, 69.25, "12345670", "", 0, 69.5, 1, 51, 134, 149, "" }, + /*122*/ { BARCODE_POSTNET, -1, -1, "12345678901", "", 0, 12, 2, 123, 246, 24, "" }, + /*123*/ { BARCODE_POSTNET, -1, 1, "12345678901", "", 0, 1, 2, 123, 246, 2, "" }, + /*124*/ { BARCODE_POSTNET, -1, 4.5, "12345678901", "", 0, 5, 2, 123, 246, 10, "" }, + /*125*/ { BARCODE_POSTNET, COMPLIANT_HEIGHT, 4.5, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 4.5, 2, 123, 246, 9, "" }, + /*126*/ { BARCODE_POSTNET, COMPLIANT_HEIGHT, 4.6, "12345678901", "", 0, 5, 2, 123, 246, 10, "" }, + /*127*/ { BARCODE_POSTNET, -1, 9, "12345678901", "", 0, 9, 2, 123, 246, 18, "" }, + /*128*/ { BARCODE_POSTNET, COMPLIANT_HEIGHT, 9, "12345678901", "", 0, 9, 2, 123, 246, 18, "" }, + /*129*/ { BARCODE_POSTNET, COMPLIANT_HEIGHT, 9.1, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 9, 2, 123, 246, 18, "" }, + /*130*/ { BARCODE_POSTNET, -1, 20, "12345678901", "", 0, 20, 2, 123, 246, 40, "" }, + /*131*/ { BARCODE_POSTNET, COMPLIANT_HEIGHT, 20, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 20, 2, 123, 246, 40, "" }, + /*132*/ { BARCODE_MSI_PLESSEY, -1, 1, "1234567890", "", 0, 1, 1, 127, 254, 2, "" }, + /*133*/ { BARCODE_MSI_PLESSEY, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 127, 254, 2, "TODO: Find doc" }, + /*134*/ { BARCODE_MSI_PLESSEY, -1, 4, "1234567890", "", 0, 4, 1, 127, 254, 8, "" }, + /*135*/ { BARCODE_FIM, -1, 1, "A", "", 0, 1, 1, 17, 34, 2, "" }, + /*136*/ { BARCODE_FIM, -1, 12.7, "A", "", 0, 12.5, 1, 17, 34, 25, "" }, + /*137*/ { BARCODE_FIM, COMPLIANT_HEIGHT, 12.7, "A", "", ZINT_WARN_NONCOMPLIANT, 12.5, 1, 17, 34, 25, "" }, + /*138*/ { BARCODE_FIM, COMPLIANT_HEIGHT, 12.8, "A", "", 0, 13, 1, 17, 34, 26, "" }, + /*139*/ { BARCODE_LOGMARS, -1, 1, "1234567890", "", 0, 1, 1, 191, 382, 2, "" }, + /*140*/ { BARCODE_LOGMARS, -1, 6, "1234567890", "", 0, 6, 1, 191, 382, 12, "" }, + /*141*/ { BARCODE_LOGMARS, COMPLIANT_HEIGHT, 6, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 6, 1, 191, 382, 12, "" }, + /*142*/ { BARCODE_LOGMARS, -1, 6.25, "1234567890", "", 0, 6.5, 1, 191, 382, 13, "" }, + /*143*/ { BARCODE_LOGMARS, COMPLIANT_HEIGHT, 6.25, "1234567890", "", 0, 6.5, 1, 191, 382, 13, "" }, + /*144*/ { BARCODE_LOGMARS, COMPLIANT_HEIGHT, 116, "1234567890", "", 0, 116, 1, 191, 382, 232, "" }, + /*145*/ { BARCODE_LOGMARS, COMPLIANT_HEIGHT, 117, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 117, 1, 191, 382, 234, "" }, + /*146*/ { BARCODE_PHARMA, -1, 1, "123456", "", 0, 1, 1, 58, 116, 2, "" }, + /*147*/ { BARCODE_PHARMA, -1, 15, "123456", "", 0, 15, 1, 58, 116, 30, "" }, + /*148*/ { BARCODE_PHARMA, COMPLIANT_HEIGHT, 15, "123456", "", ZINT_WARN_NONCOMPLIANT, 15, 1, 58, 116, 30, "" }, + /*149*/ { BARCODE_PHARMA, COMPLIANT_HEIGHT, 16, "123456", "", 0, 16, 1, 58, 116, 32, "" }, + /*150*/ { BARCODE_PZN, -1, 1, "123456", "", 0, 1, 1, 142, 284, 2, "" }, + /*151*/ { BARCODE_PZN, -1, 17.7, "123456", "", 0, 17.5, 1, 142, 284, 35, "" }, + /*152*/ { BARCODE_PZN, COMPLIANT_HEIGHT, 17.7, "123456", "", ZINT_WARN_NONCOMPLIANT, 17.5, 1, 142, 284, 35, "" }, + /*153*/ { BARCODE_PZN, COMPLIANT_HEIGHT, 17.8, "123456", "", 0, 18, 1, 142, 284, 36, "" }, + /*154*/ { BARCODE_PHARMA_TWO, -1, -1, "12345678", "", 0, 10, 2, 29, 58, 20, "" }, + /*155*/ { BARCODE_PHARMA_TWO, -1, 1, "12345678", "", 0, 1, 2, 29, 58, 2, "" }, + /*156*/ { BARCODE_PHARMA_TWO, -1, 3.9, "12345678", "", 0, 4, 2, 29, 58, 8, "" }, + /*157*/ { BARCODE_PHARMA_TWO, COMPLIANT_HEIGHT, 3.9, "12345678", "", ZINT_WARN_NONCOMPLIANT, 4, 2, 29, 58, 8, "" }, + /*158*/ { BARCODE_PHARMA_TWO, COMPLIANT_HEIGHT, 4, "12345678", "", 0, 4, 2, 29, 58, 8, "" }, + /*159*/ { BARCODE_PHARMA_TWO, -1, 15, "12345678", "", 0, 15, 2, 29, 58, 30, "" }, + /*160*/ { BARCODE_PHARMA_TWO, COMPLIANT_HEIGHT, 15, "12345678", "", 0, 15, 2, 29, 58, 30, "" }, + /*161*/ { BARCODE_PHARMA_TWO, COMPLIANT_HEIGHT, 15.1, "12345678", "", ZINT_WARN_NONCOMPLIANT, 15, 2, 29, 58, 30, "" }, + /*162*/ { BARCODE_PDF417, -1, 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 4, 8, 120, 240, 8, "8 rows" }, + /*163*/ { BARCODE_PDF417, -1, 4, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 4, 8, 120, 240, 8, "" }, + /*164*/ { BARCODE_PDF417, -1, 23, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 24, 8, 120, 240, 48, "" }, + /*165*/ { BARCODE_PDF417, -1, 24, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 24, 8, 120, 240, 48, "" }, + /*166*/ { BARCODE_PDF417, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 36, 12, 120, 240, 72, "12 rows" }, + /*167*/ { BARCODE_PDF417, -1, 12, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 12, 12, 120, 240, 24, "" }, + /*168*/ { BARCODE_PDF417COMP, -1, 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ", "", ZINT_WARN_NONCOMPLIANT, 4.5, 9, 86, 172, 9, "9 rows" }, + /*169*/ { BARCODE_PDF417COMP, -1, 24, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ", "", ZINT_WARN_NONCOMPLIANT, 22.5, 9, 86, 172, 45, "" }, + /*170*/ { BARCODE_MAXICODE, -1, 1, "1234567890", "", 0, 16.5, 33, 30, 299, 298, "Fixed size, symbol->height ignored" }, + /*171*/ { BARCODE_QRCODE, -1, 1, "ABCD", "", 0, 21, 21, 21, 42, 42, "Fixed width-to-height ratio, symbol->height ignored" }, + /*172*/ { BARCODE_CODE128B, -1, 1, "1234567890", "", 0, 1, 1, 145, 290, 2, "" }, + /*173*/ { BARCODE_CODE128B, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 145, 290, 2, "" }, + /*174*/ { BARCODE_CODE128B, -1, 4, "1234567890", "", 0, 4, 1, 145, 290, 8, "" }, + /*175*/ { BARCODE_AUSPOST, -1, -1, "12345678901234567890123", "", 0, 8, 3, 133, 266, 16, "" }, + /*176*/ { BARCODE_AUSPOST, -1, 1, "12345678901234567890123", "", 0, 2.5, 3, 133, 266, 5, "" }, + /*177*/ { BARCODE_AUSPOST, COMPLIANT_HEIGHT, 1, "12345678901234567890123", "", ZINT_WARN_NONCOMPLIANT, 1.5, 3, 133, 266, 3, "" }, + /*178*/ { BARCODE_AUSPOST, -1, 6.9, "12345678901234567890123", "", 0, 6.5, 3, 133, 266, 13, "" }, + /*179*/ { BARCODE_AUSPOST, COMPLIANT_HEIGHT, 6.9, "12345678901234567890123", "", ZINT_WARN_NONCOMPLIANT, 7, 3, 133, 266, 14, "" }, + /*180*/ { BARCODE_AUSPOST, COMPLIANT_HEIGHT, 7, "12345678901234567890123", "", 0, 7, 3, 133, 266, 14, "" }, + /*181*/ { BARCODE_AUSPOST, -1, 14, "12345678901234567890123", "", 0, 14.5, 3, 133, 266, 29, "" }, + /*182*/ { BARCODE_AUSPOST, COMPLIANT_HEIGHT, 14, "12345678901234567890123", "", 0, 13.5, 3, 133, 266, 27, "" }, + /*183*/ { BARCODE_AUSPOST, COMPLIANT_HEIGHT, 14.1, "12345678901234567890123", "", ZINT_WARN_NONCOMPLIANT, 13.5, 3, 133, 266, 27, "" }, + /*184*/ { BARCODE_AUSREPLY, -1, 14, "12345678", "", 0, 14.5, 3, 73, 146, 29, "" }, + /*185*/ { BARCODE_AUSREPLY, COMPLIANT_HEIGHT, 14, "12345678", "", 0, 13.5, 3, 73, 146, 27, "" }, + /*186*/ { BARCODE_AUSREPLY, COMPLIANT_HEIGHT, 14.25, "12345678", "", ZINT_WARN_NONCOMPLIANT, 14.5, 3, 73, 146, 29, "" }, + /*187*/ { BARCODE_AUSROUTE, -1, 7, "12345678", "", 0, 7, 3, 73, 146, 14, "" }, + /*188*/ { BARCODE_AUSROUTE, COMPLIANT_HEIGHT, 7, "12345678", "", 0, 7, 3, 73, 146, 14, "" }, + /*189*/ { BARCODE_AUSREDIRECT, -1, 14, "12345678", "", 0, 14.5, 3, 73, 146, 29, "" }, + /*190*/ { BARCODE_AUSREDIRECT, COMPLIANT_HEIGHT, 14, "12345678", "", 0, 13.5, 3, 73, 146, 27, "" }, + /*191*/ { BARCODE_ISBNX, -1, 1, "123456789", "", 0, 1, 1, 95, 226, 12, "" }, + /*192*/ { BARCODE_ISBNX, -1, 69, "123456789", "", 0, 69, 1, 95, 226, 148, "" }, + /*193*/ { BARCODE_ISBNX, COMPLIANT_HEIGHT, 69, "123456789", "", ZINT_WARN_NONCOMPLIANT, 69, 1, 95, 226, 148, "" }, + /*194*/ { BARCODE_ISBNX, COMPLIANT_HEIGHT, 69.5, "123456789", "", 0, 69.5, 1, 95, 226, 149, "" }, + /*195*/ { BARCODE_RM4SCC, -1, -1, "1234567890", "", 0, 8, 3, 91, 182, 16, "" }, + /*196*/ { BARCODE_RM4SCC, -1, 1, "1234567890", "", 0, 2.5, 3, 91, 182, 5, "" }, + /*197*/ { BARCODE_RM4SCC, COMPLIANT_HEIGHT, 1, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 1.5, 3, 91, 182, 3, "" }, + /*198*/ { BARCODE_RM4SCC, -1, 4, "1234567890", "", 0, 4, 3, 91, 182, 8, "" }, + /*199*/ { BARCODE_RM4SCC, COMPLIANT_HEIGHT, 4, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 4, 3, 91, 182, 8, "" }, + /*200*/ { BARCODE_RM4SCC, -1, 6, "1234567890", "", 0, 6.5, 3, 91, 182, 13, "" }, + /*201*/ { BARCODE_RM4SCC, COMPLIANT_HEIGHT, 6, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 5.5, 3, 91, 182, 11, "" }, + /*202*/ { BARCODE_RM4SCC, COMPLIANT_HEIGHT, 6.5, "1234567890", "", 0, 6.5, 3, 91, 182, 13, "" }, + /*203*/ { BARCODE_RM4SCC, -1, 10.8, "1234567890", "", 0, 10.5, 3, 91, 182, 21, "" }, + /*204*/ { BARCODE_RM4SCC, COMPLIANT_HEIGHT, 10.8, "1234567890", "", 0, 11, 3, 91, 182, 22, "" }, + /*205*/ { BARCODE_RM4SCC, COMPLIANT_HEIGHT, 11, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 11, 3, 91, 182, 22, "" }, + /*206*/ { BARCODE_RM4SCC, -1, 16, "1234567890", "", 0, 16, 3, 91, 182, 32, "" }, + /*207*/ { BARCODE_RM4SCC, COMPLIANT_HEIGHT, 16, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 16, 3, 91, 182, 32, "" }, + /*208*/ { BARCODE_DATAMATRIX, -1, 1, "ABCD", "", 0, 12, 12, 12, 24, 24, "Fixed width-to-height ratio, symbol->height ignored" }, + /*209*/ { BARCODE_EAN14, -1, 1, "1234567890123", "", 0, 1, 1, 134, 268, 2, "" }, + /*210*/ { BARCODE_EAN14, -1, 5.7, "1234567890123", "", 0, 5.5, 1, 134, 268, 11, "" }, + /*211*/ { BARCODE_EAN14, COMPLIANT_HEIGHT, 5.7, "1234567890123", "", ZINT_WARN_NONCOMPLIANT, 5.5, 1, 134, 268, 11, "" }, + /*212*/ { BARCODE_EAN14, COMPLIANT_HEIGHT, 5.8, "1234567890123", "", 0, 6, 1, 134, 268, 12, "" }, + /*213*/ { BARCODE_VIN, -1, 1, "12345678701234567", "", 0, 1, 1, 246, 492, 2, "" }, + /*214*/ { BARCODE_VIN, COMPLIANT_HEIGHT, 1, "12345678701234567", "", 0, 1, 1, 246, 492, 2, "Doc unlikely" }, + /*215*/ { BARCODE_VIN, -1, 4, "12345678701234567", "", 0, 4, 1, 246, 492, 8, "" }, + /*216*/ { BARCODE_CODABLOCKF, -1, -1, "1234567890", "", 0, 20, 2, 101, 242, 44, "2 rows" }, + /*217*/ { BARCODE_CODABLOCKF, -1, 1, "1234567890", "", 0, 1, 2, 101, 242, 6, "" }, + /*218*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 1, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 1, 2, 101, 242, 6, "" }, + /*219*/ { BARCODE_CODABLOCKF, -1, 15.5, "1234567890", "", 0, 16, 2, 101, 242, 36, "" }, + /*220*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 15.5, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 16, 2, 101, 242, 36, "" }, + /*221*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 16, "1234567890", "", 0, 16, 2, 101, 242, 36, "" }, + /*222*/ { BARCODE_CODABLOCKF, -1, -1, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 110, 11, 156, 352, 224, "11 rows, 14 cols" }, + /*223*/ { BARCODE_CODABLOCKF, -1, 87, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 88, 11, 156, 352, 180, "" }, + /*224*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 87, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", ZINT_WARN_NONCOMPLIANT, 88, 11, 156, 352, 180, "" }, + /*225*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 88, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 88, 11, 156, 352, 180, "" }, + /*226*/ { BARCODE_CODABLOCKF, -1, 220, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 220, 11, 156, 352, 444, "" }, + /*227*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 220, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 220, 11, 156, 352, 444, "" }, + /*228*/ { BARCODE_CODABLOCKF, -1, -1, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv", "", 0, 110, 11, 167, 374, 224, "11 rows, 15 cols" }, + /*229*/ { BARCODE_CODABLOCKF, -1, 93, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv", "", 0, 93.5, 11, 167, 374, 191, "" }, + /*230*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 93, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv", "", ZINT_WARN_NONCOMPLIANT, 93.5, 11, 167, 374, 191, "" }, + /*231*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 93.5, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv", "", 0, 93.5, 11, 167, 374, 191, "" }, + /*232*/ { BARCODE_NVE18, -1, 1, "12345678901234567", "", 0, 1, 1, 156, 312, 2, "" }, + /*233*/ { BARCODE_NVE18, -1, 5.7, "12345678901234567", "", 0, 5.5, 1, 156, 312, 11, "" }, + /*234*/ { BARCODE_NVE18, COMPLIANT_HEIGHT, 5.7, "12345678901234567", "", ZINT_WARN_NONCOMPLIANT, 5.5, 1, 156, 312, 11, "" }, + /*235*/ { BARCODE_NVE18, COMPLIANT_HEIGHT, 5.8, "12345678901234567", "", 0, 6, 1, 156, 312, 12, "" }, + /*236*/ { BARCODE_JAPANPOST, -1, -1, "1234567890", "", 0, 8, 3, 133, 266, 16, "" }, + /*237*/ { BARCODE_JAPANPOST, -1, 1, "1234567890", "", 0, 2.5, 3, 133, 266, 5, "" }, + /*238*/ { BARCODE_JAPANPOST, COMPLIANT_HEIGHT, 1, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 1.5, 3, 133, 266, 3, "" }, + /*239*/ { BARCODE_JAPANPOST, -1, 4.8, "1234567890", "", 0, 5, 3, 133, 266, 10, "" }, + /*240*/ { BARCODE_JAPANPOST, COMPLIANT_HEIGHT, 4.8, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 4.5, 3, 133, 266, 9, "" }, + /*241*/ { BARCODE_JAPANPOST, COMPLIANT_HEIGHT, 4.9, "1234567890", "", 0, 4.5, 3, 133, 266, 9, "" }, + /*242*/ { BARCODE_JAPANPOST, -1, 7, "1234567890", "", 0, 7, 3, 133, 266, 14, "" }, + /*243*/ { BARCODE_JAPANPOST, COMPLIANT_HEIGHT, 7, "1234567890", "", 0, 7.5, 3, 133, 266, 15, "" }, + /*244*/ { BARCODE_JAPANPOST, COMPLIANT_HEIGHT, 7.5, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 7.5, 3, 133, 266, 15, "" }, + /*245*/ { BARCODE_JAPANPOST, -1, 16, "1234567890", "", 0, 16, 3, 133, 266, 32, "" }, + /*246*/ { BARCODE_JAPANPOST, COMPLIANT_HEIGHT, 16, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 16.5, 3, 133, 266, 33, "" }, + /*247*/ { BARCODE_KOREAPOST, -1, 1, "123456", "", 0, 1, 1, 167, 334, 2, "" }, + /*248*/ { BARCODE_KOREAPOST, COMPLIANT_HEIGHT, 1, "123456", "", 0, 1, 1, 167, 334, 2, "TODO: Find doc" }, + /*249*/ { BARCODE_KOREAPOST, -1, 4, "123456", "", 0, 4, 1, 167, 334, 8, "" }, + /*250*/ { BARCODE_DBAR_STK, -1, -1, "1234567890123", "", 0, 13, 3, 50, 100, 26, "" }, + /*251*/ { BARCODE_DBAR_STK, -1, 1, "1234567890123", "", 0, 2, 3, 50, 100, 4, "" }, + /*252*/ { BARCODE_DBAR_STK, -1, 12, "1234567890123", "", 0, 12, 3, 50, 100, 24, "" }, + /*253*/ { BARCODE_DBAR_STK, COMPLIANT_HEIGHT, 12, "1234567890123", "", ZINT_WARN_NONCOMPLIANT, 12, 3, 50, 100, 24, "" }, + /*254*/ { BARCODE_DBAR_STK, COMPLIANT_HEIGHT, 13, "1234567890123", "", 0, 13, 3, 50, 100, 26, "" }, + /*255*/ { BARCODE_DBAR_OMNSTK, -1, -1, "1234567890123", "", 0, 69, 5, 50, 100, 138, "" }, + /*256*/ { BARCODE_DBAR_OMNSTK, -1, 1, "1234567890123", "", 0, 4, 5, 50, 100, 8, "" }, + /*257*/ { BARCODE_DBAR_OMNSTK, -1, 68, "1234567890123", "", 0, 68, 5, 50, 100, 136, "" }, + /*258*/ { BARCODE_DBAR_OMNSTK, COMPLIANT_HEIGHT, 68, "1234567890123", "", ZINT_WARN_NONCOMPLIANT, 68, 5, 50, 100, 136, "" }, + /*259*/ { BARCODE_DBAR_OMNSTK, COMPLIANT_HEIGHT, 69, "1234567890123", "", 0, 69, 5, 50, 100, 138, "" }, + /*260*/ { BARCODE_DBAR_EXPSTK, -1, -1, "[01]12345678901231", "", 0, 71, 5, 102, 204, 142, "2 rows" }, + /*261*/ { BARCODE_DBAR_EXPSTK, -1, 1, "[01]12345678901231", "", 0, 4, 5, 102, 204, 8, "" }, + /*262*/ { BARCODE_DBAR_EXPSTK, -1, 70, "[01]12345678901231", "", 0, 70, 5, 102, 204, 140, "" }, + /*263*/ { BARCODE_DBAR_EXPSTK, COMPLIANT_HEIGHT, 70, "[01]12345678901231", "", ZINT_WARN_NONCOMPLIANT, 70, 5, 102, 204, 140, "" }, + /*264*/ { BARCODE_DBAR_EXPSTK, COMPLIANT_HEIGHT, 71, "[01]12345678901231", "", 0, 71, 5, 102, 204, 142, "" }, + /*265*/ { BARCODE_DBAR_EXPSTK, -1, -1, "[01]09501101530003[3920]123456789012345", "", 0, 108, 9, 102, 204, 216, "3 rows" }, + /*266*/ { BARCODE_DBAR_EXPSTK, -1, 1, "[01]09501101530003[3920]123456789012345", "", 0, 7.5, 9, 102, 204, 15, "" }, + /*267*/ { BARCODE_DBAR_EXPSTK, -1, 107.5, "[01]09501101530003[3920]123456789012345", "", 0, 108, 9, 102, 204, 216, "" }, + /*268*/ { BARCODE_DBAR_EXPSTK, COMPLIANT_HEIGHT, 107.5, "[01]09501101530003[3920]123456789012345", "", ZINT_WARN_NONCOMPLIANT, 108, 9, 102, 204, 216, "" }, + /*269*/ { BARCODE_DBAR_EXPSTK, COMPLIANT_HEIGHT, 108, "[01]09501101530003[3920]123456789012345", "", 0, 108, 9, 102, 204, 216, "" }, + /*270*/ { BARCODE_PLANET, -1, -1, "12345678901", "", 0, 12, 2, 123, 246, 24, "" }, + /*271*/ { BARCODE_PLANET, -1, 1, "12345678901", "", 0, 1, 2, 123, 246, 2, "" }, + /*272*/ { BARCODE_PLANET, COMPLIANT_HEIGHT, 1, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 1.5, 2, 123, 246, 3, "" }, + /*273*/ { BARCODE_PLANET, -1, 4.5, "12345678901", "", 0, 5, 2, 123, 246, 10, "" }, + /*274*/ { BARCODE_PLANET, COMPLIANT_HEIGHT, 4.5, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 4.5, 2, 123, 246, 9, "" }, + /*275*/ { BARCODE_PLANET, COMPLIANT_HEIGHT, 4.6, "12345678901", "", 0, 5, 2, 123, 246, 10, "" }, + /*276*/ { BARCODE_PLANET, -1, 9, "12345678901", "", 0, 9, 2, 123, 246, 18, "" }, + /*277*/ { BARCODE_PLANET, COMPLIANT_HEIGHT, 9, "12345678901", "", 0, 9, 2, 123, 246, 18, "" }, + /*278*/ { BARCODE_PLANET, COMPLIANT_HEIGHT, 9.1, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 9, 2, 123, 246, 18, "" }, + /*279*/ { BARCODE_PLANET, -1, 24, "12345678901", "", 0, 24, 2, 123, 246, 48, "" }, + /*280*/ { BARCODE_PLANET, COMPLIANT_HEIGHT, 24, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 24, 2, 123, 246, 48, "" }, + /*281*/ { BARCODE_MICROPDF417, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 20, 10, 82, 164, 40, "10 rows" }, + /*282*/ { BARCODE_MICROPDF417, -1, 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 5, 10, 82, 164, 10, "" }, + /*283*/ { BARCODE_MICROPDF417, -1, 4, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 5, 10, 82, 164, 10, "" }, + /*284*/ { BARCODE_MICROPDF417, -1, 19, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 20, 10, 82, 164, 40, "" }, + /*285*/ { BARCODE_MICROPDF417, -1, 30, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 30, 10, 82, 164, 60, "" }, + /*286*/ { BARCODE_MICROPDF417, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 40, 20, 55, 110, 80, "20 rows" }, + /*287*/ { BARCODE_MICROPDF417, -1, 20, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 20, 20, 55, 110, 40, "" }, + /*288*/ { BARCODE_USPS_IMAIL, -1, -1, "12345678901234567890", "", 0, 8, 3, 129, 258, 16, "" }, + /*289*/ { BARCODE_USPS_IMAIL, -1, 1, "12345678901234567890", "", 0, 2.5, 3, 129, 258, 5, "" }, + /*290*/ { BARCODE_USPS_IMAIL, COMPLIANT_HEIGHT, 1, "12345678901234567890", "", ZINT_WARN_NONCOMPLIANT, 1.5, 3, 129, 258, 3, "" }, + /*291*/ { BARCODE_USPS_IMAIL, -1, 4.8, "12345678901234567890", "", 0, 5, 3, 129, 258, 10, "" }, + /*292*/ { BARCODE_USPS_IMAIL, COMPLIANT_HEIGHT, 4.8, "12345678901234567890", "", ZINT_WARN_NONCOMPLIANT, 4.5, 3, 129, 258, 9, "" }, + /*293*/ { BARCODE_USPS_IMAIL, COMPLIANT_HEIGHT, 4.9, "12345678901234567890", "", 0, 4.5, 3, 129, 258, 9, "" }, + /*294*/ { BARCODE_USPS_IMAIL, -1, 7.7, "12345678901234567890", "", 0, 8, 3, 129, 258, 16, "" }, + /*295*/ { BARCODE_USPS_IMAIL, COMPLIANT_HEIGHT, 7.7, "12345678901234567890", "", 0, 7.5, 3, 129, 258, 15, "" }, + /*296*/ { BARCODE_USPS_IMAIL, COMPLIANT_HEIGHT, 7.8, "12345678901234567890", "", ZINT_WARN_NONCOMPLIANT, 7.5, 3, 129, 258, 15, "" }, + /*297*/ { BARCODE_PLESSEY, -1, 1, "1234567890", "", 0, 1, 1, 227, 454, 2, "" }, + /*298*/ { BARCODE_PLESSEY, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 227, 454, 2, "TODO: Find doc" }, + /*299*/ { BARCODE_PLESSEY, -1, 4, "1234567890", "", 0, 4, 1, 227, 454, 8, "" }, + /*300*/ { BARCODE_TELEPEN_NUM, -1, 1, "1234567890", "", 0, 1, 1, 128, 256, 2, "" }, + /*301*/ { BARCODE_TELEPEN_NUM, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 128, 256, 2, "No known min" }, + /*302*/ { BARCODE_TELEPEN_NUM, -1, 4, "1234567890", "", 0, 4, 1, 128, 256, 8, "" }, + /*303*/ { BARCODE_ITF14, -1, 1, "1234567890", "", 0, 1, 1, 135, 330, 22, "" }, + /*304*/ { BARCODE_ITF14, -1, 5.7, "1234567890", "", 0, 5.5, 1, 135, 330, 31, "" }, + /*305*/ { BARCODE_ITF14, COMPLIANT_HEIGHT, 5.7, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 5.5, 1, 135, 330, 31, "" }, + /*306*/ { BARCODE_ITF14, COMPLIANT_HEIGHT, 5.8, "1234567890", "", 0, 6, 1, 135, 330, 32, "" }, + /*307*/ { BARCODE_KIX, -1, -1, "1234567890", "", 0, 8, 3, 79, 158, 16, "" }, + /*308*/ { BARCODE_KIX, -1, 1, "1234567890", "", 0, 2.5, 3, 79, 158, 5, "" }, + /*309*/ { BARCODE_KIX, COMPLIANT_HEIGHT, 1, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 1.5, 3, 79, 158, 3, "" }, + /*310*/ { BARCODE_KIX, -1, 6.4, "1234567890", "", 0, 6.5, 3, 79, 158, 13, "" }, + /*311*/ { BARCODE_KIX, COMPLIANT_HEIGHT, 6.4, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 6.5, 3, 79, 158, 13, "" }, + /*312*/ { BARCODE_KIX, COMPLIANT_HEIGHT, 6.5, "1234567890", "", 0, 6.5, 3, 79, 158, 13, "" }, + /*313*/ { BARCODE_KIX, -1, 10.8, "1234567890", "", 0, 10.5, 3, 79, 158, 21, "" }, + /*314*/ { BARCODE_KIX, COMPLIANT_HEIGHT, 10.8, "1234567890", "", 0, 11, 3, 79, 158, 22, "" }, + /*315*/ { BARCODE_KIX, COMPLIANT_HEIGHT, 10.9, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 11, 3, 79, 158, 22, "" }, + /*316*/ { BARCODE_KIX, -1, 16, "1234567890", "", 0, 16, 3, 79, 158, 32, "" }, + /*317*/ { BARCODE_KIX, COMPLIANT_HEIGHT, 16, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 16, 3, 79, 158, 32, "" }, + /*318*/ { BARCODE_AZTEC, -1, 1, "1234567890AB", "", 0, 15, 15, 15, 30, 30, "Fixed width-to-height ratio, symbol->height ignored" }, + /*319*/ { BARCODE_DAFT, -1, -1, "DAFTDAFTDAFTDAFT", "", 0, 8, 3, 31, 62, 16, "" }, + /*320*/ { BARCODE_DAFT, -1, 1, "DAFTDAFTDAFTDAFT", "", 0, 2.5, 3, 31, 62, 5, "" }, + /*321*/ { BARCODE_DAFT, COMPLIANT_HEIGHT, 1, "DAFTDAFTDAFTDAFT", "", 0, 2.5, 3, 31, 62, 5, "" }, + /*322*/ { BARCODE_DAFT, -1, 4, "DAFTDAFTDAFTDAFT", "", 0, 4, 3, 31, 62, 8, "" }, + /*323*/ { BARCODE_DAFT, -1, 6, "DAFTDAFTDAFTDAFT", "", 0, 6.5, 3, 31, 62, 13, "" }, + /*324*/ { BARCODE_DAFT, -1, 12, "DAFTDAFTDAFTDAFT", "", 0, 12, 3, 31, 62, 24, "" }, + /*325*/ { BARCODE_DAFT, -1, 16, "DAFTDAFTDAFTDAFT", "", 0, 16, 3, 31, 62, 32, "" }, + /*326*/ { BARCODE_DAFT, COMPLIANT_HEIGHT, 16, "DAFTDAFTDAFTDAFT", "", 0, 16, 3, 31, 62, 32, "" }, + /*327*/ { BARCODE_DPD, -1, 1, "0123456789012345678901234567", "", 0, 1, 1, 189, 378, 2, "" }, + /*328*/ { BARCODE_DPD, -1, 62, "0123456789012345678901234567", "", 0, 62, 1, 189, 378, 124, "" }, + /*329*/ { BARCODE_DPD, COMPLIANT_HEIGHT, 62, "0123456789012345678901234567", "", ZINT_WARN_NONCOMPLIANT, 62, 1, 189, 378, 124, "" }, + /*330*/ { BARCODE_DPD, COMPLIANT_HEIGHT, 62.5, "0123456789012345678901234567", "", 0, 62.5, 1, 189, 378, 125, "" }, + /*331*/ { BARCODE_MICROQR, -1, 1, "12345", "", 0, 11, 11, 11, 22, 22, "Fixed width-to-height ratio, symbol->height ignored" }, + /*332*/ { BARCODE_HIBC_128, -1, 1, "1234567890", "", 0, 1, 1, 123, 246, 2, "" }, + /*333*/ { BARCODE_HIBC_128, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 123, 246, 2, "" }, + /*334*/ { BARCODE_HIBC_128, -1, 4, "1234567890", "", 0, 4, 1, 123, 246, 8, "" }, + /*335*/ { BARCODE_HIBC_39, -1, 1, "1234567890", "", 0, 1, 1, 223, 446, 2, "" }, + /*336*/ { BARCODE_HIBC_39, COMPLIANT_HEIGHT, 1, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 1, 1, 223, 446, 2, "" }, + /*337*/ { BARCODE_HIBC_39, -1, 4, "1234567890", "", 0, 4, 1, 223, 446, 8, "" }, + /*338*/ { BARCODE_HIBC_DM, -1, 1, "ABC", "", 0, 12, 12, 12, 24, 24, "Fixed width-to-height ratio, symbol->height ignored" }, + /*339*/ { BARCODE_HIBC_QR, -1, 1, "1234567890AB", "", 0, 21, 21, 21, 42, 42, "Fixed width-to-height ratio, symbol->height ignored" }, + /*340*/ { BARCODE_HIBC_PDF, -1, -1, "ABCDEF", "", 0, 21, 7, 103, 206, 42, "7 rows" }, + /*341*/ { BARCODE_HIBC_PDF, -1, 1, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 3.5, 7, 103, 206, 7, "" }, + /*342*/ { BARCODE_HIBC_PDF, -1, 4, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 3.5, 7, 103, 206, 7, "" }, + /*343*/ { BARCODE_HIBC_PDF, -1, 36, "ABCDEF", "", 0, 35, 7, 103, 206, 70, "" }, + /*344*/ { BARCODE_HIBC_MICPDF, -1, -1, "ABCDEF", "", 0, 12, 6, 82, 164, 24, "6 rows" }, + /*345*/ { BARCODE_HIBC_MICPDF, -1, 1, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 3, 6, 82, 164, 6, "" }, + /*346*/ { BARCODE_HIBC_MICPDF, -1, 4, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 3, 6, 82, 164, 6, "" }, + /*347*/ { BARCODE_HIBC_MICPDF, -1, 47, "ABCDEF", "", 0, 48, 6, 82, 164, 96, "" }, + /*348*/ { BARCODE_HIBC_BLOCKF, -1, -1, "1234567890", "", 0, 30, 3, 101, 242, 64, "3 rows" }, + /*349*/ { BARCODE_HIBC_BLOCKF, -1, 1, "1234567890", "", 0, 1.5, 3, 101, 242, 7, "" }, + /*350*/ { BARCODE_HIBC_BLOCKF, COMPLIANT_HEIGHT, 1, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 1.5, 3, 101, 242, 7, "" }, + /*351*/ { BARCODE_HIBC_BLOCKF, -1, 4, "1234567890", "", 0, 4.5, 3, 101, 242, 13, "" }, + /*352*/ { BARCODE_HIBC_BLOCKF, COMPLIANT_HEIGHT, 4, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 4.5, 3, 101, 242, 13, "" }, + /*353*/ { BARCODE_HIBC_BLOCKF, -1, 23, "1234567890", "", 0, 22.5, 3, 101, 242, 49, "" }, + /*354*/ { BARCODE_HIBC_BLOCKF, COMPLIANT_HEIGHT, 23, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 22.5, 3, 101, 242, 49, "" }, + /*355*/ { BARCODE_HIBC_BLOCKF, COMPLIANT_HEIGHT, 24, "1234567890", "", 0, 24, 3, 101, 242, 52, "" }, + /*356*/ { BARCODE_HIBC_BLOCKF, -1, 60, "1234567890", "", 0, 60, 3, 101, 242, 124, "" }, + /*357*/ { BARCODE_HIBC_BLOCKF, COMPLIANT_HEIGHT, 60, "1234567890", "", 0, 60, 3, 101, 242, 124, "" }, + /*358*/ { BARCODE_HIBC_AZTEC, -1, 1, "1234567890AB", "", 0, 19, 19, 19, 38, 38, "Fixed width-to-height ratio, symbol->height ignored" }, + /*359*/ { BARCODE_DOTCODE, -1, 1, "ABC", "", 0, 11, 11, 16, 33, 23, "Fixed width-to-height ratio, symbol->height ignored" }, + /*360*/ { BARCODE_HANXIN, -1, 1, "1234567890AB", "", 0, 23, 23, 23, 46, 46, "Fixed width-to-height ratio, symbol->height ignored" }, + /*361*/ { BARCODE_MAILMARK, -1, -1, "01000000000000000AA00AA0A", "", 0, 10, 3, 155, 310, 20, "" }, + /*362*/ { BARCODE_MAILMARK, -1, 1, "01000000000000000AA00AA0A", "", 0, 2.5, 3, 155, 310, 5, "" }, + /*363*/ { BARCODE_MAILMARK, COMPLIANT_HEIGHT, 1, "01000000000000000AA00AA0A", "", ZINT_WARN_NONCOMPLIANT, 1.5, 3, 155, 310, 3, "" }, + /*364*/ { BARCODE_MAILMARK, -1, 6.4, "01000000000000000AA00AA0A", "", 0, 6.5, 3, 155, 310, 13, "" }, + /*365*/ { BARCODE_MAILMARK, COMPLIANT_HEIGHT, 6.4, "01000000000000000AA00AA0A", "", ZINT_WARN_NONCOMPLIANT, 6.5, 3, 155, 310, 13, "" }, + /*366*/ { BARCODE_MAILMARK, COMPLIANT_HEIGHT, 6.5, "01000000000000000AA00AA0A", "", 0, 6.5, 3, 155, 310, 13, "" }, + /*367*/ { BARCODE_MAILMARK, -1, 10, "01000000000000000AA00AA0A", "", 0, 10, 3, 155, 310, 20, "" }, + /*368*/ { BARCODE_MAILMARK, COMPLIANT_HEIGHT, 10, "01000000000000000AA00AA0A", "", 0, 9.5, 3, 155, 310, 19, "" }, + /*369*/ { BARCODE_MAILMARK, COMPLIANT_HEIGHT, 11, "01000000000000000AA00AA0A", "", ZINT_WARN_NONCOMPLIANT, 11, 3, 155, 310, 22, "" }, + /*370*/ { BARCODE_MAILMARK, -1, 15, "01000000000000000AA00AA0A", "", 0, 15, 3, 155, 310, 30, "" }, + /*371*/ { BARCODE_MAILMARK, COMPLIANT_HEIGHT, 15, "01000000000000000AA00AA0A", "", ZINT_WARN_NONCOMPLIANT, 15, 3, 155, 310, 30, "" }, + /*372*/ { BARCODE_MAILMARK, -1, 20, "01000000000000000AA00AA0A", "", 0, 20, 3, 155, 310, 40, "" }, + /*373*/ { BARCODE_MAILMARK, COMPLIANT_HEIGHT, 20, "01000000000000000AA00AA0A", "", ZINT_WARN_NONCOMPLIANT, 20, 3, 155, 310, 40, "" }, + /*374*/ { BARCODE_AZRUNE, -1, 1, "1", "", 0, 11, 11, 11, 22, 22, "Fixed width-to-height ratio, symbol->height ignored" }, + /*375*/ { BARCODE_CODE32, -1, 1, "12345678", "", 0, 1, 1, 103, 206, 2, "" }, + /*376*/ { BARCODE_CODE32, COMPLIANT_HEIGHT, 1, "12345678", "", ZINT_WARN_NONCOMPLIANT, 1, 1, 103, 206, 2, "" }, + /*377*/ { BARCODE_CODE32, -1, 19, "12345678", "", 0, 19, 1, 103, 206, 38, "" }, + /*378*/ { BARCODE_CODE32, COMPLIANT_HEIGHT, 19, "12345678", "", ZINT_WARN_NONCOMPLIANT, 19, 1, 103, 206, 38, "" }, + /*379*/ { BARCODE_CODE32, COMPLIANT_HEIGHT, 20, "12345678", "", 0, 20, 1, 103, 206, 40, "" }, + /*380*/ { BARCODE_EANX_CC, -1, -1, "123456789012", "[20]01", 0, 50, 7, 99, 234, 110, "EAN-13, CC-A 3 rows" }, + /*381*/ { BARCODE_EANX_CC, -1, 1, "123456789012", "[20]01", 0, 12.5, 7, 99, 234, 35, "" }, + /*382*/ { BARCODE_EANX_CC, -1, 81, "123456789012", "[20]01", 0, 81, 7, 99, 234, 172, "" }, + /*383*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 81, "123456789012", "[20]01", ZINT_WARN_NONCOMPLIANT, 81, 7, 99, 234, 172, "" }, + /*384*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 81.25, "123456789012", "[20]01", 0, 81.5, 7, 99, 234, 173, "" }, + /*385*/ { BARCODE_EANX_CC, -1, -1, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 50, 9, 99, 234, 110, "EAN-13, CC-A 5 rows" }, + /*386*/ { BARCODE_EANX_CC, -1, 1, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 16.5, 9, 99, 234, 43, "" }, + /*387*/ { BARCODE_EANX_CC, -1, 85, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 85, 9, 99, 234, 180, "" }, + /*388*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 85, "123456789012", "[20]01[90]123456789012345678901234567890", ZINT_WARN_NONCOMPLIANT, 85, 9, 99, 234, 180, "" }, + /*389*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 85.25, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 85.5, 9, 99, 234, 181, "" }, + /*390*/ { BARCODE_EANX_CC, -1, -1, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 50, 11, 99, 234, 110, "EAN-13, CC-A 7 rows" }, + /*391*/ { BARCODE_EANX_CC, -1, 1, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 20.5, 11, 99, 234, 51, "" }, + /*392*/ { BARCODE_EANX_CC, -1, 89, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 89, 11, 99, 234, 188, "" }, + /*393*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 89, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", ZINT_WARN_NONCOMPLIANT, 89, 11, 99, 234, 188, "" }, + /*394*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 89.25, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 89.5, 11, 99, 234, 189, "" }, + /*395*/ { BARCODE_EANX_CC, -1, -1, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 50, 14, 99, 234, 110, "EAN-13, CC-B 10 rows" }, + /*396*/ { BARCODE_EANX_CC, -1, 1, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 26.5, 14, 99, 234, 63, "" }, + /*397*/ { BARCODE_EANX_CC, -1, 95, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 95, 14, 99, 234, 200, "" }, + /*398*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 95, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 95, 14, 99, 234, 200, "" }, + /*399*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 95.25, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 95.5, 14, 99, 234, 201, "" }, + /*400*/ { BARCODE_EANX_CC, -1, -1, "1234567", "[20]01[90]123456789012345678901234", 0, 50, 10, 72, 172, 110, "EAN-8, CC-A 4 rows" }, + /*401*/ { BARCODE_EANX_CC, -1, 1, "1234567", "[20]01[90]123456789012345678901234", 0, 18.5, 10, 72, 172, 47, "" }, + /*402*/ { BARCODE_EANX_CC, -1, 73, "1234567", "[20]01[90]123456789012345678901234", 0, 73, 10, 72, 172, 156, "" }, + /*403*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 73, "1234567", "[20]01[90]123456789012345678901234", ZINT_WARN_NONCOMPLIANT, 73, 10, 72, 172, 156, "" }, + /*404*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 73.25, "1234567", "[20]01[90]123456789012345678901234", 0, 73.5, 10, 72, 172, 157, "" }, + /*405*/ { BARCODE_EANX_CC, -1, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 50, 24, 82, 192, 110, "EAN-8, CC-B 15 rows" }, + /*406*/ { BARCODE_EANX_CC, -1, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 46.5, 24, 82, 192, 103, "" }, + /*407*/ { BARCODE_EANX_CC, -1, 101, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 101, 24, 82, 192, 212, "" }, + /*408*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 101, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", ZINT_WARN_NONCOMPLIANT, 101, 24, 82, 192, 212, "" }, + /*409*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 101.25, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 101.5, 24, 82, 192, 213, "" }, + /*410*/ { BARCODE_GS1_128_CC, -1, -1, "[01]12345678901231", "[20]01", 0, 50, 5, 145, 290, 100, "CC-A 3 rows" }, + /*411*/ { BARCODE_GS1_128_CC, -1, 1, "[01]12345678901231", "[20]01", 0, 7.5, 5, 145, 290, 15, "" }, + /*412*/ { BARCODE_GS1_128_CC, -1, 12.5, "[01]12345678901231", "[20]01", 0, 12.5, 5, 145, 290, 25, "" }, + /*413*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 12.5, "[01]12345678901231", "[20]01", ZINT_WARN_NONCOMPLIANT, 12.5, 5, 145, 290, 25, "" }, + /*414*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 12.75, "[01]12345678901231", "[20]01", 0, 13, 5, 145, 290, 26, "" }, + /*415*/ { BARCODE_GS1_128_CC, -1, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 50, 9, 145, 290, 100, "CC-A 7 rows" }, + /*416*/ { BARCODE_GS1_128_CC, -1, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 15.5, 9, 145, 290, 31, "" }, + /*417*/ { BARCODE_GS1_128_CC, -1, 20.7, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 20.5, 9, 145, 290, 41, "" }, + /*418*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 20.7, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", ZINT_WARN_NONCOMPLIANT, 20.5, 9, 145, 290, 41, "" }, + /*419*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 20.75, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 21, 9, 145, 290, 42, "" }, + /*420*/ { BARCODE_GS1_128_CC, -1, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 50, 12, 145, 290, 100, "CC-B 10 rows" }, + /*421*/ { BARCODE_GS1_128_CC, -1, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 21.5, 12, 145, 290, 43, "" }, + /*422*/ { BARCODE_GS1_128_CC, -1, 26.5, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 26.5, 12, 145, 290, 53, "" }, + /*423*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 26.5, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 26.5, 12, 145, 290, 53, "" }, + /*424*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 26.75, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 27, 12, 145, 290, 54, "" }, + /*425*/ { BARCODE_GS1_128_CC, -1, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", 0, 91.5, 32, 154, 308, 183, "CC-C 30 rows" }, + /*426*/ { BARCODE_GS1_128_CC, -1, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", 0, 91.5, 32, 154, 308, 183, "" }, + /*427*/ { BARCODE_GS1_128_CC, -1, 96.5, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", 0, 96.5, 32, 154, 308, 193, "" }, + /*428*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 96.5, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", ZINT_WARN_NONCOMPLIANT, 96.5, 32, 154, 308, 193, "" }, + /*429*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 96.75, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", 0, 97, 32, 154, 308, 194, "" }, + /*430*/ { BARCODE_DBAR_OMN_CC, -1, -1, "1234567890123", "[20]01[90]1234567890", 0, 21, 5, 100, 200, 42, "CC-A 3 rows" }, + /*431*/ { BARCODE_DBAR_OMN_CC, -1, 1, "1234567890123", "[20]01[90]1234567890", 0, 7.5, 5, 100, 200, 15, "" }, + /*432*/ { BARCODE_DBAR_OMN_CC, -1, 19.9, "1234567890123", "[20]01[90]1234567890", 0, 20, 5, 100, 200, 40, "" }, + /*433*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 19.9, "1234567890123", "[20]01[90]1234567890", ZINT_WARN_NONCOMPLIANT, 20, 5, 100, 200, 40, "" }, + /*434*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 20, "1234567890123", "[20]01[90]1234567890", 0, 20, 5, 100, 200, 40, "" }, + /*435*/ { BARCODE_DBAR_OMN_CC, -1, -1, "1234567890123", "[20]01[90]12345678901234567890", 0, 23, 6, 100, 200, 46, "CC-A 4 rows" }, + /*436*/ { BARCODE_DBAR_OMN_CC, -1, 1, "1234567890123", "[20]01[90]12345678901234567890", 0, 9.5, 6, 100, 200, 19, "" }, + /*437*/ { BARCODE_DBAR_OMN_CC, -1, 21.9, "1234567890123", "[20]01[90]12345678901234567890", 0, 22, 6, 100, 200, 44, "" }, + /*438*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 21.9, "1234567890123", "[20]01[90]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 22, 6, 100, 200, 44, "" }, + /*439*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 22, "1234567890123", "[20]01[90]12345678901234567890", 0, 22, 6, 100, 200, 44, "" }, + /*440*/ { BARCODE_DBAR_OMN_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 35, 12, 100, 200, 70, "CC-B 10 rows" }, + /*441*/ { BARCODE_DBAR_OMN_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 21.5, 12, 100, 200, 43, "" }, + /*442*/ { BARCODE_DBAR_OMN_CC, -1, 33.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 34, 12, 100, 200, 68, "" }, + /*443*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 33.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 34, 12, 100, 200, 68, "" }, + /*444*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 34, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 34, 12, 100, 200, 68, "" }, + /*445*/ { BARCODE_DBAR_OMN_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", 0, 39, 14, 100, 200, 78, "CC-B 12 rows" }, + /*446*/ { BARCODE_DBAR_OMN_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", 0, 25.5, 14, 100, 200, 51, "" }, + /*447*/ { BARCODE_DBAR_OMN_CC, -1, 37.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", 0, 38, 14, 100, 200, 76, "" }, + /*448*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 37.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", ZINT_WARN_NONCOMPLIANT, 38, 14, 100, 200, 76, "" }, + /*449*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 38, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", 0, 38, 14, 100, 200, 76, "" }, + /*450*/ { BARCODE_DBAR_LTD_CC, -1, -1, "1234567890123", "[20]01", 0, 19, 6, 79, 158, 38, "CC-A 4 rows" }, + /*451*/ { BARCODE_DBAR_LTD_CC, -1, 1, "1234567890123", "[20]01", 0, 9.5, 6, 79, 158, 19, "" }, + /*452*/ { BARCODE_DBAR_LTD_CC, -1, 18, "1234567890123", "[20]01", 0, 18, 6, 79, 158, 36, "" }, + /*453*/ { BARCODE_DBAR_LTD_CC, COMPLIANT_HEIGHT, 18, "1234567890123", "[20]01", ZINT_WARN_NONCOMPLIANT, 18, 6, 79, 158, 36, "" }, + /*454*/ { BARCODE_DBAR_LTD_CC, COMPLIANT_HEIGHT, 19, "1234567890123", "[20]01", 0, 19, 6, 79, 158, 38, "" }, + /*455*/ { BARCODE_DBAR_LTD_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890", 0, 25, 9, 79, 158, 50, "CC-A 7 rows" }, + /*456*/ { BARCODE_DBAR_LTD_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890", 0, 15.5, 9, 79, 158, 31, "" }, + /*457*/ { BARCODE_DBAR_LTD_CC, -1, 24.9, "1234567890123", "[20]01[90]123456789012345678901234567890", 0, 25, 9, 79, 158, 50, "" }, + /*458*/ { BARCODE_DBAR_LTD_CC, COMPLIANT_HEIGHT, 24.9, "1234567890123", "[20]01[90]123456789012345678901234567890", ZINT_WARN_NONCOMPLIANT, 25, 9, 79, 158, 50, "" }, + /*459*/ { BARCODE_DBAR_LTD_CC, COMPLIANT_HEIGHT, 25, "1234567890123", "[20]01[90]123456789012345678901234567890", 0, 25, 9, 79, 158, 50, "" }, + /*460*/ { BARCODE_DBAR_LTD_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 51, 22, 88, 176, 102, "CC-B 20 rows" }, + /*461*/ { BARCODE_DBAR_LTD_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 41.5, 22, 88, 176, 83, "" }, + /*462*/ { BARCODE_DBAR_LTD_CC, -1, 50.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 51, 22, 88, 176, 102, "" }, + /*463*/ { BARCODE_DBAR_LTD_CC, COMPLIANT_HEIGHT, 50.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", ZINT_WARN_NONCOMPLIANT, 51, 22, 88, 176, 102, "" }, + /*464*/ { BARCODE_DBAR_LTD_CC, COMPLIANT_HEIGHT, 51, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 51, 22, 88, 176, 102, "" }, + /*465*/ { BARCODE_DBAR_EXP_CC, -1, -1, "[01]12345678901231", "[20]01", 0, 41, 5, 134, 268, 82, "CC-A 3 rows" }, + /*466*/ { BARCODE_DBAR_EXP_CC, -1, 1, "[01]12345678901231", "[20]01", 0, 7.5, 5, 134, 268, 15, "" }, + /*467*/ { BARCODE_DBAR_EXP_CC, -1, 40, "[01]12345678901231", "[20]01", 0, 40, 5, 134, 268, 80, "" }, + /*468*/ { BARCODE_DBAR_EXP_CC, COMPLIANT_HEIGHT, 40, "[01]12345678901231", "[20]01", ZINT_WARN_NONCOMPLIANT, 40, 5, 134, 268, 80, "" }, + /*469*/ { BARCODE_DBAR_EXP_CC, COMPLIANT_HEIGHT, 41, "[01]12345678901231", "[20]01", 0, 41, 5, 134, 268, 82, "" }, + /*470*/ { BARCODE_DBAR_EXP_CC, -1, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", 0, 45, 7, 134, 268, 90, "CC-A 5 rows" }, + /*471*/ { BARCODE_DBAR_EXP_CC, -1, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", 0, 11.5, 7, 134, 268, 23, "" }, + /*472*/ { BARCODE_DBAR_EXP_CC, -1, 44, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", 0, 44, 7, 134, 268, 88, "" }, + /*473*/ { BARCODE_DBAR_EXP_CC, COMPLIANT_HEIGHT, 44, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", ZINT_WARN_NONCOMPLIANT, 44, 7, 134, 268, 88, "" }, + /*474*/ { BARCODE_DBAR_EXP_CC, COMPLIANT_HEIGHT, 45, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", 0, 45, 7, 134, 268, 90, "" }, + /*475*/ { BARCODE_DBAR_EXP_CC, -1, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 55, 12, 134, 268, 110, "CC-B 10 rows" }, + /*476*/ { BARCODE_DBAR_EXP_CC, -1, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 21.5, 12, 134, 268, 43, "" }, + /*477*/ { BARCODE_DBAR_EXP_CC, -1, 54, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 54, 12, 134, 268, 108, "" }, + /*478*/ { BARCODE_DBAR_EXP_CC, COMPLIANT_HEIGHT, 54, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 54, 12, 134, 268, 108, "" }, + /*479*/ { BARCODE_DBAR_EXP_CC, COMPLIANT_HEIGHT, 55, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 55, 12, 134, 268, 110, "" }, + /*480*/ { BARCODE_UPCA_CC, -1, -1, "12345678901", "[20]01", 0, 50, 7, 99, 234, 110, "CC-A 3 rows" }, + /*481*/ { BARCODE_UPCA_CC, -1, 1, "12345678901", "[20]01", 0, 12.5, 7, 99, 234, 35, "" }, + /*482*/ { BARCODE_UPCA_CC, -1, 81.24, "12345678901", "[20]01", 0, 81, 7, 99, 234, 172, "" }, + /*483*/ { BARCODE_UPCA_CC, COMPLIANT_HEIGHT, 81.24, "12345678901", "[20]01", ZINT_WARN_NONCOMPLIANT, 81, 7, 99, 234, 172, "" }, + /*484*/ { BARCODE_UPCA_CC, COMPLIANT_HEIGHT, 81.25, "12345678901", "[20]01", 0, 81.5, 7, 99, 234, 173, "" }, + /*485*/ { BARCODE_UPCA_CC, -1, -1, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 50, 10, 99, 234, 110, "CC-A 6 rows" }, + /*486*/ { BARCODE_UPCA_CC, -1, 1, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 18.5, 10, 99, 234, 47, "" }, + /*487*/ { BARCODE_UPCA_CC, -1, 87.24, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 87, 10, 99, 234, 184, "" }, + /*488*/ { BARCODE_UPCA_CC, COMPLIANT_HEIGHT, 87.24, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", ZINT_WARN_NONCOMPLIANT, 87, 10, 99, 234, 184, "" }, + /*489*/ { BARCODE_UPCA_CC, COMPLIANT_HEIGHT, 87.25, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 87.5, 10, 99, 234, 185, "" }, + /*490*/ { BARCODE_UPCA_CC, -1, -1, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", 0, 50, 16, 99, 234, 110, "CC-B 12 rows" }, + /*491*/ { BARCODE_UPCA_CC, -1, 1, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", 0, 30.5, 16, 99, 234, 71, "" }, + /*492*/ { BARCODE_UPCA_CC, -1, 99, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", 0, 99, 16, 99, 234, 208, "" }, + /*493*/ { BARCODE_UPCA_CC, COMPLIANT_HEIGHT, 99, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", ZINT_WARN_NONCOMPLIANT, 99, 16, 99, 234, 208, "" }, + /*494*/ { BARCODE_UPCA_CC, COMPLIANT_HEIGHT, 99.25, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", 0, 99.5, 16, 99, 234, 209, "" }, + /*495*/ { BARCODE_UPCE_CC, -1, -1, "1234567", "[20]01[90]123456789012345678", 0, 50, 11, 55, 142, 110, "CC-A 7 rows" }, + /*496*/ { BARCODE_UPCE_CC, -1, 1, "1234567", "[20]01[90]123456789012345678", 0, 20.5, 11, 55, 142, 51, "" }, + /*497*/ { BARCODE_UPCE_CC, -1, 89, "1234567", "[20]01[90]123456789012345678", 0, 89, 11, 55, 142, 188, "" }, + /*498*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 89, "1234567", "[20]01[90]123456789012345678", ZINT_WARN_NONCOMPLIANT, 89, 11, 55, 142, 188, "" }, + /*499*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 89.25, "1234567", "[20]01[90]123456789012345678", 0, 89.5, 11, 55, 142, 189, "" }, + /*500*/ { BARCODE_UPCE_CC, -1, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 50, 16, 55, 142, 110, "CC-A 12 rows" }, + /*501*/ { BARCODE_UPCE_CC, -1, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 30.5, 16, 55, 142, 71, "" }, + /*502*/ { BARCODE_UPCE_CC, -1, 99, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 99, 16, 55, 142, 208, "" }, + /*503*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 99, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", ZINT_WARN_NONCOMPLIANT, 99, 16, 55, 142, 208, "" }, + /*504*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 99.25, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 99.5, 16, 55, 142, 209, "" }, + /*505*/ { BARCODE_UPCE_CC, -1, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 50, 21, 55, 142, 110, "CC-B 17 rows" }, + /*506*/ { BARCODE_UPCE_CC, -1, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 40.5, 21, 55, 142, 91, "" }, + /*507*/ { BARCODE_UPCE_CC, -1, 109, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 109, 21, 55, 142, 228, "" }, + /*508*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 109, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 109, 21, 55, 142, 228, "" }, + /*509*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 109.25, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 109.5, 21, 55, 142, 229, "" }, + /*510*/ { BARCODE_UPCE_CC, -1, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", 0, 52.5, 27, 55, 142, 115, "CC-B 23 rows" }, + /*511*/ { BARCODE_UPCE_CC, -1, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", 0, 52.5, 27, 55, 142, 115, "" }, + /*512*/ { BARCODE_UPCE_CC, -1, 121, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", 0, 121, 27, 55, 142, 252, "" }, + /*513*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 121, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", ZINT_WARN_NONCOMPLIANT, 121, 27, 55, 142, 252, "" }, + /*514*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 121.25, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", 0, 121.5, 27, 55, 142, 253, "" }, + /*515*/ { BARCODE_DBAR_STK_CC, -1, -1, "1234567890123", "[20]01", 0, 24, 9, 56, 112, 48, "CC-A 5 rows" }, + /*516*/ { BARCODE_DBAR_STK_CC, -1, 1, "1234567890123", "[20]01", 0, 13, 9, 56, 112, 26, "" }, + /*517*/ { BARCODE_DBAR_STK_CC, -1, 23.9, "1234567890123", "[20]01", 0, 24, 9, 56, 112, 48, "" }, + /*518*/ { BARCODE_DBAR_STK_CC, COMPLIANT_HEIGHT, 23.9, "1234567890123", "[20]01", ZINT_WARN_NONCOMPLIANT, 24, 9, 56, 112, 48, "" }, + /*519*/ { BARCODE_DBAR_STK_CC, COMPLIANT_HEIGHT, 24, "1234567890123", "[20]01", 0, 24, 9, 56, 112, 48, "" }, + /*520*/ { BARCODE_DBAR_STK_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 38, 16, 56, 112, 76, "CC-A 12 rows" }, + /*521*/ { BARCODE_DBAR_STK_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 27, 16, 56, 112, 54, "" }, + /*522*/ { BARCODE_DBAR_STK_CC, -1, 37.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 38, 16, 56, 112, 76, "" }, + /*523*/ { BARCODE_DBAR_STK_CC, COMPLIANT_HEIGHT, 37.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", ZINT_WARN_NONCOMPLIANT, 38, 16, 56, 112, 76, "" }, + /*524*/ { BARCODE_DBAR_STK_CC, COMPLIANT_HEIGHT, 38, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 38, 16, 56, 112, 76, "" }, + /*525*/ { BARCODE_DBAR_STK_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 48, 21, 56, 112, 96, "CC-B 17 rows" }, + /*526*/ { BARCODE_DBAR_STK_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 37, 21, 56, 112, 74, "" }, + /*527*/ { BARCODE_DBAR_STK_CC, -1, 47.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 48, 21, 56, 112, 96, "" }, + /*528*/ { BARCODE_DBAR_STK_CC, COMPLIANT_HEIGHT, 47.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 48, 21, 56, 112, 96, "" }, + /*529*/ { BARCODE_DBAR_STK_CC, COMPLIANT_HEIGHT, 48, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 48, 21, 56, 112, 96, "" }, + /*530*/ { BARCODE_DBAR_OMNSTK_CC, -1, -1, "1234567890123", "[20]01[90]1234567890123456", 0, 82, 12, 56, 112, 164, "CC-A 6 rows" }, + /*531*/ { BARCODE_DBAR_OMNSTK_CC, -1, 1, "1234567890123", "[20]01[90]1234567890123456", 0, 17, 12, 56, 112, 34, "" }, + /*532*/ { BARCODE_DBAR_OMNSTK_CC, -1, 81, "1234567890123", "[20]01[90]1234567890123456", 0, 81, 12, 56, 112, 162, "" }, + /*533*/ { BARCODE_DBAR_OMNSTK_CC, COMPLIANT_HEIGHT, 81, "1234567890123", "[20]01[90]1234567890123456", ZINT_WARN_NONCOMPLIANT, 81, 12, 56, 112, 162, "" }, + /*534*/ { BARCODE_DBAR_OMNSTK_CC, COMPLIANT_HEIGHT, 82, "1234567890123", "[20]01[90]1234567890123456", 0, 82, 12, 56, 112, 164, "" }, + /*535*/ { BARCODE_DBAR_OMNSTK_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567", 0, 94, 18, 56, 112, 188, "CC-A 12 rows" }, + /*536*/ { BARCODE_DBAR_OMNSTK_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567", 0, 29, 18, 56, 112, 58, "" }, + /*537*/ { BARCODE_DBAR_OMNSTK_CC, -1, 93.5, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567", 0, 94, 18, 56, 112, 188, "" }, + /*538*/ { BARCODE_DBAR_OMNSTK_CC, COMPLIANT_HEIGHT, 93.5, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567", ZINT_WARN_NONCOMPLIANT, 94, 18, 56, 112, 188, "" }, + /*539*/ { BARCODE_DBAR_OMNSTK_CC, COMPLIANT_HEIGHT, 94, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567", 0, 94, 18, 56, 112, 188, "" }, + /*540*/ { BARCODE_DBAR_OMNSTK_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 104, 23, 56, 112, 208, "CC-B 17 rows" }, + /*541*/ { BARCODE_DBAR_OMNSTK_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 39, 23, 56, 112, 78, "" }, + /*542*/ { BARCODE_DBAR_OMNSTK_CC, -1, 103, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 103, 23, 56, 112, 206, "" }, + /*543*/ { BARCODE_DBAR_OMNSTK_CC, COMPLIANT_HEIGHT, 103, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", ZINT_WARN_NONCOMPLIANT, 103, 23, 56, 112, 206, "" }, + /*544*/ { BARCODE_DBAR_OMNSTK_CC, COMPLIANT_HEIGHT, 104, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 104, 23, 56, 112, 208, "" }, + /*545*/ { BARCODE_DBAR_EXPSTK_CC, -1, -1, "[01]12345678901231", "[20]01", 0, 78, 9, 102, 204, 156, "3 rows, CC-A 3 rows" }, + /*546*/ { BARCODE_DBAR_EXPSTK_CC, -1, 1, "[01]12345678901231", "[20]01", 0, 11, 9, 102, 204, 22, "" }, + /*547*/ { BARCODE_DBAR_EXPSTK_CC, -1, 77, "[01]12345678901231", "[20]01", 0, 77, 9, 102, 204, 154, "" }, + /*548*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 77, "[01]12345678901231", "[20]01", ZINT_WARN_NONCOMPLIANT, 77, 9, 102, 204, 154, "" }, + /*549*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 78, "[01]12345678901231", "[20]01", 0, 78, 9, 102, 204, 156, "" }, + /*550*/ { BARCODE_DBAR_EXPSTK_CC, -1, -1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", 0, 189, 21, 102, 204, 378, "5 rows, CC-A 3 rows" }, + /*551*/ { BARCODE_DBAR_EXPSTK_CC, -1, 1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", 0, 21.5, 21, 102, 204, 43, "" }, + /*552*/ { BARCODE_DBAR_EXPSTK_CC, -1, 188, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", 0, 189, 21, 102, 204, 378, "" }, + /*553*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 188, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", ZINT_WARN_NONCOMPLIANT, 189, 21, 102, 204, 378, "" }, + /*554*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 189, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", 0, 189, 21, 102, 204, 378, "" }, + /*555*/ { BARCODE_DBAR_EXPSTK_CC, -1, -1, "[01]12345678901231", "[20]01[90]12345678901234567890", 0, 80, 10, 102, 204, 160, "3 rows, CC-A 4 rows" }, + /*556*/ { BARCODE_DBAR_EXPSTK_CC, -1, 1, "[01]12345678901231", "[20]01[90]12345678901234567890", 0, 13, 10, 102, 204, 26, "" }, + /*557*/ { BARCODE_DBAR_EXPSTK_CC, -1, 79, "[01]12345678901231", "[20]01[90]12345678901234567890", 0, 79, 10, 102, 204, 158, "" }, + /*558*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 79, "[01]12345678901231", "[20]01[90]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 79, 10, 102, 204, 158, "" }, + /*559*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 80, "[01]12345678901231", "[20]01[90]12345678901234567890", 0, 80, 10, 102, 204, 160, "" }, + /*560*/ { BARCODE_DBAR_EXPSTK_CC, -1, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 92, 16, 102, 204, 184, "3 rows, CC-B 10 rows" }, + /*561*/ { BARCODE_DBAR_EXPSTK_CC, -1, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 25, 16, 102, 204, 50, "" }, + /*562*/ { BARCODE_DBAR_EXPSTK_CC, -1, 91, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 91, 16, 102, 204, 182, "" }, + /*563*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 91, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 91, 16, 102, 204, 182, "" }, + /*564*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 92, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 92, 16, 102, 204, 184, "" }, + /*565*/ { BARCODE_DBAR_EXPSTK_CC, -1, -1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 203, 28, 102, 204, 406, "5 rows, CC-B 10 rows" }, + /*566*/ { BARCODE_DBAR_EXPSTK_CC, -1, 1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 35.5, 28, 102, 204, 71, "" }, + /*567*/ { BARCODE_DBAR_EXPSTK_CC, -1, 202, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 203, 28, 102, 204, 406, "" }, + /*568*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 202, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 203, 28, 102, 204, 406, "" }, + /*569*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 203, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 203, 28, 102, 204, 406, "" }, + /*570*/ { BARCODE_CHANNEL, -1, 1, "1", "", 0, 1, 1, 19, 38, 2, "" }, + /*571*/ { BARCODE_CHANNEL, -1, 3.75, "123", "", 0, 4, 1, 23, 46, 8, "" }, + /*572*/ { BARCODE_CHANNEL, COMPLIANT_HEIGHT, 3.75, "123", "", ZINT_WARN_NONCOMPLIANT, 4, 1, 23, 46, 8, "Min height data-length dependent" }, + /*573*/ { BARCODE_CHANNEL, COMPLIANT_HEIGHT, 4, "123", "", 0, 4, 1, 23, 46, 8, "" }, + /*574*/ { BARCODE_CODEONE, -1, 1, "12345678901234567890", "", 0, 16, 16, 18, 36, 32, "Fixed height, symbol->height ignored" }, + /*575*/ { BARCODE_GRIDMATRIX, -1, 1, "ABC", "", 0, 18, 18, 18, 36, 36, "Fixed width-to-height ratio, symbol->height ignored" }, + /*576*/ { BARCODE_UPNQR, -1, 1, "1234567890AB", "", 0, 77, 77, 77, 154, 154, "Fixed width-to-height ratio, symbol->height ignored" }, + /*577*/ { BARCODE_ULTRA, -1, 1, "1234567890", "", 0, 13, 13, 18, 36, 26, "Fixed width-to-height ratio, symbol->height ignored" }, + /*578*/ { BARCODE_RMQR, -1, 1, "12345", "", 0, 11, 11, 27, 54, 22, "Fixed width-to-height ratio, symbol->height ignored" }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -2164,6 +2468,9 @@ static void test_height(int index, int generate, int debug) { assert_nonnull(symbol, "Symbol not created\n"); symbol->symbology = data[i].symbology; + if (data[i].output_options != -1) { + symbol->output_options = data[i].output_options; + } if (data[i].height != -1) { symbol->height = data[i].height; } @@ -2189,8 +2496,9 @@ static void test_height(int index, int generate, int debug) { if (index != -1 && (debug & ZINT_DEBUG_TEST_PRINT)) testUtilBitmapPrint(symbol, NULL, NULL); if (generate) { - printf(" /*%3d*/ { %s, %.5g, \"%s\", \"%s\", %s, %.8g, %d, %d, %d, %d, \"%s\" },\n", - i, testUtilBarcodeName(data[i].symbology), data[i].height, data[i].data, data[i].composite, testUtilErrorName(data[i].ret), + printf(" /*%3d*/ { %s, %s, %.5g, \"%s\", \"%s\", %s, %.8g, %d, %d, %d, %d, \"%s\" },\n", + i, testUtilBarcodeName(data[i].symbology), testUtilOutputOptionsName(data[i].output_options), + data[i].height, data[i].data, data[i].composite, testUtilErrorName(data[i].ret), symbol->height, symbol->rows, symbol->width, symbol->bitmap_width, symbol->bitmap_height, data[i].comment); } else { assert_equal(symbol->height, data[i].expected_height, "i:%d (%s) symbol->height %.8g != %.8g\n", i, testUtilBarcodeName(data[i].symbology), symbol->height, data[i].expected_height); diff --git a/backend/tests/test_vector.c b/backend/tests/test_vector.c index eb212280..ea56a9d2 100644 --- a/backend/tests/test_vector.c +++ b/backend/tests/test_vector.c @@ -159,98 +159,98 @@ static void test_buffer_vector(int index, int generate, int debug) { float expected_vector_height; }; struct item data[] = { - /* 0*/ { BARCODE_CODE11, "1234567890", "", 50, 1, 108, 216, 118.9 }, - /* 1*/ { BARCODE_C25STANDARD, "1234567890", "", 50, 1, 117, 234, 118.9 }, - /* 2*/ { BARCODE_C25INTER, "1234567890", "", 50, 1, 99, 198, 118.9 }, - /* 3*/ { BARCODE_C25IATA, "1234567890", "", 50, 1, 149, 298, 118.9 }, - /* 4*/ { BARCODE_C25LOGIC, "1234567890", "", 50, 1, 109, 218, 118.9 }, - /* 5*/ { BARCODE_C25IND, "1234567890", "", 50, 1, 159, 318, 118.9 }, - /* 6*/ { BARCODE_CODE39, "1234567890", "", 50, 1, 155, 310, 118.9 }, - /* 7*/ { BARCODE_EXCODE39, "1234567890", "", 50, 1, 155, 310, 118.9 }, - /* 8*/ { BARCODE_EANX, "123456789012", "", 50, 1, 95, 226, 116.4 }, - /* 9*/ { BARCODE_EANX_CHK, "1234567890128", "", 50, 1, 95, 226, 116.4 }, - /* 10*/ { BARCODE_EANX, "123456789012+12", "", 50, 1, 122, 276, 116.4 }, - /* 11*/ { BARCODE_EANX_CHK, "1234567890128+12", "", 50, 1, 122, 276, 116.4 }, - /* 12*/ { BARCODE_EANX, "123456789012+12345", "", 50, 1, 149, 330, 116.4 }, - /* 13*/ { BARCODE_EANX_CHK, "1234567890128+12345", "", 50, 1, 149, 330, 116.4 }, - /* 14*/ { BARCODE_EANX, "1234567", "", 50, 1, 67, 162, 116.4 }, - /* 15*/ { BARCODE_EANX_CHK, "12345670", "", 50, 1, 67, 162, 116.4 }, - /* 16*/ { BARCODE_EANX, "1234567+12", "", 50, 1, 94, 216, 116.4 }, - /* 17*/ { BARCODE_EANX_CHK, "12345670+12", "", 50, 1, 94, 216, 116.4 }, - /* 18*/ { BARCODE_EANX, "1234567+12345", "", 50, 1, 121, 270, 116.4 }, - /* 19*/ { BARCODE_EANX_CHK, "12345670+12345", "", 50, 1, 121, 270, 116.4 }, - /* 20*/ { BARCODE_EANX, "1234", "", 50, 1, 47, 118, 116.4 }, - /* 21*/ { BARCODE_EANX_CHK, "1234", "", 50, 1, 47, 118, 116.4 }, - /* 22*/ { BARCODE_EANX, "12", "", 50, 1, 20, 64, 116.4 }, - /* 23*/ { BARCODE_EANX_CHK, "12", "", 50, 1, 20, 64, 116.4 }, - /* 24*/ { BARCODE_GS1_128, "[01]12345678901231", "", 50, 1, 134, 268, 118.9 }, - /* 25*/ { BARCODE_CODABAR, "A00000000B", "", 50, 1, 102, 204, 118.9 }, - /* 26*/ { BARCODE_CODE128, "1234567890", "", 50, 1, 90, 180, 118.9 }, - /* 27*/ { BARCODE_DPLEIT, "1234567890123", "", 50, 1, 135, 270, 118.9 }, - /* 28*/ { BARCODE_DPIDENT, "12345678901", "", 50, 1, 117, 234, 118.9 }, + /* 0*/ { BARCODE_CODE11, "1234567890", "", 50, 1, 108, 216, 118.900002 }, + /* 1*/ { BARCODE_C25STANDARD, "1234567890", "", 50, 1, 117, 234, 118.900002 }, + /* 2*/ { BARCODE_C25INTER, "1234567890", "", 50, 1, 99, 198, 118.900002 }, + /* 3*/ { BARCODE_C25IATA, "1234567890", "", 50, 1, 149, 298, 118.900002 }, + /* 4*/ { BARCODE_C25LOGIC, "1234567890", "", 50, 1, 109, 218, 118.900002 }, + /* 5*/ { BARCODE_C25IND, "1234567890", "", 50, 1, 159, 318, 118.900002 }, + /* 6*/ { BARCODE_CODE39, "1234567890", "", 50, 1, 155, 310, 118.900002 }, + /* 7*/ { BARCODE_EXCODE39, "1234567890", "", 50, 1, 155, 310, 118.900002 }, + /* 8*/ { BARCODE_EANX, "123456789012", "", 50, 1, 95, 226, 116.400002 }, + /* 9*/ { BARCODE_EANX_CHK, "1234567890128", "", 50, 1, 95, 226, 116.400002 }, + /* 10*/ { BARCODE_EANX, "123456789012+12", "", 50, 1, 122, 276, 116.400002 }, + /* 11*/ { BARCODE_EANX_CHK, "1234567890128+12", "", 50, 1, 122, 276, 116.400002 }, + /* 12*/ { BARCODE_EANX, "123456789012+12345", "", 50, 1, 149, 330, 116.400002 }, + /* 13*/ { BARCODE_EANX_CHK, "1234567890128+12345", "", 50, 1, 149, 330, 116.400002 }, + /* 14*/ { BARCODE_EANX, "1234567", "", 50, 1, 67, 162, 116.400002 }, + /* 15*/ { BARCODE_EANX_CHK, "12345670", "", 50, 1, 67, 162, 116.400002 }, + /* 16*/ { BARCODE_EANX, "1234567+12", "", 50, 1, 94, 216, 116.400002 }, + /* 17*/ { BARCODE_EANX_CHK, "12345670+12", "", 50, 1, 94, 216, 116.400002 }, + /* 18*/ { BARCODE_EANX, "1234567+12345", "", 50, 1, 121, 270, 116.400002 }, + /* 19*/ { BARCODE_EANX_CHK, "12345670+12345", "", 50, 1, 121, 270, 116.400002 }, + /* 20*/ { BARCODE_EANX, "1234", "", 50, 1, 47, 118, 116.400002 }, + /* 21*/ { BARCODE_EANX_CHK, "1234", "", 50, 1, 47, 118, 116.400002 }, + /* 22*/ { BARCODE_EANX, "12", "", 50, 1, 20, 64, 116.400002 }, + /* 23*/ { BARCODE_EANX_CHK, "12", "", 50, 1, 20, 64, 116.400002 }, + /* 24*/ { BARCODE_GS1_128, "[01]12345678901231", "", 50, 1, 134, 268, 118.900002 }, + /* 25*/ { BARCODE_CODABAR, "A00000000B", "", 50, 1, 102, 204, 118.900002 }, + /* 26*/ { BARCODE_CODE128, "1234567890", "", 50, 1, 90, 180, 118.900002 }, + /* 27*/ { BARCODE_DPLEIT, "1234567890123", "", 50, 1, 135, 270, 118.900002 }, + /* 28*/ { BARCODE_DPIDENT, "12345678901", "", 50, 1, 117, 234, 118.900002 }, /* 29*/ { BARCODE_CODE16K, "1234567890", "", 20, 2, 70, 162, 44 }, /* 30*/ { BARCODE_CODE49, "1234567890", "", 20, 2, 70, 162, 44 }, - /* 31*/ { BARCODE_CODE93, "1234567890", "", 50, 1, 127, 254, 118.9 }, + /* 31*/ { BARCODE_CODE93, "1234567890", "", 50, 1, 127, 254, 118.900002 }, /* 32*/ { BARCODE_FLAT, "1234567890", "", 50, 1, 90, 180, 100 }, - /* 33*/ { BARCODE_DBAR_OMN, "1234567890123", "", 50, 1, 96, 192, 118.9 }, - /* 34*/ { BARCODE_DBAR_LTD, "1234567890123", "", 50, 1, 79, 158, 118.9 }, - /* 35*/ { BARCODE_DBAR_EXP, "[01]12345678901231", "", 34, 1, 134, 268, 86.900002 }, - /* 36*/ { BARCODE_TELEPEN, "1234567890", "", 50, 1, 208, 416, 118.9 }, - /* 37*/ { BARCODE_UPCA, "12345678901", "", 50, 1, 95, 226, 116.4 }, - /* 38*/ { BARCODE_UPCA_CHK, "123456789012", "", 50, 1, 95, 226, 116.4 }, - /* 39*/ { BARCODE_UPCA, "12345678901+12", "", 50, 1, 124, 276, 116.4 }, - /* 40*/ { BARCODE_UPCA_CHK, "123456789012+12", "", 50, 1, 124, 276, 116.4 }, - /* 41*/ { BARCODE_UPCA, "12345678901+12345", "", 50, 1, 151, 330, 116.4 }, - /* 42*/ { BARCODE_UPCA_CHK, "123456789012+12345", "", 50, 1, 151, 330, 116.4 }, - /* 43*/ { BARCODE_UPCE, "1234567", "", 50, 1, 51, 134, 116.4 }, - /* 44*/ { BARCODE_UPCE_CHK, "12345670", "", 50, 1, 51, 134, 116.4 }, - /* 45*/ { BARCODE_UPCE, "1234567+12", "", 50, 1, 78, 184, 116.4 }, - /* 46*/ { BARCODE_UPCE_CHK, "12345670+12", "", 50, 1, 78, 184, 116.4 }, - /* 47*/ { BARCODE_UPCE, "1234567+12345", "", 50, 1, 105, 238, 116.4 }, - /* 48*/ { BARCODE_UPCE_CHK, "12345670+12345", "", 50, 1, 105, 238, 116.4 }, + /* 33*/ { BARCODE_DBAR_OMN, "1234567890123", "", 50, 1, 96, 192, 118.900002 }, + /* 34*/ { BARCODE_DBAR_LTD, "1234567890123", "", 50, 1, 79, 158, 118.900002 }, + /* 35*/ { BARCODE_DBAR_EXP, "[01]12345678901231", "", 34, 1, 134, 268, 86.9000015 }, + /* 36*/ { BARCODE_TELEPEN, "1234567890", "", 50, 1, 208, 416, 118.900002 }, + /* 37*/ { BARCODE_UPCA, "12345678901", "", 50, 1, 95, 226, 116.400002 }, + /* 38*/ { BARCODE_UPCA_CHK, "123456789012", "", 50, 1, 95, 226, 116.400002 }, + /* 39*/ { BARCODE_UPCA, "12345678901+12", "", 50, 1, 124, 276, 116.400002 }, + /* 40*/ { BARCODE_UPCA_CHK, "123456789012+12", "", 50, 1, 124, 276, 116.400002 }, + /* 41*/ { BARCODE_UPCA, "12345678901+12345", "", 50, 1, 151, 330, 116.400002 }, + /* 42*/ { BARCODE_UPCA_CHK, "123456789012+12345", "", 50, 1, 151, 330, 116.400002 }, + /* 43*/ { BARCODE_UPCE, "1234567", "", 50, 1, 51, 134, 116.400002 }, + /* 44*/ { BARCODE_UPCE_CHK, "12345670", "", 50, 1, 51, 134, 116.400002 }, + /* 45*/ { BARCODE_UPCE, "1234567+12", "", 50, 1, 78, 184, 116.400002 }, + /* 46*/ { BARCODE_UPCE_CHK, "12345670+12", "", 50, 1, 78, 184, 116.400002 }, + /* 47*/ { BARCODE_UPCE, "1234567+12345", "", 50, 1, 105, 238, 116.400002 }, + /* 48*/ { BARCODE_UPCE_CHK, "12345670+12345", "", 50, 1, 105, 238, 116.400002 }, /* 49*/ { BARCODE_POSTNET, "12345678901", "", 12, 2, 123, 246, 24 }, - /* 50*/ { BARCODE_MSI_PLESSEY, "1234567890", "", 50, 1, 127, 254, 118.9 }, + /* 50*/ { BARCODE_MSI_PLESSEY, "1234567890", "", 50, 1, 127, 254, 118.900002 }, /* 51*/ { BARCODE_FIM, "A", "", 50, 1, 17, 34, 100 }, - /* 52*/ { BARCODE_LOGMARS, "1234567890", "", 50, 1, 191, 382, 118.9 }, + /* 52*/ { BARCODE_LOGMARS, "1234567890", "", 50, 1, 191, 382, 118.900002 }, /* 53*/ { BARCODE_PHARMA, "123456", "", 50, 1, 58, 116, 100 }, - /* 54*/ { BARCODE_PZN, "123456", "", 50, 1, 142, 284, 118.9 }, + /* 54*/ { BARCODE_PZN, "123456", "", 50, 1, 142, 284, 118.900002 }, /* 55*/ { BARCODE_PHARMA_TWO, "12345678", "", 10, 2, 29, 58, 20 }, /* 56*/ { BARCODE_PDF417, "1234567890", "", 21, 7, 103, 206, 42 }, /* 57*/ { BARCODE_PDF417COMP, "1234567890", "", 21, 7, 69, 138, 42 }, - /* 58*/ { BARCODE_MAXICODE, "1234567890", "", 165, 33, 30, 60, 57.733398 }, + /* 58*/ { BARCODE_MAXICODE, "1234567890", "", 165, 33, 30, 60, 57.7333984 }, /* 59*/ { BARCODE_QRCODE, "1234567890AB", "", 21, 21, 21, 42, 42 }, - /* 60*/ { BARCODE_CODE128B, "1234567890", "", 50, 1, 145, 290, 118.9 }, + /* 60*/ { BARCODE_CODE128B, "1234567890", "", 50, 1, 145, 290, 118.900002 }, /* 61*/ { BARCODE_AUSPOST, "12345678901234567890123", "", 8, 3, 133, 266, 16 }, /* 62*/ { BARCODE_AUSREPLY, "12345678", "", 8, 3, 73, 146, 16 }, /* 63*/ { BARCODE_AUSROUTE, "12345678", "", 8, 3, 73, 146, 16 }, /* 64*/ { BARCODE_AUSREDIRECT, "12345678", "", 8, 3, 73, 146, 16 }, - /* 65*/ { BARCODE_ISBNX, "123456789", "", 50, 1, 95, 226, 116.4 }, - /* 66*/ { BARCODE_ISBNX, "123456789+12", "", 50, 1, 122, 276, 116.4 }, - /* 67*/ { BARCODE_ISBNX, "123456789+12345", "", 50, 1, 149, 330, 116.4 }, + /* 65*/ { BARCODE_ISBNX, "123456789", "", 50, 1, 95, 226, 116.400002 }, + /* 66*/ { BARCODE_ISBNX, "123456789+12", "", 50, 1, 122, 276, 116.400002 }, + /* 67*/ { BARCODE_ISBNX, "123456789+12345", "", 50, 1, 149, 330, 116.400002 }, /* 68*/ { BARCODE_RM4SCC, "1234567890", "", 8, 3, 91, 182, 16 }, /* 69*/ { BARCODE_DATAMATRIX, "ABC", "", 10, 10, 10, 20, 20 }, - /* 70*/ { BARCODE_EAN14, "1234567890123", "", 50, 1, 134, 268, 118.9 }, - /* 71*/ { BARCODE_VIN, "12345678701234567", "", 50, 1, 246, 492, 118.9 }, + /* 70*/ { BARCODE_EAN14, "1234567890123", "", 50, 1, 134, 268, 118.900002 }, + /* 71*/ { BARCODE_VIN, "12345678701234567", "", 50, 1, 246, 492, 118.900002 }, /* 72*/ { BARCODE_CODABLOCKF, "1234567890", "", 20, 2, 101, 242, 44 }, - /* 73*/ { BARCODE_NVE18, "12345678901234567", "", 50, 1, 156, 312, 118.9 }, + /* 73*/ { BARCODE_NVE18, "12345678901234567", "", 50, 1, 156, 312, 118.900002 }, /* 74*/ { BARCODE_JAPANPOST, "1234567890", "", 8, 3, 133, 266, 16 }, - /* 75*/ { BARCODE_KOREAPOST, "123456", "", 50, 1, 167, 334, 118.9 }, + /* 75*/ { BARCODE_KOREAPOST, "123456", "", 50, 1, 167, 334, 118.900002 }, /* 76*/ { BARCODE_DBAR_STK, "1234567890123", "", 13, 3, 50, 100, 26 }, /* 77*/ { BARCODE_DBAR_OMNSTK, "1234567890123", "", 69, 5, 50, 100, 138 }, /* 78*/ { BARCODE_DBAR_EXPSTK, "[01]12345678901231", "", 71, 5, 102, 204, 142 }, /* 79*/ { BARCODE_PLANET, "12345678901", "", 12, 2, 123, 246, 24 }, /* 80*/ { BARCODE_MICROPDF417, "1234567890", "", 12, 6, 82, 164, 24 }, /* 81*/ { BARCODE_USPS_IMAIL, "12345678901234567890", "", 8, 3, 129, 258, 16 }, - /* 82*/ { BARCODE_PLESSEY, "1234567890", "", 50, 1, 227, 454, 118.9 }, - /* 83*/ { BARCODE_TELEPEN_NUM, "1234567890", "", 50, 1, 128, 256, 118.9 }, - /* 84*/ { BARCODE_ITF14, "1234567890", "", 50, 1, 135, 330, 138.89999 }, + /* 82*/ { BARCODE_PLESSEY, "1234567890", "", 50, 1, 227, 454, 118.900002 }, + /* 83*/ { BARCODE_TELEPEN_NUM, "1234567890", "", 50, 1, 128, 256, 118.900002 }, + /* 84*/ { BARCODE_ITF14, "1234567890", "", 50, 1, 135, 330, 138.899994 }, /* 85*/ { BARCODE_KIX, "123456ABCDE", "", 8, 3, 87, 174, 16 }, /* 86*/ { BARCODE_AZTEC, "1234567890AB", "", 15, 15, 15, 30, 30 }, /* 87*/ { BARCODE_DAFT, "DAFTDAFTDAFTDAFT", "", 8, 3, 31, 62, 16 }, - /* 88*/ { BARCODE_DPD, "0123456789012345678901234567", "", 50, 1, 189, 378, 118.9 }, + /* 88*/ { BARCODE_DPD, "0123456789012345678901234567", "", 50, 1, 189, 378, 118.900002 }, /* 89*/ { BARCODE_MICROQR, "12345", "", 11, 11, 11, 22, 22 }, - /* 90*/ { BARCODE_HIBC_128, "1234567890", "", 50, 1, 123, 246, 118.9 }, - /* 91*/ { BARCODE_HIBC_39, "1234567890", "", 50, 1, 223, 446, 118.9 }, + /* 90*/ { BARCODE_HIBC_128, "1234567890", "", 50, 1, 123, 246, 118.900002 }, + /* 91*/ { BARCODE_HIBC_39, "1234567890", "", 50, 1, 223, 446, 118.900002 }, /* 92*/ { BARCODE_HIBC_DM, "ABC", "", 12, 12, 12, 24, 24 }, /* 93*/ { BARCODE_HIBC_QR, "1234567890AB", "", 21, 21, 21, 42, 42 }, /* 94*/ { BARCODE_HIBC_PDF, "1234567890", "", 24, 8, 103, 206, 48 }, @@ -261,27 +261,27 @@ static void test_buffer_vector(int index, int generate, int debug) { /* 99*/ { BARCODE_HANXIN, "1234567890AB", "", 23, 23, 23, 46, 46 }, /*100*/ { BARCODE_MAILMARK, "01000000000000000AA00AA0A", "", 10, 3, 155, 310, 20 }, /*101*/ { BARCODE_AZRUNE, "255", "", 11, 11, 11, 22, 22 }, - /*102*/ { BARCODE_CODE32, "12345678", "", 50, 1, 103, 206, 118.9 }, - /*103*/ { BARCODE_EANX_CC, "123456789012", "[20]01", 50, 7, 99, 234, 116.4 }, - /*104*/ { BARCODE_EANX_CC, "123456789012+12", "[20]01", 50, 7, 126, 284, 116.4 }, - /*105*/ { BARCODE_EANX_CC, "123456789012+12345", "[20]01", 50, 7, 153, 338, 116.4 }, - /*106*/ { BARCODE_EANX_CC, "1234567", "[20]01", 50, 8, 72, 172, 116.4 }, - /*107*/ { BARCODE_EANX_CC, "1234567+12", "[20]01", 50, 8, 99, 226, 116.4 }, - /*108*/ { BARCODE_EANX_CC, "1234567+12345", "[20]01", 50, 8, 126, 280, 116.4 }, - /*109*/ { BARCODE_GS1_128_CC, "[01]12345678901231", "[20]01", 50, 5, 145, 290, 118.9 }, - /*110*/ { BARCODE_DBAR_OMN_CC, "1234567890123", "[20]01", 21, 5, 100, 200, 60.900002 }, - /*111*/ { BARCODE_DBAR_LTD_CC, "1234567890123", "[20]01", 19, 6, 79, 158, 56.900002 }, - /*112*/ { BARCODE_DBAR_EXP_CC, "[01]12345678901231", "[20]01", 41, 5, 134, 268, 100.9 }, - /*113*/ { BARCODE_UPCA_CC, "12345678901", "[20]01", 50, 7, 99, 234, 116.4 }, - /*114*/ { BARCODE_UPCA_CC, "12345678901+12", "[20]01", 50, 7, 128, 284, 116.4 }, - /*115*/ { BARCODE_UPCA_CC, "12345678901+12345", "[20]01", 50, 7, 155, 338, 116.4 }, - /*116*/ { BARCODE_UPCE_CC, "1234567", "[20]01", 50, 9, 55, 142, 116.4 }, - /*117*/ { BARCODE_UPCE_CC, "1234567+12", "[20]01", 50, 9, 82, 192, 116.4 }, - /*118*/ { BARCODE_UPCE_CC, "1234567+12345", "[20]01", 50, 9, 109, 246, 116.4 }, + /*102*/ { BARCODE_CODE32, "12345678", "", 50, 1, 103, 206, 118.900002 }, + /*103*/ { BARCODE_EANX_CC, "123456789012", "[20]01", 50, 7, 99, 234, 116.400002 }, + /*104*/ { BARCODE_EANX_CC, "123456789012+12", "[20]01", 50, 7, 126, 284, 116.400002 }, + /*105*/ { BARCODE_EANX_CC, "123456789012+12345", "[20]01", 50, 7, 153, 338, 116.400002 }, + /*106*/ { BARCODE_EANX_CC, "1234567", "[20]01", 50, 8, 72, 172, 116.400002 }, + /*107*/ { BARCODE_EANX_CC, "1234567+12", "[20]01", 50, 8, 99, 226, 116.400002 }, + /*108*/ { BARCODE_EANX_CC, "1234567+12345", "[20]01", 50, 8, 126, 280, 116.400002 }, + /*109*/ { BARCODE_GS1_128_CC, "[01]12345678901231", "[20]01", 50, 5, 145, 290, 118.900002 }, + /*110*/ { BARCODE_DBAR_OMN_CC, "1234567890123", "[20]01", 21, 5, 100, 200, 60.9000015 }, + /*111*/ { BARCODE_DBAR_LTD_CC, "1234567890123", "[20]01", 19, 6, 79, 158, 56.9000015 }, + /*112*/ { BARCODE_DBAR_EXP_CC, "[01]12345678901231", "[20]01", 41, 5, 134, 268, 100.900002 }, + /*113*/ { BARCODE_UPCA_CC, "12345678901", "[20]01", 50, 7, 99, 234, 116.400002 }, + /*114*/ { BARCODE_UPCA_CC, "12345678901+12", "[20]01", 50, 7, 128, 284, 116.400002 }, + /*115*/ { BARCODE_UPCA_CC, "12345678901+12345", "[20]01", 50, 7, 155, 338, 116.400002 }, + /*116*/ { BARCODE_UPCE_CC, "1234567", "[20]01", 50, 9, 55, 142, 116.400002 }, + /*117*/ { BARCODE_UPCE_CC, "1234567+12", "[20]01", 50, 9, 82, 192, 116.400002 }, + /*118*/ { BARCODE_UPCE_CC, "1234567+12345", "[20]01", 50, 9, 109, 246, 116.400002 }, /*119*/ { BARCODE_DBAR_STK_CC, "1234567890123", "[20]01", 24, 9, 56, 112, 48 }, /*120*/ { BARCODE_DBAR_OMNSTK_CC, "1234567890123", "[20]01", 80, 11, 56, 112, 160 }, /*121*/ { BARCODE_DBAR_EXPSTK_CC, "[01]12345678901231", "[20]01", 78, 9, 102, 204, 156 }, - /*122*/ { BARCODE_CHANNEL, "01", "", 50, 1, 19, 38, 118.9 }, + /*122*/ { BARCODE_CHANNEL, "01", "", 50, 1, 19, 38, 118.900002 }, /*123*/ { BARCODE_CODEONE, "12345678901234567890", "", 16, 16, 18, 36, 32 }, /*124*/ { BARCODE_GRIDMATRIX, "ABC", "", 18, 18, 18, 36, 36 }, /*125*/ { BARCODE_UPNQR, "1234567890AB", "", 77, 77, 77, 154, 154 }, @@ -1350,6 +1350,7 @@ static void test_height(int index, int generate, int debug) { struct item { int symbology; + int output_options; float height; char *data; char *composite; @@ -1364,408 +1365,585 @@ static void test_height(int index, int generate, int debug) { const char *comment; }; struct item data[] = { - /* 0*/ { BARCODE_CODE11, 1, "1234567890", "", 0, 1, 1, 108, 216, 2, "" }, - /* 1*/ { BARCODE_CODE11, 4, "1234567890", "", 0, 4, 1, 108, 216, 8, "" }, - /* 2*/ { BARCODE_CODE11, 10, "1234567890", "", 0, 10, 1, 108, 216, 20, "" }, - /* 3*/ { BARCODE_C25STANDARD, 1, "1234567890", "", 0, 1, 1, 117, 234, 2, "" }, - /* 4*/ { BARCODE_C25STANDARD, 4, "1234567890", "", 0, 4, 1, 117, 234, 8, "" }, - /* 5*/ { BARCODE_C25STANDARD, 11, "1234567890", "", 0, 11, 1, 117, 234, 22, "" }, - /* 6*/ { BARCODE_C25INTER, 1, "1234567890", "", 0, 1, 1, 99, 198, 2, "" }, - /* 7*/ { BARCODE_C25INTER, 4, "1234567890", "", 0, 4, 1, 99, 198, 8, "" }, - /* 8*/ { BARCODE_C25INTER, 15, "1234567890", "", 0, 15, 1, 99, 198, 30, "" }, - /* 9*/ { BARCODE_C25IATA, 1, "1234567890", "", 0, 1, 1, 149, 298, 2, "" }, - /* 10*/ { BARCODE_C25IATA, 4, "1234567890", "", 0, 4, 1, 149, 298, 8, "" }, - /* 11*/ { BARCODE_C25IATA, 30, "1234567890", "", 0, 30, 1, 149, 298, 60, "" }, - /* 12*/ { BARCODE_C25LOGIC, 1, "1234567890", "", 0, 1, 1, 109, 218, 2, "" }, - /* 13*/ { BARCODE_C25LOGIC, 4, "1234567890", "", 0, 4, 1, 109, 218, 8, "" }, - /* 14*/ { BARCODE_C25LOGIC, 41, "1234567890", "", 0, 41, 1, 109, 218, 82, "" }, - /* 15*/ { BARCODE_C25IND, 1, "1234567890", "", 0, 1, 1, 159, 318, 2, "" }, - /* 16*/ { BARCODE_C25IND, 4, "1234567890", "", 0, 4, 1, 159, 318, 8, "" }, - /* 17*/ { BARCODE_C25IND, 21, "1234567890", "", 0, 21, 1, 159, 318, 42, "" }, - /* 18*/ { BARCODE_CODE39, 1, "1234567890", "", 0, 1, 1, 155, 310, 2, "" }, - /* 19*/ { BARCODE_CODE39, 4, "1", "", 0, 4, 1, 38, 76, 8, "" }, - /* 20*/ { BARCODE_CODE39, 17, "1234567890", "", 0, 17, 1, 155, 310, 34, "" }, - /* 21*/ { BARCODE_EXCODE39, 1, "1234567890", "", 0, 1, 1, 155, 310, 2, "" }, - /* 22*/ { BARCODE_EXCODE39, 4, "1234567890", "", 0, 4, 1, 155, 310, 8, "" }, - /* 23*/ { BARCODE_EXCODE39, 17, "1234567890", "", 0, 17, 1, 155, 310, 34, "" }, - /* 24*/ { BARCODE_EANX, 1, "123456789012", "", 0, 1, 1, 95, 226, 12, "EAN-13" }, - /* 25*/ { BARCODE_EANX, 4, "123456789012", "", 0, 4, 1, 95, 226, 18, "" }, - /* 26*/ { BARCODE_EANX, 69, "123456789012", "", 0, 69, 1, 95, 226, 148, "" }, - /* 27*/ { BARCODE_EANX, 55, "1234567", "", 0, 55, 1, 67, 162, 120, "EAN-8" }, - /* 28*/ { BARCODE_EANX, 66, "12345", "", 0, 66, 1, 47, 118, 132, "EAN-8" }, - /* 29*/ { BARCODE_EANX_CHK, 1, "1234567890128", "", 0, 1, 1, 95, 226, 12, "EAN-13" }, - /* 30*/ { BARCODE_EANX_CHK, 69, "1234567890128", "", 0, 69, 1, 95, 226, 148, "" }, - /* 31*/ { BARCODE_GS1_128, 1, "[01]12345678901231", "", 0, 1, 1, 134, 268, 2, "" }, - /* 32*/ { BARCODE_GS1_128, 4, "[01]12345678901231", "", 0, 4, 1, 134, 268, 8, "" }, - /* 33*/ { BARCODE_GS1_128, 5, "[01]12345678901231", "", 0, 5, 1, 134, 268, 10, "" }, - /* 34*/ { BARCODE_GS1_128, 50, "[01]12345678901231", "", 0, 50, 1, 134, 268, 100, "" }, - /* 35*/ { BARCODE_CODABAR, 1, "A0B", "", 0, 1, 1, 32, 64, 2, "" }, - /* 36*/ { BARCODE_CODABAR, 4, "A0B", "", 0, 4, 1, 32, 64, 8, "" }, - /* 37*/ { BARCODE_CODABAR, 26, "A0B", "", 0, 26, 1, 32, 64, 52, "" }, - /* 38*/ { BARCODE_CODE128, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "" }, - /* 39*/ { BARCODE_CODE128, 4, "1234567890", "", 0, 4, 1, 90, 180, 8, "" }, - /* 40*/ { BARCODE_CODE128, 7, "1234567890", "", 0, 7, 1, 90, 180, 14, "" }, - /* 41*/ { BARCODE_DPLEIT, 1, "1234567890123", "", 0, 1, 1, 135, 270, 2, "" }, - /* 42*/ { BARCODE_DPLEIT, 4, "1234567890123", "", 0, 4, 1, 135, 270, 8, "" }, - /* 43*/ { BARCODE_DPIDENT, 1, "12345678901", "", 0, 1, 1, 117, 234, 2, "" }, - /* 44*/ { BARCODE_DPIDENT, 4, "12345678901", "", 0, 4, 1, 117, 234, 8, "" }, - /* 45*/ { BARCODE_CODE16K, -1, "1234567890", "", 0, 20, 2, 70, 162, 44, "2 rows" }, - /* 46*/ { BARCODE_CODE16K, 1, "1234567890", "", 0, 1, 2, 70, 162, 6, "" }, - /* 47*/ { BARCODE_CODE16K, 4, "1234567890", "", 0, 4, 2, 70, 162, 12, "" }, - /* 48*/ { BARCODE_CODE16K, 17, "1234567890", "", 0, 17, 2, 70, 162, 38, "" }, - /* 49*/ { BARCODE_CODE16K, 40, "1234567890", "", 0, 40, 2, 70, 162, 84, "" }, - /* 50*/ { BARCODE_CODE16K, -1, "12345678901234567890123456789012345678901234567890", "", 0, 60, 6, 70, 162, 124, "6 rows" }, - /* 51*/ { BARCODE_CODE16K, 30, "12345678901234567890123456789012345678901234567890", "", 0, 30, 6, 70, 162, 64, "" }, - /* 52*/ { BARCODE_CODE16K, 120, "12345678901234567890123456789012345678901234567890", "", 0, 120, 6, 70, 162, 244, "" }, - /* 53*/ { BARCODE_CODE49, -1, "1234567890", "", 0, 20, 2, 70, 162, 44, "2 rows" }, - /* 54*/ { BARCODE_CODE49, 1, "1234567890", "", 0, 1, 2, 70, 162, 6, "" }, - /* 55*/ { BARCODE_CODE49, 4, "1234567890", "", 0, 4, 2, 70, 162, 12, "" }, - /* 56*/ { BARCODE_CODE49, 18, "1234567890", "", 0, 18, 2, 70, 162, 40, "" }, - /* 57*/ { BARCODE_CODE49, 40, "1234567890", "", 0, 40, 2, 70, 162, 84, "" }, - /* 58*/ { BARCODE_CODE49, -1, "12345678901234567890", "", 0, 30, 3, 70, 162, 64, "3 rows" }, - /* 59*/ { BARCODE_CODE49, 15, "12345678901234567890", "", 0, 15, 3, 70, 162, 34, "" }, - /* 60*/ { BARCODE_CODE49, 45, "12345678901234567890", "", 0, 45, 3, 70, 162, 94, "" }, - /* 61*/ { BARCODE_CODE93, 1, "1234567890", "", 0, 1, 1, 127, 254, 2, "" }, - /* 62*/ { BARCODE_CODE93, 4, "1234567890", "", 0, 4, 1, 127, 254, 8, "" }, - /* 63*/ { BARCODE_CODE93, 26, "1234567890", "", 0, 26, 1, 127, 254, 52, "" }, - /* 64*/ { BARCODE_FLAT, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "" }, - /* 65*/ { BARCODE_FLAT, 4, "1234567890", "", 0, 4, 1, 90, 180, 8, "" }, - /* 66*/ { BARCODE_DBAR_OMN, 1, "1234567890123", "", 0, 1, 1, 96, 192, 2, "" }, - /* 67*/ { BARCODE_DBAR_OMN, 4, "1234567890123", "", 0, 4, 1, 96, 192, 8, "" }, - /* 68*/ { BARCODE_DBAR_OMN, 12, "1234567890123", "", 0, 12, 1, 96, 192, 24, "" }, - /* 69*/ { BARCODE_DBAR_OMN, 33, "1234567890123", "", 0, 33, 1, 96, 192, 66, "" }, - /* 70*/ { BARCODE_DBAR_LTD, 1, "1234567890123", "", 0, 1, 1, 79, 158, 2, "" }, - /* 71*/ { BARCODE_DBAR_LTD, 4, "1234567890123", "", 0, 4, 1, 79, 158, 8, "" }, - /* 72*/ { BARCODE_DBAR_LTD, 9, "1234567890123", "", 0, 9, 1, 79, 158, 18, "" }, - /* 73*/ { BARCODE_DBAR_LTD, 10, "1234567890123", "", 0, 10, 1, 79, 158, 20, "" }, - /* 74*/ { BARCODE_DBAR_EXP, 1, "[01]12345678901231", "", 0, 1, 1, 134, 268, 2, "" }, - /* 75*/ { BARCODE_DBAR_EXP, 33, "[01]12345678901231", "", 0, 33, 1, 134, 268, 66, "" }, - /* 76*/ { BARCODE_DBAR_EXP, 34, "[01]12345678901231", "", 0, 34, 1, 134, 268, 68, "" }, - /* 77*/ { BARCODE_TELEPEN, 1, "1234567890", "", 0, 1, 1, 208, 416, 2, "" }, - /* 78*/ { BARCODE_TELEPEN, 4, "1234567890", "", 0, 4, 1, 208, 416, 8, "" }, - /* 79*/ { BARCODE_UPCA, 1, "12345678901", "", 0, 1, 1, 95, 226, 12, "" }, - /* 80*/ { BARCODE_UPCA, 4, "12345678901", "", 0, 4, 1, 95, 226, 18, "" }, - /* 81*/ { BARCODE_UPCA, 69, "12345678901", "", 0, 69, 1, 95, 226, 148, "" }, - /* 82*/ { BARCODE_UPCA_CHK, 1, "123456789012", "", 0, 1, 1, 95, 226, 12, "" }, - /* 83*/ { BARCODE_UPCE, 1, "1234567", "", 0, 1, 1, 51, 134, 12, "" }, - /* 84*/ { BARCODE_UPCE, 4, "1234567", "", 0, 4, 1, 51, 134, 18, "" }, - /* 85*/ { BARCODE_UPCE, 69, "1234567", "", 0, 69, 1, 51, 134, 148, "" }, - /* 86*/ { BARCODE_UPCE_CHK, 1, "12345670", "", 0, 1, 1, 51, 134, 12, "" }, - /* 87*/ { BARCODE_POSTNET, -1, "12345678901", "", 0, 12, 2, 123, 246, 24, "" }, - /* 88*/ { BARCODE_POSTNET, 1, "12345678901", "", 0, 1, 2, 123, 246, 2, "" }, - /* 89*/ { BARCODE_POSTNET, 4, "12345678901", "", 0, 4, 2, 123, 246, 8, "" }, - /* 90*/ { BARCODE_POSTNET, 9, "12345678901", "", 0, 9, 2, 123, 246, 18, "" }, - /* 91*/ { BARCODE_POSTNET, 20, "12345678901", "", 0, 20, 2, 123, 246, 40, "" }, - /* 92*/ { BARCODE_MSI_PLESSEY, 1, "1234567890", "", 0, 1, 1, 127, 254, 2, "" }, - /* 93*/ { BARCODE_MSI_PLESSEY, 4, "1234567890", "", 0, 4, 1, 127, 254, 8, "" }, - /* 94*/ { BARCODE_FIM, 1, "A", "", 0, 1, 1, 17, 34, 2, "" }, - /* 95*/ { BARCODE_FIM, 4, "A", "", 0, 4, 1, 17, 34, 8, "" }, - /* 96*/ { BARCODE_FIM, 12, "A", "", 0, 12, 1, 17, 34, 24, "" }, - /* 97*/ { BARCODE_LOGMARS, 1, "1234567890", "", 0, 1, 1, 191, 382, 2, "" }, - /* 98*/ { BARCODE_LOGMARS, 4, "1234567890", "", 0, 4, 1, 191, 382, 8, "" }, - /* 99*/ { BARCODE_LOGMARS, 6, "1234567890", "", 0, 6, 1, 191, 382, 12, "" }, - /*100*/ { BARCODE_LOGMARS, 45, "1234567890", "", 0, 45, 1, 191, 382, 90, "" }, - /*101*/ { BARCODE_PHARMA, 1, "123456", "", 0, 1, 1, 58, 116, 2, "" }, - /*102*/ { BARCODE_PHARMA, 4, "123456", "", 0, 4, 1, 58, 116, 8, "" }, - /*103*/ { BARCODE_PHARMA, 15, "123456", "", 0, 15, 1, 58, 116, 30, "" }, - /*104*/ { BARCODE_PHARMA, 16, "123456", "", 0, 16, 1, 58, 116, 32, "" }, - /*105*/ { BARCODE_PZN, 1, "123456", "", 0, 1, 1, 142, 284, 2, "" }, - /*106*/ { BARCODE_PZN, 4, "123456", "", 0, 4, 1, 142, 284, 8, "" }, - /*107*/ { BARCODE_PZN, 17, "123456", "", 0, 17, 1, 142, 284, 34, "" }, - /*108*/ { BARCODE_PZN, 106, "123456", "", 0, 106, 1, 142, 284, 212, "" }, - /*109*/ { BARCODE_PHARMA_TWO, -1, "12345678", "", 0, 10, 2, 29, 58, 20, "" }, - /*110*/ { BARCODE_PHARMA_TWO, 1, "12345678", "", 0, 1, 2, 29, 58, 2, "" }, - /*111*/ { BARCODE_PHARMA_TWO, 4, "12345678", "", 0, 4, 2, 29, 58, 8, "" }, - /*112*/ { BARCODE_PHARMA_TWO, 15, "12345678", "", 0, 15, 2, 29, 58, 30, "" }, - /*113*/ { BARCODE_PHARMA_TWO, 20, "12345678", "", 0, 20, 2, 29, 58, 40, "" }, - /*114*/ { BARCODE_PHARMA_TWO, 30, "12345678", "", 0, 30, 2, 29, 58, 60, "" }, - /*115*/ { BARCODE_PDF417, 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 4, 8, 120, 240, 8, "8 rows" }, - /*116*/ { BARCODE_PDF417, 4, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 4, 8, 120, 240, 8, "" }, - /*117*/ { BARCODE_PDF417, 23, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 23, 8, 120, 240, 46, "" }, - /*118*/ { BARCODE_PDF417, 24, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 24, 8, 120, 240, 48, "" }, - /*119*/ { BARCODE_PDF417, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 36, 12, 120, 240, 72, "12 rows" }, - /*120*/ { BARCODE_PDF417, 12, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 12, 12, 120, 240, 24, "" }, - /*121*/ { BARCODE_PDF417COMP, 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ", "", ZINT_WARN_NONCOMPLIANT, 4.5, 9, 86, 172, 9, "9 rows" }, - /*122*/ { BARCODE_PDF417COMP, 24, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ", "", ZINT_WARN_NONCOMPLIANT, 24, 9, 86, 172, 48, "" }, - /*123*/ { BARCODE_MAXICODE, 1, "1234567890", "", 0, 16.5, 33, 30, 60, 57.733398, "Fixed size, symbol->height ignored" }, - /*124*/ { BARCODE_QRCODE, 1, "ABCD", "", 0, 21, 21, 21, 42, 42, "Fixed width-to-height ratio, symbol->height ignored" }, - /*125*/ { BARCODE_CODE128B, 1, "1234567890", "", 0, 1, 1, 145, 290, 2, "" }, - /*126*/ { BARCODE_CODE128B, 4, "1234567890", "", 0, 4, 1, 145, 290, 8, "" }, - /*127*/ { BARCODE_AUSPOST, -1, "12345678901234567890123", "", 0, 8, 3, 133, 266, 16, "" }, - /*128*/ { BARCODE_AUSPOST, 1, "12345678901234567890123", "", 0, 2, 3, 133, 266, 4, "" }, - /*129*/ { BARCODE_AUSPOST, 4, "12345678901234567890123", "", 0, 4, 3, 133, 266, 8, "" }, - /*130*/ { BARCODE_AUSPOST, 7, "12345678901234567890123", "", 0, 7, 3, 133, 266, 14, "" }, - /*131*/ { BARCODE_AUSPOST, 14, "12345678901234567890123", "", 0, 14, 3, 133, 266, 28, "" }, - /*132*/ { BARCODE_AUSREPLY, 14, "12345678", "", 0, 14, 3, 73, 146, 28, "" }, - /*133*/ { BARCODE_AUSROUTE, 7, "12345678", "", 0, 7, 3, 73, 146, 14, "" }, - /*134*/ { BARCODE_AUSREDIRECT, 14, "12345678", "", 0, 14, 3, 73, 146, 28, "" }, - /*135*/ { BARCODE_ISBNX, 1, "123456789", "", 0, 1, 1, 95, 226, 12, "" }, - /*136*/ { BARCODE_ISBNX, 4, "123456789", "", 0, 4, 1, 95, 226, 18, "" }, - /*137*/ { BARCODE_ISBNX, 69, "123456789", "", 0, 69, 1, 95, 226, 148, "" }, - /*138*/ { BARCODE_RM4SCC, -1, "1234567890", "", 0, 8, 3, 91, 182, 16, "" }, - /*139*/ { BARCODE_RM4SCC, 1, "1234567890", "", 0, 2, 3, 91, 182, 4, "" }, - /*140*/ { BARCODE_RM4SCC, 4, "1234567890", "", 0, 4, 3, 91, 182, 8, "" }, - /*141*/ { BARCODE_RM4SCC, 6, "1234567890", "", 0, 6, 3, 91, 182, 12, "" }, - /*142*/ { BARCODE_RM4SCC, 11, "1234567890", "", 0, 11, 3, 91, 182, 22, "" }, - /*143*/ { BARCODE_RM4SCC, 16, "1234567890", "", 0, 16, 3, 91, 182, 32, "" }, - /*144*/ { BARCODE_DATAMATRIX, 1, "ABCD", "", 0, 12, 12, 12, 24, 24, "Fixed width-to-height ratio, symbol->height ignored" }, - /*145*/ { BARCODE_EAN14, 1, "1234567890123", "", 0, 1, 1, 134, 268, 2, "" }, - /*146*/ { BARCODE_EAN14, 4, "1234567890123", "", 0, 4, 1, 134, 268, 8, "" }, - /*147*/ { BARCODE_EAN14, 5, "1234567890123", "", 0, 5, 1, 134, 268, 10, "" }, - /*148*/ { BARCODE_VIN, 1, "12345678701234567", "", 0, 1, 1, 246, 492, 2, "" }, - /*149*/ { BARCODE_VIN, 4, "12345678701234567", "", 0, 4, 1, 246, 492, 8, "" }, - /*150*/ { BARCODE_CODABLOCKF, -1, "1234567890", "", 0, 20, 2, 101, 242, 44, "2 rows" }, - /*151*/ { BARCODE_CODABLOCKF, 1, "1234567890", "", 0, 1, 2, 101, 242, 6, "" }, - /*152*/ { BARCODE_CODABLOCKF, 4, "1234567890", "", 0, 4, 2, 101, 242, 12, "" }, - /*153*/ { BARCODE_CODABLOCKF, 30, "1234567890", "", 0, 30, 2, 101, 242, 64, "" }, - /*154*/ { BARCODE_CODABLOCKF, -1, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 110, 11, 156, 352, 224, "11 rows, 14 cols" }, - /*155*/ { BARCODE_CODABLOCKF, 88, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 88, 11, 156, 352, 180, "" }, - /*156*/ { BARCODE_CODABLOCKF, 220, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 220, 11, 156, 352, 444, "" }, - /*157*/ { BARCODE_CODABLOCKF, -1, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv", "", 0, 110, 11, 167, 374, 224, "11 rows, 15 cols" }, - /*158*/ { BARCODE_CODABLOCKF, 88, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv", "", 0, 88, 11, 167, 374, 180, "" }, - /*159*/ { BARCODE_NVE18, 1, "12345678901234567", "", 0, 1, 1, 156, 312, 2, "" }, - /*160*/ { BARCODE_NVE18, 4, "12345678901234567", "", 0, 4, 1, 156, 312, 8, "" }, - /*161*/ { BARCODE_NVE18, 6, "12345678901234567", "", 0, 6, 1, 156, 312, 12, "" }, - /*162*/ { BARCODE_JAPANPOST, -1, "1234567890", "", 0, 8, 3, 133, 266, 16, "" }, - /*163*/ { BARCODE_JAPANPOST, 1, "1234567890", "", 0, 2, 3, 133, 266, 4, "" }, - /*164*/ { BARCODE_JAPANPOST, 4, "1234567890", "", 0, 4, 3, 133, 266, 8, "" }, - /*165*/ { BARCODE_JAPANPOST, 7, "1234567890", "", 0, 7, 3, 133, 266, 14, "" }, - /*166*/ { BARCODE_JAPANPOST, 16, "1234567890", "", 0, 16, 3, 133, 266, 32, "" }, - /*167*/ { BARCODE_KOREAPOST, 1, "123456", "", 0, 1, 1, 167, 334, 2, "" }, - /*168*/ { BARCODE_KOREAPOST, 4, "123456", "", 0, 4, 1, 167, 334, 8, "" }, - /*169*/ { BARCODE_DBAR_STK, -1, "1234567890123", "", 0, 13, 3, 50, 100, 26, "" }, - /*170*/ { BARCODE_DBAR_STK, 1, "1234567890123", "", 0, 2.2, 3, 50, 100, 4.4000001, "" }, - /*171*/ { BARCODE_DBAR_STK, 4, "1234567890123", "", 0, 4, 3, 50, 100, 8, "" }, - /*172*/ { BARCODE_DBAR_STK, 12, "1234567890123", "", 0, 12, 3, 50, 100, 24, "" }, - /*173*/ { BARCODE_DBAR_STK, 13, "1234567890123", "", 0, 13, 3, 50, 100, 26, "" }, - /*174*/ { BARCODE_DBAR_STK, 24, "1234567890123", "", 0, 24, 3, 50, 100, 48, "" }, - /*175*/ { BARCODE_DBAR_STK, 26, "1234567890123", "", 0, 26, 3, 50, 100, 52, "" }, - /*176*/ { BARCODE_DBAR_OMNSTK, -1, "1234567890123", "", 0, 69, 5, 50, 100, 138, "" }, - /*177*/ { BARCODE_DBAR_OMNSTK, 1, "1234567890123", "", 0, 4, 5, 50, 100, 8, "" }, - /*178*/ { BARCODE_DBAR_OMNSTK, 4, "1234567890123", "", 0, 4, 5, 50, 100, 8, "" }, - /*179*/ { BARCODE_DBAR_OMNSTK, 68, "1234567890123", "", 0, 68, 5, 50, 100, 136, "" }, - /*180*/ { BARCODE_DBAR_OMNSTK, 69, "1234567890123", "", 0, 69, 5, 50, 100, 138, "" }, - /*181*/ { BARCODE_DBAR_OMNSTK, 150, "1234567890123", "", 0, 150, 5, 50, 100, 300, "" }, - /*182*/ { BARCODE_DBAR_EXPSTK, -1, "[01]12345678901231", "", 0, 71, 5, 102, 204, 142, "2 rows" }, - /*183*/ { BARCODE_DBAR_EXPSTK, 1, "[01]12345678901231", "", 0, 4, 5, 102, 204, 8, "" }, - /*184*/ { BARCODE_DBAR_EXPSTK, 4, "[01]12345678901231", "", 0, 4, 5, 102, 204, 8, "" }, - /*185*/ { BARCODE_DBAR_EXPSTK, 71, "[01]12345678901231", "", 0, 71, 5, 102, 204, 142, "" }, - /*186*/ { BARCODE_DBAR_EXPSTK, 76, "[01]12345678901231", "", 0, 76, 5, 102, 204, 152, "" }, - /*187*/ { BARCODE_DBAR_EXPSTK, -1, "[01]09501101530003[3920]123456789012345", "", 0, 108, 9, 102, 204, 216, "3 rows" }, - /*188*/ { BARCODE_DBAR_EXPSTK, 1, "[01]09501101530003[3920]123456789012345", "", 0, 7.5, 9, 102, 204, 15, "" }, - /*189*/ { BARCODE_DBAR_EXPSTK, 54, "[01]09501101530003[3920]123456789012345", "", 0, 54, 9, 102, 204, 108, "" }, - /*190*/ { BARCODE_DBAR_EXPSTK, 90, "[01]09501101530003[3920]123456789012345", "", 0, 90, 9, 102, 204, 180, "" }, - /*191*/ { BARCODE_DBAR_EXPSTK, 160, "[01]09501101530003[3920]123456789012345", "", 0, 160, 9, 102, 204, 320, "" }, - /*192*/ { BARCODE_PLANET, -1, "12345678901", "", 0, 12, 2, 123, 246, 24, "" }, - /*193*/ { BARCODE_PLANET, 1, "12345678901", "", 0, 1, 2, 123, 246, 2, "" }, - /*194*/ { BARCODE_PLANET, 4, "12345678901", "", 0, 4, 2, 123, 246, 8, "" }, - /*195*/ { BARCODE_PLANET, 9, "12345678901", "", 0, 9, 2, 123, 246, 18, "" }, - /*196*/ { BARCODE_PLANET, 24, "12345678901", "", 0, 24, 2, 123, 246, 48, "" }, - /*197*/ { BARCODE_MICROPDF417, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 20, 10, 82, 164, 40, "10 rows" }, - /*198*/ { BARCODE_MICROPDF417, 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 5, 10, 82, 164, 10, "" }, - /*199*/ { BARCODE_MICROPDF417, 4, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 5, 10, 82, 164, 10, "" }, - /*200*/ { BARCODE_MICROPDF417, 19, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 19, 10, 82, 164, 38, "" }, - /*201*/ { BARCODE_MICROPDF417, 30, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 30, 10, 82, 164, 60, "" }, - /*202*/ { BARCODE_MICROPDF417, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 40, 20, 55, 110, 80, "20 rows" }, - /*203*/ { BARCODE_MICROPDF417, 20, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 20, 20, 55, 110, 40, "" }, - /*204*/ { BARCODE_USPS_IMAIL, -1, "12345678901234567890", "", 0, 8, 3, 129, 258, 16, "" }, - /*205*/ { BARCODE_USPS_IMAIL, 1, "12345678901234567890", "", 0, 2, 3, 129, 258, 4, "" }, - /*206*/ { BARCODE_USPS_IMAIL, 4, "12345678901234567890", "", 0, 4, 3, 129, 258, 8, "" }, - /*207*/ { BARCODE_USPS_IMAIL, 7, "12345678901234567890", "", 0, 7, 3, 129, 258, 14, "" }, - /*208*/ { BARCODE_PLESSEY, 1, "1234567890", "", 0, 1, 1, 227, 454, 2, "" }, - /*209*/ { BARCODE_PLESSEY, 4, "1234567890", "", 0, 4, 1, 227, 454, 8, "" }, - /*210*/ { BARCODE_TELEPEN_NUM, 1, "1234567890", "", 0, 1, 1, 128, 256, 2, "" }, - /*211*/ { BARCODE_TELEPEN_NUM, 4, "1234567890", "", 0, 4, 1, 128, 256, 8, "" }, - /*212*/ { BARCODE_ITF14, 1, "1234567890", "", 0, 1, 1, 135, 330, 22, "" }, - /*213*/ { BARCODE_ITF14, 4, "1234567890", "", 0, 4, 1, 135, 330, 28, "" }, - /*214*/ { BARCODE_ITF14, 64, "1234567890", "", 0, 64, 1, 135, 330, 148, "" }, - /*215*/ { BARCODE_KIX, -1, "1234567890", "", 0, 8, 3, 79, 158, 16, "" }, - /*216*/ { BARCODE_KIX, 1, "1234567890", "", 0, 2, 3, 79, 158, 4, "" }, - /*217*/ { BARCODE_KIX, 4, "1234567890", "", 0, 4, 3, 79, 158, 8, "" }, - /*218*/ { BARCODE_KIX, 6, "1234567890", "", 0, 6, 3, 79, 158, 12, "" }, - /*219*/ { BARCODE_KIX, 10, "1234567890", "", 0, 10, 3, 79, 158, 20, "" }, - /*220*/ { BARCODE_KIX, 16, "1234567890", "", 0, 16, 3, 79, 158, 32, "" }, - /*221*/ { BARCODE_AZTEC, 1, "1234567890AB", "", 0, 15, 15, 15, 30, 30, "Fixed width-to-height ratio, symbol->height ignored" }, - /*222*/ { BARCODE_DAFT, -1, "DAFTDAFTDAFTDAFT", "", 0, 8, 3, 31, 62, 16, "" }, - /*223*/ { BARCODE_DAFT, 1, "DAFTDAFTDAFTDAFT", "", 0, 2, 3, 31, 62, 4, "" }, - /*224*/ { BARCODE_DAFT, 4, "DAFTDAFTDAFTDAFT", "", 0, 4, 3, 31, 62, 8, "" }, - /*225*/ { BARCODE_DAFT, 6, "DAFTDAFTDAFTDAFT", "", 0, 6, 3, 31, 62, 12, "" }, - /*226*/ { BARCODE_DAFT, 12, "DAFTDAFTDAFTDAFT", "", 0, 12, 3, 31, 62, 24, "" }, - /*227*/ { BARCODE_DAFT, 16, "DAFTDAFTDAFTDAFT", "", 0, 16, 3, 31, 62, 32, "" }, - /*228*/ { BARCODE_DPD, 1, "0123456789012345678901234567", "", 0, 1, 1, 189, 378, 2, "" }, - /*229*/ { BARCODE_DPD, 4, "0123456789012345678901234567", "", 0, 4, 1, 189, 378, 8, "" }, - /*230*/ { BARCODE_DPD, 62, "0123456789012345678901234567", "", 0, 62, 1, 189, 378, 124, "" }, - /*231*/ { BARCODE_MICROQR, 1, "12345", "", 0, 11, 11, 11, 22, 22, "Fixed width-to-height ratio, symbol->height ignored" }, - /*232*/ { BARCODE_HIBC_128, 1, "1234567890", "", 0, 1, 1, 123, 246, 2, "" }, - /*233*/ { BARCODE_HIBC_128, 4, "1234567890", "", 0, 4, 1, 123, 246, 8, "" }, - /*234*/ { BARCODE_HIBC_39, 1, "1234567890", "", 0, 1, 1, 223, 446, 2, "" }, - /*235*/ { BARCODE_HIBC_39, 4, "1234567890", "", 0, 4, 1, 223, 446, 8, "" }, - /*236*/ { BARCODE_HIBC_DM, 1, "ABC", "", 0, 12, 12, 12, 24, 24, "Fixed width-to-height ratio, symbol->height ignored" }, - /*237*/ { BARCODE_HIBC_QR, 1, "1234567890AB", "", 0, 21, 21, 21, 42, 42, "Fixed width-to-height ratio, symbol->height ignored" }, - /*238*/ { BARCODE_HIBC_PDF, -1, "ABCDEF", "", 0, 21, 7, 103, 206, 42, "7 rows" }, - /*239*/ { BARCODE_HIBC_PDF, 1, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 3.5, 7, 103, 206, 7, "" }, - /*240*/ { BARCODE_HIBC_PDF, 4, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 4, 7, 103, 206, 8, "" }, - /*241*/ { BARCODE_HIBC_PDF, 36, "ABCDEF", "", 0, 36, 7, 103, 206, 72, "" }, - /*242*/ { BARCODE_HIBC_MICPDF, -1, "ABCDEF", "", 0, 12, 6, 82, 164, 24, "6 rows" }, - /*243*/ { BARCODE_HIBC_MICPDF, 1, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 3, 6, 82, 164, 6, "" }, - /*244*/ { BARCODE_HIBC_MICPDF, 4, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 4, 6, 82, 164, 8, "" }, - /*245*/ { BARCODE_HIBC_MICPDF, 47, "ABCDEF", "", 0, 47, 6, 82, 164, 94, "" }, - /*246*/ { BARCODE_HIBC_BLOCKF, -1, "1234567890", "", 0, 30, 3, 101, 242, 64, "3 rows" }, - /*247*/ { BARCODE_HIBC_BLOCKF, 1, "1234567890", "", 0, 1.5, 3, 101, 242, 7, "" }, - /*248*/ { BARCODE_HIBC_BLOCKF, 4, "1234567890", "", 0, 4, 3, 101, 242, 12, "" }, - /*249*/ { BARCODE_HIBC_BLOCKF, 23, "1234567890", "", 0, 23, 3, 101, 242, 50, "" }, - /*250*/ { BARCODE_HIBC_BLOCKF, 60, "1234567890", "", 0, 60, 3, 101, 242, 124, "" }, - /*251*/ { BARCODE_HIBC_AZTEC, 1, "1234567890AB", "", 0, 19, 19, 19, 38, 38, "Fixed width-to-height ratio, symbol->height ignored" }, - /*252*/ { BARCODE_DOTCODE, 1, "ABC", "", 0, 11, 11, 16, 32, 22, "Fixed width-to-height ratio, symbol->height ignored" }, - /*253*/ { BARCODE_HANXIN, 1, "1234567890AB", "", 0, 23, 23, 23, 46, 46, "Fixed width-to-height ratio, symbol->height ignored" }, - /*254*/ { BARCODE_MAILMARK, -1, "01000000000000000AA00AA0A", "", 0, 10, 3, 155, 310, 20, "" }, - /*255*/ { BARCODE_MAILMARK, 1, "01000000000000000AA00AA0A", "", 0, 2.5, 3, 155, 310, 5, "" }, - /*256*/ { BARCODE_MAILMARK, 4, "01000000000000000AA00AA0A", "", 0, 4, 3, 155, 310, 8, "" }, - /*257*/ { BARCODE_MAILMARK, 6, "01000000000000000AA00AA0A", "", 0, 6, 3, 155, 310, 12, "" }, - /*258*/ { BARCODE_MAILMARK, 10, "01000000000000000AA00AA0A", "", 0, 10, 3, 155, 310, 20, "" }, - /*259*/ { BARCODE_MAILMARK, 15, "01000000000000000AA00AA0A", "", 0, 15, 3, 155, 310, 30, "" }, - /*260*/ { BARCODE_MAILMARK, 20, "01000000000000000AA00AA0A", "", 0, 20, 3, 155, 310, 40, "" }, - /*261*/ { BARCODE_AZRUNE, 1, "1", "", 0, 11, 11, 11, 22, 22, "Fixed width-to-height ratio, symbol->height ignored" }, - /*262*/ { BARCODE_CODE32, 1, "12345678", "", 0, 1, 1, 103, 206, 2, "" }, - /*263*/ { BARCODE_CODE32, 4, "12345678", "", 0, 4, 1, 103, 206, 8, "" }, - /*264*/ { BARCODE_CODE32, 19, "12345678", "", 0, 19, 1, 103, 206, 38, "" }, - /*265*/ { BARCODE_EANX_CC, -1, "123456789012", "[20]01", 0, 50, 7, 99, 234, 110, "EAN-13, CC-A 3 rows" }, - /*266*/ { BARCODE_EANX_CC, 1, "123456789012", "[20]01", 0, 12.5, 7, 99, 234, 35, "" }, - /*267*/ { BARCODE_EANX_CC, 4, "123456789012", "[20]01", 0, 12.5, 7, 99, 234, 35, "" }, - /*268*/ { BARCODE_EANX_CC, 81, "123456789012", "[20]01", 0, 81, 7, 99, 234, 172, "" }, - /*269*/ { BARCODE_EANX_CC, -1, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 50, 9, 99, 234, 110, "EAN-13, CC-A 5 rows" }, - /*270*/ { BARCODE_EANX_CC, 1, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 16.5, 9, 99, 234, 43, "" }, - /*271*/ { BARCODE_EANX_CC, 4, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 16.5, 9, 99, 234, 43, "" }, - /*272*/ { BARCODE_EANX_CC, 20, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 20, 9, 99, 234, 50, "" }, - /*273*/ { BARCODE_EANX_CC, -1, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 50, 11, 99, 234, 110, "EAN-13, CC-A 7 rows" }, - /*274*/ { BARCODE_EANX_CC, 1, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 20.5, 11, 99, 234, 51, "" }, - /*275*/ { BARCODE_EANX_CC, 4, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 20.5, 11, 99, 234, 51, "" }, - /*276*/ { BARCODE_EANX_CC, 40, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 40, 11, 99, 234, 90, "" }, - /*277*/ { BARCODE_EANX_CC, -1, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 50, 14, 99, 234, 110, "EAN-13, CC-B 10 rows" }, - /*278*/ { BARCODE_EANX_CC, 1, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 26.5, 14, 99, 234, 63, "" }, - /*279*/ { BARCODE_EANX_CC, 30, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 30, 14, 99, 234, 70, "" }, - /*280*/ { BARCODE_EANX_CC, -1, "1234567", "[20]01[90]123456789012345678901234", 0, 50, 10, 72, 172, 110, "EAN-8, CC-A 4 rows" }, - /*281*/ { BARCODE_EANX_CC, 1, "1234567", "[20]01[90]123456789012345678901234", 0, 18.5, 10, 72, 172, 47, "" }, - /*282*/ { BARCODE_EANX_CC, 4, "1234567", "[20]01[90]123456789012345678901234", 0, 18.5, 10, 72, 172, 47, "" }, - /*283*/ { BARCODE_EANX_CC, 69, "1234567", "[20]01[90]123456789012345678901234", 0, 69, 10, 72, 172, 148, "" }, - /*284*/ { BARCODE_EANX_CC, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 50, 24, 82, 192, 110, "EAN-8, CC-B 15 rows" }, - /*285*/ { BARCODE_EANX_CC, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 46.5, 24, 82, 192, 103, "" }, - /*286*/ { BARCODE_EANX_CC, 32, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 46.5, 24, 82, 192, 103, "" }, - /*287*/ { BARCODE_GS1_128_CC, -1, "[01]12345678901231", "[20]01", 0, 50, 5, 145, 290, 100, "CC-A 3 rows" }, - /*288*/ { BARCODE_GS1_128_CC, 1, "[01]12345678901231", "[20]01", 0, 7.5, 5, 145, 290, 15, "" }, - /*289*/ { BARCODE_GS1_128_CC, 4, "[01]12345678901231", "[20]01", 0, 7.5, 5, 145, 290, 15, "" }, - /*290*/ { BARCODE_GS1_128_CC, 12, "[01]12345678901231", "[20]01", 0, 12, 5, 145, 290, 24, "" }, - /*291*/ { BARCODE_GS1_128_CC, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 50, 9, 145, 290, 100, "CC-A 7 rows" }, - /*292*/ { BARCODE_GS1_128_CC, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 15.5, 9, 145, 290, 31, "" }, - /*293*/ { BARCODE_GS1_128_CC, 52, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 52, 9, 145, 290, 104, "" }, - /*294*/ { BARCODE_GS1_128_CC, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 50, 12, 145, 290, 100, "CC-B 10 rows" }, - /*295*/ { BARCODE_GS1_128_CC, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 21.5, 12, 145, 290, 43, "" }, - /*296*/ { BARCODE_GS1_128_CC, 40, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 40, 12, 145, 290, 80, "" }, - /*297*/ { BARCODE_GS1_128_CC, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", 0, 91.5, 32, 154, 308, 183, "CC-C 30 rows" }, - /*298*/ { BARCODE_GS1_128_CC, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", 0, 91.5, 32, 154, 308, 183, "" }, - /*299*/ { BARCODE_GS1_128_CC, 100, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", 0, 100, 32, 154, 308, 200, "" }, - /*300*/ { BARCODE_DBAR_OMN_CC, -1, "1234567890123", "[20]01[90]1234567890", 0, 21, 5, 100, 200, 42, "CC-A 3 rows" }, - /*301*/ { BARCODE_DBAR_OMN_CC, 1, "1234567890123", "[20]01[90]1234567890", 0, 7.5, 5, 100, 200, 15, "" }, - /*302*/ { BARCODE_DBAR_OMN_CC, 4, "1234567890123", "[20]01[90]1234567890", 0, 7.5, 5, 100, 200, 15, "" }, - /*303*/ { BARCODE_DBAR_OMN_CC, -1, "1234567890123", "[20]01[90]12345678901234567890", 0, 23, 6, 100, 200, 46, "CC-A 4 rows" }, - /*304*/ { BARCODE_DBAR_OMN_CC, 1, "1234567890123", "[20]01[90]12345678901234567890", 0, 9.5, 6, 100, 200, 19, "" }, - /*305*/ { BARCODE_DBAR_OMN_CC, 4, "1234567890123", "[20]01[90]12345678901234567890", 0, 9.5, 6, 100, 200, 19, "" }, - /*306*/ { BARCODE_DBAR_OMN_CC, 20, "1234567890123", "[20]01[90]12345678901234567890", 0, 20, 6, 100, 200, 40, "" }, - /*307*/ { BARCODE_DBAR_OMN_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 35, 12, 100, 200, 70, "CC-B 10 rows" }, - /*308*/ { BARCODE_DBAR_OMN_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 21.5, 12, 100, 200, 43, "" }, - /*309*/ { BARCODE_DBAR_OMN_CC, 40, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 40, 12, 100, 200, 80, "" }, - /*310*/ { BARCODE_DBAR_OMN_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", 0, 39, 14, 100, 200, 78, "CC-B 12 rows" }, - /*311*/ { BARCODE_DBAR_OMN_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", 0, 25.5, 14, 100, 200, 51, "" }, - /*312*/ { BARCODE_DBAR_OMN_CC, 36, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", 0, 36, 14, 100, 200, 72, "" }, - /*313*/ { BARCODE_DBAR_LTD_CC, -1, "1234567890123", "[20]01", 0, 19, 6, 79, 158, 38, "CC-A 4 rows" }, - /*314*/ { BARCODE_DBAR_LTD_CC, 1, "1234567890123", "[20]01", 0, 9.5, 6, 79, 158, 19, "" }, - /*315*/ { BARCODE_DBAR_LTD_CC, 4, "1234567890123", "[20]01", 0, 9.5, 6, 79, 158, 19, "" }, - /*316*/ { BARCODE_DBAR_LTD_CC, 18, "1234567890123", "[20]01", 0, 18, 6, 79, 158, 36, "" }, - /*317*/ { BARCODE_DBAR_LTD_CC, 19, "1234567890123", "[20]01", 0, 19, 6, 79, 158, 38, "" }, - /*318*/ { BARCODE_DBAR_LTD_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890", 0, 25, 9, 79, 158, 50, "CC-A 7 rows" }, - /*319*/ { BARCODE_DBAR_LTD_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890", 0, 15.5, 9, 79, 158, 31, "" }, - /*320*/ { BARCODE_DBAR_LTD_CC, 26, "1234567890123", "[20]01[90]123456789012345678901234567890", 0, 26, 9, 79, 158, 52, "" }, - /*321*/ { BARCODE_DBAR_LTD_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 51, 22, 88, 176, 102, "CC-B 20 rows" }, - /*322*/ { BARCODE_DBAR_LTD_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 41.5, 22, 88, 176, 83, "" }, - /*323*/ { BARCODE_DBAR_LTD_CC, 50, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 50, 22, 88, 176, 100, "" }, - /*324*/ { BARCODE_DBAR_EXP_CC, -1, "[01]12345678901231", "[20]01", 0, 41, 5, 134, 268, 82, "CC-A 3 rows" }, - /*325*/ { BARCODE_DBAR_EXP_CC, 1, "[01]12345678901231", "[20]01", 0, 7.5, 5, 134, 268, 15, "" }, - /*326*/ { BARCODE_DBAR_EXP_CC, 4, "[01]12345678901231", "[20]01", 0, 7.5, 5, 134, 268, 15, "" }, - /*327*/ { BARCODE_DBAR_EXP_CC, 40, "[01]12345678901231", "[20]01", 0, 40, 5, 134, 268, 80, "" }, - /*328*/ { BARCODE_DBAR_EXP_CC, 41, "[01]12345678901231", "[20]01", 0, 41, 5, 134, 268, 82, "" }, - /*329*/ { BARCODE_DBAR_EXP_CC, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", 0, 45, 7, 134, 268, 90, "CC-A 5 rows" }, - /*330*/ { BARCODE_DBAR_EXP_CC, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", 0, 11.5, 7, 134, 268, 23, "" }, - /*331*/ { BARCODE_DBAR_EXP_CC, 50, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", 0, 50, 7, 134, 268, 100, "" }, - /*332*/ { BARCODE_DBAR_EXP_CC, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 55, 12, 134, 268, 110, "CC-B 10 rows" }, - /*333*/ { BARCODE_DBAR_EXP_CC, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 21.5, 12, 134, 268, 43, "" }, - /*334*/ { BARCODE_DBAR_EXP_CC, 46, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 46, 12, 134, 268, 92, "" }, - /*335*/ { BARCODE_UPCA_CC, -1, "12345678901", "[20]01", 0, 50, 7, 99, 234, 110, "CC-A 3 rows" }, - /*336*/ { BARCODE_UPCA_CC, 1, "12345678901", "[20]01", 0, 12.5, 7, 99, 234, 35, "" }, - /*337*/ { BARCODE_UPCA_CC, 4, "12345678901", "[20]01", 0, 12.5, 7, 99, 234, 35, "" }, - /*338*/ { BARCODE_UPCA_CC, 81, "12345678901", "[20]01", 0, 81, 7, 99, 234, 172, "" }, - /*339*/ { BARCODE_UPCA_CC, -1, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 50, 10, 99, 234, 110, "CC-A 6 rows" }, - /*340*/ { BARCODE_UPCA_CC, 1, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 18.5, 10, 99, 234, 47, "" }, - /*341*/ { BARCODE_UPCA_CC, 4, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 18.5, 10, 99, 234, 47, "" }, - /*342*/ { BARCODE_UPCA_CC, -1, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", 0, 50, 16, 99, 234, 110, "CC-B 12 rows" }, - /*343*/ { BARCODE_UPCA_CC, 1, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", 0, 30.5, 16, 99, 234, 71, "" }, - /*344*/ { BARCODE_UPCA_CC, 51, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", 0, 51, 16, 99, 234, 112, "" }, - /*345*/ { BARCODE_UPCE_CC, -1, "1234567", "[20]01[90]123456789012345678", 0, 50, 11, 55, 142, 110, "CC-A 7 rows" }, - /*346*/ { BARCODE_UPCE_CC, 1, "1234567", "[20]01[90]123456789012345678", 0, 20.5, 11, 55, 142, 51, "" }, - /*347*/ { BARCODE_UPCE_CC, 4, "1234567", "[20]01[90]123456789012345678", 0, 20.5, 11, 55, 142, 51, "" }, - /*348*/ { BARCODE_UPCE_CC, 85, "1234567", "[20]01[90]123456789012345678", 0, 85, 11, 55, 142, 180, "" }, - /*349*/ { BARCODE_UPCE_CC, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 50, 16, 55, 142, 110, "CC-A 12 rows" }, - /*350*/ { BARCODE_UPCE_CC, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 30.5, 16, 55, 142, 71, "" }, - /*351*/ { BARCODE_UPCE_CC, 49, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 49, 16, 55, 142, 108, "" }, - /*352*/ { BARCODE_UPCE_CC, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 50, 21, 55, 142, 110, "CC-B 17 rows" }, - /*353*/ { BARCODE_UPCE_CC, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 40.5, 21, 55, 142, 91, "" }, - /*354*/ { BARCODE_UPCE_CC, 4, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 40.5, 21, 55, 142, 91, "" }, - /*355*/ { BARCODE_UPCE_CC, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", 0, 52.5, 27, 55, 142, 115, "CC-B 23 rows" }, - /*356*/ { BARCODE_UPCE_CC, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", 0, 52.5, 27, 55, 142, 115, "" }, - /*357*/ { BARCODE_UPCE_CC, 52, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", 0, 52.5, 27, 55, 142, 115, "" }, - /*358*/ { BARCODE_DBAR_STK_CC, -1, "1234567890123", "[20]01", 0, 24, 9, 56, 112, 48, "CC-A 5 rows" }, - /*359*/ { BARCODE_DBAR_STK_CC, 1, "1234567890123", "[20]01", 0, 13.2, 9, 56, 112, 26.4, "" }, - /*360*/ { BARCODE_DBAR_STK_CC, 4, "1234567890123", "[20]01", 0, 13.2, 9, 56, 112, 26.4, "" }, - /*361*/ { BARCODE_DBAR_STK_CC, 24, "1234567890123", "[20]01", 0, 24, 9, 56, 112, 48, "" }, - /*362*/ { BARCODE_DBAR_STK_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 38, 16, 56, 112, 76, "CC-A 12 rows" }, - /*363*/ { BARCODE_DBAR_STK_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 27.200001, 16, 56, 112, 54.400002, "" }, - /*364*/ { BARCODE_DBAR_STK_CC, 25, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 27.200001, 16, 56, 112, 54.400002, "" }, - /*365*/ { BARCODE_DBAR_STK_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 48, 21, 56, 112, 96, "CC-B 17 rows" }, - /*366*/ { BARCODE_DBAR_STK_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 37.200001, 21, 56, 112, 74.400002, "" }, - /*367*/ { BARCODE_DBAR_STK_CC, 59, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 59, 21, 56, 112, 118, "" }, - /*368*/ { BARCODE_DBAR_OMNSTK_CC, -1, "1234567890123", "[20]01[90]1234567890123456", 0, 82, 12, 56, 112, 164, "CC-A 6 rows" }, - /*369*/ { BARCODE_DBAR_OMNSTK_CC, 1, "1234567890123", "[20]01[90]1234567890123456", 0, 17, 12, 56, 112, 34, "" }, - /*370*/ { BARCODE_DBAR_OMNSTK_CC, 4, "1234567890123", "[20]01[90]1234567890123456", 0, 17, 12, 56, 112, 34, "" }, - /*371*/ { BARCODE_DBAR_OMNSTK_CC, 80, "1234567890123", "[20]01[90]1234567890123456", 0, 80, 12, 56, 112, 160, "" }, - /*372*/ { BARCODE_DBAR_OMNSTK_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567", 0, 94, 18, 56, 112, 188, "CC-A 12 rows" }, - /*373*/ { BARCODE_DBAR_OMNSTK_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567", 0, 29, 18, 56, 112, 58, "" }, - /*374*/ { BARCODE_DBAR_OMNSTK_CC, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 104, 23, 56, 112, 208, "CC-B 17 rows" }, - /*375*/ { BARCODE_DBAR_OMNSTK_CC, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 39, 23, 56, 112, 78, "" }, - /*376*/ { BARCODE_DBAR_OMNSTK_CC, 4, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 39, 23, 56, 112, 78, "" }, - /*377*/ { BARCODE_DBAR_OMNSTK_CC, 52, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 52, 23, 56, 112, 104, "" }, - /*378*/ { BARCODE_DBAR_EXPSTK_CC, -1, "[01]12345678901231", "[20]01", 0, 78, 9, 102, 204, 156, "3 rows, CC-A 3 rows" }, - /*379*/ { BARCODE_DBAR_EXPSTK_CC, 1, "[01]12345678901231", "[20]01", 0, 11, 9, 102, 204, 22, "" }, - /*380*/ { BARCODE_DBAR_EXPSTK_CC, 4, "[01]12345678901231", "[20]01", 0, 11, 9, 102, 204, 22, "" }, - /*381*/ { BARCODE_DBAR_EXPSTK_CC, 77, "[01]12345678901231", "[20]01", 0, 77, 9, 102, 204, 154, "" }, - /*382*/ { BARCODE_DBAR_EXPSTK_CC, 78, "[01]12345678901231", "[20]01", 0, 78, 9, 102, 204, 156, "" }, - /*383*/ { BARCODE_DBAR_EXPSTK_CC, -1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", 0, 189, 21, 102, 204, 378, "5 rows, CC-A 3 rows" }, - /*384*/ { BARCODE_DBAR_EXPSTK_CC, 1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", 0, 21.5, 21, 102, 204, 43, "" }, - /*385*/ { BARCODE_DBAR_EXPSTK_CC, 190, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", 0, 190, 21, 102, 204, 380, "" }, - /*386*/ { BARCODE_DBAR_EXPSTK_CC, -1, "[01]12345678901231", "[20]01[90]12345678901234567890", 0, 80, 10, 102, 204, 160, "3 rows, CC-A 4 rows" }, - /*387*/ { BARCODE_DBAR_EXPSTK_CC, 1, "[01]12345678901231", "[20]01[90]12345678901234567890", 0, 13, 10, 102, 204, 26, "" }, - /*388*/ { BARCODE_DBAR_EXPSTK_CC, 38, "[01]12345678901231", "[20]01[90]12345678901234567890", 0, 38, 10, 102, 204, 76, "" }, - /*389*/ { BARCODE_DBAR_EXPSTK_CC, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 92, 16, 102, 204, 184, "3 rows, CC-B 10 rows" }, - /*390*/ { BARCODE_DBAR_EXPSTK_CC, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 25, 16, 102, 204, 50, "" }, - /*391*/ { BARCODE_DBAR_EXPSTK_CC, 4, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 25, 16, 102, 204, 50, "" }, - /*392*/ { BARCODE_DBAR_EXPSTK_CC, 47, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 47, 16, 102, 204, 94, "" }, - /*393*/ { BARCODE_DBAR_EXPSTK_CC, -1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 203, 28, 102, 204, 406, "5 rows, CC-B 10 rows" }, - /*394*/ { BARCODE_DBAR_EXPSTK_CC, 1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 35.5, 28, 102, 204, 71, "" }, - /*395*/ { BARCODE_CHANNEL, 1, "1", "", 0, 1, 1, 19, 38, 2, "" }, - /*396*/ { BARCODE_CHANNEL, 4, "123", "", 0, 4, 1, 23, 46, 8, "" }, - /*397*/ { BARCODE_CODEONE, 1, "12345678901234567890", "", 0, 16, 16, 18, 36, 32, "Fixed height, symbol->height ignored" }, - /*398*/ { BARCODE_GRIDMATRIX, 1, "ABC", "", 0, 18, 18, 18, 36, 36, "Fixed width-to-height ratio, symbol->height ignored" }, - /*399*/ { BARCODE_UPNQR, 1, "1234567890AB", "", 0, 77, 77, 77, 154, 154, "Fixed width-to-height ratio, symbol->height ignored" }, - /*400*/ { BARCODE_ULTRA, 1, "1234567890", "", 0, 13, 13, 18, 36, 26, "Fixed width-to-height ratio, symbol->height ignored" }, - /*401*/ { BARCODE_RMQR, 1, "12345", "", 0, 11, 11, 27, 54, 22, "Fixed width-to-height ratio, symbol->height ignored" }, + /* 0*/ { BARCODE_CODE11, -1, 1, "1234567890", "", 0, 1, 1, 108, 216, 2, "" }, + /* 1*/ { BARCODE_CODE11, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 108, 216, 2, "TODO: Find doc" }, + /* 2*/ { BARCODE_CODE11, -1, 4, "1234567890", "", 0, 4, 1, 108, 216, 8, "" }, + /* 3*/ { BARCODE_CODE11, -1, 10, "1234567890", "", 0, 10, 1, 108, 216, 20, "" }, + /* 4*/ { BARCODE_C25STANDARD, -1, 1, "1234567890", "", 0, 1, 1, 117, 234, 2, "" }, + /* 5*/ { BARCODE_C25STANDARD, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 117, 234, 2, "No doc for C25 except C25INTER" }, + /* 6*/ { BARCODE_C25STANDARD, -1, 4, "1234567890", "", 0, 4, 1, 117, 234, 8, "" }, + /* 7*/ { BARCODE_C25STANDARD, -1, 11, "1234567890", "", 0, 11, 1, 117, 234, 22, "" }, + /* 8*/ { BARCODE_C25INTER, -1, 1, "1234567890", "", 0, 1, 1, 99, 198, 2, "" }, + /* 9*/ { BARCODE_C25INTER, -1, 15, "1234567890", "", 0, 15, 1, 99, 198, 30, "" }, + /* 10*/ { BARCODE_C25INTER, COMPLIANT_HEIGHT, 15, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 15, 1, 99, 198, 30, "" }, + /* 11*/ { BARCODE_C25INTER, COMPLIANT_HEIGHT, 15.5, "1234567890", "", 0, 15.5, 1, 99, 198, 31, "" }, + /* 12*/ { BARCODE_C25INTER, COMPLIANT_HEIGHT, 17.5, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 17.5, 1, 117, 234, 35, "" }, + /* 13*/ { BARCODE_C25INTER, COMPLIANT_HEIGHT, 17.75, "12345678901", "", 0, 17.75, 1, 117, 234, 35.5, "" }, + /* 14*/ { BARCODE_C25IATA, -1, 1, "1234567890", "", 0, 1, 1, 149, 298, 2, "" }, + /* 15*/ { BARCODE_C25IATA, -1, 4, "1234567890", "", 0, 4, 1, 149, 298, 8, "" }, + /* 16*/ { BARCODE_C25IATA, -1, 30, "1234567890", "", 0, 30, 1, 149, 298, 60, "" }, + /* 17*/ { BARCODE_C25LOGIC, -1, 1, "1234567890", "", 0, 1, 1, 109, 218, 2, "" }, + /* 18*/ { BARCODE_C25LOGIC, -1, 4, "1234567890", "", 0, 4, 1, 109, 218, 8, "" }, + /* 19*/ { BARCODE_C25LOGIC, -1, 41, "1234567890", "", 0, 41, 1, 109, 218, 82, "" }, + /* 20*/ { BARCODE_C25IND, -1, 1, "1234567890", "", 0, 1, 1, 159, 318, 2, "" }, + /* 21*/ { BARCODE_C25IND, -1, 4, "1234567890", "", 0, 4, 1, 159, 318, 8, "" }, + /* 22*/ { BARCODE_C25IND, -1, 21, "1234567890", "", 0, 21, 1, 159, 318, 42, "" }, + /* 23*/ { BARCODE_CODE39, -1, 1, "1234567890", "", 0, 1, 1, 155, 310, 2, "" }, + /* 24*/ { BARCODE_CODE39, -1, 4, "1", "", 0, 4, 1, 38, 76, 8, "" }, + /* 25*/ { BARCODE_CODE39, COMPLIANT_HEIGHT, 4, "1", "", ZINT_WARN_NONCOMPLIANT, 4, 1, 38, 76, 8, "Min height data-length dependent" }, + /* 26*/ { BARCODE_CODE39, COMPLIANT_HEIGHT, 4.4, "1", "", 0, 4.4000001, 1, 38, 76, 8.8000002, "" }, + /* 27*/ { BARCODE_CODE39, -1, 17, "1234567890", "", 0, 17, 1, 155, 310, 34, "" }, + /* 28*/ { BARCODE_CODE39, COMPLIANT_HEIGHT, 17, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 17, 1, 155, 310, 34, "Min height data-length dependent" }, + /* 29*/ { BARCODE_CODE39, COMPLIANT_HEIGHT, 17.85, "1234567890", "", 0, 17.85, 1, 155, 310, 35.700001, "" }, + /* 30*/ { BARCODE_EXCODE39, -1, 1, "1234567890", "", 0, 1, 1, 155, 310, 2, "" }, + /* 31*/ { BARCODE_EXCODE39, -1, 17.8, "1234567890", "", 0, 17.799999, 1, 155, 310, 35.599998, "" }, + /* 32*/ { BARCODE_EXCODE39, COMPLIANT_HEIGHT, 17.8, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 17.799999, 1, 155, 310, 35.599998, "" }, + /* 33*/ { BARCODE_EXCODE39, COMPLIANT_HEIGHT, 17.9, "1234567890", "", 0, 17.9, 1, 155, 310, 35.799999, "" }, + /* 34*/ { BARCODE_EANX, -1, 1, "123456789012", "", 0, 1, 1, 95, 226, 12, "EAN-13" }, + /* 35*/ { BARCODE_EANX, -1, 69, "123456789012", "", 0, 69, 1, 95, 226, 148, "" }, + /* 36*/ { BARCODE_EANX, COMPLIANT_HEIGHT, 69, "123456789012", "", ZINT_WARN_NONCOMPLIANT, 69, 1, 95, 226, 148, "" }, + /* 37*/ { BARCODE_EANX, COMPLIANT_HEIGHT, 69.25, "123456789012", "", 0, 69.25, 1, 95, 226, 148.5, "" }, + /* 38*/ { BARCODE_EANX, -1, 55, "1234567", "", 0, 55, 1, 67, 162, 120, "EAN-8" }, + /* 39*/ { BARCODE_EANX, COMPLIANT_HEIGHT, 55, "1234567", "", ZINT_WARN_NONCOMPLIANT, 55, 1, 67, 162, 120, "EAN-8" }, + /* 40*/ { BARCODE_EANX, COMPLIANT_HEIGHT, 55.25, "1234567", "", 0, 55.25, 1, 67, 162, 120.5, "EAN-8" }, + /* 41*/ { BARCODE_EANX_CHK, -1, 1, "1234567890128", "", 0, 1, 1, 95, 226, 12, "EAN-13" }, + /* 42*/ { BARCODE_EANX_CHK, -1, 69, "1234567890128", "", 0, 69, 1, 95, 226, 148, "" }, + /* 43*/ { BARCODE_EANX_CHK, COMPLIANT_HEIGHT, 69, "1234567890128", "", ZINT_WARN_NONCOMPLIANT, 69, 1, 95, 226, 148, "" }, + /* 44*/ { BARCODE_EANX_CHK, COMPLIANT_HEIGHT, 69.25, "1234567890128", "", 0, 69.25, 1, 95, 226, 148.5, "" }, + /* 45*/ { BARCODE_GS1_128, -1, 1, "[01]12345678901231", "", 0, 1, 1, 134, 268, 2, "" }, + /* 46*/ { BARCODE_GS1_128, -1, 5.7, "[01]12345678901231", "", 0, 5.6999998, 1, 134, 268, 11.4, "" }, + /* 47*/ { BARCODE_GS1_128, COMPLIANT_HEIGHT, 5.7, "[01]12345678901231", "", ZINT_WARN_NONCOMPLIANT, 5.6999998, 1, 134, 268, 11.4, "" }, + /* 48*/ { BARCODE_GS1_128, COMPLIANT_HEIGHT, 5.725, "[01]12345678901231", "", 0, 5.7249999, 1, 134, 268, 11.45, "Note considered compliant even though rendered height same as before" }, + /* 49*/ { BARCODE_GS1_128, -1, 50, "[01]12345678901231", "", 0, 50, 1, 134, 268, 100, "" }, + /* 50*/ { BARCODE_CODABAR, -1, 1, "A0B", "", 0, 1, 1, 32, 64, 2, "" }, + /* 51*/ { BARCODE_CODABAR, -1, 4, "A0B", "", 0, 4, 1, 32, 64, 8, "" }, + /* 52*/ { BARCODE_CODABAR, -1, 26, "A0B", "", 0, 26, 1, 32, 64, 52, "" }, + /* 53*/ { BARCODE_CODABAR, COMPLIANT_HEIGHT, 26, "A0B", "", ZINT_WARN_NONCOMPLIANT, 26, 1, 32, 64, 52, "" }, + /* 54*/ { BARCODE_CODABAR, COMPLIANT_HEIGHT, 27, "A0B", "", 0, 27, 1, 32, 64, 54, "" }, + /* 55*/ { BARCODE_CODE128, -1, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "" }, + /* 56*/ { BARCODE_CODE128, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "" }, + /* 57*/ { BARCODE_CODE128, -1, 4, "1234567890", "", 0, 4, 1, 90, 180, 8, "" }, + /* 58*/ { BARCODE_CODE128, -1, 7, "1234567890", "", 0, 7, 1, 90, 180, 14, "" }, + /* 59*/ { BARCODE_DPLEIT, -1, 1, "1234567890123", "", 0, 1, 1, 135, 270, 2, "" }, + /* 60*/ { BARCODE_DPLEIT, COMPLIANT_HEIGHT, 1, "1234567890123", "", 0, 1, 1, 135, 270, 2, "TODO: Find doc" }, + /* 61*/ { BARCODE_DPLEIT, -1, 4, "1234567890123", "", 0, 4, 1, 135, 270, 8, "" }, + /* 62*/ { BARCODE_DPIDENT, -1, 1, "12345678901", "", 0, 1, 1, 117, 234, 2, "" }, + /* 63*/ { BARCODE_DPIDENT, COMPLIANT_HEIGHT, 1, "12345678901", "", 0, 1, 1, 117, 234, 2, "TODO: Find doc" }, + /* 64*/ { BARCODE_DPIDENT, -1, 4, "12345678901", "", 0, 4, 1, 117, 234, 8, "" }, + /* 65*/ { BARCODE_CODE16K, -1, -1, "1234567890", "", 0, 20, 2, 70, 162, 44, "2 rows" }, + /* 66*/ { BARCODE_CODE16K, -1, 1, "1234567890", "", 0, 1, 2, 70, 162, 6, "" }, + /* 67*/ { BARCODE_CODE16K, -1, 4, "1234567890", "", 0, 4, 2, 70, 162, 12, "" }, + /* 68*/ { BARCODE_CODE16K, -1, 16.75, "1234567890", "", 0, 16.75, 2, 70, 162, 37.5, "" }, + /* 69*/ { BARCODE_CODE16K, COMPLIANT_HEIGHT, 16.75, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 16.75, 2, 70, 162, 37.5, "" }, + /* 70*/ { BARCODE_CODE16K, COMPLIANT_HEIGHT, 17, "1234567890", "", 0, 17, 2, 70, 162, 38, "" }, + /* 71*/ { BARCODE_CODE16K, -1, -1, "12345678901234567890123456789012345678901234567890", "", 0, 60, 6, 70, 162, 124, "6 rows" }, + /* 72*/ { BARCODE_CODE16K, -1, 52.5, "12345678901234567890123456789012345678901234567890", "", 0, 52.5, 6, 70, 162, 109, "" }, + /* 73*/ { BARCODE_CODE16K, COMPLIANT_HEIGHT, 52.5, "12345678901234567890123456789012345678901234567890", "", ZINT_WARN_NONCOMPLIANT, 52.5, 6, 70, 162, 109, "" }, + /* 74*/ { BARCODE_CODE16K, COMPLIANT_HEIGHT, 53, "12345678901234567890123456789012345678901234567890", "", 0, 53, 6, 70, 162, 110, "" }, + /* 75*/ { BARCODE_CODE49, -1, -1, "1234567890", "", 0, 20, 2, 70, 162, 44, "2 rows" }, + /* 76*/ { BARCODE_CODE49, -1, 1, "1234567890", "", 0, 1, 2, 70, 162, 6, "" }, + /* 77*/ { BARCODE_CODE49, -1, 16.75, "1234567890", "", 0, 16.75, 2, 70, 162, 37.5, "" }, + /* 78*/ { BARCODE_CODE49, COMPLIANT_HEIGHT, 16.75, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 16.75, 2, 70, 162, 37.5, "" }, + /* 79*/ { BARCODE_CODE49, COMPLIANT_HEIGHT, 17, "1234567890", "", 0, 17, 2, 70, 162, 38, "" }, + /* 80*/ { BARCODE_CODE49, -1, -1, "12345678901234567890", "", 0, 30, 3, 70, 162, 64, "3 rows" }, + /* 81*/ { BARCODE_CODE49, -1, 25.75, "12345678901234567890", "", 0, 25.75, 3, 70, 162, 55.5, "" }, + /* 82*/ { BARCODE_CODE49, COMPLIANT_HEIGHT, 25.75, "12345678901234567890", "", ZINT_WARN_NONCOMPLIANT, 25.75, 3, 70, 162, 55.5, "" }, + /* 83*/ { BARCODE_CODE49, COMPLIANT_HEIGHT, 26, "12345678901234567890", "", 0, 26, 3, 70, 162, 56, "" }, + /* 84*/ { BARCODE_CODE93, -1, 1, "1234567890", "", 0, 1, 1, 127, 254, 2, "" }, + /* 85*/ { BARCODE_CODE93, -1, 9.9, "1", "", 0, 9.8999996, 1, 46, 92, 19.799999, "" }, + /* 86*/ { BARCODE_CODE93, COMPLIANT_HEIGHT, 9.9, "1", "", ZINT_WARN_NONCOMPLIANT, 9.8999996, 1, 46, 92, 19.799999, "Min height data-length dependent" }, + /* 87*/ { BARCODE_CODE93, COMPLIANT_HEIGHT, 10, "1", "", 0, 10, 1, 46, 92, 20, "" }, + /* 88*/ { BARCODE_CODE93, COMPLIANT_HEIGHT, 22, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 22, 1, 127, 254, 44, "Min height data-length dependent" }, + /* 89*/ { BARCODE_CODE93, COMPLIANT_HEIGHT, 22.1, "1234567890", "", 0, 22.1, 1, 127, 254, 44.200001, "" }, + /* 90*/ { BARCODE_FLAT, -1, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "" }, + /* 91*/ { BARCODE_FLAT, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 90, 180, 2, "TODO: Find doc" }, + /* 92*/ { BARCODE_FLAT, -1, 4, "1234567890", "", 0, 4, 1, 90, 180, 8, "" }, + /* 93*/ { BARCODE_DBAR_OMN, -1, 1, "1234567890123", "", 0, 1, 1, 96, 192, 2, "" }, + /* 94*/ { BARCODE_DBAR_OMN, -1, 12.9, "1234567890123", "", 0, 12.9, 1, 96, 192, 25.799999, "" }, + /* 95*/ { BARCODE_DBAR_OMN, COMPLIANT_HEIGHT, 12.9, "1234567890123", "", ZINT_WARN_NONCOMPLIANT, 12.9, 1, 96, 192, 25.799999, "" }, + /* 96*/ { BARCODE_DBAR_OMN, COMPLIANT_HEIGHT, 13, "1234567890123", "", 0, 13, 1, 96, 192, 26, "" }, + /* 97*/ { BARCODE_DBAR_LTD, -1, 1, "1234567890123", "", 0, 1, 1, 79, 158, 2, "" }, + /* 98*/ { BARCODE_DBAR_LTD, -1, 9, "1234567890123", "", 0, 9, 1, 79, 158, 18, "" }, + /* 99*/ { BARCODE_DBAR_LTD, COMPLIANT_HEIGHT, 9, "1234567890123", "", ZINT_WARN_NONCOMPLIANT, 9, 1, 79, 158, 18, "" }, + /*100*/ { BARCODE_DBAR_LTD, COMPLIANT_HEIGHT, 10, "1234567890123", "", 0, 10, 1, 79, 158, 20, "" }, + /*101*/ { BARCODE_DBAR_EXP, -1, 1, "[01]12345678901231", "", 0, 1, 1, 134, 268, 2, "" }, + /*102*/ { BARCODE_DBAR_EXP, -1, 33, "[01]12345678901231", "", 0, 33, 1, 134, 268, 66, "" }, + /*103*/ { BARCODE_DBAR_EXP, COMPLIANT_HEIGHT, 33, "[01]12345678901231", "", ZINT_WARN_NONCOMPLIANT, 33, 1, 134, 268, 66, "" }, + /*104*/ { BARCODE_DBAR_EXP, COMPLIANT_HEIGHT, 34, "[01]12345678901231", "", 0, 34, 1, 134, 268, 68, "" }, + /*105*/ { BARCODE_TELEPEN, -1, 1, "1234567890", "", 0, 1, 1, 208, 416, 2, "" }, + /*106*/ { BARCODE_TELEPEN, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 208, 416, 2, "No known min" }, + /*107*/ { BARCODE_TELEPEN, -1, 4, "1234567890", "", 0, 4, 1, 208, 416, 8, "" }, + /*108*/ { BARCODE_UPCA, -1, 1, "12345678901", "", 0, 1, 1, 95, 226, 12, "" }, + /*109*/ { BARCODE_UPCA, -1, 69, "12345678901", "", 0, 69, 1, 95, 226, 148, "" }, + /*110*/ { BARCODE_UPCA, COMPLIANT_HEIGHT, 69, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 69, 1, 95, 226, 148, "" }, + /*111*/ { BARCODE_UPCA, COMPLIANT_HEIGHT, 69.25, "12345678901", "", 0, 69.25, 1, 95, 226, 148.5, "" }, + /*112*/ { BARCODE_UPCA_CHK, -1, 1, "123456789012", "", 0, 1, 1, 95, 226, 12, "" }, + /*113*/ { BARCODE_UPCA_CHK, COMPLIANT_HEIGHT, 69, "123456789012", "", ZINT_WARN_NONCOMPLIANT, 69, 1, 95, 226, 148, "" }, + /*114*/ { BARCODE_UPCA_CHK, COMPLIANT_HEIGHT, 69.5, "123456789012", "", 0, 69.5, 1, 95, 226, 149, "" }, + /*115*/ { BARCODE_UPCE, -1, 1, "1234567", "", 0, 1, 1, 51, 134, 12, "" }, + /*116*/ { BARCODE_UPCE, -1, 69, "1234567", "", 0, 69, 1, 51, 134, 148, "" }, + /*117*/ { BARCODE_UPCE, COMPLIANT_HEIGHT, 69, "1234567", "", ZINT_WARN_NONCOMPLIANT, 69, 1, 51, 134, 148, "" }, + /*118*/ { BARCODE_UPCE, COMPLIANT_HEIGHT, 69.25, "1234567", "", 0, 69.25, 1, 51, 134, 148.5, "" }, + /*119*/ { BARCODE_UPCE_CHK, -1, 1, "12345670", "", 0, 1, 1, 51, 134, 12, "" }, + /*120*/ { BARCODE_UPCE_CHK, COMPLIANT_HEIGHT, 69.24, "12345670", "", ZINT_WARN_NONCOMPLIANT, 69.239998, 1, 51, 134, 148.48, "" }, + /*121*/ { BARCODE_UPCE_CHK, COMPLIANT_HEIGHT, 69.25, "12345670", "", 0, 69.25, 1, 51, 134, 148.5, "" }, + /*122*/ { BARCODE_POSTNET, -1, -1, "12345678901", "", 0, 12, 2, 123, 246, 24, "" }, + /*123*/ { BARCODE_POSTNET, -1, 1, "12345678901", "", 0, 1, 2, 123, 246, 2, "" }, + /*124*/ { BARCODE_POSTNET, -1, 4.5, "12345678901", "", 0, 4.5, 2, 123, 246, 9, "" }, + /*125*/ { BARCODE_POSTNET, COMPLIANT_HEIGHT, 4.5, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 4.5, 2, 123, 246, 9, "" }, + /*126*/ { BARCODE_POSTNET, COMPLIANT_HEIGHT, 4.6, "12345678901", "", 0, 4.5999999, 2, 123, 246, 9.1999998, "" }, + /*127*/ { BARCODE_POSTNET, -1, 9, "12345678901", "", 0, 9, 2, 123, 246, 18, "" }, + /*128*/ { BARCODE_POSTNET, COMPLIANT_HEIGHT, 9, "12345678901", "", 0, 9, 2, 123, 246, 18, "" }, + /*129*/ { BARCODE_POSTNET, COMPLIANT_HEIGHT, 9.1, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 9.1000004, 2, 123, 246, 18.200001, "" }, + /*130*/ { BARCODE_POSTNET, -1, 20, "12345678901", "", 0, 20, 2, 123, 246, 40, "" }, + /*131*/ { BARCODE_POSTNET, COMPLIANT_HEIGHT, 20, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 20, 2, 123, 246, 40, "" }, + /*132*/ { BARCODE_MSI_PLESSEY, -1, 1, "1234567890", "", 0, 1, 1, 127, 254, 2, "" }, + /*133*/ { BARCODE_MSI_PLESSEY, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 127, 254, 2, "TODO: Find doc" }, + /*134*/ { BARCODE_MSI_PLESSEY, -1, 4, "1234567890", "", 0, 4, 1, 127, 254, 8, "" }, + /*135*/ { BARCODE_FIM, -1, 1, "A", "", 0, 1, 1, 17, 34, 2, "" }, + /*136*/ { BARCODE_FIM, -1, 12.7, "A", "", 0, 12.7, 1, 17, 34, 25.4, "" }, + /*137*/ { BARCODE_FIM, COMPLIANT_HEIGHT, 12.7, "A", "", ZINT_WARN_NONCOMPLIANT, 12.7, 1, 17, 34, 25.4, "" }, + /*138*/ { BARCODE_FIM, COMPLIANT_HEIGHT, 12.8, "A", "", 0, 12.8, 1, 17, 34, 25.6, "" }, + /*139*/ { BARCODE_LOGMARS, -1, 1, "1234567890", "", 0, 1, 1, 191, 382, 2, "" }, + /*140*/ { BARCODE_LOGMARS, -1, 6, "1234567890", "", 0, 6, 1, 191, 382, 12, "" }, + /*141*/ { BARCODE_LOGMARS, COMPLIANT_HEIGHT, 6, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 6, 1, 191, 382, 12, "" }, + /*142*/ { BARCODE_LOGMARS, -1, 6.25, "1234567890", "", 0, 6.25, 1, 191, 382, 12.5, "" }, + /*143*/ { BARCODE_LOGMARS, COMPLIANT_HEIGHT, 6.25, "1234567890", "", 0, 6.25, 1, 191, 382, 12.5, "" }, + /*144*/ { BARCODE_LOGMARS, COMPLIANT_HEIGHT, 116, "1234567890", "", 0, 116, 1, 191, 382, 232, "" }, + /*145*/ { BARCODE_LOGMARS, COMPLIANT_HEIGHT, 117, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 117, 1, 191, 382, 234, "" }, + /*146*/ { BARCODE_PHARMA, -1, 1, "123456", "", 0, 1, 1, 58, 116, 2, "" }, + /*147*/ { BARCODE_PHARMA, -1, 15, "123456", "", 0, 15, 1, 58, 116, 30, "" }, + /*148*/ { BARCODE_PHARMA, COMPLIANT_HEIGHT, 15, "123456", "", ZINT_WARN_NONCOMPLIANT, 15, 1, 58, 116, 30, "" }, + /*149*/ { BARCODE_PHARMA, COMPLIANT_HEIGHT, 16, "123456", "", 0, 16, 1, 58, 116, 32, "" }, + /*150*/ { BARCODE_PZN, -1, 1, "123456", "", 0, 1, 1, 142, 284, 2, "" }, + /*151*/ { BARCODE_PZN, -1, 17.7, "123456", "", 0, 17.700001, 1, 142, 284, 35.400002, "" }, + /*152*/ { BARCODE_PZN, COMPLIANT_HEIGHT, 17.7, "123456", "", ZINT_WARN_NONCOMPLIANT, 17.700001, 1, 142, 284, 35.400002, "" }, + /*153*/ { BARCODE_PZN, COMPLIANT_HEIGHT, 17.8, "123456", "", 0, 17.799999, 1, 142, 284, 35.599998, "" }, + /*154*/ { BARCODE_PHARMA_TWO, -1, -1, "12345678", "", 0, 10, 2, 29, 58, 20, "" }, + /*155*/ { BARCODE_PHARMA_TWO, -1, 1, "12345678", "", 0, 1, 2, 29, 58, 2, "" }, + /*156*/ { BARCODE_PHARMA_TWO, -1, 3.9, "12345678", "", 0, 3.9000001, 2, 29, 58, 7.8000002, "" }, + /*157*/ { BARCODE_PHARMA_TWO, COMPLIANT_HEIGHT, 3.9, "12345678", "", ZINT_WARN_NONCOMPLIANT, 3.9000001, 2, 29, 58, 7.8000002, "" }, + /*158*/ { BARCODE_PHARMA_TWO, COMPLIANT_HEIGHT, 4, "12345678", "", 0, 4, 2, 29, 58, 8, "" }, + /*159*/ { BARCODE_PHARMA_TWO, -1, 15, "12345678", "", 0, 15, 2, 29, 58, 30, "" }, + /*160*/ { BARCODE_PHARMA_TWO, COMPLIANT_HEIGHT, 15, "12345678", "", 0, 15, 2, 29, 58, 30, "" }, + /*161*/ { BARCODE_PHARMA_TWO, COMPLIANT_HEIGHT, 15.1, "12345678", "", ZINT_WARN_NONCOMPLIANT, 15.1, 2, 29, 58, 30.200001, "" }, + /*162*/ { BARCODE_PDF417, -1, 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 4, 8, 120, 240, 8, "8 rows" }, + /*163*/ { BARCODE_PDF417, -1, 4, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 4, 8, 120, 240, 8, "" }, + /*164*/ { BARCODE_PDF417, -1, 23, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 23, 8, 120, 240, 46, "" }, + /*165*/ { BARCODE_PDF417, -1, 24, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 24, 8, 120, 240, 48, "" }, + /*166*/ { BARCODE_PDF417, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 36, 12, 120, 240, 72, "12 rows" }, + /*167*/ { BARCODE_PDF417, -1, 12, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 12, 12, 120, 240, 24, "" }, + /*168*/ { BARCODE_PDF417COMP, -1, 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ", "", ZINT_WARN_NONCOMPLIANT, 4.5, 9, 86, 172, 9, "9 rows" }, + /*169*/ { BARCODE_PDF417COMP, -1, 24, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ", "", ZINT_WARN_NONCOMPLIANT, 24, 9, 86, 172, 48, "" }, + /*170*/ { BARCODE_MAXICODE, -1, 1, "1234567890", "", 0, 16.5, 33, 30, 60, 57.733398, "Fixed size, symbol->height ignored" }, + /*171*/ { BARCODE_QRCODE, -1, 1, "ABCD", "", 0, 21, 21, 21, 42, 42, "Fixed width-to-height ratio, symbol->height ignored" }, + /*172*/ { BARCODE_CODE128B, -1, 1, "1234567890", "", 0, 1, 1, 145, 290, 2, "" }, + /*173*/ { BARCODE_CODE128B, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 145, 290, 2, "" }, + /*174*/ { BARCODE_CODE128B, -1, 4, "1234567890", "", 0, 4, 1, 145, 290, 8, "" }, + /*175*/ { BARCODE_AUSPOST, -1, -1, "12345678901234567890123", "", 0, 8, 3, 133, 266, 16, "" }, + /*176*/ { BARCODE_AUSPOST, -1, 1, "12345678901234567890123", "", 0, 2, 3, 133, 266, 4, "" }, + /*177*/ { BARCODE_AUSPOST, COMPLIANT_HEIGHT, 1, "12345678901234567890123", "", ZINT_WARN_NONCOMPLIANT, 1.9230771, 3, 133, 266, 3.8461542, "" }, + /*178*/ { BARCODE_AUSPOST, -1, 6.9, "12345678901234567890123", "", 0, 6.9000001, 3, 133, 266, 13.8, "" }, + /*179*/ { BARCODE_AUSPOST, COMPLIANT_HEIGHT, 6.9, "12345678901234567890123", "", ZINT_WARN_NONCOMPLIANT, 6.9000001, 3, 133, 266, 13.8, "" }, + /*180*/ { BARCODE_AUSPOST, COMPLIANT_HEIGHT, 7, "12345678901234567890123", "", 0, 7, 3, 133, 266, 14, "" }, + /*181*/ { BARCODE_AUSPOST, -1, 14, "12345678901234567890123", "", 0, 14, 3, 133, 266, 28, "" }, + /*182*/ { BARCODE_AUSPOST, COMPLIANT_HEIGHT, 14, "12345678901234567890123", "", 0, 14, 3, 133, 266, 28, "" }, + /*183*/ { BARCODE_AUSPOST, COMPLIANT_HEIGHT, 14.1, "12345678901234567890123", "", ZINT_WARN_NONCOMPLIANT, 14.099999, 3, 133, 266, 28.199999, "" }, + /*184*/ { BARCODE_AUSREPLY, -1, 14, "12345678", "", 0, 14, 3, 73, 146, 28, "" }, + /*185*/ { BARCODE_AUSREPLY, COMPLIANT_HEIGHT, 14, "12345678", "", 0, 14, 3, 73, 146, 28, "" }, + /*186*/ { BARCODE_AUSREPLY, COMPLIANT_HEIGHT, 14.25, "12345678", "", ZINT_WARN_NONCOMPLIANT, 14.25, 3, 73, 146, 28.5, "" }, + /*187*/ { BARCODE_AUSROUTE, -1, 7, "12345678", "", 0, 7, 3, 73, 146, 14, "" }, + /*188*/ { BARCODE_AUSROUTE, COMPLIANT_HEIGHT, 7, "12345678", "", 0, 7, 3, 73, 146, 14, "" }, + /*189*/ { BARCODE_AUSREDIRECT, -1, 14, "12345678", "", 0, 14, 3, 73, 146, 28, "" }, + /*190*/ { BARCODE_AUSREDIRECT, COMPLIANT_HEIGHT, 14, "12345678", "", 0, 14, 3, 73, 146, 28, "" }, + /*191*/ { BARCODE_ISBNX, -1, 1, "123456789", "", 0, 1, 1, 95, 226, 12, "" }, + /*192*/ { BARCODE_ISBNX, -1, 69, "123456789", "", 0, 69, 1, 95, 226, 148, "" }, + /*193*/ { BARCODE_ISBNX, COMPLIANT_HEIGHT, 69, "123456789", "", ZINT_WARN_NONCOMPLIANT, 69, 1, 95, 226, 148, "" }, + /*194*/ { BARCODE_ISBNX, COMPLIANT_HEIGHT, 69.5, "123456789", "", 0, 69.5, 1, 95, 226, 149, "" }, + /*195*/ { BARCODE_RM4SCC, -1, -1, "1234567890", "", 0, 8, 3, 91, 182, 16, "" }, + /*196*/ { BARCODE_RM4SCC, -1, 1, "1234567890", "", 0, 2, 3, 91, 182, 4, "" }, + /*197*/ { BARCODE_RM4SCC, COMPLIANT_HEIGHT, 1, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 1.9615386, 3, 91, 182, 3.9230771, "" }, + /*198*/ { BARCODE_RM4SCC, -1, 4, "1234567890", "", 0, 4, 3, 91, 182, 8, "" }, + /*199*/ { BARCODE_RM4SCC, COMPLIANT_HEIGHT, 4, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 4, 3, 91, 182, 8, "" }, + /*200*/ { BARCODE_RM4SCC, -1, 6, "1234567890", "", 0, 6, 3, 91, 182, 12, "" }, + /*201*/ { BARCODE_RM4SCC, COMPLIANT_HEIGHT, 6, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 6, 3, 91, 182, 12, "" }, + /*202*/ { BARCODE_RM4SCC, COMPLIANT_HEIGHT, 6.5, "1234567890", "", 0, 6.5, 3, 91, 182, 13, "" }, + /*203*/ { BARCODE_RM4SCC, -1, 10.8, "1234567890", "", 0, 10.8, 3, 91, 182, 21.6, "" }, + /*204*/ { BARCODE_RM4SCC, COMPLIANT_HEIGHT, 10.8, "1234567890", "", 0, 10.8, 3, 91, 182, 21.6, "" }, + /*205*/ { BARCODE_RM4SCC, COMPLIANT_HEIGHT, 11, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 11, 3, 91, 182, 22, "" }, + /*206*/ { BARCODE_RM4SCC, -1, 16, "1234567890", "", 0, 16, 3, 91, 182, 32, "" }, + /*207*/ { BARCODE_RM4SCC, COMPLIANT_HEIGHT, 16, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 16, 3, 91, 182, 32, "" }, + /*208*/ { BARCODE_DATAMATRIX, -1, 1, "ABCD", "", 0, 12, 12, 12, 24, 24, "Fixed width-to-height ratio, symbol->height ignored" }, + /*209*/ { BARCODE_EAN14, -1, 1, "1234567890123", "", 0, 1, 1, 134, 268, 2, "" }, + /*210*/ { BARCODE_EAN14, -1, 5.7, "1234567890123", "", 0, 5.6999998, 1, 134, 268, 11.4, "" }, + /*211*/ { BARCODE_EAN14, COMPLIANT_HEIGHT, 5.7, "1234567890123", "", ZINT_WARN_NONCOMPLIANT, 5.6999998, 1, 134, 268, 11.4, "" }, + /*212*/ { BARCODE_EAN14, COMPLIANT_HEIGHT, 5.8, "1234567890123", "", 0, 5.8000002, 1, 134, 268, 11.6, "" }, + /*213*/ { BARCODE_VIN, -1, 1, "12345678701234567", "", 0, 1, 1, 246, 492, 2, "" }, + /*214*/ { BARCODE_VIN, COMPLIANT_HEIGHT, 1, "12345678701234567", "", 0, 1, 1, 246, 492, 2, "Doc unlikely" }, + /*215*/ { BARCODE_VIN, -1, 4, "12345678701234567", "", 0, 4, 1, 246, 492, 8, "" }, + /*216*/ { BARCODE_CODABLOCKF, -1, -1, "1234567890", "", 0, 20, 2, 101, 242, 44, "2 rows" }, + /*217*/ { BARCODE_CODABLOCKF, -1, 1, "1234567890", "", 0, 1, 2, 101, 242, 6, "" }, + /*218*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 1, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 1, 2, 101, 242, 6, "" }, + /*219*/ { BARCODE_CODABLOCKF, -1, 15.5, "1234567890", "", 0, 15.5, 2, 101, 242, 35, "" }, + /*220*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 15.5, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 15.5, 2, 101, 242, 35, "" }, + /*221*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 16, "1234567890", "", 0, 16, 2, 101, 242, 36, "" }, + /*222*/ { BARCODE_CODABLOCKF, -1, -1, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 110, 11, 156, 352, 224, "11 rows, 14 cols" }, + /*223*/ { BARCODE_CODABLOCKF, -1, 87, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 87, 11, 156, 352, 178, "" }, + /*224*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 87, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", ZINT_WARN_NONCOMPLIANT, 87, 11, 156, 352, 178, "" }, + /*225*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 88, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 88, 11, 156, 352, 180, "" }, + /*226*/ { BARCODE_CODABLOCKF, -1, 220, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 220, 11, 156, 352, 444, "" }, + /*227*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 220, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrs", "", 0, 220, 11, 156, 352, 444, "" }, + /*228*/ { BARCODE_CODABLOCKF, -1, -1, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv", "", 0, 110, 11, 167, 374, 224, "11 rows, 15 cols" }, + /*229*/ { BARCODE_CODABLOCKF, -1, 93, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv", "", 0, 92.999992, 11, 167, 374, 189.99998, "" }, + /*230*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 93, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv", "", ZINT_WARN_NONCOMPLIANT, 92.999992, 11, 167, 374, 189.99998, "" }, + /*231*/ { BARCODE_CODABLOCKF, COMPLIANT_HEIGHT, 93.5, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv", "", 0, 93.5, 11, 167, 374, 191, "" }, + /*232*/ { BARCODE_NVE18, -1, 1, "12345678901234567", "", 0, 1, 1, 156, 312, 2, "" }, + /*233*/ { BARCODE_NVE18, -1, 5.7, "12345678901234567", "", 0, 5.6999998, 1, 156, 312, 11.4, "" }, + /*234*/ { BARCODE_NVE18, COMPLIANT_HEIGHT, 5.7, "12345678901234567", "", ZINT_WARN_NONCOMPLIANT, 5.6999998, 1, 156, 312, 11.4, "" }, + /*235*/ { BARCODE_NVE18, COMPLIANT_HEIGHT, 5.8, "12345678901234567", "", 0, 5.8000002, 1, 156, 312, 11.6, "" }, + /*236*/ { BARCODE_JAPANPOST, -1, -1, "1234567890", "", 0, 8, 3, 133, 266, 16, "" }, + /*237*/ { BARCODE_JAPANPOST, -1, 1, "1234567890", "", 0, 2, 3, 133, 266, 4, "" }, + /*238*/ { BARCODE_JAPANPOST, COMPLIANT_HEIGHT, 1, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 1.5, 3, 133, 266, 3, "" }, + /*239*/ { BARCODE_JAPANPOST, -1, 4.8, "1234567890", "", 0, 4.8000002, 3, 133, 266, 9.6000004, "" }, + /*240*/ { BARCODE_JAPANPOST, COMPLIANT_HEIGHT, 4.8, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 4.8000002, 3, 133, 266, 9.6000004, "" }, + /*241*/ { BARCODE_JAPANPOST, COMPLIANT_HEIGHT, 4.9, "1234567890", "", 0, 4.9000001, 3, 133, 266, 9.8000002, "" }, + /*242*/ { BARCODE_JAPANPOST, -1, 7, "1234567890", "", 0, 7, 3, 133, 266, 14, "" }, + /*243*/ { BARCODE_JAPANPOST, COMPLIANT_HEIGHT, 7, "1234567890", "", 0, 7, 3, 133, 266, 14, "" }, + /*244*/ { BARCODE_JAPANPOST, COMPLIANT_HEIGHT, 7.5, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 7.5, 3, 133, 266, 15, "" }, + /*245*/ { BARCODE_JAPANPOST, -1, 16, "1234567890", "", 0, 16, 3, 133, 266, 32, "" }, + /*246*/ { BARCODE_JAPANPOST, COMPLIANT_HEIGHT, 16, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 15.999999, 3, 133, 266, 31.999998, "" }, + /*247*/ { BARCODE_KOREAPOST, -1, 1, "123456", "", 0, 1, 1, 167, 334, 2, "" }, + /*248*/ { BARCODE_KOREAPOST, COMPLIANT_HEIGHT, 1, "123456", "", 0, 1, 1, 167, 334, 2, "TODO: Find doc" }, + /*249*/ { BARCODE_KOREAPOST, -1, 4, "123456", "", 0, 4, 1, 167, 334, 8, "" }, + /*250*/ { BARCODE_DBAR_STK, -1, -1, "1234567890123", "", 0, 13, 3, 50, 100, 26, "" }, + /*251*/ { BARCODE_DBAR_STK, -1, 1, "1234567890123", "", 0, 2.2, 3, 50, 100, 4.4000001, "" }, + /*252*/ { BARCODE_DBAR_STK, -1, 12, "1234567890123", "", 0, 12, 3, 50, 100, 24, "" }, + /*253*/ { BARCODE_DBAR_STK, COMPLIANT_HEIGHT, 12, "1234567890123", "", ZINT_WARN_NONCOMPLIANT, 12, 3, 50, 100, 24, "" }, + /*254*/ { BARCODE_DBAR_STK, COMPLIANT_HEIGHT, 13, "1234567890123", "", 0, 13, 3, 50, 100, 26, "" }, + /*255*/ { BARCODE_DBAR_OMNSTK, -1, -1, "1234567890123", "", 0, 69, 5, 50, 100, 138, "" }, + /*256*/ { BARCODE_DBAR_OMNSTK, -1, 1, "1234567890123", "", 0, 4, 5, 50, 100, 8, "" }, + /*257*/ { BARCODE_DBAR_OMNSTK, -1, 68, "1234567890123", "", 0, 68, 5, 50, 100, 136, "" }, + /*258*/ { BARCODE_DBAR_OMNSTK, COMPLIANT_HEIGHT, 68, "1234567890123", "", ZINT_WARN_NONCOMPLIANT, 68, 5, 50, 100, 136, "" }, + /*259*/ { BARCODE_DBAR_OMNSTK, COMPLIANT_HEIGHT, 69, "1234567890123", "", 0, 69, 5, 50, 100, 138, "" }, + /*260*/ { BARCODE_DBAR_EXPSTK, -1, -1, "[01]12345678901231", "", 0, 71, 5, 102, 204, 142, "2 rows" }, + /*261*/ { BARCODE_DBAR_EXPSTK, -1, 1, "[01]12345678901231", "", 0, 4, 5, 102, 204, 8, "" }, + /*262*/ { BARCODE_DBAR_EXPSTK, -1, 70, "[01]12345678901231", "", 0, 70, 5, 102, 204, 140, "" }, + /*263*/ { BARCODE_DBAR_EXPSTK, COMPLIANT_HEIGHT, 70, "[01]12345678901231", "", ZINT_WARN_NONCOMPLIANT, 70, 5, 102, 204, 140, "" }, + /*264*/ { BARCODE_DBAR_EXPSTK, COMPLIANT_HEIGHT, 71, "[01]12345678901231", "", 0, 71, 5, 102, 204, 142, "" }, + /*265*/ { BARCODE_DBAR_EXPSTK, -1, -1, "[01]09501101530003[3920]123456789012345", "", 0, 108, 9, 102, 204, 216, "3 rows" }, + /*266*/ { BARCODE_DBAR_EXPSTK, -1, 1, "[01]09501101530003[3920]123456789012345", "", 0, 7.5, 9, 102, 204, 15, "" }, + /*267*/ { BARCODE_DBAR_EXPSTK, -1, 107.5, "[01]09501101530003[3920]123456789012345", "", 0, 107.5, 9, 102, 204, 215, "" }, + /*268*/ { BARCODE_DBAR_EXPSTK, COMPLIANT_HEIGHT, 107.5, "[01]09501101530003[3920]123456789012345", "", ZINT_WARN_NONCOMPLIANT, 107.5, 9, 102, 204, 215, "" }, + /*269*/ { BARCODE_DBAR_EXPSTK, COMPLIANT_HEIGHT, 108, "[01]09501101530003[3920]123456789012345", "", 0, 108, 9, 102, 204, 216, "" }, + /*270*/ { BARCODE_PLANET, -1, -1, "12345678901", "", 0, 12, 2, 123, 246, 24, "" }, + /*271*/ { BARCODE_PLANET, -1, 1, "12345678901", "", 0, 1, 2, 123, 246, 2, "" }, + /*272*/ { BARCODE_PLANET, COMPLIANT_HEIGHT, 1, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 1.25, 2, 123, 246, 2.5, "" }, + /*273*/ { BARCODE_PLANET, -1, 4.5, "12345678901", "", 0, 4.5, 2, 123, 246, 9, "" }, + /*274*/ { BARCODE_PLANET, COMPLIANT_HEIGHT, 4.5, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 4.5, 2, 123, 246, 9, "" }, + /*275*/ { BARCODE_PLANET, COMPLIANT_HEIGHT, 4.6, "12345678901", "", 0, 4.5999999, 2, 123, 246, 9.1999998, "" }, + /*276*/ { BARCODE_PLANET, -1, 9, "12345678901", "", 0, 9, 2, 123, 246, 18, "" }, + /*277*/ { BARCODE_PLANET, COMPLIANT_HEIGHT, 9, "12345678901", "", 0, 9, 2, 123, 246, 18, "" }, + /*278*/ { BARCODE_PLANET, COMPLIANT_HEIGHT, 9.1, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 9.1000004, 2, 123, 246, 18.200001, "" }, + /*279*/ { BARCODE_PLANET, -1, 24, "12345678901", "", 0, 24, 2, 123, 246, 48, "" }, + /*280*/ { BARCODE_PLANET, COMPLIANT_HEIGHT, 24, "12345678901", "", ZINT_WARN_NONCOMPLIANT, 24, 2, 123, 246, 48, "" }, + /*281*/ { BARCODE_MICROPDF417, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 20, 10, 82, 164, 40, "10 rows" }, + /*282*/ { BARCODE_MICROPDF417, -1, 1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 5, 10, 82, 164, 10, "" }, + /*283*/ { BARCODE_MICROPDF417, -1, 4, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 5, 10, 82, 164, 10, "" }, + /*284*/ { BARCODE_MICROPDF417, -1, 19, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 19, 10, 82, 164, 38, "" }, + /*285*/ { BARCODE_MICROPDF417, -1, 30, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 30, 10, 82, 164, 60, "" }, + /*286*/ { BARCODE_MICROPDF417, -1, -1, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, 40, 20, 55, 110, 80, "20 rows" }, + /*287*/ { BARCODE_MICROPDF417, -1, 20, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ", "", ZINT_WARN_NONCOMPLIANT, 20, 20, 55, 110, 40, "" }, + /*288*/ { BARCODE_USPS_IMAIL, -1, -1, "12345678901234567890", "", 0, 8, 3, 129, 258, 16, "" }, + /*289*/ { BARCODE_USPS_IMAIL, -1, 1, "12345678901234567890", "", 0, 2, 3, 129, 258, 4, "" }, + /*290*/ { BARCODE_USPS_IMAIL, COMPLIANT_HEIGHT, 1, "12345678901234567890", "", ZINT_WARN_NONCOMPLIANT, 1.5104165, 3, 129, 258, 3.020833, "" }, + /*291*/ { BARCODE_USPS_IMAIL, -1, 4.8, "12345678901234567890", "", 0, 4.8000002, 3, 129, 258, 9.6000004, "" }, + /*292*/ { BARCODE_USPS_IMAIL, COMPLIANT_HEIGHT, 4.8, "12345678901234567890", "", ZINT_WARN_NONCOMPLIANT, 4.8000002, 3, 129, 258, 9.6000004, "" }, + /*293*/ { BARCODE_USPS_IMAIL, COMPLIANT_HEIGHT, 4.9, "12345678901234567890", "", 0, 4.9000001, 3, 129, 258, 9.8000002, "" }, + /*294*/ { BARCODE_USPS_IMAIL, -1, 7.7, "12345678901234567890", "", 0, 7.6999998, 3, 129, 258, 15.4, "" }, + /*295*/ { BARCODE_USPS_IMAIL, COMPLIANT_HEIGHT, 7.7, "12345678901234567890", "", 0, 7.7000003, 3, 129, 258, 15.400001, "" }, + /*296*/ { BARCODE_USPS_IMAIL, COMPLIANT_HEIGHT, 7.8, "12345678901234567890", "", ZINT_WARN_NONCOMPLIANT, 7.7999997, 3, 129, 258, 15.599999, "" }, + /*297*/ { BARCODE_PLESSEY, -1, 1, "1234567890", "", 0, 1, 1, 227, 454, 2, "" }, + /*298*/ { BARCODE_PLESSEY, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 227, 454, 2, "TODO: Find doc" }, + /*299*/ { BARCODE_PLESSEY, -1, 4, "1234567890", "", 0, 4, 1, 227, 454, 8, "" }, + /*300*/ { BARCODE_TELEPEN_NUM, -1, 1, "1234567890", "", 0, 1, 1, 128, 256, 2, "" }, + /*301*/ { BARCODE_TELEPEN_NUM, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 128, 256, 2, "No known min" }, + /*302*/ { BARCODE_TELEPEN_NUM, -1, 4, "1234567890", "", 0, 4, 1, 128, 256, 8, "" }, + /*303*/ { BARCODE_ITF14, -1, 1, "1234567890", "", 0, 1, 1, 135, 330, 22, "" }, + /*304*/ { BARCODE_ITF14, -1, 5.7, "1234567890", "", 0, 5.6999998, 1, 135, 330, 31.4, "" }, + /*305*/ { BARCODE_ITF14, COMPLIANT_HEIGHT, 5.7, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 5.6999998, 1, 135, 330, 31.4, "" }, + /*306*/ { BARCODE_ITF14, COMPLIANT_HEIGHT, 5.8, "1234567890", "", 0, 5.8000002, 1, 135, 330, 31.6, "" }, + /*307*/ { BARCODE_KIX, -1, -1, "1234567890", "", 0, 8, 3, 79, 158, 16, "" }, + /*308*/ { BARCODE_KIX, -1, 1, "1234567890", "", 0, 2, 3, 79, 158, 4, "" }, + /*309*/ { BARCODE_KIX, COMPLIANT_HEIGHT, 1, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 1.9615386, 3, 79, 158, 3.9230771, "" }, + /*310*/ { BARCODE_KIX, -1, 6.4, "1234567890", "", 0, 6.4000001, 3, 79, 158, 12.8, "" }, + /*311*/ { BARCODE_KIX, COMPLIANT_HEIGHT, 6.4, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 6.3999996, 3, 79, 158, 12.799999, "" }, + /*312*/ { BARCODE_KIX, COMPLIANT_HEIGHT, 6.5, "1234567890", "", 0, 6.5, 3, 79, 158, 13, "" }, + /*313*/ { BARCODE_KIX, -1, 10.8, "1234567890", "", 0, 10.8, 3, 79, 158, 21.6, "" }, + /*314*/ { BARCODE_KIX, COMPLIANT_HEIGHT, 10.8, "1234567890", "", 0, 10.8, 3, 79, 158, 21.6, "" }, + /*315*/ { BARCODE_KIX, COMPLIANT_HEIGHT, 10.9, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 10.9, 3, 79, 158, 21.799999, "" }, + /*316*/ { BARCODE_KIX, -1, 16, "1234567890", "", 0, 16, 3, 79, 158, 32, "" }, + /*317*/ { BARCODE_KIX, COMPLIANT_HEIGHT, 16, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 16, 3, 79, 158, 32, "" }, + /*318*/ { BARCODE_AZTEC, -1, 1, "1234567890AB", "", 0, 15, 15, 15, 30, 30, "Fixed width-to-height ratio, symbol->height ignored" }, + /*319*/ { BARCODE_DAFT, -1, -1, "DAFTDAFTDAFTDAFT", "", 0, 8, 3, 31, 62, 16, "" }, + /*320*/ { BARCODE_DAFT, -1, 1, "DAFTDAFTDAFTDAFT", "", 0, 2, 3, 31, 62, 4, "" }, + /*321*/ { BARCODE_DAFT, COMPLIANT_HEIGHT, 1, "DAFTDAFTDAFTDAFT", "", 0, 2, 3, 31, 62, 4, "" }, + /*322*/ { BARCODE_DAFT, -1, 4, "DAFTDAFTDAFTDAFT", "", 0, 4, 3, 31, 62, 8, "" }, + /*323*/ { BARCODE_DAFT, -1, 6, "DAFTDAFTDAFTDAFT", "", 0, 6, 3, 31, 62, 12, "" }, + /*324*/ { BARCODE_DAFT, -1, 12, "DAFTDAFTDAFTDAFT", "", 0, 12, 3, 31, 62, 24, "" }, + /*325*/ { BARCODE_DAFT, -1, 16, "DAFTDAFTDAFTDAFT", "", 0, 16, 3, 31, 62, 32, "" }, + /*326*/ { BARCODE_DAFT, COMPLIANT_HEIGHT, 16, "DAFTDAFTDAFTDAFT", "", 0, 16, 3, 31, 62, 32, "" }, + /*327*/ { BARCODE_DPD, -1, 1, "0123456789012345678901234567", "", 0, 1, 1, 189, 378, 2, "" }, + /*328*/ { BARCODE_DPD, -1, 62, "0123456789012345678901234567", "", 0, 62, 1, 189, 378, 124, "" }, + /*329*/ { BARCODE_DPD, COMPLIANT_HEIGHT, 62, "0123456789012345678901234567", "", ZINT_WARN_NONCOMPLIANT, 62, 1, 189, 378, 124, "" }, + /*330*/ { BARCODE_DPD, COMPLIANT_HEIGHT, 62.5, "0123456789012345678901234567", "", 0, 62.5, 1, 189, 378, 125, "" }, + /*331*/ { BARCODE_MICROQR, -1, 1, "12345", "", 0, 11, 11, 11, 22, 22, "Fixed width-to-height ratio, symbol->height ignored" }, + /*332*/ { BARCODE_HIBC_128, -1, 1, "1234567890", "", 0, 1, 1, 123, 246, 2, "" }, + /*333*/ { BARCODE_HIBC_128, COMPLIANT_HEIGHT, 1, "1234567890", "", 0, 1, 1, 123, 246, 2, "" }, + /*334*/ { BARCODE_HIBC_128, -1, 4, "1234567890", "", 0, 4, 1, 123, 246, 8, "" }, + /*335*/ { BARCODE_HIBC_39, -1, 1, "1234567890", "", 0, 1, 1, 223, 446, 2, "" }, + /*336*/ { BARCODE_HIBC_39, COMPLIANT_HEIGHT, 1, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 1, 1, 223, 446, 2, "" }, + /*337*/ { BARCODE_HIBC_39, -1, 4, "1234567890", "", 0, 4, 1, 223, 446, 8, "" }, + /*338*/ { BARCODE_HIBC_DM, -1, 1, "ABC", "", 0, 12, 12, 12, 24, 24, "Fixed width-to-height ratio, symbol->height ignored" }, + /*339*/ { BARCODE_HIBC_QR, -1, 1, "1234567890AB", "", 0, 21, 21, 21, 42, 42, "Fixed width-to-height ratio, symbol->height ignored" }, + /*340*/ { BARCODE_HIBC_PDF, -1, -1, "ABCDEF", "", 0, 21, 7, 103, 206, 42, "7 rows" }, + /*341*/ { BARCODE_HIBC_PDF, -1, 1, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 3.5, 7, 103, 206, 7, "" }, + /*342*/ { BARCODE_HIBC_PDF, -1, 4, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 4, 7, 103, 206, 8, "" }, + /*343*/ { BARCODE_HIBC_PDF, -1, 36, "ABCDEF", "", 0, 36, 7, 103, 206, 72, "" }, + /*344*/ { BARCODE_HIBC_MICPDF, -1, -1, "ABCDEF", "", 0, 12, 6, 82, 164, 24, "6 rows" }, + /*345*/ { BARCODE_HIBC_MICPDF, -1, 1, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 3, 6, 82, 164, 6, "" }, + /*346*/ { BARCODE_HIBC_MICPDF, -1, 4, "ABCDEF", "", ZINT_WARN_NONCOMPLIANT, 4, 6, 82, 164, 8, "" }, + /*347*/ { BARCODE_HIBC_MICPDF, -1, 47, "ABCDEF", "", 0, 47, 6, 82, 164, 94, "" }, + /*348*/ { BARCODE_HIBC_BLOCKF, -1, -1, "1234567890", "", 0, 30, 3, 101, 242, 64, "3 rows" }, + /*349*/ { BARCODE_HIBC_BLOCKF, -1, 1, "1234567890", "", 0, 1.5, 3, 101, 242, 7, "" }, + /*350*/ { BARCODE_HIBC_BLOCKF, COMPLIANT_HEIGHT, 1, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 1.5, 3, 101, 242, 7, "" }, + /*351*/ { BARCODE_HIBC_BLOCKF, -1, 4, "1234567890", "", 0, 4, 3, 101, 242, 12, "" }, + /*352*/ { BARCODE_HIBC_BLOCKF, COMPLIANT_HEIGHT, 4, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 4, 3, 101, 242, 12, "" }, + /*353*/ { BARCODE_HIBC_BLOCKF, -1, 23, "1234567890", "", 0, 23, 3, 101, 242, 50, "" }, + /*354*/ { BARCODE_HIBC_BLOCKF, COMPLIANT_HEIGHT, 23, "1234567890", "", ZINT_WARN_NONCOMPLIANT, 23, 3, 101, 242, 50, "" }, + /*355*/ { BARCODE_HIBC_BLOCKF, COMPLIANT_HEIGHT, 24, "1234567890", "", 0, 24, 3, 101, 242, 52, "" }, + /*356*/ { BARCODE_HIBC_BLOCKF, -1, 60, "1234567890", "", 0, 60, 3, 101, 242, 124, "" }, + /*357*/ { BARCODE_HIBC_BLOCKF, COMPLIANT_HEIGHT, 60, "1234567890", "", 0, 60, 3, 101, 242, 124, "" }, + /*358*/ { BARCODE_HIBC_AZTEC, -1, 1, "1234567890AB", "", 0, 19, 19, 19, 38, 38, "Fixed width-to-height ratio, symbol->height ignored" }, + /*359*/ { BARCODE_DOTCODE, -1, 1, "ABC", "", 0, 11, 11, 16, 32, 22, "Fixed width-to-height ratio, symbol->height ignored" }, + /*360*/ { BARCODE_HANXIN, -1, 1, "1234567890AB", "", 0, 23, 23, 23, 46, 46, "Fixed width-to-height ratio, symbol->height ignored" }, + /*361*/ { BARCODE_MAILMARK, -1, -1, "01000000000000000AA00AA0A", "", 0, 10, 3, 155, 310, 20, "" }, + /*362*/ { BARCODE_MAILMARK, -1, 1, "01000000000000000AA00AA0A", "", 0, 2.5, 3, 155, 310, 5, "" }, + /*363*/ { BARCODE_MAILMARK, COMPLIANT_HEIGHT, 1, "01000000000000000AA00AA0A", "", ZINT_WARN_NONCOMPLIANT, 1.9615386, 3, 155, 310, 3.9230771, "" }, + /*364*/ { BARCODE_MAILMARK, -1, 6.4, "01000000000000000AA00AA0A", "", 0, 6.4000001, 3, 155, 310, 12.8, "" }, + /*365*/ { BARCODE_MAILMARK, COMPLIANT_HEIGHT, 6.4, "01000000000000000AA00AA0A", "", ZINT_WARN_NONCOMPLIANT, 6.3999996, 3, 155, 310, 12.799999, "" }, + /*366*/ { BARCODE_MAILMARK, COMPLIANT_HEIGHT, 6.5, "01000000000000000AA00AA0A", "", 0, 6.5, 3, 155, 310, 13, "" }, + /*367*/ { BARCODE_MAILMARK, -1, 10, "01000000000000000AA00AA0A", "", 0, 10, 3, 155, 310, 20, "" }, + /*368*/ { BARCODE_MAILMARK, COMPLIANT_HEIGHT, 10, "01000000000000000AA00AA0A", "", 0, 10, 3, 155, 310, 20, "" }, + /*369*/ { BARCODE_MAILMARK, COMPLIANT_HEIGHT, 11, "01000000000000000AA00AA0A", "", ZINT_WARN_NONCOMPLIANT, 11, 3, 155, 310, 22, "" }, + /*370*/ { BARCODE_MAILMARK, -1, 15, "01000000000000000AA00AA0A", "", 0, 15, 3, 155, 310, 30, "" }, + /*371*/ { BARCODE_MAILMARK, COMPLIANT_HEIGHT, 15, "01000000000000000AA00AA0A", "", ZINT_WARN_NONCOMPLIANT, 15, 3, 155, 310, 30, "" }, + /*372*/ { BARCODE_MAILMARK, -1, 20, "01000000000000000AA00AA0A", "", 0, 20, 3, 155, 310, 40, "" }, + /*373*/ { BARCODE_MAILMARK, COMPLIANT_HEIGHT, 20, "01000000000000000AA00AA0A", "", ZINT_WARN_NONCOMPLIANT, 20, 3, 155, 310, 40, "" }, + /*374*/ { BARCODE_AZRUNE, -1, 1, "1", "", 0, 11, 11, 11, 22, 22, "Fixed width-to-height ratio, symbol->height ignored" }, + /*375*/ { BARCODE_CODE32, -1, 1, "12345678", "", 0, 1, 1, 103, 206, 2, "" }, + /*376*/ { BARCODE_CODE32, COMPLIANT_HEIGHT, 1, "12345678", "", ZINT_WARN_NONCOMPLIANT, 1, 1, 103, 206, 2, "" }, + /*377*/ { BARCODE_CODE32, -1, 19, "12345678", "", 0, 19, 1, 103, 206, 38, "" }, + /*378*/ { BARCODE_CODE32, COMPLIANT_HEIGHT, 19, "12345678", "", ZINT_WARN_NONCOMPLIANT, 19, 1, 103, 206, 38, "" }, + /*379*/ { BARCODE_CODE32, COMPLIANT_HEIGHT, 20, "12345678", "", 0, 20, 1, 103, 206, 40, "" }, + /*380*/ { BARCODE_EANX_CC, -1, -1, "123456789012", "[20]01", 0, 50, 7, 99, 234, 110, "EAN-13, CC-A 3 rows" }, + /*381*/ { BARCODE_EANX_CC, -1, 1, "123456789012", "[20]01", 0, 12.5, 7, 99, 234, 35, "" }, + /*382*/ { BARCODE_EANX_CC, -1, 81, "123456789012", "[20]01", 0, 81, 7, 99, 234, 172, "" }, + /*383*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 81, "123456789012", "[20]01", ZINT_WARN_NONCOMPLIANT, 81, 7, 99, 234, 172, "" }, + /*384*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 81.25, "123456789012", "[20]01", 0, 81.25, 7, 99, 234, 172.5, "" }, + /*385*/ { BARCODE_EANX_CC, -1, -1, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 50, 9, 99, 234, 110, "EAN-13, CC-A 5 rows" }, + /*386*/ { BARCODE_EANX_CC, -1, 1, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 16.5, 9, 99, 234, 43, "" }, + /*387*/ { BARCODE_EANX_CC, -1, 85, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 85, 9, 99, 234, 180, "" }, + /*388*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 85, "123456789012", "[20]01[90]123456789012345678901234567890", ZINT_WARN_NONCOMPLIANT, 85, 9, 99, 234, 180, "" }, + /*389*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 85.25, "123456789012", "[20]01[90]123456789012345678901234567890", 0, 85.25, 9, 99, 234, 180.5, "" }, + /*390*/ { BARCODE_EANX_CC, -1, -1, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 50, 11, 99, 234, 110, "EAN-13, CC-A 7 rows" }, + /*391*/ { BARCODE_EANX_CC, -1, 1, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 20.5, 11, 99, 234, 51, "" }, + /*392*/ { BARCODE_EANX_CC, -1, 89, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 89, 11, 99, 234, 188, "" }, + /*393*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 89, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", ZINT_WARN_NONCOMPLIANT, 89, 11, 99, 234, 188, "" }, + /*394*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 89.25, "123456789012", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 89.25, 11, 99, 234, 188.5, "" }, + /*395*/ { BARCODE_EANX_CC, -1, -1, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 50, 14, 99, 234, 110, "EAN-13, CC-B 10 rows" }, + /*396*/ { BARCODE_EANX_CC, -1, 1, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 26.5, 14, 99, 234, 63, "" }, + /*397*/ { BARCODE_EANX_CC, -1, 95, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 95, 14, 99, 234, 200, "" }, + /*398*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 95, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 95, 14, 99, 234, 200, "" }, + /*399*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 95.25, "123456789012", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 95.25, 14, 99, 234, 200.5, "" }, + /*400*/ { BARCODE_EANX_CC, -1, -1, "1234567", "[20]01[90]123456789012345678901234", 0, 50, 10, 72, 172, 110, "EAN-8, CC-A 4 rows" }, + /*401*/ { BARCODE_EANX_CC, -1, 1, "1234567", "[20]01[90]123456789012345678901234", 0, 18.5, 10, 72, 172, 47, "" }, + /*402*/ { BARCODE_EANX_CC, -1, 73, "1234567", "[20]01[90]123456789012345678901234", 0, 73, 10, 72, 172, 156, "" }, + /*403*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 73, "1234567", "[20]01[90]123456789012345678901234", ZINT_WARN_NONCOMPLIANT, 73, 10, 72, 172, 156, "" }, + /*404*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 73.25, "1234567", "[20]01[90]123456789012345678901234", 0, 73.25, 10, 72, 172, 156.5, "" }, + /*405*/ { BARCODE_EANX_CC, -1, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 50, 24, 82, 192, 110, "EAN-8, CC-B 15 rows" }, + /*406*/ { BARCODE_EANX_CC, -1, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 46.5, 24, 82, 192, 103, "" }, + /*407*/ { BARCODE_EANX_CC, -1, 101, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 101, 24, 82, 192, 212, "" }, + /*408*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 101, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", ZINT_WARN_NONCOMPLIANT, 101, 24, 82, 192, 212, "" }, + /*409*/ { BARCODE_EANX_CC, COMPLIANT_HEIGHT, 101.25, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 101.25, 24, 82, 192, 212.5, "" }, + /*410*/ { BARCODE_GS1_128_CC, -1, -1, "[01]12345678901231", "[20]01", 0, 50, 5, 145, 290, 100, "CC-A 3 rows" }, + /*411*/ { BARCODE_GS1_128_CC, -1, 1, "[01]12345678901231", "[20]01", 0, 7.5, 5, 145, 290, 15, "" }, + /*412*/ { BARCODE_GS1_128_CC, -1, 12.5, "[01]12345678901231", "[20]01", 0, 12.5, 5, 145, 290, 25, "" }, + /*413*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 12.5, "[01]12345678901231", "[20]01", ZINT_WARN_NONCOMPLIANT, 12.5, 5, 145, 290, 25, "" }, + /*414*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 12.75, "[01]12345678901231", "[20]01", 0, 12.75, 5, 145, 290, 25.5, "" }, + /*415*/ { BARCODE_GS1_128_CC, -1, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 50, 9, 145, 290, 100, "CC-A 7 rows" }, + /*416*/ { BARCODE_GS1_128_CC, -1, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 15.5, 9, 145, 290, 31, "" }, + /*417*/ { BARCODE_GS1_128_CC, -1, 20.7, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 20.700001, 9, 145, 290, 41.400002, "" }, + /*418*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 20.7, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", ZINT_WARN_NONCOMPLIANT, 20.700001, 9, 145, 290, 41.400002, "" }, + /*419*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 20.75, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 20.75, 9, 145, 290, 41.5, "" }, + /*420*/ { BARCODE_GS1_128_CC, -1, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 50, 12, 145, 290, 100, "CC-B 10 rows" }, + /*421*/ { BARCODE_GS1_128_CC, -1, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 21.5, 12, 145, 290, 43, "" }, + /*422*/ { BARCODE_GS1_128_CC, -1, 26.5, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 26.5, 12, 145, 290, 53, "" }, + /*423*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 26.5, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 26.5, 12, 145, 290, 53, "" }, + /*424*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 26.75, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 26.75, 12, 145, 290, 53.5, "" }, + /*425*/ { BARCODE_GS1_128_CC, -1, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", 0, 91.5, 32, 154, 308, 183, "CC-C 30 rows" }, + /*426*/ { BARCODE_GS1_128_CC, -1, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", 0, 91.5, 32, 154, 308, 183, "" }, + /*427*/ { BARCODE_GS1_128_CC, -1, 96.5, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", 0, 96.5, 32, 154, 308, 193, "" }, + /*428*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 96.5, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", ZINT_WARN_NONCOMPLIANT, 96.5, 32, 154, 308, 193, "" }, + /*429*/ { BARCODE_GS1_128_CC, COMPLIANT_HEIGHT, 96.75, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[92]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[93]123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[94]123456789012345678901234567890", 0, 96.75, 32, 154, 308, 193.5, "" }, + /*430*/ { BARCODE_DBAR_OMN_CC, -1, -1, "1234567890123", "[20]01[90]1234567890", 0, 21, 5, 100, 200, 42, "CC-A 3 rows" }, + /*431*/ { BARCODE_DBAR_OMN_CC, -1, 1, "1234567890123", "[20]01[90]1234567890", 0, 7.5, 5, 100, 200, 15, "" }, + /*432*/ { BARCODE_DBAR_OMN_CC, -1, 19.9, "1234567890123", "[20]01[90]1234567890", 0, 19.9, 5, 100, 200, 39.799999, "" }, + /*433*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 19.9, "1234567890123", "[20]01[90]1234567890", ZINT_WARN_NONCOMPLIANT, 19.9, 5, 100, 200, 39.799999, "" }, + /*434*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 20, "1234567890123", "[20]01[90]1234567890", 0, 20, 5, 100, 200, 40, "" }, + /*435*/ { BARCODE_DBAR_OMN_CC, -1, -1, "1234567890123", "[20]01[90]12345678901234567890", 0, 23, 6, 100, 200, 46, "CC-A 4 rows" }, + /*436*/ { BARCODE_DBAR_OMN_CC, -1, 1, "1234567890123", "[20]01[90]12345678901234567890", 0, 9.5, 6, 100, 200, 19, "" }, + /*437*/ { BARCODE_DBAR_OMN_CC, -1, 21.9, "1234567890123", "[20]01[90]12345678901234567890", 0, 21.9, 6, 100, 200, 43.799999, "" }, + /*438*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 21.9, "1234567890123", "[20]01[90]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 21.9, 6, 100, 200, 43.799999, "" }, + /*439*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 22, "1234567890123", "[20]01[90]12345678901234567890", 0, 22, 6, 100, 200, 44, "" }, + /*440*/ { BARCODE_DBAR_OMN_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 35, 12, 100, 200, 70, "CC-B 10 rows" }, + /*441*/ { BARCODE_DBAR_OMN_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 21.5, 12, 100, 200, 43, "" }, + /*442*/ { BARCODE_DBAR_OMN_CC, -1, 33.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 33.900002, 12, 100, 200, 67.800003, "" }, + /*443*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 33.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 33.900002, 12, 100, 200, 67.800003, "" }, + /*444*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 34, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 34, 12, 100, 200, 68, "" }, + /*445*/ { BARCODE_DBAR_OMN_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", 0, 39, 14, 100, 200, 78, "CC-B 12 rows" }, + /*446*/ { BARCODE_DBAR_OMN_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", 0, 25.5, 14, 100, 200, 51, "" }, + /*447*/ { BARCODE_DBAR_OMN_CC, -1, 37.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", 0, 37.900002, 14, 100, 200, 75.800003, "" }, + /*448*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 37.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", ZINT_WARN_NONCOMPLIANT, 37.900002, 14, 100, 200, 75.800003, "" }, + /*449*/ { BARCODE_DBAR_OMN_CC, COMPLIANT_HEIGHT, 38, "1234567890123", "[20]01[90]123456789012345678901234567890[91]123456789012345678901234567890", 0, 38, 14, 100, 200, 76, "" }, + /*450*/ { BARCODE_DBAR_LTD_CC, -1, -1, "1234567890123", "[20]01", 0, 19, 6, 79, 158, 38, "CC-A 4 rows" }, + /*451*/ { BARCODE_DBAR_LTD_CC, -1, 1, "1234567890123", "[20]01", 0, 9.5, 6, 79, 158, 19, "" }, + /*452*/ { BARCODE_DBAR_LTD_CC, -1, 18, "1234567890123", "[20]01", 0, 18, 6, 79, 158, 36, "" }, + /*453*/ { BARCODE_DBAR_LTD_CC, COMPLIANT_HEIGHT, 18, "1234567890123", "[20]01", ZINT_WARN_NONCOMPLIANT, 18, 6, 79, 158, 36, "" }, + /*454*/ { BARCODE_DBAR_LTD_CC, COMPLIANT_HEIGHT, 19, "1234567890123", "[20]01", 0, 19, 6, 79, 158, 38, "" }, + /*455*/ { BARCODE_DBAR_LTD_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890", 0, 25, 9, 79, 158, 50, "CC-A 7 rows" }, + /*456*/ { BARCODE_DBAR_LTD_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890", 0, 15.5, 9, 79, 158, 31, "" }, + /*457*/ { BARCODE_DBAR_LTD_CC, -1, 24.9, "1234567890123", "[20]01[90]123456789012345678901234567890", 0, 24.9, 9, 79, 158, 49.799999, "" }, + /*458*/ { BARCODE_DBAR_LTD_CC, COMPLIANT_HEIGHT, 24.9, "1234567890123", "[20]01[90]123456789012345678901234567890", ZINT_WARN_NONCOMPLIANT, 24.9, 9, 79, 158, 49.799999, "" }, + /*459*/ { BARCODE_DBAR_LTD_CC, COMPLIANT_HEIGHT, 25, "1234567890123", "[20]01[90]123456789012345678901234567890", 0, 25, 9, 79, 158, 50, "" }, + /*460*/ { BARCODE_DBAR_LTD_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 51, 22, 88, 176, 102, "CC-B 20 rows" }, + /*461*/ { BARCODE_DBAR_LTD_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 41.5, 22, 88, 176, 83, "" }, + /*462*/ { BARCODE_DBAR_LTD_CC, -1, 50.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 50.900002, 22, 88, 176, 101.8, "" }, + /*463*/ { BARCODE_DBAR_LTD_CC, COMPLIANT_HEIGHT, 50.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", ZINT_WARN_NONCOMPLIANT, 50.900002, 22, 88, 176, 101.8, "" }, + /*464*/ { BARCODE_DBAR_LTD_CC, COMPLIANT_HEIGHT, 51, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567890", 0, 51, 22, 88, 176, 102, "" }, + /*465*/ { BARCODE_DBAR_EXP_CC, -1, -1, "[01]12345678901231", "[20]01", 0, 41, 5, 134, 268, 82, "CC-A 3 rows" }, + /*466*/ { BARCODE_DBAR_EXP_CC, -1, 1, "[01]12345678901231", "[20]01", 0, 7.5, 5, 134, 268, 15, "" }, + /*467*/ { BARCODE_DBAR_EXP_CC, -1, 40, "[01]12345678901231", "[20]01", 0, 40, 5, 134, 268, 80, "" }, + /*468*/ { BARCODE_DBAR_EXP_CC, COMPLIANT_HEIGHT, 40, "[01]12345678901231", "[20]01", ZINT_WARN_NONCOMPLIANT, 40, 5, 134, 268, 80, "" }, + /*469*/ { BARCODE_DBAR_EXP_CC, COMPLIANT_HEIGHT, 41, "[01]12345678901231", "[20]01", 0, 41, 5, 134, 268, 82, "" }, + /*470*/ { BARCODE_DBAR_EXP_CC, -1, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", 0, 45, 7, 134, 268, 90, "CC-A 5 rows" }, + /*471*/ { BARCODE_DBAR_EXP_CC, -1, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", 0, 11.5, 7, 134, 268, 23, "" }, + /*472*/ { BARCODE_DBAR_EXP_CC, -1, 44, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", 0, 44, 7, 134, 268, 88, "" }, + /*473*/ { BARCODE_DBAR_EXP_CC, COMPLIANT_HEIGHT, 44, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", ZINT_WARN_NONCOMPLIANT, 44, 7, 134, 268, 88, "" }, + /*474*/ { BARCODE_DBAR_EXP_CC, COMPLIANT_HEIGHT, 45, "[01]12345678901231", "[20]01[90]123456789012345678901234567890", 0, 45, 7, 134, 268, 90, "" }, + /*475*/ { BARCODE_DBAR_EXP_CC, -1, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 55, 12, 134, 268, 110, "CC-B 10 rows" }, + /*476*/ { BARCODE_DBAR_EXP_CC, -1, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 21.5, 12, 134, 268, 43, "" }, + /*477*/ { BARCODE_DBAR_EXP_CC, -1, 54, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 54, 12, 134, 268, 108, "" }, + /*478*/ { BARCODE_DBAR_EXP_CC, COMPLIANT_HEIGHT, 54, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 54, 12, 134, 268, 108, "" }, + /*479*/ { BARCODE_DBAR_EXP_CC, COMPLIANT_HEIGHT, 55, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 55, 12, 134, 268, 110, "" }, + /*480*/ { BARCODE_UPCA_CC, -1, -1, "12345678901", "[20]01", 0, 50, 7, 99, 234, 110, "CC-A 3 rows" }, + /*481*/ { BARCODE_UPCA_CC, -1, 1, "12345678901", "[20]01", 0, 12.5, 7, 99, 234, 35, "" }, + /*482*/ { BARCODE_UPCA_CC, -1, 81.24, "12345678901", "[20]01", 0, 81.239998, 7, 99, 234, 172.48, "" }, + /*483*/ { BARCODE_UPCA_CC, COMPLIANT_HEIGHT, 81.24, "12345678901", "[20]01", ZINT_WARN_NONCOMPLIANT, 81.239998, 7, 99, 234, 172.48, "" }, + /*484*/ { BARCODE_UPCA_CC, COMPLIANT_HEIGHT, 81.25, "12345678901", "[20]01", 0, 81.25, 7, 99, 234, 172.5, "" }, + /*485*/ { BARCODE_UPCA_CC, -1, -1, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 50, 10, 99, 234, 110, "CC-A 6 rows" }, + /*486*/ { BARCODE_UPCA_CC, -1, 1, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 18.5, 10, 99, 234, 47, "" }, + /*487*/ { BARCODE_UPCA_CC, -1, 87.24, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 87.239998, 10, 99, 234, 184.48, "" }, + /*488*/ { BARCODE_UPCA_CC, COMPLIANT_HEIGHT, 87.24, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", ZINT_WARN_NONCOMPLIANT, 87.239998, 10, 99, 234, 184.48, "" }, + /*489*/ { BARCODE_UPCA_CC, COMPLIANT_HEIGHT, 87.25, "12345678901", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 87.25, 10, 99, 234, 184.5, "" }, + /*490*/ { BARCODE_UPCA_CC, -1, -1, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", 0, 50, 16, 99, 234, 110, "CC-B 12 rows" }, + /*491*/ { BARCODE_UPCA_CC, -1, 1, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", 0, 30.5, 16, 99, 234, 71, "" }, + /*492*/ { BARCODE_UPCA_CC, -1, 99, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", 0, 99, 16, 99, 234, 208, "" }, + /*493*/ { BARCODE_UPCA_CC, COMPLIANT_HEIGHT, 99, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", ZINT_WARN_NONCOMPLIANT, 99, 16, 99, 234, 208, "" }, + /*494*/ { BARCODE_UPCA_CC, COMPLIANT_HEIGHT, 99.25, "12345678901", "[20]01[90]123456789012345678901234567890[91]123456789012345678912345678901234567", 0, 99.25, 16, 99, 234, 208.5, "" }, + /*495*/ { BARCODE_UPCE_CC, -1, -1, "1234567", "[20]01[90]123456789012345678", 0, 50, 11, 55, 142, 110, "CC-A 7 rows" }, + /*496*/ { BARCODE_UPCE_CC, -1, 1, "1234567", "[20]01[90]123456789012345678", 0, 20.5, 11, 55, 142, 51, "" }, + /*497*/ { BARCODE_UPCE_CC, -1, 89, "1234567", "[20]01[90]123456789012345678", 0, 89, 11, 55, 142, 188, "" }, + /*498*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 89, "1234567", "[20]01[90]123456789012345678", ZINT_WARN_NONCOMPLIANT, 89, 11, 55, 142, 188, "" }, + /*499*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 89.25, "1234567", "[20]01[90]123456789012345678", 0, 89.25, 11, 55, 142, 188.5, "" }, + /*500*/ { BARCODE_UPCE_CC, -1, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 50, 16, 55, 142, 110, "CC-A 12 rows" }, + /*501*/ { BARCODE_UPCE_CC, -1, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 30.5, 16, 55, 142, 71, "" }, + /*502*/ { BARCODE_UPCE_CC, -1, 99, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 99, 16, 55, 142, 208, "" }, + /*503*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 99, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", ZINT_WARN_NONCOMPLIANT, 99, 16, 55, 142, 208, "" }, + /*504*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 99.25, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 99.25, 16, 55, 142, 208.5, "" }, + /*505*/ { BARCODE_UPCE_CC, -1, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 50, 21, 55, 142, 110, "CC-B 17 rows" }, + /*506*/ { BARCODE_UPCE_CC, -1, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 40.5, 21, 55, 142, 91, "" }, + /*507*/ { BARCODE_UPCE_CC, -1, 109, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 109, 21, 55, 142, 228, "" }, + /*508*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 109, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 109, 21, 55, 142, 228, "" }, + /*509*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 109.25, "1234567", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 109.25, 21, 55, 142, 228.5, "" }, + /*510*/ { BARCODE_UPCE_CC, -1, -1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", 0, 52.5, 27, 55, 142, 115, "CC-B 23 rows" }, + /*511*/ { BARCODE_UPCE_CC, -1, 1, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", 0, 52.5, 27, 55, 142, 115, "" }, + /*512*/ { BARCODE_UPCE_CC, -1, 121, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", 0, 121, 27, 55, 142, 252, "" }, + /*513*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 121, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", ZINT_WARN_NONCOMPLIANT, 121, 27, 55, 142, 252, "" }, + /*514*/ { BARCODE_UPCE_CC, COMPLIANT_HEIGHT, 121.25, "1234567", "[20]01[90]123456789012345678901234567890[91]1234567890123456789012345678901234567", 0, 121.25, 27, 55, 142, 252.5, "" }, + /*515*/ { BARCODE_DBAR_STK_CC, -1, -1, "1234567890123", "[20]01", 0, 24, 9, 56, 112, 48, "CC-A 5 rows" }, + /*516*/ { BARCODE_DBAR_STK_CC, -1, 1, "1234567890123", "[20]01", 0, 13.2, 9, 56, 112, 26.4, "" }, + /*517*/ { BARCODE_DBAR_STK_CC, -1, 23.9, "1234567890123", "[20]01", 0, 23.9, 9, 56, 112, 47.799999, "" }, + /*518*/ { BARCODE_DBAR_STK_CC, COMPLIANT_HEIGHT, 23.9, "1234567890123", "[20]01", ZINT_WARN_NONCOMPLIANT, 23.9, 9, 56, 112, 47.799999, "" }, + /*519*/ { BARCODE_DBAR_STK_CC, COMPLIANT_HEIGHT, 24, "1234567890123", "[20]01", 0, 24, 9, 56, 112, 48, "" }, + /*520*/ { BARCODE_DBAR_STK_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 38, 16, 56, 112, 76, "CC-A 12 rows" }, + /*521*/ { BARCODE_DBAR_STK_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 27.200001, 16, 56, 112, 54.400002, "" }, + /*522*/ { BARCODE_DBAR_STK_CC, -1, 37.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 37.900002, 16, 56, 112, 75.800003, "" }, + /*523*/ { BARCODE_DBAR_STK_CC, COMPLIANT_HEIGHT, 37.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", ZINT_WARN_NONCOMPLIANT, 37.900002, 16, 56, 112, 75.800003, "" }, + /*524*/ { BARCODE_DBAR_STK_CC, COMPLIANT_HEIGHT, 38, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678", 0, 38, 16, 56, 112, 76, "" }, + /*525*/ { BARCODE_DBAR_STK_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 48, 21, 56, 112, 96, "CC-B 17 rows" }, + /*526*/ { BARCODE_DBAR_STK_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 37.200001, 21, 56, 112, 74.400002, "" }, + /*527*/ { BARCODE_DBAR_STK_CC, -1, 47.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 47.900002, 21, 56, 112, 95.800003, "" }, + /*528*/ { BARCODE_DBAR_STK_CC, COMPLIANT_HEIGHT, 47.9, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 47.900002, 21, 56, 112, 95.800003, "" }, + /*529*/ { BARCODE_DBAR_STK_CC, COMPLIANT_HEIGHT, 48, "1234567890123", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 48, 21, 56, 112, 96, "" }, + /*530*/ { BARCODE_DBAR_OMNSTK_CC, -1, -1, "1234567890123", "[20]01[90]1234567890123456", 0, 82, 12, 56, 112, 164, "CC-A 6 rows" }, + /*531*/ { BARCODE_DBAR_OMNSTK_CC, -1, 1, "1234567890123", "[20]01[90]1234567890123456", 0, 17, 12, 56, 112, 34, "" }, + /*532*/ { BARCODE_DBAR_OMNSTK_CC, -1, 81, "1234567890123", "[20]01[90]1234567890123456", 0, 81, 12, 56, 112, 162, "" }, + /*533*/ { BARCODE_DBAR_OMNSTK_CC, COMPLIANT_HEIGHT, 81, "1234567890123", "[20]01[90]1234567890123456", ZINT_WARN_NONCOMPLIANT, 81, 12, 56, 112, 162, "" }, + /*534*/ { BARCODE_DBAR_OMNSTK_CC, COMPLIANT_HEIGHT, 82, "1234567890123", "[20]01[90]1234567890123456", 0, 82, 12, 56, 112, 164, "" }, + /*535*/ { BARCODE_DBAR_OMNSTK_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567", 0, 94, 18, 56, 112, 188, "CC-A 12 rows" }, + /*536*/ { BARCODE_DBAR_OMNSTK_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567", 0, 29, 18, 56, 112, 58, "" }, + /*537*/ { BARCODE_DBAR_OMNSTK_CC, -1, 93.5, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567", 0, 93.5, 18, 56, 112, 187, "" }, + /*538*/ { BARCODE_DBAR_OMNSTK_CC, COMPLIANT_HEIGHT, 93.5, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567", ZINT_WARN_NONCOMPLIANT, 93.5, 18, 56, 112, 187, "" }, + /*539*/ { BARCODE_DBAR_OMNSTK_CC, COMPLIANT_HEIGHT, 94, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567", 0, 94, 18, 56, 112, 188, "" }, + /*540*/ { BARCODE_DBAR_OMNSTK_CC, -1, -1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 104, 23, 56, 112, 208, "CC-B 17 rows" }, + /*541*/ { BARCODE_DBAR_OMNSTK_CC, -1, 1, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 39, 23, 56, 112, 78, "" }, + /*542*/ { BARCODE_DBAR_OMNSTK_CC, -1, 103, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 103, 23, 56, 112, 206, "" }, + /*543*/ { BARCODE_DBAR_OMNSTK_CC, COMPLIANT_HEIGHT, 103, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", ZINT_WARN_NONCOMPLIANT, 103, 23, 56, 112, 206, "" }, + /*544*/ { BARCODE_DBAR_OMNSTK_CC, COMPLIANT_HEIGHT, 104, "1234567890123", "[20]01[90]123456789012345678901234567890[91]1234567890", 0, 104, 23, 56, 112, 208, "" }, + /*545*/ { BARCODE_DBAR_EXPSTK_CC, -1, -1, "[01]12345678901231", "[20]01", 0, 78, 9, 102, 204, 156, "3 rows, CC-A 3 rows" }, + /*546*/ { BARCODE_DBAR_EXPSTK_CC, -1, 1, "[01]12345678901231", "[20]01", 0, 11, 9, 102, 204, 22, "" }, + /*547*/ { BARCODE_DBAR_EXPSTK_CC, -1, 77, "[01]12345678901231", "[20]01", 0, 77, 9, 102, 204, 154, "" }, + /*548*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 77, "[01]12345678901231", "[20]01", ZINT_WARN_NONCOMPLIANT, 77, 9, 102, 204, 154, "" }, + /*549*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 78, "[01]12345678901231", "[20]01", 0, 78, 9, 102, 204, 156, "" }, + /*550*/ { BARCODE_DBAR_EXPSTK_CC, -1, -1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", 0, 189, 21, 102, 204, 378, "5 rows, CC-A 3 rows" }, + /*551*/ { BARCODE_DBAR_EXPSTK_CC, -1, 1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", 0, 21.5, 21, 102, 204, 43, "" }, + /*552*/ { BARCODE_DBAR_EXPSTK_CC, -1, 188, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", 0, 188, 21, 102, 204, 376, "" }, + /*553*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 188, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", ZINT_WARN_NONCOMPLIANT, 188, 21, 102, 204, 376, "" }, + /*554*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 189, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01", 0, 189, 21, 102, 204, 378, "" }, + /*555*/ { BARCODE_DBAR_EXPSTK_CC, -1, -1, "[01]12345678901231", "[20]01[90]12345678901234567890", 0, 80, 10, 102, 204, 160, "3 rows, CC-A 4 rows" }, + /*556*/ { BARCODE_DBAR_EXPSTK_CC, -1, 1, "[01]12345678901231", "[20]01[90]12345678901234567890", 0, 13, 10, 102, 204, 26, "" }, + /*557*/ { BARCODE_DBAR_EXPSTK_CC, -1, 79, "[01]12345678901231", "[20]01[90]12345678901234567890", 0, 79, 10, 102, 204, 158, "" }, + /*558*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 79, "[01]12345678901231", "[20]01[90]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 79, 10, 102, 204, 158, "" }, + /*559*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 80, "[01]12345678901231", "[20]01[90]12345678901234567890", 0, 80, 10, 102, 204, 160, "" }, + /*560*/ { BARCODE_DBAR_EXPSTK_CC, -1, -1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 92, 16, 102, 204, 184, "3 rows, CC-B 10 rows" }, + /*561*/ { BARCODE_DBAR_EXPSTK_CC, -1, 1, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 25, 16, 102, 204, 50, "" }, + /*562*/ { BARCODE_DBAR_EXPSTK_CC, -1, 91, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 91, 16, 102, 204, 182, "" }, + /*563*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 91, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 91, 16, 102, 204, 182, "" }, + /*564*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 92, "[01]12345678901231", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 92, 16, 102, 204, 184, "" }, + /*565*/ { BARCODE_DBAR_EXPSTK_CC, -1, -1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 203, 28, 102, 204, 406, "5 rows, CC-B 10 rows" }, + /*566*/ { BARCODE_DBAR_EXPSTK_CC, -1, 1, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 35.5, 28, 102, 204, 71, "" }, + /*567*/ { BARCODE_DBAR_EXPSTK_CC, -1, 202, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 202, 28, 102, 204, 404, "" }, + /*568*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 202, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", ZINT_WARN_NONCOMPLIANT, 202, 28, 102, 204, 404, "" }, + /*569*/ { BARCODE_DBAR_EXPSTK_CC, COMPLIANT_HEIGHT, 203, "[91]ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFG", "[20]01[90]123456789012345678901234567890[91]12345678901234567890", 0, 203, 28, 102, 204, 406, "" }, + /*570*/ { BARCODE_CHANNEL, -1, 1, "1", "", 0, 1, 1, 19, 38, 2, "" }, + /*571*/ { BARCODE_CHANNEL, -1, 3.75, "123", "", 0, 3.75, 1, 23, 46, 7.5, "" }, + /*572*/ { BARCODE_CHANNEL, COMPLIANT_HEIGHT, 3.75, "123", "", ZINT_WARN_NONCOMPLIANT, 3.75, 1, 23, 46, 7.5, "Min height data-length dependent" }, + /*573*/ { BARCODE_CHANNEL, COMPLIANT_HEIGHT, 4, "123", "", 0, 4, 1, 23, 46, 8, "" }, + /*574*/ { BARCODE_CODEONE, -1, 1, "12345678901234567890", "", 0, 16, 16, 18, 36, 32, "Fixed height, symbol->height ignored" }, + /*575*/ { BARCODE_GRIDMATRIX, -1, 1, "ABC", "", 0, 18, 18, 18, 36, 36, "Fixed width-to-height ratio, symbol->height ignored" }, + /*576*/ { BARCODE_UPNQR, -1, 1, "1234567890AB", "", 0, 77, 77, 77, 154, 154, "Fixed width-to-height ratio, symbol->height ignored" }, + /*577*/ { BARCODE_ULTRA, -1, 1, "1234567890", "", 0, 13, 13, 18, 36, 26, "Fixed width-to-height ratio, symbol->height ignored" }, + /*578*/ { BARCODE_RMQR, -1, 1, "12345", "", 0, 11, 11, 27, 54, 22, "Fixed width-to-height ratio, symbol->height ignored" }, }; int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -1784,6 +1962,9 @@ static void test_height(int index, int generate, int debug) { assert_nonnull(symbol, "Symbol not created\n"); symbol->symbology = data[i].symbology; + if (data[i].output_options != -1) { + symbol->output_options = data[i].output_options; + } if (data[i].height != -1) { symbol->height = data[i].height; } @@ -1807,8 +1988,9 @@ static void test_height(int index, int generate, int debug) { assert_nonnull(symbol->vector, "i:%d ZBarcode_Buffer_Vector(%s) vector NULL\n", i, testUtilBarcodeName(data[i].symbology)); if (generate) { - printf(" /*%3d*/ { %s, %.5g, \"%s\", \"%s\", %s, %.8g, %d, %d, %.8g, %.8g, \"%s\" },\n", - i, testUtilBarcodeName(data[i].symbology), data[i].height, data[i].data, data[i].composite, testUtilErrorName(data[i].ret), + printf(" /*%3d*/ { %s, %s, %.5g, \"%s\", \"%s\", %s, %.8g, %d, %d, %.8g, %.8g, \"%s\" },\n", + i, testUtilBarcodeName(data[i].symbology), testUtilOutputOptionsName(data[i].output_options), + data[i].height, data[i].data, data[i].composite, testUtilErrorName(data[i].ret), symbol->height, symbol->rows, symbol->width, symbol->vector->width, symbol->vector->height, data[i].comment); } else { assert_equal(symbol->height, data[i].expected_height, "i:%d (%s) symbol->height %.8g != %.8g\n", i, testUtilBarcodeName(data[i].symbology), symbol->height, data[i].expected_height); diff --git a/backend/tests/testcommon.c b/backend/tests/testcommon.c index fe841edf..a53d0d44 100644 --- a/backend/tests/testcommon.c +++ b/backend/tests/testcommon.c @@ -648,6 +648,7 @@ const char *testUtilOutputOptionsName(int output_options) { { "OUT_BUFFER_INTERMEDIATE", OUT_BUFFER_INTERMEDIATE, 1024 }, { "BARCODE_QUIET_ZONES", BARCODE_QUIET_ZONES, 2048 }, { "BARCODE_NO_QUIET_ZONES", BARCODE_NO_QUIET_ZONES, 4096 }, + { "COMPLIANT_HEIGHT", COMPLIANT_HEIGHT, 0x2000 }, }; static int const data_size = ARRAY_SIZE(data); int set = 0; diff --git a/backend/ultra.c b/backend/ultra.c index eec92526..77dca6aa 100644 --- a/backend/ultra.c +++ b/backend/ultra.c @@ -872,7 +872,7 @@ static int ultra_generate_codewords(struct zint_symbol *symbol, const unsigned c return codeword_count; } -INTERNAL int ultracode(struct zint_symbol *symbol, unsigned char source[], int length) { +INTERNAL int ultra(struct zint_symbol *symbol, unsigned char source[], int length) { int data_cw_count = 0; int acc, qcc; int scr[3] = {0}, scr_cw_count = 0; /* Symbol Control Region (only if have Structured Append) */ diff --git a/backend/upcean.c b/backend/upcean.c index 6fe7617f..cbc6d410 100644 --- a/backend/upcean.c +++ b/backend/upcean.c @@ -30,9 +30,9 @@ */ /* vim: set ts=4 sw=4 et : */ -#define SODIUM "0123456789+" -#define ISBN_SANE "0123456789X" -#define ISBN_ADDON_SANE "0123456789Xx+" +#define SODIUM "0123456789+" +#define ISBNX_SANE "0123456789X" +#define ISBNX_ADDON_SANE "0123456789Xx+" #define EAN2 102 #define EAN5 105 @@ -108,7 +108,6 @@ static void upca_draw(const unsigned char source[], const int length, char dest[ /* Make a UPC-A barcode, allowing for composite if `cc_rows` set */ static int upca_cc(struct zint_symbol *symbol, const unsigned char source[], int length, char dest[], int cc_rows) { unsigned char *gtin = symbol->text; - float height; int error_number = 0; ustrcpy(gtin, source); @@ -130,23 +129,23 @@ static int upca_cc(struct zint_symbol *symbol, const unsigned char source[], int upca_draw(gtin, length, dest); -#ifdef COMPLIANT_HEIGHTS - /* BS EN 797:1996 4.5.1 Nominal dimensions 22.85mm / 0.33mm (X) ~ 69.24, - same as minimum GS1 General Specifications 21.0.1 5.12.3.1 */ - height = (float) (22.85 / 0.33); - if (symbol->symbology == BARCODE_UPCA_CC) { - symbol->height = height; /* Pass back min row == default height */ + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* BS EN 797:1996 4.5.1 Nominal dimensions 22.85mm / 0.33mm (X) ~ 69.24, + same as minimum GS1 General Specifications 21.0.1 5.12.3.1 */ + const float height = stripf(22.85f / 0.33f); + if (symbol->symbology == BARCODE_UPCA_CC) { + symbol->height = height; /* Pass back min row == default height */ + } else { + error_number = set_height(symbol, height, height, 0.0f, 0 /*no_errtxt*/); + } } else { - error_number = set_height(symbol, height, height, 0.0f, 0 /*no_errtxt*/); + const float height = 50.0f; + if (symbol->symbology == BARCODE_UPCA_CC) { + symbol->height = height - cc_rows * 2 - 6.0f; + } else { + (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); + } } -#else - height = 50.0f; - if (symbol->symbology == BARCODE_UPCA_CC) { - symbol->height = height - cc_rows * 2 - 6.0f; - } else { - (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); - } -#endif return error_number; } @@ -163,7 +162,6 @@ static int upce_cc(struct zint_symbol *symbol, unsigned char source[], int lengt char src_check_digit = '\0'; unsigned char equivalent[12]; unsigned char *hrt = symbol->text; - float height; int error_number = 0; if (length == 8 || symbol->symbology == BARCODE_UPCE_CHK) { @@ -297,23 +295,23 @@ static int upce_cc(struct zint_symbol *symbol, unsigned char source[], int lengt printf("UPC-E: %s, equivalent: %s, hrt: %s, Check digit: %c\n", source, equivalent, hrt, check_digit); } -#ifdef COMPLIANT_HEIGHTS - /* BS EN 797:1996 4.5.1 Nominal dimensions 22.85mm / 0.33mm (X) ~ 69.24, - same as minimum GS1 General Specifications 21.0.1 5.12.3.1 */ - height = (float) (22.85 / 0.33); - if (symbol->symbology == BARCODE_UPCE_CC) { - symbol->height = height; /* Pass back min row == default height */ + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* BS EN 797:1996 4.5.1 Nominal dimensions 22.85mm / 0.33mm (X) ~ 69.24, + same as minimum GS1 General Specifications 21.0.1 5.12.3.1 */ + const float height = stripf(22.85f / 0.33f); + if (symbol->symbology == BARCODE_UPCE_CC) { + symbol->height = height; /* Pass back min row == default height */ + } else { + error_number = set_height(symbol, height, height, 0.0f, 0 /*no_errtxt*/); + } } else { - error_number = set_height(symbol, height, height, 0.0f, 0 /*no_errtxt*/); + const float height = 50.0f; + if (symbol->symbology == BARCODE_UPCE_CC) { + symbol->height = height - cc_rows * 2 - 6.0f; + } else { + (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); + } } -#else - height = 50.0f; - if (symbol->symbology == BARCODE_UPCE_CC) { - symbol->height = height - cc_rows * 2 - 6.0f; - } else { - (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); - } -#endif return error_number; } @@ -390,7 +388,6 @@ static int ean13_cc(struct zint_symbol *symbol, const unsigned char source[], in int i, half_way; char parity[6]; unsigned char *gtin = symbol->text; - float height; int error_number = 0; parity[0] = '\0'; @@ -437,23 +434,23 @@ static int ean13_cc(struct zint_symbol *symbol, const unsigned char source[], in /* stop character */ strcat(dest, "111"); -#ifdef COMPLIANT_HEIGHTS - /* BS EN 797:1996 4.5.1 Nominal dimensions 22.85mm / 0.33mm (X) ~ 69.24, - same as minimum GS1 General Specifications 21.0.1 5.12.3.1 */ - height = (float) (22.85 / 0.33); - if (symbol->symbology == BARCODE_EANX_CC) { - symbol->height = height; /* Pass back min row == default height */ + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* BS EN 797:1996 4.5.1 Nominal dimensions 22.85mm / 0.33mm (X) ~ 69.24, + same as minimum GS1 General Specifications 21.0.1 5.12.3.1 */ + const float height = stripf(22.85f / 0.33f); + if (symbol->symbology == BARCODE_EANX_CC) { + symbol->height = height; /* Pass back min row == default height */ + } else { + error_number = set_height(symbol, height, height, 0.0f, 0 /*no_errtxt*/); + } } else { - error_number = set_height(symbol, height, height, 0.0f, 0 /*no_errtxt*/); + const float height = 50.0f; + if (symbol->symbology == BARCODE_EANX_CC) { + symbol->height = height - cc_rows * 2 - 6.0f; + } else { + (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); + } } -#else - height = 50.0f; - if (symbol->symbology == BARCODE_EANX_CC) { - symbol->height = height - cc_rows * 2 - 6.0f; - } else { - (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); - } -#endif return error_number; } @@ -465,7 +462,6 @@ static int ean13(struct zint_symbol *symbol, const unsigned char source[], int l static int ean8_cc(struct zint_symbol *symbol, const unsigned char source[], int length, char dest[], int cc_rows) { /* EAN-8 is basically the same as UPC-A but with fewer digits */ unsigned char *gtin = symbol->text; - float height; int error_number = 0; ustrcpy(gtin, source); @@ -487,23 +483,23 @@ static int ean8_cc(struct zint_symbol *symbol, const unsigned char source[], int upca_draw(gtin, length, dest); -#ifdef COMPLIANT_HEIGHTS - /* BS EN 797:1996 4.5.1 Nominal dimensions 18.23mm / 0.33mm (X) ~ 55.24, - same as minimum GS1 General Specifications 21.0.1 5.12.3.1 */ - height = (float) (18.23 / 0.33); - if (symbol->symbology == BARCODE_EANX_CC) { - symbol->height = height; /* Pass back min row == default height */ + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* BS EN 797:1996 4.5.1 Nominal dimensions 18.23mm / 0.33mm (X) ~ 55.24, + same as minimum GS1 General Specifications 21.0.1 5.12.3.1 */ + const float height = stripf(18.23f / 0.33f); + if (symbol->symbology == BARCODE_EANX_CC) { + symbol->height = height; /* Pass back min row == default height */ + } else { + error_number = set_height(symbol, height, height, 0.0f, 0 /*no_errtxt*/); + } } else { - error_number = set_height(symbol, height, height, 0.0f, 0 /*no_errtxt*/); + const float height = 50.0f; + if (symbol->symbology == BARCODE_EANX_CC) { + symbol->height = height - cc_rows * 2 - 6.0f; + } else { + (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); + } } -#else - height = 50.0f; - if (symbol->symbology == BARCODE_EANX_CC) { - symbol->height = height - cc_rows * 2 - 6.0f; - } else { - (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); - } -#endif return error_number; } @@ -514,7 +510,7 @@ static int ean8(struct zint_symbol *symbol, const unsigned char source[], int le } /* For ISBN(10) and SBN only */ -static char isbn_check(const unsigned char source[], const int length) { +static char isbnx_check(const unsigned char source[], const int length) { int i, weight, sum, check; char check_char; @@ -535,15 +531,14 @@ static char isbn_check(const unsigned char source[], const int length) { } /* Make an EAN-13 barcode from an SBN or ISBN */ -static int isbn(struct zint_symbol *symbol, unsigned char source[], const int src_len, char dest[]) { - int i, error_number; +static int isbnx(struct zint_symbol *symbol, unsigned char source[], const int src_len, char dest[]) { + int i; char check_digit; to_upper(source); - error_number = is_sane(ISBN_SANE, source, src_len); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(ISBNX_SANE, source, src_len) != 0) { strcpy(symbol->errtxt, "277: Invalid character in data (digits and \"X\" only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } /* Input must be 9, 10 or 13 characters */ @@ -560,10 +555,9 @@ static int isbn(struct zint_symbol *symbol, unsigned char source[], const int sr } /* "X" can only occur in last position */ - error_number = is_sane(NEON, source, 12); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, 12) != 0) { strcpy(symbol->errtxt, "282: Invalid character in data, \"X\" allowed in last position only"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } check_digit = gs1_check_digit(source, 12); @@ -584,13 +578,12 @@ static int isbn(struct zint_symbol *symbol, unsigned char source[], const int sr } /* "X" can only occur in last position */ - error_number = is_sane(NEON, source, 9); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, source, 9) != 0) { strcpy(symbol->errtxt, "296: Invalid character in data, \"X\" allowed in last position only"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } - check_digit = isbn_check(source, 9); + check_digit = isbnx_check(source, 9); if (check_digit != source[9]) { sprintf(symbol->errtxt, "281: Invalid %s check digit '%c', expecting '%c'", src_len == 9 ? "SBN" : "ISBN", source[9], check_digit); @@ -758,10 +751,9 @@ INTERNAL int eanx_cc(struct zint_symbol *symbol, unsigned char source[], int src char dest[1000] = {0}; int latch, reader, writer; int with_addon; - int error_number, i, plus_count; + int error_number = 0, i, plus_count; int addon_gap = 0; int first_part_len, second_part_len; - float height; latch = FALSE; writer = 0; @@ -772,16 +764,14 @@ INTERNAL int eanx_cc(struct zint_symbol *symbol, unsigned char source[], int src } if (symbol->symbology != BARCODE_ISBNX) { /* ISBN has its own sanity routine */ - error_number = is_sane(SODIUM, source, src_len); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(SODIUM, source, src_len) != 0) { strcpy(symbol->errtxt, "284: Invalid character in data (digits and \"+\" only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } } else { - error_number = is_sane(ISBN_ADDON_SANE, source, src_len); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(ISBNX_ADDON_SANE, source, src_len) != 0) { strcpy(symbol->errtxt, "285: Invalid character in data (digits, \"X\" and \"+\" only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } /* Add-on will be checked separately to be numeric only below */ } @@ -845,25 +835,23 @@ INTERNAL int eanx_cc(struct zint_symbol *symbol, unsigned char source[], int src switch (first_part_len) { case 2: ean_add_on(first_part, first_part_len, dest, 0); ustrcpy(symbol->text, first_part); -#ifdef COMPLIANT_HEIGHTS - /* 21.9mm from GS1 General Specifications 5.2.6.6, Figure 5.2.6.6-5 */ - height = (float) (21.9 / 0.33); /* 21.9mm / 0.33mm ~ 66.36 */ - error_number = set_height(symbol, height, height, 0.0f, 0 /*no_errtxt*/); -#else - height = 50.0f; - (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* 21.9mm from GS1 General Specifications 5.2.6.6, Figure 5.2.6.6-5 */ + const float height = stripf(21.9f / 0.33f); /* 21.9mm / 0.33mm ~ 66.36 */ + error_number = set_height(symbol, height, height, 0.0f, 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); + } break; case 5: ean_add_on(first_part, first_part_len, dest, 0); ustrcpy(symbol->text, first_part); -#ifdef COMPLIANT_HEIGHTS - /* 21.9mm from GS1 General Specifications 5.2.6.6, Figure 5.2.6.6-6 */ - height = (float) (21.9 / 0.33); /* 21.9mm / 0.33mm ~ 66.36 */ - error_number = set_height(symbol, height, height, 0.0f, 0 /*no_errtxt*/); -#else - height = 50.0f; - (void) set_height(symbol, 0.0f, height, 0.0f, 1 /*no_errtxt*/); -#endif + if (symbol->output_options & COMPLIANT_HEIGHT) { + /* 21.9mm from GS1 General Specifications 5.2.6.6, Figure 5.2.6.6-6 */ + const float height = stripf(21.9f / 0.33f); /* 21.9mm / 0.33mm ~ 66.36 */ + error_number = set_height(symbol, height, height, 0.0f, 0 /*no_errtxt*/); + } else { + (void) set_height(symbol, 0.0f, 50.0f, 0.0f, 1 /*no_errtxt*/); + } break; case 7: case 8: error_number = ean8(symbol, first_part, first_part_len, dest); @@ -961,7 +949,7 @@ INTERNAL int eanx_cc(struct zint_symbol *symbol, unsigned char source[], int src } break; case BARCODE_ISBNX: - error_number = isbn(symbol, first_part, first_part_len, dest); + error_number = isbnx(symbol, first_part, first_part_len, dest); break; } @@ -972,10 +960,9 @@ INTERNAL int eanx_cc(struct zint_symbol *symbol, unsigned char source[], int src second_part_len = (int) ustrlen(second_part); if (symbol->symbology == BARCODE_ISBNX) { /* Need to further check that add-on numeric only */ - error_number = is_sane(NEON, second_part, second_part_len); - if (error_number == ZINT_ERROR_INVALID_DATA) { + if (is_sane(NEON, second_part, second_part_len) != 0) { strcpy(symbol->errtxt, "295: Invalid add-on data (digits only)"); - return error_number; + return ZINT_ERROR_INVALID_DATA; } } diff --git a/backend/vector.c b/backend/vector.c index d04d0164..ec4426b1 100644 --- a/backend/vector.c +++ b/backend/vector.c @@ -30,8 +30,6 @@ */ /* vim: set ts=4 sw=4 et : */ -#include - #ifdef _MSC_VER #include #endif diff --git a/backend/zint.h b/backend/zint.h index e5b13c48..b278f22e 100644 --- a/backend/zint.h +++ b/backend/zint.h @@ -110,7 +110,7 @@ extern "C" { int fontsize; /* Unused */ int input_mode; /* Encoding of input data (see DATA_MODE etc below). Default DATA_MODE */ int eci; /* Extended Channel Interpretation. Default 0 (none) */ - float dot_size; /* Size of dots used in BARCODE_DOTTY_MODE */ + float dot_size; /* Size of dots used in BARCODE_DOTTY_MODE. Default 0.8 */ float guard_descent; /* Height in X-dimensions that UPC/EAN guard bars descend. Default 5 */ struct zint_structapp structapp; /* Structured Append info. Default structapp.count 0 (none) */ int warn_level; /* Affects error/warning value returned by Zint API (see WARN_XXX below) */ @@ -255,29 +255,31 @@ extern "C" { #define BARCODE_RMQR 145 /* Rectangular Micro QR Code (rMQR) */ /* Output options (`symbol->output_options`) */ -#define BARCODE_NO_ASCII 1 /* Legacy (no-op) */ -#define BARCODE_BIND 2 /* Boundary bars above & below the symbol and between stacked symbols */ -#define BARCODE_BOX 4 /* Box around symbol */ -#define BARCODE_STDOUT 8 /* Output to stdout */ -#define READER_INIT 16 /* Reader Initialisation (Programming) */ -#define SMALL_TEXT 32 /* Use smaller font */ -#define BOLD_TEXT 64 /* Use bold font */ -#define CMYK_COLOUR 128 /* CMYK colour space (Encapsulated PostScript and TIF) */ -#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 */ +#define BARCODE_NO_ASCII 0x0001 /* Legacy (no-op) */ +#define BARCODE_BIND 0x0002 /* Boundary bars above & below the symbol and between stacked symbols */ +#define BARCODE_BOX 0x0004 /* Box around symbol */ +#define BARCODE_STDOUT 0x0008 /* Output to stdout */ +#define READER_INIT 0x0010 /* Reader Initialisation (Programming) */ +#define SMALL_TEXT 0x0020 /* Use smaller font */ +#define BOLD_TEXT 0x0040 /* Use bold font */ +#define CMYK_COLOUR 0x0080 /* CMYK colour space (Encapsulated PostScript and TIF) */ +#define BARCODE_DOTTY_MODE 0x0100 /* Plot a matrix symbol using dots rather than squares */ +#define GS1_GS_SEPARATOR 0x0200 /* Use GS instead of FNC1 as GS1 separator (Data Matrix) */ +#define OUT_BUFFER_INTERMEDIATE 0x0400 /* Return ASCII values in bitmap buffer (OUT_BUFFER only) */ +#define BARCODE_QUIET_ZONES 0x0800 /* 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 0x1000 /* Disable quiet zones, notably those with defaults as listed above */ +#define COMPLIANT_HEIGHT 0x2000 /* Warn if height not compliant and use standard height (if any) as default */ /* Input data types (`symbol->input_mode`) */ #define DATA_MODE 0 /* Binary */ #define UNICODE_MODE 1 /* UTF-8 */ #define GS1_MODE 2 /* GS1 */ /* The following may be OR-ed with above */ -#define ESCAPE_MODE 8 /* Process escape sequences */ -#define GS1PARENS_MODE 16 /* Process parentheses as GS1 AI delimiters (instead of square brackets) */ -#define GS1NOCHECK_MODE 32 /* Do not check validity of GS1 data (except that printable ASCII only) */ +#define ESCAPE_MODE 0x0008 /* Process escape sequences */ +#define GS1PARENS_MODE 0x0010 /* Process parentheses as GS1 AI delimiters (instead of square brackets) */ +#define GS1NOCHECK_MODE 0x0020 /* Do not check validity of GS1 data (except that printable ASCII only) */ /* Data Matrix specific options (`symbol->option_3`) */ #define DM_SQUARE 100 /* Only consider square versions on automatic symbol size selection */ @@ -290,46 +292,47 @@ extern "C" { #define ULTRA_COMPRESSION 128 /* Enable Ultracode compression (experimental) */ /* Warning and error conditions (API return values) */ -#define ZINT_WARN_INVALID_OPTION 2 /* Invalid option given but overridden by Zint */ -#define ZINT_WARN_USES_ECI 3 /* Automatic ECI inserted by Zint */ -#define ZINT_WARN_NONCOMPLIANT 4 /* Symbol created not compliant with standards */ -#define ZINT_ERROR 5 /* Warn/error marker, not returned */ -#define ZINT_ERROR_TOO_LONG 5 /* Input data wrong length */ -#define ZINT_ERROR_INVALID_DATA 6 /* Input data incorrect */ -#define ZINT_ERROR_INVALID_CHECK 7 /* Input check digit incorrect */ -#define ZINT_ERROR_INVALID_OPTION 8 /* Incorrect option given */ -#define ZINT_ERROR_ENCODING_PROBLEM 9 /* Internal error (should not happen) */ -#define ZINT_ERROR_FILE_ACCESS 10 /* Error opening output file */ -#define ZINT_ERROR_MEMORY 11 /* Memory allocation (malloc) failure */ -#define ZINT_ERROR_FILE_WRITE 12 /* Error writing to output file */ -#define ZINT_ERROR_USES_ECI 13 /* Error counterpart of warning if WARN_FAIL_ALL set (see below) */ -#define ZINT_ERROR_NONCOMPLIANT 14 /* Error counterpart of warning if WARN_FAIL_ALL set */ +#define ZINT_WARN_INVALID_OPTION 2 /* Invalid option given but overridden by Zint */ +#define ZINT_WARN_USES_ECI 3 /* Automatic ECI inserted by Zint */ +#define ZINT_WARN_NONCOMPLIANT 4 /* Symbol created not compliant with standards */ +#define ZINT_ERROR 5 /* Warn/error marker, not returned */ +#define ZINT_ERROR_TOO_LONG 5 /* Input data wrong length */ +#define ZINT_ERROR_INVALID_DATA 6 /* Input data incorrect */ +#define ZINT_ERROR_INVALID_CHECK 7 /* Input check digit incorrect */ +#define ZINT_ERROR_INVALID_OPTION 8 /* Incorrect option given */ +#define ZINT_ERROR_ENCODING_PROBLEM 9 /* Internal error (should not happen) */ +#define ZINT_ERROR_FILE_ACCESS 10 /* Error opening output file */ +#define ZINT_ERROR_MEMORY 11 /* Memory allocation (malloc) failure */ +#define ZINT_ERROR_FILE_WRITE 12 /* Error writing to output file */ +#define ZINT_ERROR_USES_ECI 13 /* Error counterpart of warning if WARN_FAIL_ALL set (see below) */ +#define ZINT_ERROR_NONCOMPLIANT 14 /* Error counterpart of warning if WARN_FAIL_ALL set */ /* Warning warn (`symbol->warn_level`) */ #define WARN_DEFAULT 0 /* Default behaviour */ #define WARN_FAIL_ALL 2 /* Treat warning as error */ /* Capability flags (ZBarcode_Cap() `cap_flag`) */ -#define ZINT_CAP_HRT 0x0001 /* Prints Human Readable Text? */ -#define ZINT_CAP_STACKABLE 0x0002 /* Is stackable? */ -#define ZINT_CAP_EXTENDABLE 0x0004 /* Is extendable with add-on data? (Is UPC/EAN?) */ -#define ZINT_CAP_COMPOSITE 0x0008 /* Can have composite data? */ -#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? */ -#define ZINT_CAP_MASK 0x0800 /* Is mask selectable? */ -#define ZINT_CAP_STRUCTAPP 0x1000 /* Supports Structured Append? */ +#define ZINT_CAP_HRT 0x0001 /* Prints Human Readable Text? */ +#define ZINT_CAP_STACKABLE 0x0002 /* Is stackable? */ +#define ZINT_CAP_EXTENDABLE 0x0004 /* Is extendable with add-on data? (Is UPC/EAN?) */ +#define ZINT_CAP_COMPOSITE 0x0008 /* Can have composite data? */ +#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? */ +#define ZINT_CAP_MASK 0x0800 /* Is mask selectable? */ +#define ZINT_CAP_STRUCTAPP 0x1000 /* Supports Structured Append? */ +#define ZINT_CAP_COMPLIANT_HEIGHT 0x2000 /* Has compliant height? */ /* The largest amount of data that can be encoded is 4350 4-byte UTF-8 chars in Han Xin Code */ #define ZINT_MAX_DATA_LEN 17400 /* Debug flags (debug) */ -#define ZINT_DEBUG_PRINT 1 /* Print debug info (if any) to stdout */ -#define ZINT_DEBUG_TEST 2 /* For internal test use only */ +#define ZINT_DEBUG_PRINT 0x0001 /* Print debug info (if any) to stdout */ +#define ZINT_DEBUG_TEST 0x0002 /* For internal test use only */ #ifdef _WIN32 # if defined(DLL_EXPORT) || defined(PIC) || defined(_USRDLL) diff --git a/backend_qt/CMakeLists.txt b/backend_qt/CMakeLists.txt index 953cae8b..a4897c11 100644 --- a/backend_qt/CMakeLists.txt +++ b/backend_qt/CMakeLists.txt @@ -21,6 +21,9 @@ target_include_directories(${PROJECT_NAME} PUBLIC "${CMAKE_SOURCE_DIR}/backend") target_link_libraries(${PROJECT_NAME} zint Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Gui) +if(ZINT_TEST AND NOT WIN32) # Fails with "Test not available without configuration" on Windows so skip + add_subdirectory(tests) +endif() install(TARGETS ${PROJECT_NAME} ${INSTALL_TARGETS_DEFAULT_ARGS}) install(FILES qzint.h DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel) diff --git a/backend_qt/qzint.cpp b/backend_qt/qzint.cpp index b884902c..453ffdee 100644 --- a/backend_qt/qzint.cpp +++ b/backend_qt/qzint.cpp @@ -65,6 +65,7 @@ namespace Zint { m_gssep = false; m_quiet_zones = false; m_no_quiet_zones = false; + m_compliant_height = false; m_reader_init = false; m_rotate_angle = 0; m_debug = false; @@ -95,6 +96,9 @@ namespace Zint { if (m_no_quiet_zones) { m_zintSymbol->output_options |= BARCODE_NO_QUIET_ZONES; } + if (m_compliant_height) { + m_zintSymbol->output_options |= COMPLIANT_HEIGHT; + } m_zintSymbol->border_width = m_borderWidth; m_zintSymbol->option_1 = m_option_1; m_zintSymbol->option_2 = m_option_2; @@ -153,6 +157,8 @@ namespace Zint { m_whitespace = m_zintSymbol->whitespace_width; m_vwhitespace = m_zintSymbol->whitespace_height; emit encoded(); + } else { + emit errored(); } } @@ -236,8 +242,12 @@ namespace Zint { m_dotty = dotty; } - void QZint::setDotSize(float dot_size) { - m_dot_size = dot_size; + float QZint::dotSize() const { + return m_dot_size; + } + + void QZint::setDotSize(float dotSize) { + m_dot_size = dotSize; } float QZint::guardDescent() const { @@ -248,6 +258,18 @@ namespace Zint { m_guardDescent = guardDescent; } + int QZint::structAppCount() const { + return m_structapp.count; + } + + int QZint::structAppIndex() const { + return m_structapp.index; + } + + QString QZint::structAppID() const { + return m_structapp.id; + } + void QZint::setStructApp(const int count, const int index, const QString& id) { if (count) { m_structapp.count = count; @@ -289,6 +311,10 @@ namespace Zint { m_bgColor = bgColor; } + bool QZint::cmyk() const { + return m_cmyk; + } + void QZint::setCMYK(bool cmyk) { m_cmyk = cmyk; } @@ -311,21 +337,33 @@ namespace Zint { return m_borderWidth; } - void QZint::setBorderWidth(int boderWidth) { - if (boderWidth < 0 || boderWidth > 16) - boderWidth = 0; - m_borderWidth = boderWidth; + void QZint::setBorderWidth(int borderWidth) { + if (borderWidth < 0 || borderWidth > 16) + borderWidth = 0; + m_borderWidth = borderWidth; + } + + int QZint::whitespace() const { + return m_whitespace; } void QZint::setWhitespace(int whitespace) { m_whitespace = whitespace; } - void QZint::setVWhitespace(int vwhitespace) { - m_vwhitespace = vwhitespace; + int QZint::vWhitespace() const { + return m_vwhitespace; } - void QZint::setFontSetting(int fontSettingIndex) { + void QZint::setVWhitespace(int vWhitespace) { + m_vwhitespace = vWhitespace; + } + + int QZint::fontSetting() const { + return m_fontSetting; + } + + void QZint::setFontSetting(int fontSettingIndex) { // Sets from comboBox index if (fontSettingIndex == 1) { m_fontSetting = BOLD_TEXT; } else if (fontSettingIndex == 2) { @@ -337,27 +375,59 @@ namespace Zint { } } - void QZint::setShowText(bool show) { - m_show_hrt = show; + void QZint::setFontSettingValue(int fontSetting) { // Sets literal value + if ((fontSetting & (BOLD_TEXT | SMALL_TEXT)) == fontSetting) { + m_fontSetting = fontSetting; + } else { + m_fontSetting = 0; + } } - void QZint::setGSSep(bool gssep) { - m_gssep = gssep; + bool QZint::showText() const { + return m_show_hrt; } - int QZint::rotateAngle() const { - return m_rotate_angle; + void QZint::setShowText(bool showText) { + m_show_hrt = showText; + } + + bool QZint::gsSep() const { + return m_gssep; + } + + void QZint::setGSSep(bool gsSep) { + m_gssep = gsSep; + } + + bool QZint::quietZones() const { + return m_quiet_zones; } void QZint::setQuietZones(bool quietZones) { m_quiet_zones = quietZones; } + bool QZint::noQuietZones() const { + return m_no_quiet_zones; + } + void QZint::setNoQuietZones(bool noQuietZones) { m_no_quiet_zones = noQuietZones; } - void QZint::setRotateAngle(int rotateIndex) { + bool QZint::compliantHeight() const { + return m_compliant_height; + } + + void QZint::setCompliantHeight(bool compliantHeight) { + m_compliant_height = compliantHeight; + } + + int QZint::rotateAngle() const { + return m_rotate_angle; + } + + void QZint::setRotateAngle(int rotateIndex) { // Sets from comboBox index if (rotateIndex == 1) { m_rotate_angle = 90; } else if (rotateIndex == 2) { @@ -369,7 +439,23 @@ namespace Zint { } } - void QZint::setECI(int ECIIndex) { + void QZint::setRotateAngleValue(int rotateAngle) { // Sets literal value + if (rotateAngle == 90) { + m_rotate_angle = 90; + } else if (rotateAngle == 180) { + m_rotate_angle = 180; + } else if (rotateAngle == 270) { + m_rotate_angle = 270; + } else { + m_rotate_angle = 0; + } + } + + int QZint::eci() const { + return m_eci; + } + + void QZint::setECI(int ECIIndex) { // Sets from comboBox index if (ECIIndex >= 1 && ECIIndex <= 11) { m_eci = ECIIndex + 2; } else if (ECIIndex >= 12 && ECIIndex <= 15) { @@ -383,16 +469,40 @@ namespace Zint { } } - void QZint::setGS1Parens(bool gs1parens) { - m_gs1parens = gs1parens; + void QZint::setECIValue(int eci) { // Sets literal value + if (eci < 3 || (eci > 30 && eci != 899) || eci == 14 || eci == 19) { + m_eci = 0; + } else { + m_eci = eci; + } } - void QZint::setGS1NoCheck(bool gs1nocheck) { - m_gs1nocheck = gs1nocheck; + bool QZint::gs1Parens() const { + return m_gs1parens; } - void QZint::setReaderInit(bool reader_init) { - m_reader_init = reader_init; + void QZint::setGS1Parens(bool gs1Parens) { + m_gs1parens = gs1Parens; + } + + bool QZint::gs1NoCheck() const { + return m_gs1nocheck; + } + + void QZint::setGS1NoCheck(bool gs1NoCheck) { + m_gs1nocheck = gs1NoCheck; + } + + bool QZint::readerInit() const { + return m_reader_init; + } + + void QZint::setReaderInit(bool readerInit) { + m_reader_init = readerInit; + } + + bool QZint::debug() const { + return m_debug; } void QZint::setDebug(bool debug) { @@ -411,6 +521,7 @@ namespace Zint { target_size_horiz = width; target_size_vert = height; } + QString QZint::error_message() const { return m_lastError; } /* Same as lastError() */ bool QZint::hasHRT(int symbology) const { return ZBarcode_Cap(symbology ? symbology : m_symbol, ZINT_CAP_HRT); @@ -444,12 +555,12 @@ namespace Zint { return ZBarcode_Cap(symbology ? symbology : m_symbol, ZINT_CAP_READER_INIT); } - int QZint::getError() const { - return m_error; + bool QZint::hasCompliantHeight(int symbology) const { + return ZBarcode_Cap(symbology ? symbology : m_symbol, ZINT_CAP_COMPLIANT_HEIGHT); } - QString QZint::error_message() const { - return m_lastError; + int QZint::getError() const { + return m_error; } const QString& QZint::lastError() const { @@ -472,6 +583,7 @@ namespace Zint { m_rotate_angle); if (m_error >= ZINT_ERROR) { m_lastError = m_zintSymbol->errtxt; + emit errored(); return false; } else { return true; diff --git a/backend_qt/qzint.h b/backend_qt/qzint.h index 4cd9f864..9f241bf7 100644 --- a/backend_qt/qzint.h +++ b/backend_qt/qzint.h @@ -67,11 +67,15 @@ public: bool dotty() const; void setDotty(bool botty); + float dotSize() const; void setDotSize(float dot_size); float guardDescent() const; void setGuardDescent(float guardDescent); + int structAppCount() const; + int structAppIndex() const; + QString structAppID() const; void setStructApp(const int count, const int index, const QString& id); void clearStructApp(); @@ -81,38 +85,58 @@ public: QColor bgColor() const; void setBgColor(const QColor& bgColor); + bool cmyk() const; void setCMYK(bool cmyk); int borderType() const; void setBorderType(int borderTypeIndex); int borderWidth() const; - void setBorderWidth(int boderWidth); + void setBorderWidth(int borderWidth); + int whitespace() const; void setWhitespace(int whitespace); - void setVWhitespace(int vwhitespace); + int vWhitespace() const; + void setVWhitespace(int vWhitespace); - void setFontSetting(int fontSettingIndex); + int fontSetting() const; + void setFontSetting(int fontSettingIndex); // Sets from comboBox index + void setFontSettingValue(int fontSetting); // Sets literal value - void setShowText(bool show); + bool showText() const; + void setShowText(bool showText); - void setGSSep(bool gssep); + bool gsSep() const; + void setGSSep(bool gsSep); + bool quietZones() const; void setQuietZones(bool quietZones); + + bool noQuietZones() const; void setNoQuietZones(bool noQuietZones); + bool compliantHeight() const; + void setCompliantHeight(bool compliantHeight); + int rotateAngle() const; - void setRotateAngle(int rotateIndex); + void setRotateAngle(int rotateIndex); // Sets from comboBox index + void setRotateAngleValue(int rotateAngle); // Sets literal value - void setECI(int ECIIndex); + int eci() const; + void setECI(int ECIIndex); // Sets from comboBox index + void setECIValue(int eci); // Sets literal value - void setGS1Parens(bool gs1parens); + bool gs1Parens() const; + void setGS1Parens(bool gs1Parens); - void setGS1NoCheck(bool gs1nocheck); + bool gs1NoCheck() const; + void setGS1NoCheck(bool gs1NoCheck); - void setReaderInit(bool reader_init); + bool readerInit() const; + void setReaderInit(bool readerInit); + bool debug() const; void setDebug(bool debug); /* Legacy property getters/setters */ @@ -120,10 +144,11 @@ public: int width() const; void setSecurityLevel(int securityLevel); /* option_2 */ int securityLevel() const; - void setPdf417CodeWords(int pdf417CodeWords); /* no op */ + void setPdf417CodeWords(int pdf417CodeWords); /* No-op */ int pdf417CodeWords() const; void setHideText(bool hide); /* setShowText(!hide) */ void setTargetSize(int width, int height); + QString error_message() const; /* Same as lastError() */ /* Test capabilities - ZBarcode_Cap() */ bool hasHRT(int symbology = 0) const; @@ -134,11 +159,10 @@ public: bool isFixedRatio(int symbology = 0) const; bool isDotty(int symbology = 0) const; bool supportsReaderInit(int symbology = 0) const; + bool hasCompliantHeight(int symbology = 0) const; int getError() const; - QString error_message() const; - const QString& lastError() const; bool hasErrors() const; @@ -151,6 +175,7 @@ public: signals: void encoded(); + void errored(); private: void resetSymbol(); @@ -190,6 +215,7 @@ private: bool m_gssep; bool m_quiet_zones; bool m_no_quiet_zones; + bool m_compliant_height; bool m_reader_init; bool m_debug; diff --git a/backend_qt/tests/CMakeLists.txt b/backend_qt/tests/CMakeLists.txt new file mode 100644 index 00000000..ac7a6526 --- /dev/null +++ b/backend_qt/tests/CMakeLists.txt @@ -0,0 +1,22 @@ +# Copyright (C) 2021 Robin Stuart +# vim: set ts=4 sw=4 et : + +cmake_minimum_required(VERSION 3.5) +project(QZint_tests LANGUAGES CXX) + +enable_testing() + +if(USE_QT6) + find_package(Qt6Test REQUIRED) +else() + find_package(Qt5Test REQUIRED) +endif() + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOMOC ON) + +add_executable(test_qzint test_qzint.cpp) +add_test(NAME qzint COMMAND test_qzint) + +target_link_libraries(test_qzint PRIVATE QZint Qt${QT_VERSION_MAJOR}::Test) diff --git a/backend_qt/tests/test_qzint.cpp b/backend_qt/tests/test_qzint.cpp new file mode 100644 index 00000000..13861d47 --- /dev/null +++ b/backend_qt/tests/test_qzint.cpp @@ -0,0 +1,403 @@ +/*************************************************************************** + * Copyright (C) 2021 by Robin Stuart * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + ***************************************************************************/ +/* vim: set ts=4 sw=4 et : */ + +#include +#include "../qzint.h" /* Don't use in case it's been changed */ + +#ifndef ARRAY_SIZE +#define ARRAY_SIZE(x) ((int) (sizeof(x) / sizeof((x)[0]))) +#endif + +class TestQZint : public QObject +{ + Q_OBJECT + +public: + TestQZint() : m_skipIfFontUsed(false) + { + // Qt5 will trigger "detected memory leaks" if font used (libfontconfig) so skip if ASAN enabled +#if QT_VERSION < 0x60000 +# if defined(__SANITIZE_ADDRESS__) || (defined(__has_feature) && __has_feature(address_sanitizer)) + m_skipIfFontUsed = true; +# endif +#endif + } + + virtual ~TestQZint() {} // Seems to be needed to generate vtable + +private: + bool m_skipIfFontUsed; // Hack to get around Qt5 ASAN leaks + +private slots: + + void setGetTest() + { + Zint::QZint bc; + + int symbology = BARCODE_CODE11; + bc.setSymbol(symbology); + QCOMPARE(bc.symbol(), symbology); + + int inputMode = UNICODE_MODE; + bc.setInputMode(inputMode); + QCOMPARE(bc.inputMode(), inputMode); + + QString text("text"); + bc.setText(text); + QCOMPARE(bc.text(), text); + + QString primaryMessage("primary message"); + bc.setPrimaryMessage(primaryMessage); + QCOMPARE(bc.primaryMessage(), primaryMessage); + + float height = 12.345f; + bc.setHeight(height); + QCOMPARE(bc.height(), height); + + int option1 = 1; + bc.setOption1(option1); + QCOMPARE(bc.option1(), option1); + + int option2 = 2; + bc.setOption2(option2); + QCOMPARE(bc.option2(), option2); + + int option3 = 3; + bc.setOption3(option3); + QCOMPARE(bc.option3(), option3); + + float scale = 0.678f; + bc.setScale(scale); + QCOMPARE(bc.scale(), scale); + + bool dotty = true; + bc.setDotty(dotty); + QCOMPARE(bc.dotty(), dotty); + + float dotSize = 1.234f; + bc.setDotSize(dotSize); + QCOMPARE(bc.dotSize(), dotSize); + + float guardDescent = 0.678f; + bc.setGuardDescent(guardDescent); + QCOMPARE(bc.guardDescent(), guardDescent); + + struct zint_structapp structapp = { 2, 3, "ID" }; + bc.setStructApp(structapp.count, structapp.index, structapp.id); + QCOMPARE(bc.structAppCount(), structapp.count); + QCOMPARE(bc.structAppIndex(), structapp.index); + QCOMPARE(bc.structAppID(), QString(structapp.id)); + + QColor fgColor(0x12, 0x34, 0x45, 0x67); + bc.setFgColor(fgColor); + QCOMPARE(bc.fgColor(), fgColor); + + QColor bgColor(0x89, 0xAB, 0xCD, 0xEF); + bc.setBgColor(bgColor); + QCOMPARE(bc.bgColor(), bgColor); + + bool cmyk = true; + bc.setCMYK(cmyk); + QCOMPARE(bc.cmyk(), cmyk); + + int borderTypes[] = { 0, BARCODE_BIND, BARCODE_BOX }; + for (int i = 0; i < ARRAY_SIZE(borderTypes); i++) { + bc.setBorderType(i); + QCOMPARE(bc.borderType(), borderTypes[i]); + } + + int borderWidth = 4; + bc.setBorderWidth(borderWidth); + QCOMPARE(bc.borderWidth(), borderWidth); + + int whitespace = 5; + bc.setWhitespace(whitespace); + QCOMPARE(bc.whitespace(), whitespace); + + int vWhitespace = 6; + bc.setVWhitespace(vWhitespace); + QCOMPARE(bc.vWhitespace(), vWhitespace); + + int fontSettings[] = { 0, BOLD_TEXT, SMALL_TEXT, SMALL_TEXT | BOLD_TEXT }; + for (int i = 0; i < ARRAY_SIZE(fontSettings); i++) { + bc.setFontSetting(i); + QCOMPARE(bc.fontSetting(), fontSettings[i]); + + bc.setFontSettingValue(fontSettings[i]); + QCOMPARE(bc.fontSetting(), fontSettings[i]); + } + bc.setFontSetting(ARRAY_SIZE(fontSettings)); + QCOMPARE(bc.fontSetting(), 0); + bc.setFontSetting(-1); + QCOMPARE(bc.fontSetting(), 0); + + bc.setFontSettingValue(-1); + QCOMPARE(bc.fontSetting(), 0); + bc.setFontSettingValue(CMYK_COLOUR); + QCOMPARE(bc.fontSetting(), 0); + + bool showText = false; + bc.setShowText(showText); + QCOMPARE(bc.showText(), showText); + + bool gsSep = true; + bc.setGSSep(gsSep); + QCOMPARE(bc.gsSep(), gsSep); + + bool quietZones = true; + bc.setQuietZones(quietZones); + QCOMPARE(bc.quietZones(), quietZones); + + bool noQuietZones = true; + bc.setNoQuietZones(noQuietZones); + QCOMPARE(bc.noQuietZones(), noQuietZones); + + bool compliantHeight = true; + bc.setCompliantHeight(compliantHeight); + QCOMPARE(bc.compliantHeight(), compliantHeight); + + int rotateAngles[] = { 0, 90, 180, 270 }; + for (int i = 0; i < ARRAY_SIZE(rotateAngles); i++) { + bc.setRotateAngle(i); + QCOMPARE(bc.rotateAngle(), rotateAngles[i]); + + bc.setRotateAngleValue(rotateAngles[i]); + QCOMPARE(bc.rotateAngle(), rotateAngles[i]); + } + bc.setRotateAngle(ARRAY_SIZE(rotateAngles)); + QCOMPARE(bc.rotateAngle(), 0); + bc.setRotateAngle(-1); + QCOMPARE(bc.rotateAngle(), 0); + + bc.setRotateAngleValue(-1); + QCOMPARE(bc.rotateAngle(), 0); + bc.setRotateAngleValue(45); + QCOMPARE(bc.rotateAngle(), 0); + + int ecis[] = { + 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 15, 16, 17, 18, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 899, + }; + for (int i = 0; i < ARRAY_SIZE(ecis); i++) { + bc.setECI(i); + QCOMPARE(bc.eci(), ecis[i]); + + bc.setECIValue(ecis[i]); + QCOMPARE(bc.eci(), ecis[i]); + } + bc.setECI(ARRAY_SIZE(ecis)); + QCOMPARE(bc.eci(), 0); + bc.setECI(-1); + QCOMPARE(bc.eci(), 0); + // See also setGetECIValueTest() + + bool gs1Parens = true; + bc.setGS1Parens(gs1Parens); + QCOMPARE(bc.gs1Parens(), gs1Parens); + + bool gs1NoCheck = true; + bc.setGS1NoCheck(gs1NoCheck); + QCOMPARE(bc.gs1NoCheck(), gs1NoCheck); + + bool readerInit = true; + bc.setReaderInit(readerInit); + QCOMPARE(bc.readerInit(), readerInit); + + bool debug = true; + bc.setDebug(debug); + QCOMPARE(bc.debug(), debug); + } + + void setGetECIValueTest_data() + { + QTest::addColumn("value"); + QTest::addColumn("eci"); + + QTest::newRow("-1") << -1 << 0; + QTest::newRow("0") << 0 << 0; + QTest::newRow("1") << 1 << 0; + QTest::newRow("2") << 2 << 0; + QTest::newRow("14") << 14 << 0; + QTest::newRow("19") << 19 << 0; + QTest::newRow("31") << 31 << 0; + QTest::newRow("898") << 898 << 0; + QTest::newRow("900") << 900 << 0; + QTest::newRow("1000") << 1000 << 0; + } + + void setGetECIValueTest() + { + Zint::QZint bc; + + QFETCH(int, value); + QFETCH(int, eci); + + bc.setECIValue(value); + QCOMPARE(bc.eci(), eci); + } + + void legacyTest() + { + Zint::QZint bc; + + int width = 12; + bc.setWidth(width); + QCOMPARE(bc.width(), width); + QCOMPARE(bc.option1(), width); + + int securityLevel = 2; + bc.setSecurityLevel(securityLevel); + QCOMPARE(bc.securityLevel(), securityLevel); + QCOMPARE(bc.option2(), securityLevel); + + int pdf417CodeWords = 123; + bc.setPdf417CodeWords(pdf417CodeWords); + QCOMPARE(bc.pdf417CodeWords(), 0); // No-op + + bool hideText = true; + bc.setHideText(hideText); + QCOMPARE(bc.showText(), !hideText); + + // No get for target size + } + + void capTest_data() + { + QTest::addColumn("symbology"); + QTest::addColumn("cap_flag"); + + QTest::newRow("BARCODE_CODE11") << BARCODE_CODE11 << (ZINT_CAP_HRT); + QTest::newRow("BARCODE_CODE128") << BARCODE_CODE128 << (ZINT_CAP_HRT | ZINT_CAP_READER_INIT); + QTest::newRow("BARCODE_EANX") << BARCODE_EANX << (ZINT_CAP_HRT | ZINT_CAP_EXTENDABLE | ZINT_CAP_QUIET_ZONES | ZINT_CAP_COMPLIANT_HEIGHT); + QTest::newRow("BARCODE_QRCODE") << BARCODE_QRCODE << (ZINT_CAP_ECI | ZINT_CAP_GS1 | ZINT_CAP_DOTTY | ZINT_CAP_FIXED_RATIO); + } + + void capTest() + { + Zint::QZint bc; + + QFETCH(int, symbology); + QFETCH(int, cap_flag); + + bc.setSymbol(symbology); + QCOMPARE(bc.hasHRT(), (cap_flag & ZINT_CAP_HRT) != 0); + QCOMPARE(bc.isExtendable(), (cap_flag & ZINT_CAP_EXTENDABLE) != 0); + QCOMPARE(bc.supportsECI(), (cap_flag & ZINT_CAP_ECI) != 0); + QCOMPARE(bc.supportsGS1(), (cap_flag & ZINT_CAP_GS1) != 0); + QCOMPARE(bc.hasDefaultQuietZones(), (cap_flag & ZINT_CAP_QUIET_ZONES) != 0); + QCOMPARE(bc.isFixedRatio(), (cap_flag & ZINT_CAP_FIXED_RATIO) != 0); + QCOMPARE(bc.isDotty(), (cap_flag & ZINT_CAP_DOTTY) != 0); + QCOMPARE(bc.supportsReaderInit(), (cap_flag & ZINT_CAP_READER_INIT) != 0); + QCOMPARE(bc.hasCompliantHeight(), (cap_flag & ZINT_CAP_COMPLIANT_HEIGHT) != 0); + } + + void renderTest_data() + { + QTest::addColumn("symbology"); + QTest::addColumn("text"); + QTest::addColumn("getError"); + QTest::addColumn("error_message"); + + QTest::newRow("BARCODE_QRCODE") << BARCODE_QRCODE << "1234" << 0 << ""; + if (!m_skipIfFontUsed) { + QTest::newRow("BARCODE_QRCODE no text") << BARCODE_QRCODE << "" << ZINT_ERROR_INVALID_DATA << "Error 205: No input data"; + } + } + + void renderTest() + { + Zint::QZint bc; + + bool bRet; + QPainter painter; + constexpr int width = 100, height = 100; + QPixmap paintDevice(width, height); + QRectF paintRect(0, 0, width, height); + Zint::QZint::AspectRatioMode mode; + QSignalSpy spyEncoded(&bc, SIGNAL(encoded())); + QSignalSpy spyErrored(&bc, SIGNAL(errored())); + + mode = Zint::QZint::AspectRatioMode::KeepAspectRatio; // Legacy - ignored + + QFETCH(int, symbology); + QFETCH(QString, text); + QFETCH(int, getError); + QFETCH(QString, error_message); + + bc.setSymbol(symbology); + bc.setText(text); + + bRet = painter.begin(&paintDevice); + QCOMPARE(bRet, true); + + bc.render(painter, paintRect, mode); + + bRet = painter.end(); + QCOMPARE(bRet, true); + + QCOMPARE(bc.getError(), getError); + QCOMPARE(bc.error_message(), error_message); + QCOMPARE(bc.lastError(), error_message); + QCOMPARE(bc.hasErrors(), getError != 0); + + if (getError) { + QCOMPARE(spyEncoded.count(), 0); + QCOMPARE(spyErrored.count(), 1); + } else { + QCOMPARE(spyEncoded.count(), 1); + QCOMPARE(spyErrored.count(), 0); + } + } + + void saveToFileTest_data() + { + QTest::addColumn("symbology"); + QTest::addColumn("text"); + QTest::addColumn("fileName"); + QTest::addColumn("expected_bRet"); + + QTest::newRow("BARCODE_DATAMATRIX gif") << BARCODE_DATAMATRIX << "1234" << "test_save_to_file.gif" << true; + QTest::newRow("BARCODE_DATAMATRIX unknown format") << BARCODE_DATAMATRIX << "1234" << "test_save_to_file.ext" << false; + } + + void saveToFileTest() + { + Zint::QZint bc; + + bool bRet; + int ret; + + QFETCH(int, symbology); + QFETCH(QString, text); + QFETCH(QString, fileName); + QFETCH(bool, expected_bRet); + + bc.setSymbol(symbology); + bc.setText(text); + + bRet = bc.save_to_file(fileName); + QCOMPARE(bRet, expected_bRet); + + if (bRet) { + ret = remove(fileName.toLatin1()); + QCOMPARE(ret, 0); + } + } +}; + +QTEST_MAIN(TestQZint) +#include "test_qzint.moc" diff --git a/backend_tcl/zint.c b/backend_tcl/zint.c index e99b2e85..3c798150 100644 --- a/backend_tcl/zint.c +++ b/backend_tcl/zint.c @@ -130,6 +130,8 @@ 2021-09-27 GL - Added -structapp - Split up -to parsing (could seg fault if given non-int for X0 or Y0) +2021-10-05 GL +- Added -compliantheight option */ #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) @@ -452,6 +454,7 @@ static char help_message[] = "zint tcl(stub,obj) dll\n" " -box bool: box around bar code, size set be -border\n" /* cli option --cmyk not supported as no corresponding output */ " -cols integer: PDF417, Codablock F, DotCode: number of columns\n" + " -compliantheight bool: warn if height not compliant, and use standard default\n" /* cli option --data is standard parameter */ " -dmre bool: Allow Data Matrix Rectangular Extended\n" " -dotsize number: radius ratio of dots from 0.01 to 1.0\n" @@ -715,8 +718,9 @@ static int Encode(Tcl_Interp *interp, int objc, /* Option list and indexes */ char *optionList[] = { "-addongap", "-barcode", "-bg", "-bind", "-bold", "-border", "-box", - "-cols", "-dmre", "-dotsize", "-dotty", "-eci", "-fg", "-format", - "-fullmultibyte", "-gs1nocheck", "-gs1parens", "-gssep", "-guarddescent", + "-cols", "-compliantheight", "-dmre", "-dotsize", "-dotty", + "-eci", "-fg", "-format", "-fullmultibyte", + "-gs1nocheck", "-gs1parens", "-gssep", "-guarddescent", "-height", "-init", "-mask", "-mode", "-nobackground", "-noquietzones", "-notext", "-primary", "-quietzones", "-reverse", "-rotate", "-rows", "-scale", "-scmvv", @@ -725,8 +729,9 @@ static int Encode(Tcl_Interp *interp, int objc, NULL}; enum iOption { iAddonGap, iBarcode, iBG, iBind, iBold, iBorder, iBox, - iCols, iDMRE, iDotSize, iDotty, iECI, iFG, iFormat, - iFullMultiByte, iGS1NoCheck, iGS1Parens, iGSSep, iGuardDescent, + iCols, iCompliantHeight, iDMRE, iDotSize, iDotty, + iECI, iFG, iFormat, iFullMultiByte, + iGS1NoCheck, iGS1Parens, iGSSep, iGuardDescent, iHeight, iInit, iMask, iMode, iNoBackground, iNoQuietZones, iNoText, iPrimary, iQuietZones, iReverse, iRotate, iRows, iScale, iSCMvv, @@ -751,6 +756,7 @@ static int Encode(Tcl_Interp *interp, int objc, case iBind: case iBold: case iBox: + case iCompliantHeight: case iDMRE: case iDotty: case iGS1NoCheck: @@ -862,6 +868,13 @@ static int Encode(Tcl_Interp *interp, int objc, my_symbol->output_options &= ~BARCODE_BOX; } break; + case iCompliantHeight: + if (intValue) { + my_symbol->output_options |= COMPLIANT_HEIGHT; + } else { + my_symbol->output_options &= ~COMPLIANT_HEIGHT; + } + break; case iDotSize: if (doubleValue < 0.01) { Tcl_SetObjResult(interp, diff --git a/docs/manual.txt b/docs/manual.txt index fbc92c9a..ba4cad5e 100644 --- a/docs/manual.txt +++ b/docs/manual.txt @@ -1863,8 +1863,9 @@ purposes. The American Blood Commission adopted Codabar in 1977 as the standard symbology for blood identification. Codabar can encode any length string starting and ending with the letters A-D and containing between these letters the numbers 0-9, dash (-), dollar ($), colon (:), slash (/), full stop (.) or -plus (+). No check digit is generated by default, but a modulo-16 one can be -added by setting option_2 = 1 or using --vers=1. +plus (+). No check characater is generated by default, but a modulo-16 one can +be added by setting option_2 = 1 or using --vers=1. To have the check character +appear in the Human Readable Text, set option_2 = 2 or --vers=2. 6.1.10 Pharmacode ----------------- @@ -2054,7 +2055,8 @@ in Codablock-F symbols. 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 -character encoding in the same manner as Code 128. +character encoding in the same manner as Code 128. GS1 data encoding is also +supported. 6.2.4 PDF417 (ISO 15438) ------------------------ @@ -3171,7 +3173,7 @@ international standards: > BS EN 797:1996 Bar coding - Symbology specifications - 'EAN/UPC' > BS EN 798:1996 Bar coding - Symbology specifications - 'Codabar' -> ISO/IEC 12323:2005 AIDC technologies - Symbology specifications - Code 16K +> BS EN 12323:2005 AIDC technologies - Symbology specifications - Code 16K > ISO/IEC 15417:2007 Information technology - Automatic identification and data capture techniques - Code 128 bar code symbology specification > ISO/IEC 15438:2015 Information technology - Automatic identification and data diff --git a/frontend/main.c b/frontend/main.c index d09f239f..af8c60e5 100644 --- a/frontend/main.c +++ b/frontend/main.c @@ -127,6 +127,7 @@ static void usage(void) { " --box Add a box around the symbol\n" " --cmyk Use CMYK colour space in EPS/TIF symbols\n" " --cols=NUMBER Set the number of data columns in symbol\n" + " --compliantheight Warn if height not compliant, and use standard default\n" " -d, --data=DATA Set the symbol content\n" " --direct Send output to stdout\n" " --dmre Allow Data Matrix Rectangular Extended\n" @@ -856,8 +857,8 @@ int main(int argc, char **argv) { while (no_getopt_error) { enum options { - OPT_ADDONGAP = 128, OPT_BATCH, OPT_BINARY, OPT_BG, OPT_BIND, OPT_BOLD, OPT_BORDER, - OPT_BOX, OPT_CMYK, OPT_COLS, OPT_DIRECT, OPT_DMRE, OPT_DOTSIZE, OPT_DOTTY, OPT_DUMP, + OPT_ADDONGAP = 128, OPT_BATCH, OPT_BINARY, OPT_BG, OPT_BIND, OPT_BOLD, OPT_BORDER, OPT_BOX, + OPT_CMYK, OPT_COLS, OPT_COMPLIANTHEIGHT, OPT_DIRECT, OPT_DMRE, OPT_DOTSIZE, OPT_DOTTY, OPT_DUMP, 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, @@ -879,6 +880,7 @@ int main(int argc, char **argv) { {"box", 0, NULL, OPT_BOX}, {"cmyk", 0, NULL, OPT_CMYK}, {"cols", 1, NULL, OPT_COLS}, + {"compliantheight", 0, NULL, OPT_COMPLIANTHEIGHT}, {"data", 1, NULL, 'd'}, {"direct", 0, NULL, OPT_DIRECT}, {"dmre", 0, NULL, OPT_DMRE}, @@ -995,6 +997,9 @@ int main(int argc, char **argv) { fflush(stderr); } break; + case OPT_COMPLIANTHEIGHT: + my_symbol->output_options |= COMPLIANT_HEIGHT; + break; case OPT_DIRECT: my_symbol->output_options |= BARCODE_STDOUT; break; diff --git a/frontend/tests/test_args.c b/frontend/tests/test_args.c index 281077ed..1b87b470 100644 --- a/frontend/tests/test_args.c +++ b/frontend/tests/test_args.c @@ -220,6 +220,15 @@ static void arg_output_options(char *cmd, int output_options) { if (output_options & GS1_GS_SEPARATOR) { sprintf(cmd + (int) strlen(cmd), "%s--gssep", strlen(cmd) ? " " : ""); } + if (output_options & BARCODE_QUIET_ZONES) { + sprintf(cmd + (int) strlen(cmd), "%s--quietzones", strlen(cmd) ? " " : ""); + } + if (output_options & BARCODE_NO_QUIET_ZONES) { + sprintf(cmd + (int) strlen(cmd), "%s--noquietzones", strlen(cmd) ? " " : ""); + } + if (output_options & COMPLIANT_HEIGHT) { + sprintf(cmd + (int) strlen(cmd), "%s--compliantheight", strlen(cmd) ? " " : ""); + } } } @@ -906,38 +915,39 @@ static void test_other_opts(int index, int debug) { /* 5*/ { BARCODE_CODE128, "1", -1, " --fg=", "00000000", "" }, /* 6*/ { BARCODE_CODE128, "1", -1, " --fg=", "000000F", "Error 651: Malformed foreground colour target" }, /* 7*/ { BARCODE_CODE128, "1", -1, " --fg=", "000000FG", "Error 653: Malformed foreground colour target" }, - /* 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, " --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'" }, - /* 24*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "1", "Error 155: Invalid Structured Append argument, expect \"index,count[,ID]\"" }, - /* 25*/ { BARCODE_AZTEC, "1", -1, " --structapp=", ",", "Error 156: Structured Append index too short" }, - /* 26*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "1234567890,", "Error 156: Structured Append index too long" }, - /* 27*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "123456789,", "Error 159: Structured Append count too short" }, - /* 28*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "123456789,1234567890", "Error 159: Structured Append count too long" }, - /* 29*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "123456789,123456789,", "Error 158: Structured Append ID too short" }, - /* 30*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "123456789,1234567890,", "Error 157: Structured Append count too long" }, - /* 31*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "123456789,123456789,123456789012345678901234567890123", "Error 158: Structured Append ID too long" }, - /* 32*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "123456789,123456789,12345678901234567890123456789012", "Error 701: Structured Append count out of range (2-26)" }, - /* 33*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "26,26,12345678901234567890123456789012", "" }, - /* 34*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "A,26,12345678901234567890123456789012", "Error 160: Invalid Structured Append index (digits only)" }, - /* 35*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "26,A,12345678901234567890123456789012", "Error 161: Invalid Structured Append count (digits only)" }, - /* 36*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "26,1,12345678901234567890123456789012", "Error 162: Invalid Structured Append count, must be >= 2" }, - /* 37*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "0,2,12345678901234567890123456789012", "Error 163: Structured Append index out of range (1-2)" }, - /* 38*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "3,2,12345678901234567890123456789012", "Error 163: Structured Append index out of range (1-2)" }, - /* 39*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "2,3,12345678901234567890123456789012", "" }, + /* 8*/ { BARCODE_CODE128, "1", -1, " --compliantheight", "", "" }, + /* 9*/ { BARCODE_CODE128, "1", -1, " --fontsize=", "10", "" }, + /* 10*/ { BARCODE_CODE128, "1", -1, " --fontsize=", "101", "Warning 126: Font size out of range (0 to 100), ignoring" }, + /* 11*/ { BARCODE_CODE128, "1", -1, " --nobackground", "", "" }, + /* 12*/ { BARCODE_CODE128, "1", -1, " --noquietzones", "", "" }, + /* 13*/ { BARCODE_CODE128, "1", -1, " --notext", "", "" }, + /* 14*/ { BARCODE_CODE128, "1", -1, " --quietzones", "", "" }, + /* 15*/ { BARCODE_CODE128, "1", -1, " --reverse", "", "" }, + /* 16*/ { BARCODE_CODE128, "1", -1, " --werror", NULL, "" }, + /* 17*/ { 19, "1", -1, " --werror", NULL, "Error 207: Codabar 18 not supported" }, + /* 18*/ { BARCODE_GS1_128, "[01]12345678901231", -1, "", NULL, "" }, + /* 19*/ { BARCODE_GS1_128, "0112345678901231", -1, "", NULL, "Error 252: Data does not start with an AI" }, + /* 20*/ { BARCODE_GS1_128, "0112345678901231", -1, " --gs1nocheck", NULL, "Error 252: Data does not start with an AI" }, + /* 21*/ { BARCODE_GS1_128, "[00]376104250021234569", -1, "", NULL, "" }, + /* 22*/ { BARCODE_GS1_128, "[00]376104250021234568", -1, "", NULL, "Warning 261: AI (00) position 18: Bad checksum '8', expected '9'" }, + /* 23*/ { BARCODE_GS1_128, "[00]376104250021234568", -1, " --gs1nocheck", NULL, "" }, + /* 24*/ { BARCODE_GS1_128, "[00]376104250021234568", -1, " --werror", NULL, "Error 261: AI (00) position 18: Bad checksum '8', expected '9'" }, + /* 25*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "1", "Error 155: Invalid Structured Append argument, expect \"index,count[,ID]\"" }, + /* 26*/ { BARCODE_AZTEC, "1", -1, " --structapp=", ",", "Error 156: Structured Append index too short" }, + /* 27*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "1234567890,", "Error 156: Structured Append index too long" }, + /* 28*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "123456789,", "Error 159: Structured Append count too short" }, + /* 29*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "123456789,1234567890", "Error 159: Structured Append count too long" }, + /* 30*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "123456789,123456789,", "Error 158: Structured Append ID too short" }, + /* 31*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "123456789,1234567890,", "Error 157: Structured Append count too long" }, + /* 32*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "123456789,123456789,123456789012345678901234567890123", "Error 158: Structured Append ID too long" }, + /* 33*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "123456789,123456789,12345678901234567890123456789012", "Error 701: Structured Append count out of range (2-26)" }, + /* 34*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "26,26,12345678901234567890123456789012", "" }, + /* 35*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "A,26,12345678901234567890123456789012", "Error 160: Invalid Structured Append index (digits only)" }, + /* 36*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "26,A,12345678901234567890123456789012", "Error 161: Invalid Structured Append count (digits only)" }, + /* 37*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "26,1,12345678901234567890123456789012", "Error 162: Invalid Structured Append count, must be >= 2" }, + /* 38*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "0,2,12345678901234567890123456789012", "Error 163: Structured Append index out of range (1-2)" }, + /* 39*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "3,2,12345678901234567890123456789012", "Error 163: Structured Append index out of range (1-2)" }, + /* 40*/ { BARCODE_AZTEC, "1", -1, " --structapp=", "2,3,12345678901234567890123456789012", "" }, }; int data_size = ARRAY_SIZE(data); int i; diff --git a/frontend_qt/barcodeitem.cpp b/frontend_qt/barcodeitem.cpp index 7fd622db..441ae7a7 100644 --- a/frontend_qt/barcodeitem.cpp +++ b/frontend_qt/barcodeitem.cpp @@ -16,7 +16,7 @@ ***************************************************************************/ /* vim: set ts=4 sw=4 et : */ -#include +//#include #include "barcodeitem.h" BarcodeItem::BarcodeItem() diff --git a/frontend_qt/grpAztec.ui b/frontend_qt/grpAztec.ui index aad58a84..efc4a6ba 100644 --- a/frontend_qt/grpAztec.ui +++ b/frontend_qt/grpAztec.ui @@ -54,6 +54,9 @@ be set based on data + + 21 + false diff --git a/frontend_qt/grpC11.ui b/frontend_qt/grpC11.ui index f967186b..e3082c83 100644 --- a/frontend_qt/grpC11.ui +++ b/frontend_qt/grpC11.ui @@ -25,12 +25,18 @@ Check Digits + + Check digits options + &Two (Mod-11) + + Add 2 mod-11 check digits + true @@ -41,6 +47,9 @@ &One (Mod-11) + + Add 1 mod-11 check digit + @@ -48,6 +57,9 @@ &No Check Digit + + Do not add any check digits + diff --git a/frontend_qt/grpC16k.ui b/frontend_qt/grpC16k.ui index 459f30b8..7c3bff0d 100644 --- a/frontend_qt/grpC16k.ui +++ b/frontend_qt/grpC16k.ui @@ -28,7 +28,8 @@ &Row Separator Height: - Height in X-dimensions of horizontal lines separating rows + Height in X-dimensions of horizontal lines +separating rows cmbC16kRowSepHeight @@ -38,7 +39,8 @@ - Height in X-dimensions of horizontal lines separating rows + Height in X-dimensions of horizontal lines +separating rows diff --git a/frontend_qt/grpC25.ui b/frontend_qt/grpC25.ui index f74e1e9d..ab349b54 100644 --- a/frontend_qt/grpC25.ui +++ b/frontend_qt/grpC25.ui @@ -21,41 +21,50 @@ - - - - - &No Check Digit - - - true - - - No check digit added - - - - - - - &Check Digit - - - Add standard GS1 mod-10 weighted check digit - - - - - - - Check Digit, Not Shown in &Text - - - Add standard GS1 check digit but do not display in Human Readable Text - - - - + + + Check Digit + + + Check digit options + + + + + + &No Check Digit + + + true + + + Do not add check digit + + + + + + + &Check Digit + + + Add standard GS1 mod-10 check digit + + + + + + + &Hidden Check Digit + + + Add standard GS1 mod-10 check digit but +do not display in Human Readable Text + + + + + diff --git a/frontend_qt/grpC39.ui b/frontend_qt/grpC39.ui index 5abde122..c0ffb36b 100644 --- a/frontend_qt/grpC39.ui +++ b/frontend_qt/grpC39.ui @@ -21,32 +21,52 @@ - - - - - &No Check Digit - - - true - - - - - - - H&IBC 39 - - - - - - - &Mod-43 Check Digit - - - - + + + Check Digit + + + Check character options + + + + + + &No Check Digit + + + Do not add check character + + + true + + + + + + + H&IBC 39 (Mod-43 Check Digit added) + + + Process data as a Health Industry Barcode (HIBC) +Labeler Identification Code (LIC) +For Provider Applications Standard (PAS), preface +the data with a slash "/" + + + + + + + &Mod-43 Check Digit + + + Add mod-43 check character + + + + + diff --git a/frontend_qt/grpC49.ui b/frontend_qt/grpC49.ui index 691e6812..443eca10 100644 --- a/frontend_qt/grpC49.ui +++ b/frontend_qt/grpC49.ui @@ -28,7 +28,8 @@ &Row Separator Height: - Height in X-dimensions of horizontal lines separating rows + Height in X-dimensions of horizontal lines +separating rows cmbC49RowSepHeight @@ -38,7 +39,8 @@ - Height in X-dimensions of horizontal lines separating rows + Height in X-dimensions of horizontal lines +separating rows diff --git a/frontend_qt/grpC93.ui b/frontend_qt/grpC93.ui index f11eb257..5322842b 100644 --- a/frontend_qt/grpC93.ui +++ b/frontend_qt/grpC93.ui @@ -20,7 +20,8 @@ Show &Check Characters in Text - Display the 2 check characters in the Human Readable Text + Display the 2 check characters in +the Human Readable Text false diff --git a/frontend_qt/grpChannel.ui b/frontend_qt/grpChannel.ui index 1c6964bb..62fe84c7 100644 --- a/frontend_qt/grpChannel.ui +++ b/frontend_qt/grpChannel.ui @@ -26,6 +26,17 @@ &Number of Channels: + + The number of channels determines the<br />range of numbers that can be encoded<table cellspacing="3"> +><tr><th align=left>Channels&nbsp;</th><th align=left>Range</th></tr> +<tr><td>3&nbsp;</td><td>0 to 26</td></tr> +<tr><td>4&nbsp;</td><td>0 to 292</td></tr> +<tr><td>5&nbsp;</td><td>0 to 3493</td></tr> +<tr><td>6&nbsp;</td><td>0 to 44072</td></tr> +<tr><td>7&nbsp;</td><td>0 to 576688</td></tr> +<tr><td>8&nbsp;</td><td>0 to 7742862</td></tr> +</table> + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -36,6 +47,17 @@ + + The number of channels determines the<br />range of numbers that can be encoded<table cellspacing="3"> +><tr><th align=left>Channels&nbsp;</th><th align=left>Range</th></tr> +<tr><td>3&nbsp;</td><td>0 to 26</td></tr> +<tr><td>4&nbsp;</td><td>0 to 292</td></tr> +<tr><td>5&nbsp;</td><td>0 to 3493</td></tr> +<tr><td>6&nbsp;</td><td>0 to 44072</td></tr> +<tr><td>7&nbsp;</td><td>0 to 576688</td></tr> +<tr><td>8&nbsp;</td><td>0 to 7742862</td></tr> +</table> + Automatic diff --git a/frontend_qt/grpCodabar.ui b/frontend_qt/grpCodabar.ui index d8e1007c..1167a9ef 100644 --- a/frontend_qt/grpCodabar.ui +++ b/frontend_qt/grpCodabar.ui @@ -15,13 +15,49 @@ - - - Add &Check Character (Mod-16) + + + Check Digit - - false + + Check character options + + + + + &No Check Digit + + + true + + + Do not add check character + + + + + + + &Check Digit + + + Add mod-16 check character + + + + + + + &Hidden Check Digit + + + Add mod-16 check character but do +not display in Human Readable Text + + + + diff --git a/frontend_qt/grpCodablockF.ui b/frontend_qt/grpCodablockF.ui index cc3887a0..b424b4ad 100644 --- a/frontend_qt/grpCodablockF.ui +++ b/frontend_qt/grpCodablockF.ui @@ -599,7 +599,8 @@ &Row Separator Height: - Height in X-dimensions of horizontal lines separating rows + Height in X-dimensions of horizontal lines +separating rows cmbCbfRowSepHeight @@ -609,7 +610,8 @@ - Height in X-dimensions of horizontal lines separating rows + Height in X-dimensions of horizontal lines +separating rows diff --git a/frontend_qt/grpCodeOne.ui b/frontend_qt/grpCodeOne.ui index 925fa210..75435fb7 100644 --- a/frontend_qt/grpCodeOne.ui +++ b/frontend_qt/grpCodeOne.ui @@ -28,7 +28,11 @@ Symbol Si&ze: - Set size (version) of symbol + Set size (H x W) of symbol +Versions A to H have fixed heights and +fixed widths +Versions S and T have fixed heights but +variable widths Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -40,8 +44,15 @@ + + 11 + - Set size (version) of symbol + Set size (H x W) of symbol +Versions A to H have fixed heights and +fixed widths +Versions S and T have fixed heights but +variable widths @@ -149,7 +160,8 @@ formatted with Application Identifiers (AIs) Code One supports Structured Append of up to -128 symbols +128 symbols (not available for Version S) +(ignored if disabled) @@ -178,7 +190,7 @@ containing a total of this number of symbols Value ranges from 1 (Disabled) to 128 - 1 (Disabled) + 1 (Disabled) 1 diff --git a/frontend_qt/grpDAFT.ui b/frontend_qt/grpDAFT.ui index ae4f7dc7..00b343ad 100644 --- a/frontend_qt/grpDAFT.ui +++ b/frontend_qt/grpDAFT.ui @@ -80,7 +80,7 @@ Examples of tracker ratios:<table cellspacing="3"> <tr><td>Australia Post&nbsp;</td><td>26%</td></tr> <tr><td>Japan Post&nbsp;</td><td>33%</td></tr> -<tr><td>PLANET, POSTNET&nbsp;</td><td>40%</td></tr> +<tr><td>PLANET, POSTNET&nbsp;</td><td><i>25% (Tracker and Ascender only)</i></td></tr> <tr><td>Royal Mail, Dutch Post&nbsp;</td><td>25.6%</td></tr> <tr><td>USPS Intelligent Mail&nbsp;</td><td>33.1%</td></tr> <tr><td>Default&nbsp;</td><td>25%</td></tr> diff --git a/frontend_qt/grpDotCode.ui b/frontend_qt/grpDotCode.ui index 6d54a912..8c9fcb3f 100644 --- a/frontend_qt/grpDotCode.ui +++ b/frontend_qt/grpDotCode.ui @@ -1050,9 +1050,6 @@ as 0 to 3 with the corners lit - - 8 - Manually specify which mask to use The prime masks 0' to 3' are the same diff --git a/frontend_qt/grpGrid.ui b/frontend_qt/grpGrid.ui index d60063e4..fd572488 100644 --- a/frontend_qt/grpGrid.ui +++ b/frontend_qt/grpGrid.ui @@ -37,6 +37,9 @@ + + 14 + Set size (version) of symbol @@ -197,7 +200,8 @@ error correction codewords false - Use Hanzi multibyte encoding for binary and Latin data + Use Hanzi multibyte encoding for binary +and Latin data diff --git a/frontend_qt/grpHX.ui b/frontend_qt/grpHX.ui index 2675c24e..c81886a5 100644 --- a/frontend_qt/grpHX.ui +++ b/frontend_qt/grpHX.ui @@ -27,6 +27,9 @@ Si&ze: + + Set size (version) of symbol + cmbHXSize @@ -37,6 +40,9 @@ 21 + + Set size (version) of symbol + Automatic @@ -469,6 +475,10 @@ E&rror Correction: + + Set percentage of capacity to use for +error correction codewords + cmbHXECC @@ -476,6 +486,10 @@ + + Set percentage of capacity to use for +error correction codewords + Automatic @@ -508,6 +522,9 @@ &Mask: + + Manually specify which mask to use + cmbHXMask @@ -515,8 +532,8 @@ - - 4 + + Manually specify which mask to use @@ -556,7 +573,8 @@ false - Use Hanzi multibyte encoding for binary and Latin data + Use Hanzi multibyte encoding for binary +and Latin data diff --git a/frontend_qt/grpMQR.ui b/frontend_qt/grpMQR.ui index de624693..c4082f00 100644 --- a/frontend_qt/grpMQR.ui +++ b/frontend_qt/grpMQR.ui @@ -26,6 +26,9 @@ Si&ze: + + Set size (version) of symbol + cmbMQRSize @@ -33,6 +36,9 @@ + + Set size (version) of symbol + Automatic @@ -65,6 +71,10 @@ E&rror Correction: + + Set percentage of capacity to use for +error correction codewords + cmbMQRECC @@ -72,6 +82,10 @@ + + Set percentage of capacity to use for +error correction codewords + Automatic @@ -99,6 +113,9 @@ &Mask: + + Manually specify which mask to use + cmbMQRMask @@ -106,8 +123,8 @@ - - 4 + + Manually specify which mask to use @@ -147,7 +164,8 @@ false - Use Kanji multibyte encoding for binary and Latin data + Use Kanji multibyte encoding for binary +and Latin data diff --git a/frontend_qt/grpMSICheck.ui b/frontend_qt/grpMSICheck.ui index 0e9571ab..45b13874 100644 --- a/frontend_qt/grpMSICheck.ui +++ b/frontend_qt/grpMSICheck.ui @@ -91,7 +91,8 @@ Mod-11 (NCR) uses NCR weightings Do not show check digit(s) in &Text - Add check digit(s) but do not display in Human Readable Text + Add check digit(s) but do not display +in Human Readable Text false diff --git a/frontend_qt/grpMicroPDF.ui b/frontend_qt/grpMicroPDF.ui index 32edf2c1..d213081b 100644 --- a/frontend_qt/grpMicroPDF.ui +++ b/frontend_qt/grpMicroPDF.ui @@ -149,7 +149,7 @@ containing a total of this number of symbols Value ranges from 1 (Disabled) to 99999 - 1 (Disabled) + 1 (Disabled) 1 diff --git a/frontend_qt/grpPDF417.ui b/frontend_qt/grpPDF417.ui index ae8c270e..fe4e326b 100644 --- a/frontend_qt/grpPDF417.ui +++ b/frontend_qt/grpPDF417.ui @@ -39,6 +39,9 @@ + + 21 + Set number of data characters in a row @@ -362,7 +365,7 @@ containing a total of this number of symbols Value ranges from 1 (Disabled) to 99999 - 1 (Disabled) + 1 (Disabled) 1 diff --git a/frontend_qt/grpQR.ui b/frontend_qt/grpQR.ui index 3f3bbc0c..b4b7eb74 100644 --- a/frontend_qt/grpQR.ui +++ b/frontend_qt/grpQR.ui @@ -312,9 +312,6 @@ error correction codewords - - 8 - Manually specify which mask to use @@ -428,7 +425,8 @@ the data with a slash "/" false - Use Kanji multibyte encoding for binary and Latin data + Use Kanji multibyte encoding for binary +and Latin data diff --git a/frontend_qt/grpRMQR.ui b/frontend_qt/grpRMQR.ui index 72c2d009..2af8a182 100644 --- a/frontend_qt/grpRMQR.ui +++ b/frontend_qt/grpRMQR.ui @@ -327,7 +327,8 @@ formatted with Application Identifiers (AIs) false - Use Kanji multibyte encoding for binary and Latin data + Use Kanji multibyte encoding for binary +and Latin data diff --git a/frontend_qt/grpUPCA.ui b/frontend_qt/grpUPCA.ui index 7271609f..3733c7d5 100644 --- a/frontend_qt/grpUPCA.ui +++ b/frontend_qt/grpUPCA.ui @@ -73,8 +73,7 @@ main symbol and add-on (if any) Height in X-dimensions that the guard bars -descend below the main bars -Default 5 +descend below the main bars (default 5X) (ignored if disabled) @@ -89,38 +88,70 @@ Default 5 - - + + + + Height in X-dimensions that the guard bars -descend below the main bars -Default 5 +descend below the main bars (default 5X) (ignored if disabled) - - - - - - X - - - 3 - - - 0.000000000000000 - - - 20.000000000000000 - - - 0.100000000000000 - - - 5.000000000000000 - - - true - - + + + + + + X + + + 3 + + + 0.000000000000000 + + + 20.000000000000000 + + + 0.100000000000000 + + + 5.000000000000000 + + + true + + + + 2 + 0 + + + + + + + + Reset guard bars descent height +to default 5X + + + &Reset + + + + 1 + 0 + + + + + 40 + 20 + + + + + diff --git a/frontend_qt/grpUPCEAN.ui b/frontend_qt/grpUPCEAN.ui index 150f87d7..8ec339bd 100644 --- a/frontend_qt/grpUPCEAN.ui +++ b/frontend_qt/grpUPCEAN.ui @@ -83,8 +83,7 @@ main symbol and add-on (if any) Height in X-dimensions that the guard bars -descend below the main bars -Default 5 +descend below the main bars (default 5X) (ignored if disabled) @@ -99,38 +98,70 @@ Default 5 - - - Height in X-dimensions that the guard bars -descend below the main bars -Default 5 + + + + + Height in X-dimensions that the guard bars +descend below the main bars (default 5X) (ignored if disabled) - - - - - - X - - - 3 - - - 0.000000000000000 - - - 20.000000000000000 - - - 0.100000000000000 - - - 5.000000000000000 - - - true - - + + + + + + X + + + 3 + + + 0.000000000000000 + + + 20.000000000000000 + + + 0.100000000000000 + + + 5.000000000000000 + + + true + + + + 2 + 0 + + + + + + + + Reset guard bars descent height +to default 5X + + + &Reset + + + + 1 + 0 + + + + + 40 + 20 + + + + + diff --git a/frontend_qt/grpVIN.ui b/frontend_qt/grpVIN.ui index 25b8a412..3148270d 100644 --- a/frontend_qt/grpVIN.ui +++ b/frontend_qt/grpVIN.ui @@ -27,6 +27,10 @@ &Import Character Prefix + + Preface data with import character 'I' +(not shown in Human Readable Text) + false diff --git a/frontend_qt/main.cpp b/frontend_qt/main.cpp index ed34d1c4..33df3a2b 100644 --- a/frontend_qt/main.cpp +++ b/frontend_qt/main.cpp @@ -30,6 +30,8 @@ int main(int argc, char *argv[]) QApplication app(argc, argv); MainWindow w; + // Seem to need to do this before showing the window + w.setWindowTitle(w.windowTitle() + ' ' + MainWindow::get_zint_version()); w.show(); return app.exec(); } diff --git a/frontend_qt/mainWindow.ui b/frontend_qt/mainWindow.ui index cdc1a90f..09dbccb8 100644 --- a/frontend_qt/mainWindow.ui +++ b/frontend_qt/mainWindow.ui @@ -41,9 +41,49 @@ - + - + + + + 0 + 10 + + + + Qt::CustomContextMenu + + + + + + + QFrame::StyledPanel + + + QFrame::Plain + + + Qt::Horizontal + + + false + + + + Qt::CustomContextMenu + + + true + + + + + + false + + + @@ -659,18 +699,37 @@ as delimiters for GS1 Application Identifiers - - - Use default height + + + + + Use default height (ignored if disabled) - - - Auto&matic Height - - - true - - + + + Auto&matic Height + + + true + + + + + + + Warn if height not compliant with specification +and use standard height (if any) for default +(ignored if disabled) + + + Com&pliant Height + + + false + + + + @@ -701,6 +760,9 @@ as delimiters for GS1 Application Identifiers Overall symbol height in X-dimensions (ignored if disabled) + + true + @@ -722,9 +784,6 @@ as delimiters for GS1 Application Identifiers 50.000000000000000 - - true - @@ -1156,19 +1215,19 @@ in X-dimensions - + - About Zint + Show menu - Abo&ut + Men&u - - - Qt::Horizontal + + + false @@ -1176,7 +1235,7 @@ in X-dimensions 20 - + @@ -1184,7 +1243,7 @@ in X-dimensions Copy to clipboard as BMP - Copy &BMP + &BMP @@ -1194,7 +1253,7 @@ in X-dimensions Copy to clipboard as SVG - Copy S&VG + S&VG diff --git a/frontend_qt/mainwindow.cpp b/frontend_qt/mainwindow.cpp index 06775e6e..6ebe8a5a 100644 --- a/frontend_qt/mainwindow.cpp +++ b/frontend_qt/mainwindow.cpp @@ -30,99 +30,109 @@ #include #include #include +#include +#include #include "mainwindow.h" #include "datawindow.h" #include "sequencewindow.h" #include +// Shorthand +#define QSL QStringLiteral + +static const int statusBarTimeout = 0; // Don't timeout + +static const QKeySequence quitKeySeq(Qt::CTRL | Qt::Key_Q); // Use on Windows also (i.e. not using QKeySequence::Quit) + struct bstyle_item { - const char *text; + const QString text; int symbology; }; static const struct bstyle_item bstyle_items[] = { - { "Australia Post Redirect Code", BARCODE_AUSREDIRECT }, - { "Australia Post Reply-Paid", BARCODE_AUSREPLY }, - { "Australia Post Routing Code", BARCODE_AUSROUTE }, - { "Australia Post Standard Customer", BARCODE_AUSPOST }, - { "Aztec Code (ISO 24778) (and HIBC)", BARCODE_AZTEC }, - { "Aztec Runes", BARCODE_AZRUNE }, - { "Channel Code", BARCODE_CHANNEL }, - { "Codabar", BARCODE_CODABAR }, - { "Codablock-F (and HIBC)", BARCODE_CODABLOCKF }, - { "Code 11", BARCODE_CODE11 }, - { "Code 128 (ISO 15417) (and GS1-128 and HIBC)", BARCODE_CODE128 }, - { "Code 16k (ISO 12323)", BARCODE_CODE16K }, - { "Code 2 of 5 Data Logic", BARCODE_C25LOGIC }, - { "Code 2 of 5 IATA", BARCODE_C25IATA }, - { "Code 2 of 5 Industrial", BARCODE_C25IND }, - { "Code 2 of 5 Interleaved (ISO 16390)", BARCODE_C25INTER }, - { "Code 2 of 5 Standard (Matrix)", BARCODE_C25STANDARD }, - { "Code 32 (Italian Pharmacode)", BARCODE_CODE32 }, - { "Code 39 (ISO 16388) (and HIBC)", BARCODE_CODE39 }, - { "Code 39 Extended", BARCODE_EXCODE39 }, - { "Code 49", BARCODE_CODE49 }, - { "Code 93", BARCODE_CODE93 }, - { "Code One", BARCODE_CODEONE }, - { "DAFT Code", BARCODE_DAFT }, - { "Data Matrix (ISO 16022) (and HIBC)", BARCODE_DATAMATRIX }, - { "Deutsche Post Identcode", BARCODE_DPIDENT }, - { "Deutsche Post Leitcode", BARCODE_DPLEIT }, - { "DotCode", BARCODE_DOTCODE }, - { "DPD Code", BARCODE_DPD }, - { "Dutch Post KIX", BARCODE_KIX }, - { "EAN-14", BARCODE_EAN14 }, - { "European Article Number (EAN)", BARCODE_EANX }, - { "Facing Identification Mark (FIM)", BARCODE_FIM }, - { "Flattermarken", BARCODE_FLAT }, - { "Grid Matrix", BARCODE_GRIDMATRIX }, - { "GS1 DataBar Expanded", BARCODE_DBAR_EXP }, - { "GS1 DataBar Expanded Stacked", BARCODE_DBAR_EXPSTK }, - { "GS1 DataBar Limited", BARCODE_DBAR_LTD }, - { "GS1 DataBar Omnidirectional (and Truncated)", BARCODE_DBAR_OMN }, - { "GS1 DataBar Stacked", BARCODE_DBAR_STK }, - { "GS1 DataBar Stacked Omnidirectional", BARCODE_DBAR_OMNSTK }, - { "Han Xin (Chinese Sensible) Code", BARCODE_HANXIN }, - { "International Standard Book Number (ISBN)", BARCODE_ISBNX }, - { "ITF-14", BARCODE_ITF14 }, - { "Japanese Postal Barcode", BARCODE_JAPANPOST }, - { "Korean Postal Barcode", BARCODE_KOREAPOST }, - { "LOGMARS", BARCODE_LOGMARS }, - { "MaxiCode (ISO 16023)", BARCODE_MAXICODE }, - { "MicroPDF417 (ISO 24728) (and HIBC)", BARCODE_MICROPDF417 }, - { "Micro QR Code", BARCODE_MICROQR }, - { "MSI Plessey", BARCODE_MSI_PLESSEY }, - { "NVE-18 (SSCC-18)", BARCODE_NVE18 }, - { "PDF417 (ISO 15438) (and Compact and HIBC)", BARCODE_PDF417 }, - { "Pharmacode", BARCODE_PHARMA }, - { "Pharmacode 2-track", BARCODE_PHARMA_TWO }, - { "Pharma Zentralnummer (PZN)", BARCODE_PZN }, - { "PLANET", BARCODE_PLANET }, - { "POSTNET", BARCODE_POSTNET }, - { "QR Code (ISO 18004) (and HIBC)", BARCODE_QRCODE }, - { "Rectangular Micro QR (rMQR)", BARCODE_RMQR }, - { "Royal Mail 4-state Barcode", BARCODE_RM4SCC }, - { "Royal Mail 4-state Mailmark", BARCODE_MAILMARK }, - { "Telepen", BARCODE_TELEPEN }, - { "Telepen Numeric", BARCODE_TELEPEN_NUM }, - { "UK Plessey", BARCODE_PLESSEY }, - { "Ultracode", BARCODE_ULTRA }, - { "Universal Product Code (UPC-A)", BARCODE_UPCA }, - { "Universal Product Code (UPC-E)", BARCODE_UPCE }, - { "UPNQR", BARCODE_UPNQR }, - { "USPS Intelligent Mail (OneCode)", BARCODE_USPS_IMAIL }, - { "VIN (Vehicle Identification Number)", BARCODE_VIN }, + { QSL("Australia Post Redirect Code"), BARCODE_AUSREDIRECT }, + { QSL("Australia Post Reply-Paid"), BARCODE_AUSREPLY }, + { QSL("Australia Post Routing Code"), BARCODE_AUSROUTE }, + { QSL("Australia Post Standard Customer"), BARCODE_AUSPOST }, + { QSL("Aztec Code (ISO 24778) (and HIBC)"), BARCODE_AZTEC }, + { QSL("Aztec Runes"), BARCODE_AZRUNE }, + { QSL("Channel Code"), BARCODE_CHANNEL }, + { QSL("Codabar"), BARCODE_CODABAR }, + { QSL("Codablock-F (and HIBC)"), BARCODE_CODABLOCKF }, + { QSL("Code 11"), BARCODE_CODE11 }, + { QSL("Code 128 (ISO 15417) (and GS1-128 and HIBC)"), BARCODE_CODE128 }, + { QSL("Code 16k (EN 12323)"), BARCODE_CODE16K }, + { QSL("Code 2 of 5 Data Logic"), BARCODE_C25LOGIC }, + { QSL("Code 2 of 5 IATA"), BARCODE_C25IATA }, + { QSL("Code 2 of 5 Industrial"), BARCODE_C25IND }, + { QSL("Code 2 of 5 Interleaved (ISO 16390)"), BARCODE_C25INTER }, + { QSL("Code 2 of 5 Standard (Matrix)"), BARCODE_C25STANDARD }, + { QSL("Code 32 (Italian Pharmacode)"), BARCODE_CODE32 }, + { QSL("Code 39 (ISO 16388) (and HIBC)"), BARCODE_CODE39 }, + { QSL("Code 39 Extended"), BARCODE_EXCODE39 }, + { QSL("Code 49"), BARCODE_CODE49 }, + { QSL("Code 93"), BARCODE_CODE93 }, + { QSL("Code One"), BARCODE_CODEONE }, + { QSL("DAFT Code"), BARCODE_DAFT }, + { QSL("Data Matrix (ISO 16022) (and HIBC)"), BARCODE_DATAMATRIX }, + { QSL("Deutsche Post Identcode"), BARCODE_DPIDENT }, + { QSL("Deutsche Post Leitcode"), BARCODE_DPLEIT }, + { QSL("DotCode"), BARCODE_DOTCODE }, + { QSL("DPD Code"), BARCODE_DPD }, + { QSL("Dutch Post KIX"), BARCODE_KIX }, + { QSL("EAN-14"), BARCODE_EAN14 }, + { QSL("European Article Number (EAN)"), BARCODE_EANX }, + { QSL("Facing Identification Mark (FIM)"), BARCODE_FIM }, + { QSL("Flattermarken"), BARCODE_FLAT }, + { QSL("Grid Matrix"), BARCODE_GRIDMATRIX }, + { QSL("GS1 DataBar Expanded"), BARCODE_DBAR_EXP }, + { QSL("GS1 DataBar Expanded Stacked"), BARCODE_DBAR_EXPSTK }, + { QSL("GS1 DataBar Limited"), BARCODE_DBAR_LTD }, + { QSL("GS1 DataBar Omnidirectional (and Truncated)"), BARCODE_DBAR_OMN }, + { QSL("GS1 DataBar Stacked"), BARCODE_DBAR_STK }, + { QSL("GS1 DataBar Stacked Omnidirectional"), BARCODE_DBAR_OMNSTK }, + { QSL("Han Xin (Chinese Sensible) Code"), BARCODE_HANXIN }, + { QSL("International Standard Book Number (ISBN)"), BARCODE_ISBNX }, + { QSL("ITF-14"), BARCODE_ITF14 }, + { QSL("Japanese Postal Barcode"), BARCODE_JAPANPOST }, + { QSL("Korean Postal Barcode"), BARCODE_KOREAPOST }, + { QSL("LOGMARS"), BARCODE_LOGMARS }, + { QSL("MaxiCode (ISO 16023)"), BARCODE_MAXICODE }, + { QSL("MicroPDF417 (ISO 24728) (and HIBC)"), BARCODE_MICROPDF417 }, + { QSL("Micro QR Code"), BARCODE_MICROQR }, + { QSL("MSI Plessey"), BARCODE_MSI_PLESSEY }, + { QSL("NVE-18 (SSCC-18)"), BARCODE_NVE18 }, + { QSL("PDF417 (ISO 15438) (and Compact and HIBC)"), BARCODE_PDF417 }, + { QSL("Pharmacode"), BARCODE_PHARMA }, + { QSL("Pharmacode 2-track"), BARCODE_PHARMA_TWO }, + { QSL("Pharma Zentralnummer (PZN)"), BARCODE_PZN }, + { QSL("PLANET"), BARCODE_PLANET }, + { QSL("POSTNET"), BARCODE_POSTNET }, + { QSL("QR Code (ISO 18004) (and HIBC)"), BARCODE_QRCODE }, + { QSL("Rectangular Micro QR (rMQR)"), BARCODE_RMQR }, + { QSL("Royal Mail 4-state Barcode"), BARCODE_RM4SCC }, + { QSL("Royal Mail 4-state Mailmark"), BARCODE_MAILMARK }, + { QSL("Telepen"), BARCODE_TELEPEN }, + { QSL("Telepen Numeric"), BARCODE_TELEPEN_NUM }, + { QSL("UK Plessey"), BARCODE_PLESSEY }, + { QSL("Ultracode"), BARCODE_ULTRA }, + { QSL("Universal Product Code (UPC-A)"), BARCODE_UPCA }, + { QSL("Universal Product Code (UPC-E)"), BARCODE_UPCE }, + { QSL("UPNQR"), BARCODE_UPNQR }, + { QSL("USPS Intelligent Mail (OneCode)"), BARCODE_USPS_IMAIL }, + { QSL("VIN (Vehicle Identification Number)"), BARCODE_VIN }, }; MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags fl) - : QWidget(parent, fl), m_optionWidget(nullptr), m_symbology(0) + : QWidget(parent, fl), m_optionWidget(nullptr), m_symbology(0), m_saveAsShortcut(nullptr), m_menu(nullptr) { - m_bc.bc.setDebug(QCoreApplication::arguments().contains("--verbose")); // Undocumented command line debug flag + // Undocumented command line debug flag + m_bc.bc.setDebug(QCoreApplication::arguments().contains(QSL("--verbose"))); - QCoreApplication::setOrganizationName("zint"); - QCoreApplication::setOrganizationDomain("zint.org.uk"); - QCoreApplication::setApplicationName("Barcode Studio"); + QCoreApplication::setOrganizationName(QSL("zint")); + QCoreApplication::setOrganizationDomain(QSL("zint.org.uk")); + QCoreApplication::setApplicationName(QSL("Barcode Studio")); QSettings settings; #if QT_VERSION < 0x60000 @@ -132,21 +142,20 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags fl) scene = new QGraphicsScene(this); setupUi(this); - view->setMinimumHeight(20); view->setScene(scene); - restoreGeometry(settings.value("studio/window_geometry").toByteArray()); + restoreGeometry(settings.value(QSL("studio/window_geometry")).toByteArray()); - m_fgcolor.setRgb(settings.value("studio/ink/red", 0).toInt(), - settings.value("studio/ink/green", 0).toInt(), - settings.value("studio/ink/blue", 0).toInt(), - settings.value("studio/ink/alpha", 0xff).toInt()); - m_bgcolor.setRgb(settings.value("studio/paper/red", 0xff).toInt(), - settings.value("studio/paper/green", 0xff).toInt(), - settings.value("studio/paper/blue", 0xff).toInt(), - settings.value("studio/paper/alpha", 0xff).toInt()); + m_fgcolor.setRgb(settings.value(QSL("studio/ink/red"), 0).toInt(), + settings.value(QSL("studio/ink/green"), 0).toInt(), + settings.value(QSL("studio/ink/blue"), 0).toInt(), + settings.value(QSL("studio/ink/alpha"), 0xff).toInt()); + m_bgcolor.setRgb(settings.value(QSL("studio/paper/red"), 0xff).toInt(), + settings.value(QSL("studio/paper/green"), 0xff).toInt(), + settings.value(QSL("studio/paper/blue"), 0xff).toInt(), + settings.value(QSL("studio/paper/alpha"), 0xff).toInt()); - int cnt = (int) (sizeof(bstyle_items) / sizeof(bstyle_items[0])); + const int cnt = (int) (sizeof(bstyle_items) / sizeof(bstyle_items[0])); for (int i = 0; i < cnt; i++) { bstyle->addItem(bstyle_items[i].text); } @@ -158,39 +167,39 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags fl) filter_bstyle->hide(); #endif - bstyle->setCurrentIndex(settings.value("studio/symbology", 10).toInt()); + bstyle->setCurrentIndex(settings.value(QSL("studio/symbology"), 10).toInt()); - txtData->setText(settings.value("studio/data", tr("Your Data Here!")).toString()); - txtComposite->setText(settings.value("studio/composite_text", tr("Your Data Here!")).toString()); - chkComposite->setChecked(settings.value("studio/chk_composite").toInt() ? true : false); - cmbCompType->setCurrentIndex(settings.value("studio/comp_type", 0).toInt()); - cmbECI->setCurrentIndex(settings.value("studio/appearance/eci", 0).toInt()); - chkEscape->setChecked(settings.value("studio/chk_escape").toInt() ? true : false); - chkData->setChecked(settings.value("studio/chk_data").toInt() ? true : false); - chkRInit->setChecked(settings.value("studio/chk_rinit").toInt() ? true : false); - chkGS1Parens->setChecked(settings.value("studio/chk_gs1parens").toInt() ? true : false); - chkGS1NoCheck->setChecked(settings.value("studio/chk_gs1nocheck").toInt() ? true : false); - chkAutoHeight->setChecked(settings.value("studio/appearance/autoheight", 1).toInt() ? true : false); - heightb->setValue(settings.value("studio/appearance/height", 50.0f).toFloat()); - bwidth->setValue(settings.value("studio/appearance/border", 0).toInt()); - spnWhitespace->setValue(settings.value("studio/appearance/whitespace", 0).toInt()); - spnVWhitespace->setValue(settings.value("studio/appearance/vwhitespace", 0).toInt()); - spnScale->setValue(settings.value("studio/appearance/scale", 1.0).toFloat()); - 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/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/chk_dotty", 0).toInt() ? true : false); - spnDotSize->setValue(settings.value("studio/appearance/dot_size", 4.0 / 5.0).toFloat()); + txtData->setText(settings.value(QSL("studio/data"), tr("Your Data Here!")).toString()); + txtComposite->setText(settings.value(QSL("studio/composite_text"), tr("Your Data Here!")).toString()); + chkComposite->setChecked(settings.value(QSL("studio/chk_composite")).toInt() ? true : false); + cmbCompType->setCurrentIndex(settings.value(QSL("studio/comp_type"), 0).toInt()); + cmbECI->setCurrentIndex(settings.value(QSL("studio/appearance/eci"), 0).toInt()); + chkEscape->setChecked(settings.value(QSL("studio/chk_escape")).toInt() ? true : false); + chkData->setChecked(settings.value(QSL("studio/chk_data")).toInt() ? true : false); + chkRInit->setChecked(settings.value(QSL("studio/chk_rinit")).toInt() ? true : false); + chkGS1Parens->setChecked(settings.value(QSL("studio/chk_gs1parens")).toInt() ? true : false); + chkGS1NoCheck->setChecked(settings.value(QSL("studio/chk_gs1nocheck")).toInt() ? true : false); + chkAutoHeight->setChecked(settings.value(QSL("studio/appearance/autoheight"), 1).toInt() ? true : false); + chkCompliantHeight->setChecked( + settings.value(QSL("studio/appearance/compliantheight"), 1).toInt() ? true : false); + heightb->setValue(settings.value(QSL("studio/appearance/height"), 50.0f).toFloat()); + bwidth->setValue(settings.value(QSL("studio/appearance/border"), 0).toInt()); + spnWhitespace->setValue(settings.value(QSL("studio/appearance/whitespace"), 0).toInt()); + spnVWhitespace->setValue(settings.value(QSL("studio/appearance/vwhitespace"), 0).toInt()); + spnScale->setValue(settings.value(QSL("studio/appearance/scale"), 1.0).toFloat()); + btype->setCurrentIndex(settings.value(QSL("studio/appearance/border_type"), 0).toInt()); + cmbFontSetting->setCurrentIndex(settings.value(QSL("studio/appearance/font_setting"), 0).toInt()); + chkHRTShow->setChecked(settings.value(QSL("studio/appearance/chk_hrt_show"), 1).toInt() ? true : false); + chkCMYK->setChecked(settings.value(QSL("studio/appearance/chk_cmyk"), 0).toInt() ? true : false); + chkQuietZones->setChecked(settings.value(QSL("studio/appearance/chk_quiet_zones"), 0).toInt() ? true : false); + cmbRotate->setCurrentIndex(settings.value(QSL("studio/appearance/rotate"), 0).toInt()); + chkDotty->setChecked(settings.value(QSL("studio/appearance/chk_dotty"), 0).toInt() ? true : false); + spnDotSize->setValue(settings.value(QSL("studio/appearance/dot_size"), 4.0 / 5.0).toFloat()); change_options(); scene->addItem(&m_bc); - update_preview(); - connect(bstyle, SIGNAL(currentIndexChanged( int )), SLOT(change_options())); connect(bstyle, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(filter_bstyle, SIGNAL(textChanged( const QString& )), SLOT(filter_symbologies())); @@ -200,41 +209,54 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags fl) connect(cmbFontSetting, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(txtData, SIGNAL(textChanged( const QString& )), SLOT(update_preview())); connect(txtComposite, SIGNAL(textChanged()), SLOT(update_preview())); - connect(chkComposite, SIGNAL(stateChanged( int )), SLOT(composite_ui_set())); - connect(chkComposite, SIGNAL(stateChanged( int )), SLOT(update_preview())); + connect(chkComposite, SIGNAL(toggled( bool )), SLOT(composite_ui_set())); + connect(chkComposite, SIGNAL(toggled( bool )), SLOT(update_preview())); connect(cmbCompType, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); connect(cmbECI, SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(chkEscape, SIGNAL(stateChanged( int )), SLOT(update_preview())); - connect(chkData, SIGNAL(stateChanged( int )), SLOT(update_preview())); - connect(chkRInit, SIGNAL(stateChanged( int )), SLOT(update_preview())); - connect(chkGS1Parens, SIGNAL(stateChanged( int )), SLOT(update_preview())); - connect(chkGS1NoCheck, SIGNAL(stateChanged( int )), SLOT(update_preview())); + connect(chkEscape, SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(chkData, SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(chkRInit, SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(chkGS1Parens, SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(chkGS1NoCheck, SIGNAL(toggled( bool )), SLOT(update_preview())); connect(spnWhitespace, SIGNAL(valueChanged( int )), SLOT(update_preview())); connect(spnVWhitespace, SIGNAL(valueChanged( int )), SLOT(update_preview())); - connect(btnAbout, SIGNAL(clicked( bool )), SLOT(about())); + connect(btnMenu, SIGNAL(clicked( bool )), SLOT(menu())); connect(btnSave, SIGNAL(clicked( bool )), SLOT(save())); connect(spnScale, SIGNAL(valueChanged( double )), SLOT(change_print_scale())); connect(btnExit, SIGNAL(clicked( bool )), SLOT(quit_now())); - connect(btnReset, SIGNAL(clicked( bool )), SLOT(reset_view())); + connect(btnReset, SIGNAL(clicked( bool )), SLOT(reset_colours())); connect(btnMoreData, SIGNAL(clicked( bool )), SLOT(open_data_dialog())); connect(btnSequence, SIGNAL(clicked( bool )), SLOT(open_sequence_dialog())); - connect(chkAutoHeight, SIGNAL(stateChanged( int )), SLOT(autoheight_ui_set())); - connect(chkAutoHeight, SIGNAL(stateChanged( int )), SLOT(update_preview())); - 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(chkAutoHeight, SIGNAL(toggled( bool )), SLOT(autoheight_ui_set())); + connect(chkAutoHeight, SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(chkCompliantHeight, SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(chkHRTShow, SIGNAL(toggled( bool )), SLOT(HRTShow_ui_set())); + connect(chkHRTShow, SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(chkCMYK, SIGNAL(toggled( bool )), SLOT(change_cmyk())); + connect(chkQuietZones, SIGNAL(toggled( bool )), 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())); + connect(chkDotty, SIGNAL(toggled( bool )), SLOT(dotty_ui_set())); + connect(chkDotty, SIGNAL(toggled( bool )), SLOT(update_preview())); connect(spnDotSize, SIGNAL(valueChanged( double )), SLOT(update_preview())); connect(btnCopySVG, SIGNAL(clicked( bool )), SLOT(copy_to_clipboard_svg())); connect(btnCopyBMP, SIGNAL(clicked( bool )), SLOT(copy_to_clipboard_bmp())); connect(&m_bc.bc, SIGNAL(encoded()), SLOT(on_encoded())); + connect(&m_bc.bc, SIGNAL(errored()), SLOT(on_errored())); - QShortcut *ctrl_q = new QShortcut(QKeySequence(Qt::CTRL | Qt::Key_Q), this); - connect(ctrl_q, SIGNAL(activated()), SLOT(quit_now())); + connect(view, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(view_context_menu(const QPoint &))); + connect(errtxtBar, SIGNAL(customContextMenuRequested(const QPoint &)), this, + SLOT(errtxtBar_context_menu(const QPoint &))); + + m_saveAsShortcut = new QShortcut(QKeySequence::Save, this); // Will enable/disable this on error + connect(m_saveAsShortcut, SIGNAL(activated()), SLOT(save())); + QShortcut *helpShortcut = new QShortcut(QKeySequence::HelpContents, this); + connect(helpShortcut, SIGNAL(activated()), SLOT(help())); + QShortcut *quitShortcut = new QShortcut(quitKeySeq, this); + connect(quitShortcut, SIGNAL(activated()), SLOT(quit_now())); + + createActions(); + createMenu(); } MainWindow::~MainWindow() @@ -244,134 +266,47 @@ MainWindow::~MainWindow() settings.setIniCodec("UTF-8"); #endif - settings.setValue("studio/window_geometry", saveGeometry()); - settings.setValue("studio/tab_index", tabMain->currentIndex()); - settings.setValue("studio/symbology", bstyle->currentIndex()); - settings.setValue("studio/ink/red", m_fgcolor.red()); - settings.setValue("studio/ink/green", m_fgcolor.green()); - settings.setValue("studio/ink/blue", m_fgcolor.blue()); - settings.setValue("studio/ink/alpha", m_fgcolor.alpha()); - settings.setValue("studio/paper/red", m_bgcolor.red()); - settings.setValue("studio/paper/green", m_bgcolor.green()); - settings.setValue("studio/paper/blue", m_bgcolor.blue()); - settings.setValue("studio/paper/alpha", m_bgcolor.alpha()); - settings.setValue("studio/data", txtData->text()); - settings.setValue("studio/composite_text", txtComposite->toPlainText()); - settings.setValue("studio/chk_composite", chkComposite->isChecked() ? 1 : 0); - settings.setValue("studio/comp_type", cmbCompType->currentIndex()); - settings.setValue("studio/eci", cmbECI->currentIndex()); - settings.setValue("studio/chk_escape", chkEscape->isChecked() ? 1 : 0); - settings.setValue("studio/chk_data", chkData->isChecked() ? 1 : 0); - settings.setValue("studio/chk_rinit", chkRInit->isChecked() ? 1 : 0); - settings.setValue("studio/chk_gs1parens", chkGS1Parens->isChecked() ? 1 : 0); - settings.setValue("studio/chk_gs1nocheck", chkGS1NoCheck->isChecked() ? 1 : 0); - settings.setValue("studio/appearance/autoheight", chkAutoHeight->isChecked() ? 1 : 0); - settings.setValue("studio/appearance/height", heightb->value()); - settings.setValue("studio/appearance/border", bwidth->value()); - settings.setValue("studio/appearance/whitespace", spnWhitespace->value()); - settings.setValue("studio/appearance/vwhitespace", spnVWhitespace->value()); - settings.setValue("studio/appearance/scale", spnScale->value()); - settings.setValue("studio/appearance/border_type", btype->currentIndex()); - 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()); + settings.setValue(QSL("studio/window_geometry"), saveGeometry()); + settings.setValue(QSL("studio/tab_index"), tabMain->currentIndex()); + settings.setValue(QSL("studio/symbology"), bstyle->currentIndex()); + settings.setValue(QSL("studio/ink/red"), m_fgcolor.red()); + settings.setValue(QSL("studio/ink/green"), m_fgcolor.green()); + settings.setValue(QSL("studio/ink/blue"), m_fgcolor.blue()); + settings.setValue(QSL("studio/ink/alpha"), m_fgcolor.alpha()); + settings.setValue(QSL("studio/paper/red"), m_bgcolor.red()); + settings.setValue(QSL("studio/paper/green"), m_bgcolor.green()); + settings.setValue(QSL("studio/paper/blue"), m_bgcolor.blue()); + settings.setValue(QSL("studio/paper/alpha"), m_bgcolor.alpha()); + settings.setValue(QSL("studio/data"), txtData->text()); + settings.setValue(QSL("studio/composite_text"), txtComposite->toPlainText()); + settings.setValue(QSL("studio/chk_composite"), chkComposite->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/comp_type"), cmbCompType->currentIndex()); + settings.setValue(QSL("studio/eci"), cmbECI->currentIndex()); + settings.setValue(QSL("studio/chk_escape"), chkEscape->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/chk_data"), chkData->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/chk_rinit"), chkRInit->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/chk_gs1parens"), chkGS1Parens->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/chk_gs1nocheck"), chkGS1NoCheck->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/appearance/autoheight"), chkAutoHeight->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/appearance/compliantheight"), chkCompliantHeight->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/appearance/height"), heightb->value()); + settings.setValue(QSL("studio/appearance/border"), bwidth->value()); + settings.setValue(QSL("studio/appearance/whitespace"), spnWhitespace->value()); + settings.setValue(QSL("studio/appearance/vwhitespace"), spnVWhitespace->value()); + settings.setValue(QSL("studio/appearance/scale"), spnScale->value()); + settings.setValue(QSL("studio/appearance/border_type"), btype->currentIndex()); + settings.setValue(QSL("studio/appearance/font_setting"), cmbFontSetting->currentIndex()); + settings.setValue(QSL("studio/appearance/chk_hrt_show"), chkHRTShow->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/appearance/chk_cmyk"), chkCMYK->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/appearance/chk_quiet_zones"), chkQuietZones->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/appearance/rotate"), cmbRotate->currentIndex()); + settings.setValue(QSL("studio/appearance/chk_dotty"), chkDotty->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/appearance/dot_size"), spnDotSize->value()); save_sub_settings(settings, m_bc.bc.symbol()); } -void MainWindow::resizeEvent(QResizeEvent* event) -{ - QWidget::resizeEvent(event); - update_preview(); -} - -void MainWindow::reset_view() -{ - m_fgcolor.setRgb(0, 0, 0, 0xff); - m_bgcolor.setRgb(0xff, 0xff, 0xff, 0xff); - update_preview(); -} - -bool MainWindow::save() -{ - QSettings settings; -#if QT_VERSION < 0x60000 - settings.setIniCodec("UTF-8"); -#endif - QFileDialog save_dialog; - QString filename; - QString suffix; - - save_dialog.setAcceptMode(QFileDialog::AcceptSave); - save_dialog.setWindowTitle(tr("Save Barcode Image")); - save_dialog.setDirectory(settings.value("studio/default_dir", - QDir::toNativeSeparators(QDir::homePath())).toString()); - -#ifdef NO_PNG - suffix = settings.value("studio/default_suffix", "gif").toString(); - save_dialog.setNameFilter(tr( - "Encapsulated PostScript (*.eps);;Graphics Interchange Format (*.gif)" - ";;Scalable Vector Graphic (*.svg);;Windows Bitmap (*.bmp);;ZSoft PC Painter Image (*.pcx)" - ";;Enhanced Metafile (*.emf);;Tagged Image File Format (*.tif)")); -#else - suffix = settings.value("studio/default_suffix", "png").toString(); - save_dialog.setNameFilter(tr( - "Portable Network Graphic (*.png);;Encapsulated PostScript (*.eps);;Graphics Interchange Format (*.gif)" - ";;Scalable Vector Graphic (*.svg);;Windows Bitmap (*.bmp);;ZSoft PC Painter Image (*.pcx)" - ";;Enhanced Metafile (*.emf);;Tagged Image File Format (*.tif)")); -#endif - - if (QString::compare(suffix, "png", Qt::CaseInsensitive) == 0) - save_dialog.selectNameFilter(tr("Portable Network Graphic (*.png)")); - if (QString::compare(suffix, "eps", Qt::CaseInsensitive) == 0) - save_dialog.selectNameFilter(tr("Encapsulated PostScript (*.eps)")); - if (QString::compare(suffix, "gif", Qt::CaseInsensitive) == 0) - save_dialog.selectNameFilter(tr("Graphics Interchange Format (*.gif)")); - if (QString::compare(suffix, "svg", Qt::CaseInsensitive) == 0) - save_dialog.selectNameFilter(tr("Scalable Vector Graphic (*.svg)")); - if (QString::compare(suffix, "bmp", Qt::CaseInsensitive) == 0) - save_dialog.selectNameFilter(tr("Windows Bitmap (*.bmp)")); - if (QString::compare(suffix, "pcx", Qt::CaseInsensitive) == 0) - save_dialog.selectNameFilter(tr("ZSoft PC Painter Image (*.pcx)")); - if (QString::compare(suffix, "emf", Qt::CaseInsensitive) == 0) - save_dialog.selectNameFilter(tr("Enhanced Metafile (*.emf)")); - if (QString::compare(suffix, "tif", Qt::CaseInsensitive) == 0) - save_dialog.selectNameFilter(tr("Tagged Image File Format (*.tif)")); - - if (save_dialog.exec()) { - filename = save_dialog.selectedFiles().at(0); - if ((filename.lastIndexOf(".") == -1) || (filename.lastIndexOf(".") < (filename.length() - 5))) { - suffix = save_dialog.selectedNameFilter(); - suffix = suffix.mid((suffix.lastIndexOf(".") + 1), 3); - filename.append("."); - filename.append(suffix); - } else { - suffix = filename.right(filename.length() - (filename.lastIndexOf('.') + 1)); - } - } else { - return false; - } - - if (m_bc.bc.save_to_file(filename) == false) { - if (m_bc.bc.getError() >= ZINT_ERROR) { - QMessageBox::critical(this, tr("Save Error"), m_bc.bc.error_message()); - return false; - } else { - QMessageBox::warning(this, tr("Save Warning"), m_bc.bc.error_message()); - return true; - } - } - - settings.setValue("studio/default_dir", filename.mid(0, filename.lastIndexOf(QDir::separator()))); - settings.setValue("studio/default_suffix", suffix); - return true; -} - -void MainWindow::about() +QString MainWindow::get_zint_version() { QString zint_version; @@ -385,13 +320,130 @@ void MainWindow::about() /* This is a test release */ version_release = version_release / 10; version_build = lib_version % 10; - QTextStream(&zint_version) << version_major << "." << version_minor << "." << version_release - << "." << version_build << " (dev)"; + QTextStream(&zint_version) << version_major << '.' << version_minor << '.' << version_release + << '.' << version_build << QSL(" (dev)"); } else { /* This is a stable release */ - QTextStream(&zint_version) << version_major << "." << version_minor << "." << version_release; + QTextStream(&zint_version) << version_major << '.' << version_minor << '.' << version_release; } + return zint_version; +} + +void MainWindow::resizeEvent(QResizeEvent *event) +{ + QWidget::resizeEvent(event); + update_preview(); +} + +bool MainWindow::event(QEvent *event) +{ + switch (event->type()) { + case QEvent::StatusTip: + statusBar->showMessage(static_cast(event)->tip()); + break; + default: + break; + } + + return QWidget::event(event); +} + +void MainWindow::reset_colours() +{ + m_fgcolor.setRgb(0, 0, 0, 0xff); + m_bgcolor.setRgb(0xff, 0xff, 0xff, 0xff); + update_preview(); +} + +bool MainWindow::save() +{ + QSettings settings; +#if QT_VERSION < 0x60000 + settings.setIniCodec("UTF-8"); +#endif + QFileDialog save_dialog; + QString pathname; + QString suffix; + + save_dialog.setAcceptMode(QFileDialog::AcceptSave); + save_dialog.setWindowTitle(tr("Save Barcode Image")); + save_dialog.setDirectory(settings.value(QSL("studio/default_dir"), + QDir::toNativeSeparators(QDir::homePath())).toString()); + +#ifdef NO_PNG + suffix = settings.value(QSL("studio/default_suffix"), QSL("gif")).toString(); + save_dialog.setNameFilter(tr( + "Encapsulated PostScript (*.eps);;Graphics Interchange Format (*.gif)" + ";;Scalable Vector Graphic (*.svg);;Windows Bitmap (*.bmp);;ZSoft PC Painter Image (*.pcx)" + ";;Enhanced Metafile (*.emf);;Tagged Image File Format (*.tif)")); +#else + suffix = settings.value(QSL("studio/default_suffix"), QSL("png")).toString(); + save_dialog.setNameFilter(tr( + "Portable Network Graphic (*.png);;Encapsulated PostScript (*.eps);;Graphics Interchange Format (*.gif)" + ";;Scalable Vector Graphic (*.svg);;Windows Bitmap (*.bmp);;ZSoft PC Painter Image (*.pcx)" + ";;Enhanced Metafile (*.emf);;Tagged Image File Format (*.tif)")); +#endif + + if (QString::compare(suffix, QSL("png"), Qt::CaseInsensitive) == 0) + save_dialog.selectNameFilter(tr("Portable Network Graphic (*.png)")); + else if (QString::compare(suffix, QSL("eps"), Qt::CaseInsensitive) == 0) + save_dialog.selectNameFilter(tr("Encapsulated PostScript (*.eps)")); + else if (QString::compare(suffix, QSL("gif"), Qt::CaseInsensitive) == 0) + save_dialog.selectNameFilter(tr("Graphics Interchange Format (*.gif)")); + else if (QString::compare(suffix, QSL("svg"), Qt::CaseInsensitive) == 0) + save_dialog.selectNameFilter(tr("Scalable Vector Graphic (*.svg)")); + else if (QString::compare(suffix, QSL("bmp"), Qt::CaseInsensitive) == 0) + save_dialog.selectNameFilter(tr("Windows Bitmap (*.bmp)")); + else if (QString::compare(suffix, QSL("pcx"), Qt::CaseInsensitive) == 0) + save_dialog.selectNameFilter(tr("ZSoft PC Painter Image (*.pcx)")); + else if (QString::compare(suffix, QSL("emf"), Qt::CaseInsensitive) == 0) + save_dialog.selectNameFilter(tr("Enhanced Metafile (*.emf)")); + else if (QString::compare(suffix, QSL("tif"), Qt::CaseInsensitive) == 0) + save_dialog.selectNameFilter(tr("Tagged Image File Format (*.tif)")); + + if (save_dialog.exec()) { + pathname = save_dialog.selectedFiles().at(0); + if ((pathname.lastIndexOf('.') == -1) || (pathname.lastIndexOf('.') < (pathname.length() - 5))) { + suffix = save_dialog.selectedNameFilter(); + suffix = suffix.mid((suffix.lastIndexOf('.') + 1), 3); + pathname.append('.'); + pathname.append(suffix); + } else { + suffix = pathname.right(pathname.length() - (pathname.lastIndexOf('.') + 1)); + } + } else { + return false; + } + + if (m_bc.bc.save_to_file(pathname) == false) { + if (m_bc.bc.getError() >= ZINT_ERROR) { + QMessageBox::critical(this, tr("Save Error"), m_bc.bc.error_message()); + return false; + } + QMessageBox::warning(this, tr("Save Warning"), m_bc.bc.error_message()); + } + + int lastSeparator = pathname.lastIndexOf(QDir::separator()); + QString dirname = pathname.mid(0, lastSeparator); + if (dirname.isEmpty()) { + /*: %1 is path saved to */ + statusBar->showMessage(tr("Saved as \"%1\"").arg(pathname), statusBarTimeout); + } else { + QString filename = pathname.right(pathname.length() - (lastSeparator + 1)); + /*: %1 is base filename saved to, %2 is directory saved in */ + statusBar->showMessage(tr("Saved as \"%1\" in \"%2\"").arg(filename).arg(dirname), statusBarTimeout); + } + + settings.setValue(QSL("studio/default_dir"), dirname); + settings.setValue(QSL("studio/default_suffix"), suffix); + return true; +} + +void MainWindow::about() +{ + QString zint_version = get_zint_version(); + QMessageBox::about(this, tr("About Zint"), /*: %1 is Zint version, %2 is Qt version */ tr("

Zint Barcode Studio %1

" @@ -407,15 +459,21 @@ void MainWindow::about() "\"QR Code\" is a Registered Trademark of Denso Corp.
" "\"Telepen\" is a Registered Trademark of SB Electronics.

" "

Currently supported standards include:
" - "BS 797:1996, BS 798:1996, ISO/IEC 12323:2005, ISO/IEC 15417:2007,
" + "EN 797:1996, EN 798:1996, EN 12323:2005, ISO/IEC 15417:2007,
" "ISO/IEC 15438:2015, ISO/IEC 16022:2006, ISO/IEC 16023:2000,
" "ISO/IEC 16388:2007, ISO/IEC 18004:2015, ISO/IEC 24723:2010,
" "ISO/IEC 24724:2011, ISO/IEC 24728:2006, ISO/IEC 24778:2008,
" - "ISO/IEC 21471:2019, ANSI-HIBC 2.6-2016, ANSI/AIM BC6-2000,
" - "ANSI/AIM BC12-1998, AIMD014 (v 1.63), USPS-B-3200" + "ISO/IEC 16390:2007, ISO/IEC 21471:2019, ANSI-HIBC 2.6-2016,
" + "ANSI/AIM BC6-2000, ANSI/AIM BC12-1998, ANSI/AIM BC5-1995,
" + "AIM ISS-X-24, AIMD014 (v 1.63), USPS-B-3200" "

").arg(zint_version).arg(QT_VERSION_STR)); } +void MainWindow::help() +{ + QDesktopServices::openUrl(QSL("https://zint.org.uk/manual")); // TODO: manual.md +} + int MainWindow::open_data_dialog() { int retval; @@ -457,24 +515,16 @@ void MainWindow::on_bgcolor_clicked() void MainWindow::autoheight_ui_set() { - if (!chkAutoHeight->isEnabled() || chkAutoHeight->isChecked()) { - lblHeight->setEnabled(false); - heightb->setEnabled(false); - } else { - lblHeight->setEnabled(true); - heightb->setEnabled(true); - } + bool enabled = chkAutoHeight->isEnabled() && !chkAutoHeight->isChecked(); + lblHeight->setEnabled(enabled); + heightb->setEnabled(enabled); } void MainWindow::HRTShow_ui_set() { - if (chkHRTShow->isEnabled() && chkHRTShow->isChecked()) { - lblFontSetting->setEnabled(true); - cmbFontSetting->setEnabled(true); - } else { - lblFontSetting->setEnabled(false); - cmbFontSetting->setEnabled(false); - } + bool enabled = chkHRTShow->isEnabled() && chkHRTShow->isChecked(); + lblFontSetting->setEnabled(enabled); + cmbFontSetting->setEnabled(enabled); } void MainWindow::dotty_ui_set() @@ -486,13 +536,22 @@ void MainWindow::dotty_ui_set() lblDotSize->setEnabled(true); spnDotSize->setEnabled(true); } else { - if (chkDotty->isEnabled() && chkDotty->isChecked()) { - lblDotSize->setEnabled(true); - spnDotSize->setEnabled(true); - } else { - lblDotSize->setEnabled(false); - spnDotSize->setEnabled(false); - } + bool enabled = chkDotty->isEnabled() && chkDotty->isChecked(); + lblDotSize->setEnabled(enabled); + spnDotSize->setEnabled(enabled); + } +} + +void MainWindow::codeone_ui_set() +{ + int symbology = bstyle_items[bstyle->currentIndex()].symbology; + if (symbology != BARCODE_CODEONE) + return; + + QGroupBox *groupBox = m_optionWidget->findChild(QSL("groupBoxC1StructApp")); + if (groupBox) { + bool enabled = get_cmb_index(QSL("cmbC1Size")) != 9; // Not Version S + groupBox->setEnabled(enabled); } } @@ -501,58 +560,58 @@ void MainWindow::structapp_ui_set() int symbology = bstyle_items[bstyle->currentIndex()].symbology; QString name; bool enabled = false; - QWidget *widgetCount = NULL, *widgetIndex = NULL; - QLabel *lblID2 = NULL; - QWidget *widgetID = NULL, *widgetID2 = NULL; + QWidget *widgetCount = nullptr, *widgetIndex = nullptr; + QLabel *lblID2 = nullptr; + QWidget *widgetID = nullptr, *widgetID2 = nullptr; if (symbology == BARCODE_AZTEC) { - name = "Aztec"; - widgetID = m_optionWidget->findChild("txt" + name + "StructAppID"); + name = QSL("Aztec"); + widgetID = get_widget(QSL("txt") + name + QSL("StructAppID")); } else if (symbology == BARCODE_CODEONE) { - name = "C1"; - QSpinBox *spnCount = m_optionWidget->findChild("spn" + name + "StructAppCount"); + name = QSL("C1"); + QSpinBox *spnCount = m_optionWidget->findChild(QSL("spn") + name + QSL("StructAppCount")); enabled = spnCount ? spnCount->value() > 1 : false; widgetCount = spnCount; - widgetIndex = m_optionWidget->findChild("spn" + name + "StructAppIndex"); + widgetIndex = get_widget(QSL("spn") + name + QSL("StructAppIndex")); } else if (symbology == BARCODE_DATAMATRIX) { - name = "DM"; - widgetID = m_optionWidget->findChild("spn" + name + "StructAppID"); - widgetID2 = m_optionWidget->findChild("spn" + name + "StructAppID2"); + name = QSL("DM"); + widgetID = get_widget(QSL("spn") + name + QSL("StructAppID")); + widgetID2 = get_widget(QSL("spn") + name + QSL("StructAppID2")); } else if (symbology == BARCODE_DOTCODE) { - name = "Dot"; + name = QSL("Dot"); } else if (symbology == BARCODE_MAXICODE) { - name = "Maxi"; + name = QSL("Maxi"); } else if (symbology == BARCODE_PDF417 || symbology == BARCODE_MICROPDF417) { - name = symbology == BARCODE_PDF417 ? "PDF" : "MPDF"; - QSpinBox *spnCount = m_optionWidget->findChild("spn" + name + "StructAppCount"); + name = symbology == BARCODE_PDF417 ? QSL("PDF") : QSL("MPDF"); + QSpinBox *spnCount = m_optionWidget->findChild(QSL("spn") + name + QSL("StructAppCount")); enabled = spnCount ? spnCount->value() > 1 : false; widgetCount = spnCount; - widgetIndex = m_optionWidget->findChild("spn" + name + "StructAppIndex"); - widgetID = m_optionWidget->findChild("txt" + name + "StructAppID"); + widgetIndex = get_widget(QSL("spn") + name + QSL("StructAppIndex")); + widgetID = get_widget(QSL("txt") + name + QSL("StructAppID")); } else if (symbology == BARCODE_QRCODE) { - name = "QR"; - widgetID = m_optionWidget->findChild("spn" + name + "StructAppID"); + name = QSL("QR"); + widgetID = get_widget(QSL("spn") + name + QSL("StructAppID")); } else if (symbology == BARCODE_GRIDMATRIX) { - name = "Grid"; - widgetID = m_optionWidget->findChild("spn" + name + "StructAppID"); + name = QSL("Grid"); + widgetID = get_widget(QSL("spn") + name + QSL("StructAppID")); } else if (symbology == BARCODE_ULTRA) { - name = "Ultra"; - widgetID = m_optionWidget->findChild("spn" + name + "StructAppID"); + name = QSL("Ultra"); + widgetID = get_widget(QSL("spn") + name + QSL("StructAppID")); } if (!name.isEmpty()) { - QLabel *lblIndex = m_optionWidget->findChild("lbl" + name + "StructAppIndex"); + QLabel *lblIndex = m_optionWidget->findChild(QSL("lbl") + name + QSL("StructAppIndex")); if (!widgetCount) { - QComboBox *cmbCount = m_optionWidget->findChild("cmb" + name + "StructAppCount"); + QComboBox *cmbCount = m_optionWidget->findChild(QSL("cmb") + name + QSL("StructAppCount")); enabled = cmbCount ? cmbCount->currentIndex() != 0 : false; widgetCount = cmbCount; } if (!widgetIndex) { - widgetIndex = m_optionWidget->findChild("cmb" + name + "StructAppIndex"); + widgetIndex = get_widget(QSL("cmb") + name + QSL("StructAppIndex")); } if (lblIndex && widgetCount && widgetIndex) { lblIndex->setEnabled(enabled); widgetIndex->setEnabled(enabled); - QLabel *lblID = m_optionWidget->findChild("lbl" + name + "StructAppID"); + QLabel *lblID = m_optionWidget->findChild(QSL("lbl") + name + QSL("StructAppID")); if (lblID) { lblID->setEnabled(enabled); if (lblID2) { @@ -571,6 +630,10 @@ void MainWindow::structapp_ui_set() void MainWindow::on_encoded() { + this->setMinimumHeight(m_bc.bc.getError() ? 455 : 435); + enableActions(true); + errtxtBar_set(false /*isError*/); + if (!chkAutoHeight->isEnabled() || chkAutoHeight->isChecked()) { /* setValue() rounds up/down to precision (decimals 3), we want round up only */ float height = (float) (ceil(m_bc.bc.height() * 1000.0f) / 1000.0f); @@ -578,6 +641,13 @@ void MainWindow::on_encoded() } } +void MainWindow::on_errored() +{ + this->setMinimumHeight(455); + enableActions(false); + errtxtBar_set(true /*isError*/); +} + void MainWindow::filter_symbologies() { // `simplified()` trims and reduces inner whitespace to a single space - nice! @@ -594,7 +664,7 @@ void MainWindow::filter_symbologies() QStringList filter_list; if (!filter.isEmpty()) { int i, j; - for (i = 0; (j = filter.indexOf(" ", i)) != -1; i = j + 1) { + for (i = 0; (j = filter.indexOf(' ', i)) != -1; i = j + 1) { filter_list << filter.mid(i, j - i); } filter_list << filter.mid(i); @@ -613,7 +683,8 @@ void MainWindow::filter_symbologies() } } if ((hide && !hidden) || (!hide && hidden)) { - // https://stackoverflow.com/questions/25172220/how-to-hide-qcombobox-items-instead-of-clearing-them-out + // https://stackoverflow.com/questions/25172220 + // /how-to-hide-qcombobox-items-instead-of-clearing-them-out item = model->item(i); item->setFlags(hide ? item->flags() & ~Qt::ItemIsEnabled : item->flags() | Qt::ItemIsEnabled); lview->setRowHidden(i, hide); @@ -633,7 +704,7 @@ void MainWindow::filter_symbologies() void MainWindow::change_print_scale() { /* This value is only used when printing (saving) to file */ - m_bc.bc.setScale((float)spnScale->value()); + m_bc.bc.setScale((float) spnScale->value()); } void MainWindow::change_cmyk() @@ -647,42 +718,113 @@ void MainWindow::quit_now() close(); } -void MainWindow::copy_to_clipboard_svg() +void MainWindow::menu() { - QClipboard *clipboard = QGuiApplication::clipboard(); - QString filename = ".zint.svg"; - double scale = spnScale->value(); - - spnScale->setValue(5); - - if (!m_bc.bc.save_to_file(filename)) { - spnScale->setValue(scale); - return; - } - - QMimeData *mdata = new QMimeData; - mdata->setImageData(QImage(filename)); - clipboard->setMimeData(mdata, QClipboard::Clipboard); - - QFile::remove(filename); - - spnScale->setValue(scale); + QSize size = m_menu->sizeHint(); + m_menu->exec(btnMenu->mapToGlobal(QPoint(0, -size.height()))); } void MainWindow::copy_to_clipboard_bmp() { - QClipboard *clipboard = QGuiApplication::clipboard(); - QString filename = ".zint.bmp"; + copy_to_clipboard(QSL(".zint.bmp"), QSL("BMP")); +} - if (!m_bc.bc.save_to_file(filename)) { - return; +void MainWindow::copy_to_clipboard_emf() +{ + copy_to_clipboard(QSL(".zint.emf"), QSL("EMF"), "image/x-emf"); +} + +void MainWindow::copy_to_clipboard_eps() +{ + // TODO: try other possibles application/eps, application/x-eps, image/eps, image/x-eps + copy_to_clipboard(QSL(".zint.eps"), QSL("EPS"), "application/postscript"); +} + +void MainWindow::copy_to_clipboard_gif() +{ + copy_to_clipboard(QSL(".zint.gif"), QSL("GIF")); +} + +void MainWindow::copy_to_clipboard_pcx() +{ + // TODO: try other mime types in various apps + copy_to_clipboard(QSL(".zint.pcx"), QSL("PCX"), "image/x-pcx"); +} + +#ifndef NO_PNG +void MainWindow::copy_to_clipboard_png() +{ + copy_to_clipboard(QSL(".zint.png"), QSL("PNG")); +} +#endif + +void MainWindow::copy_to_clipboard_svg() +{ + copy_to_clipboard(QSL(".zint.svg"), QSL("SVG")); +} + +void MainWindow::copy_to_clipboard_tif() +{ + copy_to_clipboard(QSL(".zint.tif"), QSL("TIF")); +} + +void MainWindow::copy_to_clipboard_errtxt() +{ + if (m_bc.bc.hasErrors()) { + QClipboard *clipboard = QGuiApplication::clipboard(); + QMimeData *mdata = new QMimeData; + mdata->setText(m_bc.bc.lastError()); + clipboard->setMimeData(mdata, QClipboard::Clipboard); + statusBar->showMessage(tr("Copied message to clipboard"), statusBarTimeout); } +} - QMimeData *mdata = new QMimeData; - mdata->setImageData(QImage(filename)); - clipboard->setMimeData(mdata, QClipboard::Clipboard); +void MainWindow::guard_reset_upcean() +{ + guard_reset(QSL("spnUPCEANGuardDescent")); +} - QFile::remove(filename); +void MainWindow::guard_reset_upca() +{ + guard_reset(QSL("spnUPCAGuardDescent")); +} + +void MainWindow::view_context_menu(const QPoint &pos) +{ + QMenu menu(tr("View Menu"), view); + + if (m_bc.bc.getError() >= ZINT_ERROR) { + menu.addAction(m_copyErrtxtAct); + + menu.exec(get_context_menu_pos(pos, view)); + } else { + menu.addAction(m_copyBMPAct); + menu.addAction(m_copyEMFAct); +#ifdef MAINWINDOW_COPY_EPS + menu.addAction(m_copyEPSAct); +#endif + menu.addAction(m_copyGIFAct); +#ifdef MAINWINDOW_COPY_PCX + menu.addAction(m_copyPCXAct); +#endif +#ifndef NO_PNG + menu.addAction(m_copyPNGAct); +#endif + menu.addAction(m_copySVGAct); + menu.addAction(m_copyTIFAct); + menu.addAction(m_saveAsAct); + + menu.exec(get_context_menu_pos(pos, view)); + } +} + +void MainWindow::errtxtBar_context_menu(const QPoint &pos) +{ + QMenu menu(tr("Message Menu"), errtxtBar); + + menu.addAction(m_copyErrtxtAct); + + menu.exec(get_context_menu_pos(pos, errtxtBar)); } void MainWindow::change_options() @@ -701,6 +843,7 @@ void MainWindow::change_options() if (m_symbology) { save_sub_settings(settings, m_symbology); } + statusBar->clearMessage(); if (tabMain->count() == 3) tabMain->removeTab(1); @@ -712,417 +855,473 @@ void MainWindow::change_options() combobox_item_enabled(cmbFontSetting, 1, true); if (symbology == BARCODE_CODE128) { - QFile file(":/grpC128.ui"); + QFile file(QSL(":/grpC128.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("Cod&e 128")); chkComposite->setText(tr("Add &2D Component (GS1-128 only)")); combobox_item_enabled(cmbCompType, 3, true); // CC-C - set_smaller_font(m_optionWidget->findChild("noteC128CompositeEAN")); - connect(widget_obj("radC128EAN"), SIGNAL(toggled( bool )), SLOT(composite_ean_check())); - connect(widget_obj("radC128Stand"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radC128CSup"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radC128EAN"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radC128HIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); + set_smaller_font(QSL("noteC128CompositeEAN")); + connect(get_widget(QSL("radC128Stand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radC128CSup")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radC128EAN")), SIGNAL(toggled( bool )), SLOT(composite_ean_check())); + connect(get_widget(QSL("radC128EAN")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radC128HIBC")), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_PDF417) { - QFile file(":/grpPDF417.ui"); + QFile file(QSL(":/grpPDF417.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); + structapp_ui_set(); tabMain->insertTab(1, m_optionWidget, tr("PDF41&7")); - connect(widget_obj("cmbPDFECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbPDFCols"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("radPDFTruncated"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radPDFStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radPDFHIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("spnPDFStructAppCount"), SIGNAL(valueChanged( int )), SLOT(update_preview())); - connect(widget_obj("spnPDFStructAppCount"), SIGNAL(valueChanged( int )), SLOT(structapp_ui_set())); - connect(widget_obj("spnPDFStructAppIndex"), SIGNAL(valueChanged( int )), SLOT(update_preview())); - connect(widget_obj("txtPDFStructAppID"), SIGNAL(textChanged( const QString& )), SLOT(update_preview())); + connect(get_widget(QSL("cmbPDFECC")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbPDFCols")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("radPDFTruncated")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radPDFStand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radPDFHIBC")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("spnPDFStructAppCount")), SIGNAL(valueChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("spnPDFStructAppCount")), SIGNAL(valueChanged( int )), SLOT(structapp_ui_set())); + connect(get_widget(QSL("spnPDFStructAppIndex")), SIGNAL(valueChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("txtPDFStructAppID")), SIGNAL(textChanged( const QString& )), SLOT(update_preview())); } else if (symbology == BARCODE_MICROPDF417) { - QFile file(":/grpMicroPDF.ui"); + QFile file(QSL(":/grpMicroPDF.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); + structapp_ui_set(); tabMain->insertTab(1, m_optionWidget, tr("Micro PDF41&7")); - connect(widget_obj("cmbMPDFCols"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("radMPDFStand"), SIGNAL(toggled( bool )), SLOT(update_preview())); - connect(widget_obj("spnMPDFStructAppCount"), SIGNAL(valueChanged( int )), SLOT(update_preview())); - connect(widget_obj("spnMPDFStructAppCount"), SIGNAL(valueChanged( int )), SLOT(structapp_ui_set())); - connect(widget_obj("spnMPDFStructAppIndex"), SIGNAL(valueChanged( int )), SLOT(update_preview())); - connect(widget_obj("txtMPDFStructAppID"), SIGNAL(textChanged( const QString& )), SLOT(update_preview())); + connect(get_widget(QSL("cmbMPDFCols")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("radMPDFStand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("spnMPDFStructAppCount")), SIGNAL(valueChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("spnMPDFStructAppCount")), SIGNAL(valueChanged( int )), SLOT(structapp_ui_set())); + connect(get_widget(QSL("spnMPDFStructAppIndex")), SIGNAL(valueChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("txtMPDFStructAppID")), SIGNAL(textChanged( const QString& )), SLOT(update_preview())); } else if (symbology == BARCODE_DOTCODE) { - QFile file(":/grpDotCode.ui"); + QFile file(QSL(":/grpDotCode.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); + structapp_ui_set(); tabMain->insertTab(1, m_optionWidget, tr("DotCod&e")); - connect(widget_obj("cmbDotCols"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbDotMask"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("radDotStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radDotGS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("cmbDotStructAppCount"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbDotStructAppCount"), SIGNAL(currentIndexChanged( int )), SLOT(structapp_ui_set())); - connect(widget_obj("cmbDotStructAppIndex"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbDotCols")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbDotMask")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("radDotStand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radDotGS1")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("cmbDotStructAppCount")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbDotStructAppCount")), SIGNAL(currentIndexChanged( int )), + SLOT(structapp_ui_set())); + connect(get_widget(QSL("cmbDotStructAppIndex")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_AZTEC) { - QFile file(":/grpAztec.ui"); + QFile file(QSL(":/grpAztec.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); + structapp_ui_set(); tabMain->insertTab(1, m_optionWidget, tr("Aztec Cod&e")); - connect(widget_obj("radAztecAuto"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radAztecSize"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radAztecECC"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("cmbAztecSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbAztecECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("radAztecStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radAztecGS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radAztecHIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("cmbAztecStructAppCount"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbAztecStructAppCount"), SIGNAL(currentIndexChanged( int )), SLOT(structapp_ui_set())); - connect(widget_obj("cmbAztecStructAppIndex"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("txtAztecStructAppID"), SIGNAL(textChanged( const QString& )), SLOT(update_preview())); + connect(get_widget(QSL("radAztecAuto")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radAztecSize")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radAztecECC")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("cmbAztecSize")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbAztecECC")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("radAztecStand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radAztecGS1")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radAztecHIBC")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("cmbAztecStructAppCount")), SIGNAL(currentIndexChanged( int )), + SLOT(update_preview())); + connect(get_widget(QSL("cmbAztecStructAppCount")), SIGNAL(currentIndexChanged( int )), + SLOT(structapp_ui_set())); + connect(get_widget(QSL("cmbAztecStructAppIndex")), SIGNAL(currentIndexChanged( int )), + SLOT(update_preview())); + connect(get_widget(QSL("txtAztecStructAppID")), SIGNAL(textChanged( const QString& )), + SLOT(update_preview())); } else if (symbology == BARCODE_MSI_PLESSEY) { - QFile file(":/grpMSICheck.ui"); + QFile file(QSL(":/grpMSICheck.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("MSI Pless&ey")); - connect(widget_obj("cmbMSICheck"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbMSICheck"), SIGNAL(currentIndexChanged( int )), SLOT(msi_plessey_ui_set())); - connect(widget_obj("chkMSICheckText"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(get_widget(QSL("cmbMSICheck")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbMSICheck")), SIGNAL(currentIndexChanged( int )), SLOT(msi_plessey_ui_set())); + connect(get_widget(QSL("chkMSICheckText")), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_CODE11) { - QFile file(":/grpC11.ui"); + QFile file(QSL(":/grpC11.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("Cod&e 11")); - connect(widget_obj("radC11TwoCheckDigits"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radC11OneCheckDigit"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radC11NoCheckDigits"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radC11TwoCheckDigits")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radC11OneCheckDigit")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radC11NoCheckDigits")), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_C25STANDARD || symbology == BARCODE_C25INTER || symbology == BARCODE_C25IATA || symbology == BARCODE_C25LOGIC || symbology == BARCODE_C25IND) { - QFile file(":/grpC25.ui"); + QFile file(QSL(":/grpC25.ui")); if (file.open(QIODevice::ReadOnly)) { m_optionWidget = uiload.load(&file); file.close(); - static const char *names[] = { - "Standard (Matrix)", "Interleaved", "IATA", "", "Data Logic", "Industrial" + load_sub_settings(settings, symbology); + static const QString names[] = { + QSL("Standard"), QSL("Interleaved"), QSL("IATA"), QSL(""), QSL("Data Logic"), QSL("Industrial") }; /*: %1 is name of variant (Standard, Interleaved, IATA, Data Logic, Industrial) */ tabMain->insertTab(1, m_optionWidget, tr("Cod&e 2 of 5 %1").arg(names[symbology - BARCODE_C25STANDARD])); - connect(widget_obj("radC25Stand"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radC25Check"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radC25CheckHide"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radC25Stand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radC25Check")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radC25CheckHide")), SIGNAL(toggled( bool )), SLOT(update_preview())); } } else if (symbology == BARCODE_CODE39 || symbology == BARCODE_EXCODE39) { - QFile file(":/grpC39.ui"); + QFile file(QSL(":/grpC39.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); - connect(widget_obj("radC39Stand"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radC39Check"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radC39HIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); + load_sub_settings(settings, symbology); + connect(get_widget(QSL("radC39Stand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radC39Check")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radC39HIBC")), SIGNAL(toggled( bool )), SLOT(update_preview())); if (symbology == BARCODE_EXCODE39) { tabMain->insertTab(1, m_optionWidget, tr("Cod&e 39 Extended")); - if (m_optionWidget->findChild("radC39HIBC")->isChecked()) { - m_optionWidget->findChild("radC39HIBC")->setChecked(false); - m_optionWidget->findChild("radC39Stand")->setChecked(true); + if (m_optionWidget->findChild(QSL("radC39HIBC"))->isChecked()) { + m_optionWidget->findChild(QSL("radC39HIBC"))->setChecked(false); + m_optionWidget->findChild(QSL("radC39Stand"))->setChecked(true); } - m_optionWidget->findChild("radC39HIBC")->setEnabled(false); + m_optionWidget->findChild(QSL("radC39HIBC"))->setEnabled(false); } else { tabMain->insertTab(1, m_optionWidget, tr("Cod&e 39")); - m_optionWidget->findChild("radC39HIBC")->setEnabled(true); + m_optionWidget->findChild(QSL("radC39HIBC"))->setEnabled(true); } } else if (symbology == BARCODE_LOGMARS) { - QFile file(":/grpLOGMARS.ui"); + QFile file(QSL(":/grpLOGMARS.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("LOGM&ARS")); - connect(widget_obj("radLOGMARSStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radLOGMARSCheck"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radLOGMARSStand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radLOGMARSCheck")), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_CODE16K) { - QFile file(":/grpC16k.ui"); + QFile file(QSL(":/grpC16k.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("Cod&e 16K")); btype->setItemText(0, tr("Default (bind)")); - connect(widget_obj("cmbC16kRowSepHeight"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("radC16kStand"), SIGNAL(toggled( bool )), SLOT(update_preview())); - connect(widget_obj("chkC16kNoQuietZones"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(get_widget(QSL("cmbC16kRowSepHeight")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("radC16kStand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("chkC16kNoQuietZones")), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_CODABAR) { - QFile file(":/grpCodabar.ui"); + QFile file(QSL(":/grpCodabar.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("Cod&abar")); - connect(widget_obj("chkCodabarCheck"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radCodabarStand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radCodabarCheckHide")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radCodabarCheck")), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_CODABLOCKF) { - QFile file (":/grpCodablockF.ui"); + QFile file (QSL(":/grpCodablockF.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("Codablock&-F")); btype->setItemText(0, tr("Default (bind)")); - connect(widget_obj("cmbCbfWidth"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbCbfHeight"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbCbfRowSepHeight"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("radCbfStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radCbfHIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("chkCbfNoQuietZones"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(get_widget(QSL("cmbCbfWidth")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbCbfHeight")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbCbfRowSepHeight")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("radCbfStand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radCbfHIBC")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("chkCbfNoQuietZones")), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_DAFT) { - QFile file(":/grpDAFT.ui"); + QFile file(QSL(":/grpDAFT.ui")); if (file.open(QIODevice::ReadOnly)) { m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("DAFT")); - set_smaller_font(m_optionWidget->findChild("noteTrackerRatios")); - connect(widget_obj("spnDAFTTrackerRatio"), SIGNAL(valueChanged( double )), SLOT(update_preview())); + set_smaller_font(QSL("noteTrackerRatios")); + connect(get_widget(QSL("spnDAFTTrackerRatio")), SIGNAL(valueChanged( double )), SLOT(update_preview())); } } else if (symbology == BARCODE_DATAMATRIX) { - QFile file(":/grpDM.ui"); + QFile file(QSL(":/grpDM.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); + structapp_ui_set(); tabMain->insertTab(1, m_optionWidget, tr("D&ata Matrix")); - connect(widget_obj("radDM200Stand"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radDM200GS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radDM200HIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("cmbDM200Size"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("chkDMRectangle"), SIGNAL(stateChanged( int )), SLOT(update_preview())); - connect(widget_obj("chkDMRE"), SIGNAL(stateChanged( int )), SLOT(update_preview())); - connect(widget_obj("chkDMGSSep"), SIGNAL(stateChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbDMStructAppCount"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbDMStructAppCount"), SIGNAL(currentIndexChanged( int )), SLOT(structapp_ui_set())); - connect(widget_obj("cmbDMStructAppIndex"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("spnDMStructAppID"), SIGNAL(valueChanged( int )), SLOT(update_preview())); - connect(widget_obj("spnDMStructAppID2"), SIGNAL(valueChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("radDM200Stand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radDM200GS1")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radDM200HIBC")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("cmbDM200Size")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("chkDMRectangle")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("chkDMRE")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("chkDMGSSep")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("cmbDMStructAppCount")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbDMStructAppCount")), SIGNAL(currentIndexChanged( int )), SLOT(structapp_ui_set())); + connect(get_widget(QSL("cmbDMStructAppIndex")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("spnDMStructAppID")), SIGNAL(valueChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("spnDMStructAppID2")), SIGNAL(valueChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_ITF14) { btype->setItemText(0, tr("Default (box, non-zero width)")); - QFile file(":/grpITF14.ui"); + QFile file(QSL(":/grpITF14.ui")); if (file.open(QIODevice::ReadOnly)) { m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("ITF-1&4")); - connect(widget_obj("chkITF14NoQuietZones"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(get_widget(QSL("chkITF14NoQuietZones")), SIGNAL(toggled( bool )), SLOT(update_preview())); } } else if (symbology == BARCODE_QRCODE) { - QFile file(":/grpQR.ui"); + QFile file(QSL(":/grpQR.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); + structapp_ui_set(); tabMain->insertTab(1, m_optionWidget, tr("QR Cod&e")); - connect(widget_obj("cmbQRSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbQRECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbQRMask"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("radQRStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radQRGS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radQRHIBC"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("chkQRFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbQRStructAppCount"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbQRStructAppCount"), SIGNAL(currentIndexChanged( int )), SLOT(structapp_ui_set())); - connect(widget_obj("cmbQRStructAppIndex"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("spnQRStructAppID"), SIGNAL(valueChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbQRSize")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbQRECC")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbQRMask")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("radQRStand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radQRGS1")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radQRHIBC")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("chkQRFullMultibyte")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("cmbQRStructAppCount")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbQRStructAppCount")), SIGNAL(currentIndexChanged( int )), SLOT(structapp_ui_set())); + connect(get_widget(QSL("cmbQRStructAppIndex")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("spnQRStructAppID")), SIGNAL(valueChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_RMQR) { - QFile file(":/grpRMQR.ui"); + QFile file(QSL(":/grpRMQR.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("rMQR Cod&e")); - connect(widget_obj("cmbRMQRSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbRMQRECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("radRMQRStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radRMQRGS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("chkRMQRFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbRMQRSize")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbRMQRECC")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("radRMQRStand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radRMQRGS1")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("chkRMQRFullMultibyte")), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_HANXIN) { - QFile file(":/grpHX.ui"); + QFile file(QSL(":/grpHX.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("Han Xin Cod&e")); cmbECI->setItemText(25, tr("29: GB 18030 (PRC)")); - connect(widget_obj("cmbHXSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbHXECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbHXMask"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("chkHXFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbHXSize")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbHXECC")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbHXMask")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("chkHXFullMultibyte")), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_MICROQR) { - QFile file(":/grpMQR.ui"); + QFile file(QSL(":/grpMQR.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("Micro QR Cod&e")); - connect(widget_obj("cmbMQRSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbMQRECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbMQRMask"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("chkMQRFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbMQRSize")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbMQRECC")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbMQRMask")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("chkMQRFullMultibyte")), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_GRIDMATRIX) { - QFile file(":/grpGrid.ui"); + QFile file(QSL(":/grpGrid.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); + structapp_ui_set(); tabMain->insertTab(1, m_optionWidget, tr("Grid M&atrix")); - set_smaller_font(m_optionWidget->findChild("noteGridECC")); - connect(widget_obj("cmbGridSize"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbGridECC"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("chkGridFullMultibyte"), SIGNAL(stateChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbGridStructAppCount"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbGridStructAppCount"), SIGNAL(currentIndexChanged( int )), SLOT(structapp_ui_set())); - connect(widget_obj("cmbGridStructAppIndex"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("spnGridStructAppID"), SIGNAL(valueChanged( int )), SLOT(update_preview())); + set_smaller_font(QSL("noteGridECC")); + connect(get_widget(QSL("cmbGridSize")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbGridECC")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("chkGridFullMultibyte")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("cmbGridStructAppCount")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbGridStructAppCount")), SIGNAL(currentIndexChanged( int )), + SLOT(structapp_ui_set())); + connect(get_widget(QSL("cmbGridStructAppIndex")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("spnGridStructAppID")), SIGNAL(valueChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_MAXICODE) { - QFile file(":/grpMaxicode.ui"); + QFile file(QSL(":/grpMaxicode.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); + structapp_ui_set(); tabMain->insertTab(1, m_optionWidget, tr("MaxiCod&e")); - connect(widget_obj("cmbMaxiMode"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbMaxiMode"), SIGNAL(currentIndexChanged( int )), SLOT(maxi_scm())); - connect(widget_obj("txtMaxiSCMPostcode"), SIGNAL(textChanged( const QString& )), SLOT(update_preview())); - connect(widget_obj("spnMaxiSCMCountry"), SIGNAL(valueChanged( int )), SLOT(update_preview())); - connect(widget_obj("spnMaxiSCMService"), SIGNAL(valueChanged( int )), SLOT(update_preview())); - connect(widget_obj("chkMaxiSCMVV"), SIGNAL(stateChanged( int )), SLOT(update_preview())); - connect(widget_obj("chkMaxiSCMVV"), SIGNAL(stateChanged( int )), SLOT(maxi_scm())); - connect(widget_obj("spnMaxiSCMVV"), SIGNAL(valueChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbMaxiStructAppCount"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbMaxiStructAppCount"), SIGNAL(currentIndexChanged( int )), SLOT(structapp_ui_set())); - connect(widget_obj("cmbMaxiStructAppIndex"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbMaxiMode")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbMaxiMode")), SIGNAL(currentIndexChanged( int )), SLOT(maxi_scm_ui_set())); + connect(get_widget(QSL("txtMaxiSCMPostcode")), SIGNAL(textChanged( const QString& )), SLOT(update_preview())); + connect(get_widget(QSL("spnMaxiSCMCountry")), SIGNAL(valueChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("spnMaxiSCMService")), SIGNAL(valueChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("chkMaxiSCMVV")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("chkMaxiSCMVV")), SIGNAL(toggled( bool )), SLOT(maxi_scm_ui_set())); + connect(get_widget(QSL("spnMaxiSCMVV")), SIGNAL(valueChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbMaxiStructAppCount")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbMaxiStructAppCount")), SIGNAL(currentIndexChanged( int )), + SLOT(structapp_ui_set())); + connect(get_widget(QSL("cmbMaxiStructAppIndex")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + maxi_scm_ui_set(); } else if (symbology == BARCODE_CHANNEL) { - QFile file(":/grpChannel.ui"); + QFile file(QSL(":/grpChannel.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("Channel Cod&e")); - connect(widget_obj("cmbChannel"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbChannel")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_CODEONE) { - QFile file(":/grpCodeOne.ui"); + QFile file(QSL(":/grpCodeOne.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); + codeone_ui_set(); + structapp_ui_set(); tabMain->insertTab(1, m_optionWidget, tr("Code On&e")); - connect(widget_obj("cmbC1Size"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("radC1GS1"), SIGNAL(toggled( bool )), SLOT(update_preview())); - connect(widget_obj("spnC1StructAppCount"), SIGNAL(valueChanged( int )), SLOT(update_preview())); - connect(widget_obj("spnC1StructAppCount"), SIGNAL(valueChanged( int )), SLOT(structapp_ui_set())); - connect(widget_obj("spnC1StructAppIndex"), SIGNAL(valueChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbC1Size")), SIGNAL(currentIndexChanged( int )), SLOT(codeone_ui_set())); + connect(get_widget(QSL("cmbC1Size")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("radC1GS1")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("spnC1StructAppCount")), SIGNAL(valueChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("spnC1StructAppCount")), SIGNAL(valueChanged( int )), SLOT(structapp_ui_set())); + connect(get_widget(QSL("spnC1StructAppIndex")), SIGNAL(valueChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_CODE49) { - QFile file(":/grpC49.ui"); + QFile file(QSL(":/grpC49.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("Cod&e 49")); btype->setItemText(0, tr("Default (bind)")); - connect(widget_obj("cmbC49RowSepHeight"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("radC49GS1"), SIGNAL(toggled( bool )), SLOT(update_preview())); - connect(widget_obj("chkC49NoQuietZones"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(get_widget(QSL("cmbC49RowSepHeight")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("radC49GS1")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("chkC49NoQuietZones")), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_CODE93) { - QFile file(":/grpC93.ui"); + QFile file(QSL(":/grpC93.ui")); if (file.open(QIODevice::ReadOnly)) { m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("Cod&e 93")); - connect(widget_obj("chkC93ShowChecks"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(get_widget(QSL("chkC93ShowChecks")), SIGNAL(toggled( bool )), SLOT(update_preview())); } } else if (symbology == BARCODE_DBAR_EXPSTK) { - QFile file(":/grpDBExtend.ui"); + QFile file(QSL(":/grpDBExtend.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("GS1 DataBar Stack&ed")); - connect(widget_obj("cmbCols"), SIGNAL(currentIndexChanged ( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbCols")), SIGNAL(currentIndexChanged ( int )), SLOT(update_preview())); } else if (symbology == BARCODE_ULTRA) { - QFile file(":/grpUltra.ui"); + QFile file(QSL(":/grpUltra.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); + structapp_ui_set(); tabMain->insertTab(1, m_optionWidget, tr("Ultracod&e")); - connect(widget_obj("radUltraAuto"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radUltraEcc"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("cmbUltraEcc"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbUltraRevision"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("radUltraStand"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("radUltraGS1"), SIGNAL(clicked( bool )), SLOT(update_preview())); - connect(widget_obj("cmbUltraStructAppCount"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("cmbUltraStructAppCount"), SIGNAL(currentIndexChanged( int )), SLOT(structapp_ui_set())); - connect(widget_obj("cmbUltraStructAppIndex"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("spnUltraStructAppID"), SIGNAL(valueChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("radUltraAuto")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radUltraEcc")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("cmbUltraEcc")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("cmbUltraRevision")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("radUltraStand")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("radUltraGS1")), SIGNAL(toggled( bool )), SLOT(update_preview())); + connect(get_widget(QSL("cmbUltraStructAppCount")), SIGNAL(currentIndexChanged( int )), + SLOT(update_preview())); + connect(get_widget(QSL("cmbUltraStructAppCount")), SIGNAL(currentIndexChanged( int )), + SLOT(structapp_ui_set())); + connect(get_widget(QSL("cmbUltraStructAppIndex")), SIGNAL(currentIndexChanged( int )), + SLOT(update_preview())); + connect(get_widget(QSL("spnUltraStructAppID")), SIGNAL(valueChanged( int )), SLOT(update_preview())); } else if (symbology == BARCODE_UPCA || symbology == BARCODE_UPCA_CHK || symbology == BARCODE_UPCA_CC) { - QFile file(":/grpUPCA.ui"); + QFile file(QSL(":/grpUPCA.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("UPC-&A")); combobox_item_enabled(cmbFontSetting, 1, false); if (cmbFontSetting->currentIndex() == 1) { cmbFontSetting->setCurrentIndex(0); } - connect(widget_obj("cmbUPCAAddonGap"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("spnUPCAGuardDescent"), SIGNAL(valueChanged( double )), SLOT(update_preview())); - connect(widget_obj("chkUPCANoQuietZones"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(get_widget(QSL("cmbUPCAAddonGap")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("spnUPCAGuardDescent")), SIGNAL(valueChanged( double )), SLOT(update_preview())); + connect(get_widget(QSL("btnUPCAGuardReset")), SIGNAL(clicked( bool )), SLOT(guard_reset_upca())); + connect(get_widget(QSL("chkUPCANoQuietZones")), SIGNAL(toggled( 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 || symbology == BARCODE_ISBNX) { - QFile file(":/grpUPCEAN.ui"); + QFile file(QSL(":/grpUPCEAN.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); if (symbology == BARCODE_UPCE || symbology == BARCODE_UPCE_CHK || symbology == BARCODE_UPCE_CC) { tabMain->insertTab(1, m_optionWidget, tr("UPC-&E")); } else if (symbology == BARCODE_ISBNX) { @@ -1134,18 +1333,23 @@ void MainWindow::change_options() if (cmbFontSetting->currentIndex() == 1) { cmbFontSetting->setCurrentIndex(0); } - connect(widget_obj("cmbUPCEANAddonGap"), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); - connect(widget_obj("spnUPCEANGuardDescent"), SIGNAL(valueChanged( double )), SLOT(update_preview())); - connect(widget_obj("chkUPCEANNoQuietZones"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(get_widget(QSL("cmbUPCEANAddonGap")), SIGNAL(currentIndexChanged( int )), SLOT(update_preview())); + connect(get_widget(QSL("spnUPCEANGuardDescent")), SIGNAL(valueChanged( double )), SLOT(update_preview())); + connect(get_widget(QSL("btnUPCEANGuardReset")), SIGNAL(clicked( bool )), SLOT(guard_reset_upcean())); + connect(get_widget(QSL("chkUPCEANNoQuietZones")), SIGNAL(toggled( bool )), SLOT(update_preview())); } else if (symbology == BARCODE_VIN) { - QFile file(":/grpVIN.ui"); + QFile file(QSL(":/grpVIN.ui")); if (!file.open(QIODevice::ReadOnly)) return; m_optionWidget = uiload.load(&file); file.close(); + load_sub_settings(settings, symbology); tabMain->insertTab(1, m_optionWidget, tr("&VIN")); - connect(widget_obj("chkVINImportChar"), SIGNAL(clicked( bool )), SLOT(update_preview())); + connect(get_widget(QSL("chkVINImportChar")), SIGNAL(toggled( bool )), SLOT(update_preview())); + + } else { + load_sub_settings(settings, symbology); } switch (symbology) { @@ -1166,25 +1370,20 @@ void MainWindow::change_options() break; } - // ECI will need checking again in update_preview() as encoding mode dependent (HIBC) - cmbECI->setEnabled(m_bc.bc.supportsECI(symbology)); - chkGS1Parens->setEnabled(m_bc.bc.supportsGS1(symbology)); /* Ditto (GS1) */ - chkGS1NoCheck->setEnabled(m_bc.bc.supportsGS1(symbology)); /* Ditto (GS1) */ - chkRInit->setEnabled(m_bc.bc.supportsReaderInit(symbology)); /* Ditto (HIBC and GS1) */ + // ECI, GS1Parens, GS1NoCheck, RInit, CompliantHeight will be checked in update_preview() as + // encoding mode dependent (HIBC and/or 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); - composite_ui_set(); autoheight_ui_set(); HRTShow_ui_set(); dotty_ui_set(); if (initial_load) { - tabMain->setCurrentIndex(settings.value("studio/tab_index", 0).toInt()); + tabMain->setCurrentIndex(settings.value(QSL("studio/tab_index"), 0).toInt()); } else if (original_tab_count == tabMain->count()) { tabMain->setCurrentIndex(original_tab_index); } else if (original_tab_count > tabMain->count()) { @@ -1196,22 +1395,20 @@ void MainWindow::change_options() void MainWindow::composite_ui_set() { - if (!grpComposite->isHidden() && chkComposite->isChecked()) { - lblCompType->setEnabled(true); - cmbCompType->setEnabled(true); - lblComposite->setEnabled(true); - txtComposite->setEnabled(true); + bool enabled = !grpComposite->isHidden() && chkComposite->isChecked(); + + lblCompType->setEnabled(enabled); + cmbCompType->setEnabled(enabled); + lblComposite->setEnabled(enabled); + txtComposite->setEnabled(enabled); + + if (enabled) { if (bstyle_items[bstyle->currentIndex()].symbology == BARCODE_CODE128) { - QRadioButton *radioButton = m_optionWidget->findChild("radC128EAN"); + QRadioButton *radioButton = m_optionWidget->findChild(QSL("radC128EAN")); if (radioButton) { radioButton->setChecked(true); } } - } else { - lblCompType->setEnabled(false); - cmbCompType->setEnabled(false); - lblComposite->setEnabled(false); - txtComposite->setEnabled(false); } } @@ -1219,38 +1416,39 @@ void MainWindow::composite_ean_check() { if (bstyle_items[bstyle->currentIndex()].symbology != BARCODE_CODE128) return; - QRadioButton *radioButton = m_optionWidget->findChild("radC128EAN"); + QRadioButton *radioButton = m_optionWidget->findChild(QSL("radC128EAN")); if (radioButton && !radioButton->isChecked()) chkComposite->setChecked(false); } -void MainWindow::maxi_scm() +void MainWindow::maxi_scm_ui_set() { if (bstyle_items[bstyle->currentIndex()].symbology != BARCODE_MAXICODE) return; + QCheckBox *chkMaxiSCMVV = m_optionWidget ? m_optionWidget->findChild(QSL("chkMaxiSCMVV")) : nullptr; + if (!chkMaxiSCMVV) + return; - QCheckBox *chkMaxiSCMVV = m_optionWidget->findChild("chkMaxiSCMVV"); + bool isMode2or3 = get_cmb_index(QSL("cmbMaxiMode")) == 0; - bool isMode2or3 = m_optionWidget->findChild("cmbMaxiMode")->currentIndex() == 0; - - m_optionWidget->findChild("lblMaxiSCMPostcode")->setEnabled(isMode2or3); - m_optionWidget->findChild("txtMaxiSCMPostcode")->setEnabled(isMode2or3); - m_optionWidget->findChild("lblMaxiSCMCountry")->setEnabled(isMode2or3); - m_optionWidget->findChild("spnMaxiSCMCountry")->setEnabled(isMode2or3); - m_optionWidget->findChild("lblMaxiSCMService")->setEnabled(isMode2or3); - m_optionWidget->findChild("spnMaxiSCMService")->setEnabled(isMode2or3); + m_optionWidget->findChild(QSL("lblMaxiSCMPostcode"))->setEnabled(isMode2or3); + m_optionWidget->findChild(QSL("txtMaxiSCMPostcode"))->setEnabled(isMode2or3); + m_optionWidget->findChild(QSL("lblMaxiSCMCountry"))->setEnabled(isMode2or3); + m_optionWidget->findChild(QSL("spnMaxiSCMCountry"))->setEnabled(isMode2or3); + m_optionWidget->findChild(QSL("lblMaxiSCMService"))->setEnabled(isMode2or3); + m_optionWidget->findChild(QSL("spnMaxiSCMService"))->setEnabled(isMode2or3); chkMaxiSCMVV->setEnabled(isMode2or3); - m_optionWidget->findChild("lblMaxiSCMVV")->setEnabled(isMode2or3 && chkMaxiSCMVV->isChecked()); - m_optionWidget->findChild("spnMaxiSCMVV")->setEnabled(isMode2or3 && chkMaxiSCMVV->isChecked()); + m_optionWidget->findChild(QSL("lblMaxiSCMVV"))->setEnabled(isMode2or3 && chkMaxiSCMVV->isChecked()); + m_optionWidget->findChild(QSL("spnMaxiSCMVV"))->setEnabled(isMode2or3 && chkMaxiSCMVV->isChecked()); } void MainWindow::msi_plessey_ui_set() { if (bstyle_items[bstyle->currentIndex()].symbology != BARCODE_MSI_PLESSEY) return; - QCheckBox *checkBox = m_optionWidget ? m_optionWidget->findChild("chkMSICheckText") : nullptr; + QCheckBox *checkBox = m_optionWidget ? m_optionWidget->findChild(QSL("chkMSICheckText")) : nullptr; if (checkBox) { - checkBox->setEnabled(get_combobox_index("cmbMSICheck") > 0); + checkBox->setEnabled(get_cmb_index(QSL("cmbMSICheck")) > 0); } } @@ -1266,12 +1464,12 @@ void MainWindow::combobox_item_enabled(QComboBox *comboBox, int index, bool enab } } -void MainWindow::upcean_addon_gap(const char *comboBoxName, const char *labelName, int base) +void MainWindow::upcean_addon_gap(const QString &comboBoxName, const QString &labelName, int base) { QComboBox *comboBox = m_optionWidget->findChild(comboBoxName); QLabel *label = m_optionWidget->findChild(labelName); - const QRegularExpression addonRE("^[0-9X]+[+][0-9]+$"); + const QRegularExpression addonRE(QSL("^[0-9X]+[+][0-9]+$")); bool enabled = txtData->text().contains(addonRE); if (comboBox) { comboBox->setEnabled(enabled); @@ -1287,7 +1485,7 @@ void MainWindow::upcean_addon_gap(const char *comboBoxName, const char *labelNam } } -void MainWindow::upcean_guard_descent(const char *spnBoxName, const char *labelName) +void MainWindow::upcean_guard_descent(const QString &spnBoxName, const QString &labelName) { QDoubleSpinBox *spnBox = m_optionWidget->findChild(spnBoxName); QLabel *label = m_optionWidget->findChild(labelName); @@ -1304,6 +1502,15 @@ void MainWindow::upcean_guard_descent(const char *spnBoxName, const char *labelN } } +void MainWindow::guard_reset(const QString &spnBoxName) +{ + QDoubleSpinBox *spnBox = m_optionWidget->findChild(spnBoxName); + if (spnBox && spnBox->value() != 5.0) { + spnBox->setValue(5.0); + update_preview(); + } +} + void MainWindow::set_gs1_mode(bool gs1_mode) { if (gs1_mode) { @@ -1314,8 +1521,9 @@ void MainWindow::set_gs1_mode(bool gs1_mode) } } -void MainWindow::set_smaller_font(QLabel *label) +void MainWindow::set_smaller_font(const QString &labelName) { + QLabel *label = m_optionWidget ? m_optionWidget->findChild(labelName) : nullptr; if (label) { const QFont &appFont = QApplication::font(); qreal pointSize = appFont.pointSizeF(); @@ -1338,7 +1546,7 @@ void MainWindow::set_smaller_font(QLabel *label) void MainWindow::update_preview() { int symbology = bstyle_items[bstyle->currentIndex()].symbology; - int recheck_eci = true; + int eci_not_set = true; int width = view->geometry().width(); int height = view->geometry().height(); int item_val; @@ -1370,189 +1578,144 @@ void MainWindow::update_preview() switch (symbology) { case BARCODE_CODE128: - if(m_optionWidget->findChild("radC128Stand")->isChecked()) - m_bc.bc.setSymbol(BARCODE_CODE128); - - if(m_optionWidget->findChild("radC128CSup")->isChecked()) + if (get_rad_val(QSL("radC128CSup"))) m_bc.bc.setSymbol(BARCODE_CODE128B); - - if(m_optionWidget->findChild("radC128EAN")->isChecked()) - { - if(chkComposite->isChecked()) - m_bc.bc.setSymbol(BARCODE_GS1_128_CC); - else - m_bc.bc.setSymbol(BARCODE_GS1_128); - } - - if(m_optionWidget->findChild("radC128HIBC")->isChecked()) + else if (get_rad_val(QSL("radC128EAN"))) + m_bc.bc.setSymbol(chkComposite->isChecked() ? BARCODE_GS1_128_CC : BARCODE_GS1_128); + else if (get_rad_val(QSL("radC128HIBC"))) m_bc.bc.setSymbol(BARCODE_HIBC_128); + else + m_bc.bc.setSymbol(BARCODE_CODE128); break; case BARCODE_EANX: - if (chkComposite->isChecked()) - m_bc.bc.setSymbol(BARCODE_EANX_CC); - else - m_bc.bc.setSymbol(BARCODE_EANX); - upcean_addon_gap("cmbUPCEANAddonGap", "lblUPCEANAddonGap", 7 /*base*/); - upcean_guard_descent("spnUPCEANGuardDescent", "lblUPCEANGuardDescent"); - if (get_checkbox_val("chkUPCEANNoQuietZones")) { + m_bc.bc.setSymbol(chkComposite->isChecked() ? BARCODE_EANX_CC : BARCODE_EANX); + upcean_addon_gap(QSL("cmbUPCEANAddonGap"), QSL("lblUPCEANAddonGap"), 7 /*base*/); + upcean_guard_descent(QSL("spnUPCEANGuardDescent"), QSL("lblUPCEANGuardDescent")); + if (get_chk_val(QSL("chkUPCEANNoQuietZones"))) { m_bc.bc.setNoQuietZones(true); } break; case BARCODE_ISBNX: m_bc.bc.setSymbol(symbology); - upcean_addon_gap("cmbUPCEANAddonGap", "lblUPCEANAddonGap", 7 /*base*/); - upcean_guard_descent("spnUPCEANGuardDescent", "lblUPCEANGuardDescent"); - if (get_checkbox_val("chkUPCEANNoQuietZones")) { + upcean_addon_gap(QSL("cmbUPCEANAddonGap"), QSL("lblUPCEANAddonGap"), 7 /*base*/); + upcean_guard_descent(QSL("spnUPCEANGuardDescent"), QSL("lblUPCEANGuardDescent")); + if (get_chk_val(QSL("chkUPCEANNoQuietZones"))) { m_bc.bc.setNoQuietZones(true); } break; case BARCODE_UPCA: - if (chkComposite->isChecked()) - m_bc.bc.setSymbol(BARCODE_UPCA_CC); - else - m_bc.bc.setSymbol(BARCODE_UPCA); - upcean_addon_gap("cmbUPCAAddonGap", "lblUPCAAddonGap", 9 /*base*/); - upcean_guard_descent("spnUPCAGuardDescent", "lblUPCAGuardDescent"); - if (get_checkbox_val("chkUPCANoQuietZones")) { + m_bc.bc.setSymbol(chkComposite->isChecked() ? BARCODE_UPCA_CC : BARCODE_UPCA); + upcean_addon_gap(QSL("cmbUPCAAddonGap"), QSL("lblUPCAAddonGap"), 9 /*base*/); + upcean_guard_descent(QSL("spnUPCAGuardDescent"), QSL("lblUPCAGuardDescent")); + if (get_chk_val(QSL("chkUPCANoQuietZones"))) { m_bc.bc.setNoQuietZones(true); } break; case BARCODE_UPCE: - if (chkComposite->isChecked()) - m_bc.bc.setSymbol(BARCODE_UPCE_CC); - else - m_bc.bc.setSymbol(BARCODE_UPCE); - upcean_addon_gap("cmbUPCEANAddonGap", "lblUPCEANAddonGap", 7 /*base*/); - upcean_guard_descent("spnUPCEANGuardDescent", "lblUPCEANGuardDescent"); - if (get_checkbox_val("chkUPCEANNoQuietZones")) { + m_bc.bc.setSymbol(chkComposite->isChecked() ? BARCODE_UPCE_CC : BARCODE_UPCE); + upcean_addon_gap(QSL("cmbUPCEANAddonGap"), QSL("lblUPCEANAddonGap"), 7 /*base*/); + upcean_guard_descent(QSL("spnUPCEANGuardDescent"), QSL("lblUPCEANGuardDescent")); + if (get_chk_val(QSL("chkUPCEANNoQuietZones"))) { m_bc.bc.setNoQuietZones(true); } break; case BARCODE_DBAR_OMN: - if(chkComposite->isChecked()) - m_bc.bc.setSymbol(BARCODE_DBAR_OMN_CC); - else - m_bc.bc.setSymbol(BARCODE_DBAR_OMN); + m_bc.bc.setSymbol(chkComposite->isChecked() ? BARCODE_DBAR_OMN_CC : BARCODE_DBAR_OMN); break; - case BARCODE_DBAR_LTD: - if(chkComposite->isChecked()) - m_bc.bc.setSymbol(BARCODE_DBAR_LTD_CC); - else - m_bc.bc.setSymbol(BARCODE_DBAR_LTD); + m_bc.bc.setSymbol(chkComposite->isChecked() ? BARCODE_DBAR_LTD_CC : BARCODE_DBAR_LTD); break; - case BARCODE_DBAR_EXP: - if(chkComposite->isChecked()) - m_bc.bc.setSymbol(BARCODE_DBAR_EXP_CC); - else - m_bc.bc.setSymbol(BARCODE_DBAR_EXP); + m_bc.bc.setSymbol(chkComposite->isChecked() ? BARCODE_DBAR_EXP_CC : BARCODE_DBAR_EXP); break; - case BARCODE_DBAR_STK: - if(chkComposite->isChecked()) - m_bc.bc.setSymbol(BARCODE_DBAR_STK_CC); - else - m_bc.bc.setSymbol(BARCODE_DBAR_STK); + m_bc.bc.setSymbol(chkComposite->isChecked() ? BARCODE_DBAR_STK_CC : BARCODE_DBAR_STK); break; - case BARCODE_DBAR_OMNSTK: - if(chkComposite->isChecked()) - m_bc.bc.setSymbol(BARCODE_DBAR_OMNSTK_CC); - else - m_bc.bc.setSymbol(BARCODE_DBAR_OMNSTK); + m_bc.bc.setSymbol(chkComposite->isChecked() ? BARCODE_DBAR_OMNSTK_CC : BARCODE_DBAR_OMNSTK); break; - case BARCODE_DBAR_EXPSTK: - if(chkComposite->isChecked()) - m_bc.bc.setSymbol(BARCODE_DBAR_EXPSTK_CC); - else - m_bc.bc.setSymbol(BARCODE_DBAR_EXPSTK); - - if(m_optionWidget->findChild("cmbCols")->currentIndex() != 0) - m_bc.bc.setOption2(m_optionWidget->findChild("cmbCols")->currentIndex()); + m_bc.bc.setSymbol(chkComposite->isChecked() ? BARCODE_DBAR_EXPSTK_CC : BARCODE_DBAR_EXPSTK); + if ((item_val = get_cmb_index(QSL("cmbCols"))) != 0) + m_bc.bc.setOption2(item_val); break; case BARCODE_PDF417: - m_bc.bc.setOption2(m_optionWidget->findChild("cmbPDFCols")->currentIndex()); - m_bc.bc.setOption1(m_optionWidget->findChild("cmbPDFECC")->currentIndex() - 1); - - if (m_optionWidget->findChild("radPDFTruncated")->isChecked()) + if (get_rad_val(QSL("radPDFTruncated"))) m_bc.bc.setSymbol(BARCODE_PDF417COMP); - else if (m_optionWidget->findChild("radPDFHIBC")->isChecked()) + else if (get_rad_val(QSL("radPDFHIBC"))) m_bc.bc.setSymbol(BARCODE_HIBC_PDF); else m_bc.bc.setSymbol(BARCODE_PDF417); - item_val = get_spinbox_val("spnPDFStructAppCount"); - if (item_val > 1) { - m_bc.bc.setStructApp(item_val, get_spinbox_val("spnPDFStructAppIndex"), - get_lineedit_val("txtPDFStructAppID")); + m_bc.bc.setOption2(get_cmb_index(QSL("cmbPDFCols"))); + m_bc.bc.setOption1(get_cmb_index(QSL("cmbPDFECC")) - 1); + + if ((item_val = get_spn_val(QSL("spnPDFStructAppCount"))) > 1) { + m_bc.bc.setStructApp(item_val, get_spn_val(QSL("spnPDFStructAppIndex")), + get_txt_val(QSL("txtPDFStructAppID"))); } break; case BARCODE_MICROPDF417: - m_bc.bc.setOption2(m_optionWidget->findChild("cmbMPDFCols")->currentIndex()); - - if (m_optionWidget->findChild("radMPDFHIBC")->isChecked()) + if (get_rad_val(QSL("radMPDFHIBC"))) m_bc.bc.setSymbol(BARCODE_HIBC_MICPDF); else m_bc.bc.setSymbol(BARCODE_MICROPDF417); - item_val = get_spinbox_val("spnMPDFStructAppCount"); - if (item_val > 1) { - m_bc.bc.setStructApp(item_val, get_spinbox_val("spnMPDFStructAppIndex"), - get_lineedit_val("txtMPDFStructAppID")); + m_bc.bc.setOption2(get_cmb_index(QSL("cmbMPDFCols"))); + + if ((item_val = get_spn_val(QSL("spnMPDFStructAppCount"))) > 1) { + m_bc.bc.setStructApp(item_val, get_spn_val(QSL("spnMPDFStructAppIndex")), + get_txt_val(QSL("txtMPDFStructAppID"))); } break; case BARCODE_DOTCODE: m_bc.bc.setSymbol(BARCODE_DOTCODE); - item_val = m_optionWidget->findChild("cmbDotCols")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbDotCols"))) != 0) { m_bc.bc.setOption2(item_val + 4); // Cols 1-4 not listed } - item_val = m_optionWidget->findChild("cmbDotMask")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbDotMask"))) != 0) { m_bc.bc.setOption3((item_val << 8) | m_bc.bc.option3()); } - set_gs1_mode(m_optionWidget->findChild("radDotGS1")->isChecked()); + set_gs1_mode(get_rad_val(QSL("radDotGS1"))); - item_val = get_combobox_index("cmbDotStructAppCount"); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbDotStructAppCount"))) != 0) { QString id; // Dummy ID - m_bc.bc.setStructApp(item_val + 1, get_combobox_index("cmbDotStructAppIndex") + 1, id); + m_bc.bc.setStructApp(item_val + 1, get_cmb_index(QSL("cmbDotStructAppIndex")) + 1, id); } break; case BARCODE_AZTEC: - m_bc.bc.setSymbol(BARCODE_AZTEC); - if (m_optionWidget->findChild("radAztecSize")->isChecked()) - m_bc.bc.setOption2(m_optionWidget->findChild("cmbAztecSize")->currentIndex() + 1); - - if (m_optionWidget->findChild("radAztecECC")->isChecked()) - m_bc.bc.setOption1(m_optionWidget->findChild("cmbAztecECC")->currentIndex() + 1); - - set_gs1_mode(m_optionWidget->findChild("radAztecGS1")->isChecked()); - if (m_optionWidget->findChild("radAztecHIBC")->isChecked()) + if (get_rad_val(QSL("radAztecHIBC"))) m_bc.bc.setSymbol(BARCODE_HIBC_AZTEC); + else + m_bc.bc.setSymbol(BARCODE_AZTEC); - item_val = get_combobox_index("cmbAztecStructAppCount"); - if (item_val) { - m_bc.bc.setStructApp(item_val + 1, get_combobox_index("cmbAztecStructAppIndex") + 1, - get_lineedit_val("txtAztecStructAppID")); + if (get_rad_val(QSL("radAztecSize"))) + m_bc.bc.setOption2(get_cmb_index(QSL("cmbAztecSize")) + 1); + + if (get_rad_val(QSL("radAztecECC"))) + m_bc.bc.setOption1(get_cmb_index(QSL("cmbAztecECC")) + 1); + + set_gs1_mode(get_rad_val(QSL("radAztecGS1"))); + + if ((item_val = get_cmb_index(QSL("cmbAztecStructAppCount"))) != 0) { + m_bc.bc.setStructApp(item_val + 1, get_cmb_index(QSL("cmbAztecStructAppIndex")) + 1, + get_txt_val(QSL("txtAztecStructAppID"))); } break; case BARCODE_MSI_PLESSEY: m_bc.bc.setSymbol(BARCODE_MSI_PLESSEY); - item_val = get_combobox_index("cmbMSICheck"); - if (item_val && m_optionWidget->findChild("chkMSICheckText")->isChecked()) { + item_val = get_cmb_index(QSL("cmbMSICheck")); + if (item_val && get_chk_val(QSL("chkMSICheckText"))) { item_val += 10; } m_bc.bc.setOption2(item_val); @@ -1560,9 +1723,9 @@ void MainWindow::update_preview() case BARCODE_CODE11: m_bc.bc.setSymbol(BARCODE_CODE11); - if (m_optionWidget->findChild("radC11OneCheckDigit")->isChecked()) { + if (get_rad_val(QSL("radC11OneCheckDigit"))) { m_bc.bc.setOption2(1); - } else if (m_optionWidget->findChild("radC11NoCheckDigits")->isChecked()) { + } else if (get_rad_val(QSL("radC11NoCheckDigits"))) { m_bc.bc.setOption2(2); } break; @@ -1573,76 +1736,68 @@ void MainWindow::update_preview() case BARCODE_C25LOGIC: case BARCODE_C25IND: m_bc.bc.setSymbol(symbology); - m_bc.bc.setOption2(get_button_group_index( - QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide")); + m_bc.bc.setOption2(get_rad_grp_index( + QStringList() << QSL("radC25Stand") << QSL("radC25Check") << QSL("radC25CheckHide"))); break; case BARCODE_CODE39: - if(m_optionWidget->findChild("radC39HIBC")->isChecked()) + if (get_rad_val(QSL("radC39HIBC"))) m_bc.bc.setSymbol(BARCODE_HIBC_39); - else - { + else { m_bc.bc.setSymbol(BARCODE_CODE39); - if(m_optionWidget->findChild("radC39Check")->isChecked()) + if (get_rad_val(QSL("radC39Check"))) m_bc.bc.setOption2(1); } break; - case BARCODE_EXCODE39: m_bc.bc.setSymbol(BARCODE_EXCODE39); - if(m_optionWidget->findChild("radC39Check")->isChecked()) + if (get_rad_val(QSL("radC39Check"))) m_bc.bc.setOption2(1); break; - case BARCODE_LOGMARS: m_bc.bc.setSymbol(BARCODE_LOGMARS); - if (m_optionWidget->findChild("radLOGMARSCheck")->isChecked()) { + if (get_rad_val(QSL("radLOGMARSCheck"))) { m_bc.bc.setOption2(1); } break; case BARCODE_CODE16K: m_bc.bc.setSymbol(BARCODE_CODE16K); - set_gs1_mode(m_optionWidget->findChild("radC16kGS1")->isChecked()); + set_gs1_mode(get_rad_val(QSL("radC16kGS1"))); // Row separator height selection uses option 3 in zint_symbol - item_val = m_optionWidget->findChild("cmbC16kRowSepHeight")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbC16kRowSepHeight"))) != 0) { m_bc.bc.setOption3(item_val + 1); // Zero-based } - if (get_checkbox_val("chkC16kNoQuietZones")) { + if (get_chk_val(QSL("chkC16kNoQuietZones"))) { m_bc.bc.setNoQuietZones(true); } break; case BARCODE_CODABAR: m_bc.bc.setSymbol(BARCODE_CODABAR); - if (get_checkbox_val("chkCodabarCheck")) { - m_bc.bc.setOption2(1); - } + m_bc.bc.setOption2(get_rad_grp_index( + QStringList() << QSL("radCodabarStand") << QSL("radCodabarCheckHide") << QSL("radCodabarCheck"))); break; case BARCODE_CODABLOCKF: - if (m_optionWidget->findChild("radCbfHIBC")->isChecked()) { + if (get_rad_val(QSL("radCbfHIBC"))) { m_bc.bc.setSymbol(BARCODE_HIBC_BLOCKF); } else { m_bc.bc.setSymbol(BARCODE_CODABLOCKF); } - item_val = m_optionWidget->findChild("cmbCbfWidth")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbCbfWidth"))) != 0) { m_bc.bc.setOption2(item_val - 1 + 9); } // Height selection uses option 1 in zint_symbol - item_val = m_optionWidget->findChild("cmbCbfHeight")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbCbfHeight"))) != 0) { m_bc.bc.setOption1(item_val); } // Row separator height selection uses option 3 in zint_symbol - item_val = m_optionWidget->findChild("cmbCbfRowSepHeight")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbCbfRowSepHeight"))) != 0) { m_bc.bc.setOption3(item_val + 1); // Zero-based } - if (get_checkbox_val("chkCbfNoQuietZones")) { + if (get_chk_val(QSL("chkCbfNoQuietZones"))) { m_bc.bc.setNoQuietZones(true); } break; @@ -1650,112 +1805,103 @@ void MainWindow::update_preview() case BARCODE_DAFT: m_bc.bc.setSymbol(BARCODE_DAFT); // Kept as percentage, convert to thousandths - m_bc.bc.setOption2((int) (get_doublespinbox_val("spnDAFTTrackerRatio") * 10)); + m_bc.bc.setOption2((int) (get_dspn_val(QSL("spnDAFTTrackerRatio")) * 10)); break; case BARCODE_DATAMATRIX: - if (m_optionWidget->findChild("radDM200HIBC")->isChecked()) + if (get_rad_val(QSL("radDM200HIBC"))) m_bc.bc.setSymbol(BARCODE_HIBC_DM); else m_bc.bc.setSymbol(BARCODE_DATAMATRIX); - if (m_optionWidget->findChild("radDM200GS1")->isChecked()) { + checkBox = m_optionWidget->findChild(QSL("chkDMGSSep")); + if (get_rad_val(QSL("radDM200GS1"))) { set_gs1_mode(true); - checkBox = m_optionWidget->findChild("chkDMGSSep"); checkBox->setEnabled(true); if (checkBox->isChecked()) { m_bc.bc.setGSSep(true); } } else { set_gs1_mode(false); - m_optionWidget->findChild("chkDMGSSep")->setEnabled(false); + checkBox->setEnabled(false); } - m_bc.bc.setOption2(m_optionWidget->findChild("cmbDM200Size")->currentIndex()); + m_bc.bc.setOption2(get_cmb_index(QSL("cmbDM200Size"))); - if (m_optionWidget->findChild("cmbDM200Size")->currentIndex() == 0) { - // Supressing rectangles or allowing DMRE only makes sense if in automatic size mode - findChild("chkDMRectangle")->setEnabled(true); - if (m_optionWidget->findChild("chkDMRectangle")->isChecked()) { + if (get_cmb_index(QSL("cmbDM200Size")) == 0) { + // Suppressing rectangles or allowing DMRE only makes sense if in automatic size mode + m_optionWidget->findChild(QSL("chkDMRectangle"))->setEnabled(true); + if (m_optionWidget->findChild(QSL("chkDMRectangle"))->isChecked()) { m_bc.bc.setOption3(DM_SQUARE); - findChild("chkDMRE")->setEnabled(false); + m_optionWidget->findChild(QSL("chkDMRE"))->setEnabled(false); } else { - findChild("chkDMRE")->setEnabled(true); - if (m_optionWidget->findChild("chkDMRE")->isChecked()) + m_optionWidget->findChild(QSL("chkDMRE"))->setEnabled(true); + if (m_optionWidget->findChild(QSL("chkDMRE"))->isChecked()) m_bc.bc.setOption3(DM_DMRE); else m_bc.bc.setOption3(0); } } else { - findChild("chkDMRectangle")->setEnabled(false); - findChild("chkDMRE")->setEnabled(false); + m_optionWidget->findChild(QSL("chkDMRectangle"))->setEnabled(false); + m_optionWidget->findChild(QSL("chkDMRE"))->setEnabled(false); m_bc.bc.setOption3(0); } - item_val = get_combobox_index("cmbDMStructAppCount"); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbDMStructAppCount"))) != 0) { QString id; - int id1 = get_spinbox_val("spnDMStructAppID"); - int id2 = get_spinbox_val("spnDMStructAppID2"); - m_bc.bc.setStructApp(item_val + 1, get_combobox_index("cmbDMStructAppIndex") + 1, + int id1 = get_spn_val(QSL("spnDMStructAppID")); + int id2 = get_spn_val(QSL("spnDMStructAppID2")); + m_bc.bc.setStructApp(item_val + 1, get_cmb_index(QSL("cmbDMStructAppIndex")) + 1, id.setNum(id1 * 1000 + id2)); } break; case BARCODE_ITF14: m_bc.bc.setSymbol(BARCODE_ITF14); - if (get_checkbox_val("chkITF14NoQuietZones")) { + if (get_chk_val(QSL("chkITF14NoQuietZones"))) { m_bc.bc.setNoQuietZones(true); } break; case BARCODE_QRCODE: - if(m_optionWidget->findChild("radQRHIBC")->isChecked()) + if (get_rad_val(QSL("radQRHIBC"))) m_bc.bc.setSymbol(BARCODE_HIBC_QR); else m_bc.bc.setSymbol(BARCODE_QRCODE); - set_gs1_mode(m_optionWidget->findChild("radQRGS1")->isChecked()); + set_gs1_mode(get_rad_val(QSL("radQRGS1"))); - item_val = m_optionWidget->findChild("cmbQRSize")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbQRSize"))) != 0) { m_bc.bc.setOption2(item_val); } - item_val = m_optionWidget->findChild("cmbQRECC")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbQRECC"))) != 0) { m_bc.bc.setOption1(item_val); } - item_val = m_optionWidget->findChild("cmbQRMask")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbQRMask"))) != 0) { m_bc.bc.setOption3((item_val << 8) | m_bc.bc.option3()); } - if (m_optionWidget->findChild("chkQRFullMultibyte")->isChecked()) { + if (get_chk_val(QSL("chkQRFullMultibyte"))) { m_bc.bc.setOption3(ZINT_FULL_MULTIBYTE | m_bc.bc.option3()); } - - item_val = get_combobox_index("cmbQRStructAppCount"); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbQRStructAppCount"))) != 0) { QString id; - int id_val = get_spinbox_val("spnQRStructAppID"); - m_bc.bc.setStructApp(item_val + 1, get_combobox_index("cmbQRStructAppIndex") + 1, id.setNum(id_val)); + int id_val = get_spn_val(QSL("spnQRStructAppID")); + m_bc.bc.setStructApp(item_val + 1, get_cmb_index(QSL("cmbQRStructAppIndex")) + 1, id.setNum(id_val)); } break; case BARCODE_MICROQR: m_bc.bc.setSymbol(BARCODE_MICROQR); - item_val = m_optionWidget->findChild("cmbMQRSize")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbMQRSize"))) != 0) { m_bc.bc.setOption2(item_val); } - item_val = m_optionWidget->findChild("cmbMQRECC")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbMQRECC"))) != 0) { m_bc.bc.setOption1(item_val); } - item_val = m_optionWidget->findChild("cmbMQRMask")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbMQRMask"))) != 0) { m_bc.bc.setOption3((item_val << 8) | m_bc.bc.option3()); } - if (m_optionWidget->findChild("chkMQRFullMultibyte")->isChecked()) { + if (get_chk_val(QSL("chkMQRFullMultibyte"))) { m_bc.bc.setOption3(ZINT_FULL_MULTIBYTE | m_bc.bc.option3()); } break; @@ -1763,156 +1909,141 @@ void MainWindow::update_preview() case BARCODE_RMQR: m_bc.bc.setSymbol(BARCODE_RMQR); - set_gs1_mode(m_optionWidget->findChild("radRMQRGS1")->isChecked()); + set_gs1_mode(get_rad_val(QSL("radRMQRGS1"))); - item_val = m_optionWidget->findChild("cmbRMQRSize")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbRMQRSize"))) != 0) { m_bc.bc.setOption2(item_val); } - item_val = m_optionWidget->findChild("cmbRMQRECC")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbRMQRECC"))) != 0) { m_bc.bc.setOption1(item_val * 2); // Levels 2 (M) and 4 (H) only } - if (m_optionWidget->findChild("chkRMQRFullMultibyte")->isChecked()) { + if (get_chk_val(QSL("chkRMQRFullMultibyte"))) { m_bc.bc.setOption3(ZINT_FULL_MULTIBYTE); } break; case BARCODE_GRIDMATRIX: m_bc.bc.setSymbol(BARCODE_GRIDMATRIX); - item_val = m_optionWidget->findChild("cmbGridSize")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbGridSize"))) != 0) { m_bc.bc.setOption2(item_val); } - item_val = m_optionWidget->findChild("cmbGridECC")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbGridECC"))) != 0) { m_bc.bc.setOption1(item_val); } - if (m_optionWidget->findChild("chkGridFullMultibyte")->isChecked()) { + if (get_chk_val(QSL("chkGridFullMultibyte"))) { m_bc.bc.setOption3(ZINT_FULL_MULTIBYTE); } - - item_val = get_combobox_index("cmbGridStructAppCount"); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbGridStructAppCount"))) != 0) { QString id; - int id_val = get_spinbox_val("spnGridStructAppID"); - m_bc.bc.setStructApp(item_val + 1, get_combobox_index("cmbGridStructAppIndex") + 1, + int id_val = get_spn_val(QSL("spnGridStructAppID")); + m_bc.bc.setStructApp(item_val + 1, get_cmb_index(QSL("cmbGridStructAppIndex")) + 1, id.setNum(id_val)); } break; case BARCODE_MAXICODE: m_bc.bc.setSymbol(BARCODE_MAXICODE); - if (m_optionWidget->findChild("cmbMaxiMode")->currentIndex() == 0) { + if (get_cmb_index(QSL("cmbMaxiMode")) == 0) { m_bc.bc.setOption1(0); // Auto-determine mode 2 or 3 from primary message (checks that it isn't empty) m_bc.bc.setPrimaryMessage(QString::asprintf("%s%03d%03d", - get_lineedit_val("txtMaxiSCMPostcode").toUtf8().constData(), - get_spinbox_val("spnMaxiSCMCountry"), get_spinbox_val("spnMaxiSCMService"))); - QCheckBox *chkMaxiSCMVV = m_optionWidget->findChild("chkMaxiSCMVV"); - if (chkMaxiSCMVV->isEnabled() && chkMaxiSCMVV->isChecked()) { - m_bc.bc.setOption2(m_optionWidget->findChild("spnMaxiSCMVV")->value() + 1); + get_txt_val(QSL("txtMaxiSCMPostcode")).toUtf8().constData(), + get_spn_val(QSL("spnMaxiSCMCountry")), get_spn_val(QSL("spnMaxiSCMService")))); + QCheckBox *chkMaxiSCMVV = m_optionWidget->findChild(QSL("chkMaxiSCMVV")); + if (chkMaxiSCMVV && chkMaxiSCMVV->isEnabled() && chkMaxiSCMVV->isChecked()) { + m_bc.bc.setOption2(get_spn_val(QSL("spnMaxiSCMVV")) + 1); } } else { - m_bc.bc.setOption1(m_optionWidget->findChild("cmbMaxiMode")->currentIndex() + 3); + m_bc.bc.setOption1(get_cmb_index(QSL("cmbMaxiMode")) + 3); } - item_val = get_combobox_index("cmbMaxiStructAppCount"); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbMaxiStructAppCount"))) != 0) { QString id; // Dummy ID - m_bc.bc.setStructApp(item_val + 1, get_combobox_index("cmbMaxiStructAppIndex") + 1, id); + m_bc.bc.setStructApp(item_val + 1, get_cmb_index(QSL("cmbMaxiStructAppIndex")) + 1, id); } break; case BARCODE_CHANNEL: m_bc.bc.setSymbol(BARCODE_CHANNEL); - if(m_optionWidget->findChild("cmbChannel")->currentIndex() == 0) + if ((item_val = get_cmb_index(QSL("cmbChannel"))) == 0) m_bc.bc.setOption2(0); else - m_bc.bc.setOption2(m_optionWidget->findChild("cmbChannel")->currentIndex() + 2); + m_bc.bc.setOption2(item_val + 2); break; case BARCODE_CODEONE: m_bc.bc.setSymbol(BARCODE_CODEONE); - m_bc.bc.setOption2(m_optionWidget->findChild("cmbC1Size")->currentIndex()); + m_bc.bc.setOption2(get_cmb_index(QSL("cmbC1Size"))); if (m_bc.bc.option2() == 9) { // Version S - recheck_eci = false; + eci_not_set = false; cmbECI->setEnabled(false); lblECI->setEnabled(false); - m_optionWidget->findChild("radC1GS1")->setEnabled(false); + m_optionWidget->findChild(QSL("radC1GS1"))->setEnabled(false); } else { - m_optionWidget->findChild("radC1GS1")->setEnabled(true); - set_gs1_mode(m_optionWidget->findChild("radC1GS1")->isChecked()); + m_optionWidget->findChild(QSL("radC1GS1"))->setEnabled(true); + set_gs1_mode(get_rad_val(QSL("radC1GS1"))); } - - item_val = get_spinbox_val("spnC1StructAppCount"); - if (item_val > 1) { + if (get_cmb_index(QSL("cmbC1Size")) != 9 && (item_val = get_spn_val(QSL("spnC1StructAppCount"))) > 1) { QString id; // Dummy ID - m_bc.bc.setStructApp(item_val, get_spinbox_val("spnC1StructAppIndex"), id); + m_bc.bc.setStructApp(item_val, get_spn_val(QSL("spnC1StructAppIndex")), id); } break; case BARCODE_CODE49: m_bc.bc.setSymbol(BARCODE_CODE49); - set_gs1_mode(m_optionWidget->findChild("radC49GS1")->isChecked()); + set_gs1_mode(get_rad_val(QSL("radC49GS1"))); // Row separator height selection uses option 3 in zint_symbol - item_val = m_optionWidget->findChild("cmbC49RowSepHeight")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbC49RowSepHeight"))) != 0) { m_bc.bc.setOption3(item_val + 1); // Zero-based } - if (get_checkbox_val("chkC49NoQuietZones")) { + if (get_chk_val(QSL("chkC49NoQuietZones"))) { m_bc.bc.setNoQuietZones(true); } break; case BARCODE_CODE93: m_bc.bc.setSymbol(BARCODE_CODE93); - if (get_checkbox_val("chkC93ShowChecks")) { + if (get_chk_val(QSL("chkC93ShowChecks"))) { m_bc.bc.setOption2(1); } break; case BARCODE_HANXIN: m_bc.bc.setSymbol(BARCODE_HANXIN); - item_val = m_optionWidget->findChild("cmbHXSize")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbHXSize"))) != 0) { m_bc.bc.setOption2(item_val); } - item_val = m_optionWidget->findChild("cmbHXECC")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbHXECC"))) != 0) { m_bc.bc.setOption1(item_val); } - item_val = m_optionWidget->findChild("cmbHXMask")->currentIndex(); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbHXMask"))) != 0) { m_bc.bc.setOption3((item_val << 8) | m_bc.bc.option3()); } - if (m_optionWidget->findChild("chkHXFullMultibyte")->isChecked()) { + if (get_chk_val(QSL("chkHXFullMultibyte"))) { m_bc.bc.setOption3(ZINT_FULL_MULTIBYTE | m_bc.bc.option3()); } break; case BARCODE_ULTRA: m_bc.bc.setSymbol(BARCODE_ULTRA); - if (m_optionWidget->findChild("radUltraEcc")->isChecked()) - m_bc.bc.setOption1(get_combobox_index("cmbUltraEcc") + 1); - set_gs1_mode(m_optionWidget->findChild("radUltraGS1")->isChecked()); + if (get_rad_val(QSL("radUltraEcc"))) + m_bc.bc.setOption1(get_cmb_index(QSL("cmbUltraEcc")) + 1); - item_val = get_combobox_index("cmbUltraRevision"); - if (item_val > 0) { + set_gs1_mode(get_rad_val(QSL("radUltraGS1"))); + + if ((item_val = get_cmb_index(QSL("cmbUltraRevision"))) > 0) { m_bc.bc.setOption2(item_val + 1); // Combobox 0-based } - - item_val = get_combobox_index("cmbUltraStructAppCount"); - if (item_val) { + if ((item_val = get_cmb_index(QSL("cmbUltraStructAppCount"))) != 0) { QString id; - int id_val = get_spinbox_val("spnUltraStructAppID"); - m_bc.bc.setStructApp(item_val + 1, get_combobox_index("cmbUltraStructAppIndex") + 1, + int id_val = get_spn_val(QSL("spnUltraStructAppID")); + m_bc.bc.setStructApp(item_val + 1, get_cmb_index(QSL("cmbUltraStructAppIndex")) + 1, id.setNum(id_val)); } break; case BARCODE_VIN: m_bc.bc.setSymbol(BARCODE_VIN); - if (m_optionWidget->findChild("chkVINImportChar")->isChecked()) { + if (get_chk_val(QSL("chkVINImportChar"))) { m_bc.bc.setOption2(m_bc.bc.option2() | 1); // Import character 'I' prefix } break; @@ -1923,14 +2054,14 @@ void MainWindow::update_preview() } m_symbology = m_bc.bc.symbol(); - /* Recheck ECI and Reader Init */ - if (recheck_eci) { + if (eci_not_set) { cmbECI->setEnabled(m_bc.bc.supportsECI()); lblECI->setEnabled(cmbECI->isEnabled()); } chkGS1Parens->setEnabled(m_bc.bc.supportsGS1()); chkGS1NoCheck->setEnabled(m_bc.bc.supportsGS1()); chkRInit->setEnabled(m_bc.bc.supportsReaderInit() && (m_bc.bc.inputMode() & 0x07) != GS1_MODE); + chkCompliantHeight->setEnabled(m_bc.bc.hasCompliantHeight()); if (!grpComposite->isHidden() && chkComposite->isChecked()) m_bc.bc.setOption1(cmbCompType->currentIndex()); @@ -1940,6 +2071,7 @@ void MainWindow::update_preview() } else { m_bc.bc.setHeight(heightb->value()); } + m_bc.bc.setCompliantHeight(chkCompliantHeight->isEnabled() && chkCompliantHeight->isChecked()); m_bc.bc.setECI(cmbECI->isEnabled() ? cmbECI->currentIndex() : 0); m_bc.bc.setGS1Parens(chkGS1Parens->isEnabled() && chkGS1Parens->isChecked()); m_bc.bc.setGS1NoCheck(chkGS1NoCheck->isEnabled() && chkGS1NoCheck->isChecked()); @@ -1966,185 +2098,390 @@ void MainWindow::update_preview() scene->update(); } -/* Shorthand to find widget child as generic QObject */ -QObject *MainWindow::widget_obj(const char *name) { - return m_optionWidget->findChild(name); +void MainWindow::createActions() +{ + // SVG icons from https://github.com/feathericons/feather + // MIT license - see site and "frontend_qt/res/LICENSE_feathericons" + QIcon menuIcon(QSL(":res/menu.svg")); + QIcon copyIcon(QIcon::fromTheme(QSL("edit-copy"), QIcon(QSL(":res/copy.svg")))); + QIcon saveIcon(QIcon::fromTheme(QSL("document-save"), QIcon(QSL(":res/download.svg")))); + QIcon aboutIcon(QSL(":res/zint-qt.ico")); + QIcon helpIcon(QIcon::fromTheme(QSL("help-contents"), QIcon(QSL(":res/help-circle.svg")))); + QIcon quitIcon(QIcon::fromTheme(QSL("window-close"), QIcon(QSL(":res/x.svg")))); + + btnMenu->setIcon(menuIcon); + btnCopyBMP->setIcon(copyIcon); + btnCopySVG->setIcon(copyIcon); + //btnSave->setIcon(saveIcon); // Makes it too big + btnExit->setIcon(quitIcon); + + m_copyBMPAct = new QAction(copyIcon, tr("Copy as &BMP"), this); + m_copyBMPAct->setStatusTip(tr("Copy to clipboard as BMP")); + connect(m_copyBMPAct, SIGNAL(triggered()), this, SLOT(copy_to_clipboard_bmp())); + + m_copyEMFAct = new QAction(copyIcon, tr("Copy as E&MF"), this); + m_copyEMFAct->setStatusTip(tr("Copy to clipboard as EMF")); + connect(m_copyEMFAct, SIGNAL(triggered()), this, SLOT(copy_to_clipboard_emf())); + +#ifdef MAINWINDOW_COPY_EPS /* TODO: see if can get this to work */ + m_copyEPSAct = new QAction(copyIcon, tr("Copy as &EPS"), this); + m_copyEPSAct->setStatusTip(tr("Copy to clipboard as EPS")); + connect(m_copyEPSAct, SIGNAL(triggered()), this, SLOT(copy_to_clipboard_eps())); +#endif + + m_copyGIFAct = new QAction(copyIcon, tr("Copy as &GIF"), this); + m_copyGIFAct->setStatusTip(tr("Copy to clipboard as GIF")); + connect(m_copyGIFAct, SIGNAL(triggered()), this, SLOT(copy_to_clipboard_gif())); + +#ifdef MAINWINDOW_COPY_PCX /* TODO: see if can get this to work */ + m_copyPCXAct = new QAction(copyIcon, tr("Copy as P&CX"), this); + m_copyPCXAct->setStatusTip(tr("Copy to clipboard as PCX")); + connect(m_copyPCXAct, SIGNAL(triggered()), this, SLOT(copy_to_clipboard_pcx())); +#endif + +#ifndef NO_PNG + m_copyPNGAct = new QAction(copyIcon, tr("Copy as &PNG"), this); + m_copyPNGAct->setStatusTip(tr("Copy to clipboard as PNG")); + connect(m_copyPNGAct, SIGNAL(triggered()), this, SLOT(copy_to_clipboard_png())); +#endif + + m_copySVGAct = new QAction(copyIcon, tr("Copy as S&VG"), this); + m_copySVGAct->setStatusTip(tr("Copy to clipboard as SVG")); + connect(m_copySVGAct, SIGNAL(triggered()), this, SLOT(copy_to_clipboard_svg())); + + m_copyTIFAct = new QAction(copyIcon, tr("Copy as &TIF"), this); + m_copyTIFAct->setStatusTip(tr("Copy to clipboard as TIF")); + connect(m_copyTIFAct, SIGNAL(triggered()), this, SLOT(copy_to_clipboard_tif())); + + m_saveAsAct = new QAction(saveIcon, tr("&Save As..."), this); + m_saveAsAct->setStatusTip(tr("Output image to file")); + m_saveAsAct->setShortcut(QKeySequence::Save); + connect(m_saveAsAct, SIGNAL(triggered()), this, SLOT(save())); + + m_helpAct = new QAction(helpIcon, tr("&Help (online)"), this); + m_helpAct->setStatusTip(tr("Online manual")); + m_helpAct->setShortcut(QKeySequence::HelpContents); + connect(m_helpAct, SIGNAL(triggered()), this, SLOT(help())); + + m_aboutAct = new QAction(aboutIcon, tr("&About"), this); + m_aboutAct->setStatusTip(tr("About Zint Barcode Studio")); + connect(m_aboutAct, SIGNAL(triggered()), this, SLOT(about())); + + m_quitAct = new QAction(quitIcon, tr("&Quit"), this); + m_quitAct->setStatusTip(tr("Exit Zint Barcode Studio")); + m_quitAct->setShortcut(quitKeySeq); + connect(m_quitAct, SIGNAL(triggered()), this, SLOT(quit_now())); + + m_copyErrtxtAct = new QAction(copyIcon, tr("&Copy"), this); + m_copyErrtxtAct->setStatusTip(tr("Copy message to clipboard")); + connect(m_copyErrtxtAct, SIGNAL(triggered()), this, SLOT(copy_to_clipboard_errtxt())); +} + +void MainWindow::createMenu() +{ + m_menu = new QMenu(tr("Menu"), this); + + m_menu->addAction(m_copyBMPAct); + m_menu->addAction(m_copyEMFAct); +#ifdef MAINWINDOW_COPY_EPS + m_menu->addAction(m_copyEPSAct); +#endif + m_menu->addAction(m_copyGIFAct); +#ifdef MAINWINDOW_COPY_PCX + m_menu->addAction(m_copyPCXAct); +#endif +#ifndef NO_PNG + m_menu->addAction(m_copyPNGAct); +#endif + m_menu->addAction(m_copySVGAct); + m_menu->addAction(m_copyTIFAct); + m_menu->addSeparator(); + + m_menu->addAction(m_saveAsAct); + m_menu->addSeparator(); + m_menu->addAction(m_helpAct); + m_menu->addAction(m_aboutAct); + m_menu->addSeparator(); + m_menu->addAction(m_quitAct); +} + +void MainWindow::enableActions(bool enabled) +{ + btnCopyBMP->setEnabled(enabled); + btnCopySVG->setEnabled(enabled); + btnSave->setEnabled(enabled); + + m_copyBMPAct->setEnabled(enabled); + m_copyEMFAct->setEnabled(enabled); +#ifdef MAINWINDOW_COPY_EPS + m_copyEPSAct->setEnabled(enabled); +#endif + m_copyGIFAct->setEnabled(enabled); +#ifdef MAINWINDOW_COPY_PCX + m_copyPCXAct->setEnabled(enabled); +#endif +#ifndef NO_PNG + m_copyPNGAct->setEnabled(enabled); +#endif + m_copySVGAct->setEnabled(enabled); + m_copyTIFAct->setEnabled(enabled); + m_saveAsAct->setEnabled(enabled); + + m_saveAsShortcut->setEnabled(enabled); +} + +void MainWindow::copy_to_clipboard(const QString &filename, const QString& name, const char *mimeType) +{ + QClipboard *clipboard = QGuiApplication::clipboard(); + + if (!m_bc.bc.save_to_file(filename)) { + return; + } + + QMimeData *mdata = new QMimeData; + if (mimeType) { + QFile file(filename); + if (!file.open(QIODevice::ReadOnly)) { + delete mdata; + } else { + mdata->setData(mimeType, file.readAll()); + file.close(); + clipboard->setMimeData(mdata, QClipboard::Clipboard); + /*: %1 is format (BMP/EMF etc) */ + statusBar->showMessage(tr("Copied to clipboard as %1").arg(name), statusBarTimeout); + } + } else { + mdata->setImageData(QImage(filename)); + clipboard->setMimeData(mdata, QClipboard::Clipboard); + /*: %1 is format (BMP/EMF etc) */ + statusBar->showMessage(tr("Copied to clipboard as %1").arg(name), statusBarTimeout); + } + + QFile::remove(filename); +} + +void MainWindow::errtxtBar_clear() +{ + errtxtBar->clearMessage(); + if (!errtxtBarContainer->isHidden()) { + errtxtBarContainer->hide(); + errtxtBarContainer->update(); + update_preview(); + } +} + +void MainWindow::errtxtBar_set(bool isError) +{ + if (!m_bc.bc.hasErrors()) { + errtxtBar_clear(); + } else { + errtxtBar->showMessage(m_bc.bc.lastError()); + errtxtBar->setStyleSheet(isError + ? QSL("QStatusBar {background:white; color:#dd0000;}") + : QSL("QStatusBar {background:white; color:#ff6f00;}")); + if (errtxtBarContainer->isHidden()) { + errtxtBarContainer->show(); + errtxtBarContainer->update(); + update_preview(); + } + } +} + +QPoint MainWindow::get_context_menu_pos(const QPoint &pos, QWidget *widget) +{ + QPoint menuPos(pos); + if (menuPos.x() == 0 && menuPos.y() == 0) { // May have been invoked by menu key + QPoint mousePos(widget->mapFromGlobal(QCursor::pos())); + if (widget->rect().contains(mousePos)) { + menuPos = mousePos; + } + } + + return widget->mapToGlobal(menuPos); +} + +/* Shorthand to find widget child as generic QWidget */ +QWidget *MainWindow::get_widget(const QString &name) +{ + return m_optionWidget->findChild(name); } /* Return settings subsection name for a symbol */ -const char *MainWindow::get_setting_name(int symbology) { +const QString &MainWindow::get_setting_name(int symbology) +{ struct item { - const char *name; + const QString name; int define; int val; }; static const struct item ndata[] = { - { "", -1, 0 }, - { "code11", BARCODE_CODE11, 1 }, - { "c25standard", BARCODE_C25STANDARD, 2 }, - { "c25inter", BARCODE_C25INTER, 3 }, - { "c25iata", BARCODE_C25IATA, 4 }, - { "", -1, 5 }, - { "c25logic", BARCODE_C25LOGIC, 6 }, - { "c25ind", BARCODE_C25IND, 7 }, - { "code39", BARCODE_CODE39, 8 }, - { "excode39", BARCODE_EXCODE39, 9 }, - { "", -1, 10 }, - { "", -1, 11 }, - { "", -1, 12 }, - { "eanx", BARCODE_EANX, 13 }, - { "eanx", BARCODE_EANX_CHK, 14 }, - { "", -1, 15 }, - { "code128", BARCODE_GS1_128, 16 }, - { "", -1, 17 }, - { "codabar", BARCODE_CODABAR, 18 }, - { "", -1, 19 }, - { "code128", BARCODE_CODE128, 20 }, - { "dpleit", BARCODE_DPLEIT, 21 }, - { "dpident", BARCODE_DPIDENT, 22 }, - { "code16k", BARCODE_CODE16K, 23 }, - { "code49", BARCODE_CODE49, 24 }, - { "code93", BARCODE_CODE93, 25 }, - { "", -1, 26 }, - { "", -1, 27 }, - { "flat", BARCODE_FLAT, 28 }, - { "dbar_omn", BARCODE_DBAR_OMN, 29 }, - { "dbar_ltd", BARCODE_DBAR_LTD, 30 }, - { "dbar_exp", BARCODE_DBAR_EXP, 31 }, - { "telepen", BARCODE_TELEPEN, 32 }, - { "", -1, 33 }, - { "upca", BARCODE_UPCA, 34 }, - { "upca", BARCODE_UPCA_CHK, 35 }, - { "", -1, 36 }, - { "upce", BARCODE_UPCE, 37 }, - { "upce", BARCODE_UPCE_CHK, 38 }, - { "", -1, 39 }, - { "postnet", BARCODE_POSTNET, 40 }, - { "", -1, 41 }, - { "", -1, 42 }, - { "", -1, 43 }, - { "", -1, 44 }, - { "", -1, 45 }, - { "", -1, 46 }, - { "msi_plessey", BARCODE_MSI_PLESSEY, 47 }, - { "", -1, 48 }, - { "fim", BARCODE_FIM, 49 }, - { "logmars", BARCODE_LOGMARS, 50 }, - { "pharma", BARCODE_PHARMA, 51 }, - { "pzn", BARCODE_PZN, 52 }, - { "pharma_two", BARCODE_PHARMA_TWO, 53 }, - { "", -1, 54 }, - { "pdf417", BARCODE_PDF417, 55 }, - { "pdf417", BARCODE_PDF417COMP, 56 }, - { "maxicode", BARCODE_MAXICODE, 57 }, - { "qrcode", BARCODE_QRCODE, 58 }, - { "", -1, 59 }, - { "code128", BARCODE_CODE128B, 60 }, - { "", -1, 61 }, - { "", -1, 62 }, - { "auspost", BARCODE_AUSPOST, 63 }, - { "", -1, 64 }, - { "", -1, 65 }, - { "ausreply", BARCODE_AUSREPLY, 66 }, - { "ausroute", BARCODE_AUSROUTE, 67 }, - { "ausredirect", BARCODE_AUSREDIRECT, 68 }, - { "isbnx", BARCODE_ISBNX, 69 }, - { "rm4scc", BARCODE_RM4SCC, 70 }, - { "datamatrix", BARCODE_DATAMATRIX, 71 }, - { "ean14", BARCODE_EAN14, 72 }, - { "vin", BARCODE_VIN, 73 }, - { "codablockf", BARCODE_CODABLOCKF, 74 }, - { "nve18", BARCODE_NVE18, 75 }, - { "japanpost", BARCODE_JAPANPOST, 76 }, - { "koreapost", BARCODE_KOREAPOST, 77 }, - { "", -1, 78 }, - { "dbar_stk", BARCODE_DBAR_STK, 79 }, - { "dbar_omnstk", BARCODE_DBAR_OMNSTK, 80 }, - { "dbar_expstk", BARCODE_DBAR_EXPSTK, 81 }, - { "planet", BARCODE_PLANET, 82 }, - { "", -1, 83 }, - { "micropdf417", BARCODE_MICROPDF417, 84 }, - { "usps_imail", BARCODE_USPS_IMAIL, 85 }, - { "plessey", BARCODE_PLESSEY, 86 }, - { "telepen_num", BARCODE_TELEPEN_NUM, 87 }, - { "", -1, 88 }, - { "itf14", BARCODE_ITF14, 89 }, - { "kix", BARCODE_KIX, 90 }, - { "", -1, 91 }, - { "aztec", BARCODE_AZTEC, 92 }, - { "daft", BARCODE_DAFT, 93 }, - { "", -1, 94 }, - { "", -1, 95 }, - { "dpd", BARCODE_DPD, 96 }, - { "microqr", BARCODE_MICROQR, 97 }, - { "code128", BARCODE_HIBC_128, 98 }, - { "code39", BARCODE_HIBC_39, 99 }, - { "", -1, 100 }, - { "", -1, 101 }, - { "datamatrix", BARCODE_HIBC_DM, 102 }, - { "", -1, 103 }, - { "qrcode", BARCODE_HIBC_QR, 104 }, - { "", -1, 105 }, - { "pdf417", BARCODE_HIBC_PDF, 106 }, - { "", -1, 107 }, - { "micropdf417", BARCODE_HIBC_MICPDF, 108 }, - { "", -1, 109 }, - { "codablockf", BARCODE_HIBC_BLOCKF, 110 }, - { "", -1, 111 }, - { "aztec", BARCODE_HIBC_AZTEC, 112 }, - { "", -1, 113 }, - { "", -1, 114 }, - { "dotcode", BARCODE_DOTCODE, 115 }, - { "hanxin", BARCODE_HANXIN, 116 }, - { "", -1, 117 }, - { "", -1, 118 }, - { "", -1, 119 }, - { "", -1, 120 }, - { "mailmark", BARCODE_MAILMARK, 121 }, - { "", -1, 122 }, - { "", -1, 123 }, - { "", -1, 124 }, - { "", -1, 125 }, - { "", -1, 126 }, - { "", -1, 127 }, - { "azrune", BARCODE_AZRUNE, 128 }, - { "code32", BARCODE_CODE32, 129 }, - { "eanx", BARCODE_EANX_CC, 130 }, - { "code128", BARCODE_GS1_128_CC, 131 }, - { "dbar_omn", BARCODE_DBAR_OMN_CC, 132 }, - { "dbar_ltd", BARCODE_DBAR_LTD_CC, 133 }, - { "dbar_exp", BARCODE_DBAR_EXP_CC, 134 }, - { "upca", BARCODE_UPCA_CC, 135 }, - { "upce", BARCODE_UPCE_CC, 136 }, - { "dbar_stk", BARCODE_DBAR_STK_CC, 137 }, - { "dbar_omnstk", BARCODE_DBAR_OMNSTK_CC, 138 }, - { "dbar_expstk", BARCODE_DBAR_EXPSTK_CC, 139 }, - { "channel", BARCODE_CHANNEL, 140 }, - { "codeone", BARCODE_CODEONE, 141 }, - { "gridmatrix", BARCODE_GRIDMATRIX, 142 }, - { "upnqr", BARCODE_UPNQR, 143 }, - { "ultra", BARCODE_ULTRA, 144 }, - { "rmqr", BARCODE_RMQR, 145 }, + { QSL(""), -1, 0 }, + { QSL("code11"), BARCODE_CODE11, 1 }, + { QSL("c25standard"), BARCODE_C25STANDARD, 2 }, + { QSL("c25inter"), BARCODE_C25INTER, 3 }, + { QSL("c25iata"), BARCODE_C25IATA, 4 }, + { QSL(""), -1, 5 }, + { QSL("c25logic"), BARCODE_C25LOGIC, 6 }, + { QSL("c25ind"), BARCODE_C25IND, 7 }, + { QSL("code39"), BARCODE_CODE39, 8 }, + { QSL("excode39"), BARCODE_EXCODE39, 9 }, + { QSL(""), -1, 10 }, + { QSL(""), -1, 11 }, + { QSL(""), -1, 12 }, + { QSL("eanx"), BARCODE_EANX, 13 }, + { QSL("eanx"), BARCODE_EANX_CHK, 14 }, + { QSL(""), -1, 15 }, + { QSL("code128"), BARCODE_GS1_128, 16 }, + { QSL(""), -1, 17 }, + { QSL("codabar"), BARCODE_CODABAR, 18 }, + { QSL(""), -1, 19 }, + { QSL("code128"), BARCODE_CODE128, 20 }, + { QSL("dpleit"), BARCODE_DPLEIT, 21 }, + { QSL("dpident"), BARCODE_DPIDENT, 22 }, + { QSL("code16k"), BARCODE_CODE16K, 23 }, + { QSL("code49"), BARCODE_CODE49, 24 }, + { QSL("code93"), BARCODE_CODE93, 25 }, + { QSL(""), -1, 26 }, + { QSL(""), -1, 27 }, + { QSL("flat"), BARCODE_FLAT, 28 }, + { QSL("dbar_omn"), BARCODE_DBAR_OMN, 29 }, + { QSL("dbar_ltd"), BARCODE_DBAR_LTD, 30 }, + { QSL("dbar_exp"), BARCODE_DBAR_EXP, 31 }, + { QSL("telepen"), BARCODE_TELEPEN, 32 }, + { QSL(""), -1, 33 }, + { QSL("upca"), BARCODE_UPCA, 34 }, + { QSL("upca"), BARCODE_UPCA_CHK, 35 }, + { QSL(""), -1, 36 }, + { QSL("upce"), BARCODE_UPCE, 37 }, + { QSL("upce"), BARCODE_UPCE_CHK, 38 }, + { QSL(""), -1, 39 }, + { QSL("postnet"), BARCODE_POSTNET, 40 }, + { QSL(""), -1, 41 }, + { QSL(""), -1, 42 }, + { QSL(""), -1, 43 }, + { QSL(""), -1, 44 }, + { QSL(""), -1, 45 }, + { QSL(""), -1, 46 }, + { QSL("msi_plessey"), BARCODE_MSI_PLESSEY, 47 }, + { QSL(""), -1, 48 }, + { QSL("fim"), BARCODE_FIM, 49 }, + { QSL("logmars"), BARCODE_LOGMARS, 50 }, + { QSL("pharma"), BARCODE_PHARMA, 51 }, + { QSL("pzn"), BARCODE_PZN, 52 }, + { QSL("pharma_two"), BARCODE_PHARMA_TWO, 53 }, + { QSL(""), -1, 54 }, + { QSL("pdf417"), BARCODE_PDF417, 55 }, + { QSL("pdf417"), BARCODE_PDF417COMP, 56 }, + { QSL("maxicode"), BARCODE_MAXICODE, 57 }, + { QSL("qrcode"), BARCODE_QRCODE, 58 }, + { QSL(""), -1, 59 }, + { QSL("code128"), BARCODE_CODE128B, 60 }, + { QSL(""), -1, 61 }, + { QSL(""), -1, 62 }, + { QSL("auspost"), BARCODE_AUSPOST, 63 }, + { QSL(""), -1, 64 }, + { QSL(""), -1, 65 }, + { QSL("ausreply"), BARCODE_AUSREPLY, 66 }, + { QSL("ausroute"), BARCODE_AUSROUTE, 67 }, + { QSL("ausredirect"), BARCODE_AUSREDIRECT, 68 }, + { QSL("isbnx"), BARCODE_ISBNX, 69 }, + { QSL("rm4scc"), BARCODE_RM4SCC, 70 }, + { QSL("datamatrix"), BARCODE_DATAMATRIX, 71 }, + { QSL("ean14"), BARCODE_EAN14, 72 }, + { QSL("vin"), BARCODE_VIN, 73 }, + { QSL("codablockf"), BARCODE_CODABLOCKF, 74 }, + { QSL("nve18"), BARCODE_NVE18, 75 }, + { QSL("japanpost"), BARCODE_JAPANPOST, 76 }, + { QSL("koreapost"), BARCODE_KOREAPOST, 77 }, + { QSL(""), -1, 78 }, + { QSL("dbar_stk"), BARCODE_DBAR_STK, 79 }, + { QSL("dbar_omnstk"), BARCODE_DBAR_OMNSTK, 80 }, + { QSL("dbar_expstk"), BARCODE_DBAR_EXPSTK, 81 }, + { QSL("planet"), BARCODE_PLANET, 82 }, + { QSL(""), -1, 83 }, + { QSL("micropdf417"), BARCODE_MICROPDF417, 84 }, + { QSL("usps_imail"), BARCODE_USPS_IMAIL, 85 }, + { QSL("plessey"), BARCODE_PLESSEY, 86 }, + { QSL("telepen_num"), BARCODE_TELEPEN_NUM, 87 }, + { QSL(""), -1, 88 }, + { QSL("itf14"), BARCODE_ITF14, 89 }, + { QSL("kix"), BARCODE_KIX, 90 }, + { QSL(""), -1, 91 }, + { QSL("aztec"), BARCODE_AZTEC, 92 }, + { QSL("daft"), BARCODE_DAFT, 93 }, + { QSL(""), -1, 94 }, + { QSL(""), -1, 95 }, + { QSL("dpd"), BARCODE_DPD, 96 }, + { QSL("microqr"), BARCODE_MICROQR, 97 }, + { QSL("code128"), BARCODE_HIBC_128, 98 }, + { QSL("code39"), BARCODE_HIBC_39, 99 }, + { QSL(""), -1, 100 }, + { QSL(""), -1, 101 }, + { QSL("datamatrix"), BARCODE_HIBC_DM, 102 }, + { QSL(""), -1, 103 }, + { QSL("qrcode"), BARCODE_HIBC_QR, 104 }, + { QSL(""), -1, 105 }, + { QSL("pdf417"), BARCODE_HIBC_PDF, 106 }, + { QSL(""), -1, 107 }, + { QSL("micropdf417"), BARCODE_HIBC_MICPDF, 108 }, + { QSL(""), -1, 109 }, + { QSL("codablockf"), BARCODE_HIBC_BLOCKF, 110 }, + { QSL(""), -1, 111 }, + { QSL("aztec"), BARCODE_HIBC_AZTEC, 112 }, + { QSL(""), -1, 113 }, + { QSL(""), -1, 114 }, + { QSL("dotcode"), BARCODE_DOTCODE, 115 }, + { QSL("hanxin"), BARCODE_HANXIN, 116 }, + { QSL(""), -1, 117 }, + { QSL(""), -1, 118 }, + { QSL(""), -1, 119 }, + { QSL(""), -1, 120 }, + { QSL("mailmark"), BARCODE_MAILMARK, 121 }, + { QSL(""), -1, 122 }, + { QSL(""), -1, 123 }, + { QSL(""), -1, 124 }, + { QSL(""), -1, 125 }, + { QSL(""), -1, 126 }, + { QSL(""), -1, 127 }, + { QSL("azrune"), BARCODE_AZRUNE, 128 }, + { QSL("code32"), BARCODE_CODE32, 129 }, + { QSL("eanx"), BARCODE_EANX_CC, 130 }, + { QSL("code128"), BARCODE_GS1_128_CC, 131 }, + { QSL("dbar_omn"), BARCODE_DBAR_OMN_CC, 132 }, + { QSL("dbar_ltd"), BARCODE_DBAR_LTD_CC, 133 }, + { QSL("dbar_exp"), BARCODE_DBAR_EXP_CC, 134 }, + { QSL("upca"), BARCODE_UPCA_CC, 135 }, + { QSL("upce"), BARCODE_UPCE_CC, 136 }, + { QSL("dbar_stk"), BARCODE_DBAR_STK_CC, 137 }, + { QSL("dbar_omnstk"), BARCODE_DBAR_OMNSTK_CC, 138 }, + { QSL("dbar_expstk"), BARCODE_DBAR_EXPSTK_CC, 139 }, + { QSL("channel"), BARCODE_CHANNEL, 140 }, + { QSL("codeone"), BARCODE_CODEONE, 141 }, + { QSL("gridmatrix"), BARCODE_GRIDMATRIX, 142 }, + { QSL("upnqr"), BARCODE_UPNQR, 143 }, + { QSL("ultra"), BARCODE_ULTRA, 144 }, + { QSL("rmqr"), BARCODE_RMQR, 145 }, }; static const int data_size = sizeof(ndata) / sizeof(struct item); if (symbology < 0 || symbology >= data_size) { - return ""; + return ndata[0].name; // "" } if (ndata[symbology].val != symbology || (ndata[symbology].define != -1 && ndata[symbology].define != symbology)) { // Self-check fprintf(stderr, "MainWindow::get_setting_name: ndata table out of sync (%d)\n", symbology); - return ""; + return ndata[0].name; // "" } return ndata[symbology].name; } /* Helper to return index of selected radio button in group, checking for NULL */ -int MainWindow::get_button_group_index(const QStringList &children) { +int MainWindow::get_rad_grp_index(const QStringList &names) +{ if (m_optionWidget) { QRadioButton *radioButton; - for (int index = 0; index < children.size(); index++) { - radioButton = m_optionWidget->findChild(children[index]); + for (int index = 0; index < names.size(); index++) { + radioButton = m_optionWidget->findChild(names[index]); if (radioButton && radioButton->isChecked()) { return index; } @@ -2154,15 +2491,16 @@ int MainWindow::get_button_group_index(const QStringList &children) { } /* Helper to set radio button in group from index in settings, checking for NULL */ -void MainWindow::set_radiobutton_from_setting(QSettings &settings, const QString &setting, - const QStringList &children, int default_val) { +void MainWindow::set_rad_from_setting(QSettings &settings, const QString &setting, + const QStringList &names, int default_val) +{ if (m_optionWidget) { int index = settings.value(setting, default_val).toInt(); QRadioButton *radioButton; - if (index >= 0 && index < children.size()) { - radioButton = m_optionWidget->findChild(children[index]); + if (index >= 0 && index < names.size()) { + radioButton = m_optionWidget->findChild(names[index]); } else { - radioButton = m_optionWidget->findChild(children[0]); + radioButton = m_optionWidget->findChild(names[0]); } if (radioButton) { radioButton->setChecked(true); @@ -2170,134 +2508,149 @@ void MainWindow::set_radiobutton_from_setting(QSettings &settings, const QString } } +/* Helper to see if radio button checked, checking for NULL and whether enabled */ +bool MainWindow::get_rad_val(const QString &name) +{ + QRadioButton *radioButton = m_optionWidget ? m_optionWidget->findChild(name) : nullptr; + return radioButton && radioButton->isEnabled() && radioButton->isChecked(); +} + /* Helper to return index of selected item in combobox, checking for NULL */ -int MainWindow::get_combobox_index(const QString &child) { - QComboBox *comboBox = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; +int MainWindow::get_cmb_index(const QString &name) +{ + QComboBox *comboBox = m_optionWidget ? m_optionWidget->findChild(name) : nullptr; return comboBox ? comboBox->currentIndex() : 0; } /* Helper to set item in combobox from index in settings, checking for NULL */ -void MainWindow::set_combobox_from_setting(QSettings &settings, const QString &setting, const QString &child, - int default_val) { - QComboBox *comboBox = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; +void MainWindow::set_cmb_from_setting(QSettings &settings, const QString &setting, const QString &name, + int default_val) +{ + QComboBox *comboBox = m_optionWidget ? m_optionWidget->findChild(name) : nullptr; if (comboBox) { comboBox->setCurrentIndex(settings.value(setting, default_val).toInt()); } } /* Helper to return if checkbox checked, checking for NULL */ -int MainWindow::get_checkbox_val(const QString &child) { - QCheckBox *checkBox = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; +int MainWindow::get_chk_val(const QString &name) +{ + QCheckBox *checkBox = m_optionWidget ? m_optionWidget->findChild(name) : nullptr; return checkBox && checkBox->isChecked() ? 1 : 0; } /* Helper to set checkbox from settings, checking for NULL */ -void MainWindow::set_checkbox_from_setting(QSettings &settings, const QString &setting, const QString &child, - int default_val) { - QCheckBox *checkBox = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; +void MainWindow::set_chk_from_setting(QSettings &settings, const QString &setting, const QString &name, + int default_val) +{ + QCheckBox *checkBox = m_optionWidget ? m_optionWidget->findChild(name) : nullptr; if (checkBox) { checkBox->setChecked(settings.value(setting, default_val).toInt() ? true : false); } } /* Helper to return value of double spinner, checking for NULL */ -double MainWindow::get_doublespinbox_val(const QString &child) { - QDoubleSpinBox *spinBox = m_optionWidget->findChild(child); +double MainWindow::get_dspn_val(const QString &name) +{ + QDoubleSpinBox *spinBox = m_optionWidget->findChild(name); return spinBox ? spinBox->value() : 0.0; } /* Helper to set double spinner from settings, checking for NULL */ -void MainWindow::set_doublespinbox_from_setting(QSettings &settings, const QString &setting, const QString &child, - float default_val) { - QDoubleSpinBox *spinBox = m_optionWidget->findChild(child); +void MainWindow::set_dspn_from_setting(QSettings &settings, const QString &setting, const QString &name, + float default_val) +{ + QDoubleSpinBox *spinBox = m_optionWidget->findChild(name); if (spinBox) { spinBox->setValue(settings.value(setting, default_val).toFloat()); } } /* Helper to return text of line edit, checking for NULL */ -QString MainWindow::get_lineedit_val(const QString &child) { - QLineEdit *lineEdit = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; - return lineEdit ? lineEdit->text() : ""; +QString MainWindow::get_txt_val(const QString &name) +{ + QLineEdit *lineEdit = m_optionWidget ? m_optionWidget->findChild(name) : nullptr; + return lineEdit ? lineEdit->text() : QSL(""); } /* Helper to set line edit from settings, checking for NULL */ -void MainWindow::set_lineedit_from_setting(QSettings &settings, const QString &setting, const QString &child, - const char *default_val) { - QLineEdit *lineEdit = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; +void MainWindow::set_txt_from_setting(QSettings &settings, const QString &setting, const QString &name, + const QString &default_val) +{ + QLineEdit *lineEdit = m_optionWidget ? m_optionWidget->findChild(name) : nullptr; if (lineEdit) { lineEdit->setText(settings.value(setting, default_val).toString()); } } /* Helper to return value of spin box, checking for NULL */ -int MainWindow::get_spinbox_val(const QString &child) { - QSpinBox *spinBox = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; +int MainWindow::get_spn_val(const QString &name) +{ + QSpinBox *spinBox = m_optionWidget ? m_optionWidget->findChild(name) : nullptr; return spinBox ? spinBox->value() : 0; } /* Helper to set spin box from settings, checking for NULL */ -void MainWindow::set_spinbox_from_setting(QSettings &settings, const QString &setting, const QString &child, - int default_val) { - QSpinBox *spinBox = m_optionWidget ? m_optionWidget->findChild(child) : nullptr; +void MainWindow::set_spn_from_setting(QSettings &settings, const QString &setting, const QString &name, + int default_val) +{ + QSpinBox *spinBox = m_optionWidget ? m_optionWidget->findChild(name) : nullptr; if (spinBox) { spinBox->setValue(settings.value(setting, default_val).toInt()); } } /* Save settings for an individual symbol */ -void MainWindow::save_sub_settings(QSettings &settings, int symbology) { - - const char *name = get_setting_name(symbology); - if (*name) { - settings.setValue(QString("studio/bc/%1/data").arg(name), txtData->text()); +void MainWindow::save_sub_settings(QSettings &settings, int symbology) +{ + const QString &name = get_setting_name(symbology); + if (!name.isEmpty()) { + settings.setValue(QSL("studio/bc/%1/data").arg(name), txtData->text()); if (!grpComposite->isHidden()) { - settings.setValue(QString("studio/bc/%1/composite_text").arg(name), txtComposite->toPlainText()); - settings.setValue(QString("studio/bc/%1/chk_composite").arg(name), chkComposite->isChecked() ? 1 : 0); - settings.setValue(QString("studio/bc/%1/comp_type").arg(name), cmbCompType->currentIndex()); + settings.setValue(QSL("studio/bc/%1/composite_text").arg(name), txtComposite->toPlainText()); + settings.setValue(QSL("studio/bc/%1/chk_composite").arg(name), chkComposite->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/bc/%1/comp_type").arg(name), cmbCompType->currentIndex()); } if (cmbECI->isEnabled()) { - settings.setValue(QString("studio/bc/%1/eci").arg(name), cmbECI->currentIndex()); + settings.setValue(QSL("studio/bc/%1/eci").arg(name), cmbECI->currentIndex()); } - settings.setValue(QString("studio/bc/%1/chk_escape").arg(name), chkEscape->isChecked() ? 1 : 0); - settings.setValue(QString("studio/bc/%1/chk_data").arg(name), chkData->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/bc/%1/chk_escape").arg(name), chkEscape->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/bc/%1/chk_data").arg(name), chkData->isChecked() ? 1 : 0); if (chkRInit->isEnabled()) { - settings.setValue(QString("studio/bc/%1/chk_rinit").arg(name), chkRInit->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/bc/%1/chk_rinit").arg(name), chkRInit->isChecked() ? 1 : 0); } - settings.setValue(QString("studio/bc/%1/chk_gs1parens").arg(name), chkGS1Parens->isChecked() ? 1 : 0); - settings.setValue(QString("studio/bc/%1/chk_gs1nocheck").arg(name), chkGS1NoCheck->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/bc/%1/chk_gs1parens").arg(name), chkGS1Parens->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/bc/%1/chk_gs1nocheck").arg(name), chkGS1NoCheck->isChecked() ? 1 : 0); if (chkAutoHeight->isEnabled()) { settings.setValue( - QString("studio/bc/%1/appearance/autoheight").arg(name), chkAutoHeight->isChecked() ? 1 : 0); - settings.setValue(QString("studio/bc/%1/appearance/height").arg(name), heightb->value()); + QSL("studio/bc/%1/appearance/autoheight").arg(name), chkAutoHeight->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/bc/%1/appearance/height").arg(name), heightb->value()); } - settings.setValue(QString("studio/bc/%1/appearance/border").arg(name), bwidth->value()); - settings.setValue(QString("studio/bc/%1/appearance/whitespace").arg(name), spnWhitespace->value()); - settings.setValue(QString("studio/bc/%1/appearance/vwhitespace").arg(name), spnVWhitespace->value()); - settings.setValue(QString("studio/bc/%1/appearance/scale").arg(name), spnScale->value()); - settings.setValue(QString("studio/bc/%1/appearance/border_type").arg(name), btype->currentIndex()); + settings.setValue(QSL("studio/bc/%1/appearance/border").arg(name), bwidth->value()); + settings.setValue(QSL("studio/bc/%1/appearance/whitespace").arg(name), spnWhitespace->value()); + settings.setValue(QSL("studio/bc/%1/appearance/vwhitespace").arg(name), spnVWhitespace->value()); + settings.setValue(QSL("studio/bc/%1/appearance/scale").arg(name), spnScale->value()); + settings.setValue(QSL("studio/bc/%1/appearance/border_type").arg(name), btype->currentIndex()); if (chkHRTShow->isEnabled()) { - 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(QSL("studio/bc/%1/appearance/font_setting").arg(name), cmbFontSetting->currentIndex()); + settings.setValue(QSL("studio/bc/%1/appearance/chk_hrt_show").arg(name), chkHRTShow->isChecked() ? 1 : 0); } - settings.setValue(QString("studio/bc/%1/appearance/chk_cmyk").arg(name), chkCMYK->isChecked() ? 1 : 0); + settings.setValue(QSL("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()); + QSL("studio/bc/%1/appearance/chk_quietzones").arg(name), chkQuietZones->isChecked() ? 1 : 0); + settings.setValue(QSL("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); - settings.setValue(QString("studio/bc/%1/appearance/dot_size").arg(name), spnDotSize->value()); + settings.setValue(QSL("studio/bc/%1/appearance/chk_dotty").arg(name), chkDotty->isChecked() ? 1 : 0); + settings.setValue(QSL("studio/bc/%1/appearance/dot_size").arg(name), spnDotSize->value()); } - settings.setValue(QString("studio/bc/%1/ink/red").arg(name), m_fgcolor.red()); - settings.setValue(QString("studio/bc/%1/ink/green").arg(name), m_fgcolor.green()); - settings.setValue(QString("studio/bc/%1/ink/blue").arg(name), m_fgcolor.blue()); - settings.setValue(QString("studio/bc/%1/ink/alpha").arg(name), m_fgcolor.alpha()); - settings.setValue(QString("studio/bc/%1/paper/red").arg(name), m_bgcolor.red()); - settings.setValue(QString("studio/bc/%1/paper/green").arg(name), m_bgcolor.green()); - settings.setValue(QString("studio/bc/%1/paper/blue").arg(name), m_bgcolor.blue()); - settings.setValue(QString("studio/bc/%1/paper/alpha").arg(name), m_bgcolor.alpha()); + settings.setValue(QSL("studio/bc/%1/ink/red").arg(name), m_fgcolor.red()); + settings.setValue(QSL("studio/bc/%1/ink/green").arg(name), m_fgcolor.green()); + settings.setValue(QSL("studio/bc/%1/ink/blue").arg(name), m_fgcolor.blue()); + settings.setValue(QSL("studio/bc/%1/ink/alpha").arg(name), m_fgcolor.alpha()); + settings.setValue(QSL("studio/bc/%1/paper/red").arg(name), m_bgcolor.red()); + settings.setValue(QSL("studio/bc/%1/paper/green").arg(name), m_bgcolor.green()); + settings.setValue(QSL("studio/bc/%1/paper/blue").arg(name), m_bgcolor.blue()); + settings.setValue(QSL("studio/bc/%1/paper/alpha").arg(name), m_bgcolor.alpha()); } switch (symbology) { @@ -2306,340 +2659,346 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology) { case BARCODE_GS1_128: case BARCODE_GS1_128_CC: case BARCODE_HIBC_128: - settings.setValue("studio/bc/code128/encoding_mode", get_button_group_index( - QStringList() << "radC128Stand" << "radC128EAN" << "radC128CSup" << "radC128HIBC")); + settings.setValue(QSL("studio/bc/code128/encoding_mode"), get_rad_grp_index( + QStringList() << QSL("radC128Stand") << QSL("radC128EAN") << QSL("radC128CSup") + << QSL("radC128HIBC"))); break; case BARCODE_PDF417: case BARCODE_PDF417COMP: case BARCODE_HIBC_PDF: - settings.setValue("studio/bc/pdf417/cols", get_combobox_index("cmbPDFCols")); - settings.setValue("studio/bc/pdf417/ecc", get_combobox_index("cmbPDFECC")); - settings.setValue("studio/bc/pdf417/encoding_mode", get_button_group_index( - QStringList() << "radPDFStand" << "radPDFTruncated" << "radPDFHIBC")); - settings.setValue("studio/bc/pdf417/structapp_count", get_spinbox_val("spnPDFStructAppCount")); - settings.setValue("studio/bc/pdf417/structapp_index", get_spinbox_val("spnPDFStructAppIndex")); - settings.setValue("studio/bc/pdf417/structapp_id", get_lineedit_val("txtPDFStructAppID")); + settings.setValue(QSL("studio/bc/pdf417/cols"), get_cmb_index(QSL("cmbPDFCols"))); + settings.setValue(QSL("studio/bc/pdf417/ecc"), get_cmb_index(QSL("cmbPDFECC"))); + settings.setValue(QSL("studio/bc/pdf417/encoding_mode"), get_rad_grp_index( + QStringList() << QSL("radPDFStand") << QSL("radPDFTruncated") << QSL("radPDFHIBC"))); + settings.setValue(QSL("studio/bc/pdf417/structapp_count"), get_spn_val(QSL("spnPDFStructAppCount"))); + settings.setValue(QSL("studio/bc/pdf417/structapp_index"), get_spn_val(QSL("spnPDFStructAppIndex"))); + settings.setValue(QSL("studio/bc/pdf417/structapp_id"), get_txt_val(QSL("txtPDFStructAppID"))); break; case BARCODE_MICROPDF417: case BARCODE_HIBC_MICPDF: - settings.setValue("studio/bc/micropdf417/cols", get_combobox_index("cmbMPDFCols")); - settings.setValue("studio/bc/micropdf417/encoding_mode", get_button_group_index( - QStringList() << "radMPDFStand" << "radMPDFHIBC")); - settings.setValue("studio/bc/micropdf417/structapp_count", get_spinbox_val("spnMPDFStructAppCount")); - settings.setValue("studio/bc/micropdf417/structapp_index", get_spinbox_val("spnMPDFStructAppIndex")); - settings.setValue("studio/bc/micropdf417/structapp_id", get_lineedit_val("txtMPDFStructAppID")); + settings.setValue(QSL("studio/bc/micropdf417/cols"), get_cmb_index(QSL("cmbMPDFCols"))); + settings.setValue(QSL("studio/bc/micropdf417/encoding_mode"), get_rad_grp_index( + QStringList() << QSL("radMPDFStand") << QSL("radMPDFHIBC"))); + settings.setValue(QSL("studio/bc/micropdf417/structapp_count"), + get_spn_val(QSL("spnMPDFStructAppCount"))); + settings.setValue(QSL("studio/bc/micropdf417/structapp_index"), + get_spn_val(QSL("spnMPDFStructAppIndex"))); + settings.setValue(QSL("studio/bc/micropdf417/structapp_id"), get_txt_val(QSL("txtMPDFStructAppID"))); break; case BARCODE_DOTCODE: - settings.setValue("studio/bc/dotcode/cols", get_combobox_index("cmbDotCols")); - settings.setValue("studio/bc/dotcode/mask", get_combobox_index("cmbDotMask")); - settings.setValue("studio/bc/dotcode/encoding_mode", get_button_group_index( - QStringList() << "radDotStand" << "radDotGS1")); - settings.setValue("studio/bc/dotcode/structapp_count", get_combobox_index("cmbDotStructAppCount")); - settings.setValue("studio/bc/dotcode/structapp_index", get_combobox_index("cmbDotStructAppIndex")); + settings.setValue(QSL("studio/bc/dotcode/cols"), get_cmb_index(QSL("cmbDotCols"))); + settings.setValue(QSL("studio/bc/dotcode/mask"), get_cmb_index(QSL("cmbDotMask"))); + settings.setValue(QSL("studio/bc/dotcode/encoding_mode"), get_rad_grp_index( + QStringList() << QSL("radDotStand") << QSL("radDotGS1"))); + settings.setValue(QSL("studio/bc/dotcode/structapp_count"), get_cmb_index(QSL("cmbDotStructAppCount"))); + settings.setValue(QSL("studio/bc/dotcode/structapp_index"), get_cmb_index(QSL("cmbDotStructAppIndex"))); break; case BARCODE_AZTEC: case BARCODE_HIBC_AZTEC: - settings.setValue("studio/bc/aztec/autoresizing", get_button_group_index( - QStringList() << "radAztecAuto" << "radAztecSize" << "radAztecECC")); - settings.setValue("studio/bc/aztec/size", get_combobox_index("cmbAztecSize")); - settings.setValue("studio/bc/aztec/ecc", get_combobox_index("cmbAztecECC")); - settings.setValue("studio/bc/aztec/encoding_mode", get_button_group_index( - QStringList() << "radAztecStand" << "radAztecGS1" << "radAztecHIBC")); - settings.setValue("studio/bc/aztec/structapp_count", get_combobox_index("cmbAztecStructAppCount")); - settings.setValue("studio/bc/aztec/structapp_index", get_combobox_index("cmbAztecStructAppIndex")); - settings.setValue("studio/bc/aztec/structapp_id", get_lineedit_val("txtAztecStructAppID")); + settings.setValue(QSL("studio/bc/aztec/autoresizing"), get_rad_grp_index( + QStringList() << QSL("radAztecAuto") << QSL("radAztecSize") << QSL("radAztecECC"))); + settings.setValue(QSL("studio/bc/aztec/size"), get_cmb_index(QSL("cmbAztecSize"))); + settings.setValue(QSL("studio/bc/aztec/ecc"), get_cmb_index(QSL("cmbAztecECC"))); + settings.setValue(QSL("studio/bc/aztec/encoding_mode"), get_rad_grp_index( + QStringList() << QSL("radAztecStand") << QSL("radAztecGS1") << QSL("radAztecHIBC"))); + settings.setValue(QSL("studio/bc/aztec/structapp_count"), get_cmb_index(QSL("cmbAztecStructAppCount"))); + settings.setValue(QSL("studio/bc/aztec/structapp_index"), get_cmb_index(QSL("cmbAztecStructAppIndex"))); + settings.setValue(QSL("studio/bc/aztec/structapp_id"), get_txt_val(QSL("txtAztecStructAppID"))); break; case BARCODE_MSI_PLESSEY: - settings.setValue("studio/bc/msi_plessey/check_digit", get_combobox_index("cmbMSICheck")); - settings.setValue("studio/bc/msi_plessey/check_text", get_checkbox_val("chkMSICheckText")); + settings.setValue(QSL("studio/bc/msi_plessey/check_digit"), get_cmb_index(QSL("cmbMSICheck"))); + settings.setValue(QSL("studio/bc/msi_plessey/check_text"), get_chk_val(QSL("chkMSICheckText"))); break; case BARCODE_CODE11: - settings.setValue("studio/bc/code11/check_digit", get_button_group_index( - QStringList() << "radC11TwoCheckDigits" << "radC11OneCheckDigit" << "radC11NoCheckDigits")); + settings.setValue(QSL("studio/bc/code11/check_digit"), get_rad_grp_index( + QStringList() << QSL("radC11TwoCheckDigits") << QSL("radC11OneCheckDigit") + << QSL("radC11NoCheckDigits"))); break; case BARCODE_C25STANDARD: - settings.setValue("studio/bc/c25standard/check_digit", get_button_group_index( - QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide")); + settings.setValue(QSL("studio/bc/c25standard/check_digit"), get_rad_grp_index( + QStringList() << QSL("radC25Stand") << QSL("radC25Check") << QSL("radC25CheckHide"))); break; case BARCODE_C25INTER: - settings.setValue("studio/bc/c25inter/check_digit", get_button_group_index( - QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide")); + settings.setValue(QSL("studio/bc/c25inter/check_digit"), get_rad_grp_index( + QStringList() << QSL("radC25Stand") << QSL("radC25Check") << QSL("radC25CheckHide"))); break; case BARCODE_C25IATA: - settings.setValue("studio/bc/c25iata/check_digit", get_button_group_index( - QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide")); + settings.setValue(QSL("studio/bc/c25iata/check_digit"), get_rad_grp_index( + QStringList() << QSL("radC25Stand") << QSL("radC25Check") << QSL("radC25CheckHide"))); break; case BARCODE_C25LOGIC: - settings.setValue("studio/bc/c25logic/check_digit", get_button_group_index( - QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide")); + settings.setValue(QSL("studio/bc/c25logic/check_digit"), get_rad_grp_index( + QStringList() << QSL("radC25Stand") << QSL("radC25Check") << QSL("radC25CheckHide"))); break; case BARCODE_C25IND: - settings.setValue("studio/bc/c25ind/check_digit", get_button_group_index( - QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide")); + settings.setValue(QSL("studio/bc/c25ind/check_digit"), get_rad_grp_index( + QStringList() << QSL("radC25Stand") << QSL("radC25Check") << QSL("radC25CheckHide"))); break; case BARCODE_CODE39: case BARCODE_HIBC_39: - settings.setValue("studio/bc/code39/check_digit", get_button_group_index( - QStringList() << "radC39Stand" << "radC39Check" << "radC39HIBC")); + settings.setValue(QSL("studio/bc/code39/check_digit"), get_rad_grp_index( + QStringList() << QSL("radC39Stand") << QSL("radC39Check") << QSL("radC39HIBC"))); break; case BARCODE_EXCODE39: - settings.setValue("studio/bc/excode39/check_digit", get_button_group_index( - QStringList() << "radC39Stand" << "radC39Check")); + settings.setValue(QSL("studio/bc/excode39/check_digit"), get_rad_grp_index( + QStringList() << QSL("radC39Stand") << QSL("radC39Check"))); break; case BARCODE_LOGMARS: - settings.setValue("studio/bc/logmars/check_digit", get_button_group_index( - QStringList() << "radLOGMARSStand" << "radLOGMARSCheck")); + settings.setValue(QSL("studio/bc/logmars/check_digit"), get_rad_grp_index( + QStringList() << QSL("radLOGMARSStand") << QSL("radLOGMARSCheck"))); break; 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")); + settings.setValue(QSL("studio/bc/code16k/row_sep_height"), get_cmb_index(QSL("cmbC16kRowSepHeight"))); + settings.setValue(QSL("studio/bc/code16k/encoding_mode"), get_rad_grp_index( + QStringList() << QSL("radC16kStand") << QSL("radC16kGS1"))); + settings.setValue(QSL("studio/bc/code16k/chk_no_quiet_zones"), get_chk_val(QSL("chkC16kNoQuietZones"))); break; case BARCODE_CODABAR: - settings.setValue("studio/bc/codabar/chk_check_char", get_checkbox_val("chkCodabarCheck")); + settings.setValue(QSL("studio/bc/codabar/check_digit"), get_rad_grp_index( + QStringList() << QSL("radCodabarStand") << QSL("radCodabarCheckHide") << QSL("radCodabarCheck"))); break; case BARCODE_CODABLOCKF: case BARCODE_HIBC_BLOCKF: - settings.setValue("studio/bc/codablockf/width", get_combobox_index("cmbCbfWidth")); - 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")); + settings.setValue(QSL("studio/bc/codablockf/width"), get_cmb_index(QSL("cmbCbfWidth"))); + settings.setValue(QSL("studio/bc/codablockf/height"), get_cmb_index(QSL("cmbCbfHeight"))); + settings.setValue(QSL("studio/bc/codablockf/row_sep_height"), get_cmb_index(QSL("cmbCbfRowSepHeight"))); + settings.setValue(QSL("studio/bc/codablockf/encoding_mode"), get_rad_grp_index( + QStringList() << QSL("radCbfStand") << QSL("radCbfHIBC"))); + settings.setValue(QSL("studio/bc/codablockf/chk_no_quiet_zones"), get_chk_val(QSL("chkCbfNoQuietZones"))); break; case BARCODE_DAFT: - settings.setValue("studio/bc/daft/tracker_ratio", - QString::number(get_doublespinbox_val("spnDAFTTrackerRatio"), 'f', 1 /*precision*/)); + settings.setValue(QSL("studio/bc/daft/tracker_ratio"), + QString::number(get_dspn_val(QSL("spnDAFTTrackerRatio")), 'f', 1 /*precision*/)); break; case BARCODE_DATAMATRIX: case BARCODE_HIBC_DM: - settings.setValue("studio/bc/datamatrix/size", get_combobox_index("cmbDM200Size")); - settings.setValue("studio/bc/datamatrix/encoding_mode", get_button_group_index( - QStringList() << "radDM200Stand" << "radDM200GS1" << "radDM200HIBC")); - settings.setValue("studio/bc/datamatrix/chk_suppress_rect", get_checkbox_val("chkDMRectangle")); - settings.setValue("studio/bc/datamatrix/chk_allow_dmre", get_checkbox_val("chkDMRE")); - settings.setValue("studio/bc/datamatrix/chk_gs_sep", get_checkbox_val("chkDMGSSep")); - settings.setValue("studio/bc/datamatrix/structapp_count", get_combobox_index("cmbDMStructAppCount")); - settings.setValue("studio/bc/datamatrix/structapp_index", get_combobox_index("cmbDMStructAppIndex")); - settings.setValue("studio/bc/datamatrix/structapp_id", get_spinbox_val("spnDMStructAppID")); - settings.setValue("studio/bc/datamatrix/structapp_id2", get_spinbox_val("spnDMStructAppID2")); + settings.setValue(QSL("studio/bc/datamatrix/size"), get_cmb_index(QSL("cmbDM200Size"))); + settings.setValue(QSL("studio/bc/datamatrix/encoding_mode"), get_rad_grp_index( + QStringList() << QSL("radDM200Stand") << QSL("radDM200GS1") << QSL("radDM200HIBC"))); + settings.setValue(QSL("studio/bc/datamatrix/chk_suppress_rect"), get_chk_val(QSL("chkDMRectangle"))); + settings.setValue(QSL("studio/bc/datamatrix/chk_allow_dmre"), get_chk_val(QSL("chkDMRE"))); + settings.setValue(QSL("studio/bc/datamatrix/chk_gs_sep"), get_chk_val(QSL("chkDMGSSep"))); + settings.setValue(QSL("studio/bc/datamatrix/structapp_count"), get_cmb_index(QSL("cmbDMStructAppCount"))); + settings.setValue(QSL("studio/bc/datamatrix/structapp_index"), get_cmb_index(QSL("cmbDMStructAppIndex"))); + settings.setValue(QSL("studio/bc/datamatrix/structapp_id"), get_spn_val(QSL("spnDMStructAppID"))); + settings.setValue(QSL("studio/bc/datamatrix/structapp_id2"), get_spn_val(QSL("spnDMStructAppID2"))); break; case BARCODE_ITF14: - settings.setValue("studio/bc/itf14/chk_no_quiet_zones", get_checkbox_val("chkITF14NoQuietZones")); + settings.setValue(QSL("studio/bc/itf14/chk_no_quiet_zones"), get_chk_val(QSL("chkITF14NoQuietZones"))); break; case BARCODE_QRCODE: case BARCODE_HIBC_QR: - settings.setValue("studio/bc/qrcode/size", get_combobox_index("cmbQRSize")); - settings.setValue("studio/bc/qrcode/ecc", get_combobox_index("cmbQRECC")); - settings.setValue("studio/bc/qrcode/mask", get_combobox_index("cmbQRMask")); - settings.setValue("studio/bc/qrcode/encoding_mode", get_button_group_index( - QStringList() << "radDM200Stand" << "radQRGS1" << "radQRHIBC")); - settings.setValue("studio/bc/qrcode/chk_full_multibyte", get_checkbox_val("chkQRFullMultibyte")); - settings.setValue("studio/bc/qrcode/structapp_count", get_combobox_index("cmbQRStructAppCount")); - settings.setValue("studio/bc/qrcode/structapp_index", get_combobox_index("cmbQRStructAppIndex")); - settings.setValue("studio/bc/qrcode/structapp_id", get_spinbox_val("spnQRStructAppID")); + settings.setValue(QSL("studio/bc/qrcode/size"), get_cmb_index(QSL("cmbQRSize"))); + settings.setValue(QSL("studio/bc/qrcode/ecc"), get_cmb_index(QSL("cmbQRECC"))); + settings.setValue(QSL("studio/bc/qrcode/mask"), get_cmb_index(QSL("cmbQRMask"))); + settings.setValue(QSL("studio/bc/qrcode/encoding_mode"), get_rad_grp_index( + QStringList() << QSL("radDM200Stand") << QSL("radQRGS1") << QSL("radQRHIBC"))); + settings.setValue(QSL("studio/bc/qrcode/chk_full_multibyte"), get_chk_val(QSL("chkQRFullMultibyte"))); + settings.setValue(QSL("studio/bc/qrcode/structapp_count"), get_cmb_index(QSL("cmbQRStructAppCount"))); + settings.setValue(QSL("studio/bc/qrcode/structapp_index"), get_cmb_index(QSL("cmbQRStructAppIndex"))); + settings.setValue(QSL("studio/bc/qrcode/structapp_id"), get_spn_val(QSL("spnQRStructAppID"))); break; case BARCODE_RMQR: - settings.setValue("studio/bc/rmqr/size", get_combobox_index("cmbRMQRSize")); - settings.setValue("studio/bc/rmqr/ecc", get_combobox_index("cmbRMQRECC")); - settings.setValue("studio/bc/rmqr/encoding_mode", get_button_group_index( - QStringList() << "radQRStand" << "radRMQRGS1")); - settings.setValue("studio/bc/rmqr/chk_full_multibyte", get_checkbox_val("chkRMQRFullMultibyte")); + settings.setValue(QSL("studio/bc/rmqr/size"), get_cmb_index(QSL("cmbRMQRSize"))); + settings.setValue(QSL("studio/bc/rmqr/ecc"), get_cmb_index(QSL("cmbRMQRECC"))); + settings.setValue(QSL("studio/bc/rmqr/encoding_mode"), get_rad_grp_index( + QStringList() << QSL("radQRStand") << QSL("radRMQRGS1"))); + settings.setValue(QSL("studio/bc/rmqr/chk_full_multibyte"), get_chk_val(QSL("chkRMQRFullMultibyte"))); break; case BARCODE_HANXIN: - settings.setValue("studio/bc/hanxin/size", get_combobox_index("cmbHXSize")); - settings.setValue("studio/bc/hanxin/ecc", get_combobox_index("cmbHXECC")); - settings.setValue("studio/bc/hanxin/mask", get_combobox_index("cmbHXMask")); - settings.setValue("studio/bc/hanxin/chk_full_multibyte", get_checkbox_val("chkHXFullMultibyte")); + settings.setValue(QSL("studio/bc/hanxin/size"), get_cmb_index(QSL("cmbHXSize"))); + settings.setValue(QSL("studio/bc/hanxin/ecc"), get_cmb_index(QSL("cmbHXECC"))); + settings.setValue(QSL("studio/bc/hanxin/mask"), get_cmb_index(QSL("cmbHXMask"))); + settings.setValue(QSL("studio/bc/hanxin/chk_full_multibyte"), get_chk_val(QSL("chkHXFullMultibyte"))); break; case BARCODE_MICROQR: - settings.setValue("studio/bc/microqr/size", get_combobox_index("cmbMQRSize")); - settings.setValue("studio/bc/microqr/ecc", get_combobox_index("cmbMQRECC")); - settings.setValue("studio/bc/microqr/mask", get_combobox_index("cmbMQRMask")); - settings.setValue("studio/bc/microqr/chk_full_multibyte", get_checkbox_val("chkMQRFullMultibyte")); + settings.setValue(QSL("studio/bc/microqr/size"), get_cmb_index(QSL("cmbMQRSize"))); + settings.setValue(QSL("studio/bc/microqr/ecc"), get_cmb_index(QSL("cmbMQRECC"))); + settings.setValue(QSL("studio/bc/microqr/mask"), get_cmb_index(QSL("cmbMQRMask"))); + settings.setValue(QSL("studio/bc/microqr/chk_full_multibyte"), get_chk_val(QSL("chkMQRFullMultibyte"))); break; case BARCODE_GRIDMATRIX: - settings.setValue("studio/bc/gridmatrix/size", get_combobox_index("cmbGridSize")); - settings.setValue("studio/bc/gridmatrix/ecc", get_combobox_index("cmbGridECC")); - settings.setValue("studio/bc/gridmatrix/chk_full_multibyte", get_checkbox_val("chkGridFullMultibyte")); - settings.setValue("studio/bc/gridmatrix/structapp_count", get_combobox_index("cmbGridStructAppCount")); - settings.setValue("studio/bc/gridmatrix/structapp_index", get_combobox_index("cmbGridStructAppIndex")); - settings.setValue("studio/bc/gridmatrix/structapp_id", get_spinbox_val("spnGridStructAppID")); + settings.setValue(QSL("studio/bc/gridmatrix/size"), get_cmb_index(QSL("cmbGridSize"))); + settings.setValue(QSL("studio/bc/gridmatrix/ecc"), get_cmb_index(QSL("cmbGridECC"))); + settings.setValue(QSL("studio/bc/gridmatrix/chk_full_multibyte"), + get_chk_val(QSL("chkGridFullMultibyte"))); + settings.setValue(QSL("studio/bc/gridmatrix/structapp_count"), + get_cmb_index(QSL("cmbGridStructAppCount"))); + settings.setValue(QSL("studio/bc/gridmatrix/structapp_index"), + get_cmb_index(QSL("cmbGridStructAppIndex"))); + settings.setValue(QSL("studio/bc/gridmatrix/structapp_id"), get_spn_val(QSL("spnGridStructAppID"))); break; case BARCODE_MAXICODE: - settings.setValue("studio/bc/maxicode/mode", get_combobox_index("cmbMaxiMode")); - settings.setValue("studio/bc/maxicode/scm_postcode", get_lineedit_val("txtMaxiSCMPostcode")); - settings.setValue("studio/bc/maxicode/scm_country", get_spinbox_val("spnMaxiSCMCountry")); - settings.setValue("studio/bc/maxicode/scm_service", get_spinbox_val("spnMaxiSCMService")); - settings.setValue("studio/bc/maxicode/chk_scm_vv", get_checkbox_val("chkMaxiSCMVV")); - settings.setValue("studio/bc/maxicode/spn_scm_vv", get_spinbox_val("spnMaxiSCMVV")); - settings.setValue("studio/bc/maxicode/structapp_count", get_combobox_index("cmbMaxiStructAppCount")); - settings.setValue("studio/bc/maxicode/structapp_index", get_combobox_index("cmbMaxiStructAppIndex")); + settings.setValue(QSL("studio/bc/maxicode/mode"), get_cmb_index(QSL("cmbMaxiMode"))); + settings.setValue(QSL("studio/bc/maxicode/scm_postcode"), get_txt_val(QSL("txtMaxiSCMPostcode"))); + settings.setValue(QSL("studio/bc/maxicode/scm_country"), get_spn_val(QSL("spnMaxiSCMCountry"))); + settings.setValue(QSL("studio/bc/maxicode/scm_service"), get_spn_val(QSL("spnMaxiSCMService"))); + settings.setValue(QSL("studio/bc/maxicode/chk_scm_vv"), get_chk_val(QSL("chkMaxiSCMVV"))); + settings.setValue(QSL("studio/bc/maxicode/spn_scm_vv"), get_spn_val(QSL("spnMaxiSCMVV"))); + settings.setValue(QSL("studio/bc/maxicode/structapp_count"), get_cmb_index(QSL("cmbMaxiStructAppCount"))); + settings.setValue(QSL("studio/bc/maxicode/structapp_index"), get_cmb_index(QSL("cmbMaxiStructAppIndex"))); break; case BARCODE_CODEONE: - settings.setValue("studio/bc/codeone/size", get_combobox_index("cmbC1Size")); - settings.setValue("studio/bc/codeone/encoding_mode", get_button_group_index( - QStringList() << "radC1Stand" << "radC1GS1")); - settings.setValue("studio/bc/codeone/structapp_count", get_spinbox_val("spnC1StructAppCount")); - settings.setValue("studio/bc/codeone/structapp_index", get_spinbox_val("spnC1StructAppIndex")); + settings.setValue(QSL("studio/bc/codeone/size"), get_cmb_index(QSL("cmbC1Size"))); + settings.setValue(QSL("studio/bc/codeone/encoding_mode"), get_rad_grp_index( + QStringList() << QSL("radC1Stand") << QSL("radC1GS1"))); + settings.setValue(QSL("studio/bc/codeone/structapp_count"), get_spn_val(QSL("spnC1StructAppCount"))); + settings.setValue(QSL("studio/bc/codeone/structapp_index"), get_spn_val(QSL("spnC1StructAppIndex"))); break; 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")); + settings.setValue(QSL("studio/bc/code49/row_sep_height"), get_cmb_index(QSL("cmbC49RowSepHeight"))); + settings.setValue(QSL("studio/bc/code49/encoding_mode"), get_rad_grp_index( + QStringList() << QSL("radC49Stand") << QSL("radC49GS1"))); + settings.setValue(QSL("studio/bc/code49/chk_no_quiet_zones"), get_chk_val(QSL("chkC49NoQuietZones"))); break; case BARCODE_CODE93: - settings.setValue("studio/bc/code93/chk_show_checks", get_checkbox_val("chkC93ShowChecks")); + settings.setValue(QSL("studio/bc/code93/chk_show_checks"), get_chk_val(QSL("chkC93ShowChecks"))); break; case BARCODE_DBAR_EXPSTK: case BARCODE_DBAR_EXPSTK_CC: - settings.setValue("studio/bc/dbar_expstk/cols", get_combobox_index("cmbCols")); + settings.setValue(QSL("studio/bc/dbar_expstk/cols"), get_cmb_index(QSL("cmbCols"))); break; case BARCODE_ULTRA: - settings.setValue("studio/bc/ultra/autoresizing", get_button_group_index( - QStringList() << "radUltraAuto" << "radUltraEcc")); - settings.setValue("studio/bc/ultra/ecc", get_combobox_index("cmbUltraEcc")); - settings.setValue("studio/bc/ultra/revision", get_combobox_index("cmbUltraRevision")); - settings.setValue("studio/bc/ultra/encoding_mode", get_button_group_index( - QStringList() << "radUltraStand" << "radUltraGS1")); - settings.setValue("studio/bc/ultra/structapp_count", get_combobox_index("cmbUltraStructAppCount")); - settings.setValue("studio/bc/ultra/structapp_index", get_combobox_index("cmbUltraStructAppIndex")); - settings.setValue("studio/bc/ultra/structapp_id", get_spinbox_val("spnUltraStructAppID")); + settings.setValue(QSL("studio/bc/ultra/autoresizing"), get_rad_grp_index( + QStringList() << QSL("radUltraAuto") << QSL("radUltraEcc"))); + settings.setValue(QSL("studio/bc/ultra/ecc"), get_cmb_index(QSL("cmbUltraEcc"))); + settings.setValue(QSL("studio/bc/ultra/revision"), get_cmb_index(QSL("cmbUltraRevision"))); + settings.setValue(QSL("studio/bc/ultra/encoding_mode"), get_rad_grp_index( + QStringList() << QSL("radUltraStand") << QSL("radUltraGS1"))); + settings.setValue(QSL("studio/bc/ultra/structapp_count"), get_cmb_index(QSL("cmbUltraStructAppCount"))); + settings.setValue(QSL("studio/bc/ultra/structapp_index"), get_cmb_index(QSL("cmbUltraStructAppIndex"))); + settings.setValue(QSL("studio/bc/ultra/structapp_id"), get_spn_val(QSL("spnUltraStructAppID"))); break; case BARCODE_UPCA: case BARCODE_UPCA_CHK: 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")); + settings.setValue(QSL("studio/bc/upca/addongap"), get_cmb_index(QSL("cmbUPCAAddonGap"))); + settings.setValue(QSL("studio/bc/upca/guard_descent"), + QString::number(get_dspn_val(QSL("spnUPCAGuardDescent")), 'f', 3 /*precision*/)); + settings.setValue(QSL("studio/bc/upca/chk_no_quiet_zones"), get_chk_val(QSL("chkUPCANoQuietZones"))); break; case BARCODE_EANX: case BARCODE_EANX_CHK: 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")); + settings.setValue(QSL("studio/bc/eanx/addongap"), get_cmb_index(QSL("cmbUPCEANAddonGap"))); + settings.setValue(QSL("studio/bc/eanx/guard_descent"), + QString::number(get_dspn_val(QSL("spnUPCEANGuardDescent")), 'f', 3 /*precision*/)); + settings.setValue(QSL("studio/bc/eanx/chk_no_quiet_zones"), get_chk_val(QSL("chkUPCEANNoQuietZones"))); break; case BARCODE_UPCE: case BARCODE_UPCE_CHK: 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")); + settings.setValue(QSL("studio/bc/upce/addongap"), get_cmb_index(QSL("cmbUPCEANAddonGap"))); + settings.setValue(QSL("studio/bc/upce/guard_descent"), + QString::number(get_dspn_val(QSL("spnUPCEANGuardDescent")), 'f', 3 /*precision*/)); + settings.setValue(QSL("studio/bc/upce/chk_no_quiet_zones"), get_chk_val(QSL("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")); + settings.setValue(QSL("studio/bc/isnbx/addongap"), get_cmb_index(QSL("cmbUPCEANAddonGap"))); + settings.setValue(QSL("studio/bc/isnbx/guard_descent"), + QString::number(get_dspn_val(QSL("spnUPCEANGuardDescent")), 'f', 3 /*precision*/)); + settings.setValue(QSL("studio/bc/isnbx/chk_no_quiet_zones"), get_chk_val(QSL("chkUPCEANNoQuietZones"))); break; case BARCODE_VIN: - settings.setValue("studio/bc/vin/chk_import_char_prefix", get_checkbox_val("chkVINImportChar")); + settings.setValue(QSL("studio/bc/vin/chk_import_char_prefix"), get_chk_val(QSL("chkVINImportChar"))); break; } } /* Load settings for an individual symbol */ -void MainWindow::load_sub_settings(QSettings &settings, int symbology) { - - const char *name = get_setting_name(symbology); - if (*name) { - const QString &tdata = settings.value(QString("studio/bc/%1/data").arg(name), "").toString(); +void MainWindow::load_sub_settings(QSettings &settings, int symbology) +{ + const QString &name = get_setting_name(symbology); + if (!name.isEmpty()) { + const QString &tdata = settings.value(QSL("studio/bc/%1/data").arg(name), QSL("")).toString(); if (!tdata.isEmpty()) { txtData->setText(tdata); } if (!grpComposite->isHidden()) { const QString &composite_text = settings.value( - QString("studio/bc/%1/composite_text").arg(name), "").toString(); + QSL("studio/bc/%1/composite_text").arg(name), QSL("")).toString(); if (!composite_text.isEmpty()) { txtComposite->setText(composite_text); } chkComposite->setChecked(settings.value( - QString("studio/bc/%1/chk_composite").arg(name), 0).toInt() ? true : false); - cmbCompType->setCurrentIndex(settings.value(QString("studio/bc/%1/comp_type").arg(name), 0).toInt()); + QSL("studio/bc/%1/chk_composite").arg(name), 0).toInt() ? true : false); + cmbCompType->setCurrentIndex(settings.value(QSL("studio/bc/%1/comp_type").arg(name), 0).toInt()); } if (cmbECI->isEnabled()) { - cmbECI->setCurrentIndex(settings.value(QString("studio/bc/%1/eci").arg(name), 0).toInt()); + cmbECI->setCurrentIndex(settings.value(QSL("studio/bc/%1/eci").arg(name), 0).toInt()); } - chkEscape->setChecked(settings.value(QString("studio/bc/%1/chk_escape").arg(name)).toInt() ? true : false); - chkData->setChecked(settings.value(QString("studio/bc/%1/chk_data").arg(name)).toInt() ? true : false); + chkEscape->setChecked(settings.value(QSL("studio/bc/%1/chk_escape").arg(name)).toInt() ? true : false); + chkData->setChecked(settings.value(QSL("studio/bc/%1/chk_data").arg(name)).toInt() ? true : false); if (chkRInit->isEnabled()) { - chkRInit->setChecked(settings.value(QString("studio/bc/%1/chk_rinit").arg(name)).toInt() ? true : false); + chkRInit->setChecked(settings.value(QSL("studio/bc/%1/chk_rinit").arg(name)).toInt() ? true : false); } - chkGS1Parens->setChecked(settings.value( - QString("studio/bc/%1/chk_gs1parens").arg(name)).toInt() ? true : false); + chkGS1Parens->setChecked(settings.value(QSL("studio/bc/%1/chk_gs1parens").arg(name)).toInt() ? true : false); chkGS1NoCheck->setChecked(settings.value( - QString("studio/bc/%1/chk_gs1nocheck").arg(name)).toInt() ? true : false); + QSL("studio/bc/%1/chk_gs1nocheck").arg(name)).toInt() ? true : false); if (chkAutoHeight->isEnabled()) { chkAutoHeight->setChecked(settings.value( - QString("studio/bc/%1/appearance/autoheight").arg(name), 1).toInt() ? true : false); - heightb->setValue(settings.value(QString("studio/bc/%1/appearance/height").arg(name), 50.0f).toFloat()); + QSL("studio/bc/%1/appearance/autoheight").arg(name), 1).toInt() ? true : false); + heightb->setValue(settings.value(QSL("studio/bc/%1/appearance/height").arg(name), 50.0f).toFloat()); } - bwidth->setValue(settings.value(QString("studio/bc/%1/appearance/border").arg(name), 0).toInt()); - spnWhitespace->setValue(settings.value(QString("studio/bc/%1/appearance/whitespace").arg(name), 0).toInt()); - spnVWhitespace->setValue(settings.value(QString("studio/bc/%1/appearance/vwhitespace").arg(name), 0).toInt()); - spnScale->setValue(settings.value(QString("studio/bc/%1/appearance/scale").arg(name), 1.0).toFloat()); - btype->setCurrentIndex(settings.value(QString("studio/bc/%1/appearance/border_type").arg(name), 0).toInt()); + bwidth->setValue(settings.value(QSL("studio/bc/%1/appearance/border").arg(name), 0).toInt()); + spnWhitespace->setValue(settings.value(QSL("studio/bc/%1/appearance/whitespace").arg(name), 0).toInt()); + spnVWhitespace->setValue(settings.value(QSL("studio/bc/%1/appearance/vwhitespace").arg(name), 0).toInt()); + spnScale->setValue(settings.value(QSL("studio/bc/%1/appearance/scale").arg(name), 1.0).toFloat()); + btype->setCurrentIndex(settings.value(QSL("studio/bc/%1/appearance/border_type").arg(name), 0).toInt()); if (chkHRTShow->isEnabled()) { cmbFontSetting->setCurrentIndex(settings.value( - QString("studio/bc/%1/appearance/font_setting").arg(name), 0).toInt()); + QSL("studio/bc/%1/appearance/font_setting").arg(name), 0).toInt()); chkHRTShow->setChecked(settings.value( - QString("studio/bc/%1/appearance/chk_hrt_show").arg(name), 1).toInt() ? true : false); + QSL("studio/bc/%1/appearance/chk_hrt_show").arg(name), 1).toInt() ? true : false); } - chkCMYK->setChecked(settings.value( - QString("studio/bc/%1/appearance/cmyk").arg(name), 0).toInt() ? true : false); - cmbRotate->setCurrentIndex(settings.value(QString("studio/bc/%1/appearance/rotate").arg(name), 0).toInt()); + chkCMYK->setChecked(settings.value(QSL("studio/bc/%1/appearance/cmyk").arg(name), 0).toInt() ? true : false); + cmbRotate->setCurrentIndex(settings.value(QSL("studio/bc/%1/appearance/rotate").arg(name), 0).toInt()); if (symbology == BARCODE_DOTCODE || chkDotty->isEnabled()) { chkDotty->setChecked(settings.value( - QString("studio/bc/%1/appearance/chk_dotty").arg(name), 0).toInt() ? true : false); + QSL("studio/bc/%1/appearance/chk_dotty").arg(name), 0).toInt() ? true : false); spnDotSize->setValue(settings.value( - QString("studio/bc/%1/appearance/dot_size").arg(name), 0.4f / 0.5f).toFloat()); + QSL("studio/bc/%1/appearance/dot_size").arg(name), 0.4f / 0.5f).toFloat()); } - m_fgcolor.setRgb(settings.value(QString("studio/bc/%1/ink/red").arg(name), 0).toInt(), - settings.value(QString("studio/bc/%1/ink/green").arg(name), 0).toInt(), - settings.value(QString("studio/bc/%1/ink/blue").arg(name), 0).toInt(), - settings.value(QString("studio/bc/%1/ink/alpha").arg(name), 0xff).toInt()); - m_bgcolor.setRgb(settings.value(QString("studio/bc/%1/paper/red").arg(name), 0xff).toInt(), - settings.value(QString("studio/bc/%1/paper/green").arg(name), 0xff).toInt(), - settings.value(QString("studio/bc/%1/paper/blue").arg(name), 0xff).toInt(), - settings.value(QString("studio/bc/%1/paper/alpha").arg(name), 0xff).toInt()); + m_fgcolor.setRgb(settings.value(QSL("studio/bc/%1/ink/red").arg(name), 0).toInt(), + settings.value(QSL("studio/bc/%1/ink/green").arg(name), 0).toInt(), + settings.value(QSL("studio/bc/%1/ink/blue").arg(name), 0).toInt(), + settings.value(QSL("studio/bc/%1/ink/alpha").arg(name), 0xff).toInt()); + m_bgcolor.setRgb(settings.value(QSL("studio/bc/%1/paper/red").arg(name), 0xff).toInt(), + settings.value(QSL("studio/bc/%1/paper/green").arg(name), 0xff).toInt(), + settings.value(QSL("studio/bc/%1/paper/blue").arg(name), 0xff).toInt(), + settings.value(QSL("studio/bc/%1/paper/alpha").arg(name), 0xff).toInt()); } switch (symbology) { @@ -2648,268 +3007,277 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology) { case BARCODE_GS1_128: case BARCODE_GS1_128_CC: case BARCODE_HIBC_128: - set_radiobutton_from_setting(settings, "studio/bc/code128/encoding_mode", - QStringList() << "radC128Stand" << "radC128EAN" << "radC128CSup" << "radC128HIBC"); + set_rad_from_setting(settings, QSL("studio/bc/code128/encoding_mode"), + QStringList() << QSL("radC128Stand") << QSL("radC128EAN") << QSL("radC128CSup") + << QSL("radC128HIBC")); break; case BARCODE_PDF417: case BARCODE_PDF417COMP: case BARCODE_HIBC_PDF: - set_combobox_from_setting(settings, "studio/bc/pdf417/cols", "cmbPDFCols"); - set_combobox_from_setting(settings, "studio/bc/pdf417/ecc", "cmbPDFECC"); - set_radiobutton_from_setting(settings, "studio/bc/pdf417/encoding_mode", - QStringList() << "radPDFStand" << "radPDFTruncated" << "radPDFHIBC"); - set_spinbox_from_setting(settings, "studio/bc/pdf417/structapp_count", "spnPDFStructAppCount", 1); - set_spinbox_from_setting(settings, "studio/bc/pdf417/structapp_index", "spnPDFStructAppIndex", 0); - set_lineedit_from_setting(settings, "studio/bc/pdf417/structapp_id", "txtPDFStructAppID", ""); + set_cmb_from_setting(settings, QSL("studio/bc/pdf417/cols"), QSL("cmbPDFCols")); + set_cmb_from_setting(settings, QSL("studio/bc/pdf417/ecc"), QSL("cmbPDFECC")); + set_rad_from_setting(settings, QSL("studio/bc/pdf417/encoding_mode"), + QStringList() << QSL("radPDFStand") << QSL("radPDFTruncated") << QSL("radPDFHIBC")); + set_spn_from_setting(settings, QSL("studio/bc/pdf417/structapp_count"), QSL("spnPDFStructAppCount"), 1); + set_spn_from_setting(settings, QSL("studio/bc/pdf417/structapp_index"), QSL("spnPDFStructAppIndex"), 0); + set_txt_from_setting(settings, QSL("studio/bc/pdf417/structapp_id"), QSL("txtPDFStructAppID"), QSL("")); break; case BARCODE_MICROPDF417: case BARCODE_HIBC_MICPDF: - set_combobox_from_setting(settings, "studio/bc/micropdf417/cols", "cmbMPDFCols"); - set_radiobutton_from_setting(settings, "studio/bc/micropdf417/encoding_mode", - QStringList() << "radMPDFStand" << "radMPDFHIBC"); - set_spinbox_from_setting(settings, "studio/bc/micropdf417/structapp_count", "spnMPDFStructAppCount", 1); - set_spinbox_from_setting(settings, "studio/bc/micropdf417/structapp_index", "spnMPDFStructAppIndex", 0); - set_lineedit_from_setting(settings, "studio/bc/micropdf417/structapp_id", "txtMPDFStructAppID", ""); + set_cmb_from_setting(settings, QSL("studio/bc/micropdf417/cols"), QSL("cmbMPDFCols")); + set_rad_from_setting(settings, QSL("studio/bc/micropdf417/encoding_mode"), + QStringList() << QSL("radMPDFStand") << QSL("radMPDFHIBC")); + set_spn_from_setting(settings, QSL("studio/bc/micropdf417/structapp_count"), + QSL("spnMPDFStructAppCount"), 1); + set_spn_from_setting(settings, QSL("studio/bc/micropdf417/structapp_index"), + QSL("spnMPDFStructAppIndex"), 0); + set_txt_from_setting(settings, QSL("studio/bc/micropdf417/structapp_id"), QSL("txtMPDFStructAppID"), + QSL("")); break; case BARCODE_DOTCODE: - set_combobox_from_setting(settings, "studio/bc/dotcode/cols", "cmbDotCols"); - set_combobox_from_setting(settings, "studio/bc/dotcode/mask", "cmbDotMask"); - set_radiobutton_from_setting(settings, "studio/bc/dotcode/encoding_mode", - QStringList() << "radDotStand" << "radDotGS1"); - set_combobox_from_setting(settings, "studio/bc/dotcode/structapp_count", "cmbDotStructAppCount"); - set_combobox_from_setting(settings, "studio/bc/dotcode/structapp_index", "cmbDotStructAppIndex"); + set_cmb_from_setting(settings, QSL("studio/bc/dotcode/cols"), QSL("cmbDotCols")); + set_cmb_from_setting(settings, QSL("studio/bc/dotcode/mask"), QSL("cmbDotMask")); + set_rad_from_setting(settings, QSL("studio/bc/dotcode/encoding_mode"), + QStringList() << QSL("radDotStand") << QSL("radDotGS1")); + set_cmb_from_setting(settings, QSL("studio/bc/dotcode/structapp_count"), QSL("cmbDotStructAppCount")); + set_cmb_from_setting(settings, QSL("studio/bc/dotcode/structapp_index"), QSL("cmbDotStructAppIndex")); break; case BARCODE_AZTEC: case BARCODE_HIBC_AZTEC: - set_radiobutton_from_setting(settings, "studio/bc/aztec/autoresizing", - QStringList() << "radAztecAuto" << "radAztecSize" << "radAztecECC"); - set_combobox_from_setting(settings, "studio/bc/aztec/size", "cmbAztecSize"); - set_combobox_from_setting(settings, "studio/bc/aztec/ecc", "cmbAztecECC"); - set_radiobutton_from_setting(settings, "studio/bc/aztec/encoding_mode", - QStringList() << "radAztecStand" << "radAztecGS1" << "radAztecHIBC"); - set_combobox_from_setting(settings, "studio/bc/aztec/structapp_count", "cmbAztecStructAppCount"); - set_combobox_from_setting(settings, "studio/bc/aztec/structapp_index", "cmbAztecStructAppIndex"); - set_lineedit_from_setting(settings, "studio/bc/aztec/structapp_id", "txtAztecStructAppID", ""); + set_rad_from_setting(settings, QSL("studio/bc/aztec/autoresizing"), + QStringList() << QSL("radAztecAuto") << QSL("radAztecSize") << QSL("radAztecECC")); + set_cmb_from_setting(settings, QSL("studio/bc/aztec/size"), QSL("cmbAztecSize")); + set_cmb_from_setting(settings, QSL("studio/bc/aztec/ecc"), QSL("cmbAztecECC")); + set_rad_from_setting(settings, QSL("studio/bc/aztec/encoding_mode"), + QStringList() << QSL("radAztecStand") << QSL("radAztecGS1") << QSL("radAztecHIBC")); + set_cmb_from_setting(settings, QSL("studio/bc/aztec/structapp_count"), QSL("cmbAztecStructAppCount")); + set_cmb_from_setting(settings, QSL("studio/bc/aztec/structapp_index"), QSL("cmbAztecStructAppIndex")); + set_txt_from_setting(settings, QSL("studio/bc/aztec/structapp_id"), QSL("txtAztecStructAppID"), QSL("")); break; case BARCODE_MSI_PLESSEY: - set_combobox_from_setting(settings, "studio/bc/msi_plessey/check_digit", "cmbMSICheck"); - set_checkbox_from_setting(settings, "studio/bc/msi_plessey/check_text", "chkMSICheckText"); + set_cmb_from_setting(settings, QSL("studio/bc/msi_plessey/check_digit"), QSL("cmbMSICheck")); + set_chk_from_setting(settings, QSL("studio/bc/msi_plessey/check_text"), QSL("chkMSICheckText")); msi_plessey_ui_set(); break; case BARCODE_CODE11: - set_radiobutton_from_setting(settings, "studio/bc/code11/check_digit", - QStringList() << "radC11TwoCheckDigits" << "radC11OneCheckDigit" << "radC11NoCheckDigits"); + set_rad_from_setting(settings, QSL("studio/bc/code11/check_digit"), + QStringList() << QSL("radC11TwoCheckDigits") << QSL("radC11OneCheckDigit") + << QSL("radC11NoCheckDigits")); break; case BARCODE_C25STANDARD: - set_radiobutton_from_setting(settings, "studio/bc/c25standard/check_digit", - QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide"); + set_rad_from_setting(settings, QSL("studio/bc/c25standard/check_digit"), + QStringList() << QSL("radC25Stand") << QSL("radC25Check") << QSL("radC25CheckHide")); break; case BARCODE_C25INTER: - set_radiobutton_from_setting(settings, "studio/bc/c25inter/check_digit", - QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide"); + set_rad_from_setting(settings, QSL("studio/bc/c25inter/check_digit"), + QStringList() << QSL("radC25Stand") << QSL("radC25Check") << QSL("radC25CheckHide")); break; case BARCODE_C25IATA: - set_radiobutton_from_setting(settings, "studio/bc/c25iata/check_digit", - QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide"); + set_rad_from_setting(settings, QSL("studio/bc/c25iata/check_digit"), + QStringList() << QSL("radC25Stand") << QSL("radC25Check") << QSL("radC25CheckHide")); break; case BARCODE_C25LOGIC: - set_radiobutton_from_setting(settings, "studio/bc/c25logic/check_digit", - QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide"); + set_rad_from_setting(settings, QSL("studio/bc/c25logic/check_digit"), + QStringList() << QSL("radC25Stand") << QSL("radC25Check") << QSL("radC25CheckHide")); break; case BARCODE_C25IND: - set_radiobutton_from_setting(settings, "studio/bc/c25ind/check_digit", - QStringList() << "radC25Stand" << "radC25Check" << "radC25CheckHide"); + set_rad_from_setting(settings, QSL("studio/bc/c25ind/check_digit"), + QStringList() << QSL("radC25Stand") << QSL("radC25Check") << QSL("radC25CheckHide")); break; case BARCODE_CODE39: case BARCODE_HIBC_39: - set_radiobutton_from_setting(settings, "studio/bc/code39/check_digit", - QStringList() << "radC39Stand" << "radC39Check" << "radC39HIBC"); + set_rad_from_setting(settings, QSL("studio/bc/code39/check_digit"), + QStringList() << QSL("radC39Stand") << QSL("radC39Check") << QSL("radC39HIBC")); break; case BARCODE_EXCODE39: - set_radiobutton_from_setting(settings, "studio/bc/excode39/check_digit", - QStringList() << "radC39Stand" << "radC39Check"); + set_rad_from_setting(settings, QSL("studio/bc/excode39/check_digit"), + QStringList() << QSL("radC39Stand") << QSL("radC39Check")); break; case BARCODE_LOGMARS: - set_radiobutton_from_setting(settings, "studio/bc/logmars/check_digit", - QStringList() << "radLOGMARSStand" << "radLOGMARSCheck"); + set_rad_from_setting(settings, QSL("studio/bc/logmars/check_digit"), + QStringList() << QSL("radLOGMARSStand") << QSL("radLOGMARSCheck")); break; 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"); + set_cmb_from_setting(settings, QSL("studio/bc/code16k/row_sep_height"), QSL("cmbC16kRowSepHeight")); + set_rad_from_setting(settings, QSL("studio/bc/code16k/encoding_mode"), + QStringList() << QSL("radC16kStand") << QSL("radC16kGS1")); + set_chk_from_setting(settings, QSL("studio/bc/code16k/chk_no_quiet_zones"), QSL("chkC16kNoQuietZones")); break; case BARCODE_CODABAR: - set_checkbox_from_setting(settings, "studio/bc/codabar/chk_check_char", "chkCodabarCheck"); + set_rad_from_setting(settings, QSL("studio/bc/codabar/check_digit"), + QStringList() << QSL("radCodabarStand") << QSL("radCodabarCheckHide") << QSL("radCodabarCheck")); break; case BARCODE_CODABLOCKF: case BARCODE_HIBC_BLOCKF: - set_combobox_from_setting(settings, "studio/bc/codablockf/width", "cmbCbfWidth"); - 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"); + set_cmb_from_setting(settings, QSL("studio/bc/codablockf/width"), QSL("cmbCbfWidth")); + set_cmb_from_setting(settings, QSL("studio/bc/codablockf/height"), QSL("cmbCbfHeight")); + set_cmb_from_setting(settings, QSL("studio/bc/codablockf/row_sep_height"), + QSL("cmbCbfRowSepHeight")); + set_rad_from_setting(settings, QSL("studio/bc/codablockf/encoding_mode"), + QStringList() << QSL("radCbfStand") << QSL("radCbfHIBC")); + set_chk_from_setting(settings, QSL("studio/bc/codablockf/chk_no_quiet_zones"), QSL("chkCbfNoQuietZones")); break; case BARCODE_DAFT: - set_doublespinbox_from_setting(settings, "studio/bc/daft/tracker_ratio", "spnDAFTTrackerRatio", 25.0f); + set_dspn_from_setting(settings, QSL("studio/bc/daft/tracker_ratio"), QSL("spnDAFTTrackerRatio"), 25.0f); break; case BARCODE_DATAMATRIX: case BARCODE_HIBC_DM: - set_combobox_from_setting(settings, "studio/bc/datamatrix/size", "cmbDM200Size"); - set_radiobutton_from_setting(settings, "studio/bc/datamatrix/encoding_mode", - QStringList() << "radDM200Stand" << "radDM200GS1" << "radDM200HIBC"); - set_checkbox_from_setting(settings, "studio/bc/datamatrix/chk_suppress_rect", "chkDMRectangle"); - set_checkbox_from_setting(settings, "studio/bc/datamatrix/chk_allow_dmre", "chkDMRE"); - set_checkbox_from_setting(settings, "studio/bc/datamatrix/chk_gs_sep", "chkDMGSSep"); - set_combobox_from_setting(settings, "studio/bc/datamatrix/structapp_count", "cmbDMStructAppCount"); - set_combobox_from_setting(settings, "studio/bc/datamatrix/structapp_index", "cmbDMStructAppIndex"); - set_spinbox_from_setting(settings, "studio/bc/datamatrix/structapp_id", "spnDMStructAppID", 1); - set_spinbox_from_setting(settings, "studio/bc/datamatrix/structapp_id2", "spnDMStructAppID2", 1); + set_cmb_from_setting(settings, QSL("studio/bc/datamatrix/size"), QSL("cmbDM200Size")); + set_rad_from_setting(settings, QSL("studio/bc/datamatrix/encoding_mode"), + QStringList() << QSL("radDM200Stand") << QSL("radDM200GS1") << QSL("radDM200HIBC")); + set_chk_from_setting(settings, QSL("studio/bc/datamatrix/chk_suppress_rect"), QSL("chkDMRectangle")); + set_chk_from_setting(settings, QSL("studio/bc/datamatrix/chk_allow_dmre"), QSL("chkDMRE")); + set_chk_from_setting(settings, QSL("studio/bc/datamatrix/chk_gs_sep"), QSL("chkDMGSSep")); + set_cmb_from_setting(settings, QSL("studio/bc/datamatrix/structapp_count"), QSL("cmbDMStructAppCount")); + set_cmb_from_setting(settings, QSL("studio/bc/datamatrix/structapp_index"), QSL("cmbDMStructAppIndex")); + set_spn_from_setting(settings, QSL("studio/bc/datamatrix/structapp_id"), QSL("spnDMStructAppID"), 1); + set_spn_from_setting(settings, QSL("studio/bc/datamatrix/structapp_id2"), QSL("spnDMStructAppID2"), 1); break; case BARCODE_ITF14: - set_checkbox_from_setting(settings, "studio/bc/itf14/chk_no_quiet_zones", "chkITF14NoQuietZones"); + set_chk_from_setting(settings, QSL("studio/bc/itf14/chk_no_quiet_zones"), QSL("chkITF14NoQuietZones")); break; case BARCODE_QRCODE: case BARCODE_HIBC_QR: - set_combobox_from_setting(settings, "studio/bc/qrcode/size", "cmbQRSize"); - set_combobox_from_setting(settings, "studio/bc/qrcode/ecc", "cmbQRECC"); - set_combobox_from_setting(settings, "studio/bc/qrcode/mask", "cmbQRMask"); - set_radiobutton_from_setting(settings, "studio/bc/qrcode/encoding_mode", - QStringList() << "radDM200Stand" << "radQRGS1" << "radQRHIBC"); - set_checkbox_from_setting(settings, "studio/bc/qrcode/chk_full_multibyte", "chkQRFullMultibyte"); - set_combobox_from_setting(settings, "studio/bc/qrcode/structapp_count", "cmbQRStructAppCount"); - set_combobox_from_setting(settings, "studio/bc/qrcode/structapp_index", "cmbQRStructAppIndex"); - set_spinbox_from_setting(settings, "studio/bc/qrcode/structapp_id", "spnQRStructAppID", 0); + set_cmb_from_setting(settings, QSL("studio/bc/qrcode/size"), QSL("cmbQRSize")); + set_cmb_from_setting(settings, QSL("studio/bc/qrcode/ecc"), QSL("cmbQRECC")); + set_cmb_from_setting(settings, QSL("studio/bc/qrcode/mask"), QSL("cmbQRMask")); + set_rad_from_setting(settings, QSL("studio/bc/qrcode/encoding_mode"), + QStringList() << QSL("radDM200Stand") << QSL("radQRGS1") << QSL("radQRHIBC")); + set_chk_from_setting(settings, QSL("studio/bc/qrcode/chk_full_multibyte"), QSL("chkQRFullMultibyte")); + set_cmb_from_setting(settings, QSL("studio/bc/qrcode/structapp_count"), QSL("cmbQRStructAppCount")); + set_cmb_from_setting(settings, QSL("studio/bc/qrcode/structapp_index"), QSL("cmbQRStructAppIndex")); + set_spn_from_setting(settings, QSL("studio/bc/qrcode/structapp_id"), QSL("spnQRStructAppID"), 0); break; case BARCODE_RMQR: - set_combobox_from_setting(settings, "studio/bc/rmqr/size", "cmbRMQRSize"); - set_combobox_from_setting(settings, "studio/bc/rmqr/ecc", "cmbRMQRECC"); - set_radiobutton_from_setting(settings, "studio/bc/rmqr/encoding_mode", - QStringList() << "radQRStand" << "radRMQRGS1"); - set_checkbox_from_setting(settings, "studio/bc/rmqr/chk_full_multibyte", "chkRMQRFullMultibyte"); + set_cmb_from_setting(settings, QSL("studio/bc/rmqr/size"), QSL("cmbRMQRSize")); + set_cmb_from_setting(settings, QSL("studio/bc/rmqr/ecc"), QSL("cmbRMQRECC")); + set_rad_from_setting(settings, QSL("studio/bc/rmqr/encoding_mode"), + QStringList() << QSL("radQRStand") << QSL("radRMQRGS1")); + set_chk_from_setting(settings, QSL("studio/bc/rmqr/chk_full_multibyte"), QSL("chkRMQRFullMultibyte")); break; case BARCODE_HANXIN: - set_combobox_from_setting(settings, "studio/bc/hanxin/size", "cmbHXSize"); - set_combobox_from_setting(settings, "studio/bc/hanxin/ecc", "cmbHXECC"); - set_combobox_from_setting(settings, "studio/bc/hanxin/mask", "cmbHXMask"); - set_checkbox_from_setting(settings, "studio/bc/hanxin/chk_full_multibyte", "chkHXFullMultibyte"); + set_cmb_from_setting(settings, QSL("studio/bc/hanxin/size"), QSL("cmbHXSize")); + set_cmb_from_setting(settings, QSL("studio/bc/hanxin/ecc"), QSL("cmbHXECC")); + set_cmb_from_setting(settings, QSL("studio/bc/hanxin/mask"), QSL("cmbHXMask")); + set_chk_from_setting(settings, QSL("studio/bc/hanxin/chk_full_multibyte"), QSL("chkHXFullMultibyte")); break; case BARCODE_MICROQR: - set_combobox_from_setting(settings, "studio/bc/microqr/size", "cmbMQRSize"); - set_combobox_from_setting(settings, "studio/bc/microqr/ecc", "cmbMQRECC"); - set_combobox_from_setting(settings, "studio/bc/microqr/mask", "cmbMQRMask"); - set_checkbox_from_setting(settings, "studio/bc/microqr/chk_full_multibyte", "chkMQRFullMultibyte"); + set_cmb_from_setting(settings, QSL("studio/bc/microqr/size"), QSL("cmbMQRSize")); + set_cmb_from_setting(settings, QSL("studio/bc/microqr/ecc"), QSL("cmbMQRECC")); + set_cmb_from_setting(settings, QSL("studio/bc/microqr/mask"), QSL("cmbMQRMask")); + set_chk_from_setting(settings, QSL("studio/bc/microqr/chk_full_multibyte"), QSL("chkMQRFullMultibyte")); break; case BARCODE_GRIDMATRIX: - set_combobox_from_setting(settings, "studio/bc/gridmatrix/size", "cmbGridSize"); - set_combobox_from_setting(settings, "studio/bc/gridmatrix/ecc", "cmbGridECC"); - set_checkbox_from_setting(settings, "studio/bc/gridmatrix/chk_full_multibyte", "chkGridFullMultibyte"); - set_combobox_from_setting(settings, "studio/bc/gridmatrix/structapp_count", "cmbGridStructAppCount"); - set_combobox_from_setting(settings, "studio/bc/gridmatrix/structapp_index", "cmbGridStructAppIndex"); - set_spinbox_from_setting(settings, "studio/bc/gridmatrix/structapp_id", "spnGridStructAppID", 0); + set_cmb_from_setting(settings, QSL("studio/bc/gridmatrix/size"), QSL("cmbGridSize")); + set_cmb_from_setting(settings, QSL("studio/bc/gridmatrix/ecc"), QSL("cmbGridECC")); + set_chk_from_setting(settings, QSL("studio/bc/gridmatrix/chk_full_multibyte"), + QSL("chkGridFullMultibyte")); + set_cmb_from_setting(settings, QSL("studio/bc/gridmatrix/structapp_count"), QSL("cmbGridStructAppCount")); + set_cmb_from_setting(settings, QSL("studio/bc/gridmatrix/structapp_index"), QSL("cmbGridStructAppIndex")); + set_spn_from_setting(settings, QSL("studio/bc/gridmatrix/structapp_id"), QSL("spnGridStructAppID"), 0); break; case BARCODE_MAXICODE: - set_combobox_from_setting(settings, "studio/bc/maxicode/mode", "cmbMaxiMode", 1); - set_lineedit_from_setting(settings, "studio/bc/maxicode/scm_postcode", "txtMaxiSCMPostcode", ""); - set_spinbox_from_setting(settings, "studio/bc/maxicode/scm_country", "spnMaxiSCMCountry", 0); - set_spinbox_from_setting(settings, "studio/bc/maxicode/scm_service", "spnMaxiSCMService", 0); - set_checkbox_from_setting(settings, "studio/bc/maxicode/chk_scm_vv", "chkMaxiSCMVV"); + set_cmb_from_setting(settings, QSL("studio/bc/maxicode/mode"), QSL("cmbMaxiMode"), 1); + set_txt_from_setting(settings, QSL("studio/bc/maxicode/scm_postcode"), QSL("txtMaxiSCMPostcode"), + QSL("")); + set_spn_from_setting(settings, QSL("studio/bc/maxicode/scm_country"), QSL("spnMaxiSCMCountry"), 0); + set_spn_from_setting(settings, QSL("studio/bc/maxicode/scm_service"), QSL("spnMaxiSCMService"), 0); + set_chk_from_setting(settings, QSL("studio/bc/maxicode/chk_scm_vv"), QSL("chkMaxiSCMVV")); // 96 is ASC MH10/SC 8 - set_spinbox_from_setting(settings, "studio/bc/maxicode/spn_scm_vv", "spnMaxiSCMVV", 96); - set_combobox_from_setting(settings, "studio/bc/maxicode/structapp_count", "cmbMaxiStructAppCount"); - set_combobox_from_setting(settings, "studio/bc/maxicode/structapp_index", "cmbMaxiStructAppIndex"); + set_spn_from_setting(settings, QSL("studio/bc/maxicode/spn_scm_vv"), QSL("spnMaxiSCMVV"), 96); + set_cmb_from_setting(settings, QSL("studio/bc/maxicode/structapp_count"), QSL("cmbMaxiStructAppCount")); + set_cmb_from_setting(settings, QSL("studio/bc/maxicode/structapp_index"), QSL("cmbMaxiStructAppIndex")); break; case BARCODE_CODEONE: - set_combobox_from_setting(settings, "studio/bc/codeone/size", "cmbC1Size"); - set_radiobutton_from_setting(settings, "studio/bc/codeone/encoding_mode", - QStringList() << "radC1Stand" << "radC1GS1"); - set_spinbox_from_setting(settings, "studio/bc/codeone/structapp_count", "spnC1StructAppCount", 1); - set_spinbox_from_setting(settings, "studio/bc/codeone/structapp_index", "spnC1StructAppIndex", 0); + set_cmb_from_setting(settings, QSL("studio/bc/codeone/size"), QSL("cmbC1Size")); + set_rad_from_setting(settings, QSL("studio/bc/codeone/encoding_mode"), + QStringList() << QSL("radC1Stand") << QSL("radC1GS1")); + set_spn_from_setting(settings, QSL("studio/bc/codeone/structapp_count"), QSL("spnC1StructAppCount"), 1); + set_spn_from_setting(settings, QSL("studio/bc/codeone/structapp_index"), QSL("spnC1StructAppIndex"), 0); break; 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"); + set_cmb_from_setting(settings, QSL("studio/bc/code49/row_sep_height"), QSL("cmbC49RowSepHeight")); + set_rad_from_setting(settings, QSL("studio/bc/code49/encoding_mode"), + QStringList() << QSL("radC49Stand") << QSL("radC49GS1")); + set_chk_from_setting(settings, QSL("studio/bc/code49/chk_no_quiet_zones"), QSL("chkC49NoQuietZones")); break; case BARCODE_CODE93: - set_checkbox_from_setting(settings, "studio/bc/code93/chk_show_checks", "chkC93ShowChecks"); + set_chk_from_setting(settings, QSL("studio/bc/code93/chk_show_checks"), QSL("chkC93ShowChecks")); break; case BARCODE_DBAR_EXPSTK: - set_combobox_from_setting(settings, "studio/bc/dbar_expstk/cols", "cmbCols"); + set_cmb_from_setting(settings, QSL("studio/bc/dbar_expstk/cols"), QSL("cmbCols")); break; case BARCODE_ULTRA: - set_radiobutton_from_setting(settings, "studio/bc/ultra/autoresizing", - QStringList() << "radUltraAuto" << "radUltraEcc"); - set_combobox_from_setting(settings, "studio/bc/ultra/ecc", "cmbUltraEcc"); - set_combobox_from_setting(settings, "studio/bc/ultra/revision", "cmbUltraRevision"); - set_radiobutton_from_setting(settings, "studio/bc/ultra/encoding_mode", - QStringList() << "radUltraStand" << "radUltraGS1"); - set_combobox_from_setting(settings, "studio/bc/ultra/structapp_count", "cmbUltraStructAppCount"); - set_combobox_from_setting(settings, "studio/bc/ultra/structapp_index", "cmbUltraStructAppIndex"); - set_spinbox_from_setting(settings, "studio/bc/ultra/structapp_id", "spnUltraStructAppID", 0); + set_rad_from_setting(settings, QSL("studio/bc/ultra/autoresizing"), + QStringList() << QSL("radUltraAuto") << QSL("radUltraEcc")); + set_cmb_from_setting(settings, QSL("studio/bc/ultra/ecc"), QSL("cmbUltraEcc")); + set_cmb_from_setting(settings, QSL("studio/bc/ultra/revision"), QSL("cmbUltraRevision")); + set_rad_from_setting(settings, QSL("studio/bc/ultra/encoding_mode"), + QStringList() << QSL("radUltraStand") << QSL("radUltraGS1")); + set_cmb_from_setting(settings, QSL("studio/bc/ultra/structapp_count"), QSL("cmbUltraStructAppCount")); + set_cmb_from_setting(settings, QSL("studio/bc/ultra/structapp_index"), QSL("cmbUltraStructAppIndex")); + set_spn_from_setting(settings, QSL("studio/bc/ultra/structapp_id"), QSL("spnUltraStructAppID"), 0); break; case BARCODE_UPCA: case BARCODE_UPCA_CHK: 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"); + set_cmb_from_setting(settings, QSL("studio/bc/upca/addongap"), QSL("cmbUPCAAddonGap")); + set_dspn_from_setting(settings, QSL("studio/bc/upca/guard_descent"), QSL("spnUPCAGuardDescent"), 5.0f); + set_chk_from_setting(settings, QSL("studio/bc/upca/chk_no_quiet_zones"), QSL("chkUPCANoQuietZones")); break; case BARCODE_EANX: case BARCODE_EANX_CHK: 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"); + set_cmb_from_setting(settings, QSL("studio/bc/eanx/addongap"), QSL("cmbUPCEANAddonGap")); + set_dspn_from_setting(settings, QSL("studio/bc/eanx/guard_descent"), QSL("spnUPCEANGuardDescent"), 5.0f); + set_chk_from_setting(settings, QSL("studio/bc/eanx/chk_no_quiet_zones"), QSL("chkUPCEANNoQuietZones")); break; case BARCODE_UPCE: case BARCODE_UPCE_CHK: 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"); + set_cmb_from_setting(settings, QSL("studio/bc/upce/addongap"), QSL("cmbUPCEANAddonGap")); + set_dspn_from_setting(settings, QSL("studio/bc/upce/guard_descent"), QSL("spnUPCEANGuardDescent"), 5.0f); + set_chk_from_setting(settings, QSL("studio/bc/upce/chk_no_quiet_zones"), QSL("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"); + set_cmb_from_setting(settings, QSL("studio/bc/isbnx/addongap"), QSL("cmbUPCEANAddonGap")); + set_dspn_from_setting(settings, QSL("studio/bc/isbnx/guard_descent"), QSL("spnUPCEANGuardDescent"), 5.0f); + set_chk_from_setting(settings, QSL("studio/bc/isbnx/chk_no_quiet_zones"), QSL("chkUPCEANNoQuietZones")); break; case BARCODE_VIN: - set_checkbox_from_setting(settings, "studio/bc/vin/chk_import_char_prefix", "chkVINImportChar"); + set_chk_from_setting(settings, QSL("studio/bc/vin/chk_import_char_prefix"), QSL("chkVINImportChar")); break; } } diff --git a/frontend_qt/mainwindow.h b/frontend_qt/mainwindow.h index 2640c1ef..73601c94 100644 --- a/frontend_qt/mainwindow.h +++ b/frontend_qt/mainwindow.h @@ -1,6 +1,6 @@ /*************************************************************************** * Copyright (C) 2008 by BogDan Vatra * - * Copyright (C) 2009-2020 by Robin Stuart * + * Copyright (C) 2009-2021 by Robin Stuart * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -13,6 +13,7 @@ * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * ***************************************************************************/ +/* vim: set ts=4 sw=4 et : */ #ifndef MAINWINDOW_H #define MAINWINDOW_H @@ -26,6 +27,7 @@ #include "barcodeitem.h" class QLabel; +class QShortcut; class MainWindow : public QWidget, private Ui::mainWindow { @@ -35,6 +37,8 @@ public: MainWindow(QWidget *parent = 0, Qt::WindowFlags fl = Qt::WindowFlags()); ~MainWindow(); + static QString get_zint_version(); + public slots: void update_preview(); void change_options(); @@ -42,72 +46,120 @@ public slots: void on_bgcolor_clicked(); void composite_ui_set(); void composite_ean_check(); - void maxi_scm(); + void maxi_scm_ui_set(); void msi_plessey_ui_set(); void change_print_scale(); void change_cmyk(); void autoheight_ui_set(); void HRTShow_ui_set(); void dotty_ui_set(); + void codeone_ui_set(); void structapp_ui_set(); void on_encoded(); - void filter_symbologies(); + void on_errored(); + void filter_symbologies(); + + bool save(); + void about(); + void help(); + void quit_now(); + void menu(); + + void reset_colours(); + int open_data_dialog(); + int open_sequence_dialog(); + + void copy_to_clipboard_bmp(); + void copy_to_clipboard_emf(); + void copy_to_clipboard_eps(); + void copy_to_clipboard_gif(); +#ifndef NO_PNG + void copy_to_clipboard_png(); +#endif + void copy_to_clipboard_pcx(); + void copy_to_clipboard_svg(); + void copy_to_clipboard_tif(); + + void copy_to_clipboard_errtxt(); + + void guard_reset_upcean(); + void guard_reset_upca(); + + void view_context_menu(const QPoint &pos); + void errtxtBar_context_menu(const QPoint &pos); protected: void resizeEvent(QResizeEvent *event); - void combobox_item_enabled(QComboBox *comboBox, int index, bool enabled); - void upcean_addon_gap(const char *comboBoxName, const char *labelName, int base); - void upcean_guard_descent(const char *spnBoxName, const char *labelName); + bool event(QEvent *event) override; + + void combobox_item_enabled(QComboBox *comboBox, int index, bool enabled); + void upcean_addon_gap(const QString &comboBoxName, const QString &labelName, int base); + void upcean_guard_descent(const QString &spnBoxName, const QString &labelName); + void guard_reset(const QString &spnBoxName); void set_gs1_mode(bool gs1_mode); - void set_smaller_font(QLabel *note); + void set_smaller_font(const QString &labelName); - QObject *widget_obj(const char *name); + void createActions(); + void createMenu(); + void enableActions(bool enabled); - const char *get_setting_name(int symbology); + void copy_to_clipboard(const QString &filename, const QString &name, const char *mimeType = nullptr); - int get_button_group_index(const QStringList &children); - void set_radiobutton_from_setting(QSettings &settings, const QString &setting, const QStringList &children, - int default_val = 0); + void errtxtBar_clear(); + void errtxtBar_set(bool isError); - int get_combobox_index(const QString &child); - void set_combobox_from_setting(QSettings &settings, const QString &setting, const QString &child, - int default_val = 0); + QPoint get_context_menu_pos(const QPoint &pos, QWidget *widget); - int get_checkbox_val(const QString &child); - void set_checkbox_from_setting(QSettings &settings, const QString &setting, const QString &child, - int default_val = 0); + QWidget *get_widget(const QString &name); - double get_doublespinbox_val(const QString &child); - void set_doublespinbox_from_setting(QSettings &settings, const QString &setting, const QString &child, - float default_val = 0.0f); + const QString &get_setting_name(int symbology); - QString get_lineedit_val(const QString &child); - void set_lineedit_from_setting(QSettings &settings, const QString &setting, const QString &child, - const char *default_val = ""); + int get_rad_grp_index(const QStringList &names); + void set_rad_from_setting(QSettings &settings, const QString &setting, const QStringList &names, + int default_val = 0); + bool get_rad_val(const QString &name); - int get_spinbox_val(const QString &child); - void set_spinbox_from_setting(QSettings &settings, const QString &setting, const QString &child, - int default_val = 0); + int get_cmb_index(const QString &name); + void set_cmb_from_setting(QSettings &settings, const QString &setting, const QString &name, int default_val = 0); - void save_sub_settings(QSettings &settings, int symbology); - void load_sub_settings(QSettings &settings, int symbology); + int get_chk_val(const QString &name); + void set_chk_from_setting(QSettings &settings, const QString &setting, const QString &name, int default_val = 0); -private slots: - bool save(); - void about(); - void quit_now(); - void reset_view(); - int open_data_dialog(); - int open_sequence_dialog(); - void copy_to_clipboard_svg(); - void copy_to_clipboard_bmp(); + double get_dspn_val(const QString &name); + void set_dspn_from_setting(QSettings &settings, const QString &setting, const QString &name, + float default_val = 0.0f); + + QString get_txt_val(const QString &name); + void set_txt_from_setting(QSettings &settings, const QString &setting, const QString &name, + const QString &default_val); + + int get_spn_val(const QString &name); + void set_spn_from_setting(QSettings &settings, const QString &setting, const QString &name, int default_val = 0); + + void save_sub_settings(QSettings &settings, int symbology); + void load_sub_settings(QSettings &settings, int symbology); private: QColor m_fgcolor,m_bgcolor; BarcodeItem m_bc; QWidget *m_optionWidget; QGraphicsScene *scene; - int m_symbology; + int m_symbology; + QShortcut *m_saveAsShortcut; + QMenu *m_menu; + QAction *m_copyBMPAct; + QAction *m_copyEMFAct; + QAction *m_copyEPSAct; + QAction *m_copyGIFAct; + QAction *m_copyPCXAct; + QAction *m_copyPNGAct; + QAction *m_copySVGAct; + QAction *m_copyTIFAct; + QAction *m_saveAsAct; + QAction *m_aboutAct; + QAction *m_helpAct; + QAction *m_quitAct; + QAction *m_copyErrtxtAct; }; #endif diff --git a/frontend_qt/res/LICENSE_feathericons b/frontend_qt/res/LICENSE_feathericons new file mode 100644 index 00000000..c2f512f4 --- /dev/null +++ b/frontend_qt/res/LICENSE_feathericons @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013-2017 Cole Bemis + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/frontend_qt/res/copy.svg b/frontend_qt/res/copy.svg new file mode 100644 index 00000000..4e0b09f1 --- /dev/null +++ b/frontend_qt/res/copy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend_qt/res/download.svg b/frontend_qt/res/download.svg new file mode 100644 index 00000000..76767a92 --- /dev/null +++ b/frontend_qt/res/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend_qt/res/help-circle.svg b/frontend_qt/res/help-circle.svg new file mode 100644 index 00000000..51fddd80 --- /dev/null +++ b/frontend_qt/res/help-circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend_qt/res/menu.svg b/frontend_qt/res/menu.svg new file mode 100644 index 00000000..e8a84a95 --- /dev/null +++ b/frontend_qt/res/menu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend_qt/res/x.svg b/frontend_qt/res/x.svg new file mode 100644 index 00000000..7d5875ca --- /dev/null +++ b/frontend_qt/res/x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend_qt/resources.qrc b/frontend_qt/resources.qrc index 039cd02b..3a77a2d3 100644 --- a/frontend_qt/resources.qrc +++ b/frontend_qt/resources.qrc @@ -32,5 +32,10 @@ grpUPCEAN.ui grpVIN.ui res/zint-qt.ico + res/copy.svg + res/download.svg + res/help-circle.svg + res/menu.svg + res/x.svg