Esempio n. 1
0
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();
    }