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