1
0
mirror of https://github.com/woo-j/zint.git synced 2024-12-23 01:33:55 +03:00

- PDF417/MICROPDF417: use latch not ps shift for padding when

spanning Text segments to avoid affecting 1st char of 2nd segment
- PDF417/MICROPDF417: add optimized encoding, FAST_MODE for
  previous scheme; formatting changes
- common.c/h: add `cnt_digits()`, comments in include and make more
  consistent, minor code fiddling
- DOTCODE: replace `dc_n_digits()` with new `cnt_digits()`
- test_qr: fix `test_qr_perf()`
- composite: minor code fiddling
- library: debug dump HIBC-processed input
- BWIPP: update to latest
This commit is contained in:
gitlost 2022-11-06 22:25:19 +00:00
parent fbfaabf004
commit e515f63fab
32 changed files with 3885 additions and 640 deletions

View File

@ -20,6 +20,9 @@ Changes
and returning error if so rather than continuing to process
- manual: MSE typo -> MSI; adjust SVG scaling for PDF manual; pandoc 2.19.2
- manual/man page/GUI: Code 16k -> Code 16K
- PDF417/MICROPDF417: add optimized encoding, FAST_MODE for previous; formatting
changes
- common.c/h: add `cnt_digits()`, comments in include, minor fiddling
Bugs
----
@ -45,6 +48,8 @@ Bugs
- MSVC project files: remove incorrect "CompileAsCpp" setting from libzint
project files (ticket #272)
- bwipp_dump.ps: fix 2/4-track processing; update to latest BWIPP
- PDF417/MICROPDF417: use latch not ps shift for padding when spanning
Text segments to avoid affecting 1st char of 2nd segment
Version 2.11.1 (2022-08-22)

View File

@ -568,7 +568,9 @@ typedef const struct s_channel_precalc {
long value; unsigned char B[8]; unsigned char S[8]; unsigned char bmax[7]; unsigned char smax[7];
} channel_precalc;
/*#define CHANNEL_GENERATE_PRECALCS*/
#if 0
#define CHANNEL_GENERATE_PRECALCS
#endif
#ifdef CHANNEL_GENERATE_PRECALCS
/* To generate precalc tables uncomment CHANNEL_GENERATE_PRECALCS define and run

View File

@ -51,9 +51,8 @@ INTERNAL int ctoi(const char source) {
INTERNAL char itoc(const int source) {
if ((source >= 0) && (source <= 9)) {
return ('0' + source);
} else {
return ('A' + (source - 10));
}
return ('A' - 10 + source);
}
/* Converts decimal string of length <= 9 to integer value. Returns -1 if not numeric */
@ -72,7 +71,7 @@ INTERNAL int to_int(const unsigned char source[], const int length) {
return val;
}
/* Converts lower case characters to upper case in a string source[] */
/* Converts lower case characters to upper case in string `source` */
INTERNAL void to_upper(unsigned char source[], const int length) {
int i;
@ -83,12 +82,12 @@ INTERNAL void to_upper(unsigned char source[], const int length) {
}
}
/* Returns the number of times a character occurs in a string */
INTERNAL int chr_cnt(const unsigned char string[], const int length, const unsigned char c) {
/* Returns the number of times a character occurs in `source` */
INTERNAL int chr_cnt(const unsigned char source[], const int length, const unsigned char c) {
int count = 0;
int i;
for (i = 0; i < length; i++) {
if (string[i] == c) {
if (source[i] == c) {
count++;
}
}
@ -168,7 +167,7 @@ INTERNAL int is_sane_lookup(const char test_string[], const int test_length, con
return 1;
}
/* Returns the position of data in set_string */
/* Returns the position of `data` in `set_string` */
INTERNAL int posn(const char set_string[], const char data) {
const char *s;
@ -180,7 +179,8 @@ INTERNAL int posn(const char set_string[], const char data) {
return -1;
}
/* Convert an integer value to a string representing its binary equivalent and place at a given position */
/* Converts `arg` to a string representing its binary equivalent of length `length` and places in `binary` at
`bin_posn`. Returns `bin_posn` + `length` */
INTERNAL int bin_append_posn(const int arg, const int length, char *binary, const int bin_posn) {
int i;
int start;
@ -198,28 +198,28 @@ INTERNAL int bin_append_posn(const int arg, const int length, char *binary, cons
}
#ifndef Z_COMMON_INLINE
/* Return true (1) if a module is dark/black, otherwise false (0) */
/* Returns true (1) if a module is dark/black, otherwise false (0) */
INTERNAL int module_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord) {
return (symbol->encoded_data[y_coord][x_coord >> 3] >> (x_coord & 0x07)) & 1;
}
/* Set a module to dark/black */
/* Sets a module to dark/black */
INTERNAL void set_module(struct zint_symbol *symbol, const int y_coord, const int x_coord) {
symbol->encoded_data[y_coord][x_coord >> 3] |= 1 << (x_coord & 0x07);
}
/* Return true (1-8) if a module is colour, otherwise false (0) */
/* Returns true (1-8) if a module is colour, otherwise false (0) */
INTERNAL int module_colour_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord) {
return symbol->encoded_data[y_coord][x_coord];
}
/* Set a module to a colour */
/* Sets a module to a colour */
INTERNAL void set_module_colour(struct zint_symbol *symbol, const int y_coord, const int x_coord, const int colour) {
symbol->encoded_data[y_coord][x_coord] = colour;
}
#endif
/* Set a dark/black module to white (i.e. unset) */
/* Sets a dark/black module to white (i.e. unsets) */
INTERNAL void unset_module(struct zint_symbol *symbol, const int y_coord, const int x_coord) {
symbol->encoded_data[y_coord][x_coord >> 3] &= ~(1 << (x_coord & 0x07));
}
@ -255,7 +255,7 @@ INTERNAL void expand(struct zint_symbol *symbol, const char data[], const int le
}
}
/* Indicates which symbologies can have row binding */
/* Whether `symbology` can have row binding */
INTERNAL int is_stackable(const int symbology) {
if (symbology < BARCODE_PHARMA_TWO && symbology != BARCODE_POSTNET) {
return 1;
@ -280,7 +280,7 @@ INTERNAL int is_stackable(const int symbology) {
return 0;
}
/* Indicates which symbols can have addon (EAN-2 and EAN-5) */
/* Whether `symbology` can have addon (EAN-2 and EAN-5) */
INTERNAL int is_extendable(const int symbology) {
switch (symbology) {
@ -301,12 +301,12 @@ INTERNAL int is_extendable(const int symbology) {
return 0;
}
/* Indicates which symbols can have composite 2D component data */
/* Whether `symbology` can have composite 2D component data */
INTERNAL int is_composite(const int symbology) {
return symbology >= BARCODE_EANX_CC && symbology <= BARCODE_DBAR_EXPSTK_CC;
}
/* Returns 1 if symbology is a matrix design renderable as dots */
/* Whether `symbology` is a matrix design renderable as dots */
INTERNAL int is_dotty(const int symbology) {
switch (symbology) {
@ -332,7 +332,7 @@ INTERNAL int is_dotty(const int symbology) {
return 0;
}
/* Returns 1 if symbology has fixed aspect ratio (matrix design) */
/* Whether `symbology` has a fixed aspect ratio (matrix design) */
INTERNAL int is_fixed_ratio(const int symbology) {
if (is_dotty(symbology)) {
@ -358,6 +358,16 @@ INTERNAL int is_twodigits(const unsigned char source[], const int length, const
return 0;
}
/* Returns how many consecutive digits lie immediately ahead up to `max`, or all if `max` is -1 */
INTERNAL int cnt_digits(const unsigned char source[], const int length, const int position, const int max) {
int i;
const int max_length = max == -1 || position + max > length ? length : position + max;
for (i = position; i < max_length && z_isdigit(source[i]); i++);
return i - position;
}
/* State machine to decode UTF-8 to Unicode codepoints (state 0 means done, state 12 means error) */
INTERNAL unsigned int decode_utf8(unsigned int *state, unsigned int *codep, const unsigned char byte) {
/*
@ -419,8 +429,8 @@ INTERNAL int is_valid_utf8(const unsigned char source[], const int length) {
return state == 0;
}
/* Convert UTF-8 to Unicode. If `disallow_4byte` unset, allow all values (UTF-32). If `disallow_4byte` set,
* only allow codepoints <= U+FFFF (ie four-byte sequences not allowed) (UTF-16, no surrogates) */
/* Converts UTF-8 to Unicode. If `disallow_4byte` unset, allows all values (UTF-32). If `disallow_4byte` set,
* only allows codepoints <= U+FFFF (ie four-byte sequences not allowed) (UTF-16, no surrogates) */
INTERNAL int utf8_to_unicode(struct zint_symbol *symbol, const unsigned char source[], unsigned int vals[],
int *length, const int disallow_4byte) {
int bpos;
@ -453,7 +463,7 @@ INTERNAL int utf8_to_unicode(struct zint_symbol *symbol, const unsigned char sou
return 0;
}
/* Set symbol height, returning a warning if not within minimum and/or maximum if given.
/* Sets symbol height, returning a warning if not within minimum and/or maximum if given.
`default_height` does not include height of fixed-height rows (i.e. separators/composite data) */
INTERNAL int set_height(struct zint_symbol *symbol, const float min_row_height, const float default_height,
const float max_height, const int no_errtxt) {
@ -535,7 +545,7 @@ INTERNAL int segs_length(const struct zint_seg segs[], const int seg_count) {
return total_len;
}
/* Shallow copy segments, adjusting default ECIs */
/* Shallow copies segments, adjusting default ECIs */
INTERNAL void segs_cpy(const struct zint_symbol *symbol, const struct zint_seg segs[], const int seg_count,
struct zint_seg local_segs[]) {
const int default_eci = symbol->symbology == BARCODE_GRIDMATRIX ? 29 : symbol->symbology == BARCODE_UPNQR ? 4 : 3;

View File

@ -90,7 +90,7 @@ typedef unsigned __int64 uint64_t;
/* The most commonly used set */
#define NEON_F IS_NUM_F /* NEON "0123456789" */
/* Simple versions of <cctype> functions with no dependence on locale */
/* Simple versions of <ctype.h> functions with no dependence on locale */
#define z_isdigit(c) ((c) <= '9' && (c) >= '0')
#define z_isupper(c) ((c) >= 'A' && (c) <= 'Z')
#define z_islower(c) ((c) >= 'a' && (c) <= 'z')
@ -146,75 +146,144 @@ typedef unsigned __int64 uint64_t;
#define Z_COMMON_INLINE 1
#ifdef Z_COMMON_INLINE
/* Return true (1) if a module is dark/black, otherwise false (0) */
/* Returns true (1) if a module is dark/black, otherwise false (0) */
# define module_is_set(s, y, x) (((s)->encoded_data[(y)][(x) >> 3] >> ((x) & 0x07)) & 1)
/* Set a module to dark/black */
/* Sets a module to dark/black */
# define set_module(s, y, x) do { (s)->encoded_data[(y)][(x) >> 3] |= 1 << ((x) & 0x07); } while (0)
/* Return true (1-8) if a module is colour, otherwise false (0) */
/* Returns true (1-8) if a module is colour, otherwise false (0) */
# define module_colour_is_set(s, y, x) ((s)->encoded_data[(y)][(x)])
/* Set a module to a colour */
/* Sets a module to a colour */
# define set_module_colour(s, y, x, c) do { (s)->encoded_data[(y)][(x)] = (c); } while (0)
#endif
INTERNAL int ctoi(const char source);
INTERNAL char itoc(const int source);
INTERNAL int to_int(const unsigned char source[], const int length);
INTERNAL void to_upper(unsigned char source[], const int length);
INTERNAL int chr_cnt(const unsigned char string[], const int length, const unsigned char c);
/* Converts a character 0-9, A-F to its equivalent integer value */
INTERNAL int ctoi(const char source);
INTERNAL int is_chr(const unsigned int flg, const unsigned int c);
INTERNAL int is_sane(const unsigned int flg, const unsigned char source[], const int length);
INTERNAL int is_sane_lookup(const char test_string[], const int test_length, const unsigned char source[],
/* Converts an integer value to its hexadecimal character */
INTERNAL char itoc(const int source);
/* Converts decimal string of length <= 9 to integer value. Returns -1 if not numeric */
INTERNAL int to_int(const unsigned char source[], const int length);
/* Converts lower case characters to upper case in string `source` */
INTERNAL void to_upper(unsigned char source[], const int length);
/* Returns the number of times a character occurs in `source` */
INTERNAL int chr_cnt(const unsigned char source[], const int length, const unsigned char c);
/* Whether a character matches `flg` */
INTERNAL int is_chr(const unsigned int flg, const unsigned int c);
/* Verifies that a string only uses valid characters */
INTERNAL int is_sane(const unsigned int flg, const unsigned char source[], const int length);
/* Verifies that a string only uses valid characters, and returns `test_string` position of each in `posns` array */
INTERNAL int is_sane_lookup(const char test_string[], const int test_length, const unsigned char source[],
const int length, int *posns);
INTERNAL int posn(const char set_string[], const char data);
INTERNAL int bin_append_posn(const int arg, const int length, char *binary, const int bin_posn);
/* Returns the position of `data` in `set_string` */
INTERNAL int posn(const char set_string[], const char data);
#ifndef Z_COMMON_INLINE
INTERNAL int module_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord);
INTERNAL void set_module(struct zint_symbol *symbol, const int y_coord, const int x_coord);
INTERNAL int module_colour_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord);
INTERNAL void set_module_colour(struct zint_symbol *symbol, const int y_coord, const int x_coord,
/* Converts `arg` to a string representing its binary equivalent of length `length` and places in `binary` at
`bin_posn`. Returns `bin_posn` + `length` */
INTERNAL int bin_append_posn(const int arg, const int length, char *binary, const int bin_posn);
#ifndef Z_COMMON_INLINE
/* Returns true (1) if a module is dark/black, otherwise false (0) */
INTERNAL int module_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord);
/* Sets a module to dark/black */
INTERNAL void set_module(struct zint_symbol *symbol, const int y_coord, const int x_coord);
/* Returns true (1-8) if a module is colour, otherwise false (0) */
INTERNAL int module_colour_is_set(const struct zint_symbol *symbol, const int y_coord, const int x_coord);
/* Sets a module to a colour */
INTERNAL void set_module_colour(struct zint_symbol *symbol, const int y_coord, const int x_coord,
const int colour);
#endif
INTERNAL void unset_module(struct zint_symbol *symbol, const int y_coord, const int x_coord);
#endif
/* Sets a dark/black module to white (i.e. unsets) */
INTERNAL void unset_module(struct zint_symbol *symbol, const int y_coord, const int x_coord);
INTERNAL void expand(struct zint_symbol *symbol, const char data[], const int length);
/* Expands from a width pattern to a bit pattern */
INTERNAL void expand(struct zint_symbol *symbol, const char data[], const int length);
INTERNAL int is_stackable(const int symbology);
INTERNAL int is_extendable(const int symbology);
INTERNAL int is_composite(const int symbology);
INTERNAL int is_dotty(const int symbology);
INTERNAL int is_fixed_ratio(const int symbology);
INTERNAL int is_twodigits(const unsigned char source[], const int length, const int position);
/* Whether `symbology` can have row binding */
INTERNAL int is_stackable(const int symbology);
INTERNAL unsigned int decode_utf8(unsigned int *state, unsigned int *codep, const unsigned char byte);
INTERNAL int is_valid_utf8(const unsigned char source[], const int length);
INTERNAL int utf8_to_unicode(struct zint_symbol *symbol, const unsigned char source[], unsigned int vals[],
/* Whether `symbology` can have addon (EAN-2 and EAN-5) */
INTERNAL int is_extendable(const int symbology);
/* Whether `symbology` can have composite 2D component data */
INTERNAL int is_composite(const int symbology);
/* Whether `symbology` is a matrix design renderable as dots */
INTERNAL int is_dotty(const int symbology);
/* Whether `symbology` has a fixed aspect ratio (matrix design) */
INTERNAL int is_fixed_ratio(const int symbology);
/* Whether next two characters are digits */
INTERNAL int is_twodigits(const unsigned char source[], const int length, const int position);
/* Returns how many consecutive digits lie immediately ahead up to `max`, or all if `max` is -1 */
INTERNAL int cnt_digits(const unsigned char source[], const int length, const int position, const int max);
/* State machine to decode UTF-8 to Unicode codepoints (state 0 means done, state 12 means error) */
INTERNAL unsigned int decode_utf8(unsigned int *state, unsigned int *codep, const unsigned char byte);
/* Is string valid UTF-8? */
INTERNAL int is_valid_utf8(const unsigned char source[], const int length);
/* Converts UTF-8 to Unicode. If `disallow_4byte` unset, allows all values (UTF-32). If `disallow_4byte` set,
* only allows codepoints <= U+FFFF (ie four-byte sequences not allowed) (UTF-16, no surrogates) */
INTERNAL int utf8_to_unicode(struct zint_symbol *symbol, const unsigned char source[], unsigned int vals[],
int *length, const int disallow_4byte);
INTERNAL int set_height(struct zint_symbol *symbol, const float min_row_height, const float default_height,
/* Sets symbol height, returning a warning if not within minimum and/or maximum if given.
`default_height` does not include height of fixed-height rows (i.e. separators/composite data) */
INTERNAL int set_height(struct zint_symbol *symbol, const float min_row_height, const float default_height,
const float max_height, const int set_errtxt);
INTERNAL float stripf(const float arg);
INTERNAL int segs_length(const struct zint_seg segs[], const int seg_count);
INTERNAL void segs_cpy(const struct zint_symbol *symbol, const struct zint_seg segs[], const int seg_count,
/* Removes excess precision from floats - see https://stackoverflow.com/q/503436 */
INTERNAL float stripf(const float arg);
/* Returns total length of segments */
INTERNAL int segs_length(const struct zint_seg segs[], const int seg_count);
/* Shallow copies segments, adjusting default ECIs */
INTERNAL void segs_cpy(const struct zint_symbol *symbol, const struct zint_seg segs[], const int seg_count,
struct zint_seg local_segs[]);
INTERNAL int colour_to_red(const int colour);
INTERNAL int colour_to_green(const int colour);
INTERNAL int colour_to_blue(const int colour);
#ifdef ZINT_TEST
INTERNAL void debug_test_codeword_dump(struct zint_symbol *symbol, const unsigned char *codewords,
const int length);
INTERNAL void debug_test_codeword_dump_int(struct zint_symbol *symbol, const int *codewords, const int length);
#endif
/* Returns red component if any of ultra colour indexing "0CBMRYGKW" */
INTERNAL int colour_to_red(const int colour);
/* Returns green component if any of ultra colour indexing "0CBMRYGKW" */
INTERNAL int colour_to_green(const int colour);
/* Returns blue component if any of ultra colour indexing "0CBMRYGKW" */
INTERNAL int colour_to_blue(const int colour);
#ifdef ZINT_TEST
/* Dumps hex-formatted codewords in symbol->errtxt (for use in testing) */
INTERNAL void debug_test_codeword_dump(struct zint_symbol *symbol, const unsigned char *codewords, const int length);
/* Dumps decimal-formatted codewords in symbol->errtxt (for use in testing) */
INTERNAL void debug_test_codeword_dump_int(struct zint_symbol *symbol, const int *codewords, const int length);
#endif
#ifdef __cplusplus
}

View File

@ -301,7 +301,7 @@ static void cc_b(struct zint_symbol *symbol, const char source[], const int cc_w
const int length = (int) strlen(source) / 8;
int i;
unsigned char *data_string = (unsigned char *) z_alloca(length + 3);
int chainemc[180], mclength;
int chainemc[180], mclength = 0;
int k, j, p, longueur, mccorrection[50] = {0}, offset;
int total;
char pattern[580];
@ -322,11 +322,8 @@ static void cc_b(struct zint_symbol *symbol, const char source[], const int cc_w
}
}
mclength = 0;
/* "the CC-B component shall have codeword 920 in the first symbol character position" (section 9a) */
chainemc[mclength] = 920;
mclength++;
chainemc[mclength++] = 920;
pdf_byteprocess(chainemc, &mclength, data_string, 0, length, 0, debug_print);
@ -410,8 +407,7 @@ static void cc_b(struct zint_symbol *symbol, const char source[], const int cc_w
/* Binary input padded to target length so no padding should be necessary */
while (i > 0) {
chainemc[mclength] = 900; /* Not reached */
mclength++;
chainemc[mclength++] = 900; /* Not reached */
i--;
}
@ -435,8 +431,7 @@ static void cc_b(struct zint_symbol *symbol, const char source[], const int cc_w
}
/* we add these codes to the string */
for (i = k - 1; i >= 0; i--) {
chainemc[mclength] = mccorrection[i];
mclength++;
chainemc[mclength++] = mccorrection[i];
}
/* Now get the RAP (Row Address Pattern) start values */
@ -522,7 +517,7 @@ static void cc_c(struct zint_symbol *symbol, const char source[], const int cc_w
const int length = (int) strlen(source) / 8;
int i, p;
unsigned char *data_string = (unsigned char *) z_alloca(length + 4);
int chainemc[1000], mclength, k;
int chainemc[1000], mclength = 0, k;
int offset, longueur, loop, total, j, mccorrection[520] = {0};
int c1, c2, c3, dummy[35];
char pattern[580];
@ -540,12 +535,8 @@ static void cc_c(struct zint_symbol *symbol, const char source[], const int cc_w
}
}
mclength = 0;
chainemc[mclength] = 0; /* space for length descriptor */
mclength++;
chainemc[mclength] = 920; /* CC-C identifier */
mclength++;
chainemc[mclength++] = 0; /* space for length descriptor */
chainemc[mclength++] = 920; /* CC-C identifier */
pdf_byteprocess(chainemc, &mclength, data_string, 0, length, 0, debug_print);
@ -603,8 +594,7 @@ static void cc_c(struct zint_symbol *symbol, const char source[], const int cc_w
}
/* we add these codes to the string */
for (i = k - 1; i >= 0; i--) {
chainemc[mclength] = mccorrection[i];
mclength++;
chainemc[mclength++] = mccorrection[i];
}
/* 818 - The CW string is finished */

View File

@ -758,7 +758,9 @@ static int dm_getEndMode(struct zint_symbol *symbol, const unsigned char *source
return mode;
}
/*#define DM_TRACE*/
#if 0
#define DM_TRACE
#endif
#include "dmatrix_trace.h"
/* Return number of C40/TEXT codewords needed to encode characters in full batches of 3 (or less if EOD).

View File

@ -52,6 +52,7 @@ static void DM_TRACE_VertexToString(const unsigned char *source, const int lengt
printf("char '%c' at %d mode %s", source[position], position, dm_smodes[edge->mode]);
}
}
static void DM_TRACE_EdgeToString(char *buf, const unsigned char *source, const int length, struct dm_edge *edges,
struct dm_edge *edge) {
int previousMode = DM_TRACE_getPreviousMode(edges, edge);

View File

@ -409,21 +409,12 @@ static int dc_datum_c(const unsigned char source[], const int length, const int
return is_twodigits(source, length, position);
}
/* Returns how many consecutive digits lie immediately ahead (Annex F.II.A) */
static int dc_n_digits(const unsigned char source[], const int length, const int position, const int max) {
int i;
for (i = position; (i < length) && z_isdigit(source[i]) && (i < position + max); i++);
return i - position;
}
/* Checks ahead for 10 or more digits starting "17xxxxxx10..." (Annex F.II.B) */
static int dc_seventeen_ten(const unsigned char source[], const int length, const int position) {
if (position + 9 < length && source[position] == '1' && source[position + 1] == '7'
&& source[position + 8] == '1' && source[position + 9] == '0'
&& dc_n_digits(source, length, position + 2, 6) >= 6) {
&& cnt_digits(source, length, position + 2, 6) >= 6) {
return 1;
}
@ -447,7 +438,7 @@ static int dc_ahead_c(const unsigned char source[], const int length, const int
/* Annex F.II.F */
static int dc_try_c(const unsigned char source[], const int length, const int position) {
if (position < length && z_isdigit(source[position])) { /* dc_n_digits(position) > 0 */
if (position < length && z_isdigit(source[position])) { /* cnt_digits(position) > 0 */
const int ahead_c_position = dc_ahead_c(source, length, position);
if (ahead_c_position > dc_ahead_c(source, length, position + 1)) {
return ahead_c_position;
@ -681,7 +672,7 @@ static int dc_encode_message(struct zint_symbol *symbol, const unsigned char sou
/* Step C3 */
if (dc_binary(source, length, position)) {
/* dc_n_digits(position + 1) > 0 */
/* cnt_digits(position + 1) > 0 */
if (position + 1 < length && z_isdigit(source[position + 1])) {
if ((source[position] - 128) < 32) {
codeword_array[ap++] = 110; /* Upper Shift A */

View File

@ -336,6 +336,8 @@ static int hibc(struct zint_symbol *symbol, struct zint_seg segs[], const int se
segs[0].source = (unsigned char *) to_process;
segs[0].length = length;
if (symbol->debug & ZINT_DEBUG_PRINT) printf("HIBC processed source: %s\n", to_process);
switch (symbol->symbology) {
case BARCODE_HIBC_128:
error_number = code128(symbol, segs[0].source, segs[0].length);

File diff suppressed because it is too large Load Diff

View File

@ -45,7 +45,7 @@ INTERNAL_DATA_EXTERN const unsigned short pdf_bitpattern[2787];
INTERNAL_DATA_EXTERN const unsigned short pdf_Microcoeffs[344];
/* rows, columns, error codewords, k-offset of valid MicroPDF417 sizes from ISO/IEC 24728:2006 */
INTERNAL_DATA_EXTERN const unsigned short pdf_MicroVariants[170];
INTERNAL_DATA_EXTERN const unsigned short pdf_MicroVariants[136];
/* following is Left RAP, Centre RAP, Right RAP and Start Cluster from ISO/IEC 24728:2006 tables 10, 11 and 12 */
INTERNAL_DATA_EXTERN const char pdf_RAPTable[136];
@ -56,8 +56,8 @@ INTERNAL_DATA_EXTERN const unsigned short pdf_rap_side[52];
/* Centre Row Address Pattern from Table 2 */
INTERNAL_DATA_EXTERN const unsigned short pdf_rap_centre[52];
INTERNAL void pdf_byteprocess(int *chainemc, int *mclength, const unsigned char chaine[], int start, const int length,
const int lastmode, const int debug);
INTERNAL void pdf_byteprocess(int *chainemc, int *p_mclength, const unsigned char chaine[], int start,
const int length, const int lastmode, const int debug);
/* vim: set ts=4 sw=4 et : */
#endif /* Z_PDF417_H */

View File

@ -474,7 +474,7 @@ INTERNAL_DATA const unsigned short pdf_Microcoeffs[344] = {
};
/* rows, columns, error codewords, k-offset of valid MicroPDF417 sizes from ISO/IEC 24728:2006 */
INTERNAL_DATA const unsigned short pdf_MicroVariants[170] = {
INTERNAL_DATA const unsigned short pdf_MicroVariants[136] = { /*34*4*/
1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
11, 14, 17, 20, 24, 28, 8, 11, 14, 17, 20, 23, 26, 6, 8, 10, 12, 15, 20, 26, 32, 38, 44, 4, 6, 8, 10, 12, 15, 20, 26, 32, 38, 44,
7, 7, 7, 8, 8, 8, 8, 9, 9, 10, 11, 13, 15, 12, 14, 16, 18, 21, 26, 32, 38, 44, 50, 8, 12, 14, 16, 18, 21, 26, 32, 38, 44, 50,
@ -483,7 +483,7 @@ INTERNAL_DATA const unsigned short pdf_MicroVariants[170] = {
/* rows, columns, error codewords, k-offset */
/* following is Left RAP, Centre RAP, Right RAP and Start Cluster from ISO/IEC 24728:2006 tables 10, 11 and 12 */
INTERNAL_DATA const char pdf_RAPTable[136] = {
INTERNAL_DATA const char pdf_RAPTable[136] = { /*34*4*/
1, 8, 36, 19, 9, 25, 1, 1, 8, 36, 19, 9, 27, 1, 7, 15, 25, 37, 1, 1, 21, 15, 1, 47, 1, 7, 15, 25, 37, 1, 1, 21, 15, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7, 15, 25, 37, 17, 9, 29, 31, 25, 19, 1, 7, 15, 25, 37, 17, 9, 29, 31, 25,
9, 8, 36, 19, 17, 33, 1, 9, 8, 36, 19, 17, 35, 1, 7, 15, 25, 37, 33, 17, 37, 47, 49, 43, 1, 7, 15, 25, 37, 33, 17, 37, 47, 49,

136
backend/pdf417_trace.h Normal file
View File

@ -0,0 +1,136 @@
/* pdf417_trace.h - Trace routines for optimal PDF417 optimization algorithm */
/*
libzint - the open source barcode library
Copyright (C) 2022 Robin Stuart <rstuart114@gmail.com>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the project nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
*/
/* SPDX-License-Identifier: BSD-3-Clause */
#ifndef Z_PDF417_TRACE_H
#define Z_PDF417_TRACE_H
#ifndef PDF_TRACE
#define PDF_TRACE_Edges(px, s, l, p, v)
#define PDF_TRACE_AddEdge(s, l, es, p, v, t, e) do { (void)(s); (void)(l); } while (0)
#define PDF_TRACE_NotAddEdge(s, l, es, p, v, t, e) do { (void)(s); (void)(l); } while (0)
#else
static int PDF_TRACE_getPreviousMode(struct pdf_edge *edges, struct pdf_edge *edge) {
struct pdf_edge *previous = PDF_PREVIOUS(edges, edge);
return previous == NULL ? PDF_ALP : previous->mode;
}
static void PDF_TRACE_EdgeToString(char *buf, const unsigned char *source, const int length, struct pdf_edge *edges,
struct pdf_edge *edge) {
int previousMode = PDF_TRACE_getPreviousMode(edges, edge);
(void)length;
if (buf) {
sprintf(buf, "%d_%c %c(%d,%d) %d(%d,%d,%d) -> %d_%c",
edge->from, pdf_smodes[previousMode], pdf_smodes[edge->mode], source[edge->from], edge->len, edge->size
+ edge->unit_size, edge->units, edge->unit_size, edge->size, edge->from + 1, pdf_smodes[edge->mode]);
} else {
printf("%d_%c %c(%d,%d) %d(%d,%d,%d) -> %d_%c",
edge->from, pdf_smodes[previousMode], pdf_smodes[edge->mode], source[edge->from], edge->len, edge->size
+ edge->unit_size, edge->units, edge->unit_size, edge->size, edge->from + 1, pdf_smodes[edge->mode]);
}
}
static void PDF_TRACE_Path(const unsigned char *source, const int length, struct pdf_edge *edges,
struct pdf_edge *edge, char *result, const int result_size) {
PDF_TRACE_EdgeToString(result, source, length, edges, edge);
struct pdf_edge *current = PDF_PREVIOUS(edges, edge);
while (current) {
char s[256];
char *pos;
int len;
PDF_TRACE_EdgeToString(s, source, length, edges, current);
pos = strrchr(s, ' ');
assert(pos);
len = strlen(result);
if ((pos - s) + 1 + len + 1 >= result_size) {
result[result_size - 4] = '\0';
strcat(result, "...");
break;
}
memmove(result + (pos - s) + 1, result, len + 1);
memcpy(result, s, (pos - s) + 1);
current = PDF_PREVIOUS(edges, current);
}
puts(result);
}
static void PDF_TRACE_Edges(const char *prefix, const unsigned char *source, const int length,
struct pdf_edge *edges, const int vertexIndex) {
int i, j, e_i;
char result[1024 * 2];
if (vertexIndex) {
printf(prefix, vertexIndex);
} else {
fputs(prefix, stdout);
}
for (i = vertexIndex; i <= length; i++) {
e_i = i * PDF_NUM_MODES;
for (j = 0; j < PDF_NUM_MODES; j++) {
if (edges[e_i + j].mode) {
fputs(" **** ", stdout);
PDF_TRACE_Path(source, length, edges, edges + e_i + j, result, (int) ARRAY_SIZE(result));
}
}
}
}
static void PDF_TRACE_AddEdge(const unsigned char *source, const int length, struct pdf_edge *edges,
struct pdf_edge *previous, const int vertexIndex, const int t_table, struct pdf_edge *edge) {
const int new_size = edge->size + edge->unit_size;
const int v_ij = vertexIndex * PDF_NUM_MODES + edge->mode - 1;
const int v_size = edges[v_ij].size + edges[v_ij].unit_size;
(void)source; (void)length;
printf("add mode %c, t_table 0x%X, previous %d, from %d, len %d, v_ij %d, %d(%d,%d,%d) > %d(%d,%d,%d)\n",
pdf_smodes[edge->mode], t_table, previous ? (int) (previous - edges) : 0, edge->from, edge->len, v_ij,
v_size, edges[v_ij].units, edges[v_ij].unit_size, edges[v_ij].size,
new_size, edge->units, edge->unit_size, edge->size);
}
static void PDF_TRACE_NotAddEdge(const unsigned char *source, const int length, struct pdf_edge *edges,
struct pdf_edge *previous, const int vertexIndex, const int t_table, struct pdf_edge *edge) {
const int new_size = edge->size + edge->unit_size;
const int v_ij = vertexIndex * PDF_NUM_MODES + edge->mode - 1;
const int v_size = edges[v_ij].size + edges[v_ij].unit_size;
(void)source; (void)length;
printf("NOT mode %c, t_table %d, previous %d, from %d, len %d, v_ij %d, %d(%d,%d,%d) <= %d(%d,%d,%d)\n",
pdf_smodes[edge->mode], t_table, previous ? (int) (previous - edges) : 0, edge->from, edge->len, v_ij,
v_size, edges[v_ij].units, edges[v_ij].unit_size, edges[v_ij].size,
new_size, edge->units, edge->unit_size, edge->size);
}
#endif /* PDF_TRACE */
/* vim: set ts=4 sw=4 et : */
#endif /* Z_PDF417_TRACE_H */

File diff suppressed because it is too large Load Diff

View File

@ -4417,7 +4417,7 @@ static void test_qr_perf(const testCtx *const p_ctx) {
struct item data[] = {
/* 0*/ { BARCODE_QRCODE, UNICODE_MODE, -1, -1,
"ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 12345678901234567890123456 点点点点点点点点点点点点点点点点点点点点点点点点点点",
0, 37, 37, "107 chars, Mixed modes" },
ZINT_WARN_NONCOMPLIANT, 37, 37, "107 chars, Mixed modes" },
/* 1*/ { BARCODE_QRCODE, UNICODE_MODE, -1, -1,
"ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 12345678901234567890123456 点点点点点点点点点点点点点点点点点点点点点点点点点点"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 12345678901234567890123456 点点点点点点点点点点点点点点点点点点点点点点点点点点"
@ -4428,7 +4428,7 @@ static void test_qr_perf(const testCtx *const p_ctx) {
"ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 12345678901234567890123456 点点点点点点点点点点点点点点点点点点点点点点点点点点"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 12345678901234567890123456 点点点点点点点点点点点点点点点点点点点点点点点点点点"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 12345678901234567890123456 点点点点点点点点点点点点点点点点点点点点点点点点点点",
0, 105, 105, "963 chars, Mixed modes" },
ZINT_WARN_NONCOMPLIANT, 105, 105, "963 chars, Mixed modes" },
};
int data_size = ARRAY_SIZE(data);
int i, length, ret;

View File

@ -3342,7 +3342,7 @@ static const char *testUtilZXingCPPName(int index, const struct zint_symbol *sym
{ "DataBarExpanded", BARCODE_DBAR_EXPSTK, 81, },
{ "", BARCODE_PLANET, 82, },
{ "", -1, 83, },
{ "", BARCODE_MICROPDF417, 84, },
{ "MicroPDF417", BARCODE_MICROPDF417, 84, },
{ "", BARCODE_USPS_IMAIL, 85, },
{ "", BARCODE_PLESSEY, 86, },
{ "", BARCODE_TELEPEN_NUM, 87, },
@ -3468,9 +3468,9 @@ int testUtilCanZXingCPP(int index, const struct zint_symbol *symbol, const char
int testUtilZXingCPP(int index, struct zint_symbol *symbol, const char *source, const int length, char *bits,
char *buffer, const int buffer_size, int *p_cmp_len) {
static const char cmd_fmt[] = "zxingcppdecoder -width %d -textonly -format %s -bits '%s'";
static const char hint_cmd_fmt[] = "zxingcppdecoder -width %d -textonly -format %s -hint '%s' -bits '%s'";
static const char cs_cmd_fmt[] = "zxingcppdecoder -width %d -textonly -format %s -bits '%s' -charset %s";
static const char cmd_fmt[] = "zxingcppdecoder -textonly -format %s -width %d -bits '%s'";
static const char hint_cmd_fmt[] = "zxingcppdecoder -textonly -format %s -hint '%s' -width %d -bits '%s'";
static const char cs_cmd_fmt[] = "zxingcppdecoder -textonly -format %s -charset %s -width %d -bits '%s'";
const int bits_len = (int) strlen(bits);
const int width = symbol->width;
@ -3519,11 +3519,11 @@ int testUtilZXingCPP(int index, struct zint_symbol *symbol, const char *source,
} else {
charset = "ISO8859_1";
}
sprintf(cmd, cs_cmd_fmt, width, zxingcpp_barcode, bits, charset);
sprintf(cmd, cs_cmd_fmt, zxingcpp_barcode, charset, width, bits);
} else if (hint) {
sprintf(cmd, hint_cmd_fmt, width, zxingcpp_barcode, hint, bits);
sprintf(cmd, hint_cmd_fmt, zxingcpp_barcode, hint, width, bits);
} else {
sprintf(cmd, cmd_fmt, width, zxingcpp_barcode, bits);
sprintf(cmd, cmd_fmt, zxingcpp_barcode, width, bits);
}
if (symbol->debug & ZINT_DEBUG_TEST_PRINT) {

View File

@ -293,7 +293,7 @@ extern "C" {
#define GS1NOCHECK_MODE 0x0020 /* Do not check validity of GS1 data (except that printable ASCII only) */
#define HEIGHTPERROW_MODE 0x0040 /* Interpret `height` as per-row rather than as overall height */
#define FAST_MODE 0x0080 /* Use faster if less optimal encodation for symbologies that support it */
/* Note: only DATAMATRIX currently */
/* Note: only DATAMATRIX, MICROPDF417 & PDF417 currently */
/* Data Matrix specific options (`symbol->option_3`) */
#define DM_SQUARE 100 /* Only consider square versions on automatic symbol size selection */

View File

@ -56,6 +56,7 @@ HEADERS += ../backend/aztec.h \
../backend/pcx.h \
../backend/pdf417.h \
../backend/pdf417_tabs.h \
../backend/pdf417_trace.h \
../backend/qr.h \
../backend/reedsol.h \
../backend/reedsol_logs.h \

View File

@ -43,6 +43,7 @@ HEADERS += ../backend/aztec.h \
../backend/pcx.h \
../backend/pdf417.h \
../backend/pdf417_tabs.h \
../backend/pdf417_trace.h \
../backend/qr.h \
../backend/reedsol.h \
../backend/rss.h \

View File

@ -1,6 +1,6 @@
% Zint Barcode Generator and Zint Barcode Studio User Manual
% Version 2.11.1.9
% October 2022
% November 2022
# 1. Introduction
@ -2031,7 +2031,8 @@ Value Effect
overall height.
`FAST_MODE` Use faster if less optimal encodation for symbologies that
support it (currently `DATAMATRIX` only).
support it (currently `DATAMATRIX`, `MICROPDF417` and
`PDF417` only).
--------------------------------------------------------------------------------
Table: API `input_mode` Values {#tbl:api_input_mode tag="$ $"}
@ -2917,6 +2918,9 @@ 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
to encode Health Industry Barcode (HIBC) data.
For a faster but less optimal encoding, the `--fast` option (API `input_mode |=
FAST_MODE`) may be used.
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`
option (see [4.16 Structured Append]) (API `structapp`). The ID consists of up
@ -2947,7 +2951,7 @@ can be determined using the `--cols` switch (API `option_2`) as with PDF417.
This symbology uses Latin-1 character encoding by default but also supports the
ECI encoding mechanism. A separate symbology ID (`BARCODE_HIBC_MICPDF`) can be
used to encode Health Industry Barcode (HIBC) data. MicroPDF417 supports
Structured Append the same as PDF417, for which see details.
`FAST_MODE` and Structured Append the same as PDF417, for which see details.
### 6.2.7 GS1 DataBar Stacked (ISO 24724)

View File

@ -1,6 +1,6 @@
Zint Barcode Generator and Zint Barcode Studio User Manual
Version 2.11.1.9
October 2022
November 2022
*******************************************************************************
* For reference the following is a text-only version of the Zint manual, *
@ -2051,7 +2051,8 @@ property. Valid values are shown in the table below.
overall height.
FAST_MODE Use faster if less optimal encodation for symbologies that
support it (currently DATAMATRIX only).
support it (currently DATAMATRIX, MICROPDF417 and PDF417
only).
-------------------------------------------------------------------------------
: Table  : API input_mode Values
@ -2870,6 +2871,9 @@ 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
to encode Health Industry Barcode (HIBC) data.
For a faster but less optimal encoding, the --fast option (API
input_mode |= FAST_MODE) may be used.
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 option
(see 4.16 Structured Append) (API structapp). The ID consists of up to 10
@ -2900,7 +2904,7 @@ can be determined using the --cols switch (API option_2) as with PDF417.
This symbology uses Latin-1 character encoding by default but also supports the
ECI encoding mechanism. A separate symbology ID (BARCODE_HIBC_MICPDF) can be
used to encode Health Industry Barcode (HIBC) data. MicroPDF417 supports
Structured Append the same as PDF417, for which see details.
FAST_MODE and Structured Append the same as PDF417, for which see details.
6.2.7 GS1 DataBar Stacked (ISO 24724)
@ -4121,7 +4125,7 @@ defined.
Annex B. Man Page ZINT(1)
% ZINT(1) Version 2.11.1.9 % % October 2022
% ZINT(1) Version 2.11.1.9 % % November 2022
NAME
@ -4284,7 +4288,8 @@ OPTIONS
--fast
Use faster if less optimal encodation (currently affects Data Matrix only).
Use faster if less optimal encodation (currently affects Data Matrix,
MicroPDF417 & PDF417 only).
--fg=COLOUR

View File

@ -14,7 +14,7 @@
. ftr VB CB
. ftr VBI CBI
.\}
.TH "ZINT" "1" "October 2022" "Version 2.11.1.9" ""
.TH "ZINT" "1" "November 2022" "Version 2.11.1.9" ""
.hy
.SH NAME
.PP
@ -193,8 +193,8 @@ The escape sequences are:
.RE
.TP
\f[V]--fast\f[R]
Use faster if less optimal encodation (currently affects Data Matrix
only).
Use faster if less optimal encodation (currently affects Data Matrix,
MicroPDF417 & PDF417 only).
.TP
\f[V]--fg=COLOUR\f[R]
Specify a foreground (ink) colour where \f[I]COLOUR\f[R] is in hex

View File

@ -1,6 +1,6 @@
% ZINT(1) Version 2.11.1.9
%
% October 2022
% November 2022
# NAME
@ -144,7 +144,7 @@ Paintbrush (`PCX`), Portable Network Format (`PNG`), Scalable Vector Graphic (`S
`--fast`
: Use faster if less optimal encodation (currently affects Data Matrix only).
: Use faster if less optimal encodation (currently affects Data Matrix, MicroPDF417 & PDF417 only).
`--fg=COLOUR`

View File

@ -231,6 +231,20 @@ the data with a slash &quot;/&quot;</string>
</layout>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chkMPDFFast">
<property name="text">
<string>&amp;Fast encoding</string>
</property>
<property name="toolTip">
<string>Use a faster but less optimal algorithm
for encoding the data</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBoxMPDFStructApp">
<property name="title">

View File

@ -922,6 +922,20 @@ right row indicators and shortens the stop pattern</string>
</layout>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chkPDFFast">
<property name="text">
<string>&amp;Fast encoding</string>
</property>
<property name="toolTip">
<string>Use a faster but less optimal algorithm
for encoding the data</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBoxPDFStructApp">
<property name="title">

View File

@ -1486,6 +1486,7 @@ void MainWindow::change_options()
connect(get_widget(QSL("radPDFTruncated")), SIGNAL(toggled( bool )), SLOT(update_preview()));
connect(get_widget(QSL("radPDFStand")), SIGNAL(toggled( bool )), SLOT(update_preview()));
connect(get_widget(QSL("radPDFHIBC")), SIGNAL(toggled( bool )), SLOT(update_preview()));
connect(get_widget(QSL("chkPDFFast")), SIGNAL(toggled( bool )), SLOT(update_preview()));
connect(get_widget(QSL("spnPDFStructAppCount")), SIGNAL(valueChanged( int )), SLOT(update_preview()));
connect(get_widget(QSL("spnPDFStructAppCount")), SIGNAL(valueChanged( int )), SLOT(structapp_ui_set()));
connect(get_widget(QSL("spnPDFStructAppIndex")), SIGNAL(valueChanged( int )), SLOT(update_preview()));
@ -1510,6 +1511,7 @@ void MainWindow::change_options()
connect(m_btnHeightPerRowDisable, SIGNAL(clicked( bool )), SLOT(height_per_row_disable()));
connect(m_btnHeightPerRowDefault, SIGNAL(clicked( bool )), SLOT(height_per_row_default()));
connect(get_widget(QSL("radMPDFStand")), SIGNAL(toggled( bool )), SLOT(update_preview()));
connect(get_widget(QSL("chkMPDFFast")), SIGNAL(toggled( bool )), SLOT(update_preview()));
connect(get_widget(QSL("spnMPDFStructAppCount")), SIGNAL(valueChanged( int )), SLOT(update_preview()));
connect(get_widget(QSL("spnMPDFStructAppCount")), SIGNAL(valueChanged( int )), SLOT(structapp_ui_set()));
connect(get_widget(QSL("spnMPDFStructAppIndex")), SIGNAL(valueChanged( int )), SLOT(update_preview()));
@ -2437,6 +2439,10 @@ void MainWindow::update_preview()
}
m_bc.bc.setOption1(get_cmb_index(QSL("cmbPDFECC")) - 1);
if (get_chk_val(QSL("chkPDFFast"))) {
m_bc.bc.setInputMode(FAST_MODE | m_bc.bc.inputMode());
}
if ((item_val = get_spn_val(QSL("spnPDFStructAppCount"))) > 1) {
m_bc.bc.setStructApp(item_val, get_spn_val(QSL("spnPDFStructAppIndex")),
get_txt_val(QSL("txtPDFStructAppID")));
@ -2451,6 +2457,10 @@ void MainWindow::update_preview()
m_bc.bc.setOption2(get_cmb_index(QSL("cmbMPDFCols")));
if (get_chk_val(QSL("chkMPDFFast"))) {
m_bc.bc.setInputMode(FAST_MODE | m_bc.bc.inputMode());
}
if ((item_val = get_spn_val(QSL("spnMPDFStructAppCount"))) > 1) {
m_bc.bc.setStructApp(item_val, get_spn_val(QSL("spnMPDFStructAppIndex")),
get_txt_val(QSL("txtMPDFStructAppID")));
@ -3677,6 +3687,7 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology)
settings.setValue(QSL("studio/bc/pdf417/ecc"), get_cmb_index(QSL("cmbPDFECC")));
settings.setValue(QSL("studio/bc/pdf417/encoding_mode"), get_rad_grp_index(
QStringList() << QSL("radPDFStand") << QSL("radPDFTruncated") << QSL("radPDFHIBC")));
settings.setValue(QSL("studio/bc/pdf417/chk_fast"), get_chk_val(QSL("chkPDFFast")));
settings.setValue(QSL("studio/bc/pdf417/structapp_count"), get_spn_val(QSL("spnPDFStructAppCount")));
settings.setValue(QSL("studio/bc/pdf417/structapp_index"), get_spn_val(QSL("spnPDFStructAppIndex")));
settings.setValue(QSL("studio/bc/pdf417/structapp_id"), get_txt_val(QSL("txtPDFStructAppID")));
@ -3688,6 +3699,7 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology)
settings.setValue(QSL("studio/bc/micropdf417/height_per_row"), get_dspn_val(QSL("spnMPDFHeightPerRow")));
settings.setValue(QSL("studio/bc/micropdf417/encoding_mode"), get_rad_grp_index(
QStringList() << QSL("radMPDFStand") << QSL("radMPDFHIBC")));
settings.setValue(QSL("studio/bc/micropdf417/chk_fast"), get_chk_val(QSL("chkMPDFFast")));
settings.setValue(QSL("studio/bc/micropdf417/structapp_count"),
get_spn_val(QSL("spnMPDFStructAppCount")));
settings.setValue(QSL("studio/bc/micropdf417/structapp_index"),
@ -4059,6 +4071,7 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology)
set_cmb_from_setting(settings, QSL("studio/bc/pdf417/ecc"), QSL("cmbPDFECC"));
set_rad_from_setting(settings, QSL("studio/bc/pdf417/encoding_mode"),
QStringList() << QSL("radPDFStand") << QSL("radPDFTruncated") << QSL("radPDFHIBC"));
set_chk_from_setting(settings, QSL("studio/bc/pdf417/chk_fast"), QSL("chkPDFFast"));
set_spn_from_setting(settings, QSL("studio/bc/pdf417/structapp_count"), QSL("spnPDFStructAppCount"), 1);
set_spn_from_setting(settings, QSL("studio/bc/pdf417/structapp_index"), QSL("spnPDFStructAppIndex"), 0);
set_txt_from_setting(settings, QSL("studio/bc/pdf417/structapp_id"), QSL("txtPDFStructAppID"), QSL(""));
@ -4071,6 +4084,7 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology)
0.0f);
set_rad_from_setting(settings, QSL("studio/bc/micropdf417/encoding_mode"),
QStringList() << QSL("radMPDFStand") << QSL("radMPDFHIBC"));
set_chk_from_setting(settings, QSL("studio/bc/micropdf417/chk_fast"), QSL("chkMPDFFast"));
set_spn_from_setting(settings, QSL("studio/bc/micropdf417/structapp_count"),
QSL("spnMPDFStructAppCount"), 1);
set_spn_from_setting(settings, QSL("studio/bc/micropdf417/structapp_index"),

View File

@ -201,6 +201,7 @@
<ClInclude Include="..\backend\pcx.h" />
<ClInclude Include="..\backend\pdf417.h" />
<ClInclude Include="..\backend\pdf417_tabs.h" />
<ClInclude Include="..\backend\pdf417_trace.h" />
<ClInclude Include="..\backend\qr.h" />
<ClInclude Include="..\backend\reedsol.h" />
<ClInclude Include="..\backend\reedsol_logs.h" />

View File

@ -589,6 +589,10 @@
RelativePath="..\..\backend\pdf417_tabs.h"
>
</File>
<File
RelativePath="..\..\backend\pdf417_trace.h"
>
</File>
<File
RelativePath="..\..\backend\qr.h"
>

View File

@ -378,6 +378,7 @@
<ClInclude Include="..\..\backend\pcx.h" />
<ClInclude Include="..\..\backend\pdf417.h" />
<ClInclude Include="..\..\backend\pdf417_tabs.h" />
<ClInclude Include="..\..\backend\pdf417_trace.h" />
<ClInclude Include="..\..\backend\qr.h" />
<ClInclude Include="..\..\backend\reedsol.h" />
<ClInclude Include="..\..\backend\reedsol_logs.h" />

View File

@ -149,6 +149,7 @@
<ClInclude Include="..\..\backend\pcx.h" />
<ClInclude Include="..\..\backend\pdf417.h" />
<ClInclude Include="..\..\backend\pdf417_tabs.h" />
<ClInclude Include="..\..\backend\pdf417_trace.h" />
<ClInclude Include="..\..\backend\qr.h" />
<ClInclude Include="..\..\backend\reedsol.h" />
<ClInclude Include="..\..\backend\reedsol_logs.h" />

View File

@ -201,6 +201,7 @@
<ClInclude Include="..\..\backend\pcx.h" />
<ClInclude Include="..\..\backend\pdf417.h" />
<ClInclude Include="..\..\backend\pdf417_tabs.h" />
<ClInclude Include="..\..\backend\pdf417_trace.h" />
<ClInclude Include="..\..\backend\qr.h" />
<ClInclude Include="..\..\backend\reedsol.h" />
<ClInclude Include="..\..\backend\reedsol_logs.h" />