rhodes 2.4.1 → 3.0.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
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,155 @@
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.oned.rss;
18
+
19
+ /** Adapted from listings in ISO/IEC 24724 Appendix B and Appendix G. */
20
+ public final class RSSUtils {
21
+
22
+ private RSSUtils() {}
23
+
24
+ static int[] getRSSwidths(int val, int n, int elements, int maxWidth, boolean noNarrow) {
25
+ int[] widths = new int[elements];
26
+ int bar;
27
+ int narrowMask = 0;
28
+ for (bar = 0; bar < elements - 1; bar++) {
29
+ narrowMask |= (1 << bar);
30
+ int elmWidth = 1;
31
+ int subVal;
32
+ while (true) {
33
+ subVal = combins(n - elmWidth - 1, elements - bar - 2);
34
+ if (noNarrow && (narrowMask == 0) &&
35
+ (n - elmWidth - (elements - bar - 1) >= elements - bar - 1)) {
36
+ subVal -= combins(n - elmWidth - (elements - bar), elements - bar - 2);
37
+ }
38
+ if (elements - bar - 1 > 1) {
39
+ int lessVal = 0;
40
+ for (int mxwElement = n - elmWidth - (elements - bar - 2);
41
+ mxwElement > maxWidth;
42
+ mxwElement--) {
43
+ lessVal += combins(n - elmWidth - mxwElement - 1, elements - bar - 3);
44
+ }
45
+ subVal -= lessVal * (elements - 1 - bar);
46
+ } else if (n - elmWidth > maxWidth) {
47
+ subVal--;
48
+ }
49
+ val -= subVal;
50
+ if (val < 0) {
51
+ break;
52
+ }
53
+ elmWidth++;
54
+ narrowMask &= ~(1 << bar);
55
+ }
56
+ val += subVal;
57
+ n -= elmWidth;
58
+ widths[bar] = elmWidth;
59
+ }
60
+ widths[bar] = n;
61
+ return widths;
62
+ }
63
+
64
+ public static int getRSSvalue(int[] widths, int maxWidth, boolean noNarrow) {
65
+ int elements = widths.length;
66
+ int n = 0;
67
+ for (int i = 0; i < elements; i++) {
68
+ n += widths[i];
69
+ }
70
+ int val = 0;
71
+ int narrowMask = 0;
72
+ for (int bar = 0; bar < elements - 1; bar++) {
73
+ int elmWidth;
74
+ for (elmWidth = 1, narrowMask |= (1 << bar);
75
+ elmWidth < widths[bar];
76
+ elmWidth++, narrowMask &= ~(1 << bar)) {
77
+ int subVal = combins(n - elmWidth - 1, elements - bar - 2);
78
+ if (noNarrow && (narrowMask == 0) &&
79
+ (n - elmWidth - (elements - bar - 1) >= elements - bar - 1)) {
80
+ subVal -= combins(n - elmWidth - (elements - bar),
81
+ elements - bar - 2);
82
+ }
83
+ if (elements - bar - 1 > 1) {
84
+ int lessVal = 0;
85
+ for (int mxwElement = n - elmWidth - (elements - bar - 2);
86
+ mxwElement > maxWidth; mxwElement--) {
87
+ lessVal += combins(n - elmWidth - mxwElement - 1,
88
+ elements - bar - 3);
89
+ }
90
+ subVal -= lessVal * (elements - 1 - bar);
91
+ } else if (n - elmWidth > maxWidth) {
92
+ subVal--;
93
+ }
94
+ val += subVal;
95
+ }
96
+ n -= elmWidth;
97
+ }
98
+ return (val);
99
+ }
100
+
101
+ static int combins(int n, int r) {
102
+ int maxDenom, minDenom;
103
+ if (n - r > r) {
104
+ minDenom = r;
105
+ maxDenom = n - r;
106
+ } else {
107
+ minDenom = n - r;
108
+ maxDenom = r;
109
+ }
110
+ int val = 1;
111
+ int j = 1;
112
+ for (int i = n; i > maxDenom; i--) {
113
+ val *= i;
114
+ if (j <= minDenom) {
115
+ val /= j;
116
+ j++;
117
+ }
118
+ }
119
+ while (j <= minDenom) {
120
+ val /= j;
121
+ j++;
122
+ }
123
+ return (val);
124
+ }
125
+
126
+ static int[] elements(int[] eDist, int N, int K) {
127
+ int[] widths = new int[eDist.length + 2];
128
+ int twoK = K << 1;
129
+ widths[0] = 1;
130
+ int i;
131
+ int minEven = 10;
132
+ int barSum = 1;
133
+ for (i = 1; i < twoK - 2; i += 2) {
134
+ widths[i] = eDist[i - 1] - widths[i - 1];
135
+ widths[i + 1] = eDist[i] - widths[i];
136
+ barSum += widths[i] + widths[i + 1];
137
+ if (widths[i] < minEven) {
138
+ minEven = widths[i];
139
+ }
140
+ }
141
+ widths[twoK - 1] = N - barSum;
142
+ if (widths[twoK - 1] < minEven) {
143
+ minEven = widths[twoK - 1];
144
+ }
145
+ if (minEven > 1) {
146
+ for (i = 0; i < twoK; i += 2) {
147
+ widths[i] += minEven - 1;
148
+ widths[i + 1] -= minEven - 1;
149
+ }
150
+ }
151
+ return widths;
152
+ }
153
+
154
+
155
+ }
@@ -0,0 +1,85 @@
1
+ /*
2
+ * Copyright (C) 2010 ZXing authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /*
18
+ * These authors would like to acknowledge the Spanish Ministry of Industry,
19
+ * Tourism and Trade, for the support in the project TSI020301-2008-2
20
+ * "PIRAmIDE: Personalizable Interactions with Resources on AmI-enabled
21
+ * Mobile Dynamic Environments", led by Treelogic
22
+ * ( http://www.treelogic.com/ ):
23
+ *
24
+ * http://www.piramidepse.com/
25
+ */
26
+
27
+ package com.google.zxing.oned.rss.expanded;
28
+
29
+ import java.util.Vector;
30
+
31
+ import com.google.zxing.common.BitArray;
32
+
33
+ /**
34
+ * @author Pablo Orduña, University of Deusto (pablo.orduna@deusto.es)
35
+ * @author Eduardo Castillejo, University of Deusto (eduardo.castillejo@deusto.es)
36
+ */
37
+ final class BitArrayBuilder {
38
+
39
+ private BitArrayBuilder() {
40
+ }
41
+
42
+ static BitArray buildBitArray(Vector pairs) {
43
+ int charNumber = (pairs.size() << 1) - 1;
44
+ if ((((ExpandedPair)pairs.lastElement()).getRightChar()) == null) {
45
+ charNumber -= 1;
46
+ }
47
+
48
+ int size = 12 * charNumber;
49
+
50
+ BitArray binary = new BitArray(size);
51
+ int accPos = 0;
52
+
53
+ ExpandedPair firstPair = (ExpandedPair) pairs.elementAt(0);
54
+ int firstValue = firstPair.getRightChar().getValue();
55
+ for(int i = 11; i >= 0; --i){
56
+ if ((firstValue & (1 << i)) != 0) {
57
+ binary.set(accPos);
58
+ }
59
+ accPos++;
60
+ }
61
+
62
+ for(int i = 1; i < pairs.size(); ++i){
63
+ ExpandedPair currentPair = (ExpandedPair) pairs.elementAt(i);
64
+
65
+ int leftValue = currentPair.getLeftChar().getValue();
66
+ for(int j = 11; j >= 0; --j){
67
+ if ((leftValue & (1 << j)) != 0) {
68
+ binary.set(accPos);
69
+ }
70
+ accPos++;
71
+ }
72
+
73
+ if(currentPair.getRightChar() != null){
74
+ int rightValue = currentPair.getRightChar().getValue();
75
+ for(int j = 11; j >= 0; --j){
76
+ if ((rightValue & (1 << j)) != 0) {
77
+ binary.set(accPos);
78
+ }
79
+ accPos++;
80
+ }
81
+ }
82
+ }
83
+ return binary;
84
+ }
85
+ }
@@ -0,0 +1,68 @@
1
+ /*
2
+ * Copyright (C) 2010 ZXing authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /*
18
+ * These authors would like to acknowledge the Spanish Ministry of Industry,
19
+ * Tourism and Trade, for the support in the project TSI020301-2008-2
20
+ * "PIRAmIDE: Personalizable Interactions with Resources on AmI-enabled
21
+ * Mobile Dynamic Environments", led by Treelogic
22
+ * ( http://www.treelogic.com/ ):
23
+ *
24
+ * http://www.piramidepse.com/
25
+ */
26
+
27
+ package com.google.zxing.oned.rss.expanded;
28
+
29
+ import com.google.zxing.oned.rss.DataCharacter;
30
+ import com.google.zxing.oned.rss.FinderPattern;
31
+
32
+ /**
33
+ * @author Pablo Orduña, University of Deusto (pablo.orduna@deusto.es)
34
+ */
35
+ final class ExpandedPair {
36
+
37
+ private final boolean mayBeLast;
38
+ private final DataCharacter leftChar;
39
+ private final DataCharacter rightChar;
40
+ private final FinderPattern finderPattern;
41
+
42
+ ExpandedPair(DataCharacter leftChar, DataCharacter rightChar, FinderPattern finderPattern, boolean mayBeLast) {
43
+ this.leftChar = leftChar;
44
+ this.rightChar = rightChar;
45
+ this.finderPattern = finderPattern;
46
+ this.mayBeLast = mayBeLast;
47
+ }
48
+
49
+ boolean mayBeLast(){
50
+ return this.mayBeLast;
51
+ }
52
+
53
+ DataCharacter getLeftChar() {
54
+ return this.leftChar;
55
+ }
56
+
57
+ DataCharacter getRightChar() {
58
+ return this.rightChar;
59
+ }
60
+
61
+ FinderPattern getFinderPattern() {
62
+ return this.finderPattern;
63
+ }
64
+
65
+ public boolean mustBeLast() {
66
+ return this.rightChar == null;
67
+ }
68
+ }
@@ -0,0 +1,578 @@
1
+ /*
2
+ * Copyright (C) 2010 ZXing authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /*
18
+ * These authors would like to acknowledge the Spanish Ministry of Industry,
19
+ * Tourism and Trade, for the support in the project TSI020301-2008-2
20
+ * "PIRAmIDE: Personalizable Interactions with Resources on AmI-enabled
21
+ * Mobile Dynamic Environments", led by Treelogic
22
+ * ( http://www.treelogic.com/ ):
23
+ *
24
+ * http://www.piramidepse.com/
25
+ */
26
+
27
+ package com.google.zxing.oned.rss.expanded;
28
+
29
+ import java.util.Hashtable;
30
+ import java.util.Vector;
31
+
32
+ import com.google.zxing.BarcodeFormat;
33
+ import com.google.zxing.NotFoundException;
34
+ import com.google.zxing.Result;
35
+ import com.google.zxing.ResultPoint;
36
+ import com.google.zxing.common.BitArray;
37
+ import com.google.zxing.oned.rss.AbstractRSSReader;
38
+ import com.google.zxing.oned.rss.DataCharacter;
39
+ import com.google.zxing.oned.rss.FinderPattern;
40
+ import com.google.zxing.oned.rss.RSSUtils;
41
+ import com.google.zxing.oned.rss.expanded.decoders.AbstractExpandedDecoder;
42
+
43
+ /**
44
+ * @author Pablo Orduña, University of Deusto (pablo.orduna@deusto.es)
45
+ * @author Eduardo Castillejo, University of Deusto (eduardo.castillejo@deusto.es)
46
+ */
47
+ public final class RSSExpandedReader extends AbstractRSSReader{
48
+
49
+ private static final int[] SYMBOL_WIDEST = {7, 5, 4, 3, 1};
50
+ private static final int[] EVEN_TOTAL_SUBSET = {4, 20, 52, 104, 204};
51
+ private static final int[] GSUM = {0, 348, 1388, 2948, 3988};
52
+
53
+ private static final int[][] FINDER_PATTERNS = {
54
+ {1,8,4,1}, // A
55
+ {3,6,4,1}, // B
56
+ {3,4,6,1}, // C
57
+ {3,2,8,1}, // D
58
+ {2,6,5,1}, // E
59
+ {2,2,9,1} // F
60
+ };
61
+
62
+ private static final int[][] WEIGHTS = {
63
+ { 1, 3, 9, 27, 81, 32, 96, 77},
64
+ { 20, 60, 180, 118, 143, 7, 21, 63},
65
+ {189, 145, 13, 39, 117, 140, 209, 205},
66
+ {193, 157, 49, 147, 19, 57, 171, 91},
67
+ { 62, 186, 136, 197, 169, 85, 44, 132},
68
+ {185, 133, 188, 142, 4, 12, 36, 108},
69
+ {113, 128, 173, 97, 80, 29, 87, 50},
70
+ {150, 28, 84, 41, 123, 158, 52, 156},
71
+ { 46, 138, 203, 187, 139, 206, 196, 166},
72
+ { 76, 17, 51, 153, 37, 111, 122, 155},
73
+ { 43, 129, 176, 106, 107, 110, 119, 146},
74
+ { 16, 48, 144, 10, 30, 90, 59, 177},
75
+ {109, 116, 137, 200, 178, 112, 125, 164},
76
+ { 70, 210, 208, 202, 184, 130, 179, 115},
77
+ {134, 191, 151, 31, 93, 68, 204, 190},
78
+ {148, 22, 66, 198, 172, 94, 71, 2},
79
+ { 6, 18, 54, 162, 64, 192,154, 40},
80
+ {120, 149, 25, 75, 14, 42,126, 167},
81
+ { 79, 26, 78, 23, 69, 207,199, 175},
82
+ {103, 98, 83, 38, 114, 131, 182, 124},
83
+ {161, 61, 183, 127, 170, 88, 53, 159},
84
+ { 55, 165, 73, 8, 24, 72, 5, 15},
85
+ { 45, 135, 194, 160, 58, 174, 100, 89}
86
+ };
87
+
88
+ private static final int FINDER_PAT_A = 0;
89
+ private static final int FINDER_PAT_B = 1;
90
+ private static final int FINDER_PAT_C = 2;
91
+ private static final int FINDER_PAT_D = 3;
92
+ private static final int FINDER_PAT_E = 4;
93
+ private static final int FINDER_PAT_F = 5;
94
+
95
+ private static final int [][] FINDER_PATTERN_SEQUENCES = {
96
+ { FINDER_PAT_A, FINDER_PAT_A },
97
+ { FINDER_PAT_A, FINDER_PAT_B, FINDER_PAT_B },
98
+ { FINDER_PAT_A, FINDER_PAT_C, FINDER_PAT_B, FINDER_PAT_D },
99
+ { FINDER_PAT_A, FINDER_PAT_E, FINDER_PAT_B, FINDER_PAT_D, FINDER_PAT_C },
100
+ { FINDER_PAT_A, FINDER_PAT_E, FINDER_PAT_B, FINDER_PAT_D, FINDER_PAT_D, FINDER_PAT_F },
101
+ { FINDER_PAT_A, FINDER_PAT_E, FINDER_PAT_B, FINDER_PAT_D, FINDER_PAT_E, FINDER_PAT_F, FINDER_PAT_F },
102
+ { FINDER_PAT_A, FINDER_PAT_A, FINDER_PAT_B, FINDER_PAT_B, FINDER_PAT_C, FINDER_PAT_C, FINDER_PAT_D, FINDER_PAT_D },
103
+ { FINDER_PAT_A, FINDER_PAT_A, FINDER_PAT_B, FINDER_PAT_B, FINDER_PAT_C, FINDER_PAT_C, FINDER_PAT_D, FINDER_PAT_E, FINDER_PAT_E },
104
+ { FINDER_PAT_A, FINDER_PAT_A, FINDER_PAT_B, FINDER_PAT_B, FINDER_PAT_C, FINDER_PAT_C, FINDER_PAT_D, FINDER_PAT_E, FINDER_PAT_F, FINDER_PAT_F },
105
+ { FINDER_PAT_A, FINDER_PAT_A, FINDER_PAT_B, FINDER_PAT_B, FINDER_PAT_C, FINDER_PAT_D, FINDER_PAT_D, FINDER_PAT_E, FINDER_PAT_E, FINDER_PAT_F, FINDER_PAT_F },
106
+ };
107
+
108
+ private static final int LONGEST_SEQUENCE_SIZE = FINDER_PATTERN_SEQUENCES[FINDER_PATTERN_SEQUENCES.length - 1].length;
109
+
110
+ private static final int MAX_PAIRS = 11;
111
+ private final Vector pairs = new Vector(MAX_PAIRS);
112
+ private final int [] startEnd = new int[2];
113
+ private final int [] currentSequence = new int[LONGEST_SEQUENCE_SIZE];
114
+
115
+ public Result decodeRow(int rowNumber, BitArray row, Hashtable hints) throws NotFoundException {
116
+ this.reset();
117
+ decodeRow2pairs(rowNumber, row);
118
+ return constructResult(this.pairs);
119
+ }
120
+
121
+ public void reset() {
122
+ this.pairs.setSize(0);
123
+ }
124
+
125
+ // Not private for testing
126
+ Vector decodeRow2pairs(int rowNumber, BitArray row) throws NotFoundException {
127
+ while(true){
128
+ ExpandedPair nextPair = retrieveNextPair(row, this.pairs, rowNumber);
129
+ this.pairs.addElement(nextPair);
130
+
131
+ if(nextPair.mayBeLast()){
132
+ if(checkChecksum()) {
133
+ return this.pairs;
134
+ }
135
+ if(nextPair.mustBeLast()) {
136
+ throw NotFoundException.getNotFoundInstance();
137
+ }
138
+ }
139
+ }
140
+ }
141
+
142
+ private static Result constructResult(Vector pairs) throws NotFoundException{
143
+ BitArray binary = BitArrayBuilder.buildBitArray(pairs);
144
+
145
+ AbstractExpandedDecoder decoder = AbstractExpandedDecoder.createDecoder(binary);
146
+ String resultingString = decoder.parseInformation();
147
+
148
+ ResultPoint [] firstPoints = ((ExpandedPair)pairs.elementAt(0)).getFinderPattern().getResultPoints();
149
+ ResultPoint [] lastPoints = ((ExpandedPair)pairs.lastElement()).getFinderPattern().getResultPoints();
150
+
151
+ return new Result(
152
+ resultingString,
153
+ null,
154
+ new ResultPoint[]{firstPoints[0], firstPoints[1], lastPoints[0], lastPoints[1]},
155
+ BarcodeFormat.RSS_EXPANDED
156
+ );
157
+ }
158
+
159
+ private boolean checkChecksum(){
160
+ ExpandedPair firstPair = (ExpandedPair)this.pairs.elementAt(0);
161
+ DataCharacter checkCharacter = firstPair.getLeftChar();
162
+ DataCharacter firstCharacter = firstPair.getRightChar();
163
+
164
+ int checksum = firstCharacter.getChecksumPortion();
165
+ int S = 2;
166
+
167
+ for(int i = 1; i < this.pairs.size(); ++i){
168
+ ExpandedPair currentPair = (ExpandedPair)this.pairs.elementAt(i);
169
+ checksum += currentPair.getLeftChar().getChecksumPortion();
170
+ S++;
171
+ if(currentPair.getRightChar() != null){
172
+ checksum += currentPair.getRightChar().getChecksumPortion();
173
+ S++;
174
+ }
175
+ }
176
+
177
+ checksum %= 211;
178
+
179
+ int checkCharacterValue = 211 * (S - 4) + checksum;
180
+
181
+ return checkCharacterValue == checkCharacter.getValue();
182
+ }
183
+
184
+ private static int getNextSecondBar(BitArray row, int initialPos){
185
+ int currentPos = initialPos;
186
+ boolean current = row.get(currentPos);
187
+
188
+ while(currentPos < row.size && row.get(currentPos) == current) {
189
+ currentPos++;
190
+ }
191
+
192
+ current = !current;
193
+ while(currentPos < row.size && row.get(currentPos) == current) {
194
+ currentPos++;
195
+ }
196
+
197
+ return currentPos;
198
+ }
199
+
200
+ // not private for testing
201
+ ExpandedPair retrieveNextPair(BitArray row, Vector previousPairs, int rowNumber) throws NotFoundException{
202
+ boolean isOddPattern = previousPairs.size() % 2 == 0;
203
+
204
+ FinderPattern pattern;
205
+
206
+ boolean keepFinding = true;
207
+ int forcedOffset = -1;
208
+ do{
209
+ this.findNextPair(row, previousPairs, forcedOffset);
210
+ pattern = parseFoundFinderPattern(row, rowNumber, isOddPattern);
211
+ if (pattern == null){
212
+ forcedOffset = getNextSecondBar(row, this.startEnd[0]);
213
+ } else {
214
+ keepFinding = false;
215
+ }
216
+ }while(keepFinding);
217
+
218
+ boolean mayBeLast = checkPairSequence(previousPairs, pattern);
219
+
220
+ DataCharacter leftChar = this.decodeDataCharacter(row, pattern, isOddPattern, true);
221
+ DataCharacter rightChar;
222
+ try{
223
+ rightChar = this.decodeDataCharacter(row, pattern, isOddPattern, false);
224
+ }catch(NotFoundException nfe){
225
+ if(mayBeLast) {
226
+ rightChar = null;
227
+ } else {
228
+ throw nfe;
229
+ }
230
+ }
231
+
232
+ return new ExpandedPair(leftChar, rightChar, pattern, mayBeLast);
233
+ }
234
+
235
+ private boolean checkPairSequence(Vector previousPairs, FinderPattern pattern) throws NotFoundException{
236
+ int currentSequenceLength = previousPairs.size() + 1;
237
+ if(currentSequenceLength > this.currentSequence.length) {
238
+ throw NotFoundException.getNotFoundInstance();
239
+ }
240
+
241
+ for(int pos = 0; pos < previousPairs.size(); ++pos) {
242
+ this.currentSequence[pos] = ((ExpandedPair) previousPairs.elementAt(pos)).getFinderPattern().getValue();
243
+ }
244
+
245
+ this.currentSequence[currentSequenceLength - 1] = pattern.getValue();
246
+
247
+ for(int i = 0; i < FINDER_PATTERN_SEQUENCES.length; ++i){
248
+ int [] validSequence = FINDER_PATTERN_SEQUENCES[i];
249
+ if(validSequence.length >= currentSequenceLength){
250
+ boolean valid = true;
251
+ for(int pos = 0; pos < currentSequenceLength; ++pos) {
252
+ if (this.currentSequence[pos] != validSequence[pos]) {
253
+ valid = false;
254
+ break;
255
+ }
256
+ }
257
+
258
+ if(valid) {
259
+ return currentSequenceLength == validSequence.length;
260
+ }
261
+ }
262
+ }
263
+
264
+ throw NotFoundException.getNotFoundInstance();
265
+ }
266
+
267
+ private void findNextPair(BitArray row, Vector previousPairs, int forcedOffset) throws NotFoundException{
268
+ int[] counters = this.decodeFinderCounters;
269
+ counters[0] = 0;
270
+ counters[1] = 0;
271
+ counters[2] = 0;
272
+ counters[3] = 0;
273
+
274
+ int width = row.getSize();
275
+
276
+ int rowOffset;
277
+ if (forcedOffset >= 0) {
278
+ rowOffset = forcedOffset;
279
+ } else if (previousPairs.isEmpty()) {
280
+ rowOffset = 0;
281
+ } else{
282
+ ExpandedPair lastPair = ((ExpandedPair)previousPairs.lastElement());
283
+ rowOffset = lastPair.getFinderPattern().getStartEnd()[1];
284
+ }
285
+ boolean searchingEvenPair = previousPairs.size() % 2 != 0;
286
+
287
+ boolean isWhite = false;
288
+ while (rowOffset < width) {
289
+ isWhite = !row.get(rowOffset);
290
+ if (!isWhite) {
291
+ break;
292
+ }
293
+ rowOffset++;
294
+ }
295
+
296
+ int counterPosition = 0;
297
+ int patternStart = rowOffset;
298
+ for (int x = rowOffset; x < width; x++) {
299
+ boolean pixel = row.get(x);
300
+ if (pixel ^ isWhite) {
301
+ counters[counterPosition]++;
302
+ } else {
303
+ if (counterPosition == 3) {
304
+ if (searchingEvenPair) {
305
+ reverseCounters(counters);
306
+ }
307
+
308
+ if (isFinderPattern(counters)){
309
+ this.startEnd[0] = patternStart;
310
+ this.startEnd[1] = x;
311
+ return;
312
+ }
313
+
314
+ if (searchingEvenPair) {
315
+ reverseCounters(counters);
316
+ }
317
+
318
+ patternStart += counters[0] + counters[1];
319
+ counters[0] = counters[2];
320
+ counters[1] = counters[3];
321
+ counters[2] = 0;
322
+ counters[3] = 0;
323
+ counterPosition--;
324
+ } else {
325
+ counterPosition++;
326
+ }
327
+ counters[counterPosition] = 1;
328
+ isWhite = !isWhite;
329
+ }
330
+ }
331
+ throw NotFoundException.getNotFoundInstance();
332
+ }
333
+
334
+ private static void reverseCounters(int [] counters){
335
+ int length = counters.length;
336
+ for(int i = 0; i < length / 2; ++i){
337
+ int tmp = counters[i];
338
+ counters[i] = counters[length - i - 1];
339
+ counters[length - i - 1] = tmp;
340
+ }
341
+ }
342
+
343
+ private FinderPattern parseFoundFinderPattern(BitArray row, int rowNumber, boolean oddPattern) {
344
+ // Actually we found elements 2-5.
345
+ int firstCounter;
346
+ int start;
347
+ int end;
348
+
349
+ if(oddPattern){
350
+ // If pattern number is odd, we need to locate element 1 *before* the current block.
351
+
352
+ int firstElementStart = this.startEnd[0] - 1;
353
+ // Locate element 1
354
+ while (firstElementStart >= 0 && !row.get(firstElementStart)) {
355
+ firstElementStart--;
356
+ }
357
+
358
+ firstElementStart++;
359
+ firstCounter = this.startEnd[0] - firstElementStart;
360
+ start = firstElementStart;
361
+ end = this.startEnd[1];
362
+
363
+ }else{
364
+ // If pattern number is even, the pattern is reversed, so we need to locate element 1 *after* the current block.
365
+
366
+ start = this.startEnd[0];
367
+
368
+ int firstElementStart = this.startEnd[1] + 1;
369
+ while(row.get(firstElementStart) && firstElementStart < row.size) {
370
+ firstElementStart++;
371
+ }
372
+
373
+ end = firstElementStart;
374
+ firstCounter = end - this.startEnd[1];
375
+ }
376
+
377
+ // Make 'counters' hold 1-4
378
+ int [] counters = this.decodeFinderCounters;
379
+ for (int i = counters.length - 1; i > 0; i--) {
380
+ counters[i] = counters[i - 1];
381
+ }
382
+
383
+ counters[0] = firstCounter;
384
+ int value;
385
+ try {
386
+ value = parseFinderValue(counters, FINDER_PATTERNS);
387
+ } catch (NotFoundException nfe) {
388
+ return null;
389
+ }
390
+ return new FinderPattern(value, new int[] {start, end}, start, end, rowNumber);
391
+ }
392
+
393
+ DataCharacter decodeDataCharacter(BitArray row, FinderPattern pattern, boolean isOddPattern, boolean leftChar)
394
+ throws NotFoundException {
395
+ int[] counters = this.dataCharacterCounters;
396
+ counters[0] = 0;
397
+ counters[1] = 0;
398
+ counters[2] = 0;
399
+ counters[3] = 0;
400
+ counters[4] = 0;
401
+ counters[5] = 0;
402
+ counters[6] = 0;
403
+ counters[7] = 0;
404
+
405
+ if (leftChar) {
406
+ recordPatternInReverse(row, pattern.getStartEnd()[0], counters);
407
+ } else {
408
+ recordPattern(row, pattern.getStartEnd()[1] + 1, counters);
409
+ // reverse it
410
+ for (int i = 0, j = counters.length - 1; i < j; i++, j--) {
411
+ int temp = counters[i];
412
+ counters[i] = counters[j];
413
+ counters[j] = temp;
414
+ }
415
+ }//counters[] has the pixels of the module
416
+
417
+ int numModules = 17; //left and right data characters have all the same length
418
+ float elementWidth = (float) count(counters) / (float) numModules;
419
+
420
+ int[] oddCounts = this.oddCounts;
421
+ int[] evenCounts = this.evenCounts;
422
+ float[] oddRoundingErrors = this.oddRoundingErrors;
423
+ float[] evenRoundingErrors = this.evenRoundingErrors;
424
+
425
+ for (int i = 0; i < counters.length; i++) {
426
+ float value = 1.0f * counters[i] / elementWidth;
427
+ int count = (int) (value + 0.5f); // Round
428
+ if (count < 1) {
429
+ count = 1;
430
+ } else if (count > 8) {
431
+ count = 8;
432
+ }
433
+ int offset = i >> 1;
434
+ if ((i & 0x01) == 0) {
435
+ oddCounts[offset] = count;
436
+ oddRoundingErrors[offset] = value - count;
437
+ } else {
438
+ evenCounts[offset] = count;
439
+ evenRoundingErrors[offset] = value - count;
440
+ }
441
+ }
442
+
443
+ adjustOddEvenCounts(numModules);
444
+
445
+ int weightRowNumber = 4 * pattern.getValue() + (isOddPattern?0:2) + (leftChar?0:1) - 1;
446
+
447
+ int oddSum = 0;
448
+ int oddChecksumPortion = 0;
449
+ for (int i = oddCounts.length - 1; i >= 0; i--) {
450
+ if(isNotA1left(pattern, isOddPattern, leftChar)){
451
+ int weight = WEIGHTS[weightRowNumber][2 * i];
452
+ oddChecksumPortion += oddCounts[i] * weight;
453
+ }
454
+ oddSum += oddCounts[i];
455
+ }
456
+ int evenChecksumPortion = 0;
457
+ int evenSum = 0;
458
+ for (int i = evenCounts.length - 1; i >= 0; i--) {
459
+ if(isNotA1left(pattern, isOddPattern, leftChar)){
460
+ int weight = WEIGHTS[weightRowNumber][2 * i + 1];
461
+ evenChecksumPortion += evenCounts[i] * weight;
462
+ }
463
+ evenSum += evenCounts[i];
464
+ }
465
+ int checksumPortion = oddChecksumPortion + evenChecksumPortion;
466
+
467
+ if ((oddSum & 0x01) != 0 || oddSum > 13 || oddSum < 4) {
468
+ throw NotFoundException.getNotFoundInstance();
469
+ }
470
+
471
+ int group = (13 - oddSum) / 2;
472
+ int oddWidest = SYMBOL_WIDEST[group];
473
+ int evenWidest = 9 - oddWidest;
474
+ int vOdd = RSSUtils.getRSSvalue(oddCounts, oddWidest, true);
475
+ int vEven = RSSUtils.getRSSvalue(evenCounts, evenWidest, false);
476
+ int tEven = EVEN_TOTAL_SUBSET[group];
477
+ int gSum = GSUM[group];
478
+ int value = vOdd * tEven + vEven + gSum;
479
+
480
+ return new DataCharacter(value, checksumPortion);
481
+ }
482
+
483
+ private static boolean isNotA1left(FinderPattern pattern, boolean isOddPattern, boolean leftChar) {
484
+ // A1: pattern.getValue is 0 (A), and it's an oddPattern, and it is a left char
485
+ return !(pattern.getValue() == 0 && isOddPattern && leftChar);
486
+ }
487
+
488
+ private void adjustOddEvenCounts(int numModules) throws NotFoundException {
489
+
490
+ int oddSum = count(this.oddCounts);
491
+ int evenSum = count(this.evenCounts);
492
+ int mismatch = oddSum + evenSum - numModules;
493
+ boolean oddParityBad = (oddSum & 0x01) == 1;
494
+ boolean evenParityBad = (evenSum & 0x01) == 0;
495
+
496
+ boolean incrementOdd = false;
497
+ boolean decrementOdd = false;
498
+
499
+ if (oddSum > 13) {
500
+ decrementOdd = true;
501
+ } else if (oddSum < 4) {
502
+ incrementOdd = true;
503
+ }
504
+ boolean incrementEven = false;
505
+ boolean decrementEven = false;
506
+ if (evenSum > 13) {
507
+ decrementEven = true;
508
+ } else if (evenSum < 4) {
509
+ incrementEven = true;
510
+ }
511
+
512
+ if (mismatch == 1) {
513
+ if (oddParityBad) {
514
+ if (evenParityBad) {
515
+ throw NotFoundException.getNotFoundInstance();
516
+ }
517
+ decrementOdd = true;
518
+ } else {
519
+ if (!evenParityBad) {
520
+ throw NotFoundException.getNotFoundInstance();
521
+ }
522
+ decrementEven = true;
523
+ }
524
+ } else if (mismatch == -1) {
525
+ if (oddParityBad) {
526
+ if (evenParityBad) {
527
+ throw NotFoundException.getNotFoundInstance();
528
+ }
529
+ incrementOdd = true;
530
+ } else {
531
+ if (!evenParityBad) {
532
+ throw NotFoundException.getNotFoundInstance();
533
+ }
534
+ incrementEven = true;
535
+ }
536
+ } else if (mismatch == 0) {
537
+ if (oddParityBad) {
538
+ if (!evenParityBad) {
539
+ throw NotFoundException.getNotFoundInstance();
540
+ }
541
+ // Both bad
542
+ if (oddSum < evenSum) {
543
+ incrementOdd = true;
544
+ decrementEven = true;
545
+ } else {
546
+ decrementOdd = true;
547
+ incrementEven = true;
548
+ }
549
+ } else {
550
+ if (evenParityBad) {
551
+ throw NotFoundException.getNotFoundInstance();
552
+ }
553
+ // Nothing to do!
554
+ }
555
+ } else {
556
+ throw NotFoundException.getNotFoundInstance();
557
+ }
558
+
559
+ if (incrementOdd) {
560
+ if (decrementOdd) {
561
+ throw NotFoundException.getNotFoundInstance();
562
+ }
563
+ increment(this.oddCounts, this.oddRoundingErrors);
564
+ }
565
+ if (decrementOdd) {
566
+ decrement(this.oddCounts, this.oddRoundingErrors);
567
+ }
568
+ if (incrementEven) {
569
+ if (decrementEven) {
570
+ throw NotFoundException.getNotFoundInstance();
571
+ }
572
+ increment(this.evenCounts, this.oddRoundingErrors);
573
+ }
574
+ if (decrementEven) {
575
+ decrement(this.evenCounts, this.evenRoundingErrors);
576
+ }
577
+ }
578
+ }