blob: 4c9f7d895beb442b962f146c077798988e6b92ae [file] [log] [blame] [edit]
/*
* 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