Go to the documentation of this file.00001
00008
00009
00010 #import "NMEObjC.h"
00011 #import "NME.h"
00012
00013 @implementation NSData(NME)
00014
00015 + (NSData *)dataWithNME:(char const *)src length:(int)length
00016 fontSize:(int)fontSize format:(char)format
00017 {
00018 NMEText buf, dest;
00019 NMEInt bufSize, destLen;
00020 NMEErr err;
00021 NSData *data;
00022 NMEOutputFormat const *f;
00023 NMEOutputFormat formatDebugNested;
00024
00025 bufSize = 1024 + 2 * length;
00026
00027 tryAgain:
00028 buf = malloc(bufSize);
00029 if (!buf)
00030 return nil;
00031
00032 switch (format)
00033 {
00034 case 'd':
00035 f = &NMEOutputFormatDebug;
00036 break;
00037 case 'D':
00038 formatDebugNested = NMEOutputFormatDebug;
00039 formatDebugNested.sublistInListItem = TRUE;
00040 f = &formatDebugNested;
00041 break;
00042 case 'h':
00043 f = &NMEOutputFormatHTML;
00044 break;
00045 case 'l':
00046 f = &NMEOutputFormatLaTeX;
00047 break;
00048 case 'n':
00049 f = &NMEOutputFormatNME;
00050 break;
00051 case 'r':
00052 f = &NMEOutputFormatRTF;
00053 break;
00054 default:
00055 f = &NMEOutputFormatText;
00056 break;
00057 }
00058
00059 err = NMEProcess(src, length,
00060 buf, bufSize,
00061 kNMEProcessOptDefault, "\n", f, fontSize,
00062 &dest, &destLen, NULL);
00063 if (err == kNMEErrNotEnoughMemory)
00064 if (bufSize < 65536 + 10 * length)
00065 {
00066 free((void *)buf);
00067 bufSize *= 2;
00068 goto tryAgain;
00069 }
00070 else
00071 {
00072 free((void *)buf);
00073 return nil;
00074 }
00075
00076 data = [NSData dataWithBytes:dest length:destLen];
00077 free((void *)buf);
00078 return data;
00079 }
00080
00081 + (NSData *)dataWithNME:(char const *)src length:(int)length
00082 fontSize:(int)fontSize
00083 {
00084 return [NSData dataWithNME:src length:length
00085 fontSize:fontSize format:'r'];
00086 }
00087
00088 + (NSData *)dataWithNMEString:(NSString *)src
00089 fontSize:(int)fontSize format:(char)format;
00090 {
00091 NSData *data = [src dataUsingEncoding:NSUTF8StringEncoding];
00092 return [NSData dataWithNME:[data bytes] length:[data length]
00093 fontSize:fontSize format:'r'];
00094 }
00095
00096 @end