Skip to content

Instantly share code, notes, and snippets.

@beccadax
Created July 24, 2013 07:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save beccadax/6068731 to your computer and use it in GitHub Desktop.
Save beccadax/6068731 to your computer and use it in GitHub Desktop.
Methods to enumerate over paragraph ranges in a string using a block.
//
// NSString+EnumerateParagraphs.h
// Ingist
//
// Created by Brent Royal-Gordon on 7/19/13.
// Copyright (c) 2013 Architechies. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSString (EnumerateParagraphs)
- (void)enumerateParagraphsContainingRange:(NSRange)range usingBlock:(void(^)(NSRange paraRange, BOOL * stop))block;
- (void)enumerateParagraphsInRange:(NSRange)range usingBlock:(void(^)(NSRange paraRange, BOOL * stop))block;
@end
//
// NSString+EnumerateParagraphs.m
// Ingist
//
// Created by Brent Royal-Gordon on 7/19/13.
// Copyright (c) 2013 Architechies. All rights reserved.
//
#import "NSString+EnumerateParagraphs.h"
@implementation NSString (EnumerateParagraphs)
- (void)enumerateParagraphsContainingRange:(NSRange)range usingBlock:(void(^)(NSRange paraRange, BOOL * stop))block {
range = [self paragraphRangeForRange:range];
[self enumerateParagraphsInRange:range usingBlock:block];
}
- (void)enumerateParagraphsInRange:(NSRange)range usingBlock:(void (^)(NSRange, BOOL *))block {
NSUInteger start = range.location;
BOOL stop = NO;
while(!stop && start != NSMaxRange(range)) {
NSUInteger end;
[self getParagraphStart:NULL end:&end contentsEnd:NULL forRange:NSMakeRange(start, 0)];
NSRange range = NSMakeRange(start, end - start);
block(range, &stop);
start = end;
};
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment