rhodes 2.4.1 → 3.0.0.beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (395) hide show
  1. data/CHANGELOG +7 -0
  2. data/Rakefile +7 -36
  3. data/doc/build.txt +48 -22
  4. data/doc/device-caps.txt +130 -1
  5. data/doc/rhom.txt +9 -3
  6. data/doc/test-log-debug.txt +5 -2
  7. data/lib/extensions/barcode/ext/barcode/platform/android/Rakefile +40 -20
  8. data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/AUTHORS +58 -0
  9. data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/CHANGES +266 -0
  10. data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/COPYING +201 -0
  11. data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/README +11 -0
  12. data/lib/extensions/barcode/ext/barcode/platform/android/ext_build.files +173 -0
  13. data/lib/extensions/barcode/ext/barcode/platform/android/jni/src/barcode.cpp +34 -0
  14. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/BarcodeFormat.java +103 -0
  15. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Binarizer.java +80 -0
  16. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/BinaryBitmap.java +128 -0
  17. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ChecksumException.java +37 -0
  18. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/DecodeHintType.java +79 -0
  19. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/EncodeHintType.java +39 -0
  20. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/FormatException.java +38 -0
  21. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/LuminanceSource.java +113 -0
  22. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/MultiFormatReader.java +166 -0
  23. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/MultiFormatWriter.java +65 -0
  24. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/NotFoundException.java +37 -0
  25. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Reader.java +64 -0
  26. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ReaderException.java +98 -0
  27. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Result.java +143 -0
  28. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ResultMetadataType.java +109 -0
  29. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ResultPoint.java +127 -0
  30. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ResultPointCallback.java +29 -0
  31. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Writer.java +54 -0
  32. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/WriterException.java +35 -0
  33. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AbstractDoCoMoResultParser.java +39 -0
  34. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AddressBookAUResultParser.java +73 -0
  35. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AddressBookDoCoMoResultParser.java +85 -0
  36. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AddressBookParsedResult.java +122 -0
  37. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/BizcardResultParser.java +94 -0
  38. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/BookmarkDoCoMoResultParser.java +46 -0
  39. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/CalendarParsedResult.java +134 -0
  40. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/EmailAddressParsedResult.java +61 -0
  41. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/EmailAddressResultParser.java +64 -0
  42. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/EmailDoCoMoResultParser.java +87 -0
  43. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ExpandedProductParsedResult.java +195 -0
  44. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ExpandedProductResultParser.java +199 -0
  45. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/GeoParsedResult.java +132 -0
  46. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/GeoResultParser.java +77 -0
  47. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ISBNParsedResult.java +39 -0
  48. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ISBNResultParser.java +54 -0
  49. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ParsedResult.java +73 -0
  50. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ParsedResultType.java +53 -0
  51. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ProductParsedResult.java +49 -0
  52. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ProductResultParser.java +66 -0
  53. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ResultParser.java +319 -0
  54. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/SMSMMSResultParser.java +107 -0
  55. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/SMSParsedResult.java +104 -0
  56. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/SMSTOMMSTOResultParser.java +57 -0
  57. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/TelParsedResult.java +54 -0
  58. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/TelResultParser.java +44 -0
  59. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/TextParsedResult.java +48 -0
  60. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/URIParsedResult.java +113 -0
  61. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/URIResultParser.java +87 -0
  62. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/URLTOResultParser.java +47 -0
  63. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/VCardResultParser.java +346 -0
  64. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/VEventResultParser.java +54 -0
  65. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/WifiParsedResult.java +53 -0
  66. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/WifiResultParser.java +50 -0
  67. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/AbstractNDEFResultParser.java +45 -0
  68. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFRecord.java +87 -0
  69. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFSmartPosterParsedResult.java +63 -0
  70. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFSmartPosterResultParser.java +81 -0
  71. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFTextResultParser.java +57 -0
  72. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFURIResultParser.java +95 -0
  73. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/BitArray.java +247 -0
  74. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/BitMatrix.java +226 -0
  75. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/BitSource.java +97 -0
  76. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/CharacterSetECI.java +110 -0
  77. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/Collections.java +53 -0
  78. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/Comparator.java +27 -0
  79. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/DecoderResult.java +63 -0
  80. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/DefaultGridSampler.java +81 -0
  81. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/DetectorResult.java +46 -0
  82. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/ECI.java +52 -0
  83. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/GlobalHistogramBinarizer.java +196 -0
  84. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/GridSampler.java +171 -0
  85. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/HybridBinarizer.java +185 -0
  86. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/PerspectiveTransform.java +148 -0
  87. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/StringUtils.java +191 -0
  88. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/detector/MonochromeRectangleDetector.java +209 -0
  89. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/detector/WhiteRectangleDetector.java +316 -0
  90. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/GF256.java +139 -0
  91. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/GF256Poly.java +263 -0
  92. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/ReedSolomonDecoder.java +194 -0
  93. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/ReedSolomonEncoder.java +75 -0
  94. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/ReedSolomonException.java +31 -0
  95. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/DataMatrixReader.java +161 -0
  96. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/BitMatrixParser.java +446 -0
  97. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/DataBlock.java +118 -0
  98. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/DecodedBitStreamParser.java +462 -0
  99. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/Decoder.java +134 -0
  100. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/Version.java +242 -0
  101. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/detector/Detector.java +348 -0
  102. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/ByQuadrantReader.java +96 -0
  103. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/GenericMultipleBarcodeReader.java +156 -0
  104. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/MultipleBarcodeReader.java +37 -0
  105. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/qrcode/QRCodeMultiReader.java +80 -0
  106. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/qrcode/detector/MultiDetector.java +72 -0
  107. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.java +324 -0
  108. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/CodaBarReader.java +263 -0
  109. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code128Reader.java +473 -0
  110. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code128Writer.java +73 -0
  111. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code39Reader.java +333 -0
  112. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code39Writer.java +82 -0
  113. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code93Reader.java +273 -0
  114. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN13Reader.java +135 -0
  115. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN13Writer.java +81 -0
  116. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN8Reader.java +72 -0
  117. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN8Writer.java +76 -0
  118. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EANManufacturerOrgSupport.java +170 -0
  119. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/ITFReader.java +348 -0
  120. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/ITFWriter.java +68 -0
  121. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/MultiFormatOneDReader.java +109 -0
  122. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/MultiFormatUPCEANReader.java +113 -0
  123. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/OneDReader.java +297 -0
  124. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCAReader.java +75 -0
  125. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEANExtensionSupport.java +186 -0
  126. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEANReader.java +355 -0
  127. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEANWriter.java +104 -0
  128. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEReader.java +153 -0
  129. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/AbstractRSSReader.java +110 -0
  130. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/DataCharacter.java +37 -0
  131. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/FinderPattern.java +48 -0
  132. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/Pair.java +41 -0
  133. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/RSS14Reader.java +494 -0
  134. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/RSSUtils.java +155 -0
  135. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/BitArrayBuilder.java +85 -0
  136. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/ExpandedPair.java +68 -0
  137. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/RSSExpandedReader.java +578 -0
  138. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI013103decoder.java +47 -0
  139. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01320xDecoder.java +55 -0
  140. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01392xDecoder.java +66 -0
  141. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01393xDecoder.java +76 -0
  142. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI013x0x1xDecoder.java +106 -0
  143. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI013x0xDecoder.java +56 -0
  144. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01AndOtherAIs.java +56 -0
  145. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01decoder.java +81 -0
  146. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01weightDecoder.java +58 -0
  147. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AbstractExpandedDecoder.java +85 -0
  148. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AnyAIDecoder.java +48 -0
  149. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/BlockParsedResult.java +60 -0
  150. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/CurrentParsingState.java +69 -0
  151. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedChar.java +52 -0
  152. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedInformation.java +63 -0
  153. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedNumeric.java +79 -0
  154. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedObject.java +44 -0
  155. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/FieldParser.java +285 -0
  156. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/GeneralAppIdDecoder.java +414 -0
  157. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/PDF417Reader.java +79 -0
  158. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/decoder/BitMatrixParser.java +1163 -0
  159. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java +629 -0
  160. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/decoder/Decoder.java +150 -0
  161. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/detector/Detector.java +498 -0
  162. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/QRCodeReader.java +166 -0
  163. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/QRCodeWriter.java +108 -0
  164. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/BitMatrixParser.java +203 -0
  165. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/DataBlock.java +123 -0
  166. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/DataMask.java +155 -0
  167. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java +261 -0
  168. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/Decoder.java +148 -0
  169. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/ErrorCorrectionLevel.java +86 -0
  170. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/FormatInformation.java +171 -0
  171. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/Mode.java +112 -0
  172. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/Version.java +586 -0
  173. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/AlignmentPattern.java +48 -0
  174. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/AlignmentPatternFinder.java +279 -0
  175. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/Detector.java +400 -0
  176. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/FinderPattern.java +63 -0
  177. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/FinderPatternFinder.java +585 -0
  178. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/FinderPatternInfo.java +49 -0
  179. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/BlockPair.java +37 -0
  180. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/ByteMatrix.java +97 -0
  181. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/Encoder.java +557 -0
  182. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/MaskUtil.java +217 -0
  183. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/MatrixUtil.java +524 -0
  184. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/QRCode.java +239 -0
  185. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/rhomobile/barcode/Barcode.java +63 -0
  186. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/rhomobile/barcode/RhoLuminanceSource.java +75 -0
  187. data/lib/extensions/barcode/ext/barcode/platform/iphone/Barcode.xcodeproj/project.pbxproj +74 -318
  188. data/lib/extensions/barcode/ext/barcode/platform/iphone/Classes/barcode.m +70 -0
  189. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/COPYING +27 -0
  190. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarCaptureReader.h +105 -0
  191. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarHelpController.h +60 -0
  192. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarImage.h +69 -0
  193. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarImageScanner.h +51 -0
  194. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderController.h +142 -0
  195. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderView.h +118 -0
  196. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderViewController.h +100 -0
  197. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarSDK.h +33 -0
  198. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarSymbol.h +71 -0
  199. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar.h +1476 -0
  200. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Decoder.h +201 -0
  201. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Exception.h +187 -0
  202. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Image.h +321 -0
  203. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/ImageScanner.h +130 -0
  204. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Processor.h +223 -0
  205. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Scanner.h +162 -0
  206. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Symbol.h +529 -0
  207. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Video.h +170 -0
  208. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Window.h +136 -0
  209. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/LICENSE +504 -0
  210. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/README +59 -0
  211. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-back.png +0 -0
  212. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-help.html +88 -0
  213. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-helpicons.png +0 -0
  214. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-samples.png +0 -0
  215. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/libzbar.a +0 -0
  216. data/lib/extensions/debugger/debugger.rb +215 -67
  217. data/lib/extensions/nfc/ext/nfc/platform/android/AndroidManifest.xml +1 -1
  218. data/lib/extensions/nfc/ext/nfc/platform/android/src/com/nfc/Nfc.java +14 -2
  219. data/lib/extensions/timeout/timeout.rb +114 -0
  220. data/lib/framework/rho/render.rb +14 -16
  221. data/lib/framework/rho/rho.rb +38 -14
  222. data/lib/framework/rho/rhoapplication.rb +1 -1
  223. data/lib/framework/rho/rhocontroller.rb +3 -3
  224. data/lib/framework/rho/rhofsconnector.rb +18 -6
  225. data/lib/framework/rho/rhoviewhelpers.rb +1 -1
  226. data/lib/framework/rhoappmanifest.rb +44 -0
  227. data/lib/framework/rhodes.rb +1 -1
  228. data/lib/framework/rhoframework.rb +31 -11
  229. data/lib/framework/rholang/localization_simplified.rb +10 -6
  230. data/lib/framework/rhom/rhom_object_factory.rb +3 -3
  231. data/lib/framework/version.rb +1 -1
  232. data/lib/rhodes.rb +1 -1
  233. data/platform/android/Rhodes/AndroidManifest.xml +2 -2
  234. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesApplication.h +32 -8
  235. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesService.h +21 -21
  236. data/platform/android/Rhodes/jni/src/rhocryptimpl.cpp +1 -0
  237. data/platform/android/Rhodes/jni/src/rhodes.cpp +21 -9
  238. data/platform/android/Rhodes/jni/src/sslimpl.cpp +1 -0
  239. data/platform/android/Rhodes/src/com/rhomobile/rhodes/BaseActivity.java +7 -6
  240. data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushReceiver.java +19 -1
  241. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhoCryptImpl.java +2 -2
  242. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesActivity.java +24 -15
  243. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesApplication.java +39 -47
  244. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +113 -106
  245. data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java +11 -0
  246. data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/StatusNotification.java +49 -0
  247. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +1 -1
  248. data/platform/android/Rhodes/src/com/rhomobile/rhodes/socket/SSLImpl.java +5 -1
  249. data/platform/android/build/RhodesSRC_build.files +1 -0
  250. data/platform/android/build/android.rake +93 -6
  251. data/platform/bb/RubyVM/src/com/rho/RhodesApp.java +5 -4
  252. data/platform/bb/RubyVM/src/com/rho/file/RhoFile.java +10 -0
  253. data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +16 -15
  254. data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +2 -2
  255. data/platform/bb/RubyVM/src/com/rho/sync/SyncSource.java +21 -19
  256. data/platform/bb/rhodes/src/com/rho/BrowserAdapter5.java +2 -2
  257. data/platform/bb/rhodes/src/com/rho/rubyext/System.java +6 -1
  258. data/platform/bb/rhodes/src/com/rho/rubyext/WebView.java +10 -3
  259. data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +21 -1
  260. data/platform/iphone/Classes/SimpleMainView.m +5 -5
  261. data/platform/iphone/Info.plist +1 -1
  262. data/platform/iphone/rbuild/iphone.rake +30 -1
  263. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +12 -0
  264. data/platform/shared/SyncClient/SyncClient.cpp +136 -20
  265. data/platform/shared/SyncClient/SyncClient.h +17 -0
  266. data/platform/shared/common/AppMenu.cpp +6 -1
  267. data/platform/shared/common/RhoConf.cpp +13 -1
  268. data/platform/shared/common/RhoConf.h +3 -1
  269. data/platform/shared/common/RhoDefs.h +10 -0
  270. data/platform/shared/common/RhoFile.cpp +15 -0
  271. data/platform/shared/common/RhoFile.h +1 -0
  272. data/platform/shared/common/RhodesApp.cpp +16 -3
  273. data/platform/shared/common/RhodesApp.h +1 -0
  274. data/platform/shared/common/RhodesAppBase.cpp +102 -62
  275. data/platform/shared/common/RhodesAppBase.h +7 -1
  276. data/platform/shared/curl/lib/rhossl.c +1 -0
  277. data/platform/shared/db/DBAdapter.cpp +14 -2
  278. data/platform/shared/logging/RhoLogConf.cpp +21 -0
  279. data/platform/shared/logging/RhoLogConf.h +11 -0
  280. data/platform/shared/logging/RhoLogSink.cpp +24 -0
  281. data/platform/shared/logging/RhoLogSink.h +20 -1
  282. data/platform/shared/net/HttpServer.cpp +8 -6
  283. data/platform/shared/net/RawSocket.cpp +130 -0
  284. data/platform/shared/net/RawSocket.h +74 -0
  285. data/platform/shared/ruby/ext/rho/rhoruby.c +37 -1
  286. data/platform/shared/ruby/ext/rho/rhosupport.c +74 -21
  287. data/platform/shared/ruby/ext/sqlite3_api/sqlite3_api_wrap.c +9 -1
  288. data/platform/shared/ruby/vm_eval.c +4 -3
  289. data/platform/shared/sync/SyncEngine.cpp +11 -12
  290. data/platform/shared/sync/SyncEngine.h +2 -2
  291. data/platform/shared/sync/SyncNotify.cpp +41 -13
  292. data/platform/shared/sync/SyncNotify.h +20 -3
  293. data/platform/shared/sync/SyncSource.cpp +21 -19
  294. data/platform/shared/sync/SyncThread.cpp +11 -1
  295. data/platform/shared/sync/SyncThread.h +3 -0
  296. data/platform/shared/test/test_helper.cpp +7 -0
  297. data/platform/win32/RhoSimulator/QtCore4.dll +0 -0
  298. data/platform/win32/RhoSimulator/QtGui4.dll +0 -0
  299. data/platform/win32/RhoSimulator/QtNetwork4.dll +0 -0
  300. data/platform/win32/RhoSimulator/QtWebKit4.dll +0 -0
  301. data/platform/win32/RhoSimulator/imageformats/qgif4.dll +0 -0
  302. data/platform/win32/RhoSimulator/imageformats/qjpeg4.dll +0 -0
  303. data/platform/win32/RhoSimulator/rhosimulator.exe +0 -0
  304. data/platform/wm/RhoLib/RhoLib.vcproj +762 -14
  305. data/platform/wm/build/wm.rake +87 -10
  306. data/platform/wm/rhodes.sln +155 -72
  307. data/platform/wm/rhodes/MainWindow.cpp +5 -2
  308. data/platform/wm/rhodes/MainWindow.h +9 -1
  309. data/platform/wm/rhodes/RhoNativeViewManager.cpp +4 -0
  310. data/platform/wm/rhodes/Rhodes.cpp +60 -6
  311. data/platform/wm/rhodes/emulator/ExternalWebView.cpp +20 -0
  312. data/platform/wm/rhodes/emulator/ExternalWebView.h +23 -0
  313. data/platform/wm/rhodes/emulator/ExternalWebView.ui +46 -0
  314. data/platform/wm/rhodes/emulator/MainWindowCallback.h +18 -0
  315. data/platform/wm/rhodes/emulator/MainWindowProxy.cpp +268 -0
  316. data/platform/wm/rhodes/emulator/MainWindowProxy.h +34 -0
  317. data/platform/wm/rhodes/emulator/MainWindowQt.cpp +345 -0
  318. data/platform/wm/rhodes/emulator/MainWindowQt.h +118 -0
  319. data/platform/wm/rhodes/emulator/NativeToolbarQt.cpp +57 -0
  320. data/platform/wm/rhodes/emulator/NativeToolbarQt.h +52 -0
  321. data/platform/wm/rhodes/emulator/QtMainWindow.cpp +219 -0
  322. data/platform/wm/rhodes/emulator/QtMainWindow.h +62 -0
  323. data/platform/wm/rhodes/emulator/QtMainWindow.ui +122 -0
  324. data/platform/wm/rhodes/{RhoCryptImpl.cpp → rho/common/RhoCryptImpl.cpp} +0 -0
  325. data/platform/wm/rhodes/{RhoCryptImpl.h → rho/common/RhoCryptImpl.h} +0 -0
  326. data/platform/wm/rhodes/rho/rubyext/NativeToolbar.cpp +2 -86
  327. data/platform/wm/rhodes/rho/rubyext/NativeToolbarExt.cpp +87 -0
  328. data/platform/wm/rhodes/rho/rubyext/NativeToolbarExt.h +6 -0
  329. data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +60 -0
  330. data/platform/wm/rhodes/rhodes.vcproj +4025 -365
  331. data/platform/wm/rhodes/signature/Signature.cpp +29 -13
  332. data/platform/wm/rubylib/rubylib.vcproj +1167 -195
  333. data/platform/wm/shttpd/shttpd.vcproj +4 -4
  334. data/platform/wm/sqlite3/sqlite3.vcproj +441 -13
  335. data/platform/wm/syncengine/syncengine.vcproj +443 -15
  336. data/platform/wm/tcmalloc/tcmalloc.vcproj +0 -154
  337. data/platform/wm/tools/detool/LogServer.cpp +150 -0
  338. data/platform/wm/tools/detool/LogServer.h +23 -0
  339. data/platform/wm/tools/detool/detool.cpp +42 -4
  340. data/platform/wm/tools/detool/detool.vcproj +10 -1
  341. data/platform/wp7/IronRuby/Bin/Silverlight3Release/IronRuby.Libraries.dll +0 -0
  342. data/platform/wp7/IronRuby/Bin/Silverlight3Release/IronRuby.dll +0 -0
  343. data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Dynamic.dll +0 -0
  344. data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Scripting.Core.dll +0 -0
  345. data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Scripting.dll +0 -0
  346. data/platform/wp7/RhoAppRunner/Program.cs +20 -3
  347. data/platform/wp7/RhoLogServer/Program.cs +22 -0
  348. data/platform/wp7/RhoLogServer/Properties/AssemblyInfo.cs +36 -0
  349. data/platform/wp7/RhoLogServer/RhoLogServer.csproj +65 -0
  350. data/platform/wp7/RhoLogServer/SocketServer.cs +210 -0
  351. data/platform/wp7/RhoRubyExtGen/RhoAsyncHttp.cs +6 -0
  352. data/platform/wp7/RhoRubyLib/Initializers.Generated.cs +3 -2
  353. data/platform/wp7/RhoRubyLib/RhoRuby.cs +82 -0
  354. data/platform/wp7/RhoRubyLib/RhoRubyLib.csproj +7 -5
  355. data/platform/wp7/RhoRubyLib/WP_PlatformAdaptationLayer.cs +1 -1
  356. data/platform/wp7/RhoRubyLib/common/RhoParams.cs +1 -1
  357. data/platform/wp7/RhoRubyLib/common/ThreadQueue.cs +4 -1
  358. data/platform/wp7/RhoRubyLib/db/DBAdapter.cs +2 -2
  359. data/platform/wp7/RhoRubyLib/logging/IRhoLogSink.cs +1 -1
  360. data/platform/wp7/RhoRubyLib/logging/RhoEmptyLogger.cs +30 -0
  361. data/platform/wp7/RhoRubyLib/logging/RhoLogConf.cs +10 -0
  362. data/platform/wp7/RhoRubyLib/logging/RhoLogFileSink.cs +6 -1
  363. data/platform/wp7/RhoRubyLib/logging/RhoLogServerSink.cs +56 -0
  364. data/platform/wp7/RhoRubyLib/logging/RhoLogger.cs +24 -11
  365. data/platform/wp7/RhoRubyLib/net/AsyncHttp.cs +57 -14
  366. data/platform/wp7/RhoRubyLib/net/NetRequest.cs +32 -9
  367. data/platform/wp7/RhoRubyLib/rubyext/RhoAsyncHttp.cs +7 -0
  368. data/platform/wp7/RhoRubyLib/rubyext/RhoKernelOps.cs +6 -0
  369. data/platform/wp7/RhoRubyLib/sync/SyncEngine.cs +20 -16
  370. data/platform/wp7/RhoRubyLib/sync/SyncNotify.cs +2 -2
  371. data/platform/wp7/RhoRubyLib/sync/SyncSource.cs +138 -40
  372. data/platform/wp7/WPApplication/rho/apps/app/layout.erb +3 -1
  373. data/platform/wp7/build/wp.rake +151 -12
  374. data/platform/wp7/rhodes.sln +10 -0
  375. data/platform/wp7/rhodes/App.xaml.cs +6 -0
  376. data/platform/wp7/rhodes/MainPage.xaml +3 -0
  377. data/platform/wp7/rhodes/MainPage.xaml.cs +19 -0
  378. data/platform/wp7/rhodes/Rhodes.csproj +4 -2
  379. data/rakefile.rb +7 -36
  380. data/res/build-tools/RhoAppRunner.exe +0 -0
  381. data/res/build-tools/RhoLogServer.exe +0 -0
  382. data/res/build-tools/detool.exe +0 -0
  383. data/res/build-tools/wp7explorer.exe +0 -0
  384. data/res/generators/templates/application/app/layout.erb +3 -1
  385. data/res/generators/templates/application/public/jqtouch/jqtouch.js +1 -1
  386. data/rhodes.gemspec +1 -1
  387. data/spec/framework_spec/app/layout.erb +1 -1
  388. data/spec/framework_spec/build.yml +1 -0
  389. data/spec/perfomance_spec/app/layout.erb +3 -0
  390. data/spec/phone_spec/app/Account_s/account_s.rb +4 -1
  391. data/spec/phone_spec/app/spec/rhom_object_spec.rb +30 -1
  392. data/spec/phone_spec/app/spec_runner.rb +1 -1
  393. data/spec/phone_spec/build.yml +4 -1
  394. metadata +262 -10
  395. data/platform/wp7/IronRuby/Languages/Ruby/Ruby/Builtins/ConsoleStream.cs +0 -107
@@ -0,0 +1,75 @@
1
+ /*
2
+ * Copyright 2008 ZXing authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.google.zxing.common.reedsolomon;
18
+
19
+ import java.util.Vector;
20
+
21
+ /**
22
+ * <p>Implements Reed-Solomon enbcoding, as the name implies.</p>
23
+ *
24
+ * @author Sean Owen
25
+ * @author William Rucklidge
26
+ */
27
+ public final class ReedSolomonEncoder {
28
+
29
+ private final GF256 field;
30
+ private final Vector cachedGenerators;
31
+
32
+ public ReedSolomonEncoder(GF256 field) {
33
+ if (!GF256.QR_CODE_FIELD.equals(field)) {
34
+ throw new IllegalArgumentException("Only QR Code is supported at this time");
35
+ }
36
+ this.field = field;
37
+ this.cachedGenerators = new Vector();
38
+ cachedGenerators.addElement(new GF256Poly(field, new int[] { 1 }));
39
+ }
40
+
41
+ private GF256Poly buildGenerator(int degree) {
42
+ if (degree >= cachedGenerators.size()) {
43
+ GF256Poly lastGenerator = (GF256Poly) cachedGenerators.elementAt(cachedGenerators.size() - 1);
44
+ for (int d = cachedGenerators.size(); d <= degree; d++) {
45
+ GF256Poly nextGenerator = lastGenerator.multiply(new GF256Poly(field, new int[] { 1, field.exp(d - 1) }));
46
+ cachedGenerators.addElement(nextGenerator);
47
+ lastGenerator = nextGenerator;
48
+ }
49
+ }
50
+ return (GF256Poly) cachedGenerators.elementAt(degree);
51
+ }
52
+
53
+ public void encode(int[] toEncode, int ecBytes) {
54
+ if (ecBytes == 0) {
55
+ throw new IllegalArgumentException("No error correction bytes");
56
+ }
57
+ int dataBytes = toEncode.length - ecBytes;
58
+ if (dataBytes <= 0) {
59
+ throw new IllegalArgumentException("No data bytes provided");
60
+ }
61
+ GF256Poly generator = buildGenerator(ecBytes);
62
+ int[] infoCoefficients = new int[dataBytes];
63
+ System.arraycopy(toEncode, 0, infoCoefficients, 0, dataBytes);
64
+ GF256Poly info = new GF256Poly(field, infoCoefficients);
65
+ info = info.multiplyByMonomial(ecBytes, 1);
66
+ GF256Poly remainder = info.divide(generator)[1];
67
+ int[] coefficients = remainder.getCoefficients();
68
+ int numZeroCoefficients = ecBytes - coefficients.length;
69
+ for (int i = 0; i < numZeroCoefficients; i++) {
70
+ toEncode[dataBytes + i] = 0;
71
+ }
72
+ System.arraycopy(coefficients, 0, toEncode, dataBytes + numZeroCoefficients, coefficients.length);
73
+ }
74
+
75
+ }
@@ -0,0 +1,31 @@
1
+ /*
2
+ * Copyright 2007 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.common.reedsolomon;
18
+
19
+ /**
20
+ * <p>Thrown when an exception occurs during Reed-Solomon decoding, such as when
21
+ * there are too many errors to correct.</p>
22
+ *
23
+ * @author Sean Owen
24
+ */
25
+ public final class ReedSolomonException extends Exception {
26
+
27
+ public ReedSolomonException(String message) {
28
+ super(message);
29
+ }
30
+
31
+ }
@@ -0,0 +1,161 @@
1
+ /*
2
+ * Copyright 2007 ZXing authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.google.zxing.datamatrix;
18
+
19
+ import com.google.zxing.BarcodeFormat;
20
+ import com.google.zxing.BinaryBitmap;
21
+ import com.google.zxing.ChecksumException;
22
+ import com.google.zxing.DecodeHintType;
23
+ import com.google.zxing.FormatException;
24
+ import com.google.zxing.NotFoundException;
25
+ import com.google.zxing.Reader;
26
+ import com.google.zxing.Result;
27
+ import com.google.zxing.ResultMetadataType;
28
+ import com.google.zxing.ResultPoint;
29
+ import com.google.zxing.common.BitMatrix;
30
+ import com.google.zxing.common.DecoderResult;
31
+ import com.google.zxing.common.DetectorResult;
32
+ import com.google.zxing.datamatrix.decoder.Decoder;
33
+ import com.google.zxing.datamatrix.detector.Detector;
34
+
35
+ import java.util.Hashtable;
36
+
37
+ /**
38
+ * This implementation can detect and decode Data Matrix codes in an image.
39
+ *
40
+ * @author bbrown@google.com (Brian Brown)
41
+ */
42
+ public final class DataMatrixReader implements Reader {
43
+
44
+ private static final ResultPoint[] NO_POINTS = new ResultPoint[0];
45
+
46
+ private final Decoder decoder = new Decoder();
47
+
48
+ /**
49
+ * Locates and decodes a Data Matrix code in an image.
50
+ *
51
+ * @return a String representing the content encoded by the Data Matrix code
52
+ * @throws NotFoundException if a Data Matrix code cannot be found
53
+ * @throws FormatException if a Data Matrix code cannot be decoded
54
+ * @throws ChecksumException if error correction fails
55
+ */
56
+ public Result decode(BinaryBitmap image) throws NotFoundException, ChecksumException, FormatException {
57
+ return decode(image, null);
58
+ }
59
+
60
+ public Result decode(BinaryBitmap image, Hashtable hints)
61
+ throws NotFoundException, ChecksumException, FormatException {
62
+ DecoderResult decoderResult;
63
+ ResultPoint[] points;
64
+ if (hints != null && hints.containsKey(DecodeHintType.PURE_BARCODE)) {
65
+ BitMatrix bits = extractPureBits(image.getBlackMatrix());
66
+ decoderResult = decoder.decode(bits);
67
+ points = NO_POINTS;
68
+ } else {
69
+ DetectorResult detectorResult = new Detector(image.getBlackMatrix()).detect();
70
+ decoderResult = decoder.decode(detectorResult.getBits());
71
+ points = detectorResult.getPoints();
72
+ }
73
+ Result result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), points,
74
+ BarcodeFormat.DATA_MATRIX);
75
+ if (decoderResult.getByteSegments() != null) {
76
+ result.putMetadata(ResultMetadataType.BYTE_SEGMENTS, decoderResult.getByteSegments());
77
+ }
78
+ if (decoderResult.getECLevel() != null) {
79
+ result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, decoderResult.getECLevel().toString());
80
+ }
81
+ return result;
82
+ }
83
+
84
+ public void reset() {
85
+ // do nothing
86
+ }
87
+
88
+ /**
89
+ * This method detects a Data Matrix code in a "pure" image -- that is, pure monochrome image
90
+ * which contains only an unrotated, unskewed, image of a Data Matrix code, with some white border
91
+ * around it. This is a specialized method that works exceptionally fast in this special
92
+ * case.
93
+ *
94
+ * @see com.google.zxing.qrcode.QRCodeReader#extractPureBits(BitMatrix)
95
+ */
96
+ private static BitMatrix extractPureBits(BitMatrix image) throws NotFoundException {
97
+
98
+ int height = image.getHeight();
99
+ int width = image.getWidth();
100
+ int minDimension = Math.min(height, width);
101
+
102
+ // And then keep tracking across the top-left black module to determine module size
103
+ //int moduleEnd = borderWidth;
104
+ int[] leftTopBlack = image.getTopLeftOnBit();
105
+ if (leftTopBlack == null) {
106
+ throw NotFoundException.getNotFoundInstance();
107
+ }
108
+ int x = leftTopBlack[0];
109
+ int y = leftTopBlack[1];
110
+ while (x < minDimension && y < minDimension && image.get(x, y)) {
111
+ x++;
112
+ }
113
+ if (x == minDimension) {
114
+ throw NotFoundException.getNotFoundInstance();
115
+ }
116
+
117
+ int moduleSize = x - leftTopBlack[0];
118
+
119
+ // And now find where the rightmost black module on the first row ends
120
+ int rowEndOfSymbol = width - 1;
121
+ while (rowEndOfSymbol >= 0 && !image.get(rowEndOfSymbol, y)) {
122
+ rowEndOfSymbol--;
123
+ }
124
+ if (rowEndOfSymbol < 0) {
125
+ throw NotFoundException.getNotFoundInstance();
126
+ }
127
+ rowEndOfSymbol++;
128
+
129
+ // Make sure width of barcode is a multiple of module size
130
+ if ((rowEndOfSymbol - x) % moduleSize != 0) {
131
+ throw NotFoundException.getNotFoundInstance();
132
+ }
133
+ int dimension = 2 + ((rowEndOfSymbol - x) / moduleSize);
134
+
135
+ y += moduleSize;
136
+
137
+ // Push in the "border" by half the module width so that we start
138
+ // sampling in the middle of the module. Just in case the image is a
139
+ // little off, this will help recover.
140
+ x -= moduleSize >> 1;
141
+ y -= moduleSize >> 1;
142
+
143
+ if ((x + (dimension - 1) * moduleSize) >= width ||
144
+ (y + (dimension - 1) * moduleSize) >= height) {
145
+ throw NotFoundException.getNotFoundInstance();
146
+ }
147
+
148
+ // Now just read off the bits
149
+ BitMatrix bits = new BitMatrix(dimension);
150
+ for (int i = 0; i < dimension; i++) {
151
+ int iOffset = y + i * moduleSize;
152
+ for (int j = 0; j < dimension; j++) {
153
+ if (image.get(x + j * moduleSize, iOffset)) {
154
+ bits.set(j, i);
155
+ }
156
+ }
157
+ }
158
+ return bits;
159
+ }
160
+
161
+ }
@@ -0,0 +1,446 @@
1
+ /*
2
+ * Copyright 2007 ZXing authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.google.zxing.datamatrix.decoder;
18
+
19
+ import com.google.zxing.FormatException;
20
+ import com.google.zxing.common.BitMatrix;
21
+
22
+ /**
23
+ * @author bbrown@google.com (Brian Brown)
24
+ */
25
+ final class BitMatrixParser {
26
+
27
+ private final BitMatrix mappingBitMatrix;
28
+ private final BitMatrix readMappingMatrix;
29
+ private final Version version;
30
+
31
+ /**
32
+ * @param bitMatrix {@link BitMatrix} to parse
33
+ * @throws FormatException if dimension is < 10 or > 144 or not 0 mod 2
34
+ */
35
+ BitMatrixParser(BitMatrix bitMatrix) throws FormatException {
36
+ int dimension = bitMatrix.getHeight();
37
+ if (dimension < 10 || dimension > 144 || (dimension & 0x01) != 0) {
38
+ throw FormatException.getFormatInstance();
39
+ }
40
+
41
+ version = readVersion(bitMatrix);
42
+ this.mappingBitMatrix = extractDataRegion(bitMatrix);
43
+ // TODO(bbrown): Make this work for rectangular symbols
44
+ this.readMappingMatrix = new BitMatrix(this.mappingBitMatrix.getHeight());
45
+ }
46
+
47
+ /**
48
+ * <p>Creates the version object based on the dimension of the original bit matrix from
49
+ * the datamatrix code.</p>
50
+ *
51
+ * <p>See ISO 16022:2006 Table 7 - ECC 200 symbol attributes</p>
52
+ *
53
+ * @param bitMatrix Original {@link BitMatrix} including alignment patterns
54
+ * @return {@link Version} encapsulating the Data Matrix Code's "version"
55
+ * @throws FormatException if the dimensions of the mapping matrix are not valid
56
+ * Data Matrix dimensions.
57
+ */
58
+ Version readVersion(BitMatrix bitMatrix) throws FormatException {
59
+
60
+ if (version != null) {
61
+ return version;
62
+ }
63
+
64
+ // TODO(bbrown): make this work for rectangular dimensions as well.
65
+ int numRows = bitMatrix.getHeight();
66
+ int numColumns = numRows;
67
+
68
+ return Version.getVersionForDimensions(numRows, numColumns);
69
+ }
70
+
71
+ /**
72
+ * <p>Reads the bits in the {@link BitMatrix} representing the mapping matrix (No alignment patterns)
73
+ * in the correct order in order to reconstitute the codewords bytes contained within the
74
+ * Data Matrix Code.</p>
75
+ *
76
+ * @return bytes encoded within the Data Matrix Code
77
+ * @throws FormatException if the exact number of bytes expected is not read
78
+ */
79
+ byte[] readCodewords() throws FormatException {
80
+
81
+ byte[] result = new byte[version.getTotalCodewords()];
82
+ int resultOffset = 0;
83
+
84
+ int row = 4;
85
+ int column = 0;
86
+ // TODO(bbrown): Data Matrix can be rectangular, assuming square for now
87
+ int numRows = mappingBitMatrix.getHeight();
88
+ int numColumns = numRows;
89
+
90
+ boolean corner1Read = false;
91
+ boolean corner2Read = false;
92
+ boolean corner3Read = false;
93
+ boolean corner4Read = false;
94
+
95
+ // Read all of the codewords
96
+ do {
97
+ // Check the four corner cases
98
+ if ((row == numRows) && (column == 0) && !corner1Read) {
99
+ result[resultOffset++] = (byte) readCorner1(numRows, numColumns);
100
+ row -= 2;
101
+ column +=2;
102
+ corner1Read = true;
103
+ } else if ((row == numRows-2) && (column == 0) && ((numColumns & 0x03) != 0) && !corner2Read) {
104
+ result[resultOffset++] = (byte) readCorner2(numRows, numColumns);
105
+ row -= 2;
106
+ column +=2;
107
+ corner2Read = true;
108
+ } else if ((row == numRows+4) && (column == 2) && ((numColumns & 0x07) == 0) && !corner3Read) {
109
+ result[resultOffset++] = (byte) readCorner3(numRows, numColumns);
110
+ row -= 2;
111
+ column +=2;
112
+ corner3Read = true;
113
+ } else if ((row == numRows-2) && (column == 0) && ((numColumns & 0x07) == 4) && !corner4Read) {
114
+ result[resultOffset++] = (byte) readCorner4(numRows, numColumns);
115
+ row -= 2;
116
+ column +=2;
117
+ corner4Read = true;
118
+ } else {
119
+ // Sweep upward diagonally to the right
120
+ do {
121
+ if ((row < numRows) && (column >= 0) && !readMappingMatrix.get(column, row)) {
122
+ result[resultOffset++] = (byte) readUtah(row, column, numRows, numColumns);
123
+ }
124
+ row -= 2;
125
+ column +=2;
126
+ } while ((row >= 0) && (column < numColumns));
127
+ row += 1;
128
+ column +=3;
129
+
130
+ // Sweep downward diagonally to the left
131
+ do {
132
+ if ((row >= 0) && (column < numColumns) && !readMappingMatrix.get(column, row)) {
133
+ result[resultOffset++] = (byte) readUtah(row, column, numRows, numColumns);
134
+ }
135
+ row += 2;
136
+ column -=2;
137
+ } while ((row < numRows) && (column >= 0));
138
+ row += 3;
139
+ column +=1;
140
+ }
141
+ } while ((row < numRows) || (column < numColumns));
142
+
143
+ if (resultOffset != version.getTotalCodewords()) {
144
+ throw FormatException.getFormatInstance();
145
+ }
146
+ return result;
147
+ }
148
+
149
+ /**
150
+ * <p>Reads a bit of the mapping matrix accounting for boundary wrapping.</p>
151
+ *
152
+ * @param row Row to read in the mapping matrix
153
+ * @param column Column to read in the mapping matrix
154
+ * @param numRows Number of rows in the mapping matrix
155
+ * @param numColumns Number of columns in the mapping matrix
156
+ * @return value of the given bit in the mapping matrix
157
+ */
158
+ boolean readModule(int row, int column, int numRows, int numColumns) {
159
+ // Adjust the row and column indices based on boundary wrapping
160
+ if (row < 0) {
161
+ row += numRows;
162
+ column += 4 - ((numRows + 4) & 0x07);
163
+ }
164
+ if (column < 0) {
165
+ column += numColumns;
166
+ row += 4 - ((numColumns + 4) & 0x07);
167
+ }
168
+ readMappingMatrix.set(column, row);
169
+ return mappingBitMatrix.get(column, row);
170
+ }
171
+
172
+ /**
173
+ * <p>Reads the 8 bits of the standard Utah-shaped pattern.</p>
174
+ *
175
+ * <p>See ISO 16022:2006, 5.8.1 Figure 6</p>
176
+ *
177
+ * @param row Current row in the mapping matrix, anchored at the 8th bit (LSB) of the pattern
178
+ * @param column Current column in the mapping matrix, anchored at the 8th bit (LSB) of the pattern
179
+ * @param numRows Number of rows in the mapping matrix
180
+ * @param numColumns Number of columns in the mapping matrix
181
+ * @return byte from the utah shape
182
+ */
183
+ int readUtah(int row, int column, int numRows, int numColumns) {
184
+ int currentByte = 0;
185
+ if (readModule(row - 2, column - 2, numRows, numColumns)) {
186
+ currentByte |= 1;
187
+ }
188
+ currentByte <<= 1;
189
+ if (readModule(row - 2, column - 1, numRows, numColumns)) {
190
+ currentByte |= 1;
191
+ }
192
+ currentByte <<= 1;
193
+ if (readModule(row - 1, column - 2, numRows, numColumns)) {
194
+ currentByte |= 1;
195
+ }
196
+ currentByte <<= 1;
197
+ if (readModule(row - 1, column - 1, numRows, numColumns)) {
198
+ currentByte |= 1;
199
+ }
200
+ currentByte <<= 1;
201
+ if (readModule(row - 1, column, numRows, numColumns)) {
202
+ currentByte |= 1;
203
+ }
204
+ currentByte <<= 1;
205
+ if (readModule(row, column - 2, numRows, numColumns)) {
206
+ currentByte |= 1;
207
+ }
208
+ currentByte <<= 1;
209
+ if (readModule(row, column - 1, numRows, numColumns)) {
210
+ currentByte |= 1;
211
+ }
212
+ currentByte <<= 1;
213
+ if (readModule(row, column, numRows, numColumns)) {
214
+ currentByte |= 1;
215
+ }
216
+ return currentByte;
217
+ }
218
+
219
+ /**
220
+ * <p>Reads the 8 bits of the special corner condition 1.</p>
221
+ *
222
+ * <p>See ISO 16022:2006, Figure F.3</p>
223
+ *
224
+ * @param numRows Number of rows in the mapping matrix
225
+ * @param numColumns Number of columns in the mapping matrix
226
+ * @return byte from the Corner condition 1
227
+ */
228
+ int readCorner1(int numRows, int numColumns) {
229
+ int currentByte = 0;
230
+ if (readModule(numRows - 1, 0, numRows, numColumns)) {
231
+ currentByte |= 1;
232
+ }
233
+ currentByte <<= 1;
234
+ if (readModule(numRows - 1, 1, numRows, numColumns)) {
235
+ currentByte |= 1;
236
+ }
237
+ currentByte <<= 1;
238
+ if (readModule(numRows - 1, 2, numRows, numColumns)) {
239
+ currentByte |= 1;
240
+ }
241
+ currentByte <<= 1;
242
+ if (readModule(0, numColumns - 2, numRows, numColumns)) {
243
+ currentByte |= 1;
244
+ }
245
+ currentByte <<= 1;
246
+ if (readModule(0, numColumns - 1, numRows, numColumns)) {
247
+ currentByte |= 1;
248
+ }
249
+ currentByte <<= 1;
250
+ if (readModule(1, numColumns - 1, numRows, numColumns)) {
251
+ currentByte |= 1;
252
+ }
253
+ currentByte <<= 1;
254
+ if (readModule(2, numColumns - 1, numRows, numColumns)) {
255
+ currentByte |= 1;
256
+ }
257
+ currentByte <<= 1;
258
+ if (readModule(3, numColumns - 1, numRows, numColumns)) {
259
+ currentByte |= 1;
260
+ }
261
+ return currentByte;
262
+ }
263
+
264
+ /**
265
+ * <p>Reads the 8 bits of the special corner condition 2.</p>
266
+ *
267
+ * <p>See ISO 16022:2006, Figure F.4</p>
268
+ *
269
+ * @param numRows Number of rows in the mapping matrix
270
+ * @param numColumns Number of columns in the mapping matrix
271
+ * @return byte from the Corner condition 2
272
+ */
273
+ int readCorner2(int numRows, int numColumns) {
274
+ int currentByte = 0;
275
+ if (readModule(numRows - 3, 0, numRows, numColumns)) {
276
+ currentByte |= 1;
277
+ }
278
+ currentByte <<= 1;
279
+ if (readModule(numRows - 2, 0, numRows, numColumns)) {
280
+ currentByte |= 1;
281
+ }
282
+ currentByte <<= 1;
283
+ if (readModule(numRows - 1, 0, numRows, numColumns)) {
284
+ currentByte |= 1;
285
+ }
286
+ currentByte <<= 1;
287
+ if (readModule(0, numColumns - 4, numRows, numColumns)) {
288
+ currentByte |= 1;
289
+ }
290
+ currentByte <<= 1;
291
+ if (readModule(0, numColumns - 3, numRows, numColumns)) {
292
+ currentByte |= 1;
293
+ }
294
+ currentByte <<= 1;
295
+ if (readModule(0, numColumns - 2, numRows, numColumns)) {
296
+ currentByte |= 1;
297
+ }
298
+ currentByte <<= 1;
299
+ if (readModule(0, numColumns - 1, numRows, numColumns)) {
300
+ currentByte |= 1;
301
+ }
302
+ currentByte <<= 1;
303
+ if (readModule(1, numColumns - 1, numRows, numColumns)) {
304
+ currentByte |= 1;
305
+ }
306
+ return currentByte;
307
+ }
308
+
309
+ /**
310
+ * <p>Reads the 8 bits of the special corner condition 3.</p>
311
+ *
312
+ * <p>See ISO 16022:2006, Figure F.5</p>
313
+ *
314
+ * @param numRows Number of rows in the mapping matrix
315
+ * @param numColumns Number of columns in the mapping matrix
316
+ * @return byte from the Corner condition 3
317
+ */
318
+ int readCorner3(int numRows, int numColumns) {
319
+ int currentByte = 0;
320
+ if (readModule(numRows - 1, 0, numRows, numColumns)) {
321
+ currentByte |= 1;
322
+ }
323
+ currentByte <<= 1;
324
+ if (readModule(numRows - 1, numColumns - 1, numRows, numColumns)) {
325
+ currentByte |= 1;
326
+ }
327
+ currentByte <<= 1;
328
+ if (readModule(0, numColumns - 3, numRows, numColumns)) {
329
+ currentByte |= 1;
330
+ }
331
+ currentByte <<= 1;
332
+ if (readModule(0, numColumns - 2, numRows, numColumns)) {
333
+ currentByte |= 1;
334
+ }
335
+ currentByte <<= 1;
336
+ if (readModule(0, numColumns - 1, numRows, numColumns)) {
337
+ currentByte |= 1;
338
+ }
339
+ currentByte <<= 1;
340
+ if (readModule(1, numColumns - 3, numRows, numColumns)) {
341
+ currentByte |= 1;
342
+ }
343
+ currentByte <<= 1;
344
+ if (readModule(1, numColumns - 2, numRows, numColumns)) {
345
+ currentByte |= 1;
346
+ }
347
+ currentByte <<= 1;
348
+ if (readModule(1, numColumns - 1, numRows, numColumns)) {
349
+ currentByte |= 1;
350
+ }
351
+ return currentByte;
352
+ }
353
+
354
+ /**
355
+ * <p>Reads the 8 bits of the special corner condition 4.</p>
356
+ *
357
+ * <p>See ISO 16022:2006, Figure F.6</p>
358
+ *
359
+ * @param numRows Number of rows in the mapping matrix
360
+ * @param numColumns Number of columns in the mapping matrix
361
+ * @return byte from the Corner condition 4
362
+ */
363
+ int readCorner4(int numRows, int numColumns) {
364
+ int currentByte = 0;
365
+ if (readModule(numRows - 3, 0, numRows, numColumns)) {
366
+ currentByte |= 1;
367
+ }
368
+ currentByte <<= 1;
369
+ if (readModule(numRows - 2, 0, numRows, numColumns)) {
370
+ currentByte |= 1;
371
+ }
372
+ currentByte <<= 1;
373
+ if (readModule(numRows - 1, 0, numRows, numColumns)) {
374
+ currentByte |= 1;
375
+ }
376
+ currentByte <<= 1;
377
+ if (readModule(0, numColumns - 2, numRows, numColumns)) {
378
+ currentByte |= 1;
379
+ }
380
+ currentByte <<= 1;
381
+ if (readModule(0, numColumns - 1, numRows, numColumns)) {
382
+ currentByte |= 1;
383
+ }
384
+ currentByte <<= 1;
385
+ if (readModule(1, numColumns - 1, numRows, numColumns)) {
386
+ currentByte |= 1;
387
+ }
388
+ currentByte <<= 1;
389
+ if (readModule(2, numColumns - 1, numRows, numColumns)) {
390
+ currentByte |= 1;
391
+ }
392
+ currentByte <<= 1;
393
+ if (readModule(3, numColumns - 1, numRows, numColumns)) {
394
+ currentByte |= 1;
395
+ }
396
+ return currentByte;
397
+ }
398
+
399
+ /**
400
+ * <p>Extracts the data region from a {@link BitMatrix} that contains
401
+ * alignment patterns.</p>
402
+ *
403
+ * @param bitMatrix Original {@link BitMatrix} with alignment patterns
404
+ * @return BitMatrix that has the alignment patterns removed
405
+ */
406
+ BitMatrix extractDataRegion(BitMatrix bitMatrix) {
407
+ int symbolSizeRows = version.getSymbolSizeRows();
408
+ int symbolSizeColumns = version.getSymbolSizeColumns();
409
+
410
+ // TODO(bbrown): Make this work with rectangular codes
411
+ if (bitMatrix.getHeight() != symbolSizeRows) {
412
+ throw new IllegalArgumentException("Dimension of bitMarix must match the version size");
413
+ }
414
+
415
+ int dataRegionSizeRows = version.getDataRegionSizeRows();
416
+ int dataRegionSizeColumns = version.getDataRegionSizeColumns();
417
+
418
+ int numDataRegionsRow = symbolSizeRows / dataRegionSizeRows;
419
+ int numDataRegionsColumn = symbolSizeColumns / dataRegionSizeColumns;
420
+
421
+ int sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows;
422
+ //int sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns;
423
+
424
+ // TODO(bbrown): Make this work with rectangular codes
425
+ BitMatrix bitMatrixWithoutAlignment = new BitMatrix(sizeDataRegionRow);
426
+ for (int dataRegionRow = 0; dataRegionRow < numDataRegionsRow; ++dataRegionRow) {
427
+ int dataRegionRowOffset = dataRegionRow * dataRegionSizeRows;
428
+ for (int dataRegionColumn = 0; dataRegionColumn < numDataRegionsColumn; ++dataRegionColumn) {
429
+ int dataRegionColumnOffset = dataRegionColumn * dataRegionSizeColumns;
430
+ for (int i = 0; i < dataRegionSizeRows; ++i) {
431
+ int readRowOffset = dataRegionRow * (dataRegionSizeRows + 2) + 1 + i;
432
+ int writeRowOffset = dataRegionRowOffset + i;
433
+ for (int j = 0; j < dataRegionSizeColumns; ++j) {
434
+ int readColumnOffset = dataRegionColumn * (dataRegionSizeColumns + 2) + 1 + j;
435
+ if (bitMatrix.get(readColumnOffset, readRowOffset)) {
436
+ int writeColumnOffset = dataRegionColumnOffset + j;
437
+ bitMatrixWithoutAlignment.set(writeColumnOffset, writeRowOffset);
438
+ }
439
+ }
440
+ }
441
+ }
442
+ }
443
+ return bitMatrixWithoutAlignment;
444
+ }
445
+
446
+ }