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,570 @@
1
+ /*
2
+ * Copyright 2016 Huy Cuong Nguyen
3
+ * Copyright 2016 ZXing authors
4
+ * Copyright 2006 Jeremias Maerki in part, and ZXing Authors in part
5
+ */
6
+ // SPDX-License-Identifier: Apache-2.0
7
+
8
+ #include "PDFHighLevelEncoder.h"
9
+ #include "PDFCompaction.h"
10
+ #include "CharacterSet.h"
11
+ #include "ECI.h"
12
+ #include "TextEncoder.h"
13
+ #include "ZXBigInteger.h"
14
+ #include "ZXAlgorithms.h"
15
+
16
+ #include <cstdint>
17
+ #include <algorithm>
18
+ #include <string>
19
+ #include <stdexcept>
20
+
21
+ namespace ZXing {
22
+ namespace Pdf417 {
23
+
24
+ /**
25
+ * code for Text compaction
26
+ */
27
+ static const int TEXT_COMPACTION = 0;
28
+
29
+ /**
30
+ * code for Byte compaction
31
+ */
32
+ static const int BYTE_COMPACTION = 1;
33
+
34
+ /**
35
+ * code for Numeric compaction
36
+ */
37
+ static const int NUMERIC_COMPACTION = 2;
38
+
39
+ /**
40
+ * Text compaction submode Alpha
41
+ */
42
+ static const int SUBMODE_ALPHA = 0;
43
+
44
+ /**
45
+ * Text compaction submode Lower
46
+ */
47
+ static const int SUBMODE_LOWER = 1;
48
+
49
+ /**
50
+ * Text compaction submode Mixed
51
+ */
52
+ static const int SUBMODE_MIXED = 2;
53
+
54
+ /**
55
+ * Text compaction submode Punctuation
56
+ */
57
+ static const int SUBMODE_PUNCTUATION = 3;
58
+
59
+ /**
60
+ * mode latch to Text Compaction mode
61
+ */
62
+ static const int LATCH_TO_TEXT = 900;
63
+
64
+ /**
65
+ * mode latch to Byte Compaction mode (number of characters NOT a multiple of 6)
66
+ */
67
+ static const int LATCH_TO_BYTE_PADDED = 901;
68
+
69
+ /**
70
+ * mode latch to Numeric Compaction mode
71
+ */
72
+ static const int LATCH_TO_NUMERIC = 902;
73
+
74
+ /**
75
+ * mode shift to Byte Compaction mode
76
+ */
77
+ static const int SHIFT_TO_BYTE = 913;
78
+
79
+ /**
80
+ * mode latch to Byte Compaction mode (number of characters a multiple of 6)
81
+ */
82
+ static const int LATCH_TO_BYTE = 924;
83
+
84
+ /**
85
+ * identifier for a user defined Extended Channel Interpretation (ECI)
86
+ */
87
+ static const int ECI_USER_DEFINED = 925;
88
+
89
+ /**
90
+ * identifier for a general purpose ECO format
91
+ */
92
+ static const int ECI_GENERAL_PURPOSE = 926;
93
+
94
+ /**
95
+ * identifier for an ECI of a character set of code page
96
+ */
97
+ static const int ECI_CHARSET = 927;
98
+
99
+ /**
100
+ * Raw code table for text compaction Mixed sub-mode
101
+ */
102
+ //static const uint8_t TEXT_MIXED_RAW[] = {
103
+ // 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 38, 13, 9, 44, 58,
104
+ // 35, 45, 46, 36, 47, 43, 37, 42, 61, 94, 0, 32, 0, 0, 0 };
105
+
106
+ /**
107
+ * Raw code table for text compaction: Punctuation sub-mode
108
+ */
109
+ //static const uint8_t TEXT_PUNCTUATION_RAW[] = {
110
+ // 59, 60, 62, 64, 91, 92, 93, 95, 96, 126, 33, 13, 9, 44, 58,
111
+ // 10, 45, 46, 36, 47, 34, 124, 42, 40, 41, 63, 123, 125, 39, 0 };
112
+
113
+ //static {
114
+ // //Construct inverse lookups
115
+ // Arrays.fill(MIXED, (byte)-1);
116
+ // for (byte i = 0; i < TEXT_MIXED_RAW.length; i++) {
117
+ // byte b = TEXT_MIXED_RAW[i];
118
+ // if (b > 0) {
119
+ // MIXED[b] = i;
120
+ // }
121
+ // }
122
+ // Arrays.fill(PUNCTUATION, (byte)-1);
123
+ // for (byte i = 0; i < TEXT_PUNCTUATION_RAW.length; i++) {
124
+ // byte b = TEXT_PUNCTUATION_RAW[i];
125
+ // if (b > 0) {
126
+ // PUNCTUATION[b] = i;
127
+ // }
128
+ // }
129
+ //}
130
+
131
+ static const int8_t MIXED[] = {
132
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, -1, -1, -1, 11, -1, -1,
133
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
134
+ 26, -1, -1, 15, 18, 21, 10, -1, -1, -1, 22, 20, 13, 16, 17, 19,
135
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 14, -1, -1, 23, -1, -1,
136
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
137
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 24, -1,
138
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
139
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
140
+ };
141
+
142
+ static const int8_t PUNCTUATION[] = {
143
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 15, -1, -1, 11, -1, -1,
144
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
145
+ -1, 10, 20, -1, 18, -1, -1, 28, 23, 24, 22, -1, 13, 16, 17, 19,
146
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 14, 0, 1, -1, 2, 25,
147
+ 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
148
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 5, 6, -1, 7,
149
+ 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
150
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, 21, 27, 9, -1,
151
+ };
152
+
153
+ static void EncodingECI(int eci, std::vector<int>& buffer)
154
+ {
155
+ if (eci >= 0 && eci < 900) {
156
+ buffer.push_back(ECI_CHARSET);
157
+ buffer.push_back(eci);
158
+ }
159
+ else if (eci >= 900 && eci < 810900) {
160
+ buffer.push_back(ECI_GENERAL_PURPOSE);
161
+ buffer.push_back(eci / 900 - 1);
162
+ buffer.push_back(eci % 900);
163
+ }
164
+ else if (eci >= 810900 && eci < 811800) {
165
+ buffer.push_back(ECI_USER_DEFINED);
166
+ buffer.push_back(eci - 810900);
167
+ }
168
+ else {
169
+ throw std::invalid_argument("ECI number not in valid range from 0..811799");
170
+ }
171
+ }
172
+
173
+ static bool IsAlphaUpper(int ch)
174
+ {
175
+ return ch == ' ' || IsUpper(ch);
176
+ }
177
+
178
+ static bool IsAlphaLower(int ch)
179
+ {
180
+ return ch == ' ' || IsLower(ch);
181
+ }
182
+
183
+ static bool IsMixed(int ch)
184
+ {
185
+ return (ch & 0x7f) == ch && MIXED[ch] != -1;
186
+ }
187
+
188
+ static bool IsPunctuation(int ch)
189
+ {
190
+ return (ch & 0x7f) == ch && PUNCTUATION[ch] != -1;
191
+ }
192
+
193
+ static bool IsText(int ch)
194
+ {
195
+ return ch == '\t' || ch == '\n' || ch == '\r' || (ch >= 32 && ch <= 126);
196
+ }
197
+
198
+
199
+ /**
200
+ * Encode parts of the message using Text Compaction as described in ISO/IEC 15438:2001(E),
201
+ * chapter 4.4.2.
202
+ *
203
+ * @param msg the message
204
+ * @param startpos the start position within the message
205
+ * @param count the number of characters to encode
206
+ * @param submode should normally be SUBMODE_ALPHA
207
+ * @param output receives the encoded codewords
208
+ * @return the text submode in which this method ends
209
+ */
210
+ static int EncodeText(const std::wstring& msg, int startpos, int count, int submode, std::vector<int>& output)
211
+ {
212
+ std::vector<int> tmp;
213
+ tmp.reserve(count);
214
+ int idx = 0;
215
+ while (true) {
216
+ int ch = msg[startpos + idx];
217
+ switch (submode) {
218
+ case SUBMODE_ALPHA:
219
+ if (IsAlphaUpper(ch)) {
220
+ tmp.push_back(ch == ' ' ? 26 : (ch - 65)); // space
221
+ } else if (IsAlphaLower(ch)) {
222
+ submode = SUBMODE_LOWER;
223
+ tmp.push_back(27); // ll
224
+ continue;
225
+ } else if (IsMixed(ch)) {
226
+ submode = SUBMODE_MIXED;
227
+ tmp.push_back(28); // ml
228
+ continue;
229
+ } else {
230
+ tmp.push_back(29); // ps
231
+ tmp.push_back(PUNCTUATION[ch]);
232
+ }
233
+ break;
234
+ case SUBMODE_LOWER:
235
+ if (IsAlphaLower(ch)) {
236
+ tmp.push_back(ch == ' ' ? 26 : (ch - 97)); // space
237
+ } else if (IsAlphaUpper(ch)) {
238
+ tmp.push_back(27); // as
239
+ tmp.push_back(ch - 65);
240
+ // space cannot happen here, it is also in "Lower"
241
+ } else if (IsMixed(ch)) {
242
+ submode = SUBMODE_MIXED;
243
+ tmp.push_back(28); // ml
244
+ continue;
245
+ } else {
246
+ tmp.push_back(29); // ps
247
+ tmp.push_back(PUNCTUATION[ch]);
248
+ }
249
+ break;
250
+ case SUBMODE_MIXED:
251
+ if (IsMixed(ch)) {
252
+ tmp.push_back(MIXED[ch]);
253
+ } else if (IsAlphaUpper(ch)) {
254
+ submode = SUBMODE_ALPHA;
255
+ tmp.push_back(28); // al
256
+ continue;
257
+ } else if (IsAlphaLower(ch)) {
258
+ submode = SUBMODE_LOWER;
259
+ tmp.push_back(27); // ll
260
+ continue;
261
+ } else {
262
+ if (startpos + idx + 1 < count) {
263
+ int next = msg[startpos + idx + 1];
264
+ if (IsPunctuation(next)) {
265
+ submode = SUBMODE_PUNCTUATION;
266
+ tmp.push_back(25); // pl
267
+ continue;
268
+ }
269
+ }
270
+ tmp.push_back(29); // ps
271
+ tmp.push_back(PUNCTUATION[ch]);
272
+ }
273
+ break;
274
+ default: // SUBMODE_PUNCTUATION
275
+ if (IsPunctuation(ch)) {
276
+ tmp.push_back(PUNCTUATION[ch]);
277
+ } else {
278
+ submode = SUBMODE_ALPHA;
279
+ tmp.push_back(29); // al
280
+ continue;
281
+ }
282
+ }
283
+ idx++;
284
+ if (idx >= count) {
285
+ break;
286
+ }
287
+ }
288
+ int h = 0;
289
+ size_t len = tmp.size();
290
+ for (size_t i = 0; i < len; i++) {
291
+ bool odd = (i % 2) != 0;
292
+ if (odd) {
293
+ h = (h * 30) + tmp[i];
294
+ output.push_back(h);
295
+ }
296
+ else {
297
+ h = tmp[i];
298
+ }
299
+ }
300
+ if ((len % 2) != 0) {
301
+ output.push_back((h * 30) + 29); //ps
302
+ }
303
+ return submode;
304
+ }
305
+
306
+
307
+ /**
308
+ * Encode parts of the message using Byte Compaction as described in ISO/IEC 15438:2001(E),
309
+ * chapter 4.4.3. The Unicode characters will be converted to binary using the cp437
310
+ * codepage.
311
+ *
312
+ * @param bytes the message converted to a byte array
313
+ * @param startpos the start position within the message
314
+ * @param count the number of bytes to encode
315
+ * @param startmode the mode from which this method starts
316
+ * @param output receives the encoded codewords
317
+ */
318
+ static void EncodeBinary(const std::string& bytes, int startpos, int count, int startmode, std::vector<int>& output)
319
+ {
320
+ if (count == 1 && startmode == TEXT_COMPACTION) {
321
+ output.push_back(SHIFT_TO_BYTE);
322
+ }
323
+ else {
324
+ if ((count % 6) == 0) {
325
+ output.push_back(LATCH_TO_BYTE);
326
+ }
327
+ else {
328
+ output.push_back(LATCH_TO_BYTE_PADDED);
329
+ }
330
+ }
331
+
332
+ int idx = startpos;
333
+ // Encode sixpacks
334
+ if (count >= 6) {
335
+ int chars[5];
336
+ while ((startpos + count - idx) >= 6) {
337
+ long t = 0;
338
+ for (int i = 0; i < 6; i++) {
339
+ t <<= 8;
340
+ t += bytes[idx + i] & 0xff;
341
+ }
342
+ for (int &c : chars) {
343
+ c = static_cast<int>(t % 900);
344
+ t /= 900;
345
+ }
346
+ for (int i = 4; i >= 0; i--) {
347
+ output.push_back(chars[i]);
348
+ }
349
+ idx += 6;
350
+ }
351
+ }
352
+ //Encode rest (remaining n<5 bytes if any)
353
+ for (int i = idx; i < startpos + count; i++) {
354
+ int ch = bytes[i] & 0xff;
355
+ output.push_back(ch);
356
+ }
357
+ }
358
+
359
+
360
+ static void EncodeNumeric(const std::wstring& msg, int startpos, int count, std::vector<int>& output)
361
+ {
362
+ int idx = 0;
363
+ std::vector<int> tmp;
364
+ tmp.reserve(count / 3 + 1);
365
+ BigInteger num900(900);
366
+ while (idx < count) {
367
+ tmp.clear();
368
+ int len = std::min(44, count - idx);
369
+ auto part = L"1" + msg.substr(startpos + idx, len);
370
+
371
+ BigInteger bigint, r;
372
+ BigInteger::TryParse(part, bigint);
373
+ do {
374
+ BigInteger::Divide(bigint, num900, bigint, r);
375
+ tmp.push_back(r.toInt());
376
+ } while (!bigint.isZero());
377
+
378
+ //Reverse temporary string
379
+ output.insert(output.end(), tmp.rbegin(), tmp.rend());
380
+ idx += len;
381
+ }
382
+ }
383
+
384
+
385
+ /**
386
+ * Determines the number of consecutive characters that are encodable using numeric compaction.
387
+ *
388
+ * @param msg the message
389
+ * @param startpos the start position within the message
390
+ * @return the requested character count
391
+ */
392
+ static int DetermineConsecutiveDigitCount(const std::wstring& msg, int startpos)
393
+ {
394
+ int count = 0;
395
+ size_t len = msg.length();
396
+ size_t idx = startpos;
397
+ if (idx < len) {
398
+ int ch = msg[idx];
399
+ while (IsDigit(ch) && idx < len) {
400
+ count++;
401
+ idx++;
402
+ if (idx < len) {
403
+ ch = msg[idx];
404
+ }
405
+ }
406
+ }
407
+ return count;
408
+ }
409
+
410
+ /**
411
+ * Determines the number of consecutive characters that are encodable using text compaction.
412
+ *
413
+ * @param msg the message
414
+ * @param startpos the start position within the message
415
+ * @return the requested character count
416
+ */
417
+ static int DetermineConsecutiveTextCount(const std::wstring& msg, int startpos)
418
+ {
419
+ size_t len = msg.length();
420
+ size_t idx = startpos;
421
+ while (idx < len) {
422
+ int ch = msg[idx];
423
+ int numericCount = 0;
424
+ while (numericCount < 13 && IsDigit(ch) && idx < len) {
425
+ numericCount++;
426
+ idx++;
427
+ if (idx < len) {
428
+ ch = msg[idx];
429
+ }
430
+ }
431
+ if (numericCount >= 13) {
432
+ return static_cast<int>(idx - startpos - numericCount);
433
+ }
434
+ if (numericCount > 0) {
435
+ //Heuristic: All text-encodable chars or digits are binary encodable
436
+ continue;
437
+ }
438
+ ch = msg[idx];
439
+
440
+ //Check if character is encodable
441
+ if (!IsText(ch)) {
442
+ break;
443
+ }
444
+ idx++;
445
+ }
446
+ return static_cast<int>(idx - startpos);
447
+ }
448
+
449
+ /**
450
+ * Determines the number of consecutive characters that are encodable using binary compaction.
451
+ *
452
+ * @param msg the message
453
+ * @param startpos the start position within the message
454
+ * @return the requested character count
455
+ */
456
+ static int DetermineConsecutiveBinaryCount(const std::wstring& msg, int startpos)
457
+ {
458
+ size_t len = msg.length();
459
+ size_t idx = startpos;
460
+ while (idx < len) {
461
+ int ch = msg[idx];
462
+ int numericCount = 0;
463
+
464
+ while (numericCount < 13 && IsDigit(ch)) {
465
+ numericCount++;
466
+ //textCount++;
467
+ size_t i = idx + numericCount;
468
+ if (i >= len) {
469
+ break;
470
+ }
471
+ ch = msg[i];
472
+ }
473
+ if (numericCount >= 13) {
474
+ return static_cast<int>(idx - startpos);
475
+ }
476
+ idx++;
477
+ }
478
+ return static_cast<int>(idx - startpos);
479
+ }
480
+
481
+ /**
482
+ * Performs high-level encoding of a PDF417 message using the algorithm described in annex P
483
+ * of ISO/IEC 15438:2001(E). If byte compaction has been selected, then only byte compaction
484
+ * is used.
485
+ *
486
+ * @param msg the message
487
+ * @param compaction compaction mode to use
488
+ * @param encoding character encoding used to encode in default or byte compaction
489
+ * or {@code null} for default / not applicable
490
+ * @return the encoded message (the char values range from 0 to 928)
491
+ */
492
+ std::vector<int>
493
+ HighLevelEncoder::EncodeHighLevel(const std::wstring& msg, Compaction compaction, CharacterSet encoding)
494
+ {
495
+ std::vector<int> highLevel;
496
+ highLevel.reserve(highLevel.size() + msg.length());
497
+
498
+ //the codewords 0..928 are encoded as Unicode characters
499
+ if (encoding != CharacterSet::ISO8859_1) {
500
+ EncodingECI(ToInt(ToECI(encoding)), highLevel);
501
+ }
502
+
503
+ int len = Size(msg);
504
+ int p = 0;
505
+ int textSubMode = SUBMODE_ALPHA;
506
+
507
+ // User selected encoding mode
508
+ if (compaction == Compaction::TEXT) {
509
+ EncodeText(msg, p, len, textSubMode, highLevel);
510
+
511
+ }
512
+ else if (compaction == Compaction::BYTE) {
513
+ std::string bytes = TextEncoder::FromUnicode(msg, encoding);
514
+ EncodeBinary(bytes, p, Size(bytes), BYTE_COMPACTION, highLevel);
515
+ }
516
+ else if (compaction == Compaction::NUMERIC) {
517
+ highLevel.push_back(LATCH_TO_NUMERIC);
518
+ EncodeNumeric(msg, p, len, highLevel);
519
+
520
+ }
521
+ else {
522
+ int encodingMode = TEXT_COMPACTION; //Default mode, see 4.4.2.1
523
+ while (p < len) {
524
+ int n = DetermineConsecutiveDigitCount(msg, p);
525
+ if (n >= 13) {
526
+ highLevel.push_back(LATCH_TO_NUMERIC);
527
+ encodingMode = NUMERIC_COMPACTION;
528
+ textSubMode = SUBMODE_ALPHA; //Reset after latch
529
+ EncodeNumeric(msg, p, n, highLevel);
530
+ p += n;
531
+ }
532
+ else {
533
+ int t = DetermineConsecutiveTextCount(msg, p);
534
+ if (t >= 5 || n == len) {
535
+ if (encodingMode != TEXT_COMPACTION) {
536
+ highLevel.push_back(LATCH_TO_TEXT);
537
+ encodingMode = TEXT_COMPACTION;
538
+ textSubMode = SUBMODE_ALPHA; //start with submode alpha after latch
539
+ }
540
+ textSubMode = EncodeText(msg, p, t, textSubMode, highLevel);
541
+ p += t;
542
+ }
543
+ else {
544
+ int b = DetermineConsecutiveBinaryCount(msg, p);
545
+ if (b == 0) {
546
+ b = 1;
547
+ }
548
+ std::string bytes = TextEncoder::FromUnicode(msg.substr(p, b), encoding);
549
+ if (bytes.length() == 1 && encodingMode == TEXT_COMPACTION) {
550
+ //Switch for one byte (instead of latch)
551
+ EncodeBinary(bytes, 0, 1, TEXT_COMPACTION, highLevel);
552
+ }
553
+ else {
554
+ //Mode latch performed by encodeBinary()
555
+ EncodeBinary(bytes, 0, Size(bytes), encodingMode, highLevel);
556
+ encodingMode = BYTE_COMPACTION;
557
+ textSubMode = SUBMODE_ALPHA; //Reset after latch
558
+ }
559
+ p += b;
560
+ }
561
+ }
562
+ }
563
+ }
564
+ return highLevel;
565
+ }
566
+
567
+
568
+
569
+ } // Pdf417
570
+ } // ZXing
@@ -0,0 +1,32 @@
1
+ /*
2
+ * Copyright 2016 Huy Cuong Nguyen
3
+ * Copyright 2016 ZXing authors
4
+ * Copyright 2006 Jeremias Maerki
5
+ */
6
+ // SPDX-License-Identifier: Apache-2.0
7
+
8
+ #pragma once
9
+
10
+ #include "CharacterSet.h"
11
+
12
+ #include <string>
13
+ #include <vector>
14
+
15
+ namespace ZXing {
16
+
17
+ namespace Pdf417 {
18
+
19
+ enum class Compaction;
20
+
21
+ /**
22
+ * PDF417 high-level encoder following the algorithm described in ISO/IEC 15438:2001(E) in
23
+ * annex P.
24
+ */
25
+ class HighLevelEncoder
26
+ {
27
+ public:
28
+ static std::vector<int> EncodeHighLevel(const std::wstring& msg, Compaction compaction, CharacterSet encoding);
29
+ };
30
+
31
+ } // Pdf417
32
+ } // ZXing