123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- /*
- * 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 "ZXEmailAddressParsedResult.h"
- #import "ZXEmailAddressResultParser.h"
- #import "ZXEmailDoCoMoResultParser.h"
- #import "ZXResult.h"
-
- static NSCharacterSet *ZX_EMAIL_ADDRESS_RESULT_COMMA = nil;
-
- @implementation ZXEmailAddressResultParser
-
- + (void)initialize {
- if ([self class] != [ZXEmailAddressResultParser class]) return;
-
- ZX_EMAIL_ADDRESS_RESULT_COMMA = [NSCharacterSet characterSetWithCharactersInString:@","];
- }
-
- - (ZXParsedResult *)parse:(ZXResult *)result {
- NSString *rawText = [ZXResultParser massagedText:result];
- if ([rawText hasPrefix:@"mailto:"] || [rawText hasPrefix:@"MAILTO:"]) {
- // If it starts with mailto:, assume it is definitely trying to be an email address
- NSString *hostEmail = [rawText substringFromIndex:7];
- NSUInteger queryStart = [hostEmail rangeOfString:@"?"].location;
- if (queryStart != NSNotFound) {
- hostEmail = [hostEmail substringToIndex:queryStart];
- }
- hostEmail = [[self class] urlDecode:hostEmail];
- NSArray *tos;
- if (hostEmail.length > 0) {
- tos = [hostEmail componentsSeparatedByCharactersInSet:ZX_EMAIL_ADDRESS_RESULT_COMMA];
- }
- NSMutableDictionary *nameValues = [self parseNameValuePairs:rawText];
- NSArray *ccs;
- NSArray *bccs;
- NSString *subject = nil;
- NSString *body = nil;
- if (nameValues != nil) {
- if (!tos) {
- NSString *tosString = nameValues[@"to"];
- if (tosString) {
- tos = [tosString componentsSeparatedByCharactersInSet:ZX_EMAIL_ADDRESS_RESULT_COMMA];
- }
- }
- NSString *ccString = nameValues[@"cc"];
- if (ccString) {
- ccs = [ccString componentsSeparatedByCharactersInSet:ZX_EMAIL_ADDRESS_RESULT_COMMA];
- }
- NSString *bccString = nameValues[@"bcc"];
- if (bccString) {
- bccs = [bccString componentsSeparatedByCharactersInSet:ZX_EMAIL_ADDRESS_RESULT_COMMA];
- }
- subject = nameValues[@"subject"];
- body = nameValues[@"body"];
- }
- return [[ZXEmailAddressParsedResult alloc] initWithTos:tos ccs:ccs bccs:bccs subject:subject body:body];
- } else {
- if (![ZXEmailDoCoMoResultParser isBasicallyValidEmailAddress:rawText]) {
- return nil;
- }
- return [[ZXEmailAddressParsedResult alloc] initWithTo:rawText];
- }
- }
-
- @end
|