rhodes 2.4.1 → 3.0.0.beta.1

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 (395) hide show
  1. data/CHANGELOG +7 -0
  2. data/Rakefile +7 -36
  3. data/doc/build.txt +48 -22
  4. data/doc/device-caps.txt +130 -1
  5. data/doc/rhom.txt +9 -3
  6. data/doc/test-log-debug.txt +5 -2
  7. data/lib/extensions/barcode/ext/barcode/platform/android/Rakefile +40 -20
  8. data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/AUTHORS +58 -0
  9. data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/CHANGES +266 -0
  10. data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/COPYING +201 -0
  11. data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/README +11 -0
  12. data/lib/extensions/barcode/ext/barcode/platform/android/ext_build.files +173 -0
  13. data/lib/extensions/barcode/ext/barcode/platform/android/jni/src/barcode.cpp +34 -0
  14. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/BarcodeFormat.java +103 -0
  15. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Binarizer.java +80 -0
  16. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/BinaryBitmap.java +128 -0
  17. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ChecksumException.java +37 -0
  18. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/DecodeHintType.java +79 -0
  19. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/EncodeHintType.java +39 -0
  20. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/FormatException.java +38 -0
  21. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/LuminanceSource.java +113 -0
  22. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/MultiFormatReader.java +166 -0
  23. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/MultiFormatWriter.java +65 -0
  24. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/NotFoundException.java +37 -0
  25. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Reader.java +64 -0
  26. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ReaderException.java +98 -0
  27. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Result.java +143 -0
  28. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ResultMetadataType.java +109 -0
  29. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ResultPoint.java +127 -0
  30. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ResultPointCallback.java +29 -0
  31. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Writer.java +54 -0
  32. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/WriterException.java +35 -0
  33. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AbstractDoCoMoResultParser.java +39 -0
  34. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AddressBookAUResultParser.java +73 -0
  35. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AddressBookDoCoMoResultParser.java +85 -0
  36. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AddressBookParsedResult.java +122 -0
  37. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/BizcardResultParser.java +94 -0
  38. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/BookmarkDoCoMoResultParser.java +46 -0
  39. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/CalendarParsedResult.java +134 -0
  40. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/EmailAddressParsedResult.java +61 -0
  41. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/EmailAddressResultParser.java +64 -0
  42. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/EmailDoCoMoResultParser.java +87 -0
  43. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ExpandedProductParsedResult.java +195 -0
  44. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ExpandedProductResultParser.java +199 -0
  45. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/GeoParsedResult.java +132 -0
  46. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/GeoResultParser.java +77 -0
  47. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ISBNParsedResult.java +39 -0
  48. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ISBNResultParser.java +54 -0
  49. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ParsedResult.java +73 -0
  50. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ParsedResultType.java +53 -0
  51. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ProductParsedResult.java +49 -0
  52. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ProductResultParser.java +66 -0
  53. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ResultParser.java +319 -0
  54. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/SMSMMSResultParser.java +107 -0
  55. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/SMSParsedResult.java +104 -0
  56. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/SMSTOMMSTOResultParser.java +57 -0
  57. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/TelParsedResult.java +54 -0
  58. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/TelResultParser.java +44 -0
  59. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/TextParsedResult.java +48 -0
  60. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/URIParsedResult.java +113 -0
  61. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/URIResultParser.java +87 -0
  62. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/URLTOResultParser.java +47 -0
  63. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/VCardResultParser.java +346 -0
  64. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/VEventResultParser.java +54 -0
  65. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/WifiParsedResult.java +53 -0
  66. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/WifiResultParser.java +50 -0
  67. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/AbstractNDEFResultParser.java +45 -0
  68. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFRecord.java +87 -0
  69. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFSmartPosterParsedResult.java +63 -0
  70. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFSmartPosterResultParser.java +81 -0
  71. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFTextResultParser.java +57 -0
  72. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFURIResultParser.java +95 -0
  73. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/BitArray.java +247 -0
  74. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/BitMatrix.java +226 -0
  75. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/BitSource.java +97 -0
  76. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/CharacterSetECI.java +110 -0
  77. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/Collections.java +53 -0
  78. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/Comparator.java +27 -0
  79. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/DecoderResult.java +63 -0
  80. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/DefaultGridSampler.java +81 -0
  81. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/DetectorResult.java +46 -0
  82. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/ECI.java +52 -0
  83. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/GlobalHistogramBinarizer.java +196 -0
  84. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/GridSampler.java +171 -0
  85. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/HybridBinarizer.java +185 -0
  86. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/PerspectiveTransform.java +148 -0
  87. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/StringUtils.java +191 -0
  88. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/detector/MonochromeRectangleDetector.java +209 -0
  89. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/detector/WhiteRectangleDetector.java +316 -0
  90. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/GF256.java +139 -0
  91. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/GF256Poly.java +263 -0
  92. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/ReedSolomonDecoder.java +194 -0
  93. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/ReedSolomonEncoder.java +75 -0
  94. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/ReedSolomonException.java +31 -0
  95. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/DataMatrixReader.java +161 -0
  96. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/BitMatrixParser.java +446 -0
  97. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/DataBlock.java +118 -0
  98. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/DecodedBitStreamParser.java +462 -0
  99. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/Decoder.java +134 -0
  100. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/Version.java +242 -0
  101. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/detector/Detector.java +348 -0
  102. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/ByQuadrantReader.java +96 -0
  103. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/GenericMultipleBarcodeReader.java +156 -0
  104. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/MultipleBarcodeReader.java +37 -0
  105. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/qrcode/QRCodeMultiReader.java +80 -0
  106. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/qrcode/detector/MultiDetector.java +72 -0
  107. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.java +324 -0
  108. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/CodaBarReader.java +263 -0
  109. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code128Reader.java +473 -0
  110. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code128Writer.java +73 -0
  111. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code39Reader.java +333 -0
  112. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code39Writer.java +82 -0
  113. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code93Reader.java +273 -0
  114. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN13Reader.java +135 -0
  115. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN13Writer.java +81 -0
  116. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN8Reader.java +72 -0
  117. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN8Writer.java +76 -0
  118. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EANManufacturerOrgSupport.java +170 -0
  119. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/ITFReader.java +348 -0
  120. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/ITFWriter.java +68 -0
  121. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/MultiFormatOneDReader.java +109 -0
  122. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/MultiFormatUPCEANReader.java +113 -0
  123. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/OneDReader.java +297 -0
  124. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCAReader.java +75 -0
  125. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEANExtensionSupport.java +186 -0
  126. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEANReader.java +355 -0
  127. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEANWriter.java +104 -0
  128. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEReader.java +153 -0
  129. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/AbstractRSSReader.java +110 -0
  130. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/DataCharacter.java +37 -0
  131. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/FinderPattern.java +48 -0
  132. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/Pair.java +41 -0
  133. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/RSS14Reader.java +494 -0
  134. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/RSSUtils.java +155 -0
  135. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/BitArrayBuilder.java +85 -0
  136. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/ExpandedPair.java +68 -0
  137. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/RSSExpandedReader.java +578 -0
  138. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI013103decoder.java +47 -0
  139. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01320xDecoder.java +55 -0
  140. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01392xDecoder.java +66 -0
  141. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01393xDecoder.java +76 -0
  142. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI013x0x1xDecoder.java +106 -0
  143. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI013x0xDecoder.java +56 -0
  144. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01AndOtherAIs.java +56 -0
  145. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01decoder.java +81 -0
  146. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01weightDecoder.java +58 -0
  147. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AbstractExpandedDecoder.java +85 -0
  148. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AnyAIDecoder.java +48 -0
  149. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/BlockParsedResult.java +60 -0
  150. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/CurrentParsingState.java +69 -0
  151. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedChar.java +52 -0
  152. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedInformation.java +63 -0
  153. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedNumeric.java +79 -0
  154. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedObject.java +44 -0
  155. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/FieldParser.java +285 -0
  156. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/GeneralAppIdDecoder.java +414 -0
  157. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/PDF417Reader.java +79 -0
  158. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/decoder/BitMatrixParser.java +1163 -0
  159. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java +629 -0
  160. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/decoder/Decoder.java +150 -0
  161. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/detector/Detector.java +498 -0
  162. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/QRCodeReader.java +166 -0
  163. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/QRCodeWriter.java +108 -0
  164. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/BitMatrixParser.java +203 -0
  165. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/DataBlock.java +123 -0
  166. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/DataMask.java +155 -0
  167. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java +261 -0
  168. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/Decoder.java +148 -0
  169. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/ErrorCorrectionLevel.java +86 -0
  170. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/FormatInformation.java +171 -0
  171. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/Mode.java +112 -0
  172. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/Version.java +586 -0
  173. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/AlignmentPattern.java +48 -0
  174. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/AlignmentPatternFinder.java +279 -0
  175. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/Detector.java +400 -0
  176. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/FinderPattern.java +63 -0
  177. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/FinderPatternFinder.java +585 -0
  178. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/FinderPatternInfo.java +49 -0
  179. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/BlockPair.java +37 -0
  180. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/ByteMatrix.java +97 -0
  181. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/Encoder.java +557 -0
  182. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/MaskUtil.java +217 -0
  183. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/MatrixUtil.java +524 -0
  184. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/QRCode.java +239 -0
  185. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/rhomobile/barcode/Barcode.java +63 -0
  186. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/rhomobile/barcode/RhoLuminanceSource.java +75 -0
  187. data/lib/extensions/barcode/ext/barcode/platform/iphone/Barcode.xcodeproj/project.pbxproj +74 -318
  188. data/lib/extensions/barcode/ext/barcode/platform/iphone/Classes/barcode.m +70 -0
  189. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/COPYING +27 -0
  190. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarCaptureReader.h +105 -0
  191. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarHelpController.h +60 -0
  192. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarImage.h +69 -0
  193. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarImageScanner.h +51 -0
  194. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderController.h +142 -0
  195. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderView.h +118 -0
  196. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderViewController.h +100 -0
  197. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarSDK.h +33 -0
  198. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarSymbol.h +71 -0
  199. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar.h +1476 -0
  200. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Decoder.h +201 -0
  201. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Exception.h +187 -0
  202. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Image.h +321 -0
  203. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/ImageScanner.h +130 -0
  204. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Processor.h +223 -0
  205. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Scanner.h +162 -0
  206. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Symbol.h +529 -0
  207. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Video.h +170 -0
  208. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Window.h +136 -0
  209. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/LICENSE +504 -0
  210. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/README +59 -0
  211. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-back.png +0 -0
  212. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-help.html +88 -0
  213. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-helpicons.png +0 -0
  214. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-samples.png +0 -0
  215. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/libzbar.a +0 -0
  216. data/lib/extensions/debugger/debugger.rb +215 -67
  217. data/lib/extensions/nfc/ext/nfc/platform/android/AndroidManifest.xml +1 -1
  218. data/lib/extensions/nfc/ext/nfc/platform/android/src/com/nfc/Nfc.java +14 -2
  219. data/lib/extensions/timeout/timeout.rb +114 -0
  220. data/lib/framework/rho/render.rb +14 -16
  221. data/lib/framework/rho/rho.rb +38 -14
  222. data/lib/framework/rho/rhoapplication.rb +1 -1
  223. data/lib/framework/rho/rhocontroller.rb +3 -3
  224. data/lib/framework/rho/rhofsconnector.rb +18 -6
  225. data/lib/framework/rho/rhoviewhelpers.rb +1 -1
  226. data/lib/framework/rhoappmanifest.rb +44 -0
  227. data/lib/framework/rhodes.rb +1 -1
  228. data/lib/framework/rhoframework.rb +31 -11
  229. data/lib/framework/rholang/localization_simplified.rb +10 -6
  230. data/lib/framework/rhom/rhom_object_factory.rb +3 -3
  231. data/lib/framework/version.rb +1 -1
  232. data/lib/rhodes.rb +1 -1
  233. data/platform/android/Rhodes/AndroidManifest.xml +2 -2
  234. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesApplication.h +32 -8
  235. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesService.h +21 -21
  236. data/platform/android/Rhodes/jni/src/rhocryptimpl.cpp +1 -0
  237. data/platform/android/Rhodes/jni/src/rhodes.cpp +21 -9
  238. data/platform/android/Rhodes/jni/src/sslimpl.cpp +1 -0
  239. data/platform/android/Rhodes/src/com/rhomobile/rhodes/BaseActivity.java +7 -6
  240. data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushReceiver.java +19 -1
  241. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhoCryptImpl.java +2 -2
  242. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesActivity.java +24 -15
  243. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesApplication.java +39 -47
  244. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +113 -106
  245. data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java +11 -0
  246. data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/StatusNotification.java +49 -0
  247. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +1 -1
  248. data/platform/android/Rhodes/src/com/rhomobile/rhodes/socket/SSLImpl.java +5 -1
  249. data/platform/android/build/RhodesSRC_build.files +1 -0
  250. data/platform/android/build/android.rake +93 -6
  251. data/platform/bb/RubyVM/src/com/rho/RhodesApp.java +5 -4
  252. data/platform/bb/RubyVM/src/com/rho/file/RhoFile.java +10 -0
  253. data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +16 -15
  254. data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +2 -2
  255. data/platform/bb/RubyVM/src/com/rho/sync/SyncSource.java +21 -19
  256. data/platform/bb/rhodes/src/com/rho/BrowserAdapter5.java +2 -2
  257. data/platform/bb/rhodes/src/com/rho/rubyext/System.java +6 -1
  258. data/platform/bb/rhodes/src/com/rho/rubyext/WebView.java +10 -3
  259. data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +21 -1
  260. data/platform/iphone/Classes/SimpleMainView.m +5 -5
  261. data/platform/iphone/Info.plist +1 -1
  262. data/platform/iphone/rbuild/iphone.rake +30 -1
  263. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +12 -0
  264. data/platform/shared/SyncClient/SyncClient.cpp +136 -20
  265. data/platform/shared/SyncClient/SyncClient.h +17 -0
  266. data/platform/shared/common/AppMenu.cpp +6 -1
  267. data/platform/shared/common/RhoConf.cpp +13 -1
  268. data/platform/shared/common/RhoConf.h +3 -1
  269. data/platform/shared/common/RhoDefs.h +10 -0
  270. data/platform/shared/common/RhoFile.cpp +15 -0
  271. data/platform/shared/common/RhoFile.h +1 -0
  272. data/platform/shared/common/RhodesApp.cpp +16 -3
  273. data/platform/shared/common/RhodesApp.h +1 -0
  274. data/platform/shared/common/RhodesAppBase.cpp +102 -62
  275. data/platform/shared/common/RhodesAppBase.h +7 -1
  276. data/platform/shared/curl/lib/rhossl.c +1 -0
  277. data/platform/shared/db/DBAdapter.cpp +14 -2
  278. data/platform/shared/logging/RhoLogConf.cpp +21 -0
  279. data/platform/shared/logging/RhoLogConf.h +11 -0
  280. data/platform/shared/logging/RhoLogSink.cpp +24 -0
  281. data/platform/shared/logging/RhoLogSink.h +20 -1
  282. data/platform/shared/net/HttpServer.cpp +8 -6
  283. data/platform/shared/net/RawSocket.cpp +130 -0
  284. data/platform/shared/net/RawSocket.h +74 -0
  285. data/platform/shared/ruby/ext/rho/rhoruby.c +37 -1
  286. data/platform/shared/ruby/ext/rho/rhosupport.c +74 -21
  287. data/platform/shared/ruby/ext/sqlite3_api/sqlite3_api_wrap.c +9 -1
  288. data/platform/shared/ruby/vm_eval.c +4 -3
  289. data/platform/shared/sync/SyncEngine.cpp +11 -12
  290. data/platform/shared/sync/SyncEngine.h +2 -2
  291. data/platform/shared/sync/SyncNotify.cpp +41 -13
  292. data/platform/shared/sync/SyncNotify.h +20 -3
  293. data/platform/shared/sync/SyncSource.cpp +21 -19
  294. data/platform/shared/sync/SyncThread.cpp +11 -1
  295. data/platform/shared/sync/SyncThread.h +3 -0
  296. data/platform/shared/test/test_helper.cpp +7 -0
  297. data/platform/win32/RhoSimulator/QtCore4.dll +0 -0
  298. data/platform/win32/RhoSimulator/QtGui4.dll +0 -0
  299. data/platform/win32/RhoSimulator/QtNetwork4.dll +0 -0
  300. data/platform/win32/RhoSimulator/QtWebKit4.dll +0 -0
  301. data/platform/win32/RhoSimulator/imageformats/qgif4.dll +0 -0
  302. data/platform/win32/RhoSimulator/imageformats/qjpeg4.dll +0 -0
  303. data/platform/win32/RhoSimulator/rhosimulator.exe +0 -0
  304. data/platform/wm/RhoLib/RhoLib.vcproj +762 -14
  305. data/platform/wm/build/wm.rake +87 -10
  306. data/platform/wm/rhodes.sln +155 -72
  307. data/platform/wm/rhodes/MainWindow.cpp +5 -2
  308. data/platform/wm/rhodes/MainWindow.h +9 -1
  309. data/platform/wm/rhodes/RhoNativeViewManager.cpp +4 -0
  310. data/platform/wm/rhodes/Rhodes.cpp +60 -6
  311. data/platform/wm/rhodes/emulator/ExternalWebView.cpp +20 -0
  312. data/platform/wm/rhodes/emulator/ExternalWebView.h +23 -0
  313. data/platform/wm/rhodes/emulator/ExternalWebView.ui +46 -0
  314. data/platform/wm/rhodes/emulator/MainWindowCallback.h +18 -0
  315. data/platform/wm/rhodes/emulator/MainWindowProxy.cpp +268 -0
  316. data/platform/wm/rhodes/emulator/MainWindowProxy.h +34 -0
  317. data/platform/wm/rhodes/emulator/MainWindowQt.cpp +345 -0
  318. data/platform/wm/rhodes/emulator/MainWindowQt.h +118 -0
  319. data/platform/wm/rhodes/emulator/NativeToolbarQt.cpp +57 -0
  320. data/platform/wm/rhodes/emulator/NativeToolbarQt.h +52 -0
  321. data/platform/wm/rhodes/emulator/QtMainWindow.cpp +219 -0
  322. data/platform/wm/rhodes/emulator/QtMainWindow.h +62 -0
  323. data/platform/wm/rhodes/emulator/QtMainWindow.ui +122 -0
  324. data/platform/wm/rhodes/{RhoCryptImpl.cpp → rho/common/RhoCryptImpl.cpp} +0 -0
  325. data/platform/wm/rhodes/{RhoCryptImpl.h → rho/common/RhoCryptImpl.h} +0 -0
  326. data/platform/wm/rhodes/rho/rubyext/NativeToolbar.cpp +2 -86
  327. data/platform/wm/rhodes/rho/rubyext/NativeToolbarExt.cpp +87 -0
  328. data/platform/wm/rhodes/rho/rubyext/NativeToolbarExt.h +6 -0
  329. data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +60 -0
  330. data/platform/wm/rhodes/rhodes.vcproj +4025 -365
  331. data/platform/wm/rhodes/signature/Signature.cpp +29 -13
  332. data/platform/wm/rubylib/rubylib.vcproj +1167 -195
  333. data/platform/wm/shttpd/shttpd.vcproj +4 -4
  334. data/platform/wm/sqlite3/sqlite3.vcproj +441 -13
  335. data/platform/wm/syncengine/syncengine.vcproj +443 -15
  336. data/platform/wm/tcmalloc/tcmalloc.vcproj +0 -154
  337. data/platform/wm/tools/detool/LogServer.cpp +150 -0
  338. data/platform/wm/tools/detool/LogServer.h +23 -0
  339. data/platform/wm/tools/detool/detool.cpp +42 -4
  340. data/platform/wm/tools/detool/detool.vcproj +10 -1
  341. data/platform/wp7/IronRuby/Bin/Silverlight3Release/IronRuby.Libraries.dll +0 -0
  342. data/platform/wp7/IronRuby/Bin/Silverlight3Release/IronRuby.dll +0 -0
  343. data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Dynamic.dll +0 -0
  344. data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Scripting.Core.dll +0 -0
  345. data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Scripting.dll +0 -0
  346. data/platform/wp7/RhoAppRunner/Program.cs +20 -3
  347. data/platform/wp7/RhoLogServer/Program.cs +22 -0
  348. data/platform/wp7/RhoLogServer/Properties/AssemblyInfo.cs +36 -0
  349. data/platform/wp7/RhoLogServer/RhoLogServer.csproj +65 -0
  350. data/platform/wp7/RhoLogServer/SocketServer.cs +210 -0
  351. data/platform/wp7/RhoRubyExtGen/RhoAsyncHttp.cs +6 -0
  352. data/platform/wp7/RhoRubyLib/Initializers.Generated.cs +3 -2
  353. data/platform/wp7/RhoRubyLib/RhoRuby.cs +82 -0
  354. data/platform/wp7/RhoRubyLib/RhoRubyLib.csproj +7 -5
  355. data/platform/wp7/RhoRubyLib/WP_PlatformAdaptationLayer.cs +1 -1
  356. data/platform/wp7/RhoRubyLib/common/RhoParams.cs +1 -1
  357. data/platform/wp7/RhoRubyLib/common/ThreadQueue.cs +4 -1
  358. data/platform/wp7/RhoRubyLib/db/DBAdapter.cs +2 -2
  359. data/platform/wp7/RhoRubyLib/logging/IRhoLogSink.cs +1 -1
  360. data/platform/wp7/RhoRubyLib/logging/RhoEmptyLogger.cs +30 -0
  361. data/platform/wp7/RhoRubyLib/logging/RhoLogConf.cs +10 -0
  362. data/platform/wp7/RhoRubyLib/logging/RhoLogFileSink.cs +6 -1
  363. data/platform/wp7/RhoRubyLib/logging/RhoLogServerSink.cs +56 -0
  364. data/platform/wp7/RhoRubyLib/logging/RhoLogger.cs +24 -11
  365. data/platform/wp7/RhoRubyLib/net/AsyncHttp.cs +57 -14
  366. data/platform/wp7/RhoRubyLib/net/NetRequest.cs +32 -9
  367. data/platform/wp7/RhoRubyLib/rubyext/RhoAsyncHttp.cs +7 -0
  368. data/platform/wp7/RhoRubyLib/rubyext/RhoKernelOps.cs +6 -0
  369. data/platform/wp7/RhoRubyLib/sync/SyncEngine.cs +20 -16
  370. data/platform/wp7/RhoRubyLib/sync/SyncNotify.cs +2 -2
  371. data/platform/wp7/RhoRubyLib/sync/SyncSource.cs +138 -40
  372. data/platform/wp7/WPApplication/rho/apps/app/layout.erb +3 -1
  373. data/platform/wp7/build/wp.rake +151 -12
  374. data/platform/wp7/rhodes.sln +10 -0
  375. data/platform/wp7/rhodes/App.xaml.cs +6 -0
  376. data/platform/wp7/rhodes/MainPage.xaml +3 -0
  377. data/platform/wp7/rhodes/MainPage.xaml.cs +19 -0
  378. data/platform/wp7/rhodes/Rhodes.csproj +4 -2
  379. data/rakefile.rb +7 -36
  380. data/res/build-tools/RhoAppRunner.exe +0 -0
  381. data/res/build-tools/RhoLogServer.exe +0 -0
  382. data/res/build-tools/detool.exe +0 -0
  383. data/res/build-tools/wp7explorer.exe +0 -0
  384. data/res/generators/templates/application/app/layout.erb +3 -1
  385. data/res/generators/templates/application/public/jqtouch/jqtouch.js +1 -1
  386. data/rhodes.gemspec +1 -1
  387. data/spec/framework_spec/app/layout.erb +1 -1
  388. data/spec/framework_spec/build.yml +1 -0
  389. data/spec/perfomance_spec/app/layout.erb +3 -0
  390. data/spec/phone_spec/app/Account_s/account_s.rb +4 -1
  391. data/spec/phone_spec/app/spec/rhom_object_spec.rb +30 -1
  392. data/spec/phone_spec/app/spec_runner.rb +1 -1
  393. data/spec/phone_spec/build.yml +4 -1
  394. metadata +262 -10
  395. data/platform/wp7/IronRuby/Languages/Ruby/Ruby/Builtins/ConsoleStream.cs +0 -107
@@ -0,0 +1,150 @@
1
+ /*
2
+ * Copyright 2009 ZXing authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.google.zxing.pdf417.decoder;
18
+
19
+ import com.google.zxing.ChecksumException;
20
+ import com.google.zxing.FormatException;
21
+ import com.google.zxing.NotFoundException;
22
+ import com.google.zxing.common.BitMatrix;
23
+ import com.google.zxing.common.DecoderResult;
24
+ //import com.google.zxing.pdf417.reedsolomon.ReedSolomonDecoder;
25
+
26
+ /**
27
+ * <p>The main class which implements PDF417 Code decoding -- as
28
+ * opposed to locating and extracting the PDF417 Code from an image.</p>
29
+ *
30
+ * @author SITA Lab (kevin.osullivan@sita.aero)
31
+ */
32
+ public final class Decoder {
33
+
34
+ private static final int MAX_ERRORS = 3;
35
+ private static final int MAX_EC_CODEWORDS = 512;
36
+ //private final ReedSolomonDecoder rsDecoder;
37
+
38
+ public Decoder() {
39
+ // TODO MGMG
40
+ //rsDecoder = new ReedSolomonDecoder();
41
+ }
42
+
43
+ /**
44
+ * <p>Convenience method that can decode a PDF417 Code represented as a 2D array of booleans.
45
+ * "true" is taken to mean a black module.</p>
46
+ *
47
+ * @param image booleans representing white/black PDF417 modules
48
+ * @return text and bytes encoded within the PDF417 Code
49
+ * @throws NotFoundException if the PDF417 Code cannot be decoded
50
+ */
51
+ public DecoderResult decode(boolean[][] image) throws FormatException {
52
+ int dimension = image.length;
53
+ BitMatrix bits = new BitMatrix(dimension);
54
+ for (int i = 0; i < dimension; i++) {
55
+ for (int j = 0; j < dimension; j++) {
56
+ if (image[j][i]) {
57
+ bits.set(j, i);
58
+ }
59
+ }
60
+ }
61
+ return decode(bits);
62
+ }
63
+
64
+ /**
65
+ * <p>Decodes a PDF417 Code represented as a {@link BitMatrix}.
66
+ * A 1 or "true" is taken to mean a black module.</p>
67
+ *
68
+ * @param bits booleans representing white/black PDF417 Code modules
69
+ * @return text and bytes encoded within the PDF417 Code
70
+ * @throws FormatException if the PDF417 Code cannot be decoded
71
+ */
72
+ public DecoderResult decode(BitMatrix bits) throws FormatException {
73
+ // Construct a parser to read the data codewords and error-correction level
74
+ BitMatrixParser parser = new BitMatrixParser(bits);
75
+ int[] codewords = parser.readCodewords();
76
+ if (codewords == null || codewords.length == 0) {
77
+ throw FormatException.getFormatInstance();
78
+ }
79
+
80
+ int ecLevel = parser.getECLevel();
81
+ int numECCodewords = 1 << (ecLevel + 1);
82
+ int[] erasures = parser.getErasures();
83
+
84
+ correctErrors(codewords, erasures, numECCodewords);
85
+ verifyCodewordCount(codewords, numECCodewords);
86
+
87
+ // Decode the codewords
88
+ return DecodedBitStreamParser.decode(codewords);
89
+ }
90
+
91
+ /**
92
+ * Verify that all is OK with the codeword array.
93
+ *
94
+ * @param codewords
95
+ * @return an index to the first data codeword.
96
+ * @throws FormatException
97
+ */
98
+ private static void verifyCodewordCount(int[] codewords, int numECCodewords) throws FormatException {
99
+ if (codewords.length < 4) {
100
+ // Codeword array size should be at least 4 allowing for
101
+ // Count CW, At least one Data CW, Error Correction CW, Error Correction CW
102
+ throw FormatException.getFormatInstance();
103
+ }
104
+ // The first codeword, the Symbol Length Descriptor, shall always encode the total number of data
105
+ // codewords in the symbol, including the Symbol Length Descriptor itself, data codewords and pad
106
+ // codewords, but excluding the number of error correction codewords.
107
+ int numberOfCodewords = codewords[0];
108
+ if (numberOfCodewords > codewords.length) {
109
+ throw FormatException.getFormatInstance();
110
+ }
111
+ if (numberOfCodewords == 0) {
112
+ // Reset to the length of the array - 8 (Allow for at least level 3 Error Correction (8 Error Codewords)
113
+ if (numECCodewords < codewords.length) {
114
+ codewords[0] = codewords.length - numECCodewords;
115
+ } else {
116
+ throw FormatException.getFormatInstance();
117
+ }
118
+ }
119
+ }
120
+
121
+ /**
122
+ * <p>Given data and error-correction codewords received, possibly corrupted by errors, attempts to
123
+ * correct the errors in-place using Reed-Solomon error correction.</p>
124
+ *
125
+ * @param codewords data and error correction codewords
126
+ * @throws ChecksumException if error correction fails
127
+ */
128
+ private static int correctErrors(int[] codewords, int[] erasures, int numECCodewords) throws FormatException {
129
+ if ((erasures != null && erasures.length > numECCodewords / 2 + MAX_ERRORS) ||
130
+ (numECCodewords < 0 || numECCodewords > MAX_EC_CODEWORDS)) {
131
+ // Too many errors or EC Codewords is corrupted
132
+ throw FormatException.getFormatInstance();
133
+ }
134
+ // Try to correct the errors
135
+ // TODO enable error correction
136
+ int result = 0; // rsDecoder.correctErrors(codewords, numECCodewords);
137
+ if (erasures != null) {
138
+ int numErasures = erasures.length;
139
+ if (result > 0) {
140
+ numErasures -= result;
141
+ }
142
+ if (numErasures > MAX_ERRORS) {
143
+ // Still too many errors
144
+ throw FormatException.getFormatInstance();
145
+ }
146
+ }
147
+ return result;
148
+ }
149
+
150
+ }
@@ -0,0 +1,498 @@
1
+ /*
2
+ * Copyright 2009 ZXing authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.google.zxing.pdf417.detector;
18
+
19
+ import com.google.zxing.BinaryBitmap;
20
+ import com.google.zxing.NotFoundException;
21
+ import com.google.zxing.ResultPoint;
22
+ import com.google.zxing.common.BitMatrix;
23
+ import com.google.zxing.common.DetectorResult;
24
+ import com.google.zxing.common.GridSampler;
25
+
26
+ import java.util.Hashtable;
27
+
28
+ /**
29
+ * <p>Encapsulates logic that can detect a PDF417 Code in an image, even if the
30
+ * PDF417 Code is rotated or skewed, or partially obscured.</p>
31
+ *
32
+ * @author SITA Lab (kevin.osullivan@sita.aero)
33
+ * @author dswitkin@google.com (Daniel Switkin)
34
+ */
35
+ public final class Detector {
36
+
37
+ private static final int MAX_AVG_VARIANCE = (int) ((1 << 8) * 0.42f);
38
+ private static final int MAX_INDIVIDUAL_VARIANCE = (int) ((1 << 8) * 0.8f);
39
+ private static final int SKEW_THRESHOLD = 2;
40
+
41
+ // B S B S B S B S Bar/Space pattern
42
+ // 11111111 0 1 0 1 0 1 000
43
+ private static final int[] START_PATTERN = {8, 1, 1, 1, 1, 1, 1, 3};
44
+
45
+ // 11111111 0 1 0 1 0 1 000
46
+ private static final int[] START_PATTERN_REVERSE = {3, 1, 1, 1, 1, 1, 1, 8};
47
+
48
+ // 1111111 0 1 000 1 0 1 00 1
49
+ private static final int[] STOP_PATTERN = {7, 1, 1, 3, 1, 1, 1, 2, 1};
50
+
51
+ // B S B S B S B S B Bar/Space pattern
52
+ // 1111111 0 1 000 1 0 1 00 1
53
+ private static final int[] STOP_PATTERN_REVERSE = {1, 2, 1, 1, 1, 3, 1, 1, 7};
54
+
55
+ private final BinaryBitmap image;
56
+
57
+ public Detector(BinaryBitmap image) {
58
+ this.image = image;
59
+ }
60
+
61
+ /**
62
+ * <p>Detects a PDF417 Code in an image, simply.</p>
63
+ *
64
+ * @return {@link DetectorResult} encapsulating results of detecting a PDF417 Code
65
+ * @throws NotFoundException if no QR Code can be found
66
+ */
67
+ public DetectorResult detect() throws NotFoundException {
68
+ return detect(null);
69
+ }
70
+
71
+ /**
72
+ * <p>Detects a PDF417 Code in an image. Only checks 0 and 180 degree rotations.</p>
73
+ *
74
+ * @param hints optional hints to detector
75
+ * @return {@link DetectorResult} encapsulating results of detecting a PDF417 Code
76
+ * @throws NotFoundException if no PDF417 Code can be found
77
+ */
78
+ public DetectorResult detect(Hashtable hints) throws NotFoundException {
79
+ // Fetch the 1 bit matrix once up front.
80
+ BitMatrix matrix = image.getBlackMatrix();
81
+
82
+ // Try to find the vertices assuming the image is upright.
83
+ ResultPoint[] vertices = findVertices(matrix);
84
+ if (vertices == null) {
85
+ // Maybe the image is rotated 180 degrees?
86
+ vertices = findVertices180(matrix);
87
+ if (vertices != null) {
88
+ correctCodeWordVertices(vertices, true);
89
+ }
90
+ } else {
91
+ correctCodeWordVertices(vertices, false);
92
+ }
93
+
94
+ if (vertices == null) {
95
+ throw NotFoundException.getNotFoundInstance();
96
+ }
97
+
98
+ float moduleWidth = computeModuleWidth(vertices);
99
+ if (moduleWidth < 1.0f) {
100
+ throw NotFoundException.getNotFoundInstance();
101
+ }
102
+
103
+ int dimension = computeDimension(vertices[4], vertices[6],
104
+ vertices[5], vertices[7], moduleWidth);
105
+ if (dimension < 1) {
106
+ throw NotFoundException.getNotFoundInstance();
107
+ }
108
+
109
+ // Deskew and sample image.
110
+ BitMatrix bits = sampleGrid(matrix, vertices[4], vertices[5],
111
+ vertices[6], vertices[7], dimension);
112
+ return new DetectorResult(bits, new ResultPoint[]{vertices[4],
113
+ vertices[5], vertices[6], vertices[7]});
114
+ }
115
+
116
+ /**
117
+ * Locate the vertices and the codewords area of a black blob using the Start
118
+ * and Stop patterns as locators.
119
+ * TODO: Scanning every row is very expensive. We should only do this for TRY_HARDER.
120
+ *
121
+ * @param matrix the scanned barcode image.
122
+ * @return an array containing the vertices:
123
+ * vertices[0] x, y top left barcode
124
+ * vertices[1] x, y bottom left barcode
125
+ * vertices[2] x, y top right barcode
126
+ * vertices[3] x, y bottom right barcode
127
+ * vertices[4] x, y top left codeword area
128
+ * vertices[5] x, y bottom left codeword area
129
+ * vertices[6] x, y top right codeword area
130
+ * vertices[7] x, y bottom right codeword area
131
+ */
132
+ private static ResultPoint[] findVertices(BitMatrix matrix) {
133
+ int height = matrix.getHeight();
134
+ int width = matrix.getWidth();
135
+
136
+ ResultPoint[] result = new ResultPoint[8];
137
+ boolean found = false;
138
+
139
+ // Top Left
140
+ for (int i = 0; i < height; i++) {
141
+ int[] loc = findGuardPattern(matrix, 0, i, width, false, START_PATTERN);
142
+ if (loc != null) {
143
+ result[0] = new ResultPoint(loc[0], i);
144
+ result[4] = new ResultPoint(loc[1], i);
145
+ found = true;
146
+ break;
147
+ }
148
+ }
149
+ // Bottom left
150
+ if (found) { // Found the Top Left vertex
151
+ found = false;
152
+ for (int i = height - 1; i > 0; i--) {
153
+ int[] loc = findGuardPattern(matrix, 0, i, width, false, START_PATTERN);
154
+ if (loc != null) {
155
+ result[1] = new ResultPoint(loc[0], i);
156
+ result[5] = new ResultPoint(loc[1], i);
157
+ found = true;
158
+ break;
159
+ }
160
+ }
161
+ }
162
+ // Top right
163
+ if (found) { // Found the Bottom Left vertex
164
+ found = false;
165
+ for (int i = 0; i < height; i++) {
166
+ int[] loc = findGuardPattern(matrix, 0, i, width, false, STOP_PATTERN);
167
+ if (loc != null) {
168
+ result[2] = new ResultPoint(loc[1], i);
169
+ result[6] = new ResultPoint(loc[0], i);
170
+ found = true;
171
+ break;
172
+ }
173
+ }
174
+ }
175
+ // Bottom right
176
+ if (found) { // Found the Top right vertex
177
+ found = false;
178
+ for (int i = height - 1; i > 0; i--) {
179
+ int[] loc = findGuardPattern(matrix, 0, i, width, false, STOP_PATTERN);
180
+ if (loc != null) {
181
+ result[3] = new ResultPoint(loc[1], i);
182
+ result[7] = new ResultPoint(loc[0], i);
183
+ found = true;
184
+ break;
185
+ }
186
+ }
187
+ }
188
+ return found ? result : null;
189
+ }
190
+
191
+ /**
192
+ * Locate the vertices and the codewords area of a black blob using the Start
193
+ * and Stop patterns as locators. This assumes that the image is rotated 180
194
+ * degrees and if it locates the start and stop patterns at it will re-map
195
+ * the vertices for a 0 degree rotation.
196
+ * TODO: Change assumption about barcode location.
197
+ * TODO: Scanning every row is very expensive. We should only do this for TRY_HARDER.
198
+ *
199
+ * @param matrix the scanned barcode image.
200
+ * @return an array containing the vertices:
201
+ * vertices[0] x, y top left barcode
202
+ * vertices[1] x, y bottom left barcode
203
+ * vertices[2] x, y top right barcode
204
+ * vertices[3] x, y bottom right barcode
205
+ * vertices[4] x, y top left codeword area
206
+ * vertices[5] x, y bottom left codeword area
207
+ * vertices[6] x, y top right codeword area
208
+ * vertices[7] x, y bottom right codeword area
209
+ */
210
+ private static ResultPoint[] findVertices180(BitMatrix matrix) {
211
+ int height = matrix.getHeight();
212
+ int width = matrix.getWidth();
213
+ int halfWidth = width >> 1;
214
+
215
+ ResultPoint[] result = new ResultPoint[8];
216
+ boolean found = false;
217
+
218
+ // Top Left
219
+ for (int i = height - 1; i > 0; i--) {
220
+ int[] loc = findGuardPattern(matrix, halfWidth, i, halfWidth, true, START_PATTERN_REVERSE);
221
+ if (loc != null) {
222
+ result[0] = new ResultPoint(loc[1], i);
223
+ result[4] = new ResultPoint(loc[0], i);
224
+ found = true;
225
+ break;
226
+ }
227
+ }
228
+ // Bottom Left
229
+ if (found) { // Found the Top Left vertex
230
+ found = false;
231
+ for (int i = 0; i < height; i++) {
232
+ int[] loc = findGuardPattern(matrix, halfWidth, i, halfWidth, true, START_PATTERN_REVERSE);
233
+ if (loc != null) {
234
+ result[1] = new ResultPoint(loc[1], i);
235
+ result[5] = new ResultPoint(loc[0], i);
236
+ found = true;
237
+ break;
238
+ }
239
+ }
240
+ }
241
+ // Top Right
242
+ if (found) { // Found the Bottom Left vertex
243
+ found = false;
244
+ for (int i = height - 1; i > 0; i--) {
245
+ int[] loc = findGuardPattern(matrix, 0, i, halfWidth, false, STOP_PATTERN_REVERSE);
246
+ if (loc != null) {
247
+ result[2] = new ResultPoint(loc[0], i);
248
+ result[6] = new ResultPoint(loc[1], i);
249
+ found = true;
250
+ break;
251
+ }
252
+ }
253
+ }
254
+ // Bottom Right
255
+ if (found) { // Found the Top Right vertex
256
+ found = false;
257
+ for (int i = 0; i < height; i++) {
258
+ int[] loc = findGuardPattern(matrix, 0, i, halfWidth, false, STOP_PATTERN_REVERSE);
259
+ if (loc != null) {
260
+ result[3] = new ResultPoint(loc[0], i);
261
+ result[7] = new ResultPoint(loc[1], i);
262
+ found = true;
263
+ break;
264
+ }
265
+ }
266
+ }
267
+ return found ? result : null;
268
+ }
269
+
270
+ /**
271
+ * Because we scan horizontally to detect the start and stop patterns, the vertical component of
272
+ * the codeword coordinates will be slightly wrong if there is any skew or rotation in the image.
273
+ * This method moves those points back onto the edges of the theoretically perfect bounding
274
+ * quadrilateral if needed.
275
+ *
276
+ * @param vertices The eight vertices located by findVertices().
277
+ */
278
+ private static void correctCodeWordVertices(ResultPoint[] vertices, boolean upsideDown) {
279
+ float skew = vertices[4].getY() - vertices[6].getY();
280
+ if (upsideDown) {
281
+ skew = -skew;
282
+ }
283
+ if (skew > SKEW_THRESHOLD) {
284
+ // Fix v4
285
+ float length = vertices[4].getX() - vertices[0].getX();
286
+ float deltax = vertices[6].getX() - vertices[0].getX();
287
+ float deltay = vertices[6].getY() - vertices[0].getY();
288
+ float correction = length * deltay / deltax;
289
+ vertices[4] = new ResultPoint(vertices[4].getX(), vertices[4].getY() + correction);
290
+ } else if (-skew > SKEW_THRESHOLD) {
291
+ // Fix v6
292
+ float length = vertices[2].getX() - vertices[6].getX();
293
+ float deltax = vertices[2].getX() - vertices[4].getX();
294
+ float deltay = vertices[2].getY() - vertices[4].getY();
295
+ float correction = length * deltay / deltax;
296
+ vertices[6] = new ResultPoint(vertices[6].getX(), vertices[6].getY() - correction);
297
+ }
298
+
299
+ skew = vertices[7].getY() - vertices[5].getY();
300
+ if (upsideDown) {
301
+ skew = -skew;
302
+ }
303
+ if (skew > SKEW_THRESHOLD) {
304
+ // Fix v5
305
+ float length = vertices[5].getX() - vertices[1].getX();
306
+ float deltax = vertices[7].getX() - vertices[1].getX();
307
+ float deltay = vertices[7].getY() - vertices[1].getY();
308
+ float correction = length * deltay / deltax;
309
+ vertices[5] = new ResultPoint(vertices[5].getX(), vertices[5].getY() + correction);
310
+ } else if (-skew > SKEW_THRESHOLD) {
311
+ // Fix v7
312
+ float length = vertices[3].getX() - vertices[7].getX();
313
+ float deltax = vertices[3].getX() - vertices[5].getX();
314
+ float deltay = vertices[3].getY() - vertices[5].getY();
315
+ float correction = length * deltay / deltax;
316
+ vertices[7] = new ResultPoint(vertices[7].getX(), vertices[7].getY() - correction);
317
+ }
318
+ }
319
+
320
+ /**
321
+ * <p>Estimates module size (pixels in a module) based on the Start and End
322
+ * finder patterns.</p>
323
+ *
324
+ * @param vertices an array of vertices:
325
+ * vertices[0] x, y top left barcode
326
+ * vertices[1] x, y bottom left barcode
327
+ * vertices[2] x, y top right barcode
328
+ * vertices[3] x, y bottom right barcode
329
+ * vertices[4] x, y top left codeword area
330
+ * vertices[5] x, y bottom left codeword area
331
+ * vertices[6] x, y top right codeword area
332
+ * vertices[7] x, y bottom right codeword area
333
+ * @return the module size.
334
+ */
335
+ private static float computeModuleWidth(ResultPoint[] vertices) {
336
+ float pixels1 = ResultPoint.distance(vertices[0], vertices[4]);
337
+ float pixels2 = ResultPoint.distance(vertices[1], vertices[5]);
338
+ float moduleWidth1 = (pixels1 + pixels2) / (17 * 2.0f);
339
+ float pixels3 = ResultPoint.distance(vertices[6], vertices[2]);
340
+ float pixels4 = ResultPoint.distance(vertices[7], vertices[3]);
341
+ float moduleWidth2 = (pixels3 + pixels4) / (18 * 2.0f);
342
+ return (moduleWidth1 + moduleWidth2) / 2.0f;
343
+ }
344
+
345
+ /**
346
+ * Computes the dimension (number of modules in a row) of the PDF417 Code
347
+ * based on vertices of the codeword area and estimated module size.
348
+ *
349
+ * @param topLeft of codeword area
350
+ * @param topRight of codeword area
351
+ * @param bottomLeft of codeword area
352
+ * @param bottomRight of codeword are
353
+ * @param moduleWidth estimated module size
354
+ * @return the number of modules in a row.
355
+ */
356
+ private static int computeDimension(ResultPoint topLeft, ResultPoint topRight,
357
+ ResultPoint bottomLeft, ResultPoint bottomRight, float moduleWidth) {
358
+ int topRowDimension = round(ResultPoint.distance(topLeft, topRight) / moduleWidth);
359
+ int bottomRowDimension = round(ResultPoint.distance(bottomLeft, bottomRight) / moduleWidth);
360
+ return ((((topRowDimension + bottomRowDimension) >> 1) + 8) / 17) * 17;
361
+ /*
362
+ * int topRowDimension = round(ResultPoint.distance(topLeft,
363
+ * topRight)); //moduleWidth); int bottomRowDimension =
364
+ * round(ResultPoint.distance(bottomLeft, bottomRight)); //
365
+ * moduleWidth); int dimension = ((topRowDimension + bottomRowDimension)
366
+ * >> 1); // Round up to nearest 17 modules i.e. there are 17 modules per
367
+ * codeword //int dimension = ((((topRowDimension + bottomRowDimension) >>
368
+ * 1) + 8) / 17) * 17; return dimension;
369
+ */
370
+ }
371
+
372
+ private static BitMatrix sampleGrid(BitMatrix matrix, ResultPoint topLeft,
373
+ ResultPoint bottomLeft, ResultPoint topRight, ResultPoint bottomRight, int dimension)
374
+ throws NotFoundException {
375
+
376
+ // Note that unlike the QR Code sampler, we didn't find the center of modules, but the
377
+ // very corners. So there is no 0.5f here; 0.0f is right.
378
+ GridSampler sampler = GridSampler.getInstance();
379
+
380
+ return sampler.sampleGrid(matrix, dimension, 0.0f, // p1ToX
381
+ 0.0f, // p1ToY
382
+ dimension, // p2ToX
383
+ 0.0f, // p2ToY
384
+ dimension, // p3ToX
385
+ dimension, // p3ToY
386
+ 0.0f, // p4ToX
387
+ dimension, // p4ToY
388
+ topLeft.getX(), // p1FromX
389
+ topLeft.getY(), // p1FromY
390
+ topRight.getX(), // p2FromX
391
+ topRight.getY(), // p2FromY
392
+ bottomRight.getX(), // p3FromX
393
+ bottomRight.getY(), // p3FromY
394
+ bottomLeft.getX(), // p4FromX
395
+ bottomLeft.getY()); // p4FromY
396
+ }
397
+
398
+ /**
399
+ * Ends up being a bit faster than Math.round(). This merely rounds its
400
+ * argument to the nearest int, where x.5 rounds up.
401
+ */
402
+ private static int round(float d) {
403
+ return (int) (d + 0.5f);
404
+ }
405
+
406
+ /**
407
+ * @param matrix row of black/white values to search
408
+ * @param column x position to start search
409
+ * @param row y position to start search
410
+ * @param width the number of pixels to search on this row
411
+ * @param pattern pattern of counts of number of black and white pixels that are
412
+ * being searched for as a pattern
413
+ * @return start/end horizontal offset of guard pattern, as an array of two ints.
414
+ */
415
+ private static int[] findGuardPattern(BitMatrix matrix, int column, int row, int width,
416
+ boolean whiteFirst, int[] pattern) {
417
+ int patternLength = pattern.length;
418
+ // TODO: Find a way to cache this array, as this method is called hundreds of times
419
+ // per image, and we want to allocate as seldom as possible.
420
+ int[] counters = new int[patternLength];
421
+ boolean isWhite = whiteFirst;
422
+
423
+ int counterPosition = 0;
424
+ int patternStart = column;
425
+ for (int x = column; x < column + width; x++) {
426
+ boolean pixel = matrix.get(x, row);
427
+ if (pixel ^ isWhite) {
428
+ counters[counterPosition]++;
429
+ } else {
430
+ if (counterPosition == patternLength - 1) {
431
+ if (patternMatchVariance(counters, pattern, MAX_INDIVIDUAL_VARIANCE) < MAX_AVG_VARIANCE) {
432
+ return new int[]{patternStart, x};
433
+ }
434
+ patternStart += counters[0] + counters[1];
435
+ for (int y = 2; y < patternLength; y++) {
436
+ counters[y - 2] = counters[y];
437
+ }
438
+ counters[patternLength - 2] = 0;
439
+ counters[patternLength - 1] = 0;
440
+ counterPosition--;
441
+ } else {
442
+ counterPosition++;
443
+ }
444
+ counters[counterPosition] = 1;
445
+ isWhite = !isWhite;
446
+ }
447
+ }
448
+ return null;
449
+ }
450
+
451
+ /**
452
+ * Determines how closely a set of observed counts of runs of black/white
453
+ * values matches a given target pattern. This is reported as the ratio of
454
+ * the total variance from the expected pattern proportions across all
455
+ * pattern elements, to the length of the pattern.
456
+ *
457
+ * @param counters observed counters
458
+ * @param pattern expected pattern
459
+ * @param maxIndividualVariance The most any counter can differ before we give up
460
+ * @return ratio of total variance between counters and pattern compared to
461
+ * total pattern size, where the ratio has been multiplied by 256.
462
+ * So, 0 means no variance (perfect match); 256 means the total
463
+ * variance between counters and patterns equals the pattern length,
464
+ * higher values mean even more variance
465
+ */
466
+ private static int patternMatchVariance(int[] counters, int[] pattern, int maxIndividualVariance) {
467
+ int numCounters = counters.length;
468
+ int total = 0;
469
+ int patternLength = 0;
470
+ for (int i = 0; i < numCounters; i++) {
471
+ total += counters[i];
472
+ patternLength += pattern[i];
473
+ }
474
+ if (total < patternLength) {
475
+ // If we don't even have one pixel per unit of bar width, assume this
476
+ // is too small to reliably match, so fail:
477
+ return Integer.MAX_VALUE;
478
+ }
479
+ // We're going to fake floating-point math in integers. We just need to use more bits.
480
+ // Scale up patternLength so that intermediate values below like scaledCounter will have
481
+ // more "significant digits".
482
+ int unitBarWidth = (total << 8) / patternLength;
483
+ maxIndividualVariance = (maxIndividualVariance * unitBarWidth) >> 8;
484
+
485
+ int totalVariance = 0;
486
+ for (int x = 0; x < numCounters; x++) {
487
+ int counter = counters[x] << 8;
488
+ int scaledPattern = pattern[x] * unitBarWidth;
489
+ int variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter;
490
+ if (variance > maxIndividualVariance) {
491
+ return Integer.MAX_VALUE;
492
+ }
493
+ totalVariance += variance;
494
+ }
495
+ return totalVariance / total;
496
+ }
497
+
498
+ }