/*
* PSText.m, subclass of Text overriding paste: for adding functionality
* Author: Ali Ozer
* Created: Mar 22, 89
*
* You may freely copy, distribute and reuse the code in this example.
* NeXT disclaims any warranty of any kind, expressed or implied,
* as to its fitness for any particular use.
*/

#import <appkit/appkit.h>
#import <string.h>
#import <mach/mach.h>
#import "PSText.h"

@implementation PSText

/*
* The following method overrides the Text paste: method. If there's any
* PostScript on the pasteboard, this method will paste that in before pasting
* ASCII. If there's no PostScript on the pasteboard, then this method will
* simply call the overridden paste: method.
*/
- paste:(id)sender
{
id pb = [Pasteboard new];
char *data;
char *const *s; /* We use s to go through types. */
char *const *types = [pb types];
int len;

/* Check to see if we have any PostScript on the pasteboard... */

for (s = types; *s; s++) if (!strcmp(*s, NXPostScriptPboard)) break;

/* At this point, if *s != NULL, we found PostScript on the pasteboard. */

if (*s && [pb readType:NXPostScriptPboard data:&data length:&len] && len) {
[self replaceSel:data length:len];
vm_deallocate (task_self(), (vm_address_t)data, (vm_size_t)len);
} else {
[super paste:sender]; /* No PS; pass the task on to Text. */
}

return self;
}

@end