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,84 @@
|
|
|
1
|
+
#ifndef __BIT_MATRIX_PARSER__PDF_H__
|
|
2
|
+
#define __BIT_MATRIX_PARSER__PDF_H__
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* BitMatrixParser.h / PDF417
|
|
6
|
+
* zxing
|
|
7
|
+
*
|
|
8
|
+
* Copyright 2010 ZXing authors All rights reserved.
|
|
9
|
+
*
|
|
10
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
11
|
+
* you may not use this file except in compliance with the License.
|
|
12
|
+
* You may obtain a copy of the License at
|
|
13
|
+
*
|
|
14
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
15
|
+
*
|
|
16
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
17
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
18
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
19
|
+
* See the License for the specific language governing permissions and
|
|
20
|
+
* limitations under the License.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
#include <zxing/ReaderException.h>
|
|
24
|
+
#include <zxing/FormatException.h>
|
|
25
|
+
#include <zxing/common/BitMatrix.h>
|
|
26
|
+
#include <zxing/common/Counted.h>
|
|
27
|
+
#include <zxing/common/Array.h>
|
|
28
|
+
#include <stdint.h>
|
|
29
|
+
|
|
30
|
+
namespace zxing {
|
|
31
|
+
namespace pdf417 {
|
|
32
|
+
namespace decoder {
|
|
33
|
+
|
|
34
|
+
class BitMatrixParser : public Counted {
|
|
35
|
+
private:
|
|
36
|
+
static const int MAX_ROWS;
|
|
37
|
+
// Maximum Codewords (Data + Error)
|
|
38
|
+
static const int MAX_CW_CAPACITY;
|
|
39
|
+
static const int MODULES_IN_SYMBOL;
|
|
40
|
+
|
|
41
|
+
Ref<BitMatrix> bitMatrix_;
|
|
42
|
+
int rows_; /* = 0 */
|
|
43
|
+
int leftColumnECData_; /* = 0 */
|
|
44
|
+
int rightColumnECData_; /* = 0 */
|
|
45
|
+
/* added 2012-06-22 HFN */
|
|
46
|
+
int aLeftColumnTriple_[3];
|
|
47
|
+
int aRightColumnTriple_[3];
|
|
48
|
+
int eraseCount_; /* = 0 */
|
|
49
|
+
ArrayRef<int> erasures_;
|
|
50
|
+
int ecLevel_; /* = -1 */
|
|
51
|
+
|
|
52
|
+
public:
|
|
53
|
+
static const int SYMBOL_TABLE[];
|
|
54
|
+
static const int SYMBOL_TABLE_LENGTH;
|
|
55
|
+
static const int CODEWORD_TABLE[];
|
|
56
|
+
|
|
57
|
+
public:
|
|
58
|
+
BitMatrixParser(Ref<BitMatrix> bitMatrix);
|
|
59
|
+
ArrayRef<int> getErasures() const {return erasures_;}
|
|
60
|
+
int getECLevel() const {return ecLevel_;}
|
|
61
|
+
int getEraseCount() const {return eraseCount_;}
|
|
62
|
+
ArrayRef<int> readCodewords(); /* throw(FormatException) */
|
|
63
|
+
static int getCodeword(int64_t symbol, int *pi = NULL);
|
|
64
|
+
|
|
65
|
+
private:
|
|
66
|
+
bool VerifyOuterColumns(int rownumber);
|
|
67
|
+
static ArrayRef<int> trimArray(ArrayRef<int> array, int size);
|
|
68
|
+
static int findCodewordIndex(int64_t symbol);
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
int processRow(int rowNumber,
|
|
72
|
+
ArrayRef<int> codewords, int next);
|
|
73
|
+
|
|
74
|
+
int processRow(ArrayRef<int> rowCounters, int rowNumber, int rowHeight,
|
|
75
|
+
ArrayRef<int> codewords, int next); /* throw(FormatException) */
|
|
76
|
+
protected:
|
|
77
|
+
bool IsEqual(int &a, int &b, int rownumber);
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
#endif // __BIT_MATRIX_PARSER__PDF_H__
|
|
@@ -0,0 +1,563 @@
|
|
|
1
|
+
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2010, 2012 ZXing authors All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#include <stdint.h>
|
|
19
|
+
#include <bigint/BigIntegerUtils.hh>
|
|
20
|
+
#include <zxing/FormatException.h>
|
|
21
|
+
#include <zxing/pdf417/decoder/DecodedBitStreamParser.h>
|
|
22
|
+
#include <zxing/common/DecoderResult.h>
|
|
23
|
+
|
|
24
|
+
using std::string;
|
|
25
|
+
using zxing::pdf417::DecodedBitStreamParser;
|
|
26
|
+
using zxing::ArrayRef;
|
|
27
|
+
using zxing::Ref;
|
|
28
|
+
using zxing::DecoderResult;
|
|
29
|
+
using zxing::String;
|
|
30
|
+
|
|
31
|
+
const int DecodedBitStreamParser::TEXT_COMPACTION_MODE_LATCH = 900;
|
|
32
|
+
const int DecodedBitStreamParser::BYTE_COMPACTION_MODE_LATCH = 901;
|
|
33
|
+
const int DecodedBitStreamParser::NUMERIC_COMPACTION_MODE_LATCH = 902;
|
|
34
|
+
const int DecodedBitStreamParser::BYTE_COMPACTION_MODE_LATCH_6 = 924;
|
|
35
|
+
const int DecodedBitStreamParser::BEGIN_MACRO_PDF417_CONTROL_BLOCK = 928;
|
|
36
|
+
const int DecodedBitStreamParser::BEGIN_MACRO_PDF417_OPTIONAL_FIELD = 923;
|
|
37
|
+
const int DecodedBitStreamParser::MACRO_PDF417_TERMINATOR = 922;
|
|
38
|
+
const int DecodedBitStreamParser::MODE_SHIFT_TO_BYTE_COMPACTION_MODE = 913;
|
|
39
|
+
const int DecodedBitStreamParser::MAX_NUMERIC_CODEWORDS = 15;
|
|
40
|
+
|
|
41
|
+
const int DecodedBitStreamParser::PL = 25;
|
|
42
|
+
const int DecodedBitStreamParser::LL = 27;
|
|
43
|
+
const int DecodedBitStreamParser::AS = 27;
|
|
44
|
+
const int DecodedBitStreamParser::ML = 28;
|
|
45
|
+
const int DecodedBitStreamParser::AL = 28;
|
|
46
|
+
const int DecodedBitStreamParser::PS = 29;
|
|
47
|
+
const int DecodedBitStreamParser::PAL = 29;
|
|
48
|
+
|
|
49
|
+
const int DecodedBitStreamParser::EXP900_SIZE = 16;
|
|
50
|
+
|
|
51
|
+
const char DecodedBitStreamParser::PUNCT_CHARS[] = {
|
|
52
|
+
';', '<', '>', '@', '[', '\\', '}', '_', '`', '~', '!',
|
|
53
|
+
'\r', '\t', ',', ':', '\n', '-', '.', '$', '/', '"', '|', '*',
|
|
54
|
+
'(', ')', '?', '{', '}', '\''};
|
|
55
|
+
|
|
56
|
+
const char DecodedBitStreamParser::MIXED_CHARS[] = {
|
|
57
|
+
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '&',
|
|
58
|
+
'\r', '\t', ',', ':', '#', '-', '.', '$', '/', '+', '%', '*',
|
|
59
|
+
'=', '^'};
|
|
60
|
+
|
|
61
|
+
ArrayRef<BigInteger> DecodedBitStreamParser::initEXP900() {
|
|
62
|
+
ArrayRef<BigInteger> EXP900 (16);
|
|
63
|
+
EXP900[0] = BigInteger(1);
|
|
64
|
+
BigInteger nineHundred (900);
|
|
65
|
+
EXP900[1] = nineHundred;
|
|
66
|
+
for (int i = 2; i < EXP900->size(); i++) {
|
|
67
|
+
EXP900[i] = EXP900[i - 1] * nineHundred;
|
|
68
|
+
}
|
|
69
|
+
return EXP900;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
ArrayRef<BigInteger> DecodedBitStreamParser::EXP900 = initEXP900();
|
|
73
|
+
|
|
74
|
+
DecodedBitStreamParser::DecodedBitStreamParser(){}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* PDF417 main decoder.
|
|
78
|
+
**/
|
|
79
|
+
Ref<DecoderResult> DecodedBitStreamParser::decode(ArrayRef<int> codewords)
|
|
80
|
+
{
|
|
81
|
+
Ref<String> result (new String(100));
|
|
82
|
+
// Get compaction mode
|
|
83
|
+
int codeIndex = 1;
|
|
84
|
+
int code = codewords[codeIndex++];
|
|
85
|
+
while (codeIndex < codewords[0]) {
|
|
86
|
+
switch (code) {
|
|
87
|
+
case TEXT_COMPACTION_MODE_LATCH:
|
|
88
|
+
codeIndex = textCompaction(codewords, codeIndex, result);
|
|
89
|
+
break;
|
|
90
|
+
case BYTE_COMPACTION_MODE_LATCH:
|
|
91
|
+
codeIndex = byteCompaction(code, codewords, codeIndex, result);
|
|
92
|
+
break;
|
|
93
|
+
case NUMERIC_COMPACTION_MODE_LATCH:
|
|
94
|
+
codeIndex = numericCompaction(codewords, codeIndex, result);
|
|
95
|
+
break;
|
|
96
|
+
case MODE_SHIFT_TO_BYTE_COMPACTION_MODE:
|
|
97
|
+
codeIndex = byteCompaction(code, codewords, codeIndex, result);
|
|
98
|
+
break;
|
|
99
|
+
case BYTE_COMPACTION_MODE_LATCH_6:
|
|
100
|
+
codeIndex = byteCompaction(code, codewords, codeIndex, result);
|
|
101
|
+
break;
|
|
102
|
+
default:
|
|
103
|
+
// Default to text compaction. During testing numerous barcodes
|
|
104
|
+
// appeared to be missing the starting mode. In these cases defaulting
|
|
105
|
+
// to text compaction seems to work.
|
|
106
|
+
codeIndex--;
|
|
107
|
+
codeIndex = textCompaction(codewords, codeIndex, result);
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
if (codeIndex < codewords->size()) {
|
|
111
|
+
code = codewords[codeIndex++];
|
|
112
|
+
} else {
|
|
113
|
+
throw FormatException();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return Ref<DecoderResult>(new DecoderResult(ArrayRef<char>(), result));
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Text Compaction mode (see 5.4.1.5) permits all printable ASCII characters to be
|
|
121
|
+
* encoded, i.e. values 32 - 126 inclusive in accordance with ISO/IEC 646 (IRV), as
|
|
122
|
+
* well as selected control characters.
|
|
123
|
+
*
|
|
124
|
+
* @param codewords The array of codewords (data + error)
|
|
125
|
+
* @param codeIndex The current index into the codeword array.
|
|
126
|
+
* @param result The decoded data is appended to the result.
|
|
127
|
+
* @return The next index into the codeword array.
|
|
128
|
+
*/
|
|
129
|
+
int DecodedBitStreamParser::textCompaction(ArrayRef<int> codewords,
|
|
130
|
+
int codeIndex,
|
|
131
|
+
Ref<String> result) {
|
|
132
|
+
// 2 character per codeword
|
|
133
|
+
ArrayRef<int> textCompactionData (codewords[0] << 1);
|
|
134
|
+
// Used to hold the byte compaction value if there is a mode shift
|
|
135
|
+
ArrayRef<int> byteCompactionData (codewords[0] << 1);
|
|
136
|
+
|
|
137
|
+
int index = 0;
|
|
138
|
+
bool end = false;
|
|
139
|
+
while ((codeIndex < codewords[0]) && !end) {
|
|
140
|
+
int code = codewords[codeIndex++];
|
|
141
|
+
if (code < TEXT_COMPACTION_MODE_LATCH) {
|
|
142
|
+
textCompactionData[index] = code / 30;
|
|
143
|
+
textCompactionData[index + 1] = code % 30;
|
|
144
|
+
index += 2;
|
|
145
|
+
} else {
|
|
146
|
+
switch (code) {
|
|
147
|
+
case TEXT_COMPACTION_MODE_LATCH:
|
|
148
|
+
textCompactionData[index++] = TEXT_COMPACTION_MODE_LATCH;
|
|
149
|
+
break;
|
|
150
|
+
case BYTE_COMPACTION_MODE_LATCH:
|
|
151
|
+
codeIndex--;
|
|
152
|
+
end = true;
|
|
153
|
+
break;
|
|
154
|
+
case NUMERIC_COMPACTION_MODE_LATCH:
|
|
155
|
+
codeIndex--;
|
|
156
|
+
end = true;
|
|
157
|
+
break;
|
|
158
|
+
case MODE_SHIFT_TO_BYTE_COMPACTION_MODE:
|
|
159
|
+
// The Mode Shift codeword 913 shall cause a temporary
|
|
160
|
+
// switch from Text Compaction mode to Byte Compaction mode.
|
|
161
|
+
// This switch shall be in effect for only the next codeword,
|
|
162
|
+
// after which the mode shall revert to the prevailing sub-mode
|
|
163
|
+
// of the Text Compaction mode. Codeword 913 is only available
|
|
164
|
+
// in Text Compaction mode; its use is described in 5.4.2.4.
|
|
165
|
+
textCompactionData[index] = MODE_SHIFT_TO_BYTE_COMPACTION_MODE;
|
|
166
|
+
code = codewords[codeIndex++];
|
|
167
|
+
byteCompactionData[index] = code; //Integer.toHexString(code);
|
|
168
|
+
index++;
|
|
169
|
+
break;
|
|
170
|
+
case BYTE_COMPACTION_MODE_LATCH_6:
|
|
171
|
+
codeIndex--;
|
|
172
|
+
end = true;
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
decodeTextCompaction(textCompactionData, byteCompactionData, index, result);
|
|
178
|
+
return codeIndex;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* The Text Compaction mode includes all the printable ASCII characters
|
|
183
|
+
* (i.e. values from 32 to 126) and three ASCII control characters: HT or tab
|
|
184
|
+
* (ASCII value 9), LF or line feed (ASCII value 10), and CR or carriage
|
|
185
|
+
* return (ASCII value 13). The Text Compaction mode also includes various latch
|
|
186
|
+
* and shift characters which are used exclusively within the mode. The Text
|
|
187
|
+
* Compaction mode encodes up to 2 characters per codeword. The compaction rules
|
|
188
|
+
* for converting data into PDF417 codewords are defined in 5.4.2.2. The sub-mode
|
|
189
|
+
* switches are defined in 5.4.2.3.
|
|
190
|
+
*
|
|
191
|
+
* @param textCompactionData The text compaction data.
|
|
192
|
+
* @param byteCompactionData The byte compaction data if there
|
|
193
|
+
* was a mode shift.
|
|
194
|
+
* @param length The size of the text compaction and byte compaction data.
|
|
195
|
+
* @param result The decoded data is appended to the result.
|
|
196
|
+
*/
|
|
197
|
+
void DecodedBitStreamParser::decodeTextCompaction(ArrayRef<int> textCompactionData,
|
|
198
|
+
ArrayRef<int> byteCompactionData,
|
|
199
|
+
int length,
|
|
200
|
+
Ref<String> result)
|
|
201
|
+
{
|
|
202
|
+
// Beginning from an initial state of the Alpha sub-mode
|
|
203
|
+
// The default compaction mode for PDF417 in effect at the start of each symbol shall always be Text
|
|
204
|
+
// Compaction mode Alpha sub-mode (uppercase alphabetic). A latch codeword from another mode to the Text
|
|
205
|
+
// Compaction mode shall always switch to the Text Compaction Alpha sub-mode.
|
|
206
|
+
Mode subMode = ALPHA;
|
|
207
|
+
Mode priorToShiftMode = ALPHA;
|
|
208
|
+
int i = 0;
|
|
209
|
+
while (i < length) {
|
|
210
|
+
int subModeCh = textCompactionData[i];
|
|
211
|
+
char ch = 0;
|
|
212
|
+
switch (subMode) {
|
|
213
|
+
case ALPHA:
|
|
214
|
+
// Alpha (uppercase alphabetic)
|
|
215
|
+
if (subModeCh < 26) {
|
|
216
|
+
// Upper case Alpha Character
|
|
217
|
+
ch = (char) ('A' + subModeCh);
|
|
218
|
+
} else {
|
|
219
|
+
if (subModeCh == 26) {
|
|
220
|
+
ch = ' ';
|
|
221
|
+
} else if (subModeCh == LL) {
|
|
222
|
+
subMode = LOWER;
|
|
223
|
+
} else if (subModeCh == ML) {
|
|
224
|
+
subMode = MIXED;
|
|
225
|
+
} else if (subModeCh == PS) {
|
|
226
|
+
// Shift to punctuation
|
|
227
|
+
priorToShiftMode = subMode;
|
|
228
|
+
subMode = PUNCT_SHIFT;
|
|
229
|
+
} else if (subModeCh == MODE_SHIFT_TO_BYTE_COMPACTION_MODE) {
|
|
230
|
+
result->append((char) byteCompactionData[i]);
|
|
231
|
+
} else if (subModeCh == TEXT_COMPACTION_MODE_LATCH) {
|
|
232
|
+
subMode = ALPHA;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
break;
|
|
236
|
+
|
|
237
|
+
case LOWER:
|
|
238
|
+
// Lower (lowercase alphabetic)
|
|
239
|
+
if (subModeCh < 26) {
|
|
240
|
+
ch = (char) ('a' + subModeCh);
|
|
241
|
+
} else {
|
|
242
|
+
if (subModeCh == 26) {
|
|
243
|
+
ch = ' ';
|
|
244
|
+
} else if (subModeCh == AS) {
|
|
245
|
+
// Shift to alpha
|
|
246
|
+
priorToShiftMode = subMode;
|
|
247
|
+
subMode = ALPHA_SHIFT;
|
|
248
|
+
} else if (subModeCh == ML) {
|
|
249
|
+
subMode = MIXED;
|
|
250
|
+
} else if (subModeCh == PS) {
|
|
251
|
+
// Shift to punctuation
|
|
252
|
+
priorToShiftMode = subMode;
|
|
253
|
+
subMode = PUNCT_SHIFT;
|
|
254
|
+
} else if (subModeCh == MODE_SHIFT_TO_BYTE_COMPACTION_MODE) {
|
|
255
|
+
result->append((char) byteCompactionData[i]);
|
|
256
|
+
} else if (subModeCh == TEXT_COMPACTION_MODE_LATCH) {
|
|
257
|
+
subMode = ALPHA;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
break;
|
|
261
|
+
|
|
262
|
+
case MIXED:
|
|
263
|
+
// Mixed (numeric and some punctuation)
|
|
264
|
+
if (subModeCh < PL) {
|
|
265
|
+
ch = MIXED_CHARS[subModeCh];
|
|
266
|
+
} else {
|
|
267
|
+
if (subModeCh == PL) {
|
|
268
|
+
subMode = PUNCT;
|
|
269
|
+
} else if (subModeCh == 26) {
|
|
270
|
+
ch = ' ';
|
|
271
|
+
} else if (subModeCh == LL) {
|
|
272
|
+
subMode = LOWER;
|
|
273
|
+
} else if (subModeCh == AL) {
|
|
274
|
+
subMode = ALPHA;
|
|
275
|
+
} else if (subModeCh == PS) {
|
|
276
|
+
// Shift to punctuation
|
|
277
|
+
priorToShiftMode = subMode;
|
|
278
|
+
subMode = PUNCT_SHIFT;
|
|
279
|
+
} else if (subModeCh == MODE_SHIFT_TO_BYTE_COMPACTION_MODE) {
|
|
280
|
+
result->append((char) byteCompactionData[i]);
|
|
281
|
+
} else if (subModeCh == TEXT_COMPACTION_MODE_LATCH) {
|
|
282
|
+
subMode = ALPHA;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
break;
|
|
286
|
+
|
|
287
|
+
case PUNCT:
|
|
288
|
+
// Punctuation
|
|
289
|
+
if (subModeCh < PAL) {
|
|
290
|
+
ch = PUNCT_CHARS[subModeCh];
|
|
291
|
+
} else {
|
|
292
|
+
if (subModeCh == PAL) {
|
|
293
|
+
subMode = ALPHA;
|
|
294
|
+
} else if (subModeCh == MODE_SHIFT_TO_BYTE_COMPACTION_MODE) {
|
|
295
|
+
result->append((char) byteCompactionData[i]);
|
|
296
|
+
} else if (subModeCh == TEXT_COMPACTION_MODE_LATCH) {
|
|
297
|
+
subMode = ALPHA;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
break;
|
|
301
|
+
|
|
302
|
+
case ALPHA_SHIFT:
|
|
303
|
+
// Restore sub-mode
|
|
304
|
+
subMode = priorToShiftMode;
|
|
305
|
+
if (subModeCh < 26) {
|
|
306
|
+
ch = (char) ('A' + subModeCh);
|
|
307
|
+
} else {
|
|
308
|
+
if (subModeCh == 26) {
|
|
309
|
+
ch = ' ';
|
|
310
|
+
} else {
|
|
311
|
+
if (subModeCh == 26) {
|
|
312
|
+
ch = ' ';
|
|
313
|
+
} else if (subModeCh == TEXT_COMPACTION_MODE_LATCH) {
|
|
314
|
+
subMode = ALPHA;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
break;
|
|
319
|
+
|
|
320
|
+
case PUNCT_SHIFT:
|
|
321
|
+
// Restore sub-mode
|
|
322
|
+
subMode = priorToShiftMode;
|
|
323
|
+
if (subModeCh < PAL) {
|
|
324
|
+
ch = PUNCT_CHARS[subModeCh];
|
|
325
|
+
} else {
|
|
326
|
+
if (subModeCh == PAL) {
|
|
327
|
+
subMode = ALPHA;
|
|
328
|
+
// 2012-11-27 added from recent java code:
|
|
329
|
+
} else if (subModeCh == MODE_SHIFT_TO_BYTE_COMPACTION_MODE) {
|
|
330
|
+
// PS before Shift-to-Byte is used as a padding character,
|
|
331
|
+
// see 5.4.2.4 of the specification
|
|
332
|
+
result->append((char) byteCompactionData[i]);
|
|
333
|
+
} else if (subModeCh == TEXT_COMPACTION_MODE_LATCH) {
|
|
334
|
+
subMode = ALPHA;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
if (ch != 0) {
|
|
340
|
+
// Append decoded character to result
|
|
341
|
+
result->append(ch);
|
|
342
|
+
}
|
|
343
|
+
i++;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Byte Compaction mode (see 5.4.3) permits all 256 possible 8-bit byte values to be encoded.
|
|
349
|
+
* This includes all ASCII characters value 0 to 127 inclusive and provides for international
|
|
350
|
+
* character set support.
|
|
351
|
+
*
|
|
352
|
+
* @param mode The byte compaction mode i.e. 901 or 924
|
|
353
|
+
* @param codewords The array of codewords (data + error)
|
|
354
|
+
* @param codeIndex The current index into the codeword array.
|
|
355
|
+
* @param result The decoded data is appended to the result.
|
|
356
|
+
* @return The next index into the codeword array.
|
|
357
|
+
*/
|
|
358
|
+
int DecodedBitStreamParser::byteCompaction(int mode,
|
|
359
|
+
ArrayRef<int> codewords,
|
|
360
|
+
int codeIndex, Ref<String> result) {
|
|
361
|
+
if (mode == BYTE_COMPACTION_MODE_LATCH) {
|
|
362
|
+
// Total number of Byte Compaction characters to be encoded
|
|
363
|
+
// is not a multiple of 6
|
|
364
|
+
int count = 0;
|
|
365
|
+
int64_t value = 0;
|
|
366
|
+
ArrayRef<char> decodedData = new Array<char>(6);
|
|
367
|
+
ArrayRef<int> byteCompactedCodewords = new Array<int>(6);
|
|
368
|
+
bool end = false;
|
|
369
|
+
int nextCode = codewords[codeIndex++];
|
|
370
|
+
while ((codeIndex < codewords[0]) && !end) {
|
|
371
|
+
byteCompactedCodewords[count++] = nextCode;
|
|
372
|
+
// Base 900
|
|
373
|
+
value = 900 * value + nextCode;
|
|
374
|
+
nextCode = codewords[codeIndex++];
|
|
375
|
+
// perhaps it should be ok to check only nextCode >= TEXT_COMPACTION_MODE_LATCH
|
|
376
|
+
if (nextCode == TEXT_COMPACTION_MODE_LATCH ||
|
|
377
|
+
nextCode == BYTE_COMPACTION_MODE_LATCH ||
|
|
378
|
+
nextCode == NUMERIC_COMPACTION_MODE_LATCH ||
|
|
379
|
+
nextCode == BYTE_COMPACTION_MODE_LATCH_6 ||
|
|
380
|
+
nextCode == BEGIN_MACRO_PDF417_CONTROL_BLOCK ||
|
|
381
|
+
nextCode == BEGIN_MACRO_PDF417_OPTIONAL_FIELD ||
|
|
382
|
+
nextCode == MACRO_PDF417_TERMINATOR)
|
|
383
|
+
{
|
|
384
|
+
end = true;
|
|
385
|
+
}
|
|
386
|
+
else
|
|
387
|
+
{
|
|
388
|
+
if ((count%5 == 0) && (count > 0))
|
|
389
|
+
{
|
|
390
|
+
// Decode every 5 codewords
|
|
391
|
+
// Convert to Base 256
|
|
392
|
+
for (int j = 0; j < 6; ++j)
|
|
393
|
+
{
|
|
394
|
+
decodedData[5 - j] = (char) (value%256);
|
|
395
|
+
value >>= 8;
|
|
396
|
+
}
|
|
397
|
+
result->append(string(&(decodedData->values()[0]), decodedData->values().size()));
|
|
398
|
+
count = 0;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// if the end of all codewords is reached the last codeword needs to be added
|
|
404
|
+
if (codeIndex == codewords[0] && nextCode < TEXT_COMPACTION_MODE_LATCH)
|
|
405
|
+
byteCompactedCodewords[count++] = nextCode;
|
|
406
|
+
|
|
407
|
+
// If Byte Compaction mode is invoked with codeword 901,
|
|
408
|
+
// the last group of codewords is interpreted directly
|
|
409
|
+
// as one byte per codeword, without compaction.
|
|
410
|
+
for (int i = 0; i < count; i++)
|
|
411
|
+
{
|
|
412
|
+
result->append((char)byteCompactedCodewords[i]);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
} else if (mode == BYTE_COMPACTION_MODE_LATCH_6) {
|
|
416
|
+
// Total number of Byte Compaction characters to be encoded
|
|
417
|
+
// is an integer multiple of 6
|
|
418
|
+
int count = 0;
|
|
419
|
+
int64_t value = 0;
|
|
420
|
+
bool end = false;
|
|
421
|
+
while (codeIndex < codewords[0] && !end) {
|
|
422
|
+
int code = codewords[codeIndex++];
|
|
423
|
+
if (code < TEXT_COMPACTION_MODE_LATCH) {
|
|
424
|
+
count++;
|
|
425
|
+
// Base 900
|
|
426
|
+
value = 900 * value + code;
|
|
427
|
+
} else {
|
|
428
|
+
if (code == TEXT_COMPACTION_MODE_LATCH ||
|
|
429
|
+
code == BYTE_COMPACTION_MODE_LATCH ||
|
|
430
|
+
code == NUMERIC_COMPACTION_MODE_LATCH ||
|
|
431
|
+
code == BYTE_COMPACTION_MODE_LATCH_6 ||
|
|
432
|
+
code == BEGIN_MACRO_PDF417_CONTROL_BLOCK ||
|
|
433
|
+
code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD ||
|
|
434
|
+
code == MACRO_PDF417_TERMINATOR) {
|
|
435
|
+
codeIndex--;
|
|
436
|
+
end = true;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
if ((count % 5 == 0) && (count > 0)) {
|
|
440
|
+
// Decode every 5 codewords
|
|
441
|
+
// Convert to Base 256
|
|
442
|
+
ArrayRef<char> decodedData = new Array<char>(6);
|
|
443
|
+
for (int j = 0; j < 6; ++j) {
|
|
444
|
+
decodedData[5 - j] = (char) (value & 0xFF);
|
|
445
|
+
value >>= 8;
|
|
446
|
+
}
|
|
447
|
+
result->append(string(&decodedData[0],6));
|
|
448
|
+
// 2012-11-27 hfn after recent java code/fix by srowen
|
|
449
|
+
count = 0;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
return codeIndex;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* Numeric Compaction mode (see 5.4.4) permits efficient encoding of numeric data strings.
|
|
458
|
+
*
|
|
459
|
+
* @param codewords The array of codewords (data + error)
|
|
460
|
+
* @param codeIndex The current index into the codeword array.
|
|
461
|
+
* @param result The decoded data is appended to the result.
|
|
462
|
+
* @return The next index into the codeword array.
|
|
463
|
+
*/
|
|
464
|
+
int DecodedBitStreamParser::numericCompaction(ArrayRef<int> codewords,
|
|
465
|
+
int codeIndex,
|
|
466
|
+
Ref<String> result) {
|
|
467
|
+
int count = 0;
|
|
468
|
+
bool end = false;
|
|
469
|
+
|
|
470
|
+
ArrayRef<int> numericCodewords = new Array<int>(MAX_NUMERIC_CODEWORDS);
|
|
471
|
+
|
|
472
|
+
while (codeIndex < codewords[0] && !end) {
|
|
473
|
+
int code = codewords[codeIndex++];
|
|
474
|
+
if (codeIndex == codewords[0]) {
|
|
475
|
+
end = true;
|
|
476
|
+
}
|
|
477
|
+
if (code < TEXT_COMPACTION_MODE_LATCH) {
|
|
478
|
+
numericCodewords[count] = code;
|
|
479
|
+
count++;
|
|
480
|
+
} else {
|
|
481
|
+
if (code == TEXT_COMPACTION_MODE_LATCH ||
|
|
482
|
+
code == BYTE_COMPACTION_MODE_LATCH ||
|
|
483
|
+
code == BYTE_COMPACTION_MODE_LATCH_6 ||
|
|
484
|
+
code == BEGIN_MACRO_PDF417_CONTROL_BLOCK ||
|
|
485
|
+
code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD ||
|
|
486
|
+
code == MACRO_PDF417_TERMINATOR) {
|
|
487
|
+
codeIndex--;
|
|
488
|
+
end = true;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
if (count % MAX_NUMERIC_CODEWORDS == 0 ||
|
|
492
|
+
code == NUMERIC_COMPACTION_MODE_LATCH ||
|
|
493
|
+
end) {
|
|
494
|
+
// Re-invoking Numeric Compaction mode (by using codeword 902
|
|
495
|
+
// while in Numeric Compaction mode) serves to terminate the
|
|
496
|
+
// current Numeric Compaction mode grouping as described in 5.4.4.2,
|
|
497
|
+
// and then to start a new one grouping.
|
|
498
|
+
Ref<String> s = decodeBase900toBase10(numericCodewords, count);
|
|
499
|
+
result->append(s->getText());
|
|
500
|
+
count = 0;
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
return codeIndex;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/**
|
|
507
|
+
* Convert a list of Numeric Compacted codewords from Base 900 to Base 10.
|
|
508
|
+
*
|
|
509
|
+
* @param codewords The array of codewords
|
|
510
|
+
* @param count The number of codewords
|
|
511
|
+
* @return The decoded string representing the Numeric data.
|
|
512
|
+
*/
|
|
513
|
+
/*
|
|
514
|
+
EXAMPLE
|
|
515
|
+
Encode the fifteen digit numeric string 000213298174000
|
|
516
|
+
Prefix the numeric string with a 1 and set the initial value of
|
|
517
|
+
t = 1 000 213 298 174 000
|
|
518
|
+
Calculate codeword 0
|
|
519
|
+
d0 = 1 000 213 298 174 000 mod 900 = 200
|
|
520
|
+
|
|
521
|
+
t = 1 000 213 298 174 000 div 900 = 1 111 348 109 082
|
|
522
|
+
Calculate codeword 1
|
|
523
|
+
d1 = 1 111 348 109 082 mod 900 = 282
|
|
524
|
+
|
|
525
|
+
t = 1 111 348 109 082 div 900 = 1 234 831 232
|
|
526
|
+
Calculate codeword 2
|
|
527
|
+
d2 = 1 234 831 232 mod 900 = 632
|
|
528
|
+
|
|
529
|
+
t = 1 234 831 232 div 900 = 1 372 034
|
|
530
|
+
Calculate codeword 3
|
|
531
|
+
d3 = 1 372 034 mod 900 = 434
|
|
532
|
+
|
|
533
|
+
t = 1 372 034 div 900 = 1 524
|
|
534
|
+
Calculate codeword 4
|
|
535
|
+
d4 = 1 524 mod 900 = 624
|
|
536
|
+
|
|
537
|
+
t = 1 524 div 900 = 1
|
|
538
|
+
Calculate codeword 5
|
|
539
|
+
d5 = 1 mod 900 = 1
|
|
540
|
+
t = 1 div 900 = 0
|
|
541
|
+
Codeword sequence is: 1, 624, 434, 632, 282, 200
|
|
542
|
+
|
|
543
|
+
Decode the above codewords involves
|
|
544
|
+
1 x 900 power of 5 + 624 x 900 power of 4 + 434 x 900 power of 3 +
|
|
545
|
+
632 x 900 power of 2 + 282 x 900 power of 1 + 200 x 900 power of 0 = 1000213298174000
|
|
546
|
+
|
|
547
|
+
Remove leading 1 => Result is 000213298174000
|
|
548
|
+
*/
|
|
549
|
+
Ref<String> DecodedBitStreamParser::decodeBase900toBase10(ArrayRef<int> codewords, int count)
|
|
550
|
+
{
|
|
551
|
+
BigInteger result = BigInteger(0);
|
|
552
|
+
for (int i = 0; i < count; i++) {
|
|
553
|
+
result = result + (EXP900[count - i - 1] * BigInteger(codewords[i]));
|
|
554
|
+
}
|
|
555
|
+
string resultString = bigIntegerToString(result);
|
|
556
|
+
if (resultString[0] != '1') {
|
|
557
|
+
throw FormatException("DecodedBitStreamParser::decodeBase900toBase10: String does not begin with 1");
|
|
558
|
+
}
|
|
559
|
+
string resultString2;
|
|
560
|
+
resultString2.assign(resultString.begin()+1,resultString.end());
|
|
561
|
+
Ref<String> res (new String(resultString2));
|
|
562
|
+
return res;
|
|
563
|
+
}
|