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
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2007 ZXing authors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.google.zxing.qrcode;
|
|
18
|
+
|
|
19
|
+
import com.google.zxing.BarcodeFormat;
|
|
20
|
+
import com.google.zxing.BinaryBitmap;
|
|
21
|
+
import com.google.zxing.ChecksumException;
|
|
22
|
+
import com.google.zxing.DecodeHintType;
|
|
23
|
+
import com.google.zxing.FormatException;
|
|
24
|
+
import com.google.zxing.NotFoundException;
|
|
25
|
+
import com.google.zxing.Reader;
|
|
26
|
+
import com.google.zxing.Result;
|
|
27
|
+
import com.google.zxing.ResultMetadataType;
|
|
28
|
+
import com.google.zxing.ResultPoint;
|
|
29
|
+
import com.google.zxing.common.BitMatrix;
|
|
30
|
+
import com.google.zxing.common.DecoderResult;
|
|
31
|
+
import com.google.zxing.common.DetectorResult;
|
|
32
|
+
import com.google.zxing.qrcode.decoder.Decoder;
|
|
33
|
+
import com.google.zxing.qrcode.detector.Detector;
|
|
34
|
+
|
|
35
|
+
import java.util.Hashtable;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* This implementation can detect and decode QR Codes in an image.
|
|
39
|
+
*
|
|
40
|
+
* @author Sean Owen
|
|
41
|
+
*/
|
|
42
|
+
public class QRCodeReader implements Reader {
|
|
43
|
+
|
|
44
|
+
private static final ResultPoint[] NO_POINTS = new ResultPoint[0];
|
|
45
|
+
|
|
46
|
+
private final Decoder decoder = new Decoder();
|
|
47
|
+
|
|
48
|
+
protected Decoder getDecoder() {
|
|
49
|
+
return decoder;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Locates and decodes a QR code in an image.
|
|
54
|
+
*
|
|
55
|
+
* @return a String representing the content encoded by the QR code
|
|
56
|
+
* @throws NotFoundException if a QR code cannot be found
|
|
57
|
+
* @throws FormatException if a QR code cannot be decoded
|
|
58
|
+
* @throws ChecksumException if error correction fails
|
|
59
|
+
*/
|
|
60
|
+
public Result decode(BinaryBitmap image) throws NotFoundException, ChecksumException, FormatException {
|
|
61
|
+
return decode(image, null);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
public Result decode(BinaryBitmap image, Hashtable hints)
|
|
65
|
+
throws NotFoundException, ChecksumException, FormatException {
|
|
66
|
+
DecoderResult decoderResult;
|
|
67
|
+
ResultPoint[] points;
|
|
68
|
+
if (hints != null && hints.containsKey(DecodeHintType.PURE_BARCODE)) {
|
|
69
|
+
BitMatrix bits = extractPureBits(image.getBlackMatrix());
|
|
70
|
+
decoderResult = decoder.decode(bits, hints);
|
|
71
|
+
points = NO_POINTS;
|
|
72
|
+
} else {
|
|
73
|
+
DetectorResult detectorResult = new Detector(image.getBlackMatrix()).detect(hints);
|
|
74
|
+
decoderResult = decoder.decode(detectorResult.getBits(), hints);
|
|
75
|
+
points = detectorResult.getPoints();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
Result result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), points, BarcodeFormat.QR_CODE);
|
|
79
|
+
if (decoderResult.getByteSegments() != null) {
|
|
80
|
+
result.putMetadata(ResultMetadataType.BYTE_SEGMENTS, decoderResult.getByteSegments());
|
|
81
|
+
}
|
|
82
|
+
if (decoderResult.getECLevel() != null) {
|
|
83
|
+
result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, decoderResult.getECLevel().toString());
|
|
84
|
+
}
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
public void reset() {
|
|
89
|
+
// do nothing
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* This method detects a barcode in a "pure" image -- that is, pure monochrome image
|
|
94
|
+
* which contains only an unrotated, unskewed, image of a barcode, with some white border
|
|
95
|
+
* around it. This is a specialized method that works exceptionally fast in this special
|
|
96
|
+
* case.
|
|
97
|
+
*/
|
|
98
|
+
public static BitMatrix extractPureBits(BitMatrix image) throws NotFoundException {
|
|
99
|
+
|
|
100
|
+
int height = image.getHeight();
|
|
101
|
+
int width = image.getWidth();
|
|
102
|
+
int minDimension = Math.min(height, width);
|
|
103
|
+
|
|
104
|
+
// And then keep tracking across the top-left black module to determine module size
|
|
105
|
+
//int moduleEnd = borderWidth;
|
|
106
|
+
int[] leftTopBlack = image.getTopLeftOnBit();
|
|
107
|
+
if (leftTopBlack == null) {
|
|
108
|
+
throw NotFoundException.getNotFoundInstance();
|
|
109
|
+
}
|
|
110
|
+
int x = leftTopBlack[0];
|
|
111
|
+
int y = leftTopBlack[1];
|
|
112
|
+
while (x < minDimension && y < minDimension && image.get(x, y)) {
|
|
113
|
+
x++;
|
|
114
|
+
y++;
|
|
115
|
+
}
|
|
116
|
+
if (x == minDimension || y == minDimension) {
|
|
117
|
+
throw NotFoundException.getNotFoundInstance();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
int moduleSize = x - leftTopBlack[0];
|
|
121
|
+
if (moduleSize == 0) {
|
|
122
|
+
throw NotFoundException.getNotFoundInstance();
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// And now find where the rightmost black module on the first row ends
|
|
126
|
+
int rowEndOfSymbol = width - 1;
|
|
127
|
+
while (rowEndOfSymbol > x && !image.get(rowEndOfSymbol, y)) {
|
|
128
|
+
rowEndOfSymbol--;
|
|
129
|
+
}
|
|
130
|
+
if (rowEndOfSymbol <= x) {
|
|
131
|
+
throw NotFoundException.getNotFoundInstance();
|
|
132
|
+
}
|
|
133
|
+
rowEndOfSymbol++;
|
|
134
|
+
|
|
135
|
+
// Make sure width of barcode is a multiple of module size
|
|
136
|
+
if ((rowEndOfSymbol - x) % moduleSize != 0) {
|
|
137
|
+
throw NotFoundException.getNotFoundInstance();
|
|
138
|
+
}
|
|
139
|
+
int dimension = 1 + ((rowEndOfSymbol - x) / moduleSize);
|
|
140
|
+
|
|
141
|
+
// Push in the "border" by half the module width so that we start
|
|
142
|
+
// sampling in the middle of the module. Just in case the image is a
|
|
143
|
+
// little off, this will help recover. Need to back up at least 1.
|
|
144
|
+
int backOffAmount = moduleSize == 1 ? 1 : moduleSize >> 1;
|
|
145
|
+
x -= backOffAmount;
|
|
146
|
+
y -= backOffAmount;
|
|
147
|
+
|
|
148
|
+
if ((x + (dimension - 1) * moduleSize) >= width ||
|
|
149
|
+
(y + (dimension - 1) * moduleSize) >= height) {
|
|
150
|
+
throw NotFoundException.getNotFoundInstance();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Now just read off the bits
|
|
154
|
+
BitMatrix bits = new BitMatrix(dimension);
|
|
155
|
+
for (int i = 0; i < dimension; i++) {
|
|
156
|
+
int iOffset = y + i * moduleSize;
|
|
157
|
+
for (int j = 0; j < dimension; j++) {
|
|
158
|
+
if (image.get(x + j * moduleSize, iOffset)) {
|
|
159
|
+
bits.set(j, i);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return bits;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
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.qrcode;
|
|
18
|
+
|
|
19
|
+
import com.google.zxing.BarcodeFormat;
|
|
20
|
+
import com.google.zxing.EncodeHintType;
|
|
21
|
+
import com.google.zxing.Writer;
|
|
22
|
+
import com.google.zxing.WriterException;
|
|
23
|
+
import com.google.zxing.common.BitMatrix;
|
|
24
|
+
import com.google.zxing.qrcode.encoder.ByteMatrix;
|
|
25
|
+
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
|
|
26
|
+
import com.google.zxing.qrcode.encoder.Encoder;
|
|
27
|
+
import com.google.zxing.qrcode.encoder.QRCode;
|
|
28
|
+
|
|
29
|
+
import java.util.Hashtable;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* This object renders a QR Code as a BitMatrix 2D array of greyscale values.
|
|
33
|
+
*
|
|
34
|
+
* @author dswitkin@google.com (Daniel Switkin)
|
|
35
|
+
*/
|
|
36
|
+
public final class QRCodeWriter implements Writer {
|
|
37
|
+
|
|
38
|
+
private static final int QUIET_ZONE_SIZE = 4;
|
|
39
|
+
|
|
40
|
+
public BitMatrix encode(String contents, BarcodeFormat format, int width, int height)
|
|
41
|
+
throws WriterException {
|
|
42
|
+
|
|
43
|
+
return encode(contents, format, width, height, null);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public BitMatrix encode(String contents, BarcodeFormat format, int width, int height,
|
|
47
|
+
Hashtable hints) throws WriterException {
|
|
48
|
+
|
|
49
|
+
if (contents == null || contents.length() == 0) {
|
|
50
|
+
throw new IllegalArgumentException("Found empty contents");
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (format != BarcodeFormat.QR_CODE) {
|
|
54
|
+
throw new IllegalArgumentException("Can only encode QR_CODE, but got " + format);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (width < 0 || height < 0) {
|
|
58
|
+
throw new IllegalArgumentException("Requested dimensions are too small: " + width + 'x' +
|
|
59
|
+
height);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
ErrorCorrectionLevel errorCorrectionLevel = ErrorCorrectionLevel.L;
|
|
63
|
+
if (hints != null) {
|
|
64
|
+
ErrorCorrectionLevel requestedECLevel = (ErrorCorrectionLevel) hints.get(EncodeHintType.ERROR_CORRECTION);
|
|
65
|
+
if (requestedECLevel != null) {
|
|
66
|
+
errorCorrectionLevel = requestedECLevel;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
QRCode code = new QRCode();
|
|
71
|
+
Encoder.encode(contents, errorCorrectionLevel, hints, code);
|
|
72
|
+
return renderResult(code, width, height);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Note that the input matrix uses 0 == white, 1 == black, while the output matrix uses
|
|
76
|
+
// 0 == black, 255 == white (i.e. an 8 bit greyscale bitmap).
|
|
77
|
+
private static BitMatrix renderResult(QRCode code, int width, int height) {
|
|
78
|
+
ByteMatrix input = code.getMatrix();
|
|
79
|
+
int inputWidth = input.getWidth();
|
|
80
|
+
int inputHeight = input.getHeight();
|
|
81
|
+
int qrWidth = inputWidth + (QUIET_ZONE_SIZE << 1);
|
|
82
|
+
int qrHeight = inputHeight + (QUIET_ZONE_SIZE << 1);
|
|
83
|
+
int outputWidth = Math.max(width, qrWidth);
|
|
84
|
+
int outputHeight = Math.max(height, qrHeight);
|
|
85
|
+
|
|
86
|
+
int multiple = Math.min(outputWidth / qrWidth, outputHeight / qrHeight);
|
|
87
|
+
// Padding includes both the quiet zone and the extra white pixels to accommodate the requested
|
|
88
|
+
// dimensions. For example, if input is 25x25 the QR will be 33x33 including the quiet zone.
|
|
89
|
+
// If the requested size is 200x160, the multiple will be 4, for a QR of 132x132. These will
|
|
90
|
+
// handle all the padding from 100x100 (the actual QR) up to 200x160.
|
|
91
|
+
int leftPadding = (outputWidth - (inputWidth * multiple)) / 2;
|
|
92
|
+
int topPadding = (outputHeight - (inputHeight * multiple)) / 2;
|
|
93
|
+
|
|
94
|
+
BitMatrix output = new BitMatrix(outputWidth, outputHeight);
|
|
95
|
+
|
|
96
|
+
for (int inputY = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {
|
|
97
|
+
// Write the contents of this row of the barcode
|
|
98
|
+
for (int inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {
|
|
99
|
+
if (input.get(inputX, inputY) == 1) {
|
|
100
|
+
output.setRegion(outputX, outputY, multiple, multiple);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return output;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2007 ZXing authors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.google.zxing.qrcode.decoder;
|
|
18
|
+
|
|
19
|
+
import com.google.zxing.FormatException;
|
|
20
|
+
import com.google.zxing.common.BitMatrix;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @author Sean Owen
|
|
24
|
+
*/
|
|
25
|
+
final class BitMatrixParser {
|
|
26
|
+
|
|
27
|
+
private final BitMatrix bitMatrix;
|
|
28
|
+
private Version parsedVersion;
|
|
29
|
+
private FormatInformation parsedFormatInfo;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @param bitMatrix {@link BitMatrix} to parse
|
|
33
|
+
* @throws FormatException if dimension is not >= 21 and 1 mod 4
|
|
34
|
+
*/
|
|
35
|
+
BitMatrixParser(BitMatrix bitMatrix) throws FormatException {
|
|
36
|
+
int dimension = bitMatrix.getHeight();
|
|
37
|
+
if (dimension < 21 || (dimension & 0x03) != 1) {
|
|
38
|
+
throw FormatException.getFormatInstance();
|
|
39
|
+
}
|
|
40
|
+
this.bitMatrix = bitMatrix;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* <p>Reads format information from one of its two locations within the QR Code.</p>
|
|
45
|
+
*
|
|
46
|
+
* @return {@link FormatInformation} encapsulating the QR Code's format info
|
|
47
|
+
* @throws FormatException if both format information locations cannot be parsed as
|
|
48
|
+
* the valid encoding of format information
|
|
49
|
+
*/
|
|
50
|
+
FormatInformation readFormatInformation() throws FormatException {
|
|
51
|
+
|
|
52
|
+
if (parsedFormatInfo != null) {
|
|
53
|
+
return parsedFormatInfo;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Read top-left format info bits
|
|
57
|
+
int formatInfoBits1 = 0;
|
|
58
|
+
for (int i = 0; i < 6; i++) {
|
|
59
|
+
formatInfoBits1 = copyBit(i, 8, formatInfoBits1);
|
|
60
|
+
}
|
|
61
|
+
// .. and skip a bit in the timing pattern ...
|
|
62
|
+
formatInfoBits1 = copyBit(7, 8, formatInfoBits1);
|
|
63
|
+
formatInfoBits1 = copyBit(8, 8, formatInfoBits1);
|
|
64
|
+
formatInfoBits1 = copyBit(8, 7, formatInfoBits1);
|
|
65
|
+
// .. and skip a bit in the timing pattern ...
|
|
66
|
+
for (int j = 5; j >= 0; j--) {
|
|
67
|
+
formatInfoBits1 = copyBit(8, j, formatInfoBits1);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Read the top-right/bottom-left pattern too
|
|
71
|
+
int dimension = bitMatrix.getHeight();
|
|
72
|
+
int formatInfoBits2 = 0;
|
|
73
|
+
int iMin = dimension - 8;
|
|
74
|
+
for (int i = dimension - 1; i >= iMin; i--) {
|
|
75
|
+
formatInfoBits2 = copyBit(i, 8, formatInfoBits2);
|
|
76
|
+
}
|
|
77
|
+
for (int j = dimension - 7; j < dimension; j++) {
|
|
78
|
+
formatInfoBits2 = copyBit(8, j, formatInfoBits2);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
parsedFormatInfo = FormatInformation.decodeFormatInformation(formatInfoBits1, formatInfoBits2);
|
|
82
|
+
if (parsedFormatInfo != null) {
|
|
83
|
+
return parsedFormatInfo;
|
|
84
|
+
}
|
|
85
|
+
throw FormatException.getFormatInstance();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* <p>Reads version information from one of its two locations within the QR Code.</p>
|
|
90
|
+
*
|
|
91
|
+
* @return {@link Version} encapsulating the QR Code's version
|
|
92
|
+
* @throws FormatException if both version information locations cannot be parsed as
|
|
93
|
+
* the valid encoding of version information
|
|
94
|
+
*/
|
|
95
|
+
Version readVersion() throws FormatException {
|
|
96
|
+
|
|
97
|
+
if (parsedVersion != null) {
|
|
98
|
+
return parsedVersion;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
int dimension = bitMatrix.getHeight();
|
|
102
|
+
|
|
103
|
+
int provisionalVersion = (dimension - 17) >> 2;
|
|
104
|
+
if (provisionalVersion <= 6) {
|
|
105
|
+
return Version.getVersionForNumber(provisionalVersion);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Read top-right version info: 3 wide by 6 tall
|
|
109
|
+
int versionBits = 0;
|
|
110
|
+
int ijMin = dimension - 11;
|
|
111
|
+
for (int j = 5; j >= 0; j--) {
|
|
112
|
+
for (int i = dimension - 9; i >= ijMin; i--) {
|
|
113
|
+
versionBits = copyBit(i, j, versionBits);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
parsedVersion = Version.decodeVersionInformation(versionBits);
|
|
118
|
+
if (parsedVersion != null && parsedVersion.getDimensionForVersion() == dimension) {
|
|
119
|
+
return parsedVersion;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Hmm, failed. Try bottom left: 6 wide by 3 tall
|
|
123
|
+
versionBits = 0;
|
|
124
|
+
for (int i = 5; i >= 0; i--) {
|
|
125
|
+
for (int j = dimension - 9; j >= ijMin; j--) {
|
|
126
|
+
versionBits = copyBit(i, j, versionBits);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
parsedVersion = Version.decodeVersionInformation(versionBits);
|
|
131
|
+
if (parsedVersion != null && parsedVersion.getDimensionForVersion() == dimension) {
|
|
132
|
+
return parsedVersion;
|
|
133
|
+
}
|
|
134
|
+
throw FormatException.getFormatInstance();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
private int copyBit(int i, int j, int versionBits) {
|
|
138
|
+
return bitMatrix.get(i, j) ? (versionBits << 1) | 0x1 : versionBits << 1;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* <p>Reads the bits in the {@link BitMatrix} representing the finder pattern in the
|
|
143
|
+
* correct order in order to reconstitute the codewords bytes contained within the
|
|
144
|
+
* QR Code.</p>
|
|
145
|
+
*
|
|
146
|
+
* @return bytes encoded within the QR Code
|
|
147
|
+
* @throws FormatException if the exact number of bytes expected is not read
|
|
148
|
+
*/
|
|
149
|
+
byte[] readCodewords() throws FormatException {
|
|
150
|
+
|
|
151
|
+
FormatInformation formatInfo = readFormatInformation();
|
|
152
|
+
Version version = readVersion();
|
|
153
|
+
|
|
154
|
+
// Get the data mask for the format used in this QR Code. This will exclude
|
|
155
|
+
// some bits from reading as we wind through the bit matrix.
|
|
156
|
+
DataMask dataMask = DataMask.forReference((int) formatInfo.getDataMask());
|
|
157
|
+
int dimension = bitMatrix.getHeight();
|
|
158
|
+
dataMask.unmaskBitMatrix(bitMatrix, dimension);
|
|
159
|
+
|
|
160
|
+
BitMatrix functionPattern = version.buildFunctionPattern();
|
|
161
|
+
|
|
162
|
+
boolean readingUp = true;
|
|
163
|
+
byte[] result = new byte[version.getTotalCodewords()];
|
|
164
|
+
int resultOffset = 0;
|
|
165
|
+
int currentByte = 0;
|
|
166
|
+
int bitsRead = 0;
|
|
167
|
+
// Read columns in pairs, from right to left
|
|
168
|
+
for (int j = dimension - 1; j > 0; j -= 2) {
|
|
169
|
+
if (j == 6) {
|
|
170
|
+
// Skip whole column with vertical alignment pattern;
|
|
171
|
+
// saves time and makes the other code proceed more cleanly
|
|
172
|
+
j--;
|
|
173
|
+
}
|
|
174
|
+
// Read alternatingly from bottom to top then top to bottom
|
|
175
|
+
for (int count = 0; count < dimension; count++) {
|
|
176
|
+
int i = readingUp ? dimension - 1 - count : count;
|
|
177
|
+
for (int col = 0; col < 2; col++) {
|
|
178
|
+
// Ignore bits covered by the function pattern
|
|
179
|
+
if (!functionPattern.get(j - col, i)) {
|
|
180
|
+
// Read a bit
|
|
181
|
+
bitsRead++;
|
|
182
|
+
currentByte <<= 1;
|
|
183
|
+
if (bitMatrix.get(j - col, i)) {
|
|
184
|
+
currentByte |= 1;
|
|
185
|
+
}
|
|
186
|
+
// If we've made a whole byte, save it off
|
|
187
|
+
if (bitsRead == 8) {
|
|
188
|
+
result[resultOffset++] = (byte) currentByte;
|
|
189
|
+
bitsRead = 0;
|
|
190
|
+
currentByte = 0;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
readingUp ^= true; // readingUp = !readingUp; // switch directions
|
|
196
|
+
}
|
|
197
|
+
if (resultOffset != version.getTotalCodewords()) {
|
|
198
|
+
throw FormatException.getFormatInstance();
|
|
199
|
+
}
|
|
200
|
+
return result;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
}
|