Changeset 6
- Timestamp:
- 12/10/06 10:11:31 PM (2 years ago)
- Files:
-
- trunk/source/CocoaICU.m (modified) (1 diff)
- trunk/source/ICUMatcher.h (modified) (1 diff)
- trunk/source/ICUMatcher.m (modified) (1 diff)
- trunk/source/ICUPattern.m (modified) (2 diffs)
- trunk/source/NSStringICUAdditions.h (modified) (1 diff)
- trunk/source/NSStringICUAdditions.m (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/source/CocoaICU.m
r5 r6 1 1 #import <Foundation/Foundation.h> 2 2 #import "ICUPattern.h" 3 #import "ICUMatcher.h" 3 4 #import "NSStringICUAdditions.h" 4 5 5 6 6 void doSpeedComparison(); 7 void doGroupTest(); 8 void doSplitTest(); 9 void doUnicodeCharSearch(); 7 void simpleFind(); 8 void findAndReplaceFirst(); 9 void findAndReplaceAll(); 10 void split(); 11 void unicodeFind(); 12 void groupFindAndReplace(); 13 void advancedFindAndReplace(); 10 14 11 15 int main (int argc, const char * argv[]) { 12 16 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 13 17 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 18 26 [pool release]; 19 27 return 0; 20 28 } 29 30 void 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 42 void 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 51 void 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 60 void 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 68 void 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 80 void 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 93 void 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 24 24 -(BOOL)lookingAt:(unsigned)index; 25 25 -(ICUPattern *)pattern; 26 -(BOOL)matches; 26 27 -(void)setPattern:(ICUPattern *)p; 27 28 -(NSString *)replaceAllWithString:(NSString *)aReplacementString; trunk/source/ICUMatcher.m
r5 r6 64 64 pattern = [p retain]; 65 65 } 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 66 77 67 78 /* trunk/source/ICUPattern.m
r5 r6 187 187 188 188 NSMutableArray *results = [NSMutableArray array]; 189 int destFieldsCapacity = 2;189 int destFieldsCapacity = 16; 190 190 size_t destCapacity = u_strlen([self textToSearch]); 191 191 … … 236 236 -(BOOL)matchesString:(NSString *)stringToMatchAgainst 237 237 { 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]; 248 240 } 249 241 trunk/source/NSStringICUAdditions.h
r5 r6 15 15 -(void *)UTF16String; 16 16 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 17 23 @end trunk/source/NSStringICUAdditions.m
r5 r6 9 9 #import "NSStringICUAdditions.h" 10 10 #import "ICUPattern.h" 11 #import "ICUMatcher.h" 11 12 12 13 struct URegularExpression; … … 22 23 #import <unicode/uregex.h> 23 24 24 25 26 25 @interface NSString (NSStringICUPrivateAdditions) 27 26 @end 28 27 29 28 @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 default72 // [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 //}78 29 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 } 79 35 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 { 82 61 return [[[NSString alloc] initWithBytes:utf16EncodedString 83 62 length:u_strlen(utf16EncodedString)*sizeof(UChar)