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