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,118 @@
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.datamatrix.decoder;
18
+
19
+ /**
20
+ * <p>Encapsulates a block of data within a Data Matrix Code. Data Matrix Codes may split their data into
21
+ * multiple blocks, each of which is a unit of data and error-correction codewords. Each
22
+ * is represented by an instance of this class.</p>
23
+ *
24
+ * @author bbrown@google.com (Brian Brown)
25
+ */
26
+ final class DataBlock {
27
+
28
+ private final int numDataCodewords;
29
+ private final byte[] codewords;
30
+
31
+ private DataBlock(int numDataCodewords, byte[] codewords) {
32
+ this.numDataCodewords = numDataCodewords;
33
+ this.codewords = codewords;
34
+ }
35
+
36
+ /**
37
+ * <p>When Data Matrix Codes use multiple data blocks, they actually interleave the bytes of each of them.
38
+ * That is, the first byte of data block 1 to n is written, then the second bytes, and so on. This
39
+ * method will separate the data into original blocks.</p>
40
+ *
41
+ * @param rawCodewords bytes as read directly from the Data Matrix Code
42
+ * @param version version of the Data Matrix Code
43
+ * @return {@link DataBlock}s containing original bytes, "de-interleaved" from representation in the
44
+ * Data Matrix Code
45
+ */
46
+ static DataBlock[] getDataBlocks(byte[] rawCodewords,
47
+ Version version) {
48
+ // Figure out the number and size of data blocks used by this version
49
+ Version.ECBlocks ecBlocks = version.getECBlocks();
50
+
51
+ // First count the total number of data blocks
52
+ int totalBlocks = 0;
53
+ Version.ECB[] ecBlockArray = ecBlocks.getECBlocks();
54
+ for (int i = 0; i < ecBlockArray.length; i++) {
55
+ totalBlocks += ecBlockArray[i].getCount();
56
+ }
57
+
58
+ // Now establish DataBlocks of the appropriate size and number of data codewords
59
+ DataBlock[] result = new DataBlock[totalBlocks];
60
+ int numResultBlocks = 0;
61
+ for (int j = 0; j < ecBlockArray.length; j++) {
62
+ Version.ECB ecBlock = ecBlockArray[j];
63
+ for (int i = 0; i < ecBlock.getCount(); i++) {
64
+ int numDataCodewords = ecBlock.getDataCodewords();
65
+ int numBlockCodewords = ecBlocks.getECCodewords() + numDataCodewords;
66
+ result[numResultBlocks++] = new DataBlock(numDataCodewords, new byte[numBlockCodewords]);
67
+ }
68
+ }
69
+
70
+ // All blocks have the same amount of data, except that the last n
71
+ // (where n may be 0) have 1 less byte. Figure out where these start.
72
+ // TODO(bbrown): There is only one case where there is a difference for Data Matrix for size 144
73
+ int longerBlocksTotalCodewords = result[0].codewords.length;
74
+ //int shorterBlocksTotalCodewords = longerBlocksTotalCodewords - 1;
75
+
76
+ int longerBlocksNumDataCodewords = longerBlocksTotalCodewords - ecBlocks.getECCodewords();
77
+ int shorterBlocksNumDataCodewords = longerBlocksNumDataCodewords - 1;
78
+ // The last elements of result may be 1 element shorter for 144 matrix
79
+ // first fill out as many elements as all of them have minus 1
80
+ int rawCodewordsOffset = 0;
81
+ for (int i = 0; i < shorterBlocksNumDataCodewords; i++) {
82
+ for (int j = 0; j < numResultBlocks; j++) {
83
+ result[j].codewords[i] = rawCodewords[rawCodewordsOffset++];
84
+ }
85
+ }
86
+
87
+ // Fill out the last data block in the longer ones
88
+ boolean specialVersion = version.getVersionNumber() == 24;
89
+ int numLongerBlocks = specialVersion ? 8 : numResultBlocks;
90
+ for (int j = 0; j < numLongerBlocks; j++) {
91
+ result[j].codewords[longerBlocksNumDataCodewords - 1] = rawCodewords[rawCodewordsOffset++];
92
+ }
93
+
94
+ // Now add in error correction blocks
95
+ int max = result[0].codewords.length;
96
+ for (int i = longerBlocksNumDataCodewords; i < max; i++) {
97
+ for (int j = 0; j < numResultBlocks; j++) {
98
+ int iOffset = (specialVersion && j > 7) ? i - 1 : i;
99
+ result[j].codewords[iOffset] = rawCodewords[rawCodewordsOffset++];
100
+ }
101
+ }
102
+
103
+ if (rawCodewordsOffset != rawCodewords.length) {
104
+ throw new IllegalArgumentException();
105
+ }
106
+
107
+ return result;
108
+ }
109
+
110
+ int getNumDataCodewords() {
111
+ return numDataCodewords;
112
+ }
113
+
114
+ byte[] getCodewords() {
115
+ return codewords;
116
+ }
117
+
118
+ }
@@ -0,0 +1,462 @@
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.datamatrix.decoder;
18
+
19
+ import com.google.zxing.FormatException;
20
+ import com.google.zxing.common.BitSource;
21
+ import com.google.zxing.common.DecoderResult;
22
+
23
+ import java.io.UnsupportedEncodingException;
24
+ import java.util.Vector;
25
+
26
+ /**
27
+ * <p>Data Matrix Codes can encode text as bits in one of several modes, and can use multiple modes
28
+ * in one Data Matrix Code. This class decodes the bits back into text.</p>
29
+ *
30
+ * <p>See ISO 16022:2006, 5.2.1 - 5.2.9.2</p>
31
+ *
32
+ * @author bbrown@google.com (Brian Brown)
33
+ * @author Sean Owen
34
+ */
35
+ final class DecodedBitStreamParser {
36
+
37
+ /**
38
+ * See ISO 16022:2006, Annex C Table C.1
39
+ * The C40 Basic Character Set (*'s used for placeholders for the shift values)
40
+ */
41
+ private static final char[] C40_BASIC_SET_CHARS = {
42
+ '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
43
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
44
+ 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
45
+ };
46
+
47
+ private static final char[] C40_SHIFT2_SET_CHARS = {
48
+ '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.',
49
+ '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_'
50
+ };
51
+
52
+ /**
53
+ * See ISO 16022:2006, Annex C Table C.2
54
+ * The Text Basic Character Set (*'s used for placeholders for the shift values)
55
+ */
56
+ private static final char[] TEXT_BASIC_SET_CHARS = {
57
+ '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
58
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
59
+ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
60
+ };
61
+
62
+ private static final char[] TEXT_SHIFT3_SET_CHARS = {
63
+ '\'', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
64
+ 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '{', '|', '}', '~', (char) 127
65
+ };
66
+
67
+ private static final int PAD_ENCODE = 0; // Not really an encoding
68
+ private static final int ASCII_ENCODE = 1;
69
+ private static final int C40_ENCODE = 2;
70
+ private static final int TEXT_ENCODE = 3;
71
+ private static final int ANSIX12_ENCODE = 4;
72
+ private static final int EDIFACT_ENCODE = 5;
73
+ private static final int BASE256_ENCODE = 6;
74
+
75
+ private DecodedBitStreamParser() {
76
+ }
77
+
78
+ static DecoderResult decode(byte[] bytes) throws FormatException {
79
+ BitSource bits = new BitSource(bytes);
80
+ StringBuffer result = new StringBuffer(100);
81
+ StringBuffer resultTrailer = new StringBuffer(0);
82
+ Vector byteSegments = new Vector(1);
83
+ int mode = ASCII_ENCODE;
84
+ do {
85
+ if (mode == ASCII_ENCODE) {
86
+ mode = decodeAsciiSegment(bits, result, resultTrailer);
87
+ } else {
88
+ switch (mode) {
89
+ case C40_ENCODE:
90
+ decodeC40Segment(bits, result);
91
+ break;
92
+ case TEXT_ENCODE:
93
+ decodeTextSegment(bits, result);
94
+ break;
95
+ case ANSIX12_ENCODE:
96
+ decodeAnsiX12Segment(bits, result);
97
+ break;
98
+ case EDIFACT_ENCODE:
99
+ decodeEdifactSegment(bits, result);
100
+ break;
101
+ case BASE256_ENCODE:
102
+ decodeBase256Segment(bits, result, byteSegments);
103
+ break;
104
+ default:
105
+ throw FormatException.getFormatInstance();
106
+ }
107
+ mode = ASCII_ENCODE;
108
+ }
109
+ } while (mode != PAD_ENCODE && bits.available() > 0);
110
+ if (resultTrailer.length() > 0) {
111
+ result.append(resultTrailer.toString());
112
+ }
113
+ return new DecoderResult(bytes, result.toString(), byteSegments.isEmpty() ? null : byteSegments, null);
114
+ }
115
+
116
+ /**
117
+ * See ISO 16022:2006, 5.2.3 and Annex C, Table C.2
118
+ */
119
+ private static int decodeAsciiSegment(BitSource bits, StringBuffer result, StringBuffer resultTrailer)
120
+ throws FormatException {
121
+ boolean upperShift = false;
122
+ do {
123
+ int oneByte = bits.readBits(8);
124
+ if (oneByte == 0) {
125
+ throw FormatException.getFormatInstance();
126
+ } else if (oneByte <= 128) { // ASCII data (ASCII value + 1)
127
+ oneByte = upperShift ? (oneByte + 128) : oneByte;
128
+ upperShift = false;
129
+ result.append((char) (oneByte - 1));
130
+ return ASCII_ENCODE;
131
+ } else if (oneByte == 129) { // Pad
132
+ return PAD_ENCODE;
133
+ } else if (oneByte <= 229) { // 2-digit data 00-99 (Numeric Value + 130)
134
+ int value = oneByte - 130;
135
+ if (value < 10) { // padd with '0' for single digit values
136
+ result.append('0');
137
+ }
138
+ result.append(value);
139
+ } else if (oneByte == 230) { // Latch to C40 encodation
140
+ return C40_ENCODE;
141
+ } else if (oneByte == 231) { // Latch to Base 256 encodation
142
+ return BASE256_ENCODE;
143
+ } else if (oneByte == 232) { // FNC1
144
+ //throw ReaderException.getInstance();
145
+ // Ignore this symbol for now
146
+ } else if (oneByte == 233) { // Structured Append
147
+ //throw ReaderException.getInstance();
148
+ // Ignore this symbol for now
149
+ } else if (oneByte == 234) { // Reader Programming
150
+ //throw ReaderException.getInstance();
151
+ // Ignore this symbol for now
152
+ } else if (oneByte == 235) { // Upper Shift (shift to Extended ASCII)
153
+ upperShift = true;
154
+ } else if (oneByte == 236) { // 05 Macro
155
+ result.append("[)>\u001E05\u001D");
156
+ resultTrailer.insert(0, "\u001E\u0004");
157
+ } else if (oneByte == 237) { // 06 Macro
158
+ result.append("[)>\u001E06\u001D");
159
+ resultTrailer.insert(0, "\u001E\u0004");
160
+ } else if (oneByte == 238) { // Latch to ANSI X12 encodation
161
+ return ANSIX12_ENCODE;
162
+ } else if (oneByte == 239) { // Latch to Text encodation
163
+ return TEXT_ENCODE;
164
+ } else if (oneByte == 240) { // Latch to EDIFACT encodation
165
+ return EDIFACT_ENCODE;
166
+ } else if (oneByte == 241) { // ECI Character
167
+ // TODO(bbrown): I think we need to support ECI
168
+ //throw ReaderException.getInstance();
169
+ // Ignore this symbol for now
170
+ } else if (oneByte >= 242) { // Not to be used in ASCII encodation
171
+ throw FormatException.getFormatInstance();
172
+ }
173
+ } while (bits.available() > 0);
174
+ return ASCII_ENCODE;
175
+ }
176
+
177
+ /**
178
+ * See ISO 16022:2006, 5.2.5 and Annex C, Table C.1
179
+ */
180
+ private static void decodeC40Segment(BitSource bits, StringBuffer result) throws FormatException {
181
+ // Three C40 values are encoded in a 16-bit value as
182
+ // (1600 * C1) + (40 * C2) + C3 + 1
183
+ // TODO(bbrown): The Upper Shift with C40 doesn't work in the 4 value scenario all the time
184
+ boolean upperShift = false;
185
+
186
+ int[] cValues = new int[3];
187
+ do {
188
+ // If there is only one byte left then it will be encoded as ASCII
189
+ if (bits.available() == 8) {
190
+ return;
191
+ }
192
+ int firstByte = bits.readBits(8);
193
+ if (firstByte == 254) { // Unlatch codeword
194
+ return;
195
+ }
196
+
197
+ parseTwoBytes(firstByte, bits.readBits(8), cValues);
198
+
199
+ int shift = 0;
200
+ for (int i = 0; i < 3; i++) {
201
+ int cValue = cValues[i];
202
+ switch (shift) {
203
+ case 0:
204
+ if (cValue < 3) {
205
+ shift = cValue + 1;
206
+ } else {
207
+ if (upperShift) {
208
+ result.append((char) (C40_BASIC_SET_CHARS[cValue] + 128));
209
+ upperShift = false;
210
+ } else {
211
+ result.append(C40_BASIC_SET_CHARS[cValue]);
212
+ }
213
+ }
214
+ break;
215
+ case 1:
216
+ if (upperShift) {
217
+ result.append((char) (cValue + 128));
218
+ upperShift = false;
219
+ } else {
220
+ result.append(cValue);
221
+ }
222
+ shift = 0;
223
+ break;
224
+ case 2:
225
+ if (cValue < 27) {
226
+ if (upperShift) {
227
+ result.append((char) (C40_SHIFT2_SET_CHARS[cValue] + 128));
228
+ upperShift = false;
229
+ } else {
230
+ result.append(C40_SHIFT2_SET_CHARS[cValue]);
231
+ }
232
+ } else if (cValue == 27) { // FNC1
233
+ throw FormatException.getFormatInstance();
234
+ } else if (cValue == 30) { // Upper Shift
235
+ upperShift = true;
236
+ } else {
237
+ throw FormatException.getFormatInstance();
238
+ }
239
+ shift = 0;
240
+ break;
241
+ case 3:
242
+ if (upperShift) {
243
+ result.append((char) (cValue + 224));
244
+ upperShift = false;
245
+ } else {
246
+ result.append((char) (cValue + 96));
247
+ }
248
+ shift = 0;
249
+ break;
250
+ default:
251
+ throw FormatException.getFormatInstance();
252
+ }
253
+ }
254
+ } while (bits.available() > 0);
255
+ }
256
+
257
+ /**
258
+ * See ISO 16022:2006, 5.2.6 and Annex C, Table C.2
259
+ */
260
+ private static void decodeTextSegment(BitSource bits, StringBuffer result) throws FormatException {
261
+ // Three Text values are encoded in a 16-bit value as
262
+ // (1600 * C1) + (40 * C2) + C3 + 1
263
+ // TODO(bbrown): The Upper Shift with Text doesn't work in the 4 value scenario all the time
264
+ boolean upperShift = false;
265
+
266
+ int[] cValues = new int[3];
267
+ do {
268
+ // If there is only one byte left then it will be encoded as ASCII
269
+ if (bits.available() == 8) {
270
+ return;
271
+ }
272
+ int firstByte = bits.readBits(8);
273
+ if (firstByte == 254) { // Unlatch codeword
274
+ return;
275
+ }
276
+
277
+ parseTwoBytes(firstByte, bits.readBits(8), cValues);
278
+
279
+ int shift = 0;
280
+ for (int i = 0; i < 3; i++) {
281
+ int cValue = cValues[i];
282
+ switch (shift) {
283
+ case 0:
284
+ if (cValue < 3) {
285
+ shift = cValue + 1;
286
+ } else {
287
+ if (upperShift) {
288
+ result.append((char) (TEXT_BASIC_SET_CHARS[cValue] + 128));
289
+ upperShift = false;
290
+ } else {
291
+ result.append(TEXT_BASIC_SET_CHARS[cValue]);
292
+ }
293
+ }
294
+ break;
295
+ case 1:
296
+ if (upperShift) {
297
+ result.append((char) (cValue + 128));
298
+ upperShift = false;
299
+ } else {
300
+ result.append(cValue);
301
+ }
302
+ shift = 0;
303
+ break;
304
+ case 2:
305
+ // Shift 2 for Text is the same encoding as C40
306
+ if (cValue < 27) {
307
+ if (upperShift) {
308
+ result.append((char) (C40_SHIFT2_SET_CHARS[cValue] + 128));
309
+ upperShift = false;
310
+ } else {
311
+ result.append(C40_SHIFT2_SET_CHARS[cValue]);
312
+ }
313
+ } else if (cValue == 27) { // FNC1
314
+ throw FormatException.getFormatInstance();
315
+ } else if (cValue == 30) { // Upper Shift
316
+ upperShift = true;
317
+ } else {
318
+ throw FormatException.getFormatInstance();
319
+ }
320
+ shift = 0;
321
+ break;
322
+ case 3:
323
+ if (upperShift) {
324
+ result.append((char) (TEXT_SHIFT3_SET_CHARS[cValue] + 128));
325
+ upperShift = false;
326
+ } else {
327
+ result.append(TEXT_SHIFT3_SET_CHARS[cValue]);
328
+ }
329
+ shift = 0;
330
+ break;
331
+ default:
332
+ throw FormatException.getFormatInstance();
333
+ }
334
+ }
335
+ } while (bits.available() > 0);
336
+ }
337
+
338
+ /**
339
+ * See ISO 16022:2006, 5.2.7
340
+ */
341
+ private static void decodeAnsiX12Segment(BitSource bits, StringBuffer result) throws FormatException {
342
+ // Three ANSI X12 values are encoded in a 16-bit value as
343
+ // (1600 * C1) + (40 * C2) + C3 + 1
344
+
345
+ int[] cValues = new int[3];
346
+ do {
347
+ // If there is only one byte left then it will be encoded as ASCII
348
+ if (bits.available() == 8) {
349
+ return;
350
+ }
351
+ int firstByte = bits.readBits(8);
352
+ if (firstByte == 254) { // Unlatch codeword
353
+ return;
354
+ }
355
+
356
+ parseTwoBytes(firstByte, bits.readBits(8), cValues);
357
+
358
+ for (int i = 0; i < 3; i++) {
359
+ int cValue = cValues[i];
360
+ if (cValue == 0) { // X12 segment terminator <CR>
361
+ result.append('\r');
362
+ } else if (cValue == 1) { // X12 segment separator *
363
+ result.append('*');
364
+ } else if (cValue == 2) { // X12 sub-element separator >
365
+ result.append('>');
366
+ } else if (cValue == 3) { // space
367
+ result.append(' ');
368
+ } else if (cValue < 14) { // 0 - 9
369
+ result.append((char) (cValue + 44));
370
+ } else if (cValue < 40) { // A - Z
371
+ result.append((char) (cValue + 51));
372
+ } else {
373
+ throw FormatException.getFormatInstance();
374
+ }
375
+ }
376
+ } while (bits.available() > 0);
377
+ }
378
+
379
+ private static void parseTwoBytes(int firstByte, int secondByte, int[] result) {
380
+ int fullBitValue = (firstByte << 8) + secondByte - 1;
381
+ int temp = fullBitValue / 1600;
382
+ result[0] = temp;
383
+ fullBitValue -= temp * 1600;
384
+ temp = fullBitValue / 40;
385
+ result[1] = temp;
386
+ result[2] = fullBitValue - temp * 40;
387
+ }
388
+
389
+ /**
390
+ * See ISO 16022:2006, 5.2.8 and Annex C Table C.3
391
+ */
392
+ private static void decodeEdifactSegment(BitSource bits, StringBuffer result) {
393
+ boolean unlatch = false;
394
+ do {
395
+ // If there is only two or less bytes left then it will be encoded as ASCII
396
+ if (bits.available() <= 16) {
397
+ return;
398
+ }
399
+
400
+ for (int i = 0; i < 4; i++) {
401
+ int edifactValue = bits.readBits(6);
402
+
403
+ // Check for the unlatch character
404
+ if (edifactValue == 0x2B67) { // 011111
405
+ unlatch = true;
406
+ // If we encounter the unlatch code then continue reading because the Codeword triple
407
+ // is padded with 0's
408
+ }
409
+
410
+ if (!unlatch) {
411
+ if ((edifactValue & 32) == 0) { // no 1 in the leading (6th) bit
412
+ edifactValue |= 64; // Add a leading 01 to the 6 bit binary value
413
+ }
414
+ result.append(edifactValue);
415
+ }
416
+ }
417
+ } while (!unlatch && bits.available() > 0);
418
+ }
419
+
420
+ /**
421
+ * See ISO 16022:2006, 5.2.9 and Annex B, B.2
422
+ */
423
+ private static void decodeBase256Segment(BitSource bits, StringBuffer result, Vector byteSegments)
424
+ throws FormatException {
425
+ // Figure out how long the Base 256 Segment is.
426
+ int d1 = bits.readBits(8);
427
+ int count;
428
+ if (d1 == 0) { // Read the remainder of the symbol
429
+ count = bits.available() / 8;
430
+ } else if (d1 < 250) {
431
+ count = d1;
432
+ } else {
433
+ count = 250 * (d1 - 249) + bits.readBits(8);
434
+ }
435
+ byte[] bytes = new byte[count];
436
+ for (int i = 0; i < count; i++) {
437
+ // Have seen this particular error in the wild, such as at
438
+ // http://www.bcgen.com/demo/IDAutomationStreamingDataMatrix.aspx?MODE=3&D=Fred&PFMT=3&PT=F&X=0.3&O=0&LM=0.2
439
+ if (bits.available() < 8) {
440
+ throw FormatException.getFormatInstance();
441
+ }
442
+ bytes[i] = unrandomize255State(bits.readBits(8), i);
443
+ }
444
+ byteSegments.addElement(bytes);
445
+ try {
446
+ result.append(new String(bytes, "ISO8859_1"));
447
+ } catch (UnsupportedEncodingException uee) {
448
+ throw new RuntimeException("Platform does not support required encoding: " + uee);
449
+ }
450
+ }
451
+
452
+ /**
453
+ * See ISO 16022:2006, Annex B, B.2
454
+ */
455
+ private static byte unrandomize255State(int randomizedBase256Codeword,
456
+ int base256CodewordPosition) {
457
+ int pseudoRandomNumber = ((149 * base256CodewordPosition) % 255) + 1;
458
+ int tempVariable = randomizedBase256Codeword - pseudoRandomNumber;
459
+ return (byte) (tempVariable >= 0 ? tempVariable : (tempVariable + 256));
460
+ }
461
+
462
+ }