[iphone]Reorganized ZXingWidget with directories for categories of source files
[zxing.git] / iphone / ZXingWidget / Classes / resultParsers / DoCoMoResultParser.m
diff --git a/iphone/ZXingWidget/Classes/resultParsers/DoCoMoResultParser.m b/iphone/ZXingWidget/Classes/resultParsers/DoCoMoResultParser.m
new file mode 100644 (file)
index 0000000..d29e095
--- /dev/null
@@ -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