mirror of
https://github.com/zxing/zxing.git
synced 2025-03-05 20:48:51 -08:00
a scan widget you can include in your iPhone app. Test app coming shortly.
git-svn-id: https://zxing.googlecode.com/svn/trunk@1353 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
parent
0e0bed8b50
commit
422eae3e81
51
iphone/ZXingWidget/AddContactAction.h
Normal file
51
iphone/ZXingWidget/AddContactAction.h
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
//
|
||||||
|
// AddContactAction.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 29/05/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 <UIKit/UIKit.h>
|
||||||
|
#import "ResultAction.h"
|
||||||
|
#import "AddressBookUI/AddressBookUI.h"
|
||||||
|
|
||||||
|
@interface AddContactAction : ResultAction <ABUnknownPersonViewControllerDelegate> {
|
||||||
|
NSString *name;
|
||||||
|
NSArray *phoneNumbers;
|
||||||
|
NSString *note;
|
||||||
|
NSString *email;
|
||||||
|
NSString *urlString;
|
||||||
|
NSString *address;
|
||||||
|
|
||||||
|
UIViewController *viewController;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, copy) NSString *name;
|
||||||
|
@property (nonatomic, retain) NSArray *phoneNumbers;
|
||||||
|
@property (nonatomic, copy) NSString *note;
|
||||||
|
@property (nonatomic, copy) NSString *email;
|
||||||
|
@property (nonatomic, copy) NSString *urlString;
|
||||||
|
@property (nonatomic, copy) NSString *address;
|
||||||
|
|
||||||
|
+ (id)actionWithName:(NSString *)n
|
||||||
|
phoneNumbers:(NSArray *)nums
|
||||||
|
email:(NSString *)em
|
||||||
|
url:(NSString *)us
|
||||||
|
address:(NSString *)ad
|
||||||
|
note:(NSString *)nt;
|
||||||
|
|
||||||
|
@end
|
224
iphone/ZXingWidget/AddContactAction.m
Normal file
224
iphone/ZXingWidget/AddContactAction.m
Normal file
|
@ -0,0 +1,224 @@
|
||||||
|
//
|
||||||
|
// AddContactAction.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 29/05/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 "AddContactAction.h"
|
||||||
|
#import "AddressBook/AddressBook.h"
|
||||||
|
|
||||||
|
|
||||||
|
@implementation AddContactAction
|
||||||
|
|
||||||
|
@synthesize name;
|
||||||
|
@synthesize phoneNumbers;
|
||||||
|
@synthesize note;
|
||||||
|
@synthesize email;
|
||||||
|
@synthesize urlString;
|
||||||
|
@synthesize address;
|
||||||
|
|
||||||
|
+ (id)actionWithName:(NSString *)n
|
||||||
|
phoneNumbers:(NSArray *)nums
|
||||||
|
email:(NSString *)em
|
||||||
|
url:(NSString *)us
|
||||||
|
address:(NSString *)ad
|
||||||
|
note:(NSString *)nt {
|
||||||
|
AddContactAction *aca = [[[self alloc] init] autorelease];
|
||||||
|
aca.name = n;
|
||||||
|
aca.phoneNumbers = nums;
|
||||||
|
aca.email = em;
|
||||||
|
aca.urlString = us;
|
||||||
|
aca.address = ad;
|
||||||
|
aca.note = nt;
|
||||||
|
return aca;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)title {
|
||||||
|
return NSLocalizedString(@"AddContactAction title", @"Add Contact");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) addContactWithController:(UIViewController *)controller {
|
||||||
|
CFErrorRef *error = NULL;
|
||||||
|
NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet];
|
||||||
|
|
||||||
|
ABRecordRef person = ABPersonCreate();
|
||||||
|
|
||||||
|
NSRange commaRange = [name rangeOfString:@","];
|
||||||
|
if (commaRange.location != NSNotFound) {
|
||||||
|
NSString *lastName = [[name substringToIndex:commaRange.location]
|
||||||
|
stringByTrimmingCharactersInSet:whitespaceSet];
|
||||||
|
ABRecordSetValue(person, kABPersonLastNameProperty, lastName, error);
|
||||||
|
NSArray *firstNames = [[[name substringFromIndex:commaRange.location + commaRange.length]
|
||||||
|
stringByTrimmingCharactersInSet:whitespaceSet]
|
||||||
|
componentsSeparatedByCharactersInSet:whitespaceSet];
|
||||||
|
ABRecordSetValue(person, kABPersonFirstNameProperty, [firstNames objectAtIndex:0], error);
|
||||||
|
for (int i = 1; i < [firstNames count]; i++) {
|
||||||
|
ABRecordSetValue(person, kABPersonMiddleNameProperty, [firstNames objectAtIndex:1], error);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
NSArray *nameParts = [name componentsSeparatedByCharactersInSet:whitespaceSet];
|
||||||
|
int nParts = nameParts.count;
|
||||||
|
if (nParts == 1) {
|
||||||
|
ABRecordSetValue(person, kABPersonFirstNameProperty, name, error);
|
||||||
|
} else if (nParts >= 2) {
|
||||||
|
int lastPart = nParts - 1;
|
||||||
|
ABRecordSetValue(person, kABPersonFirstNameProperty, [nameParts objectAtIndex:0], error);
|
||||||
|
for (int i = 1; i < lastPart; i++) {
|
||||||
|
ABRecordSetValue(person, kABPersonMiddleNameProperty, [nameParts objectAtIndex:i], error);
|
||||||
|
}
|
||||||
|
ABRecordSetValue(person, kABPersonLastNameProperty, [nameParts objectAtIndex:lastPart], error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.note) {
|
||||||
|
ABRecordSetValue(person, kABPersonNoteProperty, self.note, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.phoneNumbers && self.phoneNumbers.count > 0) {
|
||||||
|
// multi-values: nultiple phone numbers
|
||||||
|
ABMutableMultiValueRef phoneNumberMultiValue =
|
||||||
|
ABMultiValueCreateMutable(kABStringPropertyType);
|
||||||
|
for (NSString *number in self.phoneNumbers) {
|
||||||
|
ABMultiValueAddValueAndLabel(phoneNumberMultiValue, number,
|
||||||
|
kABPersonPhoneMainLabel, NULL);
|
||||||
|
}
|
||||||
|
ABRecordSetValue(person, kABPersonPhoneProperty,
|
||||||
|
phoneNumberMultiValue, error);
|
||||||
|
CFRelease(phoneNumberMultiValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.email) {
|
||||||
|
// a single email address
|
||||||
|
ABMutableMultiValueRef emailMultiValue =
|
||||||
|
ABMultiValueCreateMutable(kABStringPropertyType);
|
||||||
|
ABMultiValueAddValueAndLabel(emailMultiValue, self.email,
|
||||||
|
kABHomeLabel, NULL);
|
||||||
|
ABRecordSetValue(person, kABPersonEmailProperty, emailMultiValue, error);
|
||||||
|
CFRelease(emailMultiValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.urlString) {
|
||||||
|
// a single url as the home page
|
||||||
|
ABMutableMultiValueRef urlMultiValue =
|
||||||
|
ABMultiValueCreateMutable(kABStringPropertyType);
|
||||||
|
ABMultiValueAddValueAndLabel(urlMultiValue, self.urlString,
|
||||||
|
kABPersonHomePageLabel, NULL);
|
||||||
|
ABRecordSetValue(person, kABPersonURLProperty, urlMultiValue, error);
|
||||||
|
CFRelease(urlMultiValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.address) {
|
||||||
|
// we can't parse all the possible address formats, alas, so we punt by putting
|
||||||
|
// the entire thing into a multi-line 'street' address.
|
||||||
|
// This won't look great on the phone, but at least the info will be there,
|
||||||
|
// and can be syned to a desktop computer, adjusted as necessary, and so on.
|
||||||
|
|
||||||
|
// split the address into parts at each comma or return
|
||||||
|
NSArray *parts =
|
||||||
|
[self.address componentsSeparatedByCharactersInSet:
|
||||||
|
[NSCharacterSet characterSetWithCharactersInString:@",;\r\n"]];
|
||||||
|
NSMutableArray *strippedParts = [NSMutableArray arrayWithCapacity:[parts count]];
|
||||||
|
// for each part:
|
||||||
|
for (NSString *part in parts) {
|
||||||
|
// strip the part of whitespace
|
||||||
|
NSString *strippedPart =
|
||||||
|
[part stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
|
||||||
|
if ([strippedPart length] > 0) {
|
||||||
|
// if there is anything in this address part, add it to the list of stripped parts
|
||||||
|
[strippedParts addObject:strippedPart];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// finally, create a 'street' address by concatenating all the stripped parts, separated by linefeeds
|
||||||
|
NSString *street = [strippedParts componentsJoinedByString:@"\n"];
|
||||||
|
|
||||||
|
CFMutableDictionaryRef addressDict =
|
||||||
|
CFDictionaryCreateMutable(NULL,
|
||||||
|
1,
|
||||||
|
&kCFTypeDictionaryKeyCallBacks,
|
||||||
|
&kCFTypeDictionaryValueCallBacks);
|
||||||
|
CFDictionarySetValue(addressDict, kABPersonAddressStreetKey, street);
|
||||||
|
|
||||||
|
ABMutableMultiValueRef addressMultiValue =
|
||||||
|
ABMultiValueCreateMutable(kABStringPropertyType);
|
||||||
|
ABMultiValueAddValueAndLabel(addressMultiValue,
|
||||||
|
addressDict,
|
||||||
|
kABHomeLabel,
|
||||||
|
NULL);
|
||||||
|
ABRecordSetValue(person, kABPersonAddressProperty, addressMultiValue, error);
|
||||||
|
CFRelease(addressMultiValue);
|
||||||
|
CFRelease(addressDict);
|
||||||
|
}
|
||||||
|
|
||||||
|
ABUnknownPersonViewController *unknownPersonViewController =
|
||||||
|
[[ABUnknownPersonViewController alloc] init];
|
||||||
|
unknownPersonViewController.displayedPerson = person;
|
||||||
|
unknownPersonViewController.allowsActions = true;
|
||||||
|
unknownPersonViewController.allowsAddingToAddressBook = true;
|
||||||
|
unknownPersonViewController.unknownPersonViewDelegate = self;
|
||||||
|
CFRelease(person);
|
||||||
|
|
||||||
|
viewController = [controller retain];
|
||||||
|
[[viewController navigationController] pushViewController:unknownPersonViewController animated:YES];
|
||||||
|
[unknownPersonViewController release];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
|
||||||
|
if (buttonIndex != [alertView cancelButtonIndex]) {
|
||||||
|
// perform the action
|
||||||
|
[self addContactWithController:viewController];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIRM_ADDING_CONTACT
|
||||||
|
#undef CONFIRM_ADDING_CONTACT
|
||||||
|
#endif
|
||||||
|
- (void)performActionWithController:(UIViewController *)controller
|
||||||
|
shouldConfirm:(bool)confirm {
|
||||||
|
#ifdef CONFIRM_ADDING_CONTACT
|
||||||
|
if (confirm) {
|
||||||
|
viewController = controller;
|
||||||
|
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil
|
||||||
|
message:NSLocalizedString(@"AddContactAction alert message", @"Add Contact?")
|
||||||
|
delegate:self
|
||||||
|
cancelButtonTitle:NSLocalizedString(@"AddContactAction cancel button title", @"Cancel")
|
||||||
|
otherButtonTitles:NSLocalizedString(@"AddContactAction confirm button title", @"Add Contact"), nil];
|
||||||
|
[alertView show];
|
||||||
|
[alertView release];
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
[self addContactWithController:controller];
|
||||||
|
#ifdef CONFIRM_ADDING_CONTACT
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dismissUnknownPersonViewController:(ABUnknownPersonViewController *)unknownPersonViewController {
|
||||||
|
[[viewController navigationController] popToViewController:viewController animated:YES];
|
||||||
|
[viewController release];
|
||||||
|
viewController = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ABUnknownPersonViewControllerDelegate
|
||||||
|
|
||||||
|
- (void)unknownPersonViewController:(ABUnknownPersonViewController *)unknownPersonViewController
|
||||||
|
didResolveToPerson:(ABRecordRef)person {
|
||||||
|
if (person) {
|
||||||
|
[self performSelector:@selector(dismissUnknownPersonViewController:) withObject:unknownPersonViewController afterDelay:0.0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@end
|
29
iphone/ZXingWidget/BookmarkDoCoMoResultParser.h
Normal file
29
iphone/ZXingWidget/BookmarkDoCoMoResultParser.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
//
|
||||||
|
// BookmarkDoCoMoResultParser.h
|
||||||
|
// 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 <UIKit/UIKit.h>
|
||||||
|
#import "DoCoMoResultParser.h"
|
||||||
|
|
||||||
|
@interface BookmarkDoCoMoResultParser : DoCoMoResultParser {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
49
iphone/ZXingWidget/BookmarkDoCoMoResultParser.m
Normal file
49
iphone/ZXingWidget/BookmarkDoCoMoResultParser.m
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
//
|
||||||
|
// BookmarkDoCoMoResultParser.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 "BookmarkDoCoMoResultParser.h"
|
||||||
|
#import "URIParsedResult.h"
|
||||||
|
|
||||||
|
@implementation BookmarkDoCoMoResultParser
|
||||||
|
|
||||||
|
+ (void)load {
|
||||||
|
[ResultParser registerResultParserClass:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (ParsedResult *)parsedResultForString:(NSString *)s {
|
||||||
|
NSRange foundRange = [s rangeOfString:@"MEBKM:"];
|
||||||
|
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
|
||||||
|
title:title] autorelease];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
41
iphone/ZXingWidget/BusinessCardParsedResult.h
Normal file
41
iphone/ZXingWidget/BusinessCardParsedResult.h
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
//
|
||||||
|
// AddressBookDoCoMoParsedResult.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 29/05/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 <UIKit/UIKit.h>
|
||||||
|
#import "ParsedResult.h"
|
||||||
|
|
||||||
|
@interface BusinessCardParsedResult : ParsedResult {
|
||||||
|
NSString *name;
|
||||||
|
NSArray *phoneNumbers;
|
||||||
|
NSString *note;
|
||||||
|
NSString *email;
|
||||||
|
NSString *urlString;
|
||||||
|
NSString *address;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, copy) NSString *name;
|
||||||
|
@property (nonatomic, retain) NSArray *phoneNumbers;
|
||||||
|
@property (nonatomic, copy) NSString *note;
|
||||||
|
@property (nonatomic, copy) NSString *email;
|
||||||
|
@property (nonatomic, copy) NSString *urlString;
|
||||||
|
@property (nonatomic, copy) NSString *address;
|
||||||
|
|
||||||
|
@end
|
84
iphone/ZXingWidget/BusinessCardParsedResult.m
Normal file
84
iphone/ZXingWidget/BusinessCardParsedResult.m
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
//
|
||||||
|
// AddressBookDoCoMoParsedResult.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 29/05/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 "BusinessCardParsedResult.h"
|
||||||
|
#import "AddContactAction.h"
|
||||||
|
|
||||||
|
@implementation BusinessCardParsedResult
|
||||||
|
|
||||||
|
@synthesize name;
|
||||||
|
@synthesize phoneNumbers;
|
||||||
|
@synthesize note;
|
||||||
|
@synthesize email;
|
||||||
|
@synthesize urlString;
|
||||||
|
@synthesize address;
|
||||||
|
|
||||||
|
- (NSString *)stringForDisplay {
|
||||||
|
NSMutableString *result = [NSMutableString stringWithString:self.name];
|
||||||
|
if (self.phoneNumbers) {
|
||||||
|
for (NSString *number in self.phoneNumbers) {
|
||||||
|
[result appendFormat:@"\n%@", number];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.email) {
|
||||||
|
[result appendFormat:@"\n%@", self.email];
|
||||||
|
}
|
||||||
|
if (self.urlString) {
|
||||||
|
[result appendFormat:@"\n%@", self.urlString];
|
||||||
|
}
|
||||||
|
if (self.note) {
|
||||||
|
[result appendFormat:@"\n%@", self.note];
|
||||||
|
}
|
||||||
|
if (self.address) {
|
||||||
|
[result appendFormat:@"\n%@", self.address];
|
||||||
|
}
|
||||||
|
return [NSString stringWithString:result];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)populateActions {
|
||||||
|
[actions addObject:[AddContactAction actionWithName:self.name
|
||||||
|
phoneNumbers:self.phoneNumbers
|
||||||
|
email:self.email
|
||||||
|
url:self.urlString
|
||||||
|
address:self.address
|
||||||
|
note:self.note]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) dealloc {
|
||||||
|
[name release];
|
||||||
|
[phoneNumbers release];
|
||||||
|
[email release];
|
||||||
|
[urlString release];
|
||||||
|
[address release];
|
||||||
|
[note release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSString *)typeName {
|
||||||
|
return NSLocalizedString(@"Contact Result Type Name", @"Contact");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImage *)icon {
|
||||||
|
return [UIImage imageNamed:@"business-card.png"];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
36
iphone/ZXingWidget/CallAction.h
Normal file
36
iphone/ZXingWidget/CallAction.h
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
//
|
||||||
|
// CallAction.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 28/05/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 <UIKit/UIKit.h>
|
||||||
|
#import "OpenUrlAction.h"
|
||||||
|
|
||||||
|
@interface CallAction : OpenUrlAction {
|
||||||
|
NSString *number;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, copy) NSString *number;
|
||||||
|
|
||||||
|
+ (NSURL *)urlForNumber:(NSString *)number;
|
||||||
|
|
||||||
|
- (id)initWithNumber:(NSString *)number;
|
||||||
|
+ (id)actionWithNumber:(NSString *)number;
|
||||||
|
|
||||||
|
@end
|
67
iphone/ZXingWidget/CallAction.m
Normal file
67
iphone/ZXingWidget/CallAction.m
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
//
|
||||||
|
// CallAction.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 28/05/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 "CallAction.h"
|
||||||
|
|
||||||
|
|
||||||
|
@implementation CallAction
|
||||||
|
|
||||||
|
@synthesize number;
|
||||||
|
|
||||||
|
+ (NSURL *)urlForNumber:(NSString *)number {
|
||||||
|
NSString *urlString = [NSString stringWithFormat:@"tel:%@", number];
|
||||||
|
return [NSURL URLWithString:urlString];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithNumber:(NSString *)n {
|
||||||
|
if ((self = [super initWithURL:[[self class] urlForNumber:n]]) != nil) {
|
||||||
|
self.number = n;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (id)actionWithNumber:(NSString *)number {
|
||||||
|
return [[[self alloc] initWithNumber:number] autorelease];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)title {
|
||||||
|
return [NSString localizedStringWithFormat:NSLocalizedString(@"CallAction action title", @"Call %@"), self.number];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)alertTitle {
|
||||||
|
return NSLocalizedString(@"CallAction alert title", @"Call");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)alertMessage {
|
||||||
|
return [NSString localizedStringWithFormat:NSLocalizedString(@"CallAction alert message", @"Call %@?"), self.number];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)alertButtonTitle {
|
||||||
|
return NSLocalizedString(@"CallAction alert button title", @"Call");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void) dealloc {
|
||||||
|
[number release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
49
iphone/ZXingWidget/Decoder.h
Normal file
49
iphone/ZXingWidget/Decoder.h
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
//
|
||||||
|
// Decoder.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 31/03/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 <UIKit/UIKit.h>
|
||||||
|
#import "DecoderDelegate.h"
|
||||||
|
|
||||||
|
@interface Decoder : NSObject {
|
||||||
|
UIImage *image;
|
||||||
|
CGRect cropRect;
|
||||||
|
UIImage *subsetImage;
|
||||||
|
unsigned char *subsetData;
|
||||||
|
size_t subsetWidth;
|
||||||
|
size_t subsetHeight;
|
||||||
|
size_t subsetBytesPerRow;
|
||||||
|
id<DecoderDelegate> delegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property(nonatomic, retain) UIImage *image;
|
||||||
|
@property(nonatomic, assign) CGRect cropRect;
|
||||||
|
@property(nonatomic, retain) UIImage *subsetImage;
|
||||||
|
@property(nonatomic, assign) unsigned char *subsetData;
|
||||||
|
@property(assign) size_t subsetWidth;
|
||||||
|
@property(assign) size_t subsetHeight;
|
||||||
|
@property(assign) size_t subsetBytesPerRow;
|
||||||
|
@property(nonatomic, assign) id<DecoderDelegate> delegate;
|
||||||
|
|
||||||
|
- (void) decodeImage:(UIImage *)image;
|
||||||
|
- (void) decodeImage:(UIImage *)image cropRect:(CGRect)cropRect;
|
||||||
|
|
||||||
|
@end
|
267
iphone/ZXingWidget/Decoder.mm
Normal file
267
iphone/ZXingWidget/Decoder.mm
Normal file
|
@ -0,0 +1,267 @@
|
||||||
|
//
|
||||||
|
// Decoder.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 31/03/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 "Decoder.h"
|
||||||
|
#import "TwoDDecoderResult.h"
|
||||||
|
#import "FormatReader.h"
|
||||||
|
|
||||||
|
#include <zxing/BinaryBitmap.h>
|
||||||
|
#include <zxing/ReaderException.h>
|
||||||
|
#include <zxing/common/IllegalArgumentException.h>
|
||||||
|
#include <zxing/common/GlobalHistogramBinarizer.h>
|
||||||
|
#include "GrayBytesMonochromeBitmapSource.h"
|
||||||
|
|
||||||
|
using namespace zxing;
|
||||||
|
|
||||||
|
@implementation Decoder
|
||||||
|
|
||||||
|
@synthesize image;
|
||||||
|
@synthesize cropRect;
|
||||||
|
@synthesize subsetImage;
|
||||||
|
@synthesize subsetData;
|
||||||
|
@synthesize subsetWidth;
|
||||||
|
@synthesize subsetHeight;
|
||||||
|
@synthesize subsetBytesPerRow;
|
||||||
|
@synthesize delegate;
|
||||||
|
|
||||||
|
- (void)willDecodeImage {
|
||||||
|
if ([self.delegate respondsToSelector:@selector(decoder:willDecodeImage:usingSubset:)]) {
|
||||||
|
[self.delegate decoder:self willDecodeImage:self.image usingSubset:self.subsetImage];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)progressDecodingImage:(NSString *)progress {
|
||||||
|
if ([self.delegate respondsToSelector:@selector(decoder:decodingImage:usingSubset:progress:)]) {
|
||||||
|
[self.delegate decoder:self decodingImage:self.image usingSubset:self.subsetImage progress:progress];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)didDecodeImage:(TwoDDecoderResult *)result {
|
||||||
|
if ([self.delegate respondsToSelector:@selector(decoder:didDecodeImage:usingSubset:withResult:)]) {
|
||||||
|
[self.delegate decoder:self didDecodeImage:self.image usingSubset:self.subsetImage withResult:result];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)failedToDecodeImage:(NSString *)reason {
|
||||||
|
if ([self.delegate respondsToSelector:@selector(decoder:failedToDecodeImage:usingSubset:reason:)]) {
|
||||||
|
[self.delegate decoder:self failedToDecodeImage:self.image usingSubset:self.subsetImage reason:reason];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#define SUBSET_SIZE 320.0
|
||||||
|
- (void) prepareSubset {
|
||||||
|
CGSize size = [image size];
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"decoding: image is (%.1f x %.1f), cropRect is (%.1f,%.1f)x(%.1f,%.1f)", size.width, size.height,
|
||||||
|
cropRect.origin.x, cropRect.origin.y, cropRect.size.width, cropRect.size.height);
|
||||||
|
#endif
|
||||||
|
float scale = fminf(1.0f, fmaxf(SUBSET_SIZE / cropRect.size.width, SUBSET_SIZE / cropRect.size.height));
|
||||||
|
CGPoint offset = CGPointMake(-cropRect.origin.x, -cropRect.origin.y);
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@" offset = (%.1f, %.1f), scale = %.3f", offset.x, offset.y, scale);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
subsetWidth = cropRect.size.width * scale;
|
||||||
|
subsetHeight = cropRect.size.height * scale;
|
||||||
|
|
||||||
|
subsetBytesPerRow = ((subsetWidth + 0xf) >> 4) << 4;
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"decoding: image to decode is (%d x %d) (%d bytes/row)", subsetWidth, subsetHeight, subsetBytesPerRow);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
subsetData = (unsigned char *)malloc(subsetBytesPerRow * subsetHeight);
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"allocated %d bytes of memory", subsetBytesPerRow * subsetHeight);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CGColorSpaceRef grayColorSpace = CGColorSpaceCreateDeviceGray();
|
||||||
|
|
||||||
|
CGContextRef ctx =
|
||||||
|
CGBitmapContextCreate(subsetData, subsetWidth, subsetHeight,
|
||||||
|
8, subsetBytesPerRow, grayColorSpace,
|
||||||
|
kCGImageAlphaNone);
|
||||||
|
CGColorSpaceRelease(grayColorSpace);
|
||||||
|
CGContextSetInterpolationQuality(ctx, kCGInterpolationNone);
|
||||||
|
CGContextSetAllowsAntialiasing(ctx, false);
|
||||||
|
// adjust the coordinate system
|
||||||
|
CGContextTranslateCTM(ctx, 0.0, subsetHeight);
|
||||||
|
CGContextScaleCTM(ctx, 1.0, -1.0);
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"created %dx%d bitmap context", subsetWidth, subsetHeight);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
UIGraphicsPushContext(ctx);
|
||||||
|
CGRect rect = CGRectMake(offset.x * scale, offset.y * scale, scale * size.width, scale * size.height);
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"rect for image = (%.1f,%.1f)x(%.1f,%.1f)", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
|
||||||
|
#endif
|
||||||
|
[image drawInRect:rect];
|
||||||
|
UIGraphicsPopContext();
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"drew image into %d(%d)x%d bitmap context", subsetWidth, subsetBytesPerRow, subsetHeight);
|
||||||
|
#endif
|
||||||
|
CGContextFlush(ctx);
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"flushed context");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CGImageRef subsetImageRef = CGBitmapContextCreateImage(ctx);
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"created CGImage from context");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
self.subsetImage = [UIImage imageWithCGImage:subsetImageRef];
|
||||||
|
// for debug purposes.
|
||||||
|
UIImageWriteToSavedPhotosAlbum(self.subsetImage, nil, nil, nil);
|
||||||
|
|
||||||
|
CGImageRelease(subsetImageRef);
|
||||||
|
|
||||||
|
CGContextRelease(ctx);
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"released context");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)decode:(id)arg {
|
||||||
|
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||||
|
{
|
||||||
|
|
||||||
|
NSSet *formatReaders = [FormatReader formatReaders];
|
||||||
|
|
||||||
|
Ref<LuminanceSource> source (new GrayBytesMonochromeBitmapSource(subsetData, subsetWidth, subsetHeight, subsetBytesPerRow));
|
||||||
|
|
||||||
|
Ref<Binarizer> binarizer (new GlobalHistogramBinarizer(source));
|
||||||
|
Ref<BinaryBitmap> grayImage (new BinaryBitmap(binarizer));
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"created GrayBytesMonochromeBitmapSource", subsetWidth, subsetHeight);
|
||||||
|
NSLog(@"grayImage count = %d", grayImage->count());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
TwoDDecoderResult *decoderResult = nil;
|
||||||
|
|
||||||
|
#ifdef TRY_ROTATIONS
|
||||||
|
for (int i = 0; !decoderResult && i < 4; i++) {`
|
||||||
|
#endif
|
||||||
|
for (FormatReader *reader in formatReaders) {
|
||||||
|
try {
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"decoding gray image");
|
||||||
|
#endif
|
||||||
|
Ref<Result> result([reader decode:grayImage]);
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"gray image decoded");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Ref<String> resultText(result->getText());
|
||||||
|
const char *cString = resultText->getText().c_str();
|
||||||
|
const std::vector<Ref<ResultPoint> > &resultPoints = result->getResultPoints();
|
||||||
|
NSMutableArray *points =
|
||||||
|
[NSMutableArray arrayWithCapacity:resultPoints.size()];
|
||||||
|
|
||||||
|
for (size_t i = 0; i < resultPoints.size(); i++) {
|
||||||
|
const Ref<ResultPoint> &rp = resultPoints[i];
|
||||||
|
CGPoint p = CGPointMake(rp->getX(), rp->getY());
|
||||||
|
[points addObject:[NSValue valueWithCGPoint:p]];
|
||||||
|
}
|
||||||
|
|
||||||
|
NSString *resultString = [NSString stringWithCString:cString
|
||||||
|
encoding:NSUTF8StringEncoding];
|
||||||
|
|
||||||
|
decoderResult = [TwoDDecoderResult resultWithText:resultString
|
||||||
|
points:points];
|
||||||
|
} catch (ReaderException &rex) {
|
||||||
|
NSLog(@"failed to decode, caught ReaderException '%s'",
|
||||||
|
rex.what());
|
||||||
|
} catch (IllegalArgumentException &iex) {
|
||||||
|
NSLog(@"failed to decode, caught IllegalArgumentException '%s'",
|
||||||
|
iex.what());
|
||||||
|
} catch (...) {
|
||||||
|
NSLog(@"Caught unknown exception!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef TRY_ROTATIONS
|
||||||
|
if (!decoderResult) {
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"rotating gray image");
|
||||||
|
#endif
|
||||||
|
grayImage = grayImage->rotateCounterClockwise();
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"gray image rotated");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (decoderResult) {
|
||||||
|
[self performSelectorOnMainThread:@selector(didDecodeImage:)
|
||||||
|
withObject:decoderResult
|
||||||
|
waitUntilDone:NO];
|
||||||
|
} else {
|
||||||
|
[self performSelectorOnMainThread:@selector(failedToDecodeImage:)
|
||||||
|
withObject:NSLocalizedString(@"Decoder BarcodeDetectionFailure", @"No barcode detected.")
|
||||||
|
waitUntilDone:NO];
|
||||||
|
}
|
||||||
|
|
||||||
|
free(subsetData);
|
||||||
|
self.subsetData = NULL;
|
||||||
|
}
|
||||||
|
[pool drain];
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"finished decoding.");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// if this is not the main thread, then we end it
|
||||||
|
if (![NSThread isMainThread]) {
|
||||||
|
[NSThread exit];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) decodeImage:(UIImage *)i {
|
||||||
|
[self decodeImage:i cropRect:CGRectMake(0.0f, 0.0f, image.size.width, image.size.height)];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) decodeImage:(UIImage *)i cropRect:(CGRect)cr {
|
||||||
|
self.image = i;
|
||||||
|
self.cropRect = cr;
|
||||||
|
|
||||||
|
[self prepareSubset];
|
||||||
|
[self willDecodeImage];
|
||||||
|
[self performSelectorOnMainThread:@selector(progressDecodingImage:)
|
||||||
|
withObject:NSLocalizedString(@"Decoder MessageWhileDecoding", @"Decoding ...")
|
||||||
|
waitUntilDone:NO];
|
||||||
|
|
||||||
|
[NSThread detachNewThreadSelector:@selector(decode:)
|
||||||
|
toTarget:self
|
||||||
|
withObject:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) dealloc {
|
||||||
|
[image release];
|
||||||
|
[subsetImage release];
|
||||||
|
if (subsetData) free(subsetData);
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
34
iphone/ZXingWidget/DecoderDelegate.h
Normal file
34
iphone/ZXingWidget/DecoderDelegate.h
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
//
|
||||||
|
// DecoderDelegate.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 01/04/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 <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
@class Decoder;
|
||||||
|
@class TwoDDecoderResult;
|
||||||
|
|
||||||
|
@protocol DecoderDelegate<NSObject>
|
||||||
|
@optional
|
||||||
|
- (void)decoder:(Decoder *)decoder willDecodeImage:(UIImage *)image usingSubset:(UIImage *)subset;
|
||||||
|
- (void)decoder:(Decoder *)decoder decodingImage:(UIImage *)image usingSubset:(UIImage *)subset progress:(NSString *)message;
|
||||||
|
- (void)decoder:(Decoder *)decoder didDecodeImage:(UIImage *)image usingSubset:(UIImage *)subset withResult:(TwoDDecoderResult *)result;
|
||||||
|
- (void)decoder:(Decoder *)decoder failedToDecodeImage:(UIImage *)image usingSubset:(UIImage *)subset reason:(NSString *)reason;
|
||||||
|
|
||||||
|
@end
|
38
iphone/ZXingWidget/DoCoMoResultParser.h
Normal file
38
iphone/ZXingWidget/DoCoMoResultParser.h
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
//
|
||||||
|
// DoCoMoResultParser.h
|
||||||
|
// 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 <UIKit/UIKit.h>
|
||||||
|
#import "ResultParser.h"
|
||||||
|
|
||||||
|
@interface NSString (DoCoMoFieldParsing)
|
||||||
|
- (NSString *)backslashUnescaped;
|
||||||
|
- (NSArray *)fieldsWithPrefix:(NSString *)prefix;
|
||||||
|
- (NSArray *)fieldsWithPrefix:(NSString *)prefix terminator:(NSString *)term;
|
||||||
|
- (NSString *)fieldWithPrefix:(NSString *)prefix;
|
||||||
|
- (NSString *)fieldWithPrefix:(NSString *)prefix terminator:(NSString *)term;
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@interface DoCoMoResultParser : ResultParser {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
114
iphone/ZXingWidget/DoCoMoResultParser.m
Normal file
114
iphone/ZXingWidget/DoCoMoResultParser.m
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
//
|
||||||
|
// DoCoMoResultParser.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 "DoCoMoResultParser.h"
|
||||||
|
|
||||||
|
|
||||||
|
@implementation NSString (DoCoMoFieldParsing)
|
||||||
|
|
||||||
|
- (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;
|
||||||
|
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 {
|
||||||
|
NSString *substring = [self substringWithRange:NSMakeRange(start, termRange.location - start)];
|
||||||
|
NSString *unescaped = [substring backslashUnescaped];
|
||||||
|
if (result == nil) {
|
||||||
|
result = [NSMutableArray arrayWithObject:unescaped];
|
||||||
|
} else {
|
||||||
|
[result addObject:unescaped];
|
||||||
|
}
|
||||||
|
i = termRange.location + termRange.length;
|
||||||
|
done = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (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];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@implementation DoCoMoResultParser
|
||||||
|
|
||||||
|
@end
|
34
iphone/ZXingWidget/EmailAction.h
Normal file
34
iphone/ZXingWidget/EmailAction.h
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
//
|
||||||
|
// EmailAction.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 28/05/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 <UIKit/UIKit.h>
|
||||||
|
#include "OpenUrlAction.h"
|
||||||
|
|
||||||
|
@interface EmailAction : OpenUrlAction {
|
||||||
|
NSString *recipient;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, copy) NSString *recipient;
|
||||||
|
|
||||||
|
- (id)initWithRecipient:(NSString *)recipient subject:(NSString *)subject body:(NSString *)body;
|
||||||
|
+ (id)actionWithRecipient:(NSString *)recipient subject:(NSString *)subject body:(NSString *)body;
|
||||||
|
|
||||||
|
@end
|
68
iphone/ZXingWidget/EmailAction.m
Normal file
68
iphone/ZXingWidget/EmailAction.m
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
//
|
||||||
|
// EmailAction.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 28/05/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 "EmailAction.h"
|
||||||
|
|
||||||
|
@implementation EmailAction
|
||||||
|
|
||||||
|
@synthesize recipient;
|
||||||
|
|
||||||
|
static NSURL *MailtoURL(NSString *to, NSString *sub, NSString *body) {
|
||||||
|
NSMutableString *result = [NSMutableString stringWithFormat:@"mailto:%@",
|
||||||
|
[to stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
|
||||||
|
if (sub) {
|
||||||
|
[result appendFormat:@"&subject=%@", [sub stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
|
||||||
|
}
|
||||||
|
if (body) {
|
||||||
|
[result appendFormat:@"&body=%@", [body stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
|
||||||
|
}
|
||||||
|
return [NSURL URLWithString:result];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithRecipient:(NSString *)rec subject:(NSString *)subject body:(NSString *)body {
|
||||||
|
if ((self = [super initWithURL:MailtoURL(rec, subject, body)]) != nil) {
|
||||||
|
self.recipient = rec;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (id)actionWithRecipient:(NSString *)recipient subject:(NSString *)subject body:(NSString *)body {
|
||||||
|
return [[[self alloc] initWithRecipient:recipient subject:subject body:body] autorelease];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)title {
|
||||||
|
return [NSString localizedStringWithFormat:NSLocalizedString(@"EmailAction action title", @"Email %@"), self.recipient];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)alertTitle {
|
||||||
|
return NSLocalizedString(@"EmailAction alert title", @"Compose Email");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)alertMessage {
|
||||||
|
return [NSString localizedStringWithFormat:NSLocalizedString(@"EmailAction alert message", @"Compose Email to %@?"), self.recipient];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)alertButtonTitle {
|
||||||
|
return NSLocalizedString(@"EmailAction alert button title", @"Compose");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
29
iphone/ZXingWidget/EmailDoCoMoResultParser.h
Normal file
29
iphone/ZXingWidget/EmailDoCoMoResultParser.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
//
|
||||||
|
// EmailDoCoMoResultParser.h
|
||||||
|
// 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 <UIKit/UIKit.h>
|
||||||
|
#import "DoCoMoResultParser.h"
|
||||||
|
|
||||||
|
@interface EmailDoCoMoResultParser : DoCoMoResultParser {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
50
iphone/ZXingWidget/EmailDoCoMoResultParser.m
Normal file
50
iphone/ZXingWidget/EmailDoCoMoResultParser.m
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
//
|
||||||
|
// EmailDoCoMoResultParser.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 "EmailDoCoMoResultParser.h"
|
||||||
|
#import "EmailParsedResult.h"
|
||||||
|
|
||||||
|
@implementation EmailDoCoMoResultParser
|
||||||
|
|
||||||
|
+ (void)load {
|
||||||
|
[ResultParser registerResultParserClass:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (ParsedResult *)parsedResultForString:(NSString *)s {
|
||||||
|
NSRange foundRange = [s rangeOfString:@"MATMSG:"];
|
||||||
|
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];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
37
iphone/ZXingWidget/EmailParsedResult.h
Normal file
37
iphone/ZXingWidget/EmailParsedResult.h
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
//
|
||||||
|
// EmailDoCoMoParsedResult.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 28/05/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 <UIKit/UIKit.h>
|
||||||
|
#import "ParsedResult.h"
|
||||||
|
|
||||||
|
@interface EmailParsedResult : ParsedResult {
|
||||||
|
NSString *to;
|
||||||
|
NSString *subject;
|
||||||
|
NSString *body;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, copy) NSString *to;
|
||||||
|
@property (nonatomic, copy) NSString *subject;
|
||||||
|
@property (nonatomic, copy) NSString *body;
|
||||||
|
|
||||||
|
+ (bool) looksLikeAnEmailAddress:(NSString *)s;
|
||||||
|
|
||||||
|
@end
|
74
iphone/ZXingWidget/EmailParsedResult.m
Normal file
74
iphone/ZXingWidget/EmailParsedResult.m
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
//
|
||||||
|
// EmailDoCoMoParsedResult.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 28/05/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 "EmailParsedResult.h"
|
||||||
|
#import "EmailAction.h"
|
||||||
|
|
||||||
|
|
||||||
|
@implementation EmailParsedResult
|
||||||
|
|
||||||
|
@synthesize to;
|
||||||
|
@synthesize subject;
|
||||||
|
@synthesize body;
|
||||||
|
|
||||||
|
+ (bool) looksLikeAnEmailAddress:(NSString *)s {
|
||||||
|
if ([s rangeOfString:@"@"].location == NSNotFound) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ([s rangeOfString:@"."].location == NSNotFound) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ([s rangeOfCharacterFromSet:[NSCharacterSet whitespaceCharacterSet]].location != NSNotFound) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (NSString *)stringForDisplay {
|
||||||
|
NSMutableArray *parts = [[NSMutableArray alloc] initWithCapacity:10];
|
||||||
|
[parts addObject:[NSString stringWithFormat:NSLocalizedString(@"EmailParsedResult Display: Recipient", @"To: %@"), self.to]];
|
||||||
|
if (self.subject) {
|
||||||
|
[parts addObject:[NSString stringWithFormat:NSLocalizedString(@"EmailParsedResult Display: Subject", @"Subject: %@"), self.subject]];
|
||||||
|
}
|
||||||
|
if (self.body) {
|
||||||
|
[parts addObject:@""];
|
||||||
|
[parts addObject:[NSString stringWithFormat:NSLocalizedString(@"EmailParsedResult Display: Body", @"%@"), self.body]];
|
||||||
|
}
|
||||||
|
return [parts componentsJoinedByString:@"\n"];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSString *)typeName {
|
||||||
|
return NSLocalizedString(@"EmailParsedResult type name", @"Email");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray *)actions {
|
||||||
|
return [NSArray arrayWithObject:[EmailAction actionWithRecipient:self.to
|
||||||
|
subject:self.subject
|
||||||
|
body:self.body]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImage *)icon {
|
||||||
|
return [UIImage imageNamed:@"email.png"];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
37
iphone/ZXingWidget/FormatReader.h
Normal file
37
iphone/ZXingWidget/FormatReader.h
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
//
|
||||||
|
// FormatReader.h
|
||||||
|
//
|
||||||
|
// Created by Dave MacLachlan on 2010-05-03.
|
||||||
|
/*
|
||||||
|
* Copyright 2010 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 <Foundation/Foundation.h>
|
||||||
|
#import <zxing/common/Counted.h>
|
||||||
|
#import <zxing/Result.h>
|
||||||
|
#import <zxing/BinaryBitmap.h>
|
||||||
|
#import <zxing/Reader.h>
|
||||||
|
|
||||||
|
@interface FormatReader : NSObject {
|
||||||
|
zxing::Reader *reader_;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (void)registerFormatReader:(FormatReader *)formatReader;
|
||||||
|
+ (NSSet *)formatReaders;
|
||||||
|
|
||||||
|
- (id)initWithReader:(zxing::Reader *)reader;
|
||||||
|
- (zxing::Ref<zxing::Result>)decode:(zxing::Ref<zxing::BinaryBitmap>)grayImage;
|
||||||
|
|
||||||
|
@end
|
64
iphone/ZXingWidget/FormatReader.mm
Normal file
64
iphone/ZXingWidget/FormatReader.mm
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
//
|
||||||
|
// FormatReader.mm
|
||||||
|
//
|
||||||
|
// Created by Dave MacLachlan on 2010-05-03.
|
||||||
|
/*
|
||||||
|
* Copyright 2010 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 "FormatReader.h"
|
||||||
|
|
||||||
|
@implementation FormatReader
|
||||||
|
|
||||||
|
static NSMutableSet *sFormatReaders = nil;
|
||||||
|
|
||||||
|
+ (void)registerFormatReader:(FormatReader*)formatReader {
|
||||||
|
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||||
|
@synchronized(self) {
|
||||||
|
if (!sFormatReaders) {
|
||||||
|
sFormatReaders = [[NSMutableSet alloc] init];
|
||||||
|
}
|
||||||
|
[sFormatReaders addObject:formatReader];
|
||||||
|
}
|
||||||
|
[pool drain];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSSet *)formatReaders {
|
||||||
|
NSSet *formatReaders = nil;
|
||||||
|
@synchronized(self) {
|
||||||
|
|
||||||
|
formatReaders = [[sFormatReaders copy] autorelease];
|
||||||
|
NSLog(@"readers : %d",[formatReaders count]);
|
||||||
|
}
|
||||||
|
return formatReaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithReader:(zxing::Reader *)reader {
|
||||||
|
if ((self = [super init])) {
|
||||||
|
reader_ = reader;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc {
|
||||||
|
delete reader_;
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (zxing::Ref<zxing::Result>)decode:(zxing::Ref<zxing::BinaryBitmap>)grayImage {
|
||||||
|
return reader_->decode(grayImage);
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
34
iphone/ZXingWidget/GeoParsedResult.h
Normal file
34
iphone/ZXingWidget/GeoParsedResult.h
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
//
|
||||||
|
// GeoParsedResult.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 05/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 <UIKit/UIKit.h>
|
||||||
|
#import "ParsedResult.h"
|
||||||
|
|
||||||
|
@interface GeoParsedResult : ParsedResult {
|
||||||
|
NSString *location;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, copy) NSString *location;
|
||||||
|
|
||||||
|
- (id)initWithLocation:(NSString *)location;
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
59
iphone/ZXingWidget/GeoParsedResult.m
Normal file
59
iphone/ZXingWidget/GeoParsedResult.m
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
//
|
||||||
|
// GeoParsedResult.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 05/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 "GeoParsedResult.h"
|
||||||
|
#import "ShowMapAction.h"
|
||||||
|
|
||||||
|
@implementation GeoParsedResult
|
||||||
|
|
||||||
|
@synthesize location;
|
||||||
|
|
||||||
|
- (id)initWithLocation:(NSString *)l {
|
||||||
|
if ((self = [super init]) != nil) {
|
||||||
|
self.location = l;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
+ (NSString *)typeName {
|
||||||
|
return NSLocalizedString(@"GeoParsedResult type name", @"Geolocation");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImage *)icon {
|
||||||
|
return [UIImage imageNamed:@"map-pin.png"];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (NSString *)stringForDisplay {
|
||||||
|
return [NSString stringWithFormat:NSLocalizedString(@"GeoParsedResult display", @"Geo: %@"), self.location];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)populateActions {
|
||||||
|
[actions addObject:[ShowMapAction actionWithLocation:self.location]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) dealloc {
|
||||||
|
[location release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
29
iphone/ZXingWidget/GeoResultParser.h
Normal file
29
iphone/ZXingWidget/GeoResultParser.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
//
|
||||||
|
// GeoResultParser.h
|
||||||
|
// 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 <UIKit/UIKit.h>
|
||||||
|
#import "ResultParser.h"
|
||||||
|
|
||||||
|
@interface GeoResultParser : ResultParser {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
43
iphone/ZXingWidget/GeoResultParser.m
Normal file
43
iphone/ZXingWidget/GeoResultParser.m
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
//
|
||||||
|
// GeoResultParser.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 "GeoResultParser.h"
|
||||||
|
#import "GeoParsedResult.h"
|
||||||
|
|
||||||
|
#define PREFIX @"geo:"
|
||||||
|
|
||||||
|
@implementation GeoResultParser
|
||||||
|
|
||||||
|
+ (void)load {
|
||||||
|
[ResultParser registerResultParserClass:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (ParsedResult *)parsedResultForString:(NSString *)s {
|
||||||
|
NSRange prefixRange = [s rangeOfString:PREFIX options:NSCaseInsensitiveSearch];
|
||||||
|
if (prefixRange.location == 0) {
|
||||||
|
int restStart = prefixRange.location + prefixRange.length;
|
||||||
|
return [[[GeoParsedResult alloc] initWithLocation:[s substringFromIndex:restStart]]
|
||||||
|
autorelease];
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
50
iphone/ZXingWidget/GrayBytesMonochromeBitmapSource.cpp
Normal file
50
iphone/ZXingWidget/GrayBytesMonochromeBitmapSource.cpp
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
//
|
||||||
|
// GrayBytesMonochromeBitmapSource.cpp
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Thomas Recloux, Norsys on 04/12/2009.
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "GrayBytesMonochromeBitmapSource.h"
|
||||||
|
#include <zxing/ReaderException.h>
|
||||||
|
|
||||||
|
|
||||||
|
GrayBytesMonochromeBitmapSource::GrayBytesMonochromeBitmapSource(const unsigned char *bytes,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
int bytesPerRow) :
|
||||||
|
width_(width),
|
||||||
|
height_(height),
|
||||||
|
bytes_(bytes),
|
||||||
|
bytesPerRow_(bytesPerRow) { }
|
||||||
|
|
||||||
|
|
||||||
|
int GrayBytesMonochromeBitmapSource::getWidth() const{
|
||||||
|
return width_;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GrayBytesMonochromeBitmapSource::getHeight() const {
|
||||||
|
return height_;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char GrayBytesMonochromeBitmapSource::getPixel(int x, int y) const {
|
||||||
|
/* if (x >= width_ || y >= height_) {
|
||||||
|
throw new ReaderException("bitmap coordinate out of bounds");
|
||||||
|
}*/
|
||||||
|
int index = y * bytesPerRow_ + x;
|
||||||
|
return bytes_[index];
|
||||||
|
}
|
51
iphone/ZXingWidget/GrayBytesMonochromeBitmapSource.h
Normal file
51
iphone/ZXingWidget/GrayBytesMonochromeBitmapSource.h
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
//
|
||||||
|
// GrayBytesMonochromeBitmapSource.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Thomas Recloux, Norsys on 04/12/2009.
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __GRAY_BYTES_MONOCHROM_BITMAP_SOURCE_H__
|
||||||
|
#define __GRAY_BYTES_MONOCHROM_BITMAP_SOURCE_H__
|
||||||
|
|
||||||
|
#include <zxing/LuminanceSource.h>
|
||||||
|
|
||||||
|
class GrayBytesMonochromeBitmapSource : public zxing::LuminanceSource {
|
||||||
|
private:
|
||||||
|
int width_;
|
||||||
|
int height_;
|
||||||
|
const unsigned char *bytes_;
|
||||||
|
int bytesPerRow_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
GrayBytesMonochromeBitmapSource(const unsigned char *bytes,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
int bytesPerRow);
|
||||||
|
virtual ~GrayBytesMonochromeBitmapSource() { }
|
||||||
|
|
||||||
|
virtual unsigned char getPixel(int x, int y) const;
|
||||||
|
|
||||||
|
virtual int getWidth() const;
|
||||||
|
virtual int getHeight() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
GrayBytesMonochromeBitmapSource(const GrayBytesMonochromeBitmapSource&);
|
||||||
|
GrayBytesMonochromeBitmapSource& operator=(const GrayBytesMonochromeBitmapSource&);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __GRAY_BYTES_MONOCHROM_BITMAP_SOURCE_H__
|
29
iphone/ZXingWidget/MeCardParser.h
Normal file
29
iphone/ZXingWidget/MeCardParser.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
//
|
||||||
|
// MeCardParser.h
|
||||||
|
// 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 <UIKit/UIKit.h>
|
||||||
|
#import "DoCoMoResultParser.h"
|
||||||
|
|
||||||
|
@interface MeCardParser : DoCoMoResultParser {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
54
iphone/ZXingWidget/MeCardParser.m
Normal file
54
iphone/ZXingWidget/MeCardParser.m
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
//
|
||||||
|
// MeCardParser.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 "MeCardParser.h"
|
||||||
|
#import "BusinessCardParsedResult.h"
|
||||||
|
|
||||||
|
@implementation MeCardParser
|
||||||
|
|
||||||
|
+ (void)load {
|
||||||
|
[ResultParser registerResultParserClass:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (ParsedResult *)parsedResultForString:(NSString *)s {
|
||||||
|
NSRange foundRange = [s rangeOfString:@"MECARD:"];
|
||||||
|
if (foundRange.location == NSNotFound) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSString *name = [s fieldWithPrefix:@"N:"];
|
||||||
|
if (name == nil) {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
BusinessCardParsedResult *result = [[BusinessCardParsedResult alloc] init];
|
||||||
|
result.name = name;
|
||||||
|
result.phoneNumbers = [s fieldsWithPrefix:@"TEL:"];
|
||||||
|
result.email = [s fieldWithPrefix:@"EMAIL:"];
|
||||||
|
result.note = [s fieldWithPrefix:@"NOTE:"];
|
||||||
|
result.urlString = [s fieldWithPrefix:@"URL:"];
|
||||||
|
result.address = [s fieldWithPrefix:@"ADR:"];
|
||||||
|
|
||||||
|
return [result autorelease];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
42
iphone/ZXingWidget/MultiFormatReader.mm
Normal file
42
iphone/ZXingWidget/MultiFormatReader.mm
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
//
|
||||||
|
// MultiFormatReader.mm
|
||||||
|
//
|
||||||
|
// Created by Dave MacLachlan on 2010-05-03.
|
||||||
|
/*
|
||||||
|
* Copyright 2010 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 "FormatReader.h"
|
||||||
|
#import <zxing/MultiFormatReader.h>
|
||||||
|
|
||||||
|
@interface MultiFormatReader : FormatReader
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation MultiFormatReader
|
||||||
|
|
||||||
|
+ (void)load {
|
||||||
|
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||||
|
NSLog(@"MultiFormatReader: load called");
|
||||||
|
[FormatReader registerFormatReader:[[[self alloc] init] autorelease]];
|
||||||
|
[pool drain];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)init {
|
||||||
|
zxing::MultiFormatReader *reader = new zxing::MultiFormatReader();
|
||||||
|
NSLog(@"MultiFormatReader: init called");
|
||||||
|
return [super initWithReader:reader];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
32
iphone/ZXingWidget/NSString+HTML.h
Normal file
32
iphone/ZXingWidget/NSString+HTML.h
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
//
|
||||||
|
// NSString+HTML.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 28/05/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 <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
|
||||||
|
@interface NSString (HTMLExtensions)
|
||||||
|
|
||||||
|
+ (NSDictionary *)htmlEscapes;
|
||||||
|
+ (NSDictionary *)htmlUnescapes;
|
||||||
|
- (NSString *)htmlEscapedString;
|
||||||
|
- (NSString *)htmlUnescapedString;
|
||||||
|
|
||||||
|
@end
|
70
iphone/ZXingWidget/NSString+HTML.m
Normal file
70
iphone/ZXingWidget/NSString+HTML.m
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
//
|
||||||
|
// NSString+HTML.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 28/05/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 "NSString+HTML.h"
|
||||||
|
|
||||||
|
|
||||||
|
@implementation NSString (HTMLExtensions)
|
||||||
|
|
||||||
|
static NSDictionary *htmlEscapes = nil;
|
||||||
|
static NSDictionary *htmlUnescapes = nil;
|
||||||
|
|
||||||
|
+ (NSDictionary *)htmlEscapes {
|
||||||
|
if (!htmlEscapes) {
|
||||||
|
htmlEscapes = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||||
|
@"&", @"&",
|
||||||
|
@"<", @"<",
|
||||||
|
@">", @">",
|
||||||
|
nil
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return htmlEscapes;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSDictionary *)htmlUnescapes {
|
||||||
|
if (!htmlUnescapes) {
|
||||||
|
htmlUnescapes = [[NSDictionary alloc] initWithObjectsAndKeys:
|
||||||
|
@"&", @"&",
|
||||||
|
@"<", @"<",
|
||||||
|
@">", @">",
|
||||||
|
nil
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return htmlEscapes;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NSString *replaceAll(NSString *s, NSDictionary *replacements) {
|
||||||
|
for (NSString *key in replacements) {
|
||||||
|
NSString *replacement = [replacements objectForKey:key];
|
||||||
|
s = [s stringByReplacingOccurrencesOfString:key withString:replacement];
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)htmlEscapedString {
|
||||||
|
return replaceAll(self, [[self class] htmlEscapes]);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)htmlUnescapedString {
|
||||||
|
return replaceAll(self, [[self class] htmlUnescapes]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
42
iphone/ZXingWidget/OpenUrlAction.h
Normal file
42
iphone/ZXingWidget/OpenUrlAction.h
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
//
|
||||||
|
// OpenUrlAction.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 28/05/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 <UIKit/UIKit.h>
|
||||||
|
#import "ResultAction.h"
|
||||||
|
|
||||||
|
@interface OpenUrlAction : ResultAction <UIAlertViewDelegate> {
|
||||||
|
NSURL *URL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property(nonatomic, retain) NSURL *URL;
|
||||||
|
|
||||||
|
- (id)initWithURL:(NSURL *)URL;
|
||||||
|
+ (id)actionWithURL:(NSURL *)URL;
|
||||||
|
- (void)openURL;
|
||||||
|
|
||||||
|
- (NSString *)alertTitle;
|
||||||
|
- (NSString *)alertMessage;
|
||||||
|
- (NSString *)alertButtonTitle;
|
||||||
|
|
||||||
|
// UIAlertViewDelegate
|
||||||
|
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;
|
||||||
|
|
||||||
|
@end
|
82
iphone/ZXingWidget/OpenUrlAction.m
Normal file
82
iphone/ZXingWidget/OpenUrlAction.m
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
//
|
||||||
|
// OpenUrlAction.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 28/05/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 "OpenUrlAction.h"
|
||||||
|
|
||||||
|
|
||||||
|
@implementation OpenUrlAction
|
||||||
|
|
||||||
|
@synthesize URL;
|
||||||
|
|
||||||
|
- (id)initWithURL:(NSURL *)url {
|
||||||
|
if ((self = [super init]) != nil) {
|
||||||
|
self.URL = url;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (id)actionWithURL:(NSURL *)URL {
|
||||||
|
return [[[self alloc] initWithURL:URL] autorelease];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)title {
|
||||||
|
return [NSString localizedStringWithFormat:NSLocalizedString(@"OpenURLAction action title", @"Open URL"), self.URL];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)alertTitle {
|
||||||
|
return NSLocalizedString(@"OpenURLAction alert title", @"Open URL");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)alertMessage {
|
||||||
|
return [NSString localizedStringWithFormat:NSLocalizedString(@"OpenURLAction alert message", @"Open URL <%@>?"), self.URL];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)alertButtonTitle {
|
||||||
|
return NSLocalizedString(@"OpenURLAction alert button title", @"Open");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)performActionWithController:(UIViewController *)controller
|
||||||
|
shouldConfirm:(bool)shouldConfirm {
|
||||||
|
if (shouldConfirm) {
|
||||||
|
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil
|
||||||
|
message:[self alertMessage]
|
||||||
|
delegate:self
|
||||||
|
cancelButtonTitle:NSLocalizedString(@"OpenURLAction cancel button title", @"Cancel")
|
||||||
|
otherButtonTitles:[self alertButtonTitle], nil];
|
||||||
|
[alertView show];
|
||||||
|
[alertView release];
|
||||||
|
} else {
|
||||||
|
[self openURL];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)openURL {
|
||||||
|
[[UIApplication sharedApplication] openURL:self.URL];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
|
||||||
|
if (buttonIndex != [alertView cancelButtonIndex]) {
|
||||||
|
// perform the action
|
||||||
|
[self openURL];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
40
iphone/ZXingWidget/OverlayView.h
Executable file
40
iphone/ZXingWidget/OverlayView.h
Executable file
|
@ -0,0 +1,40 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2009 Jeff Verkoeyen
|
||||||
|
*
|
||||||
|
* 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>
|
||||||
|
|
||||||
|
@protocol CancelDelegate;
|
||||||
|
|
||||||
|
@interface OverlayView : UIView {
|
||||||
|
UIImageView *imageView;
|
||||||
|
NSArray *_points;
|
||||||
|
UIButton *cancelButton;
|
||||||
|
id<CancelDelegate> delegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
//@property (nonatomic, retain) UIImage* image;
|
||||||
|
@property (nonatomic, retain) NSArray* points;
|
||||||
|
@property (nonatomic, assign) id<CancelDelegate> delegate;
|
||||||
|
|
||||||
|
- (id)initWithCancelEnabled:(BOOL)cancelEnabled frame:(CGRect)frame;
|
||||||
|
|
||||||
|
- (CGRect)cropRect;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@protocol CancelDelegate
|
||||||
|
- (void)cancelled;
|
||||||
|
@end
|
166
iphone/ZXingWidget/OverlayView.m
Executable file
166
iphone/ZXingWidget/OverlayView.m
Executable file
|
@ -0,0 +1,166 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2009 Jeff Verkoeyen
|
||||||
|
*
|
||||||
|
* 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 "OverlayView.h"
|
||||||
|
|
||||||
|
static const CGFloat kPadding = 10;
|
||||||
|
|
||||||
|
@implementation OverlayView
|
||||||
|
|
||||||
|
@synthesize delegate;
|
||||||
|
@synthesize points = _points;
|
||||||
|
//@synthesize image;
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
- (id)initWithCancelEnabled:(BOOL)cancelEnabled frame:(CGRect)frame {
|
||||||
|
if( self = [super initWithFrame:frame] ) {
|
||||||
|
self.backgroundColor = [UIColor clearColor];
|
||||||
|
}
|
||||||
|
if (cancelEnabled) {
|
||||||
|
cancelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
|
||||||
|
[cancelButton setTitle:@"Cancel" forState:UIControlStateNormal];
|
||||||
|
[cancelButton setFrame:CGRectMake(95, 420, 130, 45)];
|
||||||
|
[cancelButton addTarget:self action:@selector(cancel:) forControlEvents:UIControlEventTouchUpInside];
|
||||||
|
[self addSubview:cancelButton];
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)cancel:(id)sender {
|
||||||
|
// call delegate to cancel this scanner
|
||||||
|
if (delegate != nil) {
|
||||||
|
[delegate cancelled];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
- (void) dealloc {
|
||||||
|
[imageView release];
|
||||||
|
imageView = nil;
|
||||||
|
[_points release];
|
||||||
|
_points = nil;
|
||||||
|
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)drawRect:(CGRect)rect inContext:(CGContextRef)context {
|
||||||
|
CGContextBeginPath(context);
|
||||||
|
CGContextMoveToPoint(context, rect.origin.x, rect.origin.y);
|
||||||
|
CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y);
|
||||||
|
CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y + rect.size.height);
|
||||||
|
CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y + rect.size.height);
|
||||||
|
CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y);
|
||||||
|
CGContextStrokePath(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
- (void)drawRect:(CGRect)rect {
|
||||||
|
[super drawRect:rect];
|
||||||
|
CGContextRef c = UIGraphicsGetCurrentContext();
|
||||||
|
|
||||||
|
CGRect cropRect = [self cropRect];
|
||||||
|
|
||||||
|
if (nil != _points) {
|
||||||
|
// [imageView.image drawAtPoint:cropRect.origin];
|
||||||
|
}
|
||||||
|
|
||||||
|
CGFloat white[4] = {1.0f, 1.0f, 1.0f, 1.0f};
|
||||||
|
CGContextSetStrokeColor(c, white);
|
||||||
|
CGContextSetFillColor(c, white);
|
||||||
|
[self drawRect:cropRect inContext:c];
|
||||||
|
|
||||||
|
// CGContextSetStrokeColor(c, white);
|
||||||
|
char *text = "Place a barcode inside the";
|
||||||
|
char *text2 = "viewfinder rectangle to scan it.";
|
||||||
|
// CGContextSetStrokeColor(c, white);
|
||||||
|
CGContextSaveGState(c);
|
||||||
|
CGContextSelectFont(c, "Helvetica", 18, kCGEncodingMacRoman);
|
||||||
|
CGContextScaleCTM(c, -1.0, 1.0);
|
||||||
|
CGContextRotateCTM(c, 3.1415);
|
||||||
|
CGContextShowTextAtPoint(c, 48.0, -45.0, text, 26);
|
||||||
|
CGContextShowTextAtPoint(c, 33.0, -70.0, text2, 32);
|
||||||
|
CGContextRestoreGState(c);
|
||||||
|
if( nil != _points ) {
|
||||||
|
CGFloat blue[4] = {0.0f, 1.0f, 0.0f, 1.0f};
|
||||||
|
CGContextSetStrokeColor(c, blue);
|
||||||
|
CGContextSetFillColor(c, blue);
|
||||||
|
CGRect smallSquare = CGRectMake(0, 0, 10, 10);
|
||||||
|
for( NSValue* value in _points ) {
|
||||||
|
CGPoint point = [value CGPointValue];
|
||||||
|
NSLog(@"drawing point at %f, %f", point.x, point.y);
|
||||||
|
smallSquare.origin = CGPointMake(
|
||||||
|
cropRect.origin.x + point.x - smallSquare.size.width / 2,
|
||||||
|
cropRect.origin.y + point.y - smallSquare.size.height / 2);
|
||||||
|
[self drawRect:smallSquare inContext:c];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/*
|
||||||
|
- (void) setImage:(UIImage*)image {
|
||||||
|
if( nil == _imageView ) {
|
||||||
|
_imageView = [[UIImageView alloc] initWithImage:image];
|
||||||
|
_imageView.alpha = 0.5;
|
||||||
|
} else {
|
||||||
|
_imageView.image = image;
|
||||||
|
}
|
||||||
|
|
||||||
|
CGRect frame = _imageView.frame;
|
||||||
|
frame.origin.x = self.cropRect.origin.x;
|
||||||
|
frame.origin.y = self.cropRect.origin.y;
|
||||||
|
_imageView.frame = frame;
|
||||||
|
|
||||||
|
[_points release];
|
||||||
|
_points = nil;
|
||||||
|
self.backgroundColor = [UIColor clearColor];
|
||||||
|
|
||||||
|
[self setNeedsDisplay];
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
- (UIImage*) image {
|
||||||
|
return imageView.image;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
- (CGRect) cropRect {
|
||||||
|
CGFloat rectSize = self.frame.size.width - kPadding * 2;
|
||||||
|
|
||||||
|
return CGRectMake(kPadding, (self.frame.size.height - rectSize) / 2, rectSize, rectSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
- (void) setPoints:(NSArray*)pnts {
|
||||||
|
[pnts retain];
|
||||||
|
[_points release];
|
||||||
|
_points = pnts;
|
||||||
|
|
||||||
|
if (pnts != nil) {
|
||||||
|
self.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.25];
|
||||||
|
}
|
||||||
|
[self setNeedsDisplay];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
35
iphone/ZXingWidget/ParsedResult.h
Normal file
35
iphone/ZXingWidget/ParsedResult.h
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
//
|
||||||
|
// ParsedResult.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 22/05/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 <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
@interface ParsedResult : NSObject {
|
||||||
|
NSMutableArray *actions;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSString *)typeName;
|
||||||
|
|
||||||
|
- (NSString *)stringForDisplay;
|
||||||
|
- (UIImage *)icon;
|
||||||
|
- (NSArray *)actions;
|
||||||
|
- (void)populateActions;
|
||||||
|
|
||||||
|
@end
|
104
iphone/ZXingWidget/ParsedResult.m
Normal file
104
iphone/ZXingWidget/ParsedResult.m
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
//
|
||||||
|
// ParsedResult.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 22/05/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 "ParsedResult.h"
|
||||||
|
|
||||||
|
#import "TextParsedResult.h"
|
||||||
|
#import "TelParsedResult.h"
|
||||||
|
#import "EmailParsedResult.h"
|
||||||
|
#import "BusinessCardParsedResult.h"
|
||||||
|
#import "URIParsedResult.h"
|
||||||
|
#import "GeoParsedResult.h"
|
||||||
|
|
||||||
|
#import "UIKit/UIStringDrawing.h"
|
||||||
|
#import <math.h>
|
||||||
|
|
||||||
|
@implementation ParsedResult
|
||||||
|
|
||||||
|
static NSMutableDictionary *iconsByClass = nil;
|
||||||
|
|
||||||
|
+ (NSString *)typeName {
|
||||||
|
return NSStringFromClass(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)stringForDisplay {
|
||||||
|
return @"{none}";
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ICON_SIZE 40
|
||||||
|
#define ICON_INSIDE 36
|
||||||
|
|
||||||
|
+ (UIImage *)icon {
|
||||||
|
if (iconsByClass == nil) {
|
||||||
|
iconsByClass = [[NSMutableDictionary alloc] initWithCapacity:16];
|
||||||
|
}
|
||||||
|
UIImage *icon = [iconsByClass objectForKey:[self class]];
|
||||||
|
if (icon == nil) {
|
||||||
|
UIGraphicsBeginImageContext(CGSizeMake(ICON_SIZE, ICON_SIZE));
|
||||||
|
CGContextRef ctx = UIGraphicsGetCurrentContext();
|
||||||
|
|
||||||
|
[[UIColor lightGrayColor] set];
|
||||||
|
UIRectFill(CGRectMake(0, 0, ICON_SIZE, ICON_SIZE));
|
||||||
|
|
||||||
|
[[UIColor blackColor] set];
|
||||||
|
NSString *s = [[self class] typeName];
|
||||||
|
UIFont *font = [UIFont systemFontOfSize:16];
|
||||||
|
CGSize stringSize = [s sizeWithFont:font];
|
||||||
|
float xScale = fminf(1.0, ICON_INSIDE / stringSize.width);
|
||||||
|
float yScale = fminf(1.0, ICON_INSIDE / stringSize.height);
|
||||||
|
|
||||||
|
CGContextTranslateCTM(ctx, (ICON_SIZE / 2), (ICON_SIZE / 2));
|
||||||
|
CGContextRotateCTM(ctx, -M_PI / 6.0);
|
||||||
|
CGContextScaleCTM(ctx, xScale, yScale);
|
||||||
|
CGContextTranslateCTM(ctx,
|
||||||
|
-(stringSize.width)/2.0,
|
||||||
|
-(stringSize.height)/2.0);
|
||||||
|
|
||||||
|
[s drawAtPoint:CGPointMake(0, 0) withFont:font];
|
||||||
|
|
||||||
|
icon = [UIGraphicsGetImageFromCurrentImageContext() retain];
|
||||||
|
[iconsByClass setObject:icon forKey:[self class]];
|
||||||
|
UIGraphicsEndImageContext();
|
||||||
|
}
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImage *)icon {
|
||||||
|
return [[self class] icon];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray *)actions {
|
||||||
|
if (!actions) {
|
||||||
|
actions = [[NSMutableArray alloc] init];
|
||||||
|
[self populateActions];
|
||||||
|
}
|
||||||
|
return actions;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) populateActions {
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) dealloc {
|
||||||
|
[actions release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
30
iphone/ZXingWidget/PlainEmailResultParser.h
Normal file
30
iphone/ZXingWidget/PlainEmailResultParser.h
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
//
|
||||||
|
// PlainEmailResultParser.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 28/07/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 <UIKit/UIKit.h>
|
||||||
|
#import "ResultParser.h"
|
||||||
|
|
||||||
|
|
||||||
|
@interface PlainEmailResultParser : ResultParser {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
40
iphone/ZXingWidget/PlainEmailResultParser.m
Normal file
40
iphone/ZXingWidget/PlainEmailResultParser.m
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
//
|
||||||
|
// PlainEmailResultParser.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 28/07/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 "PlainEmailResultParser.h"
|
||||||
|
#import "EmailParsedResult.h"
|
||||||
|
|
||||||
|
@implementation PlainEmailResultParser
|
||||||
|
|
||||||
|
+ (void)load {
|
||||||
|
[ResultParser registerResultParserClass:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (ParsedResult *)parsedResultForString:(NSString *)s {
|
||||||
|
if ([EmailParsedResult looksLikeAnEmailAddress:s]) {
|
||||||
|
EmailParsedResult *result = [[[EmailParsedResult alloc] init] autorelease];
|
||||||
|
[result setTo:s];
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
32
iphone/ZXingWidget/ResultAction.h
Normal file
32
iphone/ZXingWidget/ResultAction.h
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
//
|
||||||
|
// ResultAction.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 28/05/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 <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
@interface ResultAction : NSObject {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)title;
|
||||||
|
- (void)performActionWithController:(UIViewController *)controller
|
||||||
|
shouldConfirm:(bool)confirm;
|
||||||
|
|
||||||
|
@end
|
36
iphone/ZXingWidget/ResultAction.m
Normal file
36
iphone/ZXingWidget/ResultAction.m
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
//
|
||||||
|
// ResultAction.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 28/05/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 "ResultAction.h"
|
||||||
|
|
||||||
|
|
||||||
|
@implementation ResultAction
|
||||||
|
|
||||||
|
- (NSString *)title {
|
||||||
|
return @"Abstract Action";
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)performActionWithController:(UIViewController *)controller
|
||||||
|
shouldConfirm:(bool)confirm {
|
||||||
|
NSLog(@"Abstract Action performed");
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
31
iphone/ZXingWidget/ResultParser.h
Normal file
31
iphone/ZXingWidget/ResultParser.h
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
//
|
||||||
|
// ResultParser.h
|
||||||
|
// 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 <UIKit/UIKit.h>
|
||||||
|
#import "ParsedResult.h"
|
||||||
|
|
||||||
|
@interface ResultParser : NSObject {
|
||||||
|
|
||||||
|
}
|
||||||
|
+ (void)registerResultParserClass:(Class)resultParser;
|
||||||
|
+ (ParsedResult *)parsedResultForString:(NSString *)s;
|
||||||
|
|
||||||
|
@end
|
66
iphone/ZXingWidget/ResultParser.m
Normal file
66
iphone/ZXingWidget/ResultParser.m
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
//
|
||||||
|
// ResultParser.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 "ResultParser.h"
|
||||||
|
|
||||||
|
@implementation ResultParser
|
||||||
|
|
||||||
|
static NSMutableSet *sResultParsers = nil;
|
||||||
|
|
||||||
|
+ (void)registerResultParserClass:(Class)resultParser {
|
||||||
|
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||||
|
@synchronized(self) {
|
||||||
|
if (!sResultParsers) {
|
||||||
|
sResultParsers = [[NSMutableSet alloc] init];
|
||||||
|
}
|
||||||
|
[sResultParsers addObject:resultParser];
|
||||||
|
}
|
||||||
|
[pool drain];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSSet *)resultParsers {
|
||||||
|
NSSet *resultParsers = nil;
|
||||||
|
@synchronized(self) {
|
||||||
|
resultParsers = [[sResultParsers copy] autorelease];
|
||||||
|
}
|
||||||
|
return resultParsers;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (ParsedResult *)parsedResultForString:(NSString *)s {
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"parsing result:\n<<<\n%@\n>>>\n", s);
|
||||||
|
#endif
|
||||||
|
for (Class c in [self resultParsers]) {
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"trying %@", NSStringFromClass(c));
|
||||||
|
#endif
|
||||||
|
ParsedResult *result = [c parsedResultForString:s];
|
||||||
|
if (result != nil) {
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"parsed as %@ %@", NSStringFromClass([result class]), result);
|
||||||
|
#endif
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
34
iphone/ZXingWidget/SMSAction.h
Normal file
34
iphone/ZXingWidget/SMSAction.h
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
//
|
||||||
|
// SMSAction.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 16/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 <UIKit/UIKit.h>
|
||||||
|
#import "CallAction.h"
|
||||||
|
|
||||||
|
@interface SMSAction : CallAction {
|
||||||
|
NSString *body;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, copy) NSString *body;
|
||||||
|
|
||||||
|
+ actionWithNumber:(NSString *)number body:(NSString *)body;
|
||||||
|
+ actionWithNumber:(NSString *)number;
|
||||||
|
|
||||||
|
@end
|
85
iphone/ZXingWidget/SMSAction.m
Normal file
85
iphone/ZXingWidget/SMSAction.m
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
//
|
||||||
|
// SMSAction.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 16/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 "SMSAction.h"
|
||||||
|
|
||||||
|
// currently, including a message body makes the iPhone not actually
|
||||||
|
// go to compose an SMS at all, just start the SMS app. Bummer.
|
||||||
|
#ifdef SMS_URL_INCLUDE_BODY
|
||||||
|
#undef SMS_URL_INCLUDE_BODY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@implementation SMSAction
|
||||||
|
|
||||||
|
@synthesize body;
|
||||||
|
|
||||||
|
+ (NSURL *)urlForNumber:(NSString *)number withBody:(NSString *)body {
|
||||||
|
NSString *urlString =
|
||||||
|
#ifdef SMS_URL_INCLUDE_BODY
|
||||||
|
(body && [body length]) ?
|
||||||
|
[NSString stringWithFormat:@"sms:%@?body=%@", number, [body stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]] :
|
||||||
|
#endif
|
||||||
|
[NSString stringWithFormat:@"sms:%@", number];
|
||||||
|
return [NSURL URLWithString:urlString];
|
||||||
|
}
|
||||||
|
|
||||||
|
- initWithNumber:(NSString *)n body:(NSString *)b {
|
||||||
|
if ((self = [super initWithURL:[[self class] urlForNumber:n withBody:b]]) != nil) {
|
||||||
|
self.number = n;
|
||||||
|
self.body = b;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- initWithNumber:(NSString *)n {
|
||||||
|
return [self initWithNumber:n body:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ actionWithNumber:(NSString *)number body:(NSString *)body {
|
||||||
|
return [[[self alloc] initWithNumber:number body:body] autorelease];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ actionWithNumber:(NSString *)number {
|
||||||
|
return [self actionWithNumber:number body:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)title {
|
||||||
|
return [NSString localizedStringWithFormat:NSLocalizedString(@"SMSAction action title", @"Compose SMS to %@"), self.number];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)alertTitle {
|
||||||
|
return NSLocalizedString(@"SMSAction alert title", @"Compose");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)alertMessage {
|
||||||
|
return [NSString localizedStringWithFormat:NSLocalizedString(@"SMSAction alert message", @"Compose SMS to %@?"), self.number];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)alertButtonTitle {
|
||||||
|
return NSLocalizedString(@"SMSAction alert button title", @"Compose");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) dealloc {
|
||||||
|
[body release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
36
iphone/ZXingWidget/SMSParsedResult.h
Normal file
36
iphone/ZXingWidget/SMSParsedResult.h
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
//
|
||||||
|
// SMSParsedResult.h
|
||||||
|
// 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 <UIKit/UIKit.h>
|
||||||
|
#import "ParsedResult.h"
|
||||||
|
|
||||||
|
|
||||||
|
@interface SMSParsedResult : ParsedResult {
|
||||||
|
NSString *number;
|
||||||
|
NSString *body;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, copy) NSString *number;
|
||||||
|
@property (nonatomic, copy) NSString *body;
|
||||||
|
|
||||||
|
- (id)initWithNumber:(NSString *)n body:(NSString *)b;
|
||||||
|
|
||||||
|
@end
|
65
iphone/ZXingWidget/SMSParsedResult.m
Normal file
65
iphone/ZXingWidget/SMSParsedResult.m
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
//
|
||||||
|
// SMSParsedResult.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 "SMSParsedResult.h"
|
||||||
|
#import "SMSAction.h"
|
||||||
|
|
||||||
|
@implementation SMSParsedResult
|
||||||
|
|
||||||
|
@synthesize number;
|
||||||
|
@synthesize body;
|
||||||
|
|
||||||
|
- (id)initWithNumber:(NSString *)n body:(NSString *)b {
|
||||||
|
if ((self = [super init]) != nil) {
|
||||||
|
self.number = n;
|
||||||
|
self.body = b;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)stringForDisplay {
|
||||||
|
if (self.body) {
|
||||||
|
return [NSString stringWithFormat:@"%@\n%@", self.number, self.body];
|
||||||
|
}
|
||||||
|
return self.number;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
+ (NSString *)typeName {
|
||||||
|
return NSLocalizedString(@"SMSParsedResult type name", @"SMS");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImage *)icon {
|
||||||
|
return [UIImage imageNamed:@"sms.png"];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)populateActions {
|
||||||
|
[actions addObject:[SMSAction actionWithNumber:self.number body:self.body]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) dealloc {
|
||||||
|
[number release];
|
||||||
|
[body release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
29
iphone/ZXingWidget/SMSResultParser.h
Normal file
29
iphone/ZXingWidget/SMSResultParser.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
//
|
||||||
|
// SMSResultParser.h
|
||||||
|
// 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 <UIKit/UIKit.h>
|
||||||
|
#import "ResultParser.h"
|
||||||
|
|
||||||
|
@interface SMSResultParser : ResultParser {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
78
iphone/ZXingWidget/SMSResultParser.m
Normal file
78
iphone/ZXingWidget/SMSResultParser.m
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
//
|
||||||
|
// SMSResultParser.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 "SMSResultParser.h"
|
||||||
|
#import "SMSParsedResult.h"
|
||||||
|
|
||||||
|
#define PREFIX @"sms:"
|
||||||
|
|
||||||
|
@implementation SMSResultParser
|
||||||
|
|
||||||
|
+ (void)load {
|
||||||
|
[ResultParser registerResultParserClass:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (ParsedResult *)parsedResultForString:(NSString *)s {
|
||||||
|
NSRange prefixRange = [s rangeOfString:PREFIX options:NSCaseInsensitiveSearch];
|
||||||
|
if (prefixRange.location == 0) {
|
||||||
|
int max = [s length];
|
||||||
|
int restStart = prefixRange.location + prefixRange.length;
|
||||||
|
|
||||||
|
// initial presuption: everything after the prefix is the number, and there is no body
|
||||||
|
NSRange numberRange = NSMakeRange(restStart, max - restStart);
|
||||||
|
NSRange bodyRange = NSMakeRange(NSNotFound, 0);
|
||||||
|
|
||||||
|
// is there a query string?
|
||||||
|
NSRange queryRange = [s rangeOfString:@"?" options:0 range:numberRange];
|
||||||
|
if (queryRange.location != NSNotFound) {
|
||||||
|
// truncate the number range at the beginning of the query string
|
||||||
|
numberRange.length = queryRange.location - numberRange.location;
|
||||||
|
|
||||||
|
int paramsStart = queryRange.location + queryRange.length;
|
||||||
|
NSRange paramsRange = NSMakeRange(paramsStart, max - paramsStart);
|
||||||
|
NSRange bodyPrefixRange = [s rangeOfString:@"body=" options:0 range:paramsRange];
|
||||||
|
if (bodyPrefixRange.location != NSNotFound) {
|
||||||
|
int bodyStart = bodyPrefixRange.location + bodyPrefixRange.length;
|
||||||
|
bodyRange = NSMakeRange(bodyStart, max - bodyStart);
|
||||||
|
NSRange ampRange = [s rangeOfString:@"&" options:0 range:bodyRange];
|
||||||
|
if (ampRange.location != NSNotFound) {
|
||||||
|
// we found a '&', so we truncate the body range there
|
||||||
|
bodyRange.length = ampRange.location - bodyRange.location;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if there's a semicolon in the number, truncate the number there
|
||||||
|
NSRange semicolonRange = [s rangeOfString:@";" options:0 range:numberRange];
|
||||||
|
if (semicolonRange.location != NSNotFound) {
|
||||||
|
numberRange.length = semicolonRange.location - numberRange.location;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSString *number = [s substringWithRange:numberRange];
|
||||||
|
NSString *body = bodyRange.location != NSNotFound ? [s substringWithRange:bodyRange] : nil;
|
||||||
|
return [[[SMSParsedResult alloc] initWithNumber:number body:body]
|
||||||
|
autorelease];
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
29
iphone/ZXingWidget/SMSTOResultParser.h
Normal file
29
iphone/ZXingWidget/SMSTOResultParser.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
//
|
||||||
|
// SMSTOResultParser.h
|
||||||
|
// 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 <UIKit/UIKit.h>
|
||||||
|
#import "ResultParser.h"
|
||||||
|
|
||||||
|
@interface SMSTOResultParser : ResultParser {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
57
iphone/ZXingWidget/SMSTOResultParser.m
Normal file
57
iphone/ZXingWidget/SMSTOResultParser.m
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
//
|
||||||
|
// SMSTOResultParser.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 "SMSTOResultParser.h"
|
||||||
|
#import "SMSParsedResult.h"
|
||||||
|
|
||||||
|
#define PREFIX @"SMSTO:"
|
||||||
|
|
||||||
|
@implementation SMSTOResultParser
|
||||||
|
|
||||||
|
+ (void)load {
|
||||||
|
[ResultParser registerResultParserClass:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (ParsedResult *)parsedResultForString:(NSString *)s {
|
||||||
|
NSRange prefixRange = [s rangeOfString:PREFIX options:NSCaseInsensitiveSearch];
|
||||||
|
if (prefixRange.location == 0) {
|
||||||
|
int max = [s length];
|
||||||
|
int restStart = prefixRange.location + prefixRange.length;
|
||||||
|
NSRange searchRange = NSMakeRange(restStart, max - restStart);
|
||||||
|
NSRange colonRange = [s rangeOfString:@":" options:0 range:searchRange];
|
||||||
|
if (colonRange.location != NSNotFound) {
|
||||||
|
NSRange numberRange = NSMakeRange(restStart,
|
||||||
|
colonRange.location - restStart);
|
||||||
|
int bodyStart = colonRange.location + colonRange.length;
|
||||||
|
NSRange bodyRange = NSMakeRange(bodyStart, max - bodyStart);
|
||||||
|
return [[[SMSParsedResult alloc] initWithNumber:[s substringWithRange:numberRange]
|
||||||
|
body:[s substringWithRange:bodyRange]]
|
||||||
|
autorelease];
|
||||||
|
} else {
|
||||||
|
return [[[SMSParsedResult alloc] initWithNumber:[s substringFromIndex:restStart]
|
||||||
|
body:nil]
|
||||||
|
autorelease];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
34
iphone/ZXingWidget/ShowMapAction.h
Normal file
34
iphone/ZXingWidget/ShowMapAction.h
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
//
|
||||||
|
// ShowMapAction.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 05/06/2008.
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "OpenUrlAction.h"
|
||||||
|
|
||||||
|
@interface ShowMapAction : OpenUrlAction {
|
||||||
|
NSString *location;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, copy) NSString *location;
|
||||||
|
|
||||||
|
- (id)initWithLocation:(NSString *)location;
|
||||||
|
+ (id)actionWithLocation:(NSString *)location;
|
||||||
|
|
||||||
|
@end
|
68
iphone/ZXingWidget/ShowMapAction.m
Normal file
68
iphone/ZXingWidget/ShowMapAction.m
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
//
|
||||||
|
// ShowMapAction.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 05/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 "ShowMapAction.h"
|
||||||
|
|
||||||
|
|
||||||
|
@implementation ShowMapAction
|
||||||
|
|
||||||
|
@synthesize location;
|
||||||
|
|
||||||
|
static NSURL * URLForLocation(NSString *location) {
|
||||||
|
NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@",
|
||||||
|
[location stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
|
||||||
|
return [NSURL URLWithString:urlString];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithLocation:(NSString *)l {
|
||||||
|
if ((self = [super initWithURL:URLForLocation(l)]) != nil) {
|
||||||
|
self.location = l;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (id)actionWithLocation:(NSString *)location {
|
||||||
|
return [[[self alloc] initWithLocation:location] autorelease];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)title {
|
||||||
|
return NSLocalizedString(@"ShowMapAction action title", @"Show on Map");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)alertTitle {
|
||||||
|
return NSLocalizedString(@"ShowMapAction alert title", @"Show on Map");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)alertMessage {
|
||||||
|
return [NSString stringWithFormat:NSLocalizedString(@"ShowMapAction alert message", @"Show location %@ on Map ?"), self.location];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)alertButtonTitle {
|
||||||
|
return NSLocalizedString(@"ShowMapAction alert button title", @"Show");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)dealloc {
|
||||||
|
[location release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
33
iphone/ZXingWidget/TelParsedResult.h
Normal file
33
iphone/ZXingWidget/TelParsedResult.h
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
//
|
||||||
|
// TelParsedResult.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 23/05/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 <UIKit/UIKit.h>
|
||||||
|
#import "ParsedResult.h"
|
||||||
|
|
||||||
|
@interface TelParsedResult : ParsedResult {
|
||||||
|
NSString *number;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, copy) NSString *number;
|
||||||
|
|
||||||
|
- (id)initWithNumber:(NSString *)n;
|
||||||
|
|
||||||
|
@end
|
58
iphone/ZXingWidget/TelParsedResult.m
Normal file
58
iphone/ZXingWidget/TelParsedResult.m
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
//
|
||||||
|
// TelParsedResult.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 23/05/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 "TelParsedResult.h"
|
||||||
|
#import "CallAction.h"
|
||||||
|
|
||||||
|
@implementation TelParsedResult
|
||||||
|
|
||||||
|
@synthesize number;
|
||||||
|
|
||||||
|
- (id)initWithNumber:(NSString *)n {
|
||||||
|
if ((self = [super init]) != nil) {
|
||||||
|
self.number = n;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)stringForDisplay {
|
||||||
|
return self.number;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
+ (NSString *)typeName {
|
||||||
|
return NSLocalizedString(@"TelParsedResult type name", @"Tel");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImage *)icon {
|
||||||
|
return [UIImage imageNamed:@"phone.png"];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)populateActions {
|
||||||
|
[actions addObject:[CallAction actionWithNumber:self.number]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) dealloc {
|
||||||
|
[number release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
29
iphone/ZXingWidget/TelResultParser.h
Normal file
29
iphone/ZXingWidget/TelResultParser.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
//
|
||||||
|
// TelResultParser.h
|
||||||
|
// 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 <UIKit/UIKit.h>
|
||||||
|
#import "ResultParser.h"
|
||||||
|
|
||||||
|
@interface TelResultParser : NSObject {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
44
iphone/ZXingWidget/TelResultParser.m
Normal file
44
iphone/ZXingWidget/TelResultParser.m
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
//
|
||||||
|
// TelResultParser.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 "TelResultParser.h"
|
||||||
|
#import "TelParsedResult.h"
|
||||||
|
|
||||||
|
#define PREFIX @"tel:"
|
||||||
|
|
||||||
|
@implementation TelResultParser
|
||||||
|
|
||||||
|
+ (void)load {
|
||||||
|
[ResultParser registerResultParserClass:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (ParsedResult *)parsedResultForString:(NSString *)s {
|
||||||
|
NSRange telRange = [s rangeOfString:PREFIX options:NSCaseInsensitiveSearch];
|
||||||
|
if (telRange.location == 0) {
|
||||||
|
int restStart = telRange.location + telRange.length;
|
||||||
|
return [[[TelParsedResult alloc] initWithNumber:[s substringFromIndex:restStart]]
|
||||||
|
autorelease];
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
34
iphone/ZXingWidget/TextParsedResult.h
Normal file
34
iphone/ZXingWidget/TextParsedResult.h
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
//
|
||||||
|
// TextParsedResult.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 23/05/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 <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
#import "ParsedResult.h"
|
||||||
|
|
||||||
|
@interface TextParsedResult : ParsedResult {
|
||||||
|
NSString *text;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, copy) NSString *text;
|
||||||
|
|
||||||
|
- (id)initWithString:(NSString *)s;
|
||||||
|
|
||||||
|
@end
|
58
iphone/ZXingWidget/TextParsedResult.m
Normal file
58
iphone/ZXingWidget/TextParsedResult.m
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
//
|
||||||
|
// TextParsedResult.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 23/05/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 "TextParsedResult.h"
|
||||||
|
#import "EmailAction.h"
|
||||||
|
|
||||||
|
|
||||||
|
@implementation TextParsedResult
|
||||||
|
|
||||||
|
@synthesize text;
|
||||||
|
|
||||||
|
- (id)initWithString:(NSString *)s {
|
||||||
|
if ((self = [super init]) != nil) {
|
||||||
|
self.text = s;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSString *)typeName {
|
||||||
|
return NSLocalizedString(@"TextParsedResult type name", @"Text");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImage *)icon {
|
||||||
|
return [UIImage imageNamed:@"text.png"];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)stringForDisplay {
|
||||||
|
return self.text;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) populateActions {
|
||||||
|
//[actions addObject:[EmailAction actionWithRecipient:@"recipient@domain" subject:@"QR Code Contents" body:text]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc {
|
||||||
|
[text release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
30
iphone/ZXingWidget/TextResultParser.h
Normal file
30
iphone/ZXingWidget/TextResultParser.h
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
//
|
||||||
|
// TextResultParser.h
|
||||||
|
// 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 <UIKit/UIKit.h>
|
||||||
|
#import "ResultParser.h"
|
||||||
|
|
||||||
|
|
||||||
|
@interface TextResultParser : ResultParser {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
36
iphone/ZXingWidget/TextResultParser.m
Normal file
36
iphone/ZXingWidget/TextResultParser.m
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
//
|
||||||
|
// TextResultParser.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 "TextResultParser.h"
|
||||||
|
#import "TextParsedResult.h"
|
||||||
|
|
||||||
|
@implementation TextResultParser
|
||||||
|
|
||||||
|
+ (void)load {
|
||||||
|
[ResultParser registerResultParserClass:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (ParsedResult *)parsedResultForString:(NSString *)s {
|
||||||
|
return [[[TextParsedResult alloc] initWithString:s] autorelease];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
35
iphone/ZXingWidget/TwoDDecoderResult.h
Normal file
35
iphone/ZXingWidget/TwoDDecoderResult.h
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
//
|
||||||
|
// TwoDDecoderResult.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 04/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 <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
@interface TwoDDecoderResult : NSObject {
|
||||||
|
NSString *text;
|
||||||
|
NSArray *points;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, copy) NSString *text;
|
||||||
|
@property (nonatomic, retain) NSArray *points;
|
||||||
|
|
||||||
|
+ (id)resultWithText:(NSString *)text points:(NSArray *)points;
|
||||||
|
- (id)initWithText:(NSString *)text points:(NSArray *)points;
|
||||||
|
|
||||||
|
@end
|
52
iphone/ZXingWidget/TwoDDecoderResult.m
Normal file
52
iphone/ZXingWidget/TwoDDecoderResult.m
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
//
|
||||||
|
// TwoDDecoderResult.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 04/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 "TwoDDecoderResult.h"
|
||||||
|
|
||||||
|
|
||||||
|
@implementation TwoDDecoderResult
|
||||||
|
|
||||||
|
@synthesize text;
|
||||||
|
@synthesize points;
|
||||||
|
|
||||||
|
+ (id)resultWithText:(NSString *)text points:(NSArray *)points {
|
||||||
|
return [[[self alloc] initWithText:text points:points] autorelease];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithText:(NSString *)t points:(NSArray *)p {
|
||||||
|
if ((self = [super init]) != nil) {
|
||||||
|
self.text = t;
|
||||||
|
self.points = p;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc {
|
||||||
|
[text release];
|
||||||
|
[points release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)description {
|
||||||
|
return [NSString stringWithFormat:@"<%@: %p> %@", [self class], self, self.text];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
45
iphone/ZXingWidget/URIParsedResult.h
Normal file
45
iphone/ZXingWidget/URIParsedResult.h
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
//
|
||||||
|
// URIParsedResult.h
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 29/05/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 <UIKit/UIKit.h>
|
||||||
|
#import "ParsedResult.h"
|
||||||
|
|
||||||
|
@interface NSString (ZXingURLExtensions)
|
||||||
|
- (bool) looksLikeAURI;
|
||||||
|
- (NSString *)massagedURLString;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface URIParsedResult : ParsedResult {
|
||||||
|
NSString *urlString;
|
||||||
|
NSString *title;
|
||||||
|
NSURL *URL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithURLString:(NSString *)s title:(NSString *)t URL:(NSURL *)ur;
|
||||||
|
- (id)initWithURLString:(NSString *)s title:(NSString *)t;
|
||||||
|
- (id)initWithURLString:(NSString *)s URL:(NSURL *)ur;
|
||||||
|
- (id)initWithURLString:(NSString *)s;
|
||||||
|
|
||||||
|
@property (nonatomic, retain) NSString *urlString;
|
||||||
|
@property (nonatomic, retain) NSString *title;
|
||||||
|
@property (nonatomic, retain) NSURL *URL;
|
||||||
|
|
||||||
|
@end
|
87
iphone/ZXingWidget/URIParsedResult.m
Normal file
87
iphone/ZXingWidget/URIParsedResult.m
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
//
|
||||||
|
// URIParsedResult.m
|
||||||
|
// ZXing
|
||||||
|
//
|
||||||
|
// Created by Christian Brunschen on 29/05/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 "URIParsedResult.h"
|
||||||
|
#import "OpenUrlAction.h"
|
||||||
|
#import "EmailAction.h"
|
||||||
|
#import "SMSAction.h"
|
||||||
|
|
||||||
|
|
||||||
|
@implementation URIParsedResult
|
||||||
|
|
||||||
|
@synthesize urlString;
|
||||||
|
@synthesize title;
|
||||||
|
@synthesize URL;
|
||||||
|
|
||||||
|
- (ResultAction *)createAction {
|
||||||
|
return [OpenUrlAction actionWithURL:self.URL];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithURLString:(NSString *)s title:(NSString *)t URL:(NSURL *)url {
|
||||||
|
if ((self = [super init]) != nil) {
|
||||||
|
self.urlString = s;
|
||||||
|
self.title = t;
|
||||||
|
self.URL = url;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithURLString:(NSString *)s URL:(NSURL *)url {
|
||||||
|
return [self initWithURLString:s title:nil URL:url];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithURLString:(NSString *)s title:(NSString *)t {
|
||||||
|
return [self initWithURLString:s title:t URL:[NSURL URLWithString:s]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithURLString:(NSString *)s {
|
||||||
|
return [self initWithURLString:s title:nil URL:[NSURL URLWithString:s]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)stringForDisplay {
|
||||||
|
return self.title ?
|
||||||
|
[NSString stringWithFormat:@"%@ <%@>", self.title, self.urlString] :
|
||||||
|
self.urlString;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSString *)typeName {
|
||||||
|
return NSLocalizedString(@"URIParsedResult type name", @"URI");
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImage *)icon {
|
||||||
|
return [UIImage imageNamed:@"link2.png"];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)populateActions {
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"creating action to open URL '%@'", self.urlString);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
[actions addObject:[self createAction]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc {
|
||||||
|
[URL release];
|
||||||
|
[urlString release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
30
iphone/ZXingWidget/URLResultParser.h
Normal file
30
iphone/ZXingWidget/URLResultParser.h
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
//
|
||||||
|
// URIResultParser.h
|
||||||
|
// 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 <UIKit/UIKit.h>
|
||||||
|
#import "ResultParser.h"
|
||||||
|
|
||||||
|
|
||||||
|
@interface URLResultParser : ResultParser {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
80
iphone/ZXingWidget/URLResultParser.m
Normal file
80
iphone/ZXingWidget/URLResultParser.m
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
//
|
||||||
|
// URIResultParser.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 "URLResultParser.h"
|
||||||
|
#import "URIParsedResult.h"
|
||||||
|
|
||||||
|
@implementation NSString (ZXingURLExtensions)
|
||||||
|
|
||||||
|
- (bool)looksLikeAURI {
|
||||||
|
if ([self rangeOfCharacterFromSet:[NSCharacterSet whitespaceCharacterSet]].location != NSNotFound) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ([self rangeOfString:@":"].location == NSNotFound) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)massagedURLString {
|
||||||
|
NSRange colonRange = [self rangeOfString:@":"];
|
||||||
|
if (colonRange.location == NSNotFound) {
|
||||||
|
return [NSString stringWithFormat:@"http://%@", self];
|
||||||
|
} else {
|
||||||
|
return [NSString stringWithFormat:@"%@%@",
|
||||||
|
[[self substringToIndex:colonRange.location] lowercaseString],
|
||||||
|
[self substringFromIndex:colonRange.location]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
#define PREFIX @"URL:"
|
||||||
|
|
||||||
|
@implementation URLResultParser
|
||||||
|
|
||||||
|
+ (void)load {
|
||||||
|
[ResultParser registerResultParserClass:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (ParsedResult *)parsedResultForString:(NSString *)s {
|
||||||
|
NSRange prefixRange = [s rangeOfString:PREFIX options:NSCaseInsensitiveSearch];
|
||||||
|
if (prefixRange.location == 0) {
|
||||||
|
int restStart = prefixRange.location + prefixRange.length;
|
||||||
|
return [[[URIParsedResult alloc] initWithURLString:[[s substringFromIndex:restStart] massagedURLString]]
|
||||||
|
autorelease];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([s looksLikeAURI]) {
|
||||||
|
NSString *massaged = [s massagedURLString];
|
||||||
|
NSURL *url = [NSURL URLWithString:massaged];
|
||||||
|
if (url != nil) {
|
||||||
|
return [[[URIParsedResult alloc] initWithURLString:massaged URL:url] autorelease];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
29
iphone/ZXingWidget/URLTOResultParser.h
Normal file
29
iphone/ZXingWidget/URLTOResultParser.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
//
|
||||||
|
// URLTOResultParser.h
|
||||||
|
// 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 <UIKit/UIKit.h>
|
||||||
|
#import "ResultParser.h"
|
||||||
|
|
||||||
|
@interface URLTOResultParser : ResultParser {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
54
iphone/ZXingWidget/URLTOResultParser.m
Normal file
54
iphone/ZXingWidget/URLTOResultParser.m
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
//
|
||||||
|
// URLTOResultParser.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 "URLTOResultParser.h"
|
||||||
|
#import "URIParsedResult.h"
|
||||||
|
|
||||||
|
#define PREFIX @"URLTO:"
|
||||||
|
|
||||||
|
@implementation URLTOResultParser
|
||||||
|
|
||||||
|
+ (void)load {
|
||||||
|
[ResultParser registerResultParserClass:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (ParsedResult *)parsedResultForString:(NSString *)s {
|
||||||
|
NSRange prefixRange = [s rangeOfString:PREFIX options:NSCaseInsensitiveSearch];
|
||||||
|
if (prefixRange.location == 0) {
|
||||||
|
int max = [s length];
|
||||||
|
int titleStart = prefixRange.location + prefixRange.length;
|
||||||
|
NSRange searchRange = NSMakeRange(titleStart, max - titleStart);
|
||||||
|
NSRange colonRange = [s rangeOfString:@":" options:0 range:searchRange];
|
||||||
|
if (colonRange.location != NSNotFound) {
|
||||||
|
NSRange titleRange = NSMakeRange(titleStart,
|
||||||
|
colonRange.location - titleStart);
|
||||||
|
int linkStart = colonRange.location + colonRange.length;
|
||||||
|
NSRange linkRange = NSMakeRange(linkStart, max - linkStart);
|
||||||
|
return [[[URIParsedResult alloc] initWithURLString:[s substringWithRange:linkRange]
|
||||||
|
title:[s substringWithRange:titleRange]]
|
||||||
|
autorelease];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
1464
iphone/ZXingWidget/ZXingWidget.xcodeproj/dkavanagh.mode1v3
Normal file
1464
iphone/ZXingWidget/ZXingWidget.xcodeproj/dkavanagh.mode1v3
Normal file
File diff suppressed because it is too large
Load diff
2560
iphone/ZXingWidget/ZXingWidget.xcodeproj/dkavanagh.pbxuser
Normal file
2560
iphone/ZXingWidget/ZXingWidget.xcodeproj/dkavanagh.pbxuser
Normal file
File diff suppressed because it is too large
Load diff
1184
iphone/ZXingWidget/ZXingWidget.xcodeproj/project.pbxproj
Normal file
1184
iphone/ZXingWidget/ZXingWidget.xcodeproj/project.pbxproj
Normal file
File diff suppressed because it is too large
Load diff
47
iphone/ZXingWidget/ZXingWidgetController.h
Executable file
47
iphone/ZXingWidget/ZXingWidgetController.h
Executable file
|
@ -0,0 +1,47 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2009 Jeff Verkoeyen
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <UIKit/UIKit.h>
|
||||||
|
#include <AudioToolbox/AudioToolbox.h>
|
||||||
|
#include "Decoder.h"
|
||||||
|
#include "ParsedResult.h"
|
||||||
|
#include "OverlayView.h"
|
||||||
|
|
||||||
|
@protocol ZXingDelegate;
|
||||||
|
|
||||||
|
@interface ZXingWidgetController : UIImagePickerController <DecoderDelegate, CancelDelegate> {
|
||||||
|
ParsedResult *result;
|
||||||
|
NSArray *actions;
|
||||||
|
OverlayView *overlayView;
|
||||||
|
SystemSoundID beepSound;
|
||||||
|
BOOL showCancel;
|
||||||
|
id<ZXingDelegate> delegate;
|
||||||
|
BOOL wasCancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (nonatomic, assign) id<ZXingDelegate> delegate;
|
||||||
|
@property (nonatomic, assign) BOOL showCancel;
|
||||||
|
@property (nonatomic, retain) ParsedResult *result;
|
||||||
|
@property (nonatomic, retain) NSArray *actions;
|
||||||
|
|
||||||
|
- (id)initWithDelegate:(id<ZXingDelegate>)delegate;
|
||||||
|
- (BOOL)fixedFocus;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@protocol ZXingDelegate
|
||||||
|
- (void)scanResult:(NSString *)result;
|
||||||
|
- (void)cancelled;
|
||||||
|
@end
|
163
iphone/ZXingWidget/ZXingWidgetController.m
Executable file
163
iphone/ZXingWidget/ZXingWidgetController.m
Executable file
|
@ -0,0 +1,163 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2009 Jeff Verkoeyen
|
||||||
|
*
|
||||||
|
* 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 "ZXingWidgetController.h"
|
||||||
|
#import "Decoder.h"
|
||||||
|
#import "NSString+HTML.h"
|
||||||
|
#import "ResultParser.h"
|
||||||
|
#import "ParsedResult.h"
|
||||||
|
#import "ResultAction.h"
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
|
||||||
|
#define CAMERA_SCALAR 1.12412 // scalar = (480 / (2048 / 480))
|
||||||
|
#define FIRST_TAKE_DELAY 1.0
|
||||||
|
|
||||||
|
CGImageRef UIGetScreenImage();
|
||||||
|
|
||||||
|
@implementation ZXingWidgetController
|
||||||
|
@synthesize result, actions, showCancel, delegate;
|
||||||
|
|
||||||
|
- (id)initWithDelegate:(id<ZXingDelegate>)scanDelegate {
|
||||||
|
if (self = [super init]) {
|
||||||
|
[self setDelegate:scanDelegate];
|
||||||
|
showCancel = true;
|
||||||
|
self.wantsFullScreenLayout = YES;
|
||||||
|
self.sourceType = UIImagePickerControllerSourceTypeCamera;
|
||||||
|
float zoomFactor = CAMERA_SCALAR;
|
||||||
|
if ([self fixedFocus]) {
|
||||||
|
zoomFactor *= 1.5;
|
||||||
|
}
|
||||||
|
self.cameraViewTransform = CGAffineTransformScale(
|
||||||
|
self.cameraViewTransform, zoomFactor, zoomFactor);
|
||||||
|
overlayView = [[OverlayView alloc] initWithCancelEnabled:showCancel frame:[UIScreen mainScreen].bounds];
|
||||||
|
[overlayView setDelegate:self];
|
||||||
|
self.sourceType = UIImagePickerControllerSourceTypeCamera;
|
||||||
|
self.showsCameraControls = NO;
|
||||||
|
self.cameraOverlayView = overlayView;
|
||||||
|
self.allowsEditing = NO; // [[NSUserDefaults standardUserDefaults] boolForKey:@"allowEditing"];
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)cancelled {
|
||||||
|
NSLog(@"cancelled called in ZXingWidgetController");
|
||||||
|
wasCancelled = true;
|
||||||
|
if (delegate != nil) {
|
||||||
|
[delegate cancelled];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getPlatform {
|
||||||
|
size_t size;
|
||||||
|
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
|
||||||
|
char *machine = malloc(size);
|
||||||
|
sysctlbyname("hw.machine", machine, &size, NULL, 0);
|
||||||
|
NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];
|
||||||
|
free(machine);
|
||||||
|
return platform;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)fixedFocus {
|
||||||
|
NSString *platform = [self getPlatform];
|
||||||
|
if ([platform isEqualToString:@"iPhone1,1"] ||
|
||||||
|
[platform isEqualToString:@"iPhone1,2"]) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)viewDidAppear:(BOOL)animated {
|
||||||
|
[super viewDidAppear:animated];
|
||||||
|
wasCancelled = false;
|
||||||
|
[NSTimer scheduledTimerWithTimeInterval: FIRST_TAKE_DELAY
|
||||||
|
target: self
|
||||||
|
selector: @selector(takePicture:)
|
||||||
|
userInfo: nil
|
||||||
|
repeats: NO];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)takePicture:(NSTimer*)theTimer {
|
||||||
|
CGImageRef capture = UIGetScreenImage();
|
||||||
|
UIImage *scrn = [UIImage imageWithCGImage:CGImageCreateWithImageInRect(capture, [overlayView cropRect])];
|
||||||
|
Decoder *d = [[Decoder alloc] init];
|
||||||
|
d.delegate = self;
|
||||||
|
CGRect cropRect = overlayView.cropRect;
|
||||||
|
cropRect.origin.x = 0.0;
|
||||||
|
cropRect.origin.y = 0.0;
|
||||||
|
NSLog(@"crop rect %f, %f, %f, %f", cropRect.origin.x, cropRect.origin.y, cropRect.size.width, cropRect.size.height);
|
||||||
|
[d decodeImage:scrn cropRect:cropRect];
|
||||||
|
}
|
||||||
|
|
||||||
|
// DecoderDelegate methods
|
||||||
|
|
||||||
|
- (void)decoder:(Decoder *)decoder willDecodeImage:(UIImage *)image usingSubset:(UIImage *)subset{
|
||||||
|
NSLog(@"DecoderViewController MessageWhileDecodingWithDimensions: Decoding image (%.0fx%.0f) ...", image.size.width, image.size.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)decoder:(Decoder *)decoder
|
||||||
|
decodingImage:(UIImage *)image
|
||||||
|
usingSubset:(UIImage *)subset
|
||||||
|
progress:(NSString *)message {
|
||||||
|
NSLog(@"decoding image %@", message);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)presentResultForString:(NSString *)resultString {
|
||||||
|
NSLog(@"in presentResultForString()");
|
||||||
|
self.result = [ResultParser parsedResultForString:resultString];
|
||||||
|
AudioServicesPlaySystemSound(beepSound);
|
||||||
|
// self.actions = self.result.actions;
|
||||||
|
#ifdef DEBUG
|
||||||
|
NSLog(@"result string = %@", resultString);
|
||||||
|
NSLog(@"result has %d actions", actions ? 0 : actions.count);
|
||||||
|
#endif
|
||||||
|
// [self updateToolbar];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)presentResultPoints:(NSArray *)resultPoints
|
||||||
|
forImage:(UIImage *)image
|
||||||
|
usingSubset:(UIImage *)subset {
|
||||||
|
// simply add the points to the image view
|
||||||
|
NSLog(@"got points for display");
|
||||||
|
[overlayView setPoints:resultPoints];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)decoder:(Decoder *)decoder didDecodeImage:(UIImage *)image usingSubset:(UIImage *)subset withResult:(TwoDDecoderResult *)twoDResult {
|
||||||
|
// [self presentResultForString:twoDResult.text];
|
||||||
|
NSLog(@"decoded image!!");
|
||||||
|
[self presentResultPoints:[twoDResult points] forImage:image usingSubset:subset];
|
||||||
|
if (delegate != nil) {
|
||||||
|
[delegate scanResult:[twoDResult text]];
|
||||||
|
}
|
||||||
|
decoder.delegate = nil;
|
||||||
|
[decoder release];
|
||||||
|
|
||||||
|
// save the scan to the shared database
|
||||||
|
// [[Database sharedDatabase] addScanWithText:twoDResult.text];
|
||||||
|
// need to call delegate....`
|
||||||
|
// [self performResultAction:self];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)decoder:(Decoder *)decoder failedToDecodeImage:(UIImage *)image usingSubset:(UIImage *)subset reason:(NSString *)reason {
|
||||||
|
decoder.delegate = nil;
|
||||||
|
[decoder release];
|
||||||
|
[overlayView setPoints:nil];
|
||||||
|
if (!wasCancelled) {
|
||||||
|
[self takePicture:nil];
|
||||||
|
}
|
||||||
|
//[self updateToolbar];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
7
iphone/ZXingWidget/ZXingWidget_Prefix.pch
Normal file
7
iphone/ZXingWidget/ZXingWidget_Prefix.pch
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
//
|
||||||
|
// Prefix header for all source files of the 'CocoaTouchStaticLibrary' target in the 'CocoaTouchStaticLibrary' project.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifdef __OBJC__
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#endif
|
BIN
iphone/ZXingWidget/beep-beep.caf
Normal file
BIN
iphone/ZXingWidget/beep-beep.caf
Normal file
Binary file not shown.
Loading…
Reference in a new issue