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.
- data/CHANGELOG +7 -0
- data/Rakefile +7 -36
- data/doc/build.txt +48 -22
- data/doc/device-caps.txt +130 -1
- data/doc/rhom.txt +9 -3
- data/doc/test-log-debug.txt +5 -2
- data/lib/extensions/barcode/ext/barcode/platform/android/Rakefile +40 -20
- data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/AUTHORS +58 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/CHANGES +266 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/COPYING +201 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/README +11 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/ext_build.files +173 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/jni/src/barcode.cpp +34 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/BarcodeFormat.java +103 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Binarizer.java +80 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/BinaryBitmap.java +128 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ChecksumException.java +37 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/DecodeHintType.java +79 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/EncodeHintType.java +39 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/FormatException.java +38 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/LuminanceSource.java +113 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/MultiFormatReader.java +166 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/MultiFormatWriter.java +65 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/NotFoundException.java +37 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Reader.java +64 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ReaderException.java +98 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Result.java +143 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ResultMetadataType.java +109 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ResultPoint.java +127 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ResultPointCallback.java +29 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Writer.java +54 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/WriterException.java +35 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AbstractDoCoMoResultParser.java +39 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AddressBookAUResultParser.java +73 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AddressBookDoCoMoResultParser.java +85 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AddressBookParsedResult.java +122 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/BizcardResultParser.java +94 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/BookmarkDoCoMoResultParser.java +46 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/CalendarParsedResult.java +134 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/EmailAddressParsedResult.java +61 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/EmailAddressResultParser.java +64 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/EmailDoCoMoResultParser.java +87 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ExpandedProductParsedResult.java +195 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ExpandedProductResultParser.java +199 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/GeoParsedResult.java +132 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/GeoResultParser.java +77 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ISBNParsedResult.java +39 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ISBNResultParser.java +54 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ParsedResult.java +73 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ParsedResultType.java +53 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ProductParsedResult.java +49 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ProductResultParser.java +66 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ResultParser.java +319 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/SMSMMSResultParser.java +107 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/SMSParsedResult.java +104 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/SMSTOMMSTOResultParser.java +57 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/TelParsedResult.java +54 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/TelResultParser.java +44 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/TextParsedResult.java +48 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/URIParsedResult.java +113 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/URIResultParser.java +87 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/URLTOResultParser.java +47 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/VCardResultParser.java +346 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/VEventResultParser.java +54 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/WifiParsedResult.java +53 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/WifiResultParser.java +50 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/AbstractNDEFResultParser.java +45 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFRecord.java +87 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFSmartPosterParsedResult.java +63 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFSmartPosterResultParser.java +81 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFTextResultParser.java +57 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFURIResultParser.java +95 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/BitArray.java +247 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/BitMatrix.java +226 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/BitSource.java +97 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/CharacterSetECI.java +110 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/Collections.java +53 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/Comparator.java +27 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/DecoderResult.java +63 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/DefaultGridSampler.java +81 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/DetectorResult.java +46 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/ECI.java +52 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/GlobalHistogramBinarizer.java +196 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/GridSampler.java +171 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/HybridBinarizer.java +185 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/PerspectiveTransform.java +148 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/StringUtils.java +191 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/detector/MonochromeRectangleDetector.java +209 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/detector/WhiteRectangleDetector.java +316 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/GF256.java +139 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/GF256Poly.java +263 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/ReedSolomonDecoder.java +194 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/ReedSolomonEncoder.java +75 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/ReedSolomonException.java +31 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/DataMatrixReader.java +161 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/BitMatrixParser.java +446 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/DataBlock.java +118 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/DecodedBitStreamParser.java +462 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/Decoder.java +134 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/Version.java +242 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/detector/Detector.java +348 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/ByQuadrantReader.java +96 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/GenericMultipleBarcodeReader.java +156 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/MultipleBarcodeReader.java +37 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/qrcode/QRCodeMultiReader.java +80 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/qrcode/detector/MultiDetector.java +72 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.java +324 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/CodaBarReader.java +263 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code128Reader.java +473 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code128Writer.java +73 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code39Reader.java +333 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code39Writer.java +82 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code93Reader.java +273 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN13Reader.java +135 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN13Writer.java +81 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN8Reader.java +72 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN8Writer.java +76 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EANManufacturerOrgSupport.java +170 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/ITFReader.java +348 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/ITFWriter.java +68 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/MultiFormatOneDReader.java +109 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/MultiFormatUPCEANReader.java +113 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/OneDReader.java +297 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCAReader.java +75 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEANExtensionSupport.java +186 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEANReader.java +355 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEANWriter.java +104 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEReader.java +153 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/AbstractRSSReader.java +110 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/DataCharacter.java +37 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/FinderPattern.java +48 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/Pair.java +41 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/RSS14Reader.java +494 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/RSSUtils.java +155 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/BitArrayBuilder.java +85 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/ExpandedPair.java +68 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/RSSExpandedReader.java +578 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI013103decoder.java +47 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01320xDecoder.java +55 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01392xDecoder.java +66 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01393xDecoder.java +76 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI013x0x1xDecoder.java +106 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI013x0xDecoder.java +56 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01AndOtherAIs.java +56 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01decoder.java +81 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01weightDecoder.java +58 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AbstractExpandedDecoder.java +85 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AnyAIDecoder.java +48 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/BlockParsedResult.java +60 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/CurrentParsingState.java +69 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedChar.java +52 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedInformation.java +63 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedNumeric.java +79 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedObject.java +44 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/FieldParser.java +285 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/GeneralAppIdDecoder.java +414 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/PDF417Reader.java +79 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/decoder/BitMatrixParser.java +1163 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java +629 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/decoder/Decoder.java +150 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/detector/Detector.java +498 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/QRCodeReader.java +166 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/QRCodeWriter.java +108 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/BitMatrixParser.java +203 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/DataBlock.java +123 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/DataMask.java +155 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java +261 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/Decoder.java +148 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/ErrorCorrectionLevel.java +86 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/FormatInformation.java +171 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/Mode.java +112 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/Version.java +586 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/AlignmentPattern.java +48 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/AlignmentPatternFinder.java +279 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/Detector.java +400 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/FinderPattern.java +63 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/FinderPatternFinder.java +585 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/FinderPatternInfo.java +49 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/BlockPair.java +37 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/ByteMatrix.java +97 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/Encoder.java +557 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/MaskUtil.java +217 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/MatrixUtil.java +524 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/QRCode.java +239 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/rhomobile/barcode/Barcode.java +63 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/rhomobile/barcode/RhoLuminanceSource.java +75 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/Barcode.xcodeproj/project.pbxproj +74 -318
- data/lib/extensions/barcode/ext/barcode/platform/iphone/Classes/barcode.m +70 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/COPYING +27 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarCaptureReader.h +105 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarHelpController.h +60 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarImage.h +69 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarImageScanner.h +51 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderController.h +142 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderView.h +118 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderViewController.h +100 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarSDK.h +33 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarSymbol.h +71 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar.h +1476 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Decoder.h +201 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Exception.h +187 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Image.h +321 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/ImageScanner.h +130 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Processor.h +223 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Scanner.h +162 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Symbol.h +529 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Video.h +170 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Window.h +136 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/LICENSE +504 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/README +59 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-back.png +0 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-help.html +88 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-helpicons.png +0 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-samples.png +0 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/libzbar.a +0 -0
- data/lib/extensions/debugger/debugger.rb +215 -67
- data/lib/extensions/nfc/ext/nfc/platform/android/AndroidManifest.xml +1 -1
- data/lib/extensions/nfc/ext/nfc/platform/android/src/com/nfc/Nfc.java +14 -2
- data/lib/extensions/timeout/timeout.rb +114 -0
- data/lib/framework/rho/render.rb +14 -16
- data/lib/framework/rho/rho.rb +38 -14
- data/lib/framework/rho/rhoapplication.rb +1 -1
- data/lib/framework/rho/rhocontroller.rb +3 -3
- data/lib/framework/rho/rhofsconnector.rb +18 -6
- data/lib/framework/rho/rhoviewhelpers.rb +1 -1
- data/lib/framework/rhoappmanifest.rb +44 -0
- data/lib/framework/rhodes.rb +1 -1
- data/lib/framework/rhoframework.rb +31 -11
- data/lib/framework/rholang/localization_simplified.rb +10 -6
- data/lib/framework/rhom/rhom_object_factory.rb +3 -3
- data/lib/framework/version.rb +1 -1
- data/lib/rhodes.rb +1 -1
- data/platform/android/Rhodes/AndroidManifest.xml +2 -2
- data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesApplication.h +32 -8
- data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesService.h +21 -21
- data/platform/android/Rhodes/jni/src/rhocryptimpl.cpp +1 -0
- data/platform/android/Rhodes/jni/src/rhodes.cpp +21 -9
- data/platform/android/Rhodes/jni/src/sslimpl.cpp +1 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/BaseActivity.java +7 -6
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushReceiver.java +19 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhoCryptImpl.java +2 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesActivity.java +24 -15
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesApplication.java +39 -47
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +113 -106
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java +11 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/StatusNotification.java +49 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +1 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/socket/SSLImpl.java +5 -1
- data/platform/android/build/RhodesSRC_build.files +1 -0
- data/platform/android/build/android.rake +93 -6
- data/platform/bb/RubyVM/src/com/rho/RhodesApp.java +5 -4
- data/platform/bb/RubyVM/src/com/rho/file/RhoFile.java +10 -0
- data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +16 -15
- data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +2 -2
- data/platform/bb/RubyVM/src/com/rho/sync/SyncSource.java +21 -19
- data/platform/bb/rhodes/src/com/rho/BrowserAdapter5.java +2 -2
- data/platform/bb/rhodes/src/com/rho/rubyext/System.java +6 -1
- data/platform/bb/rhodes/src/com/rho/rubyext/WebView.java +10 -3
- data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +21 -1
- data/platform/iphone/Classes/SimpleMainView.m +5 -5
- data/platform/iphone/Info.plist +1 -1
- data/platform/iphone/rbuild/iphone.rake +30 -1
- data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +12 -0
- data/platform/shared/SyncClient/SyncClient.cpp +136 -20
- data/platform/shared/SyncClient/SyncClient.h +17 -0
- data/platform/shared/common/AppMenu.cpp +6 -1
- data/platform/shared/common/RhoConf.cpp +13 -1
- data/platform/shared/common/RhoConf.h +3 -1
- data/platform/shared/common/RhoDefs.h +10 -0
- data/platform/shared/common/RhoFile.cpp +15 -0
- data/platform/shared/common/RhoFile.h +1 -0
- data/platform/shared/common/RhodesApp.cpp +16 -3
- data/platform/shared/common/RhodesApp.h +1 -0
- data/platform/shared/common/RhodesAppBase.cpp +102 -62
- data/platform/shared/common/RhodesAppBase.h +7 -1
- data/platform/shared/curl/lib/rhossl.c +1 -0
- data/platform/shared/db/DBAdapter.cpp +14 -2
- data/platform/shared/logging/RhoLogConf.cpp +21 -0
- data/platform/shared/logging/RhoLogConf.h +11 -0
- data/platform/shared/logging/RhoLogSink.cpp +24 -0
- data/platform/shared/logging/RhoLogSink.h +20 -1
- data/platform/shared/net/HttpServer.cpp +8 -6
- data/platform/shared/net/RawSocket.cpp +130 -0
- data/platform/shared/net/RawSocket.h +74 -0
- data/platform/shared/ruby/ext/rho/rhoruby.c +37 -1
- data/platform/shared/ruby/ext/rho/rhosupport.c +74 -21
- data/platform/shared/ruby/ext/sqlite3_api/sqlite3_api_wrap.c +9 -1
- data/platform/shared/ruby/vm_eval.c +4 -3
- data/platform/shared/sync/SyncEngine.cpp +11 -12
- data/platform/shared/sync/SyncEngine.h +2 -2
- data/platform/shared/sync/SyncNotify.cpp +41 -13
- data/platform/shared/sync/SyncNotify.h +20 -3
- data/platform/shared/sync/SyncSource.cpp +21 -19
- data/platform/shared/sync/SyncThread.cpp +11 -1
- data/platform/shared/sync/SyncThread.h +3 -0
- data/platform/shared/test/test_helper.cpp +7 -0
- data/platform/win32/RhoSimulator/QtCore4.dll +0 -0
- data/platform/win32/RhoSimulator/QtGui4.dll +0 -0
- data/platform/win32/RhoSimulator/QtNetwork4.dll +0 -0
- data/platform/win32/RhoSimulator/QtWebKit4.dll +0 -0
- data/platform/win32/RhoSimulator/imageformats/qgif4.dll +0 -0
- data/platform/win32/RhoSimulator/imageformats/qjpeg4.dll +0 -0
- data/platform/win32/RhoSimulator/rhosimulator.exe +0 -0
- data/platform/wm/RhoLib/RhoLib.vcproj +762 -14
- data/platform/wm/build/wm.rake +87 -10
- data/platform/wm/rhodes.sln +155 -72
- data/platform/wm/rhodes/MainWindow.cpp +5 -2
- data/platform/wm/rhodes/MainWindow.h +9 -1
- data/platform/wm/rhodes/RhoNativeViewManager.cpp +4 -0
- data/platform/wm/rhodes/Rhodes.cpp +60 -6
- data/platform/wm/rhodes/emulator/ExternalWebView.cpp +20 -0
- data/platform/wm/rhodes/emulator/ExternalWebView.h +23 -0
- data/platform/wm/rhodes/emulator/ExternalWebView.ui +46 -0
- data/platform/wm/rhodes/emulator/MainWindowCallback.h +18 -0
- data/platform/wm/rhodes/emulator/MainWindowProxy.cpp +268 -0
- data/platform/wm/rhodes/emulator/MainWindowProxy.h +34 -0
- data/platform/wm/rhodes/emulator/MainWindowQt.cpp +345 -0
- data/platform/wm/rhodes/emulator/MainWindowQt.h +118 -0
- data/platform/wm/rhodes/emulator/NativeToolbarQt.cpp +57 -0
- data/platform/wm/rhodes/emulator/NativeToolbarQt.h +52 -0
- data/platform/wm/rhodes/emulator/QtMainWindow.cpp +219 -0
- data/platform/wm/rhodes/emulator/QtMainWindow.h +62 -0
- data/platform/wm/rhodes/emulator/QtMainWindow.ui +122 -0
- data/platform/wm/rhodes/{RhoCryptImpl.cpp → rho/common/RhoCryptImpl.cpp} +0 -0
- data/platform/wm/rhodes/{RhoCryptImpl.h → rho/common/RhoCryptImpl.h} +0 -0
- data/platform/wm/rhodes/rho/rubyext/NativeToolbar.cpp +2 -86
- data/platform/wm/rhodes/rho/rubyext/NativeToolbarExt.cpp +87 -0
- data/platform/wm/rhodes/rho/rubyext/NativeToolbarExt.h +6 -0
- data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +60 -0
- data/platform/wm/rhodes/rhodes.vcproj +4025 -365
- data/platform/wm/rhodes/signature/Signature.cpp +29 -13
- data/platform/wm/rubylib/rubylib.vcproj +1167 -195
- data/platform/wm/shttpd/shttpd.vcproj +4 -4
- data/platform/wm/sqlite3/sqlite3.vcproj +441 -13
- data/platform/wm/syncengine/syncengine.vcproj +443 -15
- data/platform/wm/tcmalloc/tcmalloc.vcproj +0 -154
- data/platform/wm/tools/detool/LogServer.cpp +150 -0
- data/platform/wm/tools/detool/LogServer.h +23 -0
- data/platform/wm/tools/detool/detool.cpp +42 -4
- data/platform/wm/tools/detool/detool.vcproj +10 -1
- data/platform/wp7/IronRuby/Bin/Silverlight3Release/IronRuby.Libraries.dll +0 -0
- data/platform/wp7/IronRuby/Bin/Silverlight3Release/IronRuby.dll +0 -0
- data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Dynamic.dll +0 -0
- data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Scripting.Core.dll +0 -0
- data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Scripting.dll +0 -0
- data/platform/wp7/RhoAppRunner/Program.cs +20 -3
- data/platform/wp7/RhoLogServer/Program.cs +22 -0
- data/platform/wp7/RhoLogServer/Properties/AssemblyInfo.cs +36 -0
- data/platform/wp7/RhoLogServer/RhoLogServer.csproj +65 -0
- data/platform/wp7/RhoLogServer/SocketServer.cs +210 -0
- data/platform/wp7/RhoRubyExtGen/RhoAsyncHttp.cs +6 -0
- data/platform/wp7/RhoRubyLib/Initializers.Generated.cs +3 -2
- data/platform/wp7/RhoRubyLib/RhoRuby.cs +82 -0
- data/platform/wp7/RhoRubyLib/RhoRubyLib.csproj +7 -5
- data/platform/wp7/RhoRubyLib/WP_PlatformAdaptationLayer.cs +1 -1
- data/platform/wp7/RhoRubyLib/common/RhoParams.cs +1 -1
- data/platform/wp7/RhoRubyLib/common/ThreadQueue.cs +4 -1
- data/platform/wp7/RhoRubyLib/db/DBAdapter.cs +2 -2
- data/platform/wp7/RhoRubyLib/logging/IRhoLogSink.cs +1 -1
- data/platform/wp7/RhoRubyLib/logging/RhoEmptyLogger.cs +30 -0
- data/platform/wp7/RhoRubyLib/logging/RhoLogConf.cs +10 -0
- data/platform/wp7/RhoRubyLib/logging/RhoLogFileSink.cs +6 -1
- data/platform/wp7/RhoRubyLib/logging/RhoLogServerSink.cs +56 -0
- data/platform/wp7/RhoRubyLib/logging/RhoLogger.cs +24 -11
- data/platform/wp7/RhoRubyLib/net/AsyncHttp.cs +57 -14
- data/platform/wp7/RhoRubyLib/net/NetRequest.cs +32 -9
- data/platform/wp7/RhoRubyLib/rubyext/RhoAsyncHttp.cs +7 -0
- data/platform/wp7/RhoRubyLib/rubyext/RhoKernelOps.cs +6 -0
- data/platform/wp7/RhoRubyLib/sync/SyncEngine.cs +20 -16
- data/platform/wp7/RhoRubyLib/sync/SyncNotify.cs +2 -2
- data/platform/wp7/RhoRubyLib/sync/SyncSource.cs +138 -40
- data/platform/wp7/WPApplication/rho/apps/app/layout.erb +3 -1
- data/platform/wp7/build/wp.rake +151 -12
- data/platform/wp7/rhodes.sln +10 -0
- data/platform/wp7/rhodes/App.xaml.cs +6 -0
- data/platform/wp7/rhodes/MainPage.xaml +3 -0
- data/platform/wp7/rhodes/MainPage.xaml.cs +19 -0
- data/platform/wp7/rhodes/Rhodes.csproj +4 -2
- data/rakefile.rb +7 -36
- data/res/build-tools/RhoAppRunner.exe +0 -0
- data/res/build-tools/RhoLogServer.exe +0 -0
- data/res/build-tools/detool.exe +0 -0
- data/res/build-tools/wp7explorer.exe +0 -0
- data/res/generators/templates/application/app/layout.erb +3 -1
- data/res/generators/templates/application/public/jqtouch/jqtouch.js +1 -1
- data/rhodes.gemspec +1 -1
- data/spec/framework_spec/app/layout.erb +1 -1
- data/spec/framework_spec/build.yml +1 -0
- data/spec/perfomance_spec/app/layout.erb +3 -0
- data/spec/phone_spec/app/Account_s/account_s.rb +4 -1
- data/spec/phone_spec/app/spec/rhom_object_spec.rb +30 -1
- data/spec/phone_spec/app/spec_runner.rb +1 -1
- data/spec/phone_spec/build.yml +4 -1
- metadata +262 -10
- data/platform/wp7/IronRuby/Languages/Ruby/Ruby/Builtins/ConsoleStream.cs +0 -107
data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/ITFWriter.java
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2010 ZXing authors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.google.zxing.oned;
|
|
18
|
+
|
|
19
|
+
import java.util.Hashtable;
|
|
20
|
+
import com.google.zxing.BarcodeFormat;
|
|
21
|
+
import com.google.zxing.WriterException;
|
|
22
|
+
import com.google.zxing.common.BitMatrix;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* This object renders a ITF code as a {@link BitMatrix}.
|
|
26
|
+
*
|
|
27
|
+
* @author erik.barbara@gmail.com (Erik Barbara)
|
|
28
|
+
*/
|
|
29
|
+
public final class ITFWriter extends UPCEANWriter {
|
|
30
|
+
|
|
31
|
+
public BitMatrix encode(String contents,
|
|
32
|
+
BarcodeFormat format,
|
|
33
|
+
int width,
|
|
34
|
+
int height,
|
|
35
|
+
Hashtable hints) throws WriterException {
|
|
36
|
+
if (format != BarcodeFormat.ITF) {
|
|
37
|
+
throw new IllegalArgumentException("Can only encode ITF, but got " + format);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return super.encode(contents, format, width, height, hints);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public byte[] encode(String contents) {
|
|
44
|
+
int length = contents.length();
|
|
45
|
+
if (length > 80) {
|
|
46
|
+
throw new IllegalArgumentException(
|
|
47
|
+
"Requested contents should be less than 80 digits long, but got " + length);
|
|
48
|
+
}
|
|
49
|
+
byte[] result = new byte[9 + 9 * length];
|
|
50
|
+
int[] start = {1, 1, 1, 1};
|
|
51
|
+
int pos = appendPattern(result, 0, start, 1);
|
|
52
|
+
for (int i = 0; i < length; i += 2) {
|
|
53
|
+
int one = Character.digit(contents.charAt(i), 10);
|
|
54
|
+
int two = Character.digit(contents.charAt(i+1), 10);
|
|
55
|
+
int[] encoding = new int[18];
|
|
56
|
+
for (int j = 0; j < 5; j++) {
|
|
57
|
+
encoding[(j << 1)] = ITFReader.PATTERNS[one][j];
|
|
58
|
+
encoding[(j << 1) + 1] = ITFReader.PATTERNS[two][j];
|
|
59
|
+
}
|
|
60
|
+
pos += appendPattern(result, pos, encoding, 1);
|
|
61
|
+
}
|
|
62
|
+
int[] end = {3, 1, 1};
|
|
63
|
+
pos += appendPattern(result, pos, end, 1);
|
|
64
|
+
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
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.DecodeHintType;
|
|
21
|
+
import com.google.zxing.NotFoundException;
|
|
22
|
+
import com.google.zxing.Reader;
|
|
23
|
+
import com.google.zxing.ReaderException;
|
|
24
|
+
import com.google.zxing.Result;
|
|
25
|
+
import com.google.zxing.common.BitArray;
|
|
26
|
+
import com.google.zxing.oned.rss.RSS14Reader;
|
|
27
|
+
import com.google.zxing.oned.rss.expanded.RSSExpandedReader;
|
|
28
|
+
|
|
29
|
+
import java.util.Hashtable;
|
|
30
|
+
import java.util.Vector;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @author dswitkin@google.com (Daniel Switkin)
|
|
34
|
+
* @author Sean Owen
|
|
35
|
+
*/
|
|
36
|
+
public final class MultiFormatOneDReader extends OneDReader {
|
|
37
|
+
|
|
38
|
+
private final Vector readers;
|
|
39
|
+
|
|
40
|
+
public MultiFormatOneDReader(Hashtable hints) {
|
|
41
|
+
Vector possibleFormats = hints == null ? null :
|
|
42
|
+
(Vector) hints.get(DecodeHintType.POSSIBLE_FORMATS);
|
|
43
|
+
boolean useCode39CheckDigit = hints != null &&
|
|
44
|
+
hints.get(DecodeHintType.ASSUME_CODE_39_CHECK_DIGIT) != null;
|
|
45
|
+
readers = new Vector();
|
|
46
|
+
if (possibleFormats != null) {
|
|
47
|
+
if (possibleFormats.contains(BarcodeFormat.EAN_13) ||
|
|
48
|
+
possibleFormats.contains(BarcodeFormat.UPC_A) ||
|
|
49
|
+
possibleFormats.contains(BarcodeFormat.EAN_8) ||
|
|
50
|
+
possibleFormats.contains(BarcodeFormat.UPC_E)) {
|
|
51
|
+
readers.addElement(new MultiFormatUPCEANReader(hints));
|
|
52
|
+
}
|
|
53
|
+
if (possibleFormats.contains(BarcodeFormat.CODE_39)) {
|
|
54
|
+
readers.addElement(new Code39Reader(useCode39CheckDigit));
|
|
55
|
+
}
|
|
56
|
+
if (possibleFormats.contains(BarcodeFormat.CODE_93)) {
|
|
57
|
+
readers.addElement(new Code93Reader());
|
|
58
|
+
}
|
|
59
|
+
if (possibleFormats.contains(BarcodeFormat.CODE_128)) {
|
|
60
|
+
readers.addElement(new Code128Reader());
|
|
61
|
+
}
|
|
62
|
+
if (possibleFormats.contains(BarcodeFormat.ITF)) {
|
|
63
|
+
readers.addElement(new ITFReader());
|
|
64
|
+
}
|
|
65
|
+
if (possibleFormats.contains(BarcodeFormat.CODABAR)) {
|
|
66
|
+
readers.addElement(new CodaBarReader());
|
|
67
|
+
}
|
|
68
|
+
if (possibleFormats.contains(BarcodeFormat.RSS14)) {
|
|
69
|
+
readers.addElement(new RSS14Reader());
|
|
70
|
+
}
|
|
71
|
+
if (possibleFormats.contains(BarcodeFormat.RSS_EXPANDED)){
|
|
72
|
+
readers.addElement(new RSSExpandedReader());
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (readers.isEmpty()) {
|
|
76
|
+
readers.addElement(new MultiFormatUPCEANReader(hints));
|
|
77
|
+
readers.addElement(new Code39Reader());
|
|
78
|
+
//readers.addElement(new CodaBarReader());
|
|
79
|
+
readers.addElement(new Code93Reader());
|
|
80
|
+
readers.addElement(new Code128Reader());
|
|
81
|
+
readers.addElement(new ITFReader());
|
|
82
|
+
readers.addElement(new RSS14Reader());
|
|
83
|
+
readers.addElement(new RSSExpandedReader());
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
public Result decodeRow(int rowNumber, BitArray row, Hashtable hints) throws NotFoundException {
|
|
88
|
+
int size = readers.size();
|
|
89
|
+
for (int i = 0; i < size; i++) {
|
|
90
|
+
OneDReader reader = (OneDReader) readers.elementAt(i);
|
|
91
|
+
try {
|
|
92
|
+
return reader.decodeRow(rowNumber, row, hints);
|
|
93
|
+
} catch (ReaderException re) {
|
|
94
|
+
// continue
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
throw NotFoundException.getNotFoundInstance();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
public void reset() {
|
|
102
|
+
int size = readers.size();
|
|
103
|
+
for (int i = 0; i < size; i++) {
|
|
104
|
+
Reader reader = (Reader) readers.elementAt(i);
|
|
105
|
+
reader.reset();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
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.DecodeHintType;
|
|
21
|
+
import com.google.zxing.NotFoundException;
|
|
22
|
+
import com.google.zxing.Reader;
|
|
23
|
+
import com.google.zxing.ReaderException;
|
|
24
|
+
import com.google.zxing.Result;
|
|
25
|
+
import com.google.zxing.common.BitArray;
|
|
26
|
+
|
|
27
|
+
import java.util.Hashtable;
|
|
28
|
+
import java.util.Vector;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* <p>A reader that can read all available UPC/EAN formats. If a caller wants to try to
|
|
32
|
+
* read all such formats, it is most efficient to use this implementation rather than invoke
|
|
33
|
+
* individual readers.</p>
|
|
34
|
+
*
|
|
35
|
+
* @author Sean Owen
|
|
36
|
+
*/
|
|
37
|
+
public final class MultiFormatUPCEANReader extends OneDReader {
|
|
38
|
+
|
|
39
|
+
private final Vector readers;
|
|
40
|
+
|
|
41
|
+
public MultiFormatUPCEANReader(Hashtable hints) {
|
|
42
|
+
Vector possibleFormats = hints == null ? null :
|
|
43
|
+
(Vector) hints.get(DecodeHintType.POSSIBLE_FORMATS);
|
|
44
|
+
readers = new Vector();
|
|
45
|
+
if (possibleFormats != null) {
|
|
46
|
+
if (possibleFormats.contains(BarcodeFormat.EAN_13)) {
|
|
47
|
+
readers.addElement(new EAN13Reader());
|
|
48
|
+
} else if (possibleFormats.contains(BarcodeFormat.UPC_A)) {
|
|
49
|
+
readers.addElement(new UPCAReader());
|
|
50
|
+
}
|
|
51
|
+
if (possibleFormats.contains(BarcodeFormat.EAN_8)) {
|
|
52
|
+
readers.addElement(new EAN8Reader());
|
|
53
|
+
}
|
|
54
|
+
if (possibleFormats.contains(BarcodeFormat.UPC_E)) {
|
|
55
|
+
readers.addElement(new UPCEReader());
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (readers.isEmpty()) {
|
|
59
|
+
readers.addElement(new EAN13Reader());
|
|
60
|
+
// UPC-A is covered by EAN-13
|
|
61
|
+
readers.addElement(new EAN8Reader());
|
|
62
|
+
readers.addElement(new UPCEReader());
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public Result decodeRow(int rowNumber, BitArray row, Hashtable hints) throws NotFoundException {
|
|
67
|
+
// Compute this location once and reuse it on multiple implementations
|
|
68
|
+
int[] startGuardPattern = UPCEANReader.findStartGuardPattern(row);
|
|
69
|
+
int size = readers.size();
|
|
70
|
+
for (int i = 0; i < size; i++) {
|
|
71
|
+
UPCEANReader reader = (UPCEANReader) readers.elementAt(i);
|
|
72
|
+
Result result;
|
|
73
|
+
try {
|
|
74
|
+
result = reader.decodeRow(rowNumber, row, startGuardPattern, hints);
|
|
75
|
+
} catch (ReaderException re) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
// Special case: a 12-digit code encoded in UPC-A is identical to a "0"
|
|
79
|
+
// followed by those 12 digits encoded as EAN-13. Each will recognize such a code,
|
|
80
|
+
// UPC-A as a 12-digit string and EAN-13 as a 13-digit string starting with "0".
|
|
81
|
+
// Individually these are correct and their readers will both read such a code
|
|
82
|
+
// and correctly call it EAN-13, or UPC-A, respectively.
|
|
83
|
+
//
|
|
84
|
+
// In this case, if we've been looking for both types, we'd like to call it
|
|
85
|
+
// a UPC-A code. But for efficiency we only run the EAN-13 decoder to also read
|
|
86
|
+
// UPC-A. So we special case it here, and convert an EAN-13 result to a UPC-A
|
|
87
|
+
// result if appropriate.
|
|
88
|
+
//
|
|
89
|
+
// But, don't return UPC-A if UPC-A was not a requested format!
|
|
90
|
+
boolean ean13MayBeUPCA =
|
|
91
|
+
BarcodeFormat.EAN_13.equals(result.getBarcodeFormat()) &&
|
|
92
|
+
result.getText().charAt(0) == '0';
|
|
93
|
+
Vector possibleFormats = hints == null ? null : (Vector) hints.get(DecodeHintType.POSSIBLE_FORMATS);
|
|
94
|
+
boolean canReturnUPCA = possibleFormats == null || possibleFormats.contains(BarcodeFormat.UPC_A);
|
|
95
|
+
|
|
96
|
+
if (ean13MayBeUPCA && canReturnUPCA) {
|
|
97
|
+
return new Result(result.getText().substring(1), null, result.getResultPoints(), BarcodeFormat.UPC_A);
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
throw NotFoundException.getNotFoundInstance();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
public void reset() {
|
|
106
|
+
int size = readers.size();
|
|
107
|
+
for (int i = 0; i < size; i++) {
|
|
108
|
+
Reader reader = (Reader) readers.elementAt(i);
|
|
109
|
+
reader.reset();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
}
|
data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/OneDReader.java
ADDED
|
@@ -0,0 +1,297 @@
|
|
|
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.BinaryBitmap;
|
|
20
|
+
import com.google.zxing.ChecksumException;
|
|
21
|
+
import com.google.zxing.DecodeHintType;
|
|
22
|
+
import com.google.zxing.FormatException;
|
|
23
|
+
import com.google.zxing.NotFoundException;
|
|
24
|
+
import com.google.zxing.Reader;
|
|
25
|
+
import com.google.zxing.ReaderException;
|
|
26
|
+
import com.google.zxing.Result;
|
|
27
|
+
import com.google.zxing.ResultMetadataType;
|
|
28
|
+
import com.google.zxing.ResultPoint;
|
|
29
|
+
import com.google.zxing.common.BitArray;
|
|
30
|
+
|
|
31
|
+
import java.util.Enumeration;
|
|
32
|
+
import java.util.Hashtable;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Encapsulates functionality and implementation that is common to all families
|
|
36
|
+
* of one-dimensional barcodes.
|
|
37
|
+
*
|
|
38
|
+
* @author dswitkin@google.com (Daniel Switkin)
|
|
39
|
+
* @author Sean Owen
|
|
40
|
+
*/
|
|
41
|
+
public abstract class OneDReader implements Reader {
|
|
42
|
+
|
|
43
|
+
protected static final int INTEGER_MATH_SHIFT = 8;
|
|
44
|
+
protected static final int PATTERN_MATCH_RESULT_SCALE_FACTOR = 1 << INTEGER_MATH_SHIFT;
|
|
45
|
+
|
|
46
|
+
public Result decode(BinaryBitmap image) throws NotFoundException, FormatException {
|
|
47
|
+
return decode(image, null);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Note that we don't try rotation without the try harder flag, even if rotation was supported.
|
|
51
|
+
public Result decode(BinaryBitmap image, Hashtable hints) throws NotFoundException, FormatException {
|
|
52
|
+
try {
|
|
53
|
+
return doDecode(image, hints);
|
|
54
|
+
} catch (NotFoundException nfe) {
|
|
55
|
+
boolean tryHarder = hints != null && hints.containsKey(DecodeHintType.TRY_HARDER);
|
|
56
|
+
if (tryHarder && image.isRotateSupported()) {
|
|
57
|
+
BinaryBitmap rotatedImage = image.rotateCounterClockwise();
|
|
58
|
+
Result result = doDecode(rotatedImage, hints);
|
|
59
|
+
// Record that we found it rotated 90 degrees CCW / 270 degrees CW
|
|
60
|
+
Hashtable metadata = result.getResultMetadata();
|
|
61
|
+
int orientation = 270;
|
|
62
|
+
if (metadata != null && metadata.containsKey(ResultMetadataType.ORIENTATION)) {
|
|
63
|
+
// But if we found it reversed in doDecode(), add in that result here:
|
|
64
|
+
orientation = (orientation +
|
|
65
|
+
((Integer) metadata.get(ResultMetadataType.ORIENTATION)).intValue()) % 360;
|
|
66
|
+
}
|
|
67
|
+
result.putMetadata(ResultMetadataType.ORIENTATION, new Integer(orientation));
|
|
68
|
+
// Update result points
|
|
69
|
+
ResultPoint[] points = result.getResultPoints();
|
|
70
|
+
int height = rotatedImage.getHeight();
|
|
71
|
+
for (int i = 0; i < points.length; i++) {
|
|
72
|
+
points[i] = new ResultPoint(height - points[i].getY() - 1, points[i].getX());
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
} else {
|
|
76
|
+
throw nfe;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
public void reset() {
|
|
82
|
+
// do nothing
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* We're going to examine rows from the middle outward, searching alternately above and below the
|
|
87
|
+
* middle, and farther out each time. rowStep is the number of rows between each successive
|
|
88
|
+
* attempt above and below the middle. So we'd scan row middle, then middle - rowStep, then
|
|
89
|
+
* middle + rowStep, then middle - (2 * rowStep), etc.
|
|
90
|
+
* rowStep is bigger as the image is taller, but is always at least 1. We've somewhat arbitrarily
|
|
91
|
+
* decided that moving up and down by about 1/16 of the image is pretty good; we try more of the
|
|
92
|
+
* image if "trying harder".
|
|
93
|
+
*
|
|
94
|
+
* @param image The image to decode
|
|
95
|
+
* @param hints Any hints that were requested
|
|
96
|
+
* @return The contents of the decoded barcode
|
|
97
|
+
* @throws NotFoundException Any spontaneous errors which occur
|
|
98
|
+
*/
|
|
99
|
+
private Result doDecode(BinaryBitmap image, Hashtable hints) throws NotFoundException {
|
|
100
|
+
int width = image.getWidth();
|
|
101
|
+
int height = image.getHeight();
|
|
102
|
+
BitArray row = new BitArray(width);
|
|
103
|
+
|
|
104
|
+
int middle = height >> 1;
|
|
105
|
+
boolean tryHarder = hints != null && hints.containsKey(DecodeHintType.TRY_HARDER);
|
|
106
|
+
int rowStep = Math.max(1, height >> (tryHarder ? 8 : 5));
|
|
107
|
+
int maxLines;
|
|
108
|
+
if (tryHarder) {
|
|
109
|
+
maxLines = height; // Look at the whole image, not just the center
|
|
110
|
+
} else {
|
|
111
|
+
maxLines = 15; // 15 rows spaced 1/32 apart is roughly the middle half of the image
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
for (int x = 0; x < maxLines; x++) {
|
|
115
|
+
|
|
116
|
+
// Scanning from the middle out. Determine which row we're looking at next:
|
|
117
|
+
int rowStepsAboveOrBelow = (x + 1) >> 1;
|
|
118
|
+
boolean isAbove = (x & 0x01) == 0; // i.e. is x even?
|
|
119
|
+
int rowNumber = middle + rowStep * (isAbove ? rowStepsAboveOrBelow : -rowStepsAboveOrBelow);
|
|
120
|
+
if (rowNumber < 0 || rowNumber >= height) {
|
|
121
|
+
// Oops, if we run off the top or bottom, stop
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Estimate black point for this row and load it:
|
|
126
|
+
try {
|
|
127
|
+
row = image.getBlackRow(rowNumber, row);
|
|
128
|
+
} catch (NotFoundException nfe) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// While we have the image data in a BitArray, it's fairly cheap to reverse it in place to
|
|
133
|
+
// handle decoding upside down barcodes.
|
|
134
|
+
for (int attempt = 0; attempt < 2; attempt++) {
|
|
135
|
+
if (attempt == 1) { // trying again?
|
|
136
|
+
row.reverse(); // reverse the row and continue
|
|
137
|
+
// This means we will only ever draw result points *once* in the life of this method
|
|
138
|
+
// since we want to avoid drawing the wrong points after flipping the row, and,
|
|
139
|
+
// don't want to clutter with noise from every single row scan -- just the scans
|
|
140
|
+
// that start on the center line.
|
|
141
|
+
if (hints != null && hints.containsKey(DecodeHintType.NEED_RESULT_POINT_CALLBACK)) {
|
|
142
|
+
Hashtable newHints = new Hashtable(); // Can't use clone() in J2ME
|
|
143
|
+
Enumeration hintEnum = hints.keys();
|
|
144
|
+
while (hintEnum.hasMoreElements()) {
|
|
145
|
+
Object key = hintEnum.nextElement();
|
|
146
|
+
if (!key.equals(DecodeHintType.NEED_RESULT_POINT_CALLBACK)) {
|
|
147
|
+
newHints.put(key, hints.get(key));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
hints = newHints;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
// Look for a barcode
|
|
155
|
+
Result result = decodeRow(rowNumber, row, hints);
|
|
156
|
+
// We found our barcode
|
|
157
|
+
if (attempt == 1) {
|
|
158
|
+
// But it was upside down, so note that
|
|
159
|
+
result.putMetadata(ResultMetadataType.ORIENTATION, new Integer(180));
|
|
160
|
+
// And remember to flip the result points horizontally.
|
|
161
|
+
ResultPoint[] points = result.getResultPoints();
|
|
162
|
+
points[0] = new ResultPoint(width - points[0].getX() - 1, points[0].getY());
|
|
163
|
+
points[1] = new ResultPoint(width - points[1].getX() - 1, points[1].getY());
|
|
164
|
+
}
|
|
165
|
+
return result;
|
|
166
|
+
} catch (ReaderException re) {
|
|
167
|
+
// continue -- just couldn't decode this row
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
throw NotFoundException.getNotFoundInstance();
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Records the size of successive runs of white and black pixels in a row, starting at a given point.
|
|
177
|
+
* The values are recorded in the given array, and the number of runs recorded is equal to the size
|
|
178
|
+
* of the array. If the row starts on a white pixel at the given start point, then the first count
|
|
179
|
+
* recorded is the run of white pixels starting from that point; likewise it is the count of a run
|
|
180
|
+
* of black pixels if the row begin on a black pixels at that point.
|
|
181
|
+
*
|
|
182
|
+
* @param row row to count from
|
|
183
|
+
* @param start offset into row to start at
|
|
184
|
+
* @param counters array into which to record counts
|
|
185
|
+
* @throws NotFoundException if counters cannot be filled entirely from row before running out
|
|
186
|
+
* of pixels
|
|
187
|
+
*/
|
|
188
|
+
protected static void recordPattern(BitArray row, int start, int[] counters) throws NotFoundException {
|
|
189
|
+
int numCounters = counters.length;
|
|
190
|
+
for (int i = 0; i < numCounters; i++) {
|
|
191
|
+
counters[i] = 0;
|
|
192
|
+
}
|
|
193
|
+
int end = row.getSize();
|
|
194
|
+
if (start >= end) {
|
|
195
|
+
throw NotFoundException.getNotFoundInstance();
|
|
196
|
+
}
|
|
197
|
+
boolean isWhite = !row.get(start);
|
|
198
|
+
int counterPosition = 0;
|
|
199
|
+
int i = start;
|
|
200
|
+
while (i < end) {
|
|
201
|
+
boolean pixel = row.get(i);
|
|
202
|
+
if (pixel ^ isWhite) { // that is, exactly one is true
|
|
203
|
+
counters[counterPosition]++;
|
|
204
|
+
} else {
|
|
205
|
+
counterPosition++;
|
|
206
|
+
if (counterPosition == numCounters) {
|
|
207
|
+
break;
|
|
208
|
+
} else {
|
|
209
|
+
counters[counterPosition] = 1;
|
|
210
|
+
isWhite = !isWhite;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
i++;
|
|
214
|
+
}
|
|
215
|
+
// If we read fully the last section of pixels and filled up our counters -- or filled
|
|
216
|
+
// the last counter but ran off the side of the image, OK. Otherwise, a problem.
|
|
217
|
+
if (!(counterPosition == numCounters || (counterPosition == numCounters - 1 && i == end))) {
|
|
218
|
+
throw NotFoundException.getNotFoundInstance();
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
protected static void recordPatternInReverse(BitArray row, int start, int[] counters)
|
|
223
|
+
throws NotFoundException {
|
|
224
|
+
// This could be more efficient I guess
|
|
225
|
+
int numTransitionsLeft = counters.length;
|
|
226
|
+
boolean last = row.get(start);
|
|
227
|
+
while (start > 0 && numTransitionsLeft >= 0) {
|
|
228
|
+
if (row.get(--start) != last) {
|
|
229
|
+
numTransitionsLeft--;
|
|
230
|
+
last = !last;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
if (numTransitionsLeft >= 0) {
|
|
234
|
+
throw NotFoundException.getNotFoundInstance();
|
|
235
|
+
}
|
|
236
|
+
recordPattern(row, start + 1, counters);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Determines how closely a set of observed counts of runs of black/white values matches a given
|
|
241
|
+
* target pattern. This is reported as the ratio of the total variance from the expected pattern
|
|
242
|
+
* proportions across all pattern elements, to the length of the pattern.
|
|
243
|
+
*
|
|
244
|
+
* @param counters observed counters
|
|
245
|
+
* @param pattern expected pattern
|
|
246
|
+
* @param maxIndividualVariance The most any counter can differ before we give up
|
|
247
|
+
* @return ratio of total variance between counters and pattern compared to total pattern size,
|
|
248
|
+
* where the ratio has been multiplied by 256. So, 0 means no variance (perfect match); 256 means
|
|
249
|
+
* the total variance between counters and patterns equals the pattern length, higher values mean
|
|
250
|
+
* even more variance
|
|
251
|
+
*/
|
|
252
|
+
protected static int patternMatchVariance(int[] counters, int[] pattern, int maxIndividualVariance) {
|
|
253
|
+
int numCounters = counters.length;
|
|
254
|
+
int total = 0;
|
|
255
|
+
int patternLength = 0;
|
|
256
|
+
for (int i = 0; i < numCounters; i++) {
|
|
257
|
+
total += counters[i];
|
|
258
|
+
patternLength += pattern[i];
|
|
259
|
+
}
|
|
260
|
+
if (total < patternLength) {
|
|
261
|
+
// If we don't even have one pixel per unit of bar width, assume this is too small
|
|
262
|
+
// to reliably match, so fail:
|
|
263
|
+
return Integer.MAX_VALUE;
|
|
264
|
+
}
|
|
265
|
+
// We're going to fake floating-point math in integers. We just need to use more bits.
|
|
266
|
+
// Scale up patternLength so that intermediate values below like scaledCounter will have
|
|
267
|
+
// more "significant digits"
|
|
268
|
+
int unitBarWidth = (total << INTEGER_MATH_SHIFT) / patternLength;
|
|
269
|
+
maxIndividualVariance = (maxIndividualVariance * unitBarWidth) >> INTEGER_MATH_SHIFT;
|
|
270
|
+
|
|
271
|
+
int totalVariance = 0;
|
|
272
|
+
for (int x = 0; x < numCounters; x++) {
|
|
273
|
+
int counter = counters[x] << INTEGER_MATH_SHIFT;
|
|
274
|
+
int scaledPattern = pattern[x] * unitBarWidth;
|
|
275
|
+
int variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter;
|
|
276
|
+
if (variance > maxIndividualVariance) {
|
|
277
|
+
return Integer.MAX_VALUE;
|
|
278
|
+
}
|
|
279
|
+
totalVariance += variance;
|
|
280
|
+
}
|
|
281
|
+
return totalVariance / total;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* <p>Attempts to decode a one-dimensional barcode format given a single row of
|
|
286
|
+
* an image.</p>
|
|
287
|
+
*
|
|
288
|
+
* @param rowNumber row number from top of the row
|
|
289
|
+
* @param row the black/white pixel data of the row
|
|
290
|
+
* @param hints decode hints
|
|
291
|
+
* @return {@link Result} containing encoded string and start/end of barcode
|
|
292
|
+
* @throws NotFoundException if an error occurs or barcode cannot be found
|
|
293
|
+
*/
|
|
294
|
+
public abstract Result decodeRow(int rowNumber, BitArray row, Hashtable hints)
|
|
295
|
+
throws NotFoundException, ChecksumException, FormatException;
|
|
296
|
+
|
|
297
|
+
}
|