Cleaned up the iPhone code so that it compiles with the 3.1.2 SDK. Also tightened...
[zxing.git] / iphone / Classes / URLResultParser.m
1 //
2 //  URIResultParser.m
3 //  ZXing
4 //
5 //  Created by Christian Brunschen on 25/06/2008.
6 /*
7  * Copyright 2008 ZXing authors
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  */
21
22 #import "URLResultParser.h"
23 #import "URIParsedResult.h"
24
25 @implementation NSString (ZXingURLExtensions)
26
27 - (bool)looksLikeAURI {
28   if ([self rangeOfCharacterFromSet:[NSCharacterSet whitespaceCharacterSet]].location != NSNotFound) {
29     return false;
30   }
31   if ([self rangeOfString:@":"].location == NSNotFound) {
32     return false;
33   }
34   return true;
35 }
36
37 - (NSString *)massagedURLString {
38   NSRange colonRange = [self rangeOfString:@":"];
39   if (colonRange.location == NSNotFound) {
40     return [NSString stringWithFormat:@"http://%@", self];
41   } else {
42     return [NSString stringWithFormat:@"%@%@",
43             [[self substringToIndex:colonRange.location] lowercaseString],
44             [self substringFromIndex:colonRange.location]
45             ];
46   }
47 }
48
49 @end
50
51
52 #define PREFIX @"URL:"
53
54 @implementation URLResultParser
55
56 + (void)load {
57   [ResultParser registerResultParserClass:self];
58 }
59
60 + (ParsedResult *)parsedResultForString:(NSString *)s {
61   NSRange prefixRange = [s rangeOfString:PREFIX options:NSCaseInsensitiveSearch];
62   if (prefixRange.location == 0) {
63     int restStart = prefixRange.location + prefixRange.length;
64     return [[[URIParsedResult alloc] initWithURLString:[[s substringFromIndex:restStart] massagedURLString]]
65             autorelease];
66   }
67   
68   if ([s looksLikeAURI]) {
69     NSString *massaged = [s massagedURLString];
70     NSURL *url = [NSURL URLWithString:massaged];
71     if (url != nil) {
72       return [[[URIParsedResult alloc] initWithURLString:massaged URL:url] autorelease];
73     }
74   }
75   
76   return nil;
77 }
78
79
80 @end