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,629 @@
1
+ /*
2
+ * Copyright 2009 ZXing authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.google.zxing.pdf417.decoder;
18
+
19
+ import com.google.zxing.FormatException;
20
+ import com.google.zxing.common.DecoderResult;
21
+
22
+ /**
23
+ * <p>This class contains the methods for decoding the PDF417 codewords.</p>
24
+ *
25
+ * @author SITA Lab (kevin.osullivan@sita.aero)
26
+ */
27
+ final class DecodedBitStreamParser {
28
+
29
+ private static final int TEXT_COMPACTION_MODE_LATCH = 900;
30
+ private static final int BYTE_COMPACTION_MODE_LATCH = 901;
31
+ private static final int NUMERIC_COMPACTION_MODE_LATCH = 902;
32
+ private static final int BYTE_COMPACTION_MODE_LATCH_6 = 924;
33
+ private static final int BEGIN_MACRO_PDF417_CONTROL_BLOCK = 928;
34
+ private static final int BEGIN_MACRO_PDF417_OPTIONAL_FIELD = 923;
35
+ private static final int MACRO_PDF417_TERMINATOR = 922;
36
+ private static final int MODE_SHIFT_TO_BYTE_COMPACTION_MODE = 913;
37
+ private static final int MAX_NUMERIC_CODEWORDS = 15;
38
+
39
+ private static final int ALPHA = 0;
40
+ private static final int LOWER = 1;
41
+ private static final int MIXED = 2;
42
+ private static final int PUNCT = 3;
43
+ private static final int PUNCT_SHIFT = 4;
44
+
45
+ private static final int PL = 25;
46
+ private static final int LL = 27;
47
+ private static final int AS = 27;
48
+ private static final int ML = 28;
49
+ private static final int AL = 28;
50
+ private static final int PS = 29;
51
+ private static final int PAL = 29;
52
+
53
+ private static final char[] PUNCT_CHARS = {';', '<', '>', '@', '[', 92, '}', '_', 96, '~', '!',
54
+ 13, 9, ',', ':', 10, '-', '.', '$', '/', 34, '|', '*',
55
+ '(', ')', '?', '{', '}', 39};
56
+
57
+ private static final char[] MIXED_CHARS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '&',
58
+ 13, 9, ',', ':', '#', '-', '.', '$', '/', '+', '%', '*',
59
+ '=', '^'};
60
+
61
+ // Table containing values for the exponent of 900.
62
+ // This is used in the numeric compaction decode algorithm.
63
+ private static final String[] EXP900 =
64
+ { "000000000000000000000000000000000000000000001",
65
+ "000000000000000000000000000000000000000000900",
66
+ "000000000000000000000000000000000000000810000",
67
+ "000000000000000000000000000000000000729000000",
68
+ "000000000000000000000000000000000656100000000",
69
+ "000000000000000000000000000000590490000000000",
70
+ "000000000000000000000000000531441000000000000",
71
+ "000000000000000000000000478296900000000000000",
72
+ "000000000000000000000430467210000000000000000",
73
+ "000000000000000000387420489000000000000000000",
74
+ "000000000000000348678440100000000000000000000",
75
+ "000000000000313810596090000000000000000000000",
76
+ "000000000282429536481000000000000000000000000",
77
+ "000000254186582832900000000000000000000000000",
78
+ "000228767924549610000000000000000000000000000",
79
+ "205891132094649000000000000000000000000000000"};
80
+
81
+ private DecodedBitStreamParser() {
82
+ }
83
+
84
+ static DecoderResult decode(int[] codewords) throws FormatException {
85
+ StringBuffer result = new StringBuffer(100);
86
+ // Get compaction mode
87
+ int codeIndex = 1;
88
+ int code = codewords[codeIndex++];
89
+ while (codeIndex < codewords[0]) {
90
+ switch (code) {
91
+ case TEXT_COMPACTION_MODE_LATCH: {
92
+ codeIndex = textCompaction(codewords, codeIndex, result);
93
+ break;
94
+ }
95
+ case BYTE_COMPACTION_MODE_LATCH: {
96
+ codeIndex = byteCompaction(code, codewords, codeIndex, result);
97
+ break;
98
+ }
99
+ case NUMERIC_COMPACTION_MODE_LATCH: {
100
+ codeIndex = numericCompaction(codewords, codeIndex, result);
101
+ break;
102
+ }
103
+ case MODE_SHIFT_TO_BYTE_COMPACTION_MODE: {
104
+ codeIndex = byteCompaction(code, codewords, codeIndex, result);
105
+ break;
106
+ }
107
+ case BYTE_COMPACTION_MODE_LATCH_6: {
108
+ codeIndex = byteCompaction(code, codewords, codeIndex, result);
109
+ break;
110
+ }
111
+ default: {
112
+ // Default to text compaction. During testing numerous barcodes
113
+ // appeared to be missing the starting mode. In these cases defaulting
114
+ // to text compaction seems to work.
115
+ codeIndex--;
116
+ codeIndex = textCompaction(codewords, codeIndex, result);
117
+ break;
118
+ }
119
+ }
120
+ if (codeIndex < codewords.length) {
121
+ code = codewords[codeIndex++];
122
+ } else {
123
+ throw FormatException.getFormatInstance();
124
+ }
125
+ }
126
+ return new DecoderResult(null, result.toString(), null, null);
127
+ }
128
+
129
+ /**
130
+ * Text Compaction mode (see 5.4.1.5) permits all printable ASCII characters to be
131
+ * encoded, i.e. values 32 - 126 inclusive in accordance with ISO/IEC 646 (IRV), as
132
+ * well as selected control characters.
133
+ *
134
+ * @param codewords The array of codewords (data + error)
135
+ * @param codeIndex The current index into the codeword array.
136
+ * @param result The decoded data is appended to the result.
137
+ * @return The next index into the codeword array.
138
+ */
139
+ private static int textCompaction(int[] codewords, int codeIndex, StringBuffer result) {
140
+ // 2 character per codeword
141
+ int[] textCompactionData = new int[codewords[0] << 1];
142
+ // Used to hold the byte compaction value if there is a mode shift
143
+ int[] byteCompactionData = new int[codewords[0] << 1];
144
+
145
+ int index = 0;
146
+ boolean end = false;
147
+ while ((codeIndex < codewords[0]) && !end) {
148
+ int code = codewords[codeIndex++];
149
+ if (code < TEXT_COMPACTION_MODE_LATCH) {
150
+ textCompactionData[index] = code / 30;
151
+ textCompactionData[index + 1] = code % 30;
152
+ index += 2;
153
+ } else {
154
+ switch (code) {
155
+ case TEXT_COMPACTION_MODE_LATCH: {
156
+ codeIndex--;
157
+ end = true;
158
+ break;
159
+ }
160
+ case BYTE_COMPACTION_MODE_LATCH: {
161
+ codeIndex--;
162
+ end = true;
163
+ break;
164
+ }
165
+ case NUMERIC_COMPACTION_MODE_LATCH: {
166
+ codeIndex--;
167
+ end = true;
168
+ break;
169
+ }
170
+ case MODE_SHIFT_TO_BYTE_COMPACTION_MODE: {
171
+ // The Mode Shift codeword 913 shall cause a temporary
172
+ // switch from Text Compaction mode to Byte Compaction mode.
173
+ // This switch shall be in effect for only the next codeword,
174
+ // after which the mode shall revert to the prevailing sub-mode
175
+ // of the Text Compaction mode. Codeword 913 is only available
176
+ // in Text Compaction mode; its use is described in 5.4.2.4.
177
+ textCompactionData[index] = MODE_SHIFT_TO_BYTE_COMPACTION_MODE;
178
+ byteCompactionData[index] = code; //Integer.toHexString(code);
179
+ index++;
180
+ break;
181
+ }
182
+ case BYTE_COMPACTION_MODE_LATCH_6: {
183
+ codeIndex--;
184
+ end = true;
185
+ break;
186
+ }
187
+ }
188
+ }
189
+ }
190
+ decodeTextCompaction(textCompactionData, byteCompactionData, index, result);
191
+ return codeIndex;
192
+ }
193
+
194
+ /**
195
+ * The Text Compaction mode includes all the printable ASCII characters
196
+ * (i.e. values from 32 to 126) and three ASCII control characters: HT or tab
197
+ * (ASCII value 9), LF or line feed (ASCII value 10), and CR or carriage
198
+ * return (ASCII value 13). The Text Compaction mode also includes various latch
199
+ * and shift characters which are used exclusively within the mode. The Text
200
+ * Compaction mode encodes up to 2 characters per codeword. The compaction rules
201
+ * for converting data into PDF417 codewords are defined in 5.4.2.2. The sub-mode
202
+ * switches are defined in 5.4.2.3.
203
+ *
204
+ * @param textCompactionData The text compaction data.
205
+ * @param byteCompactionData The byte compaction data if there
206
+ * was a mode shift.
207
+ * @param length The size of the text compaction and byte compaction data.
208
+ * @param result The decoded data is appended to the result.
209
+ */
210
+ private static void decodeTextCompaction(int[] textCompactionData,
211
+ int[] byteCompactionData,
212
+ int length,
213
+ StringBuffer result) {
214
+ // Beginning from an initial state of the Alpha sub-mode
215
+ // The default compaction mode for PDF417 in effect at the start of each symbol shall always be Text
216
+ // Compaction mode Alpha sub-mode (uppercase alphabetic). A latch codeword from another mode to the Text
217
+ // Compaction mode shall always switch to the Text Compaction Alpha sub-mode.
218
+ int subMode = ALPHA;
219
+ int priorToShiftMode = ALPHA;
220
+ int i = 0;
221
+ while (i < length) {
222
+ int subModeCh = textCompactionData[i];
223
+ char ch = 0;
224
+ switch (subMode) {
225
+ case ALPHA:
226
+ // Alpha (uppercase alphabetic)
227
+ if (subModeCh < 26) {
228
+ // Upper case Alpha Character
229
+ ch = (char) ('A' + subModeCh);
230
+ } else {
231
+ if (subModeCh == 26) {
232
+ ch = ' ';
233
+ } else if (subModeCh == LL) {
234
+ subMode = LOWER;
235
+ } else if (subModeCh == ML) {
236
+ subMode = MIXED;
237
+ } else if (subModeCh == PS) {
238
+ // Shift to punctuation
239
+ priorToShiftMode = subMode;
240
+ subMode = PUNCT_SHIFT;
241
+ } else if (subModeCh == MODE_SHIFT_TO_BYTE_COMPACTION_MODE) {
242
+ result.append((char) byteCompactionData[i]);
243
+ }
244
+ }
245
+ break;
246
+
247
+ case LOWER:
248
+ // Lower (lowercase alphabetic)
249
+ if (subModeCh < 26) {
250
+ ch = (char) ('a' + subModeCh);
251
+ } else {
252
+ if (subModeCh == 26) {
253
+ ch = ' ';
254
+ } else if (subModeCh == AL) {
255
+ subMode = ALPHA;
256
+ } else if (subModeCh == ML) {
257
+ subMode = MIXED;
258
+ } else if (subModeCh == PS) {
259
+ // Shift to punctuation
260
+ priorToShiftMode = subMode;
261
+ subMode = PUNCT_SHIFT;
262
+ } else if (subModeCh == MODE_SHIFT_TO_BYTE_COMPACTION_MODE) {
263
+ result.append((char) byteCompactionData[i]);
264
+ }
265
+ }
266
+ break;
267
+
268
+ case MIXED:
269
+ // Mixed (numeric and some punctuation)
270
+ if (subModeCh < PL) {
271
+ ch = MIXED_CHARS[subModeCh];
272
+ } else {
273
+ if (subModeCh == PL) {
274
+ subMode = PUNCT;
275
+ } else if (subModeCh == 26) {
276
+ ch = ' ';
277
+ } else if (subModeCh == AS) {
278
+ //mode_change = true;
279
+ } else if (subModeCh == AL) {
280
+ subMode = ALPHA;
281
+ } else if (subModeCh == PS) {
282
+ // Shift to punctuation
283
+ priorToShiftMode = subMode;
284
+ subMode = PUNCT_SHIFT;
285
+ } else if (subModeCh == MODE_SHIFT_TO_BYTE_COMPACTION_MODE) {
286
+ result.append((char) byteCompactionData[i]);
287
+ }
288
+ }
289
+ break;
290
+
291
+ case PUNCT:
292
+ // Punctuation
293
+ if (subModeCh < PS) {
294
+ ch = PUNCT_CHARS[subModeCh];
295
+ } else {
296
+ if (subModeCh == PAL) {
297
+ subMode = ALPHA;
298
+ } else if (subModeCh == MODE_SHIFT_TO_BYTE_COMPACTION_MODE) {
299
+ result.append((char) byteCompactionData[i]);
300
+ }
301
+ }
302
+ break;
303
+
304
+ case PUNCT_SHIFT:
305
+ // Restore sub-mode
306
+ subMode = priorToShiftMode;
307
+ if (subModeCh < PS) {
308
+ ch = PUNCT_CHARS[subModeCh];
309
+ } else {
310
+ if (subModeCh == PAL) {
311
+ subMode = ALPHA;
312
+ }
313
+ }
314
+ break;
315
+ }
316
+ if (ch != 0) {
317
+ // Append decoded character to result
318
+ result.append(ch);
319
+ }
320
+ i++;
321
+ }
322
+ }
323
+
324
+ /**
325
+ * Byte Compaction mode (see 5.4.3) permits all 256 possible 8-bit byte values to be encoded.
326
+ * This includes all ASCII characters value 0 to 127 inclusive and provides for international
327
+ * character set support.
328
+ *
329
+ * @param mode The byte compaction mode i.e. 901 or 924
330
+ * @param codewords The array of codewords (data + error)
331
+ * @param codeIndex The current index into the codeword array.
332
+ * @param result The decoded data is appended to the result.
333
+ * @return The next index into the codeword array.
334
+ */
335
+ private static int byteCompaction(int mode, int[] codewords, int codeIndex, StringBuffer result) {
336
+ if (mode == BYTE_COMPACTION_MODE_LATCH) {
337
+ // Total number of Byte Compaction characters to be encoded
338
+ // is not a multiple of 6
339
+ int count = 0;
340
+ long value = 0;
341
+ char[] decodedData = new char[6];
342
+ int[] byteCompactedCodewords = new int[6];
343
+ boolean end = false;
344
+ while ((codeIndex < codewords[0]) && !end) {
345
+ int code = codewords[codeIndex++];
346
+ if (code < TEXT_COMPACTION_MODE_LATCH) {
347
+ byteCompactedCodewords[count] = code;
348
+ count++;
349
+ // Base 900
350
+ value = 900 * value + code;
351
+ } else {
352
+ if (code == TEXT_COMPACTION_MODE_LATCH ||
353
+ code == BYTE_COMPACTION_MODE_LATCH ||
354
+ code == NUMERIC_COMPACTION_MODE_LATCH ||
355
+ code == BYTE_COMPACTION_MODE_LATCH_6 ||
356
+ code == BEGIN_MACRO_PDF417_CONTROL_BLOCK ||
357
+ code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD ||
358
+ code == MACRO_PDF417_TERMINATOR) {
359
+ codeIndex--;
360
+ end = true;
361
+ }
362
+ }
363
+ if ((count % 5 == 0) && (count > 0)) {
364
+ // Decode every 5 codewords
365
+ // Convert to Base 256
366
+ for (int j = 0; j < 6; ++j) {
367
+ decodedData[5 - j] = (char) (value % 256);
368
+ value >>= 8;
369
+ }
370
+ result.append(decodedData);
371
+ count = 0;
372
+ }
373
+ }
374
+ // If Byte Compaction mode is invoked with codeword 901,
375
+ // the final group of codewords is interpreted directly
376
+ // as one byte per codeword, without compaction.
377
+ for (int i = ((count / 5) * 5); i < count; i++) {
378
+ result.append((char) byteCompactedCodewords[i]);
379
+ }
380
+
381
+ } else if (mode == BYTE_COMPACTION_MODE_LATCH_6) {
382
+ // Total number of Byte Compaction characters to be encoded
383
+ // is an integer multiple of 6
384
+ int count = 0;
385
+ long value = 0;
386
+ boolean end = false;
387
+ while (codeIndex < codewords[0] && !end) {
388
+ int code = codewords[codeIndex++];
389
+ if (code < TEXT_COMPACTION_MODE_LATCH) {
390
+ count++;
391
+ // Base 900
392
+ value = 900 * value + code;
393
+ } else {
394
+ if (code == TEXT_COMPACTION_MODE_LATCH ||
395
+ code == BYTE_COMPACTION_MODE_LATCH ||
396
+ code == NUMERIC_COMPACTION_MODE_LATCH ||
397
+ code == BYTE_COMPACTION_MODE_LATCH_6 ||
398
+ code == BEGIN_MACRO_PDF417_CONTROL_BLOCK ||
399
+ code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD ||
400
+ code == MACRO_PDF417_TERMINATOR) {
401
+ codeIndex--;
402
+ end = true;
403
+ }
404
+ }
405
+ if ((count % 5 == 0) && (count > 0)) {
406
+ // Decode every 5 codewords
407
+ // Convert to Base 256
408
+ char[] decodedData = new char[6];
409
+ for (int j = 0; j < 6; ++j) {
410
+ decodedData[5 - j] = (char) (value & 0xFF);
411
+ value >>= 8;
412
+ }
413
+ result.append(decodedData);
414
+ }
415
+ }
416
+ }
417
+ return codeIndex;
418
+ }
419
+
420
+ /**
421
+ * Numeric Compaction mode (see 5.4.4) permits efficient encoding of numeric data strings.
422
+ *
423
+ * @param codewords The array of codewords (data + error)
424
+ * @param codeIndex The current index into the codeword array.
425
+ * @param result The decoded data is appended to the result.
426
+ * @return The next index into the codeword array.
427
+ */
428
+ private static int numericCompaction(int[] codewords, int codeIndex, StringBuffer result) {
429
+ int count = 0;
430
+ boolean end = false;
431
+
432
+ int[] numericCodewords = new int[MAX_NUMERIC_CODEWORDS];
433
+
434
+ while (codeIndex < codewords[0] && !end) {
435
+ int code = codewords[codeIndex++];
436
+ if (codeIndex == codewords[0]) {
437
+ end = true;
438
+ }
439
+ if (code < TEXT_COMPACTION_MODE_LATCH) {
440
+ numericCodewords[count] = code;
441
+ count++;
442
+ } else {
443
+ if (code == TEXT_COMPACTION_MODE_LATCH ||
444
+ code == BYTE_COMPACTION_MODE_LATCH ||
445
+ code == BYTE_COMPACTION_MODE_LATCH_6 ||
446
+ code == BEGIN_MACRO_PDF417_CONTROL_BLOCK ||
447
+ code == BEGIN_MACRO_PDF417_OPTIONAL_FIELD ||
448
+ code == MACRO_PDF417_TERMINATOR) {
449
+ codeIndex--;
450
+ end = true;
451
+ }
452
+ }
453
+ if (count % MAX_NUMERIC_CODEWORDS == 0 ||
454
+ code == NUMERIC_COMPACTION_MODE_LATCH ||
455
+ end) {
456
+ // Re-invoking Numeric Compaction mode (by using codeword 902
457
+ // while in Numeric Compaction mode) serves to terminate the
458
+ // current Numeric Compaction mode grouping as described in 5.4.4.2,
459
+ // and then to start a new one grouping.
460
+ String s = decodeBase900toBase10(numericCodewords, count);
461
+ result.append(s);
462
+ count = 0;
463
+ }
464
+ }
465
+ return codeIndex;
466
+ }
467
+
468
+ /**
469
+ * Convert a list of Numeric Compacted codewords from Base 900 to Base 10.
470
+ *
471
+ * @param codewords The array of codewords
472
+ * @param count The number of codewords
473
+ * @return The decoded string representing the Numeric data.
474
+ */
475
+ /*
476
+ EXAMPLE
477
+ Encode the fifteen digit numeric string 000213298174000
478
+ Prefix the numeric string with a 1 and set the initial value of
479
+ t = 1 000 213 298 174 000
480
+ Calculate codeword 0
481
+ d0 = 1 000 213 298 174 000 mod 900 = 200
482
+
483
+ t = 1 000 213 298 174 000 div 900 = 1 111 348 109 082
484
+ Calculate codeword 1
485
+ d1 = 1 111 348 109 082 mod 900 = 282
486
+
487
+ t = 1 111 348 109 082 div 900 = 1 234 831 232
488
+ Calculate codeword 2
489
+ d2 = 1 234 831 232 mod 900 = 632
490
+
491
+ t = 1 234 831 232 div 900 = 1 372 034
492
+ Calculate codeword 3
493
+ d3 = 1 372 034 mod 900 = 434
494
+
495
+ t = 1 372 034 div 900 = 1 524
496
+ Calculate codeword 4
497
+ d4 = 1 524 mod 900 = 624
498
+
499
+ t = 1 524 div 900 = 1
500
+ Calculate codeword 5
501
+ d5 = 1 mod 900 = 1
502
+ t = 1 div 900 = 0
503
+ Codeword sequence is: 1, 624, 434, 632, 282, 200
504
+
505
+ Decode the above codewords involves
506
+ 1 x 900 power of 5 + 624 x 900 power of 4 + 434 x 900 power of 3 +
507
+ 632 x 900 power of 2 + 282 x 900 power of 1 + 200 x 900 power of 0 = 1000213298174000
508
+
509
+ Remove leading 1 => Result is 000213298174000
510
+
511
+ As there are huge numbers involved here we must use fake out the maths using string
512
+ tokens for the numbers.
513
+ BigDecimal is not supported by J2ME.
514
+ */
515
+ private static String decodeBase900toBase10(int[] codewords, int count) {
516
+ StringBuffer accum = null;
517
+ for (int i = 0; i < count; i++) {
518
+ StringBuffer value = multiply(EXP900[count - i - 1], codewords[i]);
519
+ if (accum == null) {
520
+ // First time in accum=0
521
+ accum = value;
522
+ } else {
523
+ accum = add(accum.toString(), value.toString());
524
+ }
525
+ }
526
+ String result = null;
527
+ // Remove leading '1' which was inserted to preserve
528
+ // leading zeros
529
+ for (int i = 0; i < accum.length(); i++) {
530
+ if (accum.charAt(i) == '1') {
531
+ //result = accum.substring(i + 1);
532
+ result = accum.toString().substring(i + 1);
533
+ break;
534
+ }
535
+ }
536
+ if (result == null) {
537
+ // No leading 1 => just write the converted number.
538
+ result = accum.toString();
539
+ }
540
+ return result;
541
+ }
542
+
543
+ /**
544
+ * Multiplies two String numbers
545
+ *
546
+ * @param value1 Any number represented as a string.
547
+ * @param value2 A number <= 999.
548
+ * @return the result of value1 * value2.
549
+ */
550
+ private static StringBuffer multiply(String value1, int value2) {
551
+ StringBuffer result = new StringBuffer(value1.length());
552
+ for (int i = 0; i < value1.length(); i++) {
553
+ // Put zeros into the result.
554
+ result.append('0');
555
+ }
556
+ int hundreds = value2 / 100;
557
+ int tens = (value2 / 10) % 10;
558
+ int ones = value2 % 10;
559
+ // Multiply by ones
560
+ for (int j = 0; j < ones; j++) {
561
+ result = add(result.toString(), value1);
562
+ }
563
+ // Multiply by tens
564
+ for (int j = 0; j < tens; j++) {
565
+ result = add(result.toString(), (value1 + '0').substring(1));
566
+ }
567
+ // Multiply by hundreds
568
+ for (int j = 0; j < hundreds; j++) {
569
+ result = add(result.toString(), (value1 + "00").substring(2));
570
+ }
571
+ return result;
572
+ }
573
+
574
+ /**
575
+ * Add two numbers which are represented as strings.
576
+ *
577
+ * @param value1
578
+ * @param value2
579
+ * @return the result of value1 + value2
580
+ */
581
+ private static StringBuffer add(String value1, String value2) {
582
+ StringBuffer temp1 = new StringBuffer(5);
583
+ StringBuffer temp2 = new StringBuffer(5);
584
+ StringBuffer result = new StringBuffer(value1.length());
585
+ for (int i = 0; i < value1.length(); i++) {
586
+ // Put zeros into the result.
587
+ result.append('0');
588
+ }
589
+ int carry = 0;
590
+ for (int i = value1.length() - 3; i > -1; i -= 3) {
591
+
592
+ temp1.setLength(0);
593
+ temp1.append(value1.charAt(i));
594
+ temp1.append(value1.charAt(i + 1));
595
+ temp1.append(value1.charAt(i + 2));
596
+
597
+ temp2.setLength(0);
598
+ temp2.append(value2.charAt(i));
599
+ temp2.append(value2.charAt(i + 1));
600
+ temp2.append(value2.charAt(i + 2));
601
+
602
+ int intValue1 = Integer.parseInt(temp1.toString());
603
+ int intValue2 = Integer.parseInt(temp2.toString());
604
+
605
+ int sumval = (intValue1 + intValue2 + carry) % 1000;
606
+ carry = (intValue1 + intValue2 + carry) / 1000;
607
+
608
+ result.setCharAt(i + 2, (char) ((sumval % 10) + '0'));
609
+ result.setCharAt(i + 1, (char) (((sumval / 10) % 10) + '0'));
610
+ result.setCharAt(i, (char) ((sumval / 100) + '0'));
611
+ }
612
+ return result;
613
+ }
614
+
615
+ /*
616
+ private static String decodeBase900toBase10(int codewords[], int count) {
617
+ BigInteger accum = BigInteger.valueOf(0);
618
+ BigInteger value = null;
619
+ for (int i = 0; i < count; i++) {
620
+ value = BigInteger.valueOf(900).pow(count - i - 1);
621
+ value = value.multiply(BigInteger.valueOf(codewords[i]));
622
+ accum = accum.add(value);
623
+ }
624
+ if (debug) System.out.println("Big Integer " + accum);
625
+ String result = accum.toString().substring(1);
626
+ return result;
627
+ }
628
+ */
629
+ }