2 // NSStringICUAdditions.m
5 // Created by Aaron Evans on 11/19/06.
6 // Copyright 2006 Aaron Evans. All rights reserved.
9 #import "NSStringICUAdditions.h"
10 #import "ICUPattern.h"
11 #import "ICUMatcher.h"
13 struct URegularExpression;
15 * Structure represeting a compiled regular rexpression, plus the results
16 * of a match operation.
19 typedef struct URegularExpression URegularExpression;
21 #define U_HIDE_DRAFT_API 1
22 #define U_DISABLE_RENAMING 1
25 @interface NSString (NSStringICUPrivateAdditions)
29 @implementation NSString (NSStringICUAdditions)//
31 -(NSString *)replaceOccurrencesOfPattern:(NSString *)aPattern withString:(NSString *)replacementText {
32 ICUPattern *p = [ICUPattern patternWithString:aPattern];
33 ICUMatcher *m = [ICUMatcher matcherWithPattern:p overString:self];
34 return [m replaceAllWithString:replacementText];
37 -(BOOL)matchesPattern:(NSString *)aRegex {
38 ICUPattern *p = [ICUPattern patternWithString:aRegex];
39 ICUMatcher *m = [ICUMatcher matcherWithPattern:p overString:self];
43 -(NSArray *)findPattern:(NSString *)aRegex {
44 ICUPattern *p = [ICUPattern patternWithString:aRegex];
45 ICUMatcher *matcher = [ICUMatcher matcherWithPattern:p overString:self];
46 NSMutableArray *foundGroups = [NSMutableArray array];
48 [matcher findFromIndex:0];
50 for(i=0;i<=[matcher numberOfGroups];i++)
51 [foundGroups addObject:[matcher groupAtIndex:i]];
53 return [NSArray arrayWithArray:foundGroups];
56 -(NSArray *)componentsSeparatedByPattern:(NSString *)aRegex {
57 ICUPattern *p = [ICUPattern patternWithString:aRegex];
58 return [p componentsSplitFromString:self];
61 +(NSString *)stringWithICUString:(void *)utf16EncodedString {
62 return [[[NSString alloc] initWithBytes:utf16EncodedString
63 length:u_strlen(utf16EncodedString)*sizeof(UChar)
64 encoding:[self nativeUTF16Encoding]] autorelease];
67 +(NSStringEncoding)nativeUTF16Encoding {
68 CFStringEncoding stringEncoding;
70 stringEncoding = kCFStringEncodingUTF16BE;
71 #elif __LITTLE_ENDIAN__
72 stringEncoding = kCFStringEncodingUTF16LE;
75 return CFStringConvertEncodingToNSStringEncoding(stringEncoding);
78 -(void *)UTF16String {
79 UChar *ret = (UChar *)[self cStringUsingEncoding:[NSString nativeUTF16Encoding]];
81 // for some reason, the null-terminator doesn't always show up at the right place and this
82 // causes extra characters to be created in the unicode string. We remove them here by force.
83 int len = [self length];