/* * 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 "ZXAddressBookAUResultParser.h" #import "ZXAddressBookParsedResult.h" #import "ZXResult.h" @implementation ZXAddressBookAUResultParser - (ZXParsedResult *)parse:(ZXResult *)result { NSString *rawText = [ZXResultParser massagedText:result]; if ([rawText rangeOfString:@"MEMORY"].location == NSNotFound || [rawText rangeOfString:@"\r\n"].location == NSNotFound) { return nil; } NSString *name = [[self class] matchSinglePrefixedField:@"NAME1:" rawText:rawText endChar:'\r' trim:YES]; NSString *pronunciation = [[self class] matchSinglePrefixedField:@"NAME2:" rawText:rawText endChar:'\r' trim:YES]; NSArray *phoneNumbers = [self matchMultipleValuePrefix:@"TEL" max:3 rawText:rawText trim:YES]; NSArray *emails = [self matchMultipleValuePrefix:@"MAIL" max:3 rawText:rawText trim:YES]; NSString *note = [[self class] matchSinglePrefixedField:@"MEMORY:" rawText:rawText endChar:'\r' trim:NO]; NSString *address = [[self class] matchSinglePrefixedField:@"ADD:" rawText:rawText endChar:'\r' trim:YES]; NSArray *addresses = address == nil ? nil : @[address]; return [ZXAddressBookParsedResult addressBookParsedResultWithNames:[self maybeWrap:name] nicknames:nil pronunciation:pronunciation phoneNumbers:phoneNumbers phoneTypes:nil emails:emails emailTypes:nil instantMessenger:nil note:note addresses:addresses addressTypes:nil org:nil birthday:nil title:nil urls:nil geo:nil]; } - (NSArray *)matchMultipleValuePrefix:(NSString *)prefix max:(int)max rawText:(NSString *)rawText trim:(BOOL)trim { NSMutableArray *values = nil; for (int i = 1; i <= max; i++) { NSString *value = [[self class] matchSinglePrefixedField:[NSString stringWithFormat:@"%@%d:", prefix, i] rawText:rawText endChar:'\r' trim:trim]; if (value == nil) { break; } if (values == nil) { values = [[NSMutableArray alloc] initWithCapacity:max]; } [values addObject:value]; } if (values == nil) { return nil; } return values; } @end