/zxing-objc/ZXingObjC/datamatrix/decoder/ZXDataMatrixVersion.m

https://gitlab.com/OtherGroup/shadowsocks-iOS · Objective C · 350 lines · 275 code · 54 blank · 21 comment · 14 complexity · c5bbf627ed1d3808989a92f6000b72c8 MD5 · raw file

  1. /*
  2. * Copyright 2012 ZXing authors
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #import "ZXDataMatrixVersion.h"
  17. @implementation ZXDataMatrixECBlocks
  18. - (id)initWithCodewords:(int)ecCodewords ecBlocks:(ZXDataMatrixECB *)ecBlocks {
  19. if (self = [super init]) {
  20. _ecCodewords = ecCodewords;
  21. _ecBlocks = @[ecBlocks];
  22. }
  23. return self;
  24. }
  25. - (id)initWithCodewords:(int)ecCodewords ecBlocks1:(ZXDataMatrixECB *)ecBlocks1 ecBlocks2:(ZXDataMatrixECB *)ecBlocks2 {
  26. if (self = [super init]) {
  27. _ecCodewords = ecCodewords;
  28. _ecBlocks = @[ecBlocks1, ecBlocks2];
  29. }
  30. return self;
  31. }
  32. @end
  33. @implementation ZXDataMatrixECB
  34. - (id)initWithCount:(int)count dataCodewords:(int)dataCodewords {
  35. if (self = [super init]) {
  36. _count = count;
  37. _dataCodewords = dataCodewords;
  38. }
  39. return self;
  40. }
  41. @end
  42. static NSArray *VERSIONS = nil;
  43. @implementation ZXDataMatrixVersion
  44. - (id)initWithVersionNumber:(int)versionNumber symbolSizeRows:(int)symbolSizeRows symbolSizeColumns:(int)symbolSizeColumns
  45. dataRegionSizeRows:(int)dataRegionSizeRows dataRegionSizeColumns:(int)dataRegionSizeColumns ecBlocks:(ZXDataMatrixECBlocks *)ecBlocks {
  46. if (self = [super init]) {
  47. _versionNumber = versionNumber;
  48. _symbolSizeRows = symbolSizeRows;
  49. _symbolSizeColumns = symbolSizeColumns;
  50. _dataRegionSizeRows = dataRegionSizeRows;
  51. _dataRegionSizeColumns = dataRegionSizeColumns;
  52. _ecBlocks = ecBlocks;
  53. int total = 0;
  54. int ecCodewords = ecBlocks.ecCodewords;
  55. NSArray *ecbArray = ecBlocks.ecBlocks;
  56. for (ZXDataMatrixECB *ecBlock in ecbArray) {
  57. total += ecBlock.count * (ecBlock.dataCodewords + ecCodewords);
  58. }
  59. _totalCodewords = total;
  60. }
  61. return self;
  62. }
  63. /**
  64. * Deduces version information from Data Matrix dimensions.
  65. */
  66. + (ZXDataMatrixVersion *)versionForDimensions:(int)numRows numColumns:(int)numColumns {
  67. if ((numRows & 0x01) != 0 || (numColumns & 0x01) != 0) {
  68. return nil;
  69. }
  70. for (ZXDataMatrixVersion *version in VERSIONS) {
  71. if (version.symbolSizeRows == numRows && version.symbolSizeColumns == numColumns) {
  72. return version;
  73. }
  74. }
  75. return nil;
  76. }
  77. - (NSString *)description {
  78. return [@(self.versionNumber) stringValue];
  79. }
  80. /**
  81. * See ISO 16022:2006 5.5.1 Table 7
  82. */
  83. + (void)initialize {
  84. VERSIONS = @[[[ZXDataMatrixVersion alloc] initWithVersionNumber:1
  85. symbolSizeRows:10
  86. symbolSizeColumns:10
  87. dataRegionSizeRows:8
  88. dataRegionSizeColumns:8
  89. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:5
  90. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:3]]],
  91. [[ZXDataMatrixVersion alloc] initWithVersionNumber:2
  92. symbolSizeRows:12
  93. symbolSizeColumns:12
  94. dataRegionSizeRows:10
  95. dataRegionSizeColumns:10
  96. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:7
  97. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:5]]],
  98. [[ZXDataMatrixVersion alloc] initWithVersionNumber:3
  99. symbolSizeRows:14
  100. symbolSizeColumns:14
  101. dataRegionSizeRows:12
  102. dataRegionSizeColumns:12
  103. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:10
  104. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:8]]],
  105. [[ZXDataMatrixVersion alloc] initWithVersionNumber:4
  106. symbolSizeRows:16
  107. symbolSizeColumns:16
  108. dataRegionSizeRows:14
  109. dataRegionSizeColumns:14
  110. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:12
  111. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:12]]],
  112. [[ZXDataMatrixVersion alloc] initWithVersionNumber:5
  113. symbolSizeRows:18
  114. symbolSizeColumns:18
  115. dataRegionSizeRows:16
  116. dataRegionSizeColumns:16
  117. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:14
  118. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:18]]],
  119. [[ZXDataMatrixVersion alloc] initWithVersionNumber:6
  120. symbolSizeRows:20
  121. symbolSizeColumns:20
  122. dataRegionSizeRows:18
  123. dataRegionSizeColumns:18
  124. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:18
  125. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:22]]],
  126. [[ZXDataMatrixVersion alloc] initWithVersionNumber:7
  127. symbolSizeRows:22
  128. symbolSizeColumns:22
  129. dataRegionSizeRows:20
  130. dataRegionSizeColumns:20
  131. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:20
  132. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:30]]],
  133. [[ZXDataMatrixVersion alloc] initWithVersionNumber:8
  134. symbolSizeRows:24
  135. symbolSizeColumns:24
  136. dataRegionSizeRows:22
  137. dataRegionSizeColumns:22
  138. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:24
  139. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:36]]],
  140. [[ZXDataMatrixVersion alloc] initWithVersionNumber:9
  141. symbolSizeRows:26
  142. symbolSizeColumns:26
  143. dataRegionSizeRows:24
  144. dataRegionSizeColumns:24
  145. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:28
  146. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:44]]],
  147. [[ZXDataMatrixVersion alloc] initWithVersionNumber:10
  148. symbolSizeRows:32
  149. symbolSizeColumns:32
  150. dataRegionSizeRows:14
  151. dataRegionSizeColumns:14
  152. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:36
  153. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:62]]],
  154. [[ZXDataMatrixVersion alloc] initWithVersionNumber:11
  155. symbolSizeRows:36
  156. symbolSizeColumns:36
  157. dataRegionSizeRows:16
  158. dataRegionSizeColumns:16
  159. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:42
  160. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:86]]],
  161. [[ZXDataMatrixVersion alloc] initWithVersionNumber:12
  162. symbolSizeRows:40
  163. symbolSizeColumns:40
  164. dataRegionSizeRows:18
  165. dataRegionSizeColumns:18
  166. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:48
  167. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:114]]],
  168. [[ZXDataMatrixVersion alloc] initWithVersionNumber:13
  169. symbolSizeRows:44
  170. symbolSizeColumns:44
  171. dataRegionSizeRows:20
  172. dataRegionSizeColumns:20
  173. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:56
  174. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:144]]],
  175. [[ZXDataMatrixVersion alloc] initWithVersionNumber:14
  176. symbolSizeRows:48
  177. symbolSizeColumns:48
  178. dataRegionSizeRows:22
  179. dataRegionSizeColumns:22
  180. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:68
  181. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:174]]],
  182. [[ZXDataMatrixVersion alloc] initWithVersionNumber:15
  183. symbolSizeRows:52
  184. symbolSizeColumns:52
  185. dataRegionSizeRows:24
  186. dataRegionSizeColumns:24
  187. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:42
  188. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:2 dataCodewords:102]]],
  189. [[ZXDataMatrixVersion alloc] initWithVersionNumber:16
  190. symbolSizeRows:64
  191. symbolSizeColumns:64
  192. dataRegionSizeRows:14
  193. dataRegionSizeColumns:14
  194. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:56
  195. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:2 dataCodewords:140]]],
  196. [[ZXDataMatrixVersion alloc] initWithVersionNumber:17
  197. symbolSizeRows:72
  198. symbolSizeColumns:72
  199. dataRegionSizeRows:16
  200. dataRegionSizeColumns:16
  201. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:36
  202. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:4 dataCodewords:92]]],
  203. [[ZXDataMatrixVersion alloc] initWithVersionNumber:18
  204. symbolSizeRows:80
  205. symbolSizeColumns:80
  206. dataRegionSizeRows:18
  207. dataRegionSizeColumns:18
  208. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:48
  209. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:4 dataCodewords:114]]],
  210. [[ZXDataMatrixVersion alloc] initWithVersionNumber:19
  211. symbolSizeRows:88
  212. symbolSizeColumns:88
  213. dataRegionSizeRows:20
  214. dataRegionSizeColumns:20
  215. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:56
  216. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:4 dataCodewords:144]]],
  217. [[ZXDataMatrixVersion alloc] initWithVersionNumber:20
  218. symbolSizeRows:96
  219. symbolSizeColumns:96
  220. dataRegionSizeRows:22
  221. dataRegionSizeColumns:22
  222. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:68
  223. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:4 dataCodewords:174]]],
  224. [[ZXDataMatrixVersion alloc] initWithVersionNumber:21
  225. symbolSizeRows:104
  226. symbolSizeColumns:104
  227. dataRegionSizeRows:24
  228. dataRegionSizeColumns:24
  229. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:56
  230. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:6 dataCodewords:136]]],
  231. [[ZXDataMatrixVersion alloc] initWithVersionNumber:22
  232. symbolSizeRows:120
  233. symbolSizeColumns:120
  234. dataRegionSizeRows:18
  235. dataRegionSizeColumns:18
  236. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:68
  237. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:6 dataCodewords:175]]],
  238. [[ZXDataMatrixVersion alloc] initWithVersionNumber:23
  239. symbolSizeRows:132
  240. symbolSizeColumns:132
  241. dataRegionSizeRows:20
  242. dataRegionSizeColumns:20
  243. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:62
  244. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:8 dataCodewords:163]]],
  245. [[ZXDataMatrixVersion alloc] initWithVersionNumber:24
  246. symbolSizeRows:144
  247. symbolSizeColumns:144
  248. dataRegionSizeRows:22
  249. dataRegionSizeColumns:22
  250. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:62
  251. ecBlocks1:[[ZXDataMatrixECB alloc] initWithCount:8 dataCodewords:156]
  252. ecBlocks2:[[ZXDataMatrixECB alloc] initWithCount:2 dataCodewords:155]]],
  253. [[ZXDataMatrixVersion alloc] initWithVersionNumber:25
  254. symbolSizeRows:8
  255. symbolSizeColumns:18
  256. dataRegionSizeRows:6
  257. dataRegionSizeColumns:16
  258. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:7
  259. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:5]]],
  260. [[ZXDataMatrixVersion alloc] initWithVersionNumber:26
  261. symbolSizeRows:8
  262. symbolSizeColumns:32
  263. dataRegionSizeRows:6
  264. dataRegionSizeColumns:14
  265. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:11
  266. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:10]]],
  267. [[ZXDataMatrixVersion alloc] initWithVersionNumber:27
  268. symbolSizeRows:12
  269. symbolSizeColumns:26
  270. dataRegionSizeRows:10
  271. dataRegionSizeColumns:24
  272. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:14
  273. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:16]]],
  274. [[ZXDataMatrixVersion alloc] initWithVersionNumber:28
  275. symbolSizeRows:12
  276. symbolSizeColumns:36
  277. dataRegionSizeRows:10
  278. dataRegionSizeColumns:16
  279. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:18
  280. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:22]]],
  281. [[ZXDataMatrixVersion alloc] initWithVersionNumber:29
  282. symbolSizeRows:16
  283. symbolSizeColumns:36
  284. dataRegionSizeRows:14
  285. dataRegionSizeColumns:16
  286. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:24
  287. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:32]]],
  288. [[ZXDataMatrixVersion alloc] initWithVersionNumber:30
  289. symbolSizeRows:16
  290. symbolSizeColumns:48
  291. dataRegionSizeRows:14
  292. dataRegionSizeColumns:22
  293. ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:28
  294. ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:49]]]];
  295. }
  296. @end