Changeset 6

Show
Ignore:
Timestamp:
12/10/06 10:11:31 PM (2 years ago)
Author:
aaron
Message:

- added matches method to Matcher
- added NSString category methods

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/source/CocoaICU.m

    r5 r6  
    11#import <Foundation/Foundation.h> 
    22#import "ICUPattern.h" 
     3#import "ICUMatcher.h" 
    34#import "NSStringICUAdditions.h" 
    45 
    56 
    6 void doSpeedComparison(); 
    7 void doGroupTest(); 
    8 void doSplitTest(); 
    9 void doUnicodeCharSearch(); 
     7void simpleFind(); 
     8void findAndReplaceFirst(); 
     9void findAndReplaceAll(); 
     10void split(); 
     11void unicodeFind(); 
     12void groupFindAndReplace(); 
     13void advancedFindAndReplace(); 
    1014 
    1115int main (int argc, const char * argv[]) { 
    1216    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    1317 
    14         NSString *searchString = @"bbdfdbbababababaklsdjfababababab"; 
    15         NSString *patternString = @"([ab]+)"; 
    16          
    17          
     18        simpleFind(); 
     19        findAndReplaceFirst(); 
     20        findAndReplaceAll(); 
     21        split(); 
     22        unicodeFind(); 
     23        groupFindAndReplace(); 
     24        advancedFindAndReplace(); 
     25 
    1826        [pool release]; 
    1927    return 0; 
    2028} 
     29 
     30void simpleFind() { 
     31        NSString *searchString = @"bbdfdbbababababaklsdjfababababab"; 
     32        NSString *patternString = @"([ab]+)"; 
     33        ICUPattern *p = [ICUPattern patternWithString:patternString]; 
     34        ICUMatcher *matcher = [ICUMatcher matcherWithPattern:p overString:searchString]; 
     35         
     36        while([matcher findNext]) { 
     37                NSRange r = [matcher rangeOfMatch]; 
     38                NSLog(@"match = %@", [searchString substringWithRange:r]); 
     39        } 
     40} 
     41 
     42void findAndReplaceFirst(){ 
     43        NSString *searchString = @"bbdfdbbababababaklsdjfababababab"; 
     44        NSString *patternString = @"([ab]+)"; 
     45        ICUPattern *p = [ICUPattern patternWithString:patternString]; 
     46        ICUMatcher *matcher = [ICUMatcher matcherWithPattern:p overString:searchString]; 
     47        NSString *result = [matcher replaceFirstWithString:@"replacement"]; 
     48        NSLog(@"result = %@", result); 
     49} 
     50 
     51void findAndReplaceAll() { 
     52        NSString *searchString = @"bbdfdbbababababaklsdjfababababab"; 
     53        NSString *patternString = @"([ab]+)"; 
     54        ICUPattern *p = [ICUPattern patternWithString:patternString]; 
     55        ICUMatcher *matcher = [ICUMatcher matcherWithPattern:p overString:searchString]; 
     56        NSString *result = [matcher replaceAllWithString:@"replacement"]; 
     57        NSLog(@"result = %@", result); 
     58} 
     59 
     60void split() { 
     61        NSString *searchString = @"bbdfdbbababababaklsdjfababababab"; 
     62        NSString *patternString = @"[ab]+"; 
     63        ICUPattern *p = [ICUPattern patternWithString:patternString]; 
     64        NSArray *r = [p componentsSplitFromString:searchString]; 
     65        NSLog(@"result = %@", r); 
     66} 
     67 
     68void unicodeFind() { 
     69        NSString *searchString = [NSString stringWithUTF8String:"❾➈➈➈➈➈➈â 
     70“â 
     71“ŊŘÀÀÀÀÀŔŔĚĚĚÀÀÀŞŞŞËËËËààààÀÀÀÀÀ"]; 
     72        NSString *patternString = [NSString stringWithUTF8String:"À+"]; 
     73        ICUPattern *p = [ICUPattern patternWithString:patternString]; 
     74        ICUMatcher *matcher = [ICUMatcher matcherWithPattern:p overString:searchString]; 
     75        while([matcher findNext]) { 
     76                NSLog(@"match = %@", [searchString substringWithRange:[matcher rangeOfMatch]]); 
     77        } 
     78} 
     79 
     80void groupFindAndReplace() { 
     81        NSString *searchString = @"ababcdcdababcdcdabefghiabbababbacdcdccdcd"; 
     82        NSString *patternString = @"([ab]+)([cd]+)"; 
     83        ICUPattern *p = [ICUPattern patternWithString:patternString]; 
     84        ICUMatcher *matcher = [ICUMatcher matcherWithPattern:p overString:searchString]; 
     85        while([matcher findNext]) { 
     86                int i; 
     87                for(i=0;i<=[matcher numberOfGroups];i++) { 
     88                        NSLog(@"group %i : %@", i, [matcher groupAtIndex:i]); 
     89                } 
     90        } 
     91} 
     92 
     93void advancedFindAndReplace() { 
     94        NSString *searchString = @"aabbcc"; 
     95        NSString *patternString = @"(a+)..(c+)"; 
     96        NSString *replacedText = [searchString replaceOccurrencesOfPattern:patternString withString:@" $2  $1"]; 
     97        NSLog(@"%@", replacedText); 
     98} 
     99 
  • trunk/source/ICUMatcher.h

    r5 r6  
    2424-(BOOL)lookingAt:(unsigned)index; 
    2525-(ICUPattern *)pattern; 
     26-(BOOL)matches; 
    2627-(void)setPattern:(ICUPattern *)p; 
    2728-(NSString *)replaceAllWithString:(NSString *)aReplacementString; 
  • trunk/source/ICUMatcher.m

    r5 r6  
    6464        pattern = [p retain]; 
    6565} 
     66 
     67-(BOOL)matches { 
     68        URegularExpression *re = [[self pattern] re]; 
     69         
     70        UErrorCode status = 0; 
     71        BOOL matches = uregex_matches(re, 0, &status); 
     72        CheckStatus(status); 
     73 
     74        return matches; 
     75} 
     76 
    6677 
    6778/* 
  • trunk/source/ICUPattern.m

    r5 r6  
    187187 
    188188        NSMutableArray *results = [NSMutableArray array]; 
    189         int destFieldsCapacity = 2
     189        int destFieldsCapacity = 16
    190190        size_t destCapacity = u_strlen([self textToSearch]); 
    191191 
     
    236236-(BOOL)matchesString:(NSString *)stringToMatchAgainst 
    237237{ 
    238         [self setTextToSearch:[stringToMatchAgainst UTF16String]]; 
    239  
    240         UErrorCode status = 0; 
    241         BOOL matches = uregex_matches([self re], 0, &status); 
    242         if(U_FAILURE(status)) { 
    243                 [NSException raise:@"Match Exception" 
    244                                         format:@"Could not perform match: %s", u_errorName(status)]; 
    245         } 
    246  
    247         return matches;  
     238        ICUMatcher *m = [ICUMatcher matcherWithPattern:self overString:stringToMatchAgainst]; 
     239        return [m matches]; 
    248240} 
    249241 
  • trunk/source/NSStringICUAdditions.h

    r5 r6  
    1515-(void *)UTF16String; 
    1616 
     17-(NSArray *)findPattern:(NSString *)aRegex; 
     18-(NSArray *)componentsSeparatedByPattern:(NSString *)aRegex; 
     19-(NSString *)replaceOccurrencesOfPattern:(NSString *)aPattern withString:(NSString *)replacementText; 
     20-(BOOL)matchesPattern:(NSString *)aRegex; 
     21-(NSArray *)findPattern:(NSString *)aRegex; 
     22 
    1723@end 
  • trunk/source/NSStringICUAdditions.m

    r5 r6  
    99#import "NSStringICUAdditions.h" 
    1010#import "ICUPattern.h" 
     11#import "ICUMatcher.h" 
    1112 
    1213struct URegularExpression; 
     
    2223#import <unicode/uregex.h> 
    2324 
    24  
    25  
    2625@interface NSString (NSStringICUPrivateAdditions) 
    2726@end 
    2827 
    2928@implementation NSString (NSStringICUAdditions)// 
    30 // 
    31 //-(NSArray *)findPattern:(ICUPattern *)p { 
    32 //      [p setStringToSearch:self]; 
    33 // 
    34 //      UErrorCode status = 0; 
    35 //      int32_t numberOfGroups = uregex_groupCount((URegularExpression *)[p pattern], &status); 
    36 //       
    37 //      if(U_FAILURE(status)) { 
    38 //              [NSException raise:@"Find Exception" 
    39 //                                      format:@"%s", u_errorName(status)]; 
    40 //      } 
    41 // 
    42 //      BOOL match = uregex_matches([p pattern], 0, &status); 
    43 //      if(U_FAILURE(status)) { 
    44 //              [NSException raise:@"Find Exception" 
    45 //                                      format:@"%s", u_errorName(status)]; 
    46 //      } 
    47 // 
    48 //      if(!match) 
    49 //              return [NSArray array]; 
    50 // 
    51 //      NSMutableArray *results = [NSMutableArray array]; 
    52 //      int i; 
    53 // 
    54 //      size_t groupSize = InitialGroupSize; 
    55 //      for(i=0; i<numberOfGroups+1; i++) { 
    56 //              status = 0; 
    57 //              UChar *dest = calloc(groupSize, sizeof(UChar)); 
    58 //              int32_t buffSize = uregex_group([p pattern], i, dest, groupSize, &status); 
    59 //               
    60 //              if(U_BUFFER_OVERFLOW_ERROR == status) { 
    61 //                      groupSize *= 2; 
    62 //                      free(dest); 
    63 //                      i--; 
    64 //                      continue; 
    65 //              } 
    66 //              else if(U_FAILURE(status)) { 
    67 //                      [NSException raise:@"Find Exception" 
    68 //                                              format:@"%s", u_errorName(status)]; 
    69 //              } 
    70 // 
    71 //              groupSize = InitialGroupSize; // reset to default 
    72 //              [results addObject:[[[NSString alloc] initWithBytes:dest length:buffSize*sizeof(UChar) encoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF16)] autorelease]]; 
    73 //              free(dest); 
    74 //      } 
    75 // 
    76 //      return [NSArray arrayWithArray:results]; 
    77 //} 
    7829 
     30-(NSString *)replaceOccurrencesOfPattern:(NSString *)aPattern withString:(NSString *)replacementText { 
     31        ICUPattern *p = [ICUPattern patternWithString:aPattern]; 
     32        ICUMatcher *m = [ICUMatcher matcherWithPattern:p overString:self]; 
     33        return [m replaceAllWithString:replacementText]; 
     34} 
    7935 
    80 +(NSString *)stringWithUTF16String:(void *)utf16EncodedString 
    81 
     36-(BOOL)matchesPattern:(NSString *)aRegex { 
     37        ICUPattern *p = [ICUPattern patternWithString:aRegex]; 
     38        ICUMatcher *m = [ICUMatcher matcherWithPattern:p overString:self]; 
     39        return [m matches]; 
     40
     41 
     42-(NSArray *)findPattern:(NSString *)aRegex { 
     43        ICUPattern *p = [ICUPattern patternWithString:aRegex]; 
     44        ICUMatcher *matcher = [ICUMatcher matcherWithPattern:p overString:self]; 
     45        NSMutableArray *foundGroups = [NSMutableArray array]; 
     46         
     47        [matcher findFromIndex:0];       
     48        int i; 
     49        for(i=0;i<=[matcher numberOfGroups];i++) 
     50                [foundGroups add:[matcher groupAtIndex:i]]; 
     51 
     52        return [NSArray arrayWithArray:foundGroups]; 
     53
     54 
     55-(NSArray *)componentsSeparatedByPattern:(NSString *)aRegex { 
     56        ICUPattern *p = [ICUPattern patternWithString:aRegex]; 
     57        return [p componentsSplitFromString:self]; 
     58
     59 
     60+(NSString *)stringWithUTF16String:(void *)utf16EncodedString { 
    8261        return [[[NSString alloc] initWithBytes:utf16EncodedString  
    8362                                                                         length:u_strlen(utf16EncodedString)*sizeof(UChar)