mirror of
https://github.com/starovoid/rxing.git
synced 2026-07-28 05:12:34 +00:00
fairly major reorganization and clippy cleanup
This commit is contained in:
@@ -79,7 +79,8 @@ fn test_aztec_rxing_result_sample() {
|
|||||||
|
|
||||||
// Test that we can tolerate errors in the parameter locator bits
|
// Test that we can tolerate errors in the parameter locator bits
|
||||||
fn test_error_in_parameter_locator(data: &str) {
|
fn test_error_in_parameter_locator(data: &str) {
|
||||||
let aztec = encoder::encoder::encode(data, 25, encoder::encoder::DEFAULT_AZTEC_LAYERS)
|
let aztec =
|
||||||
|
encoder::aztec_encoder::encode(data, 25, encoder::aztec_encoder::DEFAULT_AZTEC_LAYERS)
|
||||||
.expect("encode should create");
|
.expect("encode should create");
|
||||||
// dbg!(aztec.getMatrix().to_string());
|
// dbg!(aztec.getMatrix().to_string());
|
||||||
let mut random = rand::thread_rng(); //Random(aztec.getMatrix().hashCode()); // pseudo-random, but deterministic
|
let mut random = rand::thread_rng(); //Random(aztec.getMatrix().hashCode()); // pseudo-random, but deterministic
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ use crate::{
|
|||||||
BarcodeFormat, EncodeHintType, EncodeHintValue, RXingResultPoint,
|
BarcodeFormat, EncodeHintType, EncodeHintValue, RXingResultPoint,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{encoder::encoder, AztecWriter};
|
use super::{encoder::aztec_encoder, AztecWriter};
|
||||||
|
|
||||||
use crate::Writer;
|
use crate::Writer;
|
||||||
|
|
||||||
@@ -180,10 +180,10 @@ fn testAztecWriter() {
|
|||||||
let matrix = writer
|
let matrix = writer
|
||||||
.encode(data, &BarcodeFormat::AZTEC, 0, 0)
|
.encode(data, &BarcodeFormat::AZTEC, 0, 0)
|
||||||
.expect("matrix must exist");
|
.expect("matrix must exist");
|
||||||
let aztec = encoder::encode(
|
let aztec = aztec_encoder::encode(
|
||||||
data,
|
data,
|
||||||
encoder::DEFAULT_EC_PERCENT,
|
aztec_encoder::DEFAULT_EC_PERCENT,
|
||||||
encoder::DEFAULT_AZTEC_LAYERS,
|
aztec_encoder::DEFAULT_AZTEC_LAYERS,
|
||||||
)
|
)
|
||||||
.expect("encode should succeed");
|
.expect("encode should succeed");
|
||||||
let expected_matrix = aztec.getMatrix();
|
let expected_matrix = aztec.getMatrix();
|
||||||
@@ -599,15 +599,15 @@ fn testUserSpecifiedLayers2() {
|
|||||||
|
|
||||||
fn doTestUserSpecifiedLayers(userSpecifiedLayers: i32) {
|
fn doTestUserSpecifiedLayers(userSpecifiedLayers: i32) {
|
||||||
let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
let mut aztec = encoder::encode(alphabet, 25, -2).expect("should encode");
|
let mut aztec = aztec_encoder::encode(alphabet, 25, -2).expect("should encode");
|
||||||
assert_eq!(2, aztec.getLayers());
|
assert_eq!(2, aztec.getLayers());
|
||||||
assert!(aztec.isCompact());
|
assert!(aztec.isCompact());
|
||||||
|
|
||||||
aztec = encoder::encode(alphabet, 25, 32).expect("should encode");
|
aztec = aztec_encoder::encode(alphabet, 25, 32).expect("should encode");
|
||||||
assert_eq!(32, aztec.getLayers());
|
assert_eq!(32, aztec.getLayers());
|
||||||
assert!(!aztec.isCompact());
|
assert!(!aztec.isCompact());
|
||||||
|
|
||||||
encoder::encode(alphabet, 25, userSpecifiedLayers).expect("encode");
|
aztec_encoder::encode(alphabet, 25, userSpecifiedLayers).expect("encode");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -618,7 +618,7 @@ fn testBorderCompact4CaseFailed() {
|
|||||||
let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
// encodes as 26 * 5 * 4 = 520 bits of data
|
// encodes as 26 * 5 * 4 = 520 bits of data
|
||||||
let alphabet4 = format!("{}{}{}{}", alphabet, alphabet, alphabet, alphabet);
|
let alphabet4 = format!("{}{}{}{}", alphabet, alphabet, alphabet, alphabet);
|
||||||
encoder::encode(&alphabet4, 0, -4).expect("encode");
|
aztec_encoder::encode(&alphabet4, 0, -4).expect("encode");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -630,14 +630,14 @@ fn testBorderCompact4Case() {
|
|||||||
let alphabet4 = format!("{}{}{}{}", alphabet, alphabet, alphabet, alphabet);
|
let alphabet4 = format!("{}{}{}{}", alphabet, alphabet, alphabet, alphabet);
|
||||||
|
|
||||||
// If we just try to encode it normally, it will go to a non-compact 4 layer
|
// If we just try to encode it normally, it will go to a non-compact 4 layer
|
||||||
let mut aztecCode =
|
let mut aztecCode = aztec_encoder::encode(&alphabet4, 0, aztec_encoder::DEFAULT_AZTEC_LAYERS)
|
||||||
encoder::encode(&alphabet4, 0, encoder::DEFAULT_AZTEC_LAYERS).expect("Should encode");
|
.expect("Should encode");
|
||||||
assert!(!aztecCode.isCompact());
|
assert!(!aztecCode.isCompact());
|
||||||
assert_eq!(4, aztecCode.getLayers());
|
assert_eq!(4, aztecCode.getLayers());
|
||||||
|
|
||||||
// But shortening the string to 100 bytes (500 bits of data), compact works fine, even if we
|
// But shortening the string to 100 bytes (500 bits of data), compact works fine, even if we
|
||||||
// include more error checking.
|
// include more error checking.
|
||||||
aztecCode = encoder::encode(&alphabet4[..100], 10, encoder::DEFAULT_AZTEC_LAYERS)
|
aztecCode = aztec_encoder::encode(&alphabet4[..100], 10, aztec_encoder::DEFAULT_AZTEC_LAYERS)
|
||||||
.expect("should encode");
|
.expect("should encode");
|
||||||
assert!(aztecCode.isCompact());
|
assert!(aztecCode.isCompact());
|
||||||
assert_eq!(4, aztecCode.getLayers());
|
assert_eq!(4, aztecCode.getLayers());
|
||||||
@@ -646,7 +646,8 @@ fn testBorderCompact4Case() {
|
|||||||
// Helper routines
|
// Helper routines
|
||||||
|
|
||||||
fn testEncode(data: &str, compact: bool, layers: u32, expected: &str) {
|
fn testEncode(data: &str, compact: bool, layers: u32, expected: &str) {
|
||||||
let aztec = encoder::encode(data, 33, encoder::DEFAULT_AZTEC_LAYERS).expect("should encode");
|
let aztec = aztec_encoder::encode(data, 33, aztec_encoder::DEFAULT_AZTEC_LAYERS)
|
||||||
|
.expect("should encode");
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
compact,
|
compact,
|
||||||
aztec.isCompact(),
|
aztec.isCompact(),
|
||||||
@@ -661,7 +662,8 @@ fn testEncode(data: &str, compact: bool, layers: u32, expected: &str) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn testEncodeDecode(data: &str, compact: bool, layers: u32) {
|
fn testEncodeDecode(data: &str, compact: bool, layers: u32) {
|
||||||
let aztec = encoder::encode(data, 25, encoder::DEFAULT_AZTEC_LAYERS).expect("should encode");
|
let aztec = aztec_encoder::encode(data, 25, aztec_encoder::DEFAULT_AZTEC_LAYERS)
|
||||||
|
.expect("should encode");
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
compact,
|
compact,
|
||||||
aztec.isCompact(),
|
aztec.isCompact(),
|
||||||
@@ -737,8 +739,12 @@ fn testWriter(
|
|||||||
Some(cs) => cs,
|
Some(cs) => cs,
|
||||||
None => encoding::all::ISO_8859_1,
|
None => encoding::all::ISO_8859_1,
|
||||||
};
|
};
|
||||||
let aztec =
|
let aztec = aztec_encoder::encode_with_charset(
|
||||||
encoder::encode_with_charset(data, ecc_percent, encoder::DEFAULT_AZTEC_LAYERS, cset)
|
data,
|
||||||
|
ecc_percent,
|
||||||
|
aztec_encoder::DEFAULT_AZTEC_LAYERS,
|
||||||
|
cset,
|
||||||
|
)
|
||||||
.expect("encode should encode");
|
.expect("encode should encode");
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
compact,
|
compact,
|
||||||
@@ -794,7 +800,7 @@ fn getPseudoRandom() -> rand::rngs::ThreadRng {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn testModeMessageComplex(compact: bool, layers: u32, words: u32, expected: &str) {
|
fn testModeMessageComplex(compact: bool, layers: u32, words: u32, expected: &str) {
|
||||||
let indata = encoder::generateModeMessage(compact, layers, words).expect("generate mode");
|
let indata = aztec_encoder::generateModeMessage(compact, layers, words).expect("generate mode");
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
stripSpace(expected),
|
stripSpace(expected),
|
||||||
stripSpace(&indata.to_string()),
|
stripSpace(&indata.to_string()),
|
||||||
@@ -804,7 +810,7 @@ fn testModeMessageComplex(compact: bool, layers: u32, words: u32, expected: &str
|
|||||||
|
|
||||||
fn testStuffBits(wordSize: usize, bits: &str, expected: &str) {
|
fn testStuffBits(wordSize: usize, bits: &str, expected: &str) {
|
||||||
let indata = toBitArray(bits);
|
let indata = toBitArray(bits);
|
||||||
let stuffed = encoder::stuffBits(&indata, wordSize);
|
let stuffed = aztec_encoder::stuffBits(&indata, wordSize);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
stripSpace(expected),
|
stripSpace(expected),
|
||||||
stripSpace(&stuffed.to_string()),
|
stripSpace(&stuffed.to_string()),
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ use crate::{
|
|||||||
Writer,
|
Writer,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::encoder::{encoder, AztecCode};
|
use super::encoder::{aztec_encoder, AztecCode};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renders an Aztec code as a {@link BitMatrix}.
|
* Renders an Aztec code as a {@link BitMatrix}.
|
||||||
@@ -51,8 +51,8 @@ impl Writer for AztecWriter {
|
|||||||
hints: &std::collections::HashMap<crate::EncodeHintType, crate::EncodeHintValue>,
|
hints: &std::collections::HashMap<crate::EncodeHintType, crate::EncodeHintValue>,
|
||||||
) -> Result<crate::common::BitMatrix, crate::exceptions::Exceptions> {
|
) -> Result<crate::common::BitMatrix, crate::exceptions::Exceptions> {
|
||||||
let mut charset = None; // Do not add any ECI code by default
|
let mut charset = None; // Do not add any ECI code by default
|
||||||
let mut ecc_percent = encoder::DEFAULT_EC_PERCENT;
|
let mut ecc_percent = aztec_encoder::DEFAULT_EC_PERCENT;
|
||||||
let mut layers = encoder::DEFAULT_AZTEC_LAYERS;
|
let mut layers = aztec_encoder::DEFAULT_AZTEC_LAYERS;
|
||||||
if hints.contains_key(&EncodeHintType::CHARACTER_SET) {
|
if hints.contains_key(&EncodeHintType::CHARACTER_SET) {
|
||||||
if let EncodeHintValue::CharacterSet(cset_name) = hints
|
if let EncodeHintValue::CharacterSet(cset_name) = hints
|
||||||
.get(&EncodeHintType::CHARACTER_SET)
|
.get(&EncodeHintType::CHARACTER_SET)
|
||||||
@@ -113,9 +113,9 @@ fn encode(
|
|||||||
}
|
}
|
||||||
let aztec = if let Some(cset) = charset {
|
let aztec = if let Some(cset) = charset {
|
||||||
// dbg!(cset.name(), cset.whatwg_name());
|
// dbg!(cset.name(), cset.whatwg_name());
|
||||||
encoder::encode_with_charset(contents, ecc_percent, layers, cset)?
|
aztec_encoder::encode_with_charset(contents, ecc_percent, layers, cset)?
|
||||||
} else {
|
} else {
|
||||||
encoder::encode(contents, ecc_percent, layers)?
|
aztec_encoder::encode(contents, ecc_percent, layers)?
|
||||||
};
|
};
|
||||||
renderRXingResult(&aztec, width, height)
|
renderRXingResult(&aztec, width, height)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ mod simple_token;
|
|||||||
mod state;
|
mod state;
|
||||||
mod token;
|
mod token;
|
||||||
|
|
||||||
pub mod encoder;
|
pub mod aztec_encoder;
|
||||||
|
|
||||||
pub use aztec_code::*;
|
pub use aztec_code::*;
|
||||||
pub use binary_shift_token::*;
|
pub use binary_shift_token::*;
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ impl AddressBookParsedRXingResult {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn with_details(
|
pub fn with_details(
|
||||||
names: Vec<String>,
|
names: Vec<String>,
|
||||||
nicknames: Vec<String>,
|
nicknames: Vec<String>,
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ impl ParsedRXingResult for CalendarParsedRXingResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl CalendarParsedRXingResult {
|
impl CalendarParsedRXingResult {
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn new(
|
pub fn new(
|
||||||
summary: String,
|
summary: String,
|
||||||
startString: String,
|
startString: String,
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ impl ExpandedProductParsedRXingResult {
|
|||||||
pub const KILOGRAM: &'static str = "KG";
|
pub const KILOGRAM: &'static str = "KG";
|
||||||
pub const POUND: &'static str = "LB";
|
pub const POUND: &'static str = "LB";
|
||||||
|
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn new(
|
pub fn new(
|
||||||
rawText: String,
|
rawText: String,
|
||||||
productID: String,
|
productID: String,
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ impl ParsedRXingResult for VINParsedRXingResult {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl VINParsedRXingResult {
|
impl VINParsedRXingResult {
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn new(
|
pub fn new(
|
||||||
vin: String,
|
vin: String,
|
||||||
world_manufacturer_id: String,
|
world_manufacturer_id: String,
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ impl WifiParsedRXingResult {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn with_details(
|
pub fn with_details(
|
||||||
networkEncryption: String,
|
networkEncryption: String,
|
||||||
ssid: String,
|
ssid: String,
|
||||||
|
|||||||
@@ -209,7 +209,6 @@ impl BitMatrix {
|
|||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn get_offset(&self, y: u32, x: u32) -> usize {
|
fn get_offset(&self, y: u32, x: u32) -> usize {
|
||||||
|
|
||||||
y as usize * self.row_size + (x as usize / 32)
|
y as usize * self.row_size + (x as usize / 32)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ impl<'a> MonochromeRectangleDetector<'_> {
|
|||||||
* @return a {@link RXingResultPoint} encapsulating the corner that was found
|
* @return a {@link RXingResultPoint} encapsulating the corner that was found
|
||||||
* @throws NotFoundException if such a point cannot be found
|
* @throws NotFoundException if such a point cannot be found
|
||||||
*/
|
*/
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
fn findCornerFromCenter(
|
fn findCornerFromCenter(
|
||||||
&self,
|
&self,
|
||||||
centerX: i32,
|
centerX: i32,
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ pub trait GridSampler {
|
|||||||
* @throws NotFoundException if image can't be sampled, for example, if the transformation defined
|
* @throws NotFoundException if image can't be sampled, for example, if the transformation defined
|
||||||
* by the given points is invalid or results in sampling outside the image boundaries
|
* by the given points is invalid or results in sampling outside the image boundaries
|
||||||
*/
|
*/
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
fn sample_grid_detailed(
|
fn sample_grid_detailed(
|
||||||
&self,
|
&self,
|
||||||
image: &BitMatrix,
|
image: &BitMatrix,
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ pub struct PerspectiveTransform {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl PerspectiveTransform {
|
impl PerspectiveTransform {
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
fn new(
|
fn new(
|
||||||
a11: f32,
|
a11: f32,
|
||||||
a21: f32,
|
a21: f32,
|
||||||
@@ -60,6 +61,7 @@ impl PerspectiveTransform {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn quadrilateralToQuadrilateral(
|
pub fn quadrilateralToQuadrilateral(
|
||||||
x0: f32,
|
x0: f32,
|
||||||
y0: f32,
|
y0: f32,
|
||||||
@@ -118,6 +120,7 @@ impl PerspectiveTransform {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn squareToQuadrilateral(
|
pub fn squareToQuadrilateral(
|
||||||
x0: f32,
|
x0: f32,
|
||||||
y0: f32,
|
y0: f32,
|
||||||
@@ -165,6 +168,7 @@ impl PerspectiveTransform {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn quadrilateralToSquare(
|
pub fn quadrilateralToSquare(
|
||||||
x0: f32,
|
x0: f32,
|
||||||
y0: f32,
|
y0: f32,
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
mod bit_matrix_parser;
|
mod bit_matrix_parser;
|
||||||
mod data_block;
|
mod data_block;
|
||||||
mod decoder;
|
mod datamatrix_decoder;
|
||||||
mod version;
|
mod version;
|
||||||
|
|
||||||
pub use bit_matrix_parser::*;
|
pub use bit_matrix_parser::*;
|
||||||
pub use data_block::*;
|
pub use data_block::*;
|
||||||
pub use decoder::*;
|
pub use datamatrix_decoder::*;
|
||||||
pub use version::*;
|
pub use version::*;
|
||||||
|
|
||||||
pub mod decoded_bit_stream_parser;
|
pub mod decoded_bit_stream_parser;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
|
mod datamatrix_detector;
|
||||||
mod datamatrix_result;
|
mod datamatrix_result;
|
||||||
mod detector;
|
pub use datamatrix_detector::*;
|
||||||
pub use datamatrix_result::*;
|
pub use datamatrix_result::*;
|
||||||
pub use detector::*;
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
mod datamatrix_encoder;
|
||||||
mod default_placement;
|
mod default_placement;
|
||||||
mod encoder;
|
|
||||||
mod encoder_context;
|
mod encoder_context;
|
||||||
pub mod error_correction;
|
pub mod error_correction;
|
||||||
pub mod high_level_encoder;
|
pub mod high_level_encoder;
|
||||||
@@ -7,8 +7,8 @@ pub mod minimal_encoder;
|
|||||||
mod symbol_info;
|
mod symbol_info;
|
||||||
mod symbol_shape_hint;
|
mod symbol_shape_hint;
|
||||||
|
|
||||||
|
pub use datamatrix_encoder::*;
|
||||||
pub use default_placement::*;
|
pub use default_placement::*;
|
||||||
pub use encoder::*;
|
|
||||||
pub use encoder_context::*;
|
pub use encoder_context::*;
|
||||||
pub use symbol_info::*;
|
pub use symbol_info::*;
|
||||||
pub use symbol_shape_hint::*;
|
pub use symbol_shape_hint::*;
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ impl SymbolInfo {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn with_details(
|
pub fn with_details(
|
||||||
rectangular: bool,
|
rectangular: bool,
|
||||||
dataCapacity: u32,
|
dataCapacity: u32,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
mod bit_matrix_parser;
|
mod bit_matrix_parser;
|
||||||
pub mod decoded_bit_stream_parser;
|
pub mod decoded_bit_stream_parser;
|
||||||
pub mod decoder;
|
pub mod maxicode_decoder;
|
||||||
|
|
||||||
pub use bit_matrix_parser::*;
|
pub use bit_matrix_parser::*;
|
||||||
pub use decoder::*;
|
pub use maxicode_decoder::*;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ use crate::{
|
|||||||
common::BitMatrix, BarcodeFormat, Exceptions, RXingResult, RXingResultMetadataType, Reader,
|
common::BitMatrix, BarcodeFormat, Exceptions, RXingResult, RXingResultMetadataType, Reader,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::decoder::decoder;
|
use super::decoder::maxicode_decoder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This implementation can detect and decode a MaxiCode in an image.
|
* This implementation can detect and decode a MaxiCode in an image.
|
||||||
@@ -62,7 +62,7 @@ impl Reader for MaxiCodeReader {
|
|||||||
// Note that MaxiCode reader effectively always assumes PURE_BARCODE mode
|
// Note that MaxiCode reader effectively always assumes PURE_BARCODE mode
|
||||||
// and can't detect it in an image
|
// and can't detect it in an image
|
||||||
let bits = Self::extractPureBits(image.getBlackMatrix())?;
|
let bits = Self::extractPureBits(image.getBlackMatrix())?;
|
||||||
let decoderRXingResult = decoder::decode_with_hints(bits, hints)?;
|
let decoderRXingResult = maxicode_decoder::decode_with_hints(bits, hints)?;
|
||||||
let mut result = RXingResult::new(
|
let mut result = RXingResult::new(
|
||||||
decoderRXingResult.getText(),
|
decoderRXingResult.getText(),
|
||||||
decoderRXingResult.getRawBytes().clone(),
|
decoderRXingResult.getRawBytes().clone(),
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ impl MultipleBarcodeReader for QRCodeMultiReader {
|
|||||||
let detectorRXingResults = MultiDetector::new(image.getBlackMatrix()).detectMulti(hints)?;
|
let detectorRXingResults = MultiDetector::new(image.getBlackMatrix()).detectMulti(hints)?;
|
||||||
for detectorRXingResult in detectorRXingResults {
|
for detectorRXingResult in detectorRXingResults {
|
||||||
let mut proc = || -> Result<(), Exceptions> {
|
let mut proc = || -> Result<(), Exceptions> {
|
||||||
let decoderRXingResult = decoder::decoder::decode_bitmatrix_with_hints(
|
let decoderRXingResult = decoder::qrcode_decoder::decode_bitmatrix_with_hints(
|
||||||
detectorRXingResult.getBits(),
|
detectorRXingResult.getBits(),
|
||||||
hints,
|
hints,
|
||||||
)?;
|
)?;
|
||||||
|
|||||||
@@ -50,12 +50,14 @@ impl BarcodeValue {
|
|||||||
let mut result = Vec::new();
|
let mut result = Vec::new();
|
||||||
for (key, value) in &self.0 {
|
for (key, value) in &self.0 {
|
||||||
// for (Entry<Integer,Integer> entry : values.entrySet()) {
|
// for (Entry<Integer,Integer> entry : values.entrySet()) {
|
||||||
if *value as i32 > maxConfidence {
|
match (*value as i32).cmp(&maxConfidence) {
|
||||||
|
std::cmp::Ordering::Greater => {
|
||||||
maxConfidence = *value as i32;
|
maxConfidence = *value as i32;
|
||||||
result.clear();
|
result.clear();
|
||||||
result.push(*key);
|
result.push(*key);
|
||||||
} else if *value as i32 == maxConfidence {
|
}
|
||||||
result.push(*key);
|
std::cmp::Ordering::Equal => result.push(*key),
|
||||||
|
std::cmp::Ordering::Less => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -648,6 +648,7 @@ fn getStartColumn(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
fn detectCodeword(
|
fn detectCodeword(
|
||||||
image: &BitMatrix,
|
image: &BitMatrix,
|
||||||
minColumn: u32,
|
minColumn: u32,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
mod pdf_417_detector_result;
|
mod pdf_417_detector_result;
|
||||||
pub use pdf_417_detector_result::*;
|
pub use pdf_417_detector_result::*;
|
||||||
|
|
||||||
pub mod detector;
|
pub mod pdf_417_detector;
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ use crate::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
decoder::pdf_417_scanning_decoder, detector::detector, pdf_417_common,
|
decoder::pdf_417_scanning_decoder, detector::pdf_417_detector, pdf_417_common,
|
||||||
PDF417RXingResultMetadata,
|
PDF417RXingResultMetadata,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -95,7 +95,7 @@ impl PDF417Reader {
|
|||||||
multiple: bool,
|
multiple: bool,
|
||||||
) -> Result<Vec<RXingResult>, Exceptions> {
|
) -> Result<Vec<RXingResult>, Exceptions> {
|
||||||
let mut results = Vec::new(); //new ArrayList<>();
|
let mut results = Vec::new(); //new ArrayList<>();
|
||||||
let detectorRXingResult = detector::detect_with_hints(image, hints, multiple)?;
|
let detectorRXingResult = pdf_417_detector::detect_with_hints(image, hints, multiple)?;
|
||||||
for points in detectorRXingResult.getPoints() {
|
for points in detectorRXingResult.getPoints() {
|
||||||
let points_filtered = points.iter().filter_map(|e| *e).collect();
|
let points_filtered = points.iter().filter_map(|e| *e).collect();
|
||||||
// for (RXingResultPoint[] points : detectorRXingResult.getPoints()) {
|
// for (RXingResultPoint[] points : detectorRXingResult.getPoints()) {
|
||||||
|
|||||||
@@ -153,6 +153,7 @@ pub struct PlanarYUVLuminanceSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl PlanarYUVLuminanceSource {
|
impl PlanarYUVLuminanceSource {
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn new_with_all(
|
pub fn new_with_all(
|
||||||
yuv_data: Vec<u8>,
|
yuv_data: Vec<u8>,
|
||||||
data_width: usize,
|
data_width: usize,
|
||||||
|
|||||||
@@ -2,11 +2,11 @@ mod bit_matrix_parser;
|
|||||||
mod data_block;
|
mod data_block;
|
||||||
mod data_mask;
|
mod data_mask;
|
||||||
pub mod decoded_bit_stream_parser;
|
pub mod decoded_bit_stream_parser;
|
||||||
pub mod decoder;
|
|
||||||
mod error_correction_level;
|
mod error_correction_level;
|
||||||
mod format_information;
|
mod format_information;
|
||||||
mod mode;
|
mod mode;
|
||||||
mod qr_code_decoder_meta_data;
|
mod qr_code_decoder_meta_data;
|
||||||
|
pub mod qrcode_decoder;
|
||||||
mod version;
|
mod version;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ use std::collections::HashMap;
|
|||||||
use crate::{
|
use crate::{
|
||||||
common::{BitMatrix, DetectorRXingResult},
|
common::{BitMatrix, DetectorRXingResult},
|
||||||
qrcode::{
|
qrcode::{
|
||||||
decoder::decoder, decoder::ErrorCorrectionLevel, detector::Detector, encoder::encoder,
|
decoder::qrcode_decoder, decoder::ErrorCorrectionLevel, detector::Detector,
|
||||||
|
encoder::qrcode_encoder,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -26,8 +27,8 @@ fn test_encode_decode(value: &str) {
|
|||||||
for ec_level_v in 0..4 {
|
for ec_level_v in 0..4 {
|
||||||
let ec_level: ErrorCorrectionLevel =
|
let ec_level: ErrorCorrectionLevel =
|
||||||
ErrorCorrectionLevel::forBits(ec_level_v).expect("must get level");
|
ErrorCorrectionLevel::forBits(ec_level_v).expect("must get level");
|
||||||
let qr_code =
|
let qr_code = qrcode_encoder::encode_with_hints(value, ec_level, &HashMap::new())
|
||||||
encoder::encode_with_hints(value, ec_level, &HashMap::new()).expect("must encode");
|
.expect("must encode");
|
||||||
// dbg!(&qr_code.to_string());
|
// dbg!(&qr_code.to_string());
|
||||||
let byt_matrix = qr_code.getMatrix().as_ref().unwrap().clone();
|
let byt_matrix = qr_code.getMatrix().as_ref().unwrap().clone();
|
||||||
// dbg!(BitMatrix::from(byt_matrix.clone()).to_string());
|
// dbg!(BitMatrix::from(byt_matrix.clone()).to_string());
|
||||||
@@ -35,7 +36,8 @@ fn test_encode_decode(value: &str) {
|
|||||||
let new_matrix: &BitMatrix = &byt_matrix.into();
|
let new_matrix: &BitMatrix = &byt_matrix.into();
|
||||||
let mut detector = Detector::new(new_matrix);
|
let mut detector = Detector::new(new_matrix);
|
||||||
let detected_points = detector.detect().expect("must detect");
|
let detected_points = detector.detect().expect("must detect");
|
||||||
let decoded = decoder::decode_bitmatrix(detected_points.getBits()).expect("must decode");
|
let decoded =
|
||||||
|
qrcode_decoder::decode_bitmatrix(detected_points.getBits()).expect("must decode");
|
||||||
assert_eq!(decoded.getText(), value);
|
assert_eq!(decoded.getText(), value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
mod alignment_pattern;
|
mod alignment_pattern;
|
||||||
mod alignment_pattern_finder;
|
mod alignment_pattern_finder;
|
||||||
mod detector;
|
|
||||||
mod finder_pattern;
|
mod finder_pattern;
|
||||||
mod finder_pattern_finder;
|
mod finder_pattern_finder;
|
||||||
mod finder_pattern_info;
|
mod finder_pattern_info;
|
||||||
|
mod qrcode_detector;
|
||||||
mod qrcode_detector_result;
|
mod qrcode_detector_result;
|
||||||
|
|
||||||
pub use alignment_pattern::*;
|
pub use alignment_pattern::*;
|
||||||
pub use alignment_pattern_finder::*;
|
pub use alignment_pattern_finder::*;
|
||||||
pub use detector::*;
|
|
||||||
pub use finder_pattern::*;
|
pub use finder_pattern::*;
|
||||||
pub use finder_pattern_finder::*;
|
pub use finder_pattern_finder::*;
|
||||||
pub use finder_pattern_info::*;
|
pub use finder_pattern_info::*;
|
||||||
|
pub use qrcode_detector::*;
|
||||||
pub use qrcode_detector_result::*;
|
pub use qrcode_detector_result::*;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ use crate::{
|
|||||||
common::BitArray,
|
common::BitArray,
|
||||||
qrcode::{
|
qrcode::{
|
||||||
decoder::{ErrorCorrectionLevel, Mode, Version},
|
decoder::{ErrorCorrectionLevel, Mode, Version},
|
||||||
encoder::{encoder, MinimalEncoder},
|
encoder::{qrcode_encoder, MinimalEncoder},
|
||||||
},
|
},
|
||||||
EncodeHintType, EncodeHintValue,
|
EncodeHintType, EncodeHintValue,
|
||||||
};
|
};
|
||||||
@@ -42,7 +42,10 @@ fn testGetAlphanumericCode() {
|
|||||||
// The first ten code points are numbers.
|
// The first ten code points are numbers.
|
||||||
for i in 0..10u8 {
|
for i in 0..10u8 {
|
||||||
// for (int i = 0; i < 10; ++i) {
|
// for (int i = 0; i < 10; ++i) {
|
||||||
assert_eq!(i as i8, encoder::getAlphanumericCode((b'0' + i) as u32));
|
assert_eq!(
|
||||||
|
i as i8,
|
||||||
|
qrcode_encoder::getAlphanumericCode((b'0' + i) as u32)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The next 26 code points are capital alphabet letters.
|
// The next 26 code points are capital alphabet letters.
|
||||||
@@ -50,32 +53,32 @@ fn testGetAlphanumericCode() {
|
|||||||
// for (int i = 10; i < 36; ++i) {
|
// for (int i = 10; i < 36; ++i) {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
i as i8,
|
i as i8,
|
||||||
encoder::getAlphanumericCode((b'A' + i - 10) as u32)
|
qrcode_encoder::getAlphanumericCode((b'A' + i - 10) as u32)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Others are symbol letters
|
// Others are symbol letters
|
||||||
assert_eq!(36, encoder::getAlphanumericCode(b' ' as u32));
|
assert_eq!(36, qrcode_encoder::getAlphanumericCode(b' ' as u32));
|
||||||
assert_eq!(37, encoder::getAlphanumericCode(b'$' as u32));
|
assert_eq!(37, qrcode_encoder::getAlphanumericCode(b'$' as u32));
|
||||||
assert_eq!(38, encoder::getAlphanumericCode(b'%' as u32));
|
assert_eq!(38, qrcode_encoder::getAlphanumericCode(b'%' as u32));
|
||||||
assert_eq!(39, encoder::getAlphanumericCode(b'*' as u32));
|
assert_eq!(39, qrcode_encoder::getAlphanumericCode(b'*' as u32));
|
||||||
assert_eq!(40, encoder::getAlphanumericCode(b'+' as u32));
|
assert_eq!(40, qrcode_encoder::getAlphanumericCode(b'+' as u32));
|
||||||
assert_eq!(41, encoder::getAlphanumericCode(b'-' as u32));
|
assert_eq!(41, qrcode_encoder::getAlphanumericCode(b'-' as u32));
|
||||||
assert_eq!(42, encoder::getAlphanumericCode(b'.' as u32));
|
assert_eq!(42, qrcode_encoder::getAlphanumericCode(b'.' as u32));
|
||||||
assert_eq!(43, encoder::getAlphanumericCode(b'/' as u32));
|
assert_eq!(43, qrcode_encoder::getAlphanumericCode(b'/' as u32));
|
||||||
assert_eq!(44, encoder::getAlphanumericCode(b':' as u32));
|
assert_eq!(44, qrcode_encoder::getAlphanumericCode(b':' as u32));
|
||||||
|
|
||||||
// Should return -1 for other letters;
|
// Should return -1 for other letters;
|
||||||
assert_eq!(-1, encoder::getAlphanumericCode(b'a' as u32));
|
assert_eq!(-1, qrcode_encoder::getAlphanumericCode(b'a' as u32));
|
||||||
assert_eq!(-1, encoder::getAlphanumericCode(b'#' as u32));
|
assert_eq!(-1, qrcode_encoder::getAlphanumericCode(b'#' as u32));
|
||||||
assert_eq!(-1, encoder::getAlphanumericCode(b'\0' as u32));
|
assert_eq!(-1, qrcode_encoder::getAlphanumericCode(b'\0' as u32));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_digits_only() {
|
fn test_digits_only() {
|
||||||
let test_data = "374833744734397449";
|
let test_data = "374833744734397449";
|
||||||
let data = encoder::encode(test_data, ErrorCorrectionLevel::H).expect("encode");
|
let data = qrcode_encoder::encode(test_data, ErrorCorrectionLevel::H).expect("encode");
|
||||||
let decode = crate::qrcode::decoder::decoder::decode_bitmatrix(
|
let decode = crate::qrcode::decoder::qrcode_decoder::decode_bitmatrix(
|
||||||
&data.getMatrix().as_ref().unwrap().clone().into(),
|
&data.getMatrix().as_ref().unwrap().clone().into(),
|
||||||
)
|
)
|
||||||
.expect("decode");
|
.expect("decode");
|
||||||
@@ -85,18 +88,18 @@ fn test_digits_only() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn testChooseMode() {
|
fn testChooseMode() {
|
||||||
// Numeric Mode::
|
// Numeric Mode::
|
||||||
assert_eq!(Mode::NUMERIC, encoder::chooseMode("0"));
|
assert_eq!(Mode::NUMERIC, qrcode_encoder::chooseMode("0"));
|
||||||
assert_eq!(Mode::NUMERIC, encoder::chooseMode("0123456789"));
|
assert_eq!(Mode::NUMERIC, qrcode_encoder::chooseMode("0123456789"));
|
||||||
// Alphanumeric Mode::
|
// Alphanumeric Mode::
|
||||||
assert_eq!(Mode::ALPHANUMERIC, encoder::chooseMode("A"));
|
assert_eq!(Mode::ALPHANUMERIC, qrcode_encoder::chooseMode("A"));
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
Mode::ALPHANUMERIC,
|
Mode::ALPHANUMERIC,
|
||||||
encoder::chooseMode("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:")
|
qrcode_encoder::chooseMode("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:")
|
||||||
);
|
);
|
||||||
// 8-bit byte Mode::
|
// 8-bit byte Mode::
|
||||||
assert_eq!(Mode::BYTE, encoder::chooseMode("a"));
|
assert_eq!(Mode::BYTE, qrcode_encoder::chooseMode("a"));
|
||||||
assert_eq!(Mode::BYTE, encoder::chooseMode("#"));
|
assert_eq!(Mode::BYTE, qrcode_encoder::chooseMode("#"));
|
||||||
assert_eq!(Mode::BYTE, encoder::chooseMode(""));
|
assert_eq!(Mode::BYTE, qrcode_encoder::chooseMode(""));
|
||||||
// Kanji Mode:: We used to use MODE_KANJI for these, but we stopped
|
// Kanji Mode:: We used to use MODE_KANJI for these, but we stopped
|
||||||
// doing that as we cannot distinguish Shift_JIS from other encodings
|
// doing that as we cannot distinguish Shift_JIS from other encodings
|
||||||
// from data bytes alone. See also comments in qrcode_encoder::h.
|
// from data bytes alone. See also comments in qrcode_encoder::h.
|
||||||
@@ -104,25 +107,25 @@ fn testChooseMode() {
|
|||||||
// AIUE in Hiragana in Shift_JIS
|
// AIUE in Hiragana in Shift_JIS
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
Mode::BYTE,
|
Mode::BYTE,
|
||||||
encoder::chooseMode(&shiftJISString(&[0x8, 0xa, 0x8, 0xa, 0x8, 0xa, 0x8, 0xa6]))
|
qrcode_encoder::chooseMode(&shiftJISString(&[0x8, 0xa, 0x8, 0xa, 0x8, 0xa, 0x8, 0xa6]))
|
||||||
);
|
);
|
||||||
|
|
||||||
// Nihon in Kanji in Shift_JIS.
|
// Nihon in Kanji in Shift_JIS.
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
Mode::BYTE,
|
Mode::BYTE,
|
||||||
encoder::chooseMode(&shiftJISString(&[0x9, 0xf, 0x9, 0x7b]))
|
qrcode_encoder::chooseMode(&shiftJISString(&[0x9, 0xf, 0x9, 0x7b]))
|
||||||
);
|
);
|
||||||
|
|
||||||
// Sou-Utsu-Byou in Kanji in Shift_JIS.
|
// Sou-Utsu-Byou in Kanji in Shift_JIS.
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
Mode::BYTE,
|
Mode::BYTE,
|
||||||
encoder::chooseMode(&shiftJISString(&[0xe, 0x4, 0x9, 0x5, 0x9, 0x61]))
|
qrcode_encoder::chooseMode(&shiftJISString(&[0xe, 0x4, 0x9, 0x5, 0x9, 0x61]))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn testEncode() {
|
fn testEncode() {
|
||||||
let qrCode = encoder::encode("ABCDEF", ErrorCorrectionLevel::H).expect("encode");
|
let qrCode = qrcode_encoder::encode("ABCDEF", ErrorCorrectionLevel::H).expect("encode");
|
||||||
let expected = r"<<
|
let expected = r"<<
|
||||||
mode: ALPHANUMERIC
|
mode: ALPHANUMERIC
|
||||||
ecLevel: H
|
ecLevel: H
|
||||||
@@ -162,8 +165,8 @@ fn testEncodeWithVersion() {
|
|||||||
EncodeHintType::QR_VERSION,
|
EncodeHintType::QR_VERSION,
|
||||||
EncodeHintValue::QrVersion("7".to_owned()),
|
EncodeHintValue::QrVersion("7".to_owned()),
|
||||||
);
|
);
|
||||||
let qrCode =
|
let qrCode = qrcode_encoder::encode_with_hints("ABCDEF", ErrorCorrectionLevel::H, &hints)
|
||||||
encoder::encode_with_hints("ABCDEF", ErrorCorrectionLevel::H, &hints).expect("encode");
|
.expect("encode");
|
||||||
assert!(qrCode.to_string().contains(" version: 7\n"));
|
assert!(qrCode.to_string().contains(" version: 7\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,7 +178,7 @@ fn testEncodeWithVersionTooSmall() {
|
|||||||
EncodeHintType::QR_VERSION,
|
EncodeHintType::QR_VERSION,
|
||||||
EncodeHintValue::QrVersion("3".to_owned()),
|
EncodeHintValue::QrVersion("3".to_owned()),
|
||||||
);
|
);
|
||||||
encoder::encode_with_hints(
|
qrcode_encoder::encode_with_hints(
|
||||||
"THISMESSAGEISTOOLONGFORAQRCODEVERSION3",
|
"THISMESSAGEISTOOLONGFORAQRCODEVERSION3",
|
||||||
ErrorCorrectionLevel::H,
|
ErrorCorrectionLevel::H,
|
||||||
&hints,
|
&hints,
|
||||||
@@ -190,8 +193,8 @@ fn testSimpleutf8ECI() {
|
|||||||
EncodeHintType::CHARACTER_SET,
|
EncodeHintType::CHARACTER_SET,
|
||||||
EncodeHintValue::CharacterSet("utf8".to_owned()),
|
EncodeHintValue::CharacterSet("utf8".to_owned()),
|
||||||
);
|
);
|
||||||
let qrCode =
|
let qrCode = qrcode_encoder::encode_with_hints("hello", ErrorCorrectionLevel::H, &hints)
|
||||||
encoder::encode_with_hints("hello", ErrorCorrectionLevel::H, &hints).expect("encode");
|
.expect("encode");
|
||||||
let expected = r"<<
|
let expected = r"<<
|
||||||
mode: BYTE
|
mode: BYTE
|
||||||
ecLevel: H
|
ecLevel: H
|
||||||
@@ -233,7 +236,8 @@ fn testEncodeKanjiMode() {
|
|||||||
EncodeHintValue::CharacterSet("Shift_JIS".to_owned()),
|
EncodeHintValue::CharacterSet("Shift_JIS".to_owned()),
|
||||||
);
|
);
|
||||||
// Nihon in Kanji
|
// Nihon in Kanji
|
||||||
let qrCode = encoder::encode_with_hints("\u{65e5}\u{672c}", ErrorCorrectionLevel::M, &hints)
|
let qrCode =
|
||||||
|
qrcode_encoder::encode_with_hints("\u{65e5}\u{672c}", ErrorCorrectionLevel::M, &hints)
|
||||||
.expect("encode");
|
.expect("encode");
|
||||||
let expected = r"<<
|
let expected = r"<<
|
||||||
mode: KANJI
|
mode: KANJI
|
||||||
@@ -277,7 +281,7 @@ fn testEncodeShiftjisNumeric() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
let qrCode =
|
let qrCode =
|
||||||
encoder::encode_with_hints("0123", ErrorCorrectionLevel::M, &hints).expect("encode");
|
qrcode_encoder::encode_with_hints("0123", ErrorCorrectionLevel::M, &hints).expect("encode");
|
||||||
let expected = r"<<
|
let expected = r"<<
|
||||||
mode: NUMERIC
|
mode: NUMERIC
|
||||||
ecLevel: M
|
ecLevel: M
|
||||||
@@ -315,7 +319,8 @@ fn testEncodeGS1WithStringTypeHint() {
|
|||||||
let mut hints = HashMap::new();
|
let mut hints = HashMap::new();
|
||||||
|
|
||||||
hints.insert(EncodeHintType::GS1_FORMAT, EncodeHintValue::Gs1Format(true));
|
hints.insert(EncodeHintType::GS1_FORMAT, EncodeHintValue::Gs1Format(true));
|
||||||
let qrCode = encoder::encode_with_hints("100001%11171218", ErrorCorrectionLevel::H, &hints)
|
let qrCode =
|
||||||
|
qrcode_encoder::encode_with_hints("100001%11171218", ErrorCorrectionLevel::H, &hints)
|
||||||
.expect("encode");
|
.expect("encode");
|
||||||
verifyGS1EncodedData(&qrCode);
|
verifyGS1EncodedData(&qrCode);
|
||||||
}
|
}
|
||||||
@@ -325,7 +330,8 @@ fn testEncodeGS1WithBooleanTypeHint() {
|
|||||||
let mut hints = HashMap::new();
|
let mut hints = HashMap::new();
|
||||||
|
|
||||||
hints.insert(EncodeHintType::GS1_FORMAT, EncodeHintValue::Gs1Format(true));
|
hints.insert(EncodeHintType::GS1_FORMAT, EncodeHintValue::Gs1Format(true));
|
||||||
let qrCode = encoder::encode_with_hints("100001%11171218", ErrorCorrectionLevel::H, &hints)
|
let qrCode =
|
||||||
|
qrcode_encoder::encode_with_hints("100001%11171218", ErrorCorrectionLevel::H, &hints)
|
||||||
.expect("encode");
|
.expect("encode");
|
||||||
verifyGS1EncodedData(&qrCode);
|
verifyGS1EncodedData(&qrCode);
|
||||||
}
|
}
|
||||||
@@ -339,8 +345,8 @@ fn testDoesNotEncodeGS1WhenBooleanTypeHintExplicitlyFalse() {
|
|||||||
EncodeHintValue::Gs1Format(false),
|
EncodeHintValue::Gs1Format(false),
|
||||||
);
|
);
|
||||||
|
|
||||||
let qrCode =
|
let qrCode = qrcode_encoder::encode_with_hints("ABCDEF", ErrorCorrectionLevel::H, &hints)
|
||||||
encoder::encode_with_hints("ABCDEF", ErrorCorrectionLevel::H, &hints).expect("encode");
|
.expect("encode");
|
||||||
verifyNotGS1EncodedData(&qrCode);
|
verifyNotGS1EncodedData(&qrCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -352,8 +358,8 @@ fn testDoesNotEncodeGS1WhenStringTypeHintExplicitlyFalse() {
|
|||||||
EncodeHintType::GS1_FORMAT,
|
EncodeHintType::GS1_FORMAT,
|
||||||
EncodeHintValue::Gs1Format(false),
|
EncodeHintValue::Gs1Format(false),
|
||||||
);
|
);
|
||||||
let qrCode =
|
let qrCode = qrcode_encoder::encode_with_hints("ABCDEF", ErrorCorrectionLevel::H, &hints)
|
||||||
encoder::encode_with_hints("ABCDEF", ErrorCorrectionLevel::H, &hints).expect("encode");
|
.expect("encode");
|
||||||
verifyNotGS1EncodedData(&qrCode);
|
verifyNotGS1EncodedData(&qrCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -366,8 +372,8 @@ fn testGS1ModeHeaderWithECI() {
|
|||||||
EncodeHintValue::CharacterSet("utf8".to_owned()),
|
EncodeHintValue::CharacterSet("utf8".to_owned()),
|
||||||
);
|
);
|
||||||
hints.insert(EncodeHintType::GS1_FORMAT, EncodeHintValue::Gs1Format(true));
|
hints.insert(EncodeHintType::GS1_FORMAT, EncodeHintValue::Gs1Format(true));
|
||||||
let qrCode =
|
let qrCode = qrcode_encoder::encode_with_hints("hello", ErrorCorrectionLevel::H, &hints)
|
||||||
encoder::encode_with_hints("hello", ErrorCorrectionLevel::H, &hints).expect("encode");
|
.expect("encode");
|
||||||
let expected = r"<<
|
let expected = r"<<
|
||||||
mode: BYTE
|
mode: BYTE
|
||||||
ecLevel: H
|
ecLevel: H
|
||||||
@@ -403,14 +409,14 @@ fn testGS1ModeHeaderWithECI() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn testAppendModeInfo() {
|
fn testAppendModeInfo() {
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
assert!(encoder::appendModeInfo(Mode::NUMERIC, &mut bits).is_ok());
|
assert!(qrcode_encoder::appendModeInfo(Mode::NUMERIC, &mut bits).is_ok());
|
||||||
assert_eq!(" ...X", bits.to_string());
|
assert_eq!(" ...X", bits.to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn testAppendLengthInfo() {
|
fn testAppendLengthInfo() {
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendLengthInfo(
|
qrcode_encoder::appendLengthInfo(
|
||||||
1, // 1 letter (1/1).
|
1, // 1 letter (1/1).
|
||||||
Version::getVersionForNumber(1).unwrap(),
|
Version::getVersionForNumber(1).unwrap(),
|
||||||
Mode::NUMERIC,
|
Mode::NUMERIC,
|
||||||
@@ -419,7 +425,7 @@ fn testAppendLengthInfo() {
|
|||||||
.expect("ok");
|
.expect("ok");
|
||||||
assert_eq!(" ........ .X", bits.to_string()); // 10 bits.
|
assert_eq!(" ........ .X", bits.to_string()); // 10 bits.
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendLengthInfo(
|
qrcode_encoder::appendLengthInfo(
|
||||||
2, // 2 letters (2/1).
|
2, // 2 letters (2/1).
|
||||||
Version::getVersionForNumber(10).unwrap(),
|
Version::getVersionForNumber(10).unwrap(),
|
||||||
Mode::ALPHANUMERIC,
|
Mode::ALPHANUMERIC,
|
||||||
@@ -428,7 +434,7 @@ fn testAppendLengthInfo() {
|
|||||||
.expect("ok");
|
.expect("ok");
|
||||||
assert_eq!(" ........ .X.", bits.to_string()); // 11 bits.
|
assert_eq!(" ........ .X.", bits.to_string()); // 11 bits.
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendLengthInfo(
|
qrcode_encoder::appendLengthInfo(
|
||||||
255, // 255 letter (255/1).
|
255, // 255 letter (255/1).
|
||||||
Version::getVersionForNumber(27).unwrap(),
|
Version::getVersionForNumber(27).unwrap(),
|
||||||
Mode::BYTE,
|
Mode::BYTE,
|
||||||
@@ -437,7 +443,7 @@ fn testAppendLengthInfo() {
|
|||||||
.expect("ok");
|
.expect("ok");
|
||||||
assert_eq!(" ........ XXXXXXXX", bits.to_string()); // 16 bits.
|
assert_eq!(" ........ XXXXXXXX", bits.to_string()); // 16 bits.
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendLengthInfo(
|
qrcode_encoder::appendLengthInfo(
|
||||||
512, // 512 letters (1024/2).
|
512, // 512 letters (1024/2).
|
||||||
Version::getVersionForNumber(40).unwrap(),
|
Version::getVersionForNumber(40).unwrap(),
|
||||||
Mode::KANJI,
|
Mode::KANJI,
|
||||||
@@ -452,32 +458,32 @@ fn testAppendBytes() {
|
|||||||
// Should use appendNumericBytes.
|
// Should use appendNumericBytes.
|
||||||
// 1 = 01 = 0001 in 4 bits.
|
// 1 = 01 = 0001 in 4 bits.
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendBytes(
|
qrcode_encoder::appendBytes(
|
||||||
"1",
|
"1",
|
||||||
Mode::NUMERIC,
|
Mode::NUMERIC,
|
||||||
&mut bits,
|
&mut bits,
|
||||||
encoder::DEFAULT_BYTE_MODE_ENCODING,
|
qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING,
|
||||||
)
|
)
|
||||||
.expect("ok");
|
.expect("ok");
|
||||||
assert_eq!(" ...X", bits.to_string());
|
assert_eq!(" ...X", bits.to_string());
|
||||||
// Should use appendAlphanumericBytes.
|
// Should use appendAlphanumericBytes.
|
||||||
// A = 10 = 0xa = 001010 in 6 bits
|
// A = 10 = 0xa = 001010 in 6 bits
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendBytes(
|
qrcode_encoder::appendBytes(
|
||||||
"A",
|
"A",
|
||||||
Mode::ALPHANUMERIC,
|
Mode::ALPHANUMERIC,
|
||||||
&mut bits,
|
&mut bits,
|
||||||
encoder::DEFAULT_BYTE_MODE_ENCODING,
|
qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING,
|
||||||
)
|
)
|
||||||
.expect("ok");
|
.expect("ok");
|
||||||
assert_eq!(" ..X.X.", bits.to_string());
|
assert_eq!(" ..X.X.", bits.to_string());
|
||||||
// Lower letters such as 'a' cannot be encoded in MODE_ALPHANUMERIC.
|
// Lower letters such as 'a' cannot be encoded in MODE_ALPHANUMERIC.
|
||||||
//try {
|
//try {
|
||||||
if encoder::appendBytes(
|
if qrcode_encoder::appendBytes(
|
||||||
"a",
|
"a",
|
||||||
Mode::ALPHANUMERIC,
|
Mode::ALPHANUMERIC,
|
||||||
&mut bits,
|
&mut bits,
|
||||||
encoder::DEFAULT_BYTE_MODE_ENCODING,
|
qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING,
|
||||||
)
|
)
|
||||||
.is_ok()
|
.is_ok()
|
||||||
{
|
{
|
||||||
@@ -489,30 +495,30 @@ fn testAppendBytes() {
|
|||||||
// Should use append8BitBytes.
|
// Should use append8BitBytes.
|
||||||
// 0x61, 0x62, 0x63
|
// 0x61, 0x62, 0x63
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendBytes(
|
qrcode_encoder::appendBytes(
|
||||||
"abc",
|
"abc",
|
||||||
Mode::BYTE,
|
Mode::BYTE,
|
||||||
&mut bits,
|
&mut bits,
|
||||||
encoder::DEFAULT_BYTE_MODE_ENCODING,
|
qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING,
|
||||||
)
|
)
|
||||||
.expect("ok");
|
.expect("ok");
|
||||||
assert_eq!(" .XX....X .XX...X. .XX...XX", bits.to_string());
|
assert_eq!(" .XX....X .XX...X. .XX...XX", bits.to_string());
|
||||||
// Anything can be encoded in QRCode.MODE_8BIT_BYTE.
|
// Anything can be encoded in QRCode.MODE_8BIT_BYTE.
|
||||||
encoder::appendBytes(
|
qrcode_encoder::appendBytes(
|
||||||
"\0",
|
"\0",
|
||||||
Mode::BYTE,
|
Mode::BYTE,
|
||||||
&mut bits,
|
&mut bits,
|
||||||
encoder::DEFAULT_BYTE_MODE_ENCODING,
|
qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING,
|
||||||
)
|
)
|
||||||
.expect("ok");
|
.expect("ok");
|
||||||
// Should use appendKanjiBytes.
|
// Should use appendKanjiBytes.
|
||||||
// 0x93, 0x5f
|
// 0x93, 0x5f
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendBytes(
|
qrcode_encoder::appendBytes(
|
||||||
&shiftJISString(&[0x93, 0x5f]),
|
&shiftJISString(&[0x93, 0x5f]),
|
||||||
Mode::KANJI,
|
Mode::KANJI,
|
||||||
&mut bits,
|
&mut bits,
|
||||||
encoder::DEFAULT_BYTE_MODE_ENCODING,
|
qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING,
|
||||||
)
|
)
|
||||||
.expect("ok");
|
.expect("ok");
|
||||||
assert_eq!(" .XX.XX.. XXXXX", bits.to_string());
|
assert_eq!(" .XX.XX.. XXXXX", bits.to_string());
|
||||||
@@ -521,29 +527,29 @@ fn testAppendBytes() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn testTerminateBits() {
|
fn testTerminateBits() {
|
||||||
let mut v = BitArray::new();
|
let mut v = BitArray::new();
|
||||||
encoder::terminateBits(0, &mut v).expect("terminate");
|
qrcode_encoder::terminateBits(0, &mut v).expect("terminate");
|
||||||
assert_eq!("", v.to_string());
|
assert_eq!("", v.to_string());
|
||||||
let mut v = BitArray::new();
|
let mut v = BitArray::new();
|
||||||
encoder::terminateBits(1, &mut v).expect("terminate");
|
qrcode_encoder::terminateBits(1, &mut v).expect("terminate");
|
||||||
assert_eq!(" ........", v.to_string());
|
assert_eq!(" ........", v.to_string());
|
||||||
let mut v = BitArray::new();
|
let mut v = BitArray::new();
|
||||||
v.appendBits(0, 3).expect("terminate"); // Append 000
|
v.appendBits(0, 3).expect("terminate"); // Append 000
|
||||||
encoder::terminateBits(1, &mut v).expect("terminate");
|
qrcode_encoder::terminateBits(1, &mut v).expect("terminate");
|
||||||
assert_eq!(" ........", v.to_string());
|
assert_eq!(" ........", v.to_string());
|
||||||
let mut v = BitArray::new();
|
let mut v = BitArray::new();
|
||||||
v.appendBits(0, 5).expect("terminate"); // Append 00000
|
v.appendBits(0, 5).expect("terminate"); // Append 00000
|
||||||
encoder::terminateBits(1, &mut v).expect("terminate");
|
qrcode_encoder::terminateBits(1, &mut v).expect("terminate");
|
||||||
assert_eq!(" ........", v.to_string());
|
assert_eq!(" ........", v.to_string());
|
||||||
let mut v = BitArray::new();
|
let mut v = BitArray::new();
|
||||||
v.appendBits(0, 8).expect("terminate"); // Append 00000000
|
v.appendBits(0, 8).expect("terminate"); // Append 00000000
|
||||||
encoder::terminateBits(1, &mut v).expect("terminate");
|
qrcode_encoder::terminateBits(1, &mut v).expect("terminate");
|
||||||
assert_eq!(" ........", v.to_string());
|
assert_eq!(" ........", v.to_string());
|
||||||
let mut v = BitArray::new();
|
let mut v = BitArray::new();
|
||||||
encoder::terminateBits(2, &mut v).expect("terminate");
|
qrcode_encoder::terminateBits(2, &mut v).expect("terminate");
|
||||||
assert_eq!(" ........ XXX.XX..", v.to_string());
|
assert_eq!(" ........ XXX.XX..", v.to_string());
|
||||||
let mut v = BitArray::new();
|
let mut v = BitArray::new();
|
||||||
v.appendBits(0, 1).expect("terminate"); // Append 0
|
v.appendBits(0, 1).expect("terminate"); // Append 0
|
||||||
encoder::terminateBits(3, &mut v).expect("terminate");
|
qrcode_encoder::terminateBits(3, &mut v).expect("terminate");
|
||||||
assert_eq!(" ........ XXX.XX.. ...X...X", v.to_string());
|
assert_eq!(" ........ XXX.XX.. ...X...X", v.to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -551,43 +557,43 @@ fn testTerminateBits() {
|
|||||||
fn testGetNumDataBytesAndNumECBytesForBlockID() {
|
fn testGetNumDataBytesAndNumECBytesForBlockID() {
|
||||||
// Version 1-H.
|
// Version 1-H.
|
||||||
let (numDataBytes, numEcBytes) =
|
let (numDataBytes, numEcBytes) =
|
||||||
encoder::getNumDataBytesAndNumECBytesForBlockID(26, 9, 1, 0).expect("ok");
|
qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(26, 9, 1, 0).expect("ok");
|
||||||
assert_eq!(9, numDataBytes);
|
assert_eq!(9, numDataBytes);
|
||||||
assert_eq!(17, numEcBytes);
|
assert_eq!(17, numEcBytes);
|
||||||
|
|
||||||
// Version 3-H. 2 blocks.
|
// Version 3-H. 2 blocks.
|
||||||
let (numDataBytes, numEcBytes) =
|
let (numDataBytes, numEcBytes) =
|
||||||
encoder::getNumDataBytesAndNumECBytesForBlockID(70, 26, 2, 0).expect("ok");
|
qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(70, 26, 2, 0).expect("ok");
|
||||||
assert_eq!(13, numDataBytes);
|
assert_eq!(13, numDataBytes);
|
||||||
assert_eq!(22, numEcBytes);
|
assert_eq!(22, numEcBytes);
|
||||||
let (numDataBytes, numEcBytes) =
|
let (numDataBytes, numEcBytes) =
|
||||||
encoder::getNumDataBytesAndNumECBytesForBlockID(70, 26, 2, 1).expect("ok");
|
qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(70, 26, 2, 1).expect("ok");
|
||||||
assert_eq!(13, numDataBytes);
|
assert_eq!(13, numDataBytes);
|
||||||
assert_eq!(22, numEcBytes);
|
assert_eq!(22, numEcBytes);
|
||||||
|
|
||||||
// Version 7-H. (4 + 1) blocks.
|
// Version 7-H. (4 + 1) blocks.
|
||||||
let (numDataBytes, numEcBytes) =
|
let (numDataBytes, numEcBytes) =
|
||||||
encoder::getNumDataBytesAndNumECBytesForBlockID(196, 66, 5, 0).expect("ok");
|
qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(196, 66, 5, 0).expect("ok");
|
||||||
assert_eq!(13, numDataBytes);
|
assert_eq!(13, numDataBytes);
|
||||||
assert_eq!(26, numEcBytes);
|
assert_eq!(26, numEcBytes);
|
||||||
let (numDataBytes, numEcBytes) =
|
let (numDataBytes, numEcBytes) =
|
||||||
encoder::getNumDataBytesAndNumECBytesForBlockID(196, 66, 5, 4).expect("ok");
|
qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(196, 66, 5, 4).expect("ok");
|
||||||
assert_eq!(14, numDataBytes);
|
assert_eq!(14, numDataBytes);
|
||||||
assert_eq!(26, numEcBytes);
|
assert_eq!(26, numEcBytes);
|
||||||
|
|
||||||
// Version 40-H. (20 + 61) blocks.
|
// Version 40-H. (20 + 61) blocks.
|
||||||
let (numDataBytes, numEcBytes) =
|
let (numDataBytes, numEcBytes) =
|
||||||
encoder::getNumDataBytesAndNumECBytesForBlockID(3706, 1276, 81, 0).expect("ok");
|
qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(3706, 1276, 81, 0).expect("ok");
|
||||||
assert_eq!(15, numDataBytes);
|
assert_eq!(15, numDataBytes);
|
||||||
assert_eq!(30, numEcBytes);
|
assert_eq!(30, numEcBytes);
|
||||||
|
|
||||||
let (numDataBytes, numEcBytes) =
|
let (numDataBytes, numEcBytes) =
|
||||||
encoder::getNumDataBytesAndNumECBytesForBlockID(3706, 1276, 81, 20).expect("ok");
|
qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(3706, 1276, 81, 20).expect("ok");
|
||||||
assert_eq!(16, numDataBytes);
|
assert_eq!(16, numDataBytes);
|
||||||
assert_eq!(30, numEcBytes);
|
assert_eq!(30, numEcBytes);
|
||||||
|
|
||||||
let (numDataBytes, numEcBytes) =
|
let (numDataBytes, numEcBytes) =
|
||||||
encoder::getNumDataBytesAndNumECBytesForBlockID(3706, 1276, 81, 80).expect("ok");
|
qrcode_encoder::getNumDataBytesAndNumECBytesForBlockID(3706, 1276, 81, 80).expect("ok");
|
||||||
assert_eq!(16, numDataBytes);
|
assert_eq!(16, numDataBytes);
|
||||||
assert_eq!(30, numEcBytes);
|
assert_eq!(30, numEcBytes);
|
||||||
}
|
}
|
||||||
@@ -600,7 +606,7 @@ fn testInterleaveWithECBytes() {
|
|||||||
// for (byte dataByte: dataBytes) {
|
// for (byte dataByte: dataBytes) {
|
||||||
in_.appendBits(*dataByte, 8).expect("ok");
|
in_.appendBits(*dataByte, 8).expect("ok");
|
||||||
}
|
}
|
||||||
let out = encoder::interleaveWithECBytes(&in_, 26, 9, 1).expect("encode");
|
let out = qrcode_encoder::interleaveWithECBytes(&in_, 26, 9, 1).expect("encode");
|
||||||
let expected = &[
|
let expected = &[
|
||||||
// Data bytes.
|
// Data bytes.
|
||||||
32, 65, 205, 69, 41, 220, 46, 128, 236, // Error correction bytes.
|
32, 65, 205, 69, 41, 220, 46, 128, 236, // Error correction bytes.
|
||||||
@@ -627,7 +633,7 @@ fn testInterleaveWithECBytes() {
|
|||||||
in_.appendBits(*dataByte, 8).expect("ok");
|
in_.appendBits(*dataByte, 8).expect("ok");
|
||||||
}
|
}
|
||||||
|
|
||||||
let out = encoder::interleaveWithECBytes(&in_, 134, 62, 4).expect("interleave ok");
|
let out = qrcode_encoder::interleaveWithECBytes(&in_, 134, 62, 4).expect("interleave ok");
|
||||||
let expected = &[
|
let expected = &[
|
||||||
// Data bytes.
|
// Data bytes.
|
||||||
67, 230, 54, 55, 70, 247, 70, 71, 22, 7, 86, 87, 38, 23, 102, 103, 54, 39, 118, 119, 70, 55,
|
67, 230, 54, 55, 70, 247, 70, 71, 22, 7, 86, 87, 38, 23, 102, 103, 54, 39, 118, 119, 70, 55,
|
||||||
@@ -660,23 +666,23 @@ fn testInterleaveWithECBytes() {
|
|||||||
fn testAppendNumericBytes() {
|
fn testAppendNumericBytes() {
|
||||||
// 1 = 01 = 0001 in 4 bits.
|
// 1 = 01 = 0001 in 4 bits.
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendNumericBytes("1", &mut bits).expect("append");
|
qrcode_encoder::appendNumericBytes("1", &mut bits).expect("append");
|
||||||
assert_eq!(" ...X", bits.to_string());
|
assert_eq!(" ...X", bits.to_string());
|
||||||
// 12 = 0xc = 0001100 in 7 bits.
|
// 12 = 0xc = 0001100 in 7 bits.
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendNumericBytes("12", &mut bits).expect("append");
|
qrcode_encoder::appendNumericBytes("12", &mut bits).expect("append");
|
||||||
assert_eq!(" ...XX..", bits.to_string());
|
assert_eq!(" ...XX..", bits.to_string());
|
||||||
// 123 = 0x7b = 0001111011 in 10 bits.
|
// 123 = 0x7b = 0001111011 in 10 bits.
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendNumericBytes("123", &mut bits).expect("append");
|
qrcode_encoder::appendNumericBytes("123", &mut bits).expect("append");
|
||||||
assert_eq!(" ...XXXX. XX", bits.to_string());
|
assert_eq!(" ...XXXX. XX", bits.to_string());
|
||||||
// 1234 = "123" + "4" = 0001111011 + 0100
|
// 1234 = "123" + "4" = 0001111011 + 0100
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendNumericBytes("1234", &mut bits).expect("append");
|
qrcode_encoder::appendNumericBytes("1234", &mut bits).expect("append");
|
||||||
assert_eq!(" ...XXXX. XX.X..", bits.to_string());
|
assert_eq!(" ...XXXX. XX.X..", bits.to_string());
|
||||||
// Empty.
|
// Empty.
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendNumericBytes("", &mut bits).expect("append");
|
qrcode_encoder::appendNumericBytes("", &mut bits).expect("append");
|
||||||
assert_eq!("", bits.to_string());
|
assert_eq!("", bits.to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -684,23 +690,23 @@ fn testAppendNumericBytes() {
|
|||||||
fn testAppendAlphanumericBytes() {
|
fn testAppendAlphanumericBytes() {
|
||||||
// A = 10 = 0xa = 001010 in 6 bits
|
// A = 10 = 0xa = 001010 in 6 bits
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendAlphanumericBytes("A", &mut bits).expect("append");
|
qrcode_encoder::appendAlphanumericBytes("A", &mut bits).expect("append");
|
||||||
assert_eq!(" ..X.X.", bits.to_string());
|
assert_eq!(" ..X.X.", bits.to_string());
|
||||||
// AB = 10 * 45 + 11 = 461 = 0x1cd = 00111001101 in 11 bits
|
// AB = 10 * 45 + 11 = 461 = 0x1cd = 00111001101 in 11 bits
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendAlphanumericBytes("AB", &mut bits).expect("append");
|
qrcode_encoder::appendAlphanumericBytes("AB", &mut bits).expect("append");
|
||||||
assert_eq!(" ..XXX..X X.X", bits.to_string());
|
assert_eq!(" ..XXX..X X.X", bits.to_string());
|
||||||
// ABC = "AB" + "C" = 00111001101 + 001100
|
// ABC = "AB" + "C" = 00111001101 + 001100
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendAlphanumericBytes("ABC", &mut bits).expect("append");
|
qrcode_encoder::appendAlphanumericBytes("ABC", &mut bits).expect("append");
|
||||||
assert_eq!(" ..XXX..X X.X..XX. .", bits.to_string());
|
assert_eq!(" ..XXX..X X.X..XX. .", bits.to_string());
|
||||||
// Empty.
|
// Empty.
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendAlphanumericBytes("", &mut bits).expect("append");
|
qrcode_encoder::appendAlphanumericBytes("", &mut bits).expect("append");
|
||||||
assert_eq!("", bits.to_string());
|
assert_eq!("", bits.to_string());
|
||||||
// Invalid data.
|
// Invalid data.
|
||||||
// try {
|
// try {
|
||||||
if encoder::appendAlphanumericBytes("abc", &mut BitArray::new()).is_ok() {
|
if qrcode_encoder::appendAlphanumericBytes("abc", &mut BitArray::new()).is_ok() {
|
||||||
panic!("should not be ok");
|
panic!("should not be ok");
|
||||||
}
|
}
|
||||||
// } catch (WriterException we) {
|
// } catch (WriterException we) {
|
||||||
@@ -712,12 +718,13 @@ fn testAppendAlphanumericBytes() {
|
|||||||
fn testAppend8BitBytes() {
|
fn testAppend8BitBytes() {
|
||||||
// 0x61, 0x62, 0x63
|
// 0x61, 0x62, 0x63
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::append8BitBytes("abc", &mut bits, encoder::DEFAULT_BYTE_MODE_ENCODING)
|
qrcode_encoder::append8BitBytes("abc", &mut bits, qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING)
|
||||||
.expect("append");
|
.expect("append");
|
||||||
assert_eq!(" .XX....X .XX...X. .XX...XX", bits.to_string());
|
assert_eq!(" .XX....X .XX...X. .XX...XX", bits.to_string());
|
||||||
// Empty.
|
// Empty.
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::append8BitBytes("", &mut bits, encoder::DEFAULT_BYTE_MODE_ENCODING).expect("append");
|
qrcode_encoder::append8BitBytes("", &mut bits, qrcode_encoder::DEFAULT_BYTE_MODE_ENCODING)
|
||||||
|
.expect("append");
|
||||||
assert_eq!("", bits.to_string());
|
assert_eq!("", bits.to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -725,9 +732,9 @@ fn testAppend8BitBytes() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn testAppendKanjiBytes() {
|
fn testAppendKanjiBytes() {
|
||||||
let mut bits = BitArray::new();
|
let mut bits = BitArray::new();
|
||||||
encoder::appendKanjiBytes(&shiftJISString(&[0x93, 0x5f]), &mut bits).expect("append");
|
qrcode_encoder::appendKanjiBytes(&shiftJISString(&[0x93, 0x5f]), &mut bits).expect("append");
|
||||||
assert_eq!(" .XX.XX.. XXXXX", bits.to_string());
|
assert_eq!(" .XX.XX.. XXXXX", bits.to_string());
|
||||||
encoder::appendKanjiBytes(&shiftJISString(&[0xe4, 0xaa]), &mut bits).expect("append");
|
qrcode_encoder::appendKanjiBytes(&shiftJISString(&[0xe4, 0xaa]), &mut bits).expect("append");
|
||||||
assert_eq!(" .XX.XX.. XXXXXXX. X.X.X.X. X.", bits.to_string());
|
assert_eq!(" .XX.XX.. XXXXXXX. X.X.X.X. X.", bits.to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -736,7 +743,7 @@ fn testAppendKanjiBytes() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn testGenerateECBytes() {
|
fn testGenerateECBytes() {
|
||||||
let dataBytes = &[32, 65, 205, 69, 41, 220, 46, 128, 236];
|
let dataBytes = &[32, 65, 205, 69, 41, 220, 46, 128, 236];
|
||||||
let ecBytes = encoder::generateECBytes(dataBytes, 17);
|
let ecBytes = qrcode_encoder::generateECBytes(dataBytes, 17);
|
||||||
let expected = [
|
let expected = [
|
||||||
42, 159, 74, 221, 244, 169, 239, 150, 138, 70, 237, 85, 224, 96, 74, 219, 61,
|
42, 159, 74, 221, 244, 169, 239, 150, 138, 70, 237, 85, 224, 96, 74, 219, 61,
|
||||||
];
|
];
|
||||||
@@ -748,7 +755,7 @@ fn testGenerateECBytes() {
|
|||||||
let dataBytes = &[
|
let dataBytes = &[
|
||||||
67, 70, 22, 38, 54, 70, 86, 102, 118, 134, 150, 166, 182, 198, 214,
|
67, 70, 22, 38, 54, 70, 86, 102, 118, 134, 150, 166, 182, 198, 214,
|
||||||
];
|
];
|
||||||
let ecBytes = encoder::generateECBytes(dataBytes, 18);
|
let ecBytes = qrcode_encoder::generateECBytes(dataBytes, 18);
|
||||||
let expected = &[
|
let expected = &[
|
||||||
175, 80, 155, 64, 178, 45, 214, 233, 65, 209, 12, 155, 117, 31, 140, 214, 27, 187,
|
175, 80, 155, 64, 178, 45, 214, 233, 65, 209, 12, 155, 117, 31, 140, 214, 27, 187,
|
||||||
];
|
];
|
||||||
@@ -759,7 +766,7 @@ fn testGenerateECBytes() {
|
|||||||
}
|
}
|
||||||
// High-order zero coefficient case.
|
// High-order zero coefficient case.
|
||||||
let dataBytes = &[32, 49, 205, 69, 42, 20, 0, 236, 17];
|
let dataBytes = &[32, 49, 205, 69, 42, 20, 0, 236, 17];
|
||||||
let ecBytes = encoder::generateECBytes(dataBytes, 17);
|
let ecBytes = qrcode_encoder::generateECBytes(dataBytes, 17);
|
||||||
let expected = &[
|
let expected = &[
|
||||||
0, 3, 130, 179, 194, 0, 55, 211, 110, 79, 98, 72, 170, 96, 211, 137, 213,
|
0, 3, 130, 179, 194, 0, 55, 211, 110, 79, 98, 72, 170, 96, 211, 137, 213,
|
||||||
];
|
];
|
||||||
@@ -805,7 +812,7 @@ fn testBugInBitVectorNumBytes() {
|
|||||||
// for (int x = 0; x < 3518; x++) {
|
// for (int x = 0; x < 3518; x++) {
|
||||||
builder.push('0');
|
builder.push('0');
|
||||||
}
|
}
|
||||||
assert!(encoder::encode(&builder, ErrorCorrectionLevel::L).is_ok());
|
assert!(qrcode_encoder::encode(&builder, ErrorCorrectionLevel::L).is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ use crate::{
|
|||||||
|
|
||||||
use unicode_segmentation::UnicodeSegmentation;
|
use unicode_segmentation::UnicodeSegmentation;
|
||||||
|
|
||||||
use super::encoder;
|
use super::qrcode_encoder;
|
||||||
|
|
||||||
pub enum VersionSize {
|
pub enum VersionSize {
|
||||||
SMALL, //("version 1-9"),
|
SMALL, //("version 1-9"),
|
||||||
@@ -155,7 +155,7 @@ impl MinimalEncoder {
|
|||||||
if let Some(version) = version {
|
if let Some(version) = version {
|
||||||
// compute minimal encoding for a given version
|
// compute minimal encoding for a given version
|
||||||
let result = self.encodeSpecificVersion(version)?;
|
let result = self.encodeSpecificVersion(version)?;
|
||||||
if !encoder::willFit(
|
if !qrcode_encoder::willFit(
|
||||||
result.getSize(),
|
result.getSize(),
|
||||||
Self::getVersion(Self::getVersionSize(result.getVersion())),
|
Self::getVersion(Self::getVersionSize(result.getVersion())),
|
||||||
&self.ecLevel,
|
&self.ecLevel,
|
||||||
@@ -183,7 +183,8 @@ impl MinimalEncoder {
|
|||||||
for i in 0..3 {
|
for i in 0..3 {
|
||||||
// for (int i = 0; i < 3; i++) {
|
// for (int i = 0; i < 3; i++) {
|
||||||
let size = results[i].getSize();
|
let size = results[i].getSize();
|
||||||
if encoder::willFit(size, versions[i], &self.ecLevel) && size < smallestSize {
|
if qrcode_encoder::willFit(size, versions[i], &self.ecLevel) && size < smallestSize
|
||||||
|
{
|
||||||
smallestSize = size;
|
smallestSize = size;
|
||||||
smallestRXingResult = i as i32;
|
smallestRXingResult = i as i32;
|
||||||
}
|
}
|
||||||
@@ -235,13 +236,13 @@ impl MinimalEncoder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn isDoubleByteKanji(c: &str) -> bool {
|
pub fn isDoubleByteKanji(c: &str) -> bool {
|
||||||
encoder::isOnlyDoubleByteKanji(c)
|
qrcode_encoder::isOnlyDoubleByteKanji(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn isAlphanumeric(c: &str) -> bool {
|
pub fn isAlphanumeric(c: &str) -> bool {
|
||||||
if c.len() == 1 {
|
if c.len() == 1 {
|
||||||
let ch = c.chars().next().unwrap();
|
let ch = c.chars().next().unwrap();
|
||||||
encoder::getAlphanumericCode(ch as u32) != -1
|
qrcode_encoder::getAlphanumericCode(ch as u32) != -1
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
@@ -612,6 +613,7 @@ pub struct Edge {
|
|||||||
_stringToEncode: Vec<String>,
|
_stringToEncode: Vec<String>,
|
||||||
}
|
}
|
||||||
impl Edge {
|
impl Edge {
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn new(
|
pub fn new(
|
||||||
mode: Mode,
|
mode: Mode,
|
||||||
fromPosition: usize,
|
fromPosition: usize,
|
||||||
@@ -881,7 +883,7 @@ impl RXingResultList {
|
|||||||
let size = Self::internal_static_get_size(version, &list);
|
let size = Self::internal_static_get_size(version, &list);
|
||||||
// increase version if needed
|
// increase version if needed
|
||||||
while versionNumber < upperLimit
|
while versionNumber < upperLimit
|
||||||
&& !encoder::willFit(
|
&& !qrcode_encoder::willFit(
|
||||||
size,
|
size,
|
||||||
Version::getVersionForNumber(versionNumber).unwrap(),
|
Version::getVersionForNumber(versionNumber).unwrap(),
|
||||||
ecLevel,
|
ecLevel,
|
||||||
@@ -891,7 +893,7 @@ impl RXingResultList {
|
|||||||
}
|
}
|
||||||
// shrink version if possible
|
// shrink version if possible
|
||||||
while versionNumber > lowerLimit
|
while versionNumber > lowerLimit
|
||||||
&& encoder::willFit(
|
&& qrcode_encoder::willFit(
|
||||||
size,
|
size,
|
||||||
Version::getVersionForNumber(versionNumber - 1).unwrap(),
|
Version::getVersionForNumber(versionNumber - 1).unwrap(),
|
||||||
ecLevel,
|
ecLevel,
|
||||||
@@ -1084,7 +1086,7 @@ impl RXingResultNode {
|
|||||||
bits.appendBits(self.encoders.getECIValue(self.charsetEncoderIndex), 8)?;
|
bits.appendBits(self.encoders.getECIValue(self.charsetEncoderIndex), 8)?;
|
||||||
} else if self.characterLength > 0 {
|
} else if self.characterLength > 0 {
|
||||||
// append data
|
// append data
|
||||||
encoder::appendBytes(
|
qrcode_encoder::appendBytes(
|
||||||
// &self.stringToEncode[self.fromPosition as usize
|
// &self.stringToEncode[self.fromPosition as usize
|
||||||
// ..(self.fromPosition + self.characterLength as usize)],
|
// ..(self.fromPosition + self.characterLength as usize)],
|
||||||
&(self
|
&(self
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
mod block_pair;
|
mod block_pair;
|
||||||
mod byte_matrix;
|
mod byte_matrix;
|
||||||
pub mod encoder;
|
|
||||||
pub mod mask_util;
|
pub mod mask_util;
|
||||||
pub mod matrix_util;
|
pub mod matrix_util;
|
||||||
mod minimal_encoder;
|
mod minimal_encoder;
|
||||||
mod qr_code;
|
mod qr_code;
|
||||||
|
pub mod qrcode_encoder;
|
||||||
|
|
||||||
pub use block_pair::*;
|
pub use block_pair::*;
|
||||||
pub use byte_matrix::*;
|
pub use byte_matrix::*;
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ use crate::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
decoder::{decoder, QRCodeDecoderMetaData},
|
decoder::{qrcode_decoder, QRCodeDecoderMetaData},
|
||||||
detector::Detector,
|
detector::Detector,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -64,13 +64,13 @@ impl Reader for QRCodeReader {
|
|||||||
let mut points: Vec<RXingResultPoint>;
|
let mut points: Vec<RXingResultPoint>;
|
||||||
if hints.contains_key(&DecodeHintType::PURE_BARCODE) {
|
if hints.contains_key(&DecodeHintType::PURE_BARCODE) {
|
||||||
let bits = Self::extractPureBits(image.getBlackMatrix())?;
|
let bits = Self::extractPureBits(image.getBlackMatrix())?;
|
||||||
decoderRXingResult = decoder::decode_bitmatrix_with_hints(&bits, hints)?;
|
decoderRXingResult = qrcode_decoder::decode_bitmatrix_with_hints(&bits, hints)?;
|
||||||
points = Vec::new();
|
points = Vec::new();
|
||||||
} else {
|
} else {
|
||||||
let detectorRXingResult =
|
let detectorRXingResult =
|
||||||
Detector::new(image.getBlackMatrix()).detect_with_hints(hints)?;
|
Detector::new(image.getBlackMatrix()).detect_with_hints(hints)?;
|
||||||
decoderRXingResult =
|
decoderRXingResult =
|
||||||
decoder::decode_bitmatrix_with_hints(detectorRXingResult.getBits(), hints)?;
|
qrcode_decoder::decode_bitmatrix_with_hints(detectorRXingResult.getBits(), hints)?;
|
||||||
points = detectorRXingResult.getPoints().clone();
|
points = detectorRXingResult.getPoints().clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ use crate::{
|
|||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
decoder::ErrorCorrectionLevel,
|
decoder::ErrorCorrectionLevel,
|
||||||
encoder::{encoder, QRCode},
|
encoder::{qrcode_encoder, QRCode},
|
||||||
};
|
};
|
||||||
|
|
||||||
const QUIET_ZONE_SIZE: i32 = 4;
|
const QUIET_ZONE_SIZE: i32 = 4;
|
||||||
@@ -102,7 +102,7 @@ impl Writer for QRCodeWriter {
|
|||||||
}
|
}
|
||||||
// }
|
// }
|
||||||
|
|
||||||
let code = encoder::encode_with_hints(contents, errorCorrectionLevel, hints)?;
|
let code = qrcode_encoder::encode_with_hints(contents, errorCorrectionLevel, hints)?;
|
||||||
|
|
||||||
Self::renderRXingResult(&code, width, height, quietZone)
|
Self::renderRXingResult(&code, width, height, quietZone)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user