zxing_cpp 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.gitmodules +3 -0
- data/CHANGELOG.rdoc +6 -0
- data/Gemfile +3 -0
- data/Manifest.txt +331 -0
- data/README.rdoc +138 -0
- data/Rakefile +28 -0
- data/bin/zxd +87 -0
- data/bin/zxe +53 -0
- data/ext/zxing/extconf.rb +27 -0
- data/ext/zxing/zxing-cpp/.gitignore +4 -0
- data/ext/zxing/zxing-cpp/AUTHORS +115 -0
- data/ext/zxing/zxing-cpp/CMakeLists.txt +84 -0
- data/ext/zxing/zxing-cpp/COPYING +201 -0
- data/ext/zxing/zxing-cpp/NOTICE +65 -0
- data/ext/zxing/zxing-cpp/README.md +50 -0
- data/ext/zxing/zxing-cpp/cli/src/ImageReaderSource.cpp +112 -0
- data/ext/zxing/zxing-cpp/cli/src/ImageReaderSource.h +40 -0
- data/ext/zxing/zxing-cpp/cli/src/jpgd.cpp +3174 -0
- data/ext/zxing/zxing-cpp/cli/src/jpgd.h +319 -0
- data/ext/zxing/zxing-cpp/cli/src/lodepng.cpp +6261 -0
- data/ext/zxing/zxing-cpp/cli/src/lodepng.h +1695 -0
- data/ext/zxing/zxing-cpp/cli/src/main.cpp +297 -0
- data/ext/zxing/zxing-cpp/cmake/FindCPPUNIT.cmake +54 -0
- data/ext/zxing/zxing-cpp/cmake/FindIconv.cmake +57 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/.gitignore +6 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigInteger.cc +405 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigInteger.hh +215 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerAlgorithms.cc +70 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerAlgorithms.hh +25 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerLibrary.hh +8 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerUtils.cc +50 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerUtils.hh +72 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsigned.cc +697 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsigned.hh +418 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsignedInABase.cc +125 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsignedInABase.hh +122 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/ChangeLog +146 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/Makefile +73 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/NumberlikeArray.hh +177 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/README +71 -0
- data/ext/zxing/zxing-cpp/core/src/win32/zxing/iconv.h +14 -0
- data/ext/zxing/zxing-cpp/core/src/win32/zxing/stdint.h +247 -0
- data/ext/zxing/zxing-cpp/core/src/win32/zxing/win_iconv.c +2035 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/BarcodeFormat.cpp +40 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/BarcodeFormat.h +60 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Binarizer.cpp +45 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Binarizer.h +50 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/BinaryBitmap.cpp +70 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/BinaryBitmap.h +56 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ChecksumException.cpp +28 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ChecksumException.h +34 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/DecodeHints.cpp +142 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/DecodeHints.h +85 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Exception.cpp +43 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Exception.h +51 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/FormatException.cpp +41 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/FormatException.h +37 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/IllegalStateException.h +35 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/InvertedLuminanceSource.cpp +68 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/InvertedLuminanceSource.h +48 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/LuminanceSource.cpp +86 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/LuminanceSource.h +59 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/MultiFormatReader.cpp +124 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/MultiFormatReader.h +48 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/NotFoundException.h +35 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Reader.cpp +31 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Reader.h +40 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ReaderException.h +37 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Result.cpp +61 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Result.h +55 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ResultIO.cpp +34 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ResultPoint.cpp +108 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ResultPoint.h +55 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ResultPointCallback.cpp +26 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ResultPointCallback.h +39 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ZXing.h +133 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecDetectorResult.cpp +54 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecDetectorResult.h +48 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecReader.cpp +68 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecReader.h +49 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/decoder/Decoder.cpp +489 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/decoder/Decoder.h +69 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/detector/Detector.cpp +548 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/detector/Detector.h +92 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/Array.h +170 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/BitArray.cpp +155 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/BitArray.h +81 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/BitArrayIO.cpp +31 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/BitMatrix.cpp +143 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/BitMatrix.h +91 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/BitSource.cpp +76 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/BitSource.h +74 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/CharacterSetECI.cpp +104 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/CharacterSetECI.h +53 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/Counted.h +140 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/DecoderResult.cpp +46 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/DecoderResult.h +51 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/DetectorResult.cpp +39 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/DetectorResult.h +43 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GlobalHistogramBinarizer.cpp +212 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GlobalHistogramBinarizer.h +48 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleLuminanceSource.cpp +80 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleLuminanceSource.h +53 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleRotatedLuminanceSource.cpp +81 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleRotatedLuminanceSource.h +46 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GridSampler.cpp +122 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GridSampler.h +45 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/HybridBinarizer.cpp +226 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/HybridBinarizer.h +67 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/IllegalArgumentException.cpp +27 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/IllegalArgumentException.h +36 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/PerspectiveTransform.cpp +107 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/PerspectiveTransform.h +49 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/Point.h +47 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/Str.cpp +61 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/Str.h +51 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/StringUtils.cpp +198 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/StringUtils.h +52 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/JavaMath.h +43 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/MathUtils.h +57 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/MonochromeRectangleDetector.cpp +174 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/MonochromeRectangleDetector.h +62 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/WhiteRectangleDetector.cpp +330 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/WhiteRectangleDetector.h +59 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGF.cpp +150 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGF.h +73 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGFPoly.cpp +218 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGFPoly.h +56 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonDecoder.cpp +174 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonDecoder.h +49 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonException.cpp +30 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonException.h +33 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/DataMatrixReader.cpp +54 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/DataMatrixReader.h +45 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/Version.cpp +199 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/Version.h +87 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/BitMatrixParser.cpp +361 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/BitMatrixParser.h +59 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DataBlock.cpp +113 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DataBlock.h +49 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DecodedBitStreamParser.cpp +416 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DecodedBitStreamParser.h +104 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/Decoder.cpp +93 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/Decoder.h +49 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/CornerPoint.cpp +46 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/CornerPoint.h +43 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/Detector.cpp +446 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/Detector.h +94 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/DetectorException.cpp +23 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/DetectorException.h +23 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/ByQuadrantReader.cpp +75 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/ByQuadrantReader.h +42 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/GenericMultipleBarcodeReader.cpp +137 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/GenericMultipleBarcodeReader.h +51 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/MultipleBarcodeReader.cpp +29 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/MultipleBarcodeReader.h +41 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/QRCodeMultiReader.cpp +58 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/QRCodeMultiReader.h +36 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiDetector.cpp +47 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiDetector.h +37 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiFinderPatternFinder.cpp +236 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiFinderPatternFinder.h +47 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/CodaBarReader.cpp +340 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/CodaBarReader.h +57 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code128Reader.cpp +496 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code128Reader.h +48 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code39Reader.cpp +328 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code39Reader.h +63 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code93Reader.cpp +293 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code93Reader.h +58 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN13Reader.cpp +85 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN13Reader.h +49 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN8Reader.cpp +65 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN8Reader.h +47 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/ITFReader.cpp +337 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/ITFReader.h +54 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatOneDReader.cpp +96 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatOneDReader.h +38 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatUPCEANReader.cpp +110 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatUPCEANReader.h +41 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDReader.cpp +227 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDReader.h +81 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDResultPoint.cpp +28 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDResultPoint.h +35 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCAReader.cpp +71 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCAReader.h +50 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEANReader.cpp +309 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEANReader.h +88 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEReader.cpp +146 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEReader.h +47 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/PDF417Reader.cpp +170 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/PDF417Reader.h +49 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/BitMatrixParser.cpp +997 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/BitMatrixParser.h +84 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/DecodedBitStreamParser.cpp +563 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/DecodedBitStreamParser.h +84 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/Decoder.cpp +118 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/Decoder.h +62 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ErrorCorrection.cpp +214 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ErrorCorrection.h +71 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusGF.cpp +120 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusGF.h +72 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusPoly.cpp +284 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusPoly.h +68 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/Detector.cpp +664 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/Detector.h +106 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/LinesSampler.cpp +714 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/LinesSampler.h +122 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/ErrorCorrectionLevel.cpp +65 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/ErrorCorrectionLevel.h +52 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/FormatInformation.cpp +117 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/FormatInformation.h +54 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/QRCodeReader.cpp +52 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/QRCodeReader.h +48 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/Version.cpp +560 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/Version.h +85 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/BitMatrixParser.cpp +183 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/BitMatrixParser.h +56 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataBlock.cpp +118 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataBlock.h +50 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataMask.cpp +159 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataMask.h +50 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DecodedBitStreamParser.cpp +425 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DecodedBitStreamParser.h +72 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Decoder.cpp +107 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Decoder.h +46 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Mode.cpp +90 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Mode.h +57 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPattern.cpp +47 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPattern.h +45 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPatternFinder.cpp +208 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPatternFinder.h +68 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/Detector.cpp +314 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/Detector.h +69 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPattern.cpp +69 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPattern.h +48 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternFinder.cpp +559 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternFinder.h +76 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternInfo.cpp +41 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternInfo.h +47 -0
- data/ext/zxing/zxing-cpp/core/tests/src/TestRunner.cpp +30 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/BitArrayTest.cpp +216 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/BitArrayTest.h +61 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/BitMatrixTest.cpp +106 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/BitMatrixTest.h +55 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/BitSourceTest.cpp +49 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/BitSourceTest.h +42 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/CountedTest.cpp +58 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/CountedTest.h +46 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/PerspectiveTransformTest.cpp +69 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/PerspectiveTransformTest.h +47 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/reedsolomon/ReedSolomonTest.cpp +129 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/reedsolomon/ReedSolomonTest.h +62 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/ErrorCorrectionLevelTest.cpp +47 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/ErrorCorrectionLevelTest.h +45 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/FormatInformationTest.cpp +88 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/FormatInformationTest.h +47 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/VersionTest.cpp +88 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/VersionTest.h +49 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/DataMaskTest.cpp +132 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/DataMaskTest.h +91 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/ModeTest.cpp +52 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/ModeTest.h +47 -0
- data/ext/zxing/zxing.cc +224 -0
- data/lib/zxing.rb +50 -0
- data/lib/zxing/.gitignore +2 -0
- data/lib/zxing/aztec.rb +5 -0
- data/lib/zxing/aztec/aztec_reader.rb +14 -0
- data/lib/zxing/bad_image_exception.rb +4 -0
- data/lib/zxing/binarizer.rb +8 -0
- data/lib/zxing/binary_bitmap.rb +15 -0
- data/lib/zxing/checksum_exception.rb +4 -0
- data/lib/zxing/common.rb +7 -0
- data/lib/zxing/common/bit_matrix.rb +9 -0
- data/lib/zxing/common/hybrid_binarizer.rb +17 -0
- data/lib/zxing/common/illegal_argument_exception.rb +4 -0
- data/lib/zxing/datamatrix.rb +5 -0
- data/lib/zxing/datamatrix/data_matrix_reader.rb +14 -0
- data/lib/zxing/decodable.rb +11 -0
- data/lib/zxing/exception.rb +4 -0
- data/lib/zxing/ffi.rb +20 -0
- data/lib/zxing/ffi/aztec.rb +6 -0
- data/lib/zxing/ffi/aztec/aztec_reader.rb +9 -0
- data/lib/zxing/ffi/binarizer.rb +25 -0
- data/lib/zxing/ffi/binary_bitmap.rb +15 -0
- data/lib/zxing/ffi/common.rb +8 -0
- data/lib/zxing/ffi/common/bit_matrix.rb +12 -0
- data/lib/zxing/ffi/common/greyscale_luminance_source.rb +30 -0
- data/lib/zxing/ffi/common/hybrid_binarizer.rb +10 -0
- data/lib/zxing/ffi/datamatrix.rb +6 -0
- data/lib/zxing/ffi/datamatrix/data_matrix_reader.rb +9 -0
- data/lib/zxing/ffi/library.rb +102 -0
- data/lib/zxing/ffi/luminance_source.rb +18 -0
- data/lib/zxing/ffi/multi_format_reader.rb +9 -0
- data/lib/zxing/ffi/oned.rb +6 -0
- data/lib/zxing/ffi/oned/code_39_reader.rb +10 -0
- data/lib/zxing/ffi/qrcode.rb +8 -0
- data/lib/zxing/ffi/qrcode/decoder.rb +10 -0
- data/lib/zxing/ffi/qrcode/detector.rb +10 -0
- data/lib/zxing/ffi/reader.rb +58 -0
- data/lib/zxing/ffi/result.rb +23 -0
- data/lib/zxing/format_exception.rb +4 -0
- data/lib/zxing/illegal_argument_exception.rb +4 -0
- data/lib/zxing/image.rb +15 -0
- data/lib/zxing/luminance_source.rb +18 -0
- data/lib/zxing/multi_format_reader.rb +11 -0
- data/lib/zxing/not_found_exception.rb +4 -0
- data/lib/zxing/oned.rb +5 -0
- data/lib/zxing/oned/code_39_reader.rb +15 -0
- data/lib/zxing/qrcode.rb +8 -0
- data/lib/zxing/qrcode/decoder.rb +14 -0
- data/lib/zxing/qrcode/detector.rb +14 -0
- data/lib/zxing/qrcode/encoder.rb +8 -0
- data/lib/zxing/qrcode/encoder/byte_matrix.rb +18 -0
- data/lib/zxing/qrcode/encoder/encoder.rb +9 -0
- data/lib/zxing/qrcode/encoder/qrcode.rb +18 -0
- data/lib/zxing/reader.rb +8 -0
- data/lib/zxing/reader_exception.rb +4 -0
- data/lib/zxing/reed_solomon_exception.rb +2 -0
- data/lib/zxing/result.rb +18 -0
- data/lib/zxing/rmagick.rb +5 -0
- data/lib/zxing/rmagick/image.rb +104 -0
- data/lib/zxing/version.rb +33 -0
- data/test/qrcode.png +0 -0
- data/test/test_helper.rb +5 -0
- data/test/test_zxing.rb +58 -0
- data/test/vendor.rb +360 -0
- data/test/zxing/test_decodable.rb +38 -0
- data/zxing_cpp.gemspec +48 -0
- metadata +473 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
|
|
2
|
+
/*
|
|
3
|
+
* AtztecDetecorResult.cpp
|
|
4
|
+
* zxing
|
|
5
|
+
*
|
|
6
|
+
* Created by Lukas Stabe on 08/02/2012.
|
|
7
|
+
* Copyright 2012 ZXing authors All rights reserved.
|
|
8
|
+
*
|
|
9
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
* you may not use this file except in compliance with the License.
|
|
11
|
+
* You may obtain a copy of the License at
|
|
12
|
+
*
|
|
13
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
*
|
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
* See the License for the specific language governing permissions and
|
|
19
|
+
* limitations under the License.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
#include <zxing/aztec/AztecDetectorResult.h>
|
|
23
|
+
|
|
24
|
+
using zxing::aztec::AztecDetectorResult;
|
|
25
|
+
|
|
26
|
+
// VC++
|
|
27
|
+
using zxing::Ref;
|
|
28
|
+
using zxing::ArrayRef;
|
|
29
|
+
using zxing::BitMatrix;
|
|
30
|
+
using zxing::ResultPoint;
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
AztecDetectorResult::AztecDetectorResult(Ref<BitMatrix> bits,
|
|
34
|
+
ArrayRef< Ref<ResultPoint> > points,
|
|
35
|
+
bool compact,
|
|
36
|
+
int nbDatablocks,
|
|
37
|
+
int nbLayers)
|
|
38
|
+
: DetectorResult(bits, points),
|
|
39
|
+
compact_(compact),
|
|
40
|
+
nbDatablocks_(nbDatablocks),
|
|
41
|
+
nbLayers_(nbLayers) {
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
bool AztecDetectorResult::isCompact() {
|
|
45
|
+
return compact_;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
int AztecDetectorResult::getNBDatablocks() {
|
|
49
|
+
return nbDatablocks_;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
int AztecDetectorResult::getNBLayers() {
|
|
53
|
+
return nbLayers_;
|
|
54
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
|
|
2
|
+
/*
|
|
3
|
+
* AtztecDetecorResult.h
|
|
4
|
+
* zxing
|
|
5
|
+
*
|
|
6
|
+
* Created by Lukas Stabe on 08/02/2012.
|
|
7
|
+
* Copyright 2012 ZXing authors All rights reserved.
|
|
8
|
+
*
|
|
9
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
* you may not use this file except in compliance with the License.
|
|
11
|
+
* You may obtain a copy of the License at
|
|
12
|
+
*
|
|
13
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
*
|
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
* See the License for the specific language governing permissions and
|
|
19
|
+
* limitations under the License.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
#include <zxing/common/DetectorResult.h>
|
|
23
|
+
|
|
24
|
+
#ifndef ZXingWidget_AtztecDetecorResult_h
|
|
25
|
+
#define ZXingWidget_AtztecDetecorResult_h
|
|
26
|
+
|
|
27
|
+
namespace zxing {
|
|
28
|
+
namespace aztec {
|
|
29
|
+
|
|
30
|
+
class AztecDetectorResult : public DetectorResult {
|
|
31
|
+
private:
|
|
32
|
+
bool compact_;
|
|
33
|
+
int nbDatablocks_, nbLayers_;
|
|
34
|
+
public:
|
|
35
|
+
AztecDetectorResult(Ref<BitMatrix> bits,
|
|
36
|
+
ArrayRef< Ref<ResultPoint> > points,
|
|
37
|
+
bool compact,
|
|
38
|
+
int nbDatablocks,
|
|
39
|
+
int nbLayers);
|
|
40
|
+
bool isCompact();
|
|
41
|
+
int getNBDatablocks();
|
|
42
|
+
int getNBLayers();
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
#endif
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
|
|
2
|
+
/*
|
|
3
|
+
* AztecReader.cpp
|
|
4
|
+
* zxing
|
|
5
|
+
*
|
|
6
|
+
* Created by Lukas Stabe on 08/02/2012.
|
|
7
|
+
* Copyright 2012 ZXing authors All rights reserved.
|
|
8
|
+
*
|
|
9
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
* you may not use this file except in compliance with the License.
|
|
11
|
+
* You may obtain a copy of the License at
|
|
12
|
+
*
|
|
13
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
*
|
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
* See the License for the specific language governing permissions and
|
|
19
|
+
* limitations under the License.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
#include <zxing/aztec/AztecReader.h>
|
|
23
|
+
#include <zxing/aztec/detector/Detector.h>
|
|
24
|
+
#include <zxing/common/DecoderResult.h>
|
|
25
|
+
#include <iostream>
|
|
26
|
+
|
|
27
|
+
using zxing::Ref;
|
|
28
|
+
using zxing::ArrayRef;
|
|
29
|
+
using zxing::Result;
|
|
30
|
+
using zxing::aztec::AztecReader;
|
|
31
|
+
|
|
32
|
+
// VC++
|
|
33
|
+
using zxing::BinaryBitmap;
|
|
34
|
+
using zxing::DecodeHints;
|
|
35
|
+
|
|
36
|
+
AztecReader::AztecReader() : decoder_() {
|
|
37
|
+
// nothing
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
Ref<Result> AztecReader::decode(Ref<zxing::BinaryBitmap> image) {
|
|
41
|
+
Detector detector(image->getBlackMatrix());
|
|
42
|
+
|
|
43
|
+
Ref<AztecDetectorResult> detectorResult(detector.detect());
|
|
44
|
+
|
|
45
|
+
ArrayRef< Ref<ResultPoint> > points(detectorResult->getPoints());
|
|
46
|
+
|
|
47
|
+
Ref<DecoderResult> decoderResult(decoder_.decode(detectorResult));
|
|
48
|
+
|
|
49
|
+
Ref<Result> result(new Result(decoderResult->getText(),
|
|
50
|
+
decoderResult->getRawBytes(),
|
|
51
|
+
points,
|
|
52
|
+
BarcodeFormat::AZTEC));
|
|
53
|
+
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
Ref<Result> AztecReader::decode(Ref<BinaryBitmap> image, DecodeHints) {
|
|
58
|
+
//cout << "decoding with hints not supported for aztec" << "\n" << flush;
|
|
59
|
+
return this->decode(image);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
AztecReader::~AztecReader() {
|
|
63
|
+
// nothing
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
zxing::aztec::Decoder& AztecReader::getDecoder() {
|
|
67
|
+
return decoder_;
|
|
68
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
|
|
2
|
+
/*
|
|
3
|
+
* AztecReader.h
|
|
4
|
+
* zxing
|
|
5
|
+
*
|
|
6
|
+
* Created by Lukas Stabe on 08/02/2012.
|
|
7
|
+
* Copyright 2012 ZXing authors All rights reserved.
|
|
8
|
+
*
|
|
9
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
* you may not use this file except in compliance with the License.
|
|
11
|
+
* You may obtain a copy of the License at
|
|
12
|
+
*
|
|
13
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
*
|
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
* See the License for the specific language governing permissions and
|
|
19
|
+
* limitations under the License.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
#include <zxing/Reader.h>
|
|
23
|
+
#include <zxing/aztec/decoder/Decoder.h>
|
|
24
|
+
#include <zxing/DecodeHints.h>
|
|
25
|
+
|
|
26
|
+
#ifndef ZXingWidget_AztecReader_h
|
|
27
|
+
#define ZXingWidget_AztecReader_h
|
|
28
|
+
|
|
29
|
+
namespace zxing {
|
|
30
|
+
namespace aztec {
|
|
31
|
+
|
|
32
|
+
class AztecReader : public Reader {
|
|
33
|
+
private:
|
|
34
|
+
Decoder decoder_;
|
|
35
|
+
|
|
36
|
+
protected:
|
|
37
|
+
Decoder &getDecoder();
|
|
38
|
+
|
|
39
|
+
public:
|
|
40
|
+
AztecReader();
|
|
41
|
+
virtual Ref<Result> decode(Ref<BinaryBitmap> image);
|
|
42
|
+
virtual Ref<Result> decode(Ref<BinaryBitmap> image, DecodeHints hints);
|
|
43
|
+
virtual ~AztecReader();
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
#endif
|
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
|
|
2
|
+
/*
|
|
3
|
+
* Decoder.cpp
|
|
4
|
+
* zxing
|
|
5
|
+
*
|
|
6
|
+
* Created by Lukas Stabe on 08/02/2012.
|
|
7
|
+
* Copyright 2012 ZXing authors All rights reserved.
|
|
8
|
+
*
|
|
9
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
* you may not use this file except in compliance with the License.
|
|
11
|
+
* You may obtain a copy of the License at
|
|
12
|
+
*
|
|
13
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
*
|
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
* See the License for the specific language governing permissions and
|
|
19
|
+
* limitations under the License.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
#include <zxing/aztec/decoder/Decoder.h>
|
|
23
|
+
#ifndef NO_ICONV
|
|
24
|
+
#include <iconv.h>
|
|
25
|
+
#endif
|
|
26
|
+
#include <iostream>
|
|
27
|
+
#include <zxing/FormatException.h>
|
|
28
|
+
#include <zxing/common/reedsolomon/ReedSolomonDecoder.h>
|
|
29
|
+
#include <zxing/common/reedsolomon/ReedSolomonException.h>
|
|
30
|
+
#include <zxing/common/reedsolomon/GenericGF.h>
|
|
31
|
+
#include <zxing/common/IllegalArgumentException.h>
|
|
32
|
+
#include <zxing/common/DecoderResult.h>
|
|
33
|
+
|
|
34
|
+
using zxing::aztec::Decoder;
|
|
35
|
+
using zxing::DecoderResult;
|
|
36
|
+
using zxing::String;
|
|
37
|
+
using zxing::BitArray;
|
|
38
|
+
using zxing::BitMatrix;
|
|
39
|
+
using zxing::Ref;
|
|
40
|
+
|
|
41
|
+
using std::string;
|
|
42
|
+
|
|
43
|
+
namespace {
|
|
44
|
+
void add(string& result, char character) {
|
|
45
|
+
#ifndef NO_ICONV
|
|
46
|
+
char character2 = character & 0xff;
|
|
47
|
+
char s[] = {character2};
|
|
48
|
+
char* ss = s;
|
|
49
|
+
size_t sl = sizeof(s);
|
|
50
|
+
char d[4];
|
|
51
|
+
char* ds = d;
|
|
52
|
+
size_t dl = sizeof(d);
|
|
53
|
+
iconv_t ic = iconv_open("UTF-8", "ISO-8859-1");
|
|
54
|
+
iconv(ic, &ss, &sl, &ds, &dl);
|
|
55
|
+
iconv_close(ic);
|
|
56
|
+
d[sizeof(d)-dl] = 0;
|
|
57
|
+
result.append(d);
|
|
58
|
+
#else
|
|
59
|
+
result.push_back(character);
|
|
60
|
+
#endif
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const int NB_BITS_COMPACT[] = {
|
|
64
|
+
0, 104, 240, 408, 608
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const int NB_BITS[] = {
|
|
68
|
+
0, 128, 288, 480, 704, 960, 1248, 1568, 1920, 2304, 2720, 3168, 3648, 4160, 4704, 5280, 5888, 6528,
|
|
69
|
+
7200, 7904, 8640, 9408, 10208, 11040, 11904, 12800, 13728, 14688, 15680, 16704, 17760, 18848, 19968
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const int NB_DATABLOCK_COMPACT[] = {
|
|
73
|
+
0, 17, 40, 51, 76
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const int NB_DATABLOCK[] = {
|
|
77
|
+
0, 21, 48, 60, 88, 120, 156, 196, 240, 230, 272, 316, 364, 416, 470, 528, 588, 652, 720, 790, 864,
|
|
78
|
+
940, 1020, 920, 992, 1066, 1144, 1224, 1306, 1392, 1480, 1570, 1664
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const char* UPPER_TABLE[] = {
|
|
82
|
+
"CTRL_PS", " ", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P",
|
|
83
|
+
"Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "CTRL_LL", "CTRL_ML", "CTRL_DL", "CTRL_BS"
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const char* LOWER_TABLE[] = {
|
|
87
|
+
"CTRL_PS", " ", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p",
|
|
88
|
+
"q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "CTRL_US", "CTRL_ML", "CTRL_DL", "CTRL_BS"
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
const char* MIXED_TABLE[] = {
|
|
92
|
+
"CTRL_PS", " ", "\1", "\2", "\3", "\4", "\5", "\6", "\7", "\b", "\t", "\n",
|
|
93
|
+
"\13", "\f", "\r", "\33", "\34", "\35", "\36", "\37", "@", "\\", "^", "_",
|
|
94
|
+
"`", "|", "~", "\177", "CTRL_LL", "CTRL_UL", "CTRL_PL", "CTRL_BS"
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const char* PUNCT_TABLE[] = {
|
|
98
|
+
"", "\r", "\r\n", ". ", ", ", ": ", "!", "\"", "#", "$", "%", "&", "'", "(", ")",
|
|
99
|
+
"*", "+", ",", "-", ".", "/", ":", ";", "<", "=", ">", "?", "[", "]", "{", "}", "CTRL_UL"
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const char* DIGIT_TABLE[] = {
|
|
103
|
+
"CTRL_PS", " ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ",", ".", "CTRL_UL", "CTRL_US"
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
Decoder::Table Decoder::getTable(char t) {
|
|
108
|
+
switch (t) {
|
|
109
|
+
case 'L':
|
|
110
|
+
return LOWER;
|
|
111
|
+
case 'P':
|
|
112
|
+
return PUNCT;
|
|
113
|
+
case 'M':
|
|
114
|
+
return MIXED;
|
|
115
|
+
case 'D':
|
|
116
|
+
return DIGIT;
|
|
117
|
+
case 'B':
|
|
118
|
+
return BINARY;
|
|
119
|
+
case 'U':
|
|
120
|
+
default:
|
|
121
|
+
return UPPER;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const char* Decoder::getCharacter(zxing::aztec::Decoder::Table table, int code) {
|
|
126
|
+
switch (table) {
|
|
127
|
+
case UPPER:
|
|
128
|
+
return UPPER_TABLE[code];
|
|
129
|
+
case LOWER:
|
|
130
|
+
return LOWER_TABLE[code];
|
|
131
|
+
case MIXED:
|
|
132
|
+
return MIXED_TABLE[code];
|
|
133
|
+
case PUNCT:
|
|
134
|
+
return PUNCT_TABLE[code];
|
|
135
|
+
case DIGIT:
|
|
136
|
+
return DIGIT_TABLE[code];
|
|
137
|
+
default:
|
|
138
|
+
return "";
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
Decoder::Decoder() {
|
|
143
|
+
// nothing
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
Ref<DecoderResult> Decoder::decode(Ref<zxing::aztec::AztecDetectorResult> detectorResult) {
|
|
147
|
+
ddata_ = detectorResult;
|
|
148
|
+
|
|
149
|
+
// std::printf("getting bits\n");
|
|
150
|
+
|
|
151
|
+
Ref<BitMatrix> matrix = detectorResult->getBits();
|
|
152
|
+
|
|
153
|
+
if (!ddata_->isCompact()) {
|
|
154
|
+
// std::printf("removing lines\n");
|
|
155
|
+
matrix = removeDashedLines(ddata_->getBits());
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// std::printf("extracting bits\n");
|
|
159
|
+
Ref<BitArray> rawbits = extractBits(matrix);
|
|
160
|
+
|
|
161
|
+
// std::printf("correcting bits\n");
|
|
162
|
+
Ref<BitArray> aCorrectedBits = correctBits(rawbits);
|
|
163
|
+
|
|
164
|
+
// std::printf("decoding bits\n");
|
|
165
|
+
Ref<String> result = getEncodedData(aCorrectedBits);
|
|
166
|
+
|
|
167
|
+
// std::printf("constructing array\n");
|
|
168
|
+
ArrayRef<char> arrayOut(aCorrectedBits->getSize());
|
|
169
|
+
for (int i = 0; i < aCorrectedBits->count(); i++) {
|
|
170
|
+
arrayOut[i] = (char)aCorrectedBits->get(i);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// std::printf("returning\n");
|
|
174
|
+
|
|
175
|
+
return Ref<DecoderResult>(new DecoderResult(arrayOut, result));
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
Ref<String> Decoder::getEncodedData(Ref<zxing::BitArray> correctedBits) {
|
|
179
|
+
int endIndex = codewordSize_ * ddata_->getNBDatablocks() - invertedBitCount_;
|
|
180
|
+
if (endIndex > (int)correctedBits->getSize()) {
|
|
181
|
+
// std::printf("invalid input\n");
|
|
182
|
+
throw FormatException("invalid input data");
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
Table lastTable = UPPER;
|
|
186
|
+
Table table = UPPER;
|
|
187
|
+
int startIndex = 0;
|
|
188
|
+
std::string result;
|
|
189
|
+
bool end = false;
|
|
190
|
+
bool shift = false;
|
|
191
|
+
bool switchShift = false;
|
|
192
|
+
bool binaryShift = false;
|
|
193
|
+
|
|
194
|
+
while (!end) {
|
|
195
|
+
// std::printf("decoooooding\n");
|
|
196
|
+
|
|
197
|
+
if (shift) {
|
|
198
|
+
switchShift = true;
|
|
199
|
+
} else {
|
|
200
|
+
lastTable = table;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
int code;
|
|
204
|
+
if (binaryShift) {
|
|
205
|
+
if (endIndex - startIndex < 5) {
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
int length = readCode(correctedBits, startIndex, 5);
|
|
210
|
+
startIndex += 5;
|
|
211
|
+
if (length == 0) {
|
|
212
|
+
if (endIndex - startIndex < 11) {
|
|
213
|
+
break;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
length = readCode(correctedBits, startIndex, 11) + 31;
|
|
217
|
+
startIndex += 11;
|
|
218
|
+
}
|
|
219
|
+
for (int charCount = 0; charCount < length; charCount++) {
|
|
220
|
+
if (endIndex - startIndex < 8) {
|
|
221
|
+
end = true;
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
code = readCode(correctedBits, startIndex, 8);
|
|
226
|
+
add(result, code);
|
|
227
|
+
startIndex += 8;
|
|
228
|
+
}
|
|
229
|
+
binaryShift = false;
|
|
230
|
+
} else {
|
|
231
|
+
if (table == BINARY) {
|
|
232
|
+
if (endIndex - startIndex < 8) {
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
code = readCode(correctedBits, startIndex, 8);
|
|
236
|
+
startIndex += 8;
|
|
237
|
+
|
|
238
|
+
add(result, code);
|
|
239
|
+
} else {
|
|
240
|
+
int size = 5;
|
|
241
|
+
|
|
242
|
+
if (table == DIGIT) {
|
|
243
|
+
size = 4;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if (endIndex - startIndex < size) {
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
code = readCode(correctedBits, startIndex, size);
|
|
251
|
+
startIndex += size;
|
|
252
|
+
|
|
253
|
+
const char *str = getCharacter(table, code);
|
|
254
|
+
std::string string(str);
|
|
255
|
+
if ((int)string.find("CTRL_") != -1) {
|
|
256
|
+
table = getTable(str[5]);
|
|
257
|
+
|
|
258
|
+
if (str[6] == 'S') {
|
|
259
|
+
shift = true;
|
|
260
|
+
if (str[5] == 'B') {
|
|
261
|
+
binaryShift = true;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
} else {
|
|
265
|
+
result.append(string);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
if (switchShift) {
|
|
272
|
+
table = lastTable;
|
|
273
|
+
shift = false;
|
|
274
|
+
switchShift = false;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
return Ref<String>(new String(result));
|
|
281
|
+
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
Ref<BitArray> Decoder::correctBits(Ref<zxing::BitArray> rawbits) {
|
|
285
|
+
//return rawbits;
|
|
286
|
+
// std::printf("decoding stuff:%d datablocks in %d layers\n", ddata_->getNBDatablocks(), ddata_->getNBLayers());
|
|
287
|
+
|
|
288
|
+
Ref<GenericGF> gf = GenericGF::AZTEC_DATA_6;
|
|
289
|
+
|
|
290
|
+
if (ddata_->getNBLayers() <= 2) {
|
|
291
|
+
codewordSize_ = 6;
|
|
292
|
+
gf = GenericGF::AZTEC_DATA_6;
|
|
293
|
+
} else if (ddata_->getNBLayers() <= 8) {
|
|
294
|
+
codewordSize_ = 8;
|
|
295
|
+
gf = GenericGF::AZTEC_DATA_8;
|
|
296
|
+
} else if (ddata_->getNBLayers() <= 22) {
|
|
297
|
+
codewordSize_ = 10;
|
|
298
|
+
gf = GenericGF::AZTEC_DATA_10;
|
|
299
|
+
} else {
|
|
300
|
+
codewordSize_ = 12;
|
|
301
|
+
gf = GenericGF::AZTEC_DATA_12;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
int numDataCodewords = ddata_->getNBDatablocks();
|
|
305
|
+
int numECCodewords;
|
|
306
|
+
int offset;
|
|
307
|
+
|
|
308
|
+
if (ddata_->isCompact()) {
|
|
309
|
+
offset = NB_BITS_COMPACT[ddata_->getNBLayers()] - numCodewords_ * codewordSize_;
|
|
310
|
+
numECCodewords = NB_DATABLOCK_COMPACT[ddata_->getNBLayers()] - numDataCodewords;
|
|
311
|
+
} else {
|
|
312
|
+
offset = NB_BITS[ddata_->getNBLayers()] - numCodewords_ * codewordSize_;
|
|
313
|
+
numECCodewords = NB_DATABLOCK[ddata_->getNBLayers()] - numDataCodewords;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
ArrayRef<int> dataWords(numCodewords_);
|
|
317
|
+
|
|
318
|
+
for (int i = 0; i < numCodewords_; i++) {
|
|
319
|
+
int flag = 1;
|
|
320
|
+
for (int j = 1; j <= codewordSize_; j++) {
|
|
321
|
+
if (rawbits->get(codewordSize_ * i + codewordSize_ - j + offset)) {
|
|
322
|
+
dataWords[i] += flag;
|
|
323
|
+
}
|
|
324
|
+
flag <<= 1;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
//
|
|
328
|
+
//
|
|
329
|
+
//
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
try {
|
|
333
|
+
ReedSolomonDecoder rsDecoder(gf);
|
|
334
|
+
rsDecoder.decode(dataWords, numECCodewords);
|
|
335
|
+
} catch (ReedSolomonException const& ignored) {
|
|
336
|
+
(void)ignored;
|
|
337
|
+
// std::printf("got reed solomon exception:%s, throwing formatexception\n", rse.what());
|
|
338
|
+
throw FormatException("rs decoding failed");
|
|
339
|
+
} catch (IllegalArgumentException const& iae) {
|
|
340
|
+
(void)iae;
|
|
341
|
+
// std::printf("illegal argument exception: %s", iae.what());
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
offset = 0;
|
|
345
|
+
invertedBitCount_ = 0;
|
|
346
|
+
|
|
347
|
+
Ref<BitArray> correctedBits(new BitArray(numDataCodewords * codewordSize_));
|
|
348
|
+
for (int i = 0; i < numDataCodewords; i++) {
|
|
349
|
+
|
|
350
|
+
bool seriesColor = false;
|
|
351
|
+
int seriesCount = 0;
|
|
352
|
+
int flag = 1 << (codewordSize_ - 1);
|
|
353
|
+
|
|
354
|
+
for (int j = 0; j < codewordSize_; j++) {
|
|
355
|
+
|
|
356
|
+
bool color = (dataWords[i] & flag) == flag;
|
|
357
|
+
|
|
358
|
+
if (seriesCount == codewordSize_ - 1) {
|
|
359
|
+
|
|
360
|
+
if (color == seriesColor) {
|
|
361
|
+
throw FormatException("bit was not inverted");
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
seriesColor = false;
|
|
365
|
+
seriesCount = 0;
|
|
366
|
+
offset++;
|
|
367
|
+
invertedBitCount_++;
|
|
368
|
+
|
|
369
|
+
} else {
|
|
370
|
+
|
|
371
|
+
if (seriesColor == color) {
|
|
372
|
+
seriesCount++;
|
|
373
|
+
} else {
|
|
374
|
+
seriesCount = 1;
|
|
375
|
+
seriesColor = color;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
if (color) correctedBits->set(i * codewordSize_ + j - offset);
|
|
379
|
+
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
flag = ((unsigned int)flag) >> 1;
|
|
383
|
+
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
return correctedBits;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
Ref<BitArray> Decoder::extractBits(Ref<zxing::BitMatrix> matrix) {
|
|
391
|
+
std::vector<bool> rawbits;
|
|
392
|
+
|
|
393
|
+
if (ddata_->isCompact()) {
|
|
394
|
+
if (ddata_->getNBLayers() > 5) { //NB_BITS_COMPACT length
|
|
395
|
+
throw FormatException("data is too long");
|
|
396
|
+
}
|
|
397
|
+
rawbits = std::vector<bool>(NB_BITS_COMPACT[ddata_->getNBLayers()]);
|
|
398
|
+
numCodewords_ = NB_DATABLOCK_COMPACT[ddata_->getNBLayers()];
|
|
399
|
+
} else {
|
|
400
|
+
if (ddata_->getNBLayers() > 33) { //NB_BITS length
|
|
401
|
+
throw FormatException("data is too long");
|
|
402
|
+
}
|
|
403
|
+
rawbits = std::vector<bool>(NB_BITS[ddata_->getNBLayers()]);
|
|
404
|
+
numCodewords_ = NB_DATABLOCK[ddata_->getNBLayers()];
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
int layer = ddata_->getNBLayers();
|
|
408
|
+
int size = matrix->getHeight();
|
|
409
|
+
int rawbitsOffset = 0;
|
|
410
|
+
int matrixOffset = 0;
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
while (layer != 0) {
|
|
414
|
+
|
|
415
|
+
int flip = 0;
|
|
416
|
+
for (int i = 0; i < 2 * size - 4; i++) {
|
|
417
|
+
rawbits[rawbitsOffset + i] = matrix->get(matrixOffset + flip, matrixOffset + i / 2);
|
|
418
|
+
rawbits[rawbitsOffset + 2 * size - 4 + i] = matrix->get(matrixOffset + i / 2, matrixOffset + size - 1 - flip);
|
|
419
|
+
flip = (flip + 1) % 2;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
flip = 0;
|
|
423
|
+
for (int i = 2 * size + 1; i > 5; i--) {
|
|
424
|
+
rawbits[rawbitsOffset + 4 * size - 8 + (2 * size - i) + 1] =
|
|
425
|
+
matrix->get(matrixOffset + size - 1 - flip, matrixOffset + i / 2 - 1);
|
|
426
|
+
rawbits[rawbitsOffset + 6 * size - 12 + (2 * size - i) + 1] =
|
|
427
|
+
matrix->get(matrixOffset + i / 2 - 1, matrixOffset + flip);
|
|
428
|
+
flip = (flip + 1) % 2;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
matrixOffset += 2;
|
|
432
|
+
rawbitsOffset += 8 * size - 16;
|
|
433
|
+
layer--;
|
|
434
|
+
size -= 4;
|
|
435
|
+
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
Ref<BitArray> returnValue(new BitArray(rawbits.size()));
|
|
439
|
+
for (int i = 0; i < (int)rawbits.size(); i++) {
|
|
440
|
+
if (rawbits[i]) returnValue->set(i);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
return returnValue;
|
|
444
|
+
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
Ref<BitMatrix> Decoder::removeDashedLines(Ref<zxing::BitMatrix> matrix) {
|
|
448
|
+
int nbDashed = 1 + 2 * ((matrix->getWidth() - 1) / 2 / 16);
|
|
449
|
+
Ref<BitMatrix> newMatrix(new BitMatrix(matrix->getWidth() - nbDashed, matrix->getHeight() - nbDashed));
|
|
450
|
+
|
|
451
|
+
int nx = 0;
|
|
452
|
+
|
|
453
|
+
for (int x = 0; x < (int)matrix->getWidth(); x++) {
|
|
454
|
+
|
|
455
|
+
if ((matrix->getWidth() / 2 - x) % 16 == 0) {
|
|
456
|
+
continue;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
int ny = 0;
|
|
460
|
+
for (int y = 0; y < (int)matrix->getHeight(); y++) {
|
|
461
|
+
|
|
462
|
+
if ((matrix->getWidth() / 2 - y) % 16 == 0) {
|
|
463
|
+
continue;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
if (matrix->get(x, y)) {
|
|
467
|
+
newMatrix->set(nx, ny);
|
|
468
|
+
}
|
|
469
|
+
ny++;
|
|
470
|
+
|
|
471
|
+
}
|
|
472
|
+
nx++;
|
|
473
|
+
|
|
474
|
+
}
|
|
475
|
+
return newMatrix;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
int Decoder::readCode(Ref<zxing::BitArray> rawbits, int startIndex, int length) {
|
|
479
|
+
int res = 0;
|
|
480
|
+
|
|
481
|
+
for (int i = startIndex; i < startIndex + length; i++) {
|
|
482
|
+
res <<= 1;
|
|
483
|
+
if (rawbits->get(i)) {
|
|
484
|
+
res ++;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
return res;
|
|
489
|
+
}
|