MCPcopy Index your code
hub / github.com/skip2/go-qrcode / classifyDataModes

Method classifyDataModes

encoder.go:219–254  ·  view source on GitHub ↗

classifyDataModes classifies the raw data into unoptimised segments. e.g. "123ZZ#!#!" => [numeric, 3, "123"] [alphanumeric, 2, "ZZ"] [byte, 4, "#!#!"]. Returns the highest data mode needed to encode the data. e.g. for a mixed numeric/alphanumeric input, the highest is alphanumeric. dataModeNone <

()

Source from the content-addressed store, hash-verified

217//
218// dataModeNone < dataModeNumeric < dataModeAlphanumeric < dataModeByte
219func (d *dataEncoder) classifyDataModes() dataMode {
220 var start int
221 mode := dataModeNone
222 highestRequiredMode := mode
223
224 for i, v := range d.data {
225 newMode := dataModeNone
226 switch {
227 case v >= 0x30 && v <= 0x39:
228 newMode = dataModeNumeric
229 case v == 0x20 || v == 0x24 || v == 0x25 || v == 0x2a || v == 0x2b || v ==
230 0x2d || v == 0x2e || v == 0x2f || v == 0x3a || (v >= 0x41 && v <= 0x5a):
231 newMode = dataModeAlphanumeric
232 default:
233 newMode = dataModeByte
234 }
235
236 if newMode != mode {
237 if i > 0 {
238 d.actual = append(d.actual, segment{dataMode: mode, data: d.data[start:i]})
239
240 start = i
241 }
242
243 mode = newMode
244 }
245
246 if newMode > highestRequiredMode {
247 highestRequiredMode = newMode
248 }
249 }
250
251 d.actual = append(d.actual, segment{dataMode: mode, data: d.data[start:len(d.data)]})
252
253 return highestRequiredMode
254}
255
256// optimiseDataModes optimises the list of segments to reduce the overall output
257// encoded data length.

Callers 1

encodeMethod · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected