blob: 4d5fef869b521e33d1069a0d661fdb6d45c52641 [file] [log] [blame]
/*
* 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;
}
/**
* Deduces version information from Data Matrix dimensions.
*/
+ (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 {
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