| /* |
| * 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 |