mirror of
https://github.com/zxing/zxing.git
synced 2025-01-12 19:57:27 -08:00
Add unit tests. Add VCardResultParser. Refactor DoCoMoResultParser.
git-svn-id: https://zxing.googlecode.com/svn/trunk@1869 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
parent
71953aee21
commit
711e746900
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// DoCoMoResultParser.h
|
||||
// ArrayAndStringCategories.h
|
||||
// ZXing
|
||||
//
|
||||
// Created by Christian Brunschen on 25/06/2008.
|
||||
|
@ -39,8 +39,6 @@
|
|||
@end
|
||||
|
||||
|
||||
@interface DoCoMoResultParser : ResultParser {
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
// This works around the linker bug described here:
|
||||
// http://developer.apple.com/library/mac/#qa/qa1490/_index.html
|
||||
void ForceArrayAndStringCategoriesToLoad(void);
|
143
iphone/ZXingWidget/Classes/ArrayAndStringCategories.m
Normal file
143
iphone/ZXingWidget/Classes/ArrayAndStringCategories.m
Normal file
|
@ -0,0 +1,143 @@
|
|||
//
|
||||
// ArrayAndStringCategories.m
|
||||
// ZXing
|
||||
//
|
||||
// Created by Christian Brunschen on 25/06/2008.
|
||||
/*
|
||||
* Copyright 2008 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 "ArrayAndStringCategories.h"
|
||||
|
||||
|
||||
@implementation NSString (ArrayAndStringCategories)
|
||||
|
||||
- (NSString *)backslashUnescaped {
|
||||
NSRange backslashRange = [self rangeOfString:@"\\"];
|
||||
if (backslashRange.location == NSNotFound) {
|
||||
return self;
|
||||
}
|
||||
|
||||
int max = [self length];
|
||||
int startLocation = 0;
|
||||
NSMutableString *result = [NSMutableString stringWithCapacity:[self length]];
|
||||
while (backslashRange.location != NSNotFound) {
|
||||
[result appendString:[self substringWithRange:NSMakeRange(startLocation,
|
||||
backslashRange.location - startLocation)]];
|
||||
[result appendFormat:@"%c", [self characterAtIndex:backslashRange.location + 1]];
|
||||
startLocation = backslashRange.location + 2;
|
||||
NSRange searchRange = NSMakeRange(startLocation, max - startLocation);
|
||||
backslashRange = [self rangeOfString:@"\\" options:0 range:searchRange];
|
||||
}
|
||||
if (startLocation < max) {
|
||||
[result appendString:[self substringWithRange:NSMakeRange(startLocation, max - startLocation)]];
|
||||
}
|
||||
return [NSString stringWithString:result];
|
||||
}
|
||||
|
||||
- (NSArray *)fieldsWithPrefix:(NSString *)prefix {
|
||||
return [self fieldsWithPrefix:prefix terminator:@";"];
|
||||
}
|
||||
|
||||
- (NSArray *)fieldsWithPrefix:(NSString *)prefix terminator:(NSString *)term {
|
||||
NSMutableArray *result = nil;
|
||||
|
||||
int i = 0;
|
||||
int max = [self length];
|
||||
NSRange searchRange;
|
||||
NSRange foundRange;
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
while (i < max) {
|
||||
searchRange = NSMakeRange(i, max - i);
|
||||
foundRange = [self rangeOfString:prefix options:0 range:searchRange];
|
||||
if(foundRange.location == NSNotFound) {
|
||||
break;
|
||||
}
|
||||
|
||||
int start = i = foundRange.location + foundRange.length;
|
||||
bool done = false;
|
||||
while (!done) {
|
||||
searchRange = NSMakeRange(i, max - i);
|
||||
NSRange termRange = [self rangeOfString:term options:0 range:searchRange];
|
||||
if (termRange.location == NSNotFound) {
|
||||
i = max;
|
||||
done = true;
|
||||
} else if ([self characterAtIndex:termRange.location-1] == (unichar)'\\') {
|
||||
i++;
|
||||
} else {
|
||||
NSAutoreleasePool *secondaryPool = [[NSAutoreleasePool alloc] init];
|
||||
NSString *substring = [self substringWithRange:NSMakeRange(start, termRange.location - start)];
|
||||
NSString *unescaped = [substring backslashUnescaped];
|
||||
NSString *toBeInArray = [[NSString alloc] initWithString:unescaped];
|
||||
[secondaryPool release];
|
||||
if (result == nil) {
|
||||
result = [[NSMutableArray alloc] initWithCapacity:1];
|
||||
}
|
||||
[result addObject:toBeInArray];
|
||||
[toBeInArray release];
|
||||
i = termRange.location + termRange.length;
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
[pool release];
|
||||
|
||||
return [result autorelease];
|
||||
}
|
||||
|
||||
- (NSString *)fieldWithPrefix:(NSString *)prefix {
|
||||
return [self fieldWithPrefix:prefix terminator:@";"];
|
||||
}
|
||||
|
||||
- (NSString *)fieldWithPrefix:(NSString *)prefix terminator:(NSString *)term {
|
||||
NSArray *fields = [self fieldsWithPrefix:prefix terminator:term];
|
||||
if (fields.count == 0) {
|
||||
return nil;
|
||||
} else {
|
||||
return [fields lastObject];
|
||||
}
|
||||
}
|
||||
|
||||
- (NSString *)stringWithTrimmedWhitespace {
|
||||
return [self stringByTrimmingCharactersInSet:
|
||||
[NSCharacterSet whitespaceAndNewlineCharacterSet]];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation NSArray (ArrayAndStringCategories)
|
||||
|
||||
- (NSArray*)stringArrayWithTrimmedWhitespace {
|
||||
NSMutableArray* trimmed = [NSMutableArray arrayWithCapacity:[self count]];
|
||||
for (NSString* s in self) {
|
||||
[trimmed addObject:[s stringWithTrimmedWhitespace]];
|
||||
}
|
||||
return trimmed;
|
||||
}
|
||||
|
||||
+ (NSArray*)arrayWithStringIfNotNil:(NSString *)string {
|
||||
if (string != nil) {
|
||||
return [NSArray arrayWithObject:string];
|
||||
} else {
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
void ForceArrayAndStringCategoriesToLoad(void) {
|
||||
// No-op. See comments in header file.
|
||||
}
|
|
@ -482,35 +482,39 @@ didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
|
|||
#pragma mark - Torch
|
||||
|
||||
- (void)setTorch:(BOOL)status {
|
||||
#if HAS_AVFF
|
||||
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
|
||||
if (captureDeviceClass != nil) {
|
||||
|
||||
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
|
||||
AVCaptureDevice *device = [captureDeviceClass defaultDeviceWithMediaType:AVMediaTypeVideo];
|
||||
|
||||
[device lockForConfiguration:nil];
|
||||
if ( [device hasTorch] ) {
|
||||
if ( status ) {
|
||||
[device setTorchMode:AVCaptureTorchModeOn];
|
||||
} else {
|
||||
[device setTorchMode:AVCaptureTorchModeOff];
|
||||
[device setTorchMode:AVCaptureTorchModeOn];
|
||||
}
|
||||
}
|
||||
[device unlockForConfiguration];
|
||||
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
- (BOOL)torchIsOn {
|
||||
#if HAS_AVFF
|
||||
Class captureDeviceClass = NSClassFromString(@"AVCaptureDevice");
|
||||
if (captureDeviceClass != nil) {
|
||||
|
||||
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
|
||||
AVCaptureDevice *device = [captureDeviceClass defaultDeviceWithMediaType:AVMediaTypeVideo];
|
||||
|
||||
if ( [device hasTorch] ) {
|
||||
return [device torchMode] == AVCaptureTorchModeOn;
|
||||
}
|
||||
[device unlockForConfiguration];
|
||||
}
|
||||
#endif
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#import "AddressBookAUResultParser.h"
|
||||
#import "BusinessCardParsedResult.h"
|
||||
#import "CBarcodeFormat.h"
|
||||
#import "DoCoMoResultParser.h"
|
||||
#import "ArrayAndStringCategories.h"
|
||||
|
||||
@interface NSString (AddressBookAUResultParser)
|
||||
|
||||
|
@ -73,6 +73,10 @@
|
|||
//
|
||||
+ (ParsedResult *)parsedResultForString:(NSString *)rawText
|
||||
format:(BarcodeFormat)format {
|
||||
// Force objects in ArrayAndStringCategories.m to be loaded from static
|
||||
// library to work around a linker bug.
|
||||
ForceArrayAndStringCategoriesToLoad();
|
||||
|
||||
// MEMORY is mandatory; seems like a decent indicator, as does
|
||||
// end-of-record separator CR/LF
|
||||
if (rawText == nil ||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#import "BizcardResultParser.h"
|
||||
#import "BusinessCardParsedResult.h"
|
||||
#import "CBarcodeFormat.h"
|
||||
#import "DoCoMoResultParser.h"
|
||||
#import "ArrayAndStringCategories.h"
|
||||
|
||||
@implementation BizcardResultParser
|
||||
|
||||
|
|
|
@ -20,9 +20,9 @@
|
|||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "DoCoMoResultParser.h"
|
||||
#import "ResultParser.h"
|
||||
|
||||
@interface BookmarkDoCoMoResultParser : DoCoMoResultParser {
|
||||
@interface BookmarkDoCoMoResultParser : ResultParser {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#import "BookmarkDoCoMoResultParser.h"
|
||||
#import "URIParsedResult.h"
|
||||
#import "CBarcodeFormat.h"
|
||||
#import "ArrayAndStringCategories.h"
|
||||
|
||||
@implementation BookmarkDoCoMoResultParser
|
||||
|
||||
|
@ -35,15 +36,15 @@
|
|||
if (foundRange.location == NSNotFound) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
NSString *urlString = [s fieldWithPrefix:@"URL:"];
|
||||
if (urlString == nil) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
NSString *title = [s fieldWithPrefix:@"TITLE:"];
|
||||
|
||||
return [[[URIParsedResult alloc] initWithURLString:urlString
|
||||
|
||||
return [[[URIParsedResult alloc] initWithURLString:urlString
|
||||
title:title] autorelease];
|
||||
}
|
||||
|
||||
|
|
|
@ -20,9 +20,9 @@
|
|||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "DoCoMoResultParser.h"
|
||||
#import "ResultParser.h"
|
||||
|
||||
@interface EmailDoCoMoResultParser : DoCoMoResultParser {
|
||||
@interface EmailDoCoMoResultParser : ResultParser {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#import "EmailDoCoMoResultParser.h"
|
||||
#import "EmailParsedResult.h"
|
||||
#import "CBarcodeFormat.h"
|
||||
#import "ArrayAndStringCategories.h"
|
||||
|
||||
@implementation EmailDoCoMoResultParser
|
||||
|
||||
|
@ -35,17 +36,17 @@
|
|||
if (foundRange.location == NSNotFound) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
NSString *to = [s fieldWithPrefix:@"TO:"];
|
||||
if (to == nil) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
EmailParsedResult *result = [[EmailParsedResult alloc] init];
|
||||
result.to = to;
|
||||
result.subject = [s fieldWithPrefix:@"SUB:"];
|
||||
result.body = [s fieldWithPrefix:@"BODY:"];
|
||||
|
||||
|
||||
return [result autorelease];
|
||||
}
|
||||
|
||||
|
|
|
@ -20,9 +20,9 @@
|
|||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "DoCoMoResultParser.h"
|
||||
#import "ResultParser.h"
|
||||
|
||||
@interface MeCardParser : DoCoMoResultParser {
|
||||
@interface MeCardParser : ResultParser {
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#import "MeCardParser.h"
|
||||
#import "BusinessCardParsedResult.h"
|
||||
#import "CBarcodeFormat.h"
|
||||
#import "ArrayAndStringCategories.h"
|
||||
|
||||
@interface MeCardParser (Private)
|
||||
|
||||
|
@ -56,12 +57,12 @@
|
|||
if (foundRange.location == NSNotFound) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
NSString *name = [[s fieldWithPrefix:@"N:"] stringWithTrimmedWhitespace];
|
||||
if (name == nil) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
BusinessCardParsedResult *result = [[BusinessCardParsedResult alloc] init];
|
||||
result.names = [NSArray arrayWithObject:name];
|
||||
result.pronunciation = [[s fieldWithPrefix:@"SOUND:"] stringWithTrimmedWhitespace];
|
||||
|
@ -80,7 +81,7 @@
|
|||
result.url = [[s fieldWithPrefix:@"URL:"] stringWithTrimmedWhitespace];
|
||||
result.organization = [[s fieldWithPrefix:@"ORG:"] stringWithTrimmedWhitespace];
|
||||
result.jobTitle = [s fieldWithPrefix:@"TITLE:"];
|
||||
|
||||
|
||||
return [result autorelease];
|
||||
}
|
||||
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
#import "CBarcodeFormat.h"
|
||||
#import "ProductResultParser.h"
|
||||
#import "BizcardResultParser.h"
|
||||
#import "AddressBookAUResultParser.h"
|
||||
#import "VCardResultParser.h"
|
||||
|
||||
@implementation UniversalResultParser
|
||||
static NSMutableArray *sTheResultParsers = nil;
|
||||
|
@ -45,6 +47,8 @@ static NSMutableArray *sTheResultParsers = nil;
|
|||
[self addParserClass:[BookmarkDoCoMoResultParser class]];
|
||||
[self addParserClass:[MeCardParser class]];
|
||||
[self addParserClass:[EmailDoCoMoResultParser class]];
|
||||
[self addParserClass:[AddressBookAUResultParser class]];
|
||||
[self addParserClass:[VCardResultParser class]];
|
||||
[self addParserClass:[BizcardResultParser class]];
|
||||
[self addParserClass:[PlainEmailResultParser class]];
|
||||
[self addParserClass:[TelResultParser class]];
|
||||
|
@ -81,7 +85,4 @@ static NSMutableArray *sTheResultParsers = nil;
|
|||
return [self parsedResultForString:theString format:BarcodeFormat_None];
|
||||
}
|
||||
|
||||
-(void)dealloc {
|
||||
[super dealloc];
|
||||
}
|
||||
@end
|
||||
|
|
30
iphone/ZXingWidget/Classes/resultParsers/VCardResultParser.h
Normal file
30
iphone/ZXingWidget/Classes/resultParsers/VCardResultParser.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
//
|
||||
// VCardResultParser.h
|
||||
// ZXing
|
||||
//
|
||||
// Created by George Nachman on 7/7/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 <UIKit/UIKit.h>
|
||||
#import "ResultParser.h"
|
||||
|
||||
@interface VCardResultParser : ResultParser {
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
435
iphone/ZXingWidget/Classes/resultParsers/VCardResultParser.m
Normal file
435
iphone/ZXingWidget/Classes/resultParsers/VCardResultParser.m
Normal file
|
@ -0,0 +1,435 @@
|
|||
//
|
||||
// VCardResultParser.m
|
||||
// ZXing
|
||||
//
|
||||
// Ported to Objective-C by George Nachman on 7/19/2011.
|
||||
/*
|
||||
* Copyright 2008 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 "BusinessCardParsedResult.h"
|
||||
#import "CBarcodeFormat.h"
|
||||
#import "ResultParser.h"
|
||||
#import "AddressBookAUResultParser.h"
|
||||
#import "VCardResultParser.h"
|
||||
#import "ArrayAndStringCategories.h"
|
||||
|
||||
@interface NSString (VCardResultParser)
|
||||
|
||||
// Extract a single VCard value from this with a given prefix.
|
||||
- (NSString *)vcardValueForFieldWithPrefix:(NSString *)prefix;
|
||||
|
||||
// Extracts an array of VCard values from this string with a given prefix.
|
||||
- (NSArray *)vcardValuesForFieldWithPrefix:(NSString *)prefix;
|
||||
|
||||
// Returns true if the string's value is a well-formed date.
|
||||
- (BOOL)isVCardDate;
|
||||
|
||||
// Returns the starting index (or NSNotFound) of the given substring not
|
||||
// before index |offset|.
|
||||
- (NSUInteger)vcardIndexOf:(NSString*)substr startingAt:(int)offset;
|
||||
|
||||
// Assuming this string is in quoted printable in the character set |charset|,
|
||||
// decode the QP encoding and convert to NSString's native character set.
|
||||
- (NSString *)vcardStringFromQuotedPrintableWithCharset:(NSString *)charset;
|
||||
|
||||
// Strip out \r. Also strip out \n plus one character following it if possible.
|
||||
- (NSString *)vcardStringWithoutContinuationCRLF;
|
||||
|
||||
// Split up key-value strings on = sign.
|
||||
- (NSString *)vcardKeyComponent;
|
||||
- (NSString *)vcardValueComponent;
|
||||
@end
|
||||
|
||||
@interface NSArray (VCardResultParser)
|
||||
|
||||
// Reformat VCard names from a semicolon-delimited list to a human-readable
|
||||
// name.
|
||||
- (NSArray *)vcardArrayWithFormattedNames;
|
||||
// Reformat VCard addresses from a semicolon-delimited list to a human-readable
|
||||
// name.
|
||||
- (NSArray *)vcardArrayWithFormattedAddresses;
|
||||
|
||||
@end
|
||||
|
||||
// Parses contact information formatted according to the VCard (2.1) format.
|
||||
// This is not a complete implementation but should parse information as
|
||||
// commonly encoded in 2D barcodes.
|
||||
//
|
||||
// Originally by Sean Owen. Adapted to Objective-C by George Nachman.
|
||||
//
|
||||
@implementation VCardResultParser
|
||||
|
||||
+ (void)load {
|
||||
[ResultParser registerResultParserClass:self];
|
||||
}
|
||||
|
||||
+ (ParsedResult *)parsedResultForString:(NSString *)rawText
|
||||
format:(BarcodeFormat)format {
|
||||
// Although we should insist on the raw text ending with "END:VCARD",
|
||||
// there's no reason to throw out everything else we parsed just because
|
||||
// this was omitted. In fact, Eclair is doing just that, and we can't parse
|
||||
// its contacts without this leniency.
|
||||
if (rawText == nil || ![rawText hasPrefix:@"BEGIN:VCARD"]) {
|
||||
return nil;
|
||||
}
|
||||
NSArray *names = [[rawText vcardValuesForFieldWithPrefix:@"FN"]
|
||||
stringArrayWithTrimmedWhitespace];
|
||||
if ([names count] == 0) {
|
||||
// If no display names found, look for regular name fields and format them
|
||||
names = [[rawText vcardValuesForFieldWithPrefix:@"N"]
|
||||
stringArrayWithTrimmedWhitespace];
|
||||
}
|
||||
names = [names vcardArrayWithFormattedNames];
|
||||
NSArray *phoneNumbers = [[rawText vcardValuesForFieldWithPrefix:@"TEL"] stringArrayWithTrimmedWhitespace];
|
||||
NSArray *emails = [[rawText vcardValuesForFieldWithPrefix:@"EMAIL"] stringArrayWithTrimmedWhitespace];
|
||||
NSString *note = [rawText vcardValueForFieldWithPrefix:@"NOTE"];
|
||||
NSArray *addresses = [[[rawText vcardValuesForFieldWithPrefix:@"ADR"] stringArrayWithTrimmedWhitespace]
|
||||
vcardArrayWithFormattedAddresses];
|
||||
NSString *org = [[rawText vcardValueForFieldWithPrefix:@"ORG"] stringWithTrimmedWhitespace];
|
||||
NSString *birthday = [[rawText vcardValueForFieldWithPrefix:@"BDAY"]stringWithTrimmedWhitespace];
|
||||
if (![birthday isVCardDate]) {
|
||||
birthday = nil;
|
||||
}
|
||||
NSString *title = [[rawText vcardValueForFieldWithPrefix:@"TITLE"]stringWithTrimmedWhitespace];
|
||||
NSString *url = [[rawText vcardValueForFieldWithPrefix:@"URL"] stringWithTrimmedWhitespace];
|
||||
|
||||
BusinessCardParsedResult *result =
|
||||
[[[BusinessCardParsedResult alloc] init] autorelease];
|
||||
|
||||
if ([names count]) {
|
||||
result.names = names;
|
||||
}
|
||||
if ([phoneNumbers count]) {
|
||||
result.phoneNumbers = phoneNumbers;
|
||||
}
|
||||
if ([emails count]) {
|
||||
result.emails = emails;
|
||||
}
|
||||
if ([note length]) {
|
||||
result.note = note;
|
||||
}
|
||||
if ([addresses count]) {
|
||||
result.addresses = addresses;
|
||||
}
|
||||
if ([org length]) {
|
||||
result.organization = org;
|
||||
}
|
||||
if (birthday) {
|
||||
result.birthday = birthday;
|
||||
}
|
||||
if ([title length]) {
|
||||
result.jobTitle = title;
|
||||
}
|
||||
if ([url length]) {
|
||||
result.url = url;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation NSString (VCardResultParser)
|
||||
|
||||
- (NSUInteger)vcardIndexOf:(NSString*)substr startingAt:(int)offset {
|
||||
NSRange temp = NSMakeRange(offset, [self length] - offset);
|
||||
NSRange r = [self rangeOfString:substr
|
||||
options:0
|
||||
range:temp];
|
||||
return r.location;
|
||||
}
|
||||
|
||||
- (NSString *)vcardKeyComponent {
|
||||
NSUInteger equals = [self vcardIndexOf:@"=" startingAt:0];
|
||||
if (equals != NSNotFound) {
|
||||
return [self substringWithRange:NSMakeRange(0, equals)];
|
||||
} else {
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
- (NSString *)vcardValueComponent {
|
||||
NSUInteger equals = [self vcardIndexOf:@"=" startingAt:0];
|
||||
if (equals != NSNotFound) {
|
||||
return [self substringWithRange:NSMakeRange(equals + 1,
|
||||
[self length] - equals - 1)];
|
||||
} else {
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
- (NSDictionary*)parsedFieldMetadata {
|
||||
NSArray *parts = [self componentsSeparatedByCharactersInSet:
|
||||
[NSCharacterSet characterSetWithCharactersInString:@";:"]];
|
||||
NSMutableDictionary *result = [NSMutableDictionary dictionary];
|
||||
for (NSString *part in parts) {
|
||||
NSString *key = [part vcardKeyComponent];
|
||||
NSString *value = [part vcardValueComponent];
|
||||
if (key && value) {
|
||||
[result setObject:value forKey:key];
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
- (NSArray *)vcardValuesForFieldWithPrefix:(NSString *)prefix {
|
||||
NSMutableArray *matches = [NSMutableArray array];
|
||||
NSUInteger i = 0;
|
||||
NSUInteger myLength = [self length];
|
||||
unichar c;
|
||||
while (i < myLength) {
|
||||
i = [self vcardIndexOf:prefix startingAt:i];
|
||||
if (i == NSNotFound) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (i > 0 && [self characterAtIndex:i - 1] != '\n') {
|
||||
// This didn't start a new token: we matched in the middle of
|
||||
// something.
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
i += [prefix length]; // Skip past the prefix.
|
||||
c = [self characterAtIndex:i];
|
||||
if (c != ':' && c != ';') {
|
||||
// What we found wasn't actually a prefix.
|
||||
continue;
|
||||
}
|
||||
|
||||
const NSUInteger metadataStart = i;
|
||||
// Skip until we find a colon.
|
||||
while ([self characterAtIndex:i] != ':') {
|
||||
i++;
|
||||
}
|
||||
|
||||
// Extract key-value metadata fields between the ; and the : after the
|
||||
// prefix.
|
||||
BOOL quotedPrintable = NO;
|
||||
NSString *quotedPrintableCharset = @"ASCII";
|
||||
if (i >= metadataStart + 1) {
|
||||
NSString *metaData = [self substringWithRange:
|
||||
NSMakeRange(metadataStart + 1,
|
||||
i - (metadataStart + 1))];
|
||||
NSDictionary *metaDataDict = [metaData parsedFieldMetadata];
|
||||
NSString *encoding = [metaDataDict objectForKey:@"ENCODING"];
|
||||
NSString *charset = [metaDataDict objectForKey:@"CHARSET"];
|
||||
if ([encoding isEqualToString:@"QUOTED-PRINTABLE"]) {
|
||||
quotedPrintable = YES;
|
||||
if (charset) {
|
||||
quotedPrintableCharset = charset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
i++; // Skip the colon.
|
||||
|
||||
const NSUInteger matchStart = i; // Found the start of a match here.
|
||||
|
||||
while ((i = [self vcardIndexOf:@"\n" startingAt:i]) != NSNotFound) {
|
||||
if (i + 1 < [self length] &&
|
||||
([self characterAtIndex:i + 1] == ' ' ||
|
||||
[self characterAtIndex:i + 1] == '\t')) {
|
||||
// If it's followed by a tab or space, ignore them.
|
||||
i += 2;
|
||||
} else if (quotedPrintable &&
|
||||
i >= 2 &&
|
||||
([self characterAtIndex:i-1] == '=' ||
|
||||
[self characterAtIndex:i-2] == '=')) {
|
||||
// Indicates this is a quoted-printable continuation so
|
||||
// ignore the newline.
|
||||
i++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i == NSNotFound) {
|
||||
// No terminating character.
|
||||
break;
|
||||
} else if (i > matchStart) {
|
||||
// Found a legal line. Add it to the output. i must be greater than
|
||||
// 0 because matchStart is unsigned.
|
||||
if ([self characterAtIndex:i-1] == '\r') {
|
||||
i--; // Back up over \r if present.
|
||||
}
|
||||
NSUInteger rangeLength;
|
||||
if (i >= matchStart) {
|
||||
rangeLength = i - matchStart;
|
||||
} else {
|
||||
rangeLength = 0;
|
||||
}
|
||||
NSString *element = [self substringWithRange:
|
||||
NSMakeRange(matchStart, rangeLength)];
|
||||
if (quotedPrintable) {
|
||||
element = [element vcardStringFromQuotedPrintableWithCharset:
|
||||
quotedPrintableCharset];
|
||||
} else {
|
||||
element = [element vcardStringWithoutContinuationCRLF];
|
||||
}
|
||||
[matches addObject:element];
|
||||
i++;
|
||||
} else {
|
||||
// Zero-length line.
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
return matches;
|
||||
}
|
||||
|
||||
- (NSString *)vcardStringWithoutContinuationCRLF {
|
||||
int length = [self length];
|
||||
NSMutableString *result = [NSMutableString stringWithCapacity:length];
|
||||
BOOL lastWasLF = NO;
|
||||
for (int i = 0; i < length; i++) {
|
||||
if (lastWasLF) {
|
||||
lastWasLF = NO;
|
||||
continue;
|
||||
}
|
||||
unichar c = [self characterAtIndex:i];
|
||||
lastWasLF = NO;
|
||||
switch (c) {
|
||||
case '\n':
|
||||
lastWasLF = YES;
|
||||
break;
|
||||
case '\r':
|
||||
break;
|
||||
default:
|
||||
[result appendString:[NSString stringWithCharacters:&c
|
||||
length:1]];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
- (NSString *)vcardStringFromQuotedPrintableWithCharset:(NSString *)charset {
|
||||
int length = [self length];
|
||||
NSMutableData *temp = [NSMutableData dataWithCapacity:length];
|
||||
for (int i = 0; i < length; i++) {
|
||||
unichar c = [self characterAtIndex:i];
|
||||
switch (c) {
|
||||
case '\r':
|
||||
case '\n':
|
||||
break;
|
||||
case '=':
|
||||
if (i < length - 2) {
|
||||
unichar nextChar = [self characterAtIndex:i+1];
|
||||
if (nextChar == '\r' || nextChar == '\n') {
|
||||
// Ignore, it's just a continuation symbol.
|
||||
} else {
|
||||
NSString *hexstr =
|
||||
[self substringWithRange:NSMakeRange(i+1, 2)];
|
||||
NSScanner *scanner =
|
||||
[NSScanner scannerWithString:hexstr];
|
||||
unsigned result;
|
||||
if ([scanner scanHexInt:&result]) {
|
||||
unsigned char parsedChar = result;
|
||||
[temp appendBytes:&parsedChar length:1];
|
||||
}
|
||||
|
||||
i += 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
[temp appendBytes:&c length:1];
|
||||
}
|
||||
}
|
||||
|
||||
NSStringEncoding encoding;
|
||||
encoding = CFStringConvertEncodingToNSStringEncoding(
|
||||
CFStringConvertIANACharSetNameToEncoding((CFStringRef) charset));
|
||||
return [[[NSString alloc] initWithData:temp
|
||||
encoding:encoding] autorelease];
|
||||
}
|
||||
|
||||
- (NSString *)vcardValueForFieldWithPrefix:(NSString *)prefix {
|
||||
NSArray *values = [self vcardValuesForFieldWithPrefix:prefix];
|
||||
return [values count] ? [values objectAtIndex:0] : @"";
|
||||
}
|
||||
|
||||
- (BOOL)rangeIsDigits:(NSRange)range {
|
||||
for (NSUInteger i = range.location;
|
||||
i < range.location + range.length;
|
||||
i++) {
|
||||
unichar c = [self characterAtIndex:i];
|
||||
if (c < '0' || c > '9') {
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL)isVCardDate {
|
||||
// Not really sure this is true but matches practice
|
||||
if ([self length] == 8 && [self rangeIsDigits:NSMakeRange(0, 8)]) {
|
||||
// Matches YYYYMMDD
|
||||
return YES;
|
||||
} else if ([self length] == 10 &&
|
||||
[self characterAtIndex:4] == '-' &&
|
||||
[self characterAtIndex:7] == '-' &&
|
||||
[self rangeIsDigits:NSMakeRange(0, 4)] &&
|
||||
[self rangeIsDigits:NSMakeRange(5, 2)] &&
|
||||
[self rangeIsDigits:NSMakeRange(8, 2)]) {
|
||||
// Matches YYYY-MM-DD
|
||||
return YES;
|
||||
} else {
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation NSArray (VCardResultParser)
|
||||
|
||||
- (NSArray *)vcardArrayWithFormattedAddresses {
|
||||
NSMutableArray* result = [NSMutableArray array];
|
||||
for (NSString* address in self) {
|
||||
[result addObject:
|
||||
[[address stringByReplacingOccurrencesOfString:@";"
|
||||
withString:@" "]
|
||||
stringWithTrimmedWhitespace]];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Formats name fields of the form "Public;John;Q.;Reverend;III" into a form
|
||||
// like "Reverend John Q. Public III".
|
||||
- (NSArray *)vcardArrayWithFormattedNames {
|
||||
NSMutableArray *result = [NSMutableArray array];
|
||||
for (NSString *name in self) {
|
||||
NSArray *components = [name componentsSeparatedByString:@";"];
|
||||
int newOrder[] = { 3, 1, 2, 0, 4 };
|
||||
int numReorderItems = sizeof(newOrder) / sizeof(int);
|
||||
NSMutableString *formattedName =
|
||||
[NSMutableString stringWithCapacity:[name length]];
|
||||
int n = [components count];
|
||||
for (int i = 0; i < numReorderItems; i++) {
|
||||
int j = newOrder[i];
|
||||
if (n > j) {
|
||||
[formattedName appendString:@" "];
|
||||
[formattedName appendString:[components objectAtIndex:j]];
|
||||
}
|
||||
}
|
||||
[result addObject:[formattedName stringWithTrimmedWhitespace]];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@end
|
113
iphone/ZXingWidget/Tests/AddressBookAUResultParserTests.m
Normal file
113
iphone/ZXingWidget/Tests/AddressBookAUResultParserTests.m
Normal file
|
@ -0,0 +1,113 @@
|
|||
//
|
||||
// AddressBookAUTests.m
|
||||
// ZXingWidget
|
||||
//
|
||||
// Created by George Nachman on 7/27/11.
|
||||
// Copyright 2011 ZXing Authors. All rights reserved.
|
||||
//
|
||||
|
||||
#import <SenTestingKit/SenTestingKit.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "AddressBookAUResultParser.h"
|
||||
#import "BusinessCardParsedResult.h"
|
||||
|
||||
@interface AddressBookAUResultParserTests : SenTestCase
|
||||
@end
|
||||
|
||||
@implementation AddressBookAUResultParserTests
|
||||
|
||||
- (void)testWellFormedAddressBookAU {
|
||||
NSString *msg =
|
||||
@"NAME1:Name One\r"
|
||||
@"NAME2:Name Two\r"
|
||||
@"NAME3:Name Three\r" // ignored
|
||||
@"TEL1:1111111\r"
|
||||
@"TEL2:2222222\r"
|
||||
@"TEL3:3333333\r"
|
||||
@"TEL4:4444444\r" // ignored
|
||||
@"MAIL1:1@1.com\r"
|
||||
@"MAIL2:2@2.com\r"
|
||||
@"MAIL3:3@3.com\r"
|
||||
@"MAIL4:4@4.com\r" // ignored
|
||||
@"MEMORY:This is a note\r"
|
||||
@"ADD:123 Fake St\r\n";
|
||||
BusinessCardParsedResult *result = (BusinessCardParsedResult *)
|
||||
[AddressBookAUResultParser parsedResultForString:msg
|
||||
format:BarcodeFormat_QR_CODE];
|
||||
STAssertEquals(1U, result.names.count, @"Wrong number of names %d",
|
||||
result.names.count);
|
||||
STAssertTrue([[result.names objectAtIndex:0] isEqualToString:@"Name One"],
|
||||
@"Wrong name one %@", [result.names objectAtIndex:0]);
|
||||
STAssertTrue([result.pronunciation isEqualToString:@"Name Two"],
|
||||
@"Wrong pronunciation %@", result.pronunciation);
|
||||
STAssertEquals(3U, result.phoneNumbers.count,
|
||||
@"Wrong number of phone numbers %d",
|
||||
result.phoneNumbers.count);
|
||||
STAssertTrue(
|
||||
[[result.phoneNumbers objectAtIndex:0] isEqualToString:@"1111111"],
|
||||
@"Wrong phone number 1 %@", [result.phoneNumbers objectAtIndex:0]);
|
||||
STAssertTrue(
|
||||
[[result.phoneNumbers objectAtIndex:1] isEqualToString:@"2222222"],
|
||||
@"Wrong phone number 2 %@", [result.phoneNumbers objectAtIndex:1]);
|
||||
STAssertTrue(
|
||||
[[result.phoneNumbers objectAtIndex:2] isEqualToString:@"3333333"],
|
||||
@"Wrong phone number 3 %@", [result.phoneNumbers objectAtIndex:2]);
|
||||
STAssertEquals(3U, result.emails.count,
|
||||
@"Wrong number of emails %d", result.emails.count);
|
||||
STAssertTrue([[result.emails objectAtIndex:0] isEqualToString:@"1@1.com"],
|
||||
@"Wrong email 1 %@", [result.emails objectAtIndex:0]);
|
||||
STAssertTrue([[result.emails objectAtIndex:1] isEqualToString:@"2@2.com"],
|
||||
@"Wrong email 2 %@", [result.emails objectAtIndex:1]);
|
||||
STAssertTrue([[result.emails objectAtIndex:2] isEqualToString:@"3@3.com"],
|
||||
@"Wrong email 3 %@", [result.emails objectAtIndex:2]);
|
||||
STAssertTrue([result.note isEqualToString:@"This is a note"],
|
||||
@"Wrong note %@", result.note);
|
||||
STAssertEquals(1U, result.addresses.count, @"Wrong number of addresses %d",
|
||||
result.addresses.count);
|
||||
STAssertTrue(
|
||||
[[result.addresses objectAtIndex:0] isEqualToString:@"123 Fake St"],
|
||||
@"Wrong address %@", [result.addresses objectAtIndex:0]);
|
||||
}
|
||||
|
||||
- (void)testMissingNewlineAddressBookAU {
|
||||
NSString *msg =
|
||||
@"NAME1:Name One\r"
|
||||
@"NAME2:Name Two\r"
|
||||
@"NAME3:Name Three\r"
|
||||
@"TEL1:1111111\r"
|
||||
@"TEL2:2222222\r"
|
||||
@"TEL3:3333333\r"
|
||||
@"TEL4:4444444\r"
|
||||
@"MAIL1:1@1.com\r"
|
||||
@"MAIL2:2@2.com\r"
|
||||
@"MAIL3:3@3.com\r"
|
||||
@"MAIL4:4@4.com\r"
|
||||
@"MEMORY:This is a note\r"
|
||||
@"ADD:123 Fake St\r";
|
||||
BusinessCardParsedResult *result = (BusinessCardParsedResult *)
|
||||
[AddressBookAUResultParser parsedResultForString:msg
|
||||
format:BarcodeFormat_QR_CODE];
|
||||
STAssertNil(result, @"Bogus string matched");
|
||||
}
|
||||
|
||||
- (void)testMalformedAddressBookAU {
|
||||
NSString *msg =
|
||||
@"NAME1:Name One\r"
|
||||
@"NAME2:Name Two\r"
|
||||
@"NAME3:Name Three\r" // ignored
|
||||
@"TEL1:1111111\r"
|
||||
@"TEL2:2222222\r"
|
||||
@"TEL3:3333333\r"
|
||||
@"TEL4:4444444\r" // ignored
|
||||
@"MAIL1:1@1.com\r"
|
||||
@"MAIL2:2@2.com\r"
|
||||
@"MAIL3:3@3.com\r"
|
||||
@"MAIL4:4@4.com\r" // ignored
|
||||
@"ADD:123 Fake St";
|
||||
BusinessCardParsedResult *result = (BusinessCardParsedResult *)
|
||||
[AddressBookAUResultParser parsedResultForString:msg
|
||||
format:BarcodeFormat_QR_CODE];
|
||||
STAssertNil(result, @"Bogus string matched");
|
||||
}
|
||||
|
||||
@end
|
135
iphone/ZXingWidget/Tests/BizcardResultParserTests.m
Normal file
135
iphone/ZXingWidget/Tests/BizcardResultParserTests.m
Normal file
|
@ -0,0 +1,135 @@
|
|||
//
|
||||
// BizcardTests.m
|
||||
// ZXingWidget
|
||||
//
|
||||
// Created by George Nachman on 7/27/11.
|
||||
// Copyright 2011 ZXing Authors. All rights reserved.
|
||||
//
|
||||
|
||||
#import <SenTestingKit/SenTestingKit.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "BizcardResultParser.h"
|
||||
#import "BusinessCardParsedResult.h"
|
||||
|
||||
@interface BizcardResultParserTests : SenTestCase
|
||||
@end
|
||||
|
||||
@implementation BizcardResultParserTests
|
||||
|
||||
- (void)testWellFormedBizcard {
|
||||
NSString *msg =
|
||||
@"BIZCARD:;"
|
||||
@"N:Firstname;"
|
||||
@"X:Lastname;"
|
||||
@"T:Title;"
|
||||
@"C:Org;"
|
||||
@"A:Addr 1;"
|
||||
@"A:Addr 2;"
|
||||
@"B:1111111;"
|
||||
@"M:2222222;"
|
||||
@"F:3333333;"
|
||||
@"E:1@1.com;";
|
||||
BusinessCardParsedResult *result = (BusinessCardParsedResult *)
|
||||
[BizcardResultParser parsedResultForString:msg
|
||||
format:BarcodeFormat_QR_CODE];
|
||||
STAssertEquals(1U, result.names.count, @"Wrong number of names %d",
|
||||
result.names.count);
|
||||
STAssertTrue(
|
||||
[[result.names objectAtIndex:0] isEqualToString:@"Firstname Lastname"],
|
||||
@"Name one is %@", [result.names objectAtIndex:0]);
|
||||
STAssertTrue([result.jobTitle isEqualToString:@"Title"],
|
||||
@"Title is %@", result.jobTitle);
|
||||
STAssertTrue([result.organization isEqualToString:@"Org"],
|
||||
@"Organization is %@", result.organization);
|
||||
STAssertEquals(2U, result.addresses.count, @"Wrong number of addresses %d",
|
||||
result.addresses.count);
|
||||
STAssertTrue([[result.addresses objectAtIndex:0] isEqualToString:@"Addr 1"],
|
||||
@"Wrong address %@", [result.addresses objectAtIndex:0]);
|
||||
STAssertTrue([[result.addresses objectAtIndex:1] isEqualToString:@"Addr 2"],
|
||||
@"Wrong address %@", [result.addresses objectAtIndex:0]);
|
||||
STAssertEquals(3U, result.phoneNumbers.count,
|
||||
@"Wrong number of phone numbers %d",
|
||||
result.phoneNumbers.count);
|
||||
STAssertTrue(
|
||||
[[result.phoneNumbers objectAtIndex:0] isEqualToString:@"1111111"],
|
||||
@"Phone number 1 is %@", [result.phoneNumbers objectAtIndex:0]);
|
||||
STAssertTrue(
|
||||
[[result.phoneNumbers objectAtIndex:1] isEqualToString:@"2222222"],
|
||||
@"Phone number 2 is %@", [result.phoneNumbers objectAtIndex:1]);
|
||||
STAssertTrue(
|
||||
[[result.phoneNumbers objectAtIndex:2] isEqualToString:@"3333333"],
|
||||
@"Phone number 3 is %@", [result.phoneNumbers objectAtIndex:2]);
|
||||
STAssertEquals(1U, result.emails.count,
|
||||
@"Wrong number of emails %d", result.emails.count);
|
||||
STAssertTrue([[result.emails objectAtIndex:0] isEqualToString:@"1@1.com"],
|
||||
@"Email 1 is %@", [result.emails objectAtIndex:0]);
|
||||
}
|
||||
|
||||
- (void)testExtraWhitespaceBizcard {
|
||||
NSString *msg =
|
||||
@"BIZCARD:;"
|
||||
@"N:Firstname ;"
|
||||
@"X:Lastname\r;"
|
||||
@"T:Title\n;"
|
||||
@"C:Org\r\n;"
|
||||
@"A: Addr 1;"
|
||||
@"A:\rAddr 2;"
|
||||
@"B:\n1111111;"
|
||||
@"M:\r\n2222222;"
|
||||
@"F:\t3333333;"
|
||||
@"E:1@1.com\t;";
|
||||
BusinessCardParsedResult *result = (BusinessCardParsedResult *)
|
||||
[BizcardResultParser parsedResultForString:msg
|
||||
format:BarcodeFormat_QR_CODE];
|
||||
STAssertEquals(1U, result.names.count, @"Wrong number of names %d",
|
||||
result.names.count);
|
||||
STAssertTrue(
|
||||
[[result.names objectAtIndex:0] isEqualToString:@"Firstname Lastname"],
|
||||
@"Name one is %@", [result.names objectAtIndex:0]);
|
||||
STAssertTrue([result.jobTitle isEqualToString:@"Title"],
|
||||
@"Title is %@", result.jobTitle);
|
||||
STAssertTrue([result.organization isEqualToString:@"Org"],
|
||||
@"Organization is %@", result.organization);
|
||||
STAssertEquals(2U, result.addresses.count, @"Wrong number of addresses %d",
|
||||
result.addresses.count);
|
||||
STAssertTrue([[result.addresses objectAtIndex:0] isEqualToString:@"Addr 1"],
|
||||
@"Wrong address %@", [result.addresses objectAtIndex:0]);
|
||||
STAssertTrue([[result.addresses objectAtIndex:1] isEqualToString:@"Addr 2"],
|
||||
@"Wrong address %@", [result.addresses objectAtIndex:0]);
|
||||
STAssertEquals(3U, result.phoneNumbers.count,
|
||||
@"Wrong number of phone numbers %d",
|
||||
result.phoneNumbers.count);
|
||||
STAssertTrue(
|
||||
[[result.phoneNumbers objectAtIndex:0] isEqualToString:@"1111111"],
|
||||
@"Phone number 1 is %@", [result.phoneNumbers objectAtIndex:0]);
|
||||
STAssertTrue(
|
||||
[[result.phoneNumbers objectAtIndex:1] isEqualToString:@"2222222"],
|
||||
@"Phone number 2 is %@", [result.phoneNumbers objectAtIndex:1]);
|
||||
STAssertTrue(
|
||||
[[result.phoneNumbers objectAtIndex:2] isEqualToString:@"3333333"],
|
||||
@"Phone number 3 is %@", [result.phoneNumbers objectAtIndex:2]);
|
||||
STAssertEquals(1U, result.emails.count,
|
||||
@"Wrong number of emails %d", result.emails.count);
|
||||
STAssertTrue([[result.emails objectAtIndex:0] isEqualToString:@"1@1.com"],
|
||||
@"Email 1 is %@", [result.emails objectAtIndex:0]);
|
||||
}
|
||||
|
||||
- (void)testMalformedBizcard {
|
||||
NSString *msg =
|
||||
@"N:Name One;"
|
||||
@"X:Name Two;"
|
||||
@"T:Title;"
|
||||
@"C:Org;"
|
||||
@"A:Addr 1;"
|
||||
@"A:Addr 2;"
|
||||
@"B:1111111;"
|
||||
@"M:2222222;"
|
||||
@"F:3333333;"
|
||||
@"E:1@1.com;";
|
||||
BusinessCardParsedResult *result = (BusinessCardParsedResult *)
|
||||
[BizcardResultParser parsedResultForString:msg
|
||||
format:BarcodeFormat_QR_CODE];
|
||||
STAssertNil(result, @"Bogus string matched");
|
||||
}
|
||||
|
||||
@end
|
50
iphone/ZXingWidget/Tests/BookmarkDoCoMoTests.m
Normal file
50
iphone/ZXingWidget/Tests/BookmarkDoCoMoTests.m
Normal file
|
@ -0,0 +1,50 @@
|
|||
//
|
||||
// BookmarkDoCoMoTests.m
|
||||
// ZXingWidget
|
||||
//
|
||||
// Created by George Nachman on 7/27/11.
|
||||
// Copyright 2011 ZXing Authors. All rights reserved.
|
||||
//
|
||||
|
||||
#import <SenTestingKit/SenTestingKit.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "BookmarkDoCoMoResultParser.h"
|
||||
#import "URIParsedResult.h"
|
||||
|
||||
@interface BookmarkDoCoMoTests : SenTestCase
|
||||
@end
|
||||
|
||||
@implementation BookmarkDoCoMoTests
|
||||
|
||||
- (void)testWellFormedBookmarkDoCoMo {
|
||||
NSString *msg =
|
||||
@"MEBKM:;"
|
||||
@"URL:http://www.example.com/;"
|
||||
@"TITLE:The Title;";
|
||||
URIParsedResult *result = (URIParsedResult *)
|
||||
[BookmarkDoCoMoResultParser parsedResultForString:msg
|
||||
format:BarcodeFormat_QR_CODE];
|
||||
STAssertTrue([result.urlString isEqualToString:@"http://www.example.com/"],
|
||||
@"Wrong URL string %@", result.urlString);
|
||||
STAssertTrue([[result.URL host] isEqualToString:@"www.example.com"],
|
||||
@"Wrong URL host %@", [result.URL host]);
|
||||
STAssertTrue([[result.URL path] isEqualToString:@"/"],
|
||||
@"Wrong URL path %@", [result.URL path]);
|
||||
STAssertTrue([[result.URL scheme] isEqualToString:@"http"],
|
||||
@"Wrong URL scheme %@", [result.URL scheme]);
|
||||
STAssertTrue([result.title isEqualToString:@"The Title"],
|
||||
@"Wrong title %@", result.title);
|
||||
}
|
||||
|
||||
- (void)testMalformedBookmarkDoCoMo {
|
||||
NSString *msg =
|
||||
@"URL:http://www.example.com/;"
|
||||
@"TITLE:The Title";
|
||||
URIParsedResult *result = (URIParsedResult *)
|
||||
[BookmarkDoCoMoResultParser parsedResultForString:msg
|
||||
format:BarcodeFormat_QR_CODE];
|
||||
STAssertNil(result, @"Bogus string matched.");
|
||||
}
|
||||
|
||||
|
||||
@end
|
48
iphone/ZXingWidget/Tests/EmailDoCoMoResultParserTests.m
Normal file
48
iphone/ZXingWidget/Tests/EmailDoCoMoResultParserTests.m
Normal file
|
@ -0,0 +1,48 @@
|
|||
//
|
||||
// EmailDoCoMoTests.m
|
||||
// ZXingWidget
|
||||
//
|
||||
// Created by George Nachman on 7/27/11.
|
||||
// Copyright 2011 ZXing Authors. All rights reserved.
|
||||
//
|
||||
|
||||
#import <SenTestingKit/SenTestingKit.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "EmailDoCoMoResultParser.h"
|
||||
#import "EmailParsedResult.h"
|
||||
|
||||
@interface EmailDoCoMoResultParserTests : SenTestCase
|
||||
@end
|
||||
|
||||
@implementation EmailDoCoMoResultParserTests
|
||||
|
||||
- (void)testWellFormedEmailDoCoMo {
|
||||
NSString *msg =
|
||||
@"MATMSG:;"
|
||||
@"TO:addressee@example.com;"
|
||||
@"SUB:subject;"
|
||||
@"BODY:The body\nThe end;";
|
||||
EmailParsedResult *result = (EmailParsedResult *)
|
||||
[EmailDoCoMoResultParser parsedResultForString:msg
|
||||
format:BarcodeFormat_QR_CODE];
|
||||
STAssertTrue([result.to isEqualToString:@"addressee@example.com"],
|
||||
@"Wrong to: is %@", result.to);
|
||||
STAssertTrue([result.subject isEqualToString:@"subject"],
|
||||
@"Wrong subject %@", result.subject);
|
||||
STAssertTrue([result.body isEqualToString:@"The body\nThe end"],
|
||||
@"Wrong body %@", result.subject);
|
||||
}
|
||||
|
||||
- (void)testMalformedEmailDoCoMo {
|
||||
NSString *msg =
|
||||
@"TO:addressee@example.com;"
|
||||
@"SUB:subject;"
|
||||
@"BODY:The body\nThe end;";
|
||||
EmailParsedResult *result = (EmailParsedResult *)
|
||||
[EmailDoCoMoResultParser parsedResultForString:msg
|
||||
format:BarcodeFormat_QR_CODE];
|
||||
STAssertNil(result, @"Bogus string matched.");
|
||||
}
|
||||
|
||||
|
||||
@end
|
111
iphone/ZXingWidget/Tests/MeCardParserTests.m
Normal file
111
iphone/ZXingWidget/Tests/MeCardParserTests.m
Normal file
|
@ -0,0 +1,111 @@
|
|||
//
|
||||
// MeCardParserTests.m
|
||||
// ZXingWidget
|
||||
//
|
||||
// Created by George Nachman on 7/27/11.
|
||||
// Copyright 2011 ZXing Authors. All rights reserved.
|
||||
//
|
||||
|
||||
#import <SenTestingKit/SenTestingKit.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "BusinessCardParsedResult.h"
|
||||
#import "MeCardParser.h"
|
||||
|
||||
@interface MeCardParserTests : SenTestCase
|
||||
@end
|
||||
|
||||
@implementation MeCardParserTests
|
||||
|
||||
- (void)testWellFormedMeCard {
|
||||
NSString *msg =
|
||||
@"MECARD:;"
|
||||
@"N:Name One;"
|
||||
@"SOUND:pronunciation;"
|
||||
@"TEL:1111111;"
|
||||
@"TEL:2222222;"
|
||||
@"TEL:3333333;"
|
||||
@"EMAIL:1@1.com;"
|
||||
@"EMAIL:2@2.com;"
|
||||
@"EMAIL:3@3.com;"
|
||||
@"NOTE:This is a note;"
|
||||
@"ADR:123 Fake St;"
|
||||
@"ADR:234 Fake St;"
|
||||
@"BDAY:19980904;"
|
||||
@"URL:http://example.com/;"
|
||||
@"ORG:Organization;"
|
||||
@"TITLE:Title;";
|
||||
|
||||
BusinessCardParsedResult *result = (BusinessCardParsedResult *)
|
||||
[MeCardParser parsedResultForString:msg
|
||||
format:BarcodeFormat_QR_CODE];
|
||||
STAssertEquals(1U, result.names.count, @"Wrong number of names %d",
|
||||
result.names.count);
|
||||
STAssertTrue([[result.names objectAtIndex:0] isEqualToString:@"Name One"],
|
||||
@"Wrong Name one %@", [result.names objectAtIndex:0]);
|
||||
STAssertTrue([result.pronunciation isEqualToString:@"pronunciation"],
|
||||
@"Wrong pronunciation %@", result.pronunciation);
|
||||
STAssertEquals(3U, result.phoneNumbers.count,
|
||||
@"Wrong number of phone numbers %d",
|
||||
result.phoneNumbers.count);
|
||||
STAssertTrue(
|
||||
[[result.phoneNumbers objectAtIndex:0] isEqualToString:@"1111111"],
|
||||
@"Wrong phone number 1 %@", [result.phoneNumbers objectAtIndex:0]);
|
||||
STAssertTrue(
|
||||
[[result.phoneNumbers objectAtIndex:1] isEqualToString:@"2222222"],
|
||||
@"Wrong phone number 2 %@", [result.phoneNumbers objectAtIndex:1]);
|
||||
STAssertTrue(
|
||||
[[result.phoneNumbers objectAtIndex:2] isEqualToString:@"3333333"],
|
||||
@"Wrong phone number 3 %@", [result.phoneNumbers objectAtIndex:2]);
|
||||
STAssertEquals(3U, result.emails.count,
|
||||
@"Wrong number of emails %d", result.emails.count);
|
||||
STAssertTrue([[result.emails objectAtIndex:0] isEqualToString:@"1@1.com"],
|
||||
@"Wrong email 1 %@", [result.emails objectAtIndex:0]);
|
||||
STAssertTrue([[result.emails objectAtIndex:1] isEqualToString:@"2@2.com"],
|
||||
@"Wrong email 2 %@", [result.emails objectAtIndex:1]);
|
||||
STAssertTrue([[result.emails objectAtIndex:2] isEqualToString:@"3@3.com"],
|
||||
@"Wrong email 3 %@", [result.emails objectAtIndex:2]);
|
||||
STAssertTrue([result.note isEqualToString:@"This is a note"],
|
||||
@"Wrong note %@", result.note);
|
||||
STAssertEquals(2U, result.addresses.count, @"Wrong number of addresses %d",
|
||||
result.addresses.count);
|
||||
STAssertTrue(
|
||||
[[result.addresses objectAtIndex:0] isEqualToString:@"123 Fake St"],
|
||||
@"Wrong address %@", [result.addresses objectAtIndex:0]);
|
||||
STAssertTrue(
|
||||
[[result.addresses objectAtIndex:1] isEqualToString:@"234 Fake St"],
|
||||
@"Wrong address %@", [result.addresses objectAtIndex:1]);
|
||||
STAssertTrue([result.birthday isEqualToString:@"19980904"],
|
||||
@"Wrong birthday %@", result.birthday);
|
||||
STAssertTrue([result.url isEqualToString:@"http://example.com/"],
|
||||
@"Wrong url %@", result.url);
|
||||
STAssertTrue([result.organization isEqualToString:@"Organization"],
|
||||
@"Wrong organization %@", result.organization);
|
||||
STAssertTrue([result.jobTitle isEqualToString:@"Title"],
|
||||
@"Wrong job title %@", result.jobTitle);
|
||||
}
|
||||
|
||||
- (void)testMalformedMeCard {
|
||||
NSString *msg =
|
||||
@"N:Name One;"
|
||||
@"SOUND:pronunciation;"
|
||||
@"TEL1:1111111;"
|
||||
@"TEL2:2222222;"
|
||||
@"TEL3:3333333;"
|
||||
@"EMAIL1:1@1.com;"
|
||||
@"EMAIL2:2@2.com;"
|
||||
@"EMAIL3:3@3.com;"
|
||||
@"NOTE:This is a note;"
|
||||
@"ADR1:123 Fake St;"
|
||||
@"ADR2:234 Fake St;"
|
||||
@"BDAY:19980904;"
|
||||
@"URL:http://example.com/;"
|
||||
@"ORG:Organization;"
|
||||
@"TITLE:Title;";
|
||||
|
||||
BusinessCardParsedResult *result = (BusinessCardParsedResult *)
|
||||
[MeCardParser parsedResultForString:msg
|
||||
format:BarcodeFormat_QR_CODE];
|
||||
STAssertNil(result, @"Bogus string matched.");
|
||||
}
|
||||
|
||||
@end
|
150
iphone/ZXingWidget/Tests/VCardResultParserTests.m
Normal file
150
iphone/ZXingWidget/Tests/VCardResultParserTests.m
Normal file
|
@ -0,0 +1,150 @@
|
|||
//
|
||||
// VCardResultParserTests.m
|
||||
// ZXingWidget
|
||||
//
|
||||
// Created by George Nachman on 7/26/11.
|
||||
// Copyright 2011 ZXing Authors. All rights reserved.
|
||||
//
|
||||
|
||||
#import <SenTestingKit/SenTestingKit.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "VCardResultParser.h"
|
||||
#import "BusinessCardParsedResult.h"
|
||||
|
||||
@interface VCardResultParserTests : SenTestCase
|
||||
@end
|
||||
|
||||
@implementation VCardResultParserTests
|
||||
|
||||
- (void)testVanillaVCard {
|
||||
NSString* msg =
|
||||
@"BEGIN:VCARD\n"
|
||||
@"N:Kennedy;Steve\n"
|
||||
@"TEL:+44 (0)7775 755503\n"
|
||||
@"ADR;HOME:;;Flat 2, 43 Howitt Road, Belsize Park;London;;NW34LU;UK\n"
|
||||
@"ORG:NetTek Ltd;\n"
|
||||
@"TITLE:Consultant\n"
|
||||
@"EMAIL:steve@nettek.co.uk\n"
|
||||
@"URL:www.nettek.co.uk\n"
|
||||
@"EMAIL;IM:MSN:steve@gbnet.net\n"
|
||||
@"NOTE:Testing 1 2 3\n"
|
||||
@"BDAY:19611105\n"
|
||||
@"END:VCARD";
|
||||
BusinessCardParsedResult* b = (BusinessCardParsedResult *)
|
||||
[VCardResultParser parsedResultForString:msg
|
||||
format:0];
|
||||
|
||||
STAssertEquals(1U, b.names.count, @"Should have exactly one name");
|
||||
STAssertTrue([[b.names objectAtIndex:0] isEqualToString:@"Steve Kennedy"],
|
||||
@"Wrong name %@", b.names);
|
||||
STAssertEquals(1U, b.phoneNumbers.count,
|
||||
@"Should have exactly one phone number");
|
||||
STAssertTrue([[b.phoneNumbers objectAtIndex:0] isEqualToString:
|
||||
@"+44 (0)7775 755503"],
|
||||
@"Wrong phone number %@", [b.phoneNumbers objectAtIndex:0]);
|
||||
STAssertEquals(1U, b.addresses.count, @"Should have exactly one address");
|
||||
STAssertTrue([[b.addresses objectAtIndex:0] isEqualToString:
|
||||
@"Flat 2, 43 Howitt Road, Belsize Park London NW34LU UK"],
|
||||
@"Wrong address %@", [b.addresses objectAtIndex:0]);
|
||||
STAssertTrue([b.organization isEqualToString:@"NetTek Ltd;"],
|
||||
@"Wrong organization %@", b.organization);
|
||||
STAssertTrue([b.jobTitle isEqualToString:@"Consultant"],
|
||||
@"Wrong job title %@", b.jobTitle);
|
||||
STAssertEquals(2U, b.emails.count,
|
||||
@"Wrong number of emails %d", b.emails.count);
|
||||
STAssertTrue([[b.emails objectAtIndex:0] isEqualToString:
|
||||
@"steve@nettek.co.uk"],
|
||||
@"Wrong first email %@", [b.emails objectAtIndex:0]);
|
||||
STAssertTrue([b.note isEqualToString:@"Testing 1 2 3"],
|
||||
@"Wrong note %@", b.note);
|
||||
STAssertTrue([b.url isEqualToString:@"www.nettek.co.uk"],
|
||||
@"Wrong url %@", b.url);
|
||||
STAssertTrue([[b.emails objectAtIndex:1] isEqualToString:
|
||||
@"MSN:steve@gbnet.net"],
|
||||
@"Wrong second email %@", [b.emails objectAtIndex:1]);
|
||||
STAssertTrue([b.birthday isEqualToString:@"19611105"],
|
||||
@"Wrong birthday %@", b.birthday);
|
||||
}
|
||||
|
||||
- (void)testBrokenVCard {
|
||||
NSString *msg = @"Blah blah blah";
|
||||
BusinessCardParsedResult* b = (BusinessCardParsedResult *)
|
||||
[VCardResultParser parsedResultForString:msg
|
||||
format:0];
|
||||
|
||||
STAssertTrue(b == nil, @"Bogus string parsed");
|
||||
}
|
||||
|
||||
- (void)testQuotedPrintableVCard {
|
||||
NSString *msg =
|
||||
@"BEGIN:VCARD\n"
|
||||
@"FN;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:Kennedy;=C5=9Bteve\n"
|
||||
@"TEL:+44 (0)7775 755503\n"
|
||||
@"ADR;HOME:;;Flat 2, 43 Howitt Road, Belsize Park;London;;NW34LU;UK\n"
|
||||
@"ORG:NetTek Ltd;\n"
|
||||
@"TITLE:Consultant\n"
|
||||
@"EMAIL:steve@nettek.co.uk\n"
|
||||
@"URL:www.nettek.co.uk\n"
|
||||
@"EMAIL;IM:MSN:steve@gbnet.net\n"
|
||||
@"NOTE:Testing 1 2 3\n"
|
||||
@"BDAY:19611105\n"
|
||||
@"END:VCARD";
|
||||
BusinessCardParsedResult* b = (BusinessCardParsedResult *)
|
||||
[VCardResultParser parsedResultForString:msg
|
||||
format:0];
|
||||
STAssertEquals(1U, b.names.count,
|
||||
@"Wrong number of names %d", b.names.count);
|
||||
STAssertTrue([[b.names objectAtIndex:0] isEqualToString:@"śteve Kennedy"],
|
||||
@"Wrong name %@", [b.names objectAtIndex:0]);
|
||||
}
|
||||
|
||||
- (void)testExcessNewlineVCard {
|
||||
NSString *msg =
|
||||
@"BEGIN:VCARD\n"
|
||||
@"FN;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:Kennedy;=C5=9Bteve\n"
|
||||
@"TEL:+44 (0)7775 755503\n"
|
||||
@"ADR;HOME:;;Flat 2, 43 Howitt Road, Belsize Park;London;;NW34LU;UK\n"
|
||||
@"ORG:NetTek Ltd;\t\n" // note tab at end
|
||||
@"TITLE:Consultant\n"
|
||||
@"EMAIL:steve@nettek.co.uk\n"
|
||||
@"URL:www.nettek.co.uk \n" // note trailing space
|
||||
@"EMAIL;IM:MSN:steve@gbnet.net\n"
|
||||
@"NOTE:Testing 1 2 3\r\n" // note dos newline
|
||||
@"BDAY:19611105\n";
|
||||
BusinessCardParsedResult* b = (BusinessCardParsedResult *)
|
||||
[VCardResultParser parsedResultForString:msg
|
||||
format:0];
|
||||
STAssertTrue([b.birthday isEqualToString:@"19611105"],
|
||||
@"Wrong birthday %@", b.birthday);
|
||||
STAssertTrue([b.jobTitle isEqualToString:@"Consultant"],
|
||||
@"Wrong job title %@", b.jobTitle);
|
||||
STAssertTrue([b.url isEqualToString:@"www.nettek.co.uk"],
|
||||
@"Wrong url %@", b.url);
|
||||
STAssertTrue([b.note isEqualToString:@"Testing 1 2 3"],
|
||||
@"Wrong note %@", b.note);
|
||||
}
|
||||
|
||||
- (void)testStrayKeywordVCard {
|
||||
NSString *msg =
|
||||
@"BEGIN:VCARD\n"
|
||||
@"FN;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:Kennedy;=C5=9Bteve\n"
|
||||
@"TEL:+44 (0)7775 755503\n"
|
||||
@"ADR;HOME:;;Flat ORG TITLE 2, 43 Howitt Road, Belsize Park;London;;"
|
||||
@"NW34LU;UK\n"
|
||||
@"ORG:NetTek Ltd;\t\n" // note tab at end
|
||||
@"TITLE:Consultant\n"
|
||||
@"EMAIL:steve@nettek.co.uk\n"
|
||||
@"URL:www.nettek.co.uk \n" // note trailing space
|
||||
@"EMAIL;IM:MSN:steve@gbnet.net\n"
|
||||
@"NOTE:Testing 1 2 3\r\n" // note dos newline
|
||||
@"BDAY:19611105\n";
|
||||
BusinessCardParsedResult* b = (BusinessCardParsedResult *)
|
||||
[VCardResultParser parsedResultForString:msg
|
||||
format:0];
|
||||
STAssertTrue([b.jobTitle isEqualToString:@"Consultant"],
|
||||
@"Wrong job title %@", b.jobTitle);
|
||||
STAssertTrue([b.organization isEqualToString:@"NetTek Ltd;"],
|
||||
@"Wrong organization %@", b.organization);
|
||||
}
|
||||
|
||||
@end
|
20
iphone/ZXingWidget/ZXingTests-Info.plist
Normal file
20
iphone/ZXingWidget/ZXingTests-Info.plist
Normal file
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.zxing.${PRODUCT_NAME:rfc1034identifier}</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -9,6 +9,22 @@
|
|||
/* 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 */; };
|
||||
1D4F11FB13D89EFD0032F754 /* VCardResultParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D4F11F913D89EFD0032F754 /* VCardResultParser.h */; };
|
||||
1D4F11FC13D89EFD0032F754 /* VCardResultParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D4F11FA13D89EFD0032F754 /* VCardResultParser.m */; };
|
||||
1D6039EC13DF7F62006F4B51 /* libZXingWidget.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2AAC07E0554694100DB518D /* libZXingWidget.a */; };
|
||||
1D6039F313DF7F9A006F4B51 /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D60391813DF7780006F4B51 /* AddressBook.framework */; };
|
||||
1D6039F413DF7F9A006F4B51 /* AddressBookUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D60391E13DF778C006F4B51 /* AddressBookUI.framework */; };
|
||||
1D6039F513DF7F9A006F4B51 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5345AA21198859A000CB77F /* CoreGraphics.framework */; };
|
||||
1D6039F613DF7F9A006F4B51 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AACBBE490F95108600F1A2B1 /* Foundation.framework */; };
|
||||
1D6039F713DF7F9A006F4B51 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E53459CA119873F3000CB77F /* UIKit.framework */; };
|
||||
1D603D7413E0B60D006F4B51 /* AddressBookAUResultParserTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D603D6913E0B60D006F4B51 /* AddressBookAUResultParserTests.m */; };
|
||||
1D603D7513E0B60D006F4B51 /* BizcardResultParserTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D603D6B13E0B60D006F4B51 /* BizcardResultParserTests.m */; };
|
||||
1D603D7613E0B60D006F4B51 /* BookmarkDoCoMoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D603D6D13E0B60D006F4B51 /* BookmarkDoCoMoTests.m */; };
|
||||
1D603D7713E0B60D006F4B51 /* EmailDoCoMoResultParserTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D603D6F13E0B60D006F4B51 /* EmailDoCoMoResultParserTests.m */; };
|
||||
1D603D7813E0B60D006F4B51 /* MeCardParserTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D603D7113E0B60D006F4B51 /* MeCardParserTests.m */; };
|
||||
1D603D7913E0B60D006F4B51 /* VCardResultParserTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D603D7313E0B60D006F4B51 /* VCardResultParserTests.m */; };
|
||||
1D603E6413E20AF1006F4B51 /* ArrayAndStringCategories.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D603E6213E20AF1006F4B51 /* ArrayAndStringCategories.h */; };
|
||||
1D603E6513E20AF1006F4B51 /* ArrayAndStringCategories.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D603E6313E20AF1006F4B51 /* ArrayAndStringCategories.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 */; };
|
||||
|
@ -23,8 +39,6 @@
|
|||
1F027FAE11A7BEAF006B06DE /* FormatReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F027FA211A7BEAF006B06DE /* FormatReader.h */; };
|
||||
1F027FAF11A7BEAF006B06DE /* FormatReader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F027FA311A7BEAF006B06DE /* FormatReader.mm */; };
|
||||
1F027FB211A7BEAF006B06DE /* MultiFormatReader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F027FA611A7BEAF006B06DE /* MultiFormatReader.mm */; };
|
||||
1F027FB311A7BEAF006B06DE /* NSString+HTML.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F027FA711A7BEAF006B06DE /* NSString+HTML.h */; };
|
||||
1F027FB411A7BEAF006B06DE /* NSString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F027FA811A7BEAF006B06DE /* NSString+HTML.m */; };
|
||||
1F027FB511A7BEAF006B06DE /* OverlayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F027FA911A7BEAF006B06DE /* OverlayView.h */; };
|
||||
1F027FB611A7BEAF006B06DE /* OverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F027FAA11A7BEAF006B06DE /* OverlayView.m */; };
|
||||
1F027FBB11A7BEBF006B06DE /* TwoDDecoderResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F027FB711A7BEBF006B06DE /* TwoDDecoderResult.h */; };
|
||||
|
@ -63,8 +77,6 @@
|
|||
1F027FFA11A7BEEB006B06DE /* URIParsedResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F027FEA11A7BEEB006B06DE /* URIParsedResult.m */; };
|
||||
1F02801511A7BF06006B06DE /* BookmarkDoCoMoResultParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F027FFB11A7BF06006B06DE /* BookmarkDoCoMoResultParser.h */; };
|
||||
1F02801611A7BF06006B06DE /* BookmarkDoCoMoResultParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F027FFC11A7BF06006B06DE /* BookmarkDoCoMoResultParser.m */; };
|
||||
1F02801711A7BF06006B06DE /* DoCoMoResultParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F027FFD11A7BF06006B06DE /* DoCoMoResultParser.h */; };
|
||||
1F02801811A7BF06006B06DE /* DoCoMoResultParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F027FFE11A7BF06006B06DE /* DoCoMoResultParser.m */; };
|
||||
1F02801911A7BF06006B06DE /* EmailDoCoMoResultParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F027FFF11A7BF06006B06DE /* EmailDoCoMoResultParser.h */; };
|
||||
1F02801A11A7BF06006B06DE /* EmailDoCoMoResultParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F02800011A7BF06006B06DE /* EmailDoCoMoResultParser.m */; };
|
||||
1F02801B11A7BF06006B06DE /* GeoResultParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F02800111A7BF06006B06DE /* GeoResultParser.h */; };
|
||||
|
@ -245,9 +257,35 @@
|
|||
E5345AA31198859A000CB77F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5345AA21198859A000CB77F /* CoreGraphics.framework */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
1D603E4D13E1E010006F4B51 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = D2AAC07D0554694100DB518D;
|
||||
remoteInfo = ZXingWidget;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
1D0CBDF713D0DD5D003D0F8D /* BizcardResultParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BizcardResultParser.h; path = Classes/resultParsers/BizcardResultParser.h; sourceTree = "<group>"; };
|
||||
1D0CBDF813D0DD5D003D0F8D /* BizcardResultParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BizcardResultParser.m; path = Classes/resultParsers/BizcardResultParser.m; sourceTree = "<group>"; };
|
||||
1D4F11F913D89EFD0032F754 /* VCardResultParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VCardResultParser.h; path = Classes/resultParsers/VCardResultParser.h; sourceTree = "<group>"; };
|
||||
1D4F11FA13D89EFD0032F754 /* VCardResultParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VCardResultParser.m; path = Classes/resultParsers/VCardResultParser.m; sourceTree = "<group>"; };
|
||||
1D60389C13DF6FB5006F4B51 /* ZXingTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "ZXingTests-Info.plist"; sourceTree = "<group>"; };
|
||||
1D6038E913DF75BA006F4B51 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; };
|
||||
1D60391813DF7780006F4B51 /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; };
|
||||
1D60391E13DF778C006F4B51 /* AddressBookUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBookUI.framework; path = System/Library/Frameworks/AddressBookUI.framework; sourceTree = SDKROOT; };
|
||||
1D60398D13DF7CAD006F4B51 /* ZXingTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZXingTests.octest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
1D603D6913E0B60D006F4B51 /* AddressBookAUResultParserTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AddressBookAUResultParserTests.m; path = Tests/AddressBookAUResultParserTests.m; sourceTree = "<group>"; };
|
||||
1D603D6B13E0B60D006F4B51 /* BizcardResultParserTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BizcardResultParserTests.m; path = Tests/BizcardResultParserTests.m; sourceTree = "<group>"; };
|
||||
1D603D6D13E0B60D006F4B51 /* BookmarkDoCoMoTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BookmarkDoCoMoTests.m; path = Tests/BookmarkDoCoMoTests.m; sourceTree = "<group>"; };
|
||||
1D603D6F13E0B60D006F4B51 /* EmailDoCoMoResultParserTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EmailDoCoMoResultParserTests.m; path = Tests/EmailDoCoMoResultParserTests.m; sourceTree = "<group>"; };
|
||||
1D603D7113E0B60D006F4B51 /* MeCardParserTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MeCardParserTests.m; path = Tests/MeCardParserTests.m; sourceTree = "<group>"; };
|
||||
1D603D7313E0B60D006F4B51 /* VCardResultParserTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VCardResultParserTests.m; path = Tests/VCardResultParserTests.m; sourceTree = "<group>"; };
|
||||
1D603E6213E20AF1006F4B51 /* ArrayAndStringCategories.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ArrayAndStringCategories.h; path = Classes/ArrayAndStringCategories.h; sourceTree = "<group>"; };
|
||||
1D603E6313E20AF1006F4B51 /* ArrayAndStringCategories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ArrayAndStringCategories.m; path = Classes/ArrayAndStringCategories.m; sourceTree = "<group>"; };
|
||||
1D6040C413E3393B006F4B51 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
|
||||
1DFA090A13CE1A3900599044 /* CBarcodeFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CBarcodeFormat.h; path = Classes/CBarcodeFormat.h; sourceTree = "<group>"; };
|
||||
1DFA090B13CE1A3900599044 /* CBarcodeFormat.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = CBarcodeFormat.mm; path = Classes/CBarcodeFormat.mm; sourceTree = "<group>"; };
|
||||
1DFA092213CE251600599044 /* ProductParsedResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProductParsedResult.h; path = Classes/parsedResults/ProductParsedResult.h; sourceTree = "<group>"; };
|
||||
|
@ -262,8 +300,6 @@
|
|||
1F027FA211A7BEAF006B06DE /* FormatReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FormatReader.h; path = Classes/FormatReader.h; sourceTree = "<group>"; };
|
||||
1F027FA311A7BEAF006B06DE /* FormatReader.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = FormatReader.mm; path = Classes/FormatReader.mm; sourceTree = "<group>"; };
|
||||
1F027FA611A7BEAF006B06DE /* MultiFormatReader.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MultiFormatReader.mm; path = Classes/MultiFormatReader.mm; sourceTree = "<group>"; };
|
||||
1F027FA711A7BEAF006B06DE /* NSString+HTML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSString+HTML.h"; path = "Classes/NSString+HTML.h"; sourceTree = "<group>"; };
|
||||
1F027FA811A7BEAF006B06DE /* NSString+HTML.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSString+HTML.m"; path = "Classes/NSString+HTML.m"; sourceTree = "<group>"; };
|
||||
1F027FA911A7BEAF006B06DE /* OverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OverlayView.h; path = Classes/OverlayView.h; sourceTree = "<group>"; };
|
||||
1F027FAA11A7BEAF006B06DE /* OverlayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OverlayView.m; path = Classes/OverlayView.m; sourceTree = "<group>"; };
|
||||
1F027FB711A7BEBF006B06DE /* TwoDDecoderResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TwoDDecoderResult.h; path = Classes/TwoDDecoderResult.h; sourceTree = "<group>"; };
|
||||
|
@ -302,8 +338,6 @@
|
|||
1F027FEA11A7BEEB006B06DE /* URIParsedResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = URIParsedResult.m; path = Classes/parsedResults/URIParsedResult.m; sourceTree = "<group>"; };
|
||||
1F027FFB11A7BF06006B06DE /* BookmarkDoCoMoResultParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BookmarkDoCoMoResultParser.h; path = Classes/resultParsers/BookmarkDoCoMoResultParser.h; sourceTree = "<group>"; };
|
||||
1F027FFC11A7BF06006B06DE /* BookmarkDoCoMoResultParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BookmarkDoCoMoResultParser.m; path = Classes/resultParsers/BookmarkDoCoMoResultParser.m; sourceTree = "<group>"; };
|
||||
1F027FFD11A7BF06006B06DE /* DoCoMoResultParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DoCoMoResultParser.h; path = Classes/resultParsers/DoCoMoResultParser.h; sourceTree = "<group>"; };
|
||||
1F027FFE11A7BF06006B06DE /* DoCoMoResultParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DoCoMoResultParser.m; path = Classes/resultParsers/DoCoMoResultParser.m; sourceTree = "<group>"; };
|
||||
1F027FFF11A7BF06006B06DE /* EmailDoCoMoResultParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EmailDoCoMoResultParser.h; path = Classes/resultParsers/EmailDoCoMoResultParser.h; sourceTree = "<group>"; };
|
||||
1F02800011A7BF06006B06DE /* EmailDoCoMoResultParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EmailDoCoMoResultParser.m; path = Classes/resultParsers/EmailDoCoMoResultParser.m; sourceTree = "<group>"; };
|
||||
1F02800111A7BF06006B06DE /* GeoResultParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GeoResultParser.h; path = Classes/resultParsers/GeoResultParser.h; sourceTree = "<group>"; };
|
||||
|
@ -486,6 +520,19 @@
|
|||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
1D60398A13DF7CAD006F4B51 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
1D6039EC13DF7F62006F4B51 /* libZXingWidget.a in Frameworks */,
|
||||
1D6039F313DF7F9A006F4B51 /* AddressBook.framework in Frameworks */,
|
||||
1D6039F413DF7F9A006F4B51 /* AddressBookUI.framework in Frameworks */,
|
||||
1D6039F513DF7F9A006F4B51 /* CoreGraphics.framework in Frameworks */,
|
||||
1D6039F613DF7F9A006F4B51 /* Foundation.framework in Frameworks */,
|
||||
1D6039F713DF7F9A006F4B51 /* UIKit.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
D2AAC07C0554694100DB518D /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
@ -504,6 +551,7 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
D2AAC07E0554694100DB518D /* libZXingWidget.a */,
|
||||
1D60398D13DF7CAD006F4B51 /* ZXingTests.octest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
|
@ -511,12 +559,16 @@
|
|||
0867D691FE84028FC02AAC07 /* ZXingWidget */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1D6038A113DF6FBF006F4B51 /* Tests */,
|
||||
E53458B311987396000CB77F /* CoreSrc */,
|
||||
08FB77AEFE84172EC02AAC07 /* Classes */,
|
||||
32C88DFF0371C24200C91783 /* Other Sources */,
|
||||
0867D69AFE84028FC02AAC07 /* Frameworks */,
|
||||
E5345D2811999F53000CB77F /* Resources */,
|
||||
034768DFFF38A50411DB9C8B /* Products */,
|
||||
1D60391813DF7780006F4B51 /* AddressBook.framework */,
|
||||
1D60391E13DF778C006F4B51 /* AddressBookUI.framework */,
|
||||
1D6040C413E3393B006F4B51 /* AVFoundation.framework */,
|
||||
);
|
||||
name = ZXingWidget;
|
||||
sourceTree = "<group>";
|
||||
|
@ -528,6 +580,7 @@
|
|||
E53459CA119873F3000CB77F /* UIKit.framework */,
|
||||
E5345A651198792F000CB77F /* AudioToolbox.framework */,
|
||||
E5345AA21198859A000CB77F /* CoreGraphics.framework */,
|
||||
1D6038E913DF75BA006F4B51 /* SenTestingKit.framework */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
|
@ -535,6 +588,8 @@
|
|||
08FB77AEFE84172EC02AAC07 /* Classes */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1D603E6213E20AF1006F4B51 /* ArrayAndStringCategories.h */,
|
||||
1D603E6313E20AF1006F4B51 /* ArrayAndStringCategories.m */,
|
||||
1DFA090A13CE1A3900599044 /* CBarcodeFormat.h */,
|
||||
1DFA090B13CE1A3900599044 /* CBarcodeFormat.mm */,
|
||||
1F3DB0F511C61080009C581B /* DataMatrixReader.h */,
|
||||
|
@ -555,8 +610,6 @@
|
|||
1F027FA211A7BEAF006B06DE /* FormatReader.h */,
|
||||
1F027FA311A7BEAF006B06DE /* FormatReader.mm */,
|
||||
1F027FA611A7BEAF006B06DE /* MultiFormatReader.mm */,
|
||||
1F027FA711A7BEAF006B06DE /* NSString+HTML.h */,
|
||||
1F027FA811A7BEAF006B06DE /* NSString+HTML.m */,
|
||||
1F027FA911A7BEAF006B06DE /* OverlayView.h */,
|
||||
1F027FAA11A7BEAF006B06DE /* OverlayView.m */,
|
||||
E5345A00119876A5000CB77F /* Actions */,
|
||||
|
@ -566,6 +619,20 @@
|
|||
name = Classes;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
1D6038A113DF6FBF006F4B51 /* Tests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1D60389C13DF6FB5006F4B51 /* ZXingTests-Info.plist */,
|
||||
1D603D6913E0B60D006F4B51 /* AddressBookAUResultParserTests.m */,
|
||||
1D603D6B13E0B60D006F4B51 /* BizcardResultParserTests.m */,
|
||||
1D603D6D13E0B60D006F4B51 /* BookmarkDoCoMoTests.m */,
|
||||
1D603D6F13E0B60D006F4B51 /* EmailDoCoMoResultParserTests.m */,
|
||||
1D603D7113E0B60D006F4B51 /* MeCardParserTests.m */,
|
||||
1D603D7313E0B60D006F4B51 /* VCardResultParserTests.m */,
|
||||
);
|
||||
name = Tests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
32C88DFF0371C24200C91783 /* Other Sources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -814,8 +881,6 @@
|
|||
1D0CBDF813D0DD5D003D0F8D /* BizcardResultParser.m */,
|
||||
1F027FFB11A7BF06006B06DE /* BookmarkDoCoMoResultParser.h */,
|
||||
1F027FFC11A7BF06006B06DE /* BookmarkDoCoMoResultParser.m */,
|
||||
1F027FFD11A7BF06006B06DE /* DoCoMoResultParser.h */,
|
||||
1F027FFE11A7BF06006B06DE /* DoCoMoResultParser.m */,
|
||||
1F027FFF11A7BF06006B06DE /* EmailDoCoMoResultParser.h */,
|
||||
1F02800011A7BF06006B06DE /* EmailDoCoMoResultParser.m */,
|
||||
1F02800111A7BF06006B06DE /* GeoResultParser.h */,
|
||||
|
@ -840,6 +905,8 @@
|
|||
1F02801211A7BF06006B06DE /* URLResultParser.m */,
|
||||
1F02801311A7BF06006B06DE /* URLTOResultParser.h */,
|
||||
1F02801411A7BF06006B06DE /* URLTOResultParser.m */,
|
||||
1D4F11F913D89EFD0032F754 /* VCardResultParser.h */,
|
||||
1D4F11FA13D89EFD0032F754 /* VCardResultParser.m */,
|
||||
);
|
||||
name = ResultParsers;
|
||||
sourceTree = "<group>";
|
||||
|
@ -974,7 +1041,6 @@
|
|||
1F027FAB11A7BEAF006B06DE /* Decoder.h in Headers */,
|
||||
1F027FAD11A7BEAF006B06DE /* DecoderDelegate.h in Headers */,
|
||||
1F027FAE11A7BEAF006B06DE /* FormatReader.h in Headers */,
|
||||
1F027FB311A7BEAF006B06DE /* NSString+HTML.h in Headers */,
|
||||
1F027FB511A7BEAF006B06DE /* OverlayView.h in Headers */,
|
||||
1F027FBB11A7BEBF006B06DE /* TwoDDecoderResult.h in Headers */,
|
||||
1F027FBD11A7BEBF006B06DE /* ZXingWidgetController.h in Headers */,
|
||||
|
@ -994,7 +1060,6 @@
|
|||
1F027FF711A7BEEB006B06DE /* TextParsedResult.h in Headers */,
|
||||
1F027FF911A7BEEB006B06DE /* URIParsedResult.h in Headers */,
|
||||
1F02801511A7BF06006B06DE /* BookmarkDoCoMoResultParser.h in Headers */,
|
||||
1F02801711A7BF06006B06DE /* DoCoMoResultParser.h in Headers */,
|
||||
1F02801911A7BF06006B06DE /* EmailDoCoMoResultParser.h in Headers */,
|
||||
1F02801B11A7BF06006B06DE /* GeoResultParser.h in Headers */,
|
||||
1F02801D11A7BF06006B06DE /* MeCardParser.h in Headers */,
|
||||
|
@ -1021,12 +1086,33 @@
|
|||
1DFA092A13CE252300599044 /* ProductResultParser.h in Headers */,
|
||||
1DFA09A013CE5C0300599044 /* AddressBookAUResultParser.h in Headers */,
|
||||
1D0CBDF913D0DD5D003D0F8D /* BizcardResultParser.h in Headers */,
|
||||
1D4F11FB13D89EFD0032F754 /* VCardResultParser.h in Headers */,
|
||||
1D603E6413E20AF1006F4B51 /* ArrayAndStringCategories.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
1D60398C13DF7CAD006F4B51 /* ZXingTests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 1D60399113DF7CDC006F4B51 /* Build configuration list for PBXNativeTarget "ZXingTests" */;
|
||||
buildPhases = (
|
||||
1D60398813DF7CAD006F4B51 /* Resources */,
|
||||
1D60398913DF7CAD006F4B51 /* Sources */,
|
||||
1D60398A13DF7CAD006F4B51 /* Frameworks */,
|
||||
1D60398B13DF7CAD006F4B51 /* ShellScript */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
1D603E4E13E1E010006F4B51 /* PBXTargetDependency */,
|
||||
);
|
||||
name = ZXingTests;
|
||||
productName = ZXingTests;
|
||||
productReference = 1D60398D13DF7CAD006F4B51 /* ZXingTests.octest */;
|
||||
productType = "com.apple.product-type.bundle";
|
||||
};
|
||||
D2AAC07D0554694100DB518D /* ZXingWidget */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 1DEB921E08733DC00010E9CD /* Build configuration list for PBXNativeTarget "ZXingWidget" */;
|
||||
|
@ -1065,11 +1151,51 @@
|
|||
projectRoot = "";
|
||||
targets = (
|
||||
D2AAC07D0554694100DB518D /* ZXingWidget */,
|
||||
1D60398C13DF7CAD006F4B51 /* ZXingTests */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
1D60398813DF7CAD006F4B51 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
1D60398B13DF7CAD006F4B51 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
1D60398913DF7CAD006F4B51 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
1D603D7413E0B60D006F4B51 /* AddressBookAUResultParserTests.m in Sources */,
|
||||
1D603D7513E0B60D006F4B51 /* BizcardResultParserTests.m in Sources */,
|
||||
1D603D7613E0B60D006F4B51 /* BookmarkDoCoMoTests.m in Sources */,
|
||||
1D603D7713E0B60D006F4B51 /* EmailDoCoMoResultParserTests.m in Sources */,
|
||||
1D603D7813E0B60D006F4B51 /* MeCardParserTests.m in Sources */,
|
||||
1D603D7913E0B60D006F4B51 /* VCardResultParserTests.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
D2AAC07B0554694100DB518D /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
@ -1142,7 +1268,6 @@
|
|||
1F027FAC11A7BEAF006B06DE /* Decoder.mm in Sources */,
|
||||
1F027FAF11A7BEAF006B06DE /* FormatReader.mm in Sources */,
|
||||
1F027FB211A7BEAF006B06DE /* MultiFormatReader.mm in Sources */,
|
||||
1F027FB411A7BEAF006B06DE /* NSString+HTML.m in Sources */,
|
||||
1F027FB611A7BEAF006B06DE /* OverlayView.m in Sources */,
|
||||
1F027FBC11A7BEBF006B06DE /* TwoDDecoderResult.m in Sources */,
|
||||
1F027FBE11A7BEBF006B06DE /* ZXingWidgetController.m in Sources */,
|
||||
|
@ -1162,7 +1287,6 @@
|
|||
1F027FF811A7BEEB006B06DE /* TextParsedResult.m in Sources */,
|
||||
1F027FFA11A7BEEB006B06DE /* URIParsedResult.m in Sources */,
|
||||
1F02801611A7BF06006B06DE /* BookmarkDoCoMoResultParser.m in Sources */,
|
||||
1F02801811A7BF06006B06DE /* DoCoMoResultParser.m in Sources */,
|
||||
1F02801A11A7BF06006B06DE /* EmailDoCoMoResultParser.m in Sources */,
|
||||
1F02801C11A7BF06006B06DE /* GeoResultParser.m in Sources */,
|
||||
1F02801E11A7BF06006B06DE /* MeCardParser.m in Sources */,
|
||||
|
@ -1189,12 +1313,82 @@
|
|||
1DFA092B13CE252300599044 /* ProductResultParser.mm in Sources */,
|
||||
1DFA09A113CE5C0300599044 /* AddressBookAUResultParser.m in Sources */,
|
||||
1D0CBDFA13D0DD5D003D0F8D /* BizcardResultParser.m in Sources */,
|
||||
1D4F11FC13D89EFD0032F754 /* VCardResultParser.m in Sources */,
|
||||
1D603E6513E20AF1006F4B51 /* ArrayAndStringCategories.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
1D603E4E13E1E010006F4B51 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = D2AAC07D0554694100DB518D /* ZXingWidget */;
|
||||
targetProxy = 1D603E4D13E1E010006F4B51 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
1D60398E13DF7CAD006F4B51 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"\"$(SDKROOT)/Developer/Library/Frameworks\"",
|
||||
"\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"",
|
||||
);
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_ENABLE_FIX_AND_CONTINUE = NO;
|
||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
INFOPLIST_FILE = "ZXingTests-Info.plist";
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
Foundation,
|
||||
"-framework",
|
||||
SenTestingKit,
|
||||
"-framework",
|
||||
UIKit,
|
||||
);
|
||||
PREBINDING = NO;
|
||||
PRODUCT_NAME = ZXingTests;
|
||||
SDKROOT = iphoneos;
|
||||
WRAPPER_EXTENSION = octest;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
1D60398F13DF7CAD006F4B51 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"\"$(SDKROOT)/Developer/Library/Frameworks\"",
|
||||
"\"$(DEVELOPER_LIBRARY_DIR)/Frameworks\"",
|
||||
);
|
||||
GCC_ENABLE_FIX_AND_CONTINUE = NO;
|
||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||
INFOPLIST_FILE = "ZXingTests-Info.plist";
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
Foundation,
|
||||
"-framework",
|
||||
SenTestingKit,
|
||||
"-framework",
|
||||
UIKit,
|
||||
);
|
||||
PREBINDING = NO;
|
||||
PRODUCT_NAME = ZXingTests;
|
||||
SDKROOT = iphoneos;
|
||||
WRAPPER_EXTENSION = octest;
|
||||
ZERO_LINK = NO;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
1DEB921F08733DC00010E9CD /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
|
@ -1294,6 +1488,15 @@
|
|||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
1D60399113DF7CDC006F4B51 /* Build configuration list for PBXNativeTarget "ZXingTests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
1D60398E13DF7CAD006F4B51 /* Debug */,
|
||||
1D60398F13DF7CAD006F4B51 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
1DEB921E08733DC00010E9CD /* Build configuration list for PBXNativeTarget "ZXingWidget" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
|
|
Loading…
Reference in a new issue