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 {
00065 if (bufSize < 65536 + 10 * length)
00066 {
00067 free((void *)buf);
00068 bufSize *= 2;
00069 goto tryAgain;
00070 }
00071 else
00072 {
00073 free((void *)buf);
00074 return nil;
00075 }
00076 }
00077
00078 data = [NSData dataWithBytes:dest length:destLen];
00079 free((void *)buf);
00080 return data;
00081 }
00082
00083 + (NSData *)dataWithNME:(char const *)src length:(int)length
00084 fontSize:(int)fontSize
00085 {
00086 return [NSData dataWithNME:src length:length
00087 fontSize:fontSize format:'r'];
00088 }
00089
00090 + (NSData *)dataWithNMEString:(NSString *)src
00091 fontSize:(int)fontSize format:(char)format;
00092 {
00093 NSData *data = [src dataUsingEncoding:NSUTF8StringEncoding];
00094 return [NSData dataWithNME:[data bytes] length:[data length]
00095 fontSize:fontSize format:'r'];
00096 }
00097
00098 @end