mirror of
https://git.code.sf.net/p/zint/code
synced 2025-05-09 13:41:59 -04:00
GS1: update to latest gs1-syntax-dictionary, new AI 8014 (GSCN
21-283) MUDI, and AI 03 MTO GTIN); hhmm -> hh,mm, mmoptss -> mm,ss, yymmddhh obsolete
This commit is contained in:
parent
3c7a702169
commit
7f4ccccb98
3 changed files with 1125 additions and 1058 deletions
117
backend/gs1.c
117
backend/gs1.c
|
@ -394,33 +394,6 @@ static int yymmdd(const unsigned char *data, int data_len, int offset, int min,
|
|||
return 1;
|
||||
}
|
||||
|
||||
/* Check for a date and hours YYMMDDHH */
|
||||
static int yymmddhh(const unsigned char *data, int data_len, int offset, int min, int max, int *p_err_no,
|
||||
int *p_err_posn, char err_msg[50], const int length_only) {
|
||||
|
||||
if (data_len < min || (data_len && data_len < 8)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!yymmdd(data, data_len, offset, min, max, p_err_no, p_err_posn, err_msg, length_only)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
data_len = data_len < offset ? 0 : data_len - offset;
|
||||
|
||||
if (!length_only && data_len) {
|
||||
const int hour = to_int(data + offset + 6, 2);
|
||||
if (hour > 23) {
|
||||
*p_err_no = 3;
|
||||
*p_err_posn = offset + 6 + 1;
|
||||
sprintf(err_msg, "Invalid hour of day '%.2s'", data + offset + 6);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Check for a time HHMM */
|
||||
static int hhmm(const unsigned char *data, int data_len, int offset, int min, int max, int *p_err_no,
|
||||
int *p_err_posn, char err_msg[50], const int length_only) {
|
||||
|
@ -454,15 +427,38 @@ static int hhmm(const unsigned char *data, int data_len, int offset, int min, in
|
|||
return 1;
|
||||
}
|
||||
|
||||
/* Check for a time MMSS with seconds optional */
|
||||
static int mmoptss(const unsigned char *data, int data_len, int offset, int min, int max, int *p_err_no,
|
||||
/* Check for a time HH (hours) */
|
||||
static int hh(const unsigned char *data, int data_len, int offset, int min, int max, int *p_err_no,
|
||||
int *p_err_posn, char err_msg[50], const int length_only) {
|
||||
(void)max;
|
||||
|
||||
data_len = data_len < offset ? 0 : data_len - offset;
|
||||
|
||||
if (data_len < min || (data_len && data_len < 2)
|
||||
|| (data_len > 2 && data_len < 4)) {
|
||||
if (data_len < min || (data_len && data_len < 2)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!length_only && data_len) {
|
||||
const int hour = to_int(data + offset, 2);
|
||||
if (hour > 23) {
|
||||
*p_err_no = 3;
|
||||
*p_err_posn = offset + 1;
|
||||
sprintf(err_msg, "Invalid hour of day '%.2s'", data + offset);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Check for a time MM (minutes) */
|
||||
static int mm(const unsigned char *data, int data_len, int offset, int min, int max, int *p_err_no,
|
||||
int *p_err_posn, char err_msg[50], const int length_only) {
|
||||
(void)max;
|
||||
|
||||
data_len = data_len < offset ? 0 : data_len - offset;
|
||||
|
||||
if (data_len < min || (data_len && data_len < 2)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -474,14 +470,29 @@ static int mmoptss(const unsigned char *data, int data_len, int offset, int min,
|
|||
sprintf(err_msg, "Invalid minutes in the hour '%.2s'", data + offset);
|
||||
return 0;
|
||||
}
|
||||
if (data_len > 2) {
|
||||
const int secs = to_int(data + offset + 2, 2);
|
||||
if (secs > 59) {
|
||||
*p_err_no = 3;
|
||||
*p_err_posn = offset + 2 + 1;
|
||||
sprintf(err_msg, "Invalid seconds in the minute '%.2s'", data + offset + 2);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Check for a time SS (seconds) */
|
||||
static int ss(const unsigned char *data, int data_len, int offset, int min, int max, int *p_err_no,
|
||||
int *p_err_posn, char err_msg[50], const int length_only) {
|
||||
(void)max;
|
||||
|
||||
data_len = data_len < offset ? 0 : data_len - offset;
|
||||
|
||||
if (data_len < min || (data_len && data_len < 2)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!length_only && data_len) {
|
||||
const int secs = to_int(data + offset, 2);
|
||||
if (secs > 59) {
|
||||
*p_err_no = 3;
|
||||
*p_err_posn = offset + 1;
|
||||
sprintf(err_msg, "Invalid seconds in the minute '%.2s'", data + offset);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1455,6 +1466,34 @@ static int posinseqslash(const unsigned char *data, int data_len, int offset, in
|
|||
return 1;
|
||||
}
|
||||
|
||||
/* Check that input contains non-digit (GSCN 21-283) */
|
||||
static int hasnondigit(const unsigned char *data, int data_len, int offset, int min, int max, int *p_err_no,
|
||||
int *p_err_posn, char err_msg[50], const int length_only) {
|
||||
(void)max;
|
||||
|
||||
data_len = data_len < offset ? 0 : data_len - offset;
|
||||
|
||||
if (data_len < min) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!length_only && data_len) {
|
||||
const unsigned char *d = data + offset;
|
||||
const unsigned char *const de = d + (data_len > max ? max : data_len);
|
||||
|
||||
for (; d < de && z_isdigit(*d); d++);
|
||||
|
||||
if (d == de) {
|
||||
*p_err_no = 3;
|
||||
*p_err_posn = offset + 1;
|
||||
strcpy(err_msg, "A non-digit character is required");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Generated by "php backend/tools/gen_gs1_linter.php > backend/gs1_lint.h" */
|
||||
#include "gs1_lint.h"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue