Skip navigation.
 
mlRe: App-specific URLs and the pasteboard. Need help.
FROM : Duncan Champney
DATE : Tue Jan 22 21:44:52 2008

Hmm. Curiouser and curiouser.

My app creates custom URLs to encode the settings for fractal plots. 
Then, when the user clicks a link, my app launches, parses the 
parameters out of the URL, and recreates the plot.

Based on Alastair's advice (copied below), my app now creates an 
NSAttributedString and uses it to create RTF data, which I copy to the 
clipboard. In general, it works well.

However, some of the URLs my program creates are really long. (the URL 
encodes 20 or more parameters for every plot, plus 18 parameters for 
each of an arbitrary number of color gradients).

The URL shows up as correct in the clipboard when I look at it using 
the Clipboard viewer (thanks to Jonathon Mah for that suggestion!)

However, when I paste the URL into TextEdit or Mail, it gets truncated 
at slightly less than 1000 characters. (The exact count seems to vary 
by a few bytes, but seems to be around 988 to 992 characters for the 
actual URL text.)

Is there a limitation on how big an URL can be in an RTF tag? These 
long URLs work if my app copies them to the clipboard and then reads 
them back from the clipboard, so I know they are well formatted. 
Further, if the length of the URL is short enough, the clickable link 
in TextEdit or mail works perfectly. It's only when the length of the 
URL approaches 1000 characters that there's a problem.


Duncan
---
On Jan 19, 2008, at 7:59 AM, Duncan Champney wrote:

>
> On Jan 18, 2008, at 11:05 AM, Alastair Houghton wrote:

>> On 18 Jan 2008, at 15:27, Duncan Champney wrote:
>>

>>> I build my URL string in the variable theURLString, then add it to 
>>> the general pasteboard using the following code:
>>>
>>>      theFW_URL = [NSURL URLWithString:theURLString];
>>>      [theFW_URL writeToPasteboard: thePasteBoard];
>>>      NSString* theURLName = [NSString stringWithFormat: 
>>> NSLocalizedString(@FW_URL_PREFIX ,nil), theDocumentName];
>>>      success = [thePasteBoard setString:theURLName forType: 
>>> NSStringPboardType];

>>
>> Have you tried NSURLPboardType?
>>
>> Or NSHTMLPboardType with HTML containing a link?
>>
>> Or, for that matter, NSRTFPboardType, which I think you'll find can 
>> hold links too; you can make RTF fairly easily from an 
>> NSAttributedString, and if that string happened to contain a link 
>> (hint: see NSLinkAttributeName), I think you'll get the behaviour 
>> you want.
>>
>> At present, I think you're relying on the end application to parse 
>> your text into a link, which won't work in many cases.
>>
>> Kind regards,
>>
>> Alastair.
>>
>> --
>> http://alastairs-place.net
>>
>>

>
> Alastair,
>
> I was using NSURLPboardType, but I don't think I was using it 
> correctly.
>
> Based on your advice, I tried using NSHTMLPboardType. That worked 
> better, but still not ideally.
>
> As you say, NSRTFPboardType seems to work with the widest variety of 
> applications. What I do now is to write RTF to the pasteboard, and 
> also write some HTML as a string. The HTML string is useful for 
> posting links to websites. Here's the code I came up with:
>
>        NSArray* types = [NSArray arrayWithObjects: NSRTFPboardType, 
> NSStringPboardType, nil];
>      [thePasteBoard declareTypes:types owner: nil];
>      theFW_URL = [NSURL URLWithString:theURLString]; //theURLString 
> contains the text of the URL
>      [theFW_URL writeToPasteboard: thePasteBoard];
>        //Create string "Fractalworks plot <theDocumentName>
>        NSString* theURLName = [NSString stringWithFormat: 
> NSLocalizedString(@FW_URL_PREFIX ,nil), theDocumentName];
>        theFW_URL = [NSURL URLWithString:theURLString];
>
>        //Create an NSAttributedString to hold the RTF description 
> of the URL.
>      theStringRange.location = 0;
>        theStringRange.length = [theURLName length];
>        theAttributesDict = [NSDictionary dictionaryWithObject: 
> theFW_URL forKey: NSLinkAttributeName];
>      theRTF_string= [[NSAttributedString alloc] initWithString: 
> theURLName attributes:theAttributesDict];
>        NSData* the_RTF_data = [theRTF_string RTFFromRange: 
> theStringRange documentAttributes: nil];
>        success = [thePasteBoard setData:the_RTF_data forType: 
> NSRTFPboardType];
>        //Also write a string with HTML text into the pasterboard, 
> for apps that can't deal with the RTF data.
>      theURLString =  [NSString stringWithFormat: @"<u><a href=\"%@
> \">%@</a></u>", theURLString, theURLName];
>      success = [thePasteBoard setString:theURLString forType: 
> NSStringPboardType];
>
> Older Carbon apps like Appleworks don't seem to work with this code, 
> though. They take the "vanilla" text from the RTF, rather than using 
> the NSStringPboardType like you'd expect.
> I have a preference to "write application URLS as text" and in that 
> case, I write just the NSStringPboardType data containing the URL to 
> the pasteboard. (That code isn't shown for the sake of brevity.)
>
> Thanks again for your help.
>
>
> Duncan
>
> =

Related mailsAuthorDate
mlApp-specific URLs and the pasteboard. Need help. Duncan Champney Jan 18, 16:27
mlRe: App-specific URLs and the pasteboard. Need help. Steve Bird Jan 18, 16:51
mlRe: App-specific URLs and the pasteboard. Need help. Alastair Houghton Jan 18, 17:05
mlRe: App-specific URLs and the pasteboard. Need help. Alastair Houghton Jan 18, 18:21
mlRe: App-specific URLs and the pasteboard. Need help. Alastair Houghton Jan 19, 00:30
mlRe: App-specific URLs and the pasteboard. Need help. Duncan Champney Jan 19, 13:59
mlRe: App-specific URLs and the pasteboard. Need help. Jonathon Mah Jan 20, 10:49
mlRe: App-specific URLs and the pasteboard: Clipboard Viewer tool Duncan Champney Jan 20, 15:29
mlRe: App-specific URLs and the pasteboard. Need help. Duncan Champney Jan 22, 21:44
mlRe: App-specific URLs and the pasteboard. Need help. glenn andreas Jan 22, 23:46
mlRe: App-specific URLs and the pasteboard. Need help. William Bates Jan 23, 13:22