| Index | Submit class | Submit snippet | Submission feed | List |

NSCharacterSet (BSNewLineCharacterSet)

Language: Objective-C, Author: Found on cocoa-dev ML
License: Public domain

This is a simple category of NSCharacterSet which adds a commodity method to create a set composed only of the newline character.

NSCharacterSet (BSNewLineCharacterSet) source preview

#import "NSCharacterSet+BSNewLineCharacterSet.h"

@implementation NSCharacterSet (BSNewLineCharacterSet)

+ (NSCharacterSet *)newlineCharacterSet;
{
  static NSCharacterSet *newlineCharacterSet = nil;
  
  if (nil == newlineCharacterSet) 
  {
    // This will be a character set with all newline characters (including the weird Unicode ones)
    CFMutableCharacterSetRef newlineCFCharacterSet = NULL;
    // get all whitespace characters (does not include newlines)
    newlineCFCharacterSet = CFCharacterSetCreateMutableCopy(CFAllocatorGetDefault(), CFCharacterSetGetPredefined(kCFCharacterSetWhitespace));
    // invert the whitespace-only set to get all non-whitespace chars (the inverted set will include newlines)
    CFCharacterSetInvert(newlineCFCharacterSet);
    // now get only the characters that are common to kCFCharacterSetWhitespaceAndNewline and our non-whitespace set
    CFCharacterSetIntersect(newlineCFCharacterSet, CFCharacterSetGetPredefined(kCFCharacterSetWhitespaceAndNewline));
    newlineCharacterSet = [(id)newlineCFCharacterSet copy];
    CFRelease(newlineCFCharacterSet);
  }
  
  return newlineCharacterSet;
}

@end

NSCharacterSet (BSNewLineCharacterSet) header preview

#import <Cocoa/Cocoa.h>

@interface NSCharacterSet (BSNewLineCharacterSet)
  + (NSCharacterSet *)newlineCharacterSet;
@end
Download Archive

Compatible with:


Comments

Brad Miller says:

There's a leak in this snippet. A CFRelease(newlineCFCharacterSet) needs to be added at the bottom of the if block. Either that or don't make a copy for newlineCharacterSet. It's being crated from a mutable copy, so you own it.

Michele Balistreri says:

You are correct. I've applied the fix and tested it. Thank you!

Name

Website

Do you hate spammers? (Answer "Yes")