Changeset 3548

Show
Ignore:
Timestamp:
01/08/07 23:10:31 (2 years ago)
Author:
timothy
Message:

Some optimizations to our NSString additions.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Additions/NSStringAdditions.m

    r3546 r3548  
    238238 
    239239- (NSString *) stringByEncodingXMLSpecialCharactersAsEntities { 
     240        NSCharacterSet *special = [NSCharacterSet characterSetWithCharactersInString:@"&<>\"'"]; 
     241        NSRange range = [self rangeOfCharacterFromSet:special options:NSLiteralSearch]; 
     242        if( range.location == NSNotFound ) 
     243                return self; 
     244 
    240245        NSMutableString *result = [self mutableCopyWithZone:nil]; 
    241246        [result encodeXMLSpecialCharactersAsEntities]; 
     
    244249 
    245250- (NSString *) stringByDecodingXMLSpecialCharacterEntities { 
     251        NSRange range = [self rangeOfString:@"&" options:NSLiteralSearch]; 
     252        if( range.location == NSNotFound ) 
     253                return self; 
     254 
    246255        NSMutableString *result = [self mutableCopyWithZone:nil]; 
    247256        [result decodeXMLSpecialCharacterEntities]; 
     
    252261 
    253262- (NSString *) stringByEscapingCharactersInSet:(NSCharacterSet *) set { 
     263        NSRange range = [self rangeOfCharacterFromSet:set]; 
     264        if( range.location == NSNotFound ) 
     265                return self; 
     266 
    254267        NSMutableString *result = [self mutableCopyWithZone:nil]; 
    255268        [result escapeCharactersInSet:set]; 
     
    270283 
    271284- (NSString *) stringByStrippingIllegalXMLCharacters { 
     285        NSMutableCharacterSet *illegalSet = [[NSCharacterSet characterSetWithRange:NSMakeRange( 0, 0x1f )] mutableCopyWithZone:nil]; 
     286        [illegalSet addCharactersInRange:NSMakeRange( 0x7f, 1 )]; 
     287        [illegalSet addCharactersInRange:NSMakeRange( 0xfffe, 1 )]; 
     288        [illegalSet addCharactersInRange:NSMakeRange( 0xffff, 1 )]; 
     289 
     290        NSRange range = [self rangeOfCharacterFromSet:illegalSet]; 
     291        [illegalSet release]; 
     292 
     293        if( range.location == NSNotFound ) 
     294                return self; 
     295 
    272296        NSMutableString *result = [self mutableCopyWithZone:nil]; 
    273297        [result stripIllegalXMLCharacters]; 
     
    297321@implementation NSMutableString (NSMutableStringAdditions) 
    298322- (void) encodeXMLSpecialCharactersAsEntities { 
     323        NSCharacterSet *special = [NSCharacterSet characterSetWithCharactersInString:@"&<>\"'"]; 
     324        NSRange range = [self rangeOfCharacterFromSet:special options:NSLiteralSearch]; 
     325        if( range.location == NSNotFound ) 
     326                return; 
     327 
    299328        [self replaceOccurrencesOfString:@"&" withString:@"&amp;" options:NSLiteralSearch range:NSMakeRange( 0, [self length] )]; 
    300329        [self replaceOccurrencesOfString:@"<" withString:@"&lt;" options:NSLiteralSearch range:NSMakeRange( 0, [self length] )]; 
     
    305334 
    306335- (void) decodeXMLSpecialCharacterEntities { 
     336        NSRange range = [self rangeOfString:@"&" options:NSLiteralSearch]; 
     337        if( range.location == NSNotFound ) 
     338                return; 
     339 
    307340        [self replaceOccurrencesOfString:@"&lt;" withString:@"<" options:NSLiteralSearch range:NSMakeRange( 0, [self length] )]; 
    308341        [self replaceOccurrencesOfString:@"&gt;" withString:@">" options:NSLiteralSearch range:NSMakeRange( 0, [self length] )]; 
     
    315348 
    316349- (void) escapeCharactersInSet:(NSCharacterSet *) set { 
     350        NSRange range = [self rangeOfCharacterFromSet:set]; 
     351        if( range.location == NSNotFound ) 
     352                return; 
     353 
    317354        NSScanner *scanner = [[NSScanner allocWithZone:nil] initWithString:self]; 
    318355 
     
    342379 
    343380- (void) stripIllegalXMLCharacters { 
    344         NSMutableCharacterSet *illegalSet = [[[NSCharacterSet characterSetWithRange:NSMakeRange( 0, 0x1f )] mutableCopyWithZone:nil] autorelease]; 
     381        NSMutableCharacterSet *illegalSet = [[NSCharacterSet characterSetWithRange:NSMakeRange( 0, 0x1f )] mutableCopyWithZone:nil]; 
    345382        [illegalSet addCharactersInRange:NSMakeRange( 0x7f, 1 )]; 
    346383        [illegalSet addCharactersInRange:NSMakeRange( 0xfffe, 1 )]; 
     
    352389                range = [self rangeOfCharacterFromSet:illegalSet]; 
    353390        } 
     391 
     392        [illegalSet release]; 
    354393} 
    355394@end