mirror of
https://git.code.sf.net/p/zint/code
synced 2025-05-09 13:41:59 -04:00
DATAMATRIX: fix mis-encodation by only doing special end-of-data
processing on last segment DXFILMEDGE: error message XXX-XX -> NNN-NN, fix comments README.bsd: update to latest Free/Open/Net, "Run" section test suite: CODABLOCKF: extra tests from Okapi test suite: support DATAMATRIX ^PROG, ZXing++ AZRUNE manual/man page: CODEONE: fix WxH -> HxW and Version C width manual: backtick literals
This commit is contained in:
parent
fef00f8b92
commit
62c54adb56
17 changed files with 702 additions and 372 deletions
|
@ -1,4 +1,4 @@
|
||||||
Version 2.13.0.9 (dev) not released yet (2025-01-15)
|
Version 2.13.0.9 (dev) not released yet (2025-01-18)
|
||||||
====================================================
|
====================================================
|
||||||
|
|
||||||
**Incompatible changes**
|
**Incompatible changes**
|
||||||
|
@ -72,6 +72,8 @@ Bugs
|
||||||
- library: need to check for valid UTF-8 after de-escaping
|
- library: need to check for valid UTF-8 after de-escaping
|
||||||
- MAXICODE: maintain current set between segments
|
- MAXICODE: maintain current set between segments
|
||||||
- MSYS2: fix stdout output on Windows under MSYS2 (mailing list, props Frank)
|
- MSYS2: fix stdout output on Windows under MSYS2 (mailing list, props Frank)
|
||||||
|
- DATAMATRIX: fix mis-encodation by only doing special end-of-data processing
|
||||||
|
on last segment
|
||||||
|
|
||||||
|
|
||||||
Version 2.13.0 (2023-12-18)
|
Version 2.13.0 (2023-12-18)
|
||||||
|
|
19
README.bsd
19
README.bsd
|
@ -1,5 +1,5 @@
|
||||||
% README.bsd 2024-01-17
|
% README.bsd 2025-01-18
|
||||||
% Tested on FreeBSD 14.0-RELEASE (with X11 + GNOME installed), OpenBSD 7.4 (with X11) and NetBSD 9.3 (with X11)
|
% Tested on FreeBSD 14.2-RELEASE (with X11 + GNOME installed), OpenBSD 7.6 (with X11) and NetBSD 10.0 (with X11)
|
||||||
|
|
||||||
1. Prerequisites for building zint
|
1. Prerequisites for building zint
|
||||||
==================================
|
==================================
|
||||||
|
@ -74,7 +74,20 @@ and on NetBSD
|
||||||
instead.
|
instead.
|
||||||
|
|
||||||
|
|
||||||
3. CMake options
|
4. Run
|
||||||
|
======
|
||||||
|
|
||||||
|
On FreeBSD and OpenBSD, the CLI zint and GUI zint-qt should run without issue from the command line.
|
||||||
|
|
||||||
|
On NetBSD you may have to set LD_LIBRARY_PATH if using the default ksh. For zint ("libzint.so" and "libpng16.so") and
|
||||||
|
zint-qt (Qt5 libraries and "libGL.so"):
|
||||||
|
|
||||||
|
setenv LD_LIBRARY_PATH /usr/local/lib:/usr/pkg/lib:/usr/pkg/qt5/lib:/usr/X11R7/lib
|
||||||
|
|
||||||
|
Place in "~/.cshrc" to make permanent.
|
||||||
|
|
||||||
|
|
||||||
|
5. CMake options
|
||||||
================
|
================
|
||||||
|
|
||||||
See "README.linux". Note for running the test suite on FreeBSD, if using the default csh, to set LD_LIBRARY_PATH use:
|
See "README.linux". Note for running the test suite on FreeBSD, if using the default csh, to set LD_LIBRARY_PATH use:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* dmatrix.c Handles Data Matrix ECC 200 symbols */
|
/* dmatrix.c Handles Data Matrix ECC 200 symbols */
|
||||||
/*
|
/*
|
||||||
libzint - the open source barcode library
|
libzint - the open source barcode library
|
||||||
Copyright (C) 2009-2024 Robin Stuart <rstuart114@gmail.com>
|
Copyright (C) 2009-2025 Robin Stuart <rstuart114@gmail.com>
|
||||||
|
|
||||||
developed from and including some functions from:
|
developed from and including some functions from:
|
||||||
IEC16022 bar code generation
|
IEC16022 bar code generation
|
||||||
|
@ -323,7 +323,7 @@ static int dm_look_ahead_test(const unsigned char source[], const int length, co
|
||||||
const unsigned char c = source[sp];
|
const unsigned char c = source[sp];
|
||||||
const int is_extended = c & 0x80;
|
const int is_extended = c & 0x80;
|
||||||
|
|
||||||
/* ascii ... step (l) */
|
/* ASCII ... step (l) */
|
||||||
if (z_isdigit(c)) {
|
if (z_isdigit(c)) {
|
||||||
ascii_count += DM_MULT_1_DIV_2; /* (l)(1) */
|
ascii_count += DM_MULT_1_DIV_2; /* (l)(1) */
|
||||||
} else {
|
} else {
|
||||||
|
@ -334,7 +334,7 @@ static int dm_look_ahead_test(const unsigned char source[], const int length, co
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* c40 ... step (m) */
|
/* C40 ... step (m) */
|
||||||
if (dm_isc40(c)) {
|
if (dm_isc40(c)) {
|
||||||
c40_count += DM_MULT_2_DIV_3; /* (m)(1) */
|
c40_count += DM_MULT_2_DIV_3; /* (m)(1) */
|
||||||
} else {
|
} else {
|
||||||
|
@ -345,7 +345,7 @@ static int dm_look_ahead_test(const unsigned char source[], const int length, co
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* text ... step (n) */
|
/* TEXT ... step (n) */
|
||||||
if (dm_istext(c)) {
|
if (dm_istext(c)) {
|
||||||
text_count += DM_MULT_2_DIV_3; /* (n)(1) */
|
text_count += DM_MULT_2_DIV_3; /* (n)(1) */
|
||||||
} else {
|
} else {
|
||||||
|
@ -356,7 +356,7 @@ static int dm_look_ahead_test(const unsigned char source[], const int length, co
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* x12 ... step (o) */
|
/* X12 ... step (o) */
|
||||||
if (dm_isX12(c)) {
|
if (dm_isX12(c)) {
|
||||||
x12_count += DM_MULT_2_DIV_3; /* (o)(1) */
|
x12_count += DM_MULT_2_DIV_3; /* (o)(1) */
|
||||||
} else {
|
} else {
|
||||||
|
@ -367,7 +367,7 @@ static int dm_look_ahead_test(const unsigned char source[], const int length, co
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* edifact ... step (p) */
|
/* EDIFACT ... step (p) */
|
||||||
if (dm_isedifact(c)) {
|
if (dm_isedifact(c)) {
|
||||||
edf_count += DM_MULT_3_DIV_4; /* (p)(1) */
|
edf_count += DM_MULT_3_DIV_4; /* (p)(1) */
|
||||||
} else {
|
} else {
|
||||||
|
@ -378,7 +378,7 @@ static int dm_look_ahead_test(const unsigned char source[], const int length, co
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* base 256 ... step (q) */
|
/* Base 256 ... step (q) */
|
||||||
if (gs1 == 1 && c == '\x1D') {
|
if (gs1 == 1 && c == '\x1D') {
|
||||||
/* FNC1 separator */
|
/* FNC1 separator */
|
||||||
b256_count += DM_MULT_4; /* (q)(1) */
|
b256_count += DM_MULT_4; /* (q)(1) */
|
||||||
|
@ -740,19 +740,20 @@ static int dm_last_ascii(const unsigned char source[], const int length, const i
|
||||||
|
|
||||||
/* Treat EDIFACT edges specially, returning DM_ASCII mode if not full (i.e. encoding < 4 chars), or if
|
/* Treat EDIFACT edges specially, returning DM_ASCII mode if not full (i.e. encoding < 4 chars), or if
|
||||||
full and at EOD where 1 or 2 ASCII chars can be encoded */
|
full and at EOD where 1 or 2 ASCII chars can be encoded */
|
||||||
static int dm_getEndMode(struct zint_symbol *symbol, const unsigned char *source, const int length, const int mode,
|
static int dm_getEndMode(struct zint_symbol *symbol, const unsigned char *source, const int length,
|
||||||
const int from, const int len, const int size) {
|
const int last_seg, const int mode, const int from, const int len, const int size) {
|
||||||
if (mode == DM_EDIFACT) {
|
if (mode == DM_EDIFACT) {
|
||||||
int last_ascii;
|
|
||||||
if (len < 4) {
|
if (len < 4) {
|
||||||
return DM_ASCII;
|
return DM_ASCII;
|
||||||
}
|
}
|
||||||
last_ascii = dm_last_ascii(source, length, from + len);
|
if (last_seg) {
|
||||||
if (last_ascii) { /* At EOD with remaining chars ASCII-encodable in 1 or 2 codewords */
|
const int last_ascii = dm_last_ascii(source, length, from + len);
|
||||||
const int symbols_left = dm_codewords_remaining(symbol, size + last_ascii, 0);
|
if (last_ascii) { /* At EOD with remaining chars ASCII-encodable in 1 or 2 codewords */
|
||||||
/* If no codewords left and 1 or 2 ASCII-encodables or 1 codeword left and 1 ASCII-encodable */
|
const int symbols_left = dm_codewords_remaining(symbol, size + last_ascii, 0);
|
||||||
if (symbols_left <= 2 - last_ascii) {
|
/* If no codewords left and 1 or 2 ASCII-encodables or 1 codeword left and 1 ASCII-encodable */
|
||||||
return DM_ASCII;
|
if (symbols_left <= 2 - last_ascii) {
|
||||||
|
return DM_ASCII;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -796,12 +797,11 @@ static int dm_getNumberOfC40Words(const unsigned char *source, const int length,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize a new edge. Returns endMode */
|
/* Initialize a new edge. Returns endMode */
|
||||||
static int dm_new_Edge(struct zint_symbol *symbol, const unsigned char *source, const int length,
|
static int dm_new_Edge(struct zint_symbol *symbol, const unsigned char *source, const int length, const int last_seg,
|
||||||
struct dm_edge *edges, const int mode, const int from, const int len, struct dm_edge *previous,
|
struct dm_edge *edges, const int mode, const int from, const int len, struct dm_edge *previous,
|
||||||
struct dm_edge *edge, const int cwds) {
|
struct dm_edge *edge, const int cwds) {
|
||||||
int previousMode;
|
int previousMode;
|
||||||
int size;
|
int size;
|
||||||
int last_ascii, symbols_left;
|
|
||||||
|
|
||||||
edge->mode = mode;
|
edge->mode = mode;
|
||||||
edge->endMode = mode;
|
edge->endMode = mode;
|
||||||
|
@ -859,9 +859,9 @@ static int dm_new_Edge(struct zint_symbol *symbol, const unsigned char *source,
|
||||||
size++; /* Unlatch to ASCII */
|
size++; /* Unlatch to ASCII */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (from + len + 2 >= length) { /* If less than batch of 3 away from EOD */
|
if (last_seg && from + len + 2 >= length) { /* If less than batch of 3 away from EOD */
|
||||||
last_ascii = dm_last_ascii(source, length, from + len);
|
const int last_ascii = dm_last_ascii(source, length, from + len);
|
||||||
symbols_left = dm_codewords_remaining(symbol, size + last_ascii, 0);
|
const int symbols_left = dm_codewords_remaining(symbol, size + last_ascii, 0);
|
||||||
if (symbols_left > 0) {
|
if (symbols_left > 0) {
|
||||||
size++; /* We need an extra unlatch at the end */
|
size++; /* We need an extra unlatch at the end */
|
||||||
}
|
}
|
||||||
|
@ -877,12 +877,12 @@ static int dm_new_Edge(struct zint_symbol *symbol, const unsigned char *source,
|
||||||
size++; /* Unlatch to ASCII */
|
size++; /* Unlatch to ASCII */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (from + len + 2 >= length) { /* If less than batch of 3 away from EOD */
|
if (last_seg && from + len + 2 >= length) { /* If less than batch of 3 away from EOD */
|
||||||
last_ascii = dm_last_ascii(source, length, from + len);
|
const int last_ascii = dm_last_ascii(source, length, from + len);
|
||||||
if (last_ascii == 2) { /* Only 1 ASCII-encodable allowed at EOD for X12, unlike C40/TEXT */
|
if (last_ascii == 2) { /* Only 1 ASCII-encodable allowed at EOD for X12, unlike C40/TEXT */
|
||||||
size++; /* We need an extra unlatch at the end */
|
size++; /* We need an extra unlatch at the end */
|
||||||
} else {
|
} else {
|
||||||
symbols_left = dm_codewords_remaining(symbol, size + last_ascii, 0);
|
const int symbols_left = dm_codewords_remaining(symbol, size + last_ascii, 0);
|
||||||
if (symbols_left > 0) {
|
if (symbols_left > 0) {
|
||||||
size++; /* We need an extra unlatch at the end */
|
size++; /* We need an extra unlatch at the end */
|
||||||
}
|
}
|
||||||
|
@ -898,7 +898,7 @@ static int dm_new_Edge(struct zint_symbol *symbol, const unsigned char *source,
|
||||||
size++; /* Unlatch to ASCII */
|
size++; /* Unlatch to ASCII */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
edge->endMode = dm_getEndMode(symbol, source, length, mode, from, len, size);
|
edge->endMode = dm_getEndMode(symbol, source, length, last_seg, mode, from, len, size);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
edge->size = size;
|
edge->size = size;
|
||||||
|
@ -907,11 +907,11 @@ static int dm_new_Edge(struct zint_symbol *symbol, const unsigned char *source,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add an edge for a mode at a vertex if no existing edge or if more optimal than existing edge */
|
/* Add an edge for a mode at a vertex if no existing edge or if more optimal than existing edge */
|
||||||
static void dm_addEdge(struct zint_symbol *symbol, const unsigned char *source, const int length,
|
static void dm_addEdge(struct zint_symbol *symbol, const unsigned char *source, const int length, const int last_seg,
|
||||||
struct dm_edge *edges, const int mode, const int from, const int len, struct dm_edge *previous,
|
struct dm_edge *edges, const int mode, const int from, const int len, struct dm_edge *previous,
|
||||||
const int cwds) {
|
const int cwds) {
|
||||||
struct dm_edge edge;
|
struct dm_edge edge;
|
||||||
const int endMode = dm_new_Edge(symbol, source, length, edges, mode, from, len, previous, &edge, cwds);
|
const int endMode = dm_new_Edge(symbol, source, length, last_seg, edges, mode, from, len, previous, &edge, cwds);
|
||||||
const int vertexIndex = from + len;
|
const int vertexIndex = from + len;
|
||||||
const int v_ij = vertexIndex * DM_NUM_MODES + endMode - 1;
|
const int v_ij = vertexIndex * DM_NUM_MODES + endMode - 1;
|
||||||
|
|
||||||
|
@ -925,7 +925,7 @@ static void dm_addEdge(struct zint_symbol *symbol, const unsigned char *source,
|
||||||
|
|
||||||
/* Add edges for the various modes at a vertex */
|
/* Add edges for the various modes at a vertex */
|
||||||
static void dm_addEdges(struct zint_symbol *symbol, const unsigned char source[], const int length,
|
static void dm_addEdges(struct zint_symbol *symbol, const unsigned char source[], const int length,
|
||||||
struct dm_edge *edges, const int from, struct dm_edge *previous, const int gs1) {
|
const int last_seg, struct dm_edge *edges, const int from, struct dm_edge *previous, const int gs1) {
|
||||||
int i, pos;
|
int i, pos;
|
||||||
|
|
||||||
/* Not possible to unlatch a full EDF edge to something else */
|
/* Not possible to unlatch a full EDF edge to something else */
|
||||||
|
@ -934,29 +934,29 @@ static void dm_addEdges(struct zint_symbol *symbol, const unsigned char source[]
|
||||||
static const char c40text_modes[] = { DM_C40, DM_TEXT };
|
static const char c40text_modes[] = { DM_C40, DM_TEXT };
|
||||||
|
|
||||||
if (z_isdigit(source[from]) && from + 1 < length && z_isdigit(source[from + 1])) {
|
if (z_isdigit(source[from]) && from + 1 < length && z_isdigit(source[from + 1])) {
|
||||||
dm_addEdge(symbol, source, length, edges, DM_ASCII, from, 2, previous, 0);
|
dm_addEdge(symbol, source, length, last_seg, edges, DM_ASCII, from, 2, previous, 0);
|
||||||
/* If ASCII vertex, don't bother adding other edges as this will be optimal; suggested by Alex Geller */
|
/* If ASCII vertex, don't bother adding other edges as this will be optimal; suggested by Alex Geller */
|
||||||
if (previous && previous->mode == DM_ASCII) {
|
if (previous && previous->mode == DM_ASCII) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dm_addEdge(symbol, source, length, edges, DM_ASCII, from, 1, previous, 0);
|
dm_addEdge(symbol, source, length, last_seg, edges, DM_ASCII, from, 1, previous, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(c40text_modes); i++) {
|
for (i = 0; i < ARRAY_SIZE(c40text_modes); i++) {
|
||||||
int len;
|
int len;
|
||||||
int cwds = dm_getNumberOfC40Words(source, length, from, c40text_modes[i], &len);
|
int cwds = dm_getNumberOfC40Words(source, length, from, c40text_modes[i], &len);
|
||||||
if (cwds) {
|
if (cwds) {
|
||||||
dm_addEdge(symbol, source, length, edges, c40text_modes[i], from, len, previous, cwds);
|
dm_addEdge(symbol, source, length, last_seg, edges, c40text_modes[i], from, len, previous, cwds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (from + 2 < length && dm_isX12(source[from]) && dm_isX12(source[from + 1]) && dm_isX12(source[from + 2])) {
|
if (from + 2 < length && dm_isX12(source[from]) && dm_isX12(source[from + 1]) && dm_isX12(source[from + 2])) {
|
||||||
dm_addEdge(symbol, source, length, edges, DM_X12, from, 3, previous, 0);
|
dm_addEdge(symbol, source, length, last_seg, edges, DM_X12, from, 3, previous, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gs1 != 1 || source[from] != '\x1D') {
|
if (gs1 != 1 || source[from] != '\x1D') {
|
||||||
dm_addEdge(symbol, source, length, edges, DM_BASE256, from, 1, previous, 0);
|
dm_addEdge(symbol, source, length, last_seg, edges, DM_BASE256, from, 1, previous, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -964,14 +964,14 @@ static void dm_addEdges(struct zint_symbol *symbol, const unsigned char source[]
|
||||||
/* We create 3 EDF edges, 2, 3 or 4 characters length. The 4-char normally doesn't have a latch to ASCII
|
/* We create 3 EDF edges, 2, 3 or 4 characters length. The 4-char normally doesn't have a latch to ASCII
|
||||||
unless it is 2 characters away from the end of the input. */
|
unless it is 2 characters away from the end of the input. */
|
||||||
for (i = 1, pos = from + i; i < 4 && pos < length && dm_isedifact(source[pos]); i++, pos++) {
|
for (i = 1, pos = from + i; i < 4 && pos < length && dm_isedifact(source[pos]); i++, pos++) {
|
||||||
dm_addEdge(symbol, source, length, edges, DM_EDIFACT, from, i + 1, previous, 0);
|
dm_addEdge(symbol, source, length, last_seg, edges, DM_EDIFACT, from, i + 1, previous, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calculate optimized encoding modes */
|
/* Calculate optimized encoding modes */
|
||||||
static int dm_define_mode(struct zint_symbol *symbol, char modes[], const unsigned char source[], const int length,
|
static int dm_define_mode(struct zint_symbol *symbol, char modes[], const unsigned char source[], const int length,
|
||||||
const int gs1, const int debug_print) {
|
const int last_seg, const int gs1, const int debug_print) {
|
||||||
|
|
||||||
int i, j, v_i;
|
int i, j, v_i;
|
||||||
int minimalJ, minimalSize;
|
int minimalJ, minimalSize;
|
||||||
|
@ -983,7 +983,7 @@ static int dm_define_mode(struct zint_symbol *symbol, char modes[], const unsign
|
||||||
if (!edges) {
|
if (!edges) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
dm_addEdges(symbol, source, length, edges, 0, NULL, gs1);
|
dm_addEdges(symbol, source, length, last_seg, edges, 0, NULL, gs1);
|
||||||
|
|
||||||
DM_TRACE_Edges("DEBUG Initial situation\n", source, length, edges, 0);
|
DM_TRACE_Edges("DEBUG Initial situation\n", source, length, edges, 0);
|
||||||
|
|
||||||
|
@ -991,7 +991,7 @@ static int dm_define_mode(struct zint_symbol *symbol, char modes[], const unsign
|
||||||
v_i = i * DM_NUM_MODES;
|
v_i = i * DM_NUM_MODES;
|
||||||
for (j = 0; j < DM_NUM_MODES; j++) {
|
for (j = 0; j < DM_NUM_MODES; j++) {
|
||||||
if (edges[v_i + j].mode) {
|
if (edges[v_i + j].mode) {
|
||||||
dm_addEdges(symbol, source, length, edges, i, edges + v_i + j, gs1);
|
dm_addEdges(symbol, source, length, last_seg, edges, i, edges + v_i + j, gs1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DM_TRACE_Edges("DEBUG situation after adding edges to vertices at position %d\n", source, length, edges, i);
|
DM_TRACE_Edges("DEBUG situation after adding edges to vertices at position %d\n", source, length, edges, i);
|
||||||
|
@ -1046,20 +1046,19 @@ static int dm_define_mode(struct zint_symbol *symbol, char modes[], const unsign
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Do default minimal encodation */
|
/* Do default minimal encodation */
|
||||||
static int dm_minimalenc(struct zint_symbol *symbol, const unsigned char source[], const int length, int *p_sp,
|
static int dm_minimalenc(struct zint_symbol *symbol, const unsigned char source[], const int length,
|
||||||
unsigned char target[], int *p_tp, int process_buffer[8], int *p_process_p, int *p_b256_start,
|
const int last_seg, int *p_sp, unsigned char target[], int *p_tp, int process_buffer[8], int *p_process_p,
|
||||||
int *p_current_mode, const int gs1, const int debug_print) {
|
int *p_b256_start, int *p_current_mode, const int gs1, const int debug_print) {
|
||||||
int sp = *p_sp;
|
int sp = *p_sp;
|
||||||
int tp = *p_tp;
|
int tp = *p_tp;
|
||||||
int process_p = *p_process_p;
|
int process_p = *p_process_p;
|
||||||
int current_mode = *p_current_mode;
|
int current_mode = *p_current_mode;
|
||||||
int last_ascii, symbols_left;
|
|
||||||
int i;
|
int i;
|
||||||
char *modes = (char *) z_alloca(length);
|
char *modes = (char *) z_alloca(length);
|
||||||
|
|
||||||
assert(length <= 10921); /* Can only handle (10921 + 1) * 6 = 65532 < 65536 (2*16) due to sizeof(previous) */
|
assert(length <= 10921); /* Can only handle (10921 + 1) * 6 = 65532 < 65536 (2*16) due to sizeof(previous) */
|
||||||
|
|
||||||
if (!dm_define_mode(symbol, modes, source, length, gs1, debug_print)) {
|
if (!dm_define_mode(symbol, modes, source, length, last_seg, gs1, debug_print)) {
|
||||||
return errtxt(ZINT_ERROR_MEMORY, symbol, 728, "Insufficient memory for mode buffers");
|
return errtxt(ZINT_ERROR_MEMORY, symbol, 728, "Insufficient memory for mode buffers");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1074,17 +1073,19 @@ static int dm_minimalenc(struct zint_symbol *symbol, const unsigned char source[
|
||||||
target[tp++] = 254; /* Unlatch */
|
target[tp++] = 254; /* Unlatch */
|
||||||
break;
|
break;
|
||||||
case DM_EDIFACT:
|
case DM_EDIFACT:
|
||||||
last_ascii = dm_last_ascii(source, length, sp);
|
if (last_seg) {
|
||||||
if (!last_ascii) {
|
const int last_ascii = dm_last_ascii(source, length, sp);
|
||||||
process_buffer[process_p++] = 31; /* Unlatch */
|
if (!last_ascii) {
|
||||||
} else {
|
|
||||||
symbols_left = dm_codewords_remaining(symbol, tp + last_ascii, process_p);
|
|
||||||
if (debug_print) {
|
|
||||||
printf("process_p %d, last_ascii %d, symbols_left %d\n",
|
|
||||||
process_p, last_ascii, symbols_left);
|
|
||||||
}
|
|
||||||
if (symbols_left > 2 - last_ascii) {
|
|
||||||
process_buffer[process_p++] = 31; /* Unlatch */
|
process_buffer[process_p++] = 31; /* Unlatch */
|
||||||
|
} else {
|
||||||
|
const int symbols_left = dm_codewords_remaining(symbol, tp + last_ascii, process_p);
|
||||||
|
if (debug_print) {
|
||||||
|
printf("process_p %d, last_ascii %d, symbols_left %d, last_seg %d\n",
|
||||||
|
process_p, last_ascii, symbols_left, last_seg);
|
||||||
|
}
|
||||||
|
if (symbols_left > 2 - last_ascii) {
|
||||||
|
process_buffer[process_p++] = 31; /* Unlatch */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
process_p = dm_edi_buffer_xfer(process_buffer, process_p, target, &tp, 1 /*empty*/, debug_print);
|
process_p = dm_edi_buffer_xfer(process_buffer, process_p, target, &tp, 1 /*empty*/, debug_print);
|
||||||
|
@ -1251,7 +1252,7 @@ static int dm_isoenc(struct zint_symbol *symbol, const unsigned char source[], c
|
||||||
next_mode = DM_C40;
|
next_mode = DM_C40;
|
||||||
tp = dm_switch_mode(next_mode, target, tp, p_b256_start, debug_print);
|
tp = dm_switch_mode(next_mode, target, tp, p_b256_start, debug_print);
|
||||||
while (sp < 45) {
|
while (sp < 45) {
|
||||||
assert(!(sp & 0x80));
|
assert(dm_isc40(source[sp]));
|
||||||
process_buffer[process_p++] = dm_c40_value[source[sp]];
|
process_buffer[process_p++] = dm_c40_value[source[sp]];
|
||||||
|
|
||||||
if (process_p >= 3) {
|
if (process_p >= 3) {
|
||||||
|
@ -1488,7 +1489,7 @@ static int dm_isoenc(struct zint_symbol *symbol, const unsigned char source[], c
|
||||||
/* Encodes data using ASCII, C40, Text, X12, EDIFACT or Base 256 modes as appropriate
|
/* Encodes data using ASCII, C40, Text, X12, EDIFACT or Base 256 modes as appropriate
|
||||||
Supports encoding FNC1 in supporting systems */
|
Supports encoding FNC1 in supporting systems */
|
||||||
static int dm_encode(struct zint_symbol *symbol, const unsigned char source[], const int length, const int eci,
|
static int dm_encode(struct zint_symbol *symbol, const unsigned char source[], const int length, const int eci,
|
||||||
const int gs1, unsigned char target[], int *p_tp) {
|
const int last_seg, const int gs1, unsigned char target[], int *p_tp) {
|
||||||
int sp = 0;
|
int sp = 0;
|
||||||
int tp = *p_tp;
|
int tp = *p_tp;
|
||||||
int current_mode = DM_ASCII;
|
int current_mode = DM_ASCII;
|
||||||
|
@ -1521,23 +1522,23 @@ static int dm_encode(struct zint_symbol *symbol, const unsigned char source[], c
|
||||||
error_number = dm_isoenc(symbol, source, length, &sp, target, &tp, process_buffer, &process_p,
|
error_number = dm_isoenc(symbol, source, length, &sp, target, &tp, process_buffer, &process_p,
|
||||||
&b256_start, ¤t_mode, gs1, debug_print);
|
&b256_start, ¤t_mode, gs1, debug_print);
|
||||||
} else { /* Do default minimal encodation */
|
} else { /* Do default minimal encodation */
|
||||||
error_number = dm_minimalenc(symbol, source, length, &sp, target, &tp, process_buffer, &process_p,
|
error_number = dm_minimalenc(symbol, source, length, last_seg, &sp, target, &tp, process_buffer, &process_p,
|
||||||
&b256_start, ¤t_mode, gs1, debug_print);
|
&b256_start, ¤t_mode, gs1, debug_print);
|
||||||
}
|
}
|
||||||
if (error_number != 0) {
|
if (error_number != 0) {
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
symbols_left = dm_codewords_remaining(symbol, tp, process_p);
|
symbols_left = last_seg ? dm_codewords_remaining(symbol, tp, process_p) : 3;
|
||||||
|
|
||||||
if (debug_print) printf("\nsymbols_left %d, tp %d, process_p %d ", symbols_left, tp, process_p);
|
if (debug_print) printf("\nsymbols_left %d, tp %d, process_p %d, last_seg %d, ", symbols_left, tp, process_p, last_seg);
|
||||||
|
|
||||||
if (current_mode == DM_C40 || current_mode == DM_TEXT) {
|
if (current_mode == DM_C40 || current_mode == DM_TEXT) {
|
||||||
/* NOTE: changed to follow spec exactly here, only using Shift 1 padded triplets when 2 symbol chars remain.
|
/* NOTE: changed to follow spec exactly here, only using Shift 1 padded triplets when 2 symbol chars remain.
|
||||||
This matches the behaviour of BWIPP but not tec-it, nor figures 4.15.1-1 and 4.15-1-2 in GS1 General
|
This matches the behaviour of BWIPP but not TEC-IT, nor figures 4.15.1-1 and 4.15-1-2 in GS1 General
|
||||||
Specifications 21.0.1.
|
Specifications 21.0.1.
|
||||||
*/
|
*/
|
||||||
if (debug_print) printf("%s ", current_mode == DM_C40 ? "C40" : "TEX");
|
if (debug_print) fputs(current_mode == DM_C40 ? "C40 " : "TEX ", stdout);
|
||||||
if (process_p == 0) {
|
if (process_p == 0) {
|
||||||
if (symbols_left > 0) {
|
if (symbols_left > 0) {
|
||||||
target[tp++] = 254; /* Unlatch */
|
target[tp++] = 254; /* Unlatch */
|
||||||
|
@ -1553,7 +1554,7 @@ static int dm_encode(struct zint_symbol *symbol, const unsigned char source[], c
|
||||||
/* 5.2.5.2 (c)/(d) */
|
/* 5.2.5.2 (c)/(d) */
|
||||||
if (symbols_left > 1) {
|
if (symbols_left > 1) {
|
||||||
/* 5.2.5.2 (c) */
|
/* 5.2.5.2 (c) */
|
||||||
target[tp++] = 254; /* Unlatch and encode remaining data in ascii. */
|
target[tp++] = 254; /* Unlatch and encode remaining data in ASCII. */
|
||||||
if (debug_print) fputs("ASC ", stdout);
|
if (debug_print) fputs("ASC ", stdout);
|
||||||
}
|
}
|
||||||
target[tp++] = source[length - 1] + 1;
|
target[tp++] = source[length - 1] + 1;
|
||||||
|
@ -1568,7 +1569,6 @@ static int dm_encode(struct zint_symbol *symbol, const unsigned char source[], c
|
||||||
total_cnt += cnt;
|
total_cnt += cnt;
|
||||||
process_p -= cnt;
|
process_p -= cnt;
|
||||||
}
|
}
|
||||||
if (debug_print) printf("Mode %d, backtracked %d\n", current_mode, (total_cnt / 3) * 2);
|
|
||||||
tp -= (total_cnt / 3) * 2;
|
tp -= (total_cnt / 3) * 2;
|
||||||
|
|
||||||
target[tp++] = 254; /* Unlatch */
|
target[tp++] = 254; /* Unlatch */
|
||||||
|
@ -1632,7 +1632,7 @@ static int dm_encode(struct zint_symbol *symbol, const unsigned char source[], c
|
||||||
if (debug_print) printf("A%02X A%02X ", target[tp - 2] - 1, target[tp - 1] - 1);
|
if (debug_print) printf("A%02X A%02X ", target[tp - 2] - 1, target[tp - 1] - 1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Append edifact unlatch value (31) and empty buffer */
|
/* Append EDIFACT unlatch value (31) and empty buffer */
|
||||||
if (process_p <= 3) {
|
if (process_p <= 3) {
|
||||||
process_buffer[process_p++] = 31;
|
process_buffer[process_p++] = 31;
|
||||||
}
|
}
|
||||||
|
@ -1665,8 +1665,8 @@ static int dm_encode(struct zint_symbol *symbol, const unsigned char source[], c
|
||||||
|
|
||||||
#ifdef ZINT_TEST /* Wrapper for direct testing */
|
#ifdef ZINT_TEST /* Wrapper for direct testing */
|
||||||
INTERNAL int dm_encode_test(struct zint_symbol *symbol, const unsigned char source[], const int length, const int eci,
|
INTERNAL int dm_encode_test(struct zint_symbol *symbol, const unsigned char source[], const int length, const int eci,
|
||||||
const int gs1, unsigned char target[], int *p_tp) {
|
const int last_seg, const int gs1, unsigned char target[], int *p_tp) {
|
||||||
return dm_encode(symbol, source, length, eci, gs1, target, p_tp);
|
return dm_encode(symbol, source, length, eci, last_seg, gs1, target, p_tp);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1803,8 +1803,8 @@ static int dm_encode_segs(struct zint_symbol *symbol, struct zint_seg segs[], co
|
||||||
len_dec += 2; /* Remove RS + EOT from end */
|
len_dec += 2; /* Remove RS + EOT from end */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
error_number = dm_encode(symbol, segs[i].source + src_inc, segs[i].length - len_dec, segs[i].eci, gs1,
|
error_number = dm_encode(symbol, segs[i].source + src_inc, segs[i].length - len_dec, segs[i].eci,
|
||||||
target, &tp);
|
i + 1 == seg_count, gs1, target, &tp);
|
||||||
if (error_number != 0) {
|
if (error_number != 0) {
|
||||||
return error_number;
|
return error_number;
|
||||||
}
|
}
|
||||||
|
@ -1874,7 +1874,7 @@ static int dm_ecc200(struct zint_symbol *symbol, struct zint_seg segs[], const i
|
||||||
dm_add_tail(binary, binlen, taillength);
|
dm_add_tail(binary, binlen, taillength);
|
||||||
}
|
}
|
||||||
if (debug_print) {
|
if (debug_print) {
|
||||||
printf("Pads (%d): ", taillength);
|
printf("HxW: %dx%d\nPads (%d): ", H, W, taillength);
|
||||||
for (i = binlen; i < binlen + taillength; i++) printf("%d ", binary[i]);
|
for (i = binlen; i < binlen + taillength; i++) printf("%d ", binary[i]);
|
||||||
fputc('\n', stdout);
|
fputc('\n', stdout);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* dxfilmedge.c - Handles DX Film Edge symbology */
|
/* dxfilmedge.c - Handles DX Film Edge symbology */
|
||||||
/*
|
/*
|
||||||
libzint - the open source barcode library
|
libzint - the open source barcode library
|
||||||
Copyright (C) 2024 Antoine Merino <antoine.merino.dev@gmail.com>
|
Copyright (C) 2024-2025 Antoine Merino <antoine.merino.dev@gmail.com>
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
|
@ -45,10 +45,10 @@
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
#define DX_DEBUG_STR_LEN 20
|
#define DX_DEBUG_STR_LEN 20
|
||||||
/* Max length of the DX info part. Include the \0. Eg: "018500\0", "150-10\0" */
|
/* Max length of the DX info part. Eg: "018500", "150-10" */
|
||||||
#define DX_MAX_DX_INFO_LENGTH 6
|
#define DX_MAX_DX_INFO_LENGTH 6
|
||||||
#define DX_MAX_DX_INFO_MAX_STR "6" /* String version of above */
|
#define DX_MAX_DX_INFO_MAX_STR "6" /* String version of above */
|
||||||
/* Max length of the frame info part. Eg: "00A\0", "23A\0" */
|
/* Max length of the frame info part. Eg: "00A", "23A" */
|
||||||
#define DX_MAX_FRAME_INFO_LENGTH 3
|
#define DX_MAX_FRAME_INFO_LENGTH 3
|
||||||
#define DX_MAX_FRAME_INFO_MAX_STR "3" /* String version of above */
|
#define DX_MAX_FRAME_INFO_MAX_STR "3" /* String version of above */
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ static int dx_parse_code(struct zint_symbol *symbol, const unsigned char *source
|
||||||
}
|
}
|
||||||
if (sscanf(dx_info, "%d-%d", &dx_code_1, &dx_code_2) < 2) {
|
if (sscanf(dx_info, "%d-%d", &dx_code_1, &dx_code_2) < 2) {
|
||||||
return errtxt(ZINT_ERROR_INVALID_DATA, symbol, 977,
|
return errtxt(ZINT_ERROR_INVALID_DATA, symbol, 977,
|
||||||
"Wrong format for DX parts 1 and 2 (expected format: XXX-XX, digits)");
|
"Wrong format for DX parts 1 and 2 (expected format: NNN-NN, digits)");
|
||||||
}
|
}
|
||||||
if (dx_code_1 <= 0 || dx_code_1 > 127) {
|
if (dx_code_1 <= 0 || dx_code_1 > 127) {
|
||||||
return errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 978, "DX part 1 \"%d\" out of range (1 to 127)",
|
return errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 978, "DX part 1 \"%d\" out of range (1 to 127)",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
libzint - the open source barcode library
|
libzint - the open source barcode library
|
||||||
Copyright (C) 2019-2024 Robin Stuart <rstuart114@gmail.com>
|
Copyright (C) 2019-2025 Robin Stuart <rstuart114@gmail.com>
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
|
@ -332,8 +332,14 @@ static void test_input(const testCtx *const p_ctx) {
|
||||||
/* 42*/ { BARCODE_CODABLOCKF, UNICODE_MODE, -1, -1, "ÿ12345678\012à12345678abcdef\0121\01223456\012\0127890àAàBCDEFà\012\012à", -1, 0, 8, 134, 0, "(96) 67 64 46 64 5F 63 0C 22 38 4E 5E 6A 67 62 0B 4A 64 64 40 63 0C 22 2B 6A 67 63 2C 38", "BWIPP different encoding (CodeB before FNC4 instead of after)" },
|
/* 42*/ { BARCODE_CODABLOCKF, UNICODE_MODE, -1, -1, "ÿ12345678\012à12345678abcdef\0121\01223456\012\0127890àAàBCDEFà\012\012à", -1, 0, 8, 134, 0, "(96) 67 64 46 64 5F 63 0C 22 38 4E 5E 6A 67 62 0B 4A 64 64 40 63 0C 22 2B 6A 67 63 2C 38", "BWIPP different encoding (CodeB before FNC4 instead of after)" },
|
||||||
/* 43*/ { BARCODE_CODABLOCKF, UNICODE_MODE, -1, -1, "123456789012345ABCDEFGHI\012123456ÿ12345678\012à12345678abcdef\012\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890àààààààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄÄÄÄÄÄÄÄÄÄ2ÄÄÄÄÄÄÄÄ4ÄÄÄÄÄÄAÄÄÄÄÄÄaÄÄÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécé123456789012345ABCDEFGHI\012123456ÿ12345678\012à12345678abcdef\012\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890àààààààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄÄÄÄÄÄÄÄÄÄ2ÄÄÄÄÄÄÄÄ4ÄÄÄÄÄÄAÄÄÄÄÄÄaÄÄÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécé12345123456789012345ABCDEFGHI\012123456ÿ12345678\012à12345678abcdef\012\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890àààààààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄÄÄÄÄÄÄÄÄÄ2ÄÄÄÄÄÄÄÄ4ÄÄÄÄÄÄAÄÄÄÄÄÄaÄÄÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécé123456789012345ABCDEFGHI\012123456ÿ12345678\012à12345678abcdef\012\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890àààààààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2" "B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄÄÄÄÄÄÄÄÄÄ2ÄÄÄÄÄÄÄÄ4ÄÄÄÄÄÄAÄÄÄÄÄÄaÄÄÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécé6789012345ABCDEFGHI\012123456ÿ12345678\012à12345678abcdef\012\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890àààààààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄÄÄÄÄÄÄÄÄÄ2ÄÄÄÄÄÄÄÄ4ÄÄÄÄÄÄAÄÄÄÄÄÄaÄÄÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécé123456789012345ABCDEFGHI\012123456ÿ12345678\012à12345678abcdef\012\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890àààààààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\012123456à\012à\012à\0123Ä4Ä5Ä6AÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécéÄÄÄÄÄÄ2ÄÄÄÄÄÄÄÄ4ÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécéÄÄÄAÄÄÄÄÄÄaÄÄÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécé", -1, 0, 44, 739, 0, "(2948) 67 63 2A 0C 22 38 4E 5A 0C 22 65 15 21 22 23 24 25 26 27 28 29 4A 63 0C 22 38 64", "BWIPP gs command too long" },
|
/* 43*/ { BARCODE_CODABLOCKF, UNICODE_MODE, -1, -1, "123456789012345ABCDEFGHI\012123456ÿ12345678\012à12345678abcdef\012\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890àààààààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄÄÄÄÄÄÄÄÄÄ2ÄÄÄÄÄÄÄÄ4ÄÄÄÄÄÄAÄÄÄÄÄÄaÄÄÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécé123456789012345ABCDEFGHI\012123456ÿ12345678\012à12345678abcdef\012\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890àààààààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄÄÄÄÄÄÄÄÄÄ2ÄÄÄÄÄÄÄÄ4ÄÄÄÄÄÄAÄÄÄÄÄÄaÄÄÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécé12345123456789012345ABCDEFGHI\012123456ÿ12345678\012à12345678abcdef\012\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890àààààààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄÄÄÄÄÄÄÄÄÄ2ÄÄÄÄÄÄÄÄ4ÄÄÄÄÄÄAÄÄÄÄÄÄaÄÄÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécé123456789012345ABCDEFGHI\012123456ÿ12345678\012à12345678abcdef\012\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890àààààààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2" "B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄÄÄÄÄÄÄÄÄÄ2ÄÄÄÄÄÄÄÄ4ÄÄÄÄÄÄAÄÄÄÄÄÄaÄÄÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécé6789012345ABCDEFGHI\012123456ÿ12345678\012à12345678abcdef\012\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890àààààààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄÄÄÄÄÄÄÄÄÄ2ÄÄÄÄÄÄÄÄ4ÄÄÄÄÄÄAÄÄÄÄÄÄaÄÄÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécé123456789012345ABCDEFGHI\012123456ÿ12345678\012à12345678abcdef\012\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890àààààààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\012123456à\012à\012à\0123Ä4Ä5Ä6AÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécéÄÄÄÄÄÄ2ÄÄÄÄÄÄÄÄ4ÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécéÄÄÄAÄÄÄÄÄÄaÄÄÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécé", -1, 0, 44, 739, 0, "(2948) 67 63 2A 0C 22 38 4E 5A 0C 22 65 15 21 22 23 24 25 26 27 28 29 4A 63 0C 22 38 64", "BWIPP gs command too long" },
|
||||||
/* 44*/ { BARCODE_CODABLOCKF, UNICODE_MODE, -1, -1, "ÿ12345678\012à12345678abcdef\012\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890ààààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄÄÄÄÄ2ÄÄÄÄÄÄ4ÄÄÄÄÄÄaÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécé123456789012345ABCDEFGHI\012123456ÿ12345678\012à12345678abcdef\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\0122567890àààààABCDEFGààà\012\012\012HIJK\012\012\0122à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄ2Ä4ÄaÄé1é2é34é56Ä78é9éAéBéCééaébécé123456789012345ABCDEF\012123456ÿ123456\012à12345678abcdef\012\0121234\012\0127890àABCDà\012\012ààGHIJKàLMabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890ààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2", -1, 0, 33, 387, 0, "(1155) 67 64 5F 64 5F 63 0C 22 38 4E 65 4A 64 64 40 63 0C 22 38 4E 64 41 42 43 44 45 46", "BWIPP different encodation" },
|
/* 44*/ { BARCODE_CODABLOCKF, UNICODE_MODE, -1, -1, "ÿ12345678\012à12345678abcdef\012\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890ààààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄÄÄÄÄ2ÄÄÄÄÄÄ4ÄÄÄÄÄÄaÄÄÄÄé1é2é34é56Ä78é9éAéBéCéééééaébécé123456789012345ABCDEFGHI\012123456ÿ12345678\012à12345678abcdef\012123456\012\0127890àABCDEFà\012\012ààGHIJKàLMNOPQabc\012defà1234567ghijk\012\012à901234\0122567890àààààABCDEFGààà\012\012\012HIJK\012\012\0122à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2B3C4a5b6c7d8e9\0120\0121\0122\0123Ä4Ä5Ä6A7a8A9a0\012Ä12345678ÄÄ2Ä4ÄaÄé1é2é34é56Ä78é9éAéBéCééaébécé123456789012345ABCDEF\012123456ÿ123456\012à12345678abcdef\012\0121234\012\0127890àABCDà\012\012ààGHIJKàLMabc\012defà1234567ghijk\012\012à901234\012\012\012\012567890ààABCDEFGààà\012\012\012HIJK\012\012\012\012à\012à\012à\01212345à\012à\012à67890ààÄ9012ÄÄ56789Ä12Ä3\0124\0125\0126A\012a\012A\012A\012a\012a\012BCD1A2", -1, 0, 33, 387, 0, "(1155) 67 64 5F 64 5F 63 0C 22 38 4E 65 4A 64 64 40 63 0C 22 38 4E 64 41 42 43 44 45 46", "BWIPP different encodation" },
|
||||||
/* 45*/ { BARCODE_HIBC_BLOCKF, UNICODE_MODE, -1, -1, "A99912345/$$52001510X3", -1, 0, 6, 101, 1, "(54) 67 64 44 0B 21 19 19 3A 6A 67 63 2B 5B 17 2D 64 24 6A 67 64 0C 0F 04 04 15 16 6A 67", "" },
|
/* 45*/ { BARCODE_CODABLOCKF, DATA_MODE | ESCAPE_MODE, -1, -1, "\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09", -1, 0, 3, 101, 1, "67 62 41 41 42 43 44 5B 6A 67 62 0B 45 46 47 48 37 6A 67 62 0C 49 63 1B 44 2C 6A", "Okapi control-chars-1.png" },
|
||||||
/* 46*/ { BARCODE_HIBC_BLOCKF, UNICODE_MODE, -1, -1, "A99912345/$$520:1510X3", -1, ZINT_ERROR_INVALID_DATA, -1, -1, 1, "Error 203: Invalid character at position 16 in input (alphanumerics, space and \"-.$/+%\" only)", "" },
|
/* 46*/ { BARCODE_CODABLOCKF, DATA_MODE | ESCAPE_MODE, 4, -1, "\\x80\\x81\\x82\\x83\\x9E\\x9F\\xA0", -1, 0, 4, 101, 1, "(36) 67 62 42 65 40 65 41 24 6A 67 62 0B 65 42 65 43 31 6A 67 62 0C 65 5E 65 5F 16 6A 67", "Okapi control-chars-2.png" },
|
||||||
|
/* 47*/ { BARCODE_CODABLOCKF, DATA_MODE | ESCAPE_MODE, -1, -1, "\\x00z", -1, 0, 2, 101, 0, "67 62 40 40 62 5A 63 00 6A 67 64 0B 63 64 32 04 3F 6A", "Okapi data-null-z.png; BWIPP different encodation" },
|
||||||
|
/* 48*/ { BARCODE_CODABLOCKF, UNICODE_MODE | ESCAPE_MODE, -1, -1, "2610\\u00F2", -1, 0, 2, 101, 1, "67 63 00 1A 0A 64 63 4B 6A 67 64 0B 64 52 33 26 64 6A", "Okapi data-fuzz-19.png" },
|
||||||
|
/* 49*/ { BARCODE_CODABLOCKF, DATA_MODE | ESCAPE_MODE, 7, -1, "*\\r\\xF2\\x82\\x82(\\x982\\x82\\x82*\\r\\xF2\\x82\\xA8\\x82\\x82\\x82\\x82", -1, 0, 7, 123, 0, "(77) 67 62 45 0A 4D 64 64 52 63 35 6A 67 62 0B 65 42 65 42 08 63 43 6A 67 62 0C 65 58 12", "Okapi data-fuzz-20.png; BWIPP different encodation" },
|
||||||
|
/* 50*/ { BARCODE_CODABLOCKF, UNICODE_MODE | ESCAPE_MODE, -1, -1, "\\u0018\\u00F2", -1, 0, 2, 101, 0, "67 62 40 58 65 62 52 16 6A 67 64 0B 63 64 38 30 30 6A", "Okapi data-fuzz-21.png; BWIPP different encodation" },
|
||||||
|
/* 51*/ { BARCODE_HIBC_BLOCKF, UNICODE_MODE, -1, -1, "A99912345/$$52001510X3", -1, 0, 6, 101, 1, "(54) 67 64 44 0B 21 19 19 3A 6A 67 63 2B 5B 17 2D 64 24 6A 67 64 0C 0F 04 04 15 16 6A 67", "" },
|
||||||
|
/* 52*/ { BARCODE_HIBC_BLOCKF, UNICODE_MODE, -1, -1, "A99912345/$$520:1510X3", -1, ZINT_ERROR_INVALID_DATA, -1, -1, 1, "Error 203: Invalid character at position 16 in input (alphanumerics, space and \"-.$/+%\" only)", "" },
|
||||||
};
|
};
|
||||||
const int data_size = ARRAY_SIZE(data);
|
const int data_size = ARRAY_SIZE(data);
|
||||||
int i, length, ret;
|
int i, length, ret;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
libzint - the open source barcode library
|
libzint - the open source barcode library
|
||||||
Copyright (C) 2019-2024 Robin Stuart <rstuart114@gmail.com>
|
Copyright (C) 2019-2025 Robin Stuart <rstuart114@gmail.com>
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
|
@ -358,7 +358,12 @@ static void test_large(const testCtx *const p_ctx) {
|
||||||
struct zint_symbol *symbol = NULL;
|
struct zint_symbol *symbol = NULL;
|
||||||
|
|
||||||
char data_buf[ZINT_MAX_DATA_LEN];
|
char data_buf[ZINT_MAX_DATA_LEN];
|
||||||
char escaped[64];
|
|
||||||
|
char escaped[8192];
|
||||||
|
char cmp_buf[32768];
|
||||||
|
char cmp_msg[1024];
|
||||||
|
|
||||||
|
int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); /* Only do ZXing-C++ test if asked, too slow otherwise */
|
||||||
|
|
||||||
testStartSymbol("test_large", &symbol);
|
testStartSymbol("test_large", &symbol);
|
||||||
|
|
||||||
|
@ -387,6 +392,7 @@ static void test_large(const testCtx *const p_ctx) {
|
||||||
data[i].structapp.index, data[i].structapp.count, data[i].structapp.id,
|
data[i].structapp.index, data[i].structapp.count, data[i].structapp.id,
|
||||||
testUtilEscape(data[i].pattern, (int) strlen(data[i].pattern), escaped, sizeof(escaped)), data[i].length,
|
testUtilEscape(data[i].pattern, (int) strlen(data[i].pattern), escaped, sizeof(escaped)), data[i].length,
|
||||||
testUtilErrorName(ret), symbol->rows, symbol->width, errtxt);
|
testUtilErrorName(ret), symbol->rows, symbol->width, errtxt);
|
||||||
|
ZBarcode_Clear(symbol);
|
||||||
symbol->input_mode |= FAST_MODE;
|
symbol->input_mode |= FAST_MODE;
|
||||||
(void) ZBarcode_Encode(symbol, (unsigned char *) data_buf, length);
|
(void) ZBarcode_Encode(symbol, (unsigned char *) data_buf, length);
|
||||||
printf(" \"%s\", \"%s\" },\n", strcmp(errtxt, symbol->errtxt) != 0 ? symbol->errtxt : "", data[i].comment);
|
printf(" \"%s\", \"%s\" },\n", strcmp(errtxt, symbol->errtxt) != 0 ? symbol->errtxt : "", data[i].comment);
|
||||||
|
@ -398,8 +404,20 @@ static void test_large(const testCtx *const p_ctx) {
|
||||||
if (ret < ZINT_ERROR) {
|
if (ret < ZINT_ERROR) {
|
||||||
assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d\n", i, symbol->rows, data[i].expected_rows);
|
assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d\n", i, symbol->rows, data[i].expected_rows);
|
||||||
assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d\n", i, symbol->width, data[i].expected_width);
|
assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d\n", i, symbol->width, data[i].expected_width);
|
||||||
|
if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data_buf, length, debug)) {
|
||||||
|
int cmp_len, ret_len;
|
||||||
|
char modules_dump[144 * 144 + 1];
|
||||||
|
assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i);
|
||||||
|
ret = testUtilZXingCPP(i, symbol, data_buf, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret);
|
||||||
|
|
||||||
|
ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data_buf, length, NULL /*primary*/, escaped, &ret_len);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilZXingCPPCmp %d != 0 %s\n actual: %.*s\nexpected: %.*s\n",
|
||||||
|
i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_len, cmp_buf, ret_len, escaped);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZBarcode_Clear(symbol);
|
||||||
symbol->input_mode |= FAST_MODE;
|
symbol->input_mode |= FAST_MODE;
|
||||||
ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length);
|
ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length);
|
||||||
assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt);
|
assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt);
|
||||||
|
@ -408,6 +426,17 @@ static void test_large(const testCtx *const p_ctx) {
|
||||||
if (ret < ZINT_ERROR) {
|
if (ret < ZINT_ERROR) {
|
||||||
assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d\n", i, symbol->rows, data[i].expected_rows);
|
assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d\n", i, symbol->rows, data[i].expected_rows);
|
||||||
assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d\n", i, symbol->width, data[i].expected_width);
|
assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d\n", i, symbol->width, data[i].expected_width);
|
||||||
|
if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data_buf, length, debug)) {
|
||||||
|
int cmp_len, ret_len;
|
||||||
|
char modules_dump[144 * 144 + 1];
|
||||||
|
assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i);
|
||||||
|
ret = testUtilZXingCPP(i, symbol, data_buf, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret);
|
||||||
|
|
||||||
|
ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data_buf, length, NULL /*primary*/, escaped, &ret_len);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilZXingCPPCmp %d != 0 %s\n actual: %.*s\nexpected: %.*s\n",
|
||||||
|
i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_len, cmp_buf, ret_len, escaped);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (data[i].expected_errtxt2[0]) {
|
if (data[i].expected_errtxt2[0]) {
|
||||||
assert_zero(strcmp(symbol->errtxt, data[i].expected_errtxt2), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected_errtxt2);
|
assert_zero(strcmp(symbol->errtxt, data[i].expected_errtxt2), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected_errtxt2);
|
||||||
|
@ -433,17 +462,25 @@ static void test_buffer(const testCtx *const p_ctx) {
|
||||||
int output_options;
|
int output_options;
|
||||||
char *data;
|
char *data;
|
||||||
int ret;
|
int ret;
|
||||||
|
int bwipp_cmp;
|
||||||
char *comment;
|
char *comment;
|
||||||
};
|
};
|
||||||
/* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */
|
/* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */
|
||||||
static const struct item data[] = {
|
static const struct item data[] = {
|
||||||
/* 0*/ { 16383, UNICODE_MODE, READER_INIT, "1", 0, "" },
|
/* 0*/ { 16383, UNICODE_MODE, READER_INIT, "1", 0, 1, "" },
|
||||||
/* 1*/ { 3, UNICODE_MODE, 0, "000106j 05 Galeria A Nação0000000000", 0, "From Okapi, consecutive use of upper shift; #176" },
|
/* 1*/ { 3, UNICODE_MODE, 0, "000106j 05 Galeria A Nação0000000000", 0, 0, "From Okapi, consecutive use of upper shift; #176; BWIPP different encodation" },
|
||||||
};
|
};
|
||||||
const int data_size = ARRAY_SIZE(data);
|
const int data_size = ARRAY_SIZE(data);
|
||||||
int i, length, ret;
|
int i, length, ret;
|
||||||
struct zint_symbol *symbol = NULL;
|
struct zint_symbol *symbol = NULL;
|
||||||
|
|
||||||
|
char escaped[8192];
|
||||||
|
char cmp_buf[32768];
|
||||||
|
char cmp_msg[1024];
|
||||||
|
|
||||||
|
int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); /* Only do BWIPP test if asked, too slow otherwise */
|
||||||
|
int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); /* Only do ZXing-C++ test if asked, too slow otherwise */
|
||||||
|
|
||||||
testStartSymbol("test_buffer", &symbol);
|
testStartSymbol("test_buffer", &symbol);
|
||||||
|
|
||||||
for (i = 0; i < data_size; i++) {
|
for (i = 0; i < data_size; i++) {
|
||||||
|
@ -457,6 +494,31 @@ static void test_buffer(const testCtx *const p_ctx) {
|
||||||
|
|
||||||
ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length);
|
ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length);
|
||||||
assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret);
|
assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d\n", i, ret, data[i].ret);
|
||||||
|
if (do_bwipp && testUtilCanBwipp(i, symbol, -1, -1, -1, debug)) {
|
||||||
|
if (!data[i].bwipp_cmp) {
|
||||||
|
if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment);
|
||||||
|
} else {
|
||||||
|
char modules_dump[144 * 144 + 1];
|
||||||
|
assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i);
|
||||||
|
ret = testUtilBwipp(i, symbol, -1, -1, -1, data[i].data, length, NULL, cmp_buf, sizeof(cmp_buf), NULL);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret);
|
||||||
|
|
||||||
|
ret = testUtilBwippCmp(symbol, cmp_msg, cmp_buf, modules_dump);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n",
|
||||||
|
i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, modules_dump);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) {
|
||||||
|
int cmp_len, ret_len;
|
||||||
|
char modules_dump[144 * 144 + 1];
|
||||||
|
assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i);
|
||||||
|
ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret);
|
||||||
|
|
||||||
|
ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilZXingCPPCmp %d != 0 %s\n actual: %.*s\nexpected: %.*s\n",
|
||||||
|
i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_len, cmp_buf, ret_len, escaped);
|
||||||
|
}
|
||||||
|
|
||||||
ZBarcode_Delete(symbol);
|
ZBarcode_Delete(symbol);
|
||||||
}
|
}
|
||||||
|
@ -481,114 +543,123 @@ static void test_options(const testCtx *const p_ctx) {
|
||||||
int expected_rows;
|
int expected_rows;
|
||||||
int expected_width;
|
int expected_width;
|
||||||
const char *expected_errtxt;
|
const char *expected_errtxt;
|
||||||
|
int bwipp_cmp;
|
||||||
|
const char *comment;
|
||||||
};
|
};
|
||||||
/* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */
|
/* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */
|
||||||
static const struct item data[] = {
|
static const struct item data[] = {
|
||||||
/* 0*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "1", 0, 10, 10, "" },
|
/* 0*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "1", 0, 10, 10, "", 1, "" },
|
||||||
/* 1*/ { BARCODE_DATAMATRIX, -1, 2, -1, -1, -1, { 0, 0, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 524: Older Data Matrix standards are no longer supported" },
|
/* 1*/ { BARCODE_DATAMATRIX, -1, 2, -1, -1, -1, { 0, 0, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 524: Older Data Matrix standards are no longer supported", 1, "" },
|
||||||
/* 2*/ { BARCODE_DATAMATRIX, -1, -1, 1, -1, -1, { 0, 0, "" }, "1", 0, 10, 10, "" },
|
/* 2*/ { BARCODE_DATAMATRIX, -1, -1, 1, -1, -1, { 0, 0, "" }, "1", 0, 10, 10, "", 1, "" },
|
||||||
/* 3*/ { BARCODE_DATAMATRIX, -1, -1, 2, -1, -1, { 0, 0, "" }, "1", 0, 12, 12, "" },
|
/* 3*/ { BARCODE_DATAMATRIX, -1, -1, 2, -1, -1, { 0, 0, "" }, "1", 0, 12, 12, "", 1, "" },
|
||||||
/* 4*/ { BARCODE_DATAMATRIX, -1, -1, 48, -1, -1, { 0, 0, "" }, "1", 0, 26, 64, "" },
|
/* 4*/ { BARCODE_DATAMATRIX, -1, -1, 48, -1, -1, { 0, 0, "" }, "1", 0, 26, 64, "", 1, "" },
|
||||||
/* 5*/ { BARCODE_DATAMATRIX, -1, -1, 49, -1, -1, { 0, 0, "" }, "1", 0, 10, 10, "" }, /* Ignored */
|
/* 5*/ { BARCODE_DATAMATRIX, -1, -1, 49, -1, -1, { 0, 0, "" }, "1", 0, 10, 10, "", 0, "Ignored; BWIPP no options set" },
|
||||||
/* 6*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "____", 0, 12, 12, "" }, /* 4 data */
|
/* 6*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "____", 0, 12, 12, "", 1, "4 data" },
|
||||||
/* 7*/ { BARCODE_DATAMATRIX, -1, -1, 1, -1, -1, { 0, 0, "" }, "____", ZINT_ERROR_TOO_LONG, -1, -1, "Error 522: Input too long for Version 1, requires 4 codewords (maximum 3)" },
|
/* 7*/ { BARCODE_DATAMATRIX, -1, -1, 1, -1, -1, { 0, 0, "" }, "____", ZINT_ERROR_TOO_LONG, -1, -1, "Error 522: Input too long for Version 1, requires 4 codewords (maximum 3)", 1, "" },
|
||||||
/* 8*/ { BARCODE_DATAMATRIX, -1, -1, 25, -1, -1, { 0, 0, "" }, "____", 0, 8, 18, "" },
|
/* 8*/ { BARCODE_DATAMATRIX, -1, -1, 25, -1, -1, { 0, 0, "" }, "____", 0, 8, 18, "", 1, "" },
|
||||||
/* 9*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________", 0, 8, 32, "" }, /* 10 data */
|
/* 9*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________", 0, 8, 32, "", 1, "10 data" },
|
||||||
/* 10*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "__________", 0, 8, 32, "" },
|
/* 10*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "__________", 0, 8, 32, "", 1, "" },
|
||||||
/* 11*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE | DM_ISO_144, -1, { 0, 0, "" }, "__________", 0, 8, 32, "" },
|
/* 11*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE | DM_ISO_144, -1, { 0, 0, "" }, "__________", 0, 8, 32, "", 1, "" },
|
||||||
/* 12*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "__________", 0, 16, 16, "" },
|
/* 12*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "__________", 0, 16, 16, "", 1, "" },
|
||||||
/* 13*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE | DM_ISO_144, -1, { 0, 0, "" }, "__________", 0, 16, 16, "" },
|
/* 13*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE | DM_ISO_144, -1, { 0, 0, "" }, "__________", 0, 16, 16, "", 1, "" },
|
||||||
/* 14*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________", 0, 12, 26, "" }, /* 15 data */
|
/* 14*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________", 0, 12, 26, "", 1, "15 data" },
|
||||||
/* 15*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________", 0, 12, 26, "" },
|
/* 15*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________", 0, 12, 26, "", 1, "" },
|
||||||
/* 16*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________", 0, 18, 18, "" },
|
/* 16*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________", 0, 18, 18, "", 1, "" },
|
||||||
/* 17*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________________", 0, 18, 18, "" }, /* 18 data */
|
/* 17*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________________", 0, 18, 18, "", 1, "18 data" },
|
||||||
/* 18*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "___________________", 0, 20, 20, "" }, /* 19 data */
|
/* 18*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "___________________", 0, 20, 20, "", 1, "19 data" },
|
||||||
/* 19*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________", 0, 20, 20, "" }, /* 21 data */
|
/* 19*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________", 0, 20, 20, "", 1, "21 data" },
|
||||||
/* 20*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________", 0, 22, 22, "" }, /* 23 data */
|
/* 20*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________", 0, 22, 22, "", 1, "23 data" },
|
||||||
/* 21*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________", 0, 8, 64, "" },
|
/* 21*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________", 0, 8, 64, "", 1, "" },
|
||||||
/* 22*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________", 0, 22, 22, "" },
|
/* 22*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________", 0, 22, 22, "", 1, "" },
|
||||||
/* 23*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________", 0, 16, 36, "" }, /* 31 data */
|
/* 23*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________", 0, 16, 36, "", 1, "31 data" },
|
||||||
/* 24*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________", 0, 16, 36, "" },
|
/* 24*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________", 0, 16, 36, "", 0, "BWIPP DMRE requires dimensions" },
|
||||||
/* 25*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________", 0, 24, 24, "" },
|
/* 25*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________", 0, 24, 24, "", 1, "" },
|
||||||
/* 26*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________________________", 0, 26, 26, "" }, /* 37 data */
|
/* 26*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________________________", 0, 26, 26, "", 1, "37 data" },
|
||||||
/* 27*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_____________________________________", 0, 8, 96, "" },
|
/* 27*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_____________________________________", 0, 8, 96, "", 1, "" },
|
||||||
/* 28*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_____________________________________", 0, 26, 26, "" },
|
/* 28*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_____________________________________", 0, 26, 26, "", 1, "" },
|
||||||
/* 29*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________________", 0, 26, 26, "" }, /* 39 data */
|
/* 29*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________________", 0, 26, 26, "", 1, "39 data" },
|
||||||
/* 30*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________________", 0, 12, 64, "" },
|
/* 30*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________________", 0, 12, 64, "", 1, "" },
|
||||||
/* 31*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________________", 0, 26, 26, "" },
|
/* 31*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________________", 0, 26, 26, "", 1, "" },
|
||||||
/* 32*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "___________________________________________", 0, 26, 26, "" }, /* 43 data */
|
/* 32*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "___________________________________________", 0, 26, 26, "", 1, "43 data" },
|
||||||
/* 33*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "___________________________________________", 0, 12, 64, "" },
|
/* 33*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "___________________________________________", 0, 12, 64, "", 1, "" },
|
||||||
/* 34*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "___________________________________________", 0, 26, 26, "" },
|
/* 34*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "___________________________________________", 0, 26, 26, "", 1, "" },
|
||||||
/* 35*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "____________________________________________", 0, 26, 26, "" }, /* 44 data */
|
/* 35*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "____________________________________________", 0, 26, 26, "", 1, "44 data" },
|
||||||
/* 36*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________________________________", 0, 16, 48, "" }, /* 45 data */
|
/* 36*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________________________________", 0, 16, 48, "", 1, "45 data" },
|
||||||
/* 37*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_____________________________________________", 0, 16, 48, "" },
|
/* 37*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_____________________________________________", 0, 16, 48, "", 0, "BWIPP DMRE requires dimensions" },
|
||||||
/* 38*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_____________________________________________", 0, 32, 32, "" },
|
/* 38*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_____________________________________________", 0, 32, 32, "", 1, "" },
|
||||||
/* 39*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_________________________________________________", 0, 16, 48, "" }, /* 49 data */
|
/* 39*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_________________________________________________", 0, 16, 48, "", 1, "49 data" },
|
||||||
/* 40*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_________________________________________________", 0, 16, 48, "" },
|
/* 40*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_________________________________________________", 0, 16, 48, "", 0, "BWIPP DMRE requires dimensions" },
|
||||||
/* 41*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_________________________________________________", 0, 32, 32, "" },
|
/* 41*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_________________________________________________", 0, 32, 32, "", 1, "" },
|
||||||
/* 42*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________________________________________________", 0, 32, 32, "" }, /* 50 data */
|
/* 42*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________________________________________________", 0, 32, 32, "", 1, "50 data" },
|
||||||
/* 43*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "__________________________________________________", 0, 20, 44, "" },
|
/* 43*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "__________________________________________________", 0, 20, 44, "", 1, "" },
|
||||||
/* 44*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "__________________________________________________", 0, 32, 32, "" },
|
/* 44*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "__________________________________________________", 0, 32, 32, "", 1, "" },
|
||||||
/* 45*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 32, 32, "" }, /* 51 data */
|
/* 45*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 32, 32, "", 0, "51 data; BWIPP different encodation" },
|
||||||
/* 46*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 20, 44, "" },
|
/* 46*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 20, 44, "", 0, "BWIPP DMRE requires dimensions" },
|
||||||
/* 47*/ { BARCODE_DATAMATRIX, -1, -1, -1, 9999, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 32, 32, "" }, /* Ignored */
|
/* 47*/ { BARCODE_DATAMATRIX, -1, -1, -1, 9999, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 32, 32, "", 0, "Ignored; BWIPP different encodation" },
|
||||||
/* 48*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________________________________________________", 0, 32, 32, "" }, /* 61 data */
|
/* 48*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________________________________________________", 0, 32, 32, "", 1, "61 data" },
|
||||||
/* 49*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "______________________________________________________________", 0, 32, 32, "" }, /* 62 data */
|
/* 49*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "______________________________________________________________", 0, 32, 32, "", 1, "62 data" },
|
||||||
/* 50*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________________________________________", 0, 36, 36, "" }, /* 63 data */
|
/* 50*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________________________________________", 0, 36, 36, "", 1, "63 data" },
|
||||||
/* 51*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________________________________________", 0, 8, 144, "" },
|
/* 51*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________________________________________", 0, 8, 144, "", 1, "" },
|
||||||
/* 52*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________________________________________", 0, 36, 36, "" },
|
/* 52*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________________________________________", 0, 36, 36, "", 1, "" },
|
||||||
/* 53*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "________________________________________________________________", 0, 36, 36, "" }, /* 64 data */
|
/* 53*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "________________________________________________________________", 0, 36, 36, "", 1, "64 data" },
|
||||||
/* 54*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "________________________________________________________________", 0, 12, 88, "" },
|
/* 54*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "________________________________________________________________", 0, 12, 88, "", 1, "" },
|
||||||
/* 55*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "________________________________________________________________", 0, 36, 36, "" },
|
/* 55*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "________________________________________________________________", 0, 36, 36, "", 1, "" },
|
||||||
/* 56*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_________________________________________________________________", 0, 36, 36, "" }, /* 65 data */
|
/* 56*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_________________________________________________________________", 0, 36, 36, "", 1, "65 data" },
|
||||||
/* 57*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_________________________________________________________________", 0, 26, 40, "" },
|
/* 57*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_________________________________________________________________", 0, 26, 40, "", 1, "" },
|
||||||
/* 58*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_________________________________________________________________", 0, 36, 36, "" },
|
/* 58*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_________________________________________________________________", 0, 36, 36, "", 1, "" },
|
||||||
/* 59*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "______________________________________________________________________", 0, 36, 36, "" }, /* 70 data */
|
/* 59*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "______________________________________________________________________", 0, 36, 36, "", 1, "70 data" },
|
||||||
/* 60*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "______________________________________________________________________", 0, 26, 40, "" },
|
/* 60*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "______________________________________________________________________", 0, 26, 40, "", 1, "" },
|
||||||
/* 61*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "______________________________________________________________________", 0, 36, 36, "" },
|
/* 61*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "______________________________________________________________________", 0, 36, 36, "", 1, "" },
|
||||||
/* 62*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________________________________________________", 0, 36, 36, "" }, /* 71 data */
|
/* 62*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________________________________________________", 0, 36, 36, "", 1, "71 data" },
|
||||||
/* 63*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________________________________________________", 0, 22, 48, "" },
|
/* 63*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "_______________________________________________________________________", 0, 22, 48, "", 1, "" },
|
||||||
/* 64*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________________________________________________", 0, 36, 36, "" },
|
/* 64*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "_______________________________________________________________________", 0, 36, 36, "", 1, "" },
|
||||||
/* 65*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "________________________________________________________________________________", 0, 36, 36, "" }, /* 80 data */
|
/* 65*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "________________________________________________________________________________", 0, 36, 36, "", 1, "80 data" },
|
||||||
/* 66*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "________________________________________________________________________________", 0, 24, 48, "" },
|
/* 66*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "________________________________________________________________________________", 0, 24, 48, "", 1, "" },
|
||||||
/* 67*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "________________________________________________________________________________", 0, 36, 36, "" },
|
/* 67*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "________________________________________________________________________________", 0, 36, 36, "", 1, "" },
|
||||||
/* 68*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "____________________________________________________________________________________", 0, 36, 36, "" }, /* 84 data */
|
/* 68*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "____________________________________________________________________________________", 0, 36, 36, "", 1, "84 data" },
|
||||||
/* 69*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "____________________________________________________________________________________", 0, 20, 64, "" },
|
/* 69*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "____________________________________________________________________________________", 0, 20, 64, "", 1, "" },
|
||||||
/* 70*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "____________________________________________________________________________________", 0, 36, 36, "" },
|
/* 70*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "____________________________________________________________________________________", 0, 36, 36, "", 1, "" },
|
||||||
/* 71*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________________________________________________________________________________________", 0, 40, 40, "" }, /* 90 data */
|
/* 71*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________________________________________________________________________________________", 0, 40, 40, "", 1, "90 data" },
|
||||||
/* 72*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "__________________________________________________________________________________________", 0, 26, 48, "" },
|
/* 72*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "__________________________________________________________________________________________", 0, 26, 48, "", 1, "" },
|
||||||
/* 73*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "__________________________________________________________________________________________", 0, 40, 40, "" },
|
/* 73*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "__________________________________________________________________________________________", 0, 40, 40, "", 1, "" },
|
||||||
/* 74*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "___________________________________________________________________________________________", 0, 40, 40, "" }, /* 91 data */
|
/* 74*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "___________________________________________________________________________________________", 0, 40, 40, "", 1, "91 data" },
|
||||||
/* 75*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "___________________________________________________________________________________________", 0, 24, 64, "" },
|
/* 75*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "___________________________________________________________________________________________", 0, 24, 64, "", 1, "" },
|
||||||
/* 76*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "___________________________________________________________________________________________", 0, 40, 40, "" },
|
/* 76*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "___________________________________________________________________________________________", 0, 40, 40, "", 1, "" },
|
||||||
/* 77*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "______________________________________________________________________________________________________________________", 0, 44, 44, "" }, /* 118 data */
|
/* 77*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 0, "" }, "______________________________________________________________________________________________________________________", 0, 44, 44, "", 1, "118 data" },
|
||||||
/* 78*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "______________________________________________________________________________________________________________________", 0, 26, 64, "" }, /* 118 data */
|
/* 78*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "______________________________________________________________________________________________________________________", 0, 26, 64, "", 1, "118 data" },
|
||||||
/* 79*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "______________________________________________________________________________________________________________________", 0, 44, 44, "" }, /* 118 data */
|
/* 79*/ { BARCODE_DATAMATRIX, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "______________________________________________________________________________________________________________________", 0, 44, 44, "", 1, "118 data" },
|
||||||
/* 80*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, -1, -1, -1, { 0, 0, "" }, "[90]12", 0, 10, 10, "" },
|
/* 80*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, -1, -1, -1, { 0, 0, "" }, "[90]12", 0, 10, 10, "", 1, "" },
|
||||||
/* 81*/ { BARCODE_DATAMATRIX, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, { 0, 0, "" }, "(90)12", 0, 10, 10, "" },
|
/* 81*/ { BARCODE_DATAMATRIX, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, { 0, 0, "" }, "(90)12", 0, 10, 10, "", 1, "" },
|
||||||
/* 82*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 1, 2, "" }, "1", 0, 12, 12, "" },
|
/* 82*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 1, 2, "" }, "1", 0, 12, 12, "", 1, "" },
|
||||||
/* 83*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 16, 16, "" }, "1", 0, 12, 12, "" },
|
/* 83*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 16, 16, "" }, "1", 0, 12, 12, "", 1, "" },
|
||||||
/* 84*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 1, 1, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 720: Structured Append count '1' out of range (2 to 16)" },
|
/* 84*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 1, 1, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 720: Structured Append count '1' out of range (2 to 16)", 1, "" },
|
||||||
/* 85*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 1, 17, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 720: Structured Append count '17' out of range (2 to 16)" },
|
/* 85*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 1, 17, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 720: Structured Append count '17' out of range (2 to 16)", 1, "" },
|
||||||
/* 86*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 16, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 721: Structured Append index '0' out of range (1 to count 16)" },
|
/* 86*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 0, 16, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 721: Structured Append index '0' out of range (1 to count 16)", 1, "" },
|
||||||
/* 87*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 17, 16, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 721: Structured Append index '17' out of range (1 to count 16)" },
|
/* 87*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 17, 16, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 721: Structured Append index '17' out of range (1 to count 16)", 1, "" },
|
||||||
/* 88*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "1001" }, "1", 0, 12, 12, "" },
|
/* 88*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "1001" }, "1", 0, 12, 12, "", 1, "" },
|
||||||
/* 89*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "A" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 723: Invalid Structured Append ID (digits only)" },
|
/* 89*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "A" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 723: Invalid Structured Append ID (digits only)", 1, "" },
|
||||||
/* 90*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "0" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 724: Structured Append ID1 '000' and ID2 '000' out of range (001 to 254) (ID \"000000\")" },
|
/* 90*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "0" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 724: Structured Append ID1 '000' and ID2 '000' out of range (001 to 254) (ID \"000000\")", 1, "" },
|
||||||
/* 91*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "1" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 725: Structured Append ID1 '000' out of range (001 to 254) (ID \"000001\")" },
|
/* 91*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "1" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 725: Structured Append ID1 '000' out of range (001 to 254) (ID \"000001\")", 1, "" },
|
||||||
/* 92*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "1000" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 726: Structured Append ID2 '000' out of range (001 to 254) (ID \"001000\")" },
|
/* 92*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "1000" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 726: Structured Append ID2 '000' out of range (001 to 254) (ID \"001000\")", 1, "" },
|
||||||
/* 93*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "001255" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 726: Structured Append ID2 '255' out of range (001 to 254) (ID \"001255\")" },
|
/* 93*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "001255" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 726: Structured Append ID2 '255' out of range (001 to 254) (ID \"001255\")", 1, "" },
|
||||||
/* 94*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "255001" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 725: Structured Append ID1 '255' out of range (001 to 254) (ID \"255001\")" },
|
/* 94*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "255001" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 725: Structured Append ID1 '255' out of range (001 to 254) (ID \"255001\")", 1, "" },
|
||||||
/* 95*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "255255" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 724: Structured Append ID1 '255' and ID2 '255' out of range (001 to 254) (ID \"255255\")" },
|
/* 95*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "255255" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 724: Structured Append ID1 '255' and ID2 '255' out of range (001 to 254) (ID \"255255\")", 1, "" },
|
||||||
/* 96*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "1234567" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 722: Structured Append ID length 7 too long (6 digit maximum)" },
|
/* 96*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, { 2, 3, "1234567" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 722: Structured Append ID length 7 too long (6 digit maximum)", 1, "" },
|
||||||
/* 97*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, READER_INIT, { 2, 3, "1001" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 727: Cannot have Structured Append and Reader Initialisation at the same time" },
|
/* 97*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, READER_INIT, { 2, 3, "1001" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 727: Cannot have Structured Append and Reader Initialisation at the same time", 1, "" },
|
||||||
/* 98*/ { BARCODE_DATAMATRIX, ESCAPE_MODE, -1, -1, -1, -1, { 2, 3, "1001" }, "[)>\\R05\\GA\\R\\E", 0, 12, 26, "" }, /* Macro05/06 ignored if have Structured Append TODO: error/warning */
|
/* 98*/ { BARCODE_DATAMATRIX, ESCAPE_MODE, -1, -1, -1, -1, { 2, 3, "1001" }, "[)>\\R05\\GA\\R\\E", 0, 12, 26, "", 1, "Macro05/06 ignored if have Structured Append TODO: error/warning " },
|
||||||
/* 99*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234,67", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 203: Invalid character at position 5 in input (alphanumerics, space and \"-.$/+%\" only)" },
|
/* 99*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234,67", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 203: Invalid character at position 5 in input (alphanumerics, space and \"-.$/+%\" only)", 1, "" },
|
||||||
};
|
};
|
||||||
const int data_size = ARRAY_SIZE(data);
|
const int data_size = ARRAY_SIZE(data);
|
||||||
int i, length, ret;
|
int i, length, ret;
|
||||||
struct zint_symbol *symbol = NULL;
|
struct zint_symbol *symbol = NULL;
|
||||||
|
|
||||||
|
char escaped[8192];
|
||||||
|
char cmp_buf[32768];
|
||||||
|
char cmp_msg[1024];
|
||||||
|
|
||||||
|
int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); /* Only do BWIPP test if asked, too slow otherwise */
|
||||||
|
int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); /* Only do ZXing-C++ test if asked, too slow otherwise */
|
||||||
|
|
||||||
testStartSymbol("test_options", &symbol);
|
testStartSymbol("test_options", &symbol);
|
||||||
|
|
||||||
for (i = 0; i < data_size; i++) {
|
for (i = 0; i < data_size; i++) {
|
||||||
|
@ -608,8 +679,35 @@ static void test_options(const testCtx *const p_ctx) {
|
||||||
assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt);
|
assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt);
|
||||||
|
|
||||||
if (ret < ZINT_ERROR) {
|
if (ret < ZINT_ERROR) {
|
||||||
assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, symbol->errtxt);
|
assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (width %d) (%s)\n",
|
||||||
assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, symbol->errtxt);
|
i, symbol->rows, data[i].expected_rows, symbol->width, symbol->errtxt);
|
||||||
|
assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n",
|
||||||
|
i, symbol->width, data[i].expected_width, symbol->errtxt);
|
||||||
|
if (do_bwipp && testUtilCanBwipp(i, symbol, -1, data[i].option_2, data[i].option_3, debug)) {
|
||||||
|
if (!data[i].bwipp_cmp) {
|
||||||
|
if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment);
|
||||||
|
} else {
|
||||||
|
char modules_dump[144 * 144 + 1];
|
||||||
|
assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i);
|
||||||
|
ret = testUtilBwipp(i, symbol, -1, data[i].option_2, data[i].option_3, data[i].data, length, NULL, cmp_buf, sizeof(cmp_buf), NULL);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret);
|
||||||
|
|
||||||
|
ret = testUtilBwippCmp(symbol, cmp_msg, cmp_buf, modules_dump);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n",
|
||||||
|
i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, modules_dump);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) {
|
||||||
|
int cmp_len, ret_len;
|
||||||
|
char modules_dump[144 * 144 + 1];
|
||||||
|
assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i);
|
||||||
|
ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret);
|
||||||
|
|
||||||
|
ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilZXingCPPCmp %d != 0 %s\n actual: %.*s\nexpected: %.*s\n",
|
||||||
|
i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_len, cmp_buf, ret_len, escaped);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
assert_zero(strcmp(symbol->errtxt, data[i].expected_errtxt), "i:%d symbol->errtxt %s != %s\n", i, symbol->errtxt, data[i].expected_errtxt);
|
assert_zero(strcmp(symbol->errtxt, data[i].expected_errtxt), "i:%d symbol->errtxt %s != %s\n", i, symbol->errtxt, data[i].expected_errtxt);
|
||||||
|
|
||||||
|
@ -644,14 +742,19 @@ static void test_reader_init(const testCtx *const p_ctx) {
|
||||||
char *comment;
|
char *comment;
|
||||||
};
|
};
|
||||||
static const struct item data[] = {
|
static const struct item data[] = {
|
||||||
/* 0*/ { BARCODE_DATAMATRIX, UNICODE_MODE, READER_INIT, "A", 0, 10, 10, "EA 42 81 19 A4 53 21 DF", "TODO: Check this" },
|
/* 0*/ { BARCODE_DATAMATRIX, UNICODE_MODE, READER_INIT, "A", 0, 10, 10, "EA 42 81 19 A4 53 21 DF", "" },
|
||||||
/* 1*/ { BARCODE_DATAMATRIX, GS1_MODE, READER_INIT, "[91]A", ZINT_ERROR_INVALID_OPTION, 0, 0, "Error 521: Cannot use Reader Initialisation in GS1 mode", "" },
|
/* 1*/ { BARCODE_DATAMATRIX, GS1_MODE, READER_INIT, "[91]A", ZINT_ERROR_INVALID_OPTION, 0, 0, "Error 521: Cannot use Reader Initialisation in GS1 mode", "" },
|
||||||
};
|
};
|
||||||
const int data_size = ARRAY_SIZE(data);
|
const int data_size = ARRAY_SIZE(data);
|
||||||
int i, length, ret;
|
int i, length, ret;
|
||||||
struct zint_symbol *symbol = NULL;
|
struct zint_symbol *symbol = NULL;
|
||||||
|
|
||||||
char escaped[1024];
|
char escaped[8192];
|
||||||
|
char cmp_buf[32768];
|
||||||
|
char cmp_msg[1024];
|
||||||
|
|
||||||
|
int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); /* Only do BWIPP test if asked, too slow otherwise */
|
||||||
|
int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); /* Only do ZXing-C++ test if asked, too slow otherwise */
|
||||||
|
|
||||||
testStartSymbol("test_reader_init", &symbol);
|
testStartSymbol("test_reader_init", &symbol);
|
||||||
|
|
||||||
|
@ -678,6 +781,27 @@ static void test_reader_init(const testCtx *const p_ctx) {
|
||||||
if (ret < ZINT_ERROR) {
|
if (ret < ZINT_ERROR) {
|
||||||
assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data);
|
assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data);
|
||||||
assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data);
|
assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data);
|
||||||
|
if (do_bwipp && testUtilCanBwipp(i, symbol, -1, -1, -1, debug)) {
|
||||||
|
char modules_dump[144 * 144 + 1];
|
||||||
|
assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i);
|
||||||
|
ret = testUtilBwipp(i, symbol, -1, -1, -1, data[i].data, length, NULL, cmp_buf, sizeof(cmp_buf), NULL);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret);
|
||||||
|
|
||||||
|
ret = testUtilBwippCmp(symbol, cmp_msg, cmp_buf, modules_dump);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n",
|
||||||
|
i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_buf, modules_dump);
|
||||||
|
}
|
||||||
|
if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) {
|
||||||
|
int cmp_len, ret_len;
|
||||||
|
char modules_dump[144 * 144 + 1];
|
||||||
|
assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i);
|
||||||
|
ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret);
|
||||||
|
|
||||||
|
ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilZXingCPPCmp %d != 0 %s\n actual: %.*s\nexpected: %.*s\n",
|
||||||
|
i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_len, cmp_buf, ret_len, escaped);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
assert_zero(strcmp(symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected);
|
assert_zero(strcmp(symbol->errtxt, data[i].expected), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected);
|
||||||
}
|
}
|
||||||
|
@ -691,7 +815,7 @@ static void test_reader_init(const testCtx *const p_ctx) {
|
||||||
#define ZINT_TEST_ENCODING
|
#define ZINT_TEST_ENCODING
|
||||||
#ifdef ZINT_TEST_ENCODING
|
#ifdef ZINT_TEST_ENCODING
|
||||||
INTERNAL int dm_encode_test(struct zint_symbol *symbol, const unsigned char source[], const int length, const int eci,
|
INTERNAL int dm_encode_test(struct zint_symbol *symbol, const unsigned char source[], const int length, const int eci,
|
||||||
const int gs1, unsigned char target[], int *p_tp);
|
const int last_seg, const int gs1, unsigned char target[], int *p_tp);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void test_input(const testCtx *const p_ctx) {
|
static void test_input(const testCtx *const p_ctx) {
|
||||||
|
@ -1044,6 +1168,7 @@ static void test_input(const testCtx *const p_ctx) {
|
||||||
int binlens[2] = {0};
|
int binlens[2] = {0};
|
||||||
unsigned char reduced[1000];
|
unsigned char reduced[1000];
|
||||||
unsigned char *text;
|
unsigned char *text;
|
||||||
|
const int last_seg = 1;
|
||||||
|
|
||||||
assert_equal(data[i].expected_rows * data[i].expected_width <= data[i - 1].expected_rows * data[i - 1].expected_width, 1,
|
assert_equal(data[i].expected_rows * data[i].expected_width <= data[i - 1].expected_rows * data[i - 1].expected_width, 1,
|
||||||
"i:%d data[i].expected_rows * data[i].expected_width %d > data[i - 1].expected_rows * data[i - 1].expected_width %d\n", i,
|
"i:%d data[i].expected_rows * data[i].expected_width %d > data[i - 1].expected_rows * data[i - 1].expected_width %d\n", i,
|
||||||
|
@ -1060,7 +1185,7 @@ static void test_input(const testCtx *const p_ctx) {
|
||||||
binlen = 0;
|
binlen = 0;
|
||||||
symbol->input_mode = data[i - 1].input_mode;
|
symbol->input_mode = data[i - 1].input_mode;
|
||||||
gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1;
|
gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1;
|
||||||
ret = dm_encode_test(symbol, text, length, symbol->eci, gs1, binary[0], &binlen);
|
ret = dm_encode_test(symbol, text, length, symbol->eci, last_seg, gs1, binary[0], &binlen);
|
||||||
assert_zero(ret, "i:%d dm_encode() FAST_MODE ret %d != 0 (%s)\n", i, ret, symbol->errtxt);
|
assert_zero(ret, "i:%d dm_encode() FAST_MODE ret %d != 0 (%s)\n", i, ret, symbol->errtxt);
|
||||||
|
|
||||||
binlens[0] = binlen;
|
binlens[0] = binlen;
|
||||||
|
@ -1068,7 +1193,7 @@ static void test_input(const testCtx *const p_ctx) {
|
||||||
binlen = 0;
|
binlen = 0;
|
||||||
symbol->input_mode = data[i].input_mode;
|
symbol->input_mode = data[i].input_mode;
|
||||||
gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1;
|
gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1;
|
||||||
ret = dm_encode_test(symbol, text, length, symbol->eci, gs1, binary[1], &binlen);
|
ret = dm_encode_test(symbol, text, length, symbol->eci, last_seg, gs1, binary[1], &binlen);
|
||||||
assert_zero(ret, "i:%d dm_encode() minimal ret %d != 0 (%s)\n", i, ret, symbol->errtxt);
|
assert_zero(ret, "i:%d dm_encode() minimal ret %d != 0 (%s)\n", i, ret, symbol->errtxt);
|
||||||
|
|
||||||
binlens[1] = binlen;
|
binlens[1] = binlen;
|
||||||
|
@ -5611,6 +5736,7 @@ static void test_encode(const testCtx *const p_ctx) {
|
||||||
int gs1;
|
int gs1;
|
||||||
int binlen;
|
int binlen;
|
||||||
int binlens[2] = {0};
|
int binlens[2] = {0};
|
||||||
|
const int last_seg = 1;
|
||||||
|
|
||||||
assert_equal(data[i].expected_rows * data[i].expected_width <= data[i - 1].expected_rows * data[i - 1].expected_width, 1,
|
assert_equal(data[i].expected_rows * data[i].expected_width <= data[i - 1].expected_rows * data[i - 1].expected_width, 1,
|
||||||
"i:%d data[i].expected_rows * data[i].expected_width %d > data[i - 1].expected_rows * data[i - 1].expected_width %d\n", i,
|
"i:%d data[i].expected_rows * data[i].expected_width %d > data[i - 1].expected_rows * data[i - 1].expected_width %d\n", i,
|
||||||
|
@ -5619,7 +5745,8 @@ static void test_encode(const testCtx *const p_ctx) {
|
||||||
binlen = 0;
|
binlen = 0;
|
||||||
symbol->input_mode = data[i - 1].input_mode;
|
symbol->input_mode = data[i - 1].input_mode;
|
||||||
gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1;
|
gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1;
|
||||||
ret = dm_encode_test(symbol, (unsigned char *) data[i].data, length, symbol->eci, gs1, binary[0], &binlen);
|
ret = dm_encode_test(symbol, (unsigned char *) data[i].data, length, symbol->eci, last_seg, gs1,
|
||||||
|
binary[0], &binlen);
|
||||||
assert_zero(ret, "i:%d dm_encode() FAST_MODE ret %d != 0 (%s)\n", i, ret, symbol->errtxt);
|
assert_zero(ret, "i:%d dm_encode() FAST_MODE ret %d != 0 (%s)\n", i, ret, symbol->errtxt);
|
||||||
|
|
||||||
binlens[0] = binlen;
|
binlens[0] = binlen;
|
||||||
|
@ -5627,13 +5754,15 @@ static void test_encode(const testCtx *const p_ctx) {
|
||||||
binlen = 0;
|
binlen = 0;
|
||||||
symbol->input_mode = data[i].input_mode;
|
symbol->input_mode = data[i].input_mode;
|
||||||
gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1;
|
gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1;
|
||||||
ret = dm_encode_test(symbol, (unsigned char *) data[i].data, length, symbol->eci, gs1, binary[1], &binlen);
|
ret = dm_encode_test(symbol, (unsigned char *) data[i].data, length, symbol->eci, last_seg, gs1,
|
||||||
|
binary[1], &binlen);
|
||||||
assert_zero(ret, "i:%d dm_encode() minimal ret %d != 0 (%s)\n", i, ret, symbol->errtxt);
|
assert_zero(ret, "i:%d dm_encode() minimal ret %d != 0 (%s)\n", i, ret, symbol->errtxt);
|
||||||
|
|
||||||
binlens[1] = binlen;
|
binlens[1] = binlen;
|
||||||
|
|
||||||
assert_equal(binlens[1] <= binlens[0], 1, "i:%d binlens[1] %d > binlens[0] %d\n", i, binlens[1], binlens[0]);
|
assert_equal(binlens[1] <= binlens[0], 1, "i:%d binlens[1] %d > binlens[0] %d\n", i, binlens[1], binlens[0]);
|
||||||
assert_equal(binlens[0], binlens[1] + data[i].expected_diff, "i:%d binlens[0] %d != %d binlens[1] (%d) + expected_diff (%d)\n",
|
assert_equal(binlens[0], binlens[1] + data[i].expected_diff,
|
||||||
|
"i:%d binlens[0] %d != %d binlens[1] (%d) + expected_diff (%d)\n",
|
||||||
i, binlens[0], binlens[1] + data[i].expected_diff, binlens[1], data[i].expected_diff);
|
i, binlens[0], binlens[1] + data[i].expected_diff, binlens[1], data[i].expected_diff);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -5826,6 +5955,154 @@ static void test_encode_segs(const testCtx *const p_ctx) {
|
||||||
"10000011000001110111011000"
|
"10000011000001110111011000"
|
||||||
"11111111111111111111111111"
|
"11111111111111111111111111"
|
||||||
},
|
},
|
||||||
|
/* 8*/ { BARCODE_DATAMATRIX, UNICODE_MODE | FAST_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("ABCDEFGHIJ"), -1, 3 }, { TU("KL"), -1, 4 }, { TU("MN"), -1, 5 } }, 0, 20, 20, 1, "",
|
||||||
|
"10101010101010101010"
|
||||||
|
"10011001100100001111"
|
||||||
|
"10001100100011101110"
|
||||||
|
"11001011110111000001"
|
||||||
|
"10010011100000100100"
|
||||||
|
"11101010010000010111"
|
||||||
|
"10101001011101010110"
|
||||||
|
"10011011001101010011"
|
||||||
|
"10011101110000001000"
|
||||||
|
"10111000111110110101"
|
||||||
|
"10111011100000111000"
|
||||||
|
"11110000010011100001"
|
||||||
|
"10110010001100101000"
|
||||||
|
"10011111100011011111"
|
||||||
|
"11111011010011010110"
|
||||||
|
"11011001001000110111"
|
||||||
|
"11011111100110000110"
|
||||||
|
"11100100101111100101"
|
||||||
|
"11000101100101000010"
|
||||||
|
"11111111111111111111"
|
||||||
|
},
|
||||||
|
/* 9*/ { BARCODE_DATAMATRIX, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("ABCDEFGHIJ"), -1, 3 }, { TU("KL"), -1, 4 }, { TU("MN"), -1, 5 } }, 0, 20, 20, 0, "BWIPP same as FAST_MODE",
|
||||||
|
"10101010101010101010"
|
||||||
|
"10001010000100001111"
|
||||||
|
"10000111000011101110"
|
||||||
|
"11001001110111010001"
|
||||||
|
"10010001100000110000"
|
||||||
|
"11010110010000000011"
|
||||||
|
"11010111011100110100"
|
||||||
|
"11011110001001010001"
|
||||||
|
"11100101110110011000"
|
||||||
|
"11000000110000110101"
|
||||||
|
"10001011110001000000"
|
||||||
|
"11100000110100010101"
|
||||||
|
"11110011100101111100"
|
||||||
|
"11011101111010001111"
|
||||||
|
"11111111010110100110"
|
||||||
|
"11001110001101010001"
|
||||||
|
"11010010011000100110"
|
||||||
|
"10101000101010011101"
|
||||||
|
"10001111100101101010"
|
||||||
|
"11111111111111111111"
|
||||||
|
},
|
||||||
|
/* 10*/ { BARCODE_DATAMATRIX, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("AB"), -1, 3 }, { TU("CD"), -1, 4 }, { TU("EF"), -1, 5 } }, 0, 16, 16, 1, "",
|
||||||
|
"1010101010101010"
|
||||||
|
"1000100001000101"
|
||||||
|
"1000110110110010"
|
||||||
|
"1100110010100101"
|
||||||
|
"1000001000010010"
|
||||||
|
"1100001111000111"
|
||||||
|
"1110100000011110"
|
||||||
|
"1000011010111001"
|
||||||
|
"1000001001110100"
|
||||||
|
"1111101101001001"
|
||||||
|
"1110111111101010"
|
||||||
|
"1001000000010011"
|
||||||
|
"1010010110100000"
|
||||||
|
"1101001100010101"
|
||||||
|
"1000000001011010"
|
||||||
|
"1111111111111111"
|
||||||
|
},
|
||||||
|
/* 11*/ { BARCODE_DATAMATRIX, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("ABC"), -1, 3 }, { TU("DEF"), -1, 4 }, { TU("GHI"), -1, 5 } }, 0, 12, 26, 0, "BWIPP different encodation (1st seg C40)",
|
||||||
|
"10101010101010101010101010"
|
||||||
|
"10001000011110001111000011"
|
||||||
|
"10000101111001000011010000"
|
||||||
|
"11000000100100110111100111"
|
||||||
|
"10111000000100111110100110"
|
||||||
|
"11110011110011010010011001"
|
||||||
|
"10001000100100010000010000"
|
||||||
|
"10001110000110000110000001"
|
||||||
|
"10100001001011000111000110"
|
||||||
|
"10110110100111010011101111"
|
||||||
|
"10000100100001011001101100"
|
||||||
|
"11111111111111111111111111"
|
||||||
|
},
|
||||||
|
/* 12*/ { BARCODE_DATAMATRIX, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("ABCDEF"), -1, 3 }, { TU("GHIJKL"), -1, 4 }, { TU("MNOPQR"), -1, 5 } }, 0, 22, 22, 1, "",
|
||||||
|
"1010101010101010101010"
|
||||||
|
"1001100110101101111101"
|
||||||
|
"1000110010111101010100"
|
||||||
|
"1100101101111111100001"
|
||||||
|
"1001001000111100001000"
|
||||||
|
"1110111000110001011111"
|
||||||
|
"1010110000001101001100"
|
||||||
|
"1000011000010101000111"
|
||||||
|
"1000001111001011101110"
|
||||||
|
"1111011001111000001001"
|
||||||
|
"1110101101110111011100"
|
||||||
|
"1001100011100000011111"
|
||||||
|
"1111110101001010000010"
|
||||||
|
"1001011000001100101111"
|
||||||
|
"1010101010111010100000"
|
||||||
|
"1111000100011100001111"
|
||||||
|
"1100000111000010111110"
|
||||||
|
"1110010000110010010111"
|
||||||
|
"1111110010101010101010"
|
||||||
|
"1110001110011001010111"
|
||||||
|
"1000000100010110101000"
|
||||||
|
"1111111111111111111111"
|
||||||
|
},
|
||||||
|
/* 13*/ { BARCODE_DATAMATRIX, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("abcdef"), -1, 3 }, { TU("\015*>\015*>"), -1, 4 }, { TU("ghijkl"), -1, 5 } }, 0, 22, 22, 0, "BWIPP different encodation",
|
||||||
|
"1010101010101010101010"
|
||||||
|
"1001110110000010100111"
|
||||||
|
"1000110011011101100100"
|
||||||
|
"1100101000111110100011"
|
||||||
|
"1001001000111101111100"
|
||||||
|
"1110111000110000000001"
|
||||||
|
"1010110100001101010000"
|
||||||
|
"1000011000010101000111"
|
||||||
|
"1000001111001000001110"
|
||||||
|
"1111011011111010011001"
|
||||||
|
"1110101111111110100000"
|
||||||
|
"1001000011101000001011"
|
||||||
|
"1101000101110001010010"
|
||||||
|
"1001111000110101010011"
|
||||||
|
"1011101011101101011000"
|
||||||
|
"1101000101100000010111"
|
||||||
|
"1110000101000010110110"
|
||||||
|
"1110010001101000010111"
|
||||||
|
"1111110000100110110110"
|
||||||
|
"1110000111110100001101"
|
||||||
|
"1100010101011000000000"
|
||||||
|
"1111111111111111111111"
|
||||||
|
},
|
||||||
|
/* 14*/ { BARCODE_DATAMATRIX, UNICODE_MODE, -1, -1, -1, { 0, 0, "" }, { { TU("abcdefg"), -1, 3 }, { TU("\015*>\015*>\015*"), -1, 4 }, { TU("hijklm"), -1, 5 } }, 0, 22, 22, 0, "BWIPP different encodation",
|
||||||
|
"1010101010101010101010"
|
||||||
|
"1000101010011000110001"
|
||||||
|
"1000011111011010010010"
|
||||||
|
"1100100000110000111111"
|
||||||
|
"1001000001000101010000"
|
||||||
|
"1101000110001000000111"
|
||||||
|
"1101000010100101101110"
|
||||||
|
"1101110100010101110111"
|
||||||
|
"1111101101001000000110"
|
||||||
|
"1110011111011010101001"
|
||||||
|
"1111111100001100010000"
|
||||||
|
"1110110110010010111011"
|
||||||
|
"1100001111100110011000"
|
||||||
|
"1100000110000111101101"
|
||||||
|
"1111000000000101000000"
|
||||||
|
"1011001101101100000101"
|
||||||
|
"1110110011011010000000"
|
||||||
|
"1110100011010111001101"
|
||||||
|
"1001011100101100101010"
|
||||||
|
"1000000010001111101111"
|
||||||
|
"1100011100111001010010"
|
||||||
|
"1111111111111111111111"
|
||||||
|
},
|
||||||
};
|
};
|
||||||
const int data_size = ARRAY_SIZE(data);
|
const int data_size = ARRAY_SIZE(data);
|
||||||
int i, j, seg_count, ret;
|
int i, j, seg_count, ret;
|
||||||
|
@ -5889,7 +6166,7 @@ static void test_encode_segs(const testCtx *const p_ctx) {
|
||||||
if (!data[i].bwipp_cmp) {
|
if (!data[i].bwipp_cmp) {
|
||||||
if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment);
|
if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment);
|
||||||
} else {
|
} else {
|
||||||
ret = testUtilBwippSegs(i, symbol, -1, data[i].option_2, -1, data[i].segs, seg_count, NULL, cmp_buf, sizeof(cmp_buf));
|
ret = testUtilBwippSegs(i, symbol, -1, data[i].option_2, data[i].option_3, data[i].segs, seg_count, NULL, cmp_buf, sizeof(cmp_buf));
|
||||||
assert_zero(ret, "i:%d %s testUtilBwippSegs ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret);
|
assert_zero(ret, "i:%d %s testUtilBwippSegs ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret);
|
||||||
|
|
||||||
ret = testUtilBwippCmp(symbol, cmp_msg, cmp_buf, data[i].expected);
|
ret = testUtilBwippCmp(symbol, cmp_msg, cmp_buf, data[i].expected);
|
||||||
|
@ -6970,6 +7247,7 @@ static void test_minimalenc(const testCtx *const p_ctx) {
|
||||||
int gs1;
|
int gs1;
|
||||||
int binlen;
|
int binlen;
|
||||||
int binlens[2] = {0};
|
int binlens[2] = {0};
|
||||||
|
const int last_seg = 1;
|
||||||
|
|
||||||
testStartSymbol("test_minimalenc", &symbol);
|
testStartSymbol("test_minimalenc", &symbol);
|
||||||
|
|
||||||
|
@ -6985,7 +7263,7 @@ static void test_minimalenc(const testCtx *const p_ctx) {
|
||||||
binlen = 0;
|
binlen = 0;
|
||||||
symbol->input_mode |= FAST_MODE;
|
symbol->input_mode |= FAST_MODE;
|
||||||
gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1;
|
gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1;
|
||||||
ret = dm_encode_test(symbol, (unsigned char *) data[i].data, length, symbol->eci, gs1, binary[0], &binlen);
|
ret = dm_encode_test(symbol, (unsigned char *) data[i].data, length, symbol->eci, last_seg, gs1, binary[0], &binlen);
|
||||||
assert_equal(ret, data[i].ret, "i:%d dm_encode() FAST_MODE ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt);
|
assert_equal(ret, data[i].ret, "i:%d dm_encode() FAST_MODE ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt);
|
||||||
|
|
||||||
binlens[0] = binlen;
|
binlens[0] = binlen;
|
||||||
|
@ -6993,7 +7271,7 @@ static void test_minimalenc(const testCtx *const p_ctx) {
|
||||||
binlen = 0;
|
binlen = 0;
|
||||||
symbol->input_mode &= ~FAST_MODE;
|
symbol->input_mode &= ~FAST_MODE;
|
||||||
gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1;
|
gs1 = (symbol->input_mode & 0x07) != GS1_MODE ? 0 : (symbol->output_options & GS1_GS_SEPARATOR) ? 2 : 1;
|
||||||
ret = dm_encode_test(symbol, (unsigned char *) data[i].data, length, symbol->eci, gs1, binary[1], &binlen);
|
ret = dm_encode_test(symbol, (unsigned char *) data[i].data, length, symbol->eci, last_seg, gs1, binary[1], &binlen);
|
||||||
assert_equal(ret, data[i].ret, "i:%d dm_encode() minimal ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt);
|
assert_equal(ret, data[i].ret, "i:%d dm_encode() minimal ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt);
|
||||||
|
|
||||||
binlens[1] = binlen;
|
binlens[1] = binlen;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
libzint - the open source barcode library
|
libzint - the open source barcode library
|
||||||
Copyright (C) 2024 Antoine Merino <antoine.merino.dev@gmail.com>
|
Copyright (C) 2024-2025 Antoine Merino <antoine.merino.dev@gmail.com>
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
|
@ -223,7 +223,7 @@ static void test_input(const testCtx *const p_ctx) {
|
||||||
/* 0*/ { BARCODE_DXFILMEDGE, -1, "79-1/123A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 972: Frame number part length 4 too long (maximum 3)" },
|
/* 0*/ { BARCODE_DXFILMEDGE, -1, "79-1/123A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 972: Frame number part length 4 too long (maximum 3)" },
|
||||||
/* 1*/ { BARCODE_DXFILMEDGE, -1, "79-1/1@A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 973: Frame number \"1@A\" is invalid (expected digits, optionally followed by a single \"A\")" },
|
/* 1*/ { BARCODE_DXFILMEDGE, -1, "79-1/1@A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 973: Frame number \"1@A\" is invalid (expected digits, optionally followed by a single \"A\")" },
|
||||||
/* 2*/ { BARCODE_DXFILMEDGE, -1, "012312365", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 974: DX information length 9 too long (maximum 6)" },
|
/* 2*/ { BARCODE_DXFILMEDGE, -1, "012312365", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 974: DX information length 9 too long (maximum 6)" },
|
||||||
/* 3*/ { BARCODE_DXFILMEDGE, -1, "12-", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 977: Wrong format for DX parts 1 and 2 (expected format: XXX-XX, digits)" },
|
/* 3*/ { BARCODE_DXFILMEDGE, -1, "12-", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 977: Wrong format for DX parts 1 and 2 (expected format: NNN-NN, digits)" },
|
||||||
/* 4*/ { BARCODE_DXFILMEDGE, -1, "01234/00A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 980: DX number \"01234\" is incorrect; expected 4 digits (DX extract) or 6 digits (DX full)" },
|
/* 4*/ { BARCODE_DXFILMEDGE, -1, "01234/00A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 980: DX number \"01234\" is incorrect; expected 4 digits (DX extract) or 6 digits (DX full)" },
|
||||||
/* 5*/ { BARCODE_DXFILMEDGE, -1, "0123/0AA", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 983: Frame number \"0AA\" is invalid (expected digits, optionally followed by a single \"A\")" },
|
/* 5*/ { BARCODE_DXFILMEDGE, -1, "0123/0AA", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 983: Frame number \"0AA\" is invalid (expected digits, optionally followed by a single \"A\")" },
|
||||||
/* 6*/ { BARCODE_DXFILMEDGE, -1, "128-0/24", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 978: DX part 1 \"128\" out of range (1 to 127)" },
|
/* 6*/ { BARCODE_DXFILMEDGE, -1, "128-0/24", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 978: DX part 1 \"128\" out of range (1 to 127)" },
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
libzint - the open source barcode library
|
libzint - the open source barcode library
|
||||||
Copyright (C) 2019-2024 Robin Stuart <rstuart114@gmail.com>
|
Copyright (C) 2019-2025 Robin Stuart <rstuart114@gmail.com>
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
|
@ -601,22 +601,26 @@ const char *testUtilOption3Name(int symbology, int option_3) {
|
||||||
const unsigned int high_byte = option_3 == -1 ? 0 : (option_3 >> 8) & 0xFF;
|
const unsigned int high_byte = option_3 == -1 ? 0 : (option_3 >> 8) & 0xFF;
|
||||||
|
|
||||||
if (symbology == BARCODE_DATAMATRIX || symbology == BARCODE_HIBC_DM) {
|
if (symbology == BARCODE_DATAMATRIX || symbology == BARCODE_HIBC_DM) {
|
||||||
if ((option_3 & 0x7F) == DM_SQUARE) {
|
if (option_3 > 0) {
|
||||||
if ((option_3 & DM_ISO_144) == DM_ISO_144) {
|
if ((option_3 & 0x7F) == DM_SQUARE) {
|
||||||
name = "DM_SQUARE | DM_ISO_144";
|
if ((option_3 & DM_ISO_144) == DM_ISO_144) {
|
||||||
|
name = "DM_SQUARE | DM_ISO_144";
|
||||||
|
} else {
|
||||||
|
name = "DM_SQUARE";
|
||||||
|
}
|
||||||
|
} else if ((option_3 & 0x7F) == DM_DMRE) {
|
||||||
|
if ((option_3 & DM_ISO_144) == DM_ISO_144) {
|
||||||
|
name = "DM_DMRE | DM_ISO_144";
|
||||||
|
} else {
|
||||||
|
name = "DM_DMRE";
|
||||||
|
}
|
||||||
|
} else if ((option_3 & DM_ISO_144) == DM_ISO_144) {
|
||||||
|
name = "DM_ISO_144";
|
||||||
} else {
|
} else {
|
||||||
name = "DM_SQUARE";
|
name = (option_3 & 0xFF) ? "-1" : "0";
|
||||||
}
|
}
|
||||||
} else if ((option_3 & 0x7F) == DM_DMRE) {
|
|
||||||
if ((option_3 & DM_ISO_144) == DM_ISO_144) {
|
|
||||||
name = "DM_DMRE | DM_ISO_144";
|
|
||||||
} else {
|
|
||||||
name = "DM_DMRE";
|
|
||||||
}
|
|
||||||
} else if ((option_3 & DM_ISO_144) == DM_ISO_144) {
|
|
||||||
name = "DM_ISO_144";
|
|
||||||
} else {
|
} else {
|
||||||
name = (option_3 & 0xFF) ? "-1" : "0";
|
name = option_3 ? "-1" : "0";
|
||||||
}
|
}
|
||||||
} else if (symbology == BARCODE_QRCODE || symbology == BARCODE_HIBC_QR || symbology == BARCODE_MICROQR
|
} else if (symbology == BARCODE_QRCODE || symbology == BARCODE_HIBC_QR || symbology == BARCODE_MICROQR
|
||||||
|| symbology == BARCODE_RMQR || symbology == BARCODE_GRIDMATRIX || symbology == BARCODE_HANXIN) {
|
|| symbology == BARCODE_RMQR || symbology == BARCODE_GRIDMATRIX || symbology == BARCODE_HANXIN) {
|
||||||
|
@ -2572,7 +2576,7 @@ static char *testUtilBwippEscape(char *bwipp_data, int bwipp_data_size, const ch
|
||||||
case 'R': val = 0x1e; /* Record Separator */ break;
|
case 'R': val = 0x1e; /* Record Separator */ break;
|
||||||
case 'x':
|
case 'x':
|
||||||
val = d + 2 < de && z_isxdigit(d[1]) && z_isxdigit(d[2]) ? (ctoi(d[1]) << 4) | ctoi(d[2]) : -1;
|
val = d + 2 < de && z_isxdigit(d[1]) && z_isxdigit(d[2]) ? (ctoi(d[1]) << 4) | ctoi(d[2]) : -1;
|
||||||
if (val != -1) d+= 2;
|
if (val != -1) d += 2;
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
val = d + 3 < de ? to_int(d + 1, 3) : -1;
|
val = d + 3 < de ? to_int(d + 1, 3) : -1;
|
||||||
|
@ -2586,7 +2590,14 @@ static char *testUtilBwippEscape(char *bwipp_data, int bwipp_data_size, const ch
|
||||||
if (val != -1) d += 3;
|
if (val != -1) d += 3;
|
||||||
break;
|
break;
|
||||||
case '\\': val = '\\'; break;
|
case '\\': val = '\\'; break;
|
||||||
/*case 'u': val = 0; TODO: implement break; */
|
case 'u': /* For convenience, only handles ISO/IEC 8859-1 */
|
||||||
|
val = d + 4 < de && z_isxdigit(d[1]) && z_isxdigit(d[2]) && z_isxdigit(d[3]) && z_isxdigit(d[4])
|
||||||
|
? (ctoi(d[1]) << 4) | ctoi(d[2]) : -1;
|
||||||
|
if (val == 0) { /* Only handling Latin-1 so must be zero */
|
||||||
|
val = (ctoi(d[3]) << 4) | ctoi(d[4]);
|
||||||
|
d += 4;
|
||||||
|
}
|
||||||
|
break;
|
||||||
/*case 'U': val = 0; TODO: implement break; */
|
/*case 'U': val = 0; TODO: implement break; */
|
||||||
case '^': val = -1; break; /* Code 128 special escapes */
|
case '^': val = -1; break; /* Code 128 special escapes */
|
||||||
default: fprintf(stderr, "testUtilBwippEscape: unknown escape %c\n", *d); return NULL; break;
|
default: fprintf(stderr, "testUtilBwippEscape: unknown escape %c\n", *d); return NULL; break;
|
||||||
|
@ -3274,6 +3285,16 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int
|
||||||
if (option_3 != -1) {
|
if (option_3 != -1) {
|
||||||
bwipp_opts = bwipp_opts_buf;
|
bwipp_opts = bwipp_opts_buf;
|
||||||
}
|
}
|
||||||
|
if (symbol->output_options & READER_INIT) {
|
||||||
|
memmove(bwipp_data + 5, bwipp_data, strlen(bwipp_data) + 1);
|
||||||
|
memcpy(bwipp_data, "^PROG", 5);
|
||||||
|
if (!parsefnc) {
|
||||||
|
sprintf(bwipp_opts_buf + strlen(bwipp_opts_buf), "%sparsefnc",
|
||||||
|
strlen(bwipp_opts_buf) ? " " : "");
|
||||||
|
bwipp_opts = bwipp_opts_buf;
|
||||||
|
parse = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (symbology == BARCODE_DOTCODE) {
|
} else if (symbology == BARCODE_DOTCODE) {
|
||||||
if (option_2 > 0) {
|
if (option_2 > 0) {
|
||||||
sprintf(bwipp_opts_buf + strlen(bwipp_opts_buf), "%scolumns=%d",
|
sprintf(bwipp_opts_buf + strlen(bwipp_opts_buf), "%scolumns=%d",
|
||||||
|
@ -3828,7 +3849,7 @@ static const char *testUtilZXingCPPName(int index, const struct zint_symbol *sym
|
||||||
{ "", -1, 125, },
|
{ "", -1, 125, },
|
||||||
{ "", -1, 126, },
|
{ "", -1, 126, },
|
||||||
{ "", -1, 127, },
|
{ "", -1, 127, },
|
||||||
{ "", BARCODE_AZRUNE, 128, },
|
{ "Aztec", BARCODE_AZRUNE, 128, },
|
||||||
{ "", BARCODE_CODE32, 129, }, /* Code39 based */
|
{ "", BARCODE_CODE32, 129, }, /* Code39 based */
|
||||||
{ "", BARCODE_EANX_CC, 130, },
|
{ "", BARCODE_EANX_CC, 130, },
|
||||||
{ "", BARCODE_GS1_128_CC, 131, },
|
{ "", BARCODE_GS1_128_CC, 131, },
|
||||||
|
@ -4105,6 +4126,7 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in
|
||||||
char *dpd = need_dpd_prefix ? (char *) z_alloca(28 + 1) : NULL;
|
char *dpd = need_dpd_prefix ? (char *) z_alloca(28 + 1) : NULL;
|
||||||
char *pzn = symbology == BARCODE_PZN ? (char *) z_alloca(expected_len + 1 + 1) : NULL;
|
char *pzn = symbology == BARCODE_PZN ? (char *) z_alloca(expected_len + 1 + 1) : NULL;
|
||||||
char *dxfe = symbology == BARCODE_DXFILMEDGE ? (char *) z_alloca(expected_len * 2 + 1) : NULL;
|
char *dxfe = symbology == BARCODE_DXFILMEDGE ? (char *) z_alloca(expected_len * 2 + 1) : NULL;
|
||||||
|
char azrune[4];
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
int ret_memcmp;
|
int ret_memcmp;
|
||||||
|
@ -4475,6 +4497,13 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in
|
||||||
expected_len = (int) strlen(expected);
|
expected_len = (int) strlen(expected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else if (symbology == BARCODE_AZRUNE) {
|
||||||
|
if (expected_len != 3) {
|
||||||
|
sprintf(azrune, "%03d", to_int((const unsigned char *) expected, expected_len));
|
||||||
|
expected = azrune;
|
||||||
|
expected_len = 3;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret_buf) {
|
if (ret_buf) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Copyright (C) 2021-2024 Robin Stuart <rstuart114@gmail.com>
|
# Copyright (C) 2021-2025 Robin Stuart <rstuart114@gmail.com>
|
||||||
# SPDX-License-Identifier: BSD-3-Clause
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
# vim: set ts=4 sw=4 et :
|
# vim: set ts=4 sw=4 et :
|
||||||
set -e
|
set -e
|
||||||
|
@ -34,6 +34,9 @@ run_bwipp_test "test_code16k" "encode"
|
||||||
run_bwipp_test "test_code49" "input"
|
run_bwipp_test "test_code49" "input"
|
||||||
run_bwipp_test "test_code49" "encode"
|
run_bwipp_test "test_code49" "encode"
|
||||||
run_bwipp_test "test_composite"
|
run_bwipp_test "test_composite"
|
||||||
|
run_bwipp_test "test_dmatrix" "buffer"
|
||||||
|
run_bwipp_test "test_dmatrix" "options"
|
||||||
|
run_bwipp_test "test_dmatrix" "reader_init"
|
||||||
run_bwipp_test "test_dmatrix" "input"
|
run_bwipp_test "test_dmatrix" "input"
|
||||||
run_bwipp_test "test_dmatrix" "encode"
|
run_bwipp_test "test_dmatrix" "encode"
|
||||||
run_bwipp_test "test_dmatrix" "encode_segs"
|
run_bwipp_test "test_dmatrix" "encode_segs"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Copyright (C) 2021-2024 Robin Stuart <rstuart114@gmail.com>
|
# Copyright (C) 2021-2025 Robin Stuart <rstuart114@gmail.com>
|
||||||
# SPDX-License-Identifier: BSD-3-Clause
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
# vim: set ts=4 sw=4 et :
|
# vim: set ts=4 sw=4 et :
|
||||||
set -e
|
set -e
|
||||||
|
@ -26,9 +26,14 @@ run_zxingcpp_test "test_code" "encode"
|
||||||
run_zxingcpp_test "test_code128"
|
run_zxingcpp_test "test_code128"
|
||||||
run_zxingcpp_test "test_code16k" "input"
|
run_zxingcpp_test "test_code16k" "input"
|
||||||
run_zxingcpp_test "test_code16k" "encode"
|
run_zxingcpp_test "test_code16k" "encode"
|
||||||
|
run_zxingcpp_test "test_dmatrix" "large"
|
||||||
|
run_zxingcpp_test "test_dmatrix" "buffer"
|
||||||
|
run_zxingcpp_test "test_dmatrix" "options"
|
||||||
|
run_zxingcpp_test "test_dmatrix" "reader_init"
|
||||||
run_zxingcpp_test "test_dmatrix" "input"
|
run_zxingcpp_test "test_dmatrix" "input"
|
||||||
run_zxingcpp_test "test_dmatrix" "encode"
|
run_zxingcpp_test "test_dmatrix" "encode"
|
||||||
run_zxingcpp_test "test_dmatrix" "encode_segs"
|
run_zxingcpp_test "test_dmatrix" "encode_segs"
|
||||||
|
run_zxingcpp_test "test_dxfilmedge" "encode"
|
||||||
run_zxingcpp_test "test_dotcode" "input"
|
run_zxingcpp_test "test_dotcode" "input"
|
||||||
run_zxingcpp_test "test_dotcode" "encode"
|
run_zxingcpp_test "test_dotcode" "encode"
|
||||||
run_zxingcpp_test "test_dotcode" "encode_segs"
|
run_zxingcpp_test "test_dotcode" "encode_segs"
|
||||||
|
|
12
docs/README
12
docs/README
|
@ -1,11 +1,11 @@
|
||||||
% docs/README 2024-12-23
|
% docs/README 2025-01-18
|
||||||
|
|
||||||
For generation of "docs/manual.pdf" and "docs/manual.txt" from "manual.pmd" using a recent version of pandoc
|
For generation of "docs/manual.pdf" and "docs/manual.txt" from "manual.pmd" using a recent version of pandoc
|
||||||
|
|
||||||
On Ubuntu/Debian (tested on Ubuntu 22.04 and Ubuntu 24.04)
|
On Ubuntu/Debian (tested on Ubuntu 22.04 and Ubuntu 24.04)
|
||||||
|
|
||||||
wget https://github.com/jgm/pandoc/releases/download/3.6.1/pandoc-3.6.1-1-amd64.deb
|
wget https://github.com/jgm/pandoc/releases/download/3.6.2/pandoc-3.6.2-1-amd64.deb
|
||||||
sudo dpkg -i pandoc-3.6.1-1-amd64.deb
|
sudo dpkg -i pandoc-3.6.2-1-amd64.deb
|
||||||
For Ubuntu 22.04 (python < 3.12)
|
For Ubuntu 22.04 (python < 3.12)
|
||||||
sudo apt install python3-pip
|
sudo apt install python3-pip
|
||||||
pip install pandoc-tablenos --user
|
pip install pandoc-tablenos --user
|
||||||
|
@ -27,9 +27,9 @@ Then
|
||||||
|
|
||||||
On Fedora (tested on Fedora Linux 38 (Workstation Edition) and Fedora Linux 40 (Workstation Edition))
|
On Fedora (tested on Fedora Linux 38 (Workstation Edition) and Fedora Linux 40 (Workstation Edition))
|
||||||
|
|
||||||
wget https://github.com/jgm/pandoc/releases/download/3.6.1/pandoc-3.6.1-linux-amd64.tar.gz
|
wget https://github.com/jgm/pandoc/releases/download/3.6.2/pandoc-3.6.2-linux-amd64.tar.gz
|
||||||
tar xf pandoc-3.6.1-linux-amd64.tar.gz
|
tar xf pandoc-3.6.2-linux-amd64.tar.gz
|
||||||
sudo mv -i pandoc-3.6.1/bin/pandoc /usr/local/bin
|
sudo mv -i pandoc-3.6.2/bin/pandoc /usr/local/bin
|
||||||
sudo dnf install python3-pip
|
sudo dnf install python3-pip
|
||||||
pip install pandoc-tablenos --user
|
pip install pandoc-tablenos --user
|
||||||
export PATH=~/.local/bin:"$PATH"
|
export PATH=~/.local/bin:"$PATH"
|
||||||
|
|
118
docs/manual.html
118
docs/manual.html
|
@ -333,7 +333,7 @@
|
||||||
<h1 class="title">Zint Barcode Generator and Zint Barcode Studio User
|
<h1 class="title">Zint Barcode Generator and Zint Barcode Studio User
|
||||||
Manual</h1>
|
Manual</h1>
|
||||||
<p class="author">Version 2.13.0.9</p>
|
<p class="author">Version 2.13.0.9</p>
|
||||||
<p class="date">December 2024</p>
|
<p class="date">January 2025</p>
|
||||||
</header>
|
</header>
|
||||||
<nav id="TOC" role="doc-toc">
|
<nav id="TOC" role="doc-toc">
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -3329,11 +3329,11 @@ member <code>memfile</code> instead of to the output file
|
||||||
<span id="cb64-14"><a href="#cb64-14" aria-hidden="true" tabindex="-1"></a> ZBarcode_Delete<span class="op">(</span>my_symbol<span class="op">);</span></span>
|
<span id="cb64-14"><a href="#cb64-14" aria-hidden="true" tabindex="-1"></a> ZBarcode_Delete<span class="op">(</span>my_symbol<span class="op">);</span></span>
|
||||||
<span id="cb64-15"><a href="#cb64-15" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
|
<span id="cb64-15"><a href="#cb64-15" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
|
||||||
<span id="cb64-16"><a href="#cb64-16" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
|
<span id="cb64-16"><a href="#cb64-16" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
|
||||||
<p>will print the SVG output to <code>stdout</code> (the file “mem.svg”
|
<p>will print the SVG output to <code>stdout</code> (the file
|
||||||
is not created). This is particularly useful for the textual formats EPS
|
<code>"mem.svg"</code> is not created). This is particularly useful for
|
||||||
and SVG,<a href="#fn7" class="footnote-ref" id="fnref7"
|
the textual formats EPS and SVG,<a href="#fn7" class="footnote-ref"
|
||||||
role="doc-noteref"><sup>7</sup></a> allowing the output to be
|
id="fnref7" role="doc-noteref"><sup>7</sup></a> allowing the output to
|
||||||
manipulated and processed by the client.</p>
|
be manipulated and processed by the client.</p>
|
||||||
<h2 id="setting-options">5.7 Setting Options</h2>
|
<h2 id="setting-options">5.7 Setting Options</h2>
|
||||||
<p>So far our application is not very useful unless we plan to only make
|
<p>So far our application is not very useful unless we plan to only make
|
||||||
Code 128 symbols and we don’t mind that they only save to
|
Code 128 symbols and we don’t mind that they only save to
|
||||||
|
@ -3918,8 +3918,9 @@ use standard height (if any) as default.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="text-align: left;"><code>EANUPC_GUARD_WHITESPACE</code></td>
|
<td style="text-align: left;"><code>EANUPC_GUARD_WHITESPACE</code></td>
|
||||||
<td style="text-align: left;">Add quiet zone indicators (“<” and/or
|
<td style="text-align: left;">Add quiet zone indicators
|
||||||
“>”) to HRT whitespace (EAN/UPC).</td>
|
(<code>"<"</code> and/or <code>">"</code>) to HRT whitespace
|
||||||
|
(EAN/UPC).</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="text-align: left;"><code>EMBED_VECTOR_FONT</code></td>
|
<td style="text-align: left;"><code>EMBED_VECTOR_FONT</code></td>
|
||||||
|
@ -4906,8 +4907,8 @@ alt="zint -b EAN14 --compliantheight -d "9889876543210"" />
|
||||||
aria-hidden="true"><code>zint -b EAN14 --compliantheight -d "9889876543210"</code></figcaption>
|
aria-hidden="true"><code>zint -b EAN14 --compliantheight -d "9889876543210"</code></figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
<p>A shorter version of GS1-128 which encodes GTIN data only. A 13-digit
|
<p>A shorter version of GS1-128 which encodes GTIN data only. A 13-digit
|
||||||
number is required. The GTIN check digit and HRT-only AI “(01)” are
|
number is required. The GTIN check digit and HRT-only AI
|
||||||
added by Zint.</p>
|
<code>"(01)"</code> are added by Zint.</p>
|
||||||
<h4 id="nve-18-sscc-18">6.1.10.5 NVE-18 (SSCC-18)</h4>
|
<h4 id="nve-18-sscc-18">6.1.10.5 NVE-18 (SSCC-18)</h4>
|
||||||
<figure>
|
<figure>
|
||||||
<img src="images/nve18.svg" title="fig:" class="lin"
|
<img src="images/nve18.svg" title="fig:" class="lin"
|
||||||
|
@ -4918,8 +4919,8 @@ aria-hidden="true"><code>zint -b NVE18 --compliantheight -d "37612345000001003"<
|
||||||
<p>A variation of Code 128 the ‘Nummer der Versandeinheit’ standard,
|
<p>A variation of Code 128 the ‘Nummer der Versandeinheit’ standard,
|
||||||
also known as SSCC-18 (Serial Shipping Container Code), includes both a
|
also known as SSCC-18 (Serial Shipping Container Code), includes both a
|
||||||
visible modulo-10 and a hidden modulo-103 check digit. NVE-18 requires a
|
visible modulo-10 and a hidden modulo-103 check digit. NVE-18 requires a
|
||||||
17-digit numerical input. Check digits and HRT-only AI “(00)” are added
|
17-digit numerical input. Check digits and HRT-only AI
|
||||||
by Zint.</p>
|
<code>"(00)"</code> are added by Zint.</p>
|
||||||
<h4 id="hibc-code-128">6.1.10.6 HIBC Code 128</h4>
|
<h4 id="hibc-code-128">6.1.10.6 HIBC Code 128</h4>
|
||||||
<figure>
|
<figure>
|
||||||
<img src="images/hibc_128.svg" title="fig:" class="lin"
|
<img src="images/hibc_128.svg" title="fig:" class="lin"
|
||||||
|
@ -5021,9 +5022,10 @@ alt="zint -b DBAR_OMN --compliantheight -d "0950110153001"" />
|
||||||
aria-hidden="true"><code>zint -b DBAR_OMN --compliantheight -d "0950110153001"</code></figcaption>
|
aria-hidden="true"><code>zint -b DBAR_OMN --compliantheight -d "0950110153001"</code></figcaption>
|
||||||
</figure>
|
</figure>
|
||||||
<p>Previously known as RSS-14 this standard encodes a 13-digit item
|
<p>Previously known as RSS-14 this standard encodes a 13-digit item
|
||||||
code. A check digit and HRT-only Application Identifier of “(01)” are
|
code. A check digit and HRT-only Application Identifier of
|
||||||
added by Zint. (A 14-digit code that appends the check digit may be
|
<code>"(01)"</code> are added by Zint. (A 14-digit code that appends the
|
||||||
given, in which case the check digit will be verified.)</p>
|
check digit may be given, in which case the check digit will be
|
||||||
|
verified.)</p>
|
||||||
<p>GS1 DataBar Omnidirectional symbols should have a height of 33 or
|
<p>GS1 DataBar Omnidirectional symbols should have a height of 33 or
|
||||||
greater. To produce a GS1 DataBar Truncated symbol set the symbol height
|
greater. To produce a GS1 DataBar Truncated symbol set the symbol height
|
||||||
to a value between 13 and 32. Truncated symbols may not be scannable by
|
to a value between 13 and 32. Truncated symbols may not be scannable by
|
||||||
|
@ -5046,8 +5048,8 @@ code and can be used in the same way as GS1 DataBar Omnidirectional
|
||||||
above. GS1 DataBar Limited, however, is limited to data starting with
|
above. GS1 DataBar Limited, however, is limited to data starting with
|
||||||
digits 0 and 1 (i.e. numbers in the range 0 to 1999999999999). As with
|
digits 0 and 1 (i.e. numbers in the range 0 to 1999999999999). As with
|
||||||
GS1 DataBar Omnidirectional a check digit and HRT-only Application
|
GS1 DataBar Omnidirectional a check digit and HRT-only Application
|
||||||
Identifier of “(01)” are added by Zint, and a 14-digit code may be given
|
Identifier of <code>"(01)"</code> are added by Zint, and a 14-digit code
|
||||||
in which case the check digit will be verified.</p>
|
may be given in which case the check digit will be verified.</p>
|
||||||
<h4 id="gs1-databar-expanded">6.1.11.3 GS1 DataBar Expanded</h4>
|
<h4 id="gs1-databar-expanded">6.1.11.3 GS1 DataBar Expanded</h4>
|
||||||
<figure>
|
<figure>
|
||||||
<img src="images/dbar_exp.svg" title="fig:" class="lin"
|
<img src="images/dbar_exp.svg" title="fig:" class="lin"
|
||||||
|
@ -5260,7 +5262,7 @@ encoded.</p>
|
||||||
supports the ECI encoding mechanism. A separate symbology ID
|
supports the ECI encoding mechanism. A separate symbology ID
|
||||||
(<code>BARCODE_HIBC_PDF</code>) can be used to encode Health Industry
|
(<code>BARCODE_HIBC_PDF</code>) can be used to encode Health Industry
|
||||||
Barcode (HIBC) data.</p>
|
Barcode (HIBC) data.</p>
|
||||||
<p>For a faster but less optimal encoding, the <code>--fast</code>
|
<p>For a faster but less optimal encodation, the <code>--fast</code>
|
||||||
option (API <code>input_mode |= FAST_MODE</code>) may be used.</p>
|
option (API <code>input_mode |= FAST_MODE</code>) may be used.</p>
|
||||||
<p>PDF417 supports Structured Append of up to 99,999 symbols and an
|
<p>PDF417 supports Structured Append of up to 99,999 symbols and an
|
||||||
optional numeric ID of up to 30 digits, which can be set by using the
|
optional numeric ID of up to 30 digits, which can be set by using the
|
||||||
|
@ -5602,16 +5604,17 @@ slash (<code>/</code>), gives the frame number.</p>
|
||||||
number of 1 to 4 digits (“DX Extract”) or 6 digits (“DX Full”), but for
|
number of 1 to 4 digits (“DX Extract”) or 6 digits (“DX Full”), but for
|
||||||
the 6-digit version the first and last digit are ignored, leaving a
|
the 6-digit version the first and last digit are ignored, leaving a
|
||||||
4-digit DX Extract number in any case, which must be in the range 16 to
|
4-digit DX Extract number in any case, which must be in the range 16 to
|
||||||
2047. The second format “NNN-NN” represents the DX Extract as two
|
2047. The second format <code>"NNN-NN"</code> represents the DX Extract
|
||||||
numbers separated by a dash (<code>-</code>), the first number being 1
|
as two numbers separated by a dash (<code>-</code>), the first number
|
||||||
to 3 digits (range 1 to 127) and the second 1 to 2 digits (range 0 to
|
being 1 to 3 digits (range 1 to 127) and the second 1 to 2 digits (range
|
||||||
15).<a href="#fn15" class="footnote-ref" id="fnref15"
|
0 to 15).<a href="#fn15" class="footnote-ref" id="fnref15"
|
||||||
role="doc-noteref"><sup>15</sup></a></p>
|
role="doc-noteref"><sup>15</sup></a></p>
|
||||||
<p>The optional frame number is a number in the range 0 to 63, and may
|
<p>The optional frame number is a number in the range 0 to 63, and may
|
||||||
have a half frame indicator “A” appended. Special character sequences
|
have a half frame indicator <code>"A"</code> appended. Special character
|
||||||
(with or without a half frame indicator appended) may also be used: “S”
|
sequences (with or without a half frame indicator appended) may also be
|
||||||
or “X” means frame number 62, “K” or “00” means frame number 63, and “F”
|
used: <code>"S"</code> or <code>"X"</code> means frame number 62,
|
||||||
means frame number 0.</p>
|
<code>"K"</code> or <code>"00"</code> means frame number 63, and
|
||||||
|
<code>"F"</code> means frame number 0.</p>
|
||||||
<p>A parity bit is automatically added by Zint.</p>
|
<p>A parity bit is automatically added by Zint.</p>
|
||||||
<h2 id="state-postal-codes">6.5 4-State Postal Codes</h2>
|
<h2 id="state-postal-codes">6.5 4-State Postal Codes</h2>
|
||||||
<h3 id="australia-post-4-state-symbols">6.5.1 Australia Post 4-State
|
<h3 id="australia-post-4-state-symbols">6.5.1 Australia Post 4-State
|
||||||
|
@ -6110,7 +6113,7 @@ GS (API <code>output_options |= GS1_GS_SEPARATOR</code>).</p>
|
||||||
size 144 x 144 (version 24). To override this and use the now clarified
|
size 144 x 144 (version 24). To override this and use the now clarified
|
||||||
ISO/IEC standard placement, use option <code>--dmiso144</code> (API
|
ISO/IEC standard placement, use option <code>--dmiso144</code> (API
|
||||||
<code>option_3 |= DM_ISO_144</code>).</p>
|
<code>option_3 |= DM_ISO_144</code>).</p>
|
||||||
<p>For a faster but less optimal encoding, the <code>--fast</code>
|
<p>For a faster but less optimal encodation, the <code>--fast</code>
|
||||||
option (API <code>input_mode |= FAST_MODE</code>) may be used.</p>
|
option (API <code>input_mode |= FAST_MODE</code>) may be used.</p>
|
||||||
<p>Data Matrix supports Structured Append of up to 16 symbols and a
|
<p>Data Matrix supports Structured Append of up to 16 symbols and a
|
||||||
numeric ID (file identifications), which can be set by using the
|
numeric ID (file identifications), which can be set by using the
|
||||||
|
@ -6946,6 +6949,10 @@ Zint is given in the following table.</p>
|
||||||
data-tag=": MaxiCode Structured Carrier Message Format">
|
data-tag=": MaxiCode Structured Carrier Message Format">
|
||||||
<caption><span>Table : MaxiCode Structured Carrier Message
|
<caption><span>Table : MaxiCode Structured Carrier Message
|
||||||
Format:</span> </caption>
|
Format:</span> </caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 16%" />
|
||||||
|
<col style="width: 83%" />
|
||||||
|
</colgroup>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Characters</th>
|
<th>Characters</th>
|
||||||
|
@ -6956,30 +6963,10 @@ Format:</span> </caption>
|
||||||
<tr>
|
<tr>
|
||||||
<td>1 - 9</td>
|
<td>1 - 9</td>
|
||||||
<td style="text-align: left;">Postcode data which can consist of up to 9
|
<td style="text-align: left;">Postcode data which can consist of up to 9
|
||||||
digits (for mode 2)</td>
|
digits (for mode 2) or up to 6 alphanumeric characters (for mode 3).
|
||||||
</tr>
|
Remaining unused characters for mode 3 can be filled with the SPACE
|
||||||
<tr>
|
character (ASCII 32) or omitted. (adjust the following character
|
||||||
<td></td>
|
positions according to postcode length)</td>
|
||||||
<td style="text-align: left;">or up to 6 alphanumeric characters (for
|
|
||||||
mode 3). Remaining</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td></td>
|
|
||||||
<td style="text-align: left;">unused characters for mode 3 can be filled
|
|
||||||
with the SPACE</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td></td>
|
|
||||||
<td style="text-align: left;">character (ASCII 32) or omitted.</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td></td>
|
|
||||||
<td style="text-align: left;">(adjust the following character positions
|
|
||||||
according to postcode</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td></td>
|
|
||||||
<td style="text-align: left;">length)</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>10 - 12</td>
|
<td>10 - 12</td>
|
||||||
|
@ -7330,21 +7317,20 @@ roughly square (versions A through to H) and variable-width versions
|
||||||
(versions S and T). These can be selected by using <code>--vers</code>
|
(versions S and T). These can be selected by using <code>--vers</code>
|
||||||
(API <code>option_2</code>) as shown in the table below:</p>
|
(API <code>option_2</code>) as shown in the table below:</p>
|
||||||
<div id="tbl:codeone_sizes" class="tablenos">
|
<div id="tbl:codeone_sizes" class="tablenos">
|
||||||
<table id="tbl:codeone_sizes" style="width:88%;"
|
<table id="tbl:codeone_sizes" data-tag=": Code One Sizes">
|
||||||
data-tag=": Code One Sizes">
|
|
||||||
<caption><span>Table : Code One Sizes</span> </caption>
|
<caption><span>Table : Code One Sizes</span> </caption>
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 11%" />
|
<col style="width: 10%" />
|
||||||
<col style="width: 13%" />
|
<col style="width: 13%" />
|
||||||
<col style="width: 18%" />
|
<col style="width: 31%" />
|
||||||
<col style="width: 22%" />
|
<col style="width: 21%" />
|
||||||
<col style="width: 22%" />
|
<col style="width: 21%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Input</th>
|
<th>Input</th>
|
||||||
<th>Version</th>
|
<th>Version</th>
|
||||||
<th style="text-align: left;">Size (W x H)</th>
|
<th style="text-align: left;">Size (H x W)</th>
|
||||||
<th style="text-align: left;">Numeric Data Capacity</th>
|
<th style="text-align: left;">Numeric Data Capacity</th>
|
||||||
<th style="text-align: left;">Alphanumeric Data Capacity</th>
|
<th style="text-align: left;">Alphanumeric Data Capacity</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -7367,7 +7353,7 @@ data-tag=": Code One Sizes">
|
||||||
<tr>
|
<tr>
|
||||||
<td>3</td>
|
<td>3</td>
|
||||||
<td>C</td>
|
<td>C</td>
|
||||||
<td style="text-align: left;">28 x 28</td>
|
<td style="text-align: left;">28 x 32</td>
|
||||||
<td style="text-align: left;">104</td>
|
<td style="text-align: left;">104</td>
|
||||||
<td style="text-align: left;">64</td>
|
<td style="text-align: left;">64</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -7409,14 +7395,14 @@ data-tag=": Code One Sizes">
|
||||||
<tr>
|
<tr>
|
||||||
<td>9</td>
|
<td>9</td>
|
||||||
<td>S</td>
|
<td>S</td>
|
||||||
<td style="text-align: left;">width x 8</td>
|
<td style="text-align: left;">8 x automatic width</td>
|
||||||
<td style="text-align: left;">18</td>
|
<td style="text-align: left;">18</td>
|
||||||
<td style="text-align: left;">N/A</td>
|
<td style="text-align: left;">N/A</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>10</td>
|
<td>10</td>
|
||||||
<td>T</td>
|
<td>T</td>
|
||||||
<td style="text-align: left;">width x 16</td>
|
<td style="text-align: left;">16 x automatic width</td>
|
||||||
<td style="text-align: left;">90</td>
|
<td style="text-align: left;">90</td>
|
||||||
<td style="text-align: left;">55</td>
|
<td style="text-align: left;">55</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -9209,12 +9195,12 @@ is 10 and minimum is -5. The default is 1.</p>
|
||||||
11 45x45 23 95x95 35 147x147
|
11 45x45 23 95x95 35 147x147
|
||||||
12 49x49 24 101x101 36 151x151
|
12 49x49 24 101x101 36 151x151
|
||||||
|
|
||||||
Code One 1 to 10 (9 and 10 variable width) (WxH)
|
Code One 1 to 10 (9 and 10 variable width) (HxW)
|
||||||
1 16x18 6 70x76
|
1 16x18 6 70x76
|
||||||
2 22x22 7 104x98
|
2 22x22 7 104x98
|
||||||
3 28x28 8 148x134
|
3 28x32 8 148x134
|
||||||
4 40x42 9 Wx8
|
4 40x42 9 8xW
|
||||||
5 52x54 10 Wx16
|
5 52x54 10 16xW
|
||||||
|
|
||||||
Data Matrix 1 to 48 (31 to 48 DMRE) (HxW)
|
Data Matrix 1 to 48 (31 to 48 DMRE) (HxW)
|
||||||
1 10x10 17 72x72 33 8x80
|
1 10x10 17 72x72 33 8x80
|
||||||
|
@ -9535,7 +9521,7 @@ href="#fnref13" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
|
||||||
<li id="fn14"><p><code>BARCODE_CODE128AB</code> previously used the name
|
<li id="fn14"><p><code>BARCODE_CODE128AB</code> previously used the name
|
||||||
<code>BARCODE_CODE128B</code>, which is still recognised.<a
|
<code>BARCODE_CODE128B</code>, which is still recognised.<a
|
||||||
href="#fnref14" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
|
href="#fnref14" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
|
||||||
<li id="fn15"><p>The DX Number may be looked up in The (Modified) Big
|
<li id="fn15"><p>The DX number may be looked up in The (Modified) Big
|
||||||
Film Database at <a
|
Film Database at <a
|
||||||
href="https://thebigfilmdatabase.merinorus.com">https://thebigfilmdatabase.merinorus.com</a>.<a
|
href="https://thebigfilmdatabase.merinorus.com">https://thebigfilmdatabase.merinorus.com</a>.<a
|
||||||
href="#fnref15" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
|
href="#fnref15" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
% Zint Barcode Generator and Zint Barcode Studio User Manual
|
% Zint Barcode Generator and Zint Barcode Studio User Manual
|
||||||
% Version 2.13.0.9
|
% Version 2.13.0.9
|
||||||
% December 2024
|
% January 2025
|
||||||
|
|
||||||
# 1. Introduction
|
# 1. Introduction
|
||||||
|
|
||||||
|
@ -1907,9 +1907,9 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
will print the SVG output to `stdout` (the file "mem.svg" is not created). This
|
will print the SVG output to `stdout` (the file `"mem.svg"` is not created).
|
||||||
is particularly useful for the textual formats EPS and SVG,[^7] allowing the
|
This is particularly useful for the textual formats EPS and SVG,[^7] allowing
|
||||||
output to be manipulated and processed by the client.
|
the output to be manipulated and processed by the client.
|
||||||
|
|
||||||
[^7]: BARCODE_MEMORY_FILE textual formats EPS and SVG will have Unix newlines
|
[^7]: BARCODE_MEMORY_FILE textual formats EPS and SVG will have Unix newlines
|
||||||
(LF) on both Windows and Unix, i.e. not CR+LF on Windows.
|
(LF) on both Windows and Unix, i.e. not CR+LF on Windows.
|
||||||
|
@ -2313,7 +2313,7 @@ Value Effect
|
||||||
`COMPLIANT_HEIGHT` Warn if height specified not compliant, or use
|
`COMPLIANT_HEIGHT` Warn if height specified not compliant, or use
|
||||||
standard height (if any) as default.
|
standard height (if any) as default.
|
||||||
|
|
||||||
`EANUPC_GUARD_WHITESPACE` Add quiet zone indicators ("<" and/or ">") to HRT
|
`EANUPC_GUARD_WHITESPACE` Add quiet zone indicators (`"<"` and/or `">"`) to HRT
|
||||||
whitespace (EAN/UPC).
|
whitespace (EAN/UPC).
|
||||||
|
|
||||||
`EMBED_VECTOR_FONT` Embed font in vector output - currently available
|
`EMBED_VECTOR_FONT` Embed font in vector output - currently available
|
||||||
|
@ -3203,7 +3203,7 @@ zint -b 16 --gs1parens -d "(01)98898765432106(3202)012345(15)991231"
|
||||||
{.lin}
|
{.lin}
|
||||||
|
|
||||||
A shorter version of GS1-128 which encodes GTIN data only. A 13-digit number is
|
A shorter version of GS1-128 which encodes GTIN data only. A 13-digit number is
|
||||||
required. The GTIN check digit and HRT-only AI "(01)" are added by Zint.
|
required. The GTIN check digit and HRT-only AI `"(01)"` are added by Zint.
|
||||||
|
|
||||||
#### 6.1.10.5 NVE-18 (SSCC-18)
|
#### 6.1.10.5 NVE-18 (SSCC-18)
|
||||||
|
|
||||||
|
@ -3213,7 +3213,7 @@ required. The GTIN check digit and HRT-only AI "(01)" are added by Zint.
|
||||||
A variation of Code 128 the 'Nummer der Versandeinheit' standard, also known as
|
A variation of Code 128 the 'Nummer der Versandeinheit' standard, also known as
|
||||||
SSCC-18 (Serial Shipping Container Code), includes both a visible modulo-10 and
|
SSCC-18 (Serial Shipping Container Code), includes both a visible modulo-10 and
|
||||||
a hidden modulo-103 check digit. NVE-18 requires a 17-digit numerical input.
|
a hidden modulo-103 check digit. NVE-18 requires a 17-digit numerical input.
|
||||||
Check digits and HRT-only AI "(00)" are added by Zint.
|
Check digits and HRT-only AI `"(00)"` are added by Zint.
|
||||||
|
|
||||||
#### 6.1.10.6 HIBC Code 128
|
#### 6.1.10.6 HIBC Code 128
|
||||||
|
|
||||||
|
@ -3293,7 +3293,7 @@ GS1 DataBar symbol is to be printed with a 2D component as specified in ISO/IEC
|
||||||
"0950110153001"`](images/dbar_omn.svg){.lin}
|
"0950110153001"`](images/dbar_omn.svg){.lin}
|
||||||
|
|
||||||
Previously known as RSS-14 this standard encodes a 13-digit item code. A check
|
Previously known as RSS-14 this standard encodes a 13-digit item code. A check
|
||||||
digit and HRT-only Application Identifier of "(01)" are added by Zint. (A
|
digit and HRT-only Application Identifier of `"(01)"` are added by Zint. (A
|
||||||
14-digit code that appends the check digit may be given, in which case the check
|
14-digit code that appends the check digit may be given, in which case the check
|
||||||
digit will be verified.)
|
digit will be verified.)
|
||||||
|
|
||||||
|
@ -3313,7 +3313,7 @@ Previously known as RSS Limited this standard encodes a 13-digit item code and
|
||||||
can be used in the same way as GS1 DataBar Omnidirectional above. GS1 DataBar
|
can be used in the same way as GS1 DataBar Omnidirectional above. GS1 DataBar
|
||||||
Limited, however, is limited to data starting with digits 0 and 1 (i.e. numbers
|
Limited, however, is limited to data starting with digits 0 and 1 (i.e. numbers
|
||||||
in the range 0 to 1999999999999). As with GS1 DataBar Omnidirectional a check
|
in the range 0 to 1999999999999). As with GS1 DataBar Omnidirectional a check
|
||||||
digit and HRT-only Application Identifier of "(01)" are added by Zint, and a
|
digit and HRT-only Application Identifier of `"(01)"` are added by Zint, and a
|
||||||
14-digit code may be given in which case the check digit will be verified.
|
14-digit code may be given in which case the check digit will be verified.
|
||||||
|
|
||||||
#### 6.1.11.3 GS1 DataBar Expanded
|
#### 6.1.11.3 GS1 DataBar Expanded
|
||||||
|
@ -3483,8 +3483,8 @@ This symbology uses Latin-1 character encoding by default but also supports the
|
||||||
ECI encoding mechanism. A separate symbology ID (`BARCODE_HIBC_PDF`) can be used
|
ECI encoding mechanism. A separate symbology ID (`BARCODE_HIBC_PDF`) can be used
|
||||||
to encode Health Industry Barcode (HIBC) data.
|
to encode Health Industry Barcode (HIBC) data.
|
||||||
|
|
||||||
For a faster but less optimal encoding, the `--fast` option (API `input_mode |=
|
For a faster but less optimal encodation, the `--fast` option (API `input_mode
|
||||||
FAST_MODE`) may be used.
|
|= FAST_MODE`) may be used.
|
||||||
|
|
||||||
PDF417 supports Structured Append of up to 99,999 symbols and an optional
|
PDF417 supports Structured Append of up to 99,999 symbols and an optional
|
||||||
numeric ID of up to 30 digits, which can be set by using the `--structapp`
|
numeric ID of up to 30 digits, which can be set by using the `--structapp`
|
||||||
|
@ -3753,19 +3753,20 @@ frame number.
|
||||||
The DX number is in either of two formats. The first format is a number of 1 to
|
The DX number is in either of two formats. The first format is a number of 1 to
|
||||||
4 digits ("DX Extract") or 6 digits ("DX Full"), but for the 6-digit version the
|
4 digits ("DX Extract") or 6 digits ("DX Full"), but for the 6-digit version the
|
||||||
first and last digit are ignored, leaving a 4-digit DX Extract number in any
|
first and last digit are ignored, leaving a 4-digit DX Extract number in any
|
||||||
case, which must be in the range 16 to 2047. The second format "NNN-NN"
|
case, which must be in the range 16 to 2047. The second format `"NNN-NN"`
|
||||||
represents the DX Extract as two numbers separated by a dash (`-`), the first
|
represents the DX Extract as two numbers separated by a dash (`-`), the first
|
||||||
number being 1 to 3 digits (range 1 to 127) and the second 1 to 2 digits (range
|
number being 1 to 3 digits (range 1 to 127) and the second 1 to 2 digits (range
|
||||||
0 to 15).[^15]
|
0 to 15).[^15]
|
||||||
|
|
||||||
The optional frame number is a number in the range 0 to 63, and may have a half
|
The optional frame number is a number in the range 0 to 63, and may have a half
|
||||||
frame indicator "A" appended. Special character sequences (with or without a
|
frame indicator `"A"` appended. Special character sequences (with or without a
|
||||||
half frame indicator appended) may also be used: "S" or "X" means frame number
|
half frame indicator appended) may also be used: `"S"` or `"X"` means frame
|
||||||
62, "K" or "00" means frame number 63, and "F" means frame number 0.
|
number 62, `"K"` or `"00"` means frame number 63, and `"F"` means frame number
|
||||||
|
0.
|
||||||
|
|
||||||
A parity bit is automatically added by Zint.
|
A parity bit is automatically added by Zint.
|
||||||
|
|
||||||
[^15]: The DX Number may be looked up in The (Modified) Big Film Database at
|
[^15]: The DX number may be looked up in The (Modified) Big Film Database at
|
||||||
[https://thebigfilmdatabase.merinorus.com](
|
[https://thebigfilmdatabase.merinorus.com](
|
||||||
https://thebigfilmdatabase.merinorus.com).
|
https://thebigfilmdatabase.merinorus.com).
|
||||||
|
|
||||||
|
@ -4008,8 +4009,8 @@ By default Zint uses a "de facto" codeword placement for symbols of size 144 x
|
||||||
144 (version 24). To override this and use the now clarified ISO/IEC standard
|
144 (version 24). To override this and use the now clarified ISO/IEC standard
|
||||||
placement, use option `--dmiso144` (API `option_3 |= DM_ISO_144`).
|
placement, use option `--dmiso144` (API `option_3 |= DM_ISO_144`).
|
||||||
|
|
||||||
For a faster but less optimal encoding, the `--fast` option (API `input_mode |=
|
For a faster but less optimal encodation, the `--fast` option (API `input_mode
|
||||||
FAST_MODE`) may be used.
|
|= FAST_MODE`) may be used.
|
||||||
|
|
||||||
Data Matrix supports Structured Append of up to 16 symbols and a numeric ID
|
Data Matrix supports Structured Append of up to 16 symbols and a numeric ID
|
||||||
(file identifications), which can be set by using the `--structapp` option (see
|
(file identifications), which can be set by using the `--structapp` option (see
|
||||||
|
@ -4325,6 +4326,7 @@ includes various data about the package being sent and the secondary message
|
||||||
usually consists of address data in a data structure. The format of the primary
|
usually consists of address data in a data structure. The format of the primary
|
||||||
message required by Zint is given in the following table.
|
message required by Zint is given in the following table.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------------
|
||||||
Characters Meaning
|
Characters Meaning
|
||||||
---------- ---------------------------------------------------------------
|
---------- ---------------------------------------------------------------
|
||||||
1 - 9 Postcode data which can consist of up to 9 digits (for mode 2)
|
1 - 9 Postcode data which can consist of up to 9 digits (for mode 2)
|
||||||
|
@ -4333,8 +4335,11 @@ Characters Meaning
|
||||||
character (ASCII 32) or omitted.
|
character (ASCII 32) or omitted.
|
||||||
(adjust the following character positions according to postcode
|
(adjust the following character positions according to postcode
|
||||||
length)
|
length)
|
||||||
|
|
||||||
10 - 12 Three-digit country code according to ISO 3166-1.
|
10 - 12 Three-digit country code according to ISO 3166-1.
|
||||||
|
|
||||||
13 - 15 Three-digit service code. This depends on your parcel courier.
|
13 - 15 Three-digit service code. This depends on your parcel courier.
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
Table: {#tbl:maxicode_scm tag=": MaxiCode Structured Carrier Message Format"}
|
Table: {#tbl:maxicode_scm tag=": MaxiCode Structured Carrier Message Format"}
|
||||||
|
|
||||||
|
@ -4493,30 +4498,30 @@ symbol - fixed-ratio symbols which are roughly square (versions A through to H)
|
||||||
and variable-width versions (versions S and T). These can be selected by using
|
and variable-width versions (versions S and T). These can be selected by using
|
||||||
`--vers` (API `option_2`) as shown in the table below:
|
`--vers` (API `option_2`) as shown in the table below:
|
||||||
|
|
||||||
------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
Input Version Size Numeric Alphanumeric
|
Input Version Size Numeric Alphanumeric
|
||||||
(W x H) Data Capacity Data Capacity
|
(H x W) Data Capacity Data Capacity
|
||||||
----- ------- ---------- ------------- -------------
|
----- ------- -------------------- ------------- -------------
|
||||||
1 A 16 x 18 22 13
|
1 A 16 x 18 22 13
|
||||||
|
|
||||||
2 B 22 x 22 44 27
|
2 B 22 x 22 44 27
|
||||||
|
|
||||||
3 C 28 x 28 104 64
|
3 C 28 x 32 104 64
|
||||||
|
|
||||||
4 D 40 x 42 217 135
|
4 D 40 x 42 217 135
|
||||||
|
|
||||||
5 E 52 x 54 435 271
|
5 E 52 x 54 435 271
|
||||||
|
|
||||||
6 F 70 x 76 886 553
|
6 F 70 x 76 886 553
|
||||||
|
|
||||||
7 G 104 x 98 1755 1096
|
7 G 104 x 98 1755 1096
|
||||||
|
|
||||||
8 H 148 x 134 3550 2218
|
8 H 148 x 134 3550 2218
|
||||||
|
|
||||||
9 S width x 8 18 N/A
|
9 S 8 x automatic width 18 N/A
|
||||||
|
|
||||||
10 T width x 16 90 55
|
10 T 16 x automatic width 90 55
|
||||||
------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Table: {#tbl:codeone_sizes tag=": Code One Sizes"}
|
Table: {#tbl:codeone_sizes tag=": Code One Sizes"}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Zint Barcode Generator and Zint Barcode Studio User Manual
|
Zint Barcode Generator and Zint Barcode Studio User Manual
|
||||||
Version 2.13.0.9
|
Version 2.13.0.9
|
||||||
December 2024
|
January 2025
|
||||||
|
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
* For reference the following is a text-only version of the Zint manual, *
|
* For reference the following is a text-only version of the Zint manual, *
|
||||||
|
@ -1929,7 +1929,7 @@ the buffer is given in memfile_size. For instance:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
will print the SVG output to stdout (the file “mem.svg” is not created). This is
|
will print the SVG output to stdout (the file "mem.svg" is not created). This is
|
||||||
particularly useful for the textual formats EPS and SVG,[7] allowing the output
|
particularly useful for the textual formats EPS and SVG,[7] allowing the output
|
||||||
to be manipulated and processed by the client.
|
to be manipulated and processed by the client.
|
||||||
|
|
||||||
|
@ -2304,7 +2304,7 @@ together when adjusting this value:
|
||||||
COMPLIANT_HEIGHT Warn if height specified not compliant, or use
|
COMPLIANT_HEIGHT Warn if height specified not compliant, or use
|
||||||
standard height (if any) as default.
|
standard height (if any) as default.
|
||||||
|
|
||||||
EANUPC_GUARD_WHITESPACE Add quiet zone indicators (“<” and/or “>”) to HRT
|
EANUPC_GUARD_WHITESPACE Add quiet zone indicators ("<" and/or ">") to HRT
|
||||||
whitespace (EAN/UPC).
|
whitespace (EAN/UPC).
|
||||||
|
|
||||||
EMBED_VECTOR_FONT Embed font in vector output - currently available
|
EMBED_VECTOR_FONT Embed font in vector output - currently available
|
||||||
|
@ -3091,7 +3091,7 @@ or using the --gs1parens option:
|
||||||
[zint -b EAN14 --compliantheight -d "9889876543210"]
|
[zint -b EAN14 --compliantheight -d "9889876543210"]
|
||||||
|
|
||||||
A shorter version of GS1-128 which encodes GTIN data only. A 13-digit number is
|
A shorter version of GS1-128 which encodes GTIN data only. A 13-digit number is
|
||||||
required. The GTIN check digit and HRT-only AI “(01)” are added by Zint.
|
required. The GTIN check digit and HRT-only AI "(01)" are added by Zint.
|
||||||
|
|
||||||
6.1.10.5 NVE-18 (SSCC-18)
|
6.1.10.5 NVE-18 (SSCC-18)
|
||||||
|
|
||||||
|
@ -3100,7 +3100,7 @@ required. The GTIN check digit and HRT-only AI “(01)” are added by Zint.
|
||||||
A variation of Code 128 the ‘Nummer der Versandeinheit’ standard, also known as
|
A variation of Code 128 the ‘Nummer der Versandeinheit’ standard, also known as
|
||||||
SSCC-18 (Serial Shipping Container Code), includes both a visible modulo-10 and
|
SSCC-18 (Serial Shipping Container Code), includes both a visible modulo-10 and
|
||||||
a hidden modulo-103 check digit. NVE-18 requires a 17-digit numerical input.
|
a hidden modulo-103 check digit. NVE-18 requires a 17-digit numerical input.
|
||||||
Check digits and HRT-only AI “(00)” are added by Zint.
|
Check digits and HRT-only AI "(00)" are added by Zint.
|
||||||
|
|
||||||
6.1.10.6 HIBC Code 128
|
6.1.10.6 HIBC Code 128
|
||||||
|
|
||||||
|
@ -3175,7 +3175,7 @@ to find out how to generate DataBar symbols with 2D components.
|
||||||
[zint -b DBAR_OMN --compliantheight -d "0950110153001"]
|
[zint -b DBAR_OMN --compliantheight -d "0950110153001"]
|
||||||
|
|
||||||
Previously known as RSS-14 this standard encodes a 13-digit item code. A check
|
Previously known as RSS-14 this standard encodes a 13-digit item code. A check
|
||||||
digit and HRT-only Application Identifier of “(01)” are added by Zint. (A
|
digit and HRT-only Application Identifier of "(01)" are added by Zint. (A
|
||||||
14-digit code that appends the check digit may be given, in which case the check
|
14-digit code that appends the check digit may be given, in which case the check
|
||||||
digit will be verified.)
|
digit will be verified.)
|
||||||
|
|
||||||
|
@ -3193,7 +3193,7 @@ Previously known as RSS Limited this standard encodes a 13-digit item code and
|
||||||
can be used in the same way as GS1 DataBar Omnidirectional above. GS1 DataBar
|
can be used in the same way as GS1 DataBar Omnidirectional above. GS1 DataBar
|
||||||
Limited, however, is limited to data starting with digits 0 and 1 (i.e. numbers
|
Limited, however, is limited to data starting with digits 0 and 1 (i.e. numbers
|
||||||
in the range 0 to 1999999999999). As with GS1 DataBar Omnidirectional a check
|
in the range 0 to 1999999999999). As with GS1 DataBar Omnidirectional a check
|
||||||
digit and HRT-only Application Identifier of “(01)” are added by Zint, and a
|
digit and HRT-only Application Identifier of "(01)" are added by Zint, and a
|
||||||
14-digit code may be given in which case the check digit will be verified.
|
14-digit code may be given in which case the check digit will be verified.
|
||||||
|
|
||||||
6.1.11.3 GS1 DataBar Expanded
|
6.1.11.3 GS1 DataBar Expanded
|
||||||
|
@ -3350,7 +3350,7 @@ This symbology uses Latin-1 character encoding by default but also supports the
|
||||||
ECI encoding mechanism. A separate symbology ID (BARCODE_HIBC_PDF) can be used
|
ECI encoding mechanism. A separate symbology ID (BARCODE_HIBC_PDF) can be used
|
||||||
to encode Health Industry Barcode (HIBC) data.
|
to encode Health Industry Barcode (HIBC) data.
|
||||||
|
|
||||||
For a faster but less optimal encoding, the --fast option (API
|
For a faster but less optimal encodation, the --fast option (API
|
||||||
input_mode |= FAST_MODE) may be used.
|
input_mode |= FAST_MODE) may be used.
|
||||||
|
|
||||||
PDF417 supports Structured Append of up to 99,999 symbols and an optional
|
PDF417 supports Structured Append of up to 99,999 symbols and an optional
|
||||||
|
@ -3602,15 +3602,15 @@ if present is separated from the first by a slash (/), gives the frame number.
|
||||||
The DX number is in either of two formats. The first format is a number of 1 to
|
The DX number is in either of two formats. The first format is a number of 1 to
|
||||||
4 digits (“DX Extract”) or 6 digits (“DX Full”), but for the 6-digit version the
|
4 digits (“DX Extract”) or 6 digits (“DX Full”), but for the 6-digit version the
|
||||||
first and last digit are ignored, leaving a 4-digit DX Extract number in any
|
first and last digit are ignored, leaving a 4-digit DX Extract number in any
|
||||||
case, which must be in the range 16 to 2047. The second format “NNN-NN”
|
case, which must be in the range 16 to 2047. The second format "NNN-NN"
|
||||||
represents the DX Extract as two numbers separated by a dash (-), the first
|
represents the DX Extract as two numbers separated by a dash (-), the first
|
||||||
number being 1 to 3 digits (range 1 to 127) and the second 1 to 2 digits (range
|
number being 1 to 3 digits (range 1 to 127) and the second 1 to 2 digits (range
|
||||||
0 to 15).[15]
|
0 to 15).[15]
|
||||||
|
|
||||||
The optional frame number is a number in the range 0 to 63, and may have a half
|
The optional frame number is a number in the range 0 to 63, and may have a half
|
||||||
frame indicator “A” appended. Special character sequences (with or without a
|
frame indicator "A" appended. Special character sequences (with or without a
|
||||||
half frame indicator appended) may also be used: “S” or “X” means frame number
|
half frame indicator appended) may also be used: "S" or "X" means frame number
|
||||||
62, “K” or “00” means frame number 63, and “F” means frame number 0.
|
62, "K" or "00" means frame number 63, and "F" means frame number 0.
|
||||||
|
|
||||||
A parity bit is automatically added by Zint.
|
A parity bit is automatically added by Zint.
|
||||||
|
|
||||||
|
@ -3842,7 +3842,7 @@ By default Zint uses a “de facto” codeword placement for symbols of size 144
|
||||||
144 (version 24). To override this and use the now clarified ISO/IEC standard
|
144 (version 24). To override this and use the now clarified ISO/IEC standard
|
||||||
placement, use option --dmiso144 (API option_3 |= DM_ISO_144).
|
placement, use option --dmiso144 (API option_3 |= DM_ISO_144).
|
||||||
|
|
||||||
For a faster but less optimal encoding, the --fast option (API
|
For a faster but less optimal encodation, the --fast option (API
|
||||||
input_mode |= FAST_MODE) may be used.
|
input_mode |= FAST_MODE) may be used.
|
||||||
|
|
||||||
Data Matrix supports Structured Append of up to 16 symbols and a numeric ID
|
Data Matrix supports Structured Append of up to 16 symbols and a numeric ID
|
||||||
|
@ -4150,16 +4150,19 @@ includes various data about the package being sent and the secondary message
|
||||||
usually consists of address data in a data structure. The format of the primary
|
usually consists of address data in a data structure. The format of the primary
|
||||||
message required by Zint is given in the following table.
|
message required by Zint is given in the following table.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------------
|
||||||
Characters Meaning
|
Characters Meaning
|
||||||
------------ -----------------------------------------------------------------
|
------------ ---------------------------------------------------------------
|
||||||
1 - 9 Postcode data which can consist of up to 9 digits (for mode 2)
|
1 - 9 Postcode data which can consist of up to 9 digits (for mode 2)
|
||||||
or up to 6 alphanumeric characters (for mode 3). Remaining
|
or up to 6 alphanumeric characters (for mode 3). Remaining
|
||||||
unused characters for mode 3 can be filled with the SPACE
|
unused characters for mode 3 can be filled with the SPACE
|
||||||
character (ASCII 32) or omitted.
|
character (ASCII 32) or omitted. (adjust the following
|
||||||
(adjust the following character positions according to postcode
|
character positions according to postcode length)
|
||||||
length)
|
|
||||||
10 - 12 Three-digit country code according to ISO 3166-1.
|
10 - 12 Three-digit country code according to ISO 3166-1.
|
||||||
|
|
||||||
13 - 15 Three-digit service code. This depends on your parcel courier.
|
13 - 15 Three-digit service code. This depends on your parcel courier.
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
Table : MaxiCode Structured Carrier Message Format
|
Table : MaxiCode Structured Carrier Message Format
|
||||||
|
|
||||||
|
@ -4311,30 +4314,30 @@ symbol - fixed-ratio symbols which are roughly square (versions A through to H)
|
||||||
and variable-width versions (versions S and T). These can be selected by using
|
and variable-width versions (versions S and T). These can be selected by using
|
||||||
--vers (API option_2) as shown in the table below:
|
--vers (API option_2) as shown in the table below:
|
||||||
|
|
||||||
--------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
Input Version Size (W x H) Numeric Data Alphanumeric
|
Input Version Size (H x W) Numeric Data Alphanumeric
|
||||||
Capacity Data Capacity
|
Capacity Data Capacity
|
||||||
------- --------- ------------ --------------- ---------------
|
------- --------- ---------------------- --------------- ---------------
|
||||||
1 A 16 x 18 22 13
|
1 A 16 x 18 22 13
|
||||||
|
|
||||||
2 B 22 x 22 44 27
|
2 B 22 x 22 44 27
|
||||||
|
|
||||||
3 C 28 x 28 104 64
|
3 C 28 x 32 104 64
|
||||||
|
|
||||||
4 D 40 x 42 217 135
|
4 D 40 x 42 217 135
|
||||||
|
|
||||||
5 E 52 x 54 435 271
|
5 E 52 x 54 435 271
|
||||||
|
|
||||||
6 F 70 x 76 886 553
|
6 F 70 x 76 886 553
|
||||||
|
|
||||||
7 G 104 x 98 1755 1096
|
7 G 104 x 98 1755 1096
|
||||||
|
|
||||||
8 H 148 x 134 3550 2218
|
8 H 148 x 134 3550 2218
|
||||||
|
|
||||||
9 S width x 8 18 N/A
|
9 S 8 x automatic width 18 N/A
|
||||||
|
|
||||||
10 T width x 16 90 55
|
10 T 16 x automatic width 90 55
|
||||||
--------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
Table : Code One Sizes
|
Table : Code One Sizes
|
||||||
|
|
||||||
|
@ -4860,7 +4863,7 @@ configured barcode is displayed once the "Generate" button is pressed.
|
||||||
|
|
||||||
Annex D. Man Page ZINT(1)
|
Annex D. Man Page ZINT(1)
|
||||||
|
|
||||||
% ZINT(1) Version 2.13.0.9 % % December 2024
|
% ZINT(1) Version 2.13.0.9 % % January 2025
|
||||||
|
|
||||||
NAME
|
NAME
|
||||||
|
|
||||||
|
@ -5312,12 +5315,12 @@ OPTIONS
|
||||||
11 45x45 23 95x95 35 147x147
|
11 45x45 23 95x95 35 147x147
|
||||||
12 49x49 24 101x101 36 151x151
|
12 49x49 24 101x101 36 151x151
|
||||||
|
|
||||||
Code One 1 to 10 (9 and 10 variable width) (WxH)
|
Code One 1 to 10 (9 and 10 variable width) (HxW)
|
||||||
1 16x18 6 70x76
|
1 16x18 6 70x76
|
||||||
2 22x22 7 104x98
|
2 22x22 7 104x98
|
||||||
3 28x28 8 148x134
|
3 28x32 8 148x134
|
||||||
4 40x42 9 Wx8
|
4 40x42 9 8xW
|
||||||
5 52x54 10 Wx16
|
5 52x54 10 16xW
|
||||||
|
|
||||||
Data Matrix 1 to 48 (31 to 48 DMRE) (HxW)
|
Data Matrix 1 to 48 (31 to 48 DMRE) (HxW)
|
||||||
1 10x10 17 72x72 33 8x80
|
1 10x10 17 72x72 33 8x80
|
||||||
|
@ -5613,5 +5616,5 @@ recognised.
|
||||||
[14] BARCODE_CODE128AB previously used the name BARCODE_CODE128B, which is still
|
[14] BARCODE_CODE128AB previously used the name BARCODE_CODE128B, which is still
|
||||||
recognised.
|
recognised.
|
||||||
|
|
||||||
[15] The DX Number may be looked up in The (Modified) Big Film Database at
|
[15] The DX number may be looked up in The (Modified) Big Film Database at
|
||||||
https://thebigfilmdatabase.merinorus.com.
|
https://thebigfilmdatabase.merinorus.com.
|
||||||
|
|
12
docs/zint.1
12
docs/zint.1
|
@ -1,6 +1,6 @@
|
||||||
.\" Automatically generated by Pandoc 3.6
|
.\" Automatically generated by Pandoc 3.6.2
|
||||||
.\"
|
.\"
|
||||||
.TH "ZINT" "1" "December 2024" "Version 2.13.0.9"
|
.TH "ZINT" "1" "January 2025" "Version 2.13.0.9"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
\f[CR]zint\f[R] \- encode data as a barcode image
|
\f[CR]zint\f[R] \- encode data as a barcode image
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
|
@ -472,12 +472,12 @@ Aztec Code 1 to 36 (1 to 4 compact)
|
||||||
11 45x45 23 95x95 35 147x147
|
11 45x45 23 95x95 35 147x147
|
||||||
12 49x49 24 101x101 36 151x151
|
12 49x49 24 101x101 36 151x151
|
||||||
|
|
||||||
Code One 1 to 10 (9 and 10 variable width) (WxH)
|
Code One 1 to 10 (9 and 10 variable width) (HxW)
|
||||||
1 16x18 6 70x76
|
1 16x18 6 70x76
|
||||||
2 22x22 7 104x98
|
2 22x22 7 104x98
|
||||||
3 28x28 8 148x134
|
3 28x32 8 148x134
|
||||||
4 40x42 9 Wx8
|
4 40x42 9 8xW
|
||||||
5 52x54 10 Wx16
|
5 52x54 10 16xW
|
||||||
|
|
||||||
Data Matrix 1 to 48 (31 to 48 DMRE) (HxW)
|
Data Matrix 1 to 48 (31 to 48 DMRE) (HxW)
|
||||||
1 10x10 17 72x72 33 8x80
|
1 10x10 17 72x72 33 8x80
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
% ZINT(1) Version 2.13.0.9
|
% ZINT(1) Version 2.13.0.9
|
||||||
%
|
%
|
||||||
% December 2024
|
% January 2025
|
||||||
|
|
||||||
# NAME
|
# NAME
|
||||||
|
|
||||||
|
@ -408,12 +408,12 @@ Paintbrush (`PCX`), Portable Network Format (`PNG`), Scalable Vector Graphic (`S
|
||||||
11 45x45 23 95x95 35 147x147
|
11 45x45 23 95x95 35 147x147
|
||||||
12 49x49 24 101x101 36 151x151
|
12 49x49 24 101x101 36 151x151
|
||||||
|
|
||||||
Code One 1 to 10 (9 and 10 variable width) (WxH)
|
Code One 1 to 10 (9 and 10 variable width) (HxW)
|
||||||
1 16x18 6 70x76
|
1 16x18 6 70x76
|
||||||
2 22x22 7 104x98
|
2 22x22 7 104x98
|
||||||
3 28x28 8 148x134
|
3 28x32 8 148x134
|
||||||
4 40x42 9 Wx8
|
4 40x42 9 8xW
|
||||||
5 52x54 10 Wx16
|
5 52x54 10 16xW
|
||||||
|
|
||||||
Data Matrix 1 to 48 (31 to 48 DMRE) (HxW)
|
Data Matrix 1 to 48 (31 to 48 DMRE) (HxW)
|
||||||
1 10x10 17 72x72 33 8x80
|
1 10x10 17 72x72 33 8x80
|
||||||
|
|
|
@ -101,12 +101,12 @@ variable widths</string>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>8X height (Version S)</string>
|
<string>8 x automatic width (Version S)</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>16X height (Version T)</string>
|
<string>16 x automatic width (Version T)</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue