MAXICODE: fix shifting from sets C/D/E to A/B (only latch available)

This commit is contained in:
gitlost
2021-03-28 21:31:45 +01:00
parent 89518c4f01
commit 5187f2226d
9 changed files with 518 additions and 189 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 851 B

View File

@ -52,10 +52,10 @@ static void test_large(int index, int debug) {
/* 1*/ { -1, -1, "1", 139, "", ZINT_ERROR_TOO_LONG, -1, -1 },
/* 2*/ { -1, -1, "A", 93, "", 0, 33, 30 },
/* 3*/ { -1, -1, "A", 94, "", ZINT_ERROR_TOO_LONG, -1, -1 },
/* 4*/ { -1, -1, "\001", 91, "", 0, 33, 30 },
/* 5*/ { -1, -1, "\001", 92, "", ZINT_ERROR_TOO_LONG, -1, -1 },
/* 6*/ { -1, -1, "\200", 91, "", 0, 33, 30 },
/* 7*/ { -1, -1, "\200", 92, "", ZINT_ERROR_TOO_LONG, -1, -1 },
/* 4*/ { -1, -1, "\001", 90, "", 0, 33, 30 },
/* 5*/ { -1, -1, "\001", 91, "", ZINT_ERROR_TOO_LONG, -1, -1 },
/* 6*/ { -1, -1, "\200", 90, "", 0, 33, 30 },
/* 7*/ { -1, -1, "\200", 91, "", ZINT_ERROR_TOO_LONG, -1, -1 },
/* 8*/ { 2, -1, "1", 126, "123456789123123", 0, 33, 30 },
/* 9*/ { 2, -1, "1", 127, "123456789123123", ZINT_ERROR_TOO_LONG, -1, -1 },
/* 10*/ { 2, -1, "A", 84, "123456789123123", 0, 33, 30 },
@ -214,6 +214,8 @@ static void test_encode(int index, int generate, int debug) {
testStart("");
int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); // Only do BWIPP test if asked, too slow otherwise
int ret;
struct item {
int input_mode;
@ -226,11 +228,12 @@ static void test_encode(int index, int generate, int debug) {
int expected_rows;
int expected_width;
int bwipp_cmp;
char *comment;
char *expected;
};
struct item data[] = {
/* 0*/ { -1, -1, -1, "THIS IS A 93 CHARACTER CODE SET A MESSAGE THAT FILLS A MODE 4, UNAPPENDED, MAXICODE SYMBOL...", -1, "", 0, 33, 30, "ISO/IEC 16023:2000 Figure 2, same",
/* 0*/ { -1, -1, -1, "THIS IS A 93 CHARACTER CODE SET A MESSAGE THAT FILLS A MODE 4, UNAPPENDED, MAXICODE SYMBOL...", -1, "", 0, 33, 30, 1, "ISO/IEC 16023:2000 Figure 2, same",
"011111010000001000001000100111"
"000100000001000000001010000000"
"001011001100100110110010010010"
@ -265,7 +268,7 @@ static void test_encode(int index, int generate, int debug) {
"001001101111101101101010011100"
"001011000000111101100100001000"
},
/* 1*/ { -1, 4, -1, "MaxiCode (19 chars)", -1, "", 0, 33, 30, "ISO/IEC 16023:2000 Figure H1 **NOT SAME** different encodation (figure uses '3 Shift A' among other differences)",
/* 1*/ { -1, 4, -1, "MaxiCode (19 chars)", -1, "", 0, 33, 30, 0, "ISO/IEC 16023:2000 Figure H1 **NOT SAME** different encodation (figure uses '3 Shift A' among other differences); BWIPP different encodation again",
"001101011111011100000010101111"
"101100010001001100010000001100"
"101100001010001111001001111101"
@ -300,7 +303,7 @@ static void test_encode(int index, int generate, int debug) {
"010110010110001110100000010100"
"010011110011000001010111100111"
},
/* 2*/ { DATA_MODE | ESCAPE_MODE, 2, 96, "1Z00004951\\GUPSN\\G06X610\\G159\\G1234567\\G1/1\\G\\GY\\G634 ALPHA DR\\GPITTSBURGH\\GPA\\R\\E", -1, "152382802840001", 0, 33, 30, "ISO/IEC 16023:2000 Figure B2 **NOT SAME** uses different encodation (figure uses Latch B/Latch A instead of Shift B for '>\\R', and precedes PAD chars with Latch B)",
/* 2*/ { DATA_MODE | ESCAPE_MODE, 2, 96, "1Z00004951\\GUPSN\\G06X610\\G159\\G1234567\\G1/1\\G\\GY\\G634 ALPHA DR\\GPITTSBURGH\\GPA\\R\\E", -1, "152382802840001", 0, 33, 30, 0, "ISO/IEC 16023:2000 Figure B2 **NOT SAME** uses different encodation (figure uses Latch B/Latch A instead of Shift B for '>\\R', and precedes PAD chars with Latch B); BWIPP different encodation again",
"110101110110111110111111101111"
"010101010111000011011000010010"
"110110110001001010101010010011"
@ -335,7 +338,7 @@ static void test_encode(int index, int generate, int debug) {
"010110101101000001111000100110"
"110110100000010000001011110011"
},
/* 3*/ { -1, 3, -1, "CEN", -1, "B1050056999", 0, 33, 30, "ISO/IEC 16023:2000 B.1 Example (primary only given, data arbitrary); verified manually against BWIP and tec-it",
/* 3*/ { -1, 3, -1, "CEN", -1, "B1050056999", 0, 33, 30, 1, "ISO/IEC 16023:2000 B.1 Example (primary only given, data arbitrary); verified manually against tec-it",
"000000010101010101010101010111"
"001011000000000000000000000010"
"111001101010101010101010101000"
@ -370,7 +373,7 @@ static void test_encode(int index, int generate, int debug) {
"010010001001110010000101000010"
"010001011010000011010010011100"
},
/* 4*/ { UNICODE_MODE | ESCAPE_MODE, -1, -1, "Comité Européen de Normalisation\034rue de Stassart 36\034B-1050 BRUXELLES\034TEL +3225196811", -1, "", 0, 33, 30, "ISO/IEC 16023:2000 Example F.5 **NOT SAME** uses different encodation (2 Shift A among other things)",
/* 4*/ { UNICODE_MODE | ESCAPE_MODE, -1, -1, "Comité Européen de Normalisation\034rue de Stassart 36\034B-1050 BRUXELLES\034TEL +3225196811", -1, "", 0, 33, 30, 0, "ISO/IEC 16023:2000 Example F.5 **NOT SAME** uses different encodation (2 Shift A among other things); BWIPP different encodation again",
"010010100010110000000100001111"
"001010001100110110111110100110"
"001010011100101010011100100000"
@ -405,7 +408,7 @@ static void test_encode(int index, int generate, int debug) {
"001011110011100001001001101100"
"000010111011111010110011000011"
},
/* 5*/ { -1, -1, -1, "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", -1, "", 0, 33, 30, "Numeric compaction, verified manually against BWIPP and tec-it",
/* 5*/ { -1, -1, -1, "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999", -1, "", 0, 33, 30, 1, "Numeric compaction, verified manually against tec-it",
"010111101101010111101101010111"
"111011110110111011110110111010"
"001111111101001111111101001100"
@ -440,115 +443,362 @@ static void test_encode(int index, int generate, int debug) {
"111010101011001101111001011010"
"011110011111000011101011111011"
},
/* 6*/ { -1, 5, -1, "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\037\237\240\242\243\244\245\246\247\251\255\256\266\225\226\227\230\231\232\233\234\235\236", 51, "", 0, 33, 30, "Mode 5 set E; single difference from BWIPP - Zint uses Latch B at end before padding instead of Latch A",
/* 6*/ { -1, 5, -1, "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\037\237\240\242\243\244\245\246\247\251\255\256\266\225\226\227\230\231\232\233\234\235\236", 51, "", 0, 33, 30, 1, "Mode 5 set E",
"000000000000000000101010101011"
"100101010111111111000000001000"
"110010011100100111001001110001"
"010101010101011010101010101000"
"010110101010001101010110101000"
"100101010111111111000000001010"
"110010011100100111001001110010"
"010101010101011010101010101010"
"010110101010001101010110101001"
"100011011000110101100011011000"
"010101010101111111111111111110"
"010111111111000000001010101010"
"011100100111001001110010011101"
"010101011011110000001011111100"
"000000001111110010010011010100"
"101010100110000010001011100000"
"010101110010000000001101010100"
"010101011011110000001011111110"
"000000001111110010010001010110"
"101010100110000010001001100000"
"010101110010000000001101010111"
"000000111000000000001000000010"
"101010110100000000001110101011"
"010101010000000000001001010100"
"000000001000000000001000000001"
"101010100000000000001010101010"
"010101100000000000001001010100"
"101010100000000000001010101000"
"010101100000000000001001010110"
"000000000000000000000000000000"
"101010100100000000011110101010"
"101100110100000001110101100110"
"011100010010110101110111010011"
"110011100010110001001000101010"
"110001101111100011111110101000"
"111110010101110100010110100000"
"110001110000111101111111000011"
"111001000100001011001011011110"
"101010110110100001110011010011"
"100100100001001100000001100000"
"010101001001000001111101011111"
"110110111000001000001101100100"
"100100010010000000010001010111"
"101100110100000001110101110110"
"011000000010110101110111000011"
"110111000010110001001000011010"
"100001101111010001110110101000"
"111110011001100100010110010010"
"100011110000001110111011000001"
"111001000110000011101000011000"
"101110110100100001100011011111"
"101100010011001000110000101100"
"110101001101000000111101001111"
"100111110000101000000001110100"
"100101010010100000010101000111"
},
/* 7*/ { -1, 6, -1, "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377\241\250\253\257\260\264\267\270\273\277\212\213\214\215\216\217\220\221\222\223\224", -1, "", 0, 33, 30, "Mode 6 set D; single difference from BWIPP as above - Zint uses Latch B at end before padding instead of Latch A",
/* 7*/ { -1, 6, -1, "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377\241\250\253\257\260\264\267\270\273\277\212\213\214\215\216\217\220\221\222\223\224", -1, "", 0, 33, 30, 1, "Mode 6 set D",
"000000000000000000101010101011"
"100101010111111111000000001000"
"100101010111111111000000001010"
"110010011100100111001001110001"
"010101010101010110101010101000"
"010101010101010110101010101010"
"101010100000000001010110101000"
"110110001101100001100011011000"
"010101010101010111111111111111"
"010101011111111100000000101000"
"001001110010011100100111001001"
"010111110111110000000011111100"
"000011011011110010011101101000"
"101011101110000001000100110100"
"010101110000000000000001010100"
"010111110111110000000011111110"
"000001011011110010011101101011"
"101001101110000001000100110110"
"010101110000000000000001010110"
"000000101000000000000000000010"
"101010110100000000000110101010"
"010101010000000000001001010100"
"000000001000000000001000000011"
"101010100000000000001010101000"
"010101101100000000001001010110"
"101010100000000000001010101010"
"010101101100000000001001010111"
"000000101000000000001000000010"
"101010010110000000011010101001"
"010101011100000000111101010100"
"000000001110110111011000000011"
"101010100110110001100110101010"
"010101010101010101011101101100"
"000000000000000000001000010000"
"101010101010101010100110000001"
"101000111111101000101010110100"
"010100110011011001101100111001"
"100101010011111101011110000010"
"111101110110111101001001010101"
"011110000010110111001011110110"
"001110010110111101101011110010"
"010101010101010101011001011100"
"000000000000000000001000000000"
"101010101010101010101010100010"
"101100011100101000011001110100"
"011100110000010001111110111110"
"101101100000111001011101001010"
"001100111110101100001101010101"
"011111001010000101000011000110"
"101111010010011100100011110010"
},
/* 8*/ { -1, 6, -1, "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\252\254\261\262\263\265\271\272\274\275\276\200\201\202\203\204\205\206\207\210\211", -1, "", 0, 33, 30, "Mode 6 set C; single difference from BWIPP as above - Zint uses Latch B at end before padding instead of Latch A",
/* 8*/ { -1, 6, -1, "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\252\254\261\262\263\265\271\272\274\275\276\200\201\202\203\204\205\206\207\210\211", -1, "", 0, 33, 30, 1, "Mode 6 set C",
"000000000000000000101010101011"
"100101010111111111000000001000"
"100101010111111111000000001010"
"110010011100100111001001110001"
"010101010101010110101010101000"
"010101010101010110101010101010"
"101010100000000001010110101000"
"110110001101100001100011011000"
"010101010101010111111111111111"
"010101011111111100000000101000"
"001001110010011100100111001001"
"010111111111110000000111111100"
"000011010111110010010001101000"
"101011101010000001001100110100"
"010101100000000000000101010100"
"010111111111110000000111111110"
"000001010111110010010001101011"
"101001101010000001001100110110"
"010101100000000000000101010110"
"000000011000000000000100000010"
"101010110100000000000010101010"
"010101010000000000001001010100"
"000000001000000000001000000011"
"101010100000000000001010101000"
"010101110000000000001001010110"
"101010100000000000001010101010"
"010101110000000000001001010111"
"000000111100000000001100000010"
"101010110000000000010110101001"
"010101010100000000101101010100"
"000000001010110101011000000011"
"101010100010110001010110101010"
"010101010101010101011101101100"
"000000000000000000001000010000"
"101010101010101010100110000001"
"101000111111101000101010110100"
"010100110011011001101100111001"
"100101010011111101011110000010"
"111101110110111101001001010101"
"011110000010110111001011110110"
"001110010110111101101011110010"
"010101010101010101011001011100"
"000000000000000000001000000000"
"101010101010101010101010100010"
"101100011100101000011001110100"
"011100110000010001111110111110"
"101101100000111001011101001010"
"001100111110101100001101010101"
"011111001010000101000011000110"
"101111010010011100100011110010"
},
/* 9*/ { UNICODE_MODE, 4, -1, "ABCDabcdAabcABabcABCabcABCDaABCabABCabcABCéa", -1, "", 0, 33, 30, 1, "Mode 4 LCHB SHA 2SHA 3SHA LCHA SHB LCHB 3SHA 3SHA SHD",
"110000000011000000000011000011"
"010000000001000000000001000000"
"111010011100100110011110100101"
"000000001100000000110000000000"
"000000000110000000110000000010"
"110110101100110110111101101100"
"110000110000000000001100000000"
"110000010000000000000100000000"
"111001101001111001111010011110"
"010101010011000000001000001100"
"000000000001000010001000011111"
"101010100110000000010010101000"
"010101000010000000000001010101"
"000000001000000000101000000000"
"101010100000000000010010101010"
"010101011000000000001101010110"
"000000001000000000001000000001"
"101010001000000000001010101000"
"010101001100000000001001010111"
"000000111000000000011000000010"
"101010101000000000001110101000"
"010101010110000000010101010100"
"000000001110001111001100000001"
"101010101111000001101110101000"
"010101010101010101011101000110"
"000000000000000000000000000110"
"101010101010101010101101100100"
"000010001010001010000101010000"
"101000000111100010010001111100"
"101001111000010101010110110010"
"011101111110011111011100001000"
"110001000010011110111101111000"
"011010011011111110001000000010"
},
/* 10*/ { UNICODE_MODE, 4, -1, "ÀÁÂÃ1", -1, "", 0, 33, 30, 1, "Mode 4 LCKC LCHA",
"010101010101010101010101010111"
"000000000000000000000000000000"
"101010101010101010101010101010"
"010101010101010101010101010110"
"000000000000000000000000000001"
"101010101010101010101010101000"
"010101010101010101010101010110"
"000000000000000000000000000010"
"101010101010101010101010101001"
"010101011111110000111001010100"
"000000001111110010001000000000"
"101010101010000000011110101010"
"010101000100000000000101010110"
"000000110000000000000100000000"
"101010011000000000001110101000"
"010101110000000000001001010110"
"000000101000000000001000000010"
"101010000000000000001110101000"
"010101001100000000000001010111"
"000000100100000000001000000010"
"101010010000000000010110101011"
"010101011100000000001101010100"
"000000001010110101111100000011"
"101010101010110001111110101010"
"010101010101010101011111010111"
"000000000000000000001111010110"
"101010101010101010100000000010"
"111111110000111100000101000000"
"010110101111000011110101010100"
"101010100000010101011111101010"
"111101011010000011110101101010"
"010110101111010110101010111100"
"010100000000010110101010010100"
},
/* 11*/ { UNICODE_MODE, 4, -1, "ÀÁÂÃ123456789", -1, "", 0, 33, 30, 1, "Mode 4 LCKC NS",
"111110110101010101010101010111"
"111010010000000000000000000000"
"000010011010101010101010101000"
"010101010101010101010101010100"
"000000000000000000000000000001"
"101010101010101010101010101010"
"010101010101010101010101010101"
"000000000000000000000000000000"
"101010101010101010101010101001"
"010101010111110000110001010110"
"000000000011110010010000000010"
"101010100110000000111010101010"
"010101011000000000001001010101"
"000000101000000000001000000000"
"101010000100000000000110101011"
"010101010000000000001101010110"
"000000001000000000001000000000"
"101010100000000000001010101000"
"010101100000000000001001010100"
"000000001000000000001100000010"
"101010110000000000011010101001"
"010101010100000000011001010100"
"000000001110110101111000000000"
"101010101010110001000110101010"
"010101010101010101010000101101"
"000000000000000000001110011100"
"101010101010101010100111100010"
"011101100110110110100011110010"
"010001101101001001100100011011"
"100011011110110000101000000010"
"101101111000011101010000100101"
"000000111100011110100001110000"
"101000000010100111001011110101"
},
/* 12*/ { UNICODE_MODE, 4, -1, "àáâã1", -1, "", 0, 33, 30, 1, "Mode 4 LCKD LCHA",
"010101010101010101010101010111"
"000000000000000000000000000000"
"101010101010101010101010101010"
"010101010101010101010101010110"
"000000000000000000000000000001"
"101010101010101010101010101000"
"010101010101010101010101010110"
"000000000000000000000000000010"
"101010101010101010101010101001"
"010101010111110000111101010100"
"000000000011110010000100000000"
"101010101110000000010110101010"
"010101010100000000000001010110"
"000000000000000000000000000000"
"101010011000000000001010101000"
"010101110000000000001001010110"
"000000101000000000001000000010"
"101010000000000000001110101000"
"010101010000000000000001010111"
"000000110000000000001100000010"
"101010110110000000011010101011"
"010101010100000000011101010100"
"000000001110110111111100000011"
"101010101110110001001110101010"
"010101010101010101011111010111"
"000000000000000000001111010110"
"101010101010101010100000000010"
"111111110000111100000101000000"
"010110101111000011110101010100"
"101010100000010101011111101010"
"111101011010000011110101101010"
"010110101111010110101010111100"
"010100000000010110101010010100"
},
/* 13*/ { UNICODE_MODE, 4, -1, "¢£¤¥1", -1, "", 0, 33, 30, 1, "Mode 4 LCKE LCHA",
"010101010101010101010101010111"
"000000000000000000000000000000"
"101010101010101010101010101010"
"010101010101010101010101010110"
"000000000000000000000000000001"
"101010101010101010101010101000"
"010101010101010101010101010110"
"000000000000000000000000000010"
"101010101010101010101010101001"
"010101010111110100110001010100"
"000000000101110110000100000000"
"101010101010000000011110101010"
"010101010110000000001001010110"
"000000010000000000111000000000"
"101010011000000000001110101000"
"010101111000000000001001010110"
"000000101000000000001000000010"
"101010000000000000001110101000"
"010101111000000000001101010111"
"000000111100000000111000000010"
"101010001100000000111110101011"
"010101011110000001011101010100"
"000000001010110001011100000011"
"101010101010110101101010101010"
"010101010101010101011111010111"
"000000000000000000001111010110"
"101010101010101010100000000010"
"111111110000111100000101000000"
"010110101111000011110101010100"
"101010100000010101011111101010"
"111101011010000011110101101010"
"010110101111010110101010111100"
"010100000000010110101010010100"
},
/* 14*/ { UNICODE_MODE, 4, -1, "¢£¤¥123456789", -1, "", 0, 33, 30, 1, "Mode 4 LCKE NS",
"111110110101010101010101010111"
"111010010000000000000000000000"
"000010011010101010101010101000"
"010101010101010101010101010100"
"000000000000000000000000000001"
"101010101010101010101010101010"
"010101010101010101010101010101"
"000000000000000000000000000000"
"101010101010101010101010101001"
"010101011111110100111001010110"
"000000001001110110011100000010"
"101010100110000000111010101010"
"010101001010000000000101010101"
"000000001000000000110100000000"
"101010000100000000000110101011"
"010101011000000000001101010110"
"000000001000000000001000000000"
"101010100000000000001010101000"
"010101010100000000000101010100"
"000000010000000000111100000010"
"101010101100000000110010101001"
"010101010110000001001001010100"
"000000001110110001011000000000"
"101010101010110101010010101010"
"010101010101010101010000101101"
"000000000000000000001110011100"
"101010101010101010100111100010"
"011101100110110110100011110010"
"010001101101001001100100011011"
"100011011110110000101000000010"
"101101111000011101010000100101"
"000000111100011110100001110000"
"101000000010100111001011110101"
},
/* 15*/ { UNICODE_MODE, 4, -1, "ABCDE12abcde1ÀÁÂ⣤¥1àáâãabcde123A123456789àáâ㢣¤¥abc", -1, "", 0, 33, 30, 1, "Mode 4 mixed sets",
"000000001111111100000000111111"
"000010100100111100000000111100"
"011100101110000000100111010100"
"001100000000111111110101010110"
"001100000000111100010101101001"
"101111011000101010011000110110"
"000000001111111100100010111110"
"000010101100000000111010111000"
"011100101110011110111101000010"
"000000001011001100010111111010"
"000000000001000010000111111000"
"110110001110000000011110101010"
"111101000010000000001101010101"
"111110110000000000100110010100"
"010101101000000000010111001001"
"010100110000000000001100001110"
"000000101000000000001000001110"
"101011110000000000001101101110"
"010101101000000000000001010101"
"000000000100000000010000000000"
"101010100000000000000110101000"
"010101010100000000000101010100"
"000000001010001011100000000011"
"101010101011000001011010101000"
"010101010101010101010101001001"
"000000000000000000000010100000"
"101010101010101010101111110001"
"001110011111110100100011111000"
"011001101011100100010000010101"
"010000011110010110000011110010"
"110111100111000100111111001011"
"100011000001110011101110101000"
"001001110010111101100100010001"
},
};
int data_size = ARRAY_SIZE(data);
char escaped[1024];
char bwipp_buf[8192];
char bwipp_msg[1024];
for (int i = 0; i < data_size; i++) {
@ -564,9 +814,9 @@ static void test_encode(int index, int generate, int debug) {
assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt);
if (generate) {
printf(" /*%3d*/ { %s, %d, %d, \"%s\", %d, \"%s\", %s, %d, %d, \"%s\",\n",
printf(" /*%3d*/ { %s, %d, %d, \"%s\", %d, \"%s\", %s, %d, %d, %d, \"%s\",\n",
i, testUtilInputModeName(data[i].input_mode), data[i].option_1, data[i].option_2, testUtilEscape(data[i].data, length, escaped, sizeof(escaped)), data[i].length,
data[i].primary, testUtilErrorName(data[i].ret), symbol->rows, symbol->width, data[i].comment);
data[i].primary, testUtilErrorName(data[i].ret), symbol->rows, symbol->width, data[i].bwipp_cmp, data[i].comment);
testUtilModulesPrint(symbol, " ", "\n");
printf(" },\n");
} else {
@ -577,6 +827,19 @@ static void test_encode(int index, int generate, int debug) {
int width, row;
ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row);
assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data);
if (do_bwipp && testUtilCanBwipp(i, symbol, data[i].option_1, data[i].option_2, -1, debug)) {
if (!data[i].bwipp_cmp) {
if (debug & ZINT_DEBUG_TEST_PRINT) printf("i:%d %s not BWIPP compatible (%s)\n", i, testUtilBarcodeName(symbol->symbology), data[i].comment);
} else {
ret = testUtilBwipp(i, symbol, data[i].option_1, data[i].option_2, -1, data[i].data, length, data[i].primary, bwipp_buf, sizeof(bwipp_buf));
assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret);
ret = testUtilBwippCmp(symbol, bwipp_msg, bwipp_buf, data[i].expected);
assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n",
i, testUtilBarcodeName(symbol->symbology), ret, bwipp_msg, bwipp_buf, data[i].expected);
}
}
}
}
@ -699,6 +962,7 @@ static void test_fuzz(int index, int debug) {
/* 2*/ { -1, "AaAaAaAaAaAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA123456789A", -1, ZINT_ERROR_TOO_LONG },
/* 3*/ { -1, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789", -1, ZINT_ERROR_TOO_LONG },
/* 4*/ { 32768, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678", -1, ZINT_ERROR_TOO_LONG },
/* 5*/ { -1, "AaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAa", -1, ZINT_ERROR_TOO_LONG },
};
int data_size = ARRAY_SIZE(data);

View File

@ -172,6 +172,7 @@ static void test_print(int index, int generate, int debug) {
/* 36*/ { BARCODE_ULTRA, -1, -1, -1, 2, -1, -1, -1, 0, 0, "0000007F", "FF0000", "12345", "", "../data/png/ultra_fgalpha.png", "" },
/* 37*/ { BARCODE_ULTRA, -1, -1, -1, -1, -1, -1, -1, 0, 0, "0000007F", "", "12345", "", "../data/png/ultra_fgalpha_nobg.png", "" },
/* 38*/ { BARCODE_ULTRA, -1, -1, -1, -1, -1, -1, -1, 0, 0.5f, "", "", "1", "", "../data/png/ultra_odd.png", "" },
/* 39*/ { BARCODE_MAXICODE, -1, -1, -1, -1, -1, -1, -1, 0, 0.5f, "", "", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", "../data/png/maxicode_0.5.png", "" },
};
int data_size = ARRAY_SIZE(data);

View File

@ -1789,7 +1789,7 @@ static const char *testUtilBwippName(int index, const struct zint_symbol *symbol
{ "", -1, 54, 0, 0, 0, 0, 0, },
{ "pdf417", BARCODE_PDF417, 55, 1, 1, 0, 0, 0, },
{ "pdf417compact", BARCODE_PDF417COMP, 56, 1, 1, 0, 0, 0, },
{ "maxicode", BARCODE_MAXICODE, 57, 0, 0, 0, 0, 0, },
{ "maxicode", BARCODE_MAXICODE, 57, 1, 1, 0, 0, 0, },
{ "qrcode", BARCODE_QRCODE, 58, 0, 0, 0, 0, 0, },
{ "", -1, 59, 0, 0, 0, 0, 0, },
{ "", BARCODE_CODE128B, 60, 0, 0, 0, 0, 0, },
@ -2070,7 +2070,7 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int
int symbology = symbol->symbology;
int data_len = length == -1 ? (int) strlen(data) : length;
int primary_len = primary ? (int) strlen(primary) : 0;
int max_data_len = 4 + primary_len + 1 + 1 + data_len * 4 + 32; /* 4 AI prefix + primary + '|' + leading zero + escaped data + fudge */
int max_data_len = 4 + primary_len + 1 + 1 + data_len * 4 + 64; /* 4 AI prefix + primary + '|' + leading zero + escaped data + fudge */
int eci_length = get_eci_length(symbol->eci, (const unsigned char *) data, data_len);
char converted[eci_length + 1];
@ -2106,7 +2106,11 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int
}
for (r = 0; r < symbol->rows; r++) {
bwipp_row_height[r] = symbol->row_height[r] ? symbol->row_height[r] : linear_row_height;
if (symbology == BARCODE_MAXICODE) {
bwipp_row_height[r] = 1;
} else {
bwipp_row_height[r] = symbol->row_height[r] ? symbol->row_height[r] : linear_row_height;
}
//fprintf(stderr, "bwipp_row_height[%d] %d, symbol->row_height[%d] %d\n", r, bwipp_row_height[r], r, symbol->row_height[r]);
}
if (symbology == BARCODE_DBAR_EXP) {
@ -2388,6 +2392,71 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int
sprintf(bwipp_opts_buf + (int) strlen(bwipp_opts_buf), "%sversion=%s", strlen(bwipp_opts_buf) ? " " : "", codeone_version);
bwipp_opts = bwipp_opts_buf;
}
} else if (symbology == BARCODE_MAXICODE) {
int have_scm = memcmp(bwipp_data, "[)>^03001^02996", 15) == 0;
int mode = option_1;
if (mode <= 0) {
if (primary_len == 0) {
mode = 4;
} else {
for (int i = 0; i < primary_len - 6; i++) {
if (((symbol->primary[i] < '0') || (symbol->primary[i] > '9')) && (symbol->primary[i] != ' ')) {
mode = 3;
break;
}
}
}
}
if (mode > 0) {
sprintf(bwipp_opts_buf + (int) strlen(bwipp_opts_buf), "%smode=%d", strlen(bwipp_opts_buf) ? " " : "", mode);
bwipp_opts = bwipp_opts_buf;
}
if (primary_len) {
char prefix_buf[30];
int prefix_len;
int postcode_len = primary_len - 6;
char postcode[10];
if (postcode_len >= 10) postcode_len = 9;
memcpy(postcode, primary, postcode_len);
postcode[postcode_len] = '\0';
if (mode == 2) {
for (int i = 0; i < postcode_len; i++) {
if (postcode[i] == ' ') {
postcode[i] = '\0';
}
}
} else {
postcode[6] = '\0';
for (int i = postcode_len; i < 6; i++) {
postcode[i] = ' ';
}
}
sprintf(prefix_buf, "%s^029%.3s^029%.3s^029", postcode, primary + primary_len - 6, primary + primary_len - 3);
prefix_len = (int) strlen(prefix_buf);
if (have_scm) {
memmove(bwipp_data + 15 + prefix_len, bwipp_data, strlen(bwipp_data) - 15 + 1);
memcpy(bwipp_data + 15, prefix_buf, prefix_len);
} else {
memmove(bwipp_data + prefix_len, bwipp_data, strlen(bwipp_data) + 1);
memcpy(bwipp_data, prefix_buf, prefix_len);
}
if (!parse) {
sprintf(bwipp_opts_buf + (int) strlen(bwipp_opts_buf), "%sparse", strlen(bwipp_opts_buf) ? " " : "");
bwipp_opts = bwipp_opts_buf;
parse = 1;
}
}
if (option_2 > 0) {
char scm_vv_buf[16];
sprintf(scm_vv_buf, "[)>^03001^029%02d", option_2); /* [)>\R01\Gvv */
memmove(bwipp_data + 15, bwipp_data, strlen(bwipp_data) + 1);
memcpy(bwipp_data, scm_vv_buf, 15);
if (!parse) {
sprintf(bwipp_opts_buf + (int) strlen(bwipp_opts_buf), "%sparse", strlen(bwipp_opts_buf) ? " " : "");
bwipp_opts = bwipp_opts_buf;
parse = 1;
}
}
}
}

View File

@ -1,5 +1,5 @@
--- ../../../../postscriptbarcode/build/monolithic/barcode.ps 2021-02-22 18:33:57.673232608 +0000
+++ ../tools/bwipp_dump.ps 2021-02-22 19:03:00.083067838 +0000
--- ../../../../postscriptbarcode/build/monolithic/barcode.ps 2021-03-22 15:06:47.498155878 +0000
+++ ../tools/bwipp_dump.ps 2021-03-27 03:44:50.998203506 +0000
@@ -26198,34 +26198,80 @@
pop
} ifelse
@ -1052,7 +1052,7 @@
end
@@ -28810,3 +29270,183 @@
@@ -28810,3 +29270,189 @@
% --END ENCODER hibcazteccode--
% --END TEMPLATE--
@ -1113,7 +1113,13 @@
+
+% pixs is renmatrix input
+ret /pixs known {
+ /pixs ret /pixs get def
+ b (maxicode) eq {
+ /pixs 990 array def
+ 0 1 989 { pixs exch 0 put } for
+ ret /pixs get { pixs exch 1 put } forall
+ } {
+ /pixs ret /pixs get def
+ } ifelse
+
+ /xs systemdict /xs known { systemdict /xs get cvi } { 0 } ifelse def
+ /xe systemdict /xe known { systemdict /xe get cvi } { 0 } ifelse def

View File

@ -28,6 +28,7 @@ run_bwipp_test "test_dmatrix"
run_bwipp_test "test_dotcode" "encode"
run_bwipp_test "test_gs1" "gs1_reduce"
run_bwipp_test "test_imail" "encode"
run_bwipp_test "test_maxicode" "encode"
run_bwipp_test "test_medical" "encode"
run_bwipp_test "test_pdf417" "encode"
run_bwipp_test "test_plessey" "encode"