This is eTLiteral.m in view mode; [Download] [Up]
///////////////////////////////////////////////////////////////////////////////
// FILENAME: eTLiteral.m
// SUMMARY: Implementation of escaped sequences for different formats
// SUPERCLASS: eTImage
// INTERFACE: None
// PROTOCOLS: <Annotation,HTMDSupport,ASCIISupport,LaTeXSupport,Tool,
// InspectableTarget>
// AUTHOR: Rohit Khare
// COPYRIGHT: (c) 1994 California Institure of Technology, eText Project
///////////////////////////////////////////////////////////////////////////////
// DESCRIPTION
// Container of rtf comment, owner, and last-modified date strings.
///////////////////////////////////////////////////////////////////////////////
// HISTORY
// 10/30/94: Modified to support <InspectableTarget>
// 07/25/94: Added ISINDEX subclass as an investigation into "shortcut"s
// 07/24/94: Birth
///////////////////////////////////////////////////////////////////////////////
#import"eTLiteral.h"
#define _eTLiteralVERSION 10
@implementation eTLiteral
//int numReps
//char **theReps
//int *theFormats
-(int) numReps
{return NUM_FMTS_WRITTEN;}
-(const char **) theReps
{return theReps;}
-(const char *) theRepForFormat: (int) format
{return theReps[format];}
-setTheRep: (const char *) newRep forFormat: (int) format
{
if(!newRep) return self;
theReps[format] = realloc(theReps[format],(strlen(newRep)+1)*sizeof(char));
strcpy(theReps[format],newRep);
return self;
}
-setRep: (int) theFormat fromStream: (NXStream *)stream length:(int)length
{
theReps[theFormat]=realloc(theReps[theFormat],length+1);
NXRead(stream,theReps[theFormat],length);
*(theReps[theFormat]+length)=0;
return self;
}
// overidden etImage methods
+ toolAwake:theApp
{
char buf[MAXPATHLEN];
NXBundle *bundle;
id icon=nil;
bundle = [NXBundle bundleForClass:[eTLiteral class]];
if ([bundle getPath:buf forResource:"eTLiteralIcon" ofType:"tiff"] ) {
icon=[[NXImage alloc] initFromFile:buf];
[icon setName:"eTLiteralIcon"];
} else {
NXLogError("Image not found: eTLiteralIcon");
}
[theApp registerAnnotation: [eTLiteral class]
name: "eTLiteral--HTML"
RTFDirective: "eTLiteral"
menuLabel: "HTML/Literal Markup"
menuKey: '\0'
menuIcon: (NXImage *) nil];
[theApp registerAnnotation: [eTLiteral class]
name: "eTLiteral--LaTeX"
RTFDirective: "eTLiteral"
menuLabel: "LaTeX/Literal Markup"
menuKey: '\0'
menuIcon: (NXImage *) nil];
[theApp registerAnnotation: [eTLiteral class]
name: "eTLiteral--C"
RTFDirective: "eTLiteral"
menuLabel: "C/Literal Markup"
menuKey: '\0'
menuIcon: (NXImage *) nil];
// "delegate" chain:
[eTISINDEXLiteral toolAwake:theApp];
return self;
}
- init
{
[super init];
[self setImageComponent:[eTImageComponent newImageNamed:"eTLiteralIcon"]];
[self setUsesButtonStyle:NO];
[self setDraggable:YES];
return self;
}
- free
{
int i;
for(i=0;i<[self numReps];i++)
free(theReps[i]);
return self = [super free];
}
- initFromPboard:thePB inDoc:theDoc linked:(BOOL) linked
{
//[self init]; called from above.
[super initFromPboard:thePB inDoc:theDoc linked:linked];
[imageComponent setDoc:theDoc];
return self;
}
- writeComponentToPath:(NXAtom)path inFormat:(int) theFormat
{
if(!etDoc) NXLogError("etDoc is nil at %s %u",__FILE__,__LINE__);
return [super writeComponentToPath:path inFormat:theFormat];
}
- readRichText:(NXStream *)stream forView:view
{
int cnt,i;
NXScanf(stream, "%d ", &i);
if (i != _eTLiteralVERSION) {
// bad version block.
NXLogError("eTLiteral found unparseable version %d at position %d",
i, NXTell(stream));
return nil;
}
for(cnt=0;cnt<[self numReps];cnt++){
NXScanf(stream, "%d", &i); NXGetc(stream); //space-eater
if (i) {
[self setRep:cnt fromStream: stream length:i];
NXGetc(stream); // trailing space
} // if i was zero, we have already advanced to the next non-white bit.
}
[super readRichText:stream forView:view];
return self;
}
- writeRichText:(NXStream *)stream forView:view
{
int cnt;
NXPrintf(stream, "%d ", _eTLiteralVERSION);
for(cnt=0;cnt<[self numReps];cnt++) {
if (theReps[cnt])
NXPrintf(stream, "%d %s ",strlen(theReps[cnt]),theReps[cnt]);
else NXPrintf(stream, "%d ",0);
}
[super writeRichText:stream forView:view];
return self;
}
- writeASCIIRef:(NXStream *)stream forView:view
{
if(theReps[ASCII_FMT])
NXPrintf(stream,"%s",theReps[ASCII_FMT]);
return self;
}
- writeC:(NXStream *)stream forView:view
{
if(theReps[C_FMT])
NXPrintf(stream, "%s",theReps[C_FMT]);
return self;
}
- writeHTML:(NXStream*)stream forView:view
{
if(theReps[HTMD_FMT])
NXPrintf(stream,"%s",theReps[HTMD_FMT]);
return self;
}
- writeLaTeX:(NXStream *)stream forView:view
{
if(theReps[TeXD_FMT])
NXPrintf(stream,"%s",theReps[TeXD_FMT]);
return self;
}
- inspect:(NXEvent *) e
{
[[NXApp inspector] inspect:self];
return self;
}
- (id <Inspectable>) inspectableDelegate {
return [[eTLiteralUI new] setAnnotation:self]; }
@endThese are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.