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,318 @@
1
+ /*
2
+ * Copyright 2016 Huy Cuong Nguyen
3
+ * Copyright 2016 ZXing authors
4
+ */
5
+ // SPDX-License-Identifier: Apache-2.0
6
+
7
+ #include "QRMatrixUtil.h"
8
+
9
+ #include "BitArray.h"
10
+ #include "QRDataMask.h"
11
+ #include "QRErrorCorrectionLevel.h"
12
+ #include "QRVersion.h"
13
+
14
+ #include <bit>
15
+ #include <stdexcept>
16
+ #include <string>
17
+
18
+ namespace ZXing::QRCode {
19
+
20
+ // From Appendix D in JISX0510:2004 (p. 67)
21
+ static const int VERSION_INFO_POLY = 0x1f25; // 1 1111 0010 0101
22
+
23
+ // From Appendix C in JISX0510:2004 (p.65).
24
+ static const int TYPE_INFO_POLY = 0x537;
25
+ static const int TYPE_INFO_MASK_PATTERN = 0x5412;
26
+
27
+ static void EmbedTimingPatterns(TritMatrix& matrix)
28
+ {
29
+ // -8 is for skipping position detection patterns (size 7), and two horizontal/vertical
30
+ // separation patterns (size 1). Thus, 8 = 7 + 1.
31
+ for (int i = 8; i < matrix.width() - 8; ++i) {
32
+ bool bit = (i + 1) % 2;
33
+ // Horizontal line.
34
+ matrix.set(i, 6, bit);
35
+ // Vertical line.
36
+ matrix.set(6, i, bit);
37
+ }
38
+ }
39
+
40
+ // Note that we cannot unify the function with embedPositionDetectionPattern() despite they are
41
+ // almost identical, since we cannot write a function that takes 2D arrays in different sizes in
42
+ // C/C++. We should live with the fact.
43
+ static void EmbedPositionAdjustmentPattern(int xStart, int yStart, TritMatrix& matrix)
44
+ {
45
+ for (int y = 0; y < 5; ++y)
46
+ for (int x = 0; x < 5; ++x)
47
+ matrix.set(xStart + x, yStart + y, maxAbsComponent(PointI(x, y) - PointI(2, 2)) != 1);
48
+ }
49
+
50
+ // Embed position adjustment patterns if need be.
51
+ static void EmbedPositionAdjustmentPatterns(const Version& version, TritMatrix& matrix)
52
+ {
53
+ if (version.versionNumber() < 2) { // The patterns appear if version >= 2
54
+ return;
55
+ }
56
+ auto& coordinates = version.alignmentPatternCenters();
57
+ for (int y : coordinates) {
58
+ for (int x : coordinates) {
59
+ // Check x/y is valid: don't place alignment patterns intersecting with the 3 finder patterns
60
+ if ((x == 6 && y == 6) || (x == 6 && y == matrix.height() - 7) || (x == matrix.width() - 7 && y == 6))
61
+ continue;
62
+
63
+ // -2 is necessary since the x/y coordinates point to the center of the pattern, not the
64
+ // left top corner.
65
+ EmbedPositionAdjustmentPattern(x - 2, y - 2, matrix);
66
+ }
67
+ }
68
+ }
69
+
70
+ static void EmbedPositionDetectionPattern(int xStart, int yStart, TritMatrix& matrix)
71
+ {
72
+ for (int y = 0; y < 7; ++y)
73
+ for (int x = 0; x < 7; ++x)
74
+ matrix.set(xStart + x, yStart + y, maxAbsComponent(PointI(x, y) - PointI(3, 3)) != 2);
75
+
76
+ // Surround the 7x7 pattern with one line of white space (separation pattern)
77
+ auto setIfInside = [&](int x, int y) {
78
+ if( x >= 0 && x < matrix.width() && y >= 0 && y < matrix.height())
79
+ matrix.set(x, y, false);
80
+ };
81
+
82
+ for (int i = -1; i < 8; ++i) {
83
+ setIfInside(xStart + i, yStart - 1); // top
84
+ setIfInside(xStart + i, yStart + 7); // bottom
85
+ setIfInside(xStart - 1, yStart + i); // left
86
+ setIfInside(xStart + 7, yStart + i); // right
87
+ }
88
+ }
89
+
90
+ // Embed position detection patterns and surrounding vertical/horizontal separators.
91
+ static void EmbedPositionDetectionPatternsAndSeparators(TritMatrix& matrix)
92
+ {
93
+ // Left top corner.
94
+ EmbedPositionDetectionPattern(0, 0, matrix);
95
+ // Right top corner.
96
+ EmbedPositionDetectionPattern(matrix.width() - 7, 0, matrix);
97
+ // Left bottom corner.
98
+ EmbedPositionDetectionPattern(0, matrix.width() - 7, matrix);
99
+ }
100
+
101
+
102
+ // Embed the lonely dark dot at left bottom corner. JISX0510:2004 (p.46)
103
+ static void EmbedDarkDotAtLeftBottomCorner(TritMatrix& matrix)
104
+ {
105
+ matrix.set(8, matrix.height() - 8, true);
106
+ }
107
+
108
+ // Return the position of the most significant bit set (to one) in the "value". The most
109
+ // significant bit is position 32. If there is no bit set, return 0. Examples:
110
+ // - findMSBSet(0) => 0
111
+ // - findMSBSet(1) => 1
112
+ // - findMSBSet(255) => 8
113
+ static int FindMSBSet(unsigned value)
114
+ {
115
+ return 32 - std::countl_zero(value);
116
+ }
117
+
118
+ // Calculate BCH (Bose-Chaudhuri-Hocquenghem) code for "value" using polynomial "poly". The BCH
119
+ // code is used for encoding type information and version information.
120
+ // Example: Calculation of version information of 7.
121
+ // f(x) is created from 7.
122
+ // - 7 = 000111 in 6 bits
123
+ // - f(x) = x^2 + x^1 + x^0
124
+ // g(x) is given by the standard (p. 67)
125
+ // - g(x) = x^12 + x^11 + x^10 + x^9 + x^8 + x^5 + x^2 + 1
126
+ // Multiply f(x) by x^(18 - 6)
127
+ // - f'(x) = f(x) * x^(18 - 6)
128
+ // - f'(x) = x^14 + x^13 + x^12
129
+ // Calculate the remainder of f'(x) / g(x)
130
+ // x^2
131
+ // __________________________________________________
132
+ // g(x) )x^14 + x^13 + x^12
133
+ // x^14 + x^13 + x^12 + x^11 + x^10 + x^7 + x^4 + x^2
134
+ // --------------------------------------------------
135
+ // x^11 + x^10 + x^7 + x^4 + x^2
136
+ //
137
+ // The remainder is x^11 + x^10 + x^7 + x^4 + x^2
138
+ // Encode it in binary: 110010010100
139
+ // The return value is 0xc94 (1100 1001 0100)
140
+ //
141
+ // Since all coefficients in the polynomials are 1 or 0, we can do the calculation by bit
142
+ // operations. We don't care if coefficients are positive or negative.
143
+ static int CalculateBCHCode(int value, int poly)
144
+ {
145
+ // If poly is "1 1111 0010 0101" (version info poly), msbSetInPoly is 13. We'll subtract 1
146
+ // from 13 to make it 12.
147
+ int msbSetInPoly = FindMSBSet(poly);
148
+ value <<= msbSetInPoly - 1;
149
+ // Do the division business using exclusive-or operations.
150
+ while (FindMSBSet(value) >= msbSetInPoly) {
151
+ value ^= poly << (FindMSBSet(value) - msbSetInPoly);
152
+ }
153
+ // Now the "value" is the remainder (i.e. the BCH code)
154
+ return value;
155
+ }
156
+
157
+ // Make bit vector of type information. On success, store the result in "bits" and return true.
158
+ // Encode error correction level and mask pattern. See 8.9 of
159
+ // JISX0510:2004 (p.45) for details.
160
+ static BitArray MakeTypeInfoBits(ErrorCorrectionLevel ecLevel, int maskPattern)
161
+ {
162
+ if (maskPattern < 0 || maskPattern >= NUM_MASK_PATTERNS) {
163
+ throw std::invalid_argument("Invalid mask pattern");
164
+ }
165
+
166
+ BitArray bits;
167
+ int typeInfo = (BitsFromECLevel(ecLevel) << 3) | maskPattern;
168
+ bits.appendBits(typeInfo, 5);
169
+
170
+ int bchCode = CalculateBCHCode(typeInfo, TYPE_INFO_POLY);
171
+ bits.appendBits(bchCode, 10);
172
+
173
+ BitArray maskBits;
174
+ maskBits.appendBits(TYPE_INFO_MASK_PATTERN, 15);
175
+ bits.bitwiseXOR(maskBits);
176
+
177
+ if (bits.size() != 15) { // Just in case.
178
+ throw std::logic_error("Should not happen but we got: " + std::to_string(bits.size()));
179
+ }
180
+ return bits;
181
+ }
182
+
183
+ // Embed type information. On success, modify the matrix.
184
+ static void EmbedTypeInfo(ErrorCorrectionLevel ecLevel, int maskPattern, TritMatrix& matrix)
185
+ {
186
+ // Type info cells at the left top corner.
187
+ constexpr PointI TYPE_INFO_COORDINATES[] = {
188
+ {8, 0}, {8, 1}, {8, 2}, {8, 3}, {8, 4}, {8, 5}, {8, 7}, {8, 8},
189
+ {7, 8}, {5, 8}, {4, 8}, {3, 8}, {2, 8}, {1, 8}, {0, 8}
190
+ };
191
+
192
+ BitArray typeInfoBits = MakeTypeInfoBits(ecLevel, maskPattern);
193
+
194
+ for (int i = 0; i < typeInfoBits.size(); ++i) {
195
+ // Place bits in LSB to MSB order. LSB (least significant bit) is the last value in
196
+ // "typeInfoBits".
197
+ bool bit = typeInfoBits.get(typeInfoBits.size() - 1 - i);
198
+
199
+ // Type info bits at the left top corner. See 8.9 of JISX0510:2004 (p.46).
200
+ matrix.set(TYPE_INFO_COORDINATES[i], bit);
201
+
202
+ if (i < 8) {
203
+ // Right top corner.
204
+ matrix.set(matrix.width() - i - 1, 8, bit);
205
+ }
206
+ else {
207
+ // Left bottom corner.
208
+ matrix.set(8, matrix.height() - 7 + (i - 8), bit);
209
+ }
210
+ }
211
+ }
212
+
213
+ // Make bit vector of version information. On success, store the result in "bits" and return true.
214
+ // See 8.10 of JISX0510:2004 (p.45) for details.
215
+ static BitArray MakeVersionInfoBits(const Version& version)
216
+ {
217
+ BitArray bits;
218
+ bits.appendBits(version.versionNumber(), 6);
219
+ int bchCode = CalculateBCHCode(version.versionNumber(), VERSION_INFO_POLY);
220
+ bits.appendBits(bchCode, 12);
221
+
222
+ if (bits.size() != 18) { // Just in case.
223
+ throw std::logic_error("Should not happen but we got: " + std::to_string(bits.size()));
224
+ }
225
+
226
+ return bits;
227
+ }
228
+
229
+ // Embed version information if need be. On success, modify the matrix and return true.
230
+ // See 8.10 of JISX0510:2004 (p.47) for how to embed version information.
231
+ static void EmbedVersionInfo(const Version& version, TritMatrix& matrix)
232
+ {
233
+ if (version.versionNumber() < 7) { // Version info is necessary if version >= 7.
234
+ return; // Don't need version info.
235
+ }
236
+
237
+ BitArray versionInfoBits = MakeVersionInfoBits(version);
238
+
239
+ int bitIndex = 6 * 3 - 1; // It will decrease from 17 to 0.
240
+ for (int i = 0; i < 6; ++i) {
241
+ for (int j = 0; j < 3; ++j) {
242
+ // Place bits in LSB (least significant bit) to MSB order.
243
+ bool bit = versionInfoBits.get(bitIndex);
244
+ bitIndex--;
245
+ // Left bottom corner.
246
+ matrix.set(i, matrix.height() - 11 + j, bit);
247
+ // Right bottom corner.
248
+ matrix.set(matrix.height() - 11 + j, i, bit);
249
+ }
250
+ }
251
+ }
252
+
253
+ // Embed "dataBits" using "getMaskPattern". On success, modify the matrix and return true.
254
+ // For debugging purposes, it skips masking process if "getMaskPattern" is -1.
255
+ // See 8.7 of JISX0510:2004 (p.38) for how to embed data bits.
256
+ static void EmbedDataBits(const BitArray& dataBits, int maskPattern, TritMatrix& matrix)
257
+ {
258
+ int bitIndex = 0;
259
+ int direction = -1;
260
+ // Start from the right bottom cell.
261
+ int x = matrix.width() - 1;
262
+ int y = matrix.height() - 1;
263
+ while (x > 0) {
264
+ // Skip the vertical timing pattern.
265
+ if (x == 6) {
266
+ x -= 1;
267
+ }
268
+ while (y >= 0 && y < matrix.height()) {
269
+ for (int xx = x; xx > x - 2; --xx) {
270
+ // Skip the cell if it's not empty.
271
+ if (!matrix.get(xx, y).isEmpty()) {
272
+ continue;
273
+ }
274
+ // Padding bit. If there is no bit left, we'll fill the left cells with 0, as described
275
+ // in 8.4.9 of JISX0510:2004 (p. 24).
276
+ bool bit = bitIndex < dataBits.size() ? dataBits.get(bitIndex) : false;
277
+ ++bitIndex;
278
+
279
+ // Skip masking if mask_pattern is -1.
280
+ if (maskPattern != -1 && GetDataMaskBit(maskPattern, xx, y)) {
281
+ bit = !bit;
282
+ }
283
+ matrix.set(xx, y, bit);
284
+ }
285
+ y += direction;
286
+ }
287
+ direction = -direction; // Reverse the direction.
288
+ y += direction;
289
+ x -= 2; // Move to the left.
290
+ }
291
+ // All bits should be consumed.
292
+ if (bitIndex < dataBits.size()) {
293
+ throw std::invalid_argument("Not all bits consumed: " + std::to_string(bitIndex) + '/' + std::to_string(dataBits.size()));
294
+ }
295
+ }
296
+
297
+ // Build 2D matrix of QR Code from "dataBits" with "ecLevel", "version" and "getMaskPattern". On
298
+ // success, store the result in "matrix" and return true.
299
+ void BuildMatrix(const BitArray& dataBits, ErrorCorrectionLevel ecLevel, const Version& version, int maskPattern, TritMatrix& matrix)
300
+ {
301
+ matrix.clear();
302
+ // Let's get started with embedding big squares at corners.
303
+ EmbedPositionDetectionPatternsAndSeparators(matrix);
304
+ // Then, embed the dark dot at the left bottom corner.
305
+ EmbedDarkDotAtLeftBottomCorner(matrix);
306
+ // Position adjustment patterns appear if version >= 2.
307
+ EmbedPositionAdjustmentPatterns(version, matrix);
308
+ // Timing patterns should be embedded after position adj. patterns.
309
+ EmbedTimingPatterns(matrix);
310
+ // Type information appear with any version.
311
+ EmbedTypeInfo(ecLevel, maskPattern, matrix);
312
+ // Version info appear if version >= 7.
313
+ EmbedVersionInfo(version, matrix);
314
+ // Data should be embedded at end.
315
+ EmbedDataBits(dataBits, maskPattern, matrix);
316
+ }
317
+
318
+ } // namespace ZXing::QRCode
@@ -0,0 +1,25 @@
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 "TritMatrix.h"
10
+
11
+ namespace ZXing {
12
+
13
+ class BitArray;
14
+
15
+ namespace QRCode {
16
+
17
+ enum class ErrorCorrectionLevel;
18
+ class Version;
19
+
20
+ constexpr int NUM_MASK_PATTERNS = 8;
21
+
22
+ void BuildMatrix(const BitArray& dataBits, ErrorCorrectionLevel ecLevel, const Version& version, int maskPattern, TritMatrix& matrix);
23
+
24
+ } // QRCode
25
+ } // ZXing
@@ -0,0 +1,149 @@
1
+ /*
2
+ * Copyright 2016 Nu-book Inc.
3
+ * Copyright 2016 ZXing authors
4
+ * Copyright 2022 Axel Waggershauser
5
+ */
6
+ // SPDX-License-Identifier: Apache-2.0
7
+
8
+ #include "QRReader.h"
9
+
10
+ #include "BarcodeData.h"
11
+ #include "BinaryBitmap.h"
12
+ #include "ConcentricFinder.h"
13
+ #include "DecoderResult.h"
14
+ #include "DetectorResult.h"
15
+ #include "LogMatrix.h"
16
+ #include "QRDecoder.h"
17
+ #include "QRDetector.h"
18
+ #include "ReaderOptions.h"
19
+
20
+ #include <utility>
21
+
22
+ namespace ZXing::QRCode {
23
+
24
+ static BarcodeData readPure(const BitMatrix* binImg, const ReaderOptions& _opts)
25
+ {
26
+ DetectorResult detectorResult;
27
+ if (_opts.hasFormat(BarcodeFormat::QRCode))
28
+ detectorResult = DetectPureQR(*binImg);
29
+ if (_opts.hasFormat(BarcodeFormat::MicroQRCode) && !detectorResult.isValid())
30
+ detectorResult = DetectPureMQR(*binImg);
31
+ if (_opts.hasFormat(BarcodeFormat::RMQRCode) && !detectorResult.isValid())
32
+ detectorResult = DetectPureRMQR(*binImg);
33
+
34
+ if (!detectorResult.isValid())
35
+ return {};
36
+
37
+ auto decoderResult = Decode(detectorResult.bits());
38
+ auto format = detectorResult.bits().width() != detectorResult.bits().height() ? BarcodeFormat::RMQRCode
39
+ : detectorResult.bits().width() < 21 ? BarcodeFormat::MicroQRCode
40
+ : BarcodeFormat::QRCode;
41
+
42
+ return MatrixBarcode(std::move(decoderResult), std::move(detectorResult), format);
43
+ }
44
+
45
+ void logFPSet(const FinderPatternSet& fps [[maybe_unused]])
46
+ {
47
+ #ifdef PRINT_DEBUG
48
+ auto drawLine = [](PointF a, PointF b) {
49
+ int steps = maxAbsComponent(b - a);
50
+ PointF dir = bresenhamDirection(PointF(b - a));
51
+ for (int i = 0; i < steps; ++i)
52
+ log(a + i * dir, 2);
53
+ };
54
+
55
+ drawLine(fps.bl, fps.tl);
56
+ drawLine(fps.tl, fps.tr);
57
+ drawLine(fps.tr, fps.bl);
58
+ #endif
59
+ }
60
+
61
+ BarcodesData Reader::read(const BinaryBitmap& image, int maxSymbols) const
62
+ {
63
+ auto binImg = image.getBitMatrix();
64
+ if (binImg == nullptr)
65
+ return {};
66
+
67
+ #ifdef PRINT_DEBUG
68
+ LogMatrixWriter lmw(log, *binImg, 5, "qr-log.pnm");
69
+ #endif
70
+
71
+ if (_opts.isPure())
72
+ return ToVector(readPure(binImg, _opts));
73
+
74
+ auto allFPs = FindFinderPatterns(*binImg, _opts.tryHarder());
75
+
76
+ std::vector<ConcentricPattern> usedFPs;
77
+ BarcodesData res;
78
+
79
+ if (_opts.hasFormat(BarcodeFormat::QRCodeModel1 | BarcodeFormat::QRCodeModel2)) {
80
+ auto allFPSets = GenerateFinderPatternSets(allFPs);
81
+ for (const auto& fpSet : allFPSets) {
82
+ if (Contains(usedFPs, fpSet.bl) || Contains(usedFPs, fpSet.tl) || Contains(usedFPs, fpSet.tr))
83
+ continue;
84
+
85
+ logFPSet(fpSet);
86
+
87
+ for (auto&& detectorResult: SampleQR(*binImg, fpSet)) {
88
+ auto decoderResult = Decode(detectorResult.bits());
89
+ if ((decoderResult.content().symbology.modifier == '0' && !_opts.hasFormat(BarcodeFormat::QRCodeModel1))
90
+ || (decoderResult.content().symbology.modifier == '1' && !_opts.hasFormat(BarcodeFormat::QRCodeModel2)))
91
+ continue;
92
+ if (decoderResult.isValid()) {
93
+ usedFPs.push_back(fpSet.bl);
94
+ usedFPs.push_back(fpSet.tl);
95
+ usedFPs.push_back(fpSet.tr);
96
+ }
97
+ if (decoderResult.isValid(_opts.returnErrors())) {
98
+ res.emplace_back(MatrixBarcode(std::move(decoderResult), std::move(detectorResult), BarcodeFormat::QRCode));
99
+ // if we found a valid symbol, we stop the inner loop
100
+ if (res.back().isValid() || (maxSymbols && Size(res) == maxSymbols))
101
+ break;
102
+ }
103
+ }
104
+ if (maxSymbols && Size(res) == maxSymbols)
105
+ break;
106
+ }
107
+ }
108
+
109
+ if (_opts.hasFormat(BarcodeFormat::MicroQRCode) && !(maxSymbols && Size(res) == maxSymbols)) {
110
+ for (const auto& fp : allFPs) {
111
+ if (Contains(usedFPs, fp))
112
+ continue;
113
+
114
+ auto detectorResult = SampleMQR(*binImg, fp);
115
+ if (detectorResult.isValid()) {
116
+ auto decoderResult = Decode(detectorResult.bits());
117
+ if (decoderResult.isValid(_opts.returnErrors())) {
118
+ res.emplace_back(MatrixBarcode(std::move(decoderResult), std::move(detectorResult), BarcodeFormat::MicroQRCode));
119
+ if (maxSymbols && Size(res) == maxSymbols)
120
+ break;
121
+ }
122
+
123
+ }
124
+ }
125
+ }
126
+
127
+ if (_opts.hasFormat(BarcodeFormat::RMQRCode) && !(maxSymbols && Size(res) == maxSymbols)) {
128
+ // TODO proper
129
+ for (const auto& fp : allFPs) {
130
+ if (Contains(usedFPs, fp))
131
+ continue;
132
+
133
+ auto detectorResult = SampleRMQR(*binImg, fp);
134
+ if (detectorResult.isValid()) {
135
+ auto decoderResult = Decode(detectorResult.bits());
136
+ if (decoderResult.isValid(_opts.returnErrors())) {
137
+ res.emplace_back(MatrixBarcode(std::move(decoderResult), std::move(detectorResult), BarcodeFormat::RMQRCode));
138
+ if (maxSymbols && Size(res) == maxSymbols)
139
+ break;
140
+ }
141
+
142
+ }
143
+ }
144
+ }
145
+
146
+ return res;
147
+ }
148
+
149
+ } // namespace ZXing::QRCode
@@ -0,0 +1,21 @@
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 "Reader.h"
10
+
11
+ namespace ZXing::QRCode {
12
+
13
+ class Reader : public ZXing::Reader
14
+ {
15
+ public:
16
+ using ZXing::Reader::Reader;
17
+
18
+ BarcodesData read(const BinaryBitmap& image, int maxSymbols) const override;
19
+ };
20
+
21
+ } // namespace ZXing::QRCode