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,75 @@
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.BinaryBitmap;
21
+ import com.google.zxing.ChecksumException;
22
+ import com.google.zxing.FormatException;
23
+ import com.google.zxing.NotFoundException;
24
+ import com.google.zxing.Result;
25
+ import com.google.zxing.common.BitArray;
26
+
27
+ import java.util.Hashtable;
28
+
29
+ /**
30
+ * <p>Implements decoding of the UPC-A format.</p>
31
+ *
32
+ * @author dswitkin@google.com (Daniel Switkin)
33
+ * @author Sean Owen
34
+ */
35
+ public final class UPCAReader extends UPCEANReader {
36
+
37
+ private final UPCEANReader ean13Reader = new EAN13Reader();
38
+
39
+ public Result decodeRow(int rowNumber, BitArray row, int[] startGuardRange, Hashtable hints)
40
+ throws NotFoundException, FormatException, ChecksumException {
41
+ return maybeReturnResult(ean13Reader.decodeRow(rowNumber, row, startGuardRange, hints));
42
+ }
43
+
44
+ public Result decodeRow(int rowNumber, BitArray row, Hashtable hints)
45
+ throws NotFoundException, FormatException, ChecksumException {
46
+ return maybeReturnResult(ean13Reader.decodeRow(rowNumber, row, hints));
47
+ }
48
+
49
+ public Result decode(BinaryBitmap image) throws NotFoundException, FormatException {
50
+ return maybeReturnResult(ean13Reader.decode(image));
51
+ }
52
+
53
+ public Result decode(BinaryBitmap image, Hashtable hints) throws NotFoundException, FormatException {
54
+ return maybeReturnResult(ean13Reader.decode(image, hints));
55
+ }
56
+
57
+ BarcodeFormat getBarcodeFormat() {
58
+ return BarcodeFormat.UPC_A;
59
+ }
60
+
61
+ protected int decodeMiddle(BitArray row, int[] startRange, StringBuffer resultString)
62
+ throws NotFoundException {
63
+ return ean13Reader.decodeMiddle(row, startRange, resultString);
64
+ }
65
+
66
+ private static Result maybeReturnResult(Result result) throws FormatException {
67
+ String text = result.getText();
68
+ if (text.charAt(0) == '0') {
69
+ return new Result(text.substring(1), null, result.getResultPoints(), BarcodeFormat.UPC_A);
70
+ } else {
71
+ throw FormatException.getFormatInstance();
72
+ }
73
+ }
74
+
75
+ }
@@ -0,0 +1,186 @@
1
+ /*
2
+ * Copyright (C) 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
+
21
+ import com.google.zxing.BarcodeFormat;
22
+ import com.google.zxing.NotFoundException;
23
+ import com.google.zxing.Result;
24
+ import com.google.zxing.ResultMetadataType;
25
+ import com.google.zxing.ResultPoint;
26
+ import com.google.zxing.common.BitArray;
27
+
28
+ final class UPCEANExtensionSupport {
29
+
30
+ private static final int[] EXTENSION_START_PATTERN = {1,1,2};
31
+ private static final int[] CHECK_DIGIT_ENCODINGS = {
32
+ 0x18, 0x14, 0x12, 0x11, 0x0C, 0x06, 0x03, 0x0A, 0x09, 0x05
33
+ };
34
+
35
+ private final int[] decodeMiddleCounters = new int[4];
36
+ private final StringBuffer decodeRowStringBuffer = new StringBuffer();
37
+
38
+ Result decodeRow(int rowNumber, BitArray row, int rowOffset) throws NotFoundException {
39
+
40
+ int[] extensionStartRange = UPCEANReader.findGuardPattern(row, rowOffset, false, EXTENSION_START_PATTERN);
41
+
42
+ StringBuffer result = decodeRowStringBuffer;
43
+ result.setLength(0);
44
+ int end = decodeMiddle(row, extensionStartRange, result);
45
+
46
+ String resultString = result.toString();
47
+ Hashtable extensionData = parseExtensionString(resultString);
48
+
49
+ Result extensionResult =
50
+ new Result(resultString,
51
+ null,
52
+ new ResultPoint[] {
53
+ new ResultPoint((extensionStartRange[0] + extensionStartRange[1]) / 2.0f, (float) rowNumber),
54
+ new ResultPoint((float) end, (float) rowNumber),
55
+ },
56
+ BarcodeFormat.UPC_EAN_EXTENSION);
57
+ if (extensionData != null) {
58
+ extensionResult.putAllMetadata(extensionData);
59
+ }
60
+ return extensionResult;
61
+ }
62
+
63
+ int decodeMiddle(BitArray row, int[] startRange, StringBuffer resultString) throws NotFoundException {
64
+ int[] counters = decodeMiddleCounters;
65
+ counters[0] = 0;
66
+ counters[1] = 0;
67
+ counters[2] = 0;
68
+ counters[3] = 0;
69
+ int end = row.getSize();
70
+ int rowOffset = startRange[1];
71
+
72
+ int lgPatternFound = 0;
73
+
74
+ for (int x = 0; x < 5 && rowOffset < end; x++) {
75
+ int bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_AND_G_PATTERNS);
76
+ resultString.append((char) ('0' + bestMatch % 10));
77
+ for (int i = 0; i < counters.length; i++) {
78
+ rowOffset += counters[i];
79
+ }
80
+ if (bestMatch >= 10) {
81
+ lgPatternFound |= 1 << (4 - x);
82
+ }
83
+ if (x != 4) {
84
+ // Read off separator if not last
85
+ while (rowOffset < end && !row.get(rowOffset)) {
86
+ rowOffset++;
87
+ }
88
+ while (rowOffset < end && row.get(rowOffset)) {
89
+ rowOffset++;
90
+ }
91
+ }
92
+ }
93
+
94
+ if (resultString.length() != 5) {
95
+ throw NotFoundException.getNotFoundInstance();
96
+ }
97
+
98
+ int checkDigit = determineCheckDigit(lgPatternFound);
99
+ if (extensionChecksum(resultString.toString()) != checkDigit) {
100
+ throw NotFoundException.getNotFoundInstance();
101
+ }
102
+
103
+ return rowOffset;
104
+ }
105
+
106
+ private static int extensionChecksum(String s) {
107
+ int length = s.length();
108
+ int sum = 0;
109
+ for (int i = length - 2; i >= 0; i -= 2) {
110
+ sum += (int) s.charAt(i) - (int) '0';
111
+ }
112
+ sum *= 3;
113
+ for (int i = length - 1; i >= 0; i -= 2) {
114
+ sum += (int) s.charAt(i) - (int) '0';
115
+ }
116
+ sum *= 3;
117
+ return sum % 10;
118
+ }
119
+
120
+ private static int determineCheckDigit(int lgPatternFound)
121
+ throws NotFoundException {
122
+ for (int d = 0; d < 10; d++) {
123
+ if (lgPatternFound == CHECK_DIGIT_ENCODINGS[d]) {
124
+ return d;
125
+ }
126
+ }
127
+ throw NotFoundException.getNotFoundInstance();
128
+ }
129
+
130
+ /**
131
+ * @param raw raw content of extension
132
+ * @return formatted interpretation of raw content as a {@link Hashtable} mapping
133
+ * one {@link ResultMetadataType} to appropriate value, or <code>null</code> if not known
134
+ */
135
+ private static Hashtable parseExtensionString(String raw) {
136
+ ResultMetadataType type;
137
+ Object value;
138
+ switch (raw.length()) {
139
+ case 2:
140
+ type = ResultMetadataType.ISSUE_NUMBER;
141
+ value = parseExtension2String(raw);
142
+ break;
143
+ case 5:
144
+ type = ResultMetadataType.SUGGESTED_PRICE;
145
+ value = parseExtension5String(raw);
146
+ break;
147
+ default:
148
+ return null;
149
+ }
150
+ if (value == null) {
151
+ return null;
152
+ }
153
+ Hashtable result = new Hashtable(1);
154
+ result.put(type, value);
155
+ return result;
156
+ }
157
+
158
+ private static Integer parseExtension2String(String raw) {
159
+ return Integer.valueOf(raw);
160
+ }
161
+
162
+ private static String parseExtension5String(String raw) {
163
+ String currency = null;
164
+ switch (raw.charAt(0)) {
165
+ case '0':
166
+ currency = "£";
167
+ break;
168
+ case '5':
169
+ currency = "$";
170
+ break;
171
+ case '9':
172
+ if ("99991".equals(raw)) {
173
+ return "0.00";
174
+ } else if ("99990".equals(raw)) {
175
+ return "Used";
176
+ }
177
+ break;
178
+ default:
179
+ currency = "";
180
+ break;
181
+ }
182
+ int rawAmount = Integer.parseInt(raw.substring(1));
183
+ return currency + (rawAmount / 100) + '.' + (rawAmount % 100);
184
+ }
185
+
186
+ }
@@ -0,0 +1,355 @@
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.ChecksumException;
21
+ import com.google.zxing.DecodeHintType;
22
+ import com.google.zxing.FormatException;
23
+ import com.google.zxing.NotFoundException;
24
+ import com.google.zxing.ReaderException;
25
+ import com.google.zxing.Result;
26
+ import com.google.zxing.ResultMetadataType;
27
+ import com.google.zxing.ResultPoint;
28
+ import com.google.zxing.ResultPointCallback;
29
+ import com.google.zxing.common.BitArray;
30
+
31
+ import java.util.Hashtable;
32
+
33
+ /**
34
+ * <p>Encapsulates functionality and implementation that is common to UPC and EAN families
35
+ * of one-dimensional barcodes.</p>
36
+ *
37
+ * @author dswitkin@google.com (Daniel Switkin)
38
+ * @author Sean Owen
39
+ * @author alasdair@google.com (Alasdair Mackintosh)
40
+ */
41
+ public abstract class UPCEANReader extends OneDReader {
42
+
43
+ // These two values are critical for determining how permissive the decoding will be.
44
+ // We've arrived at these values through a lot of trial and error. Setting them any higher
45
+ // lets false positives creep in quickly.
46
+ private static final int MAX_AVG_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.42f);
47
+ private static final int MAX_INDIVIDUAL_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.7f);
48
+
49
+ /**
50
+ * Start/end guard pattern.
51
+ */
52
+ static final int[] START_END_PATTERN = {1, 1, 1,};
53
+
54
+ /**
55
+ * Pattern marking the middle of a UPC/EAN pattern, separating the two halves.
56
+ */
57
+ static final int[] MIDDLE_PATTERN = {1, 1, 1, 1, 1};
58
+
59
+ /**
60
+ * "Odd", or "L" patterns used to encode UPC/EAN digits.
61
+ */
62
+ static final int[][] L_PATTERNS = {
63
+ {3, 2, 1, 1}, // 0
64
+ {2, 2, 2, 1}, // 1
65
+ {2, 1, 2, 2}, // 2
66
+ {1, 4, 1, 1}, // 3
67
+ {1, 1, 3, 2}, // 4
68
+ {1, 2, 3, 1}, // 5
69
+ {1, 1, 1, 4}, // 6
70
+ {1, 3, 1, 2}, // 7
71
+ {1, 2, 1, 3}, // 8
72
+ {3, 1, 1, 2} // 9
73
+ };
74
+
75
+ /**
76
+ * As above but also including the "even", or "G" patterns used to encode UPC/EAN digits.
77
+ */
78
+ static final int[][] L_AND_G_PATTERNS;
79
+
80
+ static {
81
+ L_AND_G_PATTERNS = new int[20][];
82
+ for (int i = 0; i < 10; i++) {
83
+ L_AND_G_PATTERNS[i] = L_PATTERNS[i];
84
+ }
85
+ for (int i = 10; i < 20; i++) {
86
+ int[] widths = L_PATTERNS[i - 10];
87
+ int[] reversedWidths = new int[widths.length];
88
+ for (int j = 0; j < widths.length; j++) {
89
+ reversedWidths[j] = widths[widths.length - j - 1];
90
+ }
91
+ L_AND_G_PATTERNS[i] = reversedWidths;
92
+ }
93
+ }
94
+
95
+ private final StringBuffer decodeRowStringBuffer;
96
+ private final UPCEANExtensionSupport extensionReader;
97
+ private final EANManufacturerOrgSupport eanManSupport;
98
+
99
+ protected UPCEANReader() {
100
+ decodeRowStringBuffer = new StringBuffer(20);
101
+ extensionReader = new UPCEANExtensionSupport();
102
+ eanManSupport = new EANManufacturerOrgSupport();
103
+ }
104
+
105
+ static int[] findStartGuardPattern(BitArray row) throws NotFoundException {
106
+ boolean foundStart = false;
107
+ int[] startRange = null;
108
+ int nextStart = 0;
109
+ while (!foundStart) {
110
+ startRange = findGuardPattern(row, nextStart, false, START_END_PATTERN);
111
+ int start = startRange[0];
112
+ nextStart = startRange[1];
113
+ // Make sure there is a quiet zone at least as big as the start pattern before the barcode.
114
+ // If this check would run off the left edge of the image, do not accept this barcode,
115
+ // as it is very likely to be a false positive.
116
+ int quietStart = start - (nextStart - start);
117
+ if (quietStart >= 0) {
118
+ foundStart = row.isRange(quietStart, start, false);
119
+ }
120
+ }
121
+ return startRange;
122
+ }
123
+
124
+ public Result decodeRow(int rowNumber, BitArray row, Hashtable hints)
125
+ throws NotFoundException, ChecksumException, FormatException {
126
+ return decodeRow(rowNumber, row, findStartGuardPattern(row), hints);
127
+ }
128
+
129
+ /**
130
+ * <p>Like {@link #decodeRow(int, BitArray, java.util.Hashtable)}, but
131
+ * allows caller to inform method about where the UPC/EAN start pattern is
132
+ * found. This allows this to be computed once and reused across many implementations.</p>
133
+ */
134
+ public Result decodeRow(int rowNumber, BitArray row, int[] startGuardRange, Hashtable hints)
135
+ throws NotFoundException, ChecksumException, FormatException {
136
+
137
+ ResultPointCallback resultPointCallback = hints == null ? null :
138
+ (ResultPointCallback) hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK);
139
+
140
+ if (resultPointCallback != null) {
141
+ resultPointCallback.foundPossibleResultPoint(new ResultPoint(
142
+ (startGuardRange[0] + startGuardRange[1]) / 2.0f, rowNumber
143
+ ));
144
+ }
145
+
146
+ StringBuffer result = decodeRowStringBuffer;
147
+ result.setLength(0);
148
+ int endStart = decodeMiddle(row, startGuardRange, result);
149
+
150
+ if (resultPointCallback != null) {
151
+ resultPointCallback.foundPossibleResultPoint(new ResultPoint(
152
+ endStart, rowNumber
153
+ ));
154
+ }
155
+
156
+ int[] endRange = decodeEnd(row, endStart);
157
+
158
+ if (resultPointCallback != null) {
159
+ resultPointCallback.foundPossibleResultPoint(new ResultPoint(
160
+ (endRange[0] + endRange[1]) / 2.0f, rowNumber
161
+ ));
162
+ }
163
+
164
+
165
+ // Make sure there is a quiet zone at least as big as the end pattern after the barcode. The
166
+ // spec might want more whitespace, but in practice this is the maximum we can count on.
167
+ int end = endRange[1];
168
+ int quietEnd = end + (end - endRange[0]);
169
+ if (quietEnd >= row.getSize() || !row.isRange(end, quietEnd, false)) {
170
+ throw NotFoundException.getNotFoundInstance();
171
+ }
172
+
173
+ String resultString = result.toString();
174
+ if (!checkChecksum(resultString)) {
175
+ throw ChecksumException.getChecksumInstance();
176
+ }
177
+
178
+ float left = (float) (startGuardRange[1] + startGuardRange[0]) / 2.0f;
179
+ float right = (float) (endRange[1] + endRange[0]) / 2.0f;
180
+ BarcodeFormat format = getBarcodeFormat();
181
+ Result decodeResult = new Result(resultString,
182
+ null, // no natural byte representation for these barcodes
183
+ new ResultPoint[]{
184
+ new ResultPoint(left, (float) rowNumber),
185
+ new ResultPoint(right, (float) rowNumber)},
186
+ format);
187
+
188
+ try {
189
+ Result extensionResult = extensionReader.decodeRow(rowNumber, row, endRange[1]);
190
+ decodeResult.putAllMetadata(extensionResult.getResultMetadata());
191
+ decodeResult.addResultPoints(extensionResult.getResultPoints());
192
+ } catch (ReaderException re) {
193
+ // continue
194
+ }
195
+
196
+ if (BarcodeFormat.EAN_13.equals(format) || BarcodeFormat.UPC_A.equals(format)) {
197
+ String countryID = eanManSupport.lookupCountryIdentifier(resultString);
198
+ if (countryID != null) {
199
+ decodeResult.putMetadata(ResultMetadataType.POSSIBLE_COUNTRY, countryID);
200
+ }
201
+ }
202
+
203
+ return decodeResult;
204
+ }
205
+
206
+ /**
207
+ * @return {@link #checkStandardUPCEANChecksum(String)}
208
+ */
209
+ boolean checkChecksum(String s) throws ChecksumException, FormatException {
210
+ return checkStandardUPCEANChecksum(s);
211
+ }
212
+
213
+ /**
214
+ * Computes the UPC/EAN checksum on a string of digits, and reports
215
+ * whether the checksum is correct or not.
216
+ *
217
+ * @param s string of digits to check
218
+ * @return true iff string of digits passes the UPC/EAN checksum algorithm
219
+ * @throws FormatException if the string does not contain only digits
220
+ */
221
+ private static boolean checkStandardUPCEANChecksum(String s) throws FormatException {
222
+ int length = s.length();
223
+ if (length == 0) {
224
+ return false;
225
+ }
226
+
227
+ int sum = 0;
228
+ for (int i = length - 2; i >= 0; i -= 2) {
229
+ int digit = (int) s.charAt(i) - (int) '0';
230
+ if (digit < 0 || digit > 9) {
231
+ throw FormatException.getFormatInstance();
232
+ }
233
+ sum += digit;
234
+ }
235
+ sum *= 3;
236
+ for (int i = length - 1; i >= 0; i -= 2) {
237
+ int digit = (int) s.charAt(i) - (int) '0';
238
+ if (digit < 0 || digit > 9) {
239
+ throw FormatException.getFormatInstance();
240
+ }
241
+ sum += digit;
242
+ }
243
+ return sum % 10 == 0;
244
+ }
245
+
246
+ int[] decodeEnd(BitArray row, int endStart) throws NotFoundException {
247
+ return findGuardPattern(row, endStart, false, START_END_PATTERN);
248
+ }
249
+
250
+ /**
251
+ * @param row row of black/white values to search
252
+ * @param rowOffset position to start search
253
+ * @param whiteFirst if true, indicates that the pattern specifies white/black/white/...
254
+ * pixel counts, otherwise, it is interpreted as black/white/black/...
255
+ * @param pattern pattern of counts of number of black and white pixels that are being
256
+ * searched for as a pattern
257
+ * @return start/end horizontal offset of guard pattern, as an array of two ints
258
+ * @throws NotFoundException if pattern is not found
259
+ */
260
+ static int[] findGuardPattern(BitArray row, int rowOffset, boolean whiteFirst, int[] pattern)
261
+ throws NotFoundException {
262
+ int patternLength = pattern.length;
263
+ int[] counters = new int[patternLength];
264
+ int width = row.getSize();
265
+ boolean isWhite = false;
266
+ while (rowOffset < width) {
267
+ isWhite = !row.get(rowOffset);
268
+ if (whiteFirst == isWhite) {
269
+ break;
270
+ }
271
+ rowOffset++;
272
+ }
273
+
274
+ int counterPosition = 0;
275
+ int patternStart = rowOffset;
276
+ for (int x = rowOffset; x < width; x++) {
277
+ boolean pixel = row.get(x);
278
+ if (pixel ^ isWhite) {
279
+ counters[counterPosition]++;
280
+ } else {
281
+ if (counterPosition == patternLength - 1) {
282
+ if (patternMatchVariance(counters, pattern, MAX_INDIVIDUAL_VARIANCE) < MAX_AVG_VARIANCE) {
283
+ return new int[]{patternStart, x};
284
+ }
285
+ patternStart += counters[0] + counters[1];
286
+ for (int y = 2; y < patternLength; y++) {
287
+ counters[y - 2] = counters[y];
288
+ }
289
+ counters[patternLength - 2] = 0;
290
+ counters[patternLength - 1] = 0;
291
+ counterPosition--;
292
+ } else {
293
+ counterPosition++;
294
+ }
295
+ counters[counterPosition] = 1;
296
+ isWhite = !isWhite;
297
+ }
298
+ }
299
+ throw NotFoundException.getNotFoundInstance();
300
+ }
301
+
302
+ /**
303
+ * Attempts to decode a single UPC/EAN-encoded digit.
304
+ *
305
+ * @param row row of black/white values to decode
306
+ * @param counters the counts of runs of observed black/white/black/... values
307
+ * @param rowOffset horizontal offset to start decoding from
308
+ * @param patterns the set of patterns to use to decode -- sometimes different encodings
309
+ * for the digits 0-9 are used, and this indicates the encodings for 0 to 9 that should
310
+ * be used
311
+ * @return horizontal offset of first pixel beyond the decoded digit
312
+ * @throws NotFoundException if digit cannot be decoded
313
+ */
314
+ static int decodeDigit(BitArray row, int[] counters, int rowOffset, int[][] patterns)
315
+ throws NotFoundException {
316
+ recordPattern(row, rowOffset, counters);
317
+ int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept
318
+ int bestMatch = -1;
319
+ int max = patterns.length;
320
+ for (int i = 0; i < max; i++) {
321
+ int[] pattern = patterns[i];
322
+ int variance = patternMatchVariance(counters, pattern, MAX_INDIVIDUAL_VARIANCE);
323
+ if (variance < bestVariance) {
324
+ bestVariance = variance;
325
+ bestMatch = i;
326
+ }
327
+ }
328
+ if (bestMatch >= 0) {
329
+ return bestMatch;
330
+ } else {
331
+ throw NotFoundException.getNotFoundInstance();
332
+ }
333
+ }
334
+
335
+ /**
336
+ * Get the format of this decoder.
337
+ *
338
+ * @return The 1D format.
339
+ */
340
+ abstract BarcodeFormat getBarcodeFormat();
341
+
342
+ /**
343
+ * Subclasses override this to decode the portion of a barcode between the start
344
+ * and end guard patterns.
345
+ *
346
+ * @param row row of black/white values to search
347
+ * @param startRange start/end offset of start guard pattern
348
+ * @param resultString {@link StringBuffer} to append decoded chars to
349
+ * @return horizontal offset of first pixel after the "middle" that was decoded
350
+ * @throws NotFoundException if decoding could not complete successfully
351
+ */
352
+ protected abstract int decodeMiddle(BitArray row, int[] startRange, StringBuffer resultString)
353
+ throws NotFoundException;
354
+
355
+ }