static void formatFile( FILE *fp, int width, int offset ) { int ret; para p = { NULL, 0, 0, 0, 0 }; int oldos = 0; int erros = -1; wordlist *list = NULL; expandParagraph( &p, DEF_PARA_LEN ); for( ; ; ) { ret = getParagraph( fp, &p, &list ); if( ret & OUT_OF_MEM ) { if( erros != p.len ) { trimParagraph( &p ); erros = p.len; continue; } else if( p.len == 0 ) { Die( "fmt: out of memory error\n" ); } } if( p.len != 0 ) { if( p.indent <= oldos ) { // keep track of offsets & indents p.indent = oldos; // in case of out of mem. errors p.offset = oldos; } oldos = p.offset; formatParagraph( &p, width, offset, ret & OUT_OF_MEM ); } if( ret & END_LINE ) { // no need to format blank line fputchar( '\n' ); oldos = 0; } resetParagraph( &p ); resetWordlist( list ); if( ret & END_FILE ) { break; } erros = -1; } free( p.words ); // free the paragraph space freeWordlist( list ); // free the text space }
////////////////////////////////////////////////////////////////////////////////////////// // RtfWriter::writeHeader //! Writes RTF header //! //! \param[in] font - Font name //! //! \throw wtl::domain_error - I/O error occurred ////////////////////////////////////////////////////////////////////////////////////////// void writeHeader(const char* font) { // Header writeString("{\\rtf1\\ansi"); // Set codepage + language setCodePage(1250); setDefaultFont(0); setLanguage(2057); // English UK (0x0809 == 2057) // Font table writeString("{\\fonttbl{\\f0\\fswiss\\fcharset0 "); write(font); writeString(";}}\n"); // Colour table writeString("{\\colortbl"); writeString(";"); // Define colour 0 as 'auto-colour' for (COLORREF c : Colours) writeColour(c); writeString("}\n"); // Unknown previous formatting: //\\sa200\\sl276\\slmult1 // // \saN == spacing after // \slN == space between lines // \smult == Line spacing multiple // \pard == reset paragraph formatting // Set view: 0==None, 1==Page Layout view, 2==Outline view, 3==Master Document view, 4==Normal view, 5==Online Layout view writeString("\\viewkind4"); // Set unicode destination (not sure) writeString("\\uc1 "); // Reset paragraph resetParagraph(); }