rendered paste body#import <Cocoa/Cocoa.h>
@interface JNTextViewController : NSObject
{
}
- (BOOL) textView: (NSTextView *) textView doCommandBySelector: (SEL) commandSelector;
@end
@implementation JNTextViewController
- (NSRange) rangeOfCurrentLine: (NSTextView *) textView
{
NSRange rangeBeforeCursor;
NSRange aRange;
rangeBeforeCursor.location = 0;
rangeBeforeCursor.length = [textView selectedRange].location;
aRange = [[textView string] rangeOfString: @"\n" options: NSBackwardsSearch range: rangeBeforeCursor];
aRange.length = rangeBeforeCursor.length - aRange.location - 1;
if(aRange.location == NSNotFound) {
aRange.location = 0;
aRange.length = [[textView string] length];
} else {
++aRange.location;
}
return aRange;
}
- (void) insertNewline: (NSTextView *) textView
{
NSString *currentLine;
NSCharacterSet *nonWhitespaceCharacterSet;
NSRange rangeOfCurrentLine;
int firstNonWhitespaceIndex;
rangeOfCurrentLine = [self rangeOfCurrentLine: textView];
currentLine = [[textView string] substringWithRange: rangeOfCurrentLine];
nonWhitespaceCharacterSet = [[NSCharacterSet whitespaceCharacterSet] invertedSet];
firstNonWhitespaceIndex = [currentLine rangeOfCharacterFromSet: nonWhitespaceCharacterSet].location;
if(firstNonWhitespaceIndex == NSNotFound) firstNonWhitespaceIndex = [currentLine length];
[textView insertText: @"\n"];
[textView insertText: [currentLine substringToIndex: firstNonWhitespaceIndex]];
}
- (BOOL) textView: (NSTextView *) textView doCommandBySelector: (SEL) commandSelector
{
if(commandSelector == @selector(insertNewline:)) {
[self insertNewline: textView];
return YES;
} else {
return NO;
}
}
@end