@@ -33,24 +33,24 @@ struct ContentView: View {
33
33
@State var aiDataStr : String = " "
34
34
@State var dlURI : String = " "
35
35
@State var hri : String = " "
36
-
36
+
37
37
@State var unknownAIs = false
38
38
@State var associations = false
39
39
@State var datatitles = false
40
-
40
+
41
41
@FocusState var inputIsFocused : Bool
42
-
42
+
43
43
let gs1encoder = try ! GS1Encoder ( )
44
-
44
+
45
45
init ( ) {
46
-
46
+
47
47
UIScrollView . appearance ( ) . bounces = false
48
-
48
+
49
49
inputData = " https://example.com/01/12312312312333/10/ABC123?99=TESTING "
50
50
libver = " GS1 Encoders library: " + gs1encoder. getVersion ( )
51
-
51
+
52
52
}
53
-
53
+
54
54
func clearRender( ) {
55
55
syntax = " "
56
56
dataStr = " "
@@ -62,7 +62,7 @@ struct ContentView: View {
62
62
errorMsg = " "
63
63
errorIsHidden = true
64
64
}
65
-
65
+
66
66
func loadDataValues( ) {
67
67
unknownAIs = gs1encoder. getPermitUnknownAIs ( )
68
68
associations = gs1encoder. getValidateAIassociations ( )
@@ -71,39 +71,39 @@ struct ContentView: View {
71
71
if ( gs1encoder. getDataStr ( ) == " " ) {
72
72
return
73
73
}
74
-
74
+
75
75
dataStr = gs1encoder. getDataStr ( )
76
-
76
+
77
77
let ai = gs1encoder. getAIdataStr ( )
78
78
aiDataStr = ai != " " ? ai : " ⧚ Not AI-based data ⧛ "
79
-
79
+
80
80
do {
81
81
dlURI = try gs1encoder. getDLuri ( )
82
82
} catch GS1EncoderError . digitalLinkError( let msg) {
83
83
dlURI = msg
84
84
} catch { }
85
-
85
+
86
86
hri = gs1encoder. getHRI ( ) . joined ( separator: " \n " )
87
-
87
+
88
88
let qps = gs1encoder. getDLignoredQueryParams ( )
89
89
if ( qps. count > 0 ) {
90
90
infoMsg = " Warning: Non-numeric query parameters ignored: ⧚ " +
91
91
qps. joined ( separator: " & " ) + " ⧚ "
92
92
infoIsHidden = false
93
93
}
94
94
}
95
-
95
+
96
96
func processInput( ) {
97
-
97
+
98
98
clearRender ( )
99
-
99
+
100
100
let data = inputData. trimmingCharacters ( in: . whitespacesAndNewlines)
101
101
if ( data == " " ) {
102
102
return
103
103
}
104
-
104
+
105
105
do {
106
-
106
+
107
107
if ( data. starts ( with: " ( " ) ) {
108
108
syntax = " Bracketed AI element string "
109
109
try gs1encoder. setAIdataStr ( data)
@@ -114,17 +114,17 @@ struct ContentView: View {
114
114
syntax = " Unbracketed AI element string "
115
115
try gs1encoder. setDataStr ( data)
116
116
} else if ( data. starts ( with: " http:// " ) || data. starts ( with: " https:// " ) ) {
117
- syntax = " Digital Link URI "
117
+ syntax = " GS1 Digital Link URI"
118
118
try gs1encoder. setDataStr ( data)
119
119
} else if ( CharacterSet ( charactersIn: data) . isSubset ( of: CharacterSet ( charactersIn: " 0123456789 " ) ) ) {
120
120
syntax = " Plain data "
121
-
121
+
122
122
if ( data. count != 8 && data. count != 12 && data. count != 13 && data. count != 14 ) {
123
123
errorMsg = " Invalid length for a GTIN-8, GTIN-12, GTIN-13 or GTIN-14 "
124
124
errorIsHidden = false
125
125
return
126
126
}
127
-
127
+
128
128
// Perform a checksum validation here, since the Syntax Engine validates only AI-based data
129
129
var parity = 0
130
130
var weight = data. count % 2 == 0 ? 3 : 1
@@ -133,23 +133,23 @@ struct ContentView: View {
133
133
weight = 4 - weight
134
134
}
135
135
parity = ( 10 - parity % 10 ) % 10
136
-
136
+
137
137
if ( parity != data. last!. wholeNumberValue!) {
138
138
errorMsg = " Incorrect numeric check digit "
139
139
errorIsHidden = false
140
140
infoMsg = " Plain data validation failed: " + data. dropLast ( ) + " ⧚ " + String( data. last!) + " ⧛ "
141
141
infoIsHidden = false
142
142
return
143
143
}
144
-
144
+
145
145
syntax = " Plain GTIN- " + String( data. count) + " - converted to AI (01)... "
146
146
try gs1encoder. setDataStr ( " ^01 " + String( repeating: " 0 " , count: 14 - data. count) + data)
147
-
147
+
148
148
} else {
149
149
syntax = " Non-numeric plain data is not a valid GS1 syntax "
150
150
return
151
151
}
152
-
152
+
153
153
} catch GS1EncoderError . parameterError( let msg) ,
154
154
GS1EncoderError . scanDataError ( let msg) ,
155
155
GS1EncoderError . digitalLinkError ( let msg) {
@@ -168,11 +168,11 @@ struct ContentView: View {
168
168
}
169
169
170
170
inputIsFocused = false
171
-
171
+
172
172
loadDataValues ( )
173
-
173
+
174
174
}
175
-
175
+
176
176
var body : some View {
177
177
ScrollView ( ) {
178
178
VStack {
@@ -191,20 +191,20 @@ struct ContentView: View {
191
191
try ! gs1encoder. setIncludeDataTitlesInHRI ( value)
192
192
}
193
193
}
194
-
194
+
195
195
TextFieldWithBorder ( label: " Input data " , message: $inputData) . focused ( $inputIsFocused) . onChange ( of: inputData) { value in
196
196
clearRender ( )
197
197
}
198
-
198
+
199
199
Button {
200
200
processInput ( )
201
201
} label: {
202
202
Text ( " PROCESS INPUT " ) . frame ( maxWidth: . infinity)
203
203
}
204
204
. buttonStyle ( . borderedProminent)
205
-
205
+
206
206
OutputView ( errorMsg: $errorMsg, errorIsHidden: $errorIsHidden, infoMsg: $infoMsg, infoIsHidden: $infoIsHidden, syntax: $syntax, dataStr: $dataStr, aiDataStr: $aiDataStr, dlURI: $dlURI, hri: $hri)
207
-
207
+
208
208
Spacer ( )
209
209
} . onAppear ( perform: loadDataValues)
210
210
}
@@ -232,7 +232,7 @@ struct CheckboxToggleStyle: ToggleStyle {
232
232
struct TextFieldWithBorder : View {
233
233
var label : String
234
234
@Binding var message : String
235
-
235
+
236
236
var body : some View {
237
237
ZStack ( alignment: . topLeading) {
238
238
TextField ( " " , text: $message, axis: . vertical)
@@ -249,7 +249,7 @@ struct TextFieldWithBorder: View {
249
249
}
250
250
251
251
struct OutputView : View {
252
-
252
+
253
253
@Binding var errorMsg : String
254
254
@Binding var errorIsHidden : Bool
255
255
@Binding var infoMsg : String
@@ -259,7 +259,7 @@ struct OutputView: View {
259
259
@Binding var aiDataStr : String
260
260
@Binding var dlURI : String
261
261
@Binding var hri : String
262
-
262
+
263
263
var body : some View {
264
264
if ( !errorIsHidden) {
265
265
TextFieldWithBorder ( label: " Error " , message: $errorMsg) . disabled ( true )
@@ -271,6 +271,6 @@ struct OutputView: View {
271
271
TextFieldWithBorder ( label: " Barcode message (^ = FNC1) " , message: $dataStr) . disabled ( true )
272
272
TextFieldWithBorder ( label: " GS1 AI element string " , message: $aiDataStr) . disabled ( true )
273
273
TextFieldWithBorder ( label: " GS1 Digital Link URI (canonical form) " , message: $dlURI) . disabled ( true )
274
- TextFieldWithBorder ( label: " HRI " , message: $hri) . disabled ( true )
274
+ TextFieldWithBorder ( label: " HRI text " , message: $hri) . disabled ( true )
275
275
}
276
276
}
0 commit comments