This is RTF.m in view mode; [Download] [Up]
/* * RTF is Based on an object by Simson Garfinkel and Michael Mahoney * in "NeXTSTEP Programming" published by Telos ISBN 0-387-97884-4 */ #import "RTF.h" const char *header = "{\\rtf0\\ansi{\\fonttbl\\f1\\fnil Times-Roman;\\f0\\fswiss" " Helvetica;}\\f0\n"; @implementation RTF - init { [super init]; textStream = NXOpenMemory(0, 0, NX_READWRITE); NXWrite(textStream, header, strlen(header)); return self; } - (NXStream *)stream { NXSeek(textStream, 0L, NX_FROMSTART); return textStream; } /* appendRTF: appends an arbitrary RTF string * to the RTF object */ - appendRTF:(const char *)string { NXSeek(textStream, 0L, NX_FROMEND); NXWrite(textStream, string, strlen(string)); return self; } /* append: appends an ASCII text string, "escaping" * all of the special characters in the text. */ - append:(const char *)string { if (string==0) return self; /* safety */ NXSeek(textStream, 0L, NX_FROMEND); while(*string) { switch(*string) { /* escape special characters */ case '\n': case '{': case '}': case '\\': NXPutc(textStream, '\\'); break; default: break; } NXPutc(textStream, *string); string++; } return self; } - bold:(BOOL)flag { [self appendRTF: flag ? "\\b " : "\\b0 "]; return self; } - italic:(BOOL)flag { [self appendRTF: flag ? "\\i " : "\\i0 "]; return self; } - setJustify:(int)mode { switch(mode) { case NX_LEFTALIGNED: case NX_JUSTIFIED: [self appendRTF: "\\ql "]; break; case NX_CENTERED: [self appendRTF: "\\qc "]; break; case NX_RIGHTALIGNED: [self appendRTF: "\\qr "]; break; } return self; } - tab { [self appendRTF: "\\tab "]; return self; } - setFontSize: (int) size { char buffer[256]; sprintf(buffer, "\\fs%d", (size * 2) ); [self appendRTF: buffer]; return self; } - setLeftMargin: (int) marginInTwips; { /* A twip is a typesetters measure. There are 1440 twips in * an inch. */ char buffer[256]; sprintf(buffer, "\\margl%d", marginInTwips); [self appendRTF: buffer]; return self; } - changeToTimes { /* See the header above for definitions of families */ [self appendRTF: "\\f1"]; return self; } - changeToHelvetica { /* See the header above for definitions of families */ [self appendRTF: "\\f0"]; return self; } - free { NXCloseMemory(textStream, NX_FREEBUFFER); return [super free]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.