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,68 @@
1
+ /*
2
+ * Copyright 2010 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.oned;
18
+
19
+ import java.util.Hashtable;
20
+ import com.google.zxing.BarcodeFormat;
21
+ import com.google.zxing.WriterException;
22
+ import com.google.zxing.common.BitMatrix;
23
+
24
+ /**
25
+ * This object renders a ITF code as a {@link BitMatrix}.
26
+ *
27
+ * @author erik.barbara@gmail.com (Erik Barbara)
28
+ */
29
+ public final class ITFWriter extends UPCEANWriter {
30
+
31
+ public BitMatrix encode(String contents,
32
+ BarcodeFormat format,
33
+ int width,
34
+ int height,
35
+ Hashtable hints) throws WriterException {
36
+ if (format != BarcodeFormat.ITF) {
37
+ throw new IllegalArgumentException("Can only encode ITF, but got " + format);
38
+ }
39
+
40
+ return super.encode(contents, format, width, height, hints);
41
+ }
42
+
43
+ public byte[] encode(String contents) {
44
+ int length = contents.length();
45
+ if (length > 80) {
46
+ throw new IllegalArgumentException(
47
+ "Requested contents should be less than 80 digits long, but got " + length);
48
+ }
49
+ byte[] result = new byte[9 + 9 * length];
50
+ int[] start = {1, 1, 1, 1};
51
+ int pos = appendPattern(result, 0, start, 1);
52
+ for (int i = 0; i < length; i += 2) {
53
+ int one = Character.digit(contents.charAt(i), 10);
54
+ int two = Character.digit(contents.charAt(i+1), 10);
55
+ int[] encoding = new int[18];
56
+ for (int j = 0; j < 5; j++) {
57
+ encoding[(j << 1)] = ITFReader.PATTERNS[one][j];
58
+ encoding[(j << 1) + 1] = ITFReader.PATTERNS[two][j];
59
+ }
60
+ pos += appendPattern(result, pos, encoding, 1);
61
+ }
62
+ int[] end = {3, 1, 1};
63
+ pos += appendPattern(result, pos, end, 1);
64
+
65
+ return result;
66
+ }
67
+
68
+ }
@@ -0,0 +1,109 @@
1
+ /*
2
+ * Copyright 2008 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.oned;
18
+
19
+ import com.google.zxing.BarcodeFormat;
20
+ import com.google.zxing.DecodeHintType;
21
+ import com.google.zxing.NotFoundException;
22
+ import com.google.zxing.Reader;
23
+ import com.google.zxing.ReaderException;
24
+ import com.google.zxing.Result;
25
+ import com.google.zxing.common.BitArray;
26
+ import com.google.zxing.oned.rss.RSS14Reader;
27
+ import com.google.zxing.oned.rss.expanded.RSSExpandedReader;
28
+
29
+ import java.util.Hashtable;
30
+ import java.util.Vector;
31
+
32
+ /**
33
+ * @author dswitkin@google.com (Daniel Switkin)
34
+ * @author Sean Owen
35
+ */
36
+ public final class MultiFormatOneDReader extends OneDReader {
37
+
38
+ private final Vector readers;
39
+
40
+ public MultiFormatOneDReader(Hashtable hints) {
41
+ Vector possibleFormats = hints == null ? null :
42
+ (Vector) hints.get(DecodeHintType.POSSIBLE_FORMATS);
43
+ boolean useCode39CheckDigit = hints != null &&
44
+ hints.get(DecodeHintType.ASSUME_CODE_39_CHECK_DIGIT) != null;
45
+ readers = new Vector();
46
+ if (possibleFormats != null) {
47
+ if (possibleFormats.contains(BarcodeFormat.EAN_13) ||
48
+ possibleFormats.contains(BarcodeFormat.UPC_A) ||
49
+ possibleFormats.contains(BarcodeFormat.EAN_8) ||
50
+ possibleFormats.contains(BarcodeFormat.UPC_E)) {
51
+ readers.addElement(new MultiFormatUPCEANReader(hints));
52
+ }
53
+ if (possibleFormats.contains(BarcodeFormat.CODE_39)) {
54
+ readers.addElement(new Code39Reader(useCode39CheckDigit));
55
+ }
56
+ if (possibleFormats.contains(BarcodeFormat.CODE_93)) {
57
+ readers.addElement(new Code93Reader());
58
+ }
59
+ if (possibleFormats.contains(BarcodeFormat.CODE_128)) {
60
+ readers.addElement(new Code128Reader());
61
+ }
62
+ if (possibleFormats.contains(BarcodeFormat.ITF)) {
63
+ readers.addElement(new ITFReader());
64
+ }
65
+ if (possibleFormats.contains(BarcodeFormat.CODABAR)) {
66
+ readers.addElement(new CodaBarReader());
67
+ }
68
+ if (possibleFormats.contains(BarcodeFormat.RSS14)) {
69
+ readers.addElement(new RSS14Reader());
70
+ }
71
+ if (possibleFormats.contains(BarcodeFormat.RSS_EXPANDED)){
72
+ readers.addElement(new RSSExpandedReader());
73
+ }
74
+ }
75
+ if (readers.isEmpty()) {
76
+ readers.addElement(new MultiFormatUPCEANReader(hints));
77
+ readers.addElement(new Code39Reader());
78
+ //readers.addElement(new CodaBarReader());
79
+ readers.addElement(new Code93Reader());
80
+ readers.addElement(new Code128Reader());
81
+ readers.addElement(new ITFReader());
82
+ readers.addElement(new RSS14Reader());
83
+ readers.addElement(new RSSExpandedReader());
84
+ }
85
+ }
86
+
87
+ public Result decodeRow(int rowNumber, BitArray row, Hashtable hints) throws NotFoundException {
88
+ int size = readers.size();
89
+ for (int i = 0; i < size; i++) {
90
+ OneDReader reader = (OneDReader) readers.elementAt(i);
91
+ try {
92
+ return reader.decodeRow(rowNumber, row, hints);
93
+ } catch (ReaderException re) {
94
+ // continue
95
+ }
96
+ }
97
+
98
+ throw NotFoundException.getNotFoundInstance();
99
+ }
100
+
101
+ public void reset() {
102
+ int size = readers.size();
103
+ for (int i = 0; i < size; i++) {
104
+ Reader reader = (Reader) readers.elementAt(i);
105
+ reader.reset();
106
+ }
107
+ }
108
+
109
+ }
@@ -0,0 +1,113 @@
1
+ /*
2
+ * Copyright 2008 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.oned;
18
+
19
+ import com.google.zxing.BarcodeFormat;
20
+ import com.google.zxing.DecodeHintType;
21
+ import com.google.zxing.NotFoundException;
22
+ import com.google.zxing.Reader;
23
+ import com.google.zxing.ReaderException;
24
+ import com.google.zxing.Result;
25
+ import com.google.zxing.common.BitArray;
26
+
27
+ import java.util.Hashtable;
28
+ import java.util.Vector;
29
+
30
+ /**
31
+ * <p>A reader that can read all available UPC/EAN formats. If a caller wants to try to
32
+ * read all such formats, it is most efficient to use this implementation rather than invoke
33
+ * individual readers.</p>
34
+ *
35
+ * @author Sean Owen
36
+ */
37
+ public final class MultiFormatUPCEANReader extends OneDReader {
38
+
39
+ private final Vector readers;
40
+
41
+ public MultiFormatUPCEANReader(Hashtable hints) {
42
+ Vector possibleFormats = hints == null ? null :
43
+ (Vector) hints.get(DecodeHintType.POSSIBLE_FORMATS);
44
+ readers = new Vector();
45
+ if (possibleFormats != null) {
46
+ if (possibleFormats.contains(BarcodeFormat.EAN_13)) {
47
+ readers.addElement(new EAN13Reader());
48
+ } else if (possibleFormats.contains(BarcodeFormat.UPC_A)) {
49
+ readers.addElement(new UPCAReader());
50
+ }
51
+ if (possibleFormats.contains(BarcodeFormat.EAN_8)) {
52
+ readers.addElement(new EAN8Reader());
53
+ }
54
+ if (possibleFormats.contains(BarcodeFormat.UPC_E)) {
55
+ readers.addElement(new UPCEReader());
56
+ }
57
+ }
58
+ if (readers.isEmpty()) {
59
+ readers.addElement(new EAN13Reader());
60
+ // UPC-A is covered by EAN-13
61
+ readers.addElement(new EAN8Reader());
62
+ readers.addElement(new UPCEReader());
63
+ }
64
+ }
65
+
66
+ public Result decodeRow(int rowNumber, BitArray row, Hashtable hints) throws NotFoundException {
67
+ // Compute this location once and reuse it on multiple implementations
68
+ int[] startGuardPattern = UPCEANReader.findStartGuardPattern(row);
69
+ int size = readers.size();
70
+ for (int i = 0; i < size; i++) {
71
+ UPCEANReader reader = (UPCEANReader) readers.elementAt(i);
72
+ Result result;
73
+ try {
74
+ result = reader.decodeRow(rowNumber, row, startGuardPattern, hints);
75
+ } catch (ReaderException re) {
76
+ continue;
77
+ }
78
+ // Special case: a 12-digit code encoded in UPC-A is identical to a "0"
79
+ // followed by those 12 digits encoded as EAN-13. Each will recognize such a code,
80
+ // UPC-A as a 12-digit string and EAN-13 as a 13-digit string starting with "0".
81
+ // Individually these are correct and their readers will both read such a code
82
+ // and correctly call it EAN-13, or UPC-A, respectively.
83
+ //
84
+ // In this case, if we've been looking for both types, we'd like to call it
85
+ // a UPC-A code. But for efficiency we only run the EAN-13 decoder to also read
86
+ // UPC-A. So we special case it here, and convert an EAN-13 result to a UPC-A
87
+ // result if appropriate.
88
+ //
89
+ // But, don't return UPC-A if UPC-A was not a requested format!
90
+ boolean ean13MayBeUPCA =
91
+ BarcodeFormat.EAN_13.equals(result.getBarcodeFormat()) &&
92
+ result.getText().charAt(0) == '0';
93
+ Vector possibleFormats = hints == null ? null : (Vector) hints.get(DecodeHintType.POSSIBLE_FORMATS);
94
+ boolean canReturnUPCA = possibleFormats == null || possibleFormats.contains(BarcodeFormat.UPC_A);
95
+
96
+ if (ean13MayBeUPCA && canReturnUPCA) {
97
+ return new Result(result.getText().substring(1), null, result.getResultPoints(), BarcodeFormat.UPC_A);
98
+ }
99
+ return result;
100
+ }
101
+
102
+ throw NotFoundException.getNotFoundInstance();
103
+ }
104
+
105
+ public void reset() {
106
+ int size = readers.size();
107
+ for (int i = 0; i < size; i++) {
108
+ Reader reader = (Reader) readers.elementAt(i);
109
+ reader.reset();
110
+ }
111
+ }
112
+
113
+ }
@@ -0,0 +1,297 @@
1
+ /*
2
+ * Copyright 2008 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.oned;
18
+
19
+ import com.google.zxing.BinaryBitmap;
20
+ import com.google.zxing.ChecksumException;
21
+ import com.google.zxing.DecodeHintType;
22
+ import com.google.zxing.FormatException;
23
+ import com.google.zxing.NotFoundException;
24
+ import com.google.zxing.Reader;
25
+ import com.google.zxing.ReaderException;
26
+ import com.google.zxing.Result;
27
+ import com.google.zxing.ResultMetadataType;
28
+ import com.google.zxing.ResultPoint;
29
+ import com.google.zxing.common.BitArray;
30
+
31
+ import java.util.Enumeration;
32
+ import java.util.Hashtable;
33
+
34
+ /**
35
+ * Encapsulates functionality and implementation that is common to all families
36
+ * of one-dimensional barcodes.
37
+ *
38
+ * @author dswitkin@google.com (Daniel Switkin)
39
+ * @author Sean Owen
40
+ */
41
+ public abstract class OneDReader implements Reader {
42
+
43
+ protected static final int INTEGER_MATH_SHIFT = 8;
44
+ protected static final int PATTERN_MATCH_RESULT_SCALE_FACTOR = 1 << INTEGER_MATH_SHIFT;
45
+
46
+ public Result decode(BinaryBitmap image) throws NotFoundException, FormatException {
47
+ return decode(image, null);
48
+ }
49
+
50
+ // Note that we don't try rotation without the try harder flag, even if rotation was supported.
51
+ public Result decode(BinaryBitmap image, Hashtable hints) throws NotFoundException, FormatException {
52
+ try {
53
+ return doDecode(image, hints);
54
+ } catch (NotFoundException nfe) {
55
+ boolean tryHarder = hints != null && hints.containsKey(DecodeHintType.TRY_HARDER);
56
+ if (tryHarder && image.isRotateSupported()) {
57
+ BinaryBitmap rotatedImage = image.rotateCounterClockwise();
58
+ Result result = doDecode(rotatedImage, hints);
59
+ // Record that we found it rotated 90 degrees CCW / 270 degrees CW
60
+ Hashtable metadata = result.getResultMetadata();
61
+ int orientation = 270;
62
+ if (metadata != null && metadata.containsKey(ResultMetadataType.ORIENTATION)) {
63
+ // But if we found it reversed in doDecode(), add in that result here:
64
+ orientation = (orientation +
65
+ ((Integer) metadata.get(ResultMetadataType.ORIENTATION)).intValue()) % 360;
66
+ }
67
+ result.putMetadata(ResultMetadataType.ORIENTATION, new Integer(orientation));
68
+ // Update result points
69
+ ResultPoint[] points = result.getResultPoints();
70
+ int height = rotatedImage.getHeight();
71
+ for (int i = 0; i < points.length; i++) {
72
+ points[i] = new ResultPoint(height - points[i].getY() - 1, points[i].getX());
73
+ }
74
+ return result;
75
+ } else {
76
+ throw nfe;
77
+ }
78
+ }
79
+ }
80
+
81
+ public void reset() {
82
+ // do nothing
83
+ }
84
+
85
+ /**
86
+ * We're going to examine rows from the middle outward, searching alternately above and below the
87
+ * middle, and farther out each time. rowStep is the number of rows between each successive
88
+ * attempt above and below the middle. So we'd scan row middle, then middle - rowStep, then
89
+ * middle + rowStep, then middle - (2 * rowStep), etc.
90
+ * rowStep is bigger as the image is taller, but is always at least 1. We've somewhat arbitrarily
91
+ * decided that moving up and down by about 1/16 of the image is pretty good; we try more of the
92
+ * image if "trying harder".
93
+ *
94
+ * @param image The image to decode
95
+ * @param hints Any hints that were requested
96
+ * @return The contents of the decoded barcode
97
+ * @throws NotFoundException Any spontaneous errors which occur
98
+ */
99
+ private Result doDecode(BinaryBitmap image, Hashtable hints) throws NotFoundException {
100
+ int width = image.getWidth();
101
+ int height = image.getHeight();
102
+ BitArray row = new BitArray(width);
103
+
104
+ int middle = height >> 1;
105
+ boolean tryHarder = hints != null && hints.containsKey(DecodeHintType.TRY_HARDER);
106
+ int rowStep = Math.max(1, height >> (tryHarder ? 8 : 5));
107
+ int maxLines;
108
+ if (tryHarder) {
109
+ maxLines = height; // Look at the whole image, not just the center
110
+ } else {
111
+ maxLines = 15; // 15 rows spaced 1/32 apart is roughly the middle half of the image
112
+ }
113
+
114
+ for (int x = 0; x < maxLines; x++) {
115
+
116
+ // Scanning from the middle out. Determine which row we're looking at next:
117
+ int rowStepsAboveOrBelow = (x + 1) >> 1;
118
+ boolean isAbove = (x & 0x01) == 0; // i.e. is x even?
119
+ int rowNumber = middle + rowStep * (isAbove ? rowStepsAboveOrBelow : -rowStepsAboveOrBelow);
120
+ if (rowNumber < 0 || rowNumber >= height) {
121
+ // Oops, if we run off the top or bottom, stop
122
+ break;
123
+ }
124
+
125
+ // Estimate black point for this row and load it:
126
+ try {
127
+ row = image.getBlackRow(rowNumber, row);
128
+ } catch (NotFoundException nfe) {
129
+ continue;
130
+ }
131
+
132
+ // While we have the image data in a BitArray, it's fairly cheap to reverse it in place to
133
+ // handle decoding upside down barcodes.
134
+ for (int attempt = 0; attempt < 2; attempt++) {
135
+ if (attempt == 1) { // trying again?
136
+ row.reverse(); // reverse the row and continue
137
+ // This means we will only ever draw result points *once* in the life of this method
138
+ // since we want to avoid drawing the wrong points after flipping the row, and,
139
+ // don't want to clutter with noise from every single row scan -- just the scans
140
+ // that start on the center line.
141
+ if (hints != null && hints.containsKey(DecodeHintType.NEED_RESULT_POINT_CALLBACK)) {
142
+ Hashtable newHints = new Hashtable(); // Can't use clone() in J2ME
143
+ Enumeration hintEnum = hints.keys();
144
+ while (hintEnum.hasMoreElements()) {
145
+ Object key = hintEnum.nextElement();
146
+ if (!key.equals(DecodeHintType.NEED_RESULT_POINT_CALLBACK)) {
147
+ newHints.put(key, hints.get(key));
148
+ }
149
+ }
150
+ hints = newHints;
151
+ }
152
+ }
153
+ try {
154
+ // Look for a barcode
155
+ Result result = decodeRow(rowNumber, row, hints);
156
+ // We found our barcode
157
+ if (attempt == 1) {
158
+ // But it was upside down, so note that
159
+ result.putMetadata(ResultMetadataType.ORIENTATION, new Integer(180));
160
+ // And remember to flip the result points horizontally.
161
+ ResultPoint[] points = result.getResultPoints();
162
+ points[0] = new ResultPoint(width - points[0].getX() - 1, points[0].getY());
163
+ points[1] = new ResultPoint(width - points[1].getX() - 1, points[1].getY());
164
+ }
165
+ return result;
166
+ } catch (ReaderException re) {
167
+ // continue -- just couldn't decode this row
168
+ }
169
+ }
170
+ }
171
+
172
+ throw NotFoundException.getNotFoundInstance();
173
+ }
174
+
175
+ /**
176
+ * Records the size of successive runs of white and black pixels in a row, starting at a given point.
177
+ * The values are recorded in the given array, and the number of runs recorded is equal to the size
178
+ * of the array. If the row starts on a white pixel at the given start point, then the first count
179
+ * recorded is the run of white pixels starting from that point; likewise it is the count of a run
180
+ * of black pixels if the row begin on a black pixels at that point.
181
+ *
182
+ * @param row row to count from
183
+ * @param start offset into row to start at
184
+ * @param counters array into which to record counts
185
+ * @throws NotFoundException if counters cannot be filled entirely from row before running out
186
+ * of pixels
187
+ */
188
+ protected static void recordPattern(BitArray row, int start, int[] counters) throws NotFoundException {
189
+ int numCounters = counters.length;
190
+ for (int i = 0; i < numCounters; i++) {
191
+ counters[i] = 0;
192
+ }
193
+ int end = row.getSize();
194
+ if (start >= end) {
195
+ throw NotFoundException.getNotFoundInstance();
196
+ }
197
+ boolean isWhite = !row.get(start);
198
+ int counterPosition = 0;
199
+ int i = start;
200
+ while (i < end) {
201
+ boolean pixel = row.get(i);
202
+ if (pixel ^ isWhite) { // that is, exactly one is true
203
+ counters[counterPosition]++;
204
+ } else {
205
+ counterPosition++;
206
+ if (counterPosition == numCounters) {
207
+ break;
208
+ } else {
209
+ counters[counterPosition] = 1;
210
+ isWhite = !isWhite;
211
+ }
212
+ }
213
+ i++;
214
+ }
215
+ // If we read fully the last section of pixels and filled up our counters -- or filled
216
+ // the last counter but ran off the side of the image, OK. Otherwise, a problem.
217
+ if (!(counterPosition == numCounters || (counterPosition == numCounters - 1 && i == end))) {
218
+ throw NotFoundException.getNotFoundInstance();
219
+ }
220
+ }
221
+
222
+ protected static void recordPatternInReverse(BitArray row, int start, int[] counters)
223
+ throws NotFoundException {
224
+ // This could be more efficient I guess
225
+ int numTransitionsLeft = counters.length;
226
+ boolean last = row.get(start);
227
+ while (start > 0 && numTransitionsLeft >= 0) {
228
+ if (row.get(--start) != last) {
229
+ numTransitionsLeft--;
230
+ last = !last;
231
+ }
232
+ }
233
+ if (numTransitionsLeft >= 0) {
234
+ throw NotFoundException.getNotFoundInstance();
235
+ }
236
+ recordPattern(row, start + 1, counters);
237
+ }
238
+
239
+ /**
240
+ * Determines how closely a set of observed counts of runs of black/white values matches a given
241
+ * target pattern. This is reported as the ratio of the total variance from the expected pattern
242
+ * proportions across all pattern elements, to the length of the pattern.
243
+ *
244
+ * @param counters observed counters
245
+ * @param pattern expected pattern
246
+ * @param maxIndividualVariance The most any counter can differ before we give up
247
+ * @return ratio of total variance between counters and pattern compared to total pattern size,
248
+ * where the ratio has been multiplied by 256. So, 0 means no variance (perfect match); 256 means
249
+ * the total variance between counters and patterns equals the pattern length, higher values mean
250
+ * even more variance
251
+ */
252
+ protected static int patternMatchVariance(int[] counters, int[] pattern, int maxIndividualVariance) {
253
+ int numCounters = counters.length;
254
+ int total = 0;
255
+ int patternLength = 0;
256
+ for (int i = 0; i < numCounters; i++) {
257
+ total += counters[i];
258
+ patternLength += pattern[i];
259
+ }
260
+ if (total < patternLength) {
261
+ // If we don't even have one pixel per unit of bar width, assume this is too small
262
+ // to reliably match, so fail:
263
+ return Integer.MAX_VALUE;
264
+ }
265
+ // We're going to fake floating-point math in integers. We just need to use more bits.
266
+ // Scale up patternLength so that intermediate values below like scaledCounter will have
267
+ // more "significant digits"
268
+ int unitBarWidth = (total << INTEGER_MATH_SHIFT) / patternLength;
269
+ maxIndividualVariance = (maxIndividualVariance * unitBarWidth) >> INTEGER_MATH_SHIFT;
270
+
271
+ int totalVariance = 0;
272
+ for (int x = 0; x < numCounters; x++) {
273
+ int counter = counters[x] << INTEGER_MATH_SHIFT;
274
+ int scaledPattern = pattern[x] * unitBarWidth;
275
+ int variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter;
276
+ if (variance > maxIndividualVariance) {
277
+ return Integer.MAX_VALUE;
278
+ }
279
+ totalVariance += variance;
280
+ }
281
+ return totalVariance / total;
282
+ }
283
+
284
+ /**
285
+ * <p>Attempts to decode a one-dimensional barcode format given a single row of
286
+ * an image.</p>
287
+ *
288
+ * @param rowNumber row number from top of the row
289
+ * @param row the black/white pixel data of the row
290
+ * @param hints decode hints
291
+ * @return {@link Result} containing encoded string and start/end of barcode
292
+ * @throws NotFoundException if an error occurs or barcode cannot be found
293
+ */
294
+ public abstract Result decodeRow(int rowNumber, BitArray row, Hashtable hints)
295
+ throws NotFoundException, ChecksumException, FormatException;
296
+
297
+ }