The R Project SVN R-packages

Rev

Rev 6132 | Rev 6228 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6132 Rev 6137
Line 144... Line 144...
144
 
144
 
145
	// disabled to get the current text range in textView safer
145
	// disabled to get the current text range in textView safer
146
	[[self layoutManager] setBackgroundLayoutEnabled:NO];
146
	[[self layoutManager] setBackgroundLayoutEnabled:NO];
147
	[[self layoutManager] replaceTextStorage:theTextStorage];
147
	[[self layoutManager] replaceTextStorage:theTextStorage];
148
 
148
 
149
	if(lineNumberingEnabled) {
-
 
150
 
-
 
151
		SLog(@"RScriptEditorTextView: set up line numbering <%@>", self);
-
 
152
 
-
 
153
		NoodleLineNumberView *theRulerView = [[NoodleLineNumberView alloc] initWithScrollView:scrollView];
-
 
154
		[scrollView setVerticalRulerView:theRulerView];
-
 
155
		[scrollView setHasHorizontalRuler:NO];
-
 
156
		[scrollView setHasVerticalRuler:YES];
-
 
157
		[scrollView setRulersVisible:YES];
-
 
158
		[theRulerView release];
-
 
159
		[self display];
-
 
160
	}
-
 
161
 
-
 
162
 
-
 
163
	isSyntaxHighlighting = NO;
149
	isSyntaxHighlighting = NO;
164
 
150
 
165
	if([prefs objectForKey:highlightCurrentLine] == nil) [prefs setBool:YES forKey:highlightCurrentLine];
151
	if([prefs objectForKey:highlightCurrentLine] == nil) [prefs setBool:YES forKey:highlightCurrentLine];
166
	if([prefs objectForKey:indentNewLines] == nil) [prefs setBool:YES forKey:indentNewLines];
152
	if([prefs objectForKey:indentNewLines] == nil) [prefs setBool:YES forKey:indentNewLines];
167
 
153
 
Line 510... Line 496...
510
		[self cut:nil];
496
		[self cut:nil];
511
		[self paste:nil];
497
		[self paste:nil];
512
		[[self undoManager] enableUndoRegistration];
498
		[[self undoManager] enableUndoRegistration];
513
	}
499
	}
514
	[[self textContainer] setHeightTracksTextView:NO];
500
	[[self textContainer] setHeightTracksTextView:NO];
-
 
501
 
515
	[[[self enclosingScrollView] verticalRulerView] performSelector:@selector(refresh) withObject:nil afterDelay:0.0f];
502
	[[[self enclosingScrollView] verticalRulerView] performSelector:@selector(refresh) withObject:nil afterDelay:0.0f];
516
 
503
 
517
}
504
}
518
 
505
 
519
- (void)drawRect:(NSRect)rect
506
- (void)drawRect:(NSRect)rect
Line 565... Line 552...
565
		// Cancel calling doSyntaxHighlighting
552
		// Cancel calling doSyntaxHighlighting
566
		[NSObject cancelPreviousPerformRequestsWithTarget:self 
553
		[NSObject cancelPreviousPerformRequestsWithTarget:self 
567
								selector:@selector(doSyntaxHighlighting) 
554
								selector:@selector(doSyntaxHighlighting) 
568
								object:nil];
555
								object:nil];
569
 
556
 
570
		[self performSelector:@selector(doSyntaxHighlighting) withObject:nil afterDelay:0.001f];
557
		[self performSelector:@selector(doSyntaxHighlighting) withObject:nil afterDelay:0.01f];
571
 
558
 
572
		// Cancel setting undo break point
559
		// Cancel setting undo break point
573
		[NSObject cancelPreviousPerformRequestsWithTarget:self 
560
		[NSObject cancelPreviousPerformRequestsWithTarget:self 
574
								selector:@selector(breakUndoCoalescing) 
561
								selector:@selector(breakUndoCoalescing) 
575
								object:nil];
562
								object:nil];
Line 950... Line 937...
950
- (void)foldSelectedLines:(id)sender
937
- (void)foldSelectedLines:(id)sender
951
{
938
{
952
 
939
 
953
	NSRange r = [self selectedRange];
940
	NSRange r = [self selectedRange];
954
 
941
 
-
 
942
	if(r.length < 4) return;
-
 
943
 
-
 
944
	unichar s = [[self string] characterAtIndex:r.location];
-
 
945
	unichar e = [[self string] characterAtIndex:NSMaxRange(r)-1];
-
 
946
 
-
 
947
	BOOL wrapCheck = NO;
-
 
948
 
-
 
949
	if(s == '{' && e == '}') {
-
 
950
		r.location++;
-
 
951
		r.length -= 2;
-
 
952
		wrapCheck = YES;
-
 
953
	} else if(s == '(' && e == ')') {
-
 
954
		r.location++;
-
 
955
		r.length -= 2;
-
 
956
		wrapCheck = YES;
-
 
957
	} else if(s == '[' && e == ']') {
-
 
958
		r.location++;
-
 
959
		r.length -= 2;
-
 
960
		wrapCheck = YES;
-
 
961
	}
-
 
962
 
955
	if(!r.length) return;
963
	if(!r.length) return;
956
 
964
 
957
	if([[self string] characterAtIndex:NSMaxRange(r)-1] == '\n')
965
	if(!wrapCheck && [[self string] characterAtIndex:NSMaxRange(r)-1] == '\n')
958
		r.length--;
966
		r.length--;
959
 
967
 
960
	if(!r.length) return;
968
	if(!r.length) return;
961
 
969
 
-
 
970
	NSString *tooltip = nil;
-
 
971
	if(r.length < 300)
-
 
972
		tooltip = [[self string] substringWithRange:r];
-
 
973
	else
-
 
974
		tooltip = [[[self string] substringWithRange:NSMakeRange(r.location, 300)] stringByAppendingString:@"\n…"];
-
 
975
 
962
	[theTextStorage beginEditing];
976
	[theTextStorage beginEditing];
963
	[theTextStorage addAttribute:foldingAttributeName value:[NSNumber numberWithBool:YES] range:r];
977
	[theTextStorage addAttribute:foldingAttributeName value:[NSNumber numberWithBool:YES] range:r];
-
 
978
	[theTextStorage addAttribute:NSCursorAttributeName value:[NSCursor arrowCursor] range:r];
-
 
979
	[theTextStorage addAttribute:NSToolTipAttributeName value:tooltip range:r];
964
	[theTextStorage endEditing];
980
	[theTextStorage endEditing];
965
 
981
 
966
	[self didChangeText];
982
	[self didChangeText];
967
	if(lineNumberingEnabled)
983
	if(lineNumberingEnabled)
968
		[[[self enclosingScrollView] verticalRulerView] performSelector:@selector(refresh) withObject:nil afterDelay:0.0f];
984
		[[[self enclosingScrollView] verticalRulerView] performSelector:@selector(refresh) withObject:nil afterDelay:0.0f];
Line 979... Line 995...
979
	NSRange range;
995
	NSRange range;
980
	NSNumber *value = [textStorage attribute:foldingAttributeName atIndex:charIndex longestEffectiveRange:&range inRange:NSMakeRange(0, [textStorage length])];
996
	NSNumber *value = [textStorage attribute:foldingAttributeName atIndex:charIndex longestEffectiveRange:&range inRange:NSMakeRange(0, [textStorage length])];
981
 
997
 
982
	if (value && [value boolValue] && [self shouldChangeTextInRange:range replacementString:nil]) {
998
	if (value && [value boolValue] && [self shouldChangeTextInRange:range replacementString:nil]) {
983
		[textStorage removeAttribute:foldingAttributeName range:range];
999
		[textStorage removeAttribute:foldingAttributeName range:range];
-
 
1000
		[textStorage removeAttribute:NSCursorAttributeName range:range];
-
 
1001
		[textStorage removeAttribute:NSToolTipAttributeName range:range];
984
		[self didChangeText];
1002
		[self didChangeText];
985
		[self setSelectedRange:NSMakeRange(NSMaxRange(range), 0)];
1003
		[self setSelectedRange:NSMakeRange(NSMaxRange(range), 0)];
986
		if(lineNumberingEnabled)
1004
		if(lineNumberingEnabled)
987
			[[[self enclosingScrollView] verticalRulerView] performSelector:@selector(refresh) withObject:nil afterDelay:0.0f];
1005
			[[[self enclosingScrollView] verticalRulerView] performSelector:@selector(refresh) withObject:nil afterDelay:0.0f];
988
		[self scrollRangeToVisible:[self selectedRange]];
1006
		[self scrollRangeToVisible:[self selectedRange]];
989
		return YES;
1007
		return YES;
990
	}
1008
	}
991
	return NO;
1009
	return NO;
992
}
1010
}
993
 
1011
 
-
 
1012
- (void)mouseDown:(NSEvent *)event
-
 
1013
{
-
 
1014
 
994
// <TODO> enable for folding
1015
	// <TODO> enable for folding
995
// - (void)mouseDown:(NSEvent *)event
1016
	[super mouseDown:event];
996
// {
-
 
997
// 
1017
 
998
// 	if(![theTextStorage isKindOfClass:[RScriptEditorTextStorage class]]) [super mouseDown:event];
1018
// 	if(![theTextStorage isKindOfClass:[RScriptEditorTextStorage class]]) [super mouseDown:event];
999
// 
1019
// 
1000
// 	NSUInteger glyphIndex = [layoutManager glyphIndexForPoint:[self convertPointFromBase:[event locationInWindow]] inTextContainer:[self textContainer]];
-
 
1001
// 	RScriptEditorLayoutManager *layoutManager = (RScriptEditorLayoutManager*)[self layoutManager];
1020
// 	RScriptEditorLayoutManager *layoutManager = (RScriptEditorLayoutManager*)[self layoutManager];
-
 
1021
// 	NSUInteger glyphIndex = [layoutManager glyphIndexForPoint:[self convertPointFromBase:[event locationInWindow]] inTextContainer:[self textContainer]];
1002
// 
1022
// 
1003
// 	[theTextStorage setLineFoldingEnabled:YES];
1023
// 	[theTextStorage setLineFoldingEnabled:YES];
1004
// 
1024
// 
1005
// 	// trigger unfolding if inside foldingAttachmentCell
1025
// 	// trigger unfolding if inside foldingAttachmentCell
1006
// 	if (glyphIndex < [layoutManager numberOfGlyphs]) {
1026
// 	if (glyphIndex < [layoutManager numberOfGlyphs]) {
Line 1034... Line 1054...
1034
// 
1054
// 
1035
// 	[theTextStorage setLineFoldingEnabled:NO];
1055
// 	[theTextStorage setLineFoldingEnabled:NO];
1036
// 
1056
// 
1037
// 	[super mouseDown:event];
1057
// 	[super mouseDown:event];
1038
// }
1058
// }
-
 
1059
// 
-
 
1060
// - (void)setSelectedRanges:(NSArray *)ranges affinity:(NSSelectionAffinity)affinity stillSelecting:(BOOL)stillSelectingFlag
-
 
1061
// {
-
 
1062
// 
-
 
1063
// 	if(!stillSelectingFlag) {
-
 
1064
// 
-
 
1065
// 		if([ranges count] > 0) {
-
 
1066
// 
-
 
1067
// 			// Adjust range for folded text chunks; additional checks will be made in
-
 
1068
// 			// the self's delegate [RDocumentWinCtrl:textViewDidChangeSelection:]
-
 
1069
// 
-
 
1070
// 			NSRange range = [[ranges objectAtIndex:0] rangeValue];
-
 
1071
// 
-
 
1072
// 			if(!range.length) {
-
 
1073
// 				[super setSelectedRanges:ranges affinity:affinity stillSelecting:stillSelectingFlag];
-
 
1074
// 				return;
-
 
1075
// 			}
-
 
1076
// 
-
 
1077
// 			NSRange glyphRange = [[self layoutManager] glyphRangeForCharacterRange:range actualCharacterRange:NULL];
-
 
1078
// 
-
 
1079
// 			if(glyphRange.location != range.location || glyphRange.length != range.length) {
-
 
1080
// 
-
 
1081
// 				if([ranges count] == 2)
-
 
1082
// 					glyphRange.length += [[ranges objectAtIndex:1] rangeValue].length;
-
 
1083
// 
-
 
1084
// 				SLog(@"RScriptEditorTextView:setSelectedRanges: adjust range via glyph range from %@ to %@", NSStringFromRange(range), NSStringFromRange(glyphRange));
-
 
1085
// 
-
 
1086
// 				[super setSelectedRange:glyphRange];
-
 
1087
// 				return;
-
 
1088
// 
-
 
1089
// 			}
-
 
1090
// 		}
-
 
1091
// 	}
-
 
1092
// 
-
 
1093
// 	[super setSelectedRanges:ranges affinity:affinity stillSelecting:stillSelectingFlag];
-
 
1094
 
-
 
1095
}
-
 
1096
 
1039
 
1097
 
1040
- (void)setTypingAttributes:(NSDictionary *)attrs
1098
- (void)setTypingAttributes:(NSDictionary *)attrs
1041
{
1099
{
1042
	// we don't want to store foldingAttributeName as a typing attribute
1100
	// we don't want to store foldingAttributeName as a typing attribute
1043
	if ([attrs objectForKey:foldingAttributeName]) {
1101
	if ([attrs objectForKey:foldingAttributeName]) {