mirror of
https://github.com/zint/zint
synced 2024-11-16 20:57:25 +13:00
Adjustment to detection of odd-length Mode C blocks to match correction to Code 128
This commit is contained in:
parent
5ddf28ffbb
commit
6283fdf247
@ -186,7 +186,7 @@ int code16k(struct zint_symbol *symbol, unsigned char source[])
|
|||||||
float glyph_count;
|
float glyph_count;
|
||||||
int errornum, first_sum, second_sum;
|
int errornum, first_sum, second_sum;
|
||||||
int input_length;
|
int input_length;
|
||||||
int gs1;
|
int gs1, c_count;
|
||||||
|
|
||||||
errornum = 0;
|
errornum = 0;
|
||||||
input_length = ustrlen(source);
|
input_length = ustrlen(source);
|
||||||
@ -269,26 +269,6 @@ int code16k(struct zint_symbol *symbol, unsigned char source[])
|
|||||||
|
|
||||||
dxsmooth16(&indexliste);
|
dxsmooth16(&indexliste);
|
||||||
|
|
||||||
/* Resolve odd length LATCHC blocks */
|
|
||||||
if((list[1][0] == LATCHC) && ((list[0][0] % 2) == 1)) {
|
|
||||||
for(i = indexliste; i > 0; i--) {
|
|
||||||
list[0][i] = list[0][i - 1];
|
|
||||||
list[1][i] = list[1][i - 1];
|
|
||||||
}
|
|
||||||
list[0][1]--;
|
|
||||||
list[0][0] = 1;
|
|
||||||
list[1][0] = LATCHB;
|
|
||||||
indexliste++;
|
|
||||||
}
|
|
||||||
if(indexliste > 1) {
|
|
||||||
for(i = 1; i < indexliste; i++) {
|
|
||||||
if((list[1][i] == LATCHC) && ((list[0][i] % 2) == 1)) {
|
|
||||||
list[0][i - 1]++;
|
|
||||||
list[0][i]--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Put set data into set[] */
|
/* Put set data into set[] */
|
||||||
read = 0;
|
read = 0;
|
||||||
for(i = 0; i < indexliste; i++) {
|
for(i = 0; i < indexliste; i++) {
|
||||||
@ -321,20 +301,23 @@ int code16k(struct zint_symbol *symbol, unsigned char source[])
|
|||||||
} while (set[i] == 'b');
|
} while (set[i] == 'b');
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We have a problem with FNC1 in Code Set C to resolve */
|
/* Watch out for odd-length Mode C blocks */
|
||||||
for(i = 0; i < input_length; i++) {
|
c_count = 0;
|
||||||
if((set[i] == 'C') && (source[i] == '[')) {
|
for(i = 0; i < read; i++) {
|
||||||
int c_count;
|
if(set[i] == 'C') {
|
||||||
|
if((reduced[i] == '[') && gs1) {
|
||||||
|
if(c_count % 2) { set[i - c_count] = 'B'; }
|
||||||
|
c_count = 0;
|
||||||
|
} else {
|
||||||
|
c_count++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(c_count % 2) { set[i - c_count] = 'B'; }
|
||||||
c_count = 0;
|
c_count = 0;
|
||||||
for(j = 0; j < i; j++) {
|
|
||||||
if(set[j] == 'C') { c_count++; } else { c_count = 0; }
|
|
||||||
}
|
|
||||||
if((c_count % 2) == 1) {
|
|
||||||
set[i - 1] = 'B';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(c_count % 2) { set[i - c_count] = 'B'; }
|
||||||
|
|
||||||
|
|
||||||
/* Make sure the data will fit in the symbol */
|
/* Make sure the data will fit in the symbol */
|
||||||
last_set = ' ';
|
last_set = ' ';
|
||||||
|
Loading…
Reference in New Issue
Block a user