The R Project SVN R-packages

Rev

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

Rev 6240 Rev 6242
Line 503... Line 503...
503
}
503
}
504
 
504
 
505
- (void)updateLineWrappingMode
505
- (void)updateLineWrappingMode
506
{
506
{
507
 
507
 
508
	lineWrappingEnabled = [Preferences flagForKey:enableLineWrappingKey withDefault: YES];
-
 
509
	
-
 
510
	NSSize contentSize = [scrollView contentSize];
-
 
511
	NSTextContainer *textContainer = [self textContainer];
-
 
512
	
-
 
513
	// [self setMinSize:contentSize];
-
 
514
	
-
 
515
	if (lineWrappingEnabled) {
-
 
516
		[scrollView setHasHorizontalScroller:YES];
-
 
517
		[textContainer setContainerSize:NSMakeSize(contentSize.width, CGFLOAT_MAX)];
-
 
518
		[textContainer setWidthTracksTextView:YES];
-
 
519
		[self setHorizontallyResizable:NO];
-
 
520
		[(NoodleLineNumberView*)[[self enclosingScrollView] verticalRulerView] setLineWrappingMode:YES];
-
 
521
	} else {
-
 
522
		[scrollView setHasHorizontalScroller:YES];
-
 
523
		[textContainer setContainerSize:NSMakeSize(CGFLOAT_MAX, CGFLOAT_MAX)];
-
 
524
		[textContainer setWidthTracksTextView:NO];
-
 
525
		[self setHorizontallyResizable:YES];
-
 
526
		[(NoodleLineNumberView*)[[self enclosingScrollView] verticalRulerView] setLineWrappingMode:NO];
-
 
527
	}
-
 
528
	
-
 
529
	[[[self enclosingScrollView] verticalRulerView] performSelector:@selector(refresh) withObject:nil afterDelay:0.0f];
-
 
530
 
-
 
531
	// NSSize layoutSize;
-
 
532
	// 
-
 
533
	// lineWrappingEnabled = [Preferences flagForKey:enableLineWrappingKey withDefault: YES];
508
	// lineWrappingEnabled = [Preferences flagForKey:enableLineWrappingKey withDefault: YES];
-
 
509
	// 
-
 
510
	// NSSize contentSize = [scrollView contentSize];
-
 
511
	// NSTextContainer *textContainer = [self textContainer];
-
 
512
	// 
534
	// [self setHorizontallyResizable:YES];
513
	// // [self setMinSize:contentSize];
-
 
514
	// 
535
	// if (!lineWrappingEnabled) {
515
	// if (lineWrappingEnabled) {
536
	// 	layoutSize = NSMakeSize(10e6,10e6);
-
 
537
	// 	[scrollView setHasHorizontalScroller:YES];
516
	// 	[scrollView setHasHorizontalScroller:YES];
538
	// 	[self setMaxSize:layoutSize];
517
	// 	[textContainer setContainerSize:NSMakeSize(contentSize.width, CGFLOAT_MAX)];
539
	// 	[[self textContainer] setContainerSize:layoutSize];
518
	// 	[textContainer setWidthTracksTextView:YES];
540
	// 	[[self textContainer] setWidthTracksTextView:NO];
519
	// 	[self setHorizontallyResizable:NO];
-
 
520
	// 	[(NoodleLineNumberView*)[[self enclosingScrollView] verticalRulerView] setLineWrappingMode:YES];
541
	// } else {
521
	// } else {
542
	// 	[scrollView setHasHorizontalScroller:NO];
522
	// 	[scrollView setHasHorizontalScroller:YES];
543
	// 	layoutSize = [self maxSize];
-
 
544
	// 	[self setMaxSize:layoutSize];
-
 
545
	// 	[[self textContainer] setContainerSize:layoutSize];
523
	// 	[textContainer setContainerSize:NSMakeSize(CGFLOAT_MAX, CGFLOAT_MAX)];
546
	// 	[[self textContainer] setWidthTracksTextView:YES];
524
	// 	[textContainer setWidthTracksTextView:NO];
547
	// 	// Enforce view to be re-layouted correctly
-
 
548
	// 	[[self undoManager] disableUndoRegistration];
-
 
549
	// 	[self selectAll:nil];
525
	// 	[self setHorizontallyResizable:YES];
550
	// 	[self cut:nil];
-
 
551
	// 	[self paste:nil];
-
 
552
	// 	[[self undoManager] enableUndoRegistration];
526
	// 	[(NoodleLineNumberView*)[[self enclosingScrollView] verticalRulerView] setLineWrappingMode:NO];
553
	// }
527
	// }
-
 
528
	// 
-
 
529
	// [[[self enclosingScrollView] verticalRulerView] performSelector:@selector(refresh) withObject:nil afterDelay:0.0f];
-
 
530
 
-
 
531
	NSSize layoutSize;
-
 
532
	
-
 
533
	lineWrappingEnabled = [Preferences flagForKey:enableLineWrappingKey withDefault: YES];
-
 
534
	[self setHorizontallyResizable:YES];
-
 
535
	if (!lineWrappingEnabled) {
-
 
536
		layoutSize = NSMakeSize(10e6,10e6);
-
 
537
		[scrollView setHasHorizontalScroller:YES];
-
 
538
		[self setMaxSize:layoutSize];
-
 
539
		[[self textContainer] setContainerSize:layoutSize];
-
 
540
		[[self textContainer] setWidthTracksTextView:NO];
-
 
541
	} else {
-
 
542
		[scrollView setHasHorizontalScroller:NO];
-
 
543
		layoutSize = [self maxSize];
-
 
544
		[self setMaxSize:layoutSize];
-
 
545
		[[self textContainer] setContainerSize:layoutSize];
-
 
546
		[[self textContainer] setWidthTracksTextView:YES];
-
 
547
		// Enforce view to be re-layouted correctly
-
 
548
		[[self undoManager] disableUndoRegistration];
-
 
549
		[self selectAll:nil];
-
 
550
		[self cut:nil];
-
 
551
		[self paste:nil];
-
 
552
		[[self undoManager] enableUndoRegistration];
-
 
553
	}
554
	// [[self textContainer] setHeightTracksTextView:NO];
554
	[[self textContainer] setHeightTracksTextView:NO];
555
 
555
 
556
 
556
 
557
}
557
}
558
 
558
 
559
- (void)drawRect:(NSRect)rect
559
- (void)drawRect:(NSRect)rect
Line 867... Line 867...
867
			NSMutableAttributedStringAddAttributeValueRange(theTextStorage, NSForegroundColorAttributeName, tokenColor, tokenRange);
867
			NSMutableAttributedStringAddAttributeValueRange(theTextStorage, NSForegroundColorAttributeName, tokenColor, tokenRange);
868
 
868
 
869
			if(breakSyntaxHighlighting) {
869
			if(breakSyntaxHighlighting) {
870
 
870
 
871
				// Cancel calling doSyntaxHighlighting
871
				// Cancel calling doSyntaxHighlighting
872
				// [NSObject cancelPreviousPerformRequestsWithTarget:self 
872
				[NSObject cancelPreviousPerformRequestsWithTarget:self 
873
				// 						selector:@selector(doSyntaxHighlighting) 
873
										selector:@selector(doSyntaxHighlighting) 
874
				// 						object:nil];
874
										object:nil];
875
				// 
875
				
876
				// [self performSelector:@selector(doSyntaxHighlighting) withObject:nil afterDelay:0.15f];
876
				[self performSelector:@selector(doSyntaxHighlighting) withObject:nil afterDelay:0.2f];
877
 
877
 
878
				breakSyntaxHighlighting = 0;
878
				breakSyntaxHighlighting = 0;
879
				break;
879
				break;
880
 
880
 
881
			}
881
			}
Line 1157... Line 1157...
1157
	NSRange foldRange = NSMakeRange(start, end-start);
1157
	NSRange foldRange = NSMakeRange(start, end-start);
1158
	if(![theTextStorage existsFoldedRange:foldRange]) {
1158
	if(![theTextStorage existsFoldedRange:foldRange]) {
1159
		// set caret for ▲ line inside {} for scrolling
1159
		// set caret for ▲ line inside {} for scrolling
1160
		if(foldItem == 2)
1160
		if(foldItem == 2)
1161
			[self setSelectedRange:NSMakeRange(r.location, 0)];
1161
			[self setSelectedRange:NSMakeRange(r.location, 0)];
1162
		[self foldLinesInRange:foldRange];
1162
		[self foldLinesInRange:foldRange blockMode:NO];
1163
	}
1163
	}
1164
 
1164
 
1165
}
1165
}
1166
 
1166
 
1167
- (IBAction)foldBlockAtLevel:(id)sender
1167
- (IBAction)foldBlockAtLevel:(id)sender
1168
{
1168
{
-
 
1169
 
1169
	NSInteger level = [sender tag];
1170
	NSInteger level = [sender tag];
1170
	NSInteger bracketCounter = 0;
1171
	NSInteger bracketCounter = 0;
1171
	NSInteger start = 0;
1172
	NSInteger start = 0;
1172
	NSInteger end = 0;
1173
	NSInteger end = 0;
1173
	CFStringRef str = (CFStringRef)[self string];
1174
	CFStringRef str = (CFStringRef)[self string];
1174
	
1175
	
1175
	unichar c;
1176
	unichar c;
1176
	
1177
	
1177
	// [self unFoldAllBlocks:self];
1178
	[[self undoManager] disableUndoRegistration];
1178
	
1179
	
1179
	for(NSInteger i=0; i<[[self string] length]; i++) {
1180
	for(NSInteger i=0; i<[[self string] length]; i++) {
1180
		c = CFStringGetCharacterAtIndex(str, i);
1181
		c = CFStringGetCharacterAtIndex(str, i);
1181
		if([self parserContextForPosition:i] != pcExpression) continue;
1182
		if([self parserContextForPosition:i] != pcExpression) continue;
1182
		if(c == '{') {
1183
		if(c == '{') {
Line 1193... Line 1194...
1193
			if([self foldStatusAtIndex:i] == 2) {
1194
			if([self foldStatusAtIndex:i] == 2) {
1194
				if(bracketCounter == level) {
1195
				if(bracketCounter == level) {
1195
					end = i;
1196
					end = i;
1196
					NSRange r = NSMakeRange(start, end - start+1);
1197
					NSRange r = NSMakeRange(start, end - start+1);
1197
					if(![theTextStorage existsFoldedRange:r])
1198
					if(![theTextStorage existsFoldedRange:r])
1198
						[self foldLinesInRange:r];
1199
						[self foldLinesInRange:r blockMode:YES];
1199
				}
1200
				}
1200
				if(bracketCounter < 0) {
1201
				if(bracketCounter < 0) {
1201
					NSBeep();
1202
					NSBeep();
1202
					return;
1203
					return;
1203
				}
1204
				}
1204
			}
1205
			}
1205
		}
1206
		}
1206
	}
1207
	}
-
 
1208
 
-
 
1209
	[self didChangeText];
-
 
1210
	
-
 
1211
	NSRange r = [[self layoutManager] characterRangeForGlyphRange:[[self layoutManager] 
-
 
1212
										glyphRangeForBoundingRect:[scrollView documentVisibleRect] 
-
 
1213
												  inTextContainer:[self textContainer]] actualGlyphRange:NULL];
-
 
1214
 
-
 
1215
	[theTextStorage ensureAttributesAreFixedInRange:r];
-
 
1216
 
-
 
1217
	if(lineNumberingEnabled)
-
 
1218
		[[[self enclosingScrollView] verticalRulerView] performSelector:@selector(refresh) withObject:nil afterDelay:0.0f];
1207
	
1219
	
-
 
1220
	[NSObject cancelPreviousPerformRequestsWithTarget:self 
-
 
1221
							selector:@selector(doSyntaxHighlighting) 
-
 
1222
							object:nil];
-
 
1223
 
-
 
1224
	[self performSelector:@selector(doSyntaxHighlighting) withObject:nil afterDelay:0.02f];
-
 
1225
 
-
 
1226
	[[self undoManager] enableUndoRegistration];
1208
}
1227
}
1209
 
1228
 
1210
- (IBAction)unFoldAllBlocks:(id)sender
1229
- (IBAction)unFoldAllBlocks:(id)sender
1211
{
1230
{
1212
	[theTextStorage removeAllFoldedRanges];
1231
	[theTextStorage removeAllFoldedRanges];
Line 1255... Line 1274...
1255
	[theTextStorage addAttribute:NSToolTipAttributeName value:tooltip range:range];
1274
	[theTextStorage addAttribute:NSToolTipAttributeName value:tooltip range:range];
1256
	[theTextStorage endEditing];
1275
	[theTextStorage endEditing];
1257
 
1276
 
1258
}
1277
}
1259
 
1278
 
1260
- (BOOL)foldLinesInRange:(NSRange)range
1279
- (BOOL)foldLinesInRange:(NSRange)range blockMode:(BOOL)blockMode
1261
{
1280
{
1262
	if(range.length < 5) {
1281
	if(range.length < 5) {
1263
		return NO;
1282
		return NO;
1264
	}
1283
	}
1265
 
1284
 
Line 1313... Line 1332...
1313
	range.location++;
1332
	range.location++;
1314
	range.length -= 2;
1333
	range.length -= 2;
1315
 
1334
 
1316
	if(!range.length) return NO;
1335
	if(!range.length) return NO;
1317
	
1336
	
-
 
1337
	if(!blockMode) {
1318
	[[self undoManager] disableUndoRegistration];
1338
		[[self undoManager] disableUndoRegistration];
1319
	if(![self shouldChangeTextInRange:range replacementString:nil]) {
1339
		if(![self shouldChangeTextInRange:range replacementString:nil]) {
-
 
1340
			[[self undoManager] enableUndoRegistration];
-
 
1341
			return NO;
-
 
1342
		}
1320
		[[self undoManager] enableUndoRegistration];
1343
		[[self undoManager] enableUndoRegistration];
1321
		return NO;
-
 
1322
	}
1344
	}
1323
	[[self undoManager] enableUndoRegistration];
-
 
1324
 
1345
 
1325
	NSString *tooltip = nil;
1346
	NSString *tooltip = nil;
1326
	if(range.length < 300)
1347
	if(range.length < 300)
1327
		tooltip = [[self string] substringWithRange:range];
1348
		tooltip = [[self string] substringWithRange:range];
1328
	else
1349
	else
Line 1331... Line 1352...
1331
	[theTextStorage beginEditing];
1352
	[theTextStorage beginEditing];
1332
	[theTextStorage addAttribute:NSCursorAttributeName value:[NSCursor arrowCursor] range:range];
1353
	[theTextStorage addAttribute:NSCursorAttributeName value:[NSCursor arrowCursor] range:range];
1333
	[theTextStorage addAttribute:NSToolTipAttributeName value:tooltip range:range];
1354
	[theTextStorage addAttribute:NSToolTipAttributeName value:tooltip range:range];
1334
	[theTextStorage endEditing];
1355
	[theTextStorage endEditing];
1335
 
1356
 
-
 
1357
	if(!blockMode) {
1336
	[self didChangeText];
1358
		[self didChangeText];
1337
 
1359
 
1338
	if(caretWasInsideFoldedRange)
1360
		if(caretWasInsideFoldedRange)
1339
		[self scrollRangeToVisible:[self selectedRange]];
1361
			[self scrollRangeToVisible:[self selectedRange]];
1340
 
1362
 
1341
	NSRange r = [[self layoutManager] characterRangeForGlyphRange:[[self layoutManager] 
1363
		NSRange r = [[self layoutManager] characterRangeForGlyphRange:[[self layoutManager] 
1342
										glyphRangeForBoundingRect:[scrollView documentVisibleRect] 
1364
											glyphRangeForBoundingRect:[scrollView documentVisibleRect] 
1343
												  inTextContainer:[self textContainer]] actualGlyphRange:NULL];
1365
													  inTextContainer:[self textContainer]] actualGlyphRange:NULL];
1344
 
1366
 
1345
	[theTextStorage ensureAttributesAreFixedInRange:r];
1367
		[theTextStorage ensureAttributesAreFixedInRange:r];
1346
 
1368
 
1347
	if(lineNumberingEnabled)
1369
		if(lineNumberingEnabled)
1348
		[[[self enclosingScrollView] verticalRulerView] performSelector:@selector(refresh) withObject:nil afterDelay:0.0f];
1370
			[[[self enclosingScrollView] verticalRulerView] performSelector:@selector(refresh) withObject:nil afterDelay:0.0f];
1349
	
1371
	
1350
	[NSObject cancelPreviousPerformRequestsWithTarget:self 
1372
		[NSObject cancelPreviousPerformRequestsWithTarget:self 
1351
							selector:@selector(doSyntaxHighlighting) 
1373
								selector:@selector(doSyntaxHighlighting) 
1352
							object:nil];
1374
								object:nil];
1353
 
1375
 
1354
	[self performSelector:@selector(doSyntaxHighlighting) withObject:nil afterDelay:0.02f];
1376
		[self performSelector:@selector(doSyntaxHighlighting) withObject:nil afterDelay:0.02f];
-
 
1377
	}
1355
 
1378
 
1356
	return YES;
1379
	return YES;
1357
 
1380
 
1358
}
1381
}
1359
 
1382