1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
//
// TransparentTextView.m
// Tux Paint
//
// Created by Martin Fuhrer on Wed Dec 12 2007.
// Copyright (c) 2007 Martin Fuhrer.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// (See COPYING.txt)
//
#import "TransparentTextView.h"
@implementation TransparentTextView
- (void)drawViewBackgroundInRect:(NSRect)rect
{
}
- (BOOL)isOpaque
{
return NO;
}
- (void)activateURLs
{
NSTextStorage* textStorage = [self textStorage];
NSString* string = [textStorage string];
NSRange searchRange = NSMakeRange(0, [string length]);
NSRange foundRange;
[textStorage beginEditing];
do
{
// assume that all URLs are enclosed between < >
foundRange = [string rangeOfString:@"<" options:0 range:searchRange];
if (foundRange.length > 0) //Did we find a URL?
{
NSURL* theURL;
NSMutableString* theURLString;
NSDictionary* linkAttributes;
NSRange endOfURLRange, range;
// restrict the searchRange so that it won't find the same string again
searchRange.location = foundRange.location + foundRange.length;
searchRange.length = [string length] - searchRange.location;
// assume the URL ends with >
endOfURLRange = [string rangeOfString:@">" options:0 range:searchRange];
// set foundRange's length to the length of the URL
foundRange.location++;
foundRange.length = endOfURLRange.location - foundRange.location;
// grab the URL from the text and format it properly
range = [[string substringWithRange:foundRange] rangeOfString:@"@"];
if (range.length > 0)
theURLString = [NSMutableString stringWithString:@"mailto:"];
else
theURLString = [NSMutableString stringWithString:@"http://"];
[theURLString appendString:[string substringWithRange:foundRange]];
// generate URL
theURL = [NSURL URLWithString:theURLString];
// make the link attributes
linkAttributes = [NSDictionary dictionaryWithObjectsAndKeys: theURL, NSLinkAttributeName,
[NSColor blueColor], NSForegroundColorAttributeName, nil];
// apply those attributes to the URL in the text
[textStorage addAttributes:linkAttributes range:foundRange];
}
}
while (foundRange.length != 0); //repeat the do block until it no longer finds anything
[textStorage endEditing];
}
@end
|