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.
Files changed (332) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.gitmodules +3 -0
  4. data/CHANGELOG.rdoc +6 -0
  5. data/Gemfile +3 -0
  6. data/Manifest.txt +331 -0
  7. data/README.rdoc +138 -0
  8. data/Rakefile +28 -0
  9. data/bin/zxd +87 -0
  10. data/bin/zxe +53 -0
  11. data/ext/zxing/extconf.rb +27 -0
  12. data/ext/zxing/zxing-cpp/.gitignore +4 -0
  13. data/ext/zxing/zxing-cpp/AUTHORS +115 -0
  14. data/ext/zxing/zxing-cpp/CMakeLists.txt +84 -0
  15. data/ext/zxing/zxing-cpp/COPYING +201 -0
  16. data/ext/zxing/zxing-cpp/NOTICE +65 -0
  17. data/ext/zxing/zxing-cpp/README.md +50 -0
  18. data/ext/zxing/zxing-cpp/cli/src/ImageReaderSource.cpp +112 -0
  19. data/ext/zxing/zxing-cpp/cli/src/ImageReaderSource.h +40 -0
  20. data/ext/zxing/zxing-cpp/cli/src/jpgd.cpp +3174 -0
  21. data/ext/zxing/zxing-cpp/cli/src/jpgd.h +319 -0
  22. data/ext/zxing/zxing-cpp/cli/src/lodepng.cpp +6261 -0
  23. data/ext/zxing/zxing-cpp/cli/src/lodepng.h +1695 -0
  24. data/ext/zxing/zxing-cpp/cli/src/main.cpp +297 -0
  25. data/ext/zxing/zxing-cpp/cmake/FindCPPUNIT.cmake +54 -0
  26. data/ext/zxing/zxing-cpp/cmake/FindIconv.cmake +57 -0
  27. data/ext/zxing/zxing-cpp/core/src/bigint/.gitignore +6 -0
  28. data/ext/zxing/zxing-cpp/core/src/bigint/BigInteger.cc +405 -0
  29. data/ext/zxing/zxing-cpp/core/src/bigint/BigInteger.hh +215 -0
  30. data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerAlgorithms.cc +70 -0
  31. data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerAlgorithms.hh +25 -0
  32. data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerLibrary.hh +8 -0
  33. data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerUtils.cc +50 -0
  34. data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerUtils.hh +72 -0
  35. data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsigned.cc +697 -0
  36. data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsigned.hh +418 -0
  37. data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsignedInABase.cc +125 -0
  38. data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsignedInABase.hh +122 -0
  39. data/ext/zxing/zxing-cpp/core/src/bigint/ChangeLog +146 -0
  40. data/ext/zxing/zxing-cpp/core/src/bigint/Makefile +73 -0
  41. data/ext/zxing/zxing-cpp/core/src/bigint/NumberlikeArray.hh +177 -0
  42. data/ext/zxing/zxing-cpp/core/src/bigint/README +71 -0
  43. data/ext/zxing/zxing-cpp/core/src/win32/zxing/iconv.h +14 -0
  44. data/ext/zxing/zxing-cpp/core/src/win32/zxing/stdint.h +247 -0
  45. data/ext/zxing/zxing-cpp/core/src/win32/zxing/win_iconv.c +2035 -0
  46. data/ext/zxing/zxing-cpp/core/src/zxing/BarcodeFormat.cpp +40 -0
  47. data/ext/zxing/zxing-cpp/core/src/zxing/BarcodeFormat.h +60 -0
  48. data/ext/zxing/zxing-cpp/core/src/zxing/Binarizer.cpp +45 -0
  49. data/ext/zxing/zxing-cpp/core/src/zxing/Binarizer.h +50 -0
  50. data/ext/zxing/zxing-cpp/core/src/zxing/BinaryBitmap.cpp +70 -0
  51. data/ext/zxing/zxing-cpp/core/src/zxing/BinaryBitmap.h +56 -0
  52. data/ext/zxing/zxing-cpp/core/src/zxing/ChecksumException.cpp +28 -0
  53. data/ext/zxing/zxing-cpp/core/src/zxing/ChecksumException.h +34 -0
  54. data/ext/zxing/zxing-cpp/core/src/zxing/DecodeHints.cpp +142 -0
  55. data/ext/zxing/zxing-cpp/core/src/zxing/DecodeHints.h +85 -0
  56. data/ext/zxing/zxing-cpp/core/src/zxing/Exception.cpp +43 -0
  57. data/ext/zxing/zxing-cpp/core/src/zxing/Exception.h +51 -0
  58. data/ext/zxing/zxing-cpp/core/src/zxing/FormatException.cpp +41 -0
  59. data/ext/zxing/zxing-cpp/core/src/zxing/FormatException.h +37 -0
  60. data/ext/zxing/zxing-cpp/core/src/zxing/IllegalStateException.h +35 -0
  61. data/ext/zxing/zxing-cpp/core/src/zxing/InvertedLuminanceSource.cpp +68 -0
  62. data/ext/zxing/zxing-cpp/core/src/zxing/InvertedLuminanceSource.h +48 -0
  63. data/ext/zxing/zxing-cpp/core/src/zxing/LuminanceSource.cpp +86 -0
  64. data/ext/zxing/zxing-cpp/core/src/zxing/LuminanceSource.h +59 -0
  65. data/ext/zxing/zxing-cpp/core/src/zxing/MultiFormatReader.cpp +124 -0
  66. data/ext/zxing/zxing-cpp/core/src/zxing/MultiFormatReader.h +48 -0
  67. data/ext/zxing/zxing-cpp/core/src/zxing/NotFoundException.h +35 -0
  68. data/ext/zxing/zxing-cpp/core/src/zxing/Reader.cpp +31 -0
  69. data/ext/zxing/zxing-cpp/core/src/zxing/Reader.h +40 -0
  70. data/ext/zxing/zxing-cpp/core/src/zxing/ReaderException.h +37 -0
  71. data/ext/zxing/zxing-cpp/core/src/zxing/Result.cpp +61 -0
  72. data/ext/zxing/zxing-cpp/core/src/zxing/Result.h +55 -0
  73. data/ext/zxing/zxing-cpp/core/src/zxing/ResultIO.cpp +34 -0
  74. data/ext/zxing/zxing-cpp/core/src/zxing/ResultPoint.cpp +108 -0
  75. data/ext/zxing/zxing-cpp/core/src/zxing/ResultPoint.h +55 -0
  76. data/ext/zxing/zxing-cpp/core/src/zxing/ResultPointCallback.cpp +26 -0
  77. data/ext/zxing/zxing-cpp/core/src/zxing/ResultPointCallback.h +39 -0
  78. data/ext/zxing/zxing-cpp/core/src/zxing/ZXing.h +133 -0
  79. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecDetectorResult.cpp +54 -0
  80. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecDetectorResult.h +48 -0
  81. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecReader.cpp +68 -0
  82. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecReader.h +49 -0
  83. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/decoder/Decoder.cpp +489 -0
  84. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/decoder/Decoder.h +69 -0
  85. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/detector/Detector.cpp +548 -0
  86. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/detector/Detector.h +92 -0
  87. data/ext/zxing/zxing-cpp/core/src/zxing/common/Array.h +170 -0
  88. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitArray.cpp +155 -0
  89. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitArray.h +81 -0
  90. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitArrayIO.cpp +31 -0
  91. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitMatrix.cpp +143 -0
  92. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitMatrix.h +91 -0
  93. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitSource.cpp +76 -0
  94. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitSource.h +74 -0
  95. data/ext/zxing/zxing-cpp/core/src/zxing/common/CharacterSetECI.cpp +104 -0
  96. data/ext/zxing/zxing-cpp/core/src/zxing/common/CharacterSetECI.h +53 -0
  97. data/ext/zxing/zxing-cpp/core/src/zxing/common/Counted.h +140 -0
  98. data/ext/zxing/zxing-cpp/core/src/zxing/common/DecoderResult.cpp +46 -0
  99. data/ext/zxing/zxing-cpp/core/src/zxing/common/DecoderResult.h +51 -0
  100. data/ext/zxing/zxing-cpp/core/src/zxing/common/DetectorResult.cpp +39 -0
  101. data/ext/zxing/zxing-cpp/core/src/zxing/common/DetectorResult.h +43 -0
  102. data/ext/zxing/zxing-cpp/core/src/zxing/common/GlobalHistogramBinarizer.cpp +212 -0
  103. data/ext/zxing/zxing-cpp/core/src/zxing/common/GlobalHistogramBinarizer.h +48 -0
  104. data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleLuminanceSource.cpp +80 -0
  105. data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleLuminanceSource.h +53 -0
  106. data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleRotatedLuminanceSource.cpp +81 -0
  107. data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleRotatedLuminanceSource.h +46 -0
  108. data/ext/zxing/zxing-cpp/core/src/zxing/common/GridSampler.cpp +122 -0
  109. data/ext/zxing/zxing-cpp/core/src/zxing/common/GridSampler.h +45 -0
  110. data/ext/zxing/zxing-cpp/core/src/zxing/common/HybridBinarizer.cpp +226 -0
  111. data/ext/zxing/zxing-cpp/core/src/zxing/common/HybridBinarizer.h +67 -0
  112. data/ext/zxing/zxing-cpp/core/src/zxing/common/IllegalArgumentException.cpp +27 -0
  113. data/ext/zxing/zxing-cpp/core/src/zxing/common/IllegalArgumentException.h +36 -0
  114. data/ext/zxing/zxing-cpp/core/src/zxing/common/PerspectiveTransform.cpp +107 -0
  115. data/ext/zxing/zxing-cpp/core/src/zxing/common/PerspectiveTransform.h +49 -0
  116. data/ext/zxing/zxing-cpp/core/src/zxing/common/Point.h +47 -0
  117. data/ext/zxing/zxing-cpp/core/src/zxing/common/Str.cpp +61 -0
  118. data/ext/zxing/zxing-cpp/core/src/zxing/common/Str.h +51 -0
  119. data/ext/zxing/zxing-cpp/core/src/zxing/common/StringUtils.cpp +198 -0
  120. data/ext/zxing/zxing-cpp/core/src/zxing/common/StringUtils.h +52 -0
  121. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/JavaMath.h +43 -0
  122. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/MathUtils.h +57 -0
  123. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/MonochromeRectangleDetector.cpp +174 -0
  124. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/MonochromeRectangleDetector.h +62 -0
  125. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/WhiteRectangleDetector.cpp +330 -0
  126. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/WhiteRectangleDetector.h +59 -0
  127. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGF.cpp +150 -0
  128. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGF.h +73 -0
  129. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGFPoly.cpp +218 -0
  130. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGFPoly.h +56 -0
  131. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonDecoder.cpp +174 -0
  132. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonDecoder.h +49 -0
  133. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonException.cpp +30 -0
  134. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonException.h +33 -0
  135. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/DataMatrixReader.cpp +54 -0
  136. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/DataMatrixReader.h +45 -0
  137. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/Version.cpp +199 -0
  138. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/Version.h +87 -0
  139. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/BitMatrixParser.cpp +361 -0
  140. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/BitMatrixParser.h +59 -0
  141. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DataBlock.cpp +113 -0
  142. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DataBlock.h +49 -0
  143. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DecodedBitStreamParser.cpp +416 -0
  144. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DecodedBitStreamParser.h +104 -0
  145. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/Decoder.cpp +93 -0
  146. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/Decoder.h +49 -0
  147. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/CornerPoint.cpp +46 -0
  148. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/CornerPoint.h +43 -0
  149. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/Detector.cpp +446 -0
  150. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/Detector.h +94 -0
  151. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/DetectorException.cpp +23 -0
  152. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/DetectorException.h +23 -0
  153. data/ext/zxing/zxing-cpp/core/src/zxing/multi/ByQuadrantReader.cpp +75 -0
  154. data/ext/zxing/zxing-cpp/core/src/zxing/multi/ByQuadrantReader.h +42 -0
  155. data/ext/zxing/zxing-cpp/core/src/zxing/multi/GenericMultipleBarcodeReader.cpp +137 -0
  156. data/ext/zxing/zxing-cpp/core/src/zxing/multi/GenericMultipleBarcodeReader.h +51 -0
  157. data/ext/zxing/zxing-cpp/core/src/zxing/multi/MultipleBarcodeReader.cpp +29 -0
  158. data/ext/zxing/zxing-cpp/core/src/zxing/multi/MultipleBarcodeReader.h +41 -0
  159. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/QRCodeMultiReader.cpp +58 -0
  160. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/QRCodeMultiReader.h +36 -0
  161. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiDetector.cpp +47 -0
  162. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiDetector.h +37 -0
  163. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiFinderPatternFinder.cpp +236 -0
  164. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiFinderPatternFinder.h +47 -0
  165. data/ext/zxing/zxing-cpp/core/src/zxing/oned/CodaBarReader.cpp +340 -0
  166. data/ext/zxing/zxing-cpp/core/src/zxing/oned/CodaBarReader.h +57 -0
  167. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code128Reader.cpp +496 -0
  168. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code128Reader.h +48 -0
  169. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code39Reader.cpp +328 -0
  170. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code39Reader.h +63 -0
  171. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code93Reader.cpp +293 -0
  172. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code93Reader.h +58 -0
  173. data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN13Reader.cpp +85 -0
  174. data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN13Reader.h +49 -0
  175. data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN8Reader.cpp +65 -0
  176. data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN8Reader.h +47 -0
  177. data/ext/zxing/zxing-cpp/core/src/zxing/oned/ITFReader.cpp +337 -0
  178. data/ext/zxing/zxing-cpp/core/src/zxing/oned/ITFReader.h +54 -0
  179. data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatOneDReader.cpp +96 -0
  180. data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatOneDReader.h +38 -0
  181. data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatUPCEANReader.cpp +110 -0
  182. data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatUPCEANReader.h +41 -0
  183. data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDReader.cpp +227 -0
  184. data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDReader.h +81 -0
  185. data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDResultPoint.cpp +28 -0
  186. data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDResultPoint.h +35 -0
  187. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCAReader.cpp +71 -0
  188. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCAReader.h +50 -0
  189. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEANReader.cpp +309 -0
  190. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEANReader.h +88 -0
  191. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEReader.cpp +146 -0
  192. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEReader.h +47 -0
  193. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/PDF417Reader.cpp +170 -0
  194. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/PDF417Reader.h +49 -0
  195. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/BitMatrixParser.cpp +997 -0
  196. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/BitMatrixParser.h +84 -0
  197. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/DecodedBitStreamParser.cpp +563 -0
  198. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/DecodedBitStreamParser.h +84 -0
  199. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/Decoder.cpp +118 -0
  200. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/Decoder.h +62 -0
  201. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ErrorCorrection.cpp +214 -0
  202. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ErrorCorrection.h +71 -0
  203. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusGF.cpp +120 -0
  204. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusGF.h +72 -0
  205. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusPoly.cpp +284 -0
  206. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusPoly.h +68 -0
  207. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/Detector.cpp +664 -0
  208. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/Detector.h +106 -0
  209. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/LinesSampler.cpp +714 -0
  210. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/LinesSampler.h +122 -0
  211. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/ErrorCorrectionLevel.cpp +65 -0
  212. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/ErrorCorrectionLevel.h +52 -0
  213. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/FormatInformation.cpp +117 -0
  214. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/FormatInformation.h +54 -0
  215. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/QRCodeReader.cpp +52 -0
  216. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/QRCodeReader.h +48 -0
  217. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/Version.cpp +560 -0
  218. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/Version.h +85 -0
  219. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/BitMatrixParser.cpp +183 -0
  220. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/BitMatrixParser.h +56 -0
  221. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataBlock.cpp +118 -0
  222. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataBlock.h +50 -0
  223. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataMask.cpp +159 -0
  224. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataMask.h +50 -0
  225. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DecodedBitStreamParser.cpp +425 -0
  226. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DecodedBitStreamParser.h +72 -0
  227. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Decoder.cpp +107 -0
  228. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Decoder.h +46 -0
  229. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Mode.cpp +90 -0
  230. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Mode.h +57 -0
  231. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPattern.cpp +47 -0
  232. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPattern.h +45 -0
  233. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPatternFinder.cpp +208 -0
  234. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPatternFinder.h +68 -0
  235. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/Detector.cpp +314 -0
  236. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/Detector.h +69 -0
  237. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPattern.cpp +69 -0
  238. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPattern.h +48 -0
  239. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternFinder.cpp +559 -0
  240. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternFinder.h +76 -0
  241. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternInfo.cpp +41 -0
  242. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternInfo.h +47 -0
  243. data/ext/zxing/zxing-cpp/core/tests/src/TestRunner.cpp +30 -0
  244. data/ext/zxing/zxing-cpp/core/tests/src/common/BitArrayTest.cpp +216 -0
  245. data/ext/zxing/zxing-cpp/core/tests/src/common/BitArrayTest.h +61 -0
  246. data/ext/zxing/zxing-cpp/core/tests/src/common/BitMatrixTest.cpp +106 -0
  247. data/ext/zxing/zxing-cpp/core/tests/src/common/BitMatrixTest.h +55 -0
  248. data/ext/zxing/zxing-cpp/core/tests/src/common/BitSourceTest.cpp +49 -0
  249. data/ext/zxing/zxing-cpp/core/tests/src/common/BitSourceTest.h +42 -0
  250. data/ext/zxing/zxing-cpp/core/tests/src/common/CountedTest.cpp +58 -0
  251. data/ext/zxing/zxing-cpp/core/tests/src/common/CountedTest.h +46 -0
  252. data/ext/zxing/zxing-cpp/core/tests/src/common/PerspectiveTransformTest.cpp +69 -0
  253. data/ext/zxing/zxing-cpp/core/tests/src/common/PerspectiveTransformTest.h +47 -0
  254. data/ext/zxing/zxing-cpp/core/tests/src/common/reedsolomon/ReedSolomonTest.cpp +129 -0
  255. data/ext/zxing/zxing-cpp/core/tests/src/common/reedsolomon/ReedSolomonTest.h +62 -0
  256. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/ErrorCorrectionLevelTest.cpp +47 -0
  257. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/ErrorCorrectionLevelTest.h +45 -0
  258. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/FormatInformationTest.cpp +88 -0
  259. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/FormatInformationTest.h +47 -0
  260. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/VersionTest.cpp +88 -0
  261. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/VersionTest.h +49 -0
  262. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/DataMaskTest.cpp +132 -0
  263. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/DataMaskTest.h +91 -0
  264. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/ModeTest.cpp +52 -0
  265. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/ModeTest.h +47 -0
  266. data/ext/zxing/zxing.cc +224 -0
  267. data/lib/zxing.rb +50 -0
  268. data/lib/zxing/.gitignore +2 -0
  269. data/lib/zxing/aztec.rb +5 -0
  270. data/lib/zxing/aztec/aztec_reader.rb +14 -0
  271. data/lib/zxing/bad_image_exception.rb +4 -0
  272. data/lib/zxing/binarizer.rb +8 -0
  273. data/lib/zxing/binary_bitmap.rb +15 -0
  274. data/lib/zxing/checksum_exception.rb +4 -0
  275. data/lib/zxing/common.rb +7 -0
  276. data/lib/zxing/common/bit_matrix.rb +9 -0
  277. data/lib/zxing/common/hybrid_binarizer.rb +17 -0
  278. data/lib/zxing/common/illegal_argument_exception.rb +4 -0
  279. data/lib/zxing/datamatrix.rb +5 -0
  280. data/lib/zxing/datamatrix/data_matrix_reader.rb +14 -0
  281. data/lib/zxing/decodable.rb +11 -0
  282. data/lib/zxing/exception.rb +4 -0
  283. data/lib/zxing/ffi.rb +20 -0
  284. data/lib/zxing/ffi/aztec.rb +6 -0
  285. data/lib/zxing/ffi/aztec/aztec_reader.rb +9 -0
  286. data/lib/zxing/ffi/binarizer.rb +25 -0
  287. data/lib/zxing/ffi/binary_bitmap.rb +15 -0
  288. data/lib/zxing/ffi/common.rb +8 -0
  289. data/lib/zxing/ffi/common/bit_matrix.rb +12 -0
  290. data/lib/zxing/ffi/common/greyscale_luminance_source.rb +30 -0
  291. data/lib/zxing/ffi/common/hybrid_binarizer.rb +10 -0
  292. data/lib/zxing/ffi/datamatrix.rb +6 -0
  293. data/lib/zxing/ffi/datamatrix/data_matrix_reader.rb +9 -0
  294. data/lib/zxing/ffi/library.rb +102 -0
  295. data/lib/zxing/ffi/luminance_source.rb +18 -0
  296. data/lib/zxing/ffi/multi_format_reader.rb +9 -0
  297. data/lib/zxing/ffi/oned.rb +6 -0
  298. data/lib/zxing/ffi/oned/code_39_reader.rb +10 -0
  299. data/lib/zxing/ffi/qrcode.rb +8 -0
  300. data/lib/zxing/ffi/qrcode/decoder.rb +10 -0
  301. data/lib/zxing/ffi/qrcode/detector.rb +10 -0
  302. data/lib/zxing/ffi/reader.rb +58 -0
  303. data/lib/zxing/ffi/result.rb +23 -0
  304. data/lib/zxing/format_exception.rb +4 -0
  305. data/lib/zxing/illegal_argument_exception.rb +4 -0
  306. data/lib/zxing/image.rb +15 -0
  307. data/lib/zxing/luminance_source.rb +18 -0
  308. data/lib/zxing/multi_format_reader.rb +11 -0
  309. data/lib/zxing/not_found_exception.rb +4 -0
  310. data/lib/zxing/oned.rb +5 -0
  311. data/lib/zxing/oned/code_39_reader.rb +15 -0
  312. data/lib/zxing/qrcode.rb +8 -0
  313. data/lib/zxing/qrcode/decoder.rb +14 -0
  314. data/lib/zxing/qrcode/detector.rb +14 -0
  315. data/lib/zxing/qrcode/encoder.rb +8 -0
  316. data/lib/zxing/qrcode/encoder/byte_matrix.rb +18 -0
  317. data/lib/zxing/qrcode/encoder/encoder.rb +9 -0
  318. data/lib/zxing/qrcode/encoder/qrcode.rb +18 -0
  319. data/lib/zxing/reader.rb +8 -0
  320. data/lib/zxing/reader_exception.rb +4 -0
  321. data/lib/zxing/reed_solomon_exception.rb +2 -0
  322. data/lib/zxing/result.rb +18 -0
  323. data/lib/zxing/rmagick.rb +5 -0
  324. data/lib/zxing/rmagick/image.rb +104 -0
  325. data/lib/zxing/version.rb +33 -0
  326. data/test/qrcode.png +0 -0
  327. data/test/test_helper.rb +5 -0
  328. data/test/test_zxing.rb +58 -0
  329. data/test/vendor.rb +360 -0
  330. data/test/zxing/test_decodable.rb +38 -0
  331. data/zxing_cpp.gemspec +48 -0
  332. 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
+ }