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,33 @@
1
+ module ZXing
2
+ VERSION = "0.1.0" unless defined?(::ZXing::VERSION)
3
+
4
+ VERSION_INFO = {}
5
+ VERSION_INFO['warnings'] = []
6
+ VERSION_INFO['ruby'] = {}
7
+ VERSION_INFO['ruby']['version'] = ::RUBY_VERSION
8
+ VERSION_INFO['ruby']['platform'] = ::RUBY_PLATFORM
9
+ VERSION_INFO['ruby']['engine'] = defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'mri'
10
+
11
+ if defined?(LIBZXING_VERSION)
12
+ VERSION_INFO['libzxing'] = {}
13
+ VERSION_INFO['libzxing']['binding'] = 'extension'
14
+ VERSION_INFO['libzxing']['compiled'] = LIBZXING_VERSION
15
+ VERSION_INFO['libzxing']['loaded'] = LIBZXING_PARSER_VERSION.scan(/^(.*)(..)(..)$/).first.collect{|j|j.to_i}.join(".")
16
+
17
+ if VERSION_INFO['libzxing']['compiled'] != VERSION_INFO['libzxing']['loaded']
18
+ warning = "ZXing was built against Libzxing version #{VERSION_INFO['libzxing']['compiled']}, but has dynamically loaded #{VERSION_INFO['libzxing']['loaded']}"
19
+ VERSION_INFO['warnings'] << warning
20
+ warn "WARNING: #{warning}"
21
+ end
22
+ end
23
+
24
+ def self.uses_libzxing? # :nodoc:
25
+ !ZXing::VERSION_INFO['libzxing'].nil?
26
+ end
27
+
28
+ def self.jruby?
29
+ !ZXing::VERSION_INFO['ruby']['jruby'].nil?
30
+ end
31
+
32
+
33
+ end
data/test/qrcode.png ADDED
Binary file
@@ -0,0 +1,5 @@
1
+ $LOAD_PATH.unshift File.expand_path( File.dirname(__FILE__) + '/../lib')
2
+ $LOAD_PATH.unshift File.expand_path( File.dirname(__FILE__) )
3
+
4
+ require 'shoulda'
5
+ require 'minitest/autorun'
@@ -0,0 +1,58 @@
1
+ require File.expand_path( File.dirname(__FILE__) + '/test_helper')
2
+ require 'zxing'
3
+
4
+ class ZXingTest < MiniTest::Test
5
+ context "A QR decoder singleton" do
6
+
7
+ class Foo < Struct.new(:v); def to_s; self.v; end; end
8
+
9
+ setup do
10
+ @decoder = ZXing
11
+ @uri = "http://2d-code.co.uk/images/bbc-logo-in-qr-code.gif"
12
+ @path = File.expand_path( File.dirname(__FILE__) + '/qrcode.png')
13
+ @file = File.new(@path)
14
+ @google_logo = "http://www.google.com/logos/grandparentsday10.gif"
15
+ @uri_result = "http://bbc.co.uk/programmes"
16
+ @path_result = "http://rubyflow.com"
17
+ end
18
+
19
+ should "decode a URL" do
20
+ assert_equal @decoder.decode(@uri), @uri_result
21
+ end
22
+
23
+ should "decode a file path" do
24
+ assert_equal @decoder.decode(@path), @path_result
25
+ end
26
+
27
+ should "return nil if #decode fails" do
28
+ assert_nil @decoder.decode(@google_logo)
29
+ end
30
+
31
+ should "raise an exception if #decode! fails" do
32
+ assert_raises(ZXing::ReaderException,
33
+ ZXing::NotFoundException) { @decoder.decode!(@google_logo) }
34
+ end
35
+
36
+ should "decode objects that respond to #path" do
37
+ assert_equal @decoder.decode(@file), @path_result
38
+ end
39
+
40
+ should "call #to_s to argument passed in as a last resort" do
41
+ assert_equal @decoder.decode(Foo.new(@path)), @path_result
42
+ end
43
+ end
44
+
45
+ context "A QR decoder module" do
46
+
47
+ setup do
48
+ class SpyRing; include ZXing end
49
+ @ring = SpyRing.new
50
+ end
51
+
52
+ should "include #decode and #decode! into classes" do
53
+ assert @ring.method(:decode)
54
+ assert @ring.method(:decode!)
55
+ end
56
+
57
+ end
58
+ end
data/test/vendor.rb ADDED
@@ -0,0 +1,360 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- encoding: utf-8 -*-
3
+
4
+ if ENV["EXPLICIT_LUMINANCE_CONVERSION"] != "true"
5
+ raise "must run tests with EXPLICIT_LUMINANCE_CONVERSION=true in the environment"
6
+ end
7
+
8
+ $:.push File.expand_path(File.join(File.dirname(__FILE__),"../lib"))
9
+
10
+ if RUBY_VERSION =~ /^1.8/
11
+ $KCODE = "UTF8"
12
+ require 'jcode'
13
+ end
14
+
15
+ require 'rubygems'
16
+ require 'zxing'
17
+
18
+ include ZXing
19
+
20
+ global_found = 0;
21
+ global_must_pass = 0;
22
+ global_total_tests = 0;
23
+
24
+ $stdout.sync = true
25
+
26
+ files = ARGV
27
+
28
+ files = files.map do |file|
29
+ if File.exist? file
30
+ file
31
+ else
32
+ files = Dir.glob("vendor/zxing/core/test/{**/*BlackBox*java,data/blackbox/**/*.{png,gif,jpg,jpeg}}", File::FNM_CASEFOLD)
33
+ files = files.grep Regexp.new(file, true);
34
+ end
35
+ end
36
+ files.flatten!
37
+
38
+ @drivers = []
39
+
40
+ $drivers = {}
41
+ $images = Dir.glob("vendor/zxing/core/test/data/**/*.{png,gif,jpg,jpeg}", File::FNM_CASEFOLD);
42
+ Dir["vendor/zxing/core/test/**/*BlackBox*java"].each do |driver|
43
+ text = IO.read driver
44
+
45
+ match, dir, optional, reader, args, format, negative = nil
46
+
47
+ base = %r{extends\s+(Abstract(.*)BlackBoxTestCase)}.match text
48
+ next if base.nil?
49
+
50
+ case base[2]
51
+ when ""
52
+ match, dir, optional, reader, args, format =
53
+ *%r{super\(\s*"(.+)"(\s*,\s*new\s*(.+)\(([^\)]*)\)\s*,\s*BarcodeFormat\.(.+))?\s*\);}.match(text)
54
+ when "Negative"
55
+ match, dir =
56
+ *%r{super\(\s*"(.+)"\s*\);}.match(text)
57
+ reader = "MultiFormatReader"
58
+ args = nil
59
+ format = nil
60
+ negative = true
61
+ else; raise "no runner support for #{base[2]}"
62
+ end
63
+
64
+ tests = []
65
+
66
+ text.scan %r{addTest\(\s*([^,]+)\s*(,\s*(.+)\s*)?,\s*(.+)\s*\);} do |match|
67
+ normal = match[0].to_i
68
+ harder = nil
69
+ if match[2].nil?
70
+ harder = normal
71
+ else
72
+ harder = match[2].to_i
73
+ end
74
+ rotation = match[3].to_f
75
+ tests.push [normal, harder, rotation]
76
+ end
77
+
78
+ $drivers[driver] = {
79
+ :dir => dir,
80
+ :reader => reader,
81
+ :args => args,
82
+ :format => format,
83
+ :images => [],
84
+ :all_images => $images.find_all { |image| !image.index("/#{dir}/").nil? },
85
+ :tests => tests,
86
+ :negative => negative
87
+ } if dir
88
+ end
89
+
90
+ def add_driver file, image = nil
91
+ driver = $drivers[file]
92
+ raise file if driver.nil?
93
+ @drivers.push driver unless @drivers.include? driver
94
+ if image.nil?
95
+ driver[:images] = driver[:all_images]
96
+ else
97
+ driver[:images].push image unless driver[:images].include? image
98
+ end
99
+ end
100
+
101
+ def add_image image
102
+ file, hash = $drivers.find do |file, hash|
103
+ image.index hash[:dir]
104
+ end
105
+ if hash
106
+ add_driver file, image
107
+ end
108
+ end
109
+
110
+ files.each do |file|
111
+ add_image file
112
+ end
113
+
114
+ @drivers.each do |driver|
115
+ args = [ :new ]
116
+ if driver[:args] && driver[:args] !~ /^\s*$/
117
+ driver[:args].split(",").each do |arg|
118
+ case arg
119
+ when /^\s*true\s*$/
120
+ args.push true
121
+ when /^\s*false\s*$/
122
+ args.push false
123
+ else
124
+ raise "implement reader argument for #{arg}"
125
+ end
126
+ end
127
+ end
128
+
129
+ case driver[:reader]
130
+ when "DataMatrixReader"; reader = ZXing::DataMatrix::DataMatrixReader
131
+ when "AztecReader"; reader = ZXing::Aztec::AztecReader
132
+ when "Code39Reader"; reader = ZXing::OneD::Code39Reader
133
+ else; reader = ZXing.const_get(driver[:reader])
134
+ end
135
+
136
+ reader = reader.send(*args)
137
+
138
+ passed = []
139
+ tried_harder = []
140
+
141
+ driver[:images].sort.each do |filename|
142
+ puts "Starting #{filename}"
143
+
144
+ image = Image.read filename
145
+ if !driver[:negative]
146
+ expected_filename = Dir[filename.sub(%r{\.[^.]+$}, "")+".{txt,bin}"].first
147
+ if !expected_filename.index(".bin").nil?
148
+ expected_text = File.open(expected_filename, "r:binary") do |f|
149
+ f.read
150
+ end
151
+ elsif RUBY_VERSION !~ /^1.8/
152
+ expected_text = File.open(expected_filename, "r:utf-8") do |f|
153
+ f.read
154
+ end
155
+ else
156
+ expected_text = IO.read expected_filename
157
+ end
158
+ end
159
+
160
+ expected_metadata = {}
161
+ Dir[filename.sub(%r{\.[^.]+$}, ".metadata.txt")].each do |metafile|
162
+ File.open(metafile).each do |line|
163
+ pair = line.split("=")
164
+ expected_metadata[pair.first] = pair.last
165
+ end
166
+ end
167
+
168
+ driver[:tests].each_with_index do |params, test|
169
+ passed[test] = passed[test] || 0
170
+ tried_harder[test] = tried_harder[test] || 0
171
+ mustPass, tryHarder, rotation = *params
172
+ rotated = image.rotate rotation
173
+ source = LuminanceSource.new rotated
174
+ binarizer = Common::HybridBinarizer.new source
175
+ bitmap = BinaryBitmap.new binarizer
176
+
177
+ time = Time.now
178
+
179
+ decode = lambda do |try_harder|
180
+ suffix = "(#{try_harder ? 'try harder, ' : ''}rotation: #{rotation})"
181
+ result = nil
182
+ hints = {}
183
+ if try_harder
184
+ hints[:try_harder] = true
185
+ end
186
+ # hardcode for now ...
187
+ if driver[:format] == "PDF417"
188
+ hints[:possible_formats] = [:PDF417]
189
+ end
190
+ if driver[:format] == "DATA_MATRIX"
191
+ hints[:possible_formats] = [:DATA_MATRIX]
192
+ end
193
+ begin
194
+ result = reader.decode bitmap, hints
195
+ print_time = false
196
+ print_time and p [Time.now - time, try_harder, rotation]
197
+ if driver[:negative]
198
+ printf("%s false positive: '%s' with format '%s' (rotation: %d)\n",
199
+ try_harder ? "Try harder found" : "Found",
200
+ result.text,
201
+ result.format,
202
+ rotation)
203
+ return true
204
+ end
205
+ rescue NotFoundException => e
206
+ print_time and p [Time.now - time, try_harder, rotation]
207
+ return false if driver[:negative]
208
+ puts [e.class.to_s, e.to_s, suffix].join(" ")
209
+ return false
210
+ rescue ReedSolomonException => e
211
+ print_time and p [Time.now - time, try_harder, rotation]
212
+ return false if driver[:negative]
213
+ puts [e.class.to_s, e.to_s, suffix].join(" ")
214
+ return false
215
+ rescue ReaderException => e
216
+ print_time and p [Time.now - time, try_harder, rotation]
217
+ return false if driver[:negative]
218
+ puts [e.class.to_s, e.to_s, suffix].join(" ")
219
+ return false
220
+ rescue FormatException => e
221
+ print_time and p [Time.now - time, try_harder, rotation]
222
+ return false if driver[:negative]
223
+ puts [e.class.to_s, e.to_s, suffix].join(" ")
224
+ return false
225
+ rescue IllegalArgumentException => e
226
+ print_time and p [Time.now - time, try_harder, rotation]
227
+ return false if driver[:negative]
228
+ puts [e.class.to_s, e.to_s, suffix].join(" ")
229
+ return false
230
+ rescue ChecksumException => e
231
+ print_time and p [Time.now - time, try_harder, rotation]
232
+ return false if driver[:negative]
233
+ puts [e.class.to_s, e.to_s, suffix].join(" ")
234
+ return false
235
+ end
236
+
237
+ if driver[:format] != result.format
238
+ puts "Format mismatch: expected '#{driver[:format]}' but got '" +
239
+ "#{result.format}' #{suffix}"
240
+ return false;
241
+ end
242
+
243
+ result_text = result.text
244
+
245
+ # this is a hack, but the expected text assumes the SJIS 0x5c
246
+ # is \ but iconv (correctly?) converts it to ¥
247
+
248
+ # not sure about this ...
249
+ if expected_text.encoding == Encoding.find("BINARY")
250
+ result_text.force_encoding("BINARY")
251
+ elsif RUBY_VERSION =~ /^1.[89]/
252
+ result_text.gsub!(/¥/, '\\')
253
+ end
254
+
255
+ if expected_text != result_text
256
+ puts "Mismatch: expected '#{expected_text}' but got '#{result_text}' #{suffix}"
257
+ return false;
258
+ end
259
+
260
+ result_metadata = result.metadata
261
+ # if metadata isn't supported, the result will be nil
262
+ # if it is supported it should be a possibly empty hash
263
+ if result_metadata
264
+ expected_metadata.each do |key,value|
265
+ if result_metadata[key] != value
266
+ puts "Metadata mismatch: for key '#{key}' expected '#{value}' but got '#{result_metadata[key]}'"
267
+ return false;
268
+ end
269
+ end
270
+ end
271
+
272
+ return true;
273
+ end
274
+
275
+ decoded = decode.call false
276
+ passed[test] = passed[test]+1 if decoded
277
+ if !decoded || !driver[:negative]
278
+ decoded = decode.call true
279
+ tried_harder[test] = tried_harder[test]+1 if decoded
280
+ end
281
+ end
282
+
283
+ end
284
+
285
+ total_found = 0;
286
+ total_did_pass = 0;
287
+ total_must_pass = 0;
288
+
289
+ driver[:tests].each_with_index do |params, test|
290
+ mustPass, tryHarder, rotation = *params
291
+ puts "Rotation #{rotation} degrees:"
292
+ if driver[:negative]
293
+ print " #{passed[test]+tried_harder[test]} of #{2*driver[:images].length} images passed"
294
+ if driver[:images].length == driver[:all_images].length
295
+ print " (#{mustPass} allowed)"
296
+ end
297
+ puts
298
+ else
299
+ print " #{passed[test]} of #{driver[:images].length} images passed"
300
+ if driver[:images].length == driver[:all_images].length
301
+ print " (#{mustPass} required)"
302
+ end
303
+ puts
304
+ print " #{tried_harder[test]} of #{driver[:images].length} images passed with try harder"
305
+ if driver[:images].length == driver[:all_images].length
306
+ print " (#{tryHarder} required)"
307
+ end
308
+ puts
309
+ end
310
+
311
+ total_found += passed[test]
312
+ total_found += tried_harder[test]
313
+ if driver[:images].length == driver[:all_images].length
314
+ total_did_pass += passed[test]
315
+ total_did_pass += tried_harder[test]
316
+ total_must_pass += mustPass
317
+ if !driver[:negative]
318
+ total_must_pass += tryHarder
319
+ end
320
+ end
321
+ end
322
+
323
+ global_found += total_found
324
+ global_must_pass += total_must_pass
325
+
326
+ total_tests = driver[:images].length * driver[:tests].length * 2;
327
+
328
+ global_total_tests += total_tests
329
+
330
+ print "TOTALS:\n Decoded #{total_found} images out of #{total_tests}" +
331
+ " (#{total_found * 100 / total_tests}%"
332
+ print ", #{total_did_pass} of #{total_must_pass} required"
333
+ puts ") "+driver[:dir]
334
+ if total_did_pass > total_must_pass
335
+ puts " *** Test too lax by #{total_found - total_must_pass} images"
336
+ elsif total_did_pass < total_must_pass
337
+ puts " *** Test failed by #{total_must_pass - total_found} images"
338
+ end
339
+
340
+ end
341
+
342
+ if ARGV.length > 1
343
+ puts "TOTALS:\n Decoded #{global_found} images out of #{global_total_tests}" +
344
+ "(#{global_found * 100 / global_total_tests}%, #{global_must_pass} required)"
345
+ if global_found > global_must_pass
346
+ puts " *** Test too lax by #{global_found - global_must_pass} images"
347
+ elsif global_found < global_must_pass
348
+ puts " *** Test failed by #{global_must_pass - global_found} images"
349
+ end
350
+ end
351
+
352
+ diff = 0
353
+ if global_found < global_must_pass
354
+ diff = global_must_pass - global_found
355
+ if diff > 0
356
+ diff = [diff, 255].min
357
+ end
358
+ end
359
+
360
+ exit