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,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
+ }