diff --git a/iphone/ZXingWidget/Classes/resultParsers/BizcardResultParser.h b/iphone/ZXingWidget/Classes/resultParsers/BizcardResultParser.h new file mode 100644 index 000000000..8b0f2631c --- /dev/null +++ b/iphone/ZXingWidget/Classes/resultParsers/BizcardResultParser.h @@ -0,0 +1,30 @@ +// +// BizcardResultParser.h +// ZXing +// +// Created by George Nachman on 7/15/2011. +/* + * Copyright 2011 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 "ResultParser.h" + +@interface BizcardResultParser : ResultParser { + +} + +@end + + diff --git a/iphone/ZXingWidget/Classes/resultParsers/BizcardResultParser.m b/iphone/ZXingWidget/Classes/resultParsers/BizcardResultParser.m new file mode 100644 index 000000000..c080900f3 --- /dev/null +++ b/iphone/ZXingWidget/Classes/resultParsers/BizcardResultParser.m @@ -0,0 +1,102 @@ +// +// BizcardResultParser.m +// ZXing +// +// Ported to Objective-C by George Nachman on 7/14/2011. +/* + * Copyright 2011 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 "BizcardResultParser.h" +#import "BusinessCardParsedResult.h" +#import "CBarcodeFormat.h" +#import "DoCoMoResultParser.h" + +@implementation BizcardResultParser + ++ (void)load { + [ResultParser registerResultParserClass:self]; +} + ++ (NSArray*)arrayWithFirstName:(NSString*)firstName + lastName:(NSString*)lastName { + if (firstName && !lastName) { + return [NSArray arrayWithObject:firstName]; + } else if (!firstName && lastName) { + return [NSArray arrayWithObject:lastName]; + } else if (lastName && firstName) { + return [NSArray arrayWithObject:[NSString stringWithFormat:@"%@ %@", + firstName, lastName, nil]]; + } else { + return nil; + } +} + +// +// Implements the "BIZCARD" address book entry format, though this has been +// largely reverse-engineered from examples observed in the wild -- still +// looking for a definitive reference. +// +// @author Sean Owen +// ++ (ParsedResult *)parsedResultForString:(NSString *)rawText + format:(BarcodeFormat)format { + if (rawText == nil || ![rawText hasPrefix:@"BIZCARD:"]) { + return nil; + } + NSString *firstName = + [[rawText fieldWithPrefix:@"N:"] stringWithTrimmedWhitespace]; + NSString *lastName = + [[rawText fieldWithPrefix:@"X:"] stringWithTrimmedWhitespace]; + NSString *title = + [[rawText fieldWithPrefix:@"T:"] stringWithTrimmedWhitespace]; + NSString *org = + [[rawText fieldWithPrefix:@"C:"] stringWithTrimmedWhitespace]; + NSArray *addresses = + [[rawText fieldsWithPrefix:@"A:"] stringArrayWithTrimmedWhitespace]; + NSString *phoneNumber1 = + [[rawText fieldWithPrefix:@"B:"] stringWithTrimmedWhitespace]; + NSString *phoneNumber2 = + [[rawText fieldWithPrefix:@"M:"] stringWithTrimmedWhitespace]; + NSString *phoneNumber3 = + [[rawText fieldWithPrefix:@"F:"] stringWithTrimmedWhitespace]; + NSString *email = + [[rawText fieldWithPrefix:@"E:"] stringWithTrimmedWhitespace]; + + BusinessCardParsedResult *result = [[BusinessCardParsedResult alloc] init]; + + result.names = [BizcardResultParser arrayWithFirstName:firstName lastName:lastName]; + NSMutableArray *phoneNumbers = [NSMutableArray arrayWithCapacity:3]; + if (phoneNumber1) { + [phoneNumbers addObject:phoneNumber1]; + } + if (phoneNumber1) { + [phoneNumbers addObject:phoneNumber2]; + } + if (phoneNumber1) { + [phoneNumbers addObject:phoneNumber3]; + } + if ([phoneNumbers count]) { + result.phoneNumbers = phoneNumbers; + } + result.emails = email ? [NSArray arrayWithObject:email] : nil; + result.addresses = addresses; + result.organization = org; + result.jobTitle = title; + + return [result autorelease]; +} + +@end diff --git a/iphone/ZXingWidget/Classes/resultParsers/UniversalResultParser.m b/iphone/ZXingWidget/Classes/resultParsers/UniversalResultParser.m index 3c03d2bf3..aeb9ce86d 100644 --- a/iphone/ZXingWidget/Classes/resultParsers/UniversalResultParser.m +++ b/iphone/ZXingWidget/Classes/resultParsers/UniversalResultParser.m @@ -20,7 +20,7 @@ #import "TextResultParser.h" #import "CBarcodeFormat.h" #import "ProductResultParser.h" -#import "AddressBookAUResultParser.h" +#import "BizcardResultParser.h" @implementation UniversalResultParser static NSMutableArray *sTheResultParsers = nil; @@ -31,7 +31,7 @@ static NSMutableArray *sTheResultParsers = nil; } + (void)addParserClass:(Class)klass { - [sTheResultParsers addObject:klass]; + [sTheResultParsers addObject:klass]; } + (void) initWithDefaultParsers { @@ -45,7 +45,7 @@ static NSMutableArray *sTheResultParsers = nil; [self addParserClass:[BookmarkDoCoMoResultParser class]]; [self addParserClass:[MeCardParser class]]; [self addParserClass:[EmailDoCoMoResultParser class]]; - [self addParserClass:[AddressBookAUResultParser class]]; + [self addParserClass:[BizcardResultParser class]]; [self addParserClass:[PlainEmailResultParser class]]; [self addParserClass:[TelResultParser class]]; [self addParserClass:[SMSResultParser class]]; diff --git a/iphone/ZXingWidget/ZXingWidget.xcodeproj/project.pbxproj b/iphone/ZXingWidget/ZXingWidget.xcodeproj/project.pbxproj index dee9fad96..75c3ed134 100644 --- a/iphone/ZXingWidget/ZXingWidget.xcodeproj/project.pbxproj +++ b/iphone/ZXingWidget/ZXingWidget.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 1D0CBDF913D0DD5D003D0F8D /* BizcardResultParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D0CBDF713D0DD5D003D0F8D /* BizcardResultParser.h */; }; + 1D0CBDFA13D0DD5D003D0F8D /* BizcardResultParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D0CBDF813D0DD5D003D0F8D /* BizcardResultParser.m */; }; 1DFA090C13CE1A3900599044 /* CBarcodeFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DFA090A13CE1A3900599044 /* CBarcodeFormat.h */; }; 1DFA090D13CE1A3900599044 /* CBarcodeFormat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1DFA090B13CE1A3900599044 /* CBarcodeFormat.mm */; }; 1DFA092413CE251600599044 /* ProductParsedResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DFA092213CE251600599044 /* ProductParsedResult.h */; }; @@ -244,6 +246,8 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 1D0CBDF713D0DD5D003D0F8D /* BizcardResultParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BizcardResultParser.h; path = Classes/resultParsers/BizcardResultParser.h; sourceTree = ""; }; + 1D0CBDF813D0DD5D003D0F8D /* BizcardResultParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BizcardResultParser.m; path = Classes/resultParsers/BizcardResultParser.m; sourceTree = ""; }; 1DFA090A13CE1A3900599044 /* CBarcodeFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CBarcodeFormat.h; path = Classes/CBarcodeFormat.h; sourceTree = ""; }; 1DFA090B13CE1A3900599044 /* CBarcodeFormat.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = CBarcodeFormat.mm; path = Classes/CBarcodeFormat.mm; sourceTree = ""; }; 1DFA092213CE251600599044 /* ProductParsedResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProductParsedResult.h; path = Classes/parsedResults/ProductParsedResult.h; sourceTree = ""; }; @@ -806,6 +810,8 @@ 1FB4319E12901C76002D63E8 /* UniversalResultParser.m */, 1DFA099E13CE5C0300599044 /* AddressBookAUResultParser.h */, 1DFA099F13CE5C0300599044 /* AddressBookAUResultParser.m */, + 1D0CBDF713D0DD5D003D0F8D /* BizcardResultParser.h */, + 1D0CBDF813D0DD5D003D0F8D /* BizcardResultParser.m */, 1F027FFB11A7BF06006B06DE /* BookmarkDoCoMoResultParser.h */, 1F027FFC11A7BF06006B06DE /* BookmarkDoCoMoResultParser.m */, 1F027FFD11A7BF06006B06DE /* DoCoMoResultParser.h */, @@ -1014,6 +1020,7 @@ 1DFA092413CE251600599044 /* ProductParsedResult.h in Headers */, 1DFA092A13CE252300599044 /* ProductResultParser.h in Headers */, 1DFA09A013CE5C0300599044 /* AddressBookAUResultParser.h in Headers */, + 1D0CBDF913D0DD5D003D0F8D /* BizcardResultParser.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1181,6 +1188,7 @@ 1DFA092513CE251600599044 /* ProductParsedResult.m in Sources */, 1DFA092B13CE252300599044 /* ProductResultParser.mm in Sources */, 1DFA09A113CE5C0300599044 /* AddressBookAUResultParser.m in Sources */, + 1D0CBDFA13D0DD5D003D0F8D /* BizcardResultParser.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };