- vector: ensure separators don't overlap with other rectangles so that

they render correctly when have RGBA alpha channel
- GUI: update_preview() after Data Dialog return to ensure preview in sync
- GUI: add automatic info feedback to "Automatic" combo item of size/row/height
  comboboxes
- backend_qt: always call getMaxRectsRightBottom() for render fudge; use
  ZBarcode_Clear() instead of ZBarcode_Delete() after 1st call
- update BWIPP to latest & add some MICROQR tests to exercise optimize change
This commit is contained in:
gitlost 2022-08-07 22:43:49 +01:00
parent c0a5c7b125
commit c0ec67f99e
18 changed files with 2115 additions and 809 deletions

View File

@ -1,6 +1,10 @@
Version 2.11.0.9 (dev) not released yet Version 2.11.0.9 (dev) not released yet
======================================= =======================================
**Incompatible changes**
------------------------
- None yet
Changes Changes
------- -------
- GUI: sequence export dialog: add Postfix field for filename (#252) - GUI: sequence export dialog: add Postfix field for filename (#252)
@ -22,6 +26,8 @@ Changes
- Add new symbology BC412 (SEMI T1-95) - Add new symbology BC412 (SEMI T1-95)
- backend: use alloca() (z_alloca()) for both Unix and Windows - backend: use alloca() (z_alloca()) for both Unix and Windows
- GS1: new AI 4309 with latlong checker, new currency code 925 - GS1: new AI 4309 with latlong checker, new currency code 925
- GUI: add automatic info feedback to "Automatic" combo item of size/row/height
comboboxes
Bugs Bugs
---- ----
@ -34,6 +40,9 @@ Bugs
- GUI: sequence window: fix initial clear button status - GUI: sequence window: fix initial clear button status
- GUI: NO_PNG: allow for Qt not parsing #if's in slots - GUI: NO_PNG: allow for Qt not parsing #if's in slots
- frontend: batch mode: fix default "~~~~~" output (github issue #65) - frontend: batch mode: fix default "~~~~~" output (github issue #65)
- vector: ensure separators don't overlap with other rectangles so that
they render correctly when have RGBA alpha channel
- GUI: update_preview() after Data Dialog return to ensure preview in sync
Version 2.11.0 (2022-05-24) Version 2.11.0 (2022-05-24)

View File

@ -666,6 +666,7 @@ static void draw_bind_box(const struct zint_symbol *symbol, unsigned char *pixel
const int xoffset_si, const int yoffset_si, const int symbol_height_si, const int dot_overspill_si, const int xoffset_si, const int yoffset_si, const int symbol_height_si, const int dot_overspill_si,
const int image_width, const int image_height, const int si) { const int image_width, const int image_height, const int si) {
if (symbol->border_width > 0 && (symbol->output_options & (BARCODE_BOX | BARCODE_BIND))) { if (symbol->border_width > 0 && (symbol->output_options & (BARCODE_BOX | BARCODE_BIND))) {
const int is_codablockf = symbol->symbology == BARCODE_CODABLOCKF || symbol->symbology == BARCODE_HIBC_BLOCKF;
const int horz_outside = is_fixed_ratio(symbol->symbology); const int horz_outside = is_fixed_ratio(symbol->symbology);
const int bwidth_si = symbol->border_width * si; const int bwidth_si = symbol->border_width * si;
int ybind_top = yoffset_si - bwidth_si; int ybind_top = yoffset_si - bwidth_si;
@ -675,8 +676,7 @@ static void draw_bind_box(const struct zint_symbol *symbol, unsigned char *pixel
ybind_bot = image_height - bwidth_si; ybind_bot = image_height - bwidth_si;
} }
/* Horizontal boundary bars */ /* Horizontal boundary bars */
if ((symbol->output_options & BARCODE_BOX) if ((symbol->output_options & BARCODE_BOX) || !is_codablockf) {
|| (symbol->symbology != BARCODE_CODABLOCKF && symbol->symbology != BARCODE_HIBC_BLOCKF)) {
/* Box or not CodaBlockF */ /* Box or not CodaBlockF */
draw_bar(pixelbuf, 0, image_width, ybind_top, bwidth_si, image_width, image_height, DEFAULT_INK); draw_bar(pixelbuf, 0, image_width, ybind_top, bwidth_si, image_width, image_height, DEFAULT_INK);
draw_bar(pixelbuf, 0, image_width, ybind_bot, bwidth_si, image_width, image_height, DEFAULT_INK); draw_bar(pixelbuf, 0, image_width, ybind_bot, bwidth_si, image_width, image_height, DEFAULT_INK);
@ -928,6 +928,7 @@ static int plot_raster_default(struct zint_symbol *symbol, const int rotate_angl
int text_height; /* Font pixel size (so whole integers) */ int text_height; /* Font pixel size (so whole integers) */
float text_gap; /* Gap between barcode and text */ float text_gap; /* Gap between barcode and text */
float guard_descent; float guard_descent;
const int is_codablockf = symbol->symbology == BARCODE_CODABLOCKF || symbol->symbology == BARCODE_HIBC_BLOCKF;
int textflags = 0; int textflags = 0;
int xoffset_si, yoffset_si, roffset_si, boffset_si; int xoffset_si, yoffset_si, roffset_si, boffset_si;
@ -1266,7 +1267,7 @@ static int plot_raster_default(struct zint_symbol *symbol, const int rotate_angl
} }
sep_height_si = (int) (sep_height * si); sep_height_si = (int) (sep_height * si);
sep_yoffset_si = yoffset_si + row_heights_si[0] - sep_height_si / 2; sep_yoffset_si = yoffset_si + row_heights_si[0] - sep_height_si / 2;
if (symbol->symbology == BARCODE_CODABLOCKF || symbol->symbology == BARCODE_HIBC_BLOCKF) { if (is_codablockf) {
/* Avoid 11-module start and 13-module stop chars */ /* Avoid 11-module start and 13-module stop chars */
sep_xoffset_si += 11 * si; sep_xoffset_si += 11 * si;
sep_width_si -= (11 + 13) * si; sep_width_si -= (11 + 13) * si;

View File

@ -11,50 +11,73 @@
<rect x="20.00" y="2.00" width="4.00" height="60.00" /> <rect x="20.00" y="2.00" width="4.00" height="60.00" />
<rect x="26.00" y="2.00" width="2.00" height="60.00" /> <rect x="26.00" y="2.00" width="2.00" height="60.00" />
<rect x="36.00" y="2.00" width="2.00" height="60.00" /> <rect x="36.00" y="2.00" width="2.00" height="60.00" />
<rect x="42.00" y="2.00" width="2.00" height="60.00" /> <rect x="42.00" y="2.00" width="2.00" height="19.00" />
<rect x="46.00" y="2.00" width="8.00" height="60.00" /> <rect x="46.00" y="2.00" width="8.00" height="19.00" />
<rect x="56.00" y="2.00" width="6.00" height="60.00" /> <rect x="56.00" y="2.00" width="6.00" height="19.00" />
<rect x="64.00" y="2.00" width="2.00" height="20.00" /> <rect x="64.00" y="2.00" width="2.00" height="19.00" />
<rect x="70.00" y="2.00" width="2.00" height="20.00" /> <rect x="70.00" y="2.00" width="2.00" height="19.00" />
<rect x="74.00" y="2.00" width="4.00" height="20.00" /> <rect x="74.00" y="2.00" width="4.00" height="19.00" />
<rect x="86.00" y="2.00" width="2.00" height="60.00" /> <rect x="86.00" y="2.00" width="2.00" height="19.00" />
<rect x="90.00" y="2.00" width="2.00" height="60.00" /> <rect x="90.00" y="2.00" width="2.00" height="19.00" />
<rect x="98.00" y="2.00" width="4.00" height="60.00" /> <rect x="98.00" y="2.00" width="4.00" height="19.00" />
<rect x="108.00" y="2.00" width="2.00" height="60.00" /> <rect x="108.00" y="2.00" width="2.00" height="19.00" />
<rect x="112.00" y="2.00" width="2.00" height="40.00" /> <rect x="112.00" y="2.00" width="2.00" height="19.00" />
<rect x="120.00" y="2.00" width="4.00" height="40.00" /> <rect x="120.00" y="2.00" width="4.00" height="19.00" />
<rect x="130.00" y="2.00" width="2.00" height="40.00" /> <rect x="130.00" y="2.00" width="2.00" height="19.00" />
<rect x="134.00" y="2.00" width="2.00" height="40.00" /> <rect x="134.00" y="2.00" width="2.00" height="19.00" />
<rect x="142.00" y="2.00" width="4.00" height="40.00" /> <rect x="142.00" y="2.00" width="4.00" height="19.00" />
<rect x="152.00" y="2.00" width="2.00" height="40.00" /> <rect x="152.00" y="2.00" width="2.00" height="19.00" />
<rect x="156.00" y="2.00" width="2.00" height="40.00" /> <rect x="156.00" y="2.00" width="2.00" height="19.00" />
<rect x="164.00" y="2.00" width="4.00" height="40.00" /> <rect x="164.00" y="2.00" width="4.00" height="19.00" />
<rect x="174.00" y="2.00" width="4.00" height="20.00" /> <rect x="174.00" y="2.00" width="4.00" height="19.00" />
<rect x="180.00" y="2.00" width="4.00" height="20.00" /> <rect x="180.00" y="2.00" width="4.00" height="19.00" />
<rect x="188.00" y="2.00" width="4.00" height="20.00" /> <rect x="188.00" y="2.00" width="4.00" height="19.00" />
<rect x="196.00" y="2.00" width="4.00" height="60.00" /> <rect x="196.00" y="2.00" width="4.00" height="60.00" />
<rect x="206.00" y="2.00" width="6.00" height="60.00" /> <rect x="206.00" y="2.00" width="6.00" height="60.00" />
<rect x="214.00" y="2.00" width="2.00" height="60.00" /> <rect x="214.00" y="2.00" width="2.00" height="60.00" />
<rect x="218.00" y="2.00" width="4.00" height="60.00" /> <rect x="218.00" y="2.00" width="4.00" height="60.00" />
<rect x="64.00" y="22.00" width="4.00" height="20.00" /> <rect x="42.00" y="23.00" width="2.00" height="18.00" />
<rect x="74.00" y="22.00" width="2.00" height="20.00" /> <rect x="46.00" y="23.00" width="8.00" height="18.00" />
<rect x="80.00" y="22.00" width="2.00" height="20.00" /> <rect x="56.00" y="23.00" width="6.00" height="18.00" />
<rect x="174.00" y="22.00" width="8.00" height="20.00" /> <rect x="64.00" y="23.00" width="4.00" height="18.00" />
<rect x="184.00" y="22.00" width="2.00" height="40.00" /> <rect x="74.00" y="23.00" width="2.00" height="18.00" />
<rect x="192.00" y="22.00" width="2.00" height="20.00" /> <rect x="80.00" y="23.00" width="2.00" height="18.00" />
<rect x="64.00" y="42.00" width="2.00" height="20.00" /> <rect x="86.00" y="23.00" width="2.00" height="18.00" />
<rect x="68.00" y="42.00" width="4.00" height="20.00" /> <rect x="90.00" y="23.00" width="2.00" height="18.00" />
<rect x="76.00" y="42.00" width="6.00" height="20.00" /> <rect x="98.00" y="23.00" width="4.00" height="18.00" />
<rect x="112.00" y="42.00" width="6.00" height="20.00" /> <rect x="108.00" y="23.00" width="2.00" height="18.00" />
<rect x="120.00" y="42.00" width="8.00" height="20.00" /> <rect x="112.00" y="23.00" width="2.00" height="18.00" />
<rect x="130.00" y="42.00" width="4.00" height="20.00" /> <rect x="120.00" y="23.00" width="4.00" height="18.00" />
<rect x="138.00" y="42.00" width="4.00" height="20.00" /> <rect x="130.00" y="23.00" width="2.00" height="18.00" />
<rect x="144.00" y="42.00" width="4.00" height="20.00" /> <rect x="134.00" y="23.00" width="2.00" height="18.00" />
<rect x="152.00" y="42.00" width="4.00" height="20.00" /> <rect x="142.00" y="23.00" width="4.00" height="18.00" />
<rect x="160.00" y="42.00" width="6.00" height="20.00" /> <rect x="152.00" y="23.00" width="2.00" height="18.00" />
<rect x="170.00" y="42.00" width="2.00" height="20.00" /> <rect x="156.00" y="23.00" width="2.00" height="18.00" />
<rect x="174.00" y="42.00" width="4.00" height="20.00" /> <rect x="164.00" y="23.00" width="4.00" height="18.00" />
<rect x="190.00" y="42.00" width="2.00" height="20.00" /> <rect x="174.00" y="23.00" width="8.00" height="18.00" />
<rect x="184.00" y="23.00" width="2.00" height="18.00" />
<rect x="192.00" y="23.00" width="2.00" height="18.00" />
<rect x="42.00" y="43.00" width="2.00" height="19.00" />
<rect x="46.00" y="43.00" width="8.00" height="19.00" />
<rect x="56.00" y="43.00" width="6.00" height="19.00" />
<rect x="64.00" y="43.00" width="2.00" height="19.00" />
<rect x="68.00" y="43.00" width="4.00" height="19.00" />
<rect x="76.00" y="43.00" width="6.00" height="19.00" />
<rect x="86.00" y="43.00" width="2.00" height="19.00" />
<rect x="90.00" y="43.00" width="2.00" height="19.00" />
<rect x="98.00" y="43.00" width="4.00" height="19.00" />
<rect x="108.00" y="43.00" width="2.00" height="19.00" />
<rect x="112.00" y="43.00" width="6.00" height="19.00" />
<rect x="120.00" y="43.00" width="8.00" height="19.00" />
<rect x="130.00" y="43.00" width="4.00" height="19.00" />
<rect x="138.00" y="43.00" width="4.00" height="19.00" />
<rect x="144.00" y="43.00" width="4.00" height="19.00" />
<rect x="152.00" y="43.00" width="4.00" height="19.00" />
<rect x="160.00" y="43.00" width="6.00" height="19.00" />
<rect x="170.00" y="43.00" width="2.00" height="19.00" />
<rect x="174.00" y="43.00" width="4.00" height="19.00" />
<rect x="184.00" y="43.00" width="2.00" height="19.00" />
<rect x="190.00" y="43.00" width="2.00" height="19.00" />
<rect x="42.00" y="21.00" width="154.00" height="2.00" /> <rect x="42.00" y="21.00" width="154.00" height="2.00" />
<rect x="42.00" y="41.00" width="154.00" height="2.00" /> <rect x="42.00" y="41.00" width="154.00" height="2.00" />
<rect x="20.00" y="0.00" width="202.00" height="2.00" /> <rect x="20.00" y="0.00" width="202.00" height="2.00" />

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -0,0 +1,120 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="264" height="84" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<desc>Zint Generated Symbol
</desc>
<g id="barcode" fill="#000000">
<rect x="0" y="0" width="264" height="84" fill="#FFFFFF" opacity="0.400" />
<rect x="20.00" y="2.00" width="4.00" height="80.00" opacity="0.200" />
<rect x="26.00" y="2.00" width="2.00" height="80.00" opacity="0.200" />
<rect x="36.00" y="2.00" width="2.00" height="80.00" opacity="0.200" />
<rect x="42.00" y="2.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="46.00" y="2.00" width="6.00" height="18.00" opacity="0.200" />
<rect x="54.00" y="2.00" width="8.00" height="18.00" opacity="0.200" />
<rect x="64.00" y="2.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="72.00" y="2.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="80.00" y="2.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="86.00" y="2.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="90.00" y="2.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="98.00" y="2.00" width="6.00" height="18.00" opacity="0.200" />
<rect x="108.00" y="2.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="116.00" y="2.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="120.00" y="2.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="130.00" y="2.00" width="6.00" height="18.00" opacity="0.200" />
<rect x="142.00" y="2.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="146.00" y="2.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="152.00" y="2.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="164.00" y="2.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="168.00" y="2.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="174.00" y="2.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="180.00" y="2.00" width="8.00" height="18.00" opacity="0.200" />
<rect x="190.00" y="2.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="196.00" y="2.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="204.00" y="2.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="210.00" y="2.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="218.00" y="2.00" width="4.00" height="80.00" opacity="0.200" />
<rect x="228.00" y="2.00" width="6.00" height="80.00" opacity="0.200" />
<rect x="236.00" y="2.00" width="2.00" height="80.00" opacity="0.200" />
<rect x="240.00" y="2.00" width="4.00" height="80.00" opacity="0.200" />
<rect x="42.00" y="24.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="46.00" y="24.00" width="6.00" height="16.00" opacity="0.200" />
<rect x="54.00" y="24.00" width="8.00" height="16.00" opacity="0.200" />
<rect x="64.00" y="24.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="68.00" y="24.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="78.00" y="24.00" width="6.00" height="16.00" opacity="0.200" />
<rect x="86.00" y="24.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="90.00" y="24.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="98.00" y="24.00" width="6.00" height="16.00" opacity="0.200" />
<rect x="108.00" y="24.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="116.00" y="24.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="120.00" y="24.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="130.00" y="24.00" width="6.00" height="16.00" opacity="0.200" />
<rect x="142.00" y="24.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="146.00" y="24.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="152.00" y="24.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="164.00" y="24.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="168.00" y="24.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="174.00" y="24.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="180.00" y="24.00" width="8.00" height="16.00" opacity="0.200" />
<rect x="190.00" y="24.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="196.00" y="24.00" width="8.00" height="16.00" opacity="0.200" />
<rect x="208.00" y="24.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="212.00" y="24.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="42.00" y="44.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="46.00" y="44.00" width="6.00" height="16.00" opacity="0.200" />
<rect x="54.00" y="44.00" width="8.00" height="16.00" opacity="0.200" />
<rect x="64.00" y="44.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="72.00" y="44.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="78.00" y="44.00" width="6.00" height="16.00" opacity="0.200" />
<rect x="86.00" y="44.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="90.00" y="44.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="98.00" y="44.00" width="6.00" height="16.00" opacity="0.200" />
<rect x="108.00" y="44.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="116.00" y="44.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="120.00" y="44.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="130.00" y="44.00" width="6.00" height="16.00" opacity="0.200" />
<rect x="142.00" y="44.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="146.00" y="44.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="152.00" y="44.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="164.00" y="44.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="168.00" y="44.00" width="2.00" height="16.00" opacity="0.200" />
<rect x="174.00" y="44.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="180.00" y="44.00" width="8.00" height="16.00" opacity="0.200" />
<rect x="190.00" y="44.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="196.00" y="44.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="202.00" y="44.00" width="4.00" height="16.00" opacity="0.200" />
<rect x="208.00" y="44.00" width="8.00" height="16.00" opacity="0.200" />
<rect x="42.00" y="64.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="46.00" y="64.00" width="6.00" height="18.00" opacity="0.200" />
<rect x="54.00" y="64.00" width="8.00" height="18.00" opacity="0.200" />
<rect x="64.00" y="64.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="68.00" y="64.00" width="6.00" height="18.00" opacity="0.200" />
<rect x="76.00" y="64.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="86.00" y="64.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="90.00" y="64.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="98.00" y="64.00" width="6.00" height="18.00" opacity="0.200" />
<rect x="108.00" y="64.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="116.00" y="64.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="120.00" y="64.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="130.00" y="64.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="134.00" y="64.00" width="8.00" height="18.00" opacity="0.200" />
<rect x="144.00" y="64.00" width="6.00" height="18.00" opacity="0.200" />
<rect x="152.00" y="64.00" width="6.00" height="18.00" opacity="0.200" />
<rect x="160.00" y="64.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="168.00" y="64.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="174.00" y="64.00" width="6.00" height="18.00" opacity="0.200" />
<rect x="186.00" y="64.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="190.00" y="64.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="196.00" y="64.00" width="4.00" height="18.00" opacity="0.200" />
<rect x="204.00" y="64.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="208.00" y="64.00" width="2.00" height="18.00" opacity="0.200" />
<rect x="42.00" y="20.00" width="176.00" height="4.00" opacity="0.200" />
<rect x="42.00" y="40.00" width="176.00" height="4.00" opacity="0.200" />
<rect x="42.00" y="60.00" width="176.00" height="4.00" opacity="0.200" />
<rect x="20.00" y="0.00" width="224.00" height="2.00" opacity="0.200" />
<rect x="20.00" y="82.00" width="224.00" height="2.00" opacity="0.200" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

@ -11,50 +11,73 @@
<rect x="24.00" y="6.00" width="4.00" height="60.00" /> <rect x="24.00" y="6.00" width="4.00" height="60.00" />
<rect x="30.00" y="6.00" width="2.00" height="60.00" /> <rect x="30.00" y="6.00" width="2.00" height="60.00" />
<rect x="40.00" y="6.00" width="2.00" height="60.00" /> <rect x="40.00" y="6.00" width="2.00" height="60.00" />
<rect x="46.00" y="6.00" width="2.00" height="60.00" /> <rect x="46.00" y="6.00" width="2.00" height="19.00" />
<rect x="50.00" y="6.00" width="8.00" height="60.00" /> <rect x="50.00" y="6.00" width="8.00" height="19.00" />
<rect x="60.00" y="6.00" width="6.00" height="60.00" /> <rect x="60.00" y="6.00" width="6.00" height="19.00" />
<rect x="68.00" y="6.00" width="2.00" height="20.00" /> <rect x="68.00" y="6.00" width="2.00" height="19.00" />
<rect x="74.00" y="6.00" width="2.00" height="20.00" /> <rect x="74.00" y="6.00" width="2.00" height="19.00" />
<rect x="78.00" y="6.00" width="4.00" height="20.00" /> <rect x="78.00" y="6.00" width="4.00" height="19.00" />
<rect x="90.00" y="6.00" width="2.00" height="60.00" /> <rect x="90.00" y="6.00" width="2.00" height="19.00" />
<rect x="94.00" y="6.00" width="2.00" height="60.00" /> <rect x="94.00" y="6.00" width="2.00" height="19.00" />
<rect x="102.00" y="6.00" width="4.00" height="60.00" /> <rect x="102.00" y="6.00" width="4.00" height="19.00" />
<rect x="112.00" y="6.00" width="2.00" height="60.00" /> <rect x="112.00" y="6.00" width="2.00" height="19.00" />
<rect x="116.00" y="6.00" width="2.00" height="40.00" /> <rect x="116.00" y="6.00" width="2.00" height="19.00" />
<rect x="124.00" y="6.00" width="4.00" height="40.00" /> <rect x="124.00" y="6.00" width="4.00" height="19.00" />
<rect x="134.00" y="6.00" width="2.00" height="40.00" /> <rect x="134.00" y="6.00" width="2.00" height="19.00" />
<rect x="138.00" y="6.00" width="2.00" height="40.00" /> <rect x="138.00" y="6.00" width="2.00" height="19.00" />
<rect x="146.00" y="6.00" width="4.00" height="40.00" /> <rect x="146.00" y="6.00" width="4.00" height="19.00" />
<rect x="156.00" y="6.00" width="2.00" height="40.00" /> <rect x="156.00" y="6.00" width="2.00" height="19.00" />
<rect x="160.00" y="6.00" width="2.00" height="40.00" /> <rect x="160.00" y="6.00" width="2.00" height="19.00" />
<rect x="168.00" y="6.00" width="4.00" height="40.00" /> <rect x="168.00" y="6.00" width="4.00" height="19.00" />
<rect x="178.00" y="6.00" width="4.00" height="20.00" /> <rect x="178.00" y="6.00" width="4.00" height="19.00" />
<rect x="184.00" y="6.00" width="4.00" height="20.00" /> <rect x="184.00" y="6.00" width="4.00" height="19.00" />
<rect x="192.00" y="6.00" width="4.00" height="20.00" /> <rect x="192.00" y="6.00" width="4.00" height="19.00" />
<rect x="200.00" y="6.00" width="4.00" height="60.00" /> <rect x="200.00" y="6.00" width="4.00" height="60.00" />
<rect x="210.00" y="6.00" width="6.00" height="60.00" /> <rect x="210.00" y="6.00" width="6.00" height="60.00" />
<rect x="218.00" y="6.00" width="2.00" height="60.00" /> <rect x="218.00" y="6.00" width="2.00" height="60.00" />
<rect x="222.00" y="6.00" width="4.00" height="60.00" /> <rect x="222.00" y="6.00" width="4.00" height="60.00" />
<rect x="68.00" y="26.00" width="4.00" height="20.00" /> <rect x="46.00" y="27.00" width="2.00" height="18.00" />
<rect x="78.00" y="26.00" width="2.00" height="20.00" /> <rect x="50.00" y="27.00" width="8.00" height="18.00" />
<rect x="84.00" y="26.00" width="2.00" height="20.00" /> <rect x="60.00" y="27.00" width="6.00" height="18.00" />
<rect x="178.00" y="26.00" width="8.00" height="20.00" /> <rect x="68.00" y="27.00" width="4.00" height="18.00" />
<rect x="188.00" y="26.00" width="2.00" height="40.00" /> <rect x="78.00" y="27.00" width="2.00" height="18.00" />
<rect x="196.00" y="26.00" width="2.00" height="20.00" /> <rect x="84.00" y="27.00" width="2.00" height="18.00" />
<rect x="68.00" y="46.00" width="2.00" height="20.00" /> <rect x="90.00" y="27.00" width="2.00" height="18.00" />
<rect x="72.00" y="46.00" width="4.00" height="20.00" /> <rect x="94.00" y="27.00" width="2.00" height="18.00" />
<rect x="80.00" y="46.00" width="6.00" height="20.00" /> <rect x="102.00" y="27.00" width="4.00" height="18.00" />
<rect x="116.00" y="46.00" width="6.00" height="20.00" /> <rect x="112.00" y="27.00" width="2.00" height="18.00" />
<rect x="124.00" y="46.00" width="8.00" height="20.00" /> <rect x="116.00" y="27.00" width="2.00" height="18.00" />
<rect x="134.00" y="46.00" width="4.00" height="20.00" /> <rect x="124.00" y="27.00" width="4.00" height="18.00" />
<rect x="142.00" y="46.00" width="4.00" height="20.00" /> <rect x="134.00" y="27.00" width="2.00" height="18.00" />
<rect x="148.00" y="46.00" width="4.00" height="20.00" /> <rect x="138.00" y="27.00" width="2.00" height="18.00" />
<rect x="156.00" y="46.00" width="4.00" height="20.00" /> <rect x="146.00" y="27.00" width="4.00" height="18.00" />
<rect x="164.00" y="46.00" width="6.00" height="20.00" /> <rect x="156.00" y="27.00" width="2.00" height="18.00" />
<rect x="174.00" y="46.00" width="2.00" height="20.00" /> <rect x="160.00" y="27.00" width="2.00" height="18.00" />
<rect x="178.00" y="46.00" width="4.00" height="20.00" /> <rect x="168.00" y="27.00" width="4.00" height="18.00" />
<rect x="194.00" y="46.00" width="2.00" height="20.00" /> <rect x="178.00" y="27.00" width="8.00" height="18.00" />
<rect x="188.00" y="27.00" width="2.00" height="18.00" />
<rect x="196.00" y="27.00" width="2.00" height="18.00" />
<rect x="46.00" y="47.00" width="2.00" height="19.00" />
<rect x="50.00" y="47.00" width="8.00" height="19.00" />
<rect x="60.00" y="47.00" width="6.00" height="19.00" />
<rect x="68.00" y="47.00" width="2.00" height="19.00" />
<rect x="72.00" y="47.00" width="4.00" height="19.00" />
<rect x="80.00" y="47.00" width="6.00" height="19.00" />
<rect x="90.00" y="47.00" width="2.00" height="19.00" />
<rect x="94.00" y="47.00" width="2.00" height="19.00" />
<rect x="102.00" y="47.00" width="4.00" height="19.00" />
<rect x="112.00" y="47.00" width="2.00" height="19.00" />
<rect x="116.00" y="47.00" width="6.00" height="19.00" />
<rect x="124.00" y="47.00" width="8.00" height="19.00" />
<rect x="134.00" y="47.00" width="4.00" height="19.00" />
<rect x="142.00" y="47.00" width="4.00" height="19.00" />
<rect x="148.00" y="47.00" width="4.00" height="19.00" />
<rect x="156.00" y="47.00" width="4.00" height="19.00" />
<rect x="164.00" y="47.00" width="6.00" height="19.00" />
<rect x="174.00" y="47.00" width="2.00" height="19.00" />
<rect x="178.00" y="47.00" width="4.00" height="19.00" />
<rect x="188.00" y="47.00" width="2.00" height="19.00" />
<rect x="194.00" y="47.00" width="2.00" height="19.00" />
<rect x="46.00" y="25.00" width="154.00" height="2.00" /> <rect x="46.00" y="25.00" width="154.00" height="2.00" />
<rect x="46.00" y="45.00" width="154.00" height="2.00" /> <rect x="46.00" y="45.00" width="154.00" height="2.00" />
<rect x="24.00" y="4.00" width="202.00" height="2.00" /> <rect x="24.00" y="4.00" width="202.00" height="2.00" />

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -11,50 +11,73 @@
<rect x="28.00" y="8.00" width="4.00" height="60.00" /> <rect x="28.00" y="8.00" width="4.00" height="60.00" />
<rect x="34.00" y="8.00" width="2.00" height="60.00" /> <rect x="34.00" y="8.00" width="2.00" height="60.00" />
<rect x="44.00" y="8.00" width="2.00" height="60.00" /> <rect x="44.00" y="8.00" width="2.00" height="60.00" />
<rect x="50.00" y="8.00" width="2.00" height="60.00" /> <rect x="50.00" y="8.00" width="2.00" height="19.00" />
<rect x="54.00" y="8.00" width="8.00" height="60.00" /> <rect x="54.00" y="8.00" width="8.00" height="19.00" />
<rect x="64.00" y="8.00" width="6.00" height="60.00" /> <rect x="64.00" y="8.00" width="6.00" height="19.00" />
<rect x="72.00" y="8.00" width="2.00" height="20.00" /> <rect x="72.00" y="8.00" width="2.00" height="19.00" />
<rect x="78.00" y="8.00" width="2.00" height="20.00" /> <rect x="78.00" y="8.00" width="2.00" height="19.00" />
<rect x="82.00" y="8.00" width="4.00" height="20.00" /> <rect x="82.00" y="8.00" width="4.00" height="19.00" />
<rect x="94.00" y="8.00" width="2.00" height="60.00" /> <rect x="94.00" y="8.00" width="2.00" height="19.00" />
<rect x="98.00" y="8.00" width="2.00" height="60.00" /> <rect x="98.00" y="8.00" width="2.00" height="19.00" />
<rect x="106.00" y="8.00" width="4.00" height="60.00" /> <rect x="106.00" y="8.00" width="4.00" height="19.00" />
<rect x="116.00" y="8.00" width="2.00" height="60.00" /> <rect x="116.00" y="8.00" width="2.00" height="19.00" />
<rect x="120.00" y="8.00" width="2.00" height="40.00" /> <rect x="120.00" y="8.00" width="2.00" height="19.00" />
<rect x="128.00" y="8.00" width="4.00" height="40.00" /> <rect x="128.00" y="8.00" width="4.00" height="19.00" />
<rect x="138.00" y="8.00" width="2.00" height="40.00" /> <rect x="138.00" y="8.00" width="2.00" height="19.00" />
<rect x="142.00" y="8.00" width="2.00" height="40.00" /> <rect x="142.00" y="8.00" width="2.00" height="19.00" />
<rect x="150.00" y="8.00" width="4.00" height="40.00" /> <rect x="150.00" y="8.00" width="4.00" height="19.00" />
<rect x="160.00" y="8.00" width="2.00" height="40.00" /> <rect x="160.00" y="8.00" width="2.00" height="19.00" />
<rect x="164.00" y="8.00" width="2.00" height="40.00" /> <rect x="164.00" y="8.00" width="2.00" height="19.00" />
<rect x="172.00" y="8.00" width="4.00" height="40.00" /> <rect x="172.00" y="8.00" width="4.00" height="19.00" />
<rect x="182.00" y="8.00" width="4.00" height="20.00" /> <rect x="182.00" y="8.00" width="4.00" height="19.00" />
<rect x="188.00" y="8.00" width="4.00" height="20.00" /> <rect x="188.00" y="8.00" width="4.00" height="19.00" />
<rect x="196.00" y="8.00" width="4.00" height="20.00" /> <rect x="196.00" y="8.00" width="4.00" height="19.00" />
<rect x="204.00" y="8.00" width="4.00" height="60.00" /> <rect x="204.00" y="8.00" width="4.00" height="60.00" />
<rect x="214.00" y="8.00" width="6.00" height="60.00" /> <rect x="214.00" y="8.00" width="6.00" height="60.00" />
<rect x="222.00" y="8.00" width="2.00" height="60.00" /> <rect x="222.00" y="8.00" width="2.00" height="60.00" />
<rect x="226.00" y="8.00" width="4.00" height="60.00" /> <rect x="226.00" y="8.00" width="4.00" height="60.00" />
<rect x="72.00" y="28.00" width="4.00" height="20.00" /> <rect x="50.00" y="29.00" width="2.00" height="18.00" />
<rect x="82.00" y="28.00" width="2.00" height="20.00" /> <rect x="54.00" y="29.00" width="8.00" height="18.00" />
<rect x="88.00" y="28.00" width="2.00" height="20.00" /> <rect x="64.00" y="29.00" width="6.00" height="18.00" />
<rect x="182.00" y="28.00" width="8.00" height="20.00" /> <rect x="72.00" y="29.00" width="4.00" height="18.00" />
<rect x="192.00" y="28.00" width="2.00" height="40.00" /> <rect x="82.00" y="29.00" width="2.00" height="18.00" />
<rect x="200.00" y="28.00" width="2.00" height="20.00" /> <rect x="88.00" y="29.00" width="2.00" height="18.00" />
<rect x="72.00" y="48.00" width="2.00" height="20.00" /> <rect x="94.00" y="29.00" width="2.00" height="18.00" />
<rect x="76.00" y="48.00" width="4.00" height="20.00" /> <rect x="98.00" y="29.00" width="2.00" height="18.00" />
<rect x="84.00" y="48.00" width="6.00" height="20.00" /> <rect x="106.00" y="29.00" width="4.00" height="18.00" />
<rect x="120.00" y="48.00" width="6.00" height="20.00" /> <rect x="116.00" y="29.00" width="2.00" height="18.00" />
<rect x="128.00" y="48.00" width="8.00" height="20.00" /> <rect x="120.00" y="29.00" width="2.00" height="18.00" />
<rect x="138.00" y="48.00" width="4.00" height="20.00" /> <rect x="128.00" y="29.00" width="4.00" height="18.00" />
<rect x="146.00" y="48.00" width="4.00" height="20.00" /> <rect x="138.00" y="29.00" width="2.00" height="18.00" />
<rect x="152.00" y="48.00" width="4.00" height="20.00" /> <rect x="142.00" y="29.00" width="2.00" height="18.00" />
<rect x="160.00" y="48.00" width="4.00" height="20.00" /> <rect x="150.00" y="29.00" width="4.00" height="18.00" />
<rect x="168.00" y="48.00" width="6.00" height="20.00" /> <rect x="160.00" y="29.00" width="2.00" height="18.00" />
<rect x="178.00" y="48.00" width="2.00" height="20.00" /> <rect x="164.00" y="29.00" width="2.00" height="18.00" />
<rect x="182.00" y="48.00" width="4.00" height="20.00" /> <rect x="172.00" y="29.00" width="4.00" height="18.00" />
<rect x="198.00" y="48.00" width="2.00" height="20.00" /> <rect x="182.00" y="29.00" width="8.00" height="18.00" />
<rect x="192.00" y="29.00" width="2.00" height="18.00" />
<rect x="200.00" y="29.00" width="2.00" height="18.00" />
<rect x="50.00" y="49.00" width="2.00" height="19.00" />
<rect x="54.00" y="49.00" width="8.00" height="19.00" />
<rect x="64.00" y="49.00" width="6.00" height="19.00" />
<rect x="72.00" y="49.00" width="2.00" height="19.00" />
<rect x="76.00" y="49.00" width="4.00" height="19.00" />
<rect x="84.00" y="49.00" width="6.00" height="19.00" />
<rect x="94.00" y="49.00" width="2.00" height="19.00" />
<rect x="98.00" y="49.00" width="2.00" height="19.00" />
<rect x="106.00" y="49.00" width="4.00" height="19.00" />
<rect x="116.00" y="49.00" width="2.00" height="19.00" />
<rect x="120.00" y="49.00" width="6.00" height="19.00" />
<rect x="128.00" y="49.00" width="8.00" height="19.00" />
<rect x="138.00" y="49.00" width="4.00" height="19.00" />
<rect x="146.00" y="49.00" width="4.00" height="19.00" />
<rect x="152.00" y="49.00" width="4.00" height="19.00" />
<rect x="160.00" y="49.00" width="4.00" height="19.00" />
<rect x="168.00" y="49.00" width="6.00" height="19.00" />
<rect x="178.00" y="49.00" width="2.00" height="19.00" />
<rect x="182.00" y="49.00" width="4.00" height="19.00" />
<rect x="192.00" y="49.00" width="2.00" height="19.00" />
<rect x="198.00" y="49.00" width="2.00" height="19.00" />
<rect x="50.00" y="27.00" width="154.00" height="2.00" /> <rect x="50.00" y="27.00" width="154.00" height="2.00" />
<rect x="50.00" y="47.00" width="154.00" height="2.00" /> <rect x="50.00" y="47.00" width="154.00" height="2.00" />
<rect x="0.00" y="4.00" width="258.00" height="4.00" /> <rect x="0.00" y="4.00" width="258.00" height="4.00" />

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -0,0 +1,51 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="162" height="46" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<desc>Zint Generated Symbol
</desc>
<g id="barcode" fill="#FF1115">
<rect x="0" y="0" width="162" height="46" fill="#FFFFFF" />
<rect x="20.00" y="2.00" width="2.00" height="20.00" opacity="0.498" />
<rect x="24.00" y="2.00" width="6.00" height="20.00" opacity="0.498" />
<rect x="36.00" y="2.00" width="4.00" height="20.00" opacity="0.498" />
<rect x="44.00" y="2.00" width="2.00" height="20.00" opacity="0.498" />
<rect x="50.00" y="2.00" width="2.00" height="20.00" opacity="0.498" />
<rect x="56.00" y="2.00" width="4.00" height="20.00" opacity="0.498" />
<rect x="64.00" y="2.00" width="8.00" height="20.00" opacity="0.498" />
<rect x="76.00" y="2.00" width="2.00" height="20.00" opacity="0.498" />
<rect x="80.00" y="2.00" width="6.00" height="20.00" opacity="0.498" />
<rect x="88.00" y="2.00" width="4.00" height="20.00" opacity="0.498" />
<rect x="96.00" y="2.00" width="8.00" height="20.00" opacity="0.498" />
<rect x="108.00" y="2.00" width="2.00" height="20.00" opacity="0.498" />
<rect x="112.00" y="2.00" width="6.00" height="20.00" opacity="0.498" />
<rect x="120.00" y="2.00" width="6.00" height="20.00" opacity="0.498" />
<rect x="128.00" y="2.00" width="2.00" height="20.00" opacity="0.498" />
<rect x="132.00" y="2.00" width="4.00" height="20.00" opacity="0.498" />
<rect x="144.00" y="2.00" width="6.00" height="20.00" opacity="0.498" />
<rect x="152.00" y="2.00" width="8.00" height="20.00" opacity="0.498" />
<rect x="20.00" y="24.00" width="2.00" height="20.00" opacity="0.498" />
<rect x="24.00" y="24.00" width="4.00" height="20.00" opacity="0.498" />
<rect x="32.00" y="24.00" width="8.00" height="20.00" opacity="0.498" />
<rect x="44.00" y="24.00" width="2.00" height="20.00" opacity="0.498" />
<rect x="48.00" y="24.00" width="6.00" height="20.00" opacity="0.498" />
<rect x="56.00" y="24.00" width="4.00" height="20.00" opacity="0.498" />
<rect x="62.00" y="24.00" width="12.00" height="20.00" opacity="0.498" />
<rect x="76.00" y="24.00" width="2.00" height="20.00" opacity="0.498" />
<rect x="80.00" y="24.00" width="6.00" height="20.00" opacity="0.498" />
<rect x="88.00" y="24.00" width="6.00" height="20.00" opacity="0.498" />
<rect x="96.00" y="24.00" width="2.00" height="20.00" opacity="0.498" />
<rect x="102.00" y="24.00" width="8.00" height="20.00" opacity="0.498" />
<rect x="114.00" y="24.00" width="4.00" height="20.00" opacity="0.498" />
<rect x="120.00" y="24.00" width="2.00" height="20.00" opacity="0.498" />
<rect x="126.00" y="24.00" width="10.00" height="20.00" opacity="0.498" />
<rect x="138.00" y="24.00" width="4.00" height="20.00" opacity="0.498" />
<rect x="146.00" y="24.00" width="4.00" height="20.00" opacity="0.498" />
<rect x="152.00" y="24.00" width="8.00" height="20.00" opacity="0.498" />
<rect x="20.00" y="22.00" width="140.00" height="2.00" opacity="0.498" />
<rect x="0.00" y="0.00" width="162.00" height="2.00" opacity="0.498" />
<rect x="0.00" y="44.00" width="162.00" height="2.00" opacity="0.498" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
/* /*
libzint - the open source barcode library libzint - the open source barcode library
Copyright (C) 2020 - 2021 Robin Stuart <rstuart114@gmail.com> Copyright (C) 2020-2022 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
@ -27,7 +27,7 @@
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE. SUCH DAMAGE.
*/ */
/* vim: set ts=4 sw=4 et : */ /* SPDX-License-Identifier: BSD-3-Clause */
#include "testcommon.h" #include "testcommon.h"
#include <sys/stat.h> #include <sys/stat.h>
@ -44,6 +44,7 @@ static void test_print(int index, int generate, int debug) {
int show_hrt; int show_hrt;
int option_1; int option_1;
int option_2; int option_2;
int option_3;
float height; float height;
char *fgcolour; char *fgcolour;
char *bgcolour; char *bgcolour;
@ -54,56 +55,58 @@ static void test_print(int index, int generate, int debug) {
char *expected_file; char *expected_file;
}; };
struct item data[] = { struct item data[] = {
/* 0*/ { BARCODE_CODE128, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "<>\"&'", "", 0, "code128_amperands.svg" }, /* 0*/ { BARCODE_CODE128, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "<>\"&'", "", 0, "code128_amperands.svg" },
/* 1*/ { BARCODE_CODE128, UNICODE_MODE, -1, BOLD_TEXT, -1, -1, -1, -1, -1, 0, "", "", 0, "Égjpqy", "", 0, "code128_egrave_bold.svg" }, /* 1*/ { BARCODE_CODE128, UNICODE_MODE, -1, BOLD_TEXT, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "Égjpqy", "", 0, "code128_egrave_bold.svg" },
/* 2*/ { BARCODE_CODE128, UNICODE_MODE, 3, BOLD_TEXT | BARCODE_BOX, -1, -1, -1, -1, -1, 0, "", "", 0, "Égjpqy", "", 0, "code128_egrave_bold_box3.svg" }, /* 2*/ { BARCODE_CODE128, UNICODE_MODE, 3, BOLD_TEXT | BARCODE_BOX, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "Égjpqy", "", 0, "code128_egrave_bold_box3.svg" },
/* 3*/ { BARCODE_CODE128, UNICODE_MODE, 2, BOLD_TEXT | BARCODE_BOX, 2, 2, -1, -1, -1, 0, "", "", 0, "Égjpqy", "", 0, "code128_egrave_bold_hvwsp2_box2.svg" }, /* 3*/ { BARCODE_CODE128, UNICODE_MODE, 2, BOLD_TEXT | BARCODE_BOX, 2, 2, -1, -1, -1, -1, 0, "", "", 0, "Égjpqy", "", 0, "code128_egrave_bold_hvwsp2_box2.svg" },
/* 4*/ { BARCODE_CODE128, UNICODE_MODE, -1, BOLD_TEXT, 3, 3, -1, -1, -1, 0, "", "", 0, "Égjpqy", "", 0, "code128_egrave_bold_hvwsp3.svg" }, /* 4*/ { BARCODE_CODE128, UNICODE_MODE, -1, BOLD_TEXT, 3, 3, -1, -1, -1, -1, 0, "", "", 0, "Égjpqy", "", 0, "code128_egrave_bold_hvwsp3.svg" },
/* 5*/ { BARCODE_GS1_128_CC, -1, -1, -1, -1, -1, -1, 3, -1, 0, "", "", 0, "[00]030123456789012340", "[02]13012345678909[37]24[10]1234567ABCDEFG", 0, "gs1_128_cc_fig12.svg" }, /* 5*/ { BARCODE_GS1_128_CC, -1, -1, -1, -1, -1, -1, 3, -1, -1, 0, "", "", 0, "[00]030123456789012340", "[02]13012345678909[37]24[10]1234567ABCDEFG", 0, "gs1_128_cc_fig12.svg" },
/* 6*/ { BARCODE_CODABLOCKF, -1, -1, -1, -1, -1, -1, 3, -1, 0, "", "", 0, "AAAAAAAAA", "", 0, "codablockf_3rows.svg" }, /* 6*/ { BARCODE_CODABLOCKF, -1, -1, -1, -1, -1, -1, 3, -1, -1, 0, "", "", 0, "AAAAAAAAA", "", 0, "codablockf_3rows.svg" },
/* 7*/ { BARCODE_CODABLOCKF, -1, -1, -1, 2, 2, -1, 3, -1, 0, "", "", 0, "AAAAAAAAA", "", 0, "codablockf_hvwsp2.svg" }, /* 7*/ { BARCODE_CODABLOCKF, -1, -1, -1, 2, 2, -1, 3, -1, -1, 0, "", "", 0, "AAAAAAAAA", "", 0, "codablockf_hvwsp2.svg" },
/* 8*/ { BARCODE_CODABLOCKF, -1, 2, BARCODE_BOX, 2, 2, -1, -1, -1, 0, "", "", 0, "AAAAAAAAA", "", 0, "codablockf_hvwsp2_box2.svg" }, /* 8*/ { BARCODE_CODABLOCKF, -1, 2, BARCODE_BOX, 2, 2, -1, -1, -1, -1, 0, "", "", 0, "AAAAAAAAA", "", 0, "codablockf_hvwsp2_box2.svg" },
/* 9*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "9771384524017+12", "", 0, "ean13_2addon_ggs_5.2.2.5.1-2.svg" }, /* 9*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "9771384524017+12", "", 0, "ean13_2addon_ggs_5.2.2.5.1-2.svg" },
/* 10*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "9780877799306+54321", "", 0, "ean13_5addon_ggs_5.2.2.5.2-2.svg" }, /* 10*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "9780877799306+54321", "", 0, "ean13_5addon_ggs_5.2.2.5.2-2.svg" },
/* 11*/ { BARCODE_EANX_CC, -1, -1, -1, -1, -1, -1, 1, -1, 0, "", "", 0, "123456789012+12", "[91]123456789012345678901", 0, "ean13_cc_2addon_cca_4x4.svg" }, /* 11*/ { BARCODE_EANX_CC, -1, -1, -1, -1, -1, -1, 1, -1, -1, 0, "", "", 0, "123456789012+12", "[91]123456789012345678901", 0, "ean13_cc_2addon_cca_4x4.svg" },
/* 12*/ { BARCODE_EANX_CC, -1, -1, -1, -1, -1, -1, 2, -1, 0, "", "", 0, "123456789012+54321", "[91]1234567890", 0, "ean13_cc_5addon_ccb_3x4.svg" }, /* 12*/ { BARCODE_EANX_CC, -1, -1, -1, -1, -1, -1, 2, -1, -1, 0, "", "", 0, "123456789012+54321", "[91]1234567890", 0, "ean13_cc_5addon_ccb_3x4.svg" },
/* 13*/ { BARCODE_EANX_CC, -1, -1, -1, -1, -1, 0, 2, -1, 0, "", "", 0, "123456789012+54321", "[91]1234567890", 0, "ean13_cc_5addon_ccb_3x4_notext.svg" }, /* 13*/ { BARCODE_EANX_CC, -1, -1, -1, -1, -1, 0, 2, -1, -1, 0, "", "", 0, "123456789012+54321", "[91]1234567890", 0, "ean13_cc_5addon_ccb_3x4_notext.svg" },
/* 14*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "012345678905+24", "", 0, "upca_2addon_ggs_5.2.6.6-5.svg" }, /* 14*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "012345678905+24", "", 0, "upca_2addon_ggs_5.2.6.6-5.svg" },
/* 15*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "614141234417+12345", "", 0, "upca_5addon.svg" }, /* 15*/ { BARCODE_UPCA, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "614141234417+12345", "", 0, "upca_5addon.svg" },
/* 16*/ { BARCODE_UPCA, -1, 3, BARCODE_BIND, -1, -1, -1, -1, -1, 0, "", "", 0, "614141234417+12345", "", 0, "upca_5addon_bind3.svg" }, /* 16*/ { BARCODE_UPCA, -1, 3, BARCODE_BIND, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "614141234417+12345", "", 0, "upca_5addon_bind3.svg" },
/* 17*/ { BARCODE_UPCA, -1, -1, SMALL_TEXT | BOLD_TEXT, -1, -1, -1, -1, -1, 0, "", "", 0, "614141234417+12345", "", 0, "upca_5addon_small_bold.svg" }, /* 17*/ { BARCODE_UPCA, -1, -1, SMALL_TEXT | BOLD_TEXT, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "614141234417+12345", "", 0, "upca_5addon_small_bold.svg" },
/* 18*/ { BARCODE_UPCA_CC, -1, -1, -1, -1, -1, -1, 1, -1, 0, "", "", 0, "12345678901+12", "[91]123456789", 0, "upca_cc_2addon_cca_3x4.svg" }, /* 18*/ { BARCODE_UPCA_CC, -1, -1, -1, -1, -1, -1, 1, -1, -1, 0, "", "", 0, "12345678901+12", "[91]123456789", 0, "upca_cc_2addon_cca_3x4.svg" },
/* 19*/ { BARCODE_UPCA_CC, -1, -1, -1, -1, -1, -1, 2, -1, 0, "", "", 0, "12345678901+12121", "[91]1234567890123", 0, "upca_cc_5addon_ccb_4x4.svg" }, /* 19*/ { BARCODE_UPCA_CC, -1, -1, -1, -1, -1, -1, 2, -1, -1, 0, "", "", 0, "12345678901+12121", "[91]1234567890123", 0, "upca_cc_5addon_ccb_4x4.svg" },
/* 20*/ { BARCODE_UPCA_CC, -1, -1, -1, -1, -1, 0, 2, -1, 0, "", "", 0, "12345678901+12121", "[91]1234567890123", 0, "upca_cc_5addon_ccb_4x4_notext.svg" }, /* 20*/ { BARCODE_UPCA_CC, -1, -1, -1, -1, -1, 0, 2, -1, -1, 0, "", "", 0, "12345678901+12121", "[91]1234567890123", 0, "upca_cc_5addon_ccb_4x4_notext.svg" },
/* 21*/ { BARCODE_UPCA_CC, -1, 3, BARCODE_BIND, -1, -1, -1, 2, -1, 0, "", "", 0, "12345678901+12121", "[91]1234567890123", 0, "upca_cc_5addon_ccb_4x4_bind3.svg" }, /* 21*/ { BARCODE_UPCA_CC, -1, 3, BARCODE_BIND, -1, -1, -1, 2, -1, -1, 0, "", "", 0, "12345678901+12121", "[91]1234567890123", 0, "upca_cc_5addon_ccb_4x4_bind3.svg" },
/* 22*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "1234567+12", "", 0, "upce_2addon.svg" }, /* 22*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "1234567+12", "", 0, "upce_2addon.svg" },
/* 23*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "1234567+12345", "", 0, "upce_5addon.svg" }, /* 23*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "1234567+12345", "", 0, "upce_5addon.svg" },
/* 24*/ { BARCODE_UPCE, -1, -1, SMALL_TEXT, -1, -1, -1, -1, -1, 0, "", "", 0, "1234567+12345", "", 0, "upce_5addon_small.svg" }, /* 24*/ { BARCODE_UPCE, -1, -1, SMALL_TEXT, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "1234567+12345", "", 0, "upce_5addon_small.svg" },
/* 25*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, 0, -1, -1, 0, "", "", 0, "1234567+12345", "", 0, "upce_5addon_notext.svg" }, /* 25*/ { BARCODE_UPCE, -1, -1, -1, -1, -1, 0, -1, -1, -1, 0, "", "", 0, "1234567+12345", "", 0, "upce_5addon_notext.svg" },
/* 26*/ { BARCODE_UPCE_CC, -1, -1, -1, -1, -1, -1, 1, -1, 0, "", "", 0, "0654321+89", "[91]1", 0, "upce_cc_2addon_cca_5x2.svg" }, /* 26*/ { BARCODE_UPCE_CC, -1, -1, -1, -1, -1, -1, 1, -1, -1, 0, "", "", 0, "0654321+89", "[91]1", 0, "upce_cc_2addon_cca_5x2.svg" },
/* 27*/ { BARCODE_UPCE_CC, -1, -1, -1, -1, -1, -1, 1, -1, 0, "FF0000EE", "0000FF11", 0, "0654321+89", "[91]1", 0, "upce_cc_2addon_cca_5x2_fgbgalpha.svg" }, /* 27*/ { BARCODE_UPCE_CC, -1, -1, -1, -1, -1, -1, 1, -1, -1, 0, "FF0000EE", "0000FF11", 0, "0654321+89", "[91]1", 0, "upce_cc_2addon_cca_5x2_fgbgalpha.svg" },
/* 28*/ { BARCODE_UPCE_CC, -1, -1, -1, -1, -1, -1, 1, -1, 0, "", "FFFFFF00", 0, "0654321+89", "[91]1", 0, "upce_cc_2addon_cca_5x2_nobg.svg" }, /* 28*/ { BARCODE_UPCE_CC, -1, -1, -1, -1, -1, -1, 1, -1, -1, 0, "", "FFFFFF00", 0, "0654321+89", "[91]1", 0, "upce_cc_2addon_cca_5x2_nobg.svg" },
/* 29*/ { BARCODE_UPCE_CC, -1, -1, -1, -1, -1, -1, 1, -1, 0, "", "", 270, "0654321+89", "[91]1", 0, "upce_cc_2addon_cca_5x2_rotate_270.svg" }, /* 29*/ { BARCODE_UPCE_CC, -1, -1, -1, -1, -1, -1, 1, -1, -1, 0, "", "", 270, "0654321+89", "[91]1", 0, "upce_cc_2addon_cca_5x2_rotate_270.svg" },
/* 30*/ { BARCODE_UPCE_CC, -1, -1, -1, -1, -1, -1, 2, -1, 0, "", "", 0, "1876543+56789", "[91]12345", 0, "upce_cc_5addon_ccb_8x2.svg" }, /* 30*/ { BARCODE_UPCE_CC, -1, -1, -1, -1, -1, -1, 2, -1, -1, 0, "", "", 0, "1876543+56789", "[91]12345", 0, "upce_cc_5addon_ccb_8x2.svg" },
/* 31*/ { BARCODE_UPCE_CC, -1, -1, -1, -1, -1, 0, 2, -1, 0, "", "", 0, "1876543+56789", "[91]12345", 0, "upce_cc_5addon_ccb_8x2_notext.svg" }, /* 31*/ { BARCODE_UPCE_CC, -1, -1, -1, -1, -1, 0, 2, -1, -1, 0, "", "", 0, "1876543+56789", "[91]12345", 0, "upce_cc_5addon_ccb_8x2_notext.svg" },
/* 32*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "1234567+12", "", 0, "ean8_2addon.svg" }, /* 32*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "1234567+12", "", 0, "ean8_2addon.svg" },
/* 33*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "1234567+12345", "", 0, "ean8_5addon.svg" }, /* 33*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "1234567+12345", "", 0, "ean8_5addon.svg" },
/* 34*/ { BARCODE_EANX_CC, -1, -1, -1, -1, -1, -1, 1, -1, 0, "", "", 0, "9876543+65", "[91]1234567", 0, "ean8_cc_2addon_cca_4x3.svg" }, /* 34*/ { BARCODE_EANX_CC, -1, -1, -1, -1, -1, -1, 1, -1, -1, 0, "", "", 0, "9876543+65", "[91]1234567", 0, "ean8_cc_2addon_cca_4x3.svg" },
/* 35*/ { BARCODE_EANX_CC, -1, -1, -1, -1, -1, -1, 2, -1, 0, "", "", 0, "9876543+74083", "[91]123456789012345678", 0, "ean8_cc_5addon_ccb_8x3.svg" }, /* 35*/ { BARCODE_EANX_CC, -1, -1, -1, -1, -1, -1, 2, -1, -1, 0, "", "", 0, "9876543+74083", "[91]123456789012345678", 0, "ean8_cc_5addon_ccb_8x3.svg" },
/* 36*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "12345", "", 0, "ean5.svg" }, /* 36*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "12345", "", 0, "ean5.svg" },
/* 37*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "12", "", 0, "ean2.svg" }, /* 37*/ { BARCODE_EANX, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "12", "", 0, "ean2.svg" },
/* 38*/ { BARCODE_CODE39, -1, -1, SMALL_TEXT, -1, -1, -1, -1, -1, 0, "", "", 0, "123", "", 0, "code39_small.svg" }, /* 38*/ { BARCODE_CODE39, -1, -1, SMALL_TEXT, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "123", "", 0, "code39_small.svg" },
/* 39*/ { BARCODE_POSTNET, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "12345", "", 0, "postnet_zip.svg" }, /* 39*/ { BARCODE_POSTNET, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "12345", "", 0, "postnet_zip.svg" },
/* 40*/ { BARCODE_MAXICODE, -1, 2, BARCODE_BOX, -1, -1, -1, -1, -1, 0, "", "", 0, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, "maxicode_box2.svg" }, /* 40*/ { BARCODE_MAXICODE, -1, 2, BARCODE_BOX, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, "maxicode_box2.svg" },
/* 41*/ { BARCODE_MAXICODE, -1, 1, BARCODE_BIND, -1, 1, -1, -1, -1, 0, "", "", 0, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, "maxicode_vwsp1_bind1.svg" }, /* 41*/ { BARCODE_MAXICODE, -1, 1, BARCODE_BIND, -1, 1, -1, -1, -1, -1, 0, "", "", 0, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, "maxicode_vwsp1_bind1.svg" },
/* 42*/ { BARCODE_MAXICODE, -1, -1, -1, -1, -1, -1, -1, -1, 0, "121212DD", "EEEEEE22", 90, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, "maxicode_fgbg_rotate_90.svg" }, /* 42*/ { BARCODE_MAXICODE, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, "121212DD", "EEEEEE22", 90, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, "maxicode_fgbg_rotate_90.svg" },
/* 43*/ { BARCODE_DATAMATRIX, -1, 1, BARCODE_BIND | BARCODE_DOTTY_MODE, -1, 1, -1, -1, -1, 0, "", "", 0, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, "datamatrix_vwsp1_bind1_dotty.svg" }, /* 43*/ { BARCODE_DATAMATRIX, -1, 1, BARCODE_BIND | BARCODE_DOTTY_MODE, -1, 1, -1, -1, -1, -1, 0, "", "", 0, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, "datamatrix_vwsp1_bind1_dotty.svg" },
/* 44*/ { BARCODE_DATAMATRIX, -1, 1, BARCODE_BIND | BARCODE_DOTTY_MODE, 1, 1, -1, -1, -1, 0, "", "", 0, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, "datamatrix_hvwsp1_bind1_dotty.svg" }, /* 44*/ { BARCODE_DATAMATRIX, -1, 1, BARCODE_BIND | BARCODE_DOTTY_MODE, 1, 1, -1, -1, -1, -1, 0, "", "", 0, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 0, "datamatrix_hvwsp1_bind1_dotty.svg" },
/* 45*/ { BARCODE_DBAR_LTD, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "12345678909", "", 0, "dbar_ltd.svg" }, /* 45*/ { BARCODE_DBAR_LTD, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, "", "", 0, "12345678909", "", 0, "dbar_ltd.svg" },
/* 46*/ { BARCODE_PDF417, -1, -1, -1, -1, -1, -1, -1, -1, 5, "", "", 0, "Your Data Here!", "", ZINT_WARN_NONCOMPLIANT, "pdf417_height5.svg" }, /* 46*/ { BARCODE_PDF417, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, "", "", 0, "Your Data Here!", "", ZINT_WARN_NONCOMPLIANT, "pdf417_height5.svg" },
/* 47*/ { BARCODE_USPS_IMAIL, -1, -1, -1, -1, -1, -1, -1, -1, 7.75, "", "", 0, "12345678901234567890", "", 0, "imail_height7.75.svg" }, /* 47*/ { BARCODE_USPS_IMAIL, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7.75, "", "", 0, "12345678901234567890", "", 0, "imail_height7.75.svg" },
/* 48*/ { BARCODE_ULTRA, -1, 3, BARCODE_BOX, 2, 2, -1, -1, -1, 0, "FF0000", "0000FF", 0, "12345678901234567890", "", 0, "ultra_fgbg_hvwsp2_box3.svg" }, /* 48*/ { BARCODE_ULTRA, -1, 3, BARCODE_BOX, 2, 2, -1, -1, -1, -1, 0, "FF0000", "0000FF", 0, "12345678901234567890", "", 0, "ultra_fgbg_hvwsp2_box3.svg" },
/* 49*/ { BARCODE_TELEPEN, -1, -1, -1, -1, -1, -1, -1, -1, 0.4, "", "", 180, "A", "", 0, "telepen_height0.4_rotate_180.svg" }, /* 49*/ { BARCODE_TELEPEN, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0.4, "", "", 180, "A", "", 0, "telepen_height0.4_rotate_180.svg" },
/* 50*/ { BARCODE_CODE49, -1, -1, COMPLIANT_HEIGHT, -1, -1, -1, -1, -1, -1, 0, "FF11157F", "", 0, "A", "", 0, "code49_comph_fgalpha.svg" },
/* 51*/ { BARCODE_CODABLOCKF, -1, -1, COMPLIANT_HEIGHT, -1, -1, -1, -1, -1, 2, 0, "00000033", "FFFFFF66", 0, "1234567890123456789012345678901234", "", 0, "codablockf_comph_sep2_fgbgalpha.svg" },
}; };
int data_size = ARRAY_SIZE(data); int data_size = ARRAY_SIZE(data);
int i, length, ret; int i, length, ret;
@ -138,12 +141,12 @@ static void test_print(int index, int generate, int debug) {
int text_length; int text_length;
if (index != -1 && i != index) continue; if (index != -1 && i != index) continue;
if ((debug & ZINT_DEBUG_TEST_PRINT) && !(debug & ZINT_DEBUG_TEST_LESS_NOISY)) printf("i:%d\n", i); // ZINT_DEBUG_TEST_PRINT 16 if ((debug & ZINT_DEBUG_TEST_PRINT) && !(debug & ZINT_DEBUG_TEST_LESS_NOISY)) printf("i:%d\n", i); /* ZINT_DEBUG_TEST_PRINT 16 */
symbol = ZBarcode_Create(); symbol = ZBarcode_Create();
assert_nonnull(symbol, "Symbol not created\n"); assert_nonnull(symbol, "Symbol not created\n");
length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, data[i].output_options, data[i].data, -1, debug); length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, data[i].option_1, data[i].option_2, data[i].option_3, data[i].output_options, data[i].data, -1, debug);
if (data[i].show_hrt != -1) { if (data[i].show_hrt != -1) {
symbol->show_hrt = data[i].show_hrt; symbol->show_hrt = data[i].show_hrt;
} }
@ -184,10 +187,10 @@ static void test_print(int index, int generate, int debug) {
assert_nonzero(testUtilDataPath(expected_file, sizeof(expected_file), data_dir, data[i].expected_file), "i:%d testUtilDataPath == 0\n", i); assert_nonzero(testUtilDataPath(expected_file, sizeof(expected_file), data_dir, data[i].expected_file), "i:%d testUtilDataPath == 0\n", i);
if (generate) { if (generate) {
printf(" /*%3d*/ { %s, %s, %d, %s, %d, %d, %d, %d, %d, %.8g, \"%s\", \"%s\", %d, \"%s\", \"%s\", \"%s\" },\n", printf(" /*%3d*/ { %s, %s, %d, %s, %d, %d, %d, %d, %d, %d, %.8g, \"%s\", \"%s\", %d, \"%s\", \"%s\", \"%s\" },\n",
i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), data[i].border_width, i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), data[i].border_width,
testUtilOutputOptionsName(data[i].output_options), data[i].whitespace_width, data[i].whitespace_height, data[i].show_hrt, testUtilOutputOptionsName(data[i].output_options), data[i].whitespace_width, data[i].whitespace_height, data[i].show_hrt,
data[i].option_1, data[i].option_2, data[i].height, data[i].fgcolour, data[i].bgcolour, data[i].rotate_angle, data[i].option_1, data[i].option_2, data[i].option_3, data[i].height, data[i].fgcolour, data[i].bgcolour, data[i].rotate_angle,
testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].composite, data[i].expected_file); testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].composite, data[i].expected_file);
ret = testUtilRename(symbol->outfile, expected_file); ret = testUtilRename(symbol->outfile, expected_file);
assert_zero(ret, "i:%d testUtilRename(%s, %s) ret %d != 0\n", i, symbol->outfile, expected_file, ret); assert_zero(ret, "i:%d testUtilRename(%s, %s) ret %d != 0\n", i, symbol->outfile, expected_file, ret);
@ -196,7 +199,7 @@ static void test_print(int index, int generate, int debug) {
assert_zero(ret, "i:%d %s libreoffice %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret); assert_zero(ret, "i:%d %s libreoffice %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret);
} }
if (have_vnu) { if (have_vnu) {
ret = testUtilVerifyVnu(expected_file, debug); // Very slow ret = testUtilVerifyVnu(expected_file, debug); /* Very slow */
assert_zero(ret, "i:%d %s vnu libreoffice %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret); assert_zero(ret, "i:%d %s vnu libreoffice %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret);
} }
} else { } else {
@ -257,3 +260,5 @@ int main(int argc, char *argv[]) {
return 0; return 0;
} }
/* vim: set ts=4 sw=4 et : */

View File

@ -1167,12 +1167,12 @@ static void test_quiet_zones(int index, int debug) {
/* 48*/ { BARCODE_DPLEIT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 135, 310, 118.9, 20, 0, 2, 100 }, /* 48*/ { BARCODE_DPLEIT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 135, 310, 118.9, 20, 0, 2, 100 },
/* 49*/ { BARCODE_DPIDENT, -1, -1, -1, "1234", 0, 50, 1, 117, 234, 118.9, 0, 0, 2, 100 }, /* 49*/ { BARCODE_DPIDENT, -1, -1, -1, "1234", 0, 50, 1, 117, 234, 118.9, 0, 0, 2, 100 },
/* 50*/ { BARCODE_DPIDENT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 117, 274, 118.9, 20, 0, 2, 100 }, /* 50*/ { BARCODE_DPIDENT, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 117, 274, 118.9, 20, 0, 2, 100 },
/* 51*/ { BARCODE_CODE16K, -1, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 20, 2, 6, 20 }, /* 51*/ { BARCODE_CODE16K, -1, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 20, 2, 6, 19 },
/* 52*/ { BARCODE_CODE16K, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 20, 2, 6, 20 }, /* 52*/ { BARCODE_CODE16K, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 20, 2, 6, 19 },
/* 53*/ { BARCODE_CODE16K, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 140, 44, 0, 2, 6, 20 }, /* 53*/ { BARCODE_CODE16K, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 140, 44, 0, 2, 6, 19 },
/* 54*/ { BARCODE_CODE49, -1, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 20, 2, 2, 40 }, /* 54*/ { BARCODE_CODE49, -1, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 20, 2, 2, 19 },
/* 55*/ { BARCODE_CODE49, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 20, 2, 2, 40 }, /* 55*/ { BARCODE_CODE49, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 162, 44, 20, 2, 2, 19 },
/* 56*/ { BARCODE_CODE49, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 140, 44, 0, 2, 2, 40 }, /* 56*/ { BARCODE_CODE49, BARCODE_NO_QUIET_ZONES, -1, -1, "1234", 0, 20, 2, 70, 140, 44, 0, 2, 2, 19 },
/* 57*/ { BARCODE_CODE93, -1, -1, -1, "1234", 0, 50, 1, 73, 146, 118.9, 0, 0, 2, 100 }, /* 57*/ { BARCODE_CODE93, -1, -1, -1, "1234", 0, 50, 1, 73, 146, 118.9, 0, 0, 2, 100 },
/* 58*/ { BARCODE_CODE93, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 73, 186, 118.9, 20, 0, 2, 100 }, /* 58*/ { BARCODE_CODE93, BARCODE_QUIET_ZONES, -1, -1, "1234", 0, 50, 1, 73, 186, 118.9, 20, 0, 2, 100 },
/* 59*/ { BARCODE_FLAT, -1, -1, -1, "1234", 0, 50, 1, 36, 72, 100, 0, 0, 2, 100 }, /* 59*/ { BARCODE_FLAT, -1, -1, -1, "1234", 0, 50, 1, 36, 72, 100, 0, 0, 2, 100 },

View File

@ -1,6 +1,6 @@
--- /home/mburke/code/gitlost/postscriptbarcode/build/monolithic/barcode.ps 2022-07-25 02:58:57.291864362 +0100 --- /home/mburke/code/gitlost/postscriptbarcode/build/monolithic/barcode.ps 2022-08-07 21:25:25.243853138 +0100
+++ backend/tests/tools/bwipp_dump.ps 2022-07-25 03:00:12.937844813 +0100 +++ backend/tests/tools/bwipp_dump.ps 2022-08-07 21:28:28.580645899 +0100
@@ -16909,8 +16909,8 @@ @@ -16846,8 +16846,8 @@
} bind } bind
/fime { /fime {
/sbs [2.25 6.75 2.25 15.75 2.25 6.75 2.25] def /sbs [2.25 6.75 2.25 15.75 2.25 6.75 2.25] def
@ -11,7 +11,7 @@
} bind } bind
>> def >> def
@@ -28403,7 +28403,7 @@ @@ -28303,7 +28303,7 @@
pop pop
} ifelse } ifelse
@ -20,8 +20,8 @@
options (lintype) (ean13) put options (lintype) (ean13) put
options (inkspread) (0) put options (inkspread) (0) put
@@ -28443,27 +28443,73 @@ @@ -28317,27 +28317,73 @@
} if /ai //gs1process exec pop pop pop
% Plot the linear part % Plot the linear part
- linear options //ean13 exec //renlinear exec - linear options //ean13 exec //renlinear exec
@ -112,7 +112,7 @@
end end
@@ -28528,7 +28574,7 @@ @@ -28401,7 +28447,7 @@
pop pop
} ifelse } ifelse
@ -121,8 +121,8 @@
% Get the result of encoding with ean8 and gs1-cc % Get the result of encoding with ean8 and gs1-cc
options (lintype) (ean8) put options (lintype) (ean8) put
@@ -28569,29 +28615,75 @@ @@ -28416,29 +28462,75 @@
} if /ai //gs1process exec pop pop pop
% Plot the linear part % Plot the linear part
- linear options //ean8 exec //renlinear exec - linear options //ean8 exec //renlinear exec
@ -217,7 +217,7 @@
end end
@@ -28656,7 +28748,7 @@ @@ -28502,7 +28594,7 @@
pop pop
} ifelse } ifelse
@ -226,8 +226,8 @@
options (lintype) (ean13) put options (lintype) (ean13) put
options (inkspread) (0) put options (inkspread) (0) put
@@ -28696,27 +28788,73 @@ @@ -28516,27 +28608,73 @@
} if /ai //gs1process exec pop pop pop
% Plot the linear part % Plot the linear part
- linear options //upca exec //renlinear exec - linear options //upca exec //renlinear exec
@ -318,7 +318,7 @@
end end
@@ -28796,7 +28934,7 @@ @@ -28615,7 +28753,7 @@
/opt options /opt options
>> def >> def
@ -327,8 +327,8 @@
options (lintype) (upce) put options (lintype) (upce) put
options (inkspread) (0) put options (inkspread) (0) put
@@ -28836,27 +28974,73 @@ @@ -28629,27 +28767,73 @@
} if /ai //gs1process exec pop pop pop
% Plot the linear part % Plot the linear part
- linear options //upce exec //renlinear exec - linear options //upce exec //renlinear exec
@ -419,7 +419,7 @@
end end
@@ -28921,7 +29105,7 @@ @@ -28713,7 +28897,7 @@
pop pop
} ifelse } ifelse
@ -428,7 +428,7 @@
options (lintype) (databaromni) put options (lintype) (databaromni) put
options (linkage) true put options (linkage) true put
@@ -28965,7 +29149,7 @@ @@ -28731,7 +28915,7 @@
linear options //databaromni exec linear options //databaromni exec
dup (sbs) get /linsbs exch def dup (sbs) get /linsbs exch def
dup (bhs) get 0 get 72 mul /linheight exch def dup (bhs) get 0 get 72 mul /linheight exch def
@ -437,7 +437,7 @@
% Plot the separator % Plot the separator
/sepfinder { /sepfinder {
@@ -28996,20 +29180,66 @@ @@ -28762,20 +28946,66 @@
sep 0 [0 0 0] putinterval sep 0 [0 0 0] putinterval
sep sep length 4 sub [0 0 0 0] putinterval sep sep length 4 sub [0 0 0 0] putinterval
18 sepfinder 64 sepfinder 18 sepfinder 64 sepfinder
@ -516,7 +516,7 @@
end end
@@ -29073,7 +29303,7 @@ @@ -28838,7 +29068,7 @@
pop pop
} ifelse } ifelse
@ -525,7 +525,7 @@
options (lintype) (databarstacked) put options (lintype) (databarstacked) put
options (linkage) true put options (linkage) true put
@@ -29117,7 +29347,7 @@ @@ -28856,7 +29086,7 @@
linear options //databarstacked exec linear options //databarstacked exec
dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def
dup (pixy) get /linheight exch def dup (pixy) get /linheight exch def
@ -534,7 +534,7 @@
% Plot the separator % Plot the separator
/sepfinder { /sepfinder {
@@ -29145,20 +29375,52 @@ @@ -28884,20 +29114,52 @@
sep 0 [ 0 0 0 0 ] putinterval sep 0 [ 0 0 0 0 ] putinterval
sep sep length 4 sub [ 0 0 0 0 ] putinterval sep sep length 4 sub [ 0 0 0 0 ] putinterval
18 sepfinder 18 sepfinder
@ -599,7 +599,7 @@
end end
@@ -29222,7 +29484,7 @@ @@ -28960,7 +29222,7 @@
pop pop
} ifelse } ifelse
@ -608,7 +608,7 @@
options (lintype) (databarstackedomni) put options (lintype) (databarstackedomni) put
options (linkage) true put options (linkage) true put
@@ -29266,7 +29528,7 @@ @@ -28978,7 +29240,7 @@
linear options //databarstackedomni exec linear options //databarstackedomni exec
dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def
dup (pixy) get /linheight exch def dup (pixy) get /linheight exch def
@ -617,7 +617,7 @@
% Plot the separator % Plot the separator
/sepfinder { /sepfinder {
@@ -29294,20 +29556,52 @@ @@ -29006,20 +29268,52 @@
sep 0 [ 0 0 0 0 ] putinterval sep 0 [ 0 0 0 0 ] putinterval
sep sep length 4 sub [ 0 0 0 0 ] putinterval sep sep length 4 sub [ 0 0 0 0 ] putinterval
18 sepfinder 18 sepfinder
@ -682,7 +682,7 @@
end end
@@ -29525,7 +29819,7 @@ @@ -29209,7 +29503,7 @@
pop pop
} ifelse } ifelse
@ -691,7 +691,7 @@
options (lintype) (databarlimited) put options (lintype) (databarlimited) put
options (linkage) true put options (linkage) true put
@@ -29569,7 +29863,7 @@ @@ -29227,7 +29521,7 @@
linear options //databarlimited exec linear options //databarlimited exec
dup (sbs) get /linsbs exch def dup (sbs) get /linsbs exch def
dup (bhs) get 0 get 72 mul /linheight exch def dup (bhs) get 0 get 72 mul /linheight exch def
@ -700,7 +700,7 @@
% Plot the separator % Plot the separator
mark mark
@@ -29577,22 +29871,68 @@ @@ -29235,22 +29529,68 @@
counttomark 1 sub array astore /sep exch def pop pop counttomark 1 sub array astore /sep exch def pop pop
sep 0 [0 0 0] putinterval sep 0 [0 0 0] putinterval
sep sep length 9 sub [0 0 0 0 0 0 0 0 0] putinterval % 4 + 5 right guard spaces sep sep length 9 sub [0 0 0 0 0 0 0 0 0] putinterval % 4 + 5 right guard spaces
@ -783,7 +783,7 @@
end end
@@ -29657,7 +29997,7 @@ @@ -29314,7 +29654,7 @@
pop pop
} ifelse } ifelse
@ -792,7 +792,7 @@
options (lintype) (databarexpanded) put options (lintype) (databarexpanded) put
options (linkage) true put options (linkage) true put
@@ -29701,7 +30041,7 @@ @@ -29332,7 +29672,7 @@
linear options //databarexpanded exec linear options //databarexpanded exec
dup (sbs) get /linsbs exch def dup (sbs) get /linsbs exch def
dup (bhs) get 0 get 72 mul /linheight exch def dup (bhs) get 0 get 72 mul /linheight exch def
@ -801,7 +801,7 @@
% Plot the separator % Plot the separator
/sepfinder { /sepfinder {
@@ -29730,20 +30070,60 @@ @@ -29361,20 +29701,60 @@
18 98 bot length 13 sub {} for 18 98 bot length 13 sub {} for
69 98 bot length 13 sub {} for 69 98 bot length 13 sub {} for
] {sepfinder} forall ] {sepfinder} forall
@ -874,7 +874,7 @@
end end
@@ -29807,7 +30187,7 @@ @@ -29437,7 +29817,7 @@
pop pop
} ifelse } ifelse
@ -883,7 +883,7 @@
options (lintype) (databarexpandedstacked) put options (lintype) (databarexpandedstacked) put
options (linkage) true put options (linkage) true put
@@ -29851,7 +30231,7 @@ @@ -29455,7 +29835,7 @@
linear options //databarexpandedstacked exec linear options //databarexpandedstacked exec
dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def dup (pixs) get 0 2 index (pixx) get getinterval /bot exch def
dup (pixy) get /linheight exch def dup (pixy) get /linheight exch def
@ -892,7 +892,7 @@
% Plot the separator % Plot the separator
/sepfinder { /sepfinder {
@@ -29877,21 +30257,49 @@ @@ -29481,21 +29861,49 @@
19 98 bot length 13 sub {} for 19 98 bot length 13 sub {} for
70 98 bot length 13 sub {} for 70 98 bot length 13 sub {} for
] {sepfinder} forall ] {sepfinder} forall
@ -955,7 +955,7 @@
end end
@@ -29956,7 +30364,7 @@ @@ -29559,7 +29967,7 @@
pop pop
} ifelse } ifelse
@ -964,7 +964,7 @@
options (inkspread) (0) put options (inkspread) (0) put
options (dontdraw) true put options (dontdraw) true put
@@ -30016,35 +30424,87 @@ @@ -29593,35 +30001,87 @@
linear << options {} forall >> //gs1-128 exec linear << options {} forall >> //gs1-128 exec
dup (sbs) get /linsbs exch def dup (sbs) get /linsbs exch def
dup (bhs) get 0 get 72 mul /linheight exch def dup (bhs) get 0 get 72 mul /linheight exch def
@ -1066,7 +1066,7 @@
end end
@@ -31752,3 +32212,189 @@ @@ -31105,3 +31565,189 @@
% --END ENCODER hibcazteccode-- % --END ENCODER hibcazteccode--
% --END TEMPLATE-- % --END TEMPLATE--

View File

@ -405,8 +405,9 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
int text_height; /* Font pixel size (so whole integers) */ int text_height; /* Font pixel size (so whole integers) */
float text_gap; /* Gap between barcode and text */ float text_gap; /* Gap between barcode and text */
float guard_descent; float guard_descent;
float addon_row_height; const int is_codablockf = symbol->symbology == BARCODE_CODABLOCKF || symbol->symbology == BARCODE_HIBC_BLOCKF;
float addon_row_height;
float large_bar_height; float large_bar_height;
int upcae_outside_text_height = 0; /* UPC-A/E outside digits font size */ int upcae_outside_text_height = 0; /* UPC-A/E outside digits font size */
float digit_ascent_factor = 0.25f; /* Assuming digit ascent roughly 25% less than font size */ float digit_ascent_factor = 0.25f; /* Assuming digit ascent roughly 25% less than font size */
@ -420,6 +421,9 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
struct zint_vector_hexagon *hexagon, *last_hexagon = NULL; struct zint_vector_hexagon *hexagon, *last_hexagon = NULL;
struct zint_vector_string *last_string = NULL; struct zint_vector_string *last_string = NULL;
struct zint_vector_circle *circle, *last_circle = NULL; struct zint_vector_circle *circle, *last_circle = NULL;
struct zint_vector_rect **first_row_rects = z_alloca(sizeof(struct zint_vector_rect *) * (symbol->rows + 1));
memset(first_row_rects, 0, sizeof(struct zint_vector_rect *) * (symbol->rows + 1));
/* Free any previous rendering structures */ /* Free any previous rendering structures */
vector_free(symbol); vector_free(symbol);
@ -638,6 +642,9 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
rect = vector_plot_create_rect(symbol, i + xoffset, yposn, block_width, row_height); rect = vector_plot_create_rect(symbol, i + xoffset, yposn, block_width, row_height);
if (!rect) return ZINT_ERROR_MEMORY; if (!rect) return ZINT_ERROR_MEMORY;
vector_plot_add_rect(symbol, rect, &last_rectangle); vector_plot_add_rect(symbol, rect, &last_rectangle);
if (i == 0) {
first_row_rects[r] = rect;
}
} }
} }
yposn += row_height; yposn += row_height;
@ -854,16 +861,40 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
if ((symbol->output_options & BARCODE_BIND) && (symbol->rows > 1) && is_stackable(symbol->symbology)) { if ((symbol->output_options & BARCODE_BIND) && (symbol->rows > 1) && is_stackable(symbol->symbology)) {
float sep_xoffset = xoffset; float sep_xoffset = xoffset;
float sep_width = symbol->width; float sep_width = symbol->width;
float sep_height = 1.0f, sep_yoffset; float sep_height = 1.0f, sep_yoffset, sep_half_height;
if (symbol->option_3 > 0 && symbol->option_3 <= 4) { if (symbol->option_3 > 0 && symbol->option_3 <= 4) {
sep_height = symbol->option_3; sep_height = symbol->option_3;
} }
sep_yoffset = yoffset - sep_height / 2; sep_half_height = sep_height / 2.0f;
if (symbol->symbology == BARCODE_CODABLOCKF || symbol->symbology == BARCODE_HIBC_BLOCKF) { sep_yoffset = yoffset - sep_half_height;
if (is_codablockf) {
/* Avoid 11-module start and 13-module stop chars */ /* Avoid 11-module start and 13-module stop chars */
sep_xoffset += 11; sep_xoffset += 11;
sep_width -= 11 + 13; sep_width -= 11 + 13;
} }
/* Adjust original rectangles so don't overlap with separator(s) (important for RGBA) */
for (r = 0; r < symbol->rows; r++) {
for (rect = first_row_rects[r], i = 0; rect && rect != first_row_rects[r + 1]; rect = rect->next, i++) {
if (is_codablockf) { /* Skip start and stop chars */
if (i < 3) {
continue;
}
if ((i / 3) * 11 + 13 >= symbol->width) { /* 3 bars and 11 modules per char */
break;
}
}
if (r != 0) {
rect->y += sep_height - sep_half_height;
rect->height -= r + 1 == symbol->rows ? sep_half_height : sep_height;
} else {
rect->height -= sep_half_height;
}
if (rect->height < 0) {
rect->height = 0.0f;
/* TODO: warn? */
}
}
}
for (r = 1; r < symbol->rows; r++) { for (r = 1; r < symbol->rows; r++) {
const float row_height = symbol->row_height[r - 1] ? symbol->row_height[r - 1] : large_bar_height; const float row_height = symbol->row_height[r - 1] ? symbol->row_height[r - 1] : large_bar_height;
rect = vector_plot_create_rect(symbol, sep_xoffset, (r * row_height) + sep_yoffset, rect = vector_plot_create_rect(symbol, sep_xoffset, (r * row_height) + sep_yoffset,
@ -886,8 +917,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
/* Top */ /* Top */
rect = vector_plot_create_rect(symbol, 0.0f, ybind_top, vector->width, symbol->border_width); rect = vector_plot_create_rect(symbol, 0.0f, ybind_top, vector->width, symbol->border_width);
if (!rect) return ZINT_ERROR_MEMORY; if (!rect) return ZINT_ERROR_MEMORY;
if (!(symbol->output_options & BARCODE_BOX) if (!(symbol->output_options & BARCODE_BOX) && is_codablockf) {
&& (symbol->symbology == BARCODE_CODABLOCKF || symbol->symbology == BARCODE_HIBC_BLOCKF)) {
/* CodaBlockF bind - does not extend over horizontal whitespace */ /* CodaBlockF bind - does not extend over horizontal whitespace */
rect->x = xoffset; rect->x = xoffset;
rect->width -= xoffset + roffset; rect->width -= xoffset + roffset;
@ -896,8 +926,7 @@ INTERNAL int plot_vector(struct zint_symbol *symbol, int rotate_angle, int file_
/* Bottom */ /* Bottom */
rect = vector_plot_create_rect(symbol, 0.0f, ybind_bot, vector->width, symbol->border_width); rect = vector_plot_create_rect(symbol, 0.0f, ybind_bot, vector->width, symbol->border_width);
if (!rect) return ZINT_ERROR_MEMORY; if (!rect) return ZINT_ERROR_MEMORY;
if (!(symbol->output_options & BARCODE_BOX) if (!(symbol->output_options & BARCODE_BOX) && is_codablockf) {
&& (symbol->symbology == BARCODE_CODABLOCKF || symbol->symbology == BARCODE_HIBC_BLOCKF)) {
/* CodaBlockF bind - does not extend over horizontal whitespace */ /* CodaBlockF bind - does not extend over horizontal whitespace */
rect->x = xoffset; rect->x = xoffset;
rect->width -= xoffset + roffset; rect->width -= xoffset + roffset;

View File

@ -24,11 +24,10 @@
//#include <QDebug> //#include <QDebug>
#include "qzint.h" #include "qzint.h"
#include <stdio.h>
#include <math.h> #include <math.h>
#include <stdio.h>
#include <QFontMetrics> #include <QFontMetrics>
/* the following include was necessary to compile with Qt 5.15 on Windows */ /* The following include is necessary to compile with Qt 5.15 on Windows; Qt 5.7 did not require it */
/* Qt 5.7 did not require it. */
#include <QPainterPath> #include <QPainterPath>
// Shorthand // Shorthand
@ -103,7 +102,7 @@ namespace Zint {
QZintSeg::QZintSeg(const QString& text, const int ECIIndex) : m_text(text), m_eci(ECIIndexToECI(ECIIndex)) {} QZintSeg::QZintSeg(const QString& text, const int ECIIndex) : m_text(text), m_eci(ECIIndexToECI(ECIIndex)) {}
QZint::QZint() QZint::QZint()
: m_zintSymbol(NULL), m_symbol(BARCODE_CODE128), m_input_mode(UNICODE_MODE), : m_zintSymbol(nullptr), m_symbol(BARCODE_CODE128), m_input_mode(UNICODE_MODE),
m_height(0.0f), m_height(0.0f),
m_option_1(-1), m_option_2(0), m_option_3(0), m_option_1(-1), m_option_2(0), m_option_3(0),
m_scale(1.0f), m_scale(1.0f),
@ -135,16 +134,33 @@ namespace Zint {
} }
void QZint::resetSymbol() { void QZint::resetSymbol() {
if (m_zintSymbol) m_error = 0;
ZBarcode_Delete(m_zintSymbol);
m_lastError.clear(); m_lastError.clear();
m_zintSymbol = ZBarcode_Create();
m_zintSymbol->output_options |= m_borderType | m_fontSetting; if (m_zintSymbol) {
ZBarcode_Clear(m_zintSymbol);
} else if (!(m_zintSymbol = ZBarcode_Create())) {
m_error = ZINT_ERROR_MEMORY;
m_lastError = QSL("Insufficient memory for Zint structure");
return;
}
m_zintSymbol->symbology = m_symbol; m_zintSymbol->symbology = m_symbol;
m_zintSymbol->height = m_height; m_zintSymbol->height = m_height;
m_zintSymbol->scale = m_scale;
m_zintSymbol->whitespace_width = m_whitespace; m_zintSymbol->whitespace_width = m_whitespace;
m_zintSymbol->whitespace_height = m_vwhitespace; m_zintSymbol->whitespace_height = m_vwhitespace;
m_zintSymbol->border_width = m_borderWidth;
m_zintSymbol->output_options = m_borderType | m_fontSetting;
if (m_dotty) {
m_zintSymbol->output_options |= BARCODE_DOTTY_MODE;
}
if (m_cmyk) {
m_zintSymbol->output_options |= CMYK_COLOUR;
}
if (m_gssep) {
m_zintSymbol->output_options |= GS1_GS_SEPARATOR;
}
if (m_quiet_zones) { if (m_quiet_zones) {
m_zintSymbol->output_options |= BARCODE_QUIET_ZONES; m_zintSymbol->output_options |= BARCODE_QUIET_ZONES;
} }
@ -154,39 +170,9 @@ namespace Zint {
if (m_compliant_height) { if (m_compliant_height) {
m_zintSymbol->output_options |= COMPLIANT_HEIGHT; m_zintSymbol->output_options |= COMPLIANT_HEIGHT;
} }
m_zintSymbol->border_width = m_borderWidth;
m_zintSymbol->option_1 = m_option_1;
m_zintSymbol->option_2 = m_option_2;
m_zintSymbol->option_3 = m_option_3;
m_zintSymbol->input_mode = m_input_mode;
if (m_dotty) {
m_zintSymbol->output_options |= BARCODE_DOTTY_MODE;
}
m_zintSymbol->dot_size = m_dot_size;
m_zintSymbol->guard_descent = m_guardDescent;
m_zintSymbol->structapp = m_structapp;
m_zintSymbol->show_hrt = m_show_hrt ? 1 : 0;
m_zintSymbol->eci = m_eci;
m_zintSymbol->scale = m_scale;
if (m_gs1parens) {
m_zintSymbol->input_mode |= GS1PARENS_MODE;
}
if (m_gs1nocheck) {
m_zintSymbol->input_mode |= GS1NOCHECK_MODE;
}
if (m_gssep) {
m_zintSymbol->output_options |= GS1_GS_SEPARATOR;
}
if (m_reader_init) { if (m_reader_init) {
m_zintSymbol->output_options |= READER_INIT; m_zintSymbol->output_options |= READER_INIT;
} }
if (m_warn_level) {
m_zintSymbol->warn_level = m_warn_level;
}
if (m_debug) {
m_zintSymbol->debug |= ZINT_DEBUG_PRINT;
}
strcpy(m_zintSymbol->fgcolour, m_fgColor.name().toLatin1().right(6)); strcpy(m_zintSymbol->fgcolour, m_fgColor.name().toLatin1().right(6));
if (m_fgColor.alpha() != 0xFF) { if (m_fgColor.alpha() != 0xFF) {
strcat(m_zintSymbol->fgcolour, m_fgColor.name(QColor::HexArgb).toLatin1().mid(1,2)); strcat(m_zintSymbol->fgcolour, m_fgColor.name(QColor::HexArgb).toLatin1().mid(1,2));
@ -195,10 +181,24 @@ namespace Zint {
if (m_bgColor.alpha() != 0xFF) { if (m_bgColor.alpha() != 0xFF) {
strcat(m_zintSymbol->bgcolour, m_bgColor.name(QColor::HexArgb).toLatin1().mid(1,2)); strcat(m_zintSymbol->bgcolour, m_bgColor.name(QColor::HexArgb).toLatin1().mid(1,2));
} }
if (m_cmyk) {
m_zintSymbol->output_options |= CMYK_COLOUR;
}
strcpy(m_zintSymbol->primary, m_primaryMessage.toLatin1().left(127)); strcpy(m_zintSymbol->primary, m_primaryMessage.toLatin1().left(127));
m_zintSymbol->option_1 = m_option_1;
m_zintSymbol->option_2 = m_option_2;
m_zintSymbol->option_3 = m_option_3;
m_zintSymbol->show_hrt = m_show_hrt ? 1 : 0;
m_zintSymbol->input_mode = m_input_mode;
if (m_gs1parens) {
m_zintSymbol->input_mode |= GS1PARENS_MODE;
}
if (m_gs1nocheck) {
m_zintSymbol->input_mode |= GS1NOCHECK_MODE;
}
m_zintSymbol->eci = m_eci;
m_zintSymbol->dot_size = m_dot_size;
m_zintSymbol->guard_descent = m_guardDescent;
m_zintSymbol->structapp = m_structapp;
m_zintSymbol->warn_level = m_warn_level;
m_zintSymbol->debug = m_debug ? ZINT_DEBUG_PRINT : 0;
} }
void QZint::encode() { void QZint::encode() {
@ -812,9 +812,7 @@ namespace Zint {
rect = m_zintSymbol->vector->rectangles; rect = m_zintSymbol->vector->rectangles;
if (rect) { if (rect) {
int maxRight = -1, maxBottom = -1; // Used for fudging below int maxRight = -1, maxBottom = -1; // Used for fudging below
if (borderWidth() && (borderType() & (BARCODE_BIND | BARCODE_BOX))) {
getMaxRectsRightBottom(m_zintSymbol->vector, maxRight, maxBottom); getMaxRectsRightBottom(m_zintSymbol->vector, maxRight, maxBottom);
}
QBrush brush(Qt::SolidPattern); QBrush brush(Qt::SolidPattern);
while (rect) { while (rect) {
if (rect->colour == -1) { if (rect->colour == -1) {

View File

@ -39,6 +39,16 @@ be set based on data</string>
</attribute> </attribute>
</widget> </widget>
</item> </item>
<item row="0" column="1">
<widget class="QLineEdit" name="txtAztecAutoInfo">
<property name="frame">
<bool>false</bool>
</property>
<property name="readonly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QRadioButton" name="radAztecSize"> <widget class="QRadioButton" name="radAztecSize">
<property name="text"> <property name="text">

View File

@ -39,6 +39,16 @@ based on data</string>
</attribute> </attribute>
</widget> </widget>
</item> </item>
<item row="0" column="1">
<widget class="QLineEdit" name="txtUltraAutoInfo">
<property name="frame">
<bool>false</bool>
</property>
<property name="readonly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QRadioButton" name="radUltraEcc"> <widget class="QRadioButton" name="radUltraEcc">
<property name="text"> <property name="text">

View File

@ -860,6 +860,7 @@ void MainWindow::open_data_dialog_seg(const int seg_no)
} }
disconnect(&dlg, SIGNAL(dataChanged(const QString&, bool, int)), this, disconnect(&dlg, SIGNAL(dataChanged(const QString&, bool, int)), this,
SLOT(on_dataChanged(const QString&, bool, int))); SLOT(on_dataChanged(const QString&, bool, int)));
update_preview();
} }
void MainWindow::open_data_dialog() void MainWindow::open_data_dialog()
@ -1155,14 +1156,18 @@ void MainWindow::on_encoded()
if (QApplication::activeModalWidget() != nullptr) { // Protect against encode in popup dialog if (QApplication::activeModalWidget() != nullptr) { // Protect against encode in popup dialog
return; return;
} }
enableActions(true); enableActions();
errtxtBar_set(false /*isError*/); errtxtBar_set();
if (!chkAutoHeight->isEnabled() || chkAutoHeight->isChecked() || !heightb->isEnabled()) { if (!chkAutoHeight->isEnabled() || chkAutoHeight->isChecked() || !heightb->isEnabled()) {
/* setValue() rounds up/down to precision (decimals 3), we want round up only */ /* setValue() rounds up/down to precision (decimals 3), we want round up only */
float height = (float) (ceil(m_bc.bc.height() * 1000.0f) / 1000.0f); float height = (float) (ceil(m_bc.bc.height() * 1000.0f) / 1000.0f);
heightb->setValue(height); heightb->setValue(height);
} }
if (m_optionWidget) {
automatic_info_set();
}
} }
void MainWindow::on_errored() void MainWindow::on_errored()
@ -1170,8 +1175,11 @@ void MainWindow::on_errored()
if (QApplication::activeModalWidget() != nullptr) { // Protect against error in popup dialog (Sequence Export) if (QApplication::activeModalWidget() != nullptr) { // Protect against error in popup dialog (Sequence Export)
return; return;
} }
enableActions(false); enableActions();
errtxtBar_set(true /*isError*/); errtxtBar_set();
if (m_optionWidget) {
automatic_info_set();
}
} }
void MainWindow::filter_symbologies() void MainWindow::filter_symbologies()
@ -3026,8 +3034,9 @@ void MainWindow::createMenu()
m_menu->addAction(m_quitAct); m_menu->addAction(m_quitAct);
} }
void MainWindow::enableActions(bool enabled) void MainWindow::enableActions()
{ {
const bool enabled = m_bc.bc.getError() < ZINT_ERROR;
btnCopyBMP->setEnabled(enabled); btnCopyBMP->setEnabled(enabled);
btnCopySVG->setEnabled(enabled); btnCopySVG->setEnabled(enabled);
btnSave->setEnabled(enabled); btnSave->setEnabled(enabled);
@ -3101,8 +3110,9 @@ void MainWindow::errtxtBar_clear()
} }
} }
void MainWindow::errtxtBar_set(bool isError) void MainWindow::errtxtBar_set()
{ {
const bool isError = m_bc.bc.getError() >= ZINT_ERROR;
if (!m_bc.bc.hasErrors()) { if (!m_bc.bc.hasErrors()) {
errtxtBar_clear(); errtxtBar_clear();
view->setMinimumSize(QSize(0, 35)); view->setMinimumSize(QSize(0, 35));
@ -3120,6 +3130,267 @@ void MainWindow::errtxtBar_set(bool isError)
} }
} }
void MainWindow::automatic_info_set()
{
if (!m_optionWidget) {
return;
}
const int symbology = bstyle_items[bstyle->currentIndex()].symbology;
const bool isError = m_bc.bc.getError() >= ZINT_ERROR;
QLineEdit *txt;
QComboBox *cmb;
if (symbology == BARCODE_AZTEC || symbology == BARCODE_HIBC_AZTEC) {
if ((txt = m_optionWidget->findChild<QLineEdit*>(QSL("txtAztecAutoInfo")))) {
if (!isError && !get_rad_val(QSL("radAztecSize"))) {
const int w = m_bc.bc.encodedWidth();
if (w <= 27) { // Note Zint always favours Compact on automatic
txt->setText(QString::asprintf("(%d X %d Compact)", w, w));
} else {
txt->setText(QString::asprintf("(%d X %d (%d Layers))", w, w, (w - 15) / 4));
}
} else {
txt->setText(QSL(""));
}
}
} else if (symbology == BARCODE_CHANNEL) {
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbChannel")))) {
if (!isError && cmb->currentIndex() == 0) {
const int channels = (m_bc.bc.encodedWidth() - 7) / 4;
cmb->setItemText(0, QString::asprintf("Automatic (%d)", channels));
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
} else if (symbology == BARCODE_CODABLOCKF || symbology == BARCODE_HIBC_BLOCKF) {
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbCbfWidth")))) {
if (!isError && cmb->currentIndex() == 0) {
const int data = (m_bc.bc.encodedWidth() - 57) / 11;
cmb->setItemText(0, QString::asprintf("Automatic (%d (%d data))", data + 5, data));
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbCbfHeight")))) {
if (!isError && cmb->currentIndex() == 0) {
cmb->setItemText(0, QString::asprintf("Automatic (%d)", m_bc.bc.encodedRows()));
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
} else if (symbology == BARCODE_CODE16K) {
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbC16kRows")))) {
if (!isError && cmb->currentIndex() == 0) {
cmb->setItemText(0, QString::asprintf("Automatic (%d)", m_bc.bc.encodedRows()));
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
} else if (symbology == BARCODE_CODE49) {
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbC49Rows")))) {
if (!isError && cmb->currentIndex() == 0) {
cmb->setItemText(0, QString::asprintf("Automatic (%d)", m_bc.bc.encodedRows()));
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
} else if (symbology == BARCODE_CODEONE) {
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbC1Size")))) {
if (!isError && cmb->currentIndex() == 0) {
const int r = m_bc.bc.encodedRows();
const int w = m_bc.bc.encodedWidth();
// Note Versions S & T not used by Zint in automatic mode
static const char vers[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' };
int idx;
if (r <= 40) {
idx = (r == 22) + (r == 28) * 2 + (r == 40) * 3;
} else {
idx = (r == 70) + (r == 104) * 2 + (r == 148) * 3 + 4;
}
cmb->setItemText(0, QString::asprintf("Automatic (%d X %d (Version %c))", r, w, vers[idx]));
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
} else if (symbology == BARCODE_DATAMATRIX || symbology == BARCODE_HIBC_DM) {
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbDM200Size")))) {
if (!isError && cmb->currentIndex() == 0) {
const int r = m_bc.bc.encodedRows();
const int w = m_bc.bc.encodedWidth();
int z = 0;
if (r == w) {
if (r <= 26) {
z = (r - 8) / 2;
} else if (r <= 52) {
z = 10 + (r - 32) / 4;
} else if (r <= 104) {
z = 16 + (r - 64) / 8;
} else {
z = 22 + (r - 120) / 12;
}
cmb->setItemText(0, QString::asprintf("Automatic (%d x %d (Zint %d))", r, w, z));
} else if ((r == 8 && (w == 18 || w == 32)) || (r == 12 && (w == 26 || w == 36))
|| (r == 16 && (w == 36 || w == 48))) {
z = 25 + (w == 32) + (w == 26) * 2 + (r == 12 && w == 36) * 3
+ (r == 16 && w == 36) * 4 + (w == 48) * 5;
cmb->setItemText(0, QString::asprintf("Automatic (%d x %d (Zint %d))", r, w, z));
} else { // DMRE
if (r == 8) {
z = 31 + (w == 64) + (w == 80) * 2 + (w == 96) * 3 + (w == 120) * 4 + (w == 144) * 5;
} else if (r == 12) {
z = 37 + (w == 88);
} else if (r == 16) {
z = 39;
} else if (r == 20) {
z = 40 + (w == 44) + (w == 64) * 2;
} else if (r == 22) {
z = 43;
} else if (r == 24) {
z = 44 + (w == 64);
} else { /* if (r == 26) */
z = 46 + (w == 48) + (w == 64) * 2;
}
cmb->setItemText(0, QString::asprintf("Automatic (%d x %d (DMRE) (Zint %d))", r, w, z));
}
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
} else if (symbology == BARCODE_DOTCODE) {
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbDotCols")))) {
if (!isError && cmb->currentIndex() == 0) {
cmb->setItemText(0, QString::asprintf("Automatic (%d)", m_bc.bc.encodedWidth()));
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
} else if (symbology == BARCODE_GRIDMATRIX) {
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbGridSize")))) {
if (!isError && cmb->currentIndex() == 0) {
const int r = m_bc.bc.encodedRows();
cmb->setItemText(0, QString::asprintf("Automatic (%d x %d (Version %d))", r, r, (r - 6) / 12));
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
} else if (symbology == BARCODE_HANXIN) {
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbHXSize")))) {
if (!isError && cmb->currentIndex() == 0) {
const int r = m_bc.bc.encodedRows();
cmb->setItemText(0, QString::asprintf("Automatic (%d x %d (Version %d))", r, r, (r - 21) / 2));
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
} else if (symbology == BARCODE_MICROPDF417 || symbology == BARCODE_HIBC_MICPDF) {
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbMPDFCols")))) {
if (!isError && cmb->currentIndex() == 0) {
const int w = m_bc.bc.encodedWidth();
int cols;
if (w == 38) {
cols = 1;
} else if (w == 55) {
cols = 2;
} else if (w == 82) {
cols = 3;
} else { /* if (w == 99) */
cols = 4;
}
cmb->setItemText(0, QString::asprintf("Automatic (%d)", cols));
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
} else if (symbology == BARCODE_MICROQR) {
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbMQRSize")))) {
if (!isError && cmb->currentIndex() == 0) {
const int r = m_bc.bc.encodedRows();
cmb->setItemText(0, QString::asprintf("Automatic (%d x %d (Version M%d))", r, r, (r - 9) / 2));
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
} else if (symbology == BARCODE_PDF417 || symbology == BARCODE_PDF417COMP || symbology == BARCODE_HIBC_PDF) {
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbPDFCols")))) {
if (!isError && cmb->currentIndex() == 0) {
const int w = m_bc.bc.encodedWidth();
const int overhead = get_rad_val(QSL("radPDFTruncated")) || symbology == BARCODE_PDF417COMP ? 35 : 69;
cmb->setItemText(0, QString::asprintf("Automatic (%d)", (w - overhead) / 17));
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbPDFRows")))) {
if (!isError && cmb->currentIndex() == 0) {
const int r = m_bc.bc.encodedRows();
cmb->setItemText(0, QString::asprintf("Automatic (%d)", r));
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
} else if (symbology == BARCODE_QRCODE || symbology == BARCODE_HIBC_QR) {
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbQRSize")))) {
if (!isError && cmb->currentIndex() == 0) {
const int r = m_bc.bc.encodedRows();
cmb->setItemText(0, QString::asprintf("Automatic (%d x %d (Version %d))", r, r, (r - 17) / 4));
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
} else if (symbology == BARCODE_RMQR) {
if ((cmb = m_optionWidget->findChild<QComboBox*>(QSL("cmbRMQRSize")))) {
if (!isError && cmb->currentIndex() == 0) {
const int r = m_bc.bc.encodedRows();
const int w = m_bc.bc.encodedWidth();
int z;
if (r == 11 || r == 13) {
z = 11 + (r == 13) * 6 + (w == 43) + (w == 59) * 2 + (w == 77) * 3 + (w == 99) * 4
+ (w == 139) * 5;
} else {
z = (w == 59) + (w == 77) * 2 + (w == 99) * 3 + (w == 139) * 4;
if (r == 7) {
z += 1;
} else if (r == 9) {
z += 6;
} else if (r == 15) {
z += 23;
} else { /* if (r == 17) */
z += 28;
}
}
cmb->setItemText(0, QString::asprintf("Automatic (R%dx%d (Zint %d))", r, w, z));
} else {
cmb->setItemText(0, QSL("Automatic"));
}
}
} else if (symbology == BARCODE_ULTRA) {
if ((txt = m_optionWidget->findChild<QLineEdit*>(QSL("txtUltraAutoInfo")))) {
if (!isError) {
const int w = m_bc.bc.encodedWidth();
const int r = m_bc.bc.encodedRows();
txt->setText(QString::asprintf("(%d X %d)", w, r));
} else {
txt->setText(QSL(""));
}
}
}
}
QPoint MainWindow::get_context_menu_pos(const QPoint &pos, QWidget *widget) QPoint MainWindow::get_context_menu_pos(const QPoint &pos, QWidget *widget)
{ {
QPoint menuPos(pos); QPoint menuPos(pos);

View File

@ -144,12 +144,14 @@ protected:
void createActions(); void createActions();
void createMenu(); void createMenu();
void enableActions(bool enabled); void enableActions();
void copy_to_clipboard(const QString &filename, const QString &name, const char *mimeType = nullptr); void copy_to_clipboard(const QString &filename, const QString &name, const char *mimeType = nullptr);
void errtxtBar_clear(); void errtxtBar_clear();
void errtxtBar_set(bool isError); void errtxtBar_set();
void automatic_info_set();
QLineEdit *get_seg_textbox(int seg_no); QLineEdit *get_seg_textbox(int seg_no);
QComboBox *get_seg_eci(int seg_no); QComboBox *get_seg_eci(int seg_no);