2 // DoCoMoResultParser.m
5 // Created by Christian Brunschen on 25/06/2008.
6 // Copyright 2008 Google Inc. All rights reserved.
9 #import "DoCoMoResultParser.h"
12 @implementation NSString (DoCoMoFieldParsing)
14 - (NSString *)backslashUnescaped {
15 NSRange backslashRange = [self rangeOfString:@"\\"];
16 if (backslashRange.location == NSNotFound) {
20 int max = [self length];
21 int startLocation = 0;
22 NSMutableString *result = [NSMutableString stringWithCapacity:[self length]];
23 while (backslashRange.location != NSNotFound) {
24 [result appendString:[self substringWithRange:NSMakeRange(startLocation,
25 backslashRange.location - startLocation)]];
26 [result appendFormat:@"%c", [self characterAtIndex:backslashRange.location + 1]];
27 startLocation = backslashRange.location + 2;
28 NSRange searchRange = NSMakeRange(startLocation, max - startLocation);
29 backslashRange = [self rangeOfString:@"\\" options:0 range:searchRange];
31 if (startLocation < max) {
32 [result appendString:[self substringWithRange:NSMakeRange(startLocation, max - startLocation)]];
34 return [NSString stringWithString:result];
37 - (NSArray *)fieldsWithPrefix:(NSString *)prefix {
38 return [self fieldsWithPrefix:prefix terminator:@";"];
41 - (NSArray *)fieldsWithPrefix:(NSString *)prefix terminator:(NSString *)term {
42 NSMutableArray *result = nil;
45 int max = [self length];
49 searchRange = NSMakeRange(i, max - i);
50 foundRange = [self rangeOfString:prefix options:0 range:searchRange];
51 if(foundRange.location == NSNotFound) {
55 int start = i = foundRange.location + foundRange.length;
58 searchRange = NSMakeRange(i, max - i);
59 NSRange termRange = [self rangeOfString:term options:0 range:searchRange];
60 if (termRange.location == NSNotFound) {
63 } else if ([self characterAtIndex:termRange.location-1] == (unichar)'\\') {
66 NSString *substring = [self substringWithRange:NSMakeRange(start, termRange.location - start)];
67 NSString *unescaped = [substring backslashUnescaped];
69 result = [NSMutableArray arrayWithObject:unescaped];
71 [result addObject:unescaped];
73 i = termRange.location + termRange.length;
82 - (NSString *)fieldWithPrefix:(NSString *)prefix {
83 return [self fieldWithPrefix:prefix terminator:@";"];
86 - (NSString *)fieldWithPrefix:(NSString *)prefix terminator:(NSString *)term {
87 NSArray *fields = [self fieldsWithPrefix:prefix terminator:term];
88 if (fields.count == 0) {
91 return [fields lastObject];
99 @implementation DoCoMoResultParser