123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- /*
- * 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 "ZXQRCodeMode.h"
- #import "ZXQRCodeVersion.h"
-
- @interface ZXQRCodeMode ()
-
- @property (nonatomic, strong, readonly) NSArray *characterCountBitsForVersions;
-
- @end
-
- @implementation ZXQRCodeMode
-
- - (id)initWithCharacterCountBitsForVersions:(NSArray *)characterCountBitsForVersions bits:(int)bits name:(NSString *)name {
- if (self = [super init]) {
- _characterCountBitsForVersions = characterCountBitsForVersions;
- _bits = bits;
- _name = name;
- }
-
- return self;
- }
-
- + (ZXQRCodeMode *)forBits:(int)bits {
- switch (bits) {
- case 0x0:
- return [ZXQRCodeMode terminatorMode];
- case 0x1:
- return [ZXQRCodeMode numericMode];
- case 0x2:
- return [ZXQRCodeMode alphanumericMode];
- case 0x3:
- return [ZXQRCodeMode structuredAppendMode];
- case 0x4:
- return [ZXQRCodeMode byteMode];
- case 0x5:
- return [ZXQRCodeMode fnc1FirstPositionMode];
- case 0x7:
- return [ZXQRCodeMode eciMode];
- case 0x8:
- return [ZXQRCodeMode kanjiMode];
- case 0x9:
- return [ZXQRCodeMode fnc1SecondPositionMode];
- case 0xD:
- return [ZXQRCodeMode hanziMode];
- default:
- return nil;
- }
- }
-
- - (int)characterCountBits:(ZXQRCodeVersion *)version {
- int number = version.versionNumber;
- int offset;
- if (number <= 9) {
- offset = 0;
- } else if (number <= 26) {
- offset = 1;
- } else {
- offset = 2;
- }
- return [self.characterCountBitsForVersions[offset] intValue];
- }
-
- - (NSString *)description {
- return self.name;
- }
-
- + (ZXQRCodeMode *)terminatorMode {
- static ZXQRCodeMode *thisMode = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- thisMode = [[ZXQRCodeMode alloc] initWithCharacterCountBitsForVersions:@[@0, @0, @0] bits:0x00 name:@"TERMINATOR"];
- });
- return thisMode;
- }
-
- + (ZXQRCodeMode *)numericMode {
- static ZXQRCodeMode *thisMode = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- thisMode = [[ZXQRCodeMode alloc] initWithCharacterCountBitsForVersions:@[@10, @12, @14] bits:0x01 name:@"NUMERIC"];
- });
- return thisMode;
- }
-
- + (ZXQRCodeMode *)alphanumericMode {
- static ZXQRCodeMode *thisMode = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- thisMode = [[ZXQRCodeMode alloc] initWithCharacterCountBitsForVersions:@[@9, @11, @13] bits:0x02 name:@"ALPHANUMERIC"];
- });
- return thisMode;
- }
-
- + (ZXQRCodeMode *)structuredAppendMode {
- static ZXQRCodeMode *thisMode = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- thisMode = [[ZXQRCodeMode alloc] initWithCharacterCountBitsForVersions:@[@0, @0, @0] bits:0x03 name:@"STRUCTURED_APPEND"];
- });
- return thisMode;
- }
-
- + (ZXQRCodeMode *)byteMode {
- static ZXQRCodeMode *thisMode = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- thisMode = [[ZXQRCodeMode alloc] initWithCharacterCountBitsForVersions:@[@8, @16, @16] bits:0x04 name:@"BYTE"];
- });
- return thisMode;
- }
-
- + (ZXQRCodeMode *)eciMode {
- static ZXQRCodeMode *thisMode = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- thisMode = [[ZXQRCodeMode alloc] initWithCharacterCountBitsForVersions:@[@0, @0, @0] bits:0x07 name:@"ECI"];
- });
- return thisMode;
- }
-
- + (ZXQRCodeMode *)kanjiMode {
- static ZXQRCodeMode *thisMode = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- thisMode = [[ZXQRCodeMode alloc] initWithCharacterCountBitsForVersions:@[@8, @10, @12] bits:0x08 name:@"KANJI"];
- });
- return thisMode;
- }
-
- + (ZXQRCodeMode *)fnc1FirstPositionMode {
- static ZXQRCodeMode *thisMode = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- thisMode = [[ZXQRCodeMode alloc] initWithCharacterCountBitsForVersions:@[@0, @0, @0] bits:0x05 name:@"FNC1_FIRST_POSITION"];
- });
- return thisMode;
- }
-
- + (ZXQRCodeMode *)fnc1SecondPositionMode {
- static ZXQRCodeMode *thisMode = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- thisMode = [[ZXQRCodeMode alloc] initWithCharacterCountBitsForVersions:@[@0, @0, @0] bits:0x09 name:@"FNC1_SECOND_POSITION"];
- });
- return thisMode;
- }
-
- + (ZXQRCodeMode *)hanziMode {
- static ZXQRCodeMode *thisMode = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- thisMode = [[ZXQRCodeMode alloc] initWithCharacterCountBitsForVersions:@[@8, @10, @12] bits:0x0D name:@"HANZI"];
- });
- return thisMode;
- }
-
- @end
|