react-native-nitro-zxing 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. package/README.md +34 -0
  2. package/VisionCameraZxing.podspec +48 -0
  3. package/android/CMakeLists.txt +43 -0
  4. package/android/build.gradle +150 -0
  5. package/android/fix-prefab.gradle +51 -0
  6. package/android/gradle.properties +5 -0
  7. package/android/src/main/AndroidManifest.xml +3 -0
  8. package/android/src/main/cpp/cpp-adapter.cpp +7 -0
  9. package/android/src/main/java/com/margelo/nitro/camera/zxing/VisionCameraZxingPackage.kt +21 -0
  10. package/cpp/BarcodeValueTypeClassifier.cpp +70 -0
  11. package/cpp/BarcodeValueTypeClassifier.hpp +14 -0
  12. package/cpp/FrameImageView.cpp +75 -0
  13. package/cpp/FrameImageView.hpp +34 -0
  14. package/cpp/HybridBarcode.cpp +59 -0
  15. package/cpp/HybridBarcode.hpp +26 -0
  16. package/cpp/HybridBarcodeScanner.cpp +121 -0
  17. package/cpp/HybridBarcodeScanner.hpp +26 -0
  18. package/cpp/HybridBarcodeScannerFactory.cpp +11 -0
  19. package/cpp/HybridBarcodeScannerFactory.hpp +14 -0
  20. package/cpp/ImageDownscaler.cpp +34 -0
  21. package/cpp/ImageDownscaler.hpp +21 -0
  22. package/cpp/ZXingDecoder.cpp +189 -0
  23. package/cpp/ZXingDecoder.hpp +72 -0
  24. package/cpp/zxing-core/LICENSE +202 -0
  25. package/cpp/zxing-core/README.md +156 -0
  26. package/cpp/zxing-core/core/CMakeLists.txt +784 -0
  27. package/cpp/zxing-core/core/Version.h.in +28 -0
  28. package/cpp/zxing-core/core/ZXingConfig.cmake.in +9 -0
  29. package/cpp/zxing-core/core/src/Barcode.cpp +255 -0
  30. package/cpp/zxing-core/core/src/Barcode.h +191 -0
  31. package/cpp/zxing-core/core/src/BarcodeData.h +100 -0
  32. package/cpp/zxing-core/core/src/BarcodeFormat.cpp +286 -0
  33. package/cpp/zxing-core/core/src/BarcodeFormat.h +272 -0
  34. package/cpp/zxing-core/core/src/BinaryBitmap.cpp +111 -0
  35. package/cpp/zxing-core/core/src/BinaryBitmap.h +66 -0
  36. package/cpp/zxing-core/core/src/BitArray.cpp +38 -0
  37. package/cpp/zxing-core/core/src/BitArray.h +181 -0
  38. package/cpp/zxing-core/core/src/BitMatrix.cpp +175 -0
  39. package/cpp/zxing-core/core/src/BitMatrix.h +199 -0
  40. package/cpp/zxing-core/core/src/BitMatrixCursor.h +253 -0
  41. package/cpp/zxing-core/core/src/BitMatrixIO.cpp +101 -0
  42. package/cpp/zxing-core/core/src/BitMatrixIO.h +21 -0
  43. package/cpp/zxing-core/core/src/BitSource.cpp +77 -0
  44. package/cpp/zxing-core/core/src/BitSource.h +72 -0
  45. package/cpp/zxing-core/core/src/ByteArray.h +42 -0
  46. package/cpp/zxing-core/core/src/CharacterSet.cpp +78 -0
  47. package/cpp/zxing-core/core/src/CharacterSet.h +58 -0
  48. package/cpp/zxing-core/core/src/ConcentricFinder.cpp +312 -0
  49. package/cpp/zxing-core/core/src/ConcentricFinder.h +156 -0
  50. package/cpp/zxing-core/core/src/Content.cpp +471 -0
  51. package/cpp/zxing-core/core/src/Content.h +82 -0
  52. package/cpp/zxing-core/core/src/ContentType.h +19 -0
  53. package/cpp/zxing-core/core/src/CreateBarcode.cpp +490 -0
  54. package/cpp/zxing-core/core/src/CreateBarcode.h +132 -0
  55. package/cpp/zxing-core/core/src/DecoderResult.h +92 -0
  56. package/cpp/zxing-core/core/src/DetectorResult.h +44 -0
  57. package/cpp/zxing-core/core/src/ECI.cpp +81 -0
  58. package/cpp/zxing-core/core/src/ECI.h +78 -0
  59. package/cpp/zxing-core/core/src/Error.cpp +29 -0
  60. package/cpp/zxing-core/core/src/Error.h +79 -0
  61. package/cpp/zxing-core/core/src/Flags.h +165 -0
  62. package/cpp/zxing-core/core/src/GTIN.cpp +253 -0
  63. package/cpp/zxing-core/core/src/GTIN.h +58 -0
  64. package/cpp/zxing-core/core/src/GlobalHistogramBinarizer.cpp +197 -0
  65. package/cpp/zxing-core/core/src/GlobalHistogramBinarizer.h +34 -0
  66. package/cpp/zxing-core/core/src/GridSampler.cpp +124 -0
  67. package/cpp/zxing-core/core/src/GridSampler.h +59 -0
  68. package/cpp/zxing-core/core/src/HRI.cpp +343 -0
  69. package/cpp/zxing-core/core/src/HRI.h +16 -0
  70. package/cpp/zxing-core/core/src/HybridBinarizer.cpp +315 -0
  71. package/cpp/zxing-core/core/src/HybridBinarizer.h +40 -0
  72. package/cpp/zxing-core/core/src/ImageView.h +168 -0
  73. package/cpp/zxing-core/core/src/JSON.cpp +154 -0
  74. package/cpp/zxing-core/core/src/JSON.h +66 -0
  75. package/cpp/zxing-core/core/src/LocalGrid.cpp +242 -0
  76. package/cpp/zxing-core/core/src/LocalGrid.h +91 -0
  77. package/cpp/zxing-core/core/src/LogMatrix.h +105 -0
  78. package/cpp/zxing-core/core/src/Matrix.h +125 -0
  79. package/cpp/zxing-core/core/src/MultiFormatReader.cpp +107 -0
  80. package/cpp/zxing-core/core/src/MultiFormatReader.h +34 -0
  81. package/cpp/zxing-core/core/src/MultiFormatWriter.cpp +111 -0
  82. package/cpp/zxing-core/core/src/MultiFormatWriter.h +62 -0
  83. package/cpp/zxing-core/core/src/Pattern.h +472 -0
  84. package/cpp/zxing-core/core/src/PerspectiveTransform.cpp +81 -0
  85. package/cpp/zxing-core/core/src/PerspectiveTransform.h +47 -0
  86. package/cpp/zxing-core/core/src/Point.h +185 -0
  87. package/cpp/zxing-core/core/src/Quadrilateral.h +215 -0
  88. package/cpp/zxing-core/core/src/Range.h +112 -0
  89. package/cpp/zxing-core/core/src/ReadBarcode.cpp +335 -0
  90. package/cpp/zxing-core/core/src/ReadBarcode.h +33 -0
  91. package/cpp/zxing-core/core/src/Reader.h +32 -0
  92. package/cpp/zxing-core/core/src/ReaderOptions.h +210 -0
  93. package/cpp/zxing-core/core/src/ReedSolomon.cpp +100 -0
  94. package/cpp/zxing-core/core/src/ReedSolomon.h +66 -0
  95. package/cpp/zxing-core/core/src/RegressionLine.h +161 -0
  96. package/cpp/zxing-core/core/src/ResultPoint.cpp +20 -0
  97. package/cpp/zxing-core/core/src/ResultPoint.h +35 -0
  98. package/cpp/zxing-core/core/src/StdGenerator.h +121 -0
  99. package/cpp/zxing-core/core/src/StdPrint.h +38 -0
  100. package/cpp/zxing-core/core/src/StdScope.h +55 -0
  101. package/cpp/zxing-core/core/src/StructuredAppend.h +19 -0
  102. package/cpp/zxing-core/core/src/SymbologyIdentifier.h +29 -0
  103. package/cpp/zxing-core/core/src/TextDecoder.cpp +59 -0
  104. package/cpp/zxing-core/core/src/TextDecoder.h +23 -0
  105. package/cpp/zxing-core/core/src/TextEncoder.cpp +75 -0
  106. package/cpp/zxing-core/core/src/TextEncoder.h +31 -0
  107. package/cpp/zxing-core/core/src/ThresholdBinarizer.h +58 -0
  108. package/cpp/zxing-core/core/src/TritMatrix.h +29 -0
  109. package/cpp/zxing-core/core/src/Utf.cpp +276 -0
  110. package/cpp/zxing-core/core/src/Utf.h +26 -0
  111. package/cpp/zxing-core/core/src/WhiteRectDetector.cpp +276 -0
  112. package/cpp/zxing-core/core/src/WhiteRectDetector.h +36 -0
  113. package/cpp/zxing-core/core/src/WriteBarcode.cpp +213 -0
  114. package/cpp/zxing-core/core/src/WriteBarcode.h +72 -0
  115. package/cpp/zxing-core/core/src/ZXAlgorithms.h +353 -0
  116. package/cpp/zxing-core/core/src/ZXConfig.h +17 -0
  117. package/cpp/zxing-core/core/src/ZXTestSupport.h +9 -0
  118. package/cpp/zxing-core/core/src/ZXVersion.h +14 -0
  119. package/cpp/zxing-core/core/src/ZXingC.cpp +460 -0
  120. package/cpp/zxing-core/core/src/ZXingC.h +296 -0
  121. package/cpp/zxing-core/core/src/ZXingCpp.cpp +18 -0
  122. package/cpp/zxing-core/core/src/ZXingCpp.h +76 -0
  123. package/cpp/zxing-core/core/src/ZXingQt.h +606 -0
  124. package/cpp/zxing-core/core/src/aztec/AZDecoder.cpp +376 -0
  125. package/cpp/zxing-core/core/src/aztec/AZDecoder.h +20 -0
  126. package/cpp/zxing-core/core/src/aztec/AZDetector.cpp +508 -0
  127. package/cpp/zxing-core/core/src/aztec/AZDetector.h +25 -0
  128. package/cpp/zxing-core/core/src/aztec/AZDetectorResult.h +51 -0
  129. package/cpp/zxing-core/core/src/aztec/AZEncoder.cpp +318 -0
  130. package/cpp/zxing-core/core/src/aztec/AZEncoder.h +44 -0
  131. package/cpp/zxing-core/core/src/aztec/AZEncodingState.h +40 -0
  132. package/cpp/zxing-core/core/src/aztec/AZHighLevelEncoder.cpp +377 -0
  133. package/cpp/zxing-core/core/src/aztec/AZHighLevelEncoder.h +36 -0
  134. package/cpp/zxing-core/core/src/aztec/AZReader.cpp +45 -0
  135. package/cpp/zxing-core/core/src/aztec/AZReader.h +21 -0
  136. package/cpp/zxing-core/core/src/aztec/AZToken.cpp +44 -0
  137. package/cpp/zxing-core/core/src/aztec/AZToken.h +39 -0
  138. package/cpp/zxing-core/core/src/aztec/AZWriter.cpp +38 -0
  139. package/cpp/zxing-core/core/src/aztec/AZWriter.h +55 -0
  140. package/cpp/zxing-core/core/src/datamatrix/DMBitLayout.cpp +194 -0
  141. package/cpp/zxing-core/core/src/datamatrix/DMBitLayout.h +21 -0
  142. package/cpp/zxing-core/core/src/datamatrix/DMDataBlock.cpp +63 -0
  143. package/cpp/zxing-core/core/src/datamatrix/DMDataBlock.h +41 -0
  144. package/cpp/zxing-core/core/src/datamatrix/DMDecoder.cpp +457 -0
  145. package/cpp/zxing-core/core/src/datamatrix/DMDecoder.h +19 -0
  146. package/cpp/zxing-core/core/src/datamatrix/DMDetector.cpp +1230 -0
  147. package/cpp/zxing-core/core/src/datamatrix/DMDetector.h +23 -0
  148. package/cpp/zxing-core/core/src/datamatrix/DMECEncoder.cpp +137 -0
  149. package/cpp/zxing-core/core/src/datamatrix/DMECEncoder.h +26 -0
  150. package/cpp/zxing-core/core/src/datamatrix/DMEncoderContext.h +128 -0
  151. package/cpp/zxing-core/core/src/datamatrix/DMHighLevelEncoder.cpp +919 -0
  152. package/cpp/zxing-core/core/src/datamatrix/DMHighLevelEncoder.h +29 -0
  153. package/cpp/zxing-core/core/src/datamatrix/DMReader.cpp +40 -0
  154. package/cpp/zxing-core/core/src/datamatrix/DMReader.h +21 -0
  155. package/cpp/zxing-core/core/src/datamatrix/DMSymbolInfo.cpp +141 -0
  156. package/cpp/zxing-core/core/src/datamatrix/DMSymbolInfo.h +78 -0
  157. package/cpp/zxing-core/core/src/datamatrix/DMSymbolShape.h +17 -0
  158. package/cpp/zxing-core/core/src/datamatrix/DMVersion.cpp +82 -0
  159. package/cpp/zxing-core/core/src/datamatrix/DMVersion.h +76 -0
  160. package/cpp/zxing-core/core/src/datamatrix/DMWriter.cpp +114 -0
  161. package/cpp/zxing-core/core/src/datamatrix/DMWriter.h +62 -0
  162. package/cpp/zxing-core/core/src/librscpp/README.md +65 -0
  163. package/cpp/zxing-core/core/src/librscpp/decode.h +258 -0
  164. package/cpp/zxing-core/core/src/librscpp/encode.h +124 -0
  165. package/cpp/zxing-core/core/src/librscpp/field.h +158 -0
  166. package/cpp/zxing-core/core/src/librscpp/poly.h +194 -0
  167. package/cpp/zxing-core/core/src/libzint/2of5inter.c +1 -0
  168. package/cpp/zxing-core/core/src/libzint/2of5inter_based.c +1 -0
  169. package/cpp/zxing-core/core/src/libzint/aztec.c +1 -0
  170. package/cpp/zxing-core/core/src/libzint/aztec.h +1 -0
  171. package/cpp/zxing-core/core/src/libzint/big5.h +1 -0
  172. package/cpp/zxing-core/core/src/libzint/codabar.c +1 -0
  173. package/cpp/zxing-core/core/src/libzint/code.c +1 -0
  174. package/cpp/zxing-core/core/src/libzint/code128.c +1 -0
  175. package/cpp/zxing-core/core/src/libzint/code128.h +1 -0
  176. package/cpp/zxing-core/core/src/libzint/common.c +1 -0
  177. package/cpp/zxing-core/core/src/libzint/common.h +1 -0
  178. package/cpp/zxing-core/core/src/libzint/dmatrix.c +1 -0
  179. package/cpp/zxing-core/core/src/libzint/dmatrix.h +1 -0
  180. package/cpp/zxing-core/core/src/libzint/dxfilmedge.c +1 -0
  181. package/cpp/zxing-core/core/src/libzint/eci.c +1 -0
  182. package/cpp/zxing-core/core/src/libzint/eci.h +1 -0
  183. package/cpp/zxing-core/core/src/libzint/eci_sb.h +1 -0
  184. package/cpp/zxing-core/core/src/libzint/filemem.c +1 -0
  185. package/cpp/zxing-core/core/src/libzint/filemem.h +1 -0
  186. package/cpp/zxing-core/core/src/libzint/fonts/normal_woff2.h +1 -0
  187. package/cpp/zxing-core/core/src/libzint/fonts/upcean_woff2.h +1 -0
  188. package/cpp/zxing-core/core/src/libzint/gb18030.h +1 -0
  189. package/cpp/zxing-core/core/src/libzint/gb2312.h +1 -0
  190. package/cpp/zxing-core/core/src/libzint/gbk.h +1 -0
  191. package/cpp/zxing-core/core/src/libzint/general_field.c +1 -0
  192. package/cpp/zxing-core/core/src/libzint/general_field.h +1 -0
  193. package/cpp/zxing-core/core/src/libzint/gs1.c +1 -0
  194. package/cpp/zxing-core/core/src/libzint/gs1.h +1 -0
  195. package/cpp/zxing-core/core/src/libzint/gs1_lint.h +1 -0
  196. package/cpp/zxing-core/core/src/libzint/iso3166.h +1 -0
  197. package/cpp/zxing-core/core/src/libzint/iso4217.h +1 -0
  198. package/cpp/zxing-core/core/src/libzint/ksx1001.h +1 -0
  199. package/cpp/zxing-core/core/src/libzint/large.c +1 -0
  200. package/cpp/zxing-core/core/src/libzint/large.h +1 -0
  201. package/cpp/zxing-core/core/src/libzint/library.c +1 -0
  202. package/cpp/zxing-core/core/src/libzint/maxicode.c +1 -0
  203. package/cpp/zxing-core/core/src/libzint/maxicode.h +1 -0
  204. package/cpp/zxing-core/core/src/libzint/medical.c +1 -0
  205. package/cpp/zxing-core/core/src/libzint/output.c +1 -0
  206. package/cpp/zxing-core/core/src/libzint/output.h +1 -0
  207. package/cpp/zxing-core/core/src/libzint/pdf417.c +1 -0
  208. package/cpp/zxing-core/core/src/libzint/pdf417.h +1 -0
  209. package/cpp/zxing-core/core/src/libzint/pdf417_tabs.h +1 -0
  210. package/cpp/zxing-core/core/src/libzint/qr.c +1 -0
  211. package/cpp/zxing-core/core/src/libzint/qr.h +1 -0
  212. package/cpp/zxing-core/core/src/libzint/raster.c +1 -0
  213. package/cpp/zxing-core/core/src/libzint/raster_font.h +1 -0
  214. package/cpp/zxing-core/core/src/libzint/reedsol.c +1 -0
  215. package/cpp/zxing-core/core/src/libzint/reedsol.h +1 -0
  216. package/cpp/zxing-core/core/src/libzint/reedsol_logs.h +1 -0
  217. package/cpp/zxing-core/core/src/libzint/rss.c +1 -0
  218. package/cpp/zxing-core/core/src/libzint/rss.h +1 -0
  219. package/cpp/zxing-core/core/src/libzint/sjis.h +1 -0
  220. package/cpp/zxing-core/core/src/libzint/stubs.c +137 -0
  221. package/cpp/zxing-core/core/src/libzint/svg.c +1 -0
  222. package/cpp/zxing-core/core/src/libzint/telepen.c +1 -0
  223. package/cpp/zxing-core/core/src/libzint/upcean.c +1 -0
  224. package/cpp/zxing-core/core/src/libzint/vector.c +1 -0
  225. package/cpp/zxing-core/core/src/libzint/zfiletypes.h +1 -0
  226. package/cpp/zxing-core/core/src/libzint/zint.h +1 -0
  227. package/cpp/zxing-core/core/src/libzint/zintconfig.h +1 -0
  228. package/cpp/zxing-core/core/src/libzueci/README.md +11 -0
  229. package/cpp/zxing-core/core/src/libzueci/zueci.c +1718 -0
  230. package/cpp/zxing-core/core/src/libzueci/zueci.h +179 -0
  231. package/cpp/zxing-core/core/src/libzueci/zueci_big5.h +3884 -0
  232. package/cpp/zxing-core/core/src/libzueci/zueci_common.h +31 -0
  233. package/cpp/zxing-core/core/src/libzueci/zueci_gb18030.h +264 -0
  234. package/cpp/zxing-core/core/src/libzueci/zueci_gb2312.h +2381 -0
  235. package/cpp/zxing-core/core/src/libzueci/zueci_gbk.h +4047 -0
  236. package/cpp/zxing-core/core/src/libzueci/zueci_ksx1001.h +2932 -0
  237. package/cpp/zxing-core/core/src/libzueci/zueci_sb.h +1112 -0
  238. package/cpp/zxing-core/core/src/libzueci/zueci_sjis.h +2286 -0
  239. package/cpp/zxing-core/core/src/maxicode/MCBitMatrixParser.cpp +68 -0
  240. package/cpp/zxing-core/core/src/maxicode/MCBitMatrixParser.h +30 -0
  241. package/cpp/zxing-core/core/src/maxicode/MCDecoder.cpp +329 -0
  242. package/cpp/zxing-core/core/src/maxicode/MCDecoder.h +19 -0
  243. package/cpp/zxing-core/core/src/maxicode/MCReader.cpp +65 -0
  244. package/cpp/zxing-core/core/src/maxicode/MCReader.h +21 -0
  245. package/cpp/zxing-core/core/src/oned/ODCodabarReader.cpp +102 -0
  246. package/cpp/zxing-core/core/src/oned/ODCodabarReader.h +21 -0
  247. package/cpp/zxing-core/core/src/oned/ODCodabarWriter.cpp +136 -0
  248. package/cpp/zxing-core/core/src/oned/ODCodabarWriter.h +34 -0
  249. package/cpp/zxing-core/core/src/oned/ODCode128Patterns.h +130 -0
  250. package/cpp/zxing-core/core/src/oned/ODCode128Reader.cpp +236 -0
  251. package/cpp/zxing-core/core/src/oned/ODCode128Reader.h +21 -0
  252. package/cpp/zxing-core/core/src/oned/ODCode128Writer.cpp +261 -0
  253. package/cpp/zxing-core/core/src/oned/ODCode128Writer.h +34 -0
  254. package/cpp/zxing-core/core/src/oned/ODCode39Reader.cpp +213 -0
  255. package/cpp/zxing-core/core/src/oned/ODCode39Reader.h +26 -0
  256. package/cpp/zxing-core/core/src/oned/ODCode39Writer.cpp +176 -0
  257. package/cpp/zxing-core/core/src/oned/ODCode39Writer.h +34 -0
  258. package/cpp/zxing-core/core/src/oned/ODCode93Patterns.h +80 -0
  259. package/cpp/zxing-core/core/src/oned/ODCode93Reader.cpp +112 -0
  260. package/cpp/zxing-core/core/src/oned/ODCode93Reader.h +21 -0
  261. package/cpp/zxing-core/core/src/oned/ODCode93Writer.cpp +192 -0
  262. package/cpp/zxing-core/core/src/oned/ODCode93Writer.h +32 -0
  263. package/cpp/zxing-core/core/src/oned/ODDXFilmEdgeReader.cpp +246 -0
  264. package/cpp/zxing-core/core/src/oned/ODDXFilmEdgeReader.h +26 -0
  265. package/cpp/zxing-core/core/src/oned/ODDataBarCommon.cpp +172 -0
  266. package/cpp/zxing-core/core/src/oned/ODDataBarCommon.h +204 -0
  267. package/cpp/zxing-core/core/src/oned/ODDataBarExpandedBitDecoder.cpp +253 -0
  268. package/cpp/zxing-core/core/src/oned/ODDataBarExpandedBitDecoder.h +19 -0
  269. package/cpp/zxing-core/core/src/oned/ODDataBarExpandedReader.cpp +383 -0
  270. package/cpp/zxing-core/core/src/oned/ODDataBarExpandedReader.h +25 -0
  271. package/cpp/zxing-core/core/src/oned/ODDataBarLimitedReader.cpp +163 -0
  272. package/cpp/zxing-core/core/src/oned/ODDataBarLimitedReader.h +23 -0
  273. package/cpp/zxing-core/core/src/oned/ODDataBarReader.cpp +240 -0
  274. package/cpp/zxing-core/core/src/oned/ODDataBarReader.h +25 -0
  275. package/cpp/zxing-core/core/src/oned/ODEAN13Writer.cpp +62 -0
  276. package/cpp/zxing-core/core/src/oned/ODEAN13Writer.h +34 -0
  277. package/cpp/zxing-core/core/src/oned/ODEAN8Writer.cpp +51 -0
  278. package/cpp/zxing-core/core/src/oned/ODEAN8Writer.h +34 -0
  279. package/cpp/zxing-core/core/src/oned/ODITFReader.cpp +97 -0
  280. package/cpp/zxing-core/core/src/oned/ODITFReader.h +33 -0
  281. package/cpp/zxing-core/core/src/oned/ODITFWriter.cpp +78 -0
  282. package/cpp/zxing-core/core/src/oned/ODITFWriter.h +34 -0
  283. package/cpp/zxing-core/core/src/oned/ODMultiUPCEANReader.cpp +323 -0
  284. package/cpp/zxing-core/core/src/oned/ODMultiUPCEANReader.h +32 -0
  285. package/cpp/zxing-core/core/src/oned/ODReader.cpp +259 -0
  286. package/cpp/zxing-core/core/src/oned/ODReader.h +35 -0
  287. package/cpp/zxing-core/core/src/oned/ODRowReader.h +222 -0
  288. package/cpp/zxing-core/core/src/oned/ODTelepenReader.cpp +199 -0
  289. package/cpp/zxing-core/core/src/oned/ODTelepenReader.h +25 -0
  290. package/cpp/zxing-core/core/src/oned/ODUPCAWriter.cpp +33 -0
  291. package/cpp/zxing-core/core/src/oned/ODUPCAWriter.h +34 -0
  292. package/cpp/zxing-core/core/src/oned/ODUPCEANCommon.cpp +80 -0
  293. package/cpp/zxing-core/core/src/oned/ODUPCEANCommon.h +129 -0
  294. package/cpp/zxing-core/core/src/oned/ODUPCEWriter.cpp +56 -0
  295. package/cpp/zxing-core/core/src/oned/ODUPCEWriter.h +34 -0
  296. package/cpp/zxing-core/core/src/oned/ODWriterHelper.cpp +39 -0
  297. package/cpp/zxing-core/core/src/oned/ODWriterHelper.h +48 -0
  298. package/cpp/zxing-core/core/src/pdf417/MicroPDFReader.cpp +796 -0
  299. package/cpp/zxing-core/core/src/pdf417/MicroPDFReader.h +23 -0
  300. package/cpp/zxing-core/core/src/pdf417/PDF417.cpp +85 -0
  301. package/cpp/zxing-core/core/src/pdf417/PDF417.h +81 -0
  302. package/cpp/zxing-core/core/src/pdf417/PDFBarcodeMetadata.h +53 -0
  303. package/cpp/zxing-core/core/src/pdf417/PDFBarcodeValue.cpp +48 -0
  304. package/cpp/zxing-core/core/src/pdf417/PDFBarcodeValue.h +38 -0
  305. package/cpp/zxing-core/core/src/pdf417/PDFBoundingBox.cpp +116 -0
  306. package/cpp/zxing-core/core/src/pdf417/PDFBoundingBox.h +75 -0
  307. package/cpp/zxing-core/core/src/pdf417/PDFCodeword.h +71 -0
  308. package/cpp/zxing-core/core/src/pdf417/PDFCodewordDecoder.cpp +588 -0
  309. package/cpp/zxing-core/core/src/pdf417/PDFCodewordDecoder.h +41 -0
  310. package/cpp/zxing-core/core/src/pdf417/PDFCompaction.h +20 -0
  311. package/cpp/zxing-core/core/src/pdf417/PDFCustomData.h +32 -0
  312. package/cpp/zxing-core/core/src/pdf417/PDFDecoder.cpp +725 -0
  313. package/cpp/zxing-core/core/src/pdf417/PDFDecoder.h +20 -0
  314. package/cpp/zxing-core/core/src/pdf417/PDFDetectionResult.cpp +247 -0
  315. package/cpp/zxing-core/core/src/pdf417/PDFDetectionResult.h +74 -0
  316. package/cpp/zxing-core/core/src/pdf417/PDFDetectionResultColumn.cpp +321 -0
  317. package/cpp/zxing-core/core/src/pdf417/PDFDetectionResultColumn.h +83 -0
  318. package/cpp/zxing-core/core/src/pdf417/PDFDetector.cpp +371 -0
  319. package/cpp/zxing-core/core/src/pdf417/PDFDetector.h +45 -0
  320. package/cpp/zxing-core/core/src/pdf417/PDFEncoder.cpp +570 -0
  321. package/cpp/zxing-core/core/src/pdf417/PDFEncoder.h +182 -0
  322. package/cpp/zxing-core/core/src/pdf417/PDFHighLevelEncoder.cpp +570 -0
  323. package/cpp/zxing-core/core/src/pdf417/PDFHighLevelEncoder.h +32 -0
  324. package/cpp/zxing-core/core/src/pdf417/PDFReader.cpp +333 -0
  325. package/cpp/zxing-core/core/src/pdf417/PDFReader.h +28 -0
  326. package/cpp/zxing-core/core/src/pdf417/PDFScanningDecoder.cpp +559 -0
  327. package/cpp/zxing-core/core/src/pdf417/PDFScanningDecoder.h +41 -0
  328. package/cpp/zxing-core/core/src/pdf417/PDFWriter.cpp +170 -0
  329. package/cpp/zxing-core/core/src/pdf417/PDFWriter.h +74 -0
  330. package/cpp/zxing-core/core/src/pdf417/ZXBigInteger.cpp +623 -0
  331. package/cpp/zxing-core/core/src/pdf417/ZXBigInteger.h +81 -0
  332. package/cpp/zxing-core/core/src/pdf417/ZXNullable.h +105 -0
  333. package/cpp/zxing-core/core/src/qrcode/QRBitMatrixParser.cpp +294 -0
  334. package/cpp/zxing-core/core/src/qrcode/QRBitMatrixParser.h +41 -0
  335. package/cpp/zxing-core/core/src/qrcode/QRCodecMode.cpp +95 -0
  336. package/cpp/zxing-core/core/src/qrcode/QRCodecMode.h +59 -0
  337. package/cpp/zxing-core/core/src/qrcode/QRDataBlock.cpp +93 -0
  338. package/cpp/zxing-core/core/src/qrcode/QRDataBlock.h +52 -0
  339. package/cpp/zxing-core/core/src/qrcode/QRDataMask.h +50 -0
  340. package/cpp/zxing-core/core/src/qrcode/QRDecoder.cpp +359 -0
  341. package/cpp/zxing-core/core/src/qrcode/QRDecoder.h +19 -0
  342. package/cpp/zxing-core/core/src/qrcode/QRDetector.cpp +920 -0
  343. package/cpp/zxing-core/core/src/qrcode/QRDetector.h +45 -0
  344. package/cpp/zxing-core/core/src/qrcode/QRECB.h +52 -0
  345. package/cpp/zxing-core/core/src/qrcode/QREncodeResult.h +33 -0
  346. package/cpp/zxing-core/core/src/qrcode/QREncoder.cpp +568 -0
  347. package/cpp/zxing-core/core/src/qrcode/QREncoder.h +21 -0
  348. package/cpp/zxing-core/core/src/qrcode/QRErrorCorrectionLevel.cpp +51 -0
  349. package/cpp/zxing-core/core/src/qrcode/QRErrorCorrectionLevel.h +39 -0
  350. package/cpp/zxing-core/core/src/qrcode/QRFormatInformation.cpp +160 -0
  351. package/cpp/zxing-core/core/src/qrcode/QRFormatInformation.h +61 -0
  352. package/cpp/zxing-core/core/src/qrcode/QRMaskUtil.cpp +156 -0
  353. package/cpp/zxing-core/core/src/qrcode/QRMaskUtil.h +15 -0
  354. package/cpp/zxing-core/core/src/qrcode/QRMatrixUtil.cpp +318 -0
  355. package/cpp/zxing-core/core/src/qrcode/QRMatrixUtil.h +25 -0
  356. package/cpp/zxing-core/core/src/qrcode/QRReader.cpp +149 -0
  357. package/cpp/zxing-core/core/src/qrcode/QRReader.h +21 -0
  358. package/cpp/zxing-core/core/src/qrcode/QRVersion.cpp +754 -0
  359. package/cpp/zxing-core/core/src/qrcode/QRVersion.h +127 -0
  360. package/cpp/zxing-core/core/src/qrcode/QRWriter.cpp +51 -0
  361. package/cpp/zxing-core/core/src/qrcode/QRWriter.h +74 -0
  362. package/cpp/zxing-core/core/version.rc.in +34 -0
  363. package/cpp/zxing-core/core/zxing.pc.in +8 -0
  364. package/cpp/zxing-core/wrappers/ios/README.md +25 -0
  365. package/cpp/zxing-core/wrappers/ios/Sources/Wrapper/Version.h +29 -0
  366. package/cpp/zxing-core/zxing-cpp.podspec +45 -0
  367. package/lib/factory.d.ts +10 -0
  368. package/lib/factory.js +12 -0
  369. package/lib/index.d.ts +9 -0
  370. package/lib/index.js +9 -0
  371. package/lib/specs/Barcode.nitro.d.ts +63 -0
  372. package/lib/specs/Barcode.nitro.js +1 -0
  373. package/lib/specs/BarcodeFormat.d.ts +11 -0
  374. package/lib/specs/BarcodeFormat.js +1 -0
  375. package/lib/specs/BarcodeScanner.nitro.d.ts +89 -0
  376. package/lib/specs/BarcodeScanner.nitro.js +1 -0
  377. package/lib/specs/BarcodeScannerFactory.nitro.d.ts +26 -0
  378. package/lib/specs/BarcodeScannerFactory.nitro.js +1 -0
  379. package/lib/specs/BarcodeValueType.d.ts +9 -0
  380. package/lib/specs/BarcodeValueType.js +1 -0
  381. package/lib/specs/Point.d.ts +14 -0
  382. package/lib/specs/Point.js +1 -0
  383. package/lib/specs/Rect.d.ts +22 -0
  384. package/lib/specs/Rect.js +1 -0
  385. package/lib/useBarcodeScanner.d.ts +23 -0
  386. package/lib/useBarcodeScanner.js +25 -0
  387. package/nitro.json +20 -0
  388. package/nitrogen/generated/.gitattributes +1 -0
  389. package/nitrogen/generated/android/VisionCameraZxing+autolinking.cmake +83 -0
  390. package/nitrogen/generated/android/VisionCameraZxing+autolinking.gradle +27 -0
  391. package/nitrogen/generated/android/VisionCameraZxingOnLoad.cpp +49 -0
  392. package/nitrogen/generated/android/VisionCameraZxingOnLoad.hpp +34 -0
  393. package/nitrogen/generated/android/kotlin/com/margelo/nitro/camera/zxing/VisionCameraZxingOnLoad.kt +35 -0
  394. package/nitrogen/generated/ios/VisionCameraZxing+autolinking.rb +62 -0
  395. package/nitrogen/generated/ios/VisionCameraZxing-Swift-Cxx-Bridge.cpp +17 -0
  396. package/nitrogen/generated/ios/VisionCameraZxing-Swift-Cxx-Bridge.hpp +27 -0
  397. package/nitrogen/generated/ios/VisionCameraZxing-Swift-Cxx-Umbrella.hpp +38 -0
  398. package/nitrogen/generated/ios/VisionCameraZxingAutolinking.mm +35 -0
  399. package/nitrogen/generated/ios/VisionCameraZxingAutolinking.swift +16 -0
  400. package/nitrogen/generated/shared/c++/BarcodeFormat.hpp +124 -0
  401. package/nitrogen/generated/shared/c++/BarcodeScannerOptions.hpp +85 -0
  402. package/nitrogen/generated/shared/c++/BarcodeValueType.hpp +120 -0
  403. package/nitrogen/generated/shared/c++/HybridBarcodeScannerSpec.cpp +23 -0
  404. package/nitrogen/generated/shared/c++/HybridBarcodeScannerSpec.hpp +74 -0
  405. package/nitrogen/generated/shared/c++/HybridBarcodeSpec.cpp +27 -0
  406. package/nitrogen/generated/shared/c++/HybridBarcodeSpec.hpp +82 -0
  407. package/nitrogen/generated/shared/c++/HybridZXingBarcodeScannerFactorySpec.cpp +21 -0
  408. package/nitrogen/generated/shared/c++/HybridZXingBarcodeScannerFactorySpec.hpp +67 -0
  409. package/nitrogen/generated/shared/c++/Point.hpp +87 -0
  410. package/nitrogen/generated/shared/c++/Rect.hpp +95 -0
  411. package/nitrogen/generated/shared/c++/TargetBarcodeFormat.hpp +124 -0
  412. package/package.json +108 -0
  413. package/react-native.config.js +16 -0
  414. package/src/factory.ts +26 -0
  415. package/src/index.ts +9 -0
  416. package/src/specs/Barcode.nitro.ts +70 -0
  417. package/src/specs/BarcodeFormat.ts +31 -0
  418. package/src/specs/BarcodeScanner.nitro.ts +91 -0
  419. package/src/specs/BarcodeScannerFactory.nitro.ts +27 -0
  420. package/src/specs/BarcodeValueType.ts +25 -0
  421. package/src/specs/Point.ts +14 -0
  422. package/src/specs/Rect.ts +22 -0
  423. package/src/useBarcodeScanner.ts +36 -0
@@ -0,0 +1,261 @@
1
+ /*
2
+ * Copyright 2016 Huy Cuong Nguyen
3
+ * Copyright 2016 ZXing authors
4
+ */
5
+ // SPDX-License-Identifier: Apache-2.0
6
+
7
+ #include "ODCode128Writer.h"
8
+
9
+ #include "ODCode128Patterns.h"
10
+ #include "ODWriterHelper.h"
11
+ #include "Utf.h"
12
+
13
+ #include <list>
14
+ #include <numeric>
15
+ #include <stdexcept>
16
+ #include <vector>
17
+
18
+ namespace ZXing::OneD {
19
+
20
+ static const int CODE_START_A = 103;
21
+ static const int CODE_START_B = 104;
22
+ static const int CODE_START_C = 105;
23
+ static const int CODE_CODE_A = 101;
24
+ static const int CODE_CODE_B = 100;
25
+ static const int CODE_CODE_C = 99;
26
+ static const int CODE_STOP = 106;
27
+
28
+ // Dummy characters used to specify control characters in input
29
+ static const auto ESCAPE_FNC_1 = L'\u00f1';
30
+ static const auto ESCAPE_FNC_2 = L'\u00f2';
31
+ static const auto ESCAPE_FNC_3 = L'\u00f3';
32
+ static const auto ESCAPE_FNC_4 = L'\u00f4';
33
+
34
+ static const int CODE_FNC_1 = 102; // Code A, Code B, Code C
35
+ static const int CODE_FNC_2 = 97; // Code A, Code B
36
+ static const int CODE_FNC_3 = 96; // Code A, Code B
37
+ static const int CODE_FNC_4_A = 101; // Code A
38
+ static const int CODE_FNC_4_B = 100; // Code B
39
+
40
+ // Results of minimal lookahead for code C
41
+ enum class CType
42
+ {
43
+ UNCODABLE,
44
+ ONE_DIGIT,
45
+ TWO_DIGITS,
46
+ FNC_1
47
+ };
48
+
49
+ static CType FindCType(const std::wstring& value, int start)
50
+ {
51
+ int last = Size(value);
52
+ if (start >= last) {
53
+ return CType::UNCODABLE;
54
+ }
55
+ wchar_t c = value[start];
56
+ if (c == ESCAPE_FNC_1) {
57
+ return CType::FNC_1;
58
+ }
59
+ if (c < '0' || c > '9') {
60
+ return CType::UNCODABLE;
61
+ }
62
+ if (start + 1 >= last) {
63
+ return CType::ONE_DIGIT;
64
+ }
65
+ c = value[start + 1];
66
+ if (c < '0' || c > '9') {
67
+ return CType::ONE_DIGIT;
68
+ }
69
+ return CType::TWO_DIGITS;
70
+ }
71
+
72
+ static int ChooseCode(const std::wstring& value, int start, int oldCode)
73
+ {
74
+ CType lookahead = FindCType(value, start);
75
+ if (lookahead == CType::ONE_DIGIT) {
76
+ if (oldCode == CODE_CODE_A) {
77
+ return CODE_CODE_A;
78
+ }
79
+ return CODE_CODE_B;
80
+ }
81
+ if (lookahead == CType::UNCODABLE) {
82
+ if (start < Size(value)) {
83
+ int c = value[start];
84
+ if (c < ' ' || (oldCode == CODE_CODE_A && (c < '`' || (c >= ESCAPE_FNC_1 && c <= ESCAPE_FNC_4)))) {
85
+ // can continue in code A, encodes ASCII 0 to 95 or FNC1 to FNC4
86
+ return CODE_CODE_A;
87
+ }
88
+ }
89
+ return CODE_CODE_B; // no choice
90
+ }
91
+ if (oldCode == CODE_CODE_A && lookahead == CType::FNC_1) {
92
+ return CODE_CODE_A;
93
+ }
94
+ if (oldCode == CODE_CODE_C) { // can continue in code C
95
+ return CODE_CODE_C;
96
+ }
97
+ if (oldCode == CODE_CODE_B) {
98
+ if (lookahead == CType::FNC_1) {
99
+ return CODE_CODE_B; // can continue in code B
100
+ }
101
+ // Seen two consecutive digits, see what follows
102
+ lookahead = FindCType(value, start + 2);
103
+ if (lookahead == CType::UNCODABLE || lookahead == CType::ONE_DIGIT) {
104
+ return CODE_CODE_B; // not worth switching now
105
+ }
106
+ if (lookahead == CType::FNC_1) { // two digits, then FNC_1...
107
+ lookahead = FindCType(value, start + 3);
108
+ if (lookahead == CType::TWO_DIGITS) { // then two more digits, switch
109
+ return CODE_CODE_C;
110
+ }
111
+ else {
112
+ return CODE_CODE_B; // otherwise not worth switching
113
+ }
114
+ }
115
+ // At this point, there are at least 4 consecutive digits.
116
+ // Look ahead to choose whether to switch now or on the next round.
117
+ int index = start + 4;
118
+ while ((lookahead = FindCType(value, index)) == CType::TWO_DIGITS) {
119
+ index += 2;
120
+ }
121
+ if (lookahead == CType::ONE_DIGIT) { // odd number of digits, switch later
122
+ return CODE_CODE_B;
123
+ }
124
+ return CODE_CODE_C; // even number of digits, switch now
125
+ }
126
+ // Here oldCode == 0, which means we are choosing the initial code
127
+ if (lookahead == CType::FNC_1) { // ignore FNC_1
128
+ lookahead = FindCType(value, start + 1);
129
+ }
130
+ if (lookahead == CType::TWO_DIGITS) { // at least two digits, start in code C
131
+ return CODE_CODE_C;
132
+ }
133
+ return CODE_CODE_B;
134
+ }
135
+
136
+ BitMatrix
137
+ Code128Writer::encode(const std::wstring& contents, int width, int height) const
138
+ {
139
+ // Check length
140
+ int length = Size(contents);
141
+ if (length < 1 || length > 80) {
142
+ throw std::invalid_argument("Contents length should be between 1 and 80 characters");
143
+ }
144
+
145
+ // Check content
146
+ for (int i = 0; i < length; ++i) {
147
+ int c = contents[i];
148
+ switch (c) {
149
+ case ESCAPE_FNC_1:
150
+ case ESCAPE_FNC_2:
151
+ case ESCAPE_FNC_3:
152
+ case ESCAPE_FNC_4: break;
153
+ default:
154
+ if (c > 127) {
155
+ // support for FNC4 isn't implemented, no full Latin-1 character set available at the moment
156
+ throw std::invalid_argument("Bad character in input: " + ToUtf8(contents.substr(i, 1)));
157
+ }
158
+ }
159
+ }
160
+
161
+ std::list<Pattern<6>> patterns; // temporary storage for patterns
162
+ int checkSum = 0;
163
+ int checkWeight = 1;
164
+ int codeSet = 0; // selected code (CODE_CODE_B or CODE_CODE_C)
165
+ int position = 0; // position in contents
166
+
167
+ while (position < length) {
168
+ //Select code to use
169
+ int newCodeSet = ChooseCode(contents, position, codeSet);
170
+
171
+ //Get the pattern index
172
+ int patternIndex;
173
+ if (newCodeSet == codeSet) {
174
+ // Encode the current character
175
+ // First handle escapes
176
+ switch (contents[position]) {
177
+ case ESCAPE_FNC_1: patternIndex = CODE_FNC_1; break;
178
+ case ESCAPE_FNC_2: patternIndex = CODE_FNC_2; break;
179
+ case ESCAPE_FNC_3: patternIndex = CODE_FNC_3; break;
180
+ case ESCAPE_FNC_4: patternIndex = (codeSet == CODE_CODE_A) ? CODE_FNC_4_A : CODE_FNC_4_B; break;
181
+ default:
182
+ // Then handle normal characters otherwise
183
+ if (codeSet == CODE_CODE_A) {
184
+ patternIndex = contents[position] - ' ';
185
+ if (patternIndex < 0) {
186
+ // everything below a space character comes behind the underscore in the code patterns table
187
+ patternIndex += '`';
188
+ }
189
+ } else if (codeSet == CODE_CODE_B) {
190
+ patternIndex = contents[position] - ' ';
191
+ } else { // CODE_CODE_C
192
+ patternIndex =
193
+ (contents[position] - '0') * 10 + (position + 1 < length ? contents[position + 1] - '0' : 0);
194
+ position++; // Also incremented below
195
+ }
196
+ }
197
+ position++;
198
+ }
199
+ else {
200
+ // Should we change the current code?
201
+ // Do we have a code set?
202
+ if (codeSet == 0) {
203
+ // No, we don't have a code set
204
+ if (newCodeSet == CODE_CODE_A) {
205
+ patternIndex = CODE_START_A;
206
+ }
207
+ else if (newCodeSet == CODE_CODE_B) {
208
+ patternIndex = CODE_START_B;
209
+ }
210
+ else {
211
+ // CODE_CODE_C
212
+ patternIndex = CODE_START_C;
213
+ }
214
+ }
215
+ else {
216
+ // Yes, we have a code set
217
+ patternIndex = newCodeSet;
218
+ }
219
+ codeSet = newCodeSet;
220
+ }
221
+
222
+ // Get the pattern
223
+ patterns.push_back(Code128::CODE_PATTERNS[patternIndex]);
224
+
225
+ // Compute checksum
226
+ checkSum += patternIndex * checkWeight;
227
+ if (position != 0) {
228
+ checkWeight++;
229
+ }
230
+ }
231
+
232
+ // Compute and append checksum
233
+ checkSum %= 103;
234
+ patterns.push_back(Code128::CODE_PATTERNS[checkSum]);
235
+
236
+ // Append stop code
237
+ patterns.push_back(Code128::CODE_PATTERNS[CODE_STOP]);
238
+
239
+ // Compute code width
240
+ int codeWidth = 2; // termination bar
241
+ for (const auto& pattern : patterns) {
242
+ codeWidth += Reduce(pattern);
243
+ }
244
+
245
+ // Compute result
246
+ std::vector<bool> result(codeWidth, false);
247
+ const auto op = [&result](auto pos, const auto& pattern){ return pos + WriterHelper::AppendPattern(result, pos, pattern, true);};
248
+ auto pos = std::accumulate(std::begin(patterns), std::end(patterns), int{}, op);
249
+ // Append termination bar
250
+ result[pos++] = true;
251
+ result[pos++] = true;
252
+
253
+ return WriterHelper::RenderResult(result, width, height, _sidesMargin >= 0 ? _sidesMargin : 10);
254
+ }
255
+
256
+ BitMatrix Code128Writer::encode(const std::string& contents, int width, int height) const
257
+ {
258
+ return encode(FromUtf8(contents), width, height);
259
+ }
260
+
261
+ } // namespace ZXing::OneD
@@ -0,0 +1,34 @@
1
+ /*
2
+ * Copyright 2016 Huy Cuong Nguyen
3
+ * Copyright 2016 ZXing authors
4
+ */
5
+ // SPDX-License-Identifier: Apache-2.0
6
+
7
+ #pragma once
8
+
9
+ #include <string>
10
+
11
+ namespace ZXing {
12
+
13
+ class BitMatrix;
14
+
15
+ namespace OneD {
16
+
17
+ /**
18
+ * This object renders a CODE128 code as a {@link BitMatrix}.
19
+ *
20
+ * @author erik.barbara@gmail.com (Erik Barbara)
21
+ */
22
+ class Code128Writer
23
+ {
24
+ public:
25
+ Code128Writer& setMargin(int sidesMargin) { _sidesMargin = sidesMargin; return *this; }
26
+ BitMatrix encode(const std::wstring& contents, int width, int height) const;
27
+ BitMatrix encode(const std::string& contents, int width, int height) const;
28
+
29
+ private:
30
+ int _sidesMargin = -1;
31
+ };
32
+
33
+ } // OneD
34
+ } // ZXing
@@ -0,0 +1,213 @@
1
+ /*
2
+ * Copyright 2016 Nu-book Inc.
3
+ * Copyright 2016 ZXing authors
4
+ */
5
+ // SPDX-License-Identifier: Apache-2.0
6
+
7
+ #include "ODCode39Reader.h"
8
+
9
+ #include "ReaderOptions.h"
10
+ #include "BarcodeData.h"
11
+ #include "SymbologyIdentifier.h"
12
+ #include "ZXAlgorithms.h"
13
+
14
+ #include <algorithm>
15
+ #include <array>
16
+
17
+ namespace ZXing::OneD {
18
+
19
+ static constexpr char ALPHABET[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*";
20
+
21
+ /**
22
+ * Each character consists of 5 bars and 4 spaces, 3 of which are wide (i.e. 6 are narrow).
23
+ * Each character is followed by a narrow space. The narrow to wide ratio is between 1:2 and 1:3.
24
+ * These represent the encodings of characters, as patterns of wide and narrow bars.
25
+ * The 9 least-significant bits of each int correspond to the pattern of wide and narrow,
26
+ * with 1s representing "wide" and 0s representing "narrow".
27
+ */
28
+ static constexpr std::array CHARACTER_ENCODINGS = {
29
+ 0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064, // 0-9
30
+ 0x109, 0x049, 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C, // A-J
31
+ 0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106, 0x046, 0x016, // K-T
32
+ 0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x0A8, // U-$
33
+ 0x0A2, 0x08A, 0x02A, 0x094 // /-% , *
34
+ };
35
+
36
+ static_assert(Size(ALPHABET) == Size(CHARACTER_ENCODINGS), "table size mismatch");
37
+
38
+ static constexpr std::array<char, 26> PERCENTAGE_MAPPING = {
39
+ 'A' - 38, 'B' - 38, 'C' - 38, 'D' - 38, 'E' - 38, // %A to %E map to control codes ESC to USep
40
+ 'F' - 11, 'G' - 11, 'H' - 11, 'I' - 11, 'J' - 11, // %F to %J map to ; < = > ?
41
+ 'K' + 16, 'L' + 16, 'M' + 16, 'N' + 16, 'O' + 16, // %K to %O map to [ \ ] ^ _
42
+ 'P' + 43, 'Q' + 43, 'R' + 43, 'S' + 43, 'T' + 43, // %P to %T map to { | } ~ DEL
43
+ '\0', '@', '`', // %U map to NUL, %V map to @, %W map to `
44
+ 127, 127, 127 // %X to %Z all map to DEL (127)
45
+ };
46
+
47
+ using CounterContainer = std::array<int, 9>;
48
+
49
+ // each character has 5 bars and 4 spaces
50
+ constexpr int CHAR_LEN = 9;
51
+
52
+ /** Decode the full ASCII string. Return empty string if FormatError occurred.
53
+ * ctrl is either "$%/+" for code39 or "abcd" for code93. */
54
+ std::string DecodeCode39AndCode93FullASCII(std::string encoded, const char ctrl[4])
55
+ {
56
+ auto out = encoded.begin();
57
+ for (auto in = encoded.cbegin(); in != encoded.cend(); ++in) {
58
+ char c = *in;
59
+ if (Contains(ctrl, c)) {
60
+ char next = *++in; // if in is one short of cend(), then next == 0
61
+ if (next < 'A' || next > 'Z')
62
+ return {};
63
+ if (c == ctrl[0])
64
+ c = next - 64; // $A to $Z map to control codes SH to SB
65
+ else if (c == ctrl[1])
66
+ c = PERCENTAGE_MAPPING[next - 'A'];
67
+ else if (c == ctrl[2])
68
+ c = next - 32; // /A to /O map to ! to , and /Z maps to :
69
+ else
70
+ c = next + 32; // +A to +Z map to a to z
71
+ }
72
+ *out++ = c;
73
+ }
74
+ encoded.erase(out, encoded.end());
75
+ return encoded;
76
+ }
77
+
78
+ /* Requires 6 character `str` containing only TABELLA characters */
79
+ static std::string DecodeCode32(std::string_view str)
80
+ {
81
+ constexpr const char TABELLA[] = "0123456789BCDFGHJKLMNPQRSTUVWXYZ"; // 0-9, A-Z less A,E,I,O
82
+
83
+ if (str.size() != 6 || !std::all_of(str.begin(), str.end(), [&](char c) { return Contains(TABELLA, c); }))
84
+ return {};
85
+
86
+ int val = Reduce(str, 0, [&](int acc, char c) { return acc * 32 + IndexOf(TABELLA, c); });
87
+
88
+ if (val < 0 || val >= 1000000000)
89
+ return {};
90
+
91
+ std::string res = ToString(val, 9);
92
+
93
+ int checksum = 0;
94
+ for (int i = 0; i < 8; i += 2) {
95
+ int j = 2 * (res[i + 1] - '0');
96
+ checksum += (res[i] - '0') + j % 10 + (j >= 10);
97
+ }
98
+ checksum %= 10;
99
+
100
+ if (checksum != res.back() - '0')
101
+ return {};
102
+
103
+ return "A" + res;
104
+ }
105
+
106
+ static bool IsPZN(std::string_view str)
107
+ {
108
+ if (str.size() != 9 || str[0] != '-' || !std::all_of(str.begin() + 1, str.end(), IsDigit<char>))
109
+ return false;
110
+
111
+ int checksum = 0;
112
+ for (int i = 1; i < 8; ++i)
113
+ checksum += (str[i] - '0') * i;
114
+ checksum %= 11;
115
+
116
+ return checksum == str.back() - '0';
117
+ }
118
+
119
+ BarcodeData Code39Reader::decodePattern(int rowNumber, PatternView& next, std::unique_ptr<RowReader::DecodingState>&) const
120
+ {
121
+ // minimal number of characters that must be present (including start, stop and checksum characters)
122
+ int minCharCount = _opts.validateOptionalChecksum() ? 4 : 3;
123
+ auto isStartOrStopSymbol = [](char c) { return c == '*'; };
124
+
125
+ // provide the indices with the narrow bars/spaces which have to be equally wide
126
+ constexpr auto START_PATTERN = FixedSparsePattern<CHAR_LEN, 6>{0, 2, 3, 5, 7, 8};
127
+ // the spec requires a quiet zone of 10x narrow bar width, so with a 1:3 narrow:wide ratio
128
+ // and 3w+6n, a single character is 15x wide, so the below scale would need to be 2/3.
129
+ // This value used to be 1/2 but real-world feedback suggests 1/3 is preferable.
130
+ constexpr float QUIET_ZONE_SCALE = 1.f/3;
131
+
132
+ next = FindLeftGuard(next, minCharCount * CHAR_LEN, START_PATTERN, QUIET_ZONE_SCALE * 12);
133
+ if (!next.isValid())
134
+ return {};
135
+
136
+ if (!isStartOrStopSymbol(DecodeNarrowWidePattern(next, CHARACTER_ENCODINGS, ALPHABET))) // read off the start pattern
137
+ return {};
138
+
139
+ int xStart = next.pixelsInFront();
140
+ int maxInterCharacterSpace = next.sum() / 2; // spec actually says 1 narrow space, width/2 is about 4
141
+
142
+ std::string txt;
143
+ txt.reserve(20);
144
+
145
+ do {
146
+ // check remaining input width and inter-character space
147
+ if (!next.skipSymbol() || !next.skipSingle(maxInterCharacterSpace))
148
+ return {};
149
+
150
+ txt += DecodeNarrowWidePattern(next, CHARACTER_ENCODINGS, ALPHABET);
151
+ if (txt.back() == 0)
152
+ return {};
153
+ } while (!isStartOrStopSymbol(txt.back()));
154
+
155
+ txt.pop_back(); // remove asterisk
156
+
157
+ // check txt length and whitespace after the last char. See also FindStartPattern.
158
+ if (Size(txt) < minCharCount - 2 || !next.hasQuietZoneAfter(QUIET_ZONE_SCALE))
159
+ return {};
160
+
161
+ int xStop = next.pixelsTillEnd();
162
+
163
+ using enum BarcodeFormat;
164
+ BarcodeFormat format = None;
165
+ Error error;
166
+
167
+ // Symbology identifier modifiers ISO/IEC 16388:2007 Annex C Table C.1
168
+ // constexpr const char symbologyModifiers[4] = {'0', '1' /*checksum*/, '4' /*full ASCII*/, '5' /*checksum + full ASCII*/};
169
+ SymbologyIdentifier symbologyIdentifier = {'A', '0' };
170
+
171
+ if (format == None && _opts.hasFormat(PZN) && IsPZN(txt)) {
172
+ format = PZN;
173
+ }
174
+ if (format == None && _opts.hasFormat(Code32)) {
175
+ auto code32Txt = DecodeCode32(txt);
176
+ if (!code32Txt.empty()) {
177
+ format = Code32;
178
+ txt = std::move(code32Txt);
179
+ }
180
+ }
181
+ if (format == None) {
182
+ auto lastChar = txt.back();
183
+ txt.pop_back();
184
+ int checksum = TransformReduce(txt, 0, [](char c) { return IndexOf(ALPHABET, c); });
185
+ bool hasValidChecksum = lastChar == ALPHABET[checksum % 43];
186
+ if (!hasValidChecksum) {
187
+ txt.push_back(lastChar);
188
+ if (_opts.validateOptionalChecksum())
189
+ error = ChecksumError();
190
+ }
191
+
192
+ constexpr const char shiftChars[] = "$%/+";
193
+ if (_opts.hasFormat(Code39Ext) && std::ranges::find_first_of(txt, shiftChars) != txt.end()) {
194
+ auto fullASCII = DecodeCode39AndCode93FullASCII(txt, shiftChars);
195
+ if (!fullASCII.empty()) {
196
+ txt = std::move(fullASCII);
197
+ format = Code39Ext;
198
+ }
199
+ }
200
+
201
+ if (format == None && _opts.hasFormat(Code39Std))
202
+ format = Code39;
203
+
204
+ if (hasValidChecksum)
205
+ txt.push_back(lastChar);
206
+
207
+ symbologyIdentifier.modifier += (hasValidChecksum ? 1 : 0) + (format == Code39Ext ? 4 : 0);
208
+ }
209
+
210
+ return LinearBarcode(format, std::move(txt), rowNumber, xStart, xStop, symbologyIdentifier, error);
211
+ }
212
+
213
+ } // namespace ZXing::OneD
@@ -0,0 +1,26 @@
1
+ /*
2
+ * Copyright 2016 Nu-book Inc.
3
+ * Copyright 2016 ZXing authors
4
+ */
5
+ // SPDX-License-Identifier: Apache-2.0
6
+
7
+ #pragma once
8
+
9
+ #include "ODRowReader.h"
10
+
11
+ namespace ZXing::OneD {
12
+
13
+ class Code39Reader : public RowReader
14
+ {
15
+ public:
16
+ /**
17
+ * Creates a reader that can be configured to check the last character as a check digit,
18
+ * or optionally attempt to decode "extended Code 39" sequences that are used to encode
19
+ * the full ASCII character set.
20
+ */
21
+ using RowReader::RowReader;
22
+
23
+ BarcodeData decodePattern(int rowNumber, PatternView& next, std::unique_ptr<DecodingState>&) const override;
24
+ };
25
+
26
+ } // namespace ZXing::OneD