| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- //
- // NSString-Addtions.m
- // JasonDevelop
- //
- // Created by Jason Lee on 2/17/14.
- // Copyright (c) jasondevelop. All rights reserved.
- //
- #import "GTMNSString+HTML.h"
- #import "NSString-Addtions.h"
- @implementation NSString (Additions)
- - (BOOL)isEmptyString {
- if(self == nil || [self isEqualToString:@"<null>"] || [self isEqualToString:@"null"] || [self isEqualToString:@"(null)"] || self == (id)[NSNull null] || [[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] isEqualToString:@""]) {
- return YES;
- }
- return NO;
- }
- - (BOOL)isNullString {
- if([self isEqualToString:@"<null>"] || [self isEqualToString:@"null"] || self == (id)[NSNull null])
- return YES;
- else
- return NO;
- }
- + (NSString *)stringWithUnsignedChar:(const unsigned char *)chr {
- return [NSString stringWithUTF8String:(char *)chr];
- }
- + (NSString *)stringWithUTF8Data:(NSData *)data {
- return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
- }
- - (NSInteger)countForOccurrencesOfString:(NSString *)occurString {
- NSInteger count = 0, length = [self length];
- NSRange range = NSMakeRange(0, length);
- while(range.location != NSNotFound) {
- range = [self rangeOfString:occurString options:0 range:range];
- if(range.location != NSNotFound) {
- range = NSMakeRange(range.location + range.length, length - (range.location + range.length));
- count++;
- }
- }
- return count;
- }
- #pragma mark - HTML
- // Decode all HTML entities using GTM
- - (NSString *)stringByDecodingHTMLEntities {
- return [self gtm_stringByUnescapingFromHTML];
- }
- // Encode all HTML entities using GTM
- - (NSString *)stringByEncodingHTMLEntities {
- return [self gtm_stringByEscapingForAsciiHTML];
- }
- // Strip HTML tags
- - (NSString *)stringByStrippingTags {
- // Find first & and short-cut if we can
- NSUInteger ampIndex = [self rangeOfString:@"<" options:NSLiteralSearch].location;
- if (ampIndex == NSNotFound) {
- return [NSString stringWithString:self]; // return copy of string as no tags found
- }
- // Scan and find all tags
- NSScanner *scanner = [NSScanner scannerWithString:self];
- [scanner setCharactersToBeSkipped:nil];
- NSMutableSet *tags = [[NSMutableSet alloc] init];
- NSString *tag;
- do {
- // Scan up to <
- tag = nil;
- [scanner scanUpToString:@"<" intoString:NULL];
- [scanner scanUpToString:@">" intoString:&tag];
- // Add to set
- if (tag) {
- NSString *t = [[NSString alloc] initWithFormat:@"%@>", tag];
- [tags addObject:t];
- }
- } while (![scanner isAtEnd]);
- // Strings
- NSMutableString *result = [[NSMutableString alloc] initWithString:self];
- NSString *finalString;
- // Replace tags
- NSString *replacement;
- for (NSString *t in tags) {
- // Replace tag with space unless it's an inline element
- replacement = @" ";
- if ([t isEqualToString:@"<a>"] ||
- [t isEqualToString:@"</a>"] ||
- [t isEqualToString:@"<span>"] ||
- [t isEqualToString:@"</span>"] ||
- [t isEqualToString:@"<strong>"] ||
- [t isEqualToString:@"</strong>"] ||
- [t isEqualToString:@"<em>"] ||
- [t isEqualToString:@"</em>"]) {
- replacement = @"";
- }
- // Replace
- [result replaceOccurrencesOfString:t
- withString:replacement
- options:NSLiteralSearch
- range:NSMakeRange(0, result.length)];
- }
- // Remove multi-spaces and line breaks
- finalString = [result stringByRemovingNewLinesAndWhitespace];
- // Cleanup & return
- return finalString;
- }
- // Replace newlines with <br /> tags
- - (NSString *)stringWithNewLinesAsBRs {
- // Strange New lines:
- // Next Line, U+0085
- // Form Feed, U+000C
- // Line Separator, U+2028
- // Paragraph Separator, U+2029
- // Scanner
- NSScanner *scanner = [[NSScanner alloc] initWithString:self];
- [scanner setCharactersToBeSkipped:nil];
- NSMutableString *result = [[NSMutableString alloc] init];
- NSString *temp;
- NSCharacterSet *newLineCharacters = [NSCharacterSet characterSetWithCharactersInString:
- [NSString stringWithFormat:@"\n\r%C%C%C%C", 0x0085, 0x000C, 0x2028, 0x2029]];
- // Scan
- do {
- // Get non new line characters
- temp = nil;
- [scanner scanUpToCharactersFromSet:newLineCharacters intoString:&temp];
- if (temp) [result appendString:temp];
- temp = nil;
- // Add <br /> s
- if ([scanner scanString:@"\r\n" intoString:nil]) {
- // Combine \r\n into just 1 <br />
- [result appendString:@"<br />"];
- } else if ([scanner scanCharactersFromSet:newLineCharacters intoString:&temp]) {
- // Scan other new line characters and add <br /> s
- if (temp) {
- for (int i = 0; i < temp.length; i++) {
- [result appendString:@"<br />"];
- }
- }
- }
- } while (![scanner isAtEnd]);
- // Cleanup & return
- NSString *retString = [NSString stringWithString:result];
- return retString;
- }
- // Remove newlines and white space from strong
- - (NSString *)stringByRemovingNewLinesAndWhitespace {
- // Strange New lines:
- // Next Line, U+0085
- // Form Feed, U+000C
- // Line Separator, U+2028
- // Paragraph Separator, U+2029
- // Scanner
- NSScanner *scanner = [[NSScanner alloc] initWithString:self];
- [scanner setCharactersToBeSkipped:nil];
- NSMutableString *result = [[NSMutableString alloc] init];
- NSString *temp;
- NSCharacterSet *newLineAndWhitespaceCharacters = [NSCharacterSet characterSetWithCharactersInString:
- [NSString stringWithFormat:@" \t\n\r%C%C%C%C", 0x0085, 0x000C, 0x2028, 0x2029]];
- // Scan
- while (![scanner isAtEnd]) {
- // Get non new line or whitespace characters
- temp = nil;
- [scanner scanUpToCharactersFromSet:newLineAndWhitespaceCharacters intoString:&temp];
- if (temp) [result appendString:temp];
- // Replace with a space
- if ([scanner scanCharactersFromSet:newLineAndWhitespaceCharacters intoString:NULL]) {
- if (result.length > 0 && ![scanner isAtEnd]) // Dont append space to beginning or end of result
- [result appendString:@" "];
- }
- }
- // Return
- NSString *retString = [NSString stringWithString:result];
- return retString;
- }
- - (NSString *)base64Enc {
- NSData *plainData = [self dataUsingEncoding:NSUTF8StringEncoding];
- NSString *base64enc = [plainData base64EncodedStringWithOptions:0];
-
- return base64enc;
- }
- - (NSString *)trim {
- return [self stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
- }
- - (NSString *)trimSpaceAndEnter {
- return [self stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
- }
- - (BOOL)isEquestToIgnoreCase:(NSString *)str {
- BOOL result = false;
- if (![self isEmptyString] || ![str isEmptyString]) {
- if ([[self uppercaseString] isEqualToString:[str uppercaseString]]) {
- result = true;
- }
- }
- return result;
- }
- @end
|