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,75 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2008 ZXing authors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.google.zxing.common.reedsolomon;
|
|
18
|
+
|
|
19
|
+
import java.util.Vector;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* <p>Implements Reed-Solomon enbcoding, as the name implies.</p>
|
|
23
|
+
*
|
|
24
|
+
* @author Sean Owen
|
|
25
|
+
* @author William Rucklidge
|
|
26
|
+
*/
|
|
27
|
+
public final class ReedSolomonEncoder {
|
|
28
|
+
|
|
29
|
+
private final GF256 field;
|
|
30
|
+
private final Vector cachedGenerators;
|
|
31
|
+
|
|
32
|
+
public ReedSolomonEncoder(GF256 field) {
|
|
33
|
+
if (!GF256.QR_CODE_FIELD.equals(field)) {
|
|
34
|
+
throw new IllegalArgumentException("Only QR Code is supported at this time");
|
|
35
|
+
}
|
|
36
|
+
this.field = field;
|
|
37
|
+
this.cachedGenerators = new Vector();
|
|
38
|
+
cachedGenerators.addElement(new GF256Poly(field, new int[] { 1 }));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
private GF256Poly buildGenerator(int degree) {
|
|
42
|
+
if (degree >= cachedGenerators.size()) {
|
|
43
|
+
GF256Poly lastGenerator = (GF256Poly) cachedGenerators.elementAt(cachedGenerators.size() - 1);
|
|
44
|
+
for (int d = cachedGenerators.size(); d <= degree; d++) {
|
|
45
|
+
GF256Poly nextGenerator = lastGenerator.multiply(new GF256Poly(field, new int[] { 1, field.exp(d - 1) }));
|
|
46
|
+
cachedGenerators.addElement(nextGenerator);
|
|
47
|
+
lastGenerator = nextGenerator;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return (GF256Poly) cachedGenerators.elementAt(degree);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public void encode(int[] toEncode, int ecBytes) {
|
|
54
|
+
if (ecBytes == 0) {
|
|
55
|
+
throw new IllegalArgumentException("No error correction bytes");
|
|
56
|
+
}
|
|
57
|
+
int dataBytes = toEncode.length - ecBytes;
|
|
58
|
+
if (dataBytes <= 0) {
|
|
59
|
+
throw new IllegalArgumentException("No data bytes provided");
|
|
60
|
+
}
|
|
61
|
+
GF256Poly generator = buildGenerator(ecBytes);
|
|
62
|
+
int[] infoCoefficients = new int[dataBytes];
|
|
63
|
+
System.arraycopy(toEncode, 0, infoCoefficients, 0, dataBytes);
|
|
64
|
+
GF256Poly info = new GF256Poly(field, infoCoefficients);
|
|
65
|
+
info = info.multiplyByMonomial(ecBytes, 1);
|
|
66
|
+
GF256Poly remainder = info.divide(generator)[1];
|
|
67
|
+
int[] coefficients = remainder.getCoefficients();
|
|
68
|
+
int numZeroCoefficients = ecBytes - coefficients.length;
|
|
69
|
+
for (int i = 0; i < numZeroCoefficients; i++) {
|
|
70
|
+
toEncode[dataBytes + i] = 0;
|
|
71
|
+
}
|
|
72
|
+
System.arraycopy(coefficients, 0, toEncode, dataBytes + numZeroCoefficients, coefficients.length);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2007 ZXing authors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.google.zxing.common.reedsolomon;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* <p>Thrown when an exception occurs during Reed-Solomon decoding, such as when
|
|
21
|
+
* there are too many errors to correct.</p>
|
|
22
|
+
*
|
|
23
|
+
* @author Sean Owen
|
|
24
|
+
*/
|
|
25
|
+
public final class ReedSolomonException extends Exception {
|
|
26
|
+
|
|
27
|
+
public ReedSolomonException(String message) {
|
|
28
|
+
super(message);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2007 ZXing authors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.google.zxing.datamatrix;
|
|
18
|
+
|
|
19
|
+
import com.google.zxing.BarcodeFormat;
|
|
20
|
+
import com.google.zxing.BinaryBitmap;
|
|
21
|
+
import com.google.zxing.ChecksumException;
|
|
22
|
+
import com.google.zxing.DecodeHintType;
|
|
23
|
+
import com.google.zxing.FormatException;
|
|
24
|
+
import com.google.zxing.NotFoundException;
|
|
25
|
+
import com.google.zxing.Reader;
|
|
26
|
+
import com.google.zxing.Result;
|
|
27
|
+
import com.google.zxing.ResultMetadataType;
|
|
28
|
+
import com.google.zxing.ResultPoint;
|
|
29
|
+
import com.google.zxing.common.BitMatrix;
|
|
30
|
+
import com.google.zxing.common.DecoderResult;
|
|
31
|
+
import com.google.zxing.common.DetectorResult;
|
|
32
|
+
import com.google.zxing.datamatrix.decoder.Decoder;
|
|
33
|
+
import com.google.zxing.datamatrix.detector.Detector;
|
|
34
|
+
|
|
35
|
+
import java.util.Hashtable;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* This implementation can detect and decode Data Matrix codes in an image.
|
|
39
|
+
*
|
|
40
|
+
* @author bbrown@google.com (Brian Brown)
|
|
41
|
+
*/
|
|
42
|
+
public final class DataMatrixReader implements Reader {
|
|
43
|
+
|
|
44
|
+
private static final ResultPoint[] NO_POINTS = new ResultPoint[0];
|
|
45
|
+
|
|
46
|
+
private final Decoder decoder = new Decoder();
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Locates and decodes a Data Matrix code in an image.
|
|
50
|
+
*
|
|
51
|
+
* @return a String representing the content encoded by the Data Matrix code
|
|
52
|
+
* @throws NotFoundException if a Data Matrix code cannot be found
|
|
53
|
+
* @throws FormatException if a Data Matrix code cannot be decoded
|
|
54
|
+
* @throws ChecksumException if error correction fails
|
|
55
|
+
*/
|
|
56
|
+
public Result decode(BinaryBitmap image) throws NotFoundException, ChecksumException, FormatException {
|
|
57
|
+
return decode(image, null);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
public Result decode(BinaryBitmap image, Hashtable hints)
|
|
61
|
+
throws NotFoundException, ChecksumException, FormatException {
|
|
62
|
+
DecoderResult decoderResult;
|
|
63
|
+
ResultPoint[] points;
|
|
64
|
+
if (hints != null && hints.containsKey(DecodeHintType.PURE_BARCODE)) {
|
|
65
|
+
BitMatrix bits = extractPureBits(image.getBlackMatrix());
|
|
66
|
+
decoderResult = decoder.decode(bits);
|
|
67
|
+
points = NO_POINTS;
|
|
68
|
+
} else {
|
|
69
|
+
DetectorResult detectorResult = new Detector(image.getBlackMatrix()).detect();
|
|
70
|
+
decoderResult = decoder.decode(detectorResult.getBits());
|
|
71
|
+
points = detectorResult.getPoints();
|
|
72
|
+
}
|
|
73
|
+
Result result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), points,
|
|
74
|
+
BarcodeFormat.DATA_MATRIX);
|
|
75
|
+
if (decoderResult.getByteSegments() != null) {
|
|
76
|
+
result.putMetadata(ResultMetadataType.BYTE_SEGMENTS, decoderResult.getByteSegments());
|
|
77
|
+
}
|
|
78
|
+
if (decoderResult.getECLevel() != null) {
|
|
79
|
+
result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, decoderResult.getECLevel().toString());
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
public void reset() {
|
|
85
|
+
// do nothing
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* This method detects a Data Matrix code in a "pure" image -- that is, pure monochrome image
|
|
90
|
+
* which contains only an unrotated, unskewed, image of a Data Matrix code, with some white border
|
|
91
|
+
* around it. This is a specialized method that works exceptionally fast in this special
|
|
92
|
+
* case.
|
|
93
|
+
*
|
|
94
|
+
* @see com.google.zxing.qrcode.QRCodeReader#extractPureBits(BitMatrix)
|
|
95
|
+
*/
|
|
96
|
+
private static BitMatrix extractPureBits(BitMatrix image) throws NotFoundException {
|
|
97
|
+
|
|
98
|
+
int height = image.getHeight();
|
|
99
|
+
int width = image.getWidth();
|
|
100
|
+
int minDimension = Math.min(height, width);
|
|
101
|
+
|
|
102
|
+
// And then keep tracking across the top-left black module to determine module size
|
|
103
|
+
//int moduleEnd = borderWidth;
|
|
104
|
+
int[] leftTopBlack = image.getTopLeftOnBit();
|
|
105
|
+
if (leftTopBlack == null) {
|
|
106
|
+
throw NotFoundException.getNotFoundInstance();
|
|
107
|
+
}
|
|
108
|
+
int x = leftTopBlack[0];
|
|
109
|
+
int y = leftTopBlack[1];
|
|
110
|
+
while (x < minDimension && y < minDimension && image.get(x, y)) {
|
|
111
|
+
x++;
|
|
112
|
+
}
|
|
113
|
+
if (x == minDimension) {
|
|
114
|
+
throw NotFoundException.getNotFoundInstance();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
int moduleSize = x - leftTopBlack[0];
|
|
118
|
+
|
|
119
|
+
// And now find where the rightmost black module on the first row ends
|
|
120
|
+
int rowEndOfSymbol = width - 1;
|
|
121
|
+
while (rowEndOfSymbol >= 0 && !image.get(rowEndOfSymbol, y)) {
|
|
122
|
+
rowEndOfSymbol--;
|
|
123
|
+
}
|
|
124
|
+
if (rowEndOfSymbol < 0) {
|
|
125
|
+
throw NotFoundException.getNotFoundInstance();
|
|
126
|
+
}
|
|
127
|
+
rowEndOfSymbol++;
|
|
128
|
+
|
|
129
|
+
// Make sure width of barcode is a multiple of module size
|
|
130
|
+
if ((rowEndOfSymbol - x) % moduleSize != 0) {
|
|
131
|
+
throw NotFoundException.getNotFoundInstance();
|
|
132
|
+
}
|
|
133
|
+
int dimension = 2 + ((rowEndOfSymbol - x) / moduleSize);
|
|
134
|
+
|
|
135
|
+
y += moduleSize;
|
|
136
|
+
|
|
137
|
+
// Push in the "border" by half the module width so that we start
|
|
138
|
+
// sampling in the middle of the module. Just in case the image is a
|
|
139
|
+
// little off, this will help recover.
|
|
140
|
+
x -= moduleSize >> 1;
|
|
141
|
+
y -= moduleSize >> 1;
|
|
142
|
+
|
|
143
|
+
if ((x + (dimension - 1) * moduleSize) >= width ||
|
|
144
|
+
(y + (dimension - 1) * moduleSize) >= height) {
|
|
145
|
+
throw NotFoundException.getNotFoundInstance();
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Now just read off the bits
|
|
149
|
+
BitMatrix bits = new BitMatrix(dimension);
|
|
150
|
+
for (int i = 0; i < dimension; i++) {
|
|
151
|
+
int iOffset = y + i * moduleSize;
|
|
152
|
+
for (int j = 0; j < dimension; j++) {
|
|
153
|
+
if (image.get(x + j * moduleSize, iOffset)) {
|
|
154
|
+
bits.set(j, i);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return bits;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
}
|
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2007 ZXing authors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.google.zxing.datamatrix.decoder;
|
|
18
|
+
|
|
19
|
+
import com.google.zxing.FormatException;
|
|
20
|
+
import com.google.zxing.common.BitMatrix;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @author bbrown@google.com (Brian Brown)
|
|
24
|
+
*/
|
|
25
|
+
final class BitMatrixParser {
|
|
26
|
+
|
|
27
|
+
private final BitMatrix mappingBitMatrix;
|
|
28
|
+
private final BitMatrix readMappingMatrix;
|
|
29
|
+
private final Version version;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @param bitMatrix {@link BitMatrix} to parse
|
|
33
|
+
* @throws FormatException if dimension is < 10 or > 144 or not 0 mod 2
|
|
34
|
+
*/
|
|
35
|
+
BitMatrixParser(BitMatrix bitMatrix) throws FormatException {
|
|
36
|
+
int dimension = bitMatrix.getHeight();
|
|
37
|
+
if (dimension < 10 || dimension > 144 || (dimension & 0x01) != 0) {
|
|
38
|
+
throw FormatException.getFormatInstance();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
version = readVersion(bitMatrix);
|
|
42
|
+
this.mappingBitMatrix = extractDataRegion(bitMatrix);
|
|
43
|
+
// TODO(bbrown): Make this work for rectangular symbols
|
|
44
|
+
this.readMappingMatrix = new BitMatrix(this.mappingBitMatrix.getHeight());
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* <p>Creates the version object based on the dimension of the original bit matrix from
|
|
49
|
+
* the datamatrix code.</p>
|
|
50
|
+
*
|
|
51
|
+
* <p>See ISO 16022:2006 Table 7 - ECC 200 symbol attributes</p>
|
|
52
|
+
*
|
|
53
|
+
* @param bitMatrix Original {@link BitMatrix} including alignment patterns
|
|
54
|
+
* @return {@link Version} encapsulating the Data Matrix Code's "version"
|
|
55
|
+
* @throws FormatException if the dimensions of the mapping matrix are not valid
|
|
56
|
+
* Data Matrix dimensions.
|
|
57
|
+
*/
|
|
58
|
+
Version readVersion(BitMatrix bitMatrix) throws FormatException {
|
|
59
|
+
|
|
60
|
+
if (version != null) {
|
|
61
|
+
return version;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// TODO(bbrown): make this work for rectangular dimensions as well.
|
|
65
|
+
int numRows = bitMatrix.getHeight();
|
|
66
|
+
int numColumns = numRows;
|
|
67
|
+
|
|
68
|
+
return Version.getVersionForDimensions(numRows, numColumns);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* <p>Reads the bits in the {@link BitMatrix} representing the mapping matrix (No alignment patterns)
|
|
73
|
+
* in the correct order in order to reconstitute the codewords bytes contained within the
|
|
74
|
+
* Data Matrix Code.</p>
|
|
75
|
+
*
|
|
76
|
+
* @return bytes encoded within the Data Matrix Code
|
|
77
|
+
* @throws FormatException if the exact number of bytes expected is not read
|
|
78
|
+
*/
|
|
79
|
+
byte[] readCodewords() throws FormatException {
|
|
80
|
+
|
|
81
|
+
byte[] result = new byte[version.getTotalCodewords()];
|
|
82
|
+
int resultOffset = 0;
|
|
83
|
+
|
|
84
|
+
int row = 4;
|
|
85
|
+
int column = 0;
|
|
86
|
+
// TODO(bbrown): Data Matrix can be rectangular, assuming square for now
|
|
87
|
+
int numRows = mappingBitMatrix.getHeight();
|
|
88
|
+
int numColumns = numRows;
|
|
89
|
+
|
|
90
|
+
boolean corner1Read = false;
|
|
91
|
+
boolean corner2Read = false;
|
|
92
|
+
boolean corner3Read = false;
|
|
93
|
+
boolean corner4Read = false;
|
|
94
|
+
|
|
95
|
+
// Read all of the codewords
|
|
96
|
+
do {
|
|
97
|
+
// Check the four corner cases
|
|
98
|
+
if ((row == numRows) && (column == 0) && !corner1Read) {
|
|
99
|
+
result[resultOffset++] = (byte) readCorner1(numRows, numColumns);
|
|
100
|
+
row -= 2;
|
|
101
|
+
column +=2;
|
|
102
|
+
corner1Read = true;
|
|
103
|
+
} else if ((row == numRows-2) && (column == 0) && ((numColumns & 0x03) != 0) && !corner2Read) {
|
|
104
|
+
result[resultOffset++] = (byte) readCorner2(numRows, numColumns);
|
|
105
|
+
row -= 2;
|
|
106
|
+
column +=2;
|
|
107
|
+
corner2Read = true;
|
|
108
|
+
} else if ((row == numRows+4) && (column == 2) && ((numColumns & 0x07) == 0) && !corner3Read) {
|
|
109
|
+
result[resultOffset++] = (byte) readCorner3(numRows, numColumns);
|
|
110
|
+
row -= 2;
|
|
111
|
+
column +=2;
|
|
112
|
+
corner3Read = true;
|
|
113
|
+
} else if ((row == numRows-2) && (column == 0) && ((numColumns & 0x07) == 4) && !corner4Read) {
|
|
114
|
+
result[resultOffset++] = (byte) readCorner4(numRows, numColumns);
|
|
115
|
+
row -= 2;
|
|
116
|
+
column +=2;
|
|
117
|
+
corner4Read = true;
|
|
118
|
+
} else {
|
|
119
|
+
// Sweep upward diagonally to the right
|
|
120
|
+
do {
|
|
121
|
+
if ((row < numRows) && (column >= 0) && !readMappingMatrix.get(column, row)) {
|
|
122
|
+
result[resultOffset++] = (byte) readUtah(row, column, numRows, numColumns);
|
|
123
|
+
}
|
|
124
|
+
row -= 2;
|
|
125
|
+
column +=2;
|
|
126
|
+
} while ((row >= 0) && (column < numColumns));
|
|
127
|
+
row += 1;
|
|
128
|
+
column +=3;
|
|
129
|
+
|
|
130
|
+
// Sweep downward diagonally to the left
|
|
131
|
+
do {
|
|
132
|
+
if ((row >= 0) && (column < numColumns) && !readMappingMatrix.get(column, row)) {
|
|
133
|
+
result[resultOffset++] = (byte) readUtah(row, column, numRows, numColumns);
|
|
134
|
+
}
|
|
135
|
+
row += 2;
|
|
136
|
+
column -=2;
|
|
137
|
+
} while ((row < numRows) && (column >= 0));
|
|
138
|
+
row += 3;
|
|
139
|
+
column +=1;
|
|
140
|
+
}
|
|
141
|
+
} while ((row < numRows) || (column < numColumns));
|
|
142
|
+
|
|
143
|
+
if (resultOffset != version.getTotalCodewords()) {
|
|
144
|
+
throw FormatException.getFormatInstance();
|
|
145
|
+
}
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* <p>Reads a bit of the mapping matrix accounting for boundary wrapping.</p>
|
|
151
|
+
*
|
|
152
|
+
* @param row Row to read in the mapping matrix
|
|
153
|
+
* @param column Column to read in the mapping matrix
|
|
154
|
+
* @param numRows Number of rows in the mapping matrix
|
|
155
|
+
* @param numColumns Number of columns in the mapping matrix
|
|
156
|
+
* @return value of the given bit in the mapping matrix
|
|
157
|
+
*/
|
|
158
|
+
boolean readModule(int row, int column, int numRows, int numColumns) {
|
|
159
|
+
// Adjust the row and column indices based on boundary wrapping
|
|
160
|
+
if (row < 0) {
|
|
161
|
+
row += numRows;
|
|
162
|
+
column += 4 - ((numRows + 4) & 0x07);
|
|
163
|
+
}
|
|
164
|
+
if (column < 0) {
|
|
165
|
+
column += numColumns;
|
|
166
|
+
row += 4 - ((numColumns + 4) & 0x07);
|
|
167
|
+
}
|
|
168
|
+
readMappingMatrix.set(column, row);
|
|
169
|
+
return mappingBitMatrix.get(column, row);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* <p>Reads the 8 bits of the standard Utah-shaped pattern.</p>
|
|
174
|
+
*
|
|
175
|
+
* <p>See ISO 16022:2006, 5.8.1 Figure 6</p>
|
|
176
|
+
*
|
|
177
|
+
* @param row Current row in the mapping matrix, anchored at the 8th bit (LSB) of the pattern
|
|
178
|
+
* @param column Current column in the mapping matrix, anchored at the 8th bit (LSB) of the pattern
|
|
179
|
+
* @param numRows Number of rows in the mapping matrix
|
|
180
|
+
* @param numColumns Number of columns in the mapping matrix
|
|
181
|
+
* @return byte from the utah shape
|
|
182
|
+
*/
|
|
183
|
+
int readUtah(int row, int column, int numRows, int numColumns) {
|
|
184
|
+
int currentByte = 0;
|
|
185
|
+
if (readModule(row - 2, column - 2, numRows, numColumns)) {
|
|
186
|
+
currentByte |= 1;
|
|
187
|
+
}
|
|
188
|
+
currentByte <<= 1;
|
|
189
|
+
if (readModule(row - 2, column - 1, numRows, numColumns)) {
|
|
190
|
+
currentByte |= 1;
|
|
191
|
+
}
|
|
192
|
+
currentByte <<= 1;
|
|
193
|
+
if (readModule(row - 1, column - 2, numRows, numColumns)) {
|
|
194
|
+
currentByte |= 1;
|
|
195
|
+
}
|
|
196
|
+
currentByte <<= 1;
|
|
197
|
+
if (readModule(row - 1, column - 1, numRows, numColumns)) {
|
|
198
|
+
currentByte |= 1;
|
|
199
|
+
}
|
|
200
|
+
currentByte <<= 1;
|
|
201
|
+
if (readModule(row - 1, column, numRows, numColumns)) {
|
|
202
|
+
currentByte |= 1;
|
|
203
|
+
}
|
|
204
|
+
currentByte <<= 1;
|
|
205
|
+
if (readModule(row, column - 2, numRows, numColumns)) {
|
|
206
|
+
currentByte |= 1;
|
|
207
|
+
}
|
|
208
|
+
currentByte <<= 1;
|
|
209
|
+
if (readModule(row, column - 1, numRows, numColumns)) {
|
|
210
|
+
currentByte |= 1;
|
|
211
|
+
}
|
|
212
|
+
currentByte <<= 1;
|
|
213
|
+
if (readModule(row, column, numRows, numColumns)) {
|
|
214
|
+
currentByte |= 1;
|
|
215
|
+
}
|
|
216
|
+
return currentByte;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* <p>Reads the 8 bits of the special corner condition 1.</p>
|
|
221
|
+
*
|
|
222
|
+
* <p>See ISO 16022:2006, Figure F.3</p>
|
|
223
|
+
*
|
|
224
|
+
* @param numRows Number of rows in the mapping matrix
|
|
225
|
+
* @param numColumns Number of columns in the mapping matrix
|
|
226
|
+
* @return byte from the Corner condition 1
|
|
227
|
+
*/
|
|
228
|
+
int readCorner1(int numRows, int numColumns) {
|
|
229
|
+
int currentByte = 0;
|
|
230
|
+
if (readModule(numRows - 1, 0, numRows, numColumns)) {
|
|
231
|
+
currentByte |= 1;
|
|
232
|
+
}
|
|
233
|
+
currentByte <<= 1;
|
|
234
|
+
if (readModule(numRows - 1, 1, numRows, numColumns)) {
|
|
235
|
+
currentByte |= 1;
|
|
236
|
+
}
|
|
237
|
+
currentByte <<= 1;
|
|
238
|
+
if (readModule(numRows - 1, 2, numRows, numColumns)) {
|
|
239
|
+
currentByte |= 1;
|
|
240
|
+
}
|
|
241
|
+
currentByte <<= 1;
|
|
242
|
+
if (readModule(0, numColumns - 2, numRows, numColumns)) {
|
|
243
|
+
currentByte |= 1;
|
|
244
|
+
}
|
|
245
|
+
currentByte <<= 1;
|
|
246
|
+
if (readModule(0, numColumns - 1, numRows, numColumns)) {
|
|
247
|
+
currentByte |= 1;
|
|
248
|
+
}
|
|
249
|
+
currentByte <<= 1;
|
|
250
|
+
if (readModule(1, numColumns - 1, numRows, numColumns)) {
|
|
251
|
+
currentByte |= 1;
|
|
252
|
+
}
|
|
253
|
+
currentByte <<= 1;
|
|
254
|
+
if (readModule(2, numColumns - 1, numRows, numColumns)) {
|
|
255
|
+
currentByte |= 1;
|
|
256
|
+
}
|
|
257
|
+
currentByte <<= 1;
|
|
258
|
+
if (readModule(3, numColumns - 1, numRows, numColumns)) {
|
|
259
|
+
currentByte |= 1;
|
|
260
|
+
}
|
|
261
|
+
return currentByte;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* <p>Reads the 8 bits of the special corner condition 2.</p>
|
|
266
|
+
*
|
|
267
|
+
* <p>See ISO 16022:2006, Figure F.4</p>
|
|
268
|
+
*
|
|
269
|
+
* @param numRows Number of rows in the mapping matrix
|
|
270
|
+
* @param numColumns Number of columns in the mapping matrix
|
|
271
|
+
* @return byte from the Corner condition 2
|
|
272
|
+
*/
|
|
273
|
+
int readCorner2(int numRows, int numColumns) {
|
|
274
|
+
int currentByte = 0;
|
|
275
|
+
if (readModule(numRows - 3, 0, numRows, numColumns)) {
|
|
276
|
+
currentByte |= 1;
|
|
277
|
+
}
|
|
278
|
+
currentByte <<= 1;
|
|
279
|
+
if (readModule(numRows - 2, 0, numRows, numColumns)) {
|
|
280
|
+
currentByte |= 1;
|
|
281
|
+
}
|
|
282
|
+
currentByte <<= 1;
|
|
283
|
+
if (readModule(numRows - 1, 0, numRows, numColumns)) {
|
|
284
|
+
currentByte |= 1;
|
|
285
|
+
}
|
|
286
|
+
currentByte <<= 1;
|
|
287
|
+
if (readModule(0, numColumns - 4, numRows, numColumns)) {
|
|
288
|
+
currentByte |= 1;
|
|
289
|
+
}
|
|
290
|
+
currentByte <<= 1;
|
|
291
|
+
if (readModule(0, numColumns - 3, numRows, numColumns)) {
|
|
292
|
+
currentByte |= 1;
|
|
293
|
+
}
|
|
294
|
+
currentByte <<= 1;
|
|
295
|
+
if (readModule(0, numColumns - 2, numRows, numColumns)) {
|
|
296
|
+
currentByte |= 1;
|
|
297
|
+
}
|
|
298
|
+
currentByte <<= 1;
|
|
299
|
+
if (readModule(0, numColumns - 1, numRows, numColumns)) {
|
|
300
|
+
currentByte |= 1;
|
|
301
|
+
}
|
|
302
|
+
currentByte <<= 1;
|
|
303
|
+
if (readModule(1, numColumns - 1, numRows, numColumns)) {
|
|
304
|
+
currentByte |= 1;
|
|
305
|
+
}
|
|
306
|
+
return currentByte;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* <p>Reads the 8 bits of the special corner condition 3.</p>
|
|
311
|
+
*
|
|
312
|
+
* <p>See ISO 16022:2006, Figure F.5</p>
|
|
313
|
+
*
|
|
314
|
+
* @param numRows Number of rows in the mapping matrix
|
|
315
|
+
* @param numColumns Number of columns in the mapping matrix
|
|
316
|
+
* @return byte from the Corner condition 3
|
|
317
|
+
*/
|
|
318
|
+
int readCorner3(int numRows, int numColumns) {
|
|
319
|
+
int currentByte = 0;
|
|
320
|
+
if (readModule(numRows - 1, 0, numRows, numColumns)) {
|
|
321
|
+
currentByte |= 1;
|
|
322
|
+
}
|
|
323
|
+
currentByte <<= 1;
|
|
324
|
+
if (readModule(numRows - 1, numColumns - 1, numRows, numColumns)) {
|
|
325
|
+
currentByte |= 1;
|
|
326
|
+
}
|
|
327
|
+
currentByte <<= 1;
|
|
328
|
+
if (readModule(0, numColumns - 3, numRows, numColumns)) {
|
|
329
|
+
currentByte |= 1;
|
|
330
|
+
}
|
|
331
|
+
currentByte <<= 1;
|
|
332
|
+
if (readModule(0, numColumns - 2, numRows, numColumns)) {
|
|
333
|
+
currentByte |= 1;
|
|
334
|
+
}
|
|
335
|
+
currentByte <<= 1;
|
|
336
|
+
if (readModule(0, numColumns - 1, numRows, numColumns)) {
|
|
337
|
+
currentByte |= 1;
|
|
338
|
+
}
|
|
339
|
+
currentByte <<= 1;
|
|
340
|
+
if (readModule(1, numColumns - 3, numRows, numColumns)) {
|
|
341
|
+
currentByte |= 1;
|
|
342
|
+
}
|
|
343
|
+
currentByte <<= 1;
|
|
344
|
+
if (readModule(1, numColumns - 2, numRows, numColumns)) {
|
|
345
|
+
currentByte |= 1;
|
|
346
|
+
}
|
|
347
|
+
currentByte <<= 1;
|
|
348
|
+
if (readModule(1, numColumns - 1, numRows, numColumns)) {
|
|
349
|
+
currentByte |= 1;
|
|
350
|
+
}
|
|
351
|
+
return currentByte;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* <p>Reads the 8 bits of the special corner condition 4.</p>
|
|
356
|
+
*
|
|
357
|
+
* <p>See ISO 16022:2006, Figure F.6</p>
|
|
358
|
+
*
|
|
359
|
+
* @param numRows Number of rows in the mapping matrix
|
|
360
|
+
* @param numColumns Number of columns in the mapping matrix
|
|
361
|
+
* @return byte from the Corner condition 4
|
|
362
|
+
*/
|
|
363
|
+
int readCorner4(int numRows, int numColumns) {
|
|
364
|
+
int currentByte = 0;
|
|
365
|
+
if (readModule(numRows - 3, 0, numRows, numColumns)) {
|
|
366
|
+
currentByte |= 1;
|
|
367
|
+
}
|
|
368
|
+
currentByte <<= 1;
|
|
369
|
+
if (readModule(numRows - 2, 0, numRows, numColumns)) {
|
|
370
|
+
currentByte |= 1;
|
|
371
|
+
}
|
|
372
|
+
currentByte <<= 1;
|
|
373
|
+
if (readModule(numRows - 1, 0, numRows, numColumns)) {
|
|
374
|
+
currentByte |= 1;
|
|
375
|
+
}
|
|
376
|
+
currentByte <<= 1;
|
|
377
|
+
if (readModule(0, numColumns - 2, numRows, numColumns)) {
|
|
378
|
+
currentByte |= 1;
|
|
379
|
+
}
|
|
380
|
+
currentByte <<= 1;
|
|
381
|
+
if (readModule(0, numColumns - 1, numRows, numColumns)) {
|
|
382
|
+
currentByte |= 1;
|
|
383
|
+
}
|
|
384
|
+
currentByte <<= 1;
|
|
385
|
+
if (readModule(1, numColumns - 1, numRows, numColumns)) {
|
|
386
|
+
currentByte |= 1;
|
|
387
|
+
}
|
|
388
|
+
currentByte <<= 1;
|
|
389
|
+
if (readModule(2, numColumns - 1, numRows, numColumns)) {
|
|
390
|
+
currentByte |= 1;
|
|
391
|
+
}
|
|
392
|
+
currentByte <<= 1;
|
|
393
|
+
if (readModule(3, numColumns - 1, numRows, numColumns)) {
|
|
394
|
+
currentByte |= 1;
|
|
395
|
+
}
|
|
396
|
+
return currentByte;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* <p>Extracts the data region from a {@link BitMatrix} that contains
|
|
401
|
+
* alignment patterns.</p>
|
|
402
|
+
*
|
|
403
|
+
* @param bitMatrix Original {@link BitMatrix} with alignment patterns
|
|
404
|
+
* @return BitMatrix that has the alignment patterns removed
|
|
405
|
+
*/
|
|
406
|
+
BitMatrix extractDataRegion(BitMatrix bitMatrix) {
|
|
407
|
+
int symbolSizeRows = version.getSymbolSizeRows();
|
|
408
|
+
int symbolSizeColumns = version.getSymbolSizeColumns();
|
|
409
|
+
|
|
410
|
+
// TODO(bbrown): Make this work with rectangular codes
|
|
411
|
+
if (bitMatrix.getHeight() != symbolSizeRows) {
|
|
412
|
+
throw new IllegalArgumentException("Dimension of bitMarix must match the version size");
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
int dataRegionSizeRows = version.getDataRegionSizeRows();
|
|
416
|
+
int dataRegionSizeColumns = version.getDataRegionSizeColumns();
|
|
417
|
+
|
|
418
|
+
int numDataRegionsRow = symbolSizeRows / dataRegionSizeRows;
|
|
419
|
+
int numDataRegionsColumn = symbolSizeColumns / dataRegionSizeColumns;
|
|
420
|
+
|
|
421
|
+
int sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows;
|
|
422
|
+
//int sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns;
|
|
423
|
+
|
|
424
|
+
// TODO(bbrown): Make this work with rectangular codes
|
|
425
|
+
BitMatrix bitMatrixWithoutAlignment = new BitMatrix(sizeDataRegionRow);
|
|
426
|
+
for (int dataRegionRow = 0; dataRegionRow < numDataRegionsRow; ++dataRegionRow) {
|
|
427
|
+
int dataRegionRowOffset = dataRegionRow * dataRegionSizeRows;
|
|
428
|
+
for (int dataRegionColumn = 0; dataRegionColumn < numDataRegionsColumn; ++dataRegionColumn) {
|
|
429
|
+
int dataRegionColumnOffset = dataRegionColumn * dataRegionSizeColumns;
|
|
430
|
+
for (int i = 0; i < dataRegionSizeRows; ++i) {
|
|
431
|
+
int readRowOffset = dataRegionRow * (dataRegionSizeRows + 2) + 1 + i;
|
|
432
|
+
int writeRowOffset = dataRegionRowOffset + i;
|
|
433
|
+
for (int j = 0; j < dataRegionSizeColumns; ++j) {
|
|
434
|
+
int readColumnOffset = dataRegionColumn * (dataRegionSizeColumns + 2) + 1 + j;
|
|
435
|
+
if (bitMatrix.get(readColumnOffset, readRowOffset)) {
|
|
436
|
+
int writeColumnOffset = dataRegionColumnOffset + j;
|
|
437
|
+
bitMatrixWithoutAlignment.set(writeColumnOffset, writeRowOffset);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
return bitMatrixWithoutAlignment;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
}
|