/*
|
* Copyright 2012 ZXing authors
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
|
#import "ZXDataMatrixVersion.h"
|
|
@implementation ZXDataMatrixECBlocks
|
|
- (id)initWithCodewords:(int)ecCodewords ecBlocks:(ZXDataMatrixECB *)ecBlocks {
|
if (self = [super init]) {
|
_ecCodewords = ecCodewords;
|
_ecBlocks = @[ecBlocks];
|
}
|
|
return self;
|
}
|
|
- (id)initWithCodewords:(int)ecCodewords ecBlocks1:(ZXDataMatrixECB *)ecBlocks1 ecBlocks2:(ZXDataMatrixECB *)ecBlocks2 {
|
if (self = [super init]) {
|
_ecCodewords = ecCodewords;
|
_ecBlocks = @[ecBlocks1, ecBlocks2];
|
}
|
|
return self;
|
}
|
|
@end
|
|
|
@implementation ZXDataMatrixECB
|
|
- (id)initWithCount:(int)count dataCodewords:(int)dataCodewords {
|
if (self = [super init]) {
|
_count = count;
|
_dataCodewords = dataCodewords;
|
}
|
|
return self;
|
}
|
|
@end
|
|
|
static NSArray *VERSIONS = nil;
|
|
@implementation ZXDataMatrixVersion
|
|
- (id)initWithVersionNumber:(int)versionNumber symbolSizeRows:(int)symbolSizeRows symbolSizeColumns:(int)symbolSizeColumns
|
dataRegionSizeRows:(int)dataRegionSizeRows dataRegionSizeColumns:(int)dataRegionSizeColumns ecBlocks:(ZXDataMatrixECBlocks *)ecBlocks {
|
if (self = [super init]) {
|
_versionNumber = versionNumber;
|
_symbolSizeRows = symbolSizeRows;
|
_symbolSizeColumns = symbolSizeColumns;
|
_dataRegionSizeRows = dataRegionSizeRows;
|
_dataRegionSizeColumns = dataRegionSizeColumns;
|
_ecBlocks = ecBlocks;
|
|
int total = 0;
|
int ecCodewords = ecBlocks.ecCodewords;
|
NSArray *ecbArray = ecBlocks.ecBlocks;
|
for (ZXDataMatrixECB *ecBlock in ecbArray) {
|
total += ecBlock.count * (ecBlock.dataCodewords + ecCodewords);
|
}
|
_totalCodewords = total;
|
}
|
|
return self;
|
}
|
|
+ (ZXDataMatrixVersion *)versionForDimensions:(int)numRows numColumns:(int)numColumns {
|
if ((numRows & 0x01) != 0 || (numColumns & 0x01) != 0) {
|
return nil;
|
}
|
|
for (ZXDataMatrixVersion *version in VERSIONS) {
|
if (version.symbolSizeRows == numRows && version.symbolSizeColumns == numColumns) {
|
return version;
|
}
|
}
|
|
return nil;
|
}
|
|
- (NSString *)description {
|
return [@(self.versionNumber) stringValue];
|
}
|
|
/**
|
* See ISO 16022:2006 5.5.1 Table 7
|
*/
|
+ (void)initialize {
|
if ([self class] != [ZXDataMatrixVersion class]) return;
|
|
VERSIONS = @[[[ZXDataMatrixVersion alloc] initWithVersionNumber:1
|
symbolSizeRows:10
|
symbolSizeColumns:10
|
dataRegionSizeRows:8
|
dataRegionSizeColumns:8
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:5
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:3]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:2
|
symbolSizeRows:12
|
symbolSizeColumns:12
|
dataRegionSizeRows:10
|
dataRegionSizeColumns:10
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:7
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:5]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:3
|
symbolSizeRows:14
|
symbolSizeColumns:14
|
dataRegionSizeRows:12
|
dataRegionSizeColumns:12
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:10
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:8]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:4
|
symbolSizeRows:16
|
symbolSizeColumns:16
|
dataRegionSizeRows:14
|
dataRegionSizeColumns:14
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:12
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:12]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:5
|
symbolSizeRows:18
|
symbolSizeColumns:18
|
dataRegionSizeRows:16
|
dataRegionSizeColumns:16
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:14
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:18]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:6
|
symbolSizeRows:20
|
symbolSizeColumns:20
|
dataRegionSizeRows:18
|
dataRegionSizeColumns:18
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:18
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:22]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:7
|
symbolSizeRows:22
|
symbolSizeColumns:22
|
dataRegionSizeRows:20
|
dataRegionSizeColumns:20
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:20
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:30]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:8
|
symbolSizeRows:24
|
symbolSizeColumns:24
|
dataRegionSizeRows:22
|
dataRegionSizeColumns:22
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:24
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:36]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:9
|
symbolSizeRows:26
|
symbolSizeColumns:26
|
dataRegionSizeRows:24
|
dataRegionSizeColumns:24
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:28
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:44]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:10
|
symbolSizeRows:32
|
symbolSizeColumns:32
|
dataRegionSizeRows:14
|
dataRegionSizeColumns:14
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:36
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:62]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:11
|
symbolSizeRows:36
|
symbolSizeColumns:36
|
dataRegionSizeRows:16
|
dataRegionSizeColumns:16
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:42
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:86]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:12
|
symbolSizeRows:40
|
symbolSizeColumns:40
|
dataRegionSizeRows:18
|
dataRegionSizeColumns:18
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:48
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:114]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:13
|
symbolSizeRows:44
|
symbolSizeColumns:44
|
dataRegionSizeRows:20
|
dataRegionSizeColumns:20
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:56
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:144]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:14
|
symbolSizeRows:48
|
symbolSizeColumns:48
|
dataRegionSizeRows:22
|
dataRegionSizeColumns:22
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:68
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:174]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:15
|
symbolSizeRows:52
|
symbolSizeColumns:52
|
dataRegionSizeRows:24
|
dataRegionSizeColumns:24
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:42
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:2 dataCodewords:102]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:16
|
symbolSizeRows:64
|
symbolSizeColumns:64
|
dataRegionSizeRows:14
|
dataRegionSizeColumns:14
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:56
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:2 dataCodewords:140]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:17
|
symbolSizeRows:72
|
symbolSizeColumns:72
|
dataRegionSizeRows:16
|
dataRegionSizeColumns:16
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:36
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:4 dataCodewords:92]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:18
|
symbolSizeRows:80
|
symbolSizeColumns:80
|
dataRegionSizeRows:18
|
dataRegionSizeColumns:18
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:48
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:4 dataCodewords:114]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:19
|
symbolSizeRows:88
|
symbolSizeColumns:88
|
dataRegionSizeRows:20
|
dataRegionSizeColumns:20
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:56
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:4 dataCodewords:144]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:20
|
symbolSizeRows:96
|
symbolSizeColumns:96
|
dataRegionSizeRows:22
|
dataRegionSizeColumns:22
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:68
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:4 dataCodewords:174]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:21
|
symbolSizeRows:104
|
symbolSizeColumns:104
|
dataRegionSizeRows:24
|
dataRegionSizeColumns:24
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:56
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:6 dataCodewords:136]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:22
|
symbolSizeRows:120
|
symbolSizeColumns:120
|
dataRegionSizeRows:18
|
dataRegionSizeColumns:18
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:68
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:6 dataCodewords:175]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:23
|
symbolSizeRows:132
|
symbolSizeColumns:132
|
dataRegionSizeRows:20
|
dataRegionSizeColumns:20
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:62
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:8 dataCodewords:163]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:24
|
symbolSizeRows:144
|
symbolSizeColumns:144
|
dataRegionSizeRows:22
|
dataRegionSizeColumns:22
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:62
|
ecBlocks1:[[ZXDataMatrixECB alloc] initWithCount:8 dataCodewords:156]
|
ecBlocks2:[[ZXDataMatrixECB alloc] initWithCount:2 dataCodewords:155]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:25
|
symbolSizeRows:8
|
symbolSizeColumns:18
|
dataRegionSizeRows:6
|
dataRegionSizeColumns:16
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:7
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:5]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:26
|
symbolSizeRows:8
|
symbolSizeColumns:32
|
dataRegionSizeRows:6
|
dataRegionSizeColumns:14
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:11
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:10]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:27
|
symbolSizeRows:12
|
symbolSizeColumns:26
|
dataRegionSizeRows:10
|
dataRegionSizeColumns:24
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:14
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:16]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:28
|
symbolSizeRows:12
|
symbolSizeColumns:36
|
dataRegionSizeRows:10
|
dataRegionSizeColumns:16
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:18
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:22]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:29
|
symbolSizeRows:16
|
symbolSizeColumns:36
|
dataRegionSizeRows:14
|
dataRegionSizeColumns:16
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:24
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:32]]],
|
|
[[ZXDataMatrixVersion alloc] initWithVersionNumber:30
|
symbolSizeRows:16
|
symbolSizeColumns:48
|
dataRegionSizeRows:14
|
dataRegionSizeColumns:22
|
ecBlocks:[[ZXDataMatrixECBlocks alloc] initWithCodewords:28
|
ecBlocks:[[ZXDataMatrixECB alloc] initWithCount:1 dataCodewords:49]]]];
|
}
|
|
@end
|