Skip to content

Instantly share code, notes, and snippets.

@dopcn
Created July 8, 2015 11:49
Show Gist options
  • Save dopcn/fcd3b9ee36b7f42247d6 to your computer and use it in GitHub Desktop.
Save dopcn/fcd3b9ee36b7f42247d6 to your computer and use it in GitHub Desktop.
recursive trim
#import "NSAttributedString+DXYTrim.h"
@implementation NSAttributedString (DXYTrim)
- (NSAttributedString *)attrStringByTrimmingCharacterInSet:(NSCharacterSet *)set {
__block __weak NSAttributedString*(^weak_leadingTrim)(NSAttributedString*);
NSAttributedString*(^leadingTrim)(NSAttributedString*);
weak_leadingTrim = leadingTrim = ^NSAttributedString*(NSAttributedString *attrString) {
NSRange range = [attrString.string rangeOfCharacterFromSet:set];
if (range.location == 0) {
return weak_leadingTrim([attrString attributedSubstringFromRange:NSMakeRange(1, attrString.length-1)]);
} else {
return attrString;
}
};
__block __weak NSAttributedString*(^weak_trailingTrim)(NSAttributedString*);
NSAttributedString*(^trailingTrim)(NSAttributedString*);
weak_trailingTrim = trailingTrim = ^NSAttributedString*(NSAttributedString *attrString) {
NSRange range = [attrString.string rangeOfCharacterFromSet:set options:NSBackwardsSearch];
if (range.location == attrString.length-1) {
return weak_trailingTrim([attrString attributedSubstringFromRange:NSMakeRange(0, attrString.length-1)]);
} else {
return attrString;
}
};
NSAttributedString *tmp = leadingTrim(self);
tmp = trailingTrim(tmp);
return tmp;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment