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,105 @@
1
+ /*
2
+ * Copyright 2016 Huy Cuong Nguyen
3
+ */
4
+ // SPDX-License-Identifier: Apache-2.0
5
+
6
+ #pragma once
7
+
8
+ #include <cstddef>
9
+ #include <stdexcept>
10
+ #include <utility>
11
+
12
+ namespace ZXing {
13
+
14
+ template <typename T>
15
+ class Nullable final
16
+ {
17
+ bool m_hasValue = false;
18
+ T m_value;
19
+
20
+ public:
21
+ Nullable() = default;
22
+ Nullable(const T &value) : m_hasValue(true), m_value(value) {}
23
+ Nullable(T &&value) noexcept : m_hasValue(true), m_value(std::move(value)) {}
24
+ Nullable(std::nullptr_t) {}
25
+
26
+ Nullable<T> & operator=(const T &value) {
27
+ m_hasValue = true;
28
+ m_value = value;
29
+ return *this;
30
+ }
31
+
32
+ Nullable<T> & operator=(T &&value) noexcept {
33
+ m_hasValue = true;
34
+ m_value = std::move(value);
35
+ return *this;
36
+ }
37
+
38
+ Nullable<T> & operator=(std::nullptr_t) {
39
+ m_hasValue = false;
40
+ m_value = T();
41
+ return *this;
42
+ }
43
+
44
+ operator T() const {
45
+ if (!m_hasValue) {
46
+ throw std::logic_error("Access empty value");
47
+ }
48
+ return m_value;
49
+ }
50
+
51
+ bool hasValue() const {
52
+ return m_hasValue;
53
+ }
54
+
55
+ const T & value() const {
56
+ return m_value;
57
+ }
58
+
59
+ T & value() {
60
+ return m_value;
61
+ }
62
+
63
+ friend inline bool operator==(const Nullable &a, const Nullable &b) {
64
+ return a.m_hasValue == b.m_hasValue && (!a.m_hasValue || a.m_value == b.m_value);
65
+ }
66
+ friend inline bool operator!=(const Nullable &a, const Nullable &b) {
67
+ return !(a == b);
68
+ }
69
+
70
+ friend inline bool operator==(const Nullable &a, const T &v) {
71
+ return a.m_hasValue && a.m_value == v;
72
+ }
73
+ friend inline bool operator!=(const Nullable &a, const T &v) {
74
+ return !(a == v);
75
+ }
76
+
77
+ friend inline bool operator==(const T &v, const Nullable &a) {
78
+ return a.m_hasValue && a.m_value == v;
79
+ }
80
+ friend inline bool operator!=(const T &v, const Nullable &a) {
81
+ return !(v == a);
82
+ }
83
+
84
+ friend inline bool operator==(const Nullable &a, std::nullptr_t) {
85
+ return !a.m_hasValue;
86
+ }
87
+ friend inline bool operator!=(const Nullable &a, std::nullptr_t) {
88
+ return a.m_hasValue;
89
+ }
90
+
91
+ friend inline bool operator==(std::nullptr_t, const Nullable &a) {
92
+ return !a.m_hasValue;
93
+ }
94
+ friend inline bool operator!=(std::nullptr_t, const Nullable &a) {
95
+ return a.m_hasValue;
96
+ }
97
+
98
+ friend inline void swap(Nullable &a, Nullable &b) noexcept {
99
+ using std::swap;
100
+ swap(a.m_value, b.m_value);
101
+ swap(a.m_hasValue, b.m_hasValue);
102
+ }
103
+ };
104
+
105
+ } // ZXing
@@ -0,0 +1,294 @@
1
+ /*
2
+ * Copyright 2016 Nu-book Inc.
3
+ * Copyright 2016 ZXing authors
4
+ * Copyright 2023 gitlost
5
+ */
6
+ // SPDX-License-Identifier: Apache-2.0
7
+
8
+ #include "QRBitMatrixParser.h"
9
+
10
+ #include "BitArray.h"
11
+ #include "BitMatrix.h"
12
+ #include "ByteArray.h"
13
+ #include "QRDataMask.h"
14
+ #include "QRFormatInformation.h"
15
+ #include "QRVersion.h"
16
+
17
+ #include <utility>
18
+
19
+ namespace ZXing::QRCode {
20
+
21
+ static bool getBit(const BitMatrix& bitMatrix, int x, int y, bool mirrored = false)
22
+ {
23
+ return mirrored ? bitMatrix.get(y, x) : bitMatrix.get(x, y);
24
+ }
25
+
26
+ const Version* ReadVersion(const BitMatrix& bitMatrix, Type type)
27
+ {
28
+ assert(Version::HasValidSize(bitMatrix));
29
+
30
+ int number = Version::Number(bitMatrix);
31
+
32
+ switch (type) {
33
+ case Type::Micro: return Version::Micro(number);
34
+ case Type::rMQR: return Version::rMQR(number);
35
+ case Type::Model1: return Version::Model1(number);
36
+ case Type::Model2: return Version::Model2(number);
37
+ }
38
+
39
+ return nullptr;
40
+ }
41
+
42
+ FormatInformation ReadFormatInformation(const BitMatrix& bitMatrix)
43
+ {
44
+ if (Version::HasValidSize(bitMatrix, Type::Micro)) {
45
+ // Read top-left format info bits
46
+ int formatInfoBits = 0;
47
+ for (int x = 1; x < 9; x++)
48
+ AppendBit(formatInfoBits, getBit(bitMatrix, x, 8));
49
+ for (int y = 7; y >= 1; y--)
50
+ AppendBit(formatInfoBits, getBit(bitMatrix, 8, y));
51
+
52
+ return FormatInformation::DecodeMQR(formatInfoBits);
53
+ }
54
+ if (Version::HasValidSize(bitMatrix, Type::rMQR)) {
55
+ // Read top-left format info bits
56
+ uint32_t formatInfoBits1 = 0;
57
+ for (int y = 3; y >= 1; y--)
58
+ AppendBit(formatInfoBits1, getBit(bitMatrix, 11, y));
59
+ for (int x = 10; x >= 8; x--)
60
+ for (int y = 5; y >= 1; y--)
61
+ AppendBit(formatInfoBits1, getBit(bitMatrix, x, y));
62
+
63
+ // Read bottom-right format info bits
64
+ uint32_t formatInfoBits2 = 0;
65
+ const int width = bitMatrix.width();
66
+ const int height = bitMatrix.height();
67
+ for (int x = 3; x <= 5; x++)
68
+ AppendBit(formatInfoBits2, getBit(bitMatrix, width - x, height - 6));
69
+ for (int x = 6; x <= 8; x++)
70
+ for (int y = 2; y <= 6; y++)
71
+ AppendBit(formatInfoBits2, getBit(bitMatrix, width - x, height - y));
72
+
73
+ return FormatInformation::DecodeRMQR(formatInfoBits1, formatInfoBits2);
74
+ }
75
+
76
+ // Read top-left format info bits
77
+ int formatInfoBits1 = 0;
78
+ for (int x = 0; x < 6; x++)
79
+ AppendBit(formatInfoBits1, getBit(bitMatrix, x, 8));
80
+ // .. and skip a bit in the timing pattern ...
81
+ AppendBit(formatInfoBits1, getBit(bitMatrix, 7, 8));
82
+ AppendBit(formatInfoBits1, getBit(bitMatrix, 8, 8));
83
+ AppendBit(formatInfoBits1, getBit(bitMatrix, 8, 7));
84
+ // .. and skip a bit in the timing pattern ...
85
+ for (int y = 5; y >= 0; y--)
86
+ AppendBit(formatInfoBits1, getBit(bitMatrix, 8, y));
87
+
88
+ // Read the top-right/bottom-left pattern including the 'Dark Module' from the bottom-left
89
+ // part that has to be considered separately when looking for mirrored symbols.
90
+ // See also FormatInformation::DecodeQR
91
+ int dimension = bitMatrix.height();
92
+ int formatInfoBits2 = 0;
93
+ for (int y = dimension - 1; y >= dimension - 8; y--)
94
+ AppendBit(formatInfoBits2, getBit(bitMatrix, 8, y));
95
+ for (int x = dimension - 8; x < dimension; x++)
96
+ AppendBit(formatInfoBits2, getBit(bitMatrix, x, 8));
97
+
98
+ return FormatInformation::DecodeQR(formatInfoBits1, formatInfoBits2);
99
+ }
100
+
101
+ static ByteArray ReadQRCodewords(const BitMatrix& bitMatrix, const Version& version, const FormatInformation& formatInfo)
102
+ {
103
+ BitMatrix functionPattern = version.buildFunctionPattern();
104
+
105
+ ByteArray result;
106
+ result.reserve(version.totalCodewords());
107
+ uint8_t currentByte = 0;
108
+ bool readingUp = true;
109
+ int bitsRead = 0;
110
+ int dimension = bitMatrix.height();
111
+ // Read columns in pairs, from right to left
112
+ for (int x = dimension - 1; x > 0; x -= 2) {
113
+ // Skip whole column with vertical timing pattern.
114
+ if (x == 6)
115
+ x--;
116
+ // Read alternatingly from bottom to top then top to bottom
117
+ for (int row = 0; row < dimension; row++) {
118
+ int y = readingUp ? dimension - 1 - row : row;
119
+ for (int col = 0; col < 2; col++) {
120
+ int xx = x - col;
121
+ // Ignore bits covered by the function pattern
122
+ if (!functionPattern.get(xx, y)) {
123
+ // Read a bit
124
+ AppendBit(currentByte,
125
+ GetDataMaskBit(formatInfo.dataMask, xx, y) != getBit(bitMatrix, xx, y, formatInfo.isMirrored));
126
+ // If we've made a whole byte, save it off
127
+ if (++bitsRead % 8 == 0)
128
+ result.push_back(std::exchange(currentByte, 0));
129
+ }
130
+ }
131
+ }
132
+ readingUp = !readingUp; // switch directions
133
+ }
134
+ if (Size(result) != version.totalCodewords())
135
+ return {};
136
+
137
+ return result;
138
+ }
139
+
140
+ static ByteArray ReadQRCodewordsModel1(const BitMatrix& bitMatrix, const Version& version, const FormatInformation& formatInfo)
141
+ {
142
+ ByteArray result;
143
+ result.reserve(version.totalCodewords());
144
+ int dimension = bitMatrix.height();
145
+ int columns = dimension / 4 + 1 + 2;
146
+ for (int j = 0; j < columns; j++) {
147
+ if (j <= 1) { // vertical symbols on the right side
148
+ int rows = (dimension - 8) / 4;
149
+ for (int i = 0; i < rows; i++) {
150
+ if (j == 0 && i % 2 == 0 && i > 0 && i < rows - 1) // extension
151
+ continue;
152
+ int x = (dimension - 1) - (j * 2);
153
+ int y = (dimension - 1) - (i * 4);
154
+ uint8_t currentByte = 0;
155
+ for (int b = 0; b < 8; b++) {
156
+ AppendBit(currentByte, GetDataMaskBit(formatInfo.dataMask, x - b % 2, y - (b / 2))
157
+ != getBit(bitMatrix, x - b % 2, y - (b / 2), formatInfo.isMirrored));
158
+ }
159
+ result.push_back(currentByte);
160
+ }
161
+ } else if (columns - j <= 4) { // vertical symbols on the left side
162
+ int rows = (dimension - 16) / 4;
163
+ for (int i = 0; i < rows; i++) {
164
+ int x = (columns - j - 1) * 2 + 1 + (columns - j == 4 ? 1 : 0); // timing
165
+ int y = (dimension - 1) - 8 - (i * 4);
166
+ uint8_t currentByte = 0;
167
+ for (int b = 0; b < 8; b++) {
168
+ AppendBit(currentByte, GetDataMaskBit(formatInfo.dataMask, x - b % 2, y - (b / 2))
169
+ != getBit(bitMatrix, x - b % 2, y - (b / 2), formatInfo.isMirrored));
170
+ }
171
+ result.push_back(currentByte);
172
+ }
173
+ } else { // horizontal symbols
174
+ int rows = dimension / 2;
175
+ for (int i = 0; i < rows; i++) {
176
+ if (j == 2 && i >= rows - 4) // alignment & finder
177
+ continue;
178
+ if (i == 0 && j % 2 == 1 && j + 1 != columns - 4) // extension
179
+ continue;
180
+ int x = (dimension - 1) - (2 * 2) - (j - 2) * 4;
181
+ int y = (dimension - 1) - (i * 2) - (i >= rows - 3 ? 1 : 0); // timing
182
+ uint8_t currentByte = 0;
183
+ for (int b = 0; b < 8; b++) {
184
+ AppendBit(currentByte, GetDataMaskBit(formatInfo.dataMask, x - b % 4, y - (b / 4))
185
+ != getBit(bitMatrix, x - b % 4, y - (b / 4), formatInfo.isMirrored));
186
+ }
187
+ result.push_back(currentByte);
188
+ }
189
+ }
190
+ }
191
+
192
+ result[0] &= 0xf; // ignore corner
193
+ if (Size(result) != version.totalCodewords())
194
+ return {};
195
+
196
+ return result;
197
+ }
198
+
199
+ static ByteArray ReadMQRCodewords(const BitMatrix& bitMatrix, const QRCode::Version& version, const FormatInformation& formatInfo)
200
+ {
201
+ BitMatrix functionPattern = version.buildFunctionPattern();
202
+
203
+ // D3 in a Version M1 symbol, D11 in a Version M3-L symbol and D9
204
+ // in a Version M3-M symbol is a 2x2 square 4-module block.
205
+ // See ISO 18004:2006 6.7.3.
206
+ bool hasD4mBlock = version.versionNumber() % 2 == 1;
207
+ int d4mBlockIndex =
208
+ version.versionNumber() == 1 ? 3 : (formatInfo.ecLevel == QRCode::ErrorCorrectionLevel::Low ? 11 : 9);
209
+
210
+ ByteArray result;
211
+ result.reserve(version.totalCodewords());
212
+ uint8_t currentByte = 0;
213
+ bool readingUp = true;
214
+ int bitsRead = 0;
215
+ int dimension = bitMatrix.height();
216
+ // Read columns in pairs, from right to left
217
+ for (int x = dimension - 1; x > 0; x -= 2) {
218
+ // Read alternatingly from bottom to top then top to bottom
219
+ for (int row = 0; row < dimension; row++) {
220
+ int y = readingUp ? dimension - 1 - row : row;
221
+ for (int col = 0; col < 2; col++) {
222
+ int xx = x - col;
223
+ // Ignore bits covered by the function pattern
224
+ if (!functionPattern.get(xx, y)) {
225
+ // Read a bit
226
+ AppendBit(currentByte,
227
+ GetDataMaskBit(formatInfo.dataMask, xx, y, true) != getBit(bitMatrix, xx, y, formatInfo.isMirrored));
228
+ ++bitsRead;
229
+ // If we've made a whole byte, save it off; save early if 2x2 data block.
230
+ if (bitsRead == 8 || (bitsRead == 4 && hasD4mBlock && Size(result) == d4mBlockIndex - 1)) {
231
+ result.push_back(std::exchange(currentByte, 0));
232
+ bitsRead = 0;
233
+ }
234
+ }
235
+ }
236
+ }
237
+ readingUp = !readingUp; // switch directions
238
+ }
239
+ if (Size(result) != version.totalCodewords())
240
+ return {};
241
+
242
+ return result;
243
+ }
244
+
245
+ static ByteArray ReadRMQRCodewords(const BitMatrix& bitMatrix, const Version& version, const FormatInformation& formatInfo)
246
+ {
247
+ BitMatrix functionPattern = version.buildFunctionPattern();
248
+
249
+ ByteArray result;
250
+ result.reserve(version.totalCodewords());
251
+ uint8_t currentByte = 0;
252
+ bool readingUp = true;
253
+ int bitsRead = 0;
254
+ const int width = bitMatrix.width();
255
+ const int height = bitMatrix.height();
256
+ // Read columns in pairs, from right to left
257
+ for (int x = width - 1 - 1; x > 0; x -= 2) { // Skip right edge alignment
258
+ // Read alternatingly from bottom to top then top to bottom
259
+ for (int row = 0; row < height; row++) {
260
+ int y = readingUp ? height - 1 - row : row;
261
+ for (int col = 0; col < 2; col++) {
262
+ int xx = x - col;
263
+ // Ignore bits covered by the function pattern
264
+ if (!functionPattern.get(xx, y)) {
265
+ // Read a bit
266
+ AppendBit(currentByte,
267
+ GetDataMaskBit(formatInfo.dataMask, xx, y) != getBit(bitMatrix, xx, y, formatInfo.isMirrored));
268
+ // If we've made a whole byte, save it off
269
+ if (++bitsRead % 8 == 0)
270
+ result.push_back(std::exchange(currentByte, 0));
271
+ }
272
+ }
273
+ }
274
+ readingUp = !readingUp; // switch directions
275
+ }
276
+ if (Size(result) != version.totalCodewords())
277
+ return {};
278
+
279
+ return result;
280
+ }
281
+
282
+ ByteArray ReadCodewords(const BitMatrix& bitMatrix, const Version& version, const FormatInformation& formatInfo)
283
+ {
284
+ switch (version.type()) {
285
+ case Type::Micro: return ReadMQRCodewords(bitMatrix, version, formatInfo);
286
+ case Type::rMQR: return ReadRMQRCodewords(bitMatrix, version, formatInfo);
287
+ case Type::Model1: return ReadQRCodewordsModel1(bitMatrix, version, formatInfo);
288
+ case Type::Model2: return ReadQRCodewords(bitMatrix, version, formatInfo);
289
+ }
290
+
291
+ return {};
292
+ }
293
+
294
+ } // namespace ZXing::QRCode
@@ -0,0 +1,41 @@
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 "QRErrorCorrectionLevel.h"
10
+
11
+ namespace ZXing {
12
+
13
+ class BitMatrix;
14
+ class ByteArray;
15
+
16
+ namespace QRCode {
17
+
18
+ class Version;
19
+ class FormatInformation;
20
+
21
+ /**
22
+ * @brief Reads version information from the QR Code.
23
+ * @return {@link Version} encapsulating the QR Code's version, nullptr if neither location can be parsed
24
+ */
25
+ const Version* ReadVersion(const BitMatrix& bitMatrix, Type type);
26
+
27
+ /**
28
+ * @brief Reads format information from one of its two locations within the QR Code.
29
+ * @return {@link FormatInformation} encapsulating the QR Code's format info, result is invalid if both format
30
+ * information locations cannot be parsed as the valid encoding of format information
31
+ */
32
+ FormatInformation ReadFormatInformation(const BitMatrix& bitMatrix);
33
+
34
+ /**
35
+ * @brief Reads the codewords from the BitMatrix.
36
+ * @return bytes encoded within the QR Code or empty array if the exact number of bytes expected is not read
37
+ */
38
+ ByteArray ReadCodewords(const BitMatrix& bitMatrix, const Version& version, const FormatInformation& formatInfo);
39
+
40
+ } // QRCode
41
+ } // ZXing
@@ -0,0 +1,95 @@
1
+ /*
2
+ * Copyright 2016 Nu-book Inc.
3
+ * Copyright 2016 ZXing authors
4
+ * Copyright 2023 gitlost
5
+ */
6
+ // SPDX-License-Identifier: Apache-2.0
7
+
8
+ #include "QRCodecMode.h"
9
+
10
+ #include "Error.h"
11
+ #include "QRVersion.h"
12
+ #include "ZXAlgorithms.h"
13
+
14
+ #include <array>
15
+
16
+ namespace ZXing::QRCode {
17
+
18
+ CodecMode CodecModeForBits(int bits, Type type)
19
+ {
20
+ if (type == Type::Micro) {
21
+ constexpr CodecMode Bits2Mode[4] = {CodecMode::NUMERIC, CodecMode::ALPHANUMERIC, CodecMode::BYTE, CodecMode::KANJI};
22
+ if (bits < Size(Bits2Mode))
23
+ return Bits2Mode[bits];
24
+ } else if (type == Type::rMQR) {
25
+ constexpr CodecMode Bits2Mode[8] = {
26
+ CodecMode::TERMINATOR, CodecMode::NUMERIC, CodecMode::ALPHANUMERIC, CodecMode::BYTE,
27
+ CodecMode::KANJI, CodecMode::FNC1_FIRST_POSITION, CodecMode::FNC1_SECOND_POSITION, CodecMode::ECI
28
+ };
29
+ if (bits < Size(Bits2Mode))
30
+ return Bits2Mode[bits];
31
+ } else {
32
+ if ((bits >= 0x00 && bits <= 0x05) || (bits >= 0x07 && bits <= 0x09) || bits == 0x0d)
33
+ return static_cast<CodecMode>(bits);
34
+ }
35
+
36
+ throw FormatError("Invalid codec mode");
37
+ }
38
+
39
+ int CharacterCountBits(CodecMode mode, const Version& version)
40
+ {
41
+ int number = version.versionNumber();
42
+ if (version.isMicro()) {
43
+ switch (mode) {
44
+ case CodecMode::NUMERIC: return std::array{3, 4, 5, 6}[number - 1];
45
+ case CodecMode::ALPHANUMERIC: return std::array{3, 4, 5}[number - 2];
46
+ case CodecMode::BYTE: return std::array{4, 5}[number - 3];
47
+ case CodecMode::KANJI: [[fallthrough]];
48
+ case CodecMode::HANZI: return std::array{3, 4}[number - 3];
49
+ default: return 0;
50
+ }
51
+ }
52
+ if (version.isRMQR()) {
53
+ // See ISO/IEC 23941:2022 7.4.1, Table 3 - Number of bits of character count indicator
54
+ constexpr char numeric[32] = {4, 5, 6, 7, 7, 5, 6, 7, 7, 8, 4, 6, 7, 7, 8, 8, 5, 6, 7, 7, 8, 8, 7, 7, 8, 8, 9, 7, 8, 8, 8, 9};
55
+ constexpr char alphanum[32] = {3, 5, 5, 6, 6, 5, 5, 6, 6, 7, 4, 5, 6, 6, 7, 7, 5, 6, 6, 7, 7, 8, 6, 7, 7, 7, 8, 6, 7, 7, 8, 8};
56
+ constexpr char byte[32] = {3, 4, 5, 5, 6, 4, 5, 5, 6, 6, 3, 5, 5, 6, 6, 7, 4, 5, 6, 6, 7, 7, 6, 6, 7, 7, 7, 6, 6, 7, 7, 8};
57
+ constexpr char kanji[32] = {2, 3, 4, 5, 5, 3, 4, 5, 5, 6, 2, 4, 5, 5, 6, 6, 3, 5, 5, 6, 6, 7, 5, 5, 6, 6, 7, 5, 6, 6, 6, 7};
58
+ switch (mode) {
59
+ case CodecMode::NUMERIC: return numeric[number - 1];
60
+ case CodecMode::ALPHANUMERIC: return alphanum[number - 1];
61
+ case CodecMode::BYTE: return byte[number - 1];
62
+ case CodecMode::KANJI: return kanji[number - 1];
63
+ default: return 0;
64
+ }
65
+ }
66
+
67
+ int i;
68
+ if (number <= 9)
69
+ i = 0;
70
+ else if (number <= 26)
71
+ i = 1;
72
+ else
73
+ i = 2;
74
+
75
+ switch (mode) {
76
+ case CodecMode::NUMERIC: return std::array{10, 12, 14}[i];
77
+ case CodecMode::ALPHANUMERIC: return std::array{9, 11, 13}[i];
78
+ case CodecMode::BYTE: return std::array{8, 16, 16}[i];
79
+ case CodecMode::KANJI: [[fallthrough]];
80
+ case CodecMode::HANZI: return std::array{8, 10, 12}[i];
81
+ default: return 0;
82
+ }
83
+ }
84
+
85
+ int CodecModeBitsLength(const Version& version)
86
+ {
87
+ return version.isMicro() ? version.versionNumber() - 1 : 4 - version.isRMQR();
88
+ }
89
+
90
+ int TerminatorBitsLength(const Version& version)
91
+ {
92
+ return version.isMicro() ? version.versionNumber() * 2 + 1 : 4 - version.isRMQR();
93
+ }
94
+
95
+ } // namespace ZXing::QRCode
@@ -0,0 +1,59 @@
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
+ namespace ZXing::QRCode {
10
+
11
+ enum class Type;
12
+ class Version;
13
+
14
+ /**
15
+ * <p>See ISO 18004:2006, 6.4.1, Tables 2 and 3. This enum encapsulates the various modes in which
16
+ * data can be encoded to bits in the QR code standard.</p>
17
+ */
18
+ enum class CodecMode
19
+ {
20
+ TERMINATOR = 0x00, // Not really a mode...
21
+ NUMERIC = 0x01,
22
+ ALPHANUMERIC = 0x02,
23
+ STRUCTURED_APPEND = 0x03,
24
+ BYTE = 0x04,
25
+ FNC1_FIRST_POSITION = 0x05,
26
+ ECI = 0x07, // character counts don't apply
27
+ KANJI = 0x08,
28
+ FNC1_SECOND_POSITION = 0x09,
29
+ HANZI = 0x0D, // See GBT 18284-2000; "Hanzi" is a transliteration of this mode name.
30
+ };
31
+
32
+ /**
33
+ * @param bits variable number of bits encoding a QR Code data mode
34
+ * @param type type of QR Code
35
+ * @return Mode encoded by these bits
36
+ * @throws FormatError if bits do not correspond to a known mode
37
+ */
38
+ CodecMode CodecModeForBits(int bits, Type type);
39
+
40
+ /**
41
+ * @param version version in question
42
+ * @return number of bits used, in this QR Code symbol {@link Version}, to encode the
43
+ * count of characters that will follow encoded in this Mode
44
+ */
45
+ int CharacterCountBits(CodecMode mode, const Version& version);
46
+
47
+ /**
48
+ * @param version version in question
49
+ * @return number of bits used to encode a codec mode.
50
+ */
51
+ int CodecModeBitsLength(const Version& version);
52
+
53
+ /**
54
+ * @param version version in question
55
+ * @return number of bits in the Terminator code.
56
+ */
57
+ int TerminatorBitsLength(const Version& version);
58
+
59
+ } // namespace ZXing::QRCode
@@ -0,0 +1,93 @@
1
+ /*
2
+ * Copyright 2016 Nu-book Inc.
3
+ * Copyright 2016 ZXing authors
4
+ */
5
+ // SPDX-License-Identifier: Apache-2.0
6
+
7
+ #include "QRDataBlock.h"
8
+
9
+ #include "ByteArray.h"
10
+ #include "QRErrorCorrectionLevel.h"
11
+ #include "QRVersion.h"
12
+ #include "ZXAlgorithms.h"
13
+
14
+ namespace ZXing::QRCode {
15
+
16
+ std::vector<DataBlock> DataBlock::GetDataBlocks(const ByteArray& rawCodewords, const Version& version, ErrorCorrectionLevel ecLevel)
17
+ {
18
+ if (Size(rawCodewords) != version.totalCodewords())
19
+ return {};
20
+
21
+ // Figure out the number and size of data blocks used by this version and
22
+ // error correction level
23
+ auto& ecBlocks = version.ecBlocksForLevel(ecLevel);
24
+
25
+ // First count the total number of data blocks
26
+ int totalBlocks = ecBlocks.numBlocks();
27
+ if (totalBlocks == 0)
28
+ return {};
29
+
30
+ std::vector<DataBlock> result(totalBlocks);
31
+ // Now establish DataBlocks of the appropriate size and number of data codewords
32
+ int numResultBlocks = 0;
33
+ for (auto& ecBlock : ecBlocks.blockArray()) {
34
+ for (int i = 0; i < ecBlock.count; i++) {
35
+ auto& item = result[numResultBlocks++];
36
+ item._numDataCodewords = ecBlock.dataCodewords;
37
+ item._codewords.resize(ecBlocks.codewordsPerBlock + ecBlock.dataCodewords);
38
+ }
39
+ }
40
+
41
+ // All blocks have the same amount of data, except that the last n
42
+ // (where n may be 0) have 1 more byte. Figure out where these start.
43
+ int shorterBlocksTotalCodewords = Size(result[0]._codewords);
44
+ int longerBlocksStartAt = Size(result) - 1;
45
+ while (longerBlocksStartAt >= 0) {
46
+ int numCodewords = Size(result[longerBlocksStartAt]._codewords);
47
+ if (numCodewords == shorterBlocksTotalCodewords) {
48
+ break;
49
+ }
50
+ longerBlocksStartAt--;
51
+ }
52
+ longerBlocksStartAt++;
53
+
54
+ int shorterBlocksNumDataCodewords = shorterBlocksTotalCodewords - ecBlocks.codewordsPerBlock;
55
+ // The last elements of result may be 1 element longer;
56
+ // first fill out as many elements as all of them have
57
+ int rawCodewordsOffset = 0;
58
+ if (version.isModel1()) {
59
+ // in Model 1 symbols the data blocks are concatenated back to back
60
+ for (int j = 0; j < numResultBlocks; j++)
61
+ for (int i = 0; i < shorterBlocksNumDataCodewords; i++)
62
+ result[j]._codewords[i] = rawCodewords[rawCodewordsOffset++];
63
+ } else {
64
+ // in all others, the data blocks are interleaved
65
+ for (int i = 0; i < shorterBlocksNumDataCodewords; i++)
66
+ for (int j = 0; j < numResultBlocks; j++)
67
+ result[j]._codewords[i] = rawCodewords[rawCodewordsOffset++];
68
+ }
69
+ // Fill out the last data block in the longer ones
70
+ for (int j = longerBlocksStartAt; j < numResultBlocks; j++) {
71
+ result[j]._codewords[shorterBlocksNumDataCodewords] = rawCodewords[rawCodewordsOffset++];
72
+ }
73
+ // Now add in error correction blocks
74
+ int max = Size(result[0]._codewords);
75
+ if (version.isModel1()) {
76
+ for (int j = 0; j < numResultBlocks; j++) {
77
+ for (int i = shorterBlocksNumDataCodewords; i < max; i++) {
78
+ int iOffset = j < longerBlocksStartAt ? i : i + 1;
79
+ result[j]._codewords[iOffset] = rawCodewords[rawCodewordsOffset++];
80
+ }
81
+ }
82
+ } else {
83
+ for (int i = shorterBlocksNumDataCodewords; i < max; i++) {
84
+ for (int j = 0; j < numResultBlocks; j++) {
85
+ int iOffset = j < longerBlocksStartAt ? i : i + 1;
86
+ result[j]._codewords[iOffset] = rawCodewords[rawCodewordsOffset++];
87
+ }
88
+ }
89
+ }
90
+ return result;
91
+ }
92
+
93
+ } // namespace ZXing::QRCode