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,263 @@
1
+ /*
2
+ * Copyright 2008 ZXing authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.google.zxing.oned;
18
+
19
+ import java.util.Hashtable;
20
+
21
+ import com.google.zxing.BarcodeFormat;
22
+ import com.google.zxing.NotFoundException;
23
+ import com.google.zxing.Result;
24
+ import com.google.zxing.ResultPoint;
25
+ import com.google.zxing.common.BitArray;
26
+
27
+ /**
28
+ * <p>Decodes Codabar barcodes.</p>
29
+ *
30
+ * @author Bas Vijfwinkel
31
+ */
32
+ public final class CodaBarReader extends OneDReader {
33
+
34
+ private static final String ALPHABET_STRING = "0123456789-$:/.+ABCDTN";
35
+ private static final char[] ALPHABET = ALPHABET_STRING.toCharArray();
36
+
37
+ /**
38
+ * These represent the encodings of characters, as patterns of wide and narrow bars. The 7 least-significant bits of
39
+ * each int correspond to the pattern of wide and narrow, with 1s representing "wide" and 0s representing narrow. NOTE
40
+ * : c is equal to the * pattern NOTE : d is equal to the e pattern
41
+ */
42
+ private static final int[] CHARACTER_ENCODINGS = {
43
+ 0x003, 0x006, 0x009, 0x060, 0x012, 0x042, 0x021, 0x024, 0x030, 0x048, // 0-9
44
+ 0x00c, 0x018, 0x025, 0x051, 0x054, 0x015, 0x01A, 0x029, 0x00B, 0x00E, // -$:/.+ABCD
45
+ 0x01A, 0x029 //TN
46
+ };
47
+
48
+ // minimal number of characters that should be present (inclusing start and stop characters)
49
+ // this check has been added to reduce the number of false positive on other formats
50
+ // until the cause for this behaviour has been determined
51
+ // under normal circumstances this should be set to 3
52
+ private static final int minCharacterLength = 6;
53
+
54
+ // multiple start/end patterns
55
+ // official start and end patterns
56
+ private static final char[] STARTEND_ENCODING = {'E', '*', 'A', 'B', 'C', 'D', 'T', 'N'};
57
+ // some codabar generator allow the codabar string to be closed by every character
58
+ //private static final char[] STARTEND_ENCODING = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '$', ':', '/', '.', '+', 'A', 'B', 'C', 'D', 'T', 'N'};
59
+
60
+ // some industries use a checksum standard but this is not part of the original codabar standard
61
+ // for more information see : http://www.mecsw.com/specs/codabar.html
62
+
63
+ public Result decodeRow(int rowNumber, BitArray row, Hashtable hints) throws NotFoundException {
64
+ int[] start = findAsteriskPattern(row);
65
+ start[1] = 0; // BAS: settings this to 0 improves the recognition rate somehow?
66
+ int nextStart = start[1];
67
+ int end = row.getSize();
68
+
69
+ // Read off white space
70
+ while (nextStart < end && !row.get(nextStart)) {
71
+ nextStart++;
72
+ }
73
+
74
+ StringBuffer result = new StringBuffer();
75
+ //int[] counters = new int[7];
76
+ int[] counters;
77
+ int lastStart;
78
+
79
+ do {
80
+ counters = new int[]{0, 0, 0, 0, 0, 0, 0}; // reset counters
81
+ recordPattern(row, nextStart, counters);
82
+
83
+ char decodedChar = toNarrowWidePattern(counters);
84
+ if (decodedChar == '!') {
85
+ throw NotFoundException.getNotFoundInstance();
86
+ }
87
+ result.append(decodedChar);
88
+ lastStart = nextStart;
89
+ for (int i = 0; i < counters.length; i++) {
90
+ nextStart += counters[i];
91
+ }
92
+
93
+ // Read off white space
94
+ while (nextStart < end && !row.get(nextStart)) {
95
+ nextStart++;
96
+ }
97
+ } while (nextStart < end); // no fixed end pattern so keep on reading while data is available
98
+
99
+ // Look for whitespace after pattern:
100
+ int lastPatternSize = 0;
101
+ for (int i = 0; i < counters.length; i++) {
102
+ lastPatternSize += counters[i];
103
+ }
104
+
105
+ int whiteSpaceAfterEnd = nextStart - lastStart - lastPatternSize;
106
+ // If 50% of last pattern size, following last pattern, is not whitespace, fail
107
+ // (but if it's whitespace to the very end of the image, that's OK)
108
+ if ((nextStart) != end && (whiteSpaceAfterEnd / 2 < lastPatternSize)) {
109
+ throw NotFoundException.getNotFoundInstance();
110
+ }
111
+
112
+ // valid result?
113
+ if (result.length() < 2)
114
+ {
115
+ throw NotFoundException.getNotFoundInstance();
116
+ }
117
+
118
+ char startchar = result.charAt(0);
119
+ if (!arrayContains(STARTEND_ENCODING, startchar))
120
+ {
121
+ //invalid start character
122
+ throw NotFoundException.getNotFoundInstance();
123
+ }
124
+
125
+ // find stop character
126
+ for (int k = 1;k < result.length() ;k++)
127
+ {
128
+ if (result.charAt(k) == startchar)
129
+ {
130
+ // found stop character -> discard rest of the string
131
+ if ((k+1) != result.length())
132
+ {
133
+ result.delete(k+1,result.length()-1);
134
+ k = result.length();// break out of loop
135
+ }
136
+ }
137
+ }
138
+
139
+ // remove stop/start characters character and check if a string longer than 5 characters is contained
140
+ if (result.length() > minCharacterLength)
141
+ {
142
+ result.deleteCharAt(result.length()-1);
143
+ result.deleteCharAt(0);
144
+ }
145
+ else
146
+ {
147
+ // Almost surely a false positive ( start + stop + at least 1 character)
148
+ throw NotFoundException.getNotFoundInstance();
149
+ }
150
+
151
+ float left = (float) (start[1] + start[0]) / 2.0f;
152
+ float right = (float) (nextStart + lastStart) / 2.0f;
153
+ return new Result(
154
+ result.toString(),
155
+ null,
156
+ new ResultPoint[]{
157
+ new ResultPoint(left, (float) rowNumber),
158
+ new ResultPoint(right, (float) rowNumber)},
159
+ BarcodeFormat.CODABAR);
160
+ }
161
+
162
+ private static int[] findAsteriskPattern(BitArray row) throws NotFoundException {
163
+ int width = row.getSize();
164
+ int rowOffset = 0;
165
+ while (rowOffset < width) {
166
+ if (row.get(rowOffset)) {
167
+ break;
168
+ }
169
+ rowOffset++;
170
+ }
171
+
172
+ int counterPosition = 0;
173
+ int[] counters = new int[7];
174
+ int patternStart = rowOffset;
175
+ boolean isWhite = false;
176
+ int patternLength = counters.length;
177
+
178
+ for (int i = rowOffset; i < width; i++) {
179
+ boolean pixel = row.get(i);
180
+ if (pixel ^ isWhite) {
181
+ counters[counterPosition]++;
182
+ } else {
183
+ if (counterPosition == patternLength - 1) {
184
+ try {
185
+ if (arrayContains(STARTEND_ENCODING, toNarrowWidePattern(counters))) {
186
+ // Look for whitespace before start pattern, >= 50% of width of start pattern
187
+ if (row.isRange(Math.max(0, patternStart - (i - patternStart) / 2), patternStart, false)) {
188
+ return new int[]{patternStart, i};
189
+ }
190
+ }
191
+ } catch (IllegalArgumentException re) {
192
+ // no match, continue
193
+ }
194
+ patternStart += counters[0] + counters[1];
195
+ for (int y = 2; y < patternLength; y++) {
196
+ counters[y - 2] = counters[y];
197
+ }
198
+ counters[patternLength - 2] = 0;
199
+ counters[patternLength - 1] = 0;
200
+ counterPosition--;
201
+ } else {
202
+ counterPosition++;
203
+ }
204
+ counters[counterPosition] = 1;
205
+ isWhite ^= true; // isWhite = !isWhite;
206
+ }
207
+ }
208
+ throw NotFoundException.getNotFoundInstance();
209
+ }
210
+
211
+ private static boolean arrayContains(char[] array, char key) {
212
+ if (array != null) {
213
+ for (int i = 0; i < array.length; i++) {
214
+ if (array[i] == key) {
215
+ return true;
216
+ }
217
+ }
218
+ }
219
+ return false;
220
+ }
221
+
222
+ private static char toNarrowWidePattern(int[] counters) {
223
+ // BAS : I have changed the following part because some codabar images would fail with the original routine
224
+ // I took from the Code39Reader.java file
225
+ // ----------- change start
226
+ int numCounters = counters.length;
227
+ int maxNarrowCounter = 0;
228
+
229
+ int minCounter = Integer.MAX_VALUE;
230
+ for (int i = 0; i < numCounters; i++) {
231
+ if (counters[i] < minCounter) {
232
+ minCounter = counters[i];
233
+ }
234
+ if (counters[i] > maxNarrowCounter) {
235
+ maxNarrowCounter = counters[i];
236
+ }
237
+ }
238
+ // ---------- change end
239
+
240
+
241
+ do {
242
+ int wideCounters = 0;
243
+ int pattern = 0;
244
+ for (int i = 0; i < numCounters; i++) {
245
+ if (counters[i] > maxNarrowCounter) {
246
+ pattern |= 1 << (numCounters - 1 - i);
247
+ wideCounters++;
248
+ }
249
+ }
250
+
251
+ if ((wideCounters == 2) || (wideCounters == 3)) {
252
+ for (int i = 0; i < CHARACTER_ENCODINGS.length; i++) {
253
+ if (CHARACTER_ENCODINGS[i] == pattern) {
254
+ return ALPHABET[i];
255
+ }
256
+ }
257
+ }
258
+ maxNarrowCounter--;
259
+ } while (maxNarrowCounter > minCounter);
260
+ return '!';
261
+ }
262
+
263
+ }
@@ -0,0 +1,473 @@
1
+ /*
2
+ * Copyright 2008 ZXing authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.google.zxing.oned;
18
+
19
+ import com.google.zxing.BarcodeFormat;
20
+ import com.google.zxing.ChecksumException;
21
+ import com.google.zxing.FormatException;
22
+ import com.google.zxing.NotFoundException;
23
+ import com.google.zxing.Result;
24
+ import com.google.zxing.ResultPoint;
25
+ import com.google.zxing.common.BitArray;
26
+
27
+ import java.util.Hashtable;
28
+
29
+ /**
30
+ * <p>Decodes Code 128 barcodes.</p>
31
+ *
32
+ * @author Sean Owen
33
+ */
34
+ public final class Code128Reader extends OneDReader {
35
+
36
+ static final int[][] CODE_PATTERNS = {
37
+ {2, 1, 2, 2, 2, 2}, // 0
38
+ {2, 2, 2, 1, 2, 2},
39
+ {2, 2, 2, 2, 2, 1},
40
+ {1, 2, 1, 2, 2, 3},
41
+ {1, 2, 1, 3, 2, 2},
42
+ {1, 3, 1, 2, 2, 2}, // 5
43
+ {1, 2, 2, 2, 1, 3},
44
+ {1, 2, 2, 3, 1, 2},
45
+ {1, 3, 2, 2, 1, 2},
46
+ {2, 2, 1, 2, 1, 3},
47
+ {2, 2, 1, 3, 1, 2}, // 10
48
+ {2, 3, 1, 2, 1, 2},
49
+ {1, 1, 2, 2, 3, 2},
50
+ {1, 2, 2, 1, 3, 2},
51
+ {1, 2, 2, 2, 3, 1},
52
+ {1, 1, 3, 2, 2, 2}, // 15
53
+ {1, 2, 3, 1, 2, 2},
54
+ {1, 2, 3, 2, 2, 1},
55
+ {2, 2, 3, 2, 1, 1},
56
+ {2, 2, 1, 1, 3, 2},
57
+ {2, 2, 1, 2, 3, 1}, // 20
58
+ {2, 1, 3, 2, 1, 2},
59
+ {2, 2, 3, 1, 1, 2},
60
+ {3, 1, 2, 1, 3, 1},
61
+ {3, 1, 1, 2, 2, 2},
62
+ {3, 2, 1, 1, 2, 2}, // 25
63
+ {3, 2, 1, 2, 2, 1},
64
+ {3, 1, 2, 2, 1, 2},
65
+ {3, 2, 2, 1, 1, 2},
66
+ {3, 2, 2, 2, 1, 1},
67
+ {2, 1, 2, 1, 2, 3}, // 30
68
+ {2, 1, 2, 3, 2, 1},
69
+ {2, 3, 2, 1, 2, 1},
70
+ {1, 1, 1, 3, 2, 3},
71
+ {1, 3, 1, 1, 2, 3},
72
+ {1, 3, 1, 3, 2, 1}, // 35
73
+ {1, 1, 2, 3, 1, 3},
74
+ {1, 3, 2, 1, 1, 3},
75
+ {1, 3, 2, 3, 1, 1},
76
+ {2, 1, 1, 3, 1, 3},
77
+ {2, 3, 1, 1, 1, 3}, // 40
78
+ {2, 3, 1, 3, 1, 1},
79
+ {1, 1, 2, 1, 3, 3},
80
+ {1, 1, 2, 3, 3, 1},
81
+ {1, 3, 2, 1, 3, 1},
82
+ {1, 1, 3, 1, 2, 3}, // 45
83
+ {1, 1, 3, 3, 2, 1},
84
+ {1, 3, 3, 1, 2, 1},
85
+ {3, 1, 3, 1, 2, 1},
86
+ {2, 1, 1, 3, 3, 1},
87
+ {2, 3, 1, 1, 3, 1}, // 50
88
+ {2, 1, 3, 1, 1, 3},
89
+ {2, 1, 3, 3, 1, 1},
90
+ {2, 1, 3, 1, 3, 1},
91
+ {3, 1, 1, 1, 2, 3},
92
+ {3, 1, 1, 3, 2, 1}, // 55
93
+ {3, 3, 1, 1, 2, 1},
94
+ {3, 1, 2, 1, 1, 3},
95
+ {3, 1, 2, 3, 1, 1},
96
+ {3, 3, 2, 1, 1, 1},
97
+ {3, 1, 4, 1, 1, 1}, // 60
98
+ {2, 2, 1, 4, 1, 1},
99
+ {4, 3, 1, 1, 1, 1},
100
+ {1, 1, 1, 2, 2, 4},
101
+ {1, 1, 1, 4, 2, 2},
102
+ {1, 2, 1, 1, 2, 4}, // 65
103
+ {1, 2, 1, 4, 2, 1},
104
+ {1, 4, 1, 1, 2, 2},
105
+ {1, 4, 1, 2, 2, 1},
106
+ {1, 1, 2, 2, 1, 4},
107
+ {1, 1, 2, 4, 1, 2}, // 70
108
+ {1, 2, 2, 1, 1, 4},
109
+ {1, 2, 2, 4, 1, 1},
110
+ {1, 4, 2, 1, 1, 2},
111
+ {1, 4, 2, 2, 1, 1},
112
+ {2, 4, 1, 2, 1, 1}, // 75
113
+ {2, 2, 1, 1, 1, 4},
114
+ {4, 1, 3, 1, 1, 1},
115
+ {2, 4, 1, 1, 1, 2},
116
+ {1, 3, 4, 1, 1, 1},
117
+ {1, 1, 1, 2, 4, 2}, // 80
118
+ {1, 2, 1, 1, 4, 2},
119
+ {1, 2, 1, 2, 4, 1},
120
+ {1, 1, 4, 2, 1, 2},
121
+ {1, 2, 4, 1, 1, 2},
122
+ {1, 2, 4, 2, 1, 1}, // 85
123
+ {4, 1, 1, 2, 1, 2},
124
+ {4, 2, 1, 1, 1, 2},
125
+ {4, 2, 1, 2, 1, 1},
126
+ {2, 1, 2, 1, 4, 1},
127
+ {2, 1, 4, 1, 2, 1}, // 90
128
+ {4, 1, 2, 1, 2, 1},
129
+ {1, 1, 1, 1, 4, 3},
130
+ {1, 1, 1, 3, 4, 1},
131
+ {1, 3, 1, 1, 4, 1},
132
+ {1, 1, 4, 1, 1, 3}, // 95
133
+ {1, 1, 4, 3, 1, 1},
134
+ {4, 1, 1, 1, 1, 3},
135
+ {4, 1, 1, 3, 1, 1},
136
+ {1, 1, 3, 1, 4, 1},
137
+ {1, 1, 4, 1, 3, 1}, // 100
138
+ {3, 1, 1, 1, 4, 1},
139
+ {4, 1, 1, 1, 3, 1},
140
+ {2, 1, 1, 4, 1, 2},
141
+ {2, 1, 1, 2, 1, 4},
142
+ {2, 1, 1, 2, 3, 2}, // 105
143
+ {2, 3, 3, 1, 1, 1, 2}
144
+ };
145
+
146
+ private static final int MAX_AVG_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.25f);
147
+ private static final int MAX_INDIVIDUAL_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.7f);
148
+
149
+ private static final int CODE_SHIFT = 98;
150
+
151
+ private static final int CODE_CODE_C = 99;
152
+ private static final int CODE_CODE_B = 100;
153
+ private static final int CODE_CODE_A = 101;
154
+
155
+ private static final int CODE_FNC_1 = 102;
156
+ private static final int CODE_FNC_2 = 97;
157
+ private static final int CODE_FNC_3 = 96;
158
+ private static final int CODE_FNC_4_A = 101;
159
+ private static final int CODE_FNC_4_B = 100;
160
+
161
+ private static final int CODE_START_A = 103;
162
+ private static final int CODE_START_B = 104;
163
+ private static final int CODE_START_C = 105;
164
+ private static final int CODE_STOP = 106;
165
+
166
+ private static int[] findStartPattern(BitArray row) throws NotFoundException {
167
+ int width = row.getSize();
168
+ int rowOffset = 0;
169
+ while (rowOffset < width) {
170
+ if (row.get(rowOffset)) {
171
+ break;
172
+ }
173
+ rowOffset++;
174
+ }
175
+
176
+ int counterPosition = 0;
177
+ int[] counters = new int[6];
178
+ int patternStart = rowOffset;
179
+ boolean isWhite = false;
180
+ int patternLength = counters.length;
181
+
182
+ for (int i = rowOffset; i < width; i++) {
183
+ boolean pixel = row.get(i);
184
+ if (pixel ^ isWhite) {
185
+ counters[counterPosition]++;
186
+ } else {
187
+ if (counterPosition == patternLength - 1) {
188
+ int bestVariance = MAX_AVG_VARIANCE;
189
+ int bestMatch = -1;
190
+ for (int startCode = CODE_START_A; startCode <= CODE_START_C; startCode++) {
191
+ int variance = patternMatchVariance(counters, CODE_PATTERNS[startCode],
192
+ MAX_INDIVIDUAL_VARIANCE);
193
+ if (variance < bestVariance) {
194
+ bestVariance = variance;
195
+ bestMatch = startCode;
196
+ }
197
+ }
198
+ if (bestMatch >= 0) {
199
+ // Look for whitespace before start pattern, >= 50% of width of start pattern
200
+ if (row.isRange(Math.max(0, patternStart - (i - patternStart) / 2), patternStart,
201
+ false)) {
202
+ return new int[]{patternStart, i, bestMatch};
203
+ }
204
+ }
205
+ patternStart += counters[0] + counters[1];
206
+ for (int y = 2; y < patternLength; y++) {
207
+ counters[y - 2] = counters[y];
208
+ }
209
+ counters[patternLength - 2] = 0;
210
+ counters[patternLength - 1] = 0;
211
+ counterPosition--;
212
+ } else {
213
+ counterPosition++;
214
+ }
215
+ counters[counterPosition] = 1;
216
+ isWhite = !isWhite;
217
+ }
218
+ }
219
+ throw NotFoundException.getNotFoundInstance();
220
+ }
221
+
222
+ private static int decodeCode(BitArray row, int[] counters, int rowOffset) throws NotFoundException {
223
+ recordPattern(row, rowOffset, counters);
224
+ int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept
225
+ int bestMatch = -1;
226
+ for (int d = 0; d < CODE_PATTERNS.length; d++) {
227
+ int[] pattern = CODE_PATTERNS[d];
228
+ int variance = patternMatchVariance(counters, pattern, MAX_INDIVIDUAL_VARIANCE);
229
+ if (variance < bestVariance) {
230
+ bestVariance = variance;
231
+ bestMatch = d;
232
+ }
233
+ }
234
+ // TODO We're overlooking the fact that the STOP pattern has 7 values, not 6.
235
+ if (bestMatch >= 0) {
236
+ return bestMatch;
237
+ } else {
238
+ throw NotFoundException.getNotFoundInstance();
239
+ }
240
+ }
241
+
242
+ public Result decodeRow(int rowNumber, BitArray row, Hashtable hints)
243
+ throws NotFoundException, FormatException, ChecksumException {
244
+
245
+ int[] startPatternInfo = findStartPattern(row);
246
+ int startCode = startPatternInfo[2];
247
+ int codeSet;
248
+ switch (startCode) {
249
+ case CODE_START_A:
250
+ codeSet = CODE_CODE_A;
251
+ break;
252
+ case CODE_START_B:
253
+ codeSet = CODE_CODE_B;
254
+ break;
255
+ case CODE_START_C:
256
+ codeSet = CODE_CODE_C;
257
+ break;
258
+ default:
259
+ throw FormatException.getFormatInstance();
260
+ }
261
+
262
+ boolean done = false;
263
+ boolean isNextShifted = false;
264
+
265
+ StringBuffer result = new StringBuffer(20);
266
+ int lastStart = startPatternInfo[0];
267
+ int nextStart = startPatternInfo[1];
268
+ int[] counters = new int[6];
269
+
270
+ int lastCode = 0;
271
+ int code = 0;
272
+ int checksumTotal = startCode;
273
+ int multiplier = 0;
274
+ boolean lastCharacterWasPrintable = true;
275
+
276
+ while (!done) {
277
+
278
+ boolean unshift = isNextShifted;
279
+ isNextShifted = false;
280
+
281
+ // Save off last code
282
+ lastCode = code;
283
+
284
+ // Decode another code from image
285
+ code = decodeCode(row, counters, nextStart);
286
+
287
+ // Remember whether the last code was printable or not (excluding CODE_STOP)
288
+ if (code != CODE_STOP) {
289
+ lastCharacterWasPrintable = true;
290
+ }
291
+
292
+ // Add to checksum computation (if not CODE_STOP of course)
293
+ if (code != CODE_STOP) {
294
+ multiplier++;
295
+ checksumTotal += multiplier * code;
296
+ }
297
+
298
+ // Advance to where the next code will to start
299
+ lastStart = nextStart;
300
+ for (int i = 0; i < counters.length; i++) {
301
+ nextStart += counters[i];
302
+ }
303
+
304
+ // Take care of illegal start codes
305
+ switch (code) {
306
+ case CODE_START_A:
307
+ case CODE_START_B:
308
+ case CODE_START_C:
309
+ throw FormatException.getFormatInstance();
310
+ }
311
+
312
+ switch (codeSet) {
313
+
314
+ case CODE_CODE_A:
315
+ if (code < 64) {
316
+ result.append((char) (' ' + code));
317
+ } else if (code < 96) {
318
+ result.append((char) (code - 64));
319
+ } else {
320
+ // Don't let CODE_STOP, which always appears, affect whether whether we think the last
321
+ // code was printable or not.
322
+ if (code != CODE_STOP) {
323
+ lastCharacterWasPrintable = false;
324
+ }
325
+ switch (code) {
326
+ case CODE_FNC_1:
327
+ case CODE_FNC_2:
328
+ case CODE_FNC_3:
329
+ case CODE_FNC_4_A:
330
+ // do nothing?
331
+ break;
332
+ case CODE_SHIFT:
333
+ isNextShifted = true;
334
+ codeSet = CODE_CODE_B;
335
+ break;
336
+ case CODE_CODE_B:
337
+ codeSet = CODE_CODE_B;
338
+ break;
339
+ case CODE_CODE_C:
340
+ codeSet = CODE_CODE_C;
341
+ break;
342
+ case CODE_STOP:
343
+ done = true;
344
+ break;
345
+ }
346
+ }
347
+ break;
348
+ case CODE_CODE_B:
349
+ if (code < 96) {
350
+ result.append((char) (' ' + code));
351
+ } else {
352
+ if (code != CODE_STOP) {
353
+ lastCharacterWasPrintable = false;
354
+ }
355
+ switch (code) {
356
+ case CODE_FNC_1:
357
+ case CODE_FNC_2:
358
+ case CODE_FNC_3:
359
+ case CODE_FNC_4_B:
360
+ // do nothing?
361
+ break;
362
+ case CODE_SHIFT:
363
+ isNextShifted = true;
364
+ codeSet = CODE_CODE_C;
365
+ break;
366
+ case CODE_CODE_A:
367
+ codeSet = CODE_CODE_A;
368
+ break;
369
+ case CODE_CODE_C:
370
+ codeSet = CODE_CODE_C;
371
+ break;
372
+ case CODE_STOP:
373
+ done = true;
374
+ break;
375
+ }
376
+ }
377
+ break;
378
+ case CODE_CODE_C:
379
+ if (code < 100) {
380
+ if (code < 10) {
381
+ result.append('0');
382
+ }
383
+ result.append(code);
384
+ } else {
385
+ if (code != CODE_STOP) {
386
+ lastCharacterWasPrintable = false;
387
+ }
388
+ switch (code) {
389
+ case CODE_FNC_1:
390
+ // do nothing?
391
+ break;
392
+ case CODE_CODE_A:
393
+ codeSet = CODE_CODE_A;
394
+ break;
395
+ case CODE_CODE_B:
396
+ codeSet = CODE_CODE_B;
397
+ break;
398
+ case CODE_STOP:
399
+ done = true;
400
+ break;
401
+ }
402
+ }
403
+ break;
404
+ }
405
+
406
+ // Unshift back to another code set if we were shifted
407
+ if (unshift) {
408
+ switch (codeSet) {
409
+ case CODE_CODE_A:
410
+ codeSet = CODE_CODE_C;
411
+ break;
412
+ case CODE_CODE_B:
413
+ codeSet = CODE_CODE_A;
414
+ break;
415
+ case CODE_CODE_C:
416
+ codeSet = CODE_CODE_B;
417
+ break;
418
+ }
419
+ }
420
+
421
+ }
422
+
423
+ // Check for ample whitespace following pattern, but, to do this we first need to remember that
424
+ // we fudged decoding CODE_STOP since it actually has 7 bars, not 6. There is a black bar left
425
+ // to read off. Would be slightly better to properly read. Here we just skip it:
426
+ int width = row.getSize();
427
+ while (nextStart < width && row.get(nextStart)) {
428
+ nextStart++;
429
+ }
430
+ if (!row.isRange(nextStart, Math.min(width, nextStart + (nextStart - lastStart) / 2),
431
+ false)) {
432
+ throw NotFoundException.getNotFoundInstance();
433
+ }
434
+
435
+ // Pull out from sum the value of the penultimate check code
436
+ checksumTotal -= multiplier * lastCode;
437
+ // lastCode is the checksum then:
438
+ if (checksumTotal % 103 != lastCode) {
439
+ throw ChecksumException.getChecksumInstance();
440
+ }
441
+
442
+ // Need to pull out the check digits from string
443
+ int resultLength = result.length();
444
+ // Only bother if the result had at least one character, and if the checksum digit happened to
445
+ // be a printable character. If it was just interpreted as a control code, nothing to remove.
446
+ if (resultLength > 0 && lastCharacterWasPrintable) {
447
+ if (codeSet == CODE_CODE_C) {
448
+ result.delete(resultLength - 2, resultLength);
449
+ } else {
450
+ result.delete(resultLength - 1, resultLength);
451
+ }
452
+ }
453
+
454
+ String resultString = result.toString();
455
+
456
+ if (resultString.length() == 0) {
457
+ // Almost surely a false positive
458
+ throw FormatException.getFormatInstance();
459
+ }
460
+
461
+ float left = (float) (startPatternInfo[1] + startPatternInfo[0]) / 2.0f;
462
+ float right = (float) (nextStart + lastStart) / 2.0f;
463
+ return new Result(
464
+ resultString,
465
+ null,
466
+ new ResultPoint[]{
467
+ new ResultPoint(left, (float) rowNumber),
468
+ new ResultPoint(right, (float) rowNumber)},
469
+ BarcodeFormat.CODE_128);
470
+
471
+ }
472
+
473
+ }